1. 程式人生 > >Android 遮蔽Back鍵,監聽Home鍵

Android 遮蔽Back鍵,監聽Home鍵

app進入的時候我們會看到一個閃屏頁,這個閃屏頁做起來很簡單,但是閃屏頁一般需要遮蔽返回鍵,去監聽一下Home鍵,為什麼需要這樣考慮呢?我們先看程式碼吧。

SplashActivity

public class SplashActivity extends Activity {
    private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this
.requestWindowFeature(Window.FEATURE_NO_TITLE); //充滿螢幕 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_splash); //註冊廣播 registerReceiver(mHomeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); new
Thread(new Runnable() { @Override public void run() { handler.sendEmptyMessageDelayed(0x1, 2000); } }).start(); handler=new Handler(){ public void handleMessage(android.os.Message msg) { if
(msg.what==0x1){ startActivity(new Intent(SplashActivity.this, MainActivity.class)); SplashActivity.this.finish(); } }; }; }

看程式碼知道,我們new Thread()的時候會建立一個子執行緒,如果我們按下很快的返回鍵或者按下home鍵(沒有超過2秒),這時候程式退出了,但是這個執行緒沒有結束,還在執行。那麼這時候會跳到MainActiivty,如果使用者看到了此情況,會不會很納悶呢?怎麼解決這個問題?一般做閃屏頁的話,我們需要遮蔽返回鍵,監聽一下Home鍵;

   //遮蔽返回鍵
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            return true;
        }
        return false;
    }

KeyEvent.KEYCODE_HOME這個方法壓根不管用,監聽不到Home鍵。我們 監聽Home鍵的時候,需要註冊一個廣播監聽是否按下Home鍵;

監聽Home鍵:

private final BroadcastReceiver mHomeKeyEventReceiver  = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            //Intent.ACTION_CLOSE_SYSTEM_DIALOGS判斷是否為home鍵
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
               //退出程式,釋放資源
                System.exit(0);  
            }
        }
    };

//當程式銷燬的時候,登出這個廣播

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(mHomeKeyEventReceiver);      
    }

如果大家覺得哪裡不對的話,可以反映一下,大家一起學習;

轉載請註明出處!

相關推薦

Android 遮蔽BackHome

app進入的時候我們會看到一個閃屏頁,這個閃屏頁做起來很簡單,但是閃屏頁一般需要遮蔽返回鍵,去監聽一下Home鍵,為什麼需要這樣考慮呢?我們先看程式碼吧。 SplashActivity public class SplashActivity exten

android 在fragment中如何返回home

在activity中用keydown很容易實現對返回鍵的監聽,但是這個函式不能再fragment中過載。  通過我嘔心瀝血的尋找,終於找到了解決辦法,對其他物理按鍵的監聽也同理。  Java程式碼   public class phonerecorder exten

AndroidHome、鎖屏、解屏(落雨敏詳細講解)附原始碼

     前言:最近做視訊播放,發現當在播放時點選電源鍵進行鎖屏,視訊繼續播放問題,於是通過廣播進行監聽。廣播監聽可以用於很多地方,在此落雨敏詳細講解Home鍵、鎖屏、解屏的事件處理。先講解思路,然後在一步一步實現,下面會貼出所有程式碼。   &nbs

Android完美解決home

以下兩種方法可以完美解決監聽back鍵,home鍵,多工鍵(最近任務鍵)。 一、使用註冊廣播監聽home鍵、多工鍵 演示圖 建立一個廣播程式碼如下: class InnerRecevier extends BroadcastRec

android Home和亮滅屏

1.註冊廣播 IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_CLOS

手機影音第十天控制屏幕上下滑動改變音量變化物理改變音量

滑動屏幕改變音量大小 物理鍵的增大、減小改變音量與seekbar的進度條 代碼已托管至碼雲上,有興趣的小夥伴可以下載看看,IDE是Android studio 2.3.2 https://git.oschina.net/joy_yuan/MobilePlayer 常

android設定軟鍵盤搜尋以及搜尋點選時發生兩次事件的問題解決

在輸入框中加入android:imeOptions="actionSearch",呼叫軟鍵盤時,回車鍵就會顯示搜尋二字。 我想在點選搜尋時,跳轉到下一個頁面,但是呼叫setOnKeyListener,每次都執行兩次。最後上網看到別人的文章,解決了問題,解決方法是呼叫se

H5_0003:JS禁用調試禁用右F12事件的方法

amp log rom 條件 wid turn ref return text 1,禁用調試 // 這個方法是防止惡意調試的 (function () { console["log"]("============================

Android 改寫返回事件使得back功能類似home讓Acitivty退至後臺時不被系統銷燬

現在很多程式要求back鍵不是退出程式而是像home鍵一樣讓Acitivty退至後臺時不被系統銷燬,查到的資料大多說都是繼承activity的沒有繼承TabActivity, TabActivity和activity不能一樣處理,廢話不多說了上程式碼。 繼承activity

Android BackHome

package com.mengdd.hellohome; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.ut

ANDROID 返回選單和HOME

------網上找了很多資料,專案中使用,最後將經驗總結如下: 1,返回和選單鍵是可以直接重寫onKeyDown(int keyCode, KeyEvent event) 方法監聽: @Overridepublic boolean onKeyDown(int keyC

實戰Android:通過BroadcastReceiverHome電源Power和音量變化Volume

上一個例子是採用AccessibilityService來實現按鍵的監聽。這次我們採用BroadcastReceiver來完成按鍵的監聽。 缺點:我嘗試了一下,暫時還不知道如何停止按 鍵的預設行為,比如我確實監聽到了電源按鍵,但卻沒法阻止此刻螢幕變黑的行為。先在這記下。以後

ReactNative Android返回在某個頁面返回退出應用

在之前專案中,在進行返回鍵退出應用時,應用的程式碼如下: componentWillMount() { if (Platform.OS === 'android') { BackHandler.addEventListener('hardwa

Android 如何返回彈出一個退出對話方塊

Android 如何監聽返回鍵點選事件,並建立一個退出對話方塊, 防止自己寫的應用程式不小心點選退出鍵而直接退出。自己記錄下這個簡單的demo,備用。 注:如下程式碼當時是從網上copy過來的,現在忘了它出自哪個原作者了,在此說聲抱歉。 原始碼如下: public cla

Android"電源長按"、"Home"、"Home長按"

Android中監聽"電源鍵長按"、"Home鍵"、"Home鍵長按" 這幾個“按鈕”的觸發,都會產生一個Action ==Intent.ACTION_CLOSE_SYSTEM_DIALOGS的通知 區分他們三個的不同事件的引數,就是隨著Intent帶過來的reason字串,分別對應

Android開發 之 返回彈出一個退出對話方塊

Android 如何監聽返回鍵點選事件,並建立一個退出對話方塊,防止自己寫的應用程式不小心點選退出鍵而直接退出。 自己記錄下這個簡單的demo,備用。 注:如下程式碼當時是從網上copy過來的,現在忘了它出自哪個原作者了,在此說聲抱歉。 原始碼如下: public

Unity3D與Android專案互動中無法back返回的解決辦法

 這兩天為解決unity3d與android專案整合中出現的無法監聽真機back實體鍵的問題找了很多資料,網上也有很多人遇到了這個問題,但是似乎都沒找到有效的解決方法。    實現的效果是從A_Activity跳轉到UnityPlayerNativeActi

Android返回、MenuHome

back鍵 監聽back鍵還是很簡單的,有兩種方法: 呼叫onBackPressed()方法:呼叫此方法會自動呼叫finish()。 @Override public void onBackPressed() { statement /

Android通過Intent.ACTION_CLOSE_SYSTEM_DIALOGSHome按鍵消息

後門 str eve log reason anr rri dem .sh Android對屏幕下方經常使用的四個按鍵消息處理是不一致的: 1、搜索按鍵的消息在onKeyDown或者onKeyUp中接收; 2、菜單按鍵的消息在onCreateOptionsMen

Android關於專案中遇到的按home退出到桌面再次開啟重新啟動程式的解決方法

我的專案是使用高德地圖做交通類的,主要是Activity和Fragment之間的切換。 我遇到的問題是:我在執行打包後的apk時,進入程式後,無論在哪個介面按home鍵回到桌面,當再次開啟需要重新啟動而不是回到開啟之前的操作介面;而在程式碼除錯的時候不會出現這種問題。 解決方法:在網上搜了好