ゆっくりと...非常にゆっくりと...私は最初のアプリを構築しています..今、ウェブサーバーからの更新の自動チェックが必要です。
そのため、アプリを起動したときに更新があるかどうかを確認するために、コードをアプリに追加する必要があります。
インターネットで長い検索を行いましたが、サンプルコードは見つかりませんでした...
誰かがそのコードを取得できますか?
ありがとう!
ゆっくりと...非常にゆっくりと...私は最初のアプリを構築しています..今、ウェブサーバーからの更新の自動チェックが必要です。
そのため、アプリを起動したときに更新があるかどうかを確認するために、コードをアプリに追加する必要があります。
インターネットで長い検索を行いましたが、サンプルコードは見つかりませんでした...
誰かがそのコードを取得できますか?
ありがとう!
基本的に、ある種のサーバー要求を出す必要があります。コードの最新バージョンを返し、コードからそのバージョンと照合する必要があります。JSON配列を出力することをお勧めします。これには、多数のライブラリがあります。
ある種のCGI、おそらくPHP、Python、Ruby、Perlなどの言語を実行することをお勧めします。そして、それをホストする場所を見つける必要があります。それらの言語のうち、本当の理由はないので、Pythonをお勧めします。
いくつかopen-source
の (Apache Software License 2.0 の下でライセンスされている) オプションをチェックして、それがどのように機能するかを確認することができます。
http://code.google.com/p/auto-update-apk-client/は、自動更新サービス (私が提携している) の Android クライアントです。小型で実装が簡単で、ルート化された環境でのサイレント更新をサポートしています。デバイス。
https://github.com/commonsguy/cwac-updaterは Mark Murphy によって書かれていますが、独自の更新サーバーを実行する必要がある場合があり、サイレント更新についてはわかりません。
次のように、(AndroidManifest.xml で設定した) アプリの現在のバージョンを取得できます。
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
version = pInfo.versionCode
次に、アプリの最新バージョン番号をサーバーに配置し、それを取得して上記のバージョンと比較する必要があります。サーバーがローカルのものよりも高いバージョン番号を提供する場合は、更新を実行する必要があります (たとえば、通知を表示することによって)。
文字列 currentVersion、バージョン、downloadPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.devicecontrol);
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
currentVersion = pInfo.versionCode // Give your current version
if(isOnline())
new getSettingsTask().execute();
}
// Put an settings xml to the server which old app info
private class getSettingsTask extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... params) {
try {
final Uri.Builder uri = new Uri.Builder();
uri.scheme("http");
uri.authority("DOMAIN or IP");
uri.path("virtualpath/settings.xml");
URL url = new URL(uri.toString());
DocumentBuilderFactory dbf = DocumentBuilderFactory
.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("settings");
Log.v("data :", "length : " + nodeList.getLength());
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
NodeList versionList = fstElmnt
.getElementsByTagName("androidversion");
Element versionElement = (Element) versionList.item(0);
versionList = versionElement.getChildNodes();
NodeList dpList = fstElmnt
.getElementsByTagName("androiddownloadpath");
Element dpElement = (Element) dpList.item(0);
dpList = dpElement.getChildNodes();
version = (versionList.item(0)).getNodeValue().toString();
downloadPath = (dpList.item(0)).getNodeValue().toString();
}
} catch (Exception e) {
}
return 1;
}
@Override
protected void onPostExecute(Integer result) {
try {
if (currentVersion.equals(version)) {
// IT IS OK GO
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(
devicecontrol.this);
builder.setCancelable(false);
builder.setIcon(R.drawable.icon);
builder.setTitle("Please download new version...");
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
try {
Intent i = new Intent(
Intent.ACTION_VIEW);
i.setData(Uri.parse(downloadPath));
startActivity(i);
dialog.dismiss();
System.exit(getTaskId());
} catch (Exception e) {
message(e.toString());
}
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
System.exit(getTaskId());
}
});
AlertDialog alert = builder.create();
alert.show();
}
} catch (Exception e) {
}
;
super.onPostExecute(result);
}
}
サーバー上のxmlは次のようになります。
アプリ バージョンのダウンロード パス
実際のバージョン番号を含むテキストファイルをウェブサーバーに置くだけです。起動時に、HttpRequest を介して値を取得します。次に、次のようなことができます。
int localVersionNumber = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionCode;
int serverVersionnumber = GetVersionNumberFromInternet();
if(serverVersionnumber > localVersionNumber)
{
//new version is available... ask the user if the wants to update
// if true --->
Uri marketUri = Uri.parse("market://details?id="
+ getPackageName());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(marketUri);
startActivity(intent);
}