[英]Runtime permission dialog is not showing Android 7.1
我需要启动一个服务,它需要READ_PHONE_STATE
权限。我声明了它并动态应用。回调函数已被重写。但是,虚拟机不会弹出请求权限的对话框。
代码如下。
AndroidManifest.xml中:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
动态应用:
requestPermissions(new String[]{Manifest.permission.CALL_PHONE},1);
请帮我。 非常感谢。
使用以下函数检查onCreate()方法中的运行时权限:
checkPermission();
requestPermission();
和功能是:
private boolean checkPermission() {
return ( ContextCompat.checkSelfPermission(getApplicationContext(), READ_PHONE_STATE ) == PackageManager.PERMISSION_GRANTED);
}
private void requestPermission() {
ActivityCompat.requestPermissions(LoginActivity.this, new String[]{READ_PHONE_STATE}, REQUEST_SMS);
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_SMS:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
}else {
Toast.makeText(getApplicationContext(), "Permission Denied, You cannot access and sms", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(READ_PHONE_STATE)) {
showMessageOKCancel("You need to allow access to both the permissions",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{READ_PHONE_STATE},
REQUEST_SMS);
}
}
});
return;
}
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
import static android.Manifest.permission.SEND_SMS; public class CoreActivity extends AppCompatActivity implements OnAccountListener { boolean init_state; AccountApi accountApi; UiHandler uiHandle=new UiHandler(this); @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Message msg=new Message(); msg.what=MsgCode.STATE_LOGIN_START; uiHandle.sendMessage(msg); ActionBar actionBar=getSupportActionBar(); actionBar.hide(); requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},1); // PackageManager pm = getPackageManager(); // boolean permission = (PackageManager.PERMISSION_GRANTED == // pm.checkPermission("android.permission.ACCESS_NETWORK_STATE", "com.example.asus.tl")); // if (permission) { // Log.d("permission","yes"); // }else { // Log.d("permission","no"); // } checkPermission(); requestPermission(); init_state=API.init(this); Log.d("API.init",init_state+""); Log.d("service",isServiceRunning()+""); Thread getAccountThread=new Thread(delayInitApi); getAccountThread.start(); } private boolean isServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if ("com.algebra.sdk.Controller".equals(service.service.getClassName())) { return true; } } return false; } @RequiresApi(api = Build.VERSION_CODES.M) private boolean checkPermission() { return ( this.checkSelfPermission(getApplicationContext(), SEND_SMS ) == PackageManager.PERMISSION_GRANTED); } private int checkSelfPermission(Context applicationContext, String sendSms) { return 1; } private void requestPermission() { ActivityCompat.requestPermissions(CoreActivity.this, new String[]{SEND_SMS}, 1); } public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ }else { Toast.makeText(getApplicationContext(), "Permission Denied, You cannot access and sms", Toast.LENGTH_SHORT).show(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (shouldShowRequestPermissionRationale(SEND_SMS)) { // showMessageOKCancel("You need to allow access to both the permissions", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{SEND_SMS}, 1); } } }; return; } } } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
你应该用
<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" />
代替
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
在您的清单中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.