2011-01-28 6 views
5

Mam aplikację, która składa się z wielu działań i jednej usługi. Podstawową czynnością jest interfejs do strumieniowego przesyłania dźwięku. Gdy użytkownik naciska przycisk odtwarzania, usługa jest uruchamiana, przesyłając strumieniowo metadane audio i odczyt. Metadane są następnie przesyłane do interfejsu użytkownika, jeśli są widoczne, a pasek powiadomień. Wszystko działa zgodnie z oczekiwaniami, dopóki nie zadzwoni telefon. Przyjąłem (głupio mi), że używając standardowego odtwarzacza multimedialnego, android poradziłby sobie z przełączaniem dźwięku między strumieniem a samym telefonem. Dlatego stworzyłem PhoneStateListener do obsługi połączeń i zatrzymania odtwarzacza w razie potrzeby. Zrobiłem jednak coś złego, ponieważ nadal nie działa. Jeśli nie miałbyś nic przeciwko przeglądaniu klasy usług, a może plików dziennika, naprawdę bym to docenił!Odtwarzanie strumieniowego dźwięku jest kontynuowane podczas rozmowy telefonicznej - nie można jej zatrzymać! (Android)

Przepraszam, że wszystko jest tak pełne gadek!

Dziękujemy! Dae

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 wyjściowa:

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

Nie wiem, jak ja Oznacz jako rozwiązane, ale były dwie kwestie. Pierwszy był od zbyt długo wpatrywania się w niego, nigdy nie ustawiłbym pierwszej flagi IS_PLAYING. Ostatecznie naprawił to działanie z PhoneStateListener i wywołał metody, aby wykonać te akcje. – Dae

Odpowiedz

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

Witaj Jogresys Pracuję również nad aplikacją do strumieniowego przesyłania na żywo w systemie Android. Czy udostępnisz kod IcyStreamMeta.java. Dzięki z góry –

Powiązane problemy