我的流媒体音频播放器在通话过程中继续播放 - 无法让它停止! (机器人)

时间:2011-01-28 22:05:32

标签: java android android-mediaplayer phone-call

我有一个由多个活动和一个服务组成的应用程序。主要活动是用于流式传输音频的UI。当用户按下播放按钮时,服务启动,流式传输音频和读取元数据。然后,元数据被推送到UI(如果可见)和通知栏。一切都按预期运行,直到打来电话。我曾经假设通过使用标准媒体播放器,Android将处理流和电话本身之间的音频切换。所以我创建了一个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;
  }
 }
}

LogCat输出:

01-28 16:35:40.487: INFO/com.wtts.app.IcyStreamMeta@43fea268(274): {StreamTitle=Pearl Jam~Black~Ten
01-28 16:35:40.487: INFO/com.wtts.app.IcyStreamMeta@43fea268(274): ~334000~S~~~~5:34~Epic}
01-28 16:35:40.487: INFO/com.wtts.app.IcyStreamMeta@43fea268(274): getSongInfo
01-28 16:35:40.497: INFO/com.wtts.app.IcyStreamMeta@43fea268(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 com.android.internal.policy.impl.PhoneWindow$DecorView@43e47b58 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 = com.android.phone.InCallScreen@43ecc0e0
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: com.android.phone.DTMFTwelveKeyDialerView@43edf870
01-28 16:35:52.867: DEBUG/InCallScreen(125):   ...and the SlidingDrawer: android.widget.SlidingDrawer@43edb1f8
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 com.android.internal.view.IInputMethodClient$Stub$Proxy@43f3e628 (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/com.wtts.app.IcyStreamMeta@43ed1820(274): {StreamTitle=Pearl Jam~Black~Ten
01-28 16:35:57.857: INFO/com.wtts.app.IcyStreamMeta@43ed1820(274): ~334000~S~~~~5:34~Epic}
01-28 16:35:57.857: INFO/com.wtts.app.IcyStreamMeta@43ed1820(274): getSongInfo
01-28 16:35:57.867: INFO/com.wtts.app.IcyStreamMeta@43ed1820(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/com.wtts.app.IcyStreamMeta@43e887b0(274): {StreamTitle=Pearl Jam~Black~Ten
01-28 16:36:11.838: INFO/com.wtts.app.IcyStreamMeta@43e887b0(274): ~334000~S~~~~5:34~Epic}
01-28 16:36:11.838: INFO/com.wtts.app.IcyStreamMeta@43e887b0(274): getSongInfo
01-28 16:36:11.848: INFO/com.wtts.app.IcyStreamMeta@43e887b0(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/com.wtts.app.IcyStreamMeta@43f45030(274): {StreamTitle=Pearl Jam~Black~Ten
01-28 16:36:30.257: INFO/com.wtts.app.IcyStreamMeta@43f45030(274): ~334000~S~~~~5:34~Epic}
01-28 16:36:30.257: INFO/com.wtts.app.IcyStreamMeta@43f45030(274): getSongInfo
01-28 16:36:30.277: INFO/com.wtts.app.IcyStreamMeta@43f45030(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/com.wtts.app.IcyStreamMeta@43f123e8(274): {StreamTitle=Pearl Jam~Black~Ten
01-28 16:36:43.767: INFO/com.wtts.app.IcyStreamMeta@43f123e8(274): ~334000~S~~~~5:34~Epic}
01-28 16:36:43.767: INFO/com.wtts.app.IcyStreamMeta@43f123e8(274): getSongInfo

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您需要管理音频焦点以在通话期间停止播放音乐。

检查出来:http://developer.android.com/training/managing-audio/audio-focus.html