开放,永远都是双刃剑!
监听短信,在Androd2.3版本以前很容易,Android4.0则似乎不行了。
本案例仅可以用于Android2.3版本。
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/startbroadcast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启用广播(接收器)" /> </LinearLayout>
二、程序文件
1、打开“src/com.genwoxue.telephonyservice/MainActivity.java”文件。
然后输入以下代码:
package com.genwoxue.smslisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; public class MainActivity extends Activity { private Button btnSend=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnSend=(Button)super.findViewById(R.id.startbroadcast); btnSend.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ //实例化广播接收器 new SMSBroadcastReceiver(); } }); } }
MainActivity.java的目的仅仅是实例化广播接收器。
2、创建“src/com.genwoxue.smslisten/SMSBroadcastReceiver.java”文件。
然后输入以下代码:
package com.genwoxue.smslisten; import java.text.SimpleDateFormat; import java.util.Date; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsMessage; import android.widget.Toast; public class SMSBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ StringBuilder msg=new StringBuilder(); //取得所有短信内容 Object[] pdusData=(Object[])intent.getExtras().get("pdus"); //取出每条短信内容 for(int i=0;i<pdusData.length;i++){ //取出短信内容 byte[] pdus=(byte[])pdusData[i]; //还原短信内容 SmsMessage smsMessage=SmsMessage.createFromPdu(pdus); //获取短信号码、内容和时间 String messageBody=smsMessage.getMessageBody(); String phoneNumber=smsMessage.getOriginatingAddress(); String receiveDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date()); msg.append(messageBody+phoneNumber+receiveDate+"/n"); } Toast.makeText(context, msg.toString(), Toast.LENGTH_LONG).show(); } }
三、配置文件
打开“AndroidManifest.xml”文件。
然后输入以下代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.genwoxue.smslisten" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.genwoxue.smslisten.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.genwoxue.smslisten.SMSBroadcastReceiver" android:label="@string/app_name" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest>
四、运行结果
Activity启动广播接收方—>广播接收方启动Service服务