requestPermissions() 不适用于 API 中的 Manifest.permission.MODIFY_PHONE_STATE 23
requestPermissions() not working for Manifest.permission.MODIFY_PHONE_STATE in API 23
我在实施运行时权限时遇到问题。我通过以下 link 来实现运行时权限:
https://developer.android.com/training/permissions/requesting.html
我只遇到 android.permission.MODIFY_PHONE_STATE" 的问题。我已经测试了以下代码的 CAMERA 权限和代码工作正常的相机权限。
我面临的问题:
- shouldShowRequestPermissionRationale() 返回 false
- requestPermissions() 未授予权限。
等级详情:compileSdkVersion 23,buildToolsVersion "23.0.3",targetSdkVersion 23
清单详细信息:我已添加以下权限
使用权限 android:name="android.permission.MODIFY_PHONE_STATE"
private static final int PERMISSIONS_REQUEST_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int granted = PackageManager.PERMISSION_GRANTED;
int result = ContextCompat.checkSelfPermission(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
if (result == granted) {
Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
}
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ActivityMain.this, "permissions denied", Toast.LENGTH_LONG).show();
boolean res = ActivityCompat.shouldShowRequestPermissionRationale(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
// returning false
if (res) {
new AlertDialog.Builder(ActivityMain.this)
.setMessage("Allow")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(ActivityMain.this,
new String[]{Manifest.permission.MODIFY_PHONE_STATE},
PERMISSIONS_REQUEST_CODE);
}
}).setNegativeButton(android.R.string.cancel, null).show();
} else {
ActivityCompat.requestPermissions(ActivityMain.this,
new String[]{Manifest.permission.MODIFY_PHONE_STATE},
PERMISSIONS_REQUEST_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_CODE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ActivityMain.this,"permissions not granted",Toast.LENGTH_LONG).show();
}
return;
}
}
}
MODIFY_PHONE_STATE是一个系统权限,所以你不能在你的应用程序中访问或使用这个权限。
有 2 种类型的 Android 应用程序:系统和用户
系统应用程序 基本上是随 ROM 预装的应用程序。在标准 Android 用户环境中,用户没有对 /system 分区的写入权限,因此无法直接安装或卸载系统应用程序。
用户应用程序 只是您通过 Google Play 商店安装的所有普通应用程序。这些进入您的 Android phone 的数据分区,这是内部存储器的一部分,可用于用户数据和应用程序。
为了在您的 Android 设备上将应用程序安装为系统应用程序,您的设备必须已获得 root 权限或安装了自定义恢复(或两者)。
我在实施运行时权限时遇到问题。我通过以下 link 来实现运行时权限:
https://developer.android.com/training/permissions/requesting.html
我只遇到 android.permission.MODIFY_PHONE_STATE" 的问题。我已经测试了以下代码的 CAMERA 权限和代码工作正常的相机权限。
我面临的问题:
- shouldShowRequestPermissionRationale() 返回 false
- requestPermissions() 未授予权限。
等级详情:compileSdkVersion 23,buildToolsVersion "23.0.3",targetSdkVersion 23
清单详细信息:我已添加以下权限
使用权限 android:name="android.permission.MODIFY_PHONE_STATE"
private static final int PERMISSIONS_REQUEST_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int granted = PackageManager.PERMISSION_GRANTED;
int result = ContextCompat.checkSelfPermission(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
if (result == granted) {
Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
}
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ActivityMain.this, "permissions denied", Toast.LENGTH_LONG).show();
boolean res = ActivityCompat.shouldShowRequestPermissionRationale(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE);
// returning false
if (res) {
new AlertDialog.Builder(ActivityMain.this)
.setMessage("Allow")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(ActivityMain.this,
new String[]{Manifest.permission.MODIFY_PHONE_STATE},
PERMISSIONS_REQUEST_CODE);
}
}).setNegativeButton(android.R.string.cancel, null).show();
} else {
ActivityCompat.requestPermissions(ActivityMain.this,
new String[]{Manifest.permission.MODIFY_PHONE_STATE},
PERMISSIONS_REQUEST_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_CODE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ActivityMain.this,"permissions not granted",Toast.LENGTH_LONG).show();
}
return;
}
}
}
MODIFY_PHONE_STATE是一个系统权限,所以你不能在你的应用程序中访问或使用这个权限。
有 2 种类型的 Android 应用程序:系统和用户
系统应用程序 基本上是随 ROM 预装的应用程序。在标准 Android 用户环境中,用户没有对 /system 分区的写入权限,因此无法直接安装或卸载系统应用程序。
用户应用程序 只是您通过 Google Play 商店安装的所有普通应用程序。这些进入您的 Android phone 的数据分区,这是内部存储器的一部分,可用于用户数据和应用程序。
为了在您的 Android 设备上将应用程序安装为系统应用程序,您的设备必须已获得 root 权限或安装了自定义恢复(或两者)。