Android:短信接收器无法正常工作

时间:2013-05-03 11:26:49

标签: java android sms toast

我正在写一个sms接收器的android代码,但它无法正常工作。 它编译会但是当我得到一个短信时它没有显示为使用Toast时应该是。 这是我的代码:

package com.example.homecontrolingbysms;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String messageReceived = "";            
        if (bundle != null)
        {
            //---retrieve the SMS message received---
           Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length]; 

            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);  
                messageReceived +="From "+ msgs[i].getOriginatingAddress();
                messageReceived+=" : ";
                messageReceived += msgs[i].getMessageBody().toString();
                messageReceived += "\n";        
            }

            //---display the new SMS message---
            Toast.makeText(context, messageReceived, Toast.LENGTH_SHORT).show();
        }                         
    }
}

我还发布了清单,以确保所有重要的代码部分都可用 的manifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.homecontrolingbysms"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.homecontrolingbysms.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>

       <activity
            android:name="com.example.homecontrolingbysms.Door"
            android:label="@string/app_name" >
        </activity>

        <activity
            android:name="com.example.homecontrolingbysms.Window"
            android:label="@string/app_name" >

        </activity>

        <activity
            android:name="com.example.homecontrolingbysms.Light"
            android:label="@string/app_name" >

        </activity>

    </application>

</manifest>

3 个答案:

答案 0 :(得分:2)

通过在清单文件中添加以下代码来注册短信接收器

<receiver android:name="com.shreymalhotra.smsreceiver.SmsReceiver">
    <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

此链接可能会对您有所帮助。

Receiving SMS on Android App

http://shreymalhotra.me/blog/tutorial/receive-sms-using-android-broadcastreceiver-inside-an-activity/

请检查。

答案 1 :(得分:0)

我认为你的清单看起来不错;问题在于: 错误在这一部分,我想你可以改变这个

    Bundle bundle = intent.getExtras();        
    SmsMessage[] msgs = null;
    String messageReceived = "";            
    if (bundle != null)

这样的事情

    public void onReceive(Context context, Intent intent) {
    Log.i(TAG, "Intent recieved: " + intent.getAction());
    intent.getAction().equals(ACTION) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");

(您需要对操作字符串进行对象比较,或者只是不进行比较),在清单文件中拼错了SMS_RECEIVED。

答案 2 :(得分:0)

如果你想接收一些广播,必须要做一些事情。 1.在manifest.xml中,您必须使用intent过滤器声明您的接收器     EXP:                                                        2.如果您要收到的广播是订购的,您必须确保优先权。          机器人:优先= “1000”