1. 程式人生 > >android彈出了一個全域性性質的對話方塊

android彈出了一個全域性性質的對話方塊

    今天學習android開發的時候,樓主看的是網上很火的《第一行程式碼----Android》,書中在介紹完廣播的時候,寫了一個案例,模擬QQ被迫下線的功能。

    具體思路大概是,在使用者登入系統之後,在主介面點選一個按鈕傳送一個訊息,程式本身接收到這個訊息,彈出一個系統級的對話方塊提示使用者被迫下線,使用者點選確定按鈕之後,即退出到登入介面。

    邏輯比較簡單,下面是廣播接收器程式碼:

public class ForceReceiver extends BroadcastReceiver {
	// 接收到廣播之後,關閉所有的活動,開啟登入活動
	@Override
	public void onReceive(final Context context, Intent intent) {
		// 彈出對話方塊
		AlertDialog.Builder alert = new AlertDialog.Builder(context);
		alert.setTitle("溫馨提示");
		alert.setMessage("系統檢測到異常,您將被迫下線.");
		alert.setCancelable(false);
		alert.setPositiveButton("確定", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Intent intentCreate = new Intent(context, LoginActivity.class);
				intentCreate.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				context.startActivity(intentCreate);
				ActivityCollector.finishAll();
			}
		});
		AlertDialog alertDialog = alert.create();
		alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
		alertDialog.show();
	}

}
書上介紹,需要彈出一個系統級對話方塊,也就是這個對話方塊不論是在哪個活動,都可以彈出這個對話方塊。所以要設定對話方塊的屬性為:
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

最後在AndroidManifest.xml中加上許可權:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
但是我部署到手機上點選的傳送廣播的時候,程式直接崩了,出現了以下異常:

java.lang.RuntimeException: Unable to start receiver

com.example.broadcastbestpractice.ForceReceiver: android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for this window type

覺得很納悶,都是按照文件上的思路,怎麼就出錯了。查看了好多資料,終於知道,原來是因為google在6.0上對應用許可權進行了優化,需要單獨開啟,SYSTEM_ALERT_WINDOW,設定懸浮窗需要單獨開啟許可權:

參考網址:點選參考

新增以下程式碼:

private static final int REQUEST_CODE = 1;
	private  void requestAlertWindowPermission() {
	    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
	    intent.setData(Uri.parse("package:" + getPackageName()));
	    startActivityForResult(intent, REQUEST_CODE);
	}

這些個程式碼都需要sdk版本是在23以上才能執行。

加了之後,完美執行,安裝的時候,會提示使用者是否開啟懸浮窗:

如下圖:


允許之後,點選按鈕,操作結果如下圖:


相關推薦

android一個全域性性質對話方塊

    今天學習android開發的時候,樓主看的是網上很火的《第一行程式碼----Android》,書中在介紹完廣播的時候,寫了一個案例,模擬QQ被迫下線的功能。     具體思路大概是,在使用者登入系統之後,在主介面點選一個按鈕傳送一個訊息,程式本身接收到這個訊息,彈出

Android高效率實現帶動畫效果的對話方塊,仿照微信對話方塊效果

看到很多app頁面裡都有彈出對話方塊效果,今天使用PopupWindow實現帶動畫效果的對話方塊,先看效果圖: 效果圖: 分析實現思路: 彈出對話方塊帶有動畫效果 對話方塊從底部向上彈出 彈出對話方塊時,窗體背景呈現灰色(半透明) 對話方塊四周具

Android入門--三個按鈕的對話方塊

在GUI程式中,有時需要彈出對話方塊來提示一些資訊。 這些對話方塊比一個獨立的螢幕簡單,在Android中彈出式對話方塊不同於表示一個螢幕的活動,它通常用於簡單的功能處理。 對話方塊的父類是android.app.Dialog,通過構建類android.app.AlertD

Servlet 中直接"檔案另存為..."對話方塊

//當單擊頁面中的某按鈕呼叫此方法時,瀏覽器直接彈出“另存為...”對話方塊, Chorme則直接下載該檔案 // 而不用其它頁面做中轉 protected void doPost(HttpServletRequest request, HttpServletRespons

win7訪問xp的共享,重輸入密碼的對話方塊(NTLM)

最近在研究 NTLM 的東東,無意發現一博文,實乃 NTLM 應用之例項, 故轉之,再次感謝原創者! --------------------------------------------------------------------------------------

js可以選擇是否的對話方塊

<form name="form1" action="alert.htm"> <input type="button" name="button1" class="txt_2" value="刪除" onClick="javascript:check_rea

JS可移動的DIV對話方塊透明遮罩效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://ww

點選自定義按鈕百度商橋對話方塊

在頁面中已經成功安裝了百度商橋的情況下,想通過點選自定義的按鈕來彈出百度商橋的對話方塊,來達到及時溝通和不使頁面跳轉的目的。有以下解決方法: 1、首先需要把你的按鈕新增一個class,例如 加一個

Android 每次進入app一個pupuwindow廣告對話方塊

在網上找了大半天,都沒有找到合適的例子,終於靠自己的努力,實現了這個功能 給大家分享一下效果圖: //這是一個方法,直接放在onCreat方法裡面就行了,我之前放的方法,沒有進行耗時操作,就一直報找不到pupuwindow的佈局,最後下了個子執行緒,然後popuwin

Android圓角對話方塊

Android系統提供的對話方塊,預設是方的,很不美觀,一般我們都是自定義圓角對話方塊。下面看一下圓角對話方塊的簡單試用。 先上效果圖: 很簡單,就是activity上一個按鈕,點選按鈕彈出圓角對話方塊。 下面看程式碼: 最最重要的s

android 對話方塊時顯示鍵盤

今天,簡單講講如何在彈出自定義的對話方塊時,彈出軟鍵盤。 之前,我講了如何製作自定義的對話方塊,現在,如果在彈出對話方塊時,自動彈出軟鍵盤,將游標直接聚焦到自定義對話方塊的輸入框內,那該怎麼做呢? 在網上搜索資料,找到了兩種程式碼,可以解決。 一.監聽對話方塊彈出事件

Android對話方塊--Alertdialog(系統自帶的)

一. 我們在平時做開發的時候,免不了會用到各種各樣的對話方塊,相信有過其他平臺開發經驗的朋友都會知道,大部分的平臺都只提供了幾個最簡單的實現,如果我們想實現自己特定需求的對話方塊,大家可能首先會想到,通過繼承等方式,重寫我們自己的對話方塊。當然,這也是不失為一個不錯的解決方

Android 全域性dialog

專案中需要在網路斷開連線時設定全域性彈出框提醒,要求當網路斷開的時候,在app內的任一頁面均能彈出提示框提示使用者網路斷開,開始認為dialog需要依附在Activity上,後經查詢可採取懸浮窗的模式,使其不必依附於Activity,可在任一頁面彈出,程式碼如下: A

android對話方塊中帶有確定和取消對話方塊帶事件的應用

上次看了一個關於android中對話方塊的使用,其中對帶確定和取消的對話方塊講的並不詳細,自己補全了一下,當確定和取消按鈕中有事件時的情況,沒事件時用null就行了 new AlertDialog.Builder(this).setTitle("標題").setMessag

CS4:用戶在使用IE訪問FTP server 時遇到 502代理錯誤,沒有輸入用戶憑據對話

images tmg proc view site 彈出 request 劃線 mar 客戶問題概括:用戶在使用IE 訪問FTP server 時遇到 502代理錯誤。用戶在瀏覽器使用 ftp://ftpServerName 訪問自檢FTP server 時沒有提示輸入用戶

android 底部dialog

1. 建立Dialog dialog=new Dialog(context, R.style.SelectTimeTheme); dialog.setContentView(R.layout.pop_select_time); Window window = dialog.getWind

Android 框LemonBubble提示控制元件

簡介:這是一個完全Made in China的炫酷彈出指示層Android版本(-_-#意思就是還有iOS的),他能讓你快速的自定義任何樣式的彈出框 最新更新記錄: 捕捉了LemonBubble.forceHide()中的空指標異常,保證開發者在onDestroy

Android視窗

protected void PopUp() { final PopupWindow popup = new PopupWindow(TestActivity.this); View popView = LayoutInflater.from(TestA

看不慣 TikTok 霸榜,Facebook 又抄一個“美版抖音”

誰才是真正的“美國版抖音”?這場競爭已經如火如荼地開始了。 在位元組跳動的短視訊產品 TikTok 霸榜美區 iTunes 一段時間後,Facebook 終於使出了慣例招式:抄襲。 這不,Facebook 在最近低調上線了一個名叫 Lasso(字面含義:套索)的短視訊產品。

在右側我們給一個已經基本完成的程式,讀入一個字串,呼叫一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現,這個叫str_len的函式並沒有完成

在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成,在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。 樣例輸入 複製 abc