2016-06-14 1 views
0

Я разрабатываю приложение, которое будет реагировать при получении текстового сообщения. Код, с которым я столкнулся с моим приложением, когда получено текстовое сообщение, но из-за необходимости установки приложения на моем собственном устройстве, я не могу получить отчеты о сбоях, чтобы идентифицировать проблему во время сбоя.Ошибка приложения с sms-слушателем

В коде отсутствуют ошибки перед его построением с использованием андроид-студий.

public class ReceiveTextMessage extends BroadcastReceiver{ 

    private SharedPreferences preferences; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for(int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

Может кто-нибудь дать мне ключ, почему авария может произойти или в любом случае я мог бы найти отчет об ошибке.

Я редактировал мой код разными способами, давая тот же результат.

+0

зарегистрирован в манифесте? Вы дали разрешения? вы запросили разрешения во время выполнения? Кроме того, убедитесь, что намерение не null ..... – Opiatefuchs

+1

Сообщение crash logcat –

ответ

0

проводка моего собственный кода бега:

public class SmsReceiver extends BroadcastReceiver { 
     static final String ACTION = 
       "android.provider.Telephony.SMS_RECEIVED"; 

     @SuppressWarnings("deprecation") 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ACTION)) { 
       Bundle pudsBundle = intent.getExtras(); 
       Object[] pdus = (Object[]) pudsBundle.get("pdus"); 
       SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); 
       String phoneNumber = messages.getOriginatingAddress(); 
       if (phoneNumber != null && phoneNumber.contains(Constants.OTP_NUMBER)) { 
        this.abortBroadcast(); 
        Log.i("ABORTED", "DONE"); 
        Intent localIntent = new Intent(Constants.OTP_BROADCASTING_PACKAGE); 
        String otp = messages.getMessageBody(); 
        if (otp != null && !otp.equals("")) { 
         otp = otp.substring(otp.length() - 5, otp.length() - 1); 
         localIntent.putExtra("message", otp); 
         LocalBroadcastManager.getInstance(context).sendBroadcast(localIntent); 
        } 
       } 
      } 
     } 
    } 

**In Manifest** 

    <receiver android:name="your_path.SmsReceiver"> 
       <intent-filter android:priority="1000"> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       </intent-filter> 
      </receiver> 

Permission : 

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

Надеется, что это поможет :)

+0

После редактирования некоторого кода для реализации моей собственной функциональности это сработало !! Очень признателен. –

+0

Будьте осторожны, хотя используя ** устаревшие ** методы - [прочитать это] (http://stackoverflow.com/a/2941912/4782930) – Strider

0

Попробуйте

Я надеюсь, что вы зарегистрировали receiver в manifest файл и разрешения также.

public class IncomingSms extends BroadcastReceiver { 

    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 

    public void onReceive(Context context, Intent intent) { 

     // Retrieves a map of extended data from the intent. 
     final Bundle bundle = intent.getExtras(); 

     try { 

      if (bundle != null) { 

       final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

       for (int i = 0; i < pdusObj.length; i++) { 

        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

        String senderNum = phoneNumber; 
        String message = currentMessage.getDisplayMessageBody(); 

        Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 


        // Show Alert 
        int duration = Toast.LENGTH_LONG; 
        Toast toast = Toast.makeText(context, 
           "senderNum: "+ senderNum + ", message: " + message, duration); 
        toast.show(); 

       } // end for loop 
       } // bundle is null 

     } catch (Exception e) { 
      Log.e("SmsReceiver", "Exception smsReceiver" +e); 

     } 
    }  
} 

 Смежные вопросы

  • Нет связанных вопросов^_^