Start Service nach dem Booten funktioniert nicht...

  • Antworten:14
  • Bentwortet
katuschi
  • Forum-Beiträge: 19

01.03.2014, 11:25:20 via Website

Hallo,

ich habe eine Applikation programmiert, die noch nicht fertig ist.
Gerade bin ich an dem Teil mit automatischem Starten nach dem Booten und Start eines Services, so dass der sich nicht beendet.
Der Start des Services funktioniert soweit denke ich.
Jedoch startet die Applikation nicht richtig nach dem Bootvorgang. Es erscheint vor der Eingabe des PIN-Codes der SIM-Karte die Meldung: "Applikation wurde beendet". LogCat spuckt leider nichts aus.

AndroidManifest.XML:
1<!-- permissions: start after boot -->
2 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3
4...
5<application
6 android:allowBackup="true"
7 android:icon="@drawable/ic_launcher"
8 android:label="@string/app_name"
9 android:theme="@style/AppTheme" >
10
11 <!-- receiver for starting app after boot -->
12 <receiver
13 android:name=".BootReceiver"
14 android:enabled="true"
15 android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
16 <intent-filter>
17 <action android:name="android.intent.action.BOOT_COMPLETED" />
18
19 <category android:name="android.intent.category.DEFAULT" />
20 </intent-filter>
21 </receiver>
22
23
24 <!-- start application as service -->
25 <service android:name="com.receiver.service.ApplikationService" >
26 </service>

Applikation,java:
1@Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 startService(new Intent(ApplikationStart.this, ApplikationService.class));
5 setContentView(R.layout.activity_start);
6...

ApplikationService.java:
1public class ApplikationService extends Service{
2
3 @Override
4 public IBinder onBind(Intent arg0) {
5 return null;
6 }
7
8 @Override
9 public int onStartCommand(Intent intent, int flags, int startId) {
10 return Service.START_STICKY;
11 }
12
13 @Override
14 public void onCreate() {
15 super.onCreate();
16 }
17
18 @Override
19 public void onDestroy() {
20 onCreate(); // hier sollte eigtl ein LOOP entstehen, so dass die Applikation immer wieder Startet....
21 }
22}

BootReceiver.java:
1public class BootReceiver extends BroadcastReceiver {
2
3 @Override
4 public void onReceive(Context context, Intent intent) {
5 Intent service = new Intent(context, ApplikationService.class);
6 context.startService(service);
7 }
8
9}


Hoffe, ihr könnt mir weiterhelfen.
Als ich das getestet hatte ohne den ganzen Code meiner Applikation und an einem anderen Tablet hat es auch funktioniert.
Jetzt habe ich das Lenovo IdeaTab A3000-H mit Android 4.2.2

Falls ihr noch Informationen benötigt, fragt einfach :)

Vielen Dank und viele Grüße :)

— geändert am 01.03.2014, 11:26:52

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 11:29:04 via App

Gegen ein onDestroy() im Service kannst du nichts ausrichten. Also sind die Methoden onDestroy und onCreate bei dir überflüssig.

Bitte ein paar mehr Infos: Startet der Broadcastreceiver? Startet der Service? Wird er beendet?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.03.2014, 11:30:09 via Website

Teste es mal ohne sim und warum Spuckt LogCat nix aus?
Wenn eine Application beendet oder abgebrochen wird, steht das dort normalerweise immer.+
Wenn du es auf dem Emulator testest, dann kannst du den BootComplete auch simulieren:
http://stackoverflow.com/questions/11325920/how-to-test-boot-completed-broadcast-receiver-in-emulator

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
katuschi
  • Forum-Beiträge: 19

01.03.2014, 12:33:15 via Website

Vielen Dank für eure Antworten :)

@impjor:
der Service Startet:

Er geht in onCreate in ApplikationService.java.
In den Einstellungen unter aktiven Apps steht er mit 1Prozess und 1Dienst.
Wenn ich die App normal beende startet sie wieder mit 1Prozess und 1Dienst.

in die onDestroy()-Methode kommt er auch, falls du das mit beenden meinst.

Was genau meinst du mit Startet der Broadcastreceiver?
Es kommt ja eine Fehlermeldung, dass die App beendet wurde nach dem Boot... von demher denke ich ja...

@Pascal P.:
ohne SIM passiert das Selbe...
Das in dem Link funktoiniert noch nicht, da erscheint Error: Activity class does not exist...
Ich melde mich wieder, wenn das Problem behoben ist ;)

Antworten
katuschi
  • Forum-Beiträge: 19

01.03.2014, 12:53:15 via Website

also, er hat den BootReceiver nicht gefunden, hab das passende package im Manifest noch angegeben, jetzt startet er als service :)
1<receiver
2 android:name="com.receiver.service.BootReceiver"

nun muss er nur noch wirklich angezeigt werden (er startet im Hintergrund...)

habt ihr da noch eine Idee?

LG :)

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 13:57:38 via App

katuschi
nun muss er nur noch wirklich angezeigt werden (er startet im Hintergrund...)
Ein Service läuft immer im Hintergrund und hat keine Benutzeroberfläche, sonst wäre es ja eine Activity.
Oder was genau meinst du mit "Im Hintergrund"
LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
katuschi
  • Forum-Beiträge: 19

01.03.2014, 16:41:26 via Website

Hmmm ok, dann hab ich eine Activity mit einem Service.
Der Service startet im Hintergrund (also das was er tun sollte) und die Activity soll dann sozusagen sichtbar werden, wenn der Service startet.

Sry, ich bin noch sehr sehr neu auf dem Gebiet...

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 17:02:12 via App

Beschreibe doch etwas genauer, was am Ende dabei rauskommen soll!

Normalerweise ist es ziemlich unklug, eine App/Activity direkt nach dem Booten zu starten, wenn man nicht alle seine User verärgern möchte.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
katuschi
  • Forum-Beiträge: 19

01.03.2014, 17:15:26 via Website

Alsoooo, hab es hinbekommen :)
meine Klasse sieht nun so aus:
1public class BootReceiver extends BroadcastReceiver {
2
3 // Service nach Boot starten
4 @Override
5 public void onReceive(Context context, Intent intent) {
6 // Start Service On Boot Start Up
7 Intent service = new Intent(context, ApplikationService.class);
8 context.startService(service);
9
10 //Start App On Boot Start Up
11 Intent App = new Intent(context, ApplikationStart.class);
12 App.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
13 context.startActivity(App);
14 }
15
16}


zur Erklärung: der Service + Applikation starten nach dem Booten.
Funktioniert nun auch :)

Vielen Dank an euch :)


Normalerweise ist es ziemlich unklug, eine App/Activity direkt nach dem Booten zu starten, wenn man nicht alle seine User verärgern möchte.
Bei der Applikation aber nicht, da es eine Art Benutzerverwaltung mit Einschränkung verschiedener Permissions wird. Von demher sollte sie ja zuerst starten.



Nochmals Danke an euch :)

Antworten
katuschi
  • Forum-Beiträge: 19

01.03.2014, 17:37:50 via Website

Das weiß ich noch nicht so genau. Denke aber schon...
Die App oder besser gesagt der Service soll ja auch Prüfen, ob der angemeldete User zum Beispiel die Applikation überhaupt starten darf...
Da bin ich mir noch nicht so sicher

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.03.2014, 18:22:00 via App

D.H. Dein konzept ist nicht ausgereift und du Programmierst einfach drauf los?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
katuschi
  • Forum-Beiträge: 19

02.03.2014, 12:18:58 via Website

Fast :D

Ich weiß schon, was die App können soll, nur weiß ich noch nicht so genau wie das im Detail realisierbar ist.
Auch ist es noch spannend, ob ich sie so fertig bekomme, wie ich sie haben möchte.
Hab nur begrenzt Zeit, da es sich um meine Bachelorarbeit handelt...

lg :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.03.2014, 12:31:58 via Website

Du hast noch nicht genau beschrieben, was deine App nachher überhaupt tun soll. Vlt. hilft uns das, dir zu helfen :)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten