2016-06-04 4 views
1

Я пытаюсь сделать простой аудиоплеер. Когда я создаю его в основном действии без обслуживания, он работает правильно, музыка воспроизводится (он работает, если я нажимаю кнопку питания, чтобы выключить экран), и это все еще работает правильно после включения экрана. Но если я использую сервис для воспроизведения музыки в фоновом режиме, мое приложение отключается, когда я нажимаю кнопку питания для включения экрана.Почему мое приложение отключается, если я использую службу 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)

+0

Вы можете разместить LogCat? –

ответ

0

добавить тег сервиса в манифесте, может быть у вас нету добавил, что в явном запросе

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

размещать журнал ошибок/LogCat

+0

Привет, я добавляю тег службы в манифест, но он все еще не работает –

Смежные вопросы