2012-01-30 147 views
1

我只想問如果有人知道或有一個工作短信接收器/處理程序代碼爲Android。因爲我現在在網上搜索了幾天,而且我還沒有看到更新過的代碼,所以大多數代碼似乎都不贊成這樣http://mobiforge.com/developing/story/sms-messaging-android如果有人能教我接收新代碼,我真的很感激它短信在一個應用程序。謝謝!Android短信接收器/處理程序

+0

我做類似的東西在這裏! ! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42 2013-01-22 08:15:06

回答

0

This應該能夠工作,並且不會被棄用,如果您將android.telephony.gsm.SmsMessage替換爲android.telephony.SmsMessage。這只是關於收聽android.provider.Telephony.SMS_RECEIVE

0

有一個線程here其中包括代碼來執行你要求的。請注意,那裏的答案有一些更正。

4

我剛剛實現了一個工作的BroadcastReceiver來處理SMS消息。關鍵部分是清單和BroadcastReceiver。

在清單中您所需要的許可權許可:

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

你不需要READ_SMS。你的接收器條目應該是這個樣子:

<receiver 
    android:name=".IncomingSmsBroadcastReceiver" 
    android:enabled="true" 
    android:exported="true"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

,大多數人似乎忘記了該位爲android:exported="true"因爲廣播從您的應用程序之外源於其是必需的。有些帖子建議你需要android:permission="android.permission.RECEIVE_SMS"android:permission="android.permission.BROADCAST_SMS"但事實並非如此。

我的廣播接收器的實現是這樣的:

package smsmanager; 

import java.util.List; 

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

public class IncomingSmsBroadcastReceiver extends BroadcastReceiver { 

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

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

     if (intent != null && SMS_RECEIVED.equals(intent.getAction())) { 
      final SmsMessage smsMessage = extractSmsMessage(intent); 
      processMessage(context, smsMessage); 
     } 

    } 

    private SmsMessage extractSmsMessage(final Intent intent) { 

     final Bundle pudsBundle = intent.getExtras(); 
     final Object[] pdus = (Object[]) pudsBundle.get("pdus"); 
     final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]); 

     return smsMessage; 

    } 

    private void processMessage(final Context context, final SmsMessage smsMessage) { 
     // Do something interesting here 
    } 

} 

而且我所想要的一切工作只是,我可以停止燃燒了我的短信津貼測試的部份