对于具有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_CODE
以1
为例。
@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.
}
}
}