アプリに「更新の確認」ボタンを追加して、誰かがクリックしたときにアプリのバージョンを確認するためのトーストメッセージ/進行状況ダイアログが表示されるようにします。
新しいバージョンが見つかった場合、アプリはそれを電話に自動ダウンロードし、ユーザーが更新されたアプリを手動でインストールできるようにします。
または他のメソッドでも可能最新バージョンをチェックし、ユーザーに更新を通知できる限り。
Googleは2か月前にPlayストアを更新しました。これは私のために今働いているソリューションです。
class GetVersionCode extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... voids) {
String newVersion = null;
try {
Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=en")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get();
if (document != null) {
Elements element = document.getElementsContainingOwnText("Current Version");
for (Element ele : element) {
if (ele.siblingElements() != null) {
Elements sibElemets = ele.siblingElements();
for (Element sibElemet : sibElemets) {
newVersion = sibElemet.text();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
//show anything
}
}
Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
}
}
jSoupライブラリを追加することを忘れないでください
dependencies {
compile 'org.jsoup:jsoup:1.8.3'}
oncreate()で
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String currentVersion;
try {
currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
new GetVersionCode().execute();
}
それだけです。 このリンク のおかげで
Android appの新しいバージョンの更新をチェックするための時間を節約するために、ライブラリとしてオープンソースを作成しました https://github.com/winsontan520/Android-WVersionManager =
これを使用できますAndroid Library: https://github.com/danielemaddaluno/Android-Update-Checker 。これは、 Jsoup( http://jsoup.org/ )を使用して、アプリの新しいアップデートがストアに存在することを確認します。 Google Playストア:
_private boolean web_update(){
try {
String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName;
String newVersion = curVersion;
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div[itemprop=softwareVersion]")
.first()
.ownText();
return (value(curVersion) < value(newVersion)) ? true : false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
_
また、「値」として次の機能があります(値が0〜99の場合に機能します)。
_private long value(String string) {
string = string.trim();
if( string.contains( "." )){
final int index = string.lastIndexOf( "." );
return value( string.substring( 0, index ))* 100 + value( string.substring( index + 1 ));
}
else {
return Long.valueOf( string );
}
}
_
バージョン間の不一致のみを確認したい場合は、次を変更できます。
value(curVersion) < value(newVersion)
with value(curVersion) != value(newVersion)
マーケットにあるアプリケーションの場合、アプリの起動時にIntentを起動してマーケットアプリを開き、更新を確認できるようにします。
それ以外の場合、チェッカーの実装と更新は非常に簡単です。これが私のコードです(大体):
String response = SendNetworkUpdateAppRequest(); // Your code to do the network request
// should send the current version
// to server
if(response.equals("YES")) // Start Intent to download the app user has to manually install it by clicking on the notification
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("URL TO LATEST APK")));
もちろん、バックグラウンドスレッドでリクエストを行うにはこれを書き換える必要がありますが、アイデアは得られます。
少し複雑ではあるが、アプリが更新を自動的に適用できるようにする場合は、 here を参照してください。
プレイページに移動します。
https://play.google.com/store/apps/details?id=com.yourpackage
標準のHTTP GETを使用します。これで、次のjQueryが重要な情報を見つけます。
$("[itemprop='softwareVersion']").text()
$(".recent-change").each(function() { all += $(this).text() + "\n"; })
これらの情報を手動で抽出できるようになったので、アプリでこれを実行するメソッドを作成するだけです。
public static String[] getAppVersionInfo(String playUrl) {
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);
try {
URL url = new URL(playUrl);
URLConnection conn = url.openConnection();
TagNode node = cleaner.clean(new InputStreamReader(conn.getInputStream()));
Object[] new_nodes = node.evaluateXPath("//*[@class='recent-change']");
Object[] version_nodes = node.evaluateXPath("//*[@itemprop='softwareVersion']");
String version = "", whatsNew = "";
for (Object new_node : new_nodes) {
TagNode info_node = (TagNode) new_node;
whatsNew += info_node.getAllChildren().get(0).toString().trim()
+ "\n";
}
if (version_nodes.length > 0) {
TagNode ver = (TagNode) version_nodes[0];
version = ver.getAllChildren().get(0).toString().trim();
}
return new String[]{version, whatsNew};
} catch (IOException | XPatherException e) {
e.printStackTrace();
return null;
}
}
使用 HtmlCleaner
追加 compile 'org.jsoup:jsoup:1.10.2'
APP LEVEL build.gradleの依存関係
&
以下のコードを追加するだけで準備完了です。
private class GetVersionCode extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... voids) {
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + SplashActivity.this.getPackageName() + "&hl=it")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div[itemprop=softwareVersion]")
.first()
.ownText();
return newVersion;
} catch (Exception e) {
return newVersion;
}
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (!currentVersion.equalsIgnoreCase(onlineVersion)) {
//show dialog
new AlertDialog.Builder(context)
.setTitle("Updated app available!")
.setMessage("Want to update app?")
.setPositiveButton("Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
try {
Toast.makeText(getApplicationContext(), "App is in BETA version cannot update", Toast.LENGTH_SHORT).show();
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
}
})
.setNegativeButton("Later", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
dialog.dismiss();
new MyAsyncTask().execute();
}
})
.setIcon(Android.R.drawable.ic_dialog_alert)
.show();
}
}
}
このためのAPIはありません。自動インストールすることはできません。アップグレードできるように、Marketページにリダイレクトすることができます。 Webサーバー上のファイルに最新バージョンを保持し、アプリにチェックさせることができます。これの1つの実装を次に示します。
http://code.google.com/p/openintents/source/browse/#svn%2Ftrunk%2FUpdateCheckerApp
最初に市場のアプリのバージョンを確認し、デバイス上のアプリのバージョンと比較する必要があります。それらが異なる場合、利用可能なアップデートである可能性があります。この投稿では、デバイスの現在のバージョンと現在のバージョンを取得するためのコードを書き留め、それらを比較しました。また、更新ダイアログを表示し、ユーザーを更新ページにリダイレクトする方法も示しました。このリンクをご覧ください: https://stackoverflow.com/a/33925032/5475941