Estoy reaaaaally nuevo en Java, pero una experiencia en C#coder.

He creado un servicio que yo puede iniciar/detener de una actividad.
Mi pregunta es, ¿cómo hago para «instalar» este servicio por lo que no se inicien al arrancar de mi dispositivo?

He encontrado esto:

Tratando de iniciar un servicio en el arranque en Android

He tratado de implementado este como este:

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

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:debuggable="true">
    <activity android:name=".jamessActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:enabled="true" android:name=".MyService">
        <intent-filter>
            <action android:name="james.jamesspackage.MyService" />
        </intent-filter>
        </service>
    <receiver android:name="james.jamesspackage.MyBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </receiver>
</application>
</manifest>

Lo que está mal? Puedo tener una actividad y un servicio/receptor en una manifestación?

Gracias

James

  • ¿Qué entiende usted por instalar? El postthat que se likning a explica lo que usted necesita para agregar a su manifiesto cuando se compila la aplicación.
  • Actualizado mi pregunta
InformationsquelleAutor user758945 | 2011-05-21

2 Comentarios

  1. 4

    Cómo iniciar el servicio en el dispositivo de arranque(ejecución automática de la aplicación, etc.)

    Para la primera: desde la versión Android 3.1+ no recibir BOOT_COMPLETE si el usuario nunca comenzó a yor de la aplicación al menos una vez o usuario de «forzar cierre» de la aplicación.
    Esto se hizo para evitar que el malware de forma automática del servicio de registro. Este agujero de seguridad fue cerrado en las versiones más recientes de Android.

    Solución:

    Crear aplicación con la actividad. Cuando el usuario ejecuta una vez que la aplicación puede recibir a BOOT_COMPLETE mensaje de difusión.

    Por segundo: BOOT_COMPLETE se envía antes de almacenamiento externo está montado. si la aplicación está instalada de almacenamiento externo y no recibir BOOT_COMPLETE mensaje de difusión.

    En este caso hay dos soluciones:

    1. Instalar su aplicación al almacenamiento interno
    2. Instalar una pequeña aplicación en el almacenamiento interno. Esta aplicación recibe BOOT_COMPLETE y ejecutar segunda aplicación en el almacenamiento externo.

    Si la aplicación ya instalada en el almacenamiento interno, a continuación, el código siguiente puede ayudarle a entender cómo iniciar el servicio en el dispositivo de arranque.


    En Manifest.xml

    Permiso:

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

    Registrar su BOOT_COMPLETED receptor:

    <receiver android:name="org.yourapp.OnBoot">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

    Registrar su servicio:

    <service android:name="org.yourapp.YourCoolService" />

    En el receptor OnBoot.java:

    public class OnBoot extends BroadcastReceiver
    {
    
        @Override
        public void onReceive(Context context, Intent intent) 
        {
            //Create Intent
            Intent serviceIntent = new Intent(context, YourCoolService.class);
            //Start service
            context.startService(serviceIntent);
    
        }
    
     }

    Para HTC usted tal vez necesite agregar también en el Manifiesto de este código si el dispositivo no coger RECEIVE_BOOT_COMPLETED:

    <action android:name="android.intent.action.QUICKBOOT_POWERON" />

    Receptor de ahora este aspecto:

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

    Cómo probar BOOT_COMPLETED sin reiniciar el emulador o dispositivo real?
    Es fácil. Intente esto:

    adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED

    Cómo obtener id de dispositivo? Obtener la lista de los dispositivos conectados con id:

    adb devices

    adb en ADT por defecto se pueden encontrar en:

    adt-installation-dir/sdk/platform-tools

    Disfrutar! )

  2. 3

    Parece el nombre en la sección del receptor está mal. Esto es lo que mi solicitud de entrada en la AndroidManifest.xml se parece a:

       <application android:icon="@drawable/icon" android:label="@string/app_name">
    
        <receiver android:name=".BootListener" 
                 android:enabled="true" 
                 android:exported="false"
                 android:label="BootListener">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    
           <service android:name=".UpdateService">
           </service>
    
           <activity android:name=".Info"
                     android:label="@string/app_name">
               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />
                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
    
        <activity android:name=".TravelMapperPreferences"
                  android:label="Settings">
        </activity>        
    
       </application>

    Tenga en cuenta que los nombres son en relación con el paquete en la declaración manifiesta. Su nombre del receptor debe ser «.MyBroadcastReceiver» ya que el paquete de el manifiesto contiene james.jamesspackage

Dejar respuesta

Please enter your comment!
Please enter your name here