2011-08-18 3 views
5

Tôi đang sử dụng các tùy chọn được chia sẻ để lưu trữ số lần ứng dụng của tôi đã được khởi chạy. Chỉ vào lần khởi chạy đầu tiên, tôi hiển thị thông báo Chào mừng cho người dùng biết về các tính năng mới và thay đổi trong phiên bản đó.SharedPreferences behavior on Update/Uninstall

Nhưng khi tôi hấp thụ khi cài đặt lại ứng dụng hoặc nâng cấp ứng dụng, tôi không thể xóa các tùy chọn được chia sẻ trước đó. tôi muốn nhận được hộp thoại khi tôi cài đặt lại phần mềm hoặc nâng cấp nó.

AppLauncher

public class AppLauncher { 
    static long launch_count = 0; 
    private static boolean isLaunch = false; 

    public static void app_launched(Context mContext) { 
     System.out.println("I m in AppLauncher"); 
     SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0); 
     if (prefs.getBoolean("dontshowagain", false)) { 
      return; 
     } 

     SharedPreferences.Editor editor = prefs.edit(); 

     // Increment launch counter 

     launch_count = prefs.getLong("launch_count", 0); 
     editor.putLong("launch_count", launch_count); 

     System.out.println("launch_count=" + launch_count); 
     if (launch_count == 0 || launch_count == 1) { 
      // showLaunchDialog(mContext); 
      isLaunch = true; 
     } 
     if (isLaunch == true) { 
      showLaunchDialog(mContext); 
      isLaunch = false; 
     } 
     editor.commit(); 
    } 

    public static void showLaunchDialog(Context mcontext) { 
     final Dialog dialog = new Dialog(mcontext); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.whatsnew); 

     Button dismisButton = (Button) dialog.findViewById(R.id.dismisButtom); 
     System.out.println("inside dialog_started"); 
     dismisButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       dialog.dismiss(); 
      } 
     }); 
     dialog.show(); 
    } 
} 
+0

thế nào đã lần đầu tiên bạn đã tạo sharedPreference .. – ngesh

Trả lời

14

Không có móc nào mà bạn có thể sử dụng để xóa tùy chọn được chia sẻ trong trường hợp cập nhật.

Nikolay đúng, bạn có thể lưu số phiên bản ứng dụng của mình. Và so sánh nó với số phiên bản hiện tại.

Để có được cuộc gọi số phiên bản hiện tại:

this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionCode 

Để biết thêm về những thông tin có sẵn trong các thông tin gói đọc tài liệu trên PackageInfoPackageManager.

+0

Cảm ơn bạn đã xây dựng thêm thông tin :) tôi nghĩ đây là những gì tôi cần;) –

1

Nếu bạn nhận được không đặt dontShowagin bạn sẽ nhận được sai theo mặc định Vì vậy, bạn muốn hiển thị hộp thoại và thời gian tiếp theo not.So chỉ cần thay đổi giá trị trong ưu tiên cho đúng để tiếp thời gian nó hoạt động. Ngoài ra bạn đang tăng truy cập mà không thực sự incrementing it.Use +1 với trước đó.

SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0); 
      if (prefs.getBoolean("dontshowagain", false)) { 
       return; 
      } 

      SharedPreferences.Editor editor = prefs.edit(); 

      // Increment launch counter 

      editor.putBoolean("dontShowagain",true); 
      launch_count = prefs.getLong("launch_count", 0)+1; 
      editor.putLong("launch_count", launch_count); 
+0

này sẽ không giải quyết vấn đề hiển thị hộp thoại lại sau khi cập nhật ứng dụng. – Janusz

11

Thay vì lưu boolean lưu số phiên bản của ứng dụng. Nếu số phiên bản của ứng dụng hiện tại cao hơn (cập nhật), hãy hiển thị hộp thoại của bạn và cập nhật số.

+0

Tại sao tôi không nghĩ về nó trước đây: P tuyệt vời. Cảm ơn rất nhiều :) –

+0

Mặc dù giải pháp đơn giản, tôi mong đợi Android SDK thêm một móc đơn giản như để nâng cấp DB để tránh nhiều lỗi nâng cấp và tăng độ mạnh (ví dụ: ai có thể quên điều này và xóa các ưu tiên tại một số điểm ...) –