How to add Snackbars to BroadcastReceiver?

Snacks provide easy feedback on the operation, showing a short message at the bottom of the screen. Snacks may contain action.

Android also offers a toast, mainly used for system messages. Toasts are similar to snackbars, but contain no action and cannot be cut from the screen.

My question

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class TestReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {
        Toast.makeText(context, "status", Toast.LENGTH_LONG).show();
    }
}

Is it possible to show a Snackbarin BroadcastReceiverhow Toast?

+4
source share
4 answers

my working code ....

public abstract  class TestReceiver  extends BroadcastReceiver {
    @Override   
    public void onReceive(final Context context, final Intent intent) {
        onNetworkChange();
    } 

    protected abstract void onNetworkChange();
}

in mainactivity

public class MainActivity extends Activity  {

    public void onCreate() {
        ...  mReceiver = new TestReceiver () {
            @Override
            protected void onNetworkChange() {
            snackbar = Snackbar.make(Clayout, "Please check your internet connection and try again", Snackbar.LENGTH_SHORT);
            snackbar.setAction("X", snackbarClickListener);snackbar.setActionTextColor(Color.GREEN);
            ColoredSnackbar coloredsnakbar=new ColoredSnackbar();
            coloredsnakbar.confirm(snackbar).show();
            }
        };      
    }
}
+2
source

Is it possible to show snakbars in BroadcastReceiver as Toast?

A BroadcastReceiver, , registerReceiver(), , .

- BroadcastReceiver , , , . , , - event- (, LocalBroadcastManager, greenrobot EventBus, Square Otto), , , , . , . , , , Notification .

+6

@CommonsWare, - BroadcastReceiver Activity/Fragment, .

interface, , :

public class TestReceiver extends BroadcastReceiver {

    private DoSomethingInterface callback1;

    public TestReceiver() {
    }

    @Override
    public void onReceive(final Context context, final Intent intent) {
        // pass content text to show in SnackBar
        if(callback1 != null) {
            callback1.passText("status");
        } else {
            Log.e("log","callback from UI is not registered yet..");
        }
    }

    public void registerReceiver(DoSomethingInterface receiver) {
         this.callback1 = receiver;
    }

    public interface DoSomethingInterface {
        public void passText(String text);
    }
}

DoSomethingInterface , SnackBar. , CoordinatorLayout SnakeBar:

public class MainActivity extends Activity implements DoSomethingInterface {

public void onCreate() {
    ...
    // pass reference to interface from onCreate()
    BroadcastReceiver mReceiver = new TestReceiver();
    mReceiver.registerReceiver(this);
    ...
}

    @Override
    public void passText(String text) {
        Snackbar.make(<reference to your coordinator layout>, "text", Snackbar.LENGTH_LONG)
                    .setAction("Ok", <listener>)
                    .setActionTextColor(Color.GREEN)
                    .show();
+3

, onCreate().

BroadcastReciever. .

public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks {
    public static Activity appactivity;
@Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
}
@Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }

    @Override
    public void onActivityStarted(Activity activity) {

    }

    @Override
    public void onActivityResumed(Activity activity) {
        appactivity = activity;//here we get the activity
        Intent i = new Intent(this, InternetConnectionInformation.class);
        sendBroadcast(i);//here we are calling the broadcastreceiver to check connection state.
    }
}

BroadcastReceiver ,

public class InternetConnectionInformation extends BroadcastReceiver{
    static Snackbar snackbar; //make it as global
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

        if (activeNetworkInfo == null || !activeNetworkInfo.isConnected()) {
                InternetConnectionInformation.snack(null, 0, "Network Connection failed.",context.getApplicationContext());
        }else{
            InternetConnectionInformation.hideSnackbar();
        }
    }




    public static void snack (HashMap<String,View.OnClickListener> actions,int priority,String message,Context context) {
     if(MyApplication.appactivity != null){
            snackbar = Snackbar.make(MyApplication.appactivity.findViewById(android.R.id.content), message, Snackbar.LENGTH_INDEFINITE);//MyApplication.appactivity from Application class.
            if (actions != null) {
                Iterator iterator = actions.entrySet().iterator();
                snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
                while (iterator.hasNext()) {
                    Map.Entry pair = (Map.Entry) iterator.next();
                    snackbar.setAction((String) pair.getKey(), (View.OnClickListener) pair.getValue());
                    iterator.remove(); // avoids a ConcurrentModificationException
                }
            }
            switch (priority) {
                case 0:
                    snackbar.getView().setBackgroundColor(context.getResources().getColor(R.color.accentPink));
                    break;
                case 1:
                    snackbar.getView().setBackgroundColor(Color.parseColor("#66ccff"));
                    break;
                case 2:
                    snackbar.getView().setBackgroundColor(Color.parseColor("#66ff33"));
                    break;
            }
            snackbar.show();
           }
        }
        private static void hideSnackbar(){
            if(snackbar !=null && snackbar.isShown()){
                snackbar.dismiss();
            }
        }
    }

, . , BroadcastReceiver Manifest

<receiver android:name="your.package.name.InternetConnectionInformation">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

This works great and verified. Hope this helps some.

+1
source

All Articles