如果使用硬件按钮重启设备,则不会调用BOOT_COMPLETED

时间:2015-04-18 21:48:00

标签: android

我已经注册了一个名为CheckReceiver的BroadcastReceiver: -

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.captchachecker"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:icon="@drawable/ic_launcher"
        android:installLocation="internalOnly"
        android:label="@string/app_name"
        >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".CheckReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>

    </application>

</manifest>

CheckReceiver代码: -

public class CheckReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("Check Receiver", "Captcha Receiver called");

        Toast.makeText(context, "Receiver called", Toast.LENGTH_SHORT).show();
        Intent service = new Intent(context, CheckService.class);
        startWakefulService(context, service);
    }
}

问题是,当我按下电源按钮并选择关机选项时,不会调用BroadcastReceiver。 如果我使用以下方法重启设备: -

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

然后调用BroadcastReceiver。 我已经阅读过有关为BroadcastReceiver至少启动一次活动的信息,并在检查之前启动了2-3次活动。

1 个答案:

答案 0 :(得分:1)

原来我曾经使用过: -

adb shell pm set-install-location 2 

过去在我的设备上。应用程序安装到SD卡忽略: -

 android:installLocation="internalOnly"

将应用程序移至手机后,它开始正常工作。要将应用移动到手机,请转到: -

设置 - &gt;应用 - &gt;您的应用并选择&#34;转到手机&#34;

所以,如果您的启动接收器不起作用。检查: -

  1. 清单中的权限和意图过滤器已正确声明。
  2. 应用程序至少有一项活动,用户在安装后或强制关闭应用程序后至少启动一次。
  3. 已将应用安装到内部存储空间。