权限对话框未显示Android 6.0.1(Marshmallow)

时间:2016-07-26 06:34:19

标签: java android permissions android-6.0-marshmallow smsmanager

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) {
        try {
            Cursor temp = db.rawQuery("Select name from profile;", null);
            temp.moveToFirst();
            Toast.makeText(TrustedContacts.this, ""+c.getString(2), Toast.LENGTH_SHORT).show();
            (SmsManager.getDefault()).sendTextMessage("0"+c.getString(2), null, "Automated SMS by Medical Alert App by " + temp.getString(0), null, null);
            Toast.makeText(TrustedContacts.this, "SMS Sent!", Toast.LENGTH_SHORT).show();
        }
        catch (Exception e)
        {
            Toast.makeText(TrustedContacts.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    } else
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 1);

以下是在许可授予时通过SMS管理器发送SMS的代码,但是没有显示权限对话框。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.SEND_SMS"/>
 <uses-permission android:name="android.permission.CALL_PHONE" />

我也在Manifest文件中添加了权限。接收引导完成权限的相同方案。但是,Call_Phone权限完全正常。无法识别问题。 Android Studio TargetAPI 23和MinAPI为15。

3 个答案:

答案 0 :(得分:2)

如果你的应用程序中有一些DANGEROUS PERMISSION对用户的观点至关重要,这可能导致隐私问题,如发送短信,阅读联系人,那么在marshmallow 中只能获得MANIFEST永远不够。只有在应用程序要执行特定功能时,您才必须在运行时(在JAVA中)获得用户的许可。

运行时的应用程序权限仅适用于Android OS 6(Marshmallow)及以上版本。

向Manifest.java添加权限

<uses-permission android:name="android.permission.SEND_SMS" />

试试我的代码

private static final int PERMISSION_REQUEST = 100;

//this is the onclick listener of send button
public void send(View view) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
            if (shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS)) {
                Snackbar.make(findViewById(R.id.rl), "You need to grant SEND SMS permission to send sms",
                        Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
                    }
                }).show();
            } else {
                requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
            }
        } else {
            sendSMS();
        }
    } else {
        sendSMS();
    }
}

private void sendSMS() {
    String phoneNumber = "1234";
    String msg="hello, this is a text message";
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, msg, null, null);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

        Snackbar.make(findViewById(R.id.rl), "Permission Granted",
                Snackbar.LENGTH_LONG).show();
        sendSMS();

    } else {

        Snackbar.make(findViewById(R.id.rl), "Permission denied",
                Snackbar.LENGTH_LONG).show();

    }
}

要提示用户授予或拒绝权限,您可以编写以下代码,它会自动向用户显示一个对话框,并允许他/她选择允许或拒绝。请标记此对话框是系统定义且不可编辑的。

requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);

输出就像

enter image description here

答案 1 :(得分:0)

权限对话框仅在您的设备正在运行Andorid OS 6.0或更高版本时显示,否则将不会显示任何对话框,但在不同版本的情况下获得了对话权限。

答案 2 :(得分:0)

我得到了我的解决方案。我实际上在应用程序中编写了Permission,而不是在Manifest中的应用程序之外。对不起:P