我正在使用一個簡單的BroadcastReceiver和onReceive方法來攔截文本消息。出於某種原因,每次我發送短信時:應用程序崩潰。當我嘗試調試應用程序時:我發送文本消息,應用程序仍然崩潰,但不是將我帶入Receiver類,而是暫停在「ActivityThreadhandleReceiver(ActivityThread,ActivityThreadReceiverData)」內部。調試窗口只是針對Thread:「(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" />
任何幫助將不勝感激。謝謝!
編輯:即使重新格式化運行在我的主要活動內部的方法後,我得到完全相同的結果。這完全一樣的方法適用於文本意向的發送:
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));
試圖以另一種方式去解決這個問題:我得到了同樣的錯誤。所以,我認爲這是與我的清單權限或類似的東西。我用兩個代碼片段編輯了上面的帖子。多謝你們。 – ninnemannk 2011-02-03 15:47:07