it-swarm.com.de

Android BroadcastEmpfänger, Auto-Run-Dienst nach dem Neustart des Blickes

Hallo, ich schreibe eine Anwendung. Wenn das Telefon neu gestartet wird, startet der Dienst automatisch, anstatt auf die Anwendung zu klicken.

Hier ist mein Code für 

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 (nicht sicher, ob ich das brauche)

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;
    }
}

Manifest

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

Ich möchte, dass der Dienst nach dem Neustart automatisch gestartet wird, anstatt ihn manuell zu starten.

31
BangBoat

Tun Sie dies zuerst

1) In Ihrem <manifest>-Element:

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

EDIT:

Einfache und intelligente Lösung:

-> Autostart-Dienst beim Gerätestart

47
Dixit Patel

Sie haben die Berechtigungen vergessen

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

Obwohl alle obigen Antworten richtig waren, schränkten die Hintergrunddienste von Android Oreo jedoch einige Einschränkungen ein.

Überprüfen Sie Hintergrundausführungslimits , um mehr über Hintergrundgrenzwerte in Android O zu erfahren.

Sie können einen Dienst nicht direkt von BroadCastReceiver aus starten, wenn sich die Anwendung im Hintergrund befindet. 

Sie können jedoch einen Vordergrunddienst vom Empfänger aus starten, indem Sie startForegroundService() aufrufen oder JobIntentService verwenden, da dies mit JobIntentService nicht beschränkt ist.

5
Kunu

Verwenden Sie diesen Code in Ihrer Broadcast-Receiver-Klasse:

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

probieren Sie auch diese Berechtigungen aus. Wenn Sie HTC-Telefone verwenden, sind diese Berechtigungen erforderlich

<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