2016-06-04 2 views
1

간단한 오디오 플레이어를 만들려고합니다. 서비스가없는 주 활동에서 만들면 올바르게 작동하고 음악이 재생됩니다 (전원 버튼을 눌러 화면을 끄면 작동 함). 화면을 켠 후에도 음악이 올바르게 작동합니다. 그러나 백그라운드에서 음악을 재생할 때 서비스를 사용하면 화면을 켤 때 전원 버튼을 누르면 앱이 종료됩니다.service 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의 V/MediaPlayer를 58 : 메시지 MSG = 6, 외부 1 = 0, = 0 EXT2 06-05 09 수신 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- 31,873/com.vitaliylevashov.serviceplayer V/MediaPlayer를-JNI : getCurrentPosition : 192 (밀리 초) 06-05 09 : 58 : 54.256 31873-31873/com.vitaliylevashov.serviceplayer V/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 기본 : 프로세스 : com.vitaliylevashov.serviceplayer, PID : 31873 android.database.StaleDataException : 커서가 닫힌 후 커서에 액세스하려고 시도했습니다. android.database.CursorWrapper.requery에서 android.database.BulkCursorToCursorAdaptor.requery (BulkCursorToCursorAdaptor.java:133) 에서 android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed (BulkCursorToCursorAdaptor.java:64) (CursorWrapper.java:186) 에서 에서 안드로이드에서 android.app.ActivityThread.access $ 3000 (ActivityThread.java:155) 에서 android.app.ActivityThread.handleSleeping (ActivityThread.java:3487) 에서 android.app.Activity.performRestart (Activity.java:5346) .app.ActivityThread $ H.handleMessage (ActivityThread.java:1428) android.os.Handler.dispatchMessage (Handler.ja 030) android.os.Looper.loop (Looper.java:136) at android.app.ActivityThread.main (ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative (네이티브 메소드) java.lang.reflect.Method.invoke (Method.java:515) 에서 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1268) at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:1084) at dalvik.system.NativeStart.주 (기본 방법)

+0

당신이 로그 캣을 게시 할 수 있습니다/매니페스트

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

요청에 오류 로그를 게시 할 것이라고 덧붙였다 havent 한 할 수있다? –

답변

0

는 매니페스트에서 서비스 태그를 추가하면 로그 캣

+0

안녕하세요, 매니페스트에 서비스 태그를 추가하고 있지만 여전히 작동하지 않습니다. –

관련 문제