0
android 용 RadioPlayerService 라이브러리 사용. .m3u8 링크를 재생할 수 없습니다. 예 : http://airlive.nic.in/hls-live/livepkgr/definst/airmalayalam.m3u8안드로이드가 .m3u8 링크를 재생하지 않는 RadioPlayerService 라이브러리.
android 용 RadioPlayerService 라이브러리 사용. .m3u8 링크를 재생할 수 없습니다. 예 : http://airlive.nic.in/hls-live/livepkgr/definst/airmalayalam.m3u8안드로이드가 .m3u8 링크를 재생하지 않는 RadioPlayerService 라이브러리.
언제나 자신의 글을 쓸 수 있습니다. 너무 어렵지 않습니다. 샘플이 오래되었지만 최신 안드로이드 버전을 타겟으로해서는 안됩니다.
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v4.content.LocalBroadcastManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import radioapp.pxl.be.radioapp.model.Track;
import radioapp.pxl.be.radioapp.playlist.PlaylistDbHelper;
public class RadioService extends Service implements OnInfoListener, OnErrorListener {
public static final String PLAYER_ERROR = "radioapp.pxl.be.radioapp.PLAYER_ERROR";
private final IBinder mBinder = new RadioBinder();
public MediaPlayer mMediaPlayer;
private Intent mIntent;
private Handler timerHandler = new Handler();
private Runnable timerRunnable = new Runnable() {
@Override
public void run() {
PlaylistUpdaterTask task = new PlaylistUpdaterTask();
task.execute();
timerHandler.postDelayed(this, 60000);
}
};
private void handleError() {
Intent intent = new Intent(PLAYER_ERROR);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
stop();
}
synchronized public boolean play() {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setOnErrorListener(this);
mMediaPlayer.setOnInfoListener(this);
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mMediaPlayer.start();
}
});
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String s = preferences.getString("servers", "http://stream.intronic.nl/rgrfm");
try {
mMediaPlayer.setDataSource(s);
} catch (IllegalArgumentException e) {
handleError();
} catch (SecurityException e) {
handleError();
} catch (IllegalStateException e) {
handleError();
} catch (IOException e) {
handleError();
}
try {
mMediaPlayer.prepareAsync();
} catch (IllegalStateException e) {
handleError();
}
timerHandler.postDelayed(timerRunnable, 0);
return true;
}
synchronized public void stop() {
if (mMediaPlayer != null) {
try {
mMediaPlayer.stop();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
mMediaPlayer.release();
mMediaPlayer = null;
}
stopForeground(true);
timerHandler.removeCallbacks(timerRunnable);
}
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
@Override
public void onCreate() {
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
if (mMediaPlayer != null) {
try {
if (mMediaPlayer.isPlaying()) {
stop();
}
} catch (IllegalStateException e) {
stop();
}
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_IDLE:
break;
default:
break;
}
}
};
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
mIntent = new Intent(getApplicationContext(), MainActivity.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
}
@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
handleError();
return true;
}
@Override
public boolean onInfo(MediaPlayer player, int arg1, int arg2) {
if (arg1 == 703 && arg2 == 0) {
if (mMediaPlayer == null) {
play();
} else {
if (!mMediaPlayer.isPlaying()) {
play();
} else {
handleError();
}
}
return true;
}
return false;
}
public class RadioBinder extends Binder {
RadioService getService() {
return RadioService.this;
}
}
public class PlaylistUpdaterTask extends AsyncTask<Void, ArrayList<Track>, ArrayList<Track>> {
@Override
protected ArrayList<Track> doInBackground(Void... voids) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.rgrfm.be/rgrsite/maxradio/android_json.php");
String jsonResult = null;
try {
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 5000);
HttpResponse response = httpclient.execute(httpGet);
jsonResult = Conversion.inputStreamToString(response.getEntity().getContent()).toString();
} catch (ClientProtocolException e) {
return new ArrayList<Track>();
} catch (IOException e) {
return new ArrayList<Track>();
}
ArrayList<Track> items = new ArrayList<Track>();
try {
JSONObject jsonResponse;
if (jsonResult != null) {
jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("playlist");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
Track item = new Track();
item.setArtist(jsonChildNode.optString("artist"));
item.setTitle(jsonChildNode.optString("title"));
item.setTime(jsonChildNode.optString("time"));
items.add(item);
}
} else {
return new ArrayList<Track>();
}
} catch (JSONException e) {
e.printStackTrace();
}
return items;
}
@Override
protected void onPostExecute(ArrayList<Track> tracks) {
if (tracks.size() == 3) {
PlaylistDbHelper helper = new PlaylistDbHelper(getApplicationContext());
helper.addPlaylistItem(tracks.get(0));
helper.addPlaylistItem(tracks.get(1));
helper.addPlaylistItem(tracks.get(2));
helper.cleanPlaylist();
}
}
}
}
감사합니다. Jonas. 나는 결과를 시도하고 업데이트 할 것이다. – Thamarai
스택 오버플로 프로그래밍 질문입니다 :
나는 내 자신의 RadioService이 같은 것을했다. 귀하의 질문은 무엇인가? 귀하의 질문이 "왜 효과가 없습니까?"라고 질문하는 경우 라이브러리 개발자에게 문의하십시오. – CommonsWare