授予外部存储权限,而无需重新启动应用程序



对于具有API 23或更高版本的Android设备,我如何在不重新启动应用程序的情况下授予外部存储权限(就像用户的音乐库在单个会话中上传到Google Play音乐)?我知道这个问题已经在这里已经多次解决了,但是到目前为止,我还没有找到任何运气。

这是我的清单文件中的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

主动脉:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // API 23
        if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            return; // Included here to prevent the app from crashing.
        }
    }
    /**
     * CODE HERE FOR INSTANTIATIONS AND SUCH.
     */
}

...因为到目前为止,我需要重新启动该应用程序,以便在>接受初始弹出的权限之后通过(以及MainAttivity的实例化等)

感谢一堆。

如建议的@commonsware,您可以将所有执行 bestantiations等的代码放在诸如instantiateMyObjects()之类的方法中,并在onCreate()中调用该代码,例如

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // API 23
        if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_CODE);
            // Define the constant MY_PERMISSION_CODE.
            return; // Included here to prevent the app from crashing.
        }
    }
    instantiateMyObjects();
}

,当用户接受/拒绝您的权限请求时,请调用onRequestPermissionsResult()。不要忘记定义MY_PERMISSION_CODE1为例。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_PERMISSION_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Now you can instantiate your objects.
            instantiateMyObjects();
        } else {
            // User denied it.
        }
    }
}

相关内容

最新更新