打开应用权限设置

关于Android M的细化权限

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

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

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

  • 如何通过Android SDK获得root权限?
  • Android应用可以在运行时请求附加权限吗?
  • 有没有办法以编程方式提出许可?
  • 权限仅授予Manifest中的系统应用程序
  • Android NDK限制?
  • Android:adb:将文件复制到/ system(权限被拒绝)
  • ACCESS_FINE_LOCATION AndroidManifest权限未被授予
  • 使用NetworkStatsManager获取移动数据使用历史记录
  • 让我们假设你在AndroidManifest.xml中有:

        

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

     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(Marshmallow)。

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

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