//下载apk程序代码
protected File downLoadFile(String httpUrl) {
// TODO Auto-generated method stub
final String fileName = "updata.apk";
File tmpFile = new File("/sdcard/update");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File("/sdcard/update/" + fileName);
try {
URL url = new URL(httpUrl);
try {
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[256];
conn.connect();
double count = 0;
if (conn.getResponseCode() >= 400) {
Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
.show();
} else {
while (count <= 100) {
if (is != null) {
int numRead = is.read(buf);
if (numRead <= 0) {
break;
} else {
fos.write(buf, 0, numRead);
}
} else {
break;
}
}
}
conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
Java代码 /**
* 打开文件
* @param file
*/
private void openFile(File file){
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
//获取文件file的MIME类型
String type = getMIMEType(file);
//设置intent的data和Type属性。
intent.setDataAndType(/*uri*/Uri.fromFile(file), type);
//跳转
startActivity(intent); //这里最好try一下,有可能会报错。 //比如说你的MIME类型是打开邮箱,但是你手机里面没装邮箱客户端,就会报错。
}
/**
* 根据文件后缀名获得对应的MIME类型。
* @param file
*/
private String getMIMEType(File file) {
String type="*/*";
String fName = file.getName();
//获取后缀名前的分隔符"."在fName中的位置。
int dotIndex = fName.lastIndexOf(".");
if(dotIndex < 0){
return type;
}
/* 获取文件的后缀名*/
String end=fName.substring(dotIndex,fName.length()).toLowerCase();
if(end=="")return type;
//在MIME和文件类型的匹配表中找到对应的MIME类型。
for(int i=0;i<MIME_MapTable.length;i++){ //MIME_MapTable??在这里你一定有疑问,这个MIME_MapTable是什么?
if(end.equals(MIME_MapTable[i][0]))
type = MIME_MapTable[i][1];
}
return type;
}
MIME_MapTable是所有文件的后缀名所对应的MIME类型的一个String数组:
Java代码 <span style="white-space: pre;"> </span>private final String[][] MIME_MapTable={
//{后缀名,MIME类型}
{".3gp", "video/3gpp"},
{".apk", "application/vnd.android.package-archive"},
{".asf", "video/x-ms-asf"},
{".avi", "video/x-msvideo"},
{".bin", "application/octet-stream"},
{".bmp", "image/bmp"},
{".c", "text/plain"},
{".class", "application/octet-stream"},
{".conf", "text/plain"},
{".cpp", "text/plain"},
{".doc", "application/msword"},
{".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
{".xls", "application/vnd.ms-excel"},
{".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{".exe", "application/octet-stream"},
{".gif", "image/gif"},
{".gtar", "application/x-gtar"},
{".gz", "application/x-gzip"},
{".h", "text/plain"},
{".htm", "text/html"},
{".html", "text/html"},
{".jar", "application/java-archive"},
{".java", "text/plain"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".js", "application/x-javascript"},
{".log", "text/plain"},
{".m3u", "audio/x-mpegurl"},
{".m4a", "audio/mp4a-latm"},
{".m4b", "audio/mp4a-latm"},
{".m4p", "audio/mp4a-latm"},
{".m4u", "video/vnd.mpegurl"},
{".m4v", "video/x-m4v"},
{".mov", "video/quicktime"},
{".mp2", "audio/x-mpeg"},
{".mp3", "audio/x-mpeg"},
{".mp4", "video/mp4"},
{".mpc", "application/vnd.mpohun.certificate"},
{".mpe", "video/mpeg"},
{".mpeg", "video/mpeg"},
{".mpg", "video/mpeg"},
{".mpg4", "video/mp4"},
{".mpga", "audio/mpeg"},
{".msg", "application/vnd.ms-outlook"},
{".ogg", "audio/ogg"},
{".pdf", "application/pdf"},
{".png", "image/png"},
{".pps", "application/vnd.ms-powerpoint"},
{".ppt", "application/vnd.ms-powerpoint"},
{".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
{".prop", "text/plain"},
{".rc", "text/plain"},
{".rmvb", "audio/x-pn-realaudio"},
{".rtf", "application/rtf"},
{".sh", "text/plain"},
{".tar", "application/x-tar"},
{".tgz", "application/x-compressed"},
{".txt", "text/plain"},
{".wav", "audio/x-wav"},
{".wma", "audio/x-ms-wma"},
{".wmv", "audio/x-ms-wmv"},
{".wps", "application/vnd.ms-works"},
{".xml", "text/plain"},
{".z", "application/x-compress"},
{".zip", "application/x-zip-compressed"},
{"", "*/*"}
};
这个MIME类型可能不够完整,你有要补充的吗?
相关推荐
在Android系统中,静默安装(Silent Installation)和卸载(Silent Uninstallation)是开发者或者系统管理员在后台执行应用程序的安装与卸载过程,无需用户交互的一种方式。这通常用于批量部署应用或者在设备管理器...
本教程将通过具体的代码实例来讲解如何在Android平台上进行APK的安装与卸载操作,这对于开发者或者用户来说都是相当实用的知识。 一、安装APK 1. **手动安装**:通常用户可以通过Android设备上的“文件管理器”...
在安卓(Android)系统中,程序的安装、卸载和更新是用户与应用程序交互的核心环节。...理解这些细节对于开发者来说至关重要,它可以帮助我们更好地调试和优化应用的发布,以及解决与安装、升级和卸载相关的问题。
与安装类似,卸载应用也可以通过adb完成。使用adb uninstall命令,指定应用的包名即可卸载。 BatInstaller的批处理脚本可能包含了读取应用包名列表,然后调用adb uninstall的逻辑。这使得用户能够一次性卸载多个应用...
- 当用户从Google Play商店或其他第三方应用市场下载APK文件时,Android系统的`Package Manager Service`负责安装工作。 - 安装过程中,系统会验证APK的签名,确保其来源可信,并且未被篡改。 - 然后,APK的资源...
总之,这个Android例子源码是关于如何在root环境下实现应用的静默安装和卸载,这对于系统级应用或者需要批量操作的场景非常有用。然而,由于涉及到root权限,开发者需要充分理解其风险,并确保遵循最佳的安全实践。
在Android平台上,有时候我们需要在应用程序内部完成安装和卸载APK文件的操作,这对于自动化测试、应用更新或系统管理类应用非常有用。以下将详细介绍如何在Android代码中实现这些功能。 首先,我们来看如何通过...
- Android Studio会编译代码并安装APK到模拟器。 2. **手动安装APK**: - 在Android Studio中,打开“终端”窗口(Terminal或Command Prompt)。 - 使用`adb`命令将APK推送到模拟器。首先,确保`adb`在PATH环境...
静默卸载与安装类似,也需要特定的权限: ```xml <uses-permission android:name="android.permission.DELETE_PACKAGES" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` ...
- **Adb命令**:与安装类似,卸载同样可以借助adb工具,使用adb shell pm uninstall 命令,package_name是应用的包名。 - **代码实现**:在Java代码中,同样通过Runtime类执行shell命令来调用adb卸载应用。 3. **...
当开发者完成一个Android应用的开发后,通过构建过程,会生成一个或多个APK文件,这些文件可以被用户下载并安装到Android设备上。不过,出于安全考虑,Android系统默认不允许用户从非官方渠道安装APK,所以APK安装器...
在Android生态系统中,APK文件是应用程序的安装包,相当于iOS中的IPA文件。当你需要在多台设备上或者一次性在一台设备上安装多个APK应用时,手动操作会非常耗时。为此,我们可以利用批处理(BAT)文件来自动化这个...
这通常是通过进入“安全”或“隐私”设置完成的,开启后,用户可以从任何位置安装APK文件。 2. **使用Adb(Android Debug Bridge)**:Adb是Android开发者工具包中的一个重要组件,它允许开发者通过USB或Wi-Fi连接...
例如,通过Java或Kotlin代码调用`PackageInstaller`或`PackageManager`的相关方法来实现静默安装和卸载。此外,还可以编写Python脚本来批量处理多个APK的安装和卸载任务。 对于更高级的应用,开发者可能需要监听APK...
这段代码创建了一个Package Installer会话,并将APK文件写入会话,然后提交安装。需要注意的是,这种方法需要运行在具有足够权限的进程中。 3. 利用BroadcastReceiver 可以创建一个BroadcastReceiver监听ACTION_...
4. **第三方应用安装**:通过SD卡中的APK文件进行安装,具有安装界面,安装过程由`packageinstaller.apk`负责处理。 #### 三、涉及的关键目录 - **system/app**:存储系统自带的应用程序,需要root权限才能删除。 ...
其中,`-r`表示更新已存在的应用,`-g`表示授予所有权限,`-t`表示允许测试包,`-d`表示调试包,`-p`表示安装到外部存储,`-i`指定安装者,`<path_to_apk>`是APK文件的路径。 2. **智能安装**: 智能安装通常涉及...