Android开发速成简洁教程二十:短信触发示例

移动开发 Android
Android 中BroadCast Receiver可以用来侦听广播事件。在使用Broadcast 之前,必须使用代码或是在AndroidManifest.xml进行注册。

Android 中BroadCast Receiver可以用来侦听广播事件。在使用Broadcast 之前,必须使用代码或是在AndroidManifest.xml进行注册。

下面的例子实现使用短信来触发AndroidGraphics2DTutorial中的示例。短信格式为:@demo:xxxx ,xxxx为 示例名称,比如, 启动Colors示例, 则向手机发送: @demo:Colors . 手机在收到短信后,先检测短信格式是否符合 @demo:xxxx, 若符合,这启动对应的示例。

在AndroidGraphics2DTutorial中添加一个自定义的Broadcast Receiver SmsMessageReceiver 用于监测接受到的短信:

public class SmsMessageReceiver extends BroadcastReceiver {       
       private static final String queryString="@demo:"
        @Override 
        public void onReceive(Context context, Intent intent) { 
            Bundle extras = intent.getExtras(); 
            if (extras == null
                return;   
            Object[] pdus = (Object[]) extras.get("pdus");    
            for (int i = 0; i < pdus.length; i++) { 
                SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]); 
                String fromAddress = message.getOriginatingAddress(); 
                String fromDisplayName = fromAddress; 
                String msg=message.getMessageBody(); 
                if(msg.startsWith(queryString)){ 
                   // Trigger the main activity to fire up a dialog 
              //that shows/reads the received messages 
                    Intent di = new Intent(); 
                         di.setClass(context, AndroidGraphics2DTutorial.class); 
                    di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
                            | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
                    di.putExtra(AndroidGraphics2DTutorial.SMS_FROM_ADDRESS_EXTRA, 
                            fromAddress); 
                di.putExtra(AndroidGraphics2DTutorial.SMS_FROM_DISPLAY_NAME_EXTRA, 
                            fromDisplayName);                di.putExtra(AndroidGraphics2DTutorial.SMS_MESSAGE_EXTRA, msg); 
                    context.startActivity(di); 
                }         
            } 
        } 
    } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

onReceive 会在Broadcast 事件发生是执行,这里检测短信内容,如果是以@demo:开头的,则启动AndroidGraphics2DTutorial Main Activity。

修改AndroidMainifest.xml

<receiver android:name=".SmsMessageReceiver" android:enabled="true"
                <intent-filter> 
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
                </intent-filter> 
     </receiver> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

同时添加permission ,和Java ME类似Android某些API需要指定对应的Permission才可以使用。

<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
  • 1.
  • 2.

修改AndroidGraphics2DTutorial.java 来处理SMS消息:

public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        Resources res = getResources(); 
        String[] activity_Names = res.getStringArray(R.array.activity_name); 
        String[] activity_Infos = res.getStringArray(R.array.activity_info); 
        for(int i=0;i<activity_Names.length;i++){ 
            ActivityInfo activityInfo=new ActivityInfo(); 
            activityInfo.activityName=activity_Names[i]; 
            activityInfo.activityInfo=activity_Infos[i]; 
            activityInfo.iconIndex=R.drawable.icon1+i; 
            activityInfos.add(activityInfo); 
        }             
        aa=new ActivityInfoAdapter(this,R.layout.activitylist,activityInfos); 
        setListAdapter(aa); 
        Bundle bundle=getIntent().getExtras(); 
        if(bundle!=null){ 
                  mFromAddress = bundle.getString(SMS_FROM_ADDRESS_EXTRA); 
             mMessage = bundle.getString(SMS_MESSAGE_EXTRA); 
             int index=mMessage.indexOf(queryString); 
             if(index>=0){ 
                 String demoName=mMessage.substring(index+queryString.length()); 
                 Intent intent = new Intent(); 
                 intent.setClassName(this, packgeName+".example." +demoName); 
                 startActivity(intent);                   
             }                 
        } 
    } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

下面来测试,如果使用设备,则给手机发送@demo:Colors .
如果使用模拟器,则可以启动两个模拟器:

模拟器左上角数字5554,5556为模拟器的号码。发送@demo:Paths ,则自动触发Paths示例,如果AndroidGraphics2DTutorial没有运行,手机收到SMS短信后,会自动启动应用。

责任编辑:闫佳明 来源: imobilebbs
相关推荐

2013-12-27 16:06:10

Android开发Android应用发布应用

2013-12-27 12:51:44

Android开发Android应用引路蜂

2013-12-27 13:49:22

Android开发Android应用Button

2013-12-27 15:31:26

Android开发Android应用资源Resources

2013-12-26 15:43:07

Android开发Android应用Activities

2013-12-26 15:10:08

Android开发应用和框架Linux 内核

2013-12-27 15:11:17

Android开发访问Internet绘制在线地图

2013-12-26 15:18:09

Android开发安装开发环境

2013-12-27 14:05:22

Android开发Android应用Dialog

2013-12-27 14:16:43

Android开发Android应用线程

2013-12-26 15:34:19

Android开发Android应用基本概念

2013-12-26 16:59:12

Android开发Android应用数据绑定Data Bi

2013-12-26 16:24:13

Android开发Android应用Intents

2013-12-27 13:27:05

Android开发Android应用RadioButton

2013-12-26 15:46:30

Android开发Android应用用户界面设计

2013-12-26 16:46:21

2013-12-27 13:00:30

Android开发Android应用Context Men

2013-12-26 17:08:36

Android开发Android应用自定义Adapter显

2013-12-27 12:42:15

Android开发Android应用引路蜂

2013-12-27 14:10:36

Android开发Android应用Transform
点赞
收藏

51CTO技术栈公众号