Android读取\u外部\u存储权限是否正常工作?
我正在制作一个应用程序,加载OBJ和MTL文件,然后在屏幕上显示,供用户旋转。我正在运行安卓6.0.1的手机上测试。 OBJ和MTL文件位于手机上名为“models”的目录中。要在应用程序中选择文件,我需要打开一个菜单并单击“打开””。但是如果没有Android读取\u外部\u存储权限是否正常工作?,android,android-studio,Android,Android Studio,我正在制作一个应用程序,加载OBJ和MTL文件,然后在屏幕上显示,供用户旋转。我正在运行安卓6.0.1的手机上测试。 OBJ和MTL文件位于手机上名为“models”的目录中。要在应用程序中选择文件,我需要打开一个菜单并单击“打开””。但是如果没有READ\u EXTERNAL\u STORAGE权限,应用程序就会崩溃。我在AndroidManifest.xml中添加了权限,并再次测试了应用程序。这一次,我可以单击“打开””并查看所有文件应位于的列表视图,但我看不到任何文件。当点击“打开”时,应
READ\u EXTERNAL\u STORAGE
权限,应用程序就会崩溃。我在AndroidManifest.xml中添加了权限,并再次测试了应用程序。这一次,我可以单击“打开””并查看所有文件应位于的列表视图,但我看不到任何文件。当点击“打开”时,应用程序也不会崩溃。logcat没有显示任何错误
在寻找问题的答案时,我遇到了以下问题:
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the contacts
}
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant that should be quite unique
return;
}
狙击源:
它是否需要批准权限才能实际读取外部存储并在应用程序中显示文件?这是我需要添加到代码中的内容吗?
我似乎无法解决这个看似简单的“错误”,即使在寻找答案之后
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="[REDACTED]"
android:versionCode="1"
android:versionName="16150.8">
<uses-sdk android:minSdkVersion="7"
android:targetSdkVersion="23"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="23" />
<application
[REDACTED]
</application>
</manifest>
1) 从Settings->App->[你的App name]中清除你的数据
2) 从权限行中删除android:maxSdkVersion
3) 按代码检查请求权限
if (Build.VERSION.SDK_INT >= Build.Build.VERSION_CODES.M) {
checkPermissions(Utils.PERMISSION_WRITE_EXTERNAL_STORAGE);
}else{/*open regulary*/}
对于大于23的api,需要添加运行时权限
1) 检查sdk的最低版本应大于15
2) sdk的最大版本应大于23或23
3) 每次访问外部存储或其他任何内容时,都需要调用运行时权限
4) 有关运行时权限,请参阅此网站
要在应用程序中选择文件,我需要打开菜单并单击“打开”。但是如果没有读取外部存储权限,应用程序将崩溃。
。如果是你的应用程序,那么告诉我们如果用户单击Open,你会怎么做。我们怎么知道?如果捕捉到异常/错误,应用程序不必崩溃。是否需要批准权限才能实际读取外部存储a
。已请求应用程序的用户授予该权限。因此,用户应该单击Yes。看到对话框出现了吗?我们仍然看不到用户单击Open时执行的代码。所以我们不知道会发生什么。在Android 6和更高版本下,您确实需要添加代码,让用户在清单中授予您请求的权限。只有打开的代码。请编辑您的帖子,因为我不想搜索打开的代码。只发布与您的问题相关的代码。谢谢您的回答。这对我解决问题很有帮助。如果我有足够的声誉,我会投票支持你的回答。再次感谢你的帮助!