禁用通知也会禁用应用程序的 toast 消息
Disabling notification also disables toast messages of the app
在我的 android 应用程序中,我实现了推送 notification.My 如果我禁用该应用程序的通知消息,则问题出在我的设备上,甚至 toast 消息也会被禁用。这是一种常见现象还是我需要改变什么?请告诉我如何克服这个问题。
是的,这是一个普通的 phenomenon.Click here 但它在 Chinese.Hope 这可以帮助你。
这种情况,需要自己写一个Toast self.I 可以提供一个demo但是不行 complete.You 可以做一些修改使之更好
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);
}
}
布局文件来了。
<?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"
/>
我是 markdown.Sorry 格式的新手。
2018年补充一些资料;可能会对某人有所帮助。
因此,每当您通过系统设置禁用应用通知时,Toast
消息将停止显示在您的应用中。
但这种行为似乎是厂商端的一种选择。
我在小米、摩托罗拉和 Stock android 版本上测试了这个,即使通知被禁用,小米 (MiUi) 也会显示 toasts。
解决方案是避免对重要信息使用 Toast
,而是使用 Snackbar
。但这可能会花费您的时间和金钱。
在我的 android 应用程序中,我实现了推送 notification.My 如果我禁用该应用程序的通知消息,则问题出在我的设备上,甚至 toast 消息也会被禁用。这是一种常见现象还是我需要改变什么?请告诉我如何克服这个问题。
是的,这是一个普通的 phenomenon.Click here 但它在 Chinese.Hope 这可以帮助你。
这种情况,需要自己写一个Toast self.I 可以提供一个demo但是不行 complete.You 可以做一些修改使之更好
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);
}
}
布局文件来了。
<?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"
/>
我是 markdown.Sorry 格式的新手。
2018年补充一些资料;可能会对某人有所帮助。
因此,每当您通过系统设置禁用应用通知时,Toast
消息将停止显示在您的应用中。
但这种行为似乎是厂商端的一种选择。
我在小米、摩托罗拉和 Stock android 版本上测试了这个,即使通知被禁用,小米 (MiUi) 也会显示 toasts。
解决方案是避免对重要信息使用 Toast
,而是使用 Snackbar
。但这可能会花费您的时间和金钱。