Android 引导完成和操作关闭从不调用广播接收器

Android 引导完成和操作关闭从不调用广播接收器,android,broadcastreceiver,boot,Android,Broadcastreceiver,Boot,我想用BroadcastReceiver捕捉关闭和引导完成的操作。 但事实证明,这两个信号从未触发BroadcastReceiver(我在logcat上没有看到任何日志)。 这是我的源代码 我在舱单上给予许可 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 另外,我在onDestroy注销了两个BoradcastReceiver public void onDestroy()

我想用BroadcastReceiver捕捉关闭和引导完成的操作。 但事实证明,这两个信号从未触发BroadcastReceiver(我在logcat上没有看到任何日志)。 这是我的源代码

我在舱单上给予许可

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
另外,我在onDestroy注销了两个BoradcastReceiver

public void onDestroy()
{
    unregisterReceiver(BootReceiver);
    unregisterReceiver(ShutDownReceiver);
    super.onDestroy();
}
有人知道我的代码出了什么问题吗?
或者我错过了什么?谢谢。

从Android 3.1开始,您的应用程序可能尚未添加到“BOOT_COMPLETED”可能的接收者列表中,为了获得“BOOT_COMPLETED”操作,您的应用程序必须由用户明确启动,显示活动或其他组件,在此之前,您的应用程序将不会收到您期望的广播,重要的是要知道,如果您“强制关闭”应用程序,它将再次丢失广播,因此,尝试打开一个活动,然后重新启动设备,您将得到它

希望这有帮助

问候

试试这个

 <receiver
            android:name="packagename.GPSReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter android:priority="500" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

引导完成
必须在清单中注册。您无法通过
registerReceiver()
为其注册,因为当您调用
registerReceiver()
时,引导已经发生很久了


很好,关机广播可以与registerReceiver()一起工作,不过在您的情况下,它只会在进程运行时出现。

我找到了它不工作的原因。 因为我使用的是HTC设备,所以广播信息与其他设备不同

  • 关闭事件广播“
    com.htc.intent.action.QUICKBOOT\u断电
  • 重启(重启)事件广播“
    android.intent.action.action\u关机
  • 开机事件广播“
    com.htc.intent.action.QUICKBOOT\u开机

  • 在其他设备中,当关闭设备时,它可能会广播“
    android.intent.action.QUICKBOOT\u POWEROFF

    AFAIK,该
    android:permission
    元素将不起作用。感谢您的回答。我自己激活了活动,然后重新启动设备。结果是一样的。看看Commonware answer,你必须在清单中声明你的接收器,以便在应用程序没有完全运行的情况下收听广播,在你的代码中,你的registerReceiver方法永远无法执行……我在关闭设备时也看不到任何日志。你知道吗?thanks@user3138776:我从未尝试过使用
    操作\u关机
    ,因此我不知道会发生什么。尽管--
    ACTION\u SHUTDOWN
    不仅仅是为了关闭屏幕(即
    ACTION\u screen\u off
    ),但请确保您确实关闭了设备电源。您如何了解HTC的特定意图?我是micromax公司的员工你有什么意见吗?感谢您的回答更安全的方式写以下方式:私人最终字符串ACTION\u SHUTDOWN=“ACTION\u SHUTDOWN”;intent.getAction()包含(操作\u关闭)
    public void onDestroy()
    {
        unregisterReceiver(BootReceiver);
        unregisterReceiver(ShutDownReceiver);
        super.onDestroy();
    }
    
     <receiver
                android:name="packagename.GPSReceiver"
                android:enabled="true"
                android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
                <intent-filter android:priority="500" >
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>