我正在 Intellij IDEA 14.1.6 下开发文件管理器,我必须支持USB OTG闪存驱动器。我的文件管理器可以在API<设备上使用USB OTG。 23(棉花糖)。我在声明(1,2,3)中看到了多个引用:
...在您选择在应用程序中定位版本23之前,它不需要完全支持。如果您的目标是22或更低版本,您的应用程序将在安装时请求所有权限,就像在Marshmallow下运行操作系统的任何设备上一样。
我的项目有目标:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22"/>
但Nexus 5(升级到Android 6.0.1)无法看到USB OTG闪存驱动器,与其他一些具有API 19,21,22的设备不同,它们可以非常容易地读写闪存驱动器。
问题是:是否有人检查过此声明? 此声明是仅适用于API 23还是仅适用于预览版(M)? 此声明仅适用于 Android Studio 吗?
编辑:使用Marshmallow将Nexus 5作为以前的API级设备使用USB OTG的唯一方法是使用命令:
adb shell sm set-force-adoptable true
来自终端。
答案 0 :(得分:0)
在Android 6.0+中,用户需要授予应用程序的存储访问权限,否则应用程序无法访问内部或外部存储。
您可以在应用的MainActivity onCreate(Bundle savedInstanceState)方法中执行此操作:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
checkForPermissionsGrantStatus();
比:
private void checkForPermissionsGrantStatus() {
int storagePermissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(storagePermissionCheck == PackageManager.PERMISSION_DENIED)
requestForPermissionAccess(Manifest.permission.WRITE_EXTERNAL_STORAGE, 1);
}
private void requestForPermissionAccess(String permission, int requestCode) {
ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Storage Permission Granted", Toast.LENGTH_SHORT).show();
}
}
每次运行时,您的应用程序都会检查设备是否运行Android 6.0+。如果确实如此,它将检查它是否具有存储许可权。如果是,它将停止在那里显示一个弹出窗口,要求用户授予存储访问权。