授予外部存储权限,而无需重新启动应用程序(Granting external storage permissions without restarting the app)

系统教程 行业动态 更新时间:2024-06-14 16:55:57
授予外部存储权限,而无需重新启动应用程序(Granting external storage permissions without restarting the app)

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

以下是我的清单文件中的权限:

<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. */ }

...因为截至目前, 接受初始弹出窗口的权限 ,我需要重新启动应用程序以获取权限(以及MainActivity的实例化等)。

谢谢你们。

For Android devices with API 23 or higher, how could I grant external storage permissions without restarting the app (kind of like the user's music library being uploaded to Google Play Music within a single session)? I know this issue has been addressed several times here in SO, but I'm not finding any luck so far.

Here are the permissions in my manifest file:

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

MainActivity:

@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. */ }

... Because as of now, I'd need to restart the app for the permissions to go through (and MainActivity's instantiations and such) after accepting the permissions from the initial pop-up.

Thanks a bunch.

最满意答案

正如@CommonsWare建议的那样,您可以将所有执行INSTANTIATIONS和SUCH的代码放在像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. } } }

As @CommonsWare suggested, you can put all your code which does INSTANTIATIONS AND SUCH in a method like instantiateMyObjects() and call that in the onCreate() like

@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(); }

And when user accepts/denies your permission request onRequestPermissionsResult() is called. Don't forget to define MY_PERMISSION_CODE take it as 1 for example.

@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. } } }

更多推荐

权限,permissions,app,permission,READ_EXTERNAL_STORAGE,电脑培训,计算机培训,IT培训"/>

本文发布于:2023-04-10 11:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/53c1010edaa73b73eaa0df7b1bb38cb3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:重新启动   应用程序   权限   Granting   external

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!