如何在Android中仅在app安装时执行一次任务

时间:2016-09-18 06:09:34

标签: android broadcast android-applicationinfo

  
      
  • 我正在开发应用程序,该应用程序需要在应用安装时执行一次网络服务而且只能执行一次。
  •   
  • 目前我使用了共享偏好设置,但是如果用户清除应用数据,那么它会丢失共享偏好设置值,而我的代码会减少新创建的应用,我的代码会进一步执行网络服务。
  •   
  • 所以我需要安装自己应用程序的广播事件的解决方案。
  •   
  • 我也为此创建广播,但仅在安装其他应用时广播。
  •   

我使用的代码......

检查状态

private void checkAppStatus() {
    boolean isOpen = AppMethod.getBooleanPreference(MainActivity.this, AppConstant.PREF_IS_OPEN);
    if (!isOpen) {
        executeWS();
    }
}

广播

public class AppInfoReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.e("My App", "Install");
  }
}

清单

<receiver android:name=".receiver.AppInfoReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <data android:scheme="package" />
        </intent-filter>
</receiver>

2 个答案:

答案 0 :(得分:0)

如果您有服务器,则可以在服务器中保存状态并在执行任务之前获取状态

答案 1 :(得分:0)

您有以下选项:

  1. 您可以在外部存储器的隐藏目录中创建一个文件 需要的信息。
  2. 您可以根据需要创建和使用您的Web服务。
  3. 您的代码无效,因为您的应用程序在广播创建时未安装,因为在Android中,您的应用程序只有在用户至少启动一次时才能接收广播。

    据我了解,第一个选项也不符合您的需求,因为外部存储器有可能被删除或替换。 Android设备不提供任何类型的内存,100%将及时持久,如果您真的需要有关安装应用程序的信息,您应该运行您的服务器,接收Android设备ID并发回给您的应用程序信息而不是它是第一次安装或重新安装。但是,我认为您应该假设清除应用程序数据作为应用程序重新安装并再次运行您的Web服务。最简单的解决方案:只需传递给您的服务Android设备ID,如果它已经完成,则执行您的操作。