我想是因爲簽名是不存儲版本(由您發佈密鑰簽名),並且通過調試密鑰簽名的工作室運行版本之間的相同你收到此錯誤(在Android中數據文件夾中)
所以這是關於錯誤,您必須構建APK,就好像您將其上傳到商店一樣,並使用您的發行密鑰庫對其進行簽名......然後將其安裝到設備上(使用adb install
或adb push然後從手機,或複製apk到手機內存,然後從手機安裝...等)也許?
現在針對第二部分,在應用更新後檢測應用/檢測第一次運行的第一次運行,您可以按照該回答的建議使用SharedPreferences
。但這還不夠,因爲它不會被應用程序版本鏈接/影響,這就是升級後需要檢測第一次運行的內容。
您需要做的是獲取您在清單文件android:versionCode
上指定的應用程序版本碼(它是整數),並且每次將版本上載到PlayStore時都必須增加它。
該代碼會做你需要什麼(你可以用它在活動/片段,你希望顯示在對話框中)
//this code gets current version-code (after upgrade it will show new versionCode)
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
int versionCode = info.versionCode;
SharedPreferences prefs = this.getSharedPreferences("yourAppName", Context.MODE_PRIVATE);
if(prefs.getInt("last_version_code", -1) > 0){
if(prefs.getInt("last_version_code", -1) != versionCode){
//save current versionCode: 1st-run after upgrade
prefs.edit().putInt("last_version_code", versionCode).commit();
//put show the dialog code here...
} //no need for else, because app version did not change...
}else{
//save current versionCode for 1st-run ever
prefs.edit().putInt("last_version_code", versionCode).commit();
}
prefs.getInt("last_version_code", -1)
這將在首選項獲得最後保存價值的關鍵last_version_code
並且如果沒有值(第一次運行),它將返回默認值-1
。
if
檢查首選項> 0(不是首先運行) 返回的值,它不等於清單中的值。這將意味着(升級版)在
的==-1
情況下,你只寫你試圖獲取價值,如果你想使用它,因爲它會返回一個數字(保存的最後一個版本的代碼)
中的versionCode所以下一次的方法(可能在多個地方被調用) 創建一個方法返回true/false,如果應用程序進行了更新
public static boolean appWasUpdated(Context context){
//this code gets current version-code (after upgrade it will show new versionCode)
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
int versionCode = info.versionCode;
SharedPreferences prefs = context.getSharedPreferences("yourAppName", Context.MODE_PRIVATE);
if(prefs.getInt("last_version_code", -1) > 0){
if(prefs.getInt("last_version_code", -1) != versionCode){
//save current versionCode: 1st-run after upgrade
prefs.edit().putInt("last_version_code", versionCode).commit();
return true;
} //no need for else, because app version did not change...
}else{
//save current versionCode for 1st-run ever
prefs.edit().putInt("last_version_code", versionCode).commit();
}
return false;
}
並調用從活動這個方法/片段
if(appWasUpdated(this)){
showMyDialog();
}