Pertanyaan Android M: Bagaimana saya bisa mendapatkan nama paket aktivitas latar depan saat ini (dari layanan)


Sangat mudah untuk mendapatkan daftar menjalankan tugas dari layanan ActivityManager di Android L, dan tugas aktif saat ini dikembalikan terlebih dahulu. Tapi itu tidak bekerja di Android M lagi, daftar kembali hanya berisi tugas aplikasi saya. Apakah ada cara untuk menyelesaikannya?

Kode saya:

List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfos.size(); i++) {
    ActivityManager.RunningAppProcessInfo runningAppProcessInfo = runningAppProcessInfos.get(i);
    if (runningAppProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
        return runningAppProcessInfo.pkgList[0];
    }
}

4
2017-11-07 09:44


asal


Jawaban:


Anda dapat menggunakan kode di bawah ini dan mendapatkan nama paket aktivitas latar depan saat ini.

   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            UsageStatsManager usm = (UsageStatsManager) getSystemService("usagestats");
            long time = System.currentTimeMillis();
            List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,
                            time - 1000 * 1000, time);
                    if (appList != null && appList.size() > 0) {
                        SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
                        for (UsageStats usageStats : appList) {
                            mySortedMap.put(usageStats.getLastTimeUsed(),
                                    usageStats);
                        }
                        if (mySortedMap != null && !mySortedMap.isEmpty()) {
                            currentApp = mySortedMap.get(
                                    mySortedMap.lastKey()).getPackageName();
                        }
                    }
        } else {
                ActivityManager am = (ActivityManager) getBaseContext().getSystemService(ACTIVITY_SERVICE);
                currentApp = am.getRunningTasks(1).get(0).topActivity .getPackageName(); 

        }

Edit

Tambahkan izin ini ke file Manifest.

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />

Catatan

Pastikan Anda perlu mengonfigurasi pengaturan khusus di perangkat Anda untuk mendapatkan hasil yang dapat Anda konfigurasikan dengan Pengaturan> Keamanan> Aplikasi dengan akses penggunaan> Lalu aktifkan izin aplikasi Anda


10
2017-11-20 14:12



Silakan coba baris ini di Android M. Ini bekerja untuk saya

String packageName =  ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName();

cek tautan di bawah untuk dukungan platform android lainnya.

https://stackoverflow.com/a/36660429/4554069


0
2018-04-16 07:02