2011-11-26 7 views
5

Ho writed un piccolo programma per catturare il sistema di trasmissione BOOT_COMPLETED, ma semplicemente non funziona:come catturare la trasmissione di sistema BOOT_COMPLETED, il mio programma non funziona?

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> 

ho chiuso l'AVD, e poi cliccato su " eseguire" in Eclipse, e l'Eclipse ha iniziato una nuova AVD, ma dopo l'avvio del sistema, non riesco proprio a vedere il log in LogCat ...

+0

è possibile verifica il mio esempio completo [qui] (http://stackoverflow.com/questions/7690350/android-start-service-on-boot/7690600 # 7690600) –

+0

il mio programma è più semplice del tuo. non voglio avviare un servizio, ma semplicemente generare un log usando Log.i (xxxxx), non funziona, ho concertato il mio programma al livello API 3, quindi non può essere installato sulla scheda SD, ancora non funziona. potresti eseguire il mio programma nel tuo ambiente, grazie in anticipo ... – zenis

+0

Ok, proverò con quale versione stai usando 3.0 o 2.2? –

risposta

9

Beh ho provato questo e funziona per me,

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

file di 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

ho riavviato la mia eclisse, e funziona, ..... – zenis

4

è necessario aggiungere

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

E

fare in modo che l'applicazione non è installata sulla scheda SD - applicazioni installate IIRC lì non ricevono che BOOT_COMPLETED.

Un altro punto è che i dispositivi con "Avvio veloce" abilitato (come diversi dispositivi HTC) (a volte?) Non inviano BOOT_COMPLETED.

Dal Android 3.1+ v'è ancora un po 'per quanto riguarda stranezza BOOT_COMPLETED relativo al "primissimo inizio di un app" - vedi http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html

Un progetto di esempio di lavoro con la fonte di vedere https://github.com/commonsguy/cw-advandroid/tree/master/SystemEvents/OnBoot

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

Quindi, da Eclipse sono appena entrato nell'Android SDK e nell'AVD Manager (sotto il menu Finestra) e ho avviato l'emulatore da lì. I ha fatto questo ovviamente dopo aver caricato l'app nell'emulatore. Inizio l'emulatore e il mio BroadcastReceiver al boot funziona bene. Lì non era necessario andare a eseguire l'emulatore sulla riga di comando.

Un altro campione di lavoro può essere trovato here.

+1

ma nei documenti SDK, ho trovato le seguenti parole: la presenza di almeno un filtro implica che il destinatario della trasmissione è destinato a ricevere intenti trasmessi dal sistema o da altre applicazioni, quindi il valore predefinito è "true". ho specificato il filtro intent, quindi il valore predefinito dovrebbe essere true. dopo che li ho aggiunti, non funziona ancora ...... a proposito, come potrei sapere se ho istallato l'App nella scheda SD in un AVD ?? grazie in anticipo .... – zenis

+0

@CyberRusher ha aggiunto il link a un progetto campione di lavoro ... se non funziona, hai colpito uno dei casi che descrivo nella mia risposta ... – Yahia

+0

oh, grazie, ma cosa ho utilizzare è AVD, non il vero telefono – zenis

Problemi correlati