Ich versuche, einen einfachen Audio-Player zu machen. Wenn ich es in der Hauptaktivität ohne Service erstelle, funktioniert es richtig, Musik spielt (es funktioniert, wenn ich Power-Taste drücke, um den Bildschirm auszuschalten) und das funktioniert immer noch korrekt nach dem Einschalten des Bildschirms. Aber wenn ich den Dienst zum Abspielen von Musik im Hintergrund verwende, schaltet sich meine App aus, wenn ich die Einschalttaste drücke, um den Bildschirm einzuschalten.Warum wird meine App heruntergefahren, wenn ich Service-Android verwende?
public class MainActivity extends AppCompatActivity {
static ArrayList<HashMap<String, Object>> listSongs = new ArrayList<>();
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listSongs = getAllMusicInfo();
intent = new Intent(this, BackgroundPlayer.class);
Button buttonStart = (Button) findViewById(R.id.startService);
buttonStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent);
Toast.makeText(MainActivity.this, "It's started", Toast.LENGTH_SHORT).show();
}
});
Button buttonStop = (Button) findViewById(R.id.StopService);
buttonStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
Toast.makeText(MainActivity.this, "It's stopped", Toast.LENGTH_SHORT).show();
}
});
}
public class BackgroundPlayer extends Service implements MediaPlayer.OnCompletionListener {
MediaPlayer player;
@Override
public void onCreate() {
super.onCreate();
player = new MediaPlayer();
try {
player.setDataSource((String) MainActivity.listSongs.get(0).get("path"));
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return START_STICKY;
}
@Override
public void onCompletion(MediaPlayer mp) {}
}
06-05 09:58:54.206 31873-31873/com.vitaliylevashov.serviceplayer V/MediaPlayer: start
06-05 09: 58: 31.873 bis 31.885 54,206/com.vitaliylevashov.serviceplayer V/Mediaplayer: Nachricht empfing msg = 6, EXT1 = 0, ext2 = 0 September 06-05: 58: 54,206 31873-31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: Empfangen MEDIA_STARTED 06-05 09: 58: 54.206 31873-31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: Rückrufanwendung 06-05 09: 58: 54.206 31873- 31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: zurück von Rückruf 06-05 09: 58: 54.236 31873-31873/com.vitaliylevashov.serviceplayer I/MediaPlayer: Keine Absichten senden. msg.arg1 = 0, msg.arg2 = 0 06-05 09: 58: 54.236 31873-31873/com.vitaliylevashov.serviceplayer E/MediaPlayer: Der Untertitel-Controller sollte bereits eingestellt sein 06-05 09: 58: 54.256 31873- 31873/com.vitaliylevashov.serviceplayer V/Mediaplayer-JNI: getCurrentPosition: 192 (msec) September 06-05: 58: 31.873 bis 31.873 54,256/com.vitaliylevashov.serviceplayer V/Mediaplayer-JNI: isPlaying: 1 < < 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer D/AndroidRuntime: Herunterfahren VM 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer W/dalvikvm: threadid = 1: Thread beendet mit nicht abgefangener Ausnahme (Gruppe = 0x41660bc0) 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer E/AndroidRuntime: FATAL EXCE Tln: main Prozess: com.vitaliylevashov.serviceplayer, PID: 31873 android.database.StaleDataException: Es wurde versucht, auf einen Cursor zuzugreifen, nachdem dieser geschlossen wurde. bei android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed (BulkCursorToCursorAdaptor.java:64) bei android.database.BulkCursorToCursorAdaptor.requery (BulkCursorToCursorAdaptor.java:133) bei android.database.CursorWrapper.requery (CursorWrapper.java:186) bei android.app.Activity.performRestart (Activity.java:5346) bei android.app.ActivityThread.handleSleeping (ActivityThread.java:3487) bei android.app.ActivityThread.access $ 3000 (ActivityThread.java:155) bei android .app.ActivityThread $ H.handleMessage (ActivityThread.java:1428) bei android.os.Handler.dispatchMessage (Handler.ja va: 102) bei android.os.Looper.loop (Looper.java:136) bei android.app.ActivityThread.main (ActivityThread.java:5433) bei java.lang.reflect.Method.invokeNative (Native Methode) bei java.lang.reflect.Method.invoke (Methode.java:515) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1268) bei com.android.internal.os .ZygoteInit.main (ZygoteInit.java:1084) bei dalvik.system.NativeStart.main (native Methode)
können Sie LogCat posten? –