2011-09-27 35 views
24

Tôi đang cố tạo hộp thoại bật lên chỉ hiển thị sau lần chạy đầu tiên của ứng dụng sẽ cảnh báo cho người dùng về những thay đổi mới trong ứng dụng. Vì vậy, tôi có một hộp thoại bật lên như sau:Android: Hộp thoại bật lên đầu tiên

new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show(); 

Sau khi loại bỏ nó, nó sẽ không trở lại cho đến khi bản cập nhật tiếp theo hoặc cài đặt lại ứng dụng.

Tôi làm cách nào để đặt mã hộp thoại ở trên chỉ chạy một lần?

+0

thể trùng lặp của [Xác định xem ứng dụng Android là lần đầu tiên sử dụng] (http://stackoverflow.com/questions/4636141/determine-if-android-app-is-the-first-time-used) –

Trả lời

69

Sử dụng SharedPreferences để lưu trữ giá trị isFirstRun và kiểm tra hoạt động khởi chạy của bạn dựa vào giá trị đó.

Nếu giá trị được đặt, thì không cần hiển thị hộp thoại. Nếu có, hãy hiển thị hộp thoại và lưu cờ isFirstRun trong SharedPreferences.

Ví dụ:

public void checkFirstRun() { 
    boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true); 
    if (isFirstRun){ 
     // Place your dialog code here to display the dialog 

     getSharedPreferences("PREFERENCE", MODE_PRIVATE) 
      .edit() 
      .putBoolean("isFirstRun", false) 
      .apply(); 
    } 
} 
+5

Tùy chọn này sẽ là 'false' sau khi cập nhật – SpongeBobFan

+2

để làm việc này, tôi cần thay đổi' getSharedPreference' thành 'getSharedPreferences' – gMale

+0

Điều gì sẽ là mục nhập trong tệp kê khai để làm việc này? – Sndn

2

Không có câu hỏi thực tế, nhưng tôi cho rằng bạn muốn biết cách đạt được hiệu quả mong muốn. Nếu đó là trường hợp, sau đó sử dụng một đối tượng SharedPreference để có được một boolean 'chạy đầu tiên' mà mặc định là đúng, và đặt nó thành false ngay sau lần chạy đầu tiên.

19

Trong khi ý tưởng chung của câu trả lời khác là âm thanh, bạn nên giữ trong các ưu đãi chia sẻ không phải là một boolean, nhưng một dấu thời gian khi là lần cuối cùng chạy đầu tiên đã xảy ra, hoặc phiên bản ứng dụng mới nhất đã xảy ra.

Lý do cho điều này là bạn có thể muốn chạy hộp thoại chạy đầu tiên cũng như ứng dụng đã được nâng cấp. Nếu bạn chỉ giữ một boolean, về nâng cấp ứng dụng, giá trị sẽ vẫn là đúng, do đó, không có cách nào để mã của bạn biết liệu nó có nên chạy lại hay không.

+3

bạn có thể đưa ra một đoạn trích như với sự biện minh của bạn không? cảm ơn vì đã chỉ ra điều này, rất tốt để biết. – TryTryAgain

3

Tôi sử dụng tính năng này để hiển thị hộp thoại trợ giúp trong lần chạy đầu tiên. Tôi không muốn điều này hiển thị sau khi cập nhật. Đó là phù hợp hơn cho một changelog.

private void doFirstRun() { 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
     if (settings.getBoolean("isFirstRun", true)) { 
      showDialog(DIALOG_HELP); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putBoolean("isFirstRun", false); 
      editor.commit(); 
     } 
} 
7

Như thế này bạn có thể tạo sự khác biệt giữa cài đặt mới và bản cập nhật.

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(); 
} 
Các vấn đề liên quan