如何从传入的短信中接收信息? [英] How to receive information from an incoming text message?

查看:80
本文介绍了如何从传入的短信中接收信息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要传入短信中的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

  1. 在AndroidManifest中声明接收器

  1. 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);

        }
    }    
}

这篇关于如何从传入的短信中接收信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆