gpt4 book ai didi

java - 计算我的 Android 应用程序被打开的次数

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:32 24 4
gpt4 key购买 nike

我正在开发一个安卓应用程序,我想知道它被打开了多少次。有办法做到这一点吗?

最佳答案

Activity 中使用 onCreate 的问题在于,即使方向发生变化,这也会增加计数器。在 Application 中使用 onCreate 也有一个缺点,即您的计数器只会在 VM 关闭后递增 - 因此即使应用程序退出并重新打开也不一定增量。

事实上,没有万无一失的方法来处理这种计数,但我想出了一个非常好的方法,它尽可能接近 100% 准确。它需要在 Application 类和您的主 Activity 类中工作,并依赖时间戳来区分方向更改和实际应用程序启动。首先,添加以下 Application 类:

/**
* Application class used for correctly counting the number of times an app has been opened.
* @author Phil Brown
* @see <a href="http://stackoverflow.com/a/22228198/763080">Stack Overflow</a>
*
*/
public class CounterApplication extends Application
{
private long lastConfigChange;

/** @param buffer the number of milliseconds required after an orientation change to still be considered the same event*/
public boolean wasLastConfigChangeRecent(int buffer)
{
return (new Date().getTime() - lastConfigChange <= buffer);
}

@Override
public void onCreate()
{
lastConfigChange = new Date().getTime();
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
lastConfigChange = new Date().getTime();
}
}

您应该通过指定名称应用程序属性将此应用程序添加到您的 AndroidManifest.xml:

android:name="path.to.CounterApplication"

现在,在您的主要 Activity 中,在 onCreate 中添加以下内容:

//note that you can use getPreferences(MODE_PRIVATE), but this is easier to use from Fragments.
SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);

int appOpenedCount = prefs.getInt("app_opened_count", 1);
if (!((CounterApplication) getApplication()).wasLastConfigChangeRecent(10000))//within 10 seconds - a huge buffer
{
appOpenedCount += 1;
prefs.edit().putInt("app_opened_count", appOpenedCount).commit();
}

//now say you want to do something every 10th time they open the app:
boolean shouldDoThing = (appOpenedCount % 10 == 0);
if (shouldDoThing)
{
doThing();
appOpenedCount += 1;
//this ensures that the thing does not happen again on an orientation change.
prefs.edit().putInt("app_opened_count", appOpenedCount).commit();
}

关于java - 计算我的 Android 应用程序被打开的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com