2013-03-25 6 views
5

Sono nuovo nella programmazione Android. Ho un ricevitore che avvia un servizio all'avvio ma sembra non essere mai partito. Puoi dirmi cosa sto sbagliando? Non so come fare il debug. Puoi spiegarmi come posso eseguire il debug dei servizi di avvio di Android?Il servizio di avvio Android non si avvia mai

Ecco il mio codice. Grazie in anticipo

Recibidor.java:

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

public class Recibidor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Iniciando Recibidor", Toast.LENGTH_LONG).show(); 
     final String TAG = "Recibidor"; 
     Log.i(TAG, "Iniciando Recibidor"); 

     if (intent.getAction().equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) { 
     Toast.makeText(context, "Iniciando Intent", Toast.LENGTH_LONG).show(); 
     Log.i(TAG, "Iniciando Intent"); 

     Intent servicio = new Intent(); 
     servicio.setAction("com.pruebas.Servicio"); 
     context.startService(servicio); 

     Log.i(TAG, "Iniciando Servicio"); 
     Toast.makeText(context, "Iniciando Servicio", Toast.LENGTH_LONG).show(); 
     } 

    } 
} 

Servicio.java

package com.pruebas; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class Servicio extends Service { 
    private final String TAG = "Servicio"; 


    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.i(TAG, "ON CREATE"); 
     Toast.makeText(this, "ON CREATE", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.i(TAG, "ON DESTROY"); 
     Toast.makeText(this, "ON DESTROY", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     startForeground(0, null); 
     Log.i(TAG, "ON START COMMAND"); 
     Toast.makeText(this, "ON START COMMAND", Toast.LENGTH_LONG).show(); 
     return START_STICKY; 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pruebas" 
    android:versionCode="1" 
    android:versionName="1.0" 
    android:installLocation="internalOnly" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application> 
     <service android:name=".Servicio"> 
      <intent-filter> 
       <action android:name="com.pruebas.Servicio"/> 
      </intent-filter> 
     </service> 

     <receiver android:name=".Recibidor" android:enabled="true" android:exported="true" 
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 
+0

Ricevi l'intento nel tuo Recibidor? – Entreco

+0

Ciao Entreco. Puoi dirmi come posso sapere se sto ricevendo l'intento? – eloweyn

+0

È possibile effettuare il login sul metodo Recoiver – tundundun

risposta

4

Il codice che hai postato non potrà mai lavorare su versioni successive di Android. Per prevenire il malware, con versioni successive di Android, non è possibile registrare automaticamente un BroadcastReceiver nel file manifest UNTIL l'utente ha avviato manualmente l'app dall'avvio dell'app.

Sarà necessario creare un Activity con le voci MAIN/LAUNCHER <intent-filter>. Una volta che l'utente ha avviato manualmente l'app una volta, la registrazione manifest per il tuo BroadcastReceiver si verificherà e rimarrà registrata a meno che l'utente non usi "Arresto forzato" dalla sezione Gestisci applicazioni delle Impostazioni.

+0

Grazie Squonk !! – eloweyn

1

deve essere installato nella memoria interna L'applicazione per ricevere l'intento BOOT_COMPLETED. Vedere questa domanda: My BroadcastReceiver is not receiving the BOOT_COMPLETED intent after my N1 boots. Help Please!

+0

android: installLocation = "internalOnly" significa che l'app è installata solo in interno .. per ricevere qualsiasi broadcat u hav 2 app una volta .. e si prega di registrare il ricevitore in altro –

+0

l'applicazione ha il tag Android: installLocation = "internalOnly". È installato nella memoria interna – eloweyn