新聞中心
Android 讀取已安裝應(yīng)用列表需要申請(qǐng)權(quán)限嗎?
這里我先公布下答案:不需要
在望城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需制作網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷(xiāo)型網(wǎng)站,外貿(mào)網(wǎng)站制作,望城網(wǎng)站建設(shè)費(fèi)用合理。
我要實(shí)現(xiàn)讀取已安裝應(yīng)用列表功能,Google了一下,可以通過(guò)PackageManager.getInstalledPackages()方法獲取,我手頭有三臺(tái)手機(jī),分別是華為Nexus 5X、Meta9、Vivo X20,寫(xiě)了個(gè)Demo在這三個(gè)手機(jī)上進(jìn)行測(cè)試,測(cè)試結(jié)果如下:
我沒(méi)有申請(qǐng)任何權(quán)限,Vivo X20為什么會(huì)出現(xiàn)申請(qǐng)讀取已安裝應(yīng)用列表權(quán)限對(duì)話(huà)框呢?為什么是有時(shí)候能獲取到全部已安裝應(yīng)用列表,有時(shí)候獲取不到?
Google一下,看有沒(méi)有和我類(lèi)似的問(wèn)題,找到了一篇:
Android 如何完整的獲取到用戶(hù)已安裝應(yīng)用列表
這篇文章中,作者有個(gè)結(jié)論:『國(guó)內(nèi)部分廠商比如華為、oppo,他們將”獲取用戶(hù)已安裝應(yīng)用列表”的權(quán)限暴露給了用戶(hù),讓用戶(hù)可以自由決定允許或者禁止應(yīng)用訪問(wèn)該信息。』
Nexus 5X中沒(méi)有找到讀取已安裝應(yīng)用列表權(quán)限。
這里有提到華為,我打開(kāi)meta 9的權(quán)限列表看了一下有讀取已安裝應(yīng)用列表權(quán)限,我的Demo對(duì)應(yīng)的這個(gè)權(quán)限默認(rèn)是打開(kāi)的,所以meta 9是能獲取到全部已安裝應(yīng)用列表。
再看下Vivo X20,在打開(kāi)Demo的時(shí)候彈出申請(qǐng)權(quán)限對(duì)話(huà)框了,說(shuō)明Vivo也屬于那部分國(guó)內(nèi)廠商,由于在彈出申請(qǐng)讀取已安裝應(yīng)用列表權(quán)限對(duì)話(huà)框時(shí),我允許了,所以打開(kāi)Vivo X20的讀取已安裝應(yīng)用列表權(quán)限時(shí),這里的狀態(tài)是打開(kāi)的,但是,點(diǎn)進(jìn)去一看,暗藏玄機(jī),這里還有一個(gè) 安全等級(jí),分為高、中、低 ,我的Demo屬于高,看看其他應(yīng)用呢?微信安全等級(jí)屬于低、支付寶屬于低,讀取不到應(yīng)用列表難道和這個(gè) 安全等級(jí) 有關(guān)系嗎?
我手動(dòng)將我的Demo的 安全等級(jí) 調(diào)整為低,再打開(kāi)Demo,奇跡發(fā)生了,沒(méi)有彈出申請(qǐng)讀取已安裝應(yīng)用列表權(quán)限對(duì)話(huà)框,并且獲取到了全部已安裝應(yīng)用列表。
Android 讀取已安裝應(yīng)用列表不需要申請(qǐng)權(quán)限,因?yàn)锳ndroid權(quán)限列表中沒(méi)有權(quán)限是用于讀取已安裝應(yīng)用列表的。
如果想要獲取Vivo X20這種有 安全等級(jí) 的手機(jī)中的已安裝應(yīng)用列表,由于這種 安全等級(jí) 我們無(wú)法決定,所以只能通過(guò)反向查找的方式,即通過(guò)包名能否找到應(yīng)用,從而判斷是否安裝了某應(yīng)用。
這種方法獲取不到全部已安裝應(yīng)用列表,只能獲取到指定的應(yīng)用。
如果有比較了解權(quán)限的同學(xué)覺(jué)得我有寫(xiě)的不對(duì)的地方,或者對(duì)于獲取已安裝應(yīng)用列表有更好的方法,歡迎留言交流!
Android多級(jí)列表
將課本的章節(jié)以多級(jí)列表的形式顯示。
1.嵌套多級(jí) RecyclerView,兩級(jí)列表還好說(shuō),每多一級(jí)都是一場(chǎng)噩夢(mèng)。
2.ExpandableListView?但是ExpandableListView只支持兩級(jí),不滿(mǎn)足需求。
3.一個(gè)RecyclerView或者 ListView 來(lái)實(shí)現(xiàn),每一級(jí)節(jié)點(diǎn)的要素有:當(dāng)前節(jié)點(diǎn)id、父級(jí)節(jié)點(diǎn)id即pid,顯示的內(nèi)容。
控制父子之間聯(lián)動(dòng)的選中與取消狀態(tài),只需調(diào)用setChecked方法既可,注意如果在setOnCheckedChangeListener中處理會(huì)有問(wèn)題:因?yàn)槿绻庸?jié)點(diǎn)/父節(jié)點(diǎn)選中或者取消需要刷新頁(yè)面,而刷新頁(yè)面又會(huì)觸發(fā)viewHolder.cb.setChecked(true/false);的判斷從而又會(huì)進(jìn)入setOnCheckedChangeListener,會(huì)導(dǎo)致如果父節(jié)點(diǎn)選中某些子節(jié)點(diǎn)取消不了的情況。
通過(guò)一個(gè)ListView來(lái)展示所有數(shù)據(jù),每一級(jí)內(nèi)容的顯示根據(jù)當(dāng)前展示數(shù)據(jù)的等級(jí)縮進(jìn)一定的padding值,讓我們看起來(lái)有縮進(jìn)效果。
使用過(guò)程中感覺(jué)不是很舒服的地方在于最終用于顯示在界面實(shí)體Bean并不是我們傳進(jìn)去的數(shù)據(jù),而是經(jīng)過(guò)轉(zhuǎn)化并且過(guò)濾的數(shù)據(jù),這樣最直接的影響就是在我新增數(shù)據(jù)的數(shù)據(jù)之后,拿著Adapter來(lái)刷新的時(shí)候,并沒(méi)有任何效果。因?yàn)槲覀儧](méi)有將后面新加的數(shù)據(jù)進(jìn)行轉(zhuǎn)化。
而我們?nèi)绾文茉诓桓淖冊(cè)袛?shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,添加我們的新內(nèi)容,并保持原有的選中或者展開(kāi)正常呢?我的想法是這樣的,如果可以直接給它傳入轉(zhuǎn)化后的Node節(jié)點(diǎn)類(lèi)型數(shù)據(jù)就好了,我想到了繼承,讓實(shí)體類(lèi)去繼承基類(lèi)Node,但一旦繼承Node則意味著實(shí)體類(lèi)就不能再繼承其他類(lèi)了,感覺(jué)不是很靈活,而且也影響了實(shí)體類(lèi)本身的結(jié)構(gòu)。后來(lái)想到了包裝設(shè)計(jì)模式的一些東西,那我就在實(shí)體類(lèi)外再包上一層,也就是將實(shí)體類(lèi)傳給Node,最終我們使用的還是Node,但也可以用node.bean很輕松的取出實(shí)體類(lèi)做其他操作,并且實(shí)體類(lèi)本身的結(jié)構(gòu)并沒(méi)有被破壞。
在此基礎(chǔ)上,因?yàn)槲覀兊腘ode不需要轉(zhuǎn)化重新創(chuàng)建,那么它就可以保存一些狀態(tài)比如展開(kāi)、選中等等,而在新加入數(shù)據(jù)時(shí)只需標(biāo)記下新加入的數(shù)據(jù),只需對(duì)新加入的數(shù)據(jù)進(jìn)行初始化狀態(tài),已有老數(shù)據(jù)不進(jìn)行狀態(tài)改變:
項(xiàng)目地址:
原文連接:
Android 下拉列表Spinner
在UI中經(jīng)常會(huì)使用到下拉列表,在android控件中有兩個(gè)下拉列表控件:
在xml中添加控件的使用:
主題:
這些都沒(méi)有達(dá)到我要的效果:
android:entries // 傳入的是values文件夾下的arrayx.xml內(nèi)的數(shù)據(jù)
android:spinnerMode //顯示模式有popmenu和dialog兩種
android:prompt //當(dāng)顯示模式為dialog時(shí)生效,作用為顯示dialog的標(biāo)題內(nèi)容
分享題目:android列表,android列表視圖
鏈接地址:http://www.ef60e0e.cn/article/hogesj.html