是的,在安卓M版本中权限有所改变。现在权限是在运行时请求,而不是之前的安装时。
您可以查看文档here
这个版本引入了一种新的权限模型,用户现在可以直接在运行时管理应用程序的权限。这种模型使用户可以更好地查看和控制权限,同时简化了应用程序开发人员的安装和自动更新过程。用户可以为已安装的应用程序单独授予权限或撤销权限。
对于您的目标为Android 6.0(API级别23)或更高版本的应用程序,请确保在运行时检查并请求权限。要确定应用程序是否被授予权限,请调用新的checkSelfPermission()方法。要请求权限,请调用新的requestPermissions()方法。即使您的应用程序没有针对Android 6.0(API级别23),您也应该在新的权限模型下测试您的应用程序。
有关在您的应用程序中支持新权限模型的详细信息,请参见Working with System Permissions。有关如何评估对应用程序的影响的提示,请参见Permissions Best Practices。
要检查权限,您必须像这样检查,来自github
public class MainActivity extends SampleActivityBase
implements ActivityCompat.OnRequestPermissionsResultCallback {
public static final String TAG = "MainActivity";
private static final int REQUEST_CAMERA = 0;
private boolean mLogShown;
private View mLayout;
public void showCamera(View view) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestCameraPermission();
} else {
showCameraPreview();
}
}
private void requestCameraPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
Snackbar.make(mLayout, R.string.permission_camera_rationale,
Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA);
}
})
.show();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA);
}
}
private void showCameraPreview() {
getSupportFragmentManager().beginTransaction()
.replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
.addToBackStack("contacts")
.commit();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Snackbar.make(mLayout, R.string.permision_available_camera,
Snackbar.LENGTH_SHORT).show();
} else {
Snackbar.make(mLayout, R.string.permissions_not_granted,
Snackbar.LENGTH_SHORT).show();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLayout = findViewById(R.id.sample_main_layout);
if (savedInstanceState == null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
RuntimePermissionsFragment fragment = new RuntimePermissionsFragment();
transaction.replace(R.id.sample_content_fragment, fragment);
transaction.commit();
}
}
}