Open app permission settings

匿名 (未验证) 提交于 2019-12-03 02:45:02

问题:

Regarding granular permissions on Android M.

In case the user denies twice the request for a permission,

Or that the user mark the "Never ask again".

How can I open/link directly to the app permissions settings?

回答1:

Let's assume in AndroidManifest.xml you have:

<uses-permission android:name="android.permission.WRITE_CALENDAR"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <!-- ETC. --> 

Then, as in the below sample activity, we can check for existing/granted permissions and then send the user to app settings if we're missing any permission:

package com.example.permissions.myapplication;  import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.widget.Toast;  public class MainActivity extends AppCompatActivity {      private static final int REQUEST_APP_SETTINGS = 168;      private static final String[] requiredPermissions = new String[]{             Manifest.permission.WRITE_CALENDAR,             Manifest.permission.WRITE_CONTACTS             /* ETC.. */     };      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         /* All version with SDK_INT < 22 grant permissions on install time. */         if (Build.VERSION.SDK_INT > 22 && !hasPermissions(requiredPermissions)) {             Toast.makeText(this, "Please grant all permissions", Toast.LENGTH_LONG).show();             goToSettings();         }     }      private void goToSettings() {         Intent myAppSettings = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + getPackageName()));         myAppSettings.addCategory(Intent.CATEGORY_DEFAULT);         myAppSettings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);         startActivityForResult(myAppSettings, REQUEST_APP_SETTINGS);     }      public boolean hasPermissions(@NonNull String... permissions) {         for (String permission : permissions)             if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(permission))                 return false;         return true;     }      @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         if (requestCode == REQUEST_APP_SETTINGS) {             if (hasPermissions(requiredPermissions)) {                 Toast.makeText(this, "All permissions granted!", Toast.LENGTH_SHORT).show();             } else {                 Toast.makeText(this, "Permissions not granted.", Toast.LENGTH_LONG).show();             }         }         super.onActivityResult(requestCode, resultCode, data);     } } 

I just tried it on Nexus 6 / AndroidOS 6 (Marshmallow).



回答2:

use this code for launch your app permission setting page

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,             Uri.parse("package:" + getPackageName()));     intent.addCategory(Intent.CATEGORY_DEFAULT);     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);     startActivity(intent); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!