- Forum-Beiträge: 147
13.04.2014, 21:58:52 via Website
13.04.2014 21:58:52 via Website
Ich möchte erst einmal ganz einfach über einen Toast anzeigen, wenn eine SMS eingegangen ist. Folgenden Code habe ich:
Manifest:
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="de.my.package"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="11"
9 android:targetSdkVersion="18" />
10 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
11 <uses-permission android:name="android.permission.RECEIVE_SMS"/>
12 <uses-permission android:name="android.permission.READ_SMS" />
13 <uses-permission android:name="android.permission.SEND_SMS"/>
14
15 <application
16 android:allowBackup="true"
17 android:icon="@drawable/ic_launcher"
18 android:label="@string/app_name"
19 android:theme="@style/AppTheme" >
20 <activity
21 android:name="de.my.package.MainActivity"
22 android:label="@string/app_name" >
23 <intent-filter>
24 <action android:name="android.intent.action.MAIN" />
25
26 <category android:name="android.intent.category.LAUNCHER" />
27 </intent-filter>
28 </activity>
29
30 <receiver android:name=".IncomingSms" android:permission="android.permission.BROADCAST_SMS" android:priority="1">
31 <intent-filter>
32 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
33 <!-- <action android:name="android.intent.action.AIRPLANE_MODE" /> -->
34 </intent-filter>
35 </receiver>
36 </application>
37
38</manifest>
IncomingSms.java:
[code]
package de.my.package;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class IncomingSms extends BroadcastReceiver {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
System.out.println("RECIVER ANGEKOMMEN");
// 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);
}
}
}
[/code]
Wenn ich jetzt eine SMS an mich selber sende, wird der Broadcast Reciver jedoch nicht ausgelöst. Ich bekomme keinen Toast angezeigt und in der Log steht auch nix von "RECIVER ANGEKOMMEN".
Wenn ich im Manifest jedoch den android.intent.action.AIRPLANE_MODE- Reciver angebe, bekomme ich "android.intent.action.AIRPLANE_MODE" im Log angezeigt und danach wird eine NullPointerException geworfen.
Warum funktioniert der SMS Reciver nicht? In ChatON kommt die SMS an...