权限对话框未显示 Android 6.0.1(棉花糖)

Permission Dialog not Showing Up Android 6.0.1 (Marshmallow)

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" />

我也在清单文件中添加了权限。接收启动完成权限的相同场景。但是,Call_Phone 权限工作得很好。无法确定问题。 Android Studio TargetAPI 23 和 MinAPI 为 15。

如果您在您的应用程序中采取了一些DANGEROUS PERMISSION,这对用户的观点至关重要,可能会导致隐私问题,例如(发送短信,阅读联系人)然后in marshmallow仅在 MANIFEST 中获得许可是不够的。只有当应用程序要执行特定功能时,您才需要在 运行 时间内(在 JAVA 内)获得用户的许可。

运行时间的申请权限仅在androidOS6(棉花糖)及以上有效。

向 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();

    }
}

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

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

输出会像

仅当您的设备为 运行 Andorid OS 6.0 或更高版本时才会显示权限对话框,否则不会显示任何对话框,但在以前的版本中获得了没有对话框的权限。

我得到了我的解决方案。我实际上在应用程序内而不是在清单中的应用程序外编写了权限。抱歉 :P