2017-02-05 7 views
1

Я хочу отправить данные SIM через sms, я использую этот код (данный ниже), но он не работает (смс не отправляется), я не получаю никаких ошибок или исключений. Пожалуйста, расскажите, в чем проблема?SMS не отправляется

Код:

SmsManager smsManager = SmsManager.getDefault(); 

String simDetails = "Your device's SIM Details Are:\n"+"\nDevice ID: "+telephony.getDeviceId()+"\nSubscriber ID: "+telephony.getSubscriberId() 
       +"\nSIM Serial Number: "+telephony.getSimSerialNumber()+"\nNetwork Operator: "+telephony.getNetworkOperator()+"\nNetwork Operator Name: "+telephony.getNetworkOperatorName() 
       +"\nNetwork Country: "+telephony.getNetworkCountryIso()+"\nSIM Country: "+telephony.getSimCountryIso()+"\nSIM Operator: "+telephony.getSimOperator()+"\nSIM Operator Name: "+telephony.getSimOperatorName() 
       +"\nSoftware Version: "+telephony.getDeviceSoftwareVersion()+"\nGroup Id Level-1: "+telephony.getGroupIdLevel1()+"\nMMS UAP: "+telephony.getMmsUAProfUrl()+"\nMMS User Agent: "+telephony.getMmsUserAgent() 
       +"\nVoice Mail Tag: "+telephony.getVoiceMailAlphaTag()+"\nVoice Mail Number: "+telephony.getVoiceMailNumber()+"\nLine-1 Number: "+telephony.getLine1Number()+"SIM Location: "+telephony.getCellLocation(); 

smsManager.sendTextMessage("receiver's number", null, simDetails, null, null); 
+1

При условии, что у вас есть необходимое разрешение, и вы не игнорируете пойманное исключение где-то, это похоже на вашу проблему что текст, который вы отправляете, слишком длинный для 'sendTextMessage()'. Вам нужно разбить его и использовать 'sendMultipartTextMessage()'. –

ответ

0

Убедитесь, что вы прочитали и отправить разрешения SMS (Зефир> =)

Manifest.permission.RECEIVE_SMS 
ActivityCompat.checkSelfPermission(context,Manifest.permission.RECEIVE_SMS); 
0

Вы включили эти разрешения?

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

и обеспечить, чтобы проверить их устройства выше Android M:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (context.checkSelfPermission(Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) { 
      //All Permissions are granted 
      return true; 
     } else { 
      ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.SEND_SMS}, YOURPERMISSIONRESULTCODEINT); 
      //permissions are not granted so this check has failed 
      return false; 
     } 
    } 
    //The device is <Android M and so manifest declarations should be enough 
    return true; 
} 

Повторите тот или добавить отдельную проверку для каждого разрешения в строковом массиве (который сделал бы группы разрешений).

Для сетевого менеджера:

LocationManager locationManager = (LocationManager) context 
      .getSystemService(context.LOCATION_SERVICE); 
// getting network status 
boolean isNetworkEnabled = locationManager 
      .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

Несколько SMS деталей:

String SENT = "SMS_SENT"; 
String DELIVERED = "SMS_DELIVERED"; 
final SmsManager smsManager = SmsManager.getDefault(); 
//Allows you to detect when an SMS has been sent via an application wide broadcast 
final PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, 
       new Intent(SENT), 0); 
//Same as above but is instead when it is delivered 
final PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, 
       new Intent(DELIVERED), 0); 

Затем зарегистрировать вещательный приемник для после того, как SMS было отправлено или во время его отправки:

context.registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
        case Activity.RESULT_OK: 
         Toast.makeText(context, "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
         Toast.makeText(context, "Generic failure", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NO_SERVICE: 
         Toast.makeText(context, "No service", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NULL_PDU: 
         Toast.makeText(context, "Null PDU", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_RADIO_OFF: 
         Toast.makeText(context, "Radio off", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     //---when the SMS has been delivered else this code won't run--- 
     context.registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
        case Activity.RESULT_OK: 
         Toast.makeText(context, "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(context, "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 
     //Then send your message 
     smsManager.sendTextMessage("phoneNumber", null, "Message", sentPI, deliveredPI); 

    }