Я пытаюсь сделать простой аудиоплеер. Когда я создаю его в основном действии без обслуживания, он работает правильно, музыка воспроизводится (он работает, если я нажимаю кнопку питания, чтобы выключить экран), и это все еще работает правильно после включения экрана. Но если я использую сервис для воспроизведения музыки в фоновом режиме, мое приложение отключается, когда я нажимаю кнопку питания для включения экрана.Почему мое приложение отключается, если я использую службу Android?
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: 54,206 31873-31885/com.vitaliylevashov.serviceplayer В/медиаплеера: получено сообщение MSG = 6, EXT1 = 0, ext2 = 0 06-05 09: 58: 54,206 31873-31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: получено MEDIA_STARTED 06-05 09: 58: 54.206 31873-31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: обратная связь 06-05 09: 58: 54.206 31873- 31885/com.vitaliylevashov.serviceplayer V/MediaPlayer: назад от обратного вызова 06-05 09: 58: 54.236 31873-31873/com.vitaliylevashov.serviceplayer I/MediaPlayer: Не отправляйте намерение. msg.arg1 = 0, msg.arg2 = 0 06-05 09: 58: 54.236 31873-31873/com.vitaliylevashov.serviceplayer E/MediaPlayer: Должен иметь уже установленный контроллер субтитров 06-05 09: 58: 54.256 31873- 31873/com.vitaliylevashov.serviceplayer В/MediaPlayer-JNI: getCurrentPosition: 192 (мс) 06-05 09: 58: 54,256 31873-31873/com.vitaliylevashov.serviceplayer В/MediaPlayer-JNI: isPlaying: 1 < < 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer D/AndroidRuntime: выключение VM 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer W/dalvikvm: threadid = 1: (группа = 0x41660bc0) 06-05 09: 59: 25.526 31873-31873/com.vitaliylevashov.serviceplayer E/AndroidRuntime: FATAL EXCE PTION: main Процесс: com.vitaliylevashov.serviceplayer, PID: 31873 android.database.StaleDataException: Попытка получить доступ к курсору после его закрытия. на android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed (BulkCursorToCursorAdaptor.java:64) в android.database.BulkCursorToCursorAdaptor.requery (BulkCursorToCursorAdaptor.java:133) в android.database.CursorWrapper.requery (CursorWrapper.java:186) на android.app.Activity.performRestart (Activity.java:5346) на android.app.ActivityThread.handleSleeping (ActivityThread.java:3487) на android.app.ActivityThread.access $ 3000 (ActivityThread.java:155) на android .app.ActivityThread $ H.handleMessage (ActivityThread.java:1428) на android.os.Handler.dispatchMessage (Handler.ja va: 102) на android.os.Looper.loop (Looper.java:136) на android.app.ActivityThread.main (ActivityThread.java:5433) на java.lang.reflect.Method.invokeNative (собственный метод) at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1268) at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:1084) в dalvik.system.NativeStart.Основной (Native Method)
Вы можете разместить LogCat? –