Я использую простой метод BroadcastReceiver и onReceive для перехвата текстовых сообщений по мере их поступления. Почему-то каждый раз, когда я отправляю текстовое сообщение: приложение вылетает. Когда я пытаюсь отладить приложение: я отправляю текстовое сообщение, и приложение все еще падает, но вместо того, чтобы перевести меня в класс Receiver, оно приостанавливается внутри «ActivityThreadhandleReceiver (ActivityThread, ActivityThreadReceiverData)». Окно отладки просто говорит для потока: «(Приостановлено (исключение 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));