Service binder

  • Antworten:1
  • Bentwortet
Reno Krohmann
  • Forum-Beiträge: 8

31.03.2011, 13:35:12 via Website

Hallo alle zusammen,

zunächst mal ein Danke all die selbstlosen Schreiber hier. Ich hoffe ich kann über kurz oder lang auch meinen Teil beitragen aber im Moment habe ich ein kleines Problem. Ich habe mir einen GPS_Service geschrieben. Dieser liefert mir alles was ich so brauche Position, Geschwindigkeit, Höhe usw. Nun habe ich eine Activity mit der ich auf diesen Service zugreife und mir die Daten hole. Funktioniert auch hervorragend. Jetzt brauche ich aber einen weiteren Service der wiederum mit den GPS - Daten was anfangen soll. Deshalb hab ich den GPS_Service geschrieben weil mir von vorn herein klar war, dass ich die Infos in verschiedenen Activitys und Services wieder brauchen würde. Leider schmeißt mir dieser Service immer eine NullPointerException und ich weiß nicht warum. Es scheint am binder zu liegen aber ich habe den Coce x mal anders geschrieben und alle möglichen Versuche gestartet ich kriege keine Daten. Ich poste einfach mal den empfangenden Service vielleicht sieht ja irgend jemand wo mein Fehler ist.
1public class SendPos extends Service {
2
3 private Gps_Service mService;
4 private boolean mBound = false;
5 private TelephonyManager tel;
6 private PhoneListener PhoneListener;
7 private String strgth = "";
8 private String power = "";
9
10 private ServiceConnection mConnection = new ServiceConnection() {
11
12 public void onServiceConnected(ComponentName className, IBinder service) {
13 mService = ((Gps_Service.Gps_Binder) service).getService();
14
15 }
16
17 public void onServiceDisconnected(ComponentName className) {
18 mService = null;
19 }
20 };
21
22
23 @Override
24 public void onCreate() {
25 super.onCreate();
26
27
28 Intent intent = new Intent(getApplicationContext(), Gps_Service.class);
29 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
30
31 // doBindService();
32 doWrite();
33
34 }
35
36 private void doWrite() {
37
38 ...... hier wir die eigentliche Arbeit gemacht aber da fehlen mir schon die Daten weil irgendwie onServiceConnected() nicht aufgerufen wird aber warum
39 nicht?
40 }
41
42
43 void doBindService() {
44
45 bindService(new Intent(SendPos.this, Gps_Service.class), mConnection, Context.BIND_AUTO_CREATE);
46 mBound = true;
47 }
48
49 void doUnbindService() {
50 if (mBound) {
51 // Detach our existing connection.
52 unbindService(mConnection);
53 mBound = false;
54 }
55 }
56
57 @Override
58 public void onDestroy() {
59 super.onDestroy();
60 doUnbindService();
61 }
62
63
64 @Override
65 public IBinder onBind(Intent arg0) {
66 // TODO Auto-generated method stub
67 return null;
68 }
69
70}

kann mich irgend jemand mit der Nase drauf stucken warum sich dieser Service nicht mit dem anderen Service verbindet?

Vielen Dank schon mal im Voraus.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

01.04.2011, 11:28:28 via Website

onServiceConnected wird Asynchron ausgerufen, daher solltest du drauf achten das du erst was mit dem Service anstellst nachdem diese Methode durchlaufen wurde! Wie ich aus deinem Quellcode aber entnehme hast du das Sequenziell programmiert in deiner onCreate. Ich würde erst mal den Code soweit vereinfachen
das die onServiceConnected durchlaufen wird, mehr nicht. Also rufe nur bindService(intent, mConnection, Context.BIND_AUTO_CREATE); in der onCreate auf!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten