日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

android 判断是否为系统应用

發(fā)布時(shí)間:2023/12/3 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 判断是否为系统应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一定要用&號(hào)?

?

方法四:這個(gè)方法應(yīng)該是最優(yōu)的。

1 ApplicationInfo appInfo = p.applicationInfo;
2 ???? /**
3 ????? * Value for {@link #flags}: if set, this application is installed in the
4 ????? * device's system image.
5 ????? */
6 if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0 )
7 ???? //系統(tǒng)程序
8 else

?????? //不是系統(tǒng)程序

?

?

在google上輸入以上的關(guān)鍵字+ android,可以搜到的代碼:

1 List<PackageInfo> packs = getPackageManager().getInstalledPackages( 0 );

?

雖然,有些代碼號(hào)稱可以過濾掉系統(tǒng)自身的應(yīng)用程序,但是只要細(xì)看代碼就會(huì)發(fā)現(xiàn),好像里面的那個(gè)布爾變量沒有起到什么過濾的作用。

  方法一 :通過獲取的安裝包(包括安裝的與系統(tǒng)自身的應(yīng)用程序),對(duì)其android.content.pm.PackageInfo的packageName 進(jìn)行過濾,

但是Anrodi與google的包比較容易過濾掉,但需要對(duì)不同產(chǎn)商進(jìn)行適配;

  方法二 :枚舉 /data/app 文件夾,其下的*.apk文件 就是本機(jī)安裝的軟件,而/system/App下的*.apk文件就是系統(tǒng)自帶的軟件,

由于普通的程序是無(wú)法讀取這兩個(gè)文件夾的,需要root權(quán)限吧,因此該方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 權(quán)限 還是不能枚舉出文件)

雖然不能枚舉文件夾 "/data/app/",但我們可以訪問(read)文件夾"/data/app/"下的所有文件,因此可以用如下的方法來(lái)獲取本機(jī)上已經(jīng)安裝的軟件(排除系統(tǒng)的應(yīng)用程序):

01 PackageManager pckMan = getPackageManager();
02 List<PackageInfo> packs = pckMan.getInstalledPackages( 0 );
03 count = packs.size();
04 String name;
05 int installedNum = 0 ;
06 for ( int i = 0 ; i < count; i++) {
07 ???????????????? PackageInfo p = packs.get(i);
08 ???? if (p.versionName == null )
09 ???????? continue ;
10 ??? ?
01 ????????????? //判斷該軟件包是否在/data/app目錄下
02 ???? File f1 = new File(? "/data/app/" +? p.packageName + ".apk" );
03 ???? if (!f1.exists()) continue ;
04 ?
05 ???? installedNum++;
06 ???? /**
07 ????? * 應(yīng)用程序的名字
08 ????? */
09 ???? name = p.applicationInfo.loadLabel(pckMan).toString();
10 }

方法三 、可以通過uid來(lái)過濾系統(tǒng)系統(tǒng)的安裝包,因?yàn)閍ndroid系統(tǒng)中的uid從 1000 ~ 9999 都是給系統(tǒng)程序保留的,所以只要判斷package的uid > 10000即可判定該程序是非系統(tǒng)程序。

1 if (p.applicationInfo.uid > 10000 )
2 ??? //非系統(tǒng)程序

?

uid是程序在安裝的時(shí)候由系統(tǒng)分配的。

?



Android源碼上的方法? com/android/settings/ManageApplications.java

[java] view plaincopyprint?
  • if?(filterOption?==?FILTER_APPS_THIRD_PARTY)?{??
  • ????????????List<ApplicationInfo>?appList?=new?ArrayList<ApplicationInfo>?();??
  • ????????????for?(ApplicationInfo?appInfo?:?installedAppList)?{??
  • ????????????????boolean?flag?=?false;??
  • ????????????????if?((appInfo.flags?&?ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)?!=?0)?{??
  • ????????????????????//?Updated?system?app ??
  • ????????????????????flag?=?true;??
  • ????????????????}?else?if?((appInfo.flags?&?ApplicationInfo.FLAG_SYSTEM)?==?0)?{??
  • ????????????????????//?Non-system?app ??
  • ????????????????????flag?=?true;??
  • ????????????????}??
  • ????????????????if?(flag)?{??
  • ????????????????????appList.add(appInfo);??
  • ????????????????}??
  • ????????????}??
  • 總結(jié)

    以上是生活随笔為你收集整理的android 判断是否为系统应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。