打开应用权限设置

关于Android M的细化权限

如果用户拒绝两次许可请求,

或者用户标记“再也不问”。

我如何打开/直接链接到应用程序的权限设置?

Solutions Collecting From Web of "打开应用权限设置"

我们假设在AndroidManifest.xml中有:

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

然后,如下面的示例活动,我们可以检查现有/授予的权限,然后将用户发送到应用程序设置,如果我们缺less任何权限:

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

我只是在Nexus 6 / AndroidOS 6(棉花糖)上试过。

使用此代码启动您的应用程序权限设置页面

 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);