【问题标题】:Do something when app starts?应用启动时做些什么?
【发布时间】:2016-02-26 13:41:56
【问题描述】:

我有一个非常简短的问题。

每当用户下载我的应用时,出于某种原因,音量为零。我想在用户第一次进入应用程序时提高音量,并更新一些内容。每当创建应用程序时,我都希望增加用户量,并且用户可以稍后更改。如果用户离开应用程序(主菜单)并返回,则不应执行该代码。

所以,我想我会使用 Application 类:

这不起作用,因为要进行我前面提到的更新,我需要调用一个非静态方法。为此,我将在方法所在的类中创建一个对象,然后从那里调用它。

这样做的问题是该方法之前从未被调用过,并且它有很多空对象。所以,就会出现空指针异常

那么,我该如何实现呢?仅当用户在关闭应用程序后返回或这是用户第一次下载应用程序时才会增加音量。应用程序是否仍在后台打开并不重要。当应用程序启动时,我还需要从那里调用另一个方法......这会得到一个空指针异常。

所以现在我迷路了。我怎样才能做到这一点?

谢谢,

鲁基尔

【问题讨论】:

  • 你试过SharedPreference吗?
  • 这种行为——对于作为用户的我来说——会让我立即卸载应用程序!如果这是一个错误(零音量) - 好的,修复它。但作为用户,我不希望它被设置为我自己没有配置的任何东西。因此,如果它在第一次开始时就这样做,我希望它总是或至少会发生,这样我就无法判断何时了。在我看来,这是一个非常糟糕的主意。

标签: java android string methods nullpointerexception


【解决方案1】:

实际上在没有任何用户交互的情况下改变音量将是糟糕的用户体验。但是为了回答这个问题。你可以使用SharedPreferences

当您的应用启动时:

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences("com.example.myapp.PREFERENCE_FILE_KEY", Context.MODE_PRIVATE);
int defaultValue = 0;
long openedState = sharedPref.getInt("isAppOpenedBefore", defaultValue);

if (defaultValue == openedState)
{
   // First launch
   // Change volume
   // Writing app already opened state
   SharedPreferences.Editor editor = sharedPref.edit();
   editor.putInt("isAppOpenedBefore", 1);
   editor.commit();
}

【讨论】:

  • 你知道为什么用户下载应用时音量总是为零吗?谢谢
  • @RuchirBaronia:可能是他们手动将手机置于静音模式。我认为这与您的应用程序无关。这就是你需要设置音量的原因吗?
  • 是的,但大多数手机都会出现这种情况,我必须告诉用户有音量。
  • 等一下,共享首选项只会发生一次
  • 永远。我需要重置共享偏好或其他什么吗?
【解决方案2】:

您可以查看活动生命周期。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

您可以在启动器活动中使用 onStart 方法并确保所有内容都不为空。

如果这应该仅在每个设备的应用程序第一次启动时发生,您可以在 on Start 的 ned 处将 sharedPreference 设置为 true,并且在 onStart 的开头您可以检查该值。 您可以检查 SharedPreference 是否具有该特定值。

http://developer.android.com/reference/android/content/SharedPreferences.html

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2018-07-29
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多