我在想如何保存記錄以啓動用於記錄目的的活動。我必須訂閱什麼廣播接收器才能攔截此意圖?或什麼意圖過濾器使用?我認爲我必須在後臺使用某種長時間運行的服務。在Android中保存已啓動活動的記錄
我的第一個目標是跟蹤主要應用程序,某種歷史。
想得到終於有些類似:
- - 推出應用com.android.xxx
- - 推出應用XX.YY.ZZ
- - 應用XX.YY.ZZ失去焦點
在此先感謝
編輯 - 只看到應用MyAppRank,這不正是我的意思
我在想如何保存記錄以啓動用於記錄目的的活動。我必須訂閱什麼廣播接收器才能攔截此意圖?或什麼意圖過濾器使用?我認爲我必須在後臺使用某種長時間運行的服務。在Android中保存已啓動活動的記錄
我的第一個目標是跟蹤主要應用程序,某種歷史。
想得到終於有些類似:
在此先感謝
編輯 - 只看到應用MyAppRank,這不正是我的意思
當應用程序啓動或應用程序到達前臺時,沒有Intent
廣播。沒有任何東西可以作爲聽衆來獲取這些事件。
你可以做到這一點(這是應用程序,如MyAppRank的方式做到這一點)的辦法是使用ActivityManager
的方法:
getRunningTasks()
getRunningAppProcesses()
getRecentTasks()
您創建一個Service
它運行所有的時間和定期調用ActvityManager
的方法來確定哪個任務處於前臺,並且您可以「推斷」用戶已完成(或正在進行)的內容。這不是一門精確的科學。
注意:您將需要android.permission.GET_TASKS
,並且API 21(Android 5,Lollipop)不再適用此功能。從API 21開始,安全性得到了加強,應用程序只能獲得有關其自己任務的信息,而不是系統中的其他任務。
這正是我要找的,這是一個可恥的(爲我的目的)5.0 +的限制,但它的安全性沒問題。謝謝 – webo80
我能從你的問題中發現的是,你想要跟蹤在你的應用中啓動的所有活動。如果這是正確的,該解決方案可以爲你工作:
木箱一個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);
}
}
現在爲所有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>
希望這可以解決您的問題。乾杯!
您實際上需要從設備運行的應用程序的列表? – gunar
不,不是真的。我正在更多地討論由用戶/主要關注點開放的活動時間表,用戶使用情況統計信息 – webo80
我不確定是否有此API,但我會將您的問題添加爲收藏夾,因爲您讓我好奇 – gunar