kapishreshth
kapishreshth

Reputation: 4098

How to finish an Android activity from separate Broadcast receiver class

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

Answers (2)

Nigam Patro
Nigam Patro

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

Praveen Sharma
Praveen Sharma

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

Related Questions