[Android] 關於getinstalledpackages參數的分析

來源:互聯網
上載者:User

標籤:

reference to  : http://blog.csdn.net/luojiusan520/article/details/47696891

getinstalledpackages()的方法擷取到安裝應用資訊 ,他接收一個int flags的值,然後在網上查詢資料全是 將Int  值 設定為0  即比如

 

PackageManager manager = context.getPackageManager();// 得到包的管理者
List<PackageInfo> installedPackages = manager.getInstalledPackages(0);

 

本想查看原始碼看看0是什麼參數。結果就出現了問題,參數如下

public static final int GET_ACTIVITIES              = 0x00000001;
public static final int GET_RECEIVERS               = 0x00000002;
public static final int GET_SERVICES                = 0x00000004;
public static final int GET_PROVIDERS               = 0x00000008;
...0x00000010;
0x00000020;
0x00000040;
0x00000040;
0x00000080;
0x00000100;
0x00000200;
0x00000400;
0x00000800;
0x00001000;
0x00002000;
0x00004000; 

            每個flag參數的意思,見名思意是用來擷取相應的包資訊,全部是16進位表示的int的數。但是疑惑沒有0,網上查詢沒有相應的資訊,於此思考許久留下筆記留下印象。

通過觀察原始碼幫組我分析的資訊如下:

(1)觀察原始碼注釋flags Additional option flags. Use any combination of   ....flag       

 方法前後文英文大意:額外資訊通過flag獲得,使用flag的任何組合。

    看到這條原始碼組合(combination )二字其實問題就解決一半了。            意思是可以用來組合 任意的flag ,添加任何flag到參數中;

 

(2)通過觀察其他 參數 既static final int 的值 

比如:

public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;

 public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;

 public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;

為何都是設定的 10進位的值,,看到這裡我想我已經解決了問題,

 

(3)分析方法參數的值,換算為2進位;

依次為:00000001       00000010             00000100        00001000    ...................    這樣設定的好處就是 任意組合的特徵碼都是唯一的。不會參生混淆

比如               16+8 = 24                24隻能由參數中此兩個數而得到。

32+2=34                     同理

64 +8=72                 同理            

  

如果flag採用 十進位1  ,2,3,4,5,6,7的方式進行 處理的話      當方法中數為 特定的數時候可能出現不同的組合,所以就不能使用此方式,因為電腦是不會智能處理人的需求的。

 

得出我的結論如下:

參數0 是   表示不接受任何flag資訊,當然也能夠返回得到一些基本的包資訊!,但是如 PERMISSIONS  ,RECEIVERS  等等就返回不了,如果flag值不匹配 而方法中強行擷取相對應的值,傳回值為Null,已經做過測試

 

延伸: PackageManager.GET_ACTIVITIES+ PackageManager.GET_RECEIVERS    等於 3; 參數中填入3則得到這兩個的flag對應的資訊。

注意點 :PackageManager.GET_ACTIVITIES| PackageManager.GET_ACTIVITIES    和上為一樣的效果。 因為相或的話 同位只要有一個1則為1,

[Android] 關於getinstalledpackages參數的分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.