Nexus 5上的USB OTG闪存驱动器,Android 6.0,针对API 23

时间:2016-01-20 10:16:42

标签: android android-6.0-marshmallow android-permissions usb-otg

我正在开发一个支持USB OTG闪存驱动器的文件管理器。我的文件管理器可以在API<设备上使用USB OTG。 23(Marshmallow)我将使用以下代码实现新的Android 6.0运行时权限:

@Override
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);
    ...
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
        checkForPermissionGrantStatus();
        if (!Settings.System.canWrite(this))
            askWriteSettingsPermission();
    }
    ...
}

@TargetApi(Build.VERSION_CODES.M)
private void askWriteSettingsPermission(){
    new AlertDialog.Builder(this)
            .setMessage(R.string.write_settings_permission)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    try {
                        startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).show();
}

private void checkForPermissionGrantStatus() {
    String[] dangerousPermissionsArray = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE};
    List<String> notIssuedPermissions = new ArrayList<>();
    for (String permission : dangerousPermissionsArray) {
        if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED)
            notIssuedPermissions.add(permission);
    }
    if (notIssuedPermissions.size() > 0)
        ActivityCompat.requestPermissions(this, notIssuedPermissions.toArray(new String[notIssuedPermissions.size()]), 95);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 95:
            for (int grantResult : grantResults)
                if (grantResult != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "Not all permissions obtained.", Toast.LENGTH_SHORT).show();
                    return;
                }
            Toast.makeText(this, "All permissions obtained.", Toast.LENGTH_SHORT).show();
            break;
    }
}

我的项目有目标

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>

这是我在Manifest.xml中与以前的应用程序版本相比所做的唯一更改,它可以在具有API&lt;的设备上与USB OTG一起使用。 23。

我接受两个系统对话框和一个在应用程序启动后出现的AlertDialog,但我的USB OTG闪存驱动器仍然无法读取。问题是:我是否需要实施一些额外步骤以强制在OTx 5设备上的Android 6.0.1下读取USB OTG闪存驱动器?

P.S。我不使用Android Studio和Gradle - 这是不是很糟糕?

0 个答案:

没有答案