“android.provider.Telephony.SMS_RECEIVED”无法在我的设备上运行(HTC Wildfire) - 如何调试?

时间:2011-11-06 22:08:07

标签: android

我面临着非常令人沮丧的问题。

我创建短信接收器,因为大多数在线和书籍的教程说。

的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日志发送内容吗?为什么我的设备不同!?

4 个答案:

答案 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