2016-06-14 17 views
0

Ich entwickle eine App, die reagiert, wenn eine Textnachricht empfangen wird. Der Code, den ich habe, stürzt meine App ab, wenn eine Textnachricht empfangen wird, aber aufgrund der Notwendigkeit, die App auf meinem eigenen Gerät zu installieren, kann ich keine Absturzberichte erhalten, um das Problem zum Zeitpunkt des Absturzes zu identifizieren.App stürzt mit SMS-Listener ab

Der Code zeigte keine Fehler vor seiner Verwendung mit Android-Studios.

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

Kann jemand mir einen Hinweis geben, warum der Unfall auftreten kann, oder irgendwie könnte ich einen Unfallbericht finden.

Ich habe meinen Code auf viele verschiedene Arten bearbeitet, alle mit dem gleichen Ergebnis.

+0

haben den Empfänger in Manifest registriert? Haben Sie Berechtigungen erteilt? Hast du Laufzeitberechtigungen angefordert? Seien Sie sicher, Absicht nicht null ... – Opiatefuchs

+1

Beitrag crash logcat –

Antwort

0

der Veröffentlichung meiner eigenen Lauf Code:

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

Hoffe, es wird Ihnen helfen :)

+0

Nach dem Bearbeiten von Code, um meine eigene Funktionalität zu implementieren, das hat funktioniert !! Sehr geschätzt. –

+0

Seien Sie vorsichtig, wenn Sie ** veraltete ** Methoden verwenden - [lesen Sie diese Informationen] (http://stackoverflow.com/a/2941912/4782930) – Strider

0

Versuchen Sie, diese

Ich hoffe, dass Sie Ihre receiver in manifest Datei und die Erlaubnis, auch registriert.

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

     } 
    }  
}