繁体   English   中英

运行时权限对话框未显示Android 7.1

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM