我面临着非常令人沮丧的问题。
我创建短信接收器,因为大多数在线和书籍的教程说。
的AndroidManifest.xml:
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application android:name="roboguice.application.RoboApplication"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:debuggable="true" >
<!-- ... other stuffs here ... -->
<receiver android:name=".receivers.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
SmsReceiver.java:
public class SmsReceiver extends BroadcastReceiver {
public static final String TAG = "SmsReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "SMS received!");
Toast.makeText(context, "SMS received.", Toast.LENGTH_LONG).show();
}
}
虽然它在模拟器(Android 2.2)上正常工作但它在我的HTC Wildfire上无效(Android 2.2.1,未植根)。
主要问题是我是Android新手,我完全不知道如何调试它。
我可以在接收短信时从我的HTC设备中找到有用的LogCat日志发送内容吗?为什么我的设备不同!?
答案 0 :(得分:10)
原因&amp;溶液强>:
我已经解决了这个问题。 “android.provider.Telephony.SMS_RECEIVED”无效,因为我的设备上安装了“GO SMS Pro”应用程序并且选中了“禁用其他消息通知”选项(“禁用其他SMS相关应用程序的通知”吧,避免重复通知。“)。取消选中它解决了我的问题。
如果确保我的广播接收器即使其他应用阻止它也会收到此意图?由于“android:priority”(Intercept SMS messages in Android and prevent them appearing in Messaging App),我怎么知道为“GO SMS Pro”应用程序设置了什么“优先级”?
答案 1 :(得分:7)
为了你的理由&amp;溶液:
Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");
List<ResolveInfo> infos = getPackageManager().queryBroadcastReceivers(intent, 0);
for (ResolveInfo info : infos) {
System.out.println("Receiver name:" + info.activityInfo.name + "; priority=" + info.priority);
}
只需查看GO SMS Pro废话的输出。它可能高得离谱。
答案 2 :(得分:2)
GO短信PRO优先级为2 ^ 31-1 = 2147483647.因此,您的应用无法接收任何消息,因为GO短信服务中止了其他广播。
答案 3 :(得分:0)
我很确定这段代码是对的。您可能没有看到Toast
消息,但日志会出现。检查Logcat,您应该看到已放入的日志。
您应该在Notifications
内使用BroadcastReceivers
而不是Toast
。