在Android 6.0中请求权限(API级别23)

时间:2016-09-05 04:21:47

标签: android

在应用程序运行Android 6.0或更高版本时是否有必要请求它所需的每个危险权限?我已请求以下危险权限,但只有四个对话框。

预先提交

 public static final String[] PERMISSIONS = new String[]{
        android.Manifest.permission.CALL_PHONE,
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
        android.Manifest.permission.READ_EXTERNAL_STORAGE,
        android.Manifest.permission.ACCESS_COARSE_LOCATION,
        android.Manifest.permission.ACCESS_FINE_LOCATION,
        android.Manifest.permission.READ_PHONE_STATE,
        android.Manifest.permission.WRITE_SETTINGS,
        android.Manifest.permission.GET_ACCOUNTS,
        android.Manifest.permission.CAMERA
};

对话框

1.允许应用程序拨打和管理电话?

2.允许该应用访问您设备上的照片,媒体和文件?

3.允许该应用访问此设备的位置?

4.允许应用访问您的联系人?

我无法获得android.Manifest.permission.READ_PHONE_STATE等权限,         android.Manifest.permission.WRITE_SETTINGS,         android.Manifest.permission.GET_ACCOUNTS,         android.Manifest.permission.CAMERA,既不是代码也不是系统设置。

1 个答案:

答案 0 :(得分:0)

特殊权限

  

有一些权限不像普通人那样行事   危险的权限。 WRITE_SETTINGS是   特别敏感,所以大多数应用程序不应该使用它们。如果一个应用程序   需要其中一个权限,它必须在中声明权限   显示,并发送请求用户授权的意图。该   系统通过显示详细的管理屏幕来响应意图   给用户。

<强>演示

public class MainActivity extends AppCompatActivity {

    Context context;
    TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        textView = (TextView) findViewById(R.id.foodName);
        textView.setText(getResources().getText(R.string.txt_name));
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                boolean result = true;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    result = Settings.System.canWrite(context);
                    Log.d("TAG", "Can Write Settings: " + result);
                    if (result) {
                        Toast.makeText(context, "Write allowed :-)", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(context, "Write not allowed :-(", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                        intent.setData(Uri.parse("package:" + context.getPackageName()));
                        startActivity(intent);
                    }
                }
            }
        });
    }
}