OnServiceConnected wurde niemals nach der bindService-Methode aufgerufen

Ich habe eine besondere Situation: Ein Service, der von einem Rundfunkempfänger begonnen wird, beginnt eine Aktivität. Ich möchte es möglich machen, dass diese Aktivität dem Service mitgeteilt wird. Ich habe mich dafür entschieden, AIDL zu benutzen. Alles scheint gut zu funktionieren, außer für bindService() -Methode, die in onCreate() der Aktivität aufgerufen wird. BindService (), in der Tat, wirft eine Null-Pointer-Ausnahme, weil onServiceConnected() niemals aufgerufen wird, während onBind() -Methode des Dienstes ist. Jedenfalls bindService() gibt true zurück. Der Service ist offensichtlich aktiv, weil er die Aktivität beginnt. Ich weiß, dass das Aufrufen einer Aktivität von einem Service seltsam klingen könnte, aber leider ist dies der einzige Weg, um Spracherkennung in einem Dienst zu haben.

Danke im Voraus

  • Beste Zeit / Tag, um auf Android Market zu veröffentlichen?
  • Entwickeln von Android-REST-Client-Anwendungen
  • Was ist die Standard-ActionBar-Titel-Schriftgröße?
  • Warum kann dieses spezifische Gerät nicht von UsbManager.getDevicesList () aufgezählt werden?
  • Eclipse-Fehler, "Die Auswahl kann nicht gestartet werden, und es gibt keine neuen Starts"
  • Weiche Tastatur versteckt Actionbar
  • Force Android verwenden 3G, wenn auf lokalen Bereich WiFi ohne Netzzugang
  • Aktivieren spezifischer SSL-Protokolle mit Android WebViewClient
  • Xamarin ZipAlign nicht gefunden
  • Verwenden von Non-Production-Aktivitäten für das Testen mit Android Studio
  • Android Bitmap native Code - Verknüpfung Problem
  • Wie bekomme ich Text von EditText?
  • 8 Solutions collect form web for “OnServiceConnected wurde niemals nach der bindService-Methode aufgerufen”

    Ich kann das genaue Problem nicht aus deiner Beschreibung herausholen, also werde ich hier erraten!

    Wie kann bindService() eine NullPointerException ? Der einzige Weg, den dies passieren könnte, ist, wenn Sie keinen Service oder einen ServiceConnection Listener versorgen.

    bindService() kann eine NullPointerException nicht NullPointerException da onServiceConnected() nicht aufgerufen wird. Der Aufruf von onServiceConnected() ist ein Produkt von bindService() .

    Also ich denke, du AIDL eine AIDL Methode, bevor der Service tatsächlich gebunden ist?

    Ich habe gerade eine andere Version dieses Problems erlebt, mit dem gleichen Symptom von onServiceConnected(...) nicht aufgerufen. Die Ursache war in meinem Fall anders.

    Sie müssen sicherstellen, dass Sie eine Service-Deklaration in Ihrem AndroidManifest.xml innerhalb des Anwendungs-Tags haben – das war die Wurzel des Problems für mich.

     <application android:name=".YourAppTitle" android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> </activity> <service android:name="YourService" /> </application> 

    Es gibt eine zusätzliche Komplikation, wenn Sie eine separate Android-Bibliothek in Eclipse verwenden – Hinzufügen dieser Service-Tag scheint nur das Problem zu beheben, wenn der referenzierte Dienst im selben Paket wie das Manifest ist; Dh wenn deine App im Paket abc ist und das ist, wo AndroidManifest.xml wohnt, dann muss 'YourService' auch im Paket abc sein (manuell von einer anderen Bibliothek kopiert werden, falls nötig) oder das <service..> tag kann / werden Ignoriert und onServiceConnected(...) immer noch nicht aufgerufen.

    Dies war der Fall für mein Projekt, obwohl ich eine passende Import-Anweisung für den Service in meinem Code verwendet habe. Eclipse zeigte keinen Fehler, so dass der Import korrekt die Klasse aus einer anderen Bibliothek im Eclipse-Arbeitsbereich identifizierte.

    HTH

    Nach Stunden und Stunden zu versuchen, dies herauszufinden, ist das Problem, dass die Beispiele, die die Erstellung des Dienstes zeigen, nicht die onBind-Methode enthalten oder sie haben die folgenden Beispielcode oder es generiert dies für Sie:

     public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } 

    Dies führt dazu, dass die onServiceConnected-Methode fehlschlägt oder niemals ausgeführt wird. Das Fix ist sehr einfach, das ist folgendes:

     public IBinder onBind(Intent intent) { return mBinder; } 

    Wo können Sie eine einfache Binder wie die folgenden zurückgeben:

     private final IBinder mBinder = new LocalBinder(); public class LocalBinder extends Binder { public ConferenceService getService() { return ConferenceService.this; } } 

    Das onServiceConnected- Ereignis wurde niemals in meiner Anwendung aufgerufen.

    Das Problem war, dass ich den Dienstnamen in meinem Application Manifest als:

     <service android:name="MyService" android:enabled="true"></service> 

    Sobald ich es in den vollen Klassennamen geändert habe, funktionierte es:

     <service android:name="com.example.MyService" android:enabled="true"></service> 

    Update: Sie können auch einen relativen Klassennamen verwenden:

     <service android:name=".MyService" android:enabled="true"></service> 

    Geben Sie den Klassennamen mit seiner vollständigen com.example.MyServiceClass anstelle von nur MyServiceClass an .

    Eine weitere Sache ist, dass, wenn Sie bindservice Methode innerhalb der oncreate Methode oncreate , dann wird die onserviceconnected aufgerufen, nachdem die oncreate Methode beendet ist.

    Also irgendwelche Verweise auf die Schnittstellenfunktionen, bevor das oncreate endet (oder bevor onserviceconnected aufgerufen wird) null Zeigerausnahme zeigt.

    Noch eine andere Ursache für die ursprüngliche Frage könnte sein, dass der Dienst nicht bereits läuft und du übergibst 0 als Fahne an bindService. Wie so:

     bindService(intent, serviceConnection, 0); 

    Wenn das, was Sie suchen, wäre:

     bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); 

    Es kann eine andere Erklärung geben, nicht eine sehr häufige Situation, aber ich habe es geschafft, in sie zu gehen und 2 Stunden zu verlieren, um es zu lösen.

    Also, was ich tat, war, dass ich das Bündel aus der Absicht, die von der onBind-Methode erhalten wurde, wiederverwenden wollte. Aber ich ging für die faulen Version und veränderte die Klasse der Absicht. Anscheinend bewirkt dies, dass die onServiceConnected nicht angerufen wird. Wahrscheinlich, weil das System einen Hinweis auf die Absicht hält und nutzt es beim Aufruf onServiceConnected.

    Abschließend ändere ich nicht die Absicht, die du in onBind erhältst.

    Ich habe mich mit einem leeren Intent – getContext().bindService(new Intent(), mConnection, Context.BIND_AUTO_CREATE) . Ich muss die Absicht genauer machen, um anzugeben, welchen Dienst ich anbinden möchte. Das ist offensichtlich ein Codefehler, aber die Logcat-Ausgabe war leider nicht klar genug.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.