- 浏览: 75515 次
- 性别:
- 来自: 武汉
文章分类
最新评论
ServiceApkInstaller.java
调用方式:可以在onResume()的时候加入
new ServiceApkInstaller(HomeActivity.this, "module_speech-ht54-debug.apk").install();
public class ServiceApkInstaller { public final static String TAG = ServiceApkInstaller.class.getSimpleName(); private final String apkPackName = "net.easyconn.carmanservice"; private String apkName; private final String newApkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/carbit_speechservice.apk"; private Context mContext; private Thread subThread; public ServiceApkInstaller() { } public ServiceApkInstaller(Context context, String name) { mContext = context; apkName = name; } class installTask implements Runnable { @Override public void run() { if (!hasInstalled()) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + newApkPath), "application/vnd.android.package-archive"); mContext.startActivity(intent); } } } public ServiceApkInstaller install() { if (subThread != null && subThread.isAlive()) { return this; } subThread = new Thread(new installTask()); subThread.start(); return this; } public void uninstall() { Uri packageURI = Uri.parse("package:" + apkPackName); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); mContext.startActivity(uninstallIntent); } public boolean hasInstalled() { final PackageManager packageManager = mContext.getPackageManager(); List<PackageInfo> installedPackInfoList = packageManager.getInstalledPackages(0); for (int i = 0; installedPackInfoList != null && i < installedPackInfoList.size(); i++) { PackageInfo installedPackInfo = installedPackInfoList.get(i); if (installedPackInfo != null && TextUtils.equals(apkPackName, installedPackInfo.packageName)) { copyApkFromAssets(mContext, apkName, newApkPath); PackageInfo assetPackInfo = packageManager.getPackageArchiveInfo(newApkPath, PackageManager.GET_ACTIVITIES); if (assetPackInfo != null) { ApplicationInfo appInfo = assetPackInfo.applicationInfo; String assetVersionName = assetPackInfo.versionName; int assetVersionCode = assetPackInfo.versionCode; if (!TextUtils.equals(assetVersionName, installedPackInfo.versionName) || installedPackInfo.versionCode < assetVersionCode) { return false; } else { return true; } } return true; } } return false; } public boolean copyApkFromAssets(Context context, String fileName, String path) { boolean copyIsFinish = false; try { InputStream is = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); byte[] temp = new byte[1024]; int i = 0; while ((i = is.read(temp)) > 0) { fos.write(temp, 0, i); } fos.close(); is.close(); copyIsFinish = true; } catch (IOException e) { e.printStackTrace(); } return copyIsFinish; } }
调用方式:可以在onResume()的时候加入
new ServiceApkInstaller(HomeActivity.this, "module_speech-ht54-debug.apk").install();
发表评论
-
android中string.xml通配符以及颜色
2016-11-29 21:42 1816string.xml <resources> ... -
使用zxing实现生成二维码
2016-11-28 00:58 647github: https://github.com/bill ... -
android将视频文件转化为图片
2016-11-24 00:04 2185public void getBitmapsFromVi ... -
android通过文件管理器选择文件
2016-11-22 23:36 1902public void openSystemF ... -
将bitmap保存为文件
2016-11-22 23:28 1427public void saveBitmap(Bitma ... -
Material Design动画(一)reveal effect
2016-09-22 22:47 500Animator animator = ViewAn ... -
创建自定义控件在布局中的自定义属性
2016-09-11 21:15 6611.在values目录下新建attrs.xml < ... -
androidstudio搭建NDK开发环境
2016-09-08 18:53 20501.打开SDK Manager下载NDK 2.设置根目录中的 ... -
[Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
2016-09-05 18:07 847http://blog.csdn.net/yy13003263 ... -
android启动其他应用得service
2016-08-31 10:03 760Intent i=new Intent(); i.s ... -
android屏幕分辨率适配工具
2016-07-22 17:22 688下载附件后,执行 java -jar autolayout.j ... -
android不死服务的实现方法
2015-11-20 13:36 1271大部分应用在手机长按home键删除最近程序时,进程会被杀掉,本 ... -
android开机自启广播无效果的曲线解决方案
2015-10-04 23:24 2742AndroidManifest.xml <?xml ... -
坑爹的MediaPlayer.isPlaying()
2015-09-18 14:42 2532在这个安卓手机ROM千奇百怪的时代,MediaPlayer作为 ... -
CompletionService 实践
2015-04-26 20:02 596当向Executor提交批处理任务时,并且希望在它们完 ... -
Bitmap的简单应用
2015-03-23 23:56 806package com.example.b; imp ... -
listpreference
2015-01-07 23:02 648MyPreferencesActivity.java pa ... -
李刚安卓疯狂讲义
2014-02-11 23:30 37压缩分卷5个字 -
android开发工具
2014-01-29 00:07 646android开发工具 -
android 拖动条改变屏幕亮度
2013-04-26 00:29 1283main.xml <?xml version=&qu ...
相关推荐
### Android中安装Asset下的APK 在Android开发中,有时候我们可能会遇到需要动态加载或安装应用内部资源(如APK)的需求。本文将详细介绍如何在Android应用中安装存储于`assets`目录下的APK文件。 #### 一、背景...
1. **Assets目录**:在Android应用的资源结构中,Assets目录是一个特殊的地方,开发者可以将非结构化的数据,如文本文件、音频文件、XML文件或APK文件等放置在这里。这些文件不会被R类引用,但可以通过AssetManager...
这里的zip文件被放置在Asset目录下,这意味着它是作为应用的一部分在安装时包含在APK中。 3. **从Asset复制到SD卡**:Android设备通常拥有外部存储(如SD卡)供应用存储大文件。为了将Asset中的zip文件复制到SD卡,...
标题中的“androidstudio打包html成为apk”指的是使用Android Studio这个集成开发环境,将HTML、CSS和JavaScript等Web前端代码转换成Android应用(APK)的过程。这个过程通常用于快速构建简单的移动应用,尤其是那些...
在`assets`目录下放置SQLite数据库文件(例如`PhoneBooks1.db`),需要在应用运行时将其复制到Android的特定数据存储区域,通常是`data/data/your_package_name/databases`目录。这可以通过`SQLiteOpenHelper`的...
在描述中提到的"解压直接放到build-tools目录文件夹下便可使用",这表明SDK Tools 25.0.3通常需要被安装到Android SDK的特定目录下,即`build-tools`子目录。这样,当你在使用Gradle或Android Studio进行项目构建时...
当您下载并解压这个文件后,您需要将其放置到您的Android SDK安装路径下的 **build-tools** 目录中,以便系统能够正确识别和调用这些工具。 **Android build-tools** 是Android SDK的一个关键组件,它提供了许多...
在这里放置的文件不会被Android编译器处理,而是原封不动地打包到APK中,可以在运行时通过`AssetManager`访问。 要读取`assets`文件夹下的音频文件,首先需要创建一个`AssetManager`对象,它是Android系统提供的一...
在Android开发中,`assets`目录是一个特殊的地方,开发者可以将非资源文件(如文本、配置文件、数据库等)放入其中。这些文件不会被编译为应用的资源,但可以在运行时通过`AssetManager`访问。本文将详细介绍如何在...
然后,我们需要在项目的`assets`目录下放置Tesseract的训练数据文件。对于中文识别,必须包含`.traineddata`文件,如`chi_sim.traineddata`。这个文件包含了识别中文字符所需的模型和字典信息。确保在构建应用时,...
在解压缩“Android SDK tools 21.1.1.zip”后,将得到的21.1.1目录放置于你的Android SDK的build-tools路径下,通常是`根目录>/build-tools/`。这样,当你在使用Android Studio或其他IDE进行项目构建时,系统就能...
### Android之常用命令和工具详解...将此脚本命名为 `pcat`,并将其放置在 `/usr/local/bin/` 目录下。 综上所述,通过这些命令和工具,开发者可以有效地管理和监控 Android 应用的状态,从而提高开发效率和应用质量。
Android SDK Tools是Android开发者必备的工具集,它包含了一系列用于构建、调试和发布Android应用...将解压后的27.0.3文件放置到build-tools目录下,开发者即可在项目中使用这些更新的工具,从而获得更好的开发体验。
1. **安装Apktool**:将上述提到的文件放置在同一个目录下,并确保Java环境已经正确配置。 2. **反编译APK**:通过命令行运行`apktool d <apk_file> -o <output_directory>`,这将把APK解压到指定的输出目录。 3. **...
一旦下载完成,解压下载的压缩包,将`android-4.4.2`目录放置到你的Android SDK路径下的`build-tools`文件夹内。请注意,不同版本的Build Tools不能混用,因此确保你为Mac系统安装的版本与Windows版本分开。 在使用...
4. **解压和放置**:在下载并解压android build tools-26.0.2.rar文件后,应将其内容放置在Android SDK的`build-tools`目录下。这个目录通常位于`路径>/build-tools/`,确保覆盖或替换原有的旧版本。 5. **Android ...
首先,Android的`assets`文件夹是一个用于存放应用程序资源的特殊目录,不被编译为APK的一部分,而是保持原格式存储。这使得我们可以在运行时将其中的文件读取到内存或特定位置。 为了操作`assets`中的SQLite数据库...
首先,你需要从Android开发者网站下载特定版本的Build Tools,然后将解压后的文件夹放入到本地SDK的`build-tools`目录下。通常,SDK路径在`~/.android/sdk`(Linux或Mac)或`%USERPROFILE%\AppData\Local\Android\...
2. 将压缩包内的apktool.jar、aapt.exe等文件放置到同一目录下。 3. 使用命令行工具运行`java -jar apktool.jar d <input.apk> -o <output_directory>`反编译APK。 4. 在解压出的目录中进行必要的修改。 5. 使用`...