Reputation: 4098
I have an activity class MediaPlayerDemo_Audio
and one broadcast receiver
class ConnectivityChangeReceiver
which extends BroadcastReceiver
.
I want to finish an activity MediaPlayerDemo_Audio when network connection lost.
Any idea? Thanks.
ConnectivityChangeReceiver.java
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE );
/* Check wi-fi network availability */
NetworkInfo activeWifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToWifi = activeWifiInfo != null && activeWifiInfo.isConnectedOrConnecting();
/* Check mobile network availability */
NetworkInfo activeMobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToMobileData = activeMobileInfo != null && activeMobileInfo.isConnectedOrConnecting();
if(isConnectedToWifi){
//Toast.makeText(context, "Connected to wifi!", Toast.LENGTH_LONG).show();
}else{
if(isConnectedToMobileData){
//Toast.makeText(context, "Connected to Mobile data!", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "No internet connection!", Toast.LENGTH_LONG).show();
/* Here I want to finish that activity */
}
}
}}
Androidmanifest.xml Class ConnectivityChangeReceiver will be running in background and It will keep checking network connectivity, this class will be called from this receiver.
<receiver android:name=".ConnectivityChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
I referred this answer but It could not help. Because one class cannot extend multiple classes
. I mean, MediaPlayerDemo_Audio
class cannot extend Activity
as well as BroadcastReceiver
class and vice versa.
Upvotes: 0
Views: 1282
Reputation: 2770
As per the example, it doesn't need to extend the both the classes. Just create broadcast receiver inside your activity and one thing, you need to do is register the receiver in onResume()
and unregister it on onPause()
.
Below is example:-
public class MyPreferenceActivity extends Activity {
//Your stuff inside the activity
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(receiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
ConnectivityChangeReceiver receiver = new ConnectivityChangeReceiver();
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
/* Check wi-fi network availability */
NetworkInfo activeWifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToWifi = activeWifiInfo != null && activeWifiInfo.isConnectedOrConnecting();
/* Check mobile network availability */
NetworkInfo activeMobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToMobileData = activeMobileInfo != null && activeMobileInfo.isConnectedOrConnecting();
if (isConnectedToWifi) {
//Toast.makeText(context, "Connected to wifi!", Toast.LENGTH_LONG).show();
} else {
if (isConnectedToMobileData) {
//Toast.makeText(context, "Connected to Mobile data!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "No internet connection!", Toast.LENGTH_LONG).show();
/* Here I want to finish that activity */
}
}
}
}
}
Upvotes: 0
Reputation: 4348
You just need to put your BroadcastReceiver
Class inside your activity as inner Class. and register Receiver on onResume and unregister inside onPause.
Let's say
public class MediaPlayerDemo_Audio extends Activity
{
// your activity code
.....
//
// here is your broadcast receiver
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE );
/* Check wi-fi network availability */
NetworkInfo activeWifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToWifi = activeWifiInfo != null && activeWifiInfo.isConnectedOrConnecting();
/* Check mobile network availability */
NetworkInfo activeMobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnectedToMobileData = activeMobileInfo != null && activeMobileInfo.isConnectedOrConnecting();
if(isConnectedToWifi){
//Toast.makeText(context, "Connected to wifi!", Toast.LENGTH_LONG).show();
}else{
if(isConnectedToMobileData){
//Toast.makeText(context, "Connected to Mobile data!", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "No internet connection!", Toast.LENGTH_LONG).show();
/* Here I want to finish that activity */
//finish activity here
}
}
}}
}
Upvotes: 1