2011-06-14 118 views
0

我是新來的android編程請幫我解決一個問題。Android短信接收器不工作

我的代碼接收短信不起作用。

清單文件是

<receiver android:name=".SMSReceiver"> 
     <intent-filter> 
      <action android:name= 
       "android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

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

而java代碼

package com.android.SMS; 


import android.os.Bundle; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.*; 
import android.telephony.gsm.SmsMessage; 
import android.util.Log; 

import android.widget.Toast; 

public class SMSReceiver extends BroadcastReceiver 
{ 

    public void onReceive(Context context, Intent intent) 
     { 
      //---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

你能更詳細地瞭解「不工作」是什麼意思嗎?它是否會拋出異常? logcat輸出中是否有錯誤/警告? – 2011-06-14 06:24:31

+0

你在模擬器中測試它嗎? – Azlam 2011-06-14 09:09:03

+0

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

回答

0

刪除此行。 import android.telephony.gsm.SmsMessage;

請確定SmsMessage是必須在「android.telephony」下的類。

這可能會幫助你... :)

1
package com.google.android; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SMSReceiver extends BroadcastReceiver {  
    @Override /** This line is important, as you have not overriden the original method*/ 
    public void onReceive(Context context, Intent intent) { 
     //---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(); 
     } 
    } 
} 

我希望這會幫助你。

1

以下是我目前爲我工作的內容。 我提供的代碼用於阻止傳入的文本消息,但是您可以輕鬆修改它以僅包含僅警告傳入消息的區域,並且不會進一步處理它們。


SmsReceiver.java

package com.android.SMS; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SmsReceiver extends BroadcastReceiver { 

public static int MSG_TPE=0; 
private String getAddress; 
public void onReceive(Context context, Intent intent) { 
    String MSG_TYPE=intent.getAction(); 
     if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) { 
      Toast received = Toast.makeText(context,"SMS Received: "+MSG_TYPE , Toast.LENGTH_LONG); 
      received.show(); 

       Bundle bundle = intent.getExtras(); 
       Object messages[] = (Object[]) bundle.get("pdus"); 
       SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
       for (int n = 0; n < messages.length; n++) { 
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
       } 

        getAddress = smsMessage[0].getOriginatingAddress(); 
        // Filter incoming messages 
        if(getAddress.equals("APPROVEDPHONENUMBER")) { 
         Toast approved = Toast.makeText(context,"Approved SMS from: " + smsMessage[0].getOriginatingAddress(), Toast.LENGTH_LONG); 
         approved.show(); 
          // Message is approved and let through 
        } else { 
         Toast blocked = Toast.makeText(context,"Blocked SMS from: " + smsMessage[0].getOriginatingAddress(), Toast.LENGTH_LONG); 
         blocked.show(); 
          // Message is blocked 
          abortBroadcast(); 
        } 
        // End filter 
         for(int i=0;i<8;i++) { 
          System.out.println("Blocking SMS"); 
         } 

     } 

} 

} 


這是檢測到輸入消息

if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) { 
     Toast received = Toast.makeText(context,"SMS Received: "+MSG_TYPE , Toast.LENGTH_LONG); 
     received.show(); 
} 



的AndroidManifest.xml

權限代碼:

<uses-feature android:name="android.hardware.telephony" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 


應用程序塊:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 


    <service android:name=".MyService" android:enabled="true"/> 
    <receiver android:name="SmsReceiver"> 
      <intent-filter android:priority="2147483647"> 
       <action android:name="android.provider.Telephony.SMS_SENT"/> 
      </intent-filter> 
    </receiver> 
    <service android:name=".MyServiceSentReceived" android:enabled="true"/> 
     <receiver android:name="SmsReceiver"> 
       <intent-filter android:priority="2147483645"> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
       </intent-filter> 
     </receiver> 

</application> 

它的服務和接收器塊把你的主「應用程序」模塊的內部,如圖中上面的代碼是很重要的。