1. 程式人生 > >為什麼Toast吐司不顯示?

為什麼Toast吐司不顯示?

因為你拒絕了App通知欄的相關許可權

我們看下Toast原始碼

  public void show() {
        if (mNextView == null) {
            throw new RuntimeException("setView must have been called");
        }

        INotificationManager service = getService();
        String pkg = mContext.getOpPackageName();
        TN tn = mTN;
        tn.mNextView = mNextView;

        try {
            service.enqueueToast(pkg, tn, mDuration);
        } catch (RemoteException e) {
            // Empty
        }
    }

如果你關閉了通知欄許可權這個INotificationManager 就報異常造成無法顯示吐司

解決辦法如下:

工程目錄下 build.gradle

allprojects {
		repositories {
			...
			maven { url 'https://www.jitpack.io' }
		}
	}

專案目錄下build.gradle

dependencies {
	        implementation 'com.github.liangchaojie:ToastUtil:v1.1'
	}

1 在你的Application初始化

public class APP extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ToastUtil.init(this);
    }
}

2 直接呼叫

  ToastUtil.show(this,"hahah");

3 如果你想自定義吐司

 ToastUtil.show(this,"hahah", new IToast() {
            @Override
            public int gravity() {
                return 0;
            }

            @Override
            public int xOffest() {
                return 0;
            }

            @Override
            public int yOffest() {
                return 0;
            }

            @Override
            public int windowAnimations() {
                return 0;
            }

            @Override
            public int duration() {
                return 0;
            }

            @Override
            public View view(Context context) {
               // View view=LayoutInflater.from(context).inflate(R.layout.activity_main, null);
        TextView textView = new TextView(context);
        textView.setText("雖然沒有許可權但是我還是彈出了吐司雖然沒有許可權但是我還是彈出了吐司雖然沒有許可權但是我還是彈出了吐司!");
        return textView;
            }
        });

使用就到到這裡,如果不滿足於使用還想知道具體的程式碼邏輯請繼續看

1 先判斷是否具備通知欄許可權?
2 有許可權就直接使用系統預設的吐司
3 沒有許可權就獲取當前的視窗管理器在當前管理器上手動新增一個view
4 使用Handler的作用是讓吐司顯示若干時間後再消失
5 WindowHelper的作用是將所有Activty註冊進Application,這樣的話Activity銷燬的時候對應的視窗管理器也銷燬了,這就避免了記憶體洩露

想看原始碼的話請點選我的github 一定可以彈出來的吐司

最後感謝這篇部落格的給我的啟發

相關推薦

為什麼Toast顯示

因為你拒絕了App通知欄的相關許可權 我們看下Toast原始碼 public void show() { if (mNextView == null) { throw new RuntimeException("s

Toast 更改Toast顯示位置,顯示帶有圖片的,自定義

更改Toast的顯示位置: toast.setGravity(Gravity.CENTER,0,0); //接受返回物件後的設定 顯示帶有圖片的Toast Toast toast = Toast.makeText(this, "吐司", Toast.LEN

Toast

his findview 匿名類 roi strong set 匿名 and fin 調用Button 1.res-layout: android:onClick="Button" 2.src:public void Button(View view){ Toast.m

Android手機有的顯示Toast

解決辦法一: 在手機中把該app的通知開啟 可以直接設定通知許可權:<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 解決辦法二: 模擬toast,有篇文章:https://blog.c

Android封裝Toast

為了在今後的專案中避免toast寫多次,一下子出現多個toast的時候避免阻塞,這邊就乾脆將其封裝之後再用。 首先需要建立一個MyToast工具類: public class MyToast { private static Handler handler = new

Android使用列舉單例實現Toast快速重新整理(自定義)

通常我們使用Toast的時候可能會直接這樣寫: Toast.makeText(context, text, duration).show(); 這樣寫通常會有這樣一個問題:新Toast要等上一次Toast結束後才能顯示出來    1.在MyApplicatio

Android-Toast)的基本用法

吐司(Toast) Android用於提示資訊的一個控制元件——Toast(吐司)! Toast是一個包含小資訊的提示框。會自動消失。(並不干擾使用者操作) Toast繼承樹 java.lang.object 派生出 android.widget.Toast 建立T

關於museui 使用toast 和Message 外掛,圖示顯示問題

本文以vue+museui為例子 首先使用npm 安裝museui 和 toast 、message外掛 //安裝 museui npm i muse-ui -S //安裝toast外掛 npm install muse-ui-toast -S //安裝message外掛 npm install -S mu

解決android7.0+ 自定義Toast時長,但是toast顯示問題

重點在於解決部分機型自定義Toast 時長不顯示問題 在部分手機上會出現自定義時長的Toast不顯示,從而導致出現bug(排除Toast許可權被關閉情況),這樣我們需要自定義Toast 程式碼如下 public class ToastUtils { pr

手機應用Toast顯示問題的解決

今天測試人員給提了一個Bug: 場景: 三星S3手機,已經更新到了最新版本 步驟: 1.進入app-更多-關於 2.點選檢查更新 3.檢視頁面返回訊息,檢視api日誌返回訊息 結果: app頁面沒

android 顯示通知關閉之後,Toast顯示的狀態檢測

最近經常有業務部的同事,投訴出錯後什麼提示都沒有,仔細檢查好發現是坑爹的他們自己把顯示通知這個按鈕關閉了,就是下面這個東西 關閉之後通知和toast都不顯示了,於是老大讓我去找找有沒有辦法檢測這個按鈕的狀態,先把檢測程式碼貼上 /** * @p

微信小程式開發之toast(訊息提示框)

做Android的時候對toast是很熟悉的.微信小程式開發中吐司也是重要的訊息提示方式. 上程式碼: 1.index.wxml toast是微信提供的元件,duration是延遲時間,單位毫秒.這裡

Android 提示框Toast顯示的問題

今天我就遇到Toast不顯示的問題.  在很多時候,由於android自帶的Toast在連續點選後會逐個顯示出來,當你連續點選很多次之後,就算你退出軟體也會顯示.這就有點尷尬了,所以很多時候我們會簡單

android 某些機型(如oppor7手機、華為等)顯示toast

toast是一個很重要的提示工具,除錯可以用,跟使用者互動也很好。昨天下午改一個需求要顯示一個toast,在別的手機上都ok,唯獨oppor7上怎麼都不列印。一開始還以為程式碼出問題了,可是看了半天不知道還能改哪裡。早上一來繼續調,在一個論壇找到了解決辦法:原來

Android 中關於Toast帶文字和圖片的封裝。

Android中我們常用的提示功能就是Toast了,最近使用Toast的時候出現了一些不可預料的錯誤,分析才發現是由Toast例項太多引起導致,所以基於系統Toast封裝了帶圖片和文字Toast,並且永遠只有一個Toast例項,大大減少了記憶體開銷。實現思路:1,關於如何實現

Toast 顯示

做專案時發現 toast不顯示 原因一:在非UI執行緒執行 建議使用handler顯示 原因二:沒有執行,邏輯錯誤 我的問題兩個都不是,在接收廣播後呼叫了toast   並且呼叫toast處使用了runonUIThread(),但是 toast並沒有顯示出來,     查

android 某些三星手機上顯示通知Notification和訊息Toast

    近日在做專案時,測試組的同事提出一個bug,就是在一臺三星手機上,點選某個圖片,本來應該彈出Toast,提示開始下載,並且在訊息欄有下載進度的通知的,可是這個手機上麼有彈出Toast,訊息欄也沒有出現通知,後來經過查資料知道有些三星手機預設禁用了顯示通知那一項,而不

Android中Toast顯示的解決方案

今天在做測試的時候,Toast怎麼也顯示不出來,我分析了一下幾種可能 1、Context有問題,可能對應的上下文不正確 2、message的值為空 但是我檢查了好幾遍,都沒有問題。。。。在網上查資料,說不能再子執行緒中更新UI,但是我沒有開執行緒啊。。。無語了一晚上之後。我

windows 如何顯示帶點的文件名、文件夾?

9.png bsp mage 技術分享 資源管理器 ima lin 顯示 cnblogs 這些以點開頭的文件夾和文件是為了在 linux 中隱藏的。但是在 windows 中如何不顯示他們? 資源管理器: CMD: windows 如何不顯示帶點的文件

關於解決 http 狀態碼200,php 文件有輸出,但是顯示模板文件的問題

color echo strong 狀態碼 clas font index index.php 查看 一 問題 給公司搭建一個在線測試站點之後,在瀏覽器地址欄輸入 "http://xxx.xxx.xxx/index.php",頁面什麽都沒顯示。調出瀏覽器的開發者工具查看,h