2010-09-16 65 views
0

guys。我是新來的android和我使用android 2.2的一些sms_receive事情:當一個短信收到,只是一個通知。但它不會工作......收到短信時沒有任何反應,好像接收機尚未註冊。 幫助!android 2.2 sms receiver would not work

代碼androidmanifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.happyto.tracker" 
    android:versionCode="1" 
    android:versionName="1.0"> 

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

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:label="@string/app_name" android:name=".Track"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".SMSReceiver" android:enabled="true"> 
     <intent_filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent_filter> 
    </receiver> 
</application> 
<uses-sdk android:minSdkVersion="8" /> 

</manifest> 

我的接收機類:SMSReceiver.java

package com.happyto.tracker; 

import android.content.BroadcastReceiver; 

import android.content.Context; 

import android.content.Intent; 

import android.os.Bundle; 

import android.telephony.SmsMessage; 

import android.widget.Toast; 
import android.util.Log; 

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String smsReceived = "android.provider.Telephony.SMS_RECEIVED"; 
     Log.e("tracker", intent.getAction()); 
     if (intent.getAction().equals(smsReceived)) { 
      // ---get the SMS message passed in--- 
      Bundle bundle = intent.getExtras(); 
      SmsMessage[] msgs = null; 
      String str = ""; 
      if (bundle != null) { 
       // ---retrieve the SMS message received--- 
       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"; 
       } 
       // ---display the new SMS message--- 
       Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

} 
+0

我在做類似的事情! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42 2013-01-22 08:27:25

回答

2
private static final String TAG = "smsfwd"; 
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

    private NotificationManager mNotificationManager; 
    private int SIMPLE_NOTFICATION_ID; 
    String str=""; 
    String SMS_MIME_TYPE = "vnd.android-dir/mms-sms"; 

    public void onReceive(Context context, Intent intent) { 
     Intent defineIntent = new Intent(Intent.ACTION_MAIN);     

     defineIntent.setType(SMS_MIME_TYPE); 
     Log.i(TAG, "Intent recieved: " + intent.getAction()); 
     mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     if (intent.getAction().equals(SMS_RECEIVED)) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       Object[] pdus = (Object[])bundle.get("pdus"); 
       final SmsMessage[] messages = new SmsMessage[pdus.length]; 

       for (int i = 0; i < pdus.length; i++) { 
        messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

        str += "SMS from" + messages[i].getOriginatingAddress();      
        str += ":"; 
        str += messages[i].getMessageBody().toString(); 
        str += "\n";  
       } 
       Log.i(TAG, "Message recieved: " + messages[0].getMessageBody()); 
       if (messages.length > -1) { 
        Log.i(TAG, "Message recieved: " + messages[0].getMessageBody()); 
        mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
        Notification notifyDetails = new Notification(R.drawable.msg,"message received",System.currentTimeMillis()); 
        //PendingIntent myIntent = PendingIntent.getActivity(context, 0, new Intent(Intent.ACTION_VIEW), 0); 
         PendingIntent myIntent = PendingIntent.getActivity(context, 0 , defineIntent, 0); 

        notifyDetails.setLatestEventInfo(context, str, "", myIntent); 
        notifyDetails.flags = Notification.FLAG_AUTO_CANCEL; 
        notifyDetails.flags = Notification.DEFAULT_SOUND; 
        mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); 
       } 
      } 
     } 
     } 

和清單文件這樣的..

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.infostretch.broadcastex" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 


    <receiver android:name="broadcastex" android:label="@string/app_name"><intent-filter><action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
</intent-filter> 
</receiver> 
</application> 



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

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
</manifest> 

我在運行此安德烈oid 2.2爲我工作確保你在android清單中添加權限和接收器