如何在 android 中以编程方式跟踪应用程序使用时间?
How to track app usage time programmatically in android?
我想知道用户使用我的应用程序的时间。因此,每当他打开我的应用程序时,我都想知道时间,而每当他关闭应用程序时,我都想知道时间。当用户关闭应用程序时,我想将使用时间发送到服务器。我如何跟踪 android 中的使用时间?
我会放置数据日志 onResume
和 onPause
方法。在每次 onPause 时将使用时间追加到 SharedPrefrences
或某些数据库,并根据创建要求或打开互联网时发送使用统计信息。
通过这种方式,您可以跟踪每个活动的使用情况。
不确定某些框方法是否存在。
我在下面提到的方法是一种非常有效的方法,可以获取 android 中用户在应用程序上花费的总时间。实际上,我也使用这种方法来奖励我的用户花费的时间。首先,您需要一个自定义的 ActivityLifecycleCallbacks,它负责在应用程序开始启动和停止时触发。您只需将 ActivityLifecycleCallbacks 注册到您的应用程序实例。这也会关心是否有任何用户暂停应用程序,因此您无需考虑 it.The 自定义 ActivityLifecycleCallbacks class 是 -
public class ApplicationTimeSpentTracker implements Application.ActivityLifecycleCallbacks {
private int activityReferences = 0;
private boolean isActivityChangingConfigurations = false;
private long startingTime;
private long stopTime;
/**startingTime is the UNIX timestamp (though I increased readability by converting into millisecond to second) your app is being foregrounded to the user and stopTime is when it is being backgrounded (Paused)*/
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
if (++activityReferences == 1 && !isActivityChangingConfigurations) {
// App enters foreground
startingTime=System.currentTimeMillis()/1000; //This is the starting time when the app began to start
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
isActivityChangingConfigurations = activity.isChangingConfigurations();
if (--activityReferences == 0 && !isActivityChangingConfigurations) {
// App enters background
stopTime = System.currentTimeMillis() / 1000;//This is the ending time when the app is stopped
long totalSpentTime= stopTime-startTime; //This is the total spent time of the app in foreground. Here you can post the data of total spending time to the server.
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
最后,您需要像这样在 MainActivity 中将回调注册到您的应用程序实例 -
activity.getApplication().registerActivityLifecycleCallbacks(new ApplicationTimeSpentTracker());
这是我的 post 如果您需要详细信息
我想知道用户使用我的应用程序的时间。因此,每当他打开我的应用程序时,我都想知道时间,而每当他关闭应用程序时,我都想知道时间。当用户关闭应用程序时,我想将使用时间发送到服务器。我如何跟踪 android 中的使用时间?
我会放置数据日志 onResume
和 onPause
方法。在每次 onPause 时将使用时间追加到 SharedPrefrences
或某些数据库,并根据创建要求或打开互联网时发送使用统计信息。
通过这种方式,您可以跟踪每个活动的使用情况。
不确定某些框方法是否存在。
我在下面提到的方法是一种非常有效的方法,可以获取 android 中用户在应用程序上花费的总时间。实际上,我也使用这种方法来奖励我的用户花费的时间。首先,您需要一个自定义的 ActivityLifecycleCallbacks,它负责在应用程序开始启动和停止时触发。您只需将 ActivityLifecycleCallbacks 注册到您的应用程序实例。这也会关心是否有任何用户暂停应用程序,因此您无需考虑 it.The 自定义 ActivityLifecycleCallbacks class 是 -
public class ApplicationTimeSpentTracker implements Application.ActivityLifecycleCallbacks {
private int activityReferences = 0;
private boolean isActivityChangingConfigurations = false;
private long startingTime;
private long stopTime;
/**startingTime is the UNIX timestamp (though I increased readability by converting into millisecond to second) your app is being foregrounded to the user and stopTime is when it is being backgrounded (Paused)*/
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
if (++activityReferences == 1 && !isActivityChangingConfigurations) {
// App enters foreground
startingTime=System.currentTimeMillis()/1000; //This is the starting time when the app began to start
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
isActivityChangingConfigurations = activity.isChangingConfigurations();
if (--activityReferences == 0 && !isActivityChangingConfigurations) {
// App enters background
stopTime = System.currentTimeMillis() / 1000;//This is the ending time when the app is stopped
long totalSpentTime= stopTime-startTime; //This is the total spent time of the app in foreground. Here you can post the data of total spending time to the server.
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
最后,您需要像这样在 MainActivity 中将回调注册到您的应用程序实例 -
activity.getApplication().registerActivityLifecycleCallbacks(new ApplicationTimeSpentTracker());
这是我的 post 如果您需要详细信息