2015-01-15 44 views
0

我必須檢測應用程序從圖標中啓動了多少次,或者從多任務視圖中回到前面。我怎麼做?如何檢測應用程序是否已啓動或預先處理?

+0

當應用程序啓動,'的onCreate()被調用,然後''的onResume()'。當從多任務處理視圖出現時,調用'onResume()',但不調用'onCreate()'。 – Hemanth

+0

如果您從下一個活動返回到上一個活動,還會調用onResume –

回答

1

這個類可以幫助你很多

以下是一些示例代碼

RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0); String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName(); 
         PackageManager pm = ForegroundAppService.this.getPackageManager(); 
         PackageInfo foregroundAppPackageInfo; 

          foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0); 
          String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString(); 
          Drawable appicon=getPackageManager().getApplicationIcon(foregroundTaskPackageName); 
          iv.setImageDrawable(appicon); //       Log.d("Foreground task ",foregroundTaskAppName); //        Log.d("Size ",tasklist.size()+""); 
          Log.d("App Icon ------------------------------->",appicon+""); 
          if(Globals.tasklist.size()>=1) 
          { String value=""; 
          i=0; 
           for(HashMap<String, String> map: Globals.tasklist) { 
            Log.d("map ",map.get("appname")); 

            for(String str:map.keySet()) 
            { 
             Log.d("str ",str); 
             String key=str; 
             value=map.get(str); 
             Log.d("Foreground App Name ",foregroundTaskAppName); 
             Log.d("Existing List Value ",value); 

             if(value.equals(foregroundTaskAppName)) 
              { 

               flag=false; 
               Log.d("time ",map.get("apptime")); 
               foregroundAppTime = timeIncrement(Integer.parseInt(map.get("apptime"))); 
               map.put("apptime", Integer.toString(foregroundAppTime)); 
               Log.d("time ",map.get("apptime")); ////            Log.d("Previous Time ",tasklist.get(key)+""); 
               HashMap<String,String> hs=new HashMap<String,String>(); 
               hs=Globals.tasklist.get(i); 
               Set set=hs.entrySet(); 
               Iterator ii = set.iterator(); 

               if(ii.hasNext()) { 
                Map.Entry me = (Map.Entry)ii.next(); 
                Log.d("Task -----------> ",me.getKey()+""); 
                Log.d("Time ----------->",me.getValue()+""); 
                 //              try //             { //             foregroundAppTime= timeIncrement((int)me.getValue()); //             } //             catch(Exception ex){Log.d("Error ",ex.getMessage());} //             hs.put("apptime", Integer.toString(foregroundAppTime)); //             Globals.tasklist.add(i, hs); 
               } 
               //            Globals.appinfo.put("appname", foregroundTaskAppName); //            Globals.appinfo.put("apptime", Integer.toString(foregroundAppTime)); //             Globals.tasklist.add(Globals.appinfo); 
               break; 
              } 
              else 
              { 
               flag=true; 
              } 
            } 
            if(flag==false) 
            { 
             break; 
            } 
            i++; 
           } 

           if(flag) 
           { 
            Log.d("Foreground App Name in End ",foregroundTaskAppName); 
            HashMap<String, String> appinfo = new HashMap<String, String>(); 
            appinfo.put("appname", foregroundTaskAppName); 
            appinfo.put("apptime", "0"); 
            Globals.tasklist.add(appinfo); 

           } 

          } 
          else 
          { 
           HashMap<String, String> appinfo = new HashMap<String, String>(); 
           appinfo.put("appname", foregroundTaskAppName); 
           appinfo.put("apptime", "0"); 
           Globals.tasklist.add(appinfo); 
          } 
         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          Log.d("Error ",e.getMessage()); 
         } 
         Log.d("Running Task " ,"---------------Start-----------------"); 

         for(HashMap<String, String> map: Globals.tasklist) { 
          for(String str:map.keySet()) 
          { 
           String key=str; 
           String value=map.get(str); 
           Log.d("Key ",key); 
           Log.d("Value ",value); 
          } 
         } 


        Log.d("Running Task " ,"---------------End-----------------"); 
       }}, 0, 1000); 



      return START_STICKY; 
     } 

     int timeIncrement(int time) 
     { 
      time++; //   Log.d("New Time ",time+""); 
      return time; 
     } 
+0

下一次,當您複製粘貼時,您是否至少可以更正縮進?謝謝。 – 2Dee

+0

謝謝我會試用這個 –

+0

這是唯一不會導致誤導的答案。謝謝。 –

2

在您的onCreate()方法中,從SharedPreferences中讀取您的計數器並將其保存。

在你的onResume()方法中,你的另一個計數器也是這樣。

+0

我有一些活動。無法保證在用戶「最小化」應用程序之前最後訪問過哪個活動。另外,當從一個活動轉移到另一個活動時,再回到第一個活動時,onResume也會被調用,並且用戶從未離開過該應用程序。 –

相關問題