2

我正在Intellij IDEA 14.1.6下开发文件管理器,我必须支持 USB OTG 闪存驱动器。我的文件管理器在 API < 23 (Marshmallow) 的设备上与 USB OTG 配合得很好。我已经看到多个引用语句(123):

...在您选择应用程序中的版本 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

编辑:获得 Nexus 5 with Marshmallow 的唯一方法是使用 USB OTG 作为以前的 API 级别设备是使用命令:

adb shell sm set-force-adoptable true

从终端。

4

1 回答 1

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+。如果确实如此,它将检查它是否具有存储权限。如果是,它将停在那里,否则会显示一个弹出窗口,要求用户授予存储访问权限。

截屏 : 显示存储权限请求弹出窗口的屏幕截图

于 2016-01-18T13:07:36.953 回答