Android如何讓APP無(wú)法在指定的系統(tǒng)版本上運(yùn)行(實(shí)現(xiàn)方法)
隨著市面上越來(lái)越多三方APP的出現(xiàn),某些手機(jī)廠商也開始對(duì)這些APP進(jìn)行了安裝限制或者運(yùn)行限制,或者三方APP自身的版本過(guò)低,無(wú)法被特定的系統(tǒng)版本所支持。
今天我將要模擬實(shí)現(xiàn)一個(gè)“由于APP自身版本過(guò)低、導(dǎo)致無(wú)法在當(dāng)前的系統(tǒng)版本上運(yùn)行”的功能效果。
實(shí)現(xiàn)思路如下:
- 要獲得APP的目標(biāo)運(yùn)行版本,也要知道系統(tǒng)的編譯版本
- 通過(guò)版本比較,在進(jìn)入該APP時(shí),給用戶做出“不支持運(yùn)行”的提示
- 用戶確認(rèn)提示后,直接退出該APP
關(guān)鍵點(diǎn)是 targetSdkVersion 的使用,源碼如下:
1、主Activity
public class TargetSdkVersionDemo extends Activity { @Override protected void onCreate(Bundle onSavedInstance) { super.onCreate(onSavedInstance); setContentView(R.layout.target_sdk_version_demo); int appTargetSdkVersion = getApplicationInfo().targetSdkVersion; Log.i("TargetSdkVersionDemo", "targetsdkversion " + appTargetSdkVersion); // 我們假設(shè)這個(gè)APP的目標(biāo)運(yùn)行版本不高于 API Level 26 if (appTargetSdkVersion <= Build.VERSION_CODES.O) { showNotSupportDialog(appTargetSdkVersion); } } private void showNotSupportDialog(int version) { new AlertDialog.Builder(this) .setMessage("該APP的目標(biāo)運(yùn)行版本是 " + version + ",低于手機(jī)當(dāng)前的版本,不支持運(yùn)行!") .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 退出程序 finish(); } }) .create() .show(); } }
2、在AndroidManifest.xml中需要定義 uses-sdk 這個(gè)標(biāo)簽的 targetSdkVersion 屬性:
<uses-sdk android:targetSdkVersion="25" />
注意:
如果在 app 目錄下的 build.gradle 文件中定義了 targetSdkVersion,則會(huì)覆蓋 AndroidManifest中的值,源碼中有說(shuō)明:
3、效果圖如下:
我們注意到程序中使用的是 getApplicationInfo().targetSdkVersion,說(shuō)明這個(gè)變量是 ApplicationInfo.java 的成員變量,這個(gè)值是在安裝APK的過(guò)程中、由系統(tǒng)服務(wù) PackageManagerService 解析賦值的,解析的源碼位于 frameworks\base\core\java\android\content\pm\PackageParser.java 中:
可以看到:
- 先解析 TAG_USES_SDK(uses-sdk)
- 再解析屬性名 targetSdkVersion 以及 minSdkVersion 的值
最后再賦值給 applicationInfo對(duì)象的:
pkg.applicationInfo.targetSdkVersion = targetSdkVersion
到此這篇關(guān)于Android如何讓APP無(wú)法在指定的系統(tǒng)版本上運(yùn)行的文章就介紹到這了,更多相關(guān)android app無(wú)法運(yùn)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Fragment的靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)創(chuàng)建步驟
這篇文章主要介紹了Android Fragment的靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)創(chuàng)建步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能
這篇文章主要介紹了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能,感興趣的小伙伴們可以參考一下2015-12-12Listview中Button搶占焦點(diǎn)的解決方法
在程序開發(fā)中經(jīng)常見到listview button搶占焦點(diǎn)的問(wèn)題,怎么回事什么原因呢?下面小編給大家?guī)?lái)了Listview中Button搶占焦點(diǎn)的解決方法,感興趣的朋友一起看下吧2016-08-08Android音頻開發(fā)之錄制音頻(WAV及MP3格式)
這篇文章主要為大家介紹了Android如何實(shí)現(xiàn)音頻文件的錄制(WAV及MP3格式),文中代碼具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12一文帶你看懂Android Application啟動(dòng)流程是怎樣的
談到Android Application的啟動(dòng)流程,很多文章都是各種源碼類和方法的一堆調(diào)用關(guān)系,這樣的文章就算看一百遍,也只是云里霧里。源碼得看,但是最好不要一下子深陷到源碼的細(xì)節(jié)之中,不可自拔。這里站在前人的基礎(chǔ)之上做一個(gè)總結(jié)2021-10-10Android RecyclerView的Item點(diǎn)擊事件實(shí)現(xiàn)整理
這篇文章主要介紹了Android RecyclerView的Item點(diǎn)擊事件實(shí)現(xiàn)整理的相關(guān)資料,需要的朋友可以參考下2017-01-01Android實(shí)現(xiàn)讀取掃碼槍內(nèi)容(條形碼)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)讀取掃碼槍內(nèi)容、條形碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09