1. 程式人生 > >Android 獲取所有Activity,這裡演示了使用者按兩次back鍵退出app

Android 獲取所有Activity,這裡演示了使用者按兩次back鍵退出app

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
return true;
}
        return super.onKeyDown(keyCode, event);
}

    private void exit() {
        Log.d(TAG, "exit: "+(System.currentTimeMillis() - clickTime));
if ((System.currentTimeMillis() - clickTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次後退鍵退出程式", Toast.LENGTH_SHORT).show(); clickTime = System.currentTimeMillis(); } else { Log.e(TAG, "exit application"); AppData.setloginUser(this,""); // this.finish(); List<Activity> la = getActivitiesByApplication
(getApplication()); for (int x=0;x<la.size();x++){ la.get(x).finish(); } android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } } private static List<Activity> getActivitiesByApplication(Application application) { List<Activity> list = new
ArrayList<>(); try { Class<Application> applicationClass = Application.class; Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk"); mLoadedApkField.setAccessible(true); Object mLoadedApk = mLoadedApkField.get(application); Class<?> mLoadedApkClass = mLoadedApk.getClass(); Field mActivityThreadField = mLoadedApkClass.getDeclaredField("mActivityThread"); mActivityThreadField.setAccessible(true); Object mActivityThread = mActivityThreadField.get(mLoadedApk); Class<?> mActivityThreadClass = mActivityThread.getClass(); Field mActivitiesField = mActivityThreadClass.getDeclaredField("mActivities"); mActivitiesField.setAccessible(true); Object mActivities = mActivitiesField.get(mActivityThread); // 注意這裡一定寫成Map,低版本這裡用的是HashMap,高版本用的是ArrayMap if (mActivities instanceof Map) { @SuppressWarnings("unchecked") Map<Object, Object> arrayMap = (Map<Object, Object>) mActivities; for (Map.Entry<Object, Object> entry : arrayMap.entrySet()) { Object value = entry.getValue(); Class<?> activityClientRecordClass = value.getClass(); Field activityField = activityClientRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Object o = activityField.get(value); list.add((Activity) o); } } } catch (Exception e) { e.printStackTrace(); list = null; } return list; }

相關推薦

Android 獲取所有Activity這裡演示使用者back退出app

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit();

Android返回退出APP(總結)

//退出時的時間 private long mExitTime; //對返回鍵進行監聽 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent

Android 後退退出應用程式

正文 <span style="font-size:10px;">private static Boolean isExit = false; private static

Android--一銷燬所有Activity回到登入介面

使用使用ActivityManager這個類,在每個Activity 的OnCreate方法呼叫的時候,加進去: public class ActivityManager { private

Atitit hibernste5 註解方式開發總結 目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1 這裡使用sqlite資料庫 1 1.2. 建立對映實體類tab1

Atitit hibernste5  註解方式開發總結     目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1  ,這裡使用了sqlite資料庫 1 1.2. 建立對映實體類tab1  

Android 獲取所有已安裝應用程式的包名

//因為我的手機是華為手機所以過濾掉了華為,大家可以按需求過濾 public void getAppProcessName(Context context) { //當前應用pid final PackageManager packageManager

Android 獲取Mac地址相容6.0以下和6.0以上

import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.text.Te

轉:Android 外部啟動activity自定義actionaction常量大全

https://www.cnblogs.com/guop/p/5067342.html Android 外部啟動activity,自定義action,action常量大全 從任意app,啟動另外一個app的activity: 1.   Intent i =

Android 外部啟動activity自定義actionaction常量大全

https://www.cnblogs.com/guop/p/5067342.html 從任意app,啟動另外一個app的activity: 1.   Intent i = new Intent();        &

Android Tip : Android 獲取當前Activity物件的方式:

【Android Tip】 Android 獲取當前Activity物件的方式: 背景:(當你不能使用this獲取Activity物件)如何方便地當前Activity物件 思路: 1.維護一個Activity的対象棧,在每個Activity的

如何退出當前所有activity重新進入loginActivity介面

程式碼如下: Intent intent = new Intent(this, LoginActivity.class); ComponentName cn = intent.getComponen

android獲取APK檔案及應用內部簽名信息方法

1.獲取APK的簽名信息 private String showUninstallAPKSignatures(String apkPath) { String PATH_PackageParser = "android.content.pm.PackageParser";

Android獲取手機IMEIIMSI, MAC標識和唯一標識的生成

急的直接看這個: android 獲取裝置IMEI與序列號: ​ //IMEI(imei) TelephonyManager tm = (TelephonyManager) ChinaApplication.getAppContext().getSystemService

Google 釋出2018年Android平臺新政策終於強硬一回!

1. 背景從 Android 6.0 開始,Google 開始逐漸收緊 Android 平臺的開放性,並在進一步提升應用的安全性、效能以及隱私保護方面做出了許多努力。這一點,從 Google 在之後的 Android 7.0 和 8.0 上不斷作出的調整就可以

android獲取程序資訊執行記憶體資訊

public static List<TaskInfo> getTaskInfos(Context context) { //首先獲取到程序管理器 Act

Android-獲取當前Activity指令碼(支援8.0+)

起始 步驟 分析 使用 原始碼 結果 起始 身為Android開發,我想大家對在跟蹤BUG、除錯的時候有個很大的痛點:測試拿過來手機說,這個頁面上有問題,你一看蒙了,這鬼知道是哪個頁面,一想,adb命令來一發adb shell ... 步

[Android]關閉所有Activity 然後開啟某個Activity

private volatile long lastJump = 0; public void loginAgain(String message){ if(System.currentTimeMillis() - lastJump > 2000) {

Android獲取手機號碼後臺傳送簡訊以及監聽簡訊傳送結果。

TelephonyManager tm = (TelephonyManager) this.getSystemService(this.TELEPHONY_SERVICE); phoneNumber1 = tm.getLine1Number(); Log.w("Teleph

Android碰撞的小球密集恐懼症謹慎

今天又溫習了一遍Java的程序。正好用Android寫了一個小Demo,具體就是在手機螢幕上顯示多個運動的小球,小球碰到手機螢幕邊緣會自動彈回。大概就是下面圖中顯示的: 該本主要的結束的是自定義View封裝,View檢視繪製,通過xml檔案自定義View屬性並設定屬性,多

Android鎖屏或滅屏狀態下快速音量下實現抓拍功能(1.1Framework層使用廣播形式實現)

實現思路:     WindowManagerService迴圈讀取下面按鍵訊息並分發給視窗,在訊息分發前會在PhoneWindowManager.interceptKeyBeforeQueueing方法中進行訊息的過濾。因此該實現方式為在訊息分發前的interceptKe