2012-02-26 85 views
0

我正在編寫一個應用程序,用於監視最近啓動的應用程序或更精確地測試 - 測試每個應用程序啓動的次數。有沒有辦法知道最近的應用程序何時啓動?

對於這個我使用:

final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
final List<RecentTaskInfo> recentTasks = activityManager.getRecentTasks(20,ActivityManager.RECENT_WITH_EXCLUDED); 

for (int i = 0; i < recentTasks.size(); i++) { 
Intent baseIntent = recentTasks.get(i).baseIntent; 
if(baseIntent != null) { 

Log.d("Text", "Application executed: " + i + ": baseIntent: " + baseIntent.getComponent().getPackageName() + baseIntent.getComponent().getClassName()); 

     } 

的問題是,它是不夠的。因爲如果一個應用程序啓動了3次,我只會得到它一次。

爲此,我需要知道應用何時開始。

回答

0

其中一個選項是從logcat 中讀取日誌,當活動啓動時您可以輕鬆找到我們。

+0

感謝您的回覆,是的,我知道,這是它以前的實施方式。 問題在於它重讀了幾個小時的日誌。或更令人不安的是,日誌是不同的設備到另一個,它可能會改變未來的版本... – ZiviMagic 2012-02-26 12:41:33

0
package com.example.sample; 

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import android.app.Activity; 
import android.app.ActivityManager; 
import android.app.ActivityManager.RecentTaskInfo; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final ArrayList<String> al = new ArrayList<String>(); 
     Context context = this.getApplicationContext(); 
     ActivityManager mgr = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); 
     List<ActivityManager.RecentTaskInfo> recentTasks = mgr.getRecentTasks(100,ActivityManager.RECENT_WITH_EXCLUDED); 
     for(Iterator i = recentTasks.iterator(); i.hasNext();) 
      { 
      RecentTaskInfo p = (RecentTaskInfo)i.next();  
     String output=p.baseIntent.getComponent().getPackageName(); 
       al.add(output); 
      } 

     Button button1=(Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // write on SD card file data in the text box 
       try { 

        Log.e("DEBUG", "Recently started tasks"); 
        FileWriter outFile = new FileWriter("/sdcard/sdcard/Notes/task.txt"); 
        BufferedWriter outStream = new BufferedWriter(outFile); 
        for (int k = 0; k < al.size(); k++) 
        { 
         outStream.write(al.get(k)); 
        outStream.write("\n"); 

        } 
        outStream.close(); 
        // System.out.println("Data saved."); 
       } 

     //outStream.write(output); 
     //al.add 
         //outStream.write("\n"); 

              // outStream.close(); 



     catch (Exception e) { 
        Toast.makeText(getBaseContext(), e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 
       }// onClick 
      }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    }} 
相關問題