权限发送短信android

时间:2017-07-25 11:06:40

标签: android android-permissions

我正在编写一个应用程序,它将通过短信向输入的号码发送消息。但是,当我尝试发送消息时,我得到的错误是"用户10074没有android.permission.SEND_SMS"即使我在我的清单中有这个许可。

      try {


                SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage("5554", null, "hello", null, null);
              //  smsManager.sendTextMessage(number,null,matn,null,null);

                Toast.makeText(Sms.this, "OK", Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(Sms.this, "Error"+e, Toast.LENGTH_LONG).show();       
            }
        }
    });

和清单中的代码

 <uses-permission android:name="android.permission.SEND_SMS" />

2 个答案:

答案 0 :(得分:0)

Android 6.0(API级别23)开始,用户在应用运行时向应用授予权限,而不是在安装应用时授予权限。

尝试此操作以询问运行时权限

requestSmsPermission();

private void requestSmsPermission() {
    String permission = Manifest.permission.READ_SMS;
    int grant = ContextCompat.checkSelfPermission(this, permission);
    if (grant != PackageManager.PERMISSION_GRANTED) {
        String[] permission_list = new String[1];
        permission_list[0] = permission;
        ActivityCompat.requestPermissions(this, permission_list, 1);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                                            Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();


        } else {
            Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
        }
    }

}

答案 1 :(得分:0)

请在运行时权限下尝试以下代码。

从您的点击监听器

中拨打checkAndroidVersion("5554");
public void checkAndroidVersion(String mobile){
        this.mobile= mobile;
        if (Build.VERSION.SDK_INT >= 23) {
            int checkCallPhonePermission = ContextCompat.checkSelfPermission(RegistrationActivity.this,Manifest.permission.SEND_SMS);
            if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(RegistrationActivity.this,new String[]{Manifest.permission.SEND_SMS},SEND_SMS);
                return;
            }else{
                sendSms(mobile);
            }
        } else {
            sendSms(mobile);
        }
    }

 private void sendSms(String mobileNo){
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(mobileNo, null, "hello", null, null);
        //  smsManager.sendTextMessage(number,null,matn,null,null);

        Toast.makeText(Sms.this, "OK", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(Sms.this, "Error"+e, Toast.LENGTH_LONG).show();
    }
}

同时覆盖onRequestPermissionsResult方法

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case SEND_SMS:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                sendSms(mobile);
            } else {
                Toast.makeText(Sms.this, "SEND_SMS Denied", Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}