允许 Dialog 不显示了 Android 6.0.1 (棉花糖)

标签: Java Android
发布时间: 2017/3/19 14:02:56
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
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 短信管理器上授予权限,而权限通过代码 Dialog 框不显示。

<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 权限完美。不能确定的问题。 Androidstudio TargetAPI 23 和 MinAPI 是 15。

解决方法 1:

如果你已经采取了一些 DANGEROUS PERMISSION 在你 application 这对用户的角度来看,可能会导致像隐私问题至关重要 (发送短信,读 CONTACTS ) 然后在棉花糖只以权限 MANIFEST 永远不够。你也要把用户的权限运行 time (在 JAVA) 只有当 application 要执行特定的功能。

Application在运行权限 time 只会在工作 android OS 6 (棉花糖) 及以上。

将权限添加到 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();

    }
}

提示用户授予或拒绝该权限,您可以编写以下代码,它将自动显示 dialog 向用户和给他/她的选项以允许或拒绝.请注明,这 dialog 是系统定义和不可编辑。

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

输出将像

enter image description here

赞助商