Disabling notification also disables toast message

2020-06-30 03:29发布

In my android app , I have implemented push notification.My problem is from my device if I disable notification messages for the app, even the toast messages get disabled. Is this a usual phenomenon or do I need to change anything ? Please let me know how can I overcome this.

2条回答
Juvenile、少年°
2楼-- · 2020-06-30 04:19

Yes,it's a usual phenomenon.Click here but it's in Chinese.Hope this can help you.

In such case,it is need to write a Toast by your self.I can provide a demo but it is not complete.You can do some modification to make it better.

public class MToast {
    private Context mContext;
    private WindowManager wm;
    private int mDuration;
    private View mNextView;
    public static final int LENGTH_SHORT = 1500;
    public static final int LENGTH_LONG = 3000;

public MToast(Context context) {
    mContext = context.getApplicationContext();
    wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
}

public static MToast makeText(Context context, CharSequence text,
                             int duration) {
    MToast result = new MToast(context);
    LayoutInflater inflate = (LayoutInflater) context
            .getApplicationContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
    View v = inflate.inflate(R.layout.dialog_toast,null);
    TextView tv = (TextView) v.findViewById(R.id.tvMsg);
    tv.setText(text);
    result.mNextView = v;
    result.mDuration = duration;
    return result;
}

public static MToast makeText(Context context, int resId, int duration)
        throws Resources.NotFoundException {
    return makeText(context, context.getResources().getText(resId), duration);
}

public void show() {
    if (mNextView != null) {
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.gravity = Gravity.CENTER | Gravity.CENTER_HORIZONTAL;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
        params.format = PixelFormat.TRANSLUCENT;
        params.y = dip2px(mContext, 64);
        params.type = WindowManager.LayoutParams.TYPE_TOAST;
        wm.addView(mNextView, params);
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                if (mNextView != null) {
                    wm.removeView(mNextView);
                    mNextView = null;
                    wm = null;
                }
            }
        }, mDuration);
    }
}

/**
 * transfer dp into px
 *
 * @param context
 * @param dipValue
 * @return int
 */
private int dip2px(Context context, float dipValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dipValue * scale + 0.5f);
}

}

And here comes the layout file.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/waiting_bg"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="horizontal">
<TextView
    android:id="@+id/tvMsg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textSize="15sp"
    android:textColor="@color/mColor_white"
    />

I am new at markdown.Sorry for the format.

查看更多
Bombasti
3楼-- · 2020-06-30 04:33

Writing some extra information in 2018; might help someone.

So whenever you disable app notifications via system settings the Toast messages will stop showing up for your app. But this behavior seems to be a choice from manufacturers end.

I tested this on Xiaomi, Motorola and Stock android version of which Xiaomi(MiUi) was displaying toasts even when the notifications were disabled.

The solution is to avoid using Toasts for improtant information and use Snackbar instead. But this might cost you time and money.

查看更多
登录 后发表回答