Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;android.provider.Telephony.SMS“收到”;不在我的设备上工作(HTC Wildfire)-如何调试?_Android - Fatal编程技术网

&引用;android.provider.Telephony.SMS“收到”;不在我的设备上工作(HTC Wildfire)-如何调试?

&引用;android.provider.Telephony.SMS“收到”;不在我的设备上工作(HTC Wildfire)-如何调试?,android,Android,我面临着令人沮丧的问题 正如大多数在线和书籍教程所说,我创建了短信接收器 AndroidManifest.xml: <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:name="roboguice.application.RoboApplication"

我面临着令人沮丧的问题

正如大多数在线和书籍教程所说,我创建了短信接收器

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>
虽然它在Emulator(Android 2.2)上正常工作,但在我的HTC Wildfire(Android 2.2.1,非根目录)上不工作

主要的问题是,我是Android开发的新手,完全不知道如何调试它


当我的HTC设备接收短信时,我能从它发送的LogCat日志中找到有用的东西吗?为什么我的设备与众不同

我非常肯定这段代码是正确的。您可能看不到
Toast
消息,但日志会出现。检查Logcat,您应该会看到您放置的日志


您应该在
广播接收器内使用
通知
,而不是
吐司
s。

原因与解决方案

我已经修好了。“android.provider.Telephony.SMS_RECEIVED”不起作用,因为我的设备上安装了“GO SMS Pro”应用程序,并且选中了“禁用其他消息通知”选项(“在通知栏中禁用其他SMS相关应用程序的通知,避免重复通知”)。取消勾选它解决了我的问题

如何确保我的广播接收器在其他应用程序阻止的情况下也能接收到该意图?由于“安卓:优先级”(android:priority)的原因,我如何知道“GO SMS Pro”应用程序的“优先级”(priority)是什么?

出于您的原因和解决方案:

Intent-Intent=new-Intent(“android.provider.Telephony.SMS_-RECEIVED”);
List infos=getPackageManager().queryBroadcastReceivers(intent,0);
for(ResolveInfo:infos){
System.out.println(“接收方名称:“+info.activityInfo.name+”;“priority=“+info.priority”);
}

只需查看你的输出就可以了。它可能高得离谱。

GO SMS PRO的优先级为2^31-1=2147483647。因此,由于GO短信服务中止了其他广播,您的应用程序无法接收任何消息。

短信广播已订购,因此第一步是拉起您的接收器。为此,您可以将意图过滤器上的android:priority属性设置为一个不计后果的高值,然后再次测试。试试2147483647之类的东西。它不会改变任何东西:(.没有登录LogCat,没有显示Toast,只是设备上什么都没有(在模拟器上,它工作正常)。我想知道为什么手机收到短信时会登录LogCat:“11-06 23:43:20.540:DEBUG/SMSDispatcher(171):dispatchWapPushToCIQ>>”。这可能是原因或任何跟踪?嗯,试着下载一个现有的短信过滤器(从市场上)或类似于你的Wildfire的东西,并首先进行测试-它可能是HTC手机中的一些不可靠的东西(以前发生过…)谢谢:),这是一个很好的跟踪。我发现“GO SMS Pro”应用程序阻止了我的应用程序的这一意图(更多详细信息,请参阅我的解决方案中关于此主题的答案)。感谢百万富翁:)!现在我看到“GO SMS Pro”的家伙制作了两个优先级等于最大整数值(2147483647)的接收器。他们的应用程序可能正在对收到的短信调用abortBroadcast()。那么,我有没有办法和他们的应用抗争呢?文档中没有说明优先级相等时会发生什么,但当我发现“Go SMS Pro”应用程序先被调用时,会消耗我的SMS_接收到的意图,因此我的应用程序不会被调用:(。如果我没记错的话,这是“先安装后赢”。最好的办法是警告客户Go SMS Pro是一个已知问题(对话、通知或您所拥有的一切)。再次感谢。最好的解决方案可能是对您所写内容的一些扩展:使用上面的代码,检查是否有其他具有最高优先级的SMS_RECEIVED intent注册接收者。然后警告用户列出的应用可能会导致问题。只是一个小建议:您最好使用
Telephony.SMS.Intents.SMS_RECEIVED_ACTION
constantthx,在“高级设置”->“其他设置”->(取消选中)“禁用其他消息通知”中,此选项有效。
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();
    }
}
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);
}