나는 여러 액티비티와 하나의 서비스로 구성된 앱을 가지고있다. 주요 활동은 스트리밍 오디오를위한 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
내가 해결로이 플래그를 방법을 잘하지만,이 문제가 아니었다. 첫 번째는 너무 오래 쳐다 보면서 나는 초기 IS_PLAYING 플래그를 설정하지 않았습니다. 마침내 해결 된 것은 PhoneStateListener에서 액션을 꺼내서 대신 해당 액션을 수행 할 메소드를 호출하는 것이 었습니다. – Dae