關(guān)于禁用系統(tǒng)app欄(返回鍵,menu鍵久窟,home鍵秩冈,下拉狀態(tài)欄)

最近接到一個需求,公司老總要求指定機型(安卓5.1版本)app進去以后無法退出斥扛,防止用戶玩別的軟件入问。我真的懵逼了。稀颁。芬失。。峻村。麸折。(what f**k!)
這與我當(dāng)時做的一個平板的項目有關(guān),那個平板有系統(tǒng)提供的方法去禁用系統(tǒng)欄粘昨。所以老總看到以后垢啼,認為手機也是一樣的,所以提出這個需求张肾。于是我立馬找到合作廠商技術(shù)反饋有沒有禁用系統(tǒng)欄一項芭析。那邊估計也是懵逼一臉,起初還答復(fù)吞瞪,后面干脆視而不見了馁启。好吧自己弄。


禁用返回按鍵


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
           //監(jiān)控/攔截/屏蔽返回鍵
            return false;
        } 
        return super.onKeyDown(keyCode, event);
    }

這個是眾所周知

禁用menu按鍵
自己創(chuàng)建自己的MyApplication ,然后在其中添加方法如下

/**
 * Created by Jiu on 2019/3/1.
 */

public class MyApplication extends Application
{
    public int count = 0;

    @Override
    public void onCreate()
    {
        super.onCreate ();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityStopped(Activity activity) {
                Log.v("MyApplication", activity + "onActivityStopped");
                count--;
                if (count == 0) {
                    Log.v("MyApplication", "切換到后臺");
                    activity.startActivity(new Intent (getApplicationContext (),MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                    //獲取ActivityManager
                     ActivityManager activityManager = (ActivityManager) activity.getSystemService(ACTIVITY_SERVICE);

                    /**獲得當(dāng)前運行的task(任務(wù))*/
                    List<ActivityManager.RunningTaskInfo> taskInfoList = activityManager.getRunningTasks(100);
                    for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
                        /**找到本應(yīng)用的 task芍秆,并將它切換到前臺*/
                        if (taskInfo.topActivity.getPackageName().equals(activity.getPackageName())) {
                            activityManager.moveTaskToFront(taskInfo.id, 0);
                            break;
                        }
                    }
                }
            }

           @Override
            public void onActivityStarted(Activity activity) {
                Log.v("MyApplication", activity + "onActivityStarted");
                if (count == 0) {
                    Log.v("MyApplication", "切換到前臺");
                }
                count++;
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                Log.v("MyApplication", activity + "onActivitySaveInstanceState");
            }

            @Override
            public void onActivityResumed(Activity activity) {
                Log.v("MyApplication", activity + "onActivityResumed");
            }

            @Override
            public void onActivityPaused(Activity activity) {
                Log.v("MyApplication", activity + "onActivityPaused");
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                Log.v("MyApplication", activity + "onActivityDestroyed");
            }

            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                Log.v("MyApplication", activity + "onActivityCreated");
            }
        });
    }
}

順便說一句這個方法還有個好處就是下拉狀態(tài)欄也能一并的處理惯疙。。妖啥。能打開系統(tǒng)的狀態(tài)欄霉颠,但是點進去以后也能返回來

禁用home鍵
這個真的一臉的懵逼了 安卓5.1以后的系統(tǒng)沒有以前那種直接監(jiān)控home鍵的方式了。問了好多個搞這個的也說沒方法實現(xiàn)荆虱。
百度一下蒿偎,真的出來一堆以前的方法。我都試過了沒啥用怀读。糾結(jié)半天了诉位,想一想能不能先實現(xiàn)home鍵點擊監(jiān)控吧!還真有方法Android之最簡單和靠譜的監(jiān)聽Home鍵和菜單鍵(最近任務(wù)欄)
照著他的改改試試

/**
 * Created by Jiu on 2019/3/1.
 */

public class HomeReceiver extends BroadcastReceiver
{
    static public final String SYSTEM_DIALOG_REASON_KEY = "reason";
    static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
    static public final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction ();
        //按下Home鍵會發(fā)送ACTION_CLOSE_SYSTEM_DIALOGS的廣播
        if (action.equals (Intent.ACTION_CLOSE_SYSTEM_DIALOGS))
        {
            String reason = intent.getStringExtra (SYSTEM_DIALOG_REASON_KEY);
            if (reason != null)
            {
                if (reason.equals (SYSTEM_DIALOG_REASON_HOME_KEY))
                {
                    Log.d ("HomeReceiver", "按了home");
                    Intent intent1 = new Intent (context, MainActivity.class);

                    intent1.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

                    PendingIntent pendingIntent = PendingIntent.getActivity (context, 0, intent1, 0);

                    try
                    {
                        pendingIntent.send ();

                    } catch (PendingIntent.CanceledException e)
                    {
                        e.printStackTrace ();
                    }

                }
            }
        }

    }
}

activity中

        HomeReceiver innerReceiver = new HomeReceiver();//注冊廣播
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(innerReceiver, intentFilter);

AndroidManifest.xml中別忘記注冊

<receiver
            android:name=".HomeReceiver"
        android:enabled="true"
        android:exported="true"/>

試一試菜枷。苍糠。。點擊一次還是可以的點一次恢復(fù)一次啤誊。我還沒來得及高興椿息。不小心快速多點了幾次歹袁。坷衍。寝优。有點卡頓,一查才發(fā)現(xiàn)
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
D/HomeReceiver: 按了home
這尼瑪log不停的給我報這個點擊事件枫耳。乏矾。。迁杨。整個人都不好了钻心!
可能是我沒注銷服務(wù),于是立馬去改代碼在onDestroy()中加上

unregisterReceiver(innerReceiver);

尼瑪沒有 多少效果铅协。捷沸。。還是一樣的 單次點擊可能有效果狐史,但是快速點擊痒给。。骏全。會多次重復(fù)接收到服務(wù)苍柏,造成activity卡主。先這樣吧姜贡!再繼續(xù)優(yōu)化看看

從源碼角度去解決试吁。。楼咳。熄捍。。底層改代碼(未果)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末母怜,一起剝皮案震驚了整個濱河市余耽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糙申,老刑警劉巖宾添,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柜裸,居然都是意外死亡缕陕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門疙挺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扛邑,“玉大人,你說我怎么就攤上這事铐然∈弑溃” “怎么了恶座?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沥阳。 經(jīng)常有香客問我跨琳,道長,這世上最難降的妖魔是什么桐罕? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任脉让,我火速辦了婚禮,結(jié)果婚禮上功炮,老公的妹妹穿的比我還像新娘溅潜。我一直安慰自己,他們只是感情好薪伏,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布滚澜。 她就那樣靜靜地躺著,像睡著了一般嫁怀。 火紅的嫁衣襯著肌膚如雪设捐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天眶掌,我揣著相機與錄音挡育,去河邊找鬼。 笑死朴爬,一個胖子當(dāng)著我的面吹牛即寒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播召噩,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼母赵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了具滴?” 一聲冷哼從身側(cè)響起凹嘲,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎构韵,沒想到半個月后周蹭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡疲恢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年凶朗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片显拳。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡棚愤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宛畦,我是刑警寧澤瘸洛,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站次和,受9級特大地震影響反肋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斯够,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一囚玫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧读规,春花似錦、人聲如沸燃少。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阵具。三九已至碍遍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阳液,已是汗流浹背怕敬。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帘皿,地道東北人东跪。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鹰溜,于是被迫代替她去往敵國和親虽填。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容