как перехватить системную трансляцию BOOT_COMPLETED, моя программа просто не работает? - PullRequest
5 голосов
/ 26 ноября 2011

Я написал небольшую программу, чтобы поймать системную трансляцию 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, и Eclipse запустил новый AVD, но после загрузки системы я просто не вижу журнал в LogCat ...

Ответы [ 2 ]

9 голосов
/ 26 ноября 2011

Ну, я попробовал это, и это работает для меня,

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>
4 голосов
/ 26 ноября 2011

Вам нужно добавить

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

И

убедитесь, что приложение не установлено на SD-карту - установленные там приложения IIRC не получают это BOOT_COMPLETED.

Другое дело, что устройства с включенной «быстрой загрузкой» (например, несколько устройств HTC) (иногда?) Не отправляют BOOT_COMPLETED.

Начиная с Android 3.1+ есть еще несколько странностей в отношении BOOT_COMPLETED, относящихся к «самому первому запуску приложения» - см. 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 при загрузке работает просто отлично. Там не нужно было запускать эмулятор из командной строки.

Другой рабочий образец можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...