问题描述
我需要传入短信中的2个变量,发件人和消息正文.如何访问它们?
I need 2 variables from an incoming text message, the sender and the message body. How do I access them?
推荐答案
以下是有关如何在android中读取传入短信的分步说明
Here is step by step description for how to read incoming sms in android
您需要为此使用广播接收器
You need to use broadcast receiver for that
-
在AndroidManifest中声明接收器
Declare receiver in AndroidManifest
<receiver android:name=".IncomingSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
在AndroidManifest中授予读取短信权限
Give read SMS permission in AndroidManifest
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
AndroidManifest.xml文件的完整代码:
Complete code for AndroidManifest.xml File :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidexample.broadcastreceiver"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.androidexample.broadcastreceiver.BroadcastNewSms"
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.androidexample.broadcastreceiver.IncomingSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
</manifest>
IncomingSms.java文件详细信息: 我已在此文件中接收了广播事件 1.创建带有扩展的BroadcastReceiver类的类IncomingSms
IncomingSms.java file details : I have made broadcast event reciever in this file 1. Created class IncomingSms with extends BroadcastReceiver class
public class IncomingSms extends BroadcastReceiver
2. Get the object of SmsManager to find out received sms details
//获取SmsManager的对象
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
3. Create method receiver()
public void onReceive(Context context, Intent intent)
4. Get / Read current Incomming SMS data
//从意图中检索扩展数据的映射.
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
// Show alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
toast.show();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
================================================ ================================================== IncomingSms.java文件的完整代码:
================================================================================================= Complete code for IncomingSms.java file :
public class IncomingSms extends BroadcastReceiver {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
//here you will get currentMsg body phoneNmber and senderNumber
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context,
"senderNum: "+ senderNum + ", message: " + message, duration);
toast.show();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
这篇关于如何从传入的短信中接收信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!