Android app下载并安装
2023-09-11 14:21:22 时间
1 下载功能
//下载apk
private void downloadApk(String apkUrl) throws PackageManager.NameNotFoundException {
Uri uri = Uri.parse(apkUrl);
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
// 设置允许使用的网络类型,这里是移动网络和wifi都可以
request.setAllowedNetworkTypes(request.NETWORK_MOBILE | request.NETWORK_WIFI);
//设置是否允许漫游
request.setAllowedOverRoaming(true);
//设置文件类型
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));
request.setMimeType(mimeString);
//在通知栏中显示
request.setNotificationVisibility(request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle("download...");
request.setVisibleInDownloadsUi(true);
//sdcard目录下的download文件夹
request.setDestinationInExternalPublicDir("/download", "SanjuScanApp_Android.apk");
// 将下载请求放入队列
downloadManager.enqueue(request);
}
2 设置接收广播
public class InstallReceiver extends BroadcastReceiver {
// 安装下载接收器
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
installApk(context);
}
}
// 安装Apk
private void installApk(Context context) {
try {
Intent i = new Intent(Intent.ACTION_VIEW);
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/download/SanjuScanApp_Android.apk";
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3 注册广播(AndroidManifest.xml的receiver节点)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tyler.myapplication">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
<activity
android:name=".LoginActivity"
</activity>
<receiver
android:name="com.example.tyler.HelperTool.InstallReceiver">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
</application>
相关文章
- [Android]android自动化测试十六之calabash-android
- [Android] 解析android framework下利用app_process来调用java写的命令及示例
- android的listview item点击详解
- Android开发之旅:组件生命周期(三)
- Android API之android.os.AsyncTask
- 【已解决】unity4.2.0f4 导出Android工程报错:Error building Player: ArgumentException: Illegal characters in path. [unity导出android工程 报错,路径含有非法字符]
- macos安装android studio(Android Studio 2021.1.1)
- 适合做app的前端框架有哪些?webAPP&移动端App:react native、weex、flutter
- Android问题笔记 - 使用SDK33导致xml布局代码没有任何提示了
- Android 两个App间进行IPC通信
- Android Recycleview的使用
- Android 11.0 12.0SystemServer预安装app(大于50M比较大的app)
- Android 11.0 12.0根据包名授予app所需的权限
- Android 11.0 12.0在系统app安装第三方app弹出 解析安装包出现问题 的解决方案
- Android 12.0首次开机默认授予app运行时权限(去掉运行时授权弹窗)
- Android 仿ios实现app列表图标长按实现抖动效果
- android app用百度ocr识别sdk实现手写扫描功能(一)
- Android 禁止App字体随系统字体大小而更改
- Android 9.0 10.0 手动安装Persistent app失败的解决方案
- android 10.0 通知栏接收第三方app通知开关(屏蔽第三方app通知)
- Android 调用系统安装App的方法
- Android 9.0静默安装与卸载app
- android app启动优化两种测量app启动时间的方式
- Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息
- Android 指定调用已安装的某个“相机”App
- monkey测试===如何获取android app的Activity
- :app:processDebugResources Android resource linking failed Android resource linking failed
- android开发,开发环境(Android Studio)安装