java - 运行时权限不起作用,手动执行
问题描述
我制作了一个使用 2 个模块的 Android 应用程序(目标 SDK 27),一个由我制作,另一个已导入。最后一个模块需要使用 CAMERA 和 EXTERNAL STORAGE(读/写),因此清单文件包含必要的行。
此外,我在运行时检查并询问这些权限,用户可以授予或不授予访问权限。当我进入“应用程序设置”时,CAMERA 和 STORAGE都已打开。一切似乎都很好。
但是,在使用相机拍照或从图库中选择一张照片后,该应用程序会崩溃。
另一方面,如果我在应用程序设置上手动授予这些权限,一切正常!
任何想法?
清单权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
TEST Thread 在 Activity 执行前不断检查权限
private void checkPermissions(){
new Thread(new Runnable() {
@Override
public void run() {
while(!hasStorageAccess()){
requestStoragePermission();
}
while (!hasCameraAccess()) {
requestCameraPermission();
}
init();
}
}).start();
}
运行时权限(在我制作的其他应用上完美运行)
private boolean hasCameraAccess() {
return ContextCompat.checkSelfPermission(ScanActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
}
private void requestCameraPermission() {
ActivityCompat.requestPermissions(ScanActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_USE_CAMERA);
}
private boolean hasStorageAccess() {
return ContextCompat.checkSelfPermission(ScanActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
private void requestStoragePermission() {
ActivityCompat.requestPermissions(ScanActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_USE_STORAGE);
}
解决方案
推荐阅读
- java - 多个模块与每个模块在 gradle 中使用 spring 提供休息服务
- ruby-on-rails - 在我调用 api 创建应用程序后获取“FacebookAds::ClientError(无效参数:不接受服务条款(fbtrace_id:Ch/RdwGB+D3))”
- typescript - Onclick 事件添加了动态创建的按钮在 InnerHTML 中不起作用
- python - 如何将“矩阵”转换为“图像”?
- spring-boot - 如何在 Spring Boot 中外部化 application.yml
- jquery - 获取谷歌地图搜索区域内所有标记的列表 - Markerclusterer v3
- c# - 从数据网格c#wpf中获取int值
- linux - 为什么编译器要添加额外的“sxtw”指令(进一步导致内核恐慌)?
- c# - 管理来宾可执行文件依赖项 - 本地 Service Fabric
- postgresql - 如何缩小一组 Postgres 行的范围,其中的值最接近特定值?