Maison > Java > javaDidacticiel > Pourquoi mon service Android ne démarre-t-il pas au démarrage ?

Pourquoi mon service Android ne démarre-t-il pas au démarrage ?

Barbara Streisand
Libérer: 2024-12-12 20:42:18
original
743 Les gens l'ont consulté

Why Isn't My Android Service Starting on Boot?

Démarrer un service au démarrage d'Android

La mise en œuvre de la configuration correcte pour démarrer automatiquement un service au démarrage du système d'exploitation Android est cruciale. Même si tout semble être configuré correctement, il peut y avoir des problèmes sous-jacents empêchant le comportement souhaité.

Manifeste Android

Consultez le manifeste Android fourni :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.phx.batterylogger"
  android:versionCode="1"
  android:versionName="1.0"
  android:installLocation="internalOnly">

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <service android:name=".BatteryLogger"/>
    <receiver android:name=".StartupIntentReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
        </intent-filter>  
    </receiver>
</application>

</manifest>
Copier après la connexion

Assurez-vous que l'action BOOT_COMPLETED est enregistrée dans le IntentReceiver.

BroadcastReceiver for Startup

Ensuite, vérifiez le StartupIntentReceiver :

package com.phx.batterylogger;

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

public class StartupIntentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent(context, BatteryLogger.class);
        context.startService(serviceIntent);
    }
}
Copier après la connexion

Ce récepteur devrait écouter l'action BOOT_COMPLETED et démarrer le voulu service.

Dépannage

Si le service ne démarre pas au démarrage, envisagez les étapes suivantes :

  • Vérifiez que les journaux indiquent le le récepteur reçoit la diffusion BOOT_COMPLETED.
  • Vérifiez que le service cible est correctement déclaré et configuré dans le Manifeste.
  • Assurez-vous que le service cible n'est pas désactivé ou optimisé par le système.
  • Envisagez d'utiliser l'API Context.startForegroundService(Intent intent, int notificationId) pour démarrer le service au premier plan ( disponible au niveau API 26 et supérieur).

Complet Exemple

Pour un exemple complet d'application AutoStart, reportez-vous au code suivant extrait :

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pack.saltriver" android:versionCode="1" android:versionName="1.0">

    <uses-permission android:name="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>

        <activity android:name=".hello"></activity>
        <service android:enabled="true" android:name=".service" />
    </application>
</manifest>
Copier après la connexion

autostart.java

public class autostart extends BroadcastReceiver 
{
    public void onReceive(Context context, Intent arg1) 
    {
        Intent intent = new Intent(context,service.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(intent);
        } else {
            context.startService(intent);
        }
        Log.i("Autostart", "started");
    }
}
Copier après la connexion

service.java

public class service extends Service
{
    private static final String TAG = "MyService";
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public void onStart(Intent intent, int startid)
    {
        Intent intents = new Intent(getBaseContext(),hello.class);
        intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intents);
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");
    }
}
Copier après la connexion

hello.java

public class hello extends Activity 
{   
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getBaseContext(), "Hello........", Toast.LENGTH_LONG).show();
    }
}
Copier après la connexion

Implémentation ces étapes devraient garantir que votre service Android démarre correctement au démarrage du système d'exploitation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal