2011-02-03 6 views
0

私は、単純なBroadcastReceiverとonReceiveメソッドを使用して、テキストメッセージが途切れたときに傍受します。何らかの理由で、私はテキストメッセージを送信するたびに:アプリケーションがクラッシュします。アプリケーションをデバッグしようとすると、テキストメッセージを送信してもアプリケーションがクラッシュしますが、Receiverクラスに私を連れて行く代わりに、 "ActivityThreadhandleReceiver(ActivityThread、ActivityThreadReceiverData)"の内部で一時停止します。デバッグウィンドウでは、スレッド( "Suspended(exception RuntimeException))"だけが表示されます。傍受のテキストメッセージ:デバッグの問題

私のコードをステップ実行できない場合、どうして私のアプリがクラッシュするのかを知ることになっています。ここで

は私のレシーバクラスである:

public class FinderReciever extends BroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) 
{ 
Bundle bundle = intent.getExtras(); 
SmsMessage[ ] msgs = null; 
String str = ""; 
if (bundle != null) 
{ 
//---retrieve the received message here --- 
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]); 
str += "SMS from " + msgs[i].getOriginatingAddress(); 
str += " :"; 
str += msgs[i].getMessageBody().toString(); 
str += "\n"; 
} 
// ........first show sms here..... 
Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
} 

そしてここでは、私のマニフェストです:

<?xml version="1.0" encoding="utf-8"?> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".PhoneFinder_Activity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

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

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

ご協力いただければ幸いです。ありがとう!

EDIT:私の主なアクティビティの中で実行するメソッドを再フォーマットした後でも、全く同じ結果が得られます。このまったく同じ方法では、文章の意図の送信時に動作します:

 String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 
    String RECEIVED = "SMS_RECEIVED"; 


    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
     new Intent(SENT), 0); 

    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
     new Intent(DELIVERED), 0); 

    PendingIntent receivedPI = PendingIntent.getBroadcast(this, 0, new Intent(RECEIVED), 0); 

    //---when the SMS has been sent--- 
    registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "FRIGGEN SMS!", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
          Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }, new IntentFilter(RECEIVED)); 
+0

これについて別の方法を試した後、同じエラーが発生しました。だから、私はそれが私のマニフェストの許可や何かのものと何か関係があると仮定しています。上記の投稿を両方のコードスニペットで編集しました。みんなありがとう。 – ninnemannk

答えて

0

あなたのマニフェストファイルにエラーが発生している - 受信機の名前はクラスの名前でなければなりません。上記のごFinderRecieverクラスのだから、あなたがしたいと思います:

<receiver android:name=".FinderReciever"> 
    <intent-filter> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

ます。また、これはlogcatを見て問題があることを確認することができます。

ERROR/AndroidRuntime(1708): FATAL EXCEPTION: main 
ERROR/AndroidRuntime(1708): java.lang.RuntimeException: Unable to instantiate receiver xxx.xxxx.SmsReceiver: java.lang.ClassNotFoundException: .... 
+0

応答ありがとう!私はプロジェクトを再作成して問題を解決しました。その名前を変更する必要があります。私はこの問題を解決しましたが、どうしたらいいのか分かりませんでした。だから、ありがとう、私は将来のためにこれを念頭に置いておくことを確認します。 – ninnemannk