如何通过访问Google Play商店强制用户更新我的应用?如果有新的更新,则会显示一个对话框,其中有2个按钮可以更新应用程序或退出应用程序。
除非有最新版本,否则不允许应用运行。
我正在使用eclipse,因为一些项目问题,我无法迁移到android studio。
请帮助
答案 0 :(得分:0)
主要活动开始时使用Dialogs。如果他接受,只需将用户重定向到PlayStore上应用的网址,然后退出应用(here are examples on how doing it)。
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级别)
答案 1 :(得分:0)
为应用程序实施一种方法,以检查它是否是最新版本。
您可以通过托管包含最新版本信息的更新文件来执行此操作。此文件通常采用json格式,但也可以采用您喜欢的任何格式。应用程序必须查询此更新文件,如果应用程序的当前版本小于更新文件中指示的版本,则它将显示更新提示。
如果应用确定需要更新,请打开对话框提示,然后打开应用的播放商店页面
要启动对话框提示,请参阅官方Dialogs指南。鉴于问题不是“如何启动对话框”,我将重点讨论如何更新应用程序。
要将Google Play商店打开到特定的应用页面,您必须使用“查看”操作和“市场计划”启动意图,如此
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
要小心,如果设备没有安装谷歌播放商店,那么这将抛出异常。其他应用程序也可以接收此类意图,并且在多个应用程序可以接收意图的情况下,将出现应用程序选择器对话框。
<强>挑战:强>
如果应用必须检查更新,并且只有在最新版本时才能运行,那么如果设备未连接到互联网,则该应用无法运行。
该应用将严重依赖Google Play商店,如果需要更新并且设备上没有Play商店,则该应用无法运行
如果更新文件因任何原因不可用,则该应用程序也无法正常运行
答案 2 :(得分:0)
使用 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;
现在使用任何其他客户端http调用从您的服务器获取当前版本,并检查您的版本:
if(!versionName.equals(version)){showDialog();}
注意:为此,您应该在服务器中实现一个版本文件,您必须在该文件中添加新版本,以便使用http调用您的应用可以获取新版本名称并检查应用版本!
答案 3 :(得分:0)
您绝对需要用户更新才能继续使用该应用,您可以提供简单的版本控制API。 API将如下所示:
versionCheck API:
- &gt;请求参数:
int appVersion
- &GT;响应
boolean forceUpgrade boolean recommendedUpgrade
当您的应用启动时,您可以调用此API传递当前应用版本,并检查版本控制API调用的响应。
如果forceUpgrade为true,则显示一个弹出式对话框,其中包含允许用户退出应用的选项,或者转到Google Play商店以升级应用。
否则,如果recommendedUpgrade为true,则显示弹出对话框,其中包含要更新的选项或继续使用该应用程序。
即使有这种强制升级功能,除非绝对需要,否则你应该继续支持旧版本。
试试这个:首先你需要调用playstore链接,从那里获取当前版本,然后将它与你当前的版本进行比较。
String currentVersion,latestVersion; 对话框对话框;
private void 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);
}
}
private void 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();
}