2016-06-14 17 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

マニフェストにレシーバを登録しましたか?許可を与えましたか?実行時のアクセス権を要求しましたか?また、意図していないヌル..... – Opiatefuchs

+1

ポストクラッシュ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

は、私はまた、あなたのreceivermanifest内のファイルとアクセス権を登録願っています。この

を試してみてください。

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

     } 
    }  
} 
関連する問題