Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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_Json_Android Intent_Installation_Auto Update - Fatal编程技术网

Android 使用其他应用自动更新/安装应用

Android 使用其他应用自动更新/安装应用,android,json,android-intent,installation,auto-update,Android,Json,Android Intent,Installation,Auto Update,这将是一个有点长,但希望其他人也将受益于这个线程 我计划为很多人做一个私人申请。它不会出现在谷歌的游戏中。因此,我现在面临几个问题:如何下载新版本,如何重新安装 我读过一些精彩的网站,介绍如何使用其他应用程序安装和卸载应用程序,如: 还有一些关于从网上下载应用程序的信息: 即使这样: 但我不知道怎么做我想做的事。我想创建一个可以自动更新的应用程序。我的计划,通过反复研究,是有两个应用程序。主要的一个需要更新,而第二个总是在那里。每次打开主应用程序时,都会调用第二个应用程序并执行检查,如有必

这将是一个有点长,但希望其他人也将受益于这个线程

我计划为很多人做一个私人申请。它不会出现在谷歌的游戏中。因此,我现在面临几个问题:如何下载新版本,如何重新安装

我读过一些精彩的网站,介绍如何使用其他应用程序安装和卸载应用程序,如:

还有一些关于从网上下载应用程序的信息:

即使这样:

但我不知道怎么做我想做的事。我想创建一个可以自动更新的应用程序。我的计划,通过反复研究,是有两个应用程序。主要的一个需要更新,而第二个总是在那里。每次打开主应用程序时,都会调用第二个应用程序并执行检查,如有必要,卸载主应用程序。然后,它继续下载新版本的主应用程序到手机上,并安装它

以下是一些我陷入困境的下载过程代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(
            "http://dl.dropboxusercontent.com/u/98196898/data.json");
    try{
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if(statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new 
                    InputStreamReader (content));
            String line;
            while((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } 

    }catch (Exception e)
    {
        e.printStackTrace();
    }
    TextView tv = (TextView)findViewById(R.id.showresponse);
    tv.setText(builder.toString());
    try{
        String answer = "";
        JSONArray jsonArray = new JSONArray(builder.toString());
        for(int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            answer += jsonObject.getString("VersionNumber");
        }
        tv.setText(answer);
我的计划是将版本号与旧版本号进行比较-->显然,如果在线版本号大于需要更新的版本号

当然,这是行不通的。我也尝试过使用
defaulthttpclient
httpget
之类的东西,但都不起作用。也许dropbox有这个问题

接下来,我意识到我是在浪费时间,所以我继续安装apk,假设有一天我会想出如何从网上下载东西。我试过了,但也没用。以下是代码和问题:

String fileName = Environment.getExternalStorageDirectory()
                + "/Android/CheckWebForUpdate.apk";
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
        startActivity(intent);
我在网上复制了其中的大部分,但它不起作用。它提示:“解析包时出现问题”。我看到了两种解决方法,但都不管用。我查了一下,我的代码应该可以用了。有人提到我不应该有相同的名字,所以我尝试了另一个程序的名字,当然,它不起作用。然后,我再次查找,这一次我发现我“可能”需要权限
android.permission.INSTALL_PACKAGES
,但后来我发现我需要根目录我的手机(因为该应用程序不仅仅针对我……我需要根目录很多手机,这根本没有意义)——它只针对系统应用程序


我在两个方面被困在这里。谢谢你的阅读。如果您知道如何解决这些问题,请回复。

我制作了一个库来解决这些问题,这样就不需要使用两个应用程序,而且也可以在非根设备上使用。但是,出于安全原因,它确实需要用户交互。你可以找到它和API指南。我已经阅读了代码——非常感谢!一个(有点愚蠢)的问题是:我看到你已经将代码下载到一个名为“appupdate.apk”的新apk中。安装时,应用程序是否仍有自己的名称,还是将被称为“appupdate.apk”?这只是一个文件名。你的应用程序仍将保留自己的名称。更新apks的名称是不相关的。这很可能是另一个问题的重复:我已经看到了该应用程序,但它不适合我。。。我不明白为什么。该程序无法按预期下载信息。读我的密码我不明白为什么它不起作用
String fileName = Environment.getExternalStorageDirectory()
                + "/Android/CheckWebForUpdate.apk";
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
        startActivity(intent);