Kullanıcı tarafından belirli bir zaman aralığında (örneğin: 5 dk) erişilen apps
listesini arka plan işinden mi öğrenmek istiyorsunuz? Köklü olmayan bir android
telefonunda bu mümkün mü? Mümkünse, android hakkında harika bir öğrenim olacağı için cevabı bilmemle çok ilgileniyorum.Bir arka plan işini kullanarak bir kullanıcı tarafından erişilen uygulama listesi nasıl bulunur?
cevap
Evet. Bu hizmetinizin her 5 saniyede bir çalıştırılması gerekir. Bu hizmette, hangi uygulamaların kullanıcı tarafından erişilebildiğine ilişkin mantığı yazmanız gerekir. Çalışan uygulamaları çalıştırmak için ActivityManager sınıfını kullanmanız gerekir.
güncelle: robot 5.0 yöntem getAppTasks olan() getRecentTasks alternatif olarak
.
Kod örnek:
private void listTasks() throws PackageManager.NameNotFoundException {
ActivityManager mgr = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = mgr.getAppTasks();
String packagename;
String label;
for (ActivityManager.AppTask task: tasks){
packagename = task.getTaskInfo().baseIntent.getComponent().getPackageName();
label = getPackageManager().getApplicationLabel(getPackageManager().getApplicationInfo(packagename, PackageManager.GET_META_DATA)).toString();
Log.v(TAG,packagename + ":" + label);
}
}
Orjinal Cevap:
Giriş
ActivityManager sınıfı böyle bir bilgiyi verir iki yöntem sağlar. GetRecentTasks veya getRunningTasks yöntemini seçmek, döndürülen görevler listesi zaten bizim amacımız olmadığı için uygun olacaktır. Ancak, istenen listeyi belirleme yolunda bir referans noktası olarak kullanılacaktır.
Kod örnek:
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RecentTaskInfo> activitys = activityManager.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
for (int i = 0; i < activitys.size(); i++) {
RecentTaskInfo activity = activitys.get(i);
activity.baseIntent.getComponent().getPackageName();
}
Filtreleme: Bu liste sistem görevleri de dahil olmak üzere görevlerin tümünü türünü içerir.
Kod örnek:
if (activity.baseIntent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
// This is an application.
getPackageManager()
.getApplicationLabel(getPackageManager()
.getApplicationInfo(activity.baseIntent.getComponent()
.getPackageName(), PackageManager.GET_META_DATA)); // application name
}
Bu uzun ev düğmesine basarak görünecektir aynı listedir.
Özet Yaklaşım: (Açıklama sonra gelir)
belirtilen süre içinde istenilen listeyi belirlemek için biz olacak çağrı (nokta). Son görev listesi, dönemin başlangıcında 'un başında ve aralıklar arayacağımız dönemindeki her küçük periyottan sonra istenecektir.
Son uygulamalar. İlk aradan sonra getirilen liste, üç tür uygulama içerecektir. İlgilendiğimiz eski uygulamalar, Yeni başlatılan ve Yeniden başlatılan uygulamalar. özet yaklaşımının seçilmesinin ardındaki neden, Yeniden başlatılan uygulamaları tespit etmektir.
algılama Yeni başlatılan uygulamalar:
olanlar uygulamalardır. Bu sadece ilk getirilen listesinde görünmedi. (dönemden önce).
- Herhangi uygulamayı düşünmek için harika bir fikir olacaktır: bu yaklaşım neden örneklerle
açıklanması. uygulamanızdan önce görüntülendi. Daha sonra getirilen bir listede yeniden başlatılan bir uygulama. Uygulamayı başlattığımızdan beri, uygulama içinden, uygulamanızdan. listenin başındaydı.
Ama uygulama. tepeden aşağı inebilir ve aralık süresi içinde ona geri döner. (Facebook> Twitter> Uygulamanız).
sonraki bir zorlama listesinde
- başka uygulamaların . üstüne çıkabilir. referans olarak almak, uygulamanızla aynı nedenden dolayı başarısız olacaktır. referans olarak başarısız oldu.
Kazanma yaklaşım: bir aralık önce getirilen
listesi aralığından sonra getirilen liste için referans olacaktır. Yeniden başlatılan uygulamalar. uygulamalar olurdu. ilk sipariş-alt listeye (fosl) önüne çıktı.
Tüm uygulamalar. fosl önce yeniden başlatıldı sadece nedir app. Ve kolayca kanıtlanabilir. fosl değişti olmadan bazıları yeniden başlatıldı olabilir bir şekilde fosl üstünde uygulamaları sıralamak yolu yoktur (fazla uygulama eklemek büyüyecek). egzersiz yapabilirsin.
fosl yaklaşımı kullanıcı uygulamalardan bazılarını kaldırılmış olsa bile çok çalışacaktır. aralıktan manuel olarak listeden. Yalnızca kaldırılmış uygulamalar, önceki bir aralıkta tespit edilmediyse algılanmayacaktır. Ancak, listede kalanlar için fosl yaklaşımını etkilemeyecektir. Kullanıcı tüm listeyi temizlediyse aynı şeyi, sadece temizlenmiş uygulamaları. aynı aralıkta başlatılanlar tespit edilmeyecek ve değil.
Neden aralıkları?, çünkü böyle uzun bir süre için kullanıcı uygulamaları açabilir ve yeniden başlatabilir. sonra listeyi temizleyin veya bazılarını kaldırın.
Küçük aralıkları da fosl yaklaşımının tek zayıf olduğu yine aynı sırayla ile herhangi bir üst alt listesini açmak için kullanıcı bunu çok yapar.
Örnek Kod: (fosl)
public int getIndexOfFirstAppBeforeFOSL(ArrayList<App> recentApps) {
int i=previousRecentApps.size()-1, j = recentApps.size()-1;
for (; i>=0 && j>=0 ; i--) {
App app = previousRecentApps.get(i);
if (app.equals(recentApps.get(j))) {
j--;
} else {
// this application got re-launched and therefore it changed it place in list.
// or removed manually by user.
}
}
return j;
}
Ben uygulama için GitHub project yarattı. kontrol edin ve varsa hataları bildirin.
Sözünü ettiğimiz zayıflık için bir veya iki uygulamayı tespit etmekte başarısız olmanız, uygulama sonuçlarını toplamanızdan elde ettiğiniz araştırma sonucunu gerçekten etkilemek isteyecektir. Çok sayıda kullanıcı tarafından başlatılıyor. eğer sen zaten ne yapıyorsun? Aksi takdirde, uygulamanız. sık sık yeni başlatılan uygulama alabilirsiniz. ve kullanıcıyı bu konuda bilgilendirin.
Şuna bak, bu gece geç saatlerde. Kod projesine son dakika değişiklikleri yaptım. her şeyi söyleyebilirim. Yaklaşım teorik olarak mükemmel gözüküyor. proje kodundaki hataları rapor et. Düzelteceğim. ilginç soru yine de. – hasan83
NotRecentTasks() 'artık yapmanız gerekeni yapmazsa, tekniğiniz artık Android 5.0'dan itibaren çalışmayacaktır. – CommonsWare
Evet, bu doğru. Ancak, cihazların% 80'i gibi bir süre daha çalışmaya devam edebilir. Eğer 5.0 veya üzerinde bir çözüm varsa cevabımı güncelleyeceğim. – hasan83
- 1. Pencerelerde bir işlem tarafından tutulan yuvaların listesi nasıl bulunur?
- 2. Kullanıcı bağlantı verirse, arka plan resmini değiştirin Arka plan resmi
- 3. Belirli bir kullanıcı tarafından xmpp'ye katılan odaların listesi nasıl alınır?
- 4. Ülkeler listesi nasıl bulunur?
- 5. Uygulama sonlandırıldığında arka plan görevlerini gerçekleştirin
- 6. Makefile tarafından başlatılan bir arka plan işleminin PID'inin yakalanması
- 7. Bir çeviricinin arka plan rengini nasıl değiştirebiliriz?
- 8. Arka plan eylemleri nasıl belirlenir?
- 9. GDI +? Kullanarak bir görüntünün arka plan rengini nasıl değiştirebilirim?
- 10. Bir ileti sıra kullanarak bir arka plan iş parçacığı kullanmak
- 11. Geçerli kullanıcı bir şablon etiketinde nasıl bulunur?
- 12. JS sdk kullanarak facebook'ta bir kullanıcı tarafından oluşturulan olay listesi nasıl alınır?
- 13. jQuery'yi kullanarak bu sayfaya nasıl arka plan resmi ekleyebilirim?
- 14. AdMob: arka plan istekleri?
- 15. Uygulama arka plan getirme tamamlandıktan sonra çöküyorHandler
- 16. Bir videoyu arka plan olarak ayarla
- 17. Arka plan resmi ayarlama
- 18. Değil bir Doxygen arka plan yorumu
- 19. Windows 8.1 bir arka plan görevi iptal etmek javascript kullanarak
- 20. Django CSS Arka plan resmi STATIC_URL kullanarak
- 21. Bir arka plan resmini css kullanarak yatay olarak döndürme
- 22. Python'da bir görüntü arka plan üzerinde çizim
- 23. Gruplandırılmış tableview arka plan rengi gibi dokulu bir arka plan (resim paleti) rengini nasıl oluşturabilirim?
- 24. Arka plan rengi geçişi
- 25. openxml kullanarak excel'e belirli bir hücreye arka plan rengi uygular
- 26. Android'de tüm uygulama için arka plan nasıl ayarlanır?
- 27. Bir JPanel'e arka plan resmi ekleme
- 28. arka plan iş parçacığı kullanarak Task.Run
- 29. Bir uygulama başlatıldığında durum çubuğu arka plan stilini hızlı bir şekilde nasıl değiştirebilirim?
- 30. Debugger (VS Professional 2012) kullanarak olayların listesi nasıl bulunur?
Erişilen uygulamaları o aralıkta kaydetmek yeterli olur mu? – Storo
Sadece o aralıkta eklenmiş uygulama adlarına ihtiyacım var. – Kishor
Cevabımı kontrol ettin mi? Uygulama olsa da bir hata var. Yaklaşımda değil ama birçok program açtıktan sonra yok oluyor. Yöntemi bir hizmetten çağırmak sorunu çözer. ve doğrudan bir web servisine gönderilecek. ya da cihaza bazı yerlerde kaydetme. Uygulamam test amaçlı olarak bunları liste görünümünde görüntüler. UI'den herhangi bir şekilde kaybolur. Bir servisimiz olsa bile. Onları saklamamız gerek. – hasan83