权限对话框未显示 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
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