В моем приложении есть медиаплеер, который воспроизводит потоковую ссылку.Проигрыватель запускается методом oncreate
, когда доступно подключение к Интернету. У меня есть радиовещательный приемник, который проверяет подключение к Интернету и уведомляет пользователя.Я столкнулся с проблемой, заключающейся в том, что, когда мое приложение переключается с Wi-Fi на сотовую сеть, медиаплеер должен сделать небольшую паузу и запустить снова, потому что сеть снова доступна.Но я не могу найти логику, как я могу этого достичь?Вот мой пример кода, пожалуйста, решить проблему?Любая помощь будет благодарна.
Манифест:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<receiver android:name=".receivers.NetworkChangeReciever">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Основная деятельность:
private BroadcastReceiver mNetworkReceiver;
static TextView tv_check_connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_check_connection=(TextView) findViewById(R.id.tv_check_connection);
mNetworkReceiver = new NetworkChangeReciever();
registerNetworkBroadcastForNougat();
// checkNetworkStatus();
mSelectedTrackTitle = (TextView) findViewById(R.id.selected_track_title);
nowplaying = (TextView) findViewById(R.id.nowplaying);
mPlayerControl = (ImageView) findViewById(R.id.player_control);
mPlayerControl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
togglePlayPause();
}
});
mSelectedTrackTitle.setText("FM World Pakistan");
nowplaying.setText("Now Playing");
mPlayerControl.setImageResource(R.drawable.ic_pause_circle_filled);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mMediaPlayer.setDataSource(url);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mMediaPlayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
nowplaying.setText("Offline");
Toast.makeText(MainActivity.this, "Radio Offline", Toast.LENGTH_LONG).show();
mPlayerControl.setImageResource(R.drawable.ic_play_circle_filled);
}
public static void dialog(boolean value){
if(value){
tv_check_connection.setText("We are back !!!");
tv_check_connection.setBackgroundResource(R.color.neton);
tv_check_connection.setTextColor(Color.WHITE);
Handler handler = new Handler();
Runnable delayrunnable = new Runnable() {
@Override
public void run() {
tv_check_connection.setVisibility(View.GONE);
}
};
handler.postDelayed(delayrunnable, 3000);
}else {
tv_check_connection.setVisibility(View.VISIBLE);
tv_check_connection.setText("Could not connect to Internet.");
tv_check_connection.setBackgroundResource(R.color.colorAccent);
tv_check_connection.setTextColor(Color.WHITE);
nowplaying.setText("Buffering...");
mPlayerControl.setImageResource(R.drawable.ic_play_circle_filled);
}
}
private void registerNetworkBroadcastForNougat() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
}
protected void unregisterNetworkChanges() {
try {
unregisterReceiver(mNetworkReceiver);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
private void togglePlayPause() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
nowplaying.setText("Offline");
mPlayerControl.setImageResource(R.drawable.ic_play_circle_filled);
} else {
mMediaPlayer.start();
nowplaying.setText("Now Playing");
mPlayerControl.setImageResource(R.drawable.ic_pause_circle_filled);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterNetworkChanges();
if (mMediaPlayer != null) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
mMediaPlayer = null;
}
}
Класс получателя:
public class NetworkChangeReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try
{
if (isOnline(context)) {
dialog(true);
Log.e("Hi", "Online Connect Intenet ");
} else {
dialog(false);
Log.e("Sorry","Conectivity Failure !!! ");
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
private boolean isOnline(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
return (netInfo != null && netInfo.isConnected());
} catch (NullPointerException e) {
e.printStackTrace();
return false;
}
}