極光下載站 - 打造齊全的綠色軟件家園

    極光下載站

    當前位置:極光下載站 > 玩機教程 > 怎樣禁止安卓app強制更新,禁止app強制更新方法

    怎樣禁止安卓app強制更新,禁止app強制更新方法

    時間:2019-04-17 11:42:54作者:fzg人氣:10087

    安卓手機能禁止某個app自動更新嗎,安卓軟件怎么阻止強制自動更新?本篇文章主要介紹了android中強制更新app實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

    有些應用的有時候需要強制更新,這時候應用只能更新否則就不能用了(開發者為了修復一些必要的bug)。

    這樣的話,只能乖乖升級或者卸載。

    這些是不受Android系統約束的,沒法禁止掉。

    android中強制更新app實例代碼

    本篇文章主要介紹了android中強制更新app實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

    推薦第三種方式,簡單快捷不卡。

    第一種:jjdxm_update

    GitHub地址:jjdxmashl/jjdxm_update

    效果圖:

    點擊立即更新,程序會在后臺下載,通知欄有下載進度。這個時候手機系統很卡,可能由于是下載app的原因吧。下載完成后彈出安裝界面

    簡介:

    這是大神jjdxmashl的開源項目,下載地址見上方。有版本更新、手動更新、靜默更新、自動更新4種情況。應用內更新,實現類是友盟自動更新sdk的模式,用戶使用前只需要配置自己的服務器更新檢查接口即可(必須接口),也可以擴展加入一個接口作為在線參數配置來實現,可以實現下面的4種2更新方式和是否強制更新組合使用,支持get、post方式請求網絡,默認是get請求。

    4種更新檢查類型

    手動更新:手動檢測更新(所有網絡類型環境檢測并提示主要用于點擊檢測使用)

    自動更新:自動檢測更新(所有網絡類型環境檢測并提示)

    僅WiFi自動檢測更新(只有WiFi網絡類型環境檢測并提示)

    靜默更新:僅WiFi自動檢測下載(只有WiFi網絡類型環境檢測、下載完才提示)

    2種強制更新方式

    在更新檢查返回后,直接設置update.setForce(true)

    配合在線參數使用,通過在線參數返回的數據設置UpdateHelper.getInstance().setForced(true)

    上述4中更新檢查 結合 2種強制更新,適用于:上一個app版本有重大漏洞,修改在線 參數統一控制所有的app用戶,不更新就不可以使用app。

    主要原理:服務器上修改參數值,app端獲取后進行判斷,如果是強制更新,則在打開應用時就提示有新版本的app,更新完成后才可以使用該app;更新為完成,則提示框不消失,點擊back鍵則退出應用。

    強制更新的使用

    下面演示的是強制更新的情況,

    Step1:添加依賴庫

    在主程序的build.gradle文件的dependencies屬性中添加依賴庫

    ?

    1

    2

    3

    4

    5

    6

    dependencies {

    ...

    1.update:jjdxm-update:1.0.5'

    1.download:jjdxm-download:1.0.3'

    ...

    }

    Step2:配置更新接口參數信息,初始化參數接口和解析參數

    必須配置的是在線更新接口和該接口返回數據的解析
    可選的是在線參數接口和該接口返回數據的解析(一般用不到),在線參數可以隨機定義零個或多個不同意義的參數來達到在線修改apk的部分特性。

    Step2-1 創建一個自動更新的配置類


    方法+參數含義
    setCheckUrl(checkUrl)checkUrl:更新app的接口
    setCheckJsonParser(new ParseData() {return update;}只能返回Update類型,解析可以隨便解析,但要把解析到的數據賦值給update,再把update返回


    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    publicclassUpdateConfig {

    privatestaticfinalString TAG =&UpdateConfig&;

    privatestaticString checkUrl =&http://192.168.1.11:8080/cmcc/jsoninfo&;


    publicstaticvoidinit(Context context) {

    UpdateHelper.init(context);

    UpdateHelper.getInstance()

    .setMethod(RequestType.get)// 可填:請求方式,默認為get請求

    .setCheckUrl(checkUrl)// 必填:數據更新接口,方法有重載帶參數的setCheckUrl(checkUrl, params)

    .setDialogLayout(R.layout.custom_update_dialog)//自定義的更新dialog

    .setCheckJsonParser(newParseData() {// 必填:用于從數據更新接口獲取的數據response中。解析出Update實例。以便框架內部處理

    @Override

    publicUpdate parse(String response) {

    Log.d(TAG,&response=&+ response);

    //解析json數據

    Gson gson =newGson();

    UpDateBean upDateBean = gson.fromJson(response, UpDateBean.class);

    UpDateBean.DataBean data = upDateBean.getData();


    Update update =newUpdate();

    update.setForce(data.isForce());

    update.setApkSize(data.getV_size());

    update.setUpdateContent(data.getUpdate_content());

    update.setUpdateUrl(data.getDownload_url());

    update.setVersionCode(Integer.parseInt(data.getV_code()));

    update.setVersionName(data.getV_name());

    returnupdate;//只能返回Update類型,否則報錯,所以我們要把解析的javaBean數據賦值給update,然后將update返回

    }

    });

    }

    }

    checkUrl:是放在tomcat中的


    復制代碼 代碼如下:


    private static String checkUrl = &http://192.168.1.11:8080/cmcc/jsoninfo&;


    jsoninfo:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    {

    &code&: 0,

    &data&: {

    &download_url&:&http://192.168.1.11:8080/cmcc/demo.apk &,

    &force&:false,

    &update_content&:&測試更新接口&,

    &v_code&: 10,

    &v_name&:&v1.1&,

    &v_sha1&:&7db76e18ac92bb29ff0ef012abfe178a78477534&,

    &v_size&: 12365909

    }

    }

    Step2-2 解析更新接口返回的數據

    上面我用的是Gson.jar,所以module的build.gradle還需要添加gson

    ?

    1

    2

    3

    4

    5

    6

    7

    dependencies {

    ...

    1.update:jjdxm-update:1.0.5'

    1.download:jjdxm-download:1.0.3'

    compile 'com.google.code.gson:gson:2.7'

    ...

    }

    javaBean類UpDateBean,直接創建這個類,右鍵Generate—>GsonFormat—>將json數據復制到編輯框中—>OK—>選中這些參數,即可生成set() + get()方法。

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    publicclassUpDateBean {


    /**

    * code : 0

    * data : {&download_url&:&http://115.159.45.251/software/feibei_live1.0.0.16070810_zs.apk &,&force&:false,&update_content&:&測試更新接口&,&v_code&:&10&,&v_name&:&v1.0.0.16070810&,&v_sha1&:&7db76e18ac92bb29ff0ef012abfe178a78477534&,&v_size&:12365909}

    */

    privateintcode;

    /**

    * download_url : http://115.159.45.251/software/feibei_live1.0.0.16070810_zs.apk

    * force : false

    * update_content : 測試更新接口

    * v_code : 10

    * v_name : v1.0.0.16070810

    * v_sha1 : 7db76e18ac92bb29ff0ef012abfe178a78477534

    * v_size : 12365909

    */


    privateDataBean data;


    publicintgetCode() {

    returncode;

    }


    publicvoidsetCode(intcode) {

    this.code = code;

    }


    publicDataBean getData() {

    returndata;

    }


    publicvoidsetData(DataBean data) {

    this.data = data;

    }


    publicstaticclassDataBean {

    privateString download_url;

    privatebooleanforce;

    privateString update_content;

    privateString v_code;

    privateString v_name;

    privateString v_sha1;

    privateintv_size;

    publicString getDownload_url() {

    returndownload_url;

    }

    publicvoidsetDownload_url(String download_url) {

    this.download_url = download_url;

    }


    publicbooleanisForce() {

    returnforce;

    }


    publicvoidsetForce(booleanforce) {

    this.force = force;

    }


    publicString getUpdate_content() {

    returnupdate_content;

    }

    publicvoidsetUpdate_content(String update_content) {

    this.update_content = update_content;

    }

    publicString getV_code() {

    returnv_code;

    }

    publicvoidsetV_code(String v_code) {

    this.v_code = v_code;

    }

    publicString getV_name() {

    returnv_name;

    }

    publicvoidsetV_name(String v_name) {

    this.v_name = v_name;

    }

    publicString getV_sha1() {

    returnv_sha1;

    }

    publicvoidsetV_sha1(String v_sha1) {

    this.v_sha1 = v_sha1;

    }

    publicintgetV_size() {

    returnv_size;

    }

    publicvoidsetV_size(intv_size) {

    this.v_size = v_size;

    }

    }

    }

    Step3:在Application中oncreate()方法中調用

    1

    UpdateConfig.init(this);

    Step4:在MainActivity的onCrete()中檢查更新

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    UpdateHelper.getInstance()

    .setUpdateType(UpdateType.autoupdate)//自動檢查更新

    .setForceListener(newForceListener() {//強制更新監聽,true則退出app

    @Override

    publicvoidonUserCancel(booleanforce) {

    if(force) {

    finish();

    }

    }

    })

    .check(MainActivity.this);

    源碼下載:UpDateDemo2

    第二種: 判斷VersionCode,xUtils實現下載

    根據versionCode判斷是否彈出更新dialog,需要更新的話,用戶點擊“確定”,利用xUtils實現下載,progressDialog顯示下載進度,下載完成后,彈出是否安裝的dialog,是:安裝app,否:退出(MainActivity.this.finish())。

    效果圖

    Step1: 請求更新接口,根據versionCode判斷是否更新

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    // 獲取本地版本號

    PackageManager packageManager = getPackageManager();

    try{

    packageInfo = packageManager.getPackageInfo(getPackageName(),0);

    }catch(NameNotFoundException e) {

    e.printStackTrace();

    }finally{

    nativeVversionCode = packageInfo.versionCode;

    }


    // 獲取服務器版本號

    HttpUtils http =newHttpUtils();

    String url =&http://192.168.8.101:8080/QQ/jsoninfo&;

    http.send(HttpMethod.POST, url,newRequestCallBack<String>() {


    @Override

    publicvoidonFailure(HttpException exception, String msg) {

    ToastUtil.showShortToast(getBaseContext(),&獲取服務器版本失敗,請檢查網絡,n App5秒后將退出&);

    handler.sendEmptyMessageDelayed(123,5000);

    }


    @Override

    publicvoidonSuccess(ResponseInfo<String> respinseInfo) {

    try{

    JSONObject obj =newJSONObject(respinseInfo.result);

    remoteVersionCode = obj.getInt(&versioncode&);

    if(remoteVersionCode > nativeVversionCode) {

    ToastUtil.showLongToast(getBaseContext(),&請安裝最新的版本&);

    downLoadApp();

    }

    }catch(JSONException e) {

    e.printStackTrace();

    }

    }

    });


    privateHandler handler =newHandler(){

    publicvoidhandleMessage(Message msg) {

    if(msg.what ==123) {

    MainActivity.this.finish();

    }

    };

    };

    Step2: 下載最新版本

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    protectedvoiddownLoadApp() {

    target = Environment.getExternalStorageDirectory().getAbsolutePath() +&/QQ.apk&;

    String url =&http://192.168.8.101:8080/QQ/QQ.apk&;

    HttpUtils http =newHttpUtils();

    http.download(url, target,newRequestCallBack<File>() {


    @Override

    publicvoidonFailure(HttpException exception, String msg) {

    ToastUtil.showShortToast(getBaseContext(),&下載失敗&);

    }


    @Override

    publicvoidonSuccess(ResponseInfo<File> responseInfo) {

    dialog.dismiss();

    ToastUtil.showShortToast(getBaseContext(),&下載成功&);

    // 安裝apk

    installApk();

    }


    @Override

    publicvoidonLoading(longtotal,longcurrent,booleanisUploading) {

    super.onLoading(total, current, isUploading);

    initProgressDialog(total,current);

    }

    });

    }

    Step3: 安裝apk

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    protectedvoidinstallApk() {

    newAlertDialog.Builder(MainActivity.this)

    .setTitle(&版本更新&)

    .setMessage(&最新版本正在更新中...&)

    .setCancelable(false)

    .setPositiveButton(&確定&,newDialogInterface.OnClickListener() {


    @Override

    publicvoidonClick(DialogInterface dialog,intwhich) {

    //安裝app

    Intent intent =newIntent();

    intent.setAction(&android.intent.action.VIEW&);

    intent.addCategory(&android.intent.category.DEFAULT&);

    Uri data = Uri.parse(&file://&+ target);

    intent.setDataAndType(data,&application/vnd.android.package-archive&);

    startActivity(intent);

    MainActivity.this.finish();

    }

    })

    .setNegativeButton(&退出&,newDialogInterface.OnClickListener() {


    @Override

    publicvoidonClick(DialogInterface dialog,intwhich) {

    MainActivity.this.finish();

    }

    }).show();

    }

    Step4: 調用系統安裝界面

    標簽安卓系統,系統app
    查看所有評論+

    網友評論

    網友
    您的評論需要經過審核才能顯示
    亚洲精品无码久久久| 亚洲&#228;v永久无码精品天堂久久| 亚洲国产精品无码久久九九| 亚洲色成人网站WWW永久四虎| 亚洲国产午夜精品理论片| 亚洲精品一卡2卡3卡三卡四卡| 亚洲国产精品一区二区久久hs| 亚洲人AV永久一区二区三区久久| 亚洲一区二区三区高清在线观看| 亚洲国产综合精品| 亚洲精品不卡视频| 亚洲图片中文字幕| 亚洲欧洲尹人香蕉综合| 亚洲首页在线观看| 久久久久亚洲精品日久生情| 久久久亚洲精品视频| 亚洲精品白浆高清久久久久久 | 中文字幕第一页亚洲| 亚洲va中文字幕无码| 亚洲Aⅴ无码一区二区二三区软件| 狼人大香伊蕉国产WWW亚洲| MM1313亚洲精品无码久久| 亚洲AV网一区二区三区| vvvv99日韩精品亚洲| 国产精品亚洲精品爽爽| 色噜噜噜噜亚洲第一| 激情小说亚洲色图| 亚洲成人国产精品| 亚洲男女内射在线播放| 亚洲一区精品伊人久久伊人| 亚洲精品天堂成人片?V在线播放| mm1313亚洲精品无码又大又粗 | 久久久久亚洲精品无码蜜桃| 亚洲人成亚洲精品| 中文字幕亚洲精品| 91午夜精品亚洲一区二区三区| 亚洲国产精品成人精品小说| 亚洲一区无码中文字幕乱码| 中文日韩亚洲欧美制服| 亚洲日本VA午夜在线电影| 亚洲精品无码久久久久APP|