Ajout MediaPlayerService
This commit is contained in:
parent
ce1a6e55c8
commit
feef41012d
@ -24,6 +24,7 @@
|
|||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<service android:name=".MediaPlayerService"/>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@ -4,22 +4,20 @@ import android.Manifest;
|
|||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.DownloadManager;
|
import android.app.DownloadManager;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.ServiceConnection;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.media.MediaPlayer;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.PowerManager;
|
import android.os.IBinder;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.webkit.CookieManager;
|
import android.webkit.CookieManager;
|
||||||
import android.webkit.JavascriptInterface;
|
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
import android.webkit.WebChromeClient;
|
|
||||||
import android.webkit.WebSettings;
|
import android.webkit.WebSettings;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.webkit.WebViewClient;
|
import android.webkit.WebViewClient;
|
||||||
@ -30,8 +28,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private static final int WRITE_EXTERNAL_STORAGE_RC = 100;
|
private static final int WRITE_EXTERNAL_STORAGE_RC = 100;
|
||||||
@ -43,6 +39,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
private TextView tv_version;
|
private TextView tv_version;
|
||||||
private static String versionName;
|
private static String versionName;
|
||||||
private static final String NUMERO_TEL_RADIO = "+33375411456";
|
private static final String NUMERO_TEL_RADIO = "+33375411456";
|
||||||
|
private MediaPlayerService player;
|
||||||
|
boolean serviceBound = false;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
versionName = BuildConfig.VERSION_NAME;
|
versionName = BuildConfig.VERSION_NAME;
|
||||||
@ -177,20 +175,13 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case R.id.live:
|
case R.id.live:
|
||||||
MediaPlayer mediaPlayer = new MediaPlayer();
|
liveRadio("https://live.radiomercure.fr/on-air/live");
|
||||||
mediaPlayer.setScreenOnWhilePlaying(true);
|
|
||||||
try {
|
/* Intent playerIntent = new Intent(this, MediaPlayerService.class);
|
||||||
mediaPlayer.setDataSource("https://live.radiomercure.fr/on-air/live");
|
startService(playerIntent);
|
||||||
} catch (IOException e) {
|
bindService(playerIntent, serviceConnection, Context.BIND_AUTO_CREATE);*/
|
||||||
e.printStackTrace();
|
|
||||||
}
|
return true;
|
||||||
try {
|
|
||||||
mediaPlayer.prepare();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
mediaPlayer.start();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@ -207,4 +198,56 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Binding this Client to the AudioPlayer Service
|
||||||
|
private ServiceConnection serviceConnection = new ServiceConnection() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
// We've bound to LocalService, cast the IBinder and get LocalService instance
|
||||||
|
MediaPlayerService.LocalBinder binder = (MediaPlayerService.LocalBinder) service;
|
||||||
|
player = binder.getService();
|
||||||
|
serviceBound = true;
|
||||||
|
|
||||||
|
Toast.makeText(MainActivity.this, "Vous écoutez Radio Mercure en direct", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
serviceBound = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void liveRadio(String StreamUrl) {
|
||||||
|
//Check is service is active
|
||||||
|
if (!serviceBound) {
|
||||||
|
Intent playerIntent = new Intent(this, MediaPlayerService.class);
|
||||||
|
playerIntent.putExtra("stream_url",StreamUrl);
|
||||||
|
startService(playerIntent);
|
||||||
|
bindService(playerIntent, serviceConnection, Context.BIND_AUTO_CREATE);
|
||||||
|
} else {
|
||||||
|
//Toast.makeText(player, "OK", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle savedInstanceState) {
|
||||||
|
savedInstanceState.putBoolean("ServiceState", serviceBound);
|
||||||
|
super.onSaveInstanceState(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
serviceBound = savedInstanceState.getBoolean("ServiceState");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (serviceBound) {
|
||||||
|
unbindService(serviceConnection);
|
||||||
|
//service is active
|
||||||
|
player.stopSelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
176
app/src/main/java/fr/svpro/radiomercure/MediaPlayerService.java
Normal file
176
app/src/main/java/fr/svpro/radiomercure/MediaPlayerService.java
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
package fr.svpro.radiomercure;
|
||||||
|
|
||||||
|
import android.app.Service;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import android.media.MediaPlayer;
|
||||||
|
import android.os.Binder;
|
||||||
|
import android.os.IBinder;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class MediaPlayerService extends Service implements MediaPlayer.OnCompletionListener,
|
||||||
|
MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnSeekCompleteListener,
|
||||||
|
MediaPlayer.OnInfoListener, MediaPlayer.OnBufferingUpdateListener,
|
||||||
|
|
||||||
|
AudioManager.OnAudioFocusChangeListener {
|
||||||
|
|
||||||
|
|
||||||
|
// Binder given to clients
|
||||||
|
private final IBinder iBinder = new LocalBinder();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IBinder onBind(Intent intent) {
|
||||||
|
return iBinder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBufferingUpdate(MediaPlayer mp, int percent) {
|
||||||
|
//Invoked indicating buffering status of
|
||||||
|
//a media resource being streamed over the network.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCompletion(MediaPlayer mp) {
|
||||||
|
//Invoked when playback of a media source has completed.
|
||||||
|
stopMedia();
|
||||||
|
//stop the service
|
||||||
|
stopSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Handle errors
|
||||||
|
@Override
|
||||||
|
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||||
|
//Invoked when there has been an error during an asynchronous operation
|
||||||
|
switch (what) {
|
||||||
|
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
|
||||||
|
Log.d("MediaPlayer Error", "MEDIA ERROR NOT VALID FOR PROGRESSIVE PLAYBACK " + extra);
|
||||||
|
break;
|
||||||
|
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
|
||||||
|
Log.d("MediaPlayer Error", "MEDIA ERROR SERVER DIED " + extra);
|
||||||
|
break;
|
||||||
|
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
|
||||||
|
Log.d("MediaPlayer Error", "MEDIA ERROR UNKNOWN " + extra);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onInfo(MediaPlayer mp, int what, int extra) {
|
||||||
|
//Invoked to communicate some info.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPrepared(MediaPlayer mp) {
|
||||||
|
playMedia();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSeekComplete(MediaPlayer mp) {
|
||||||
|
//Invoked indicating the completion of a seek operation.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAudioFocusChange(int focusChange) {
|
||||||
|
//Invoked when the audio focus of the system is updated.
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LocalBinder extends Binder {
|
||||||
|
public MediaPlayerService getService() {
|
||||||
|
return MediaPlayerService.this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MediaPlayer mediaPlayer;
|
||||||
|
private String StreamUrl;
|
||||||
|
|
||||||
|
private void initMediaPlayer() {
|
||||||
|
mediaPlayer = new MediaPlayer();
|
||||||
|
//Set up MediaPlayer event listeners
|
||||||
|
mediaPlayer.setOnCompletionListener(this);
|
||||||
|
mediaPlayer.setOnErrorListener(this);
|
||||||
|
mediaPlayer.setOnPreparedListener(this);
|
||||||
|
mediaPlayer.setOnBufferingUpdateListener(this);
|
||||||
|
mediaPlayer.setOnSeekCompleteListener(this);
|
||||||
|
mediaPlayer.setOnInfoListener(this);
|
||||||
|
mediaPlayer.setScreenOnWhilePlaying(false);
|
||||||
|
//Reset so that the MediaPlayer is not pointing to another data source
|
||||||
|
mediaPlayer.reset();
|
||||||
|
|
||||||
|
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||||
|
try {
|
||||||
|
mediaPlayer.setDataSource(StreamUrl);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
stopSelf();
|
||||||
|
}
|
||||||
|
mediaPlayer.prepareAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Used to pause/resume MediaPlayer
|
||||||
|
private int resumePosition;
|
||||||
|
|
||||||
|
private void playMedia() {
|
||||||
|
if (!mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopMedia() {
|
||||||
|
if (mediaPlayer == null) return;
|
||||||
|
if (mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pauseMedia() {
|
||||||
|
if (mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.pause();
|
||||||
|
resumePosition = mediaPlayer.getCurrentPosition();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resumeMedia() {
|
||||||
|
if (!mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.seekTo(resumePosition);
|
||||||
|
mediaPlayer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//The system calls this method when an activity, requests the service be started
|
||||||
|
@Override
|
||||||
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
|
try {
|
||||||
|
//An audio file is passed to the service through putExtra();
|
||||||
|
StreamUrl = intent.getExtras().getString("stream_url");
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
stopSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Request audio focus
|
||||||
|
/* if (requestAudioFocus() == false) {
|
||||||
|
//Could not gain focus
|
||||||
|
stopSelf();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (StreamUrl != null && StreamUrl != "")
|
||||||
|
initMediaPlayer();
|
||||||
|
|
||||||
|
return super.onStartCommand(intent, flags, startId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (mediaPlayer != null) {
|
||||||
|
stopMedia();
|
||||||
|
mediaPlayer.release();
|
||||||
|
}
|
||||||
|
//removeAudioFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user