software sigue servicios services reparar play para google funcionar fallando errores error descargar continua como certificar certificado app actualizacion android service

sigue - Servicios de Android-error: servicio no registrado



servicios de google play continua fallando (5)

Ah, uno de estos dias

mService.unbindService(mConnection);

Es obvio que no tiene sentido, llamar a desvincular en el contexto equivocado. Debería ser

unbindService(mConnection);

Error adicional en la codificación publicada es la falta de

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

Estoy tratando de entender los servicios limitados. Debajo de mi programa de muestra en el que trato de seguir http://developer.android.com/guide/components/bound-services.html . El servicio funciona en la medida en que puedo reproducir, pausar y detener el audio. Sin embargo, cuando cambio a otra aplicación, aparece el siguiente error de Servicio no registrado.

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)

Como la codificación parece seguir de cerca el ejemplo de la documentación, no tengo idea de dónde van las cosas mal. Ejecuto esta aplicación con minSdk nivel 8. El error ocurre en MainActivity.onStop en la línea

mService.unbindService(mConnection);

Cualquier sugerencia para resolver esto sería genial.

Gracias

martín

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

y

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


Como una nota al margen, ya que ninguna de las otras respuestas ayudó, descubrí que mi error estaba usando un Context diferente para vincular y desvincular. Mi enlace era del contexto de la Aplicación, pero mi desvinculación era del contexto de la Actividad.

Para corregir el error, me aseguré de usar el mismo contexto para bindService() y unbindService() .


Es posible que deba asegurarse de que mService no sea nulo. La siguiente línea me dio el error "Servicio no registrado":

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

Esto fue muy confuso porque mContext y mServiceConn no eran nulos.

Esto lo arregló:

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


Mi MediaPlayer se detendría cuando eliminara la aplicación, pero a los 5 minutos de la capa o menos, se volvería a iniciar por sí solo.

Para solucionar esto, además de la respuesta de @ dorjeduck, también tuve que llamar a mediaPlayer.stop() antes de llamar a mediaPlayer.release() .


Tenía un problema similar, pero la respuesta aceptada no era la solución para mí. Por suerte uno de los comentarios me dio la respuesta:

Se supone que onServiceDisconnected no se genera cuando desvincula su servicio, por lo que no confíe en él. Se supone que debe informarle en caso de que se interrumpa la conexión entre su Servicio y la Conexión de servicio.

Gracias a @Waqas encontré el error: estaba actualizando la onServiceConnected() boolean binded solo dentro de onServiceConnected() y onServiceDisconnected() . Ahora agregué "binded = false" cada vez que llamé a unbindService() y el problema desapareció. Eso es todo, no confíe en onServiceDisconnected