如果应用程序在ICS中没有至少启动一次,则广播接收器无法正常工作。

14

这个问题在stackoverflow上已经被问了很多次,但是还没有解决方案。 我有一个用于接收USB连接动作的广播接收器。广播接收器的责任是,如果我得到了该意图,则启动我的应用程序。在清单文件中,我已经添加了接收器。 我在GingerBread中使用了相同的逻辑,但是在ICS中它不起作用。 有许多类似的问题, broadcast-not-invoking

1: Android Boot-Up BroadCast Not invokingbroadcastreciever-not-working

如果我手动启动我的应用程序一次,那么下一次连接USB时我的应用程序将自动启动。 尝试回答相同的问题,但没有答案。 ICS中是否有任何解决方案?

这是我的接收器

        <receiver android:name="com.test.MyReceiver">
                <intent-filter>
                    <action android:name="android.hardware.usb.action.USB_STATE" />
                    <action android:name="android.net.wifi.STATE_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                </intent-filter>
            </receiver>
    and this is my class
    public class MyReceiver extends BroadcastReceiver {
    .
    .
    .

  public void onReceive(Context context, Intent intent) {
.

我有哪里做错了吗?

提前感谢 --Kozlov


我对你的问题没有答案,但如果我能看一下你的代码并查看是否有任何明显的问题可能会有所帮助。然而,我有一个应用程序,在ICS中即使有引导监听器也可以正常工作,所以我不能确定你的问题是什么。 - waxspin
嗨,waxspin,感谢您的评论。请使用清单和接收器编辑问题。您能否检查是否有任何错误?我也拥有必要的权限。 - Kozlov
我认为我误解了问题,认为没有人启动过该应用程序。 我将不得不听从下面的CommonsWare,因为他似乎已经进行了相当多的测试。 在我的特定情况下,我的应用程序之所以有效,是因为必须至少打开一次才能对最终用户有用。 我想你在这里唯一能做的就是调整用户体验,以便这不成为问题。 我只是没有注意到我的应用程序,因为我的特定情况在更改后不需要重新调整。 - waxspin
1个回答

12

ICS中有没有解决这个问题的方案?

它正常工作。从Android 3.1开始,除非用户手动启动了一个活动,否则不会有BroadcastReceiver可用。八个月前,我写了一篇关于此的博客文章


1
@Ben:因为内容提供者不是自动使用的。这是为了帮助减少驱动程序恶意软件,安装一些钩子系统广播,并在没有任何用户参与的情况下执行操作的东西。 - CommonsWare
1
@Ben:据我所知,如果你的代码不能在将应用程序移出停止状态之前发送广播,那么我不明白你的问题在哪里。 - CommonsWare
我正在从另一个应用程序发送广播。我的情况是独特的,但基本上,我正在使用BroadcastReceiver作为在同一设备上的多个应用程序之间的发布/订阅消息总线。 - Ben
2
@Ben 如果你知道你想要允许一个应用程序在被停止后启动,你可以使用http://developer.android.com/reference/android/content/Intent.html#FLAG_INCLUDE_STOPPED_PACKAGES。但请记住,这样做的效果是将应用程序移动到已启动状态,因此只有在你正在广播的内容与现在启动的应用程序之间存在某种用户连接时才应该这样做。 - hackbod
@hackbod,你知道我们如何在AndroidManifest.xml中的Intent-Filter上设置Intent-Flag吗? - Hossein Shahdoost
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接