精华内容
下载资源
问答
  • 如何停止Android手机上的应用程序自动更新
    千次阅读
    2021-06-02 22:02:24

    有几个原因可以阻止Play Store自动更新应用程序。 也许新的更新破坏了功能,或者您需要跟踪您的数据使用情况,并且不想通过蜂窝数据LIM。 不管是什么原因,这里是如何阻止自动更新发生在你的Android手机上。

    点击左上角汉堡菜单图标。

    e2cf63421561a4e1cbc1c317465c7087.png

    一旦完成,您的应用程序将不再自动更新,没有您的输入。 然而,我们建议每隔一段时间浏览一次应用程序列表,并手动更新您经常使用的应用程序。 这是因为开发人员发布了bug修复的更新,并添加了更多的功能。

    输入您正在寻找的应用程序的名称并点击搜索。

    单击旁边的复选框以启用自动更新。

    一旦完成,该应用程序将不再自动更新,无论您的总体设置已更改为什么。 这对于控制什么应用程序得到定期更新,什么应用程序需要保持原样是很好的。

    三星在单个包装中的最佳功能

    三星喜欢把“厨房水槽”扔进旗舰设备,而Note10就是其中的顶点。 它有一个大显示器,巨大的电池,S笔,三个相机,和更多的软件功能,比你知道如何处理。

    你永远不用担心用Anker电源核心PD Redux耗尽果汁,这要归功于它的1万毫安电池和快速充电能力。

    三星GalaxyBuds是市场上最好的真正无线耳机之一,当与任何Android智能手机配对时,效果都很好。

    我奥蒂的简单一摸4是一个奇妙的方式,以保持关注谷歌地图,如果你正在准备一次公路旅行。

    在你的手机和电脑上保持你的密码和其他信息的安全是安全的规则之一,这些应用程序帮助你保持所有的安全。

    无论您是在追求经典的纸牌游戏或幻想的纸牌世界深入到您的Android手机,我们已经为您覆盖了最好的谷歌游戏商店!

    如果你热衷于用你的Android手机或平板电脑来跟上一天的事件,那么你就会想看看这些新闻瘾君子的好应用程序。

    更多相关内容
  • 不同的软件,关闭自动更新的方法不同,但是大同小异。以腾讯电脑管家为例,关闭自动更新的方法如下:1,双击运行腾讯电脑管家;2,点击左上角的三个横线(设置图标);3,选择“设置中心”,在版本升级中,设置为不...

    07378ee64b8345da06c2fdc5e8694b60.png

    怎样关闭电脑软件上的自动更新?

    不同的软件,关闭自动更新的方法不同,但是大同小异。

    以腾讯电脑管家为例,关闭自动更新的方法如下:1,双击运行腾讯电脑管家;2,点击左上角的三个横线(设置图标);3,选择“设置中心”,在版本升级中,设置为不自动更新后,保存即可。

    怎么取消手机软件自动更新

    方法:1.选择操作系统桌面上的“安全中心”.2.在安全中心中选择“网络助手”.3.在“网络助手”中选择“联网控制”.4.在“控制应用联网”页面选择“系统应用”.5.在“系统应用”里面找见“系统更新”,单击后面的对勾,变成“错号”就可以了.注意事项:系统更新会更新很多现在系统存在的“漏洞”,所以在没有什么特殊需要的情况下建议不要关闭,或者关闭以后进行定时的手动更新。

    安卓系统自动软件更新怎么取消?

    取消手机软件在WIFI下自动更新可以参考以下方法:(我使用的是小米手机,下面介绍以小米手机为例,其他手机设置类似,只是功能键位置有区别)方法一:手动设置1、首先打开小米手机系统自带的应用商店软件,一般都放置在了其他应用这个文件夹里面。

    具体如下图所示:2、打开应用商店以后,点击小米手机的菜单键(即手机左下方有三条白线的那个键),然后点击设置。

    具体如下图:3、然后,在设置的菜单下面将自动升级功能按钮关闭,以保证软件不能使用wifi自动升级。

    具体如下图所示:4、关闭以后,手机软件就不会自动升级了。

    如果手机软件仍然自动升级,那么有可能是手机软件自身设置的问题。

    或者是由于手机里面安装的手机助手等等应用客户端的原因导致的。

    大家可以从这两个方面找找原因,然后设法关闭。

    方法二:下载手机助手(例如360、豌豆荚助手都有该功能),通过手机助手优化该功能设置。

    如何关闭软件的自动更新

    工具材料:WINDOWS系统关闭软件自动更新的操作方法:1. 点击系统左下角的“开始”按钮,然后选择“运行”,如下图所示:2. 在运行窗口中输入“gpedit.msc”指令,按下回车键确认,如下图所示:3. 打开本地组策略编辑器后,依次打开“计算机配置—管理面板—系统—设备安装”,在设备安装设置中,双击打开“设备安装限制”选项,如下图所示:4. 在设备安装限制文件夹中,找到“禁止安装未由其他策略设置描述的设备”选项,并且双击打开,如下图所示:5. 将这个设置更改为“已启用”,然后点击“应用—确定”按钮,如下图所示:6. 这时关掉各个窗口,然后重启电脑,当电脑重启后上面的设置才算生效。

    怎么关闭软件的自动更新

    方法一: 利用软件设置1. 如果桌面上有该Adobe reader软件的快捷方式,直接点击打开即可,如果没有,点击“开始”,找到Adobe reader,如果这里没有,进入“开始”,“所有程序”中,找到该程序,点击进入。

    2. 进入Adobe reader之后,点击上方的“编辑”(edit),进入比那几选项。

    这里是英文版,若你的是简体中文的,这里给你进行了汉语的命令,按照操作即可。

    3.在编辑选项中,点击最下放的“个人喜好设置”(preferences),或者直接 使用快捷方式“ctrl+K”打开。

    4.在分类“categories”下面,点击“更新”(updater)。

    5.进入更新设置中,点最下面一个选项“禁止自动下载安装更新”(don't download or install updates automatically”。

    点击最下方的“确定”(OK)。

    6.然后关闭剩下的窗口,这样就禁止了自动更新程序,避免了自动安装。

    如果需要启动自动安装更新,运用刚才的路径进来更改为自动更新即可。

    方法二:禁用Adobe升级服务打开计算机服务界面,找到并双击Adobe Acrobat Update Servise项目,在属性界面,将启动类型设置为“禁用”后,关闭窗口即可。

    这是最彻底的方法。

    方法三:利用软件安装界面软件安装到保持产品最新界面时,点击选中“手动检查并安装更新(不推荐)”,然后继续安装就可以了,估计只有是用时间较长的用户才会想到这种方法。

    office2016自动更新怎么关闭

    方法:1.打开office 2016中的一个组件(比如 word 2016)。

    2.打开以后,点击“文件”菜单。

    3.再点击“帐户”菜单项。

    4.此时,如果尚未登陆微软帐号,就先登陆(已登陆此步可略过)。

    5.在“office 更新”一项旁边点击“更新选项”。

    6.选择“禁用更新”。

    7.随后,office 更新一项下的说明文字将变成“无法更新此产品”。

    小米手机如何关闭软件自动更新

    1、进入手机桌面界面,点击“安全中心”按钮2、进入安全中心界面之后,点击“网络助手”按钮3、进入网络助手设置界面,点击"联网控制"4、进入控制应用联网界面,点击“系统应用”按钮5、对于“系统更新”这个应用点击下,关闭它的应用开关6、点击系统工具文件夹,找到系统更新按钮7、点击进入界面,然后点击菜单项,弹出菜单信息,点击“检查设置按钮”8、进入检查设置界面,将“仅在WLAN下自动检查更新关闭”,设置为灰色,点击确定

    展开全文
  • 浅析Android手机卫士自定义控件的属性 保存数据的四种方式,网络,广播提供者,SharedPreferences,数据库 获取SharedPreferences对象,通过getSharedPreferences()方法,参数:名称,模式 例如config,MODE_PRIVATE...
  • 需要一台windows系统的电脑,用于连接手机。 一共需要3步,1电脑安装驱动软件,2连接手机打开usb调试,3电脑输入命令。 电脑安装Handset+WinDriver驱动。 ...手机进入开发者选项,打开“手机打开USB调试”,“仅充电...
  • 功能如标题所示,简单的android的3秒倒计时关闭界面或点击关闭,如果3秒内点击就不会再开启自动关闭。看图说话,代码简单,注释清晰,一目了然: 下载整个项目代码。    3秒过后进入下一界面: 代码: ...
  • * 各种功能实现弹窗(自定义弹窗位置,添加动画效果) * 1.设置AlertDialog弹窗并且2秒后自动关闭(自定义关闭AlertDialog) * 2.设置popuwindow弹窗并且2秒后自动关闭 * 3.弹出后自带震动提示
  • 我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户在运行的服务中手动停止该服务以后,过了一段时间...
  • Android 软键盘自动弹出与关闭 在我们写修改信息或者搜索,修改密码等界面的时候,用户进入这个界面的主要目的就是输入修改/查找 某些信息,为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。 1.软...
  • android:实现点击按钮,弹出“请稍候...(文本可以自定义)”对话框,加载完了之后,对话框自动消失,提供了两种定时消失的方案,可自行选择。
  • 火狐浏览器 Debug 调试插件 FireBug 2.0.19 【由于无法自定义积分,抱歉 如果对您有帮助,请...火狐浏览器关闭自动更新、历史版本下载,请移步我的博客查看:https://blog.csdn.net/MYians/article/details/90312989
  • 用手机时,最烦人的事情之一,除了没电,估计就是不停的显示各种软件更新...手机如何关闭自动更新提示 图1为什么手机会提示软件更新初期的软件就像一个初生的作品,总是需要不断打磨和改进的,就像手机系统一样,要...

    用手机时,最烦人的事情之一,除了没电,估计就是不停的显示各种软件更新了。不知道大伙有么有同感?更新吧,又不太敢随便更,不更新吧,很可能你的手机界面就会变成这样,红一片……为什么手机会提示这些软件更新?到底有没有必要呢?手机如何关闭自动更新提示呢?下面随小编一起来看看吧!

    c2326a0c4ce2d1b593546a2fd17b4d5f.png

    手机如何关闭自动更新提示 图1

    为什么手机会提示软件更新

    初期的软件就像一个初生的作品,总是需要不断打磨和改进的,就像手机系统一样,要跟随上时代发展并符合用户需要,自然就需要不断去更新。而更新也是有利有弊的。一般之所以会提示更新,主要是两点:

    增加新功能:

    用户的喜好是在不断变化的,为了赢得用户,软件厂商也会不断的根据用户需要以及市场状况,不定时更新一些新功能,以更好满足用户的运用体验。

    提升软件运行的稳定性:

    软件就像系统一样,也是需要不断优化、不断完善的。所以软件厂商会对软件存在的一些漏洞进行修复,提升软件运行的稳定性。

    064a94f14a6c5a8e25a30afd1011ecf2.png

    手机如何关闭自动更新提示 图2

    但是其实更新也可能存在一定弊端

    兼容性问题:

    很多软件版本都是根据手机系统以及相关性能来做完善,若是旧手机升级了新版本的软件,可能会引发一些兼容性问题,出现漏洞,造成手机运行不够稳定。

    原本是想提升软件的稳定性,但若影响到手机整体,反而有些得不偿失。

    占据更多内存:

    软件更新包因为增加了一些东西,往往就会占据掉更多的内存,对于手机内存已经告急的小伙伴,这真的是个很让人烦恼的事情。

    广告可能增多:

    有些软件更新的目的,除了增加新功能和优化之外,还可能会植入一些广告,所以若是更新了新版本,那基本就成广告专场,一打开APP,各种广告乱入。

    b4057837fc93f1b76e7fbf05b39a5ac6.png

    手机如何关闭自动更新提示 图3

    更新到底有没有必要

    其实软件有没有必要更新,主要还是根据自己的个人需要,以及软件更新的实际情况。在更新之前,可以仔细看一下更新的详细内容。

    如果你是出于下面这种情况,就没有必要更新了:

    ▲. 现在运用软件整体觉得比较稳定、功能体验也不错;

    ▲. 更新的功能不是自己想要的,可有可无;

    ▲. 修复的bug好像也无关紧要;

    ▲. 手机内存不够,或者是已经比较老旧的机型等;

    a3f0952ade24c1c88f07e4d6662917a8.png

    手机如何关闭自动更新提示 图4

    当然,如果更新的功能比较好玩、有用,或者是修复了一些比较大的漏洞,在手机内存允许的情况下,更新版本确实会获得更佳的运用体验。

    所以归根结底,要不要更新其实还看个人实际需要情况了。

    668878dfa3cae04802fb98e008072778.png

    手机如何关闭自动更新提示 图5

    怎么去掉更新提示

    对大多数人来说,其实可能就是既不想更新,又不想要有提示,毕竟这一堆的小红点,真的是让不是强迫症的人变成强迫症。那怎么才能取消掉这些更新提示呢?

    iPhone手机:

    其实去掉也不难,iPhone手机需一步完成。

    进入手机【设置】-【通用】-【APP Store】,然后把里面的【允许通知】关闭即可。

    629fff4ab058dec8ca76dfbefbc17984.png

    手机如何关闭自动更新提示 图6

    安卓手机:

    安卓手机相对来说可能就比较复杂了,因为各家手机系统定制的不一样,所以操作也会有所不一样,不过应该也区别不大。可以参考下教授下面列举的步骤。

    进入手机【使用市场】-【设置】,然后把【使用更新通知免打扰】等一些相关的更新提示所有关闭。

    c3710a747e791603f0e7ec3cdf733669.png

    手机如何关闭自动更新提示 图7  大伙可以根据自己手机品牌,进入设置看看怎么取消更新提示。一般你的手机提示软件更新时,你是直接更新还是直接忽视?你又知道,怎么取消掉这些提示吗?

    展开全文
  • 安卓app自动更新功能完美实现

    万次阅读 多人点赞 2018-11-15 16:53:39
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 0.3格式 “Code”: 0, “Msg”: “”, ...

    示例:
    在这里插入图片描述

    零、准备工作

    0.1第三方库

    implementation ‘io.reactivex.rxjava2:rxjava:2.2.2’
    implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’
    implementation ‘io.reactivex.rxjava2:rxkotlin:2.3.0’
    implementation ‘com.squareup.okhttp3:okhttp:3.11.0’
    implementation ‘com.squareup.okio:okio:2.0.0’

    0.2权限

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 写入权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    

    0.3格式

    “Code”: 0,
    “Msg”: “”,
    “UpdateStatus”: 1,
    “VersionCode”: 3,
    “VersionName”: “1.0.2”,
    “ModifyContent”: “1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。”,
    “DownloadUrl”: “https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk”,
    “ApkSize”: 2048
    “ApkMd5”: “…” //md5值没有的话,就无法保证apk是否完整,每次都会重新下载。

    一、检测是否是最新版本,不是则更新

    private Disposable downDisposable;
    private ProgressBar progressBar;
    private TextView textView4;
    private Button upgrade;
    private long downloadLength=0;
    private long contentLength=0;
    private String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    

    //判断版本是否最新,如果不是最新版本则更新

    private void test(){
            Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                            .url("url")
                            .build();
    
                    client.newCall(request).enqueue(new okhttp3.Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {
                            emitter.onError(e);
                        }
    
                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                            String result="";
                            if (response.body()!=null) {
                                result=response.body().string();
                            }else {
                                //返回数据错误
                                return;
                            }
                            emitter.onNext(result);
                        }
                    });
    //                emitter.onNext("123");
                }
            }).subscribeOn(Schedulers.io())// 将被观察者切换到子线程
                    .observeOn(AndroidSchedulers.mainThread())// 将观察者切换到主线程
                    .subscribe(new Observer<String>() {
                        private Disposable mDisposable;
                        @Override
                        public void onSubscribe(Disposable d) {
                            mDisposable = d;
                        }
                        @Override
                        public void onNext(String result) {
                            if (result.isEmpty()){
                                return;
                            }
                            //2.判断版本是否最新,如果不是最新版本则更新
                            String downloadUrl="https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk";
                            String title="是否升级到4.1.1版本?";
                            String size="新版本大小:未知";
                            String msg="1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。";
                            int versionCode=20000;
                            try {
                                int version = getPackageManager().
                                        getPackageInfo(getPackageName(), 0).versionCode;
                                if (versionCode>version){
                                    LayoutInflater inflater = LayoutInflater.from(TestActivity.this);
                                    View view = inflater.inflate(R.layout.layout_dialog, null);
                                    AlertDialog.Builder mDialog = new AlertDialog.Builder(TestActivity.this,R.style.Translucent_NoTitle);
                                    mDialog.setView(view);
                                    mDialog.setCancelable(true);
                                    mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
                                        @Override
                                        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                                            return keyCode == KeyEvent.KEYCODE_BACK;
                                        }
                                    });
                                    upgrade= view.findViewById(R.id.button);
                                    TextView textView1= view.findViewById(R.id.textView1);
                                    TextView textView2= view.findViewById(R.id.textView2);
                                    TextView textView3= view.findViewById(R.id.textView3);
                                    textView4= view.findViewById(R.id.textView4);
                                    ImageView iv_close= view.findViewById(R.id.iv_close);
                                    progressBar= view.findViewById(R.id.progressBar);
                                    progressBar.setMax(100);
                                    textView1.setText(title);
                                    textView2.setText(size);
                                    textView3.setText(msg);
                                    upgrade.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            //动态询问是否授权
                                            int permission = ActivityCompat.checkSelfPermission(getApplication(),
                                                Manifest.permission.WRITE_EXTERNAL_STORAGE);
                                            if (permission != PackageManager.PERMISSION_GRANTED) {
                                                ActivityCompat.requestPermissions(TestActivity.this, PERMISSIONS_STORAGE,
                                                    1);
                                            }else {
                                                upgrade.setVisibility(View.INVISIBLE);
                                                down(downloadUrl);
                                            }
                                        }
                                    });
                                    iv_close.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            finish();
                                        }
                                    });
                                    mDialog.show();
                                }else {
    
                                }
                            } catch (PackageManager.NameNotFoundException e) {
                                e.printStackTrace();
                            }
                            mDisposable.dispose();
                        }
                        @Override
                        public void onError(Throwable e) {
                            test();
                        }
                        @Override
                        public void onComplete() {
    
                        }
                    });
        }
    

    //下载apk并更新进度条

    private void down(String downloadUrl){
            Observable.create(new ObservableOnSubscribe<Integer>() {
                @Override
                public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                    downApk(downloadUrl,emitter);
                }
            }).subscribeOn(Schedulers.io())// 将被观察者切换到子线程
                    .observeOn(AndroidSchedulers.mainThread())// 将观察者切换到主线程
                    .subscribe(new Observer<Integer>() {
    
                        @Override
                        public void onSubscribe(Disposable d) {
                            downDisposable = d;
                        }
                        @Override
                        public void onNext(Integer result) {
                            //设置ProgressDialog 进度条进度
                            progressBar.setProgress(result);
                            textView4.setText(result+"%");
                        }
                        @Override
                        public void onError(Throwable e) {
                            Toast.makeText(getApplication(),"网络异常!请重新下载!",Toast.LENGTH_SHORT).show();
                            upgrade.setEnabled(true);
                        }
                        @Override
                        public void onComplete() {
                            Toast.makeText(getApplication(),"服务器异常!请重新下载!",Toast.LENGTH_SHORT).show();
                            upgrade.setEnabled(true);
                        }
                    });
        }
    

    二、下载apk

    //下载apk

    private void downApk(String downloadUrl,ObservableEmitter<Integer> emitter){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(downloadUrl)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //下载失败
                breakpoint(downloadUrl,emitter);
            }
    
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.body() == null) {
                    //下载失败
                    breakpoint(downloadUrl,emitter);
                    return;
                }
                InputStream is = null;
                FileOutputStream fos = null;
                byte[] buff = new byte[2048];
                int len;
                try {
                    is = response.body().byteStream();
                    File file = createFile();
                    fos = new FileOutputStream(file);
                    long total = response.body().contentLength();
                    contentLength=total;
                    long sum = 0;
                    while ((len = is.read(buff)) != -1) {
                        fos.write(buff,0,len);
                        sum+=len;
                        int progress = (int) (sum * 1.0f / total * 100);
                        //下载中,更新下载进度
                        emitter.onNext(progress);
                        downloadLength=sum;
                    }
                    fos.flush();
                    //4.下载完成,安装apk
                    installApk(TestActivity.this,file);
                } catch (Exception e) {
                    e.printStackTrace();
                    breakpoint(downloadUrl,emitter);
                } finally {
                    try {
                        if (is != null)
                            is.close();
                        if (fos != null)
                            fos.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    
    }
    

    //断点续传

    private void breakpoint(String downloadUrl,ObservableEmitter<Integer> emitter){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(downloadUrl)
                .addHeader("RANGE", "bytes=" + downloadLength + "-" + contentLength)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //下载失败
                breakpoint(downloadUrl,emitter);
            }
    
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.body() == null) {
                    //下载失败
                    breakpoint(downloadUrl,emitter);
                    return;
                }
                InputStream is = null;
                RandomAccessFile randomFile = null;
                byte[] buff = new byte[2048];
                int len;
                try {
                    is = response.body().byteStream();
                    String root = Environment.getExternalStorageDirectory().getPath();
                    File file = new File(root,"updateDemo.apk");
                    randomFile = new RandomAccessFile(file, "rwd");
                    randomFile.seek(downloadLength);
                    long total = contentLength;
                    long sum = downloadLength;
                    while ((len = is.read(buff)) != -1) {
                        randomFile.write(buff,0,len);
                        sum+=len;
                        int progress = (int) (sum * 1.0f / total * 100);
                        //下载中,更新下载进度
                        emitter.onNext(progress);
                        downloadLength=sum;
                    }
                    //4.下载完成,安装apk
                    installApk(TestActivity.this,file);
                } catch (Exception e) {
                    e.printStackTrace();
                    breakpoint(downloadUrl,emitter);
                } finally {
                    try {
                        if (is != null)
                            is.close();
                        if (randomFile != null)
                            randomFile.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
    

    /**

    • 路径为根目录
    • 创建文件名称为 updateDemo.apk
      */
    private File createFile() {
        String root = Environment.getExternalStorageDirectory().getPath();
        File file = new File(root,"updateDemo.apk");
        if (file.exists())
            file.delete();
        try {
            file.createNewFile();
            return file;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null ;
    }
    
    

    三、安装apk

    3.1项目的src/res新建个xml文件夹再自定义一个file_paths文件

    <?xml version="1.0" encoding="utf-8"?>
    <paths  xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path name="name1" path="test1" />
    </paths>
    

    3.2在清单文件中配置

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.mydomain.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
    

    3.3安装apk

    //安装apk,包含7.0

    public void installApk(Context context, File file) {
        if (context == null) {
            return;
        }
        String authority = getApplicationContext().getPackageName() + ".fileProvider";
        Uri apkUri = FileProvider.getUriForFile(context, authority, file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //判读版本是否在7.0以上
        if (Build.VERSION.SDK_INT >= 24) {
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
        } else {
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        }
    
        context.startActivity(intent);
        //弹出安装窗口把原程序关闭。
        //避免安装完毕点击打开时没反应
        Process.killProcess(android.os.Process.myPid());
    }
    

    四、取消订阅

    @Override
    protected void onDestroy() {
        super.onDestroy();
        downDisposable.dispose();//取消订阅
    }
    

    五、自定义Dialog

    5.1UI

    见一、检测是否是最新版本,不是则更新

    5.2布局

    <?xml version="1.0" encoding="utf-8"?>
    

    <android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android
    xmlns:app=“http://schemas.android.com/apk/res-auto
    xmlns:tools=“http://schemas.android.com/tools
    android:layout_width=“match_parent”
    android:layout_height=“match_parent”>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/lib_update_app_top_bg"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <View
        android:id="@+id/view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/lib_update_app_info_bg"
        app:layout_constraintBottom_toTopOf="@+id/line"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView1" />
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:text="是否升级到1.0版本?"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView1" />
    
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:text="新版本大小:"
        android:textColor="#666"
        android:textSize="14sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView1" />
    
    
    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1,xxxxxxxx\n2,ooooooooo"
                android:textColor="#666"
                android:textSize="14sp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView2" />
        </LinearLayout>
    </ScrollView>
    
    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:background="@drawable/textview_round_red"
        android:gravity="center"
        android:minHeight="40dp"
        android:text="升级"
        android:textColor="@android:color/white"
        android:textSize="15sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/scrollView2" />
    
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintBottom_toBottomOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
    
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0%"
        android:textColor="#E94339"
        app:layout_constraintBottom_toTopOf="@+id/progressBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
    
    <android.support.constraint.Guideline
        android:id="@+id/guideline1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />
    
    <View
        android:id="@+id/line"
        android:layout_width="1dp"
        android:layout_height="50dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:background="#d8d8d8"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.501"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />
    
    <ImageView
        android:id="@+id/iv_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:src="@mipmap/lib_update_app_close"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/line" />
    
    <android.support.constraint.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.2" />
    

    </android.support.constraint.ConstraintLayout>

    5.3其他文件

    5.3.1textview_round_red.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape  xmlns:android="http://schemas.android.com/apk/res/android">
    
        <!-- view背景色 -->
        <solid android:color="#E94339" />
        <!-- 边框颜色 宽度 -->
        <stroke
            android:width="1dip"
            android:color="#E94339" />
        <!-- 边框圆角 -->
        <corners
            android:bottomRightRadius="5dp"
            android:topRightRadius="5dp"
            android:bottomLeftRadius="5dp"
            android:topLeftRadius="5dp"/>
    </shape >
    

    5.3.2lib_update_app_info_bg.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:shape="rectangle">
        <corners
            android:bottomLeftRadius="5dp"
            android:bottomRightRadius="5dp"/>
        <solid android:color="@android:color/white"/>
    </shape>
    

    5.3.3styles文件

    <style name="Translucent_NoTitle" parent="android:style/Theme.Dialog">
    
        <item name="android:background">#00000000</item> <!-- 设置自定义布局的背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>  <!-- 设置window背景透明,也就是去边框 -->
    </style>
    

    5.4图片

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 降级完毕问题出现了,他会自动下载并升级系统,设置中关闭也没有用,那怎么办,本文就是解决这个问题的 解决flyme自动升级的问题 1、下载安装ES文件浏览器,巧了歪小胖曾今发布过这个工具,请前往《ES文件浏览器 v...
  • android 系统关闭系统自动旋转屏幕情况下利用设备感应器(方向传感器)实现横竖屏切换2.SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE);3.在Activity的生命周期方法中注册与移除...
  • 2.当设备长时间锁屏会导致CachedBluetoothDevice自动清空,如果蓝牙断开就不会自动连接的处理 实现步骤 监控蓝牙断开连接状态时发生哪些改变媒体音频与通话音频(a2dp与hfp) 1.在...
  • 每次打开Android studio时总是出现烦人的更新提醒,那么应该怎么办呢,这里小编为大家介绍一下如何关闭Android studio打开时的更新提醒软件名称:Android Studio v2.2.2.0 官方最新版(apk应用开发工具)软件大小:1.6...
  • 每次打开vscode编辑器,顶部总会提出版本更新提示,着实有点厌烦,那该怎么关闭自动更新提示呢?下面小编简单分享下vscode关闭自动更新提示的设置方法,希望对大家有所帮助!vscode关闭自动更新提示的方法步骤1、...
  • 主要介绍了快速关闭android studio的自动保存功能教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 关于手机的自动更新相信大家都是比较关注的,在不想更新的时候若是手机进行了自动更新操作也是比较令人抓狂的,当然了,对于小米9这款手机来说,若不想手机自动更新只需要将该功能关闭就可以了。关于小米9这款手机,...
  • Android APP 自动更新实现(适用Android9.0)

    千次阅读 多人点赞 2021-02-20 21:14:10
    Android App自动更新基本上是每个App都需具备的功能,参考网上各种资料,自己整理了下,先来看看大致的界面: 一、实现思路: 1.发布Android App时,都会生成output-metadata.json文件和对应的apk文件。(不...
  • 关闭firefox的自动更新

    2020-12-21 14:14:30
    想必大家也都有下载firefox之后被自动更新的苦恼吧? 特别在安装最新版之后很难恢复到旧版的设置 通过 firefox release notes 关键词搜索到的第一条版本列表是 ...从这个列表里下载的firefox_installer每次打开...
  • adb关闭系统自动更新

    千次阅读 2021-07-28 22:28:18
    “关于手机”,连续点击7次“版本号”栏,屏幕将出现提示“您正处于开发者模式”,返回上一步“系统”界面,打开“开发人员选项”,关闭自动系统更新”,打开“USB调试”以及打开“仅充电”模式下允许ADB调试。...
  • 安卓9.0默认需要关闭连网自动更新时间开关是到frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中修改def_auto_time属性为false即可
  • 本篇文章是对android实现关闭或开启移动网络数据进行了详细的分析介绍,需要的朋友参考下
  • 通知栏内更新,下载完成自动安装并清除消息通知,已修改测试,可直接用于项目
  • 目标是删除/system/etc/security/otacerts.zip   1,必须取得root权限 2,必须将/system加载成可写的 3,删除或者改名 ...mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system ...mv otacerts...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,265
精华内容 49,706
关键字:

安卓关闭自动更新