【问题标题】:Permission send sms android权限发送短信android
【发布时间】:2017-07-25 11:06:39
【问题描述】:

我正在编写一个应用程序,它将通过 SMS 向输入的号码发送消息。但是,当我尝试发送消息时,我收到“用户 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" />

【问题讨论】:

  • 需要添加运行时权限
  • 如果您的目标sdk版本为24或以上,请检查它可能是运行时权限

标签: android android-permissions


【解决方案1】:

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

从您的点击监听器中调用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);
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2014-08-07
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多