Android 网络应用重点———使用HttpGet 下载apk文件并安装

本文介绍如何使用HttpGet从服务器端下载apk文件,并自动将其安装到手机上。通过实现下载文件原理和安装apk的具体代码,展示了一个完整的流程。在实际应用中,需先运行服务器端oa工程并输入指定URL查看效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本例使用HttpGet 从服务器端下载一个apk文件,然后自动将apk安装到手机上
下载文件原理: 先获得一个InputStream,读取到数据,再写入到目的地(通常写到SD卡), 概括起来也就是先读再写
主要代码如下:
public class Main extends Activity implements OnClickListener
{
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 
  Button btnDownloadInstallApk = (Button) findViewById(R.id.btnDownloadInstallApk);
  btnDownloadInstallApk.setOnClickListener(this);
 } 
 //安装apk文件
 private void installApk(String filename)
 {
  File file = new File(filename);
  Intent intent = new Intent();
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setAction(Intent.ACTION_VIEW);     //浏览网页的Action(动作)
  String type = "application/vnd.android.package-archive";
  intent.setDataAndType(Uri.fromFile(file), type);  //设置数据类型
  startActivity(intent);
 }
 @Override
 public void onClick(View view)
 {
  //下载文件  存放目的地
  String downloadPath = Environment.getExternalStorageDirectory().getPath() + "/download_cache";  
  String url = "http://192.168.1.123/oa/apk/action.apk";
  File file = new File(downloadPath);
  if(!file.exists())
   file.mkdir();
  HttpGet httpGet = new HttpGet(url);
  try
  {
   HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);
   if (httpResponse.getStatusLine().getStatusCode() == 200)
   {
    InputStream is = httpResponse.getEntity().getContent();
    // 开始下载apk文件
    FileOutputStream fos = new FileOutputStream(downloadPath + "/action.apk");
    byte[] buffer = new byte[8192];
    int count = 0;
    while ((count = is.read(buffer)) != -1)
    {
     fos.write(buffer, 0, count);
    }
    fos.close();
    is.close();
    //安装  apk 文件
    installApk(downloadPath+ "/action.apk");
   }
  } catch (Exception e){}
 }
}

示意图

1.  2. 

3.4.
 具体代码请参见 ch09_remoteinstallapk工程,在这里要先运行服务器端oa工程,可以输入http://192.168.1.123/oa/apk/action.apk看看效果

### 配置 Android Studio 连接雷电模拟器调试后端 API #### 安装和设置雷电模拟器 为了使 Android 应用能够通过雷电模拟器访问本地开发环境中的 Web 服务或其他网络资源,需先确保已正确安装了最新版本的雷电模拟器[^1]。 #### 启动雷电模拟器创建虚拟设备 打开雷电模拟器应用程序,在其界面内选择合适的安卓系统镜像来创建一个新的 AVD (Android Virtual Device),此过程类似于其他类型的 Android 模拟器操作方式。一旦完成配置,则可以启动所选的 AVD 实例。 #### 设置代理服务器以便于访问外部网络 如果目标是测试与特定 IP 地址关联的服务端口上的 RESTful APIs 或者 WebSocket 接口等功能,那么可能还需要调整模拟器内部浏览器或者其他 HTTP/HTTPS 客户端组件使用的代理设置。对于大多数情况来说,默认情况下无需额外更改任何参数即可正常工作;但如果遇到连接问题时,可以通过命令行工具 `adb` 来修改当前运行实例的相关属性: ```bash adb shell settings put global http_proxy <proxy_host>:<port> ``` 请注意替换 `<proxy_host>` 和 `<port>` 为实际可用的代理地址及端口号。另外一种常见做法是在应用层面上指定自定义 OkHttp Client 的拦截器来进行动态路由转发处理。 #### 使用 ADB 命令映射端口 为了让位于不同主机之间的两个进程之间建立可靠的 TCP/IP 通讯链路,通常采用的方式之一便是利用 adb 提供的功能特性——即所谓的“端口转发”。具体而言,就是在开发者机器上执行如下指令: ```bash adb reverse tcp:<local_port> tcp:<remote_port> ``` 这里假设远程服务器监听的是8080端口而客户端想要绑定到localhost:9090的话就应该是这样写法: ```bash adb reverse tcp:9090 tcp:8080 ``` 上述命令的作用在于将发送给 localhost 上 9090 端口的数据包重定向至远端计算机开放出来的 8080 号端口中去,反之亦然。这样一来无论何时何地只要保持两者间的物理链接畅通无阻便能轻松实现实验室环境下跨平台联调的目的了。 #### 在 Android Studio 中部署 APK 文件与之交互 最后一步是要把待测项目打包成 .apk 格式的可执行文件通过 USB Debugging 功能推送至目标环境中。借助 IDE 自带的任务栏按钮或是终端窗口输入相应语句均可达成这一目的。当一切准备停当时就可以按照常规业务逻辑发起请求啦! ```java // Java 示例代码片段展示如何构建 Retrofit 实例用于发起 GET 请求 OkHttpClient client = new OkHttpClient.Builder().build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://127.0.0.1:9090/") // 注意这里的 URL 是基于前面所做的端口映射设定而来 .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); YourApiService service = retrofit.create(YourApiService.class); Call<ResponseModel> call = service.getData(); Response<ResponseModel> response = call.execute(); // 同步调用 if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); for (/* ... */) { System.out.println(/* ... */); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值