Android-Dienste – Fehler: Service nicht registriert

Ich versuche, beschränkte Dienste zu verstehen. Unter meinem Beispielprogramm, in dem ich versuche, http://developer.android.com/guide/components/bound-services.html zu folgen. Der Service funktioniert so weit ich kann spielen, pausieren und stoppen die Audio noch, wenn ich auf eine andere App umschalten bekomme ich die folgenden Service nicht registriert Fehler.

java.lang.RuntimeException: Unable to stop activity {com.example.dd_services_audio_01/com.example.dd_services_audio_01.MainActivity}: java.lang.IllegalArgumentException: Service not registered: com.example.dd_services_audio_01.MainActivity$1@2afca5d8 09-05 14:04:32.625: E/AndroidRuntime(5810): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2451) 09-05 14:04:32.625: E/AndroidRuntime(5810): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2496) 

Da die Codierung dem Dokumentationsbeispiel genau zu folgen scheint, habe ich keine Ahnung, wo die Dinge schief gehen Ich laufe diese App mit minSdk Level 8. Der Fehler passiert in MainActivity.onStop an der Zeile

  • Wie benutzt man Jarsigner für die Unterzeichnung eines Apks?
  • Was ist der richtige Weg, um ein Android-Widget mit dynamisch gezeichneten Inhalt zu implementieren?
  • Android - Drehen eines ImageView mit dem Finger bewegt andere Ansichten um
  • Schütteln / Wackeln Animation in Android
  • Wie installiere ich einen Apk auf dem Emulator in Android Studio?
  • Alternative setButton
  •   mService.unbindService(mConnection); 

    Irgendwelche Vorschläge, um das zu lösen, wäre großartig.

    Vielen Dank

    Martin

     package com.example.dd_services_audio_01; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.Environment; import android.os.IBinder; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.example.dd_services_audio_01.AudioPlayerService.AudioPlayerBinder; public class MainActivity extends Activity { private final String TAG = "MainActivity"; AudioPlayerService mService; boolean mBound = false; Button mPlay, mPause, mStop; String audioFile = Environment.getExternalStorageDirectory() + "/justdzongsar/DJKR_AboutToGetIt.mp3"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"onCreate"); setContentView(R.layout.activity_main); mPlay = (Button) findViewById(R.id.buttonPlay); mPause = (Button) findViewById(R.id.buttonPause); mStop = (Button) findViewById(R.id.buttonStop); mPlay.setOnClickListener(new OnClickListener() { public void onClick(View v) { mService.play(audioFile); } }); mPause.setOnClickListener(new OnClickListener() { public void onClick(View v) { mService.pause(); } }); mStop.setOnClickListener(new OnClickListener() { public void onClick(View v) { mService.stop(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override protected void onStart() { super.onStart(); // Bind to LocalService Intent intent = new Intent(this, AudioPlayerService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); if (mBound) { mService.unbindService(mConnection); mBound=false; } } /** Defines callbacks for service binding, passed to bindService() */ private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { // We've bound to LocalService, cast the IBinder and get // LocalService instance AudioPlayerBinder binder = (AudioPlayerBinder) service; mService = binder.getService(); mBound = true; } @Override public void onServiceDisconnected(ComponentName arg0) { mService = null; mBound = false; } }; } 

    und

     package com.example.dd_services_audio_01; import java.io.IOException; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class AudioPlayerService extends Service implements OnPreparedListener, OnCompletionListener { private final String TAG = "AudioPlayerService"; private final IBinder mBinder = new AudioPlayerBinder(); private MediaPlayer mMediaPlayer; private String currentDataSource; public class AudioPlayerBinder extends Binder { public AudioPlayerService getService() { Log.v(TAG, "AudioPlayerBinder: getService() called"); return AudioPlayerService.this; } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return mBinder; } @Override public boolean onUnbind(Intent intent) { // All clients have unbound with unbindService() return false; } @Override public void onStart(Intent intent, int startId) { Log.i(TAG, "AudioPlayerService: onStart() called, instance=" + this.hashCode()); } @Override public void onDestroy() { Log.i(TAG, "AudioPlayerService: onDestroy() called"); releaseMediaPlayer(); } // ----- public void play(String audioFile) { Log.d(TAG, "audio play called with file " + audioFile); if (mMediaPlayer != null && audioFile.compareTo(currentDataSource) == 0) { if (mMediaPlayer.isPlaying() == true) { return; } mMediaPlayer.start(); return; } releaseMediaPlayer(); try { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(audioFile); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnCompletionListener(this); currentDataSource = audioFile; mMediaPlayer.prepareAsync(); } catch (IOException ioe) { Log.e(TAG, "error trying to play " + audioFile, ioe); } } public void pause() { Log.d(TAG, "audio pause"); if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { mMediaPlayer.pause(); } } public void seek(int timeInMillis) { if (mMediaPlayer != null) { mMediaPlayer.seekTo(timeInMillis); } } public int elapsed() { if (mMediaPlayer == null) { return 0; } return mMediaPlayer.getCurrentPosition(); } public void stop() { Log.d(TAG, "audio stop"); releaseMediaPlayer(); } // -- private void releaseMediaPlayer() { if (mMediaPlayer == null) { return; } if (mMediaPlayer.isPlaying()) { mMediaPlayer.stop(); } mMediaPlayer.release(); mMediaPlayer = null; } @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub releaseMediaPlayer(); } @Override public void onPrepared(MediaPlayer mp) { if (mp != null) { mp.start(); } // TODO Auto-generated method stub } } 

  • Token-Authentifizierung mit Volleyball
  • Fit Image in ImageButton in Android
  • Füge den Tooltip-Pfeil zu DialogFragment hinzu
  • Überprüfen, ob subObject in JSON vorhanden ist
  • Android-Benachrichtigungssymbol
  • Kotlin lateinit Eigenschaften, NPE Gefahr?
  • 5 Solutions collect form web for “Android-Dienste – Fehler: Service nicht registriert”

    Hatte ein ähnliches Problem, aber die akzeptierte Antwort war nicht die Lösung für mich. Zum Glück gab mir einer der Kommentare die Antwort:

    OnServiceDisconnected soll nicht angehoben werden, wenn du deinen Service entbindet hast, also verlass dich nicht darauf. Es soll Sie informieren, falls die Verbindung zwischen Ihrem Service und ServiceConnection gelöscht wird.

    Dank @Waqas fand ich den Fehler: Ich habe die boolean binded nur in onServiceConnected() und onServiceDisconnected() . Jetzt habe ich "binded = false" jedes Mal hinzugefügt, wenn ich unbindService() und das Problem gegangen ist. Das ist es, verlass dich nicht auf onServiceDisconnected

    Ah, einer dieser Tage

     mService.unbindService(mConnection); 

    Ist offensichtlich Quatsch und ruft ungebunden in den falschen Zusammenhang. Es sollte sein

     unbindService(mConnection); 

    Ein weiterer Fehler in der gebuchten Codierung ist der fehlende

     @Override public boolean onUnbind(Intent intent) { // All clients have unbound with unbindService() releaseMediaPlayer(); return false; } 

    Als sidenote, da keiner der anderen Antworten geholfen hat, fand ich, dass mein Fehler einen anderen Context für Bindung und Entbindung benutzte. Meine Bindung war aus dem Anwendungskontext, aber mein unbind war aus dem Aktivitätskontext.

    Um den Fehler zu beheben, habe ich den gleichen Kontext für bindService() und unbindService() .

    Möglicherweise müssen Sie sicherstellen, dass mService nicht null ist. Die folgende Zeile gab mir den "Service not Registered" Fehler:

    if (mContext != null) mContext.unbindService(mServiceConn);

    Das war sehr verwirrend da sowohl mContext als auch mServiceConn nicht null waren.

    Das hat es behoben:

    if (mContext != null && mService != null) mContext.unbindService(mServiceConn);

    Mein MediaPlayer würde aufhören, wenn ich die App getötet habe, aber 5 Minuten Schicht oder weniger würde es wieder alles wieder auf eigene Faust starten.

    Um dies zu beheben, musste ich zusätzlich zu @ dorjeducks Antwort auch mediaPlayer.stop() anrufen, bevor ich mediaPlayer.release mediaPlayer.stop() anrufe.

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