有没有一个应用程序下载pip安装包到指定路径手机指定地点不用安装打开程序就可以使用的?

12695人阅读
Android实用技术(18)
我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。
一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现。
我们这里主要讨论的是应用程序下载,并在通知栏提醒下载完成。
实现过程大致分为三步:
创建一个service
在service启动的时候创建一个广播接受者,用于接受下载完成的广播
当BroadcastReceiver接受到下载完成的广播时,开始执行安装。
主要通过系统提供的DownloadManager进行下载,DownloadManager下载完成会发送广播,具体使用看下面完整的代码。如果详细了解可以参考下面创建新的文件DownloadService.java
public class DownLoadService extends Service {
/**广播接受者*/
private BroadcastR
/**系统下载管理器*/
private DownloadM
/**系统下载器分配的唯一下载任务id,可以通过这个id查询或者处理下载任务*/
private long
/**TODO下载地址 需要自己修改,这里随便找了一个*/
private String downloadUrl="http://dakaapp.troila.com/download/daka.apk?v=3.0";
public IBinder onBind(Intent intent) {
return null;
public int onStartCommand(Intent intent, int flags, int startId) {
receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
install(context);
stopSelf();
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
RxPermissions.getInstance(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Action1&Boolean&() {
public void call(Boolean granted) {
if(granted){
startDownload(downloadUrl);
stopSelf();
return Service.START_STICKY;
* 通过隐式意图调用系统安装程序安装APK
public static void install(Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(
new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "myApp.apk")),
"application/vnd.android.package-archive");
context.startActivity(intent);
public void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
private void startDownload(String downUrl) {
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUrl));
request.setMimeType("application/vnd.android.package-archive");
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "myApp.apk");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle("下载新版本");
enqueue = dm.enqueue(request);
上面代码使用了RxPermissions第三方库动态申请权限,需要在app/build.gradle文件中进行配置
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
compile 'io.reactivex:rxjava:1.1.6' //需要引入RxJava
记得要配置服务
&application
&service android:name=".DownLoadService"/&
&/application&
最后在MainActivity中添加按钮,执行操作。运行结果:
当下载的时候,会有通知栏进度条提示。下载完成会提示安装。不过当前程序如果在Android7.0上就会报错。下面是报错的日志:
Caused by: android.os.FileUriExposedException:
file:///storage/emulated/0/Download/myApp.apk exposed beyond app through Intent.getData()
这是由于Android7.0执行了“StrictMode API 政策禁”的原因,不过小伙伴们不用担心,可以用FileProvider来解决这一问题,
现在我们就来一步一步的解决这个问题。
Android 7.0错误原因
随着Android版本越来越高,Android对隐私的保护力度也越来越大。
比如:Android6.0引入的动态权限控制(Runtime Permissions),Android7.0又引入“私有目录被限制访问”,“StrictMode API 政策”。
这些更改在为用户带来更加安全的操作系统的同时也为开发者带来了一些新的任务。如何让你的APP能够适应这些改变而不是crash,是摆在每一位Android开发者身上的责任。
“私有目录被限制访问“ 是指在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。这点类似iOS的沙盒机制。
” StrictMode API 政策” 是指禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。
上面用到的代码中的Uri.fromFile
其实就是生成一个file://URL。
intent.setDataAndType(Uri.fromFile(
new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS),
"myApp.apk")),
"application/vnd.android.package-archive");
一旦我们通过这种办法打开其它程序(这里打开系统包安装器)就认为file:// URI类型的 Intent 离开你的应用。这样程序就会发生异常。
接下来就用FileProvider来解决这一问题。
使用FileProvider
使用FileProvider的大致步骤如下:
在AndroidManifest.xml清单文件中注册provider,因为provider也是Android四大组件之一,可以简单把它理解为向外提供数据的组件,这种组件在实际开发中用的频率并不高,四大组件都可以在清单文件中进行配置。
android:name="android.support.v4.content.FileProvider"
android:authorities="com.yll520wcf.test.fileprovider"
android:grantUriPermissions="true"
android:exported="false"&
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" /&
exported:要求必须为false,为true则会报安全异常。
grantUriPermissions:true,表示授予 URI 临时访问权
authorities
组件标识,按照江湖规矩,都以包名开头,避免和其它应用发生冲突。
第二步:指定共享的目录
上面配置文件中 android:resource="@xml/file_paths"
指的是当前组件引用 res/xml/file_paths.xml 这个文件。
我们需要在资源(res)目录下创建一个xml目录,然后创建一个名为“file_paths”(名字可以随便起,只要和在manifest注册的provider所引用的resource保持一致即可)的资源文件,内容如下:
代表的根目录: Context.getFilesDir()
代表的根目录: Environment.getExternalStorageDirectory()
代表的根目录: getCacheDir()
上述代码中path=”“,是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了。
如果你将path设为path="pictures",那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。
第三步:使用FileProvider
上述准备工作做完之后,现在我们就可以使用FileProvider了。
我们需要将上述安装APK代码修改为如下
public static void install(Context context) {
File file= new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
, "myApp.apk");
Uri apkUri =
FileProvider.getUriForFile(context, "com.com.yll520wcf.test.fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
context.startActivity(intent);
上述代码中主要有两处改变:
1. 将之前Uri改成了有FileProvider创建一个content类型的Uri。
2. 添加了intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);来对目标应用临时授权该Uri所代表的文件。
上述代码通过FileProvider的Uri getUriForFile (Context context, String authority, File file)静态方法来获取Uri
该方法中authority参数就是清单文件中注册provider时填写的authority
android:authorities="com.yll520wcf.test.fileprovider"。
按照上面步骤修改就可以兼容Android7.0了。
后期修改,之前没有考虑7.0以下的版本
但是如果此程序在Android7.0以下运行又会报错了,我们需要通过版本判断,当Android7.0及以上需要调用上面的代码,Android7.0以下需要调用7.0以下的代码。这样就OK了。修改install() 方法代码。
* 通过隐式意图调用系统安装程序安装APK
public static void install(Context context) {
File file = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
, "myApp.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if(Build.VERSION.SDK_INT&=24) {
Uri apkUri =
FileProvider.getUriForFile(context, "com.a520wcf.chapter11.fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
context.startActivity(intent);
更多精彩请关注微信公众账号likeDev
《爱上Android》已经出版
本书绝不中庸,全是实用技术
文章:29篇
阅读:58351更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
收藏成功,可进入
查看所有收藏列表
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
第一个应用程序Hello World
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
30秒后自动关闭
第一个应用程序Hello World">第一个应用程序Hello World
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
Copyright (C) 2018 & All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制平板/笔记本
HiLink生态产品
终端云服务专区
软件安装不了?一般是你下载的方式不对哟~
&已臻大成&
来自:浏览器
本帖最后由 不洗澡的皮卡丘 于
19:19 编辑
到非华为市场下载的软件有时候无法安装成功,这不是手机故障,其实多数原因是下载的问题哟。
2270848_dd09e2bd76c358d9dc8e6ebf0eb79a7c_.gif (1.9 MB, 下载次数: 4)
19:16 上传
对策一: 注意安装程序是APK格式心心念念下载半天的手机软件,如果不是APK格式,那么下载了也是徒劳。请检查第三方应用程序的格式是否正确,安卓系统的手机仅支持APK 格式的第三方应用。一定要看清格式再下载软件包,以免浪费流量和时间哦~
11.jpg (972.1 KB, 下载次数: 2)
19:16 上传
对策二:设置信任该程序来源
若应用程序不是从【】下载的,建议到应用市场下载官方版本安装。出于安全保护,安装非官方渠道下载的安装包的话,需要先设置信任该程序来源,才能正常安装。进入【设置】 &【高级设置 】&【安全】,打开【未知来源】开关,然后重新安装该应用程序。
22.jpg (782.92 KB, 下载次数: 3)
19:16 上传
对策三: 清理文件增加剩余存储空间软件安装失败还可能是由于剩余存储空间不足导致。请使用【手机管家】,清除手机缓存和系统垃. 圾或卸载不使用的应用程序。
33.jpg (1003.83 KB, 下载次数: 2)
19:16 上传
& & 或者还可以卸载不常用的软件留内存:
44.jpg (971.87 KB, 下载次数: 4)
19:16 上传
对策四:检查microSD 卡是否未被手机识别或损坏
若应用程序安装在 microSD 卡,请检查 microSD 卡是否未被手机识别或损坏。请重装 microSD 卡并重启手机或更换 microSD 卡。
对策五:网络连接不稳定下载过程中,可能由于网络连接不稳定,出现安装包损坏或下载不完整,请删除安装包后重新下载尝试。
对策六:先卸载后安装如果手机中已安装此应用程序,请卸载后再次尝试下载安装。
对策七:软件不兼容下载的第三方应用程序可能和手机不兼容,因此无法成功安装。这种情况下,可能就要等待适配安卓系统6.0的软件出来后,再进行下载,或者您还可以尝试下载其他类似应用。
转载自 华为手机
捕获pk.PNG (104.68 KB, 下载次数: 3)
19:17 上传
width:100%">
&花粉版主&
来自:浏览器
不错,谢谢分享
、、、版块欢迎花粉们的到来,小版会尽力帮助大家解决相关的问题。
width:100%">
&花粉帮帮堂&
来自:浏览器
顶一个!!
width:100%">
&炉火纯青&
来自:华为P9 EVA-AL00
我想安装三星手机那个“玩音乐”
width:100%">
&已臻大成&
来自:浏览器
不错,谢谢分享
&&小的 恭迎版主 大驾光临
width:100%">
&登堂入室&
来自:浏览器
width:100%">
&新学乍练&
来自:浏览器
最近更新系统之后,华为应用市场不能下载了,连下载按钮都没有,直接就显示“安装”,点了也没反应
width:100%">
&花粉帮帮堂&
来自:浏览器
最近更新系统之后,华为应用市场不能下载了,连下载按钮都没有,直接就显示“安装”,点了也没反应 ...
你尝试在设置-应用管理中找到应用市场删除数据和清除缓存后重新打开试试。
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
好基友勋章
花粉好机友,注册时间大于99天
至少10个原创技术帖,每个帖≥1W2浏览,有效回复≥600,加分数达≥50
花粉大贡献
精华帖数 ≥ 15 并且 主题数 & 200 并且 发帖数 & 500 并且 威望 & 500
花粉特种部队荣耀勋章
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
在职斑竹的身份勋章,感谢斑竹的辛勤劳动
大富翁勋章
达到1万花瓣后可申请获得大富翁勋章
1月7日前可申请自动获得,1月7日后参与其它相关活动获得。
沙发王勋章
越来越好玩静物红梅迎春到【细细冬雨】每个城市都有它温柔的一面伊河观日出
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利正在初始化报价器苹果手机无法安装程序有什么办法能解决?无法言喻狮子1.其中最常见的就是,未知软体安装失败。
这个其实在塞班手机的时候就有这个权限,这个也只要在手机安全设置里面设置就可以了。这也是运营商为了保证用户不过乱的安装非官方应用程序而造成手机系统紊乱的现象而添加的一个选项。
解决办法:设置安装权限即可(如图)
2,安装软件提示内存不足
这个原因相信大家都懂,如果手机内存实在不给力,又想安装多一点程序,那就换个手机吧。
解决方法:也很是简单,释放手机内存空间即可(通过卸掉一些无用的三方程序即可)
3.硬件设施原因
硬件设施的原因。骑什么马,套什么鞍,破锅就配个破锅盖吧,这个是一个无法避免的问题,你也就不要纠结了。除非换掉现在有的,那就是唯一解决方法,不然你就不要纠结那么多了
系统原因,现在很多软件都是不支持4.0以下系统的,这个还是可以通过刷机升级来解决
更多回答空心菜LOVECC对于未越狱的苹果手机,我们可以登录苹果的 App Store 下载安装应用软件。
苹果手机怎么装软件
打开 App Store 以后,我们可以找到自己喜欢的应用程序,下载安装即可。
注:在 App Store 下载安装应用程序需要用到我们的 Apple ID。
苹果手机怎么装软件
用 iTunes 安装应用软件
打开 iTunes 以后,点击右上角的“iTunes Store”按钮,如图所示
苹果手机怎么装软件
进入到 App Store 以后,找到喜欢的应用,或者在右上角的搜索框中输入应用程序的名称,如图所示
苹果手机怎么装软件
在应用程序页面,点击应用图标下面的“免费”按钮,然后输入我们的 Apple ID,最后点击“获取”按钮即可,如图所示
苹果手机怎么装软件
等待应用程序下载完成以后,我们把 iPhone 与电脑上的 iTunes 和数据线连接起来。点击 iTunes 右上方的 iPhone 图标,如图所示
苹果手机怎么装软件
接下来请点击“应用程序”图标,如图所示
苹果手机怎么装软件
然后在应用程序左边列表中选择要安装的应用,点击“安装”按钮,如图所示
苹果手机怎么装软件
最后点击窗口右下方的“同步”按钮,即可安装应用程序到手机上,如图所示
苹果手机怎么装软件
如若在同步过程中要求对电脑授权,请输入我们的 Apple ID 和密码,然后点击“授权”按钮,如图所示
苹果手机怎么装软件
然后就可以看到 iTunes 的状态栏中显示正在复制应用程序到手机中,手机上也会看到应用程序正在安装的进度,如图所示
苹果手机怎么装软件
苹果手机怎么装软件
用 iTools 来安装应用程序
把 手机连接到电脑上,打开 iTools 软件。点击左边的“正版市场”,在右边的应用程序列表里找到想要安装的应用,把鼠标放上去,再点击“一键安装”,如图所示
苹果手机怎么装软件
接下来请选择“我没有 Apple ID” ,点击“确定”按钮,如图所示
苹果手机怎么装软件
等待应用软件下载完成以后,点击左边的“下载管理”。然后再点击右窗格上方的”程序“,在列表中点击应用右边的”安装“按钮,如图所示
苹果手机怎么装软件
当应用程序安装完成以后,我们就可以在苹果手机上使用该软件了。
手抖小天使有三种可能吧
1. 软件版本不支持。比如说你现在用的苹果的版本是3.1.2,而安装的软件是3.1.3的,这样的情况下是安装不进去的。
2. 软件本身有问题。现在在Appstore里很多软件都不能安装,要不安装完成后就崩溃退出。这样的情况一是手机是越狱版本的系统和软件有冲突,再有就是软件本身的缺陷。
3. 也是最不容易发生的,就是机身存储容量已经满了。
热门问答123456789101112131415161718192021222324252627282930

我要回帖

更多关于 北京护照照片指定地点 的文章

 

随机推荐