1

ゆっくりと...非常にゆっくりと...私は最初のアプリを構築しています..今、ウェブサーバーからの更新の自動チェックが必要です。

そのため、アプリを起動したときに更新があるかどうかを確認するために、コードをアプリに追加する必要があります。

インターネットで長い検索を行いましたが、サンプルコードは見つかりませんでした...

誰かがそのコードを取得できますか?

ありがとう!

4

5 に答える 5

0

基本的に、ある種のサーバー要求を出す必要があります。コードの最新バージョンを返し、コードからそのバージョンと照合する必要があります。JSON配列を出力することをお勧めします。これには、多数のライブラリがあります。

ある種のCGI、おそらくPHP、Python、Ruby、Perlなどの言語を実行することをお勧めします。そして、それをホストする場所を見つける必要があります。それらの言語のうち、本当の理由はないので、Pythonをお勧めします。

于 2012-11-21T20:10:49.237 に答える
0

いくつかopen-sourceの (Apache Software License 2.0 の下でライセンスされている) オプションをチェックして、それがどのように機能するかを確認することができます。

  1. http://code.google.com/p/auto-update-apk-client/は、自動更新サービス (私が提携している) の Android クライアントです。小型で実装が簡単で、ルート化された環境でのサイレント更新をサポートしています。デバイス。

  2. https://github.com/commonsguy/cwac-updaterは Mark Murphy によって書かれていますが、独自の更新サーバーを実行する必要がある場合があり、サイレント更新についてはわかりません。

于 2012-11-21T23:34:54.457 に答える
0

次のように、(AndroidManifest.xml で設定した) アプリの現在のバージョンを取得できます。

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
version = pInfo.versionCode

次に、アプリの最新バージョン番号をサーバーに配置し、それを取得して上記のバージョンと比較する必要があります。サーバーがローカルのものよりも高いバージョン番号を提供する場合は、更新を実行する必要があります (たとえば、通知を表示することによって)。

于 2012-11-21T20:16:57.320 に答える
0

文字列 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は次のようになります。

アプリ バージョンのダウンロード パス

于 2012-11-21T20:18:38.880 に答える
0

実際のバージョン番号を含むテキストファイルをウェブサーバーに置くだけです。起動時に、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);
}
于 2012-11-21T20:21:20.563 に答える