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);