Java 权限对话框未显示Android 6.0.1(棉花糖)
以下是授予权限后通过SMS管理器发送SMS的代码,但未显示“权限”对话框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);
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();
}
}