android 软件升级

  • import java.io.File;
  • import java.io.FileOutputStream;
  • import java.io.IOException;
  • import java.io.InputStream;
  • import org.apache.http.HttpEntity;
  • import org.apache.http.HttpResponse;
  • import org.apache.http.client.ClientProtocolException;
  • import org.apache.http.client.HttpClient;
  • import org.apache.http.client.methods.HttpGet;
  • import org.apache.http.impl.client.DefaultHttpClient;
  • import android.app.AlertDialog;
  • import android.app.Dialog;
  • import android.app.ProgressDialog;
  • import android.content.DialogInterface;
  • import android.content.Intent;
  • import android.net.Uri;
  • import android.os.Bundle;
  • import android.os.Environment;
  • import android.os.Handler;
  • public class Update extends BaseActivity {
  • public ProgressDialog pBar;
  • private Handler handler = new Handler();
  • @Override
  • protected void onCreate(Bundle savedInstanceState) {
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.update);
  • Dialog dialog = new AlertDialog.Builder(Update.this).setTitle("系统更新")
  • .setMessage("发现新版本,请更新!")// 设置内容
  • .setPositiveButton("确定",// 设置确定按钮
  • new DialogInterface.OnClickListener() {
  • @Override
  • public void onClick(DialogInterface dialog,
  • int which) {
  • pBar = new ProgressDialog(Update.this);
  • pBar.setTitle("正在下载");
  • pBar.setMessage("请稍候...");
  • pBar
  • .setProgressStyle(ProgressDialog.STYLE_SPINNER);
  • downFile("http://url:8765/OA.apk");
  • }
  • }).setNegativeButton("取消",
  • new DialogInterface.OnClickListener() {
  • public void onClick(DialogInterface dialog,
  • int whichButton) {
  • // 点击"取消"按钮之后退出程序
  • }
  • }).create();// 创建
  • // 显示对话框
  • dialog.show();
  • }
  • void downFile(final String url) {
  • pBar.show();
  • new Thread() {
  • public void run() {
  • HttpClient client = new DefaultHttpClient();
  • // params[0]代表连接的url
  • HttpGet get = new HttpGet(url);
  • HttpResponse response;
  • try {
  • response = client.execute(get);
  • HttpEntity entity = response.getEntity();
  • long length = entity.getContentLength();
  • InputStream is = entity.getContent();
  • FileOutputStream fileOutputStream = null;
  • if (is != null) {
  • File file = new File(Environment
  • .getExternalStorageDirectory(), "OA.apk");
  • fileOutputStream = new FileOutputStream(file);
  • byte[] buf = new byte[1024];
  • int ch = -1;
  • int count = 0;
  • while ((ch = is.read(buf)) != -1) {
  • // baos.write(buf, 0, ch);
  • fileOutputStream.write(buf, 0, ch);
  • count += ch;
  • if (length > 0) {
  • }
  • }
  • }
  • fileOutputStream.flush();
  • if (fileOutputStream != null) {
  • fileOutputStream.close();
  • }
  • down();
  • } catch (ClientProtocolException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • } catch (IOException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  • }
  • }.start();
  • }
  • void down() {
  • handler.post(new Runnable() {
  • public void run() {
  • pBar.cancel();
  • update();
  • }
  • });
  • }
  • void update() {
  • Intent intent = new Intent(Intent.ACTION_VIEW);
  • intent.setDataAndType(Uri.fromFile(new File("/sdcard/OA.apk")),
  • "application/vnd.android.package-archive");
  • startActivity(intent);
  • }
  • }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 实现软件升级通常需要以下步骤: 1. 获取当前版本号:通过 PackageManager 获取当前应用的版本号,与服务器上最新版本进行比较。 ```java PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); String currentVersion = pInfo.versionName; ``` 2. 请求服务器检查更新:向服务器发起请求,检查是否有新版本可用。可以使用 Retrofit 或 Volley 等网络框架实现。 ```java String url = "http://example.com/check_update"; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // 解析服务器返回的数据,判断是否需要更新 String latestVersion = response.getString("version"); if (latestVersion.compareTo(currentVersion) > 0) { // 有新版本可用,弹更新提示框 showUpdateDialog(); } else { // 当前已是最新版本,无需更新 Toast.makeText(MainActivity.this, "已是最新版本", Toast.LENGTH_SHORT).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 请求失败,处理错误 Toast.makeText(MainActivity.this, "检查更新失败", Toast.LENGTH_SHORT).show(); } }); requestQueue.add(request); ``` 3. 下载新版本安装包:如果有新版本可用,从服务器下载安装包。可以使用 OkHttp 或 DownloadManager 等网络框架实现。 ```java String url = "http://example.com/app.apk"; String fileName = "app.apk"; String directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath(); DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)) .setTitle("应用更新") .setDescription("正在下载新版本") .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); long downloadId = downloadManager.enqueue(request); ``` 4. 安装新版本:下载完成后,使用 Intent 打开安装界面,让用户安装新版本。 ```java File file = new File(directory, fileName); Uri apkUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", file); Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE) .setData(apkUri) .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(intent); ``` 需要注意的是,Android 7.0 及以上版本需要使用 FileProvider 来共享文件,而不是直接使用 file:// 协议。在 AndroidManifest.xml 中添加以下代码: ```xml <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> ``` 并在 res/xml 目录下创建 file_paths.xml 文件,定义共享文件的路径: ```xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="download" path="Download/" /> </paths> ``` 以上就是 Android 实现软件升级的主要步骤,具体实现可以根据项目需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值