Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 权限对话框未显示Android 6.0.1(棉花糖)_Java_Android_Permissions_Android 6.0 Marshmallow_Smsmanager - Fatal编程技术网

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

Java 权限对话框未显示Android 6.0.1(棉花糖),java,android,permissions,android-6.0-marshmallow,smsmanager,Java,Android,Permissions,Android 6.0 Marshmallow,Smsmanager,以下是授予权限后通过SMS管理器发送SMS的代码,但未显示“权限”对话框 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) { try { Cursor temp = db.rawQuery("Select name from profile;", null);

以下是授予权限后通过SMS管理器发送SMS的代码,但未显示“权限”对话框

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

我也在清单文件中添加了权限。接收引导完成权限的情况与此相同。但是,Call_Phone权限可以完美地工作。无法识别问题。
Android Studio TargetAPI为23,MinAPI为15。

如果您在应用程序中获得了一些对用户观点至关重要的
危险权限,这可能会导致隐私问题,例如(发送短信、阅读联系人),那么在棉花糖中仅获得清单中的权限是不够的。只有当应用程序要执行特定功能时,您才必须在运行时(JAVA中)获得用户的权限

运行时的应用程序权限仅适用于android OS 6(棉花糖)及以上版本

向Manifest.java添加权限

<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" />
要提示用户授予或拒绝权限,您可以编写以下代码,它将自动向用户显示一个对话框,并为用户提供允许或拒绝的选项。请标记此对话框是系统定义的且不可编辑

requestPermissions(新字符串[]{Manifest.permission.SEND\u SMS},permission\u REQUEST)

输出将类似于


仅当您的设备运行的是
和ID OS 6.0
或更高版本时,权限对话框才会显示。其他任何对话框都不会显示,但在perivous版本中获得了无对话框的权限。

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

让我知道这是否适用于您。因为它在我的应用程序中有效。这到底是如何回答问题的?OP正在询问有关棉花糖权限对话框的信息。OP在标题中表示他们在6.0.1上。@MikeM。目标版本SDK在build.gradle中设置为23。只有“通话权限”对话框显示,其余的则没有显示。是的,我刚刚注意到您提到了
Call\u Phone
可以工作。你能发短信吗?我是说,你真的得到许可了吗?顺便说一句,
RECEIVE\u BOOT\u COMPLETED
不是一个危险的权限,因此不需要在运行时请求它。不,我不能发送短信。控件进入else部分,只是继续,没有显示。@SoumyadeepGhosh您在哪个标记中添加了权限?哪个类是
TrustedContacts
扩展的?很好,但是您可以投票还是接受我的答案
<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();

    }
}