web-dev-qa-db-fra.com

Android BroadcastReceiver, service d'exécution automatique après le redémarrage de l'appareil

Bonjour, j'écris une application, qui est lorsque le téléphone redémarre, le service va démarrer automatiquement au lieu de cliquer sur l'application.

Voici mon code pour 

BootCompleteReceiver.Java

package com.example.newbootservice;

import Android.content.BroadcastReceiver;  
import Android.content.Context;  
import Android.content.Intent;    

public class BootCompleteReceiver extends BroadcastReceiver {   

    @Override  
    public void onReceive(Context context, Intent intent) {  

        Intent service = new Intent(context, MsgPushService.class);  
        context.startService(service);   

    }  

}

MsgPushService.Java

package com.example.newbootservice;

import Android.app.Service;  
import Android.content.Intent;  
import Android.os.IBinder;   
import Android.widget.Toast;

public class MsgPushService extends Service {  


    @Override  
    public void onCreate() {  
        super.onCreate();    
    }  

    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  

        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        return Service.START_STICKY;  
    }  

    @Override
    public void onDestroy() {

        super.onDestroy();
        Toast.makeText(this, "Service Destroy", Toast.LENGTH_LONG).show();
    }

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

MainActivity.Java (je ne sais pas si j'en ai besoin)

package com.example.newbootservice;

import Android.os.Bundle;
import Android.app.Activity;
import Android.content.Intent;
import Android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        startService(new Intent(getBaseContext(), MsgPushService.class));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Manifeste

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.newbootservice"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="8"
        Android:targetSdkVersion="15" />

    <application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >

        <service Android:name=".MsgPushService"/>

        <receiver Android:name=".BootCompleteReceiver">  
            <intent-filter>     
                <action Android:name="Android.intent.action.BOOT_COMPLETED"/>  
                <category Android:name="Android.intent.category.DEFAULT" />  
            </intent-filter>  
        </receiver>

        <activity
            Android:name=".MainActivity"
            Android:label="@string/title_activity_main" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Je veux que le service soit démarré automatiquement après le redémarrage au lieu de le démarrer manuellement.

31
BangBoat

D'abord faire ceci

1) Dans votre élément <manifest>:

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

MODIFIER :

Solution simple et intelligente:

-> Service de démarrage automatique au démarrage du périphérique

47
Dixit Patel

Vous avez oublié les autorisations

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />
7
agamov

Bien que toutes les réponses ci-dessus soient correctes, toutefois, à partir de Android Oreo, elles imposent certaines limitations aux services d'arrière-plan.

Vérifier Limites d’exécution en arrière-plan pour en savoir plus sur les limites d’arrière-plan dans Android O.

Vous ne pouvez pas démarrer un service directement à partir de BroadCastReceiver lorsque l'application est en arrière-plan. 

Cependant, vous pouvez démarrer un service de premier plan à partir du destinataire en appelant startForegroundService() ou en utilisant JobIntentService , car il n'existe aucune limitation de ce type avec JobIntentService.

5
Kunu

Utilisez ce code sur votre classe de récepteur de radiodiffusion:

if ("Android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
   Intent service = new Intent(context, MsgPushService.class);  
    context.startService(service);  
  }
0
Juboraj Sarker

essayez également ces autorisations, cela peut vous aider. Si vous utilisez des téléphones htc, ces autorisations sont nécessaires

<action Android:name="Android.intent.action.BOOT_COMPLETED" />
<category Android:name="Android.intent.category.DEFAULT" />
<action Android:name="Android.intent.action.QUICKBOOT_POWERON"/>
0
saksham agarwal