如何强制用户通过 Google Play 商店更新我的应用程序?如果有新的更新,将显示一个对话框,其中有 2 个按钮,用于更新应用程序或退出应用程序。
除非是最新版本,否则不允许应用程序运行。
我正在使用 eclipse,由于一些项目问题,我无法迁移到 android studio 。
请帮忙
Dialogs。如果用户接受,只需将用户重定向到 PlayStore 上您的应用程序的 URL,然后退出应用程序(这里是如何操作的示例)。
取自Anrdoid文档:
public class YourDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.please_update)
.setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// launch a browser with your PlayStore APP URL
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Exit the app
android.os.Process.killProcess(android.os.Process.myPid());
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
现在,当您创建此类的实例并在该对象上调用 show() 时,将出现如图 1 所示的对话框。只需创建它的一个实例,然后使用
show()
中的
onCreateDialog
中的
MainActivity
方法即可。请注意,
Dialogs使用Fragments,它需要API级别11。(您应该能够在build.gradle
文件中检查正在构建的API级别)
Noafix提到的对话框。当您的版本不匹配时调用警报对话框。
还将对话框可取消设置为false,以便用户无法通过按后退来删除对话框!
private void showDialog()
{
final android.app.AlertDialog.Builder alertDialogBuilder = new android.app.AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Update");
alertDialogBuilder.setMessage("Please update to continue?");
alertDialogBuilder.setIcon(R.drawable.warning);
alertDialogBuilder.setCancelable(false)
alertDialogBuilder.setPositiveButton("Confirm",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
});
// Add a negative button and it's action. In our case, just hide the dialog box
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finishAffinity();
}
});
// Now, create the Dialog and show it.
final android.app.AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
您可以获得的版本名称为:
versionName = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0).versionName;
现在使用任何 REST 客户端 http 调用从服务器获取当前版本,并检查您的版本:
if(!versionName.equals(version)){showDialog();}
注意:为此,您应该在服务器中实现一个版本文件,您必须在该文件中添加新版本,以便使用http调用您的应用程序可以获得新版本名称并检查应用程序版本!
实现应用程序检查是否是最新版本的方法。
您可以通过托管包含最新版本信息的更新文件来做到这一点。该文件通常采用 json 格式,但也可以采用您喜欢的任何格式。应用程序必须查询此更新文件,如果应用程序的当前版本低于更新文件中指示的版本,则会显示更新提示。
如果应用程序确定需要更新,请打开对话框提示,然后打开应用程序的 Play 商店页面
要启动对话框提示,请参阅官方Dialogs指南。鉴于问题不是“如何启动对话框”,我将重点讨论如何更新应用程序。
要打开 google play 商店到特定的应用程序页面,您必须使用 View 操作和市场方案 uri 启动一个意图,如下所示
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
请注意,如果设备没有安装 google play store,那么这将引发异常。其他应用程序也可能接收此类意图,并且在多个应用程序可以接收该意图的情况下,将出现一个应用程序选择器对话框。
挑战:
如果应用程序必须检查更新并且只有最新版本才能运行,那么如果设备未连接到互联网,应用程序将无法运行。该应用程序将严重依赖 Google Play 商店,如果需要更新并且设备上没有 Play 商店,则无法运行
如果更新文件因任何原因不可用,则应用程序将无法运行
版本检查API:
->请求参数:
int 应用程序版本
-> 回应
布尔力升级 布尔推荐升级
当您的应用程序启动时,您可以调用此 API,传入当前应用程序版本,并检查版本控制 API 调用的响应。
如果 forceUpgrade 为 true,则显示一个弹出对话框,其中包含让用户退出应用程序或转到 Google Play 商店升级应用程序的选项。
否则,如果推荐升级为 true,则显示弹出对话框,其中包含更新或继续使用应用程序的选项。
即使具备这种强制升级功能,您也应该继续支持旧版本,除非绝对需要。
试试这个:首先,您需要对 Playstore 链接发出请求,从那里获取当前版本,然后将其与您当前的版本进行比较。
字符串当前版本,最新版本; 对话框对话框;
私有无效 getCurrentVersion(){ PackageManager pm = this.getPackageManager(); PackageInfo pInfo = null;
try {
pInfo = pm.getPackageInfo(this.getPackageName(),0);
} catch (PackageManager.NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
currentVersion = pInfo.versionName;
new GetLatestVersion().execute();
}
私有类 GetLatestVersion 扩展了 AsyncTask {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected JSONObject doInBackground(String... params) {
try {
Document doc = Jsoup.connect(urlOfAppFromPlayStore).get();
latestVersion = doc.getElementsByAttributeValue
("itemprop","softwareVersion").first().text();
}catch (Exception e){
e.printStackTrace();
}
return new JSONObject();
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
if(latestVersion!=null) {
if (!currentVersion.equalsIgnoreCase(latestVersion)){
if(!isFinishing()){
showUpdateDialog();
}
}
}
else
background.start();
super.onPostExecute(jsonObject);
}
}
私有无效 showUpdateDialog(){
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("A New Update is Available");
builder.setPositiveButton("Update", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
("market://details?id=yourAppPackageName")));
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
background.start();
}
});
builder.setCancelable(false);
dialog = builder.show();
}