我正在尝试侦听重启事件。
我创建了以下类:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("MYBOOTRECEIVER", "HELLO!");
}
}
然后在清单文件中我推出了以下xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage"
android:installLocation="internalOnly"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="3"
android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:label="@string/app_name" >
<receiver android:name=".OnBootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
</application>
</manifest>
然而,在我安装此应用程序并重新启动设备后,没有任何反应。 (我正在使用带有android 3.2的Galaxy tab 8.9)。 正如您从清单中看到的那样,我已经在内部存储器上安装了应用程序(就像在stackoverflow上的类似问题一样)...我还推出了一个Quickboot_poweron动作(看看galaxy tab是否有与htc设备相似的行为) ......但没什么。我希望有人可以帮助我!
答案 0 :(得分:8)
我在3.0版设备上遇到了同样的问题。
原因是
从3.1开始安装应用程序时,它们位于 “停止”状态,因此他们将无法运行直到用户 明确启动它们。按下强制停止将返回它 状态。
一旦用户第一次运行应用程序(并且没有强制停止 它),一切都像以前一样 - 重启将导致BOOT_COMPLETED 要收到的广播等等。但是,如果用户安装了 应用程序,除非他们手动运行应用程序,否则不会进行广播 接收。
因此,在您的情况下,您必须创建启动器活动,并确保至少启动一次启动器活动然后您将开始接收启动事件广播。
答案 1 :(得分:1)
问题在于,对于Honeycomb及其他,广播信号不会自动启动尚未启动的应用程序。有一个标志可用于更改此值,但BOOT_COMPLETED广播不携带该标志。您需要在系统分区上安装以克服这种细微差别。
如果您无法安装在系统分区上,则需要找到其他方法启动 - 通过说服用户手动启动,或让用户安装您提供的小部件等等。
答案 2 :(得分:0)
除了类别部分之外,清单中提及的操作是正确的,如果您只想接收启动完成,则可以排除此操作。在Receiver文件中,这将正常工作,但您应始终使用if-else语句来区分收到的操作。
if (action.equals(android.intent.action.BOOT_COMPLETED)) {
Log.i("MYBOOTRECEIVER", "BOOT COMPLETED RECEIVED");
}