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" />
我也在Manifest文件中添加了权限。接收引导完成权限的相同方案。但是,Call_Phone权限完全正常。无法识别问题。 Android Studio TargetAPI 23和MinAPI为15。
答案 0 :(得分:2)
如果你的应用程序中有一些DANGEROUS PERMISSION
对用户的观点至关重要,这可能导致隐私问题,如发送短信,阅读联系人,那么在marshmallow 中只能获得MANIFEST永远不够。只有在应用程序要执行特定功能时,您才必须在运行时(在JAVA中)获得用户的许可。
运行时的应用程序权限仅适用于Android OS 6(Marshmallow)及以上版本。
向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();
}
}
要提示用户授予或拒绝权限,您可以编写以下代码,它会自动向用户显示一个对话框,并允许他/她选择允许或拒绝。请标记此对话框是系统定义且不可编辑的。
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
输出就像
答案 1 :(得分:0)
权限对话框仅在您的设备正在运行Andorid OS 6.0
或更高版本时显示,否则将不会显示任何对话框,但在不同版本的情况下获得了对话权限。
答案 2 :(得分:0)
我得到了我的解决方案。我实际上在应用程序中编写了Permission,而不是在Manifest中的应用程序之外。对不起:P