2011-01-28 2 views
5

나는 여러 액티비티와 하나의 서비스로 구성된 앱을 가지고있다. 주요 활동은 스트리밍 오디오를위한 UI입니다. 사용자가 재생 버튼을 누르면 서비스가 시작되고 오디오가 스트리밍되고 메타 데이터가 읽혀집니다. 표시되면 메타 데이터가 UI에 푸시되고 알림 바가 표시됩니다. 전화가 올 때까지 모든 기능이 예상대로 작동합니다. 나는 표준 미디어 플레이어를 사용하여 스트림과 전화 통화 사이에서 오디오를 스위칭하는 것을 처리 할 것이라고 안심 시켰습니다. 그래서 PhoneStateListener를 만들어 호출을 처리하고 필요에 따라 플레이어를 중지합니다. 그래도 뭔가 잘못 했어. 아직 작동하지 않아서. 서비스 클래스와 로그 파일을 보면서 신경 쓰지 않는다면 정말 감사하겠습니다!내 스트리밍 오디오 플레이어가 계속 통화 중에 재생됩니다. 멈추게 할 수는 없습니다. (안드로이드)

모든 것이 유감입니다.

감사합니다. 청와대

package com.wtts.app; 

import java.io.BufferedInputStream; 
import java.io.FilterInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.IBinder; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 

public class WttsListenService extends Service { 

private String txtArtist = ""; 
private String txtTitle = ""; 
private String txtAlbum = ""; 
private Bitmap bmAlbum; 
private String lastSong = "a"; 
String[] mData = new String[3]; 
boolean IS_PLAYING; 
boolean INTERRUPTED; 

public URL streamUrl = null; 
String url = "http://customchannels-audio.streamguys.com/wttsfm-mp3"; 

public static final String UPDATE_SONG = "com.wtts.custom.intent.action.UPDATE_SONG"; 
private Timer timer = new Timer(); 
private static final long UPDATE_INTERVAL = 8500; 

public static final String PHONE_STATE = "android.intent.action.PHONE_STATE"; 
IntentFilter filter; 
BroadcastReceiver receiver; 

MediaPlayer player = new MediaPlayer(); 

private NotificationManager nm; 
private int NOTIFICATION_ID = 10101; 

public static final String SHOW_PROGRESS = "com.wtts.custom.intent.action.SHOW_PROGRESS"; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.i(this.toString(), "onCreate"); 

    filter = new IntentFilter(PHONE_STATE); 
    receiver = new ServiceReceiver(); 
    registerReceiver(receiver, filter); 

    if (player != null) { 
    player.reset(); 
    player.release(); 
    player = null; 
    } 
    startPlaying(); 
} 

void startPlaying() { 
    Log.i(this.toString(), "startPlaying"); 

    try { 
    player = new MediaPlayer(); 
    player.setDataSource(url); 
    player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    player.prepare(); 
    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer player) { 
    // TODO Auto-generated method stub 
    player.start(); 
    updateProgress("PLAY"); 
    } 
    }); 
    } catch (Exception e) { 
    Log.e(getClass().getSimpleName(), "create media player failed", e); 
    player.reset(); 
    player.release(); 
    player = null; 
    updateProgress("FAIL"); 
    return; 
    } 

    timer.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
    try { 
    getMetadata(); 
    Thread.sleep(UPDATE_INTERVAL); 
    } catch (InterruptedException ie) { 
    Log.e(getClass().getSimpleName(), 
     "MetadataService InterruptedException " 
     + ie.toString()); 
    } 
    } 
    }, 0, UPDATE_INTERVAL); 

} 

void notifyUser() { 
    Log.i(this.toString(), "notifyUser"); 
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

    Notification note = new Notification(R.drawable.wttsicon, "92.3 WTTS", 
    System.currentTimeMillis()); 

    PendingIntent intent = PendingIntent.getActivity(this, 0, new Intent(
    this, WttsApp.class), 0); 
    String strA = "92.3 WTTS"; 
    String strB = "Live Stream"; 
    if (txtArtist != "") { 
    strA = txtTitle; 
    } 
    if (txtTitle != "") { 
    strB = txtArtist; 
    } 
    note.setLatestEventInfo(this, strA, strB, intent); 
    nm.notify(NOTIFICATION_ID, note); 

} 

@Override 
public void onDestroy() { 
    Log.i(this.toString(), "onDestroy"); 
    super.onDestroy(); 
    if (timer != null) { 
    timer.cancel(); 
    } 
    if (nm != null) { 
    nm.cancel(NOTIFICATION_ID); 
    } 
    if (player != null) { 
    player.stop(); 
    player.release(); 
    } 
    unregisterReceiver(receiver); 
} 

private void updateProgress(String state) { 
    Intent intent; 
    try { 
    intent = new Intent(SHOW_PROGRESS); 
    intent.putExtra("state", state); 
    sendBroadcast(intent); 
    } catch (Exception e) { 
    Log.e(getClass().getSimpleName(), 
    "sendBroadcast failed - stop spinner", e); 
    intent = null; 
    } 
    intent = null; 
} 

public class ServiceReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    try { 
    MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
    TelephonyManager telephony = (TelephonyManager) context 
     .getSystemService(Context.TELEPHONY_SERVICE); 
    telephony.listen(phoneListener, 
     PhoneStateListener.LISTEN_CALL_STATE); 
    } catch (Exception e) { 
    Log.i("Exception", "ServiceReceiver() e = " + e); 
    } 
    } 
} 

public class MyPhoneStateListener extends PhoneStateListener { 
    public void onCallStateChanged(int state, String incomingNumber) { 
    try { 
    switch (state) { 
    case TelephonyManager.CALL_STATE_RINGING: 
    Log.i("Telephony Manager", "phone state=" + state); 
    if (IS_PLAYING) { 
     INTERRUPTED = true; 
     updateProgress("STOP"); 
     player.setAudioStreamType(AudioManager.AUDIOFOCUS_LOSS); 
     // player.stop(); 
    } 
    break; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
    Log.i("Telephony Manager", "phone state=" + state); 
    break; 
    case TelephonyManager.CALL_STATE_IDLE: 
    Log.i("Telephony Manager", "phone state=" + state); 
    if (INTERRUPTED) { 
     INTERRUPTED = false; 
     player.setAudioStreamType(AudioManager.AUDIOFOCUS_GAIN); 
     // player.start(); 
     updateProgress("PLAY"); 
    } 
    break; 
    } 
    } catch (Exception e) { 
    Log.i("Exception", "PhoneStateListener() e = " + e); 
    } 
    } 
}; 

private void getMetadata() { 
    try { 
    streamUrl = new URL(url); 
    } catch (MalformedURLException e) { 
    e.printStackTrace(); 
    } 
    IcyStreamMeta streamMeta = null; 
    try { 
    streamMeta = new IcyStreamMeta(streamUrl); 
    try { 
    streamMeta.refreshMeta(); 
    bmAlbum = null; 
    try { 
    mData = streamMeta.getSongInfo(); 

    txtArtist = mData[0]; 
    txtTitle = mData[1]; 
    txtAlbum = mData[2]; 

    } catch (Exception e) { 
    Log.e(this.toString(), "mData = streamMeta error", e); 
    txtArtist = ""; 
    txtTitle = ""; 
    txtAlbum = ""; 
    } 
    } catch (IOException e) { 
    Log.e(getClass().getSimpleName(), 
     "streamMeta.refreshMeta error", e); 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    String thisSong = txtArtist + txtTitle + txtAlbum; 
    if (thisSong.equals(lastSong)) { 
    // do nothing 
    } else { 
    if (txtAlbum == "") { 
    } else if (txtAlbum == null) { 
    } else { 
    bmAlbum = findImage(); 
    } 
    submitSong(); 
    lastSong = txtArtist + txtTitle + txtAlbum; 
    } 
} 

public void submitSong() { 
    Log.i(this.toString(), "submitSong"); 
    Intent intent = new Intent(UPDATE_SONG); 
    intent.putExtra("Artist", txtArtist); 
    intent.putExtra("Title", txtTitle); 
    intent.putExtra("Album", txtAlbum); 
    intent.putExtra("bmAlbum", bmAlbum); 
    try { 
    sendBroadcast(intent); 
    } catch (Exception e) { 
    Log.e(getClass().getSimpleName(), "sendBroadcast failed", e); 
    } 
    notifyUser(); 
} 

Bitmap findImage() { 
    Log.i(this.toString(), "findImage"); 
    URL fullUrl = null; 
    String tempAlbum = txtAlbum; 
    tempAlbum = tempAlbum.replaceAll(" ", "_"); 
    String imageUrl = getString(R.string.imageurl) + tempAlbum 
    + getString(R.string.imageformat); 
    imageUrl = imageUrl.replaceAll("\n", ""); 

    try { 
    fullUrl = new URL(imageUrl); 
    } catch (MalformedURLException e) { 
    // TODO Auto-generated catch block 
    // Log.i(getClass().getSimpleName(), "imageUrl not set"); 
    e.printStackTrace(); 
    return null; 
    } 

    try { 
    final URLConnection conn = fullUrl.openConnection(); 
    conn.connect(); 
    final BufferedInputStream bis = new BufferedInputStream(
    new FlushedInputStream(conn.getInputStream())); 
    bmAlbum = BitmapFactory.decodeStream(bis); 
    bis.close(); 
    return bmAlbum; 
    } catch (IOException e) { 
    Log.d(getClass().getSimpleName(), "album image not set"); 
    } 
    return null; 
} 

/* 
    * An InputStream that skips the exact number of bytes provided, unless it 
    * reaches EOF. 
    */ 
static class FlushedInputStream extends FilterInputStream { 
    public FlushedInputStream(InputStream inputStream) { 
    super(inputStream); 
    } 

    @Override 
    public long skip(long n) throws IOException { 
    long totalBytesSkipped = 0L; 
    while (totalBytesSkipped < n) { 
    long bytesSkipped = in.skip(n - totalBytesSkipped); 
    if (bytesSkipped == 0L) { 
    int b = read(); 
    if (b < 0) { 
     break; // we reached EOF 
    } else { 
     bytesSkipped = 1; // we read one byte 
    } 
    } 
    totalBytesSkipped += bytesSkipped; 
    } 
    return totalBytesSkipped; 
    } 
} 
} 

로그 캣 출력 :

01-28 16:35:40.487: INFO/[email protected](274): {StreamTitle=Pearl Jam~Black~Ten 
01-28 16:35:40.487: INFO/[email protected](274): ~334000~S~~~~5:34~Epic} 
01-28 16:35:40.487: INFO/[email protected](274): getSongInfo 
01-28 16:35:40.497: INFO/[email protected](274): return mData 
01-28 16:35:40.570: WARN/AudioFlinger(33): write blocked for 85 msecs, 476 delayed writes, thread 0xb3f0 
01-28 16:35:45.597: WARN/AudioFlinger(33): write blocked for 80 msecs, 522 delayed writes, thread 0xb3f0 
01-28 16:35:48.987: INFO/AudioService(58): AudioFocus requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 
01-28 16:35:49.067: INFO/Telephony Manager(274): phone state=1 
01-28 16:35:49.077: DEBUG/CallNotifier(125): RINGING... (new) 
01-28 16:35:49.097: DEBUG/CallNotifier(125): onNewRingingConnection(): incoming: true state: INCOMING post dial state: NOT_STARTED 
01-28 16:35:49.567: DEBUG/Ringer(125): ring()... 
01-28 16:35:49.677: DEBUG/Ringer(125): mRingHandler: PLAY_RING_ONCE... 
01-28 16:35:49.677: DEBUG/Ringer(125): creating ringtone: content://settings/system/ringtone 
01-28 16:35:49.837: INFO/ActivityManager(58): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10840000 cmp=com.android.phone/.InCallScreen } 
01-28 16:35:50.157: DEBUG/MediaPlayer(125): Couldn't open file on client side, trying server side 
01-28 16:35:50.317: DEBUG/PhoneWindow(274): couldn't save which view has focus because the focused view [email protected] has no id. 
01-28 16:35:50.357: ERROR/MediaPlayerService(33): Couldn't open fd for content://settings/system/ringtone 
01-28 16:35:50.357: ERROR/MediaPlayer(125): Unable to to create media player 
01-28 16:35:50.367: ERROR/RingtoneManager(125): Failed to open ringtone content://settings/system/ringtone 
01-28 16:35:50.647: DEBUG/InCallScreen(125): onCreate()... this = [email protected] 
01-28 16:35:51.817: WARN/ResourceType(125): getEntry failing because entryIndex 65 is beyond type entryCount 1 
01-28 16:35:52.147: DEBUG/dalvikvm(125): GC_FOR_MALLOC freed 5482 objects/312040 bytes in 140ms 
01-28 16:35:52.837: DEBUG/InCallScreen(125): initInCallTouchUi()... 
01-28 16:35:52.847: DEBUG/ManageConferenceUtils(125): ManageConferenceUtils constructor... 
01-28 16:35:52.847: DEBUG/InCallScreen(125): - Using SlidingDrawer-based dialpad. Found dialerView: [email protected] 
01-28 16:35:52.867: DEBUG/InCallScreen(125): ...and the SlidingDrawer: [email protected] 
01-28 16:35:52.887: DEBUG/InCallScreen(125): onCreate(): this is our very first launch, checking intent... 
01-28 16:35:52.887: DEBUG/InCallScreen(125): internalResolveIntent: action=android.intent.action.MAIN 
01-28 16:35:52.897: DEBUG/InCallScreen(125): onCreate(): mInCallInitialStatus = SUCCESS 
01-28 16:35:52.917: DEBUG/InCallScreen(125): onCreate(): exit 
01-28 16:35:52.917: DEBUG/InCallScreen(125): onResume()... 
01-28 16:35:52.937: DEBUG/PhoneApp(125): disable status bar 
01-28 16:35:52.937: DEBUG/PhoneApp(125): StatusBarManager.DISABLE_EXPAND 
01-28 16:35:52.947: DEBUG/StatusBar(58): DISABLE_EXPAND: yes 
01-28 16:35:53.047: DEBUG/InCallScreen(125): - onResume: initial status = SUCCESS 
01-28 16:35:53.047: DEBUG/InCallScreen(125): setInCallScreenMode: NORMAL 
01-28 16:35:53.077: DEBUG/InCallScreen(125): syncWithPhoneState()... 
01-28 16:35:53.077: DEBUG/PhoneUtils(125): dumpCallState(): 
01-28 16:35:53.087: DEBUG/PhoneUtils(125): - Phone: Handler{43e79ba8}, name = GSM, state = RINGING 
01-28 16:35:53.087: DEBUG/PhoneUtils(125): - FG call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false 
01-28 16:35:53.087: DEBUG/PhoneUtils(125): - BG call: IDLE isAlive false isRinging false isDialing false isIdle true hasConnections false 
01-28 16:35:53.087: DEBUG/PhoneUtils(125): - RINGING call: INCOMING isAlive true isRinging true isDialing false isIdle false hasConnections true 
01-28 16:35:53.087: DEBUG/PhoneUtils(125): - hasRingingCall true hasActiveCall false hasHoldingCall false allLinesTaken false 
01-28 16:35:53.107: DEBUG/PhoneUtils(125): - Ringer state: false 
01-28 16:35:53.107: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:35:53.127: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:35:53.237: DEBUG/InCallScreen(125): dismissAllDialogs()... 
01-28 16:35:53.237: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:35:53.257: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = true (isRinging true, isDialing false, showingDisc false) 
01-28 16:35:53.357: DEBUG/InCallScreen(125): onPhoneStateChanged()... 
01-28 16:35:53.357: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:35:53.407: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:35:53.467: DEBUG/InCallScreen(125): dismissAllDialogs()... 
01-28 16:35:53.467: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:35:53.477: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = true (isRinging true, isDialing false, showingDisc false) 
01-28 16:35:53.877: WARN/InputManagerService(58): Starting input on non-focused client [email protected] (uid=10036 pid=274) 
01-28 16:35:54.107: INFO/ActivityManager(58): Displayed activity com.android.phone/.InCallScreen: 3613 ms (total 3613 ms) 
01-28 16:35:54.187: INFO/ARMAssembler(58): generated scanline__00000177:03010104_00000001_00000000 [ 44 ipp] (66 ins) at [0x333318:0x333420] in 6539073 ns 
01-28 16:35:57.857: INFO/[email protected](274): {StreamTitle=Pearl Jam~Black~Ten 
01-28 16:35:57.857: INFO/[email protected](274): ~334000~S~~~~5:34~Epic} 
01-28 16:35:57.857: INFO/[email protected](274): getSongInfo 
01-28 16:35:57.867: INFO/[email protected](274): return mData 
01-28 16:35:57.947: WARN/AudioFlinger(33): write blocked for 88 msecs, 557 delayed writes, thread 0xb3f0 
01-28 16:35:59.797: DEBUG/dalvikvm(130): GC_EXPLICIT freed 1200 objects/86592 bytes in 368ms 
01-28 16:36:02.951: WARN/AudioFlinger(33): write blocked for 76 msecs, 600 delayed writes, thread 0xb3f0 
01-28 16:36:05.347: WARN/ResourceType(125): Attempt to retrieve bag 0x01010041 which is invalid or in a cycle. 
01-28 16:36:05.417: DEBUG/InCallTouchUi(125): onDialTrigger(whichHandle = 1)... 
01-28 16:36:05.417: DEBUG/InCallScreen(125): handleOnscreenButtonClick(id 2131099670)... 
01-28 16:36:05.437: DEBUG/InCallScreen(125): internalAnswerCall: answering... 
01-28 16:36:05.437: DEBUG/Ringer(125): stopRing()... 
01-28 16:36:05.477: DEBUG/Ringer(125): mRingHandler: STOP_RING... 
01-28 16:36:05.477: DEBUG/Ringer(125): - STOP_RING with null ringtone! msg = { what=3 when=304812 } 
01-28 16:36:05.508: INFO/phone(125): acceptCall: incoming... 
01-28 16:36:05.558: DEBUG/AudioHardwareInterface(33): setMode(IN_CALL) 
01-28 16:36:05.568: DEBUG/dalvikvm(58): GREF has increased to 301 
01-28 16:36:05.607: DEBUG/InCallTouchUi(125): updateState: Too soon after last action; not drawing! 
01-28 16:36:05.897: DEBUG/dalvikvm(125): GC_EXTERNAL_ALLOC freed 2894 objects/169384 bytes in 137ms 
01-28 16:36:06.217: INFO/AudioService(58): AudioFocus requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 
01-28 16:36:06.308: DEBUG/CallNotifier(125): stopRing()... (OFFHOOK state) 
01-28 16:36:06.308: DEBUG/Ringer(125): stopRing()... 
01-28 16:36:06.337: DEBUG/Ringer(125): - stopRing: null mRingHandler! 
01-28 16:36:06.438: DEBUG/InCallScreen(125): onPhoneStateChanged()... 
01-28 16:36:06.438: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:36:06.457: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:36:06.508: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:36:06.508: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false) 
01-28 16:36:07.048: INFO/Telephony Manager(274): phone state=2 
01-28 16:36:07.158: INFO/Telephony Manager(274): phone state=2 
01-28 16:36:07.358: DEBUG/dalvikvm(157): GC_EXPLICIT freed 2275 objects/127704 bytes in 1656ms 
01-28 16:36:07.437: INFO/ActivityManager(58): Process android.process.acore (pid 157) has died. 
01-28 16:36:10.438: DEBUG/dalvikvm(274): GC_FOR_MALLOC freed 38735 objects/957792 bytes in 151ms 
01-28 16:36:11.838: INFO/[email protected](274): {StreamTitle=Pearl Jam~Black~Ten 
01-28 16:36:11.838: INFO/[email protected](274): ~334000~S~~~~5:34~Epic} 
01-28 16:36:11.838: INFO/[email protected](274): getSongInfo 
01-28 16:36:11.848: INFO/[email protected](274): return mData 
01-28 16:36:11.938: WARN/AudioFlinger(33): write blocked for 107 msecs, 621 delayed writes, thread 0xb3f0 
01-28 16:36:16.968: WARN/AudioFlinger(33): write blocked for 74 msecs, 666 delayed writes, thread 0xb3f0 
01-28 16:36:21.167: DEBUG/CallNotifier(125): stopRing()... (OFFHOOK state) 
01-28 16:36:21.167: DEBUG/Ringer(125): stopRing()... 
01-28 16:36:21.217: DEBUG/Ringer(125): - stopRing: null mRingHandler! 
01-28 16:36:21.297: DEBUG/InCallScreen(125): onPhoneStateChanged()... 
01-28 16:36:21.297: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:36:21.297: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:36:21.328: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:36:21.328: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = true (isRinging false, isDialing false, showingDisc true) 
01-28 16:36:21.477: INFO/Telephony Manager(274): phone state=0 
01-28 16:36:21.527: INFO/Telephony Manager(274): phone state=0 
01-28 16:36:21.577: INFO/AudioService(58): AudioFocus abandonAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 
01-28 16:36:21.707: DEBUG/CallNotifier(125): DISCONNECT 
01-28 16:36:21.707: DEBUG/CallNotifier(125): - onDisconnect: cause = LOCAL, incoming = true, date = 1296250548953 
01-28 16:36:21.727: DEBUG/CallNotifier(125): stopRing()... (onDisconnect) 
01-28 16:36:21.727: DEBUG/Ringer(125): stopRing()... 
01-28 16:36:21.747: DEBUG/Ringer(125): - stopRing: null mRingHandler! 
01-28 16:36:21.797: DEBUG/CallNotifier(125): - onDisconnect(): logNumber set to: 1231234 
01-28 16:36:21.797: DEBUG/CallNotifier(125): - getPresentation(): ignoring connection's presentation: 1 
01-28 16:36:21.837: DEBUG/CallNotifier(125): - getPresentation: presentation: 1 
01-28 16:36:21.937: DEBUG/InCallScreen(125): onDisconnect: incoming: true state: DISCONNECTED post dial state: NOT_STARTED, cause=LOCAL 
01-28 16:36:21.947: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:36:21.967: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:36:21.987: DEBUG/InCallScreen(125): setInCallScreenMode: CALL_ENDED 
01-28 16:36:21.987: WARN/KeyCharacterMap(125): No keyboard for id 0 
01-28 16:36:22.017: WARN/KeyCharacterMap(125): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-28 16:36:22.077: INFO/Telephony Manager(274): phone state=0 
01-28 16:36:22.237: DEBUG/InCallScreen(125): - delayedCleanupAfterDisconnect: phone is idle... 
01-28 16:36:22.237: DEBUG/InCallScreen(125): - delayedCleanupAfterDisconnect: finishing InCallScreen... 
01-28 16:36:22.257: DEBUG/InCallScreen(125): endInCallScreenSession()... 
01-28 16:36:22.268: INFO/ActivityManager(58): moveTaskToBack: 4 
01-28 16:36:22.297: DEBUG/InCallScreen(125): setInCallScreenMode: UNDEFINED 
01-28 16:36:22.337: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:36:22.337: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false) 
01-28 16:36:22.357: DEBUG/AudioHardwareInterface(33): setMode(NORMAL) 
01-28 16:36:22.397: DEBUG/InCallScreen(125): onPhoneStateChanged()... 
01-28 16:36:22.407: DEBUG/InCallScreen(125): updateScreen()... 
01-28 16:36:22.417: DEBUG/InCallScreen(125): - updateScreen: updating the in-call UI... 
01-28 16:36:22.427: DEBUG/PhoneApp(125): updateWakeState: callscreen true, dialer false, speaker false... 
01-28 16:36:22.427: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false) 
01-28 16:36:22.457: DEBUG/InCallScreen(125): onPause()... 
01-28 16:36:22.467: DEBUG/InCallScreen(125): dismissAllDialogs()... 
01-28 16:36:22.497: DEBUG/PhoneApp(125): re-enable status bar 
01-28 16:36:22.497: DEBUG/PhoneApp(125): StatusBarManager.DISABLE_NONE 
01-28 16:36:22.517: DEBUG/PhoneApp(125): updateWakeState: callscreen false, dialer false, speaker false... 
01-28 16:36:22.527: DEBUG/PhoneApp(125): updateWakeState: keepScreenOn = false (isRinging false, isDialing false, showingDisc false) 
01-28 16:36:22.997: INFO/ActivityManager(58): Start proc android.process.acore for content provider com.android.providers.contacts/.CallLogProvider: pid=295 uid=10000 gids={3003, 1015} 
01-28 16:36:23.427: DEBUG/InCallScreen(125): onStop()... 
01-28 16:36:23.427: DEBUG/InCallScreen(125): onStop: state = IDLE 
01-28 16:36:24.247: INFO/ActivityThread(295): Publishing provider com.android.social: com.android.providers.contacts.SocialProvider 
01-28 16:36:24.527: INFO/ActivityThread(295): Publishing provider applications: com.android.providers.applications.ApplicationsProvider 
01-28 16:36:25.197: INFO/ActivityThread(295): Publishing provider contacts;com.android.contacts: com.android.providers.contacts.ContactsProvider2 
01-28 16:36:27.367: INFO/ActivityThread(295): Publishing provider call_log: com.android.providers.contacts.CallLogProvider 
01-28 16:36:27.417: INFO/ActivityThread(295): Publishing provider user_dictionary: com.android.providers.userdictionary.UserDictionaryProvider 
01-28 16:36:30.147: INFO/ActivityManager(58): Process com.android.mms (pid 207) has died. 
01-28 16:36:30.257: INFO/[email protected](274): {StreamTitle=Pearl Jam~Black~Ten 
01-28 16:36:30.257: INFO/[email protected](274): ~334000~S~~~~5:34~Epic} 
01-28 16:36:30.257: INFO/[email protected](274): getSongInfo 
01-28 16:36:30.277: INFO/[email protected](274): return mData 
01-28 16:36:30.707: WARN/AudioFlinger(33): write blocked for 86 msecs, 704 delayed writes, thread 0xb3f0 
01-28 16:36:35.727: WARN/AudioFlinger(33): write blocked for 73 msecs, 746 delayed writes, thread 0xb3f0 
01-28 16:36:43.327: DEBUG/dalvikvm(274): GC_FOR_MALLOC freed 37781 objects/927336 bytes in 191ms 
01-28 16:36:43.767: INFO/[email protected](274): {StreamTitle=Pearl Jam~Black~Ten 
01-28 16:36:43.767: INFO/[email protected](274): ~334000~S~~~~5:34~Epic} 
01-28 16:36:43.767: INFO/[email protected](274): getSongInfo 
+0

내가 해결로이 플래그를 방법을 잘하지만,이 문제가 아니었다. 첫 번째는 너무 오래 쳐다 보면서 나는 초기 IS_PLAYING 플래그를 설정하지 않았습니다. 마침내 해결 된 것은 PhoneStateListener에서 액션을 꺼내서 대신 해당 액션을 수행 할 메소드를 호출하는 것이 었습니다. – Dae

답변

1
if (player != null) { 
    player.stop(); 
    player= null;  
    } 
+0

Hello Jogresys 저는 또한 Android에서 실시간 스트리밍 앱을 작업 중입니다. IcyStreamMeta.java의 코드를 공유 할 것입니다. 미리 감사드립니다. –

관련 문제