2013-06-20 35 views
5

我在想如何保存記錄以啓動用於記錄目的的活動。我必須訂閱什麼廣播接收器才能攔截此意圖?或什麼意圖過濾器使用?我認爲我必須在後臺使用某種長時間運行的服務。在Android中保存已啓動活動的記錄

我的第一個目標是跟蹤主要應用程序,某種歷史。

想得到終於有些類似:

  • - 推出應用com.android.xxx
  • - 推出應用XX.YY.ZZ
  • - 應用XX.YY.ZZ失去焦點

在此先感謝

編輯 - 只看到應用MyAppRank,這不正是我的意思

+0

您實際上需要從設備運行的應用程序的列表? – gunar

+0

不,不是真的。我正在更多地討論由用戶/主要關注點開放的活動時間表,用戶使用情況統計信息 – webo80

+0

我不確定是否有此API,但我會將您的問題添加爲收藏夾,因爲您讓我好奇 – gunar

回答

1

當應用程序啓動或應用程序到達前臺時,沒有Intent廣播。沒有任何東西可以作爲聽衆來獲取這些事件。

你可以做到這一點(這是應用程序,如MyAppRank的方式做到這一點)的辦法是使用ActivityManager的方法:

getRunningTasks() 
getRunningAppProcesses() 
getRecentTasks() 

您創建一個Service它運行所有的時間和定期調用ActvityManager的方法來確定哪個任務處於前臺,並且您可以「推斷」用戶已完成(或正在進行)的內容。這不是一門精確的科學。

注意:您將需要android.permission.GET_TASKS,並且API 21(Android 5,Lollipop)不再適用此功能。從API 21開始,安全性得到了加強,應用程序只能獲得有關其自己任務的信息,而不是系統中的其他任務。

+1

這正是我要找的,這是一個可恥的(爲我的目的)5.0 +的限制,但它的安全性沒問題。謝謝 – webo80

4

我能從你的問題中發現的是,你想要跟蹤在你的應用中啓動的所有活動。如果這是正確的,該解決方案可以爲你工作:

  1. 木箱一個BaseActivity其所有的活動都應該延長

    public class BaseActivity extends Activity 
    

    {

    private Activity activity; 
    
    public static final String INTENTFILTER_TRACK_MY_ACTIVITIES="INTENTFILTER_TRACK_MY_ACTIVITIES"; 
    public static final String INTENTFILTER_REMOVE_MY_ACTIVITIES="INTENTFILTER_REMOVE_MY_ACTIVITIES"; 
    
    public void setActivity(Activity act) 
    { 
        activity = act; 
    } 
    
    public Activity getActivity() 
    { 
        return activity; 
    } 
    
    @Override protected void onCreate(Bundle savedInstanceState) 
    { 
        // TODO Auto-generated method stub 
        super.onCreate(savedInstanceState); 
        Intent intent = new Intent(); 
        intent.setAction(INTENTFILTER_TRACK_MY_ACTIVITIES); 
        intent.putExtra("activityName", activity.getClass().getSimpleName()); 
        sendBroadcast(intent); 
    } 
    
    @Override protected void onDestroy() 
    { 
        // TODO Auto-generated method stub 
        super.onDestroy(); 
        Intent intent = new Intent(); 
        intent.setAction(INTENTFILTER_REMOVE_MY_ACTIVITIES); 
        intent.putExtra("activityName", activity.getClass().getSimpleName()); 
        sendBroadcast(intent); 
        setActivity(null); 
    } 
    

    }

  2. 現在爲所有y延伸到BaseActivity之上我們的活動。即不是擴展您的活動,而應擴展BaseActivity並致電setActivity(this);在的onCreate象下面這樣:

    public class MyActivity extends Activity 
    

{

 @Override  
     protected void onCreate(Bundle savedInstanceState) 

    { 

     super.onCreate(savedInstanceState); 

     setActivity(this); 
     //write your other code form here 
    } 

} 

3.Then寫象下面這樣一個BroadcastReceiver:

class TrackActivitiesReceiver extends BroadcastReceiver 
    { 

private static final Object SEPERATOR = ",";// use , as seperator 
String sb=""; 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    if(intent.getAction().equalsIgnoreCase(BaseActivity.INTENTFILTER_TRACK_MY_ACTIVITIES)) 
    { 
     sb+=intent.getStringExtra("activityName"); 
     sb+=SEPERATOR; 
    } 
    else if(intent.getAction().equalsIgnoreCase(BaseActivity.INTENTFILTER_REMOVE_MY_ACTIVITIES)) 
    { 
     sb=sb.replace(intent.getStringExtra("activityName")+SEPERATOR, ""); 
    } 
}} 

4Finally,註冊上述接收機中的AndroidManifest.xml

<receiver 
     android:name="TrackActivitiesReceiver" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="INTENTFILTER_TRACK_MY_ACTIVITIES" /> 
     </intent-filter> 
    </receiver> 

希望這可以解決您的問題。乾杯!

+1

我明白他需要保持統計將從設備發起的所有活動(no與應用程序有關)。 – gunar

+0

@gunar,試圖保持應用程序打開記錄打開日曆,打開twitter應用程序,打開facebook ...或主要關注應用程序的記錄。 Vinay,很好的回覆BTW – webo80