Android 的权限处理建议
下面分享一些问我在APP上开发时处理权限的一些代码,希望能帮到大家:
Android判断应用是否拥有某种权限
public static boolean hasExternalStoragePermission(Context context){
int perm = context.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE");
return perm == PackageManager.PERMISSION_GRANTED;
}
------------------我是分割线----------------------------------------------------
权限判断 加 请求权限 6.0之后都要使用 动态请求权限
RXJAVA2的写法
导包
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
RxPermissions rxPermissions=new RxPermissions(this);
rxPermissions.request(
anifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,Manifest.permission.INTERNET)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean){
//申请的权限全部允许
Toast.makeText(B_Activity.this, "允许了权限!", Toast.LENGTH_SHORT).show();
}else{
//只要有一个权限被拒绝,就会执行
Toast.makeText(B_Activity.this, "未授权权限,部分功能不能使用", Toast.LENGTH_SHORT).show();
}
}
});
------------------我是分割线----------------------------------------------------
申请权限普通写法,不用导其他网络包
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/msword"); //打开文件类型 Word文档
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, 1);
------------------我是分割线----------------------------------------------------
7.0打开文件的兼容处理 例子如下 打开PPT文件 表格 视频貌似没这个问题撒……
首先在清单文件最底下加这玩意
<!--7.0打开文件专用兼容权限 给一个私有文件权限-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.jph.takephoto.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.pport.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
然后在创建一个xml文件夹
创建一个file_paths.xml
里面写上
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path path="" name="camera_photos" />
</paths>
</resources>
切记一五一十照着写吧 引用的 file_paths这个可以自定义 对的上就可以啊
用法 在这里 主要!
/**
* 打开文件
*
* @param file 兼容方面好像有问题
* 解决
*/
public static void openFile(File file, Context context) {
Intent intent = new Intent();
/**核心是这两句 下面的路径 替换成这个*/
Uri imageUri = FileProvider.getUriForFile(context, "com.jph.takephoto.fileprovider", file);//通过FileProvider创建一个content类型的Uri
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
//设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
//获取文件file的MIME类型
String type = getMIMEType(file);
//设置intent的data和Type属性。 这个适配有问题
// intent.setDataAndType(/*uri*/Uri.fromFile(file), type); // 吧里面的url换掉
intent.setDataAndType(imageUri, type); //7.0后要用这样的写法了
//跳转
LogUtil.e("msg", "to test0---------------------");
context.startActivity(intent);
Preference.getInstance().putBoolean("start_train", true);
LogUtil.e("msg", "to test1---------------------");
}
------------------我是分割线----------------------------------------------------
<!-- 新增加自动更新安装权限 8.0后 自动更新需要这个 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
------------------我是分割线----------------------------------------------------
现在很多操作都和权限挂钩,基本所有操作前都要判断取一下,否则无法继续,操作的时候
要留意了