精华内容
下载资源
问答
  • Android中软件的静默安装安装完成后再自动打开安装软件(需Root),详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/77488832
  • Android在一个app中实现另一个app的自动安装,安装完成后自动打开(需Root),详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/77485561
  • allegro自动安装工具

    2018-09-27 14:02:31
    allegro自动安装工具,请按照说明先下载吴川斌的对应软件,然后打开工具选择软件安装包和安装位置即可。
  • 写了一个demo,适用于app内部更新,并且带有弹窗提示更新内容,弹窗提示apk下载进度,状态栏发送通知提示下载进度,下载完成自动执行安装程序,适配7.0文件打开sd卡文件,适配8.0自动安装,内附超详细注释
  • 未知应用安装权限默认开启,如下图所示 8.0以下手机未知应用安装权限.png Android8.0之后 未知应用安装权限默认关闭,且权限入口隐藏。 如何开启未知应用安装权限的入口,并设置允许安装? 在清单文件中添加...
  • apk自动安装

    2019-04-08 16:28:11
    apk自动安装,无须下载助手,window 和 手机连接同一内网,自动连接手机(需打开开发者模式),根据提示输入要安装的apk路径即可
  • 批量自动打开安装软件安装器配置文件 适合一台电脑需要同时安装多个相同的软件,装的多了也不记得那个装了,那个没有安装
  • APK自动静默安装自动重新启动

    热门讨论 2014-01-26 08:26:01
    利用系统签名实现APK自动静默安装自动重新启动
  • 方法和步骤: ...这个时候可以安装vscode eslint插件,就可以自动检测不符合规范的代码。打开vscode左侧扩展面板,搜索eslint,点击安装,重启后生效 安装好之后,还需要在vscode文件中进行设置: 通过 f
  • ") } } } 三、经过反复测试,我的Android系统时可以静默安装而且安装成功之后自动重启成功的; 四、单个应用,在安装成功app之后,这个App的进程都被杀掉了,根本收不到广播重启打开了,如果非要使用广播打开的话,...

    一、使用Android自带的DownloadManager远程下载APK;

        val handler = Handler()
        private fun downLoadApk(apkUrl: String) {
            //创建request对象
            val request: DownloadManager.Request =
                DownloadManager.Request(Uri.parse(apkUrl))
            //显示还是隐藏 隐藏加权限:DOWNLOAD_WITHOUT_NOTIFICATION
            //request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN)
            //设置通知栏的标题
            request.setTitle("下载")
            //设置通知栏的message
            request.setDescription("正在下载.....")
            //设置下载文件类型
            request.setMimeType("application/vnd.android.package-archive")
            //设置文件存放目录
            request.setDestinationInExternalFilesDir(
                this,
                Environment.DIRECTORY_DOWNLOADS,
                "update.apk"
            )
            //获取系统服务
            val downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
            //进行下载
            val id = downloadManager.enqueue(request)
            val runnable = object : Runnable {
                override fun run() {
                    val cursor = downloadManager.query(DownloadManager.Query().setFilterById(id))
                    cursor?.apply {
                        if (moveToFirst()) {
                            val title =
                                getString(getColumnIndex(DownloadManager.COLUMN_TITLE))
                            val uri =
                                getString(getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
                            val current =
                                getInt(getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR))
                            val total =
                                getInt(getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES))
                            LogUtil.e(current.toString())
                            //获取下载状态信息
                            if (getInt(getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                                //下载完成
                                handler.removeCallbacksAndMessages(null)
                                LogUtil.e("下载完成:$uri")
                                val file = File(uri.substring(7)
                                RootUtil.sinlenceInstallApk(file)
                            }
    
                        }
                    }
                    cursor?.close()
                    handler.postDelayed(this, 1000)
                }
            }
            handler.postDelayed(runnable, 1000)
    
        }

    二,下载完之后,通过封装的RootUtils工具类安装重启

    object RootsUtils {
        /**
         * 判断手机是否有root权限
         */
        private fun sysHasRootPerssion(): Boolean {
            var printWriter: PrintWriter?
            var process: Process? = null
            try {
                process = Runtime.getRuntime().exec("su")
                printWriter = PrintWriter(process.outputStream)
                printWriter.flush()
                printWriter.close()
                val value = process.waitFor()
                return returnResult(value)
            } catch (e: Exception) {
                e.printStackTrace()
            } finally {
                process?.destroy()
            }
            return false
        }
    
        /**
         * root下执行cmd的返回值
         */
        private fun returnResult(value: Int): Boolean {
            // 代表成功
            return when (value) {
                0 -> {
                    true
                }
                1 -> { // 失败
                    false
                }
                else -> { // 未知情况
                    false
                }
            }
        }
    
        /**
         * root下静默安装
         */
        private fun rootSlienceInstallApk(apkPath: String): Boolean {
            var printWriter: PrintWriter?
            var process: Process? = null
            try {
                process = Runtime.getRuntime().exec("su")
                printWriter = PrintWriter(process.outputStream)
                printWriter.println("pm install -r $apkPath")
                printWriter.flush()
                printWriter.close()
                execLinuxCommand()
                val value = process.waitFor()
                return returnResult(value)
            } catch (e: Exception) {
                e.printStackTrace()
            } finally {
                process?.destroy()
            }
            return false
        }
    
        /**
         * 通过Linux延时执行重启
         */
        private fun execLinuxCommand() {
            val cmd = "sleep 1; am start -n com.xx.xxx/.LunchActivity"
            //Runtime对象
            val runtime = Runtime.getRuntime()
            try {
                val localProcess = runtime.exec("su")
                val localOutputStream = localProcess.outputStream
                val localDataOutputStream = DataOutputStream(localOutputStream)
                localDataOutputStream.writeBytes(cmd)
                localDataOutputStream.flush()
                LogUtil.e("设备准备重启")
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    
        fun rootInstallApk(file: File) {
            if (!sysHasRootPerssion()) {
                LogUtil.e("系统尚无Root权限")
                return
            }
            LogUtil.i("系统有Root权限")
            if (!file.exists()) {
                LogUtil.e("尚无APK文件")
                return
            }
            //静默安装
            if (rootSlienceInstallApk(file.path)) {
                LogUtil.d("静默安装成功")
            } else {
                LogUtil.e("静默安装失败!!!")
            }
        }
    }

    三、使用的是Android7.1已经root的,经过反复测试,是可以静默安装并且安装成功之后自动重启成功的;

    四、单个应用,在安装成功app之后,这个App的进程都被杀掉了,根本收不到广播重启打开了,如果非要使用广播打开的话,需要另外做一个无UI的App,做成双守护进程,把版本升级任务都交给它,通过它重启打开已安装的App,广播代码如下;

    class BootReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val action = intent.action
            intent.dataString?.substring(8)?.apply {
                LogUtil.d("BootReceiver onReceive():接收到Intent.getAction() = " + intent.action + " , 包名 = " + intent.dataString)
                /**
                 * 接收安装广播
                 * android.intent.action.PACKAGE_ADDED
                 */
                if (action == Intent.ACTION_PACKAGE_ADDED) {
                    LogUtil.d("BootReceiver onReceive():安装了:" + this + "包名的程序")
                }
                /**
                 * 接收卸载广播
                 * android.intent.action.PACKAGE_REMOVED
                 */
                if (action == Intent.ACTION_PACKAGE_REMOVED) {
                    LogUtil.d("BootReceiver onReceive():卸载了:" + this + "包名的程序")
                }
                /**
                 * 接收更新广播
                 * android.intent.action.PACKAGE_REPLACED
                 */
                if (action == Intent.ACTION_PACKAGE_REPLACED) {
                    LogUtil.d("BootReceiver onReceive():更新了:" + this + "包名的程序,context.getPackageName()=" + context.packageName)
    
                    //更新的软件包名是否和我的工程一致
                    if (this == context.packageName) {
                        //更新完后打开
                        val it = Intent()
                        it.setClassName(this, "$this.xxxActivity") //启动类
                        it.action = "android.intent.action.MAIN" //首个启动类action
                        it.addCategory("android.intent.category.LAUNCHER") //放入程序列表
                        //it.addCategory("android.intent.category.HOME");                           //作为桌面,Home键打开,可做启动默认程序
                        it.addCategory("android.intent.category.DEFAULT") //隐式打开,如果没main可有,如果main可有可无
                        it.flags = Intent.FLAG_ACTIVITY_NEW_TASK
                        context.startActivity(it)
                    }
                }
                /**
                 * 接收重启广播
                 * android.intent.action.PACKAGE_REPLACED
                 */
                if (action == Intent.ACTION_PACKAGE_RESTARTED) {
                    LogUtil.d("BootReceiver onReceive():重启了:" + this + "包名的程序")
                }
                /**
                 * 接收开机广播
                 * android.intent.action.BOOT_COMPLETED
                 */
                if (action == Intent.ACTION_BOOT_COMPLETED) {
                    LogUtil.d("BootReceiver onReceive():仪器开机,开启了:" + this + "包名的程序")
                }
            }
            
        }
    }
            <receiver
                android:name=".install.BootReceiver"
                android:label="@string/app_name"> <!-- app open/delete/upgrade/completed receiver -->
                <intent-filter>
                    <action android:name="android.intent.action.PACKAGE_ADDED" /> <!-- add -->
                    <action android:name="android.intent.action.PACKAGE_REPLACED" /> <!-- update -->
                    <action android:name="android.intent.action.PACKAGE_REMOVED" /> <!-- delete -->
                    <action android:name="android.intent.action.PACKAGE_RESTARTED" /> <!-- restart -->
                    <action android:name="android.intent.action.BOOT_COMPLETED" /> <!-- completed -->
                    <data android:scheme="package" />
                </intent-filter>
            </receiver>

    五、在静默安装之后执行重启代码

        /**
         * 执行此命令后:BootReceiver 监听到Intent.ACTION_PACKAGE_REPLACED,然后自启动
         * */
        fun rootStartApk(packageName: String, activityName: String): Boolean {
            val isSuccess = false
            var process: Process? = null
            try {
                process = Runtime.getRuntime().exec("su")
                val printWriter = PrintWriter(process.outputStream)
                printWriter.println("am start -n $packageName/.$activityName")
                printWriter.flush()
                printWriter.close()
                val value = process.waitFor()
                return returnResult(value)
            } catch (e: java.lang.Exception) {
                e.printStackTrace()
            } finally {
                process?.destroy()
            }
            return isSuccess
        }

     

    展开全文
  • Redis安装步骤和怎样自动开启服务

    千次阅读 多人点赞 2019-05-20 17:04:16
    安装redis和启动服务的步骤 1、官网下载:https://github.com/MSOpenTech/redis/releases 下载32 or 64 位 下载后的zip解压到磁盘下改名为redis 2、首次需要启动cmd命令界面执行命令进行运行,打开cmd 使用cd ...

    安装redis和启动服务的步骤
    1、官网下载:https://github.com/MSOpenTech/redis/releases 下载32 or 64 位 下载后的zip解压到磁盘下改名为redis

    2、首次需要启动cmd命令界面执行命令进行运行,打开cmd 使用cd 切换到redis目录,输入redis-server.exe redis.windows.conf运行redis!
    在这里插入图片描述
    3、这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。切换到 redis 目录下再次运行redis-cli.exe -h 127.0.0.1 -p 6379

    获取的是本机地址和端口号127.0.0.1:8379
    在这里插入图片描述

    4、可测试redis是否可用 依次执行命令 set mykey a 和get mykey

    5、然而如果这样就结束的话,每次想要使用redis都要执行以上步骤 非常麻烦,所以此处提供一个方法设置开机自动启动服务,当然现在直接去电脑的服务管理里是看不到Redis的启动项,还需要执行以下步骤;

    6、继第4步已经打开了两个cmd窗,此处继续打开第三个cmd界面,再次切换到redis目录下,执行redis-server.exe --service-install redis.windows.conf命令,即可在服务管理里安装启动项
    在这里插入图片描述
    7、第四次打开cmd,执行 services.msc 找到Redis项启动服务即可,如果想要每次开机执行使用redis,不需要每次都需要使用cmd来启动服务,可以属性里设置成自动

    在这里插入图片描述

    展开全文
  • Android实现下载APK文件并自动执行安装

    千次下载 热门讨论 2011-07-09 08:30:46
    Android实现下载APK文件并自动执行安装
  • Android开发APK更新下载自动安装打开

    千次阅读 2019-04-03 15:11:59
    //apk下载完成后,调用系统的安装方法安装后并打开APK Intent i = new Intent(Intent.ACTION_VIEW); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setDataAndType(Uri.fromFile(result), ...

    private ProgressBar downLoadPB; //下载APK进度条private TextView allMount; //显示APK总大小的控件
    private TextView currentMount; //显示当前已下载大小的控件
    private TextView info_TV; //显示下载中或已完成
    //下载方法(用Xutlis3的文件下载方法)
    //下载服务器上的APK
    private void getApkFromService(){
    String url = "http://10.69.10.55:8989/dingding/manyu.apk";
    String fileStr = Environment.getExternalStorageDirectory().toString()+"/manyu.apk";
    RequestParams params = new RequestParams(url);
    //自定定义保存路径
    params.setSaveFilePath(fileStr);
    //自动为文件命名
    //params.setAutoRename(true);
    x.http().post(params, new Callback.ProgressCallback<File>() {
    @Override
    public void onSuccess(File result) {
    info_TV.setText("已完成...");
    //apk下载完成后,调用系统的安装方法安装后并打开APK
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive");    //该行代码的作用是APK安装完毕后打开
    startActivity(i);
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    @Override
    public void onError(Throwable ex, boolean isOnCallback) {
    Log.v("TAG"," onError********************************"+ex.toString());
    Toast.makeText(DownLoadApkActivity.this,"onError()"+ex.toString(),Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onCancelled(CancelledException cex) {
    }

    @Override
    public void onFinished() {

    }

    //网络请求之前的回调方法
    @Override
    public void onWaiting() {

    }

    //网络请求开始的时候回调
    @Override
    public void onStarted() {

    }
    //下载的时候不断回调的方法
    @Override
    public void onLoading(long total, long current, boolean isDownloading) {
    //文件总大小和当前进度
    float a_B = (float)total; //单位是B    需要下载的文件总大小
    float b_B = (float)current; //单位是B /1048576      当前已经下载文件大小
    float total_M = a_B/1048576;
    float current_M = b_B/1048576;
    //进度条显示下载进度以及文本显示文件总大小以及当前已经下载量大小
    downLoadPB.setMax((int)total_M); //总大小单位是M
    downLoadPB.setProgress((int)current_M); //当前已经下载的大小单位是M
    allMount.setText(subFloat(total_M,2)+"M");
    currentMount.setText(subFloat(current_M,2)+"M");

    }
    });

    }

    展开全文
  • 官网下载安装的python3.6.8,但安装后发现Scripts文件夹中是空的,没有自动安装pip. 找了很多教程官网下载pip之后执行easy_install.exe pip命令后报错!ImportError: No module named setuptools,这个是因为没有安装...

    python


    官网下载安装的python3.6.8,但安装后发现Scripts文件夹中是空的,没有自动安装pip.
    找了很多教程官网下载pip之后执行easy_install.exe pip命令后报错!ImportError: No module named setuptools,这个是因为没有安装setuptools……这种手动的安装pip的方法就会有很多问题。这里找到了一个自动安装的方法如下
    1.首先到这个网址下载自动化安装脚本,打开网址后右键另存为到本地即可
    https://bootstrap.pypa.io/get-pip.py

    在这里插入图片描述
    2.命令行模式cd切换到文件保存的路径,然后执行这个脚本如下
    在这里插入图片描述
    3.执行之后等待就可以了,会自动下载匹配的pip,setuptools,wheel,下载后成功后自动安装,安装完成后查看python安装目录的Scripts文件夹下已经安装好了pip
    在这里插入图片描述
    4.系统环境变量添加Scripts文件夹的路径后,dos命令中输入 pip list命令检查是否可以正常使用,如下图即可正常使用pip命令了,主要python3的话 pip命令要写 pip3
    在这里插入图片描述

    展开全文
  • AutoIt自动安装脚本制作入门AU3教程
  • 3、对配置文件的运行效果提供预览支持(需要软件自动安装器程序) 4、对附加信息的大量内容提供文本文件导入 5、程序内置配置文件模板 6、对软件添加提供从文件夹批量导入 7、提供邮件发送功能,可以在使用时及时...
  • 自动安装SNMP的脚本

    2014-05-13 10:30:50
    自动安装SNMP的脚本,同时可以设置社团名称及开放IP,在域中设置组策略推送就可以。
  • BAT批处理自动安装软件

    千次阅读 2020-09-29 17:01:34
    BAT批处理实现自动安装软件 安装过程不需要人工参与。如何实现安装软件的自动化?就是静默安装。 静默安装又称为无人值守安装,软件以默认值自动安装。 静默安装原理 原理很简单,就是软件打包程序预留了安装...
  • android应用程序安装自动打开

    千次阅读 2019-02-11 11:28:12
    android应用程序安装自动打开
  • 自动安装脚本

    千次阅读 2018-10-31 16:16:29
    ########自动安装脚本######## 1.yum install httpd system-config-kickstart -y 安装这两个软件包 kickstart:它是一个自动安装的工具 2.systemctl start httpd ##开启httpd端口 systemctl enable httpd ##启用...
  • CentOS7安装之后开启自动更新

    千次阅读 2018-04-25 14:05:04
    centos7开启自动更新 我们将会使用&nbsp;cron&nbsp;和&nbsp;anacron,两者的分别这里不细表了,将来有机会再讨论,现在使用一个指令同时安装&nbsp;cronie&nbsp;和&nbsp;yum-cron: yum -y...
  • 安装app后自动打开

    千次阅读 2018-03-01 13:37:51
    --<action android:name="android.intent.action.PACKAGE_ADDED"/> 有新应用安装--> android :name= "android.intent.action.PACKAGE_REPLACED" />//有应用更新 <!--...
  • 关于Android8.0安装apk不自动安装问题

    千次阅读 2018-07-12 11:18:00
    谷歌的原生系统在应用管理,打开相应的app,选择高级,安装位置应用点进去选择允许,就可以安装了 可是在国产手机的应用管理中居然没有。找了半天才发现,它在安全与隐私中,选择安装位置应用,进到了应用列表,但是...
  • 在你的路径中找到/etc/nginx/nginx.conf 在server里加上以下代码 原因是因为nginx没有解析到php-fpm路径 所以无法解析php location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; ... fastcgi_split...
  • 安装使用office365后发现了一个问题,那就是多出来的teams又没用又老是卸载不掉,重启后马上自动安装,非常烦人。 完全卸载步骤如下 方法1:可通过在Windows开始右击卸载卸载,一定要卸载teams和teams machine-...
  • 安装好docker-toolbox之后启动Terminal开启virtualbox,然后等待下载好boot2docker.iso,下载好之后就可以看到virtualbox就会开始启动虚机看到上面的鲸鱼表示docker已经安装完毕。现在可以打开然后选择Jenkins安装...
  • 安卓自动启动软件.zip 安卓版本设置开机自动启动软件,PICO VR头盔开机自启动软件安卓apk安装程序,流程方便有效,傻瓜模式,谁用谁知道。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 980,817
精华内容 392,326
关键字:

怎样开启自动安装