我知道这已经被问到了ALOT,但是我已经在网上搜了几个小时了,我甚至重复使用了我以前的一些代码来接收短信'我得到了......没什么。
所以,这里,基本应用程序接收短信但应用程序永远不会收到意图。我认为如果文本是从同一部手机发送的,那么意图可能会被忽略,但似乎并非如此,因为其他应用程序会正确地接收文本。
这是我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.encima.smsreceiver"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".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=".MessageReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>
而且,这里是接收器,这里似乎没什么新东西,所以我不知道问题是什么:
package com.encima.smsreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class MessageReceiver extends BroadcastReceiver {
private static final String TAG = "Message recieved";
@Override
public void onReceive(Context context, Intent intent) {
Bundle pudsBundle = intent.getExtras();
Object[] pdus = (Object[]) pudsBundle.get("pdus");
SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);
Log.i(TAG, messages.getMessageBody());
Toast.makeText(context, "SMS Received : "+messages.getMessageBody(),
Toast.LENGTH_LONG).show();
}
}
我正在使用的调试手机正在运行2.2.2我运行的其他应用程序可以检测短信,包括我自己的一些。
对此有任何见解将不胜感激!
由于
答案 0 :(得分:2)
因为SMS广播意图是由发送的 Context.sendOrderedBroadcast(...), 如果任何其他应用注册BroadcastReceiver并调用abortBroadcast,则其他接收者将无法获得广播。
要提高应用接收广播的概率,请创建一个IntentFilter,使用IntentFilter.setPriority。
答案 1 :(得分:0)
我不知道这是不是你的问题,但你应该明确地试试这个:
而不是".MessageReceiver"
放android:name = "com.encima.smsreceiver.MessageReceiver"
当有些事情没有被召唤时,这可以解决我多次锻炼的问题。