-
Android下载 文件(APP) 并且静默安装
2020-08-11 15:53:24基于Android7.0 有系统签名才能静默安装 直接上代码 下载文件 /** *下载文件 *这里我是用的子线程 **/ public void DownApkorSysrom( final String loadApkUrl ,final String savePath,final String ...1 . 基于Android7.0 有系统签名才能静默安装
直接上代码
下载文件
/** *下载文件 *这里我是用的子线程 **/ public void DownApkorSysrom( final String loadApkUrl ,final String savePath,final String saveFileName){ Thread thread=new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(loadApkUrl); Log.i(TAG,"updateManager download file url:"+loadApkUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); int length = conn.getContentLength(); InputStream is = conn.getInputStream(); File file; String filename; File downFile; file = new File(savePath); if (!file.exists()) { file.mkdir(); } filename = saveFileName; downFile = new File(file,filename); FileOutputStream fos = new FileOutputStream(downFile); int count = 0; byte buf[] = new byte[1024]; do { int numread = is.read(buf); count += numread; // 更新进度 int progress = (int) (((float) count / length) * 100); Log.i(TAG,"down load progress:"+progress+" numread:"+numread); if (numread <= 0) { // 下载完成通知安装 apkInstall(savePath+saveFileName); break; } fos.write(buf, 0, numread); } while (true);// 点击取消就停止下载. } catch (MalformedURLException e) { Log.i(TAG,"down load MalformedURLException:"+e.toString()); e.printStackTrace(); } catch (IOException e) { Log.i(TAG,"down load IOException TTTT:"+e.toString()); e.printStackTrace(); } } }); thread.start(); }
2 . 静默安装
/** * 执行命令并且输出结果 */ public boolean apkInstall(String path) { Log.d(TAG,"SilentInstallActivity path:"+path); Process p=null; int value=-1; try { String docmd = "pm install -r -i com.amtcloud.amtphoneagent --user 0 " +path; p = Runtime.getRuntime().exec(docmd); value = p.waitFor(); }catch (Exception e) { Log.d(TAG, "SilentInstallActivity error: " + e); }finally { if(p!=null){ p.destroy(); } } return returnResult(value); }
3 监听安装完成广播
public class SilenceInstallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 接收安装广播 if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")|| intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")) { // startApp("com.amtzhmt.launcher",context); Toast.makeText(context, "安装完成", Toast.LENGTH_LONG).show(); } } public void startApp(String appPackageName,Context context){ try{ Intent intent = context.getPackageManager().getLaunchIntentForPackage(appPackageName); context.startActivity(intent); }catch(Exception e){ Toast.makeText(context, "安装完成自启失败", Toast.LENGTH_LONG).show(); } } }
-
Android使用DownloadManager下载、安装APP以及监听下载状态和App安装状态
2019-12-27 14:31:05最近公司需要做个APP下载的功能,并且监听下载状态以及判断是否安装成功。 --可用于应用更新 --可用于广告下载类 本来想使用okdownload,但是想想既然android提供了api我又何必依赖一个三方库呢。 -----------...最近公司需要做个APP下载的功能,并且监听下载状态以及判断是否安装成功。
--可用于应用更新
--可用于广告下载类
本来想使用okdownload,但是想想既然android提供了api我又何必依赖一个三方库呢。
-----------用于记录download manager的简单使用,方便以后ctrl +c/v--------------------
直接上代码,我会注释清楚的
使用:
new DownloadUtils(context,url,"test.apk").startDownloadWithNoReport(); //或者 new DownloadUtils(context,url,"test.apk").startDownloadWithReport([此处是上报链接参数]...);
源码:
package com.xmiles.hytechad.utils; import android.app.Activity; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Environment; import androidx.annotation.NonNull; import androidx.core.content.FileProvider; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DownloadUtils { //下载器 private DownloadManager downloadManager; private Context mContext; //下载的ID private long downloadId; private String name; private String pathstr; private String url; private boolean isNeedReport; //通知相关 private String notifyTitle = "正在下载", notifyContent = "请稍等"; //上报相关地址 private ArrayList<String> mAdBeginDownUrl; private ArrayList<String> mAdEndDownUrl; private ArrayList<String> mAdBeginInstallUrl; private ArrayList<String> mAdEndInstallUrl; public DownloadUtils(@NonNull Context context, @NonNull String url, @NonNull String name) { this.mContext = context; this.name = name; this.url = url; } public DownloadUtils setNotify(@NonNull String title, @NonNull String content) { notifyTitle = title; notifyContent = content; return this; } public void startDownloadWithNoReport() { isNeedReport = false; downloadAPK(url, name); } public void startDownloadWithReport(ArrayList<String> appBeginDown, ArrayList<String> appEndDown, ArrayList<String> appBegininstall, ArrayList<String> appEndinstall) { isNeedReport = true; mAdBeginDownUrl = appBeginDown; mAdEndDownUrl = appEndDown; mAdBeginInstallUrl = appBegininstall; mAdEndInstallUrl = appEndinstall; downloadAPK(url, name); } //下载apk private void downloadAPK(String url, String name) { //创建下载任务 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); //移动网络情况下是否允许漫游 request.setAllowedOverRoaming(false); //在通知栏中显示,默认就是显示的 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.setTitle(notifyTitle); request.setDescription(notifyContent); request.setVisibleInDownloadsUi(true); //设置下载的路径 File file = new File(mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), name); request.setDestinationUri(Uri.fromFile(file)); pathstr = file.getAbsolutePath(); //获取DownloadManager if (downloadManager == null) downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); //将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等 if (downloadManager != null) { downloadId = downloadManager.enqueue(request); } if (isNeedReport) { //是否需要监听/上报安装状态 //上报开始下载 ReportUtils.reportAdBeginDownload(mAdBeginDownUrl); //需要上报则注册广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addDataScheme("package"); mContext.registerReceiver(installStatusReceiver, intentFilter); } //注册广播接收者,监听下载状态 mContext.registerReceiver(downloadStatusReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); } //广播监听下载的各个状态 private BroadcastReceiver downloadStatusReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { checkStatus(); } }; //广播监听安装的各个状态 private BroadcastReceiver installStatusReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { /**如果知道包名此处可以判断包名就知道具体是哪个app安装成功*/ //上报安装成功:无论是什么状态,只要是安装完成就上报 ReportUtils.reportAdEndInstall(mAdEndInstallUrl); if (mContext != null && installStatusReceiver != null) { //记得反注册接收器 mContext.unregisterReceiver(installStatusReceiver); if (mContext instanceof Activity){ ((Activity) mContext).finish(); } } } }; //检查下载状态 private void checkStatus() { DownloadManager.Query query = new DownloadManager.Query(); //通过下载的id查找 query.setFilterById(downloadId); Cursor cursor = downloadManager.query(query); if (cursor.moveToFirst()) { int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)); switch (status) { //下载暂停 case DownloadManager.STATUS_PAUSED: break; //下载延迟 case DownloadManager.STATUS_PENDING: break; //正在下载 case DownloadManager.STATUS_RUNNING: getDownloadPercent(cursor); break; //下载完成 case DownloadManager.STATUS_SUCCESSFUL: //上报下载完成 if (isNeedReport) { ReportUtils.reportAdEndDownload(mAdEndDownUrl); } //下载完成安装APK installAPK(); cursor.close(); if (mContext != null && downloadStatusReceiver != null) mContext.unregisterReceiver(downloadStatusReceiver); break; //下载失败 case DownloadManager.STATUS_FAILED: LogUtils.toast(mContext, "下载失败"); cursor.close(); if (mContext != null && downloadStatusReceiver != null) mContext.unregisterReceiver(downloadStatusReceiver); break; } } } /*获取下载进度*/ private int getDownloadPercent(long downloadId){ DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId); Cursor c = downloadManager.query(query); if(c.moveToFirst()){ int downloadBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR); int totalBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_TOTAL_SIZE_BYTES); long totalBytes = c.getLong(totalBytesIdx); long downloadBytes = c.getLong(downloadBytesIdx); return (int) (downloadBytes * 100 / totalBytes); } return 0; } /*获取下载进度*/ private int getDownloadPercent(Cursor c){ if(c.moveToFirst()){ int downloadBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR); int totalBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_TOTAL_SIZE_BYTES); long totalBytes = c.getLong(totalBytesIdx); long downloadBytes = c.getLong(downloadBytesIdx); return (int) (downloadBytes * 100 / totalBytes); } return 0; } private void installAPK() { setPermission(pathstr); Intent intent = new Intent(Intent.ACTION_VIEW); // 由于没有在Activity环境下启动Activity,设置下面的标签 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Android 7.0以上要使用FileProvider if (Build.VERSION.SDK_INT >= 24) { File file = (new File(pathstr)); //参数1 上下文, 参数2 Provider主机地址 和配置文件中声明保持一致 参数3 共享的文件 Uri apkUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".hytechad.fileprovider", file); //添加这一句表示对目标应用临时授权该Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); } else { intent.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS, name)), "application/vnd.android.package-archive"); } mContext.startActivity(intent); if (isNeedReport) { //上报开始安装 ReportUtils.reportAdBeginInstall(mAdBeginInstallUrl); } } //修改文件权限 private void setPermission(String absolutePath) { String command = "chmod " + "777" + " " + absolutePath; Runtime runtime = Runtime.getRuntime(); try { runtime.exec(command); } catch (IOException e) { e.printStackTrace(); } } }
-
最新FlutterAPP内部更新并且安装的功能
2020-01-04 13:44:43前言: 介绍一下APP更新的流程 1 、Android App 升级执行流程 1、获取本地版本号 2、请求服务器获取服务器版本号 ...注意:在 Ios 中没法直接下载安装,如果版本不一致直接跳转到 Ios 应用对应的应用市场就可以了...前言:
介绍一下APP更新的流程
1 、Android App 升级执行流程
1、获取本地版本号
2、请求服务器获取服务器版本号
3、本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新
4、用户确定升级,调用文件传输方法下载 apk 文件
5、监听下载进度
6、下载完成打开 Apk 进行安装
注意:在 Ios 中没法直接下载安装,如果版本不一致直接跳转到 Ios 应用对应的应用市场就可以了
APP内部更新并且安装是许多APP必备的功能,其中网上广为流传的方法是利用以下4个插件来更新并安装APP
package_info: ^0.4.0+4 #检测版本号 path_provider: ^1.1.0 #文件路径 open_file: ^2.0.3 #打开文件 flutter_downloader: ^1.3.2 #下载文件
这4个插件是最流行的,但是当我使用的时候,
flutter_downloader
却出现了下面这个错误
Unhandled Exception: 'package:flutter_downloader/src/downloader.dart': Failed assertion: line 388 pos 12: 'callbackHandle != null': callback must be a top-level or a static function
后续追加内容
关于这个问题我已在彻底解决Flutter_downloader的问题一文中解决了,如果想要继续使用Flutter_downloader的请点击前往
在这里给大家介绍另外一个下载Apk文件的插件:
ota_update
pub地址:https://pub.dev/packages/ota_update
gitHub地址:https://github.com/4Q-s-r-o/ota_update当然这个插件只是替换
flutter_downloader
用的,另外三个插件还是需要使用的。准备工作:
1
、首先打开你的AndroidManifest.xml
,添加下面这些权限代码<provider android:name="sk.fourq.otaupdate.OtaUpdateFileProvider" android:authorities="${applicationId}.ota_update_provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider>
2
、创建xml文件夹,并创建filepaths.xml
文件
3
、将代码复制进去,就可以了<paths> <external-path name="external-path" path="."/> <external-cache-path name="external-cache-path" path="."/> <external-files-path name="external-files-path" path="."/> <files-path name="files_path" path="."/> <cache-path name="cache-path" path="."/> <root-path name="name" path="."/> </paths>
Flutter代码
首先:
在你需要判断更新的页面中引入你安装的那4个插件1
、
第一步里面api.getData()
是我封装的请求方法,读者在套用代码的时候,可以更换为自己的版本请求接口,//获取版本号 _getPackageInfo() async{ PackageInfo packageInfo = await PackageInfo.fromPlatform(); String appName = packageInfo.appName; String packageName = packageInfo.packageName; String version = packageInfo.version; String buildNumber = packageInfo.buildNumber; api.getData(context, 'update').then((val){ print('-------------获取版本信息--------------'); var response = json.decode(val.toString()); // 如果当前版本比服务器小,返回-1,大返回1,相等返回0 var isUpdate = version.compareTo(response['version_no']); setState(() { app_url = '$base_url${response['app_path']}'; }); // 如果版本低于服务器版本就显示更新提示 if(isUpdate.toString() == '-1'){ _showDialog(); } }); print("App名称:${appName}"); print("包名:${packageName}"); print("version:${version}"); print("打包次数:${buildNumber}"); }
弹框在这里我就不占用地方给大家写了,直接就贴出来下载的方法了
//下载并打开文件 _downLoad()async { // 获取APP安装路径 Directory appDocDir = await getApplicationDocumentsDirectory(); String appDocPath = appDocDir.path; if (Platform.isIOS){ String url = 'itms-apps://itunes.apple.com/cn/app/id414478124?mt=8'; //到时候换成自己的应用的地址 // 通过url_launcher插件来跳转AppStore // if (await canLaunch(url)){ // await launch(url); // }else { // throw 'Could not launch $url'; // } }else if (Platform.isAndroid){ String url = app_url; // String url = "http://www.ionic.wang/jdshop.apk"; print(url); try { OtaUpdate().execute(url).listen( (OtaEvent event) { print('status:${event.status},value:${event.value}'); switch(event.status){ case OtaStatus.DOWNLOADING: // 下载中 setState(() { progress = '下载进度:${event.value}%'; }); break; case OtaStatus.INSTALLING: //安装中 print('-----安装中----'); // 打开安装文件 //这里的这个Apk文件名可以写,也可以不写 //不写的话会出现让你选择用浏览器打开,点击取消就好了,写了后会直接打开当前目录下的Apk文件,名字随便定就可以 OpenFile.open("${appDocPath}/new.apk"); break; case OtaStatus.PERMISSION_NOT_GRANTED_ERROR: // 权限错误 print('更新失败,请稍后再试'); break; default: // 其他问题 break; } }, ); } catch (e) { print('更新失败,请稍后再试'); } } }
好了,全部的代码都在这里了,如果有什么问题,请给我留言!
-
python 2到100的素数_po视频app下载安装|西瓜视频app下载安装_电脑知识学习网
2021-01-11 21:11:38睡前用好看视频看了几个后,惊喜地发现好看读懂了她的喜好,开始推荐和该剧有关的所有视频~并且还能自动连播!看着看着,天就亮了...人生难得知己,看好看视频,通宵又何妨~张大妈是小区广场舞队的中坚力量,但...陈MM最近迷上某电视剧,任何相关视频都不放过。睡前用好看视频看了几个后,惊喜地发现好看读懂了她的喜好,开始推荐和该剧有关的所有视频~并且还能自动连播!看着看着,天就亮了...人生难得知己,看好看视频,通宵又何妨~
张大妈是小区广场舞队的中坚力量,但一直头疼去哪找舞蹈视频。自从发现好看视频里的广场舞频道,就爱不释手~现在舞蹈队的大妈们都用好看视频学舞,励志要从小区广场跳到纽约时代广场!
致力于为你提供更优质的视频内容,百万条原创视频。新视觉新体验告别沉闷,提升颜值,看视频涨姿势。手机app视频投电视软件下载
精东视频app是一款可以随时让你看直播和精品视频的平台,这里将是你开启幸福生活的地方,当你感到寂寞的时候,就来这里看看直播,看看小姐姐,还可以看好看有趣的视频哦,这里有各种类型的主播,不管你喜欢什么类型的,一定能找到你想要的那一款,和你喜欢的她在线互动,一起聊天,玩游戏,K歌,甚至还能聊点私密话题,只要是你想做的,就一定都能做。无聊了还可以看看视频,打发时间,全部都是高清画质,不会有任何的卡顿和模糊现象,只为给你带来最佳的体验感。喜欢的小伙伴们快来下载试试吧。
张大妈是小区广场舞队的中坚力量,但一直头疼去哪找舞蹈视频。自从发现好看视频里的广场舞频道,就爱不释手~现在舞蹈队的大妈们都用好看视频学舞,励志要从小区广场跳到纽约时代广场!
精东视频成年无限观看ios版有超多午夜福利直播,每一个直播间都具有不一样的精彩,但是每一个都是可以让你兴奋起来的哦,盲进都不踩雷,而且你完全可以和你喜欢的主播进行私密互动,创造更大,只属于你的福利,你懂的那种。如果你此时正在无聊,那就千万不要错过它,绝对是你值得拥有的。
-
免填邀请码下载 /APP安装统计/渠道数据统计/携带参数安装
2021-02-19 00:38:31**免填邀请码下载 /APP安装统计/...Traceinstall近期已经完全免费开放社交平台快速下载App、一键拉起App直达场景两项服务。 Traceinstall官方网站:https://www.Traceinstall.com 场景一Traceinstall服务器将自动获取 -
App下载、静默安装并自启动
2018-03-31 16:01:58前不久遇到一个需求,说是要实现app的静默安装并且安装完了之后要能够自启动。我上网查了很多资料,方法基本都差不多,但是基本上每种方法我都试过了,能够实现静默安装,但是自启动的时候就遇到了问题。很多类似的... -
BB AppWorld安装文件
2011-09-15 18:01:33AppWorld安装文件。 App world 是黑莓公司出的一款类似于 app store 的一款软件.实现blackberry应用程序的集中下载.和主题分类下载. 并且在近日appworld 可以在国内使用啦. -
vue-app之h5下载文件并安装
2020-07-14 10:21:24系统更新,如果线上有新的安装包了就需要下载新的安装包并且安装更新。 实现逻辑: 如果有新的安装包,则下载新的安装包,但在下载之前需要判断本地文件是否已经存在旧的同名的安装包(如存在然后再下载时,就会在... -
psv黑商店pkgj最新版下载_e收银app下载安装_e收银软件最新版免费下载
2020-11-02 10:29:29e-Cashier的移动版本支持多种刷卡方法,使商户可以自定义订单日期,从而使每天的收入一目了然,并且从多个角度分析商店的业务状况非常实用 。特征电子收银机是一种高效便捷的收银工具,e收银台移动版为商户提供一站... -
app安装后扫描不到自己创建的目录,还有下载的歌曲不是放在app创建的文件夹下,并且也搜索不到并且也不能在...
2020-12-08 18:14:50<div><p>该提问来源于开源项目:wangchenyan/ponymusic</p></div> -
iOS:苹果企业证书通过网页分发下载安装app
2017-11-10 15:28:50iOS:苹果企业证书通过网页分发安装app 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限。为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用。 基本的原理... -
小胖说事50-----IOS 检测APP是否在手机上安装并且打开APP
2015-11-02 12:23:381.JS版本 常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码。但往往我们都是直接给推广图片加了一个下载链接(App Store中... b、APP下载页中提示:安装;用户 -
php日历天气预报下载安装手机桌面_日历天气预报app下载
2020-12-24 16:10:30日历天气APP是一款全新的手机每日天气预报软件,软件主打古风简约色调,拥有唯美的古风使用界面,它支持全国四万多个城镇的天气预报,并且支持未来15日天气预报,用户还可将天气和行程分享给好友,随时查询所处位置... -
Android程序静默安装安装后重新启动APP的方法
2021-01-20 09:56:15之前boss提出一个需求,运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来... -
有道词典pc离线包打包下载_英语有道词典app下载安装-网易有道词典手机版下载v9.0.2 官方安卓版...
2020-11-12 22:35:01有道英语词典最新版2020(在线翻译)是网易打造的首款多语言手机词典软件,支持多国语言的翻译,包括英文、日文、韩文多语言互译,并且翻译非常准确,学习多语言的好帮手;出国使用的话,也可以更方便的和外国人交流了... -
有道词典pc离线包打包下载_英语有道词典app下载安装-网易有道词典手机版下载v9.0.0 官方安卓版...
2020-11-06 03:26:52有道英语词典最新版2020(在线翻译)是网易打造的首款多语言手机词典软件,支持多国语言的翻译,包括英文、日文、韩文多语言互译,并且翻译非常准确,学习多语言的好帮手;出国使用的话,也可以更方便的和外国人交流了... -
JS拉起或下载app的实现代码
2021-01-19 20:35:08产品提了个需求,通过手机网页判断是否安装了自己公司app,如果安装了则拉起app,没有安装则跳转到下载页。 经过各种查阅资料尝试总结了一个还算可以的办法。 拉起app的原理就是js和原生统一好一个地址,例如... -
vue+h5做的App使用api进行文件的下载自动安装打开
2018-05-15 16:36:09本人第一次写博客,菜鸟一只,也不大会用语言表述,写博客只是单纯记录下自己遇到的问题,并且记录下来以便日后使用的时候可以有个思路。如果能够帮助到别人就更好了。 现在公司的项目需要用vue做一个安卓app,需要... -
win 10手动/不使用app store安装linux子系统
2019-10-22 15:30:56从app store搜索下载linux子系统需要登录,并且下载极其缓慢。不适用app store的安装方法,网上给出的方法实在太复杂。但微软官方其实就提供了极其简单的方法: Manually download Windows Subsystem for Linux ... -
检测是否安装第三方APP,并下载;以WPS为例
2016-09-22 17:37:53判断是否安装第三方软件,并且打开跳转到AppStore下载地址 第一步 添加scheme 在info配置处,URL type添加需要打开第三方软件的标示 或者直接在info下添加 key LSApplicationQueriesSchemes 第二步 以... -
Android实现外部链接唤醒App,并且在App内部打开详情页面
2018-03-15 11:07:04需求:app分享出去的链接(只有报名和投票,在详情页里面点击报名或者投票才唤起app),如果本地安装了这个应用则可以直接唤醒app并在app内部打开这个链接的详情页面,如果本地没有安装这个app,则跳转到下载页面... -
分享一个android静默安装,安装后重新启动app的方法
2018-01-19 22:49:00之前boss提出一个需求,运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来... -
311、支持Google Play在容器中下载APP 310、修复Android 11 QQ无法显示图片的问题 309、兼容Android 11运行Google Service 308、解决Android 11无法运行chromium 307、支持Hook @CriticalNative Method 306、修复JDK...
-
下载完成是否自动弹出安装页面 true showNotification 是否显示通知栏进度(后台下载提示) true forcedUpgrade 是否强制升级 false showBgdToast 是否提示 "正在后台下载新版本…" true usePlatform 是否...
-
Linux安装tomcat8以及设置开机自启并且解决访问Manager App报403错误(安装包方式)
2020-07-09 14:56:161. 安装tomcat8 首先去官网下载安装包,官网地址:https://tomcat.apache.org/download-80.cgi,我这里下载的是: 然后在/usr/local下创建tomcat文件夹: 然后把安装包上传到该文件夹下,并解压: 修改/etc/... -
小米手机下载二维码APP
2019-09-24 14:55:491.如果手机之前有安装相同app的先卸载掉 2.打开手机自带浏览器扫码会跳转到一个下载的网页 3.点击下载后会出现一个弹窗,点击弹窗中间部分的灰色字体源文件 4.点击后会出现一个正在下载的提示代表点击成功 5... -
Android之apk静默安装后重新启动APP的方法
2021-02-20 14:32:47运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来实现以上功能。... -
Hbuilder创建移动app项目并且打包发布
2020-09-18 14:19:291.自行下载HBuilder,官方下载或者是通过用应用商店查询下载。 2、打开HBuilder编辑器界面,点击左上角的文件—>新建—->项目。选择你所需要创建的项目。 3.连接真机进行调试 (1)HBuilder的真机调试需要两个... -
安装 并且使用_使用共享账号下载的内购应用如何更新?
2021-01-12 01:05:50如果你是大G的粉丝,那么你一定知道可以使用Mr.G分享...(适用于iphone)01应用准备首先你必须要准备一个已经使用付费账号下载或者恢复购买的App,这里我们以Videoleap为例,Videoleap旧版本已经使用付费账号下载并且...
-
2.数据类型、表达式和基本运算
-
谷歌相册备份backupandsync.exe
-
机器学习 面试题-第十章 集成学习(大厂必问,历经半年整理)
-
app软件测试全栈系列精品课程
-
1.6: 用户管理 、 组账号管理 、 计划任务.docx
-
《文件过滤及内容编辑处理命令》
-
C/C++:简单书目管理系统.rar(含完整注释)
-
特征金字塔
-
Java一经推出就那么火,企业和程序员为什么要选择Java作为首选的编程语言
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
实现 MySQL 读写分离的利器 mysql-proxy
-
MySQL 触发器
-
C#Winform桌面开发编程上位机基础入门
-
STC15W204S单片机+TPA3110D2 D类音频功率放大器ALTIUM设计硬件原理图+PCB+封装库+BOM表文件.zip
-
用Go语言来写区块链(一)
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
轻博客CMS系统php版
-
3、分层测试模型中的智能化测试
-
《python数据分析与数据化运营》4.rar
-
转行做IT-第15章 Collection、泛型、Iterator