2012-01-30 109 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 
    } 

} 

而且我所想要的一切工作只是,我可以停止燃烧了我的短信津贴测试的部份