精华内容
下载资源
问答
  • 手机在线下载安装BlackBerry App World应用程序

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    目标:在线安装BlackBerry App World应用程序  (online install)


    方法1:

    手机浏览器访问  http://www.blackberry.com/appworld/download


    方法2:

    USB连接手机到PC机上,然后 PC机浏览器访问 http://us.blackberry.com/apps/app-world/download.html

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • @js 检测移动设备APP应用安装打开应用,未安装跳转到下载页面 直接上代码!! function _openAppUrl($appUrl,$downLoadUrl){ var ua = navigator.userAgent.toLocaleLowerCase(), openBrowser = null, device...

    @js 检测移动设备APP应用安装打开应用,未安装跳转到下载页面

    直接上代码!!

    function _openAppUrl($appUrl,$downLoadUrl){
        var ua = navigator.userAgent.toLocaleLowerCase(),
            openBrowser = null,
            deviceVersion = 0,
            matchVersion = null,
            openAppType = "",
            downLoadUrl = $downLoadUrl;
    
        //如果是在微信内部点击的时候
        if(ua.indexOf("micromessenger") != -1 ){
            _openAppUrl = function(){
                alert("请使用浏览器打开!");
            }
        }else{
            //在浏览器打开,判断是在移动端还是在PC端
            if(matchVersion = navigator.userAgent.match(/OS\s*(\d+)/)){
                //赋值,并且判断
                //IOS设备的浏览器
                deviceVersion = matchVersion[1] || 0;
    
                if(deviceVersion - 9 >= 0){
                    openAppType = "newType";
                }
            }else if(matchVersion = navigator.userAgent.match(/Android\s*(\d+)/)){
                //Android的设备
                deviceVersion = matchVersion[1] || 0;
    
                if(deviceVersion - 5 >= 0){
                    openAppType = "newType";
                }
    
            }else{
                //PC端的设备
                openAppType = "pc";
            }
            if(openAppType == "pc"){
                _openAppUrl = function(){
                    alert("请使用浏览器打开!");
                }
            }else if(openAppType == "newType"){
                //使用新的方法,尝试打开APP
                //IOS>9,Android>5的版本
                var timeout, t = 1000, hasApp = true;
    			var t1 = Date.now();
    			var ifr = document.createElement("iframe");
    			ifr.setAttribute('src', appUrl);
    			ifr.setAttribute('style', 'display:none');
    			document.body.appendChild(ifr);
    			timeout = setTimeout(function () {
    				var t2 = Date.now();
    				if (!t1 || t2 - t1 < t + 100) {
    					hasApp = false;
    				}
    			}, t);
    
    			setTimeout(function () {
    				if (hasApp) {
    					location.href = appUrl;
    				} else {
    					location.href = downLoadUrl;
    				}
    				document.body.removeChild(ifr);
    			}, 2000)
            }else{
                //使用计算时差的方案打开APP
                var checkOpen = function (cb){
                    var _clickTime = +(new Date()),
                        _count = 0,
                        intHandle = 0;
    
                    //启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
                    intHandle = setInterval(function(){
                        _count++;
                        var elsTime = +(new Date()) - _clickTime;
    
                        if (_count>=100 || elsTime > 3000 ) {
                            clearInterval(intHandle);
                            //计算结束,根据不同,做不同的跳转处理,0表示已经跳转APP成功了
                            if ( elsTime > 3000 || document.hidden || document.webkitHidden) {
                                cb(0);
                            } else {
                                cb(1);
                            }
    
                        }
                    }, 20);
                }
                _openAppUrl = function(url){
                    var ifr = document.createElement('iframe');
    
                    ifr.src = url;
                    ifr.style.display = 'none';
    
                    checkOpen(function(opened){
                        if(opened === 1){
                            location.href = downLoadUrl;
                        }
                    });
    
                    document.body.appendChild(ifr);
    
                    setTimeout(function() {
                        document.body.removeChild(ifr);
                    }, 2000);
                }
    
            }
    
        }
    }
    //执行方法
    //$appUrl=>APP_SCHEME_URL(与APP约定的一个协议URL)
    //$downLoadUrl =>下载地址,我这里直接跳公共下载页面,
    //下载页面里判断了下载ios还是安卓,这里就不一一赘述
    _openAppUrl($appUrl,$downLoadUrl);
    

    希望以上代码能帮到在茫茫人海寻找方法的里,亲测有效,注意:微信内打开网址和qq等第三方app打开的网址执行该方法是无效,需要用常规的手机自带的浏览器等常用浏览器才有效

    展开全文
  • app应用下载安装见解

    千次阅读 2014-04-11 11:54:55
    苏宁应用商店关键在于应用的xi

    首先得了解是否设备安装了应用  通过以下代码可以知道:

    NSURL *appUrl = [NSURL URLWithString:[self.appCode stringByAppendingString:@"://"]];
    Bool  canOpen = [[UIApplication sharedApplication] canOpenURL:appUrl];

    appCode就是应用的唯一标示符   如:com.suning.SuningAppStore

    如果canOpen为yes,则说明设备安装了程序,能打开,如果为no  则说明未安装程序,模拟器不能成功,必须在真机上才能测试

    使用UICKeyChainStore来保存安装应用的状态 

    安装应用的代码
    NSString *appInstallURL = [NSString stringWithFormat:kRequestAppInstallUrlPrefix@"%@", _infoModel.appDownloadPath];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appInstallURL]];

    appDownloadPath为应用plist文件地址 如:https://iapp.suning.com/upload/app_inner/ios/20140331/0acd33c669047da3e003add1e1f9eff1.plist   

    当运行此代码时会弹出提示框   安装或取消  如果点击安装 则应用会退入后台  如果点取消则不会推入后台    不过都会调用applicationDidBecomeActive代理方法     此时刷新列表 是每个应用的状态正常

    在选择安装后 进入后台此时应该将选择安装的应用信息 使用UICKeyChainStore保存起来  

    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:dto.appCode];

    [store setString:dto.appVcode forKey:KEYCHAIN_VERSION];
    [store setString:installBeginTime forKey:KEYCHAIN_TIME];
    [store synchronize];

    总体规则就是当退到后台时 保存选择安装应用的信息   当进入前台时则刷新列表

    再根据保存下载应用的信息  如版本 时间来判断应用的状态 从而给出正确的结果


    展开全文
  • 学更好的别人,做更好的自己。——《微卡智享》本文长度为2499字,预计阅读7分钟仿应用下载安装App前面几章我们学习了检测App是否安装,能过AsyncTask下载App并调用安装,还...

    学更好的别人,

    做更好的自己。

    ——《微卡智享》

    本文长度为2499,预计阅读7分钟


    仿应用宝下载安装App

    前面几章我们学习了检测App是否安装,能过AsyncTask下载App并调用安装,还有实现进度条按钮的功能,这一篇我们把这几章连着RecyclerView进行一个综合实战练习,在实战过程中又顺便学到了几个新的知识点。

    实现效果

    根据上面的视频我们可以看到,做了一个检测App是否已经安装,如果未安装直接下载并安装的小Demo效果,接下来我们说说实现方式。

    实现思路

    定义一个AppInfo的类,里面有App的名称,包名、下载地址,存放的路径及当前的状态标志(未安装,已下载,已安装),再加一个判断当前标志的函数,

    利用我们《学习|Android检测并自动下载安装包(Kotlin)》文章中的那个已经封装了的类进行程序下载,这个类在这里又有改动,主要是因为原来的类中AsyncTask都是串行方式,只能一个一个等的下载,这里我重新加了一下并行运行的方式的调用方法

    利用RecyclerView的布局,显示程序中文名及包名,右边为进度条的按钮,这样可以实时看到下载进度。

    代码实现

    微卡智享

    我们新建一个AcTest的项目,整体完成的目录如下

    activity_main的布局中直接添加一个RecyclerView的控件

    CAppInfo

    新建一个CAppInfo的类,用于记录我们的App的相关信息

    ackage dem.vac.actest
    
    import android.content.Context
    import java.io.File
    
    class CAppInfo{
        //程序名称
        lateinit var AppName: String
    
        //程序包名
        lateinit var PackageName: String
    
        //下载文件名称
        lateinit var FileName: String
    
        //下载地址
        lateinit var DownloadUrl: String
    
        //状态 0-下载 1-已下载 2-已安装
        var Status: Int = 0
    
        fun CheckfileStaus(context: Context) {
            Status = 0
            if (DownloadUrl == "" || FileName == "") {
                return
            }
            if (CheckAppInstall.isAppInstalled(context, PackageName)) {
                Status = 2
            } else {
                var file = File(FileName)
                //存在的话说明已下载
                if (file.exists()) {
                    Status = 1
                } else {
                    Status = 0
                }
            }
        }
    }

    CheckAppInstall

    这个就是检测App是否已经安装的类,前面《学习|Android检测并自动下载安装包(Kotlin)》介绍过

    package dem.vac.actest
    
    import android.content.Context
    import android.content.pm.PackageManager
    import android.text.TextUtils
    import android.util.Log
    import java.lang.Exception
    
    class CheckAppInstall {
        companion object StaticFun {
            fun isAppInstalled(context: Context, uri: String): Boolean {
                var pm: PackageManager = context.packageManager
                var installed = false
                if(TextUtils.isEmpty(uri)) return installed
                try {
                    pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES)
                    installed = true
                } catch (ex: Exception) {
                    Log.i("install", ex.message)
                    installed = false
                }
                return installed
            }
        }
    }

    DownloadHelper(划重点、新的知识点)

    DownloadHelper前面文章也列出来过,这里一开始直接套用了,在测试过程中发现几个APP同时下载时点击是无反应的,后台网上找了找资料发现用AsyncTask默认的串行的,想要并行实现需要通过ThreadPoolExecutor配合着executeOnExecutor来实现,所以这个类里我又加了一下方法,保留原来的串行方法,然后加了一下并行的方法。

    package dem.vac.actest
    
    import android.os.AsyncTask
    import java.io.File
    import java.io.FileOutputStream
    import java.lang.Exception
    import java.net.URL
    import java.util.concurrent.ArrayBlockingQueue
    import java.util.concurrent.Executor
    import java.util.concurrent.ThreadPoolExecutor
    import java.util.concurrent.TimeUnit
    
    
    class DownloadHelper {
    
        companion object StaticFun {
    
            //定义多线程异步执行
            private var Thread_Pool_executor: Executor = ThreadPoolExecutor(
                3, 3, 10, TimeUnit.SECONDS,
                ArrayBlockingQueue<Runnable>(2)
            )
    
            fun download(url: String, localPath: String, listener: OnDownloadListener) {
                var task = DownloadAsyncTask(url, localPath, listener)
                task.execute()
            }
    
            fun downloadasync(url: String, localPath: String, listener: OnDownloadListener) {
                var task = DownloadAsyncTask(url, localPath, listener)
                task.executeOnExecutor(Thread_Pool_executor)
            }
    
            class DownloadAsyncTask(mUrl: String, mFilepath: String, Listener: OnDownloadListener) : AsyncTask<String, Int, Boolean>() {
                lateinit var mFailInfo: String
                private var mUrl: String = mUrl
                private var mFilePath: String = mFilepath
                private var mListener: OnDownloadListener = Listener
    
                override fun onPreExecute() {
                    super.onPreExecute()
                    this.mListener.onStart()
                }
    
                override fun onProgressUpdate(vararg values: Int?) {
                    super.onProgressUpdate(*values)
                    if (values.isNotEmpty()) {
                        values[0]?.let { mListener.onProgress(it) }
                    }
                }
    
                override fun doInBackground(vararg p0: String?): Boolean {
                    var pdfurl: String = mUrl
                    try {
                        var url = URL(pdfurl)
                        var urlConnection = url.openConnection()
                        var inputStream = urlConnection.getInputStream()
                        var contentlen = urlConnection.contentLength
                        var pdffile = File(mFilePath)
                        //如果存在直接提示安装
                        if (pdffile.exists()) {
                            var result = pdffile.delete()
                            if (!result) {
                                mFailInfo = "存储路径下的同名文件删除失败!"
                                return false
                            }
                        }
                        var downloadSize = 0
                        var bytes = ByteArray(1024)
                        var length : Int
                        var outputStream = FileOutputStream(mFilePath)
                        do {
                            length = inputStream.read(bytes)
                            if (length == -1) break
                            outputStream.write(bytes, 0, length)
                            downloadSize += length
                            publishProgress(downloadSize * 100 / contentlen)
                        } while (true)
    
                        inputStream.close()
                        outputStream.close()
    
                    } catch (ex: Exception) {
                        ex.printStackTrace()
                        mFailInfo = ex.message.toString()
                        return false
                    }
                    return true
                }
    
                override fun onPostExecute(result: Boolean?) {
                    super.onPostExecute(result)
                    if (result!!) {
                        mListener.onSuccess(File(mFilePath))
                    } else {
                        mListener.onFail(File(mFilePath), mFailInfo)
                    }
                }
    
            }
    
            interface OnDownloadListener {
                fun onStart()
                fun onSuccess(file: File)
                fun onFail(file: File, failInfo: String)
                fun onProgress(progress: Int)
            }
        }
    }

    AppViewAdapter(RecyclerView的操作)

    AppViewAdapter中写了相关RecyclerView的UI逻辑操作,算是把我们的RecyclerView重新复习了一下,并且全都改为Kotlin写的

    package dem.vac.actest
    
    import android.content.Context
    import android.content.Intent
    import android.graphics.Color
    import android.net.Uri
    import android.os.Build
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.TextView
    import androidx.core.content.ContextCompat.startActivity
    import androidx.core.content.FileProvider
    import androidx.recyclerview.widget.RecyclerView
    import dem.vac.actest.DownloadHelper.StaticFun.OnDownloadListener
    import java.io.File
    
    
    class AppViewAdapter(context: Context, appinfos: List<CAppInfo>, statusChange: OnItemStatusChange) :
        RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    
        private var mAppinfos: List<CAppInfo> = appinfos
        private var mContext: Context = context
        private var mStatusLister: OnItemStatusChange = statusChange
    
    
        class AppViewHolder(context: Context, view: View) : RecyclerView.ViewHolder(view) {
            var tvAppName: TextView = view.findViewById(R.id.tvAppName)
            var tvPackageName: TextView = view.findViewById(R.id.tvPackageName)
            var progressButton: ProgressButton = view.findViewById(R.id.progressbtn)
        }
    
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
            var v: View = LayoutInflater.from(mContext).inflate(R.layout.rcl_item, parent, false)
            return AppViewHolder(mContext, v)
        }
    
        override fun getItemCount(): Int {
            return mAppinfos.size
        }
    
        override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
            var viewHolder = holder as AppViewHolder
            var item = mAppinfos[position]
            //检测当前程序状态
            item.CheckfileStaus(mContext)
    
            viewHolder.tvAppName.text = item.AppName
            viewHolder.tvPackageName.text = item.PackageName
            when (item.Status) {
                0 -> {
                    viewHolder.progressButton.setText("下载")
                    viewHolder.progressButton.setTextColor(Color.WHITE)
                }
                1 -> {
                    viewHolder.progressButton.setText("安装")
                    viewHolder.progressButton.setTextColor(Color.WHITE)
                }
                2 -> {
                    viewHolder.progressButton.setText("已安装")
                    viewHolder.progressButton.setTextColor(Color.WHITE)
                }
                else -> {
                    viewHolder.progressButton.setText("重试")
                    viewHolder.progressButton.setTextColor(Color.WHITE)
                }
    
            }
    
            viewHolder.progressButton.setOnProgressButtonClickListener(object :
                ProgressButton.OnProgressButtonClickListener {
                override fun onClickListener() {
                    when (item.Status) {
                        0 -> {
                            DownloadHelper.downloadasync(
                                item.DownloadUrl,
                                item.FileName,
                                object :
                                    OnDownloadListener {
                                    override fun onStart() {
                                        viewHolder.progressButton.setProgress(0)
                                        mStatusLister.onRefreshAll()
                                    }
    
                                    override fun onSuccess(file: File) {
                                        viewHolder.progressButton.setText("安装")
                                        item.Status = 1
                                        InstallApp(item)
                                        mStatusLister.onRefreshAll()
                                    }
    
                                    override fun onFail(file: File, failInfo: String) {
                                        viewHolder.progressButton.setText("重试")
                                        item.Status = 0
                                        mStatusLister.onRefreshAll()
                                    }
    
                                    override fun onProgress(progress: Int) {
                                        viewHolder.progressButton.setProgress(progress)
                                        viewHolder.progressButton.setText("下载中 $progress%")
                                    }
                                })
                        }
                        1 -> {
                            InstallApp(item)
                        }
                    }
    
                }
    
            })
    
        }
    
        //安装
        private fun InstallApp(item: CAppInfo) {
            val intent = Intent(Intent.ACTION_VIEW)
            val uri: Uri
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                uri = FileProvider.getUriForFile(
                    mContext,
                    mContext.packageName + ".provider",
                    File(item.FileName)
                )
            } else {
                uri = Uri.fromFile(File(item.FileName))
            }
    
            intent.setDataAndType(
                uri,
                "application/vnd.android.package-archive"
            )
            startActivity(mContext, intent, null)
        }
    }
    
    interface OnItemStatusChange {
        fun onRefreshAll()
    }

    上在最后我加了一个了OnItemStatusChange的接口,在下载完或安装是周用重新刷新一下界面显示的,不过效果只能说挺一般,有小伙伴如果有更好的思路也可以留言告诉我。

    我们看一下动图的展示效果

    源码地址

    https://github.com/Vaccae/AcTest.git

    扫描二维码

    获取更多精彩

    微卡智享

    「 往期文章 」

    学习|Android中实现进度条按钮功能(kotlin)

    学习|Android检测并自动下载安装包(Kotlin)

    学习|Android使用TTS语音合成

    展开全文
  • 最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到一些...
  • 手机桌面上的图标都是应用程序App,应用程序App都...下面以荣耀9为例介绍如何下载安装App,荣耀9的桌面如下图所示。第3行第4列的图标是应用市场,点击进入下图。这是应用市场App的主页,最上面的是搜索栏,在这里可...
  • //app状态 显示不同的文字 gameStatus:function(){ var _self = this; var packageName = 'com.youku.phone'; //_self.gameData.snsGameAndroidName var ...
  • mac app store无法下载安装应用程序

    千次阅读 2015-01-26 00:58:24
    app store中安装有道词典时报错: 无法完成您的请求。 App Store 出错,请稍后重试。(null) 有人说更改dns可以解决,我尝试了,还是没有解决,一直报同样的错。 后来突然看到app store的菜单 “商店” 里有一...
  • &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;正在跳转...&...scri
  • mac app store 无法下载安装应用

    千次阅读 2014-03-13 21:52:16
    进终端输入defaults write com.apple.appstore ShowDebugMenu -bool true
  • 否则就跳到应用市场下载。代码如下: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;title&gt;&lt;/title&...
  • 最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到一些...
  • web页面判断是否安装某app,从web启动app应用 web页面判断手机里是否安转应用的原理就是:首先试着打开手机端某个app的本地协议;如果超时就转到app下载页,下载该app。 URL scheme 的作用 客户端应用可以向操作...
  • 最近测试提的一个缺陷,线上的 APP 更新时,点击更新下载完安装包后点击安装无法调起 APP 安装。 出现问题的版本: android 10 代码排查 (PS:因为测试说是在 android 10 才会出现的问题,所以从一开始就朝着 ...
  • 微博、支付宝、钉钉等社交平台中点击分享推广链接,打开落地页,无法快速下载,而是提示用户”在浏览器中打开“,增加用户操作,大量用户放弃下载安装,大大降低App安装率,造成App推广转化率低。 一般情况情况如下...
  • 最近公司需要做个APP下载的功能,并且监听下载状态以及判断是否安装成功。 --可用于应用更新 --可用于广告下载类 本来想使用okdownload,但是想想既然android提供了api我又何必依赖一个三方库呢。 -----------...
  • 1. 因为项目需求,需要一种临时的方案可以使ios绕过App Store下载app,网上教程大同小异,都是将ipa放到服务器中,在配置plist文件进行下载。 ## 问题 1. .plist文件如何配置,是通过xcode还是自己配置? ...
  • 就是在手机浏览器中下载app时,能判断该用户是否安装了该应用。如果安装了该应用,就直接打开该应用;如果没有安装应用,就下载应用。那么下面就对在浏览器中,用js判断某用户是否安装了该应用,并判断是否...
  • Ionic3 Android 检测并下载安装app

    千次阅读 2017-09-22 17:36:05
    应用不被发布到应用超市的情况下,而又想实现提醒用户升级APP,除了客户端要获取版本外,还需要服务器有API可以获取到当前维护进来的最新的APP版本号,以及最新的下载地址,废话不多讲了,上代码 首先准备工作,...
  • html中其实是无法判断应用是否安装,除非在webview中通过js bridge,这里通过一种方式达到此目的。 1、编辑AndroidManifest.xml: 主要是增加第二个,myapp用来标识schema,最好能保证手机系统唯一,那样就可以...
  • 在UC浏览器打开链接唤醒app,假设没有安装app,则跳转到appstore下载应用 须要在project中设置例如以下: 1、打开project中的myapp-Info.plist文件 2、打开文件里新增URL TYPES的一项,详细例如以下图...
  • 情景:不希望app发布到开放平台,要求通过扫描二维码下载apk,安装APP。注意事项:1. 微信打开的二维码页面,会自动屏蔽apk文件,所以显然把apk的url生成一个二维码,让用户扫一扫后就能直接下载,这样是行不通的。2...
  • 经常有人为了下载某些热门APP,苦于寻找美区、港区等中区以外账号注册,这里我们分享给大家一些港区 App Store 的 Apple ID账户,并把切换Apple ID的完整过程以截图方式呈现给大家: 这里请注意,选择的是App ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,750
精华内容 1,900
关键字:

下载安装app应用