2017-07-25 84 views
-1

我正在写一个应用程序,将通过短信发送消息到输入的号码。但是,当我尝试发送消息时,即使在我的清单中拥有此权限,我也会收到“用户10074没有android.permission.SEND_SMS”错误。权限发送短信android

 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" /> 
+1

你需要添加运行许可 – akhilesh0707

+0

检查可以运行时间许可,如果您的目标SDK版本是'24'或以上 – Piyush

回答

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

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