问题SMS广播接收器 [英] Problem with SMS Broadcast receiver

查看:198
本文介绍了问题SMS广播接收器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨我真的可以使用一些洞察到这一点。好吧,我是新来的日食和Android首先。这里是我的本钱。好吧,我已经得到了我使用监控短信一个BroadcastReceiver。当一个短信进来它抓住了从和邮件正文,然后将它们传递到方法FilterMessage()这不,然后使用邮件正文中对数据库的查询。

到目前为止,它编译,但是当我发送的文字不会触发广播接收器(不打印到logcat的)这里是code:

 公共类SMSReceiver扩展广播接收器{
    SQLiteDatabase分贝;
    私有静态最后弦乐ACTION =android.provider.Telephony.SMS_RECEIVED;
    私人静态字符串messagefrom;
    私人静态字符串消息体;
    最后弦乐DBTABLE =Realtor_SMS_Table;
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){        如果(意向= NULL&放大器;!&安培;!intent.getAction()= NULL和放大器;&安培; ACTION.compareToIgnoreCase(intent.getAction())== 0){
            [对象] pduArray =(对象[])intent.getExtras()获得(的PDU);
                SmsMessage [] =邮件新SmsMessage [pduArray.length]
                的for(int i = 0; I< pduArray.length;我++){
                    消息[I] = SmsMessage.createFromPdu((字节[])pduArray [I]);
                    messagefrom =讯息[I] .getOriginatingAddress();
                    消息体=讯息[I] .getMessageBody();
                    Log.d(我的SMSReceiver,从:+ messagefrom);
                    Log.d(我的SMSReceiver,信息:+消息体);
                    FilterMessage(DBTABLE,messagefrom,消息体);                }                Log.d(我的SMSReceiver,SMSReceived);        }
    }
    公共无效FilterMessage(DBTABLE字符串,字符串messagefrom,字符串消息体){        DBHelper dbhelper =新DBHelper(NULL);
        SQLiteDatabase分贝= dbhelper.getReadableDatabase();
        光标光标= db.query(DBTABLE,新的String [] {_id,说明,URL},
                _id像+%+消息体+%',NULL,NULL,NULL,NULL);
        Log.d(我的SMSReceiver,SQL =+光标);        如果(指针!= NULL){
            cursor.moveToFirst();
            字符串messageAddress = NULL;
            字符串messageDescription = NULL;
            字符串messageURL = NULL;
            而(cursor.isAfterLast()== FALSE){                messageAddress = cursor.getString(0);
                messageDescription = cursor.getString(1);
                messageURL = cursor.getString(2);            }
            SmsManager SM = SmsManager.getDefault();
            sm.sendTextMessage(messagefrom,空,messageAddress + messageDescription,NULL,NULL);
            sm.sendTextMessage(messagefrom,空,messageAddress + messageURL,NULL,NULL);
        }
    }
}

这里是AndroidManifest.xml中

 <?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.RealtorSMS安卓版code =1机器人:=的versionName1.0>
    <采用-SDK安卓的minSdkVersion =3/>
    <使用许可权的android:NAME =android.permission.RECEIVE_SMS/>
    <使用许可权的android:NAME =android.permission.SEND_SMS/>    <应用机器人:图标=@绘制/图标机器人:标签=@字符串/ APP_NAME>
        <活动机器人:Activati​​onActivityNAME =机器人:标签=@字符串/ APP_NAME>
            &所述;意图滤光器>
                <作用机器人:名字=android.intent.action.MAIN/>
                <类机器人:名字=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <接收机器人:SMSReceiverNAME =>
            &所述;意图滤光器>
                <作用机器人:名字=android.provider.telephony.SMS_RECEIVED>< /作用>
            &所述; /意图滤光器>
        < /接收器>        <活动机器人:名字=preferencesAcitvity/>
        <活动机器人:名字=。ViewListingsActivity/>
    < /用途>
< /清单>


解决方案

您需要在清单以使用大写字母T在你的意图过滤器:

 <作用机器人:名字=android.provider.Telephony.SMS_RECEIVED>
                                       ^

Hey guys I could really use some insight into this one. Ok, I'm new to eclipse and android first of all. Here is what I've got. Ok, I've got a BroadcastReceiver that I'm using to monitor text messages. When a text message comes in it grabs the from and message body and then passes them on to method FilterMessage() this then does a query against the database using the message body.

So far it compiles but when I send the Text it doesn't trigger the BroadcastReceiver (doesn't print to logcat) here is the code:

public class SMSReceiver extends BroadcastReceiver {
    SQLiteDatabase db;
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
    private static String messagefrom;
    private static String messagebody;
    final String dbTable = "Realtor_SMS_Table";


    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
                SmsMessage[] messages = new SmsMessage[pduArray.length];
                for (int i = 0; i < pduArray.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[])pduArray[i]);
                    messagefrom = messages[i].getOriginatingAddress();
                    messagebody = messages[i].getMessageBody();
                    Log.d("My SMSReceiver", "From: " + messagefrom);
                    Log.d("My SMSReceiver", "Msg: " + messagebody);
                    FilterMessage(dbTable, messagefrom, messagebody);

                }

                Log.d("My SMSReceiver", "SMSReceived");

        }
    }
    public void FilterMessage(String dbTable, String messagefrom, String messagebody) {

        DBHelper dbhelper = new DBHelper(null);
        SQLiteDatabase db = dbhelper.getReadableDatabase();
        Cursor cursor = db.query(dbTable, new String[] {"_id", "Description", "URL"}, 
                "_id like " + "'%" + messagebody + "%'", null, null, null, null);


        Log.d("My SMSReceiver", "sql= " +cursor);

        if (cursor != null) {
            cursor.moveToFirst();
            String messageAddress = null;
            String messageDescription = null;
            String messageURL = null;
            while (cursor.isAfterLast() == false){

                messageAddress = cursor.getString(0);
                messageDescription = cursor.getString(1);
                messageURL = cursor.getString(2);

            }
            SmsManager sm = SmsManager.getDefault();
            sm.sendTextMessage(messagefrom, null, messageAddress + messageDescription, null, null);
            sm.sendTextMessage(messagefrom, null, messageAddress + messageURL, null, null);
        }


    }


}

here is the AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.RealtorSMS" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ActivationActivity" 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=".SMSReceiver">
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>



        <activity android:name=".PreferencesAcitvity" />
        <activity android:name=".ViewListingsActivity" />


    </application>
</manifest>

解决方案

You need to use a capital T in your intent filter in the manifest:

<action android:name="android.provider.Telephony.SMS_RECEIVED">
                                       ^

这篇关于问题SMS广播接收器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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