2016-06-04 18 views
1

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)

+0

können Sie LogCat posten? –

Antwort

0

einen Service-Tag in Manifest hinzufügen, können Sie, dass

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

Anfrage in manifest haben hinzugefügt werden, um Posten Fehlerprotokoll/logcat

+0

Hallo, ich habe ein Service-Tag in Manifest hinzugefügt, aber es funktioniert immer noch nicht –