Android sms notification problem
<p>I am trying to learn android so i am making some apps to play around with to get use to it. I am having a problem with one i am doing now, I am trying to make a sms notification app but it always force closes in the emulator. here is my code</p>

<pre><code>import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;

public class Sms extends BroadcastReceiver {

    static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context arg0, Intent arg1) {

           NotificationManager mNotificationManager = (NotificationManager) arg0.getSystemService(Context.NOTIFICATION_SERVICE);
            if (arg1.getAction().equals(ACTION)) {

                StringBuilder sb = new StringBuilder();
                String from = new String();
                String body = new String();

                Bundle bundle = arg1.getExtras();
                if (bundle != null) {
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    for (Object pdu : pdus){
                    SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdu);
                    sb.append(messages.getDisplayOriginatingAddress());
                    from = messages.getDisplayOriginatingAddress();
                    sb.append(messages.getDisplayMessageBody());
                    body= messages.getDisplayMessageBody();

                    //Log.i(LOG_TAG, "[SMSApp] onReceiveIntent: " + sb);
                    //abortBroadcast();
                    }// end for
                }//end if

                int icon = R.drawable.icon;
                CharSequence tickerText = from + ": " + body;
                long when = System.currentTimeMillis();

                Notification notification = new Notification(icon, tickerText, when);
                CharSequence contentTitle = "New SMS Message";
                CharSequence contentText = sb.toString();
                Intent notificationIntent = new Intent();
                PendingIntent contentIntent = PendingIntent.getActivity(arg0, 0, notificationIntent, 0);

                notification.setLatestEventInfo(arg0, contentTitle, contentText, contentIntent);
                notification.vibrate = new long[] { 100, 250, 100, 500};
                notification.flags |= Notification.FLAG_AUTO_CANCEL;

                mNotificationManager.notify(1, notification);
            }//end if

    }
}
</code></pre>

<p>and here is my manifest.xml file</p>

<pre><code> &lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.froyo"
      android:versionCode="1"
      android:versionName="1.0"&gt;
&lt;uses-sdk android:minSdkVersion="8" /&gt;

    &lt;uses-permission android:name="android.permission.RECEIVE_SMS" /&gt;

    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
        &lt;activity android:name=".FroyoTest"
                  android:label="@string/app_name"&gt;
            &lt;intent-filter&gt;
                &lt;action android:name="android.intent.action.MAIN" /&gt;
                &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;

                &lt;receiver android:name=".Sms"&gt;
            &lt;intent-filter&gt;
            &lt;action android:name="android.provider.Telephony.SMS_RECEIVED" /&gt;
            &lt;/intent-filter&gt;
        &lt;/receiver&gt;  

    &lt;/application&gt;

        &lt;uses-permission android:name="android.permission.RECEIVE_SMS" /&gt;
    &lt;uses-permission android:name="android.permission.READ_SMS" /&gt;
    &lt;uses-permission android:name="android.permission.WRITE_SMS" /&gt;
    &lt;uses-permission android:name="android.permission.SEND_SMS" /&gt;
&lt;/manifest&gt;
</code></pre>

<p>I dont understand what is wrong as it force closes every time</p>

<p>here is the logcat errors </p>

<pre><code>02-02 11:35:46.896: ERROR/System(66): Failure starting core service
02-02 11:35:46.896: ERROR/System(66): java.lang.SecurityException
02-02 11:35:46.896: ERROR/System(66):     at android.os.BinderProxy.transact(Native Method)
02-02 11:35:46.896: ERROR/System(66):     at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
02-02 11:35:46.896: ERROR/System(66):     at android.os.ServiceManager.addService(ServiceManager.java:72)
02-02 11:35:46.896: ERROR/System(66):     at com.android.server.ServerThread.run(SystemServer.java:184)
02-02 11:36:09.847: ERROR/ActivityManager(66): ANR in com.android.settings
02-02 11:36:09.847: ERROR/ActivityManager(66): Reason: Broadcast of Intent {           act=android.intent.action.CLOSE_SYSTEM_DIALOGS     cmp=com.android.settings/.widget.SettingsAppWidgetProvider (has extras) }
02-02 11:36:09.847: ERROR/ActivityManager(66): Load: 2.95 / 0.74 / 0.24
02-02 11:36:09.847: ERROR/ActivityManager(66): CPU usage from 7048ms to 569ms ago:
02-02 11:36:09.847: ERROR/ActivityManager(66):   app_process: 52% = 39% user + 13% kernel / faults: 2461 minor
02-02 11:36:09.847: ERROR/ActivityManager(66):   system_server: 46% = 28% user + 17% kernel / faults: 704 minor 3 major
02-02 11:36:09.847: ERROR/ActivityManager(66):   ronsoft.openwnn: 40% = 25% user + 15% kernel / faults: 3986 minor 6 major
02-02 11:36:09.847: ERROR/ActivityManager(66):   ndroid.launcher: 26% = 14% user + 11% kernel / faults: 3701 minor 3 major
02-02 11:36:09.847: ERROR/ActivityManager(66):   m.android.phone: 25% = 13% user + 12% kernel / faults: 3322 minor 7 major
02-02 11:36:09.847: ERROR/ActivityManager(66):   ndroid.settings: 19% = 9% user + 10% kernel / faults: 3007 minor 7 major
02-02 11:36:09.847: ERROR/ActivityManager(66):   bootanimation: 10% = 5% user + 4% kernel
02-02 11:36:09.847: ERROR/ActivityManager(66):   sh: 1% = 0% user + 0% kernel / faults: 118 minor
02-02 11:36:09.847: ERROR/ActivityManager(66):   qemud: 0% = 0% user + 0% kernel
02-02 11:36:09.847: ERROR/ActivityManager(66): TOTAL: 100% = 65% user + 34% kernel
02-02 11:36:32.439: ERROR/HierarchicalStateMachine(66): TetherMaster - unhandledMessage: msg.what=3
02-02 11:37:48.610: ERROR/AndroidRuntime(278): FATAL EXCEPTION: main
02-02 11:37:48.610: ERROR/AndroidRuntime(278): java.lang.RuntimeException: Unable to start receiver com.example.froyo.Sms: java.lang.SecurityException: Requires VIBRATE permission
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.ActivityThread.access$3200(ActivityThread.java:125)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.os.Looper.loop(Looper.java:123)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at java.lang.reflect.Method.invokeNative(Native Method)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at java.lang.reflect.Method.invoke(Method.java:521)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at dalvik.system.NativeStart.main(Native Method)
02-02 11:37:48.610: ERROR/AndroidRuntime(278): Caused by: java.lang.SecurityException: Requires VIBRATE permission
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.os.Parcel.readException(Parcel.java:1247)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.os.Parcel.readException(Parcel.java:1235)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.NotificationManager.notify(NotificationManager.java:110)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.NotificationManager.notify(NotificationManager.java:90)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at com.example.froyo.Sms.onReceive(Sms.java:51)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)
02-02 11:37:48.610: ERROR/AndroidRuntime(278):     ... 10 more
02-02 11:37:54.500: ERROR/ContactsProvider(172): Cannot determine the default account for contacts compatibility
02-02 11:37:54.500: ERROR/ContactsProvider(172): android.accounts.AuthenticatorException: bind failure
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at android.accounts.AccountManager.convertErrorToException(AccountManager.java:1433)
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at android.accounts.AccountManager.access$400(AccountManager.java:134)
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at android.accounts.AccountManager$BaseFutureTask$Response.onError(AccountManager.java:1338)
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at android.os.Binder.execTransact(Binder.java:288)
02-02 11:37:54.500: ERROR/ContactsProvider(172):     at dalvik.system.NativeStart.run(Native Method)
</code></pre>
