如何捕捉系统广播BOOT_COMPLETED,我的程序只是不起作用?

时间:2011-11-26 08:22:01

标签: android broadcastreceiver

我写了一个小程序来捕捉系统广播BOOT_COMPLETED,但它不起作用:

package com.alex.app.testsysreboot;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("my_tag", "system reboot completed.......");
    }    
}

的manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.alex.app.testsysreboot"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
</manifest>

我关闭了AVD,然后在Eclipse中单击了“run”按钮,Eclipse启动了一个新的AVD,但是在系统启动后,我只是看不到LogCat中的日志......

2 个答案:

答案 0 :(得分:9)

我试过这个,它对我有用,

public class Autostart extends BroadcastReceiver 
{
    public void onReceive(Context arg0, Intent arg1) 
    {
        Log.i("Autostart", "**********started************");
    }
}

AndroidManifest文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" android:versionCode="1" android:versionName="1.0"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".Autostart">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
</manifest>

答案 1 :(得分:4)

您需要添加

android:enabled="true" 
android:exported="true" 

确保SD卡上未安装该应用程序 - 安装在那里的IIRC应用程序未收到BOOT_COMPLETED

另一点是启用了“快速启动”的设备(如多个HTC设备)(有时?)不发送BOOT_COMPLETED

自从Android 3.1及“{1}}与”应用程序首次启动“相关时,更为奇怪 - 请参阅http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html

包含来源的工作示例项目https://github.com/commonsguy/cw-advandroid/tree/master/SystemEvents/OnBoot

来自http://arthurfmay.blogspot.com/2011/06/broadcastreceiver-bootcompleted-and.html

  

相反,从Eclipse开始我就进入了Android SDK和AVD   管理器(在窗口菜单下)并从那里启动模拟器。一世   在将应用程序加载到模拟器后,当然这样做了。我开始   启动时模拟器和我的BroadcastReceiver工作得很好。那里   无需在命令行运行模拟器。

可以找到另一个工作样本here