2013-02-08 110 views
0

我正在实现一个具有MainActivity,onlyFirstRunActivity和alwaysRunActivity的应用程序。现在我想,上的应用程序制作安装或更新用应用的我的应用程序周期应该是这样的:运行活动仅适用于安装应用程序后的第一次Android

MainActivity - > onlyFirstRunActivity - > alwaysRunActivity

安装后或更新用我的应用程序周期应该是:

MainActivity - > alwaysRunActivity

我如何能实现这种情况

+2

SharedPreferences可以存储一个布尔型'bFirstRun',告诉你这是否是第一次运行。 – 2013-02-08 16:50:39

+0

但最后存储的sharedprefences仍然在updation.Means如何配置应用程序更新更新? – User42590 2013-02-08 16:57:15

+1

不确定你的意思,但是如果没有名为'bFirstRun'的SharedPreference ...那么你是第一次运行。然后将其设置为false(并提交更改)。下一次通过,它在那里和假所以转到'alwaysRunActivity' – 2013-02-08 17:00:18

回答

1

您可以获取应用程序的更新时间并将其保存在SharedPreference中。

此外,你应该让你的主要活动永远运行一个。

//In your onCreate for your main activity/. 
if(last_update_preference < current_update_time){ 
    Update last update preference to current update time. 
    Run first activity. (Which will finish and bounce you back); 
} 

要获得current_update_time:

How to get app install time from android

对于最后的更新时间,请参阅:

http://developer.android.com/guide/topics/data/data-storage.html#pref

+0

我认为它只适用于更新。首先安装什么?并共享一个安全的方式?? – User42590 2013-02-08 16:54:56

+0

如果您返回0作为SharedPreference的默认值,则它将用于第一次安装,上次修改时应为安装时间。 (链接的堆栈溢出问题显示它) – Edison 2013-02-08 16:56:04

+0

第一次last_update_preference的值是什么? – User42590 2013-02-08 17:08:02

0

你可以尝试这样的事情:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    App app = (App)getApplication(); 
    if (app.getApi() != null){ 
     super.onBackPressed(); 
     startActivity(new Intent(this, MainActivity.class)); 
     return; 
    }else showLoginForm();//or do something else. 
} 
+0

我不明白你为什么得到app.getAp?什么是登录表单? – User42590 2013-02-08 17:35:45

+0

getApi()方法返回api类的对象,它根据共享首选项创建。所以这意味着开始不是第一次。我开始新的活动。或者,如果api = null表示首先是开始,并且我显示登录表单。 – Vetalll 2013-02-09 11:26:58

0

像这样你可以区分新的安装和更新。

String StoredVersionname = ""; 
    String VersionName; 
    AlertDialog LoginDialog; 
    AlertDialog UpdateDialog; 
    AlertDialog FirstRunDialog; 
    SharedPreferences prefs; 

    public static String getVersionName(Context context, Class cls) { 
       try { 
        ComponentName comp = new ComponentName(context, cls); 
        PackageInfo pinfo = context.getPackageManager().getPackageInfo(
          comp.getPackageName(), 0); 
        return "Version: " + pinfo.versionName; 
       } catch (android.content.pm.PackageManager.NameNotFoundException e) { 
        return null; 
       } 
      } 

    public void CheckFirstRun() { 
       VersionName = MyActivity.getVersionName(this, MyActivity.class); 
prefs = PreferenceManager.getDefaultSharedPreferences(this); 
       StoredVersionname = (prefs.getString("versionname", null)); 
       if (StoredVersionname == null || StoredVersionname.length() == 0){ 
        FirstRunDialog = new FirstRunDialog(this); 
        FirstRunDialog.show(); 
       }else if (StoredVersionname != VersionName) { 
        UpdateDialog = new UpdateDialog(this); 
        UpdateDialog.show(); 
       } 
       prefs.edit().putString("versionname", VersionName).commit(); 
      } 
相关问题