Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查来自自己应用程序的更新(无市场)_Android - Fatal编程技术网

Android 检查来自自己应用程序的更新(无市场)

Android 检查来自自己应用程序的更新(无市场),android,Android,慢慢地…非常缓慢地…我正在构建我的第一个应用程序。。现在我想从我的web服务器自动检查它的更新 因此,我需要将代码添加到我的应用程序中,以检查启动应用程序时是否有任何更新 我在网上做了很长时间的搜索,但没有找到任何示例代码 有人能得到那个密码吗 谢谢 从本质上讲,您可能希望放置某种类型的服务器请求。您应该返回代码的最新版本,并根据代码的版本进行检查。我建议输出一个JSON数组,有很多库可以这样做 您可能需要做某种类型的CGI,很可能是PHP、Python、Ruby或Perl之类的语言。然后你必须

慢慢地…非常缓慢地…我正在构建我的第一个应用程序。。现在我想从我的web服务器自动检查它的更新

因此,我需要将代码添加到我的应用程序中,以检查启动应用程序时是否有任何更新

我在网上做了很长时间的搜索,但没有找到任何示例代码

有人能得到那个密码吗


谢谢

从本质上讲,您可能希望放置某种类型的服务器请求。您应该返回代码的最新版本,并根据代码的版本进行检查。我建议输出一个JSON数组,有很多库可以这样做


您可能需要做某种类型的CGI,很可能是PHP、Python、Ruby或Perl之类的语言。然后你必须找到一个地方来举办它。在这些语言中,我建议使用Python,没有真正的原因。

您可以检索在AndroidManifest.xml中设置的应用程序的当前版本,如下所示:

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

现在,您必须将最新的应用程序版本号放在服务器上,检索并将其与上述版本进行比较。如果服务器提供的版本号高于本地版本号,则必须执行更新,例如显示通知。

字符串currentVersion,version,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如下所示

你的应用程序版本 下载路径

只需在Web服务器上放置一个包含实际版本号的文本文件即可。启动时,通过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);
}
在Apache软件许可证2.0选项下,您可以查看并了解它的工作原理

是我所属的自动更新服务的android客户端,它体积小,易于实现,支持根设备上的静默更新

是由MarkMurphy编写的,但是它可能需要您运行自己的更新服务器,我不确定是否有无声更新