Android之擷取手機相關資訊

來源:互聯網
上載者:User

一、Android 擷取手機中已安裝apk檔案資訊(PackageInfo、ResolveInfo)(應用圖片、應用程式名稱、包名等)
1、通過PackageManager可擷取手機端已安裝的apk檔案的資訊,具體代碼如下:

PackageManager packageManager = this.getPackageManager();List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通過上述方法,可得到手機中安裝的所有應用程式,包括手動安裝的apk包的資訊、、系統預裝的應用軟體的資訊,要區分這兩類軟體可使用以下方法:
(a) 從packageInfoList擷取的packageInfo,再通過packageInfo.applicationInfo擷取applicationInfo。
(b) 判斷(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,該值大於0時,表示擷取的應用為系統預裝的應用,反之則為手動安裝的應用。
 (1)擷取應用的代碼:

public static List<PackageInfo> getAllApps(Context context) {List<PackageInfo> apps = new ArrayList<PackageInfo>();PackageManager pManager = context.getPackageManager();// 擷取手機內所有應用List<PackageInfo> paklist = pManager.getInstalledPackages(0);for (int i = 0; i < paklist.size(); i++) {PackageInfo pak = (PackageInfo) paklist.get(i);// 判斷是否為非系統預裝的應用程式if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {apps.add(pak);}}return apps;}

(2)、擷取圖片、應用程式名稱、包名(ShareItemInfo 類是自己寫的,忽視吧):

PackageManager pManager = MessageSendActivity.this.getPackageManager();List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);for(int i=0;i<appList.size();i++) {    PackageInfo pinfo = appList.get(i);    shareItem = new ShareItemInfo();    shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));    shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());    shareItem.setPackageName(pinfo.applicationInfo.packageName);}

(3)擷取支援分享的應用的代碼:

 public static List<ResolveInfo> getShareApps(Context context){     List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();      Intent intent=new Intent(Intent.ACTION_SEND,null);      intent.addCategory(Intent.CATEGORY_DEFAULT);      intent.setType("text/plain");      PackageManager pManager = context.getPackageManager();     mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);    return mApps;  }

由於該方法,返回的並不是PackageInfo 對象。而是ResolveInfo。因此擷取圖片、應用程式名稱、包名的方法不一樣,如下:

     PackageManager pManager = MessageSendActivity.this.getPackageManager();          List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);     for(int i=0;i<resolveList.size();i++) {         ResolveInfo resolve = resolveList.get(i);         ShareItemInfo shareItem = new ShareItemInfo();         //set Icon         shareItem.setIcon(resolve.loadIcon(pManager));         //set Application Name         shareItem.setLabel(resolve.loadLabel(pManager).toString());         //set Package Name          shareItem.setPackageName(resolve.activityInfo.packageName);     } 

總結:
通過 PackageInfo 擷取具體資訊方法:
包名擷取方法:packageInfo.packageName
icon擷取擷取方法:packageManager.getApplicationIcon(applicationInfo)
應用程式名稱擷取方法:packageManager.getApplicationLabel(applicationInfo)
使用許可權擷取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
.requestedPermissions
通過 ResolveInfo 擷取具體資訊方法:
包名擷取方法:resolve.activityInfo.packageName
icon擷取擷取方法:resolve.loadIcon(packageManager)
應用程式名稱擷取方法:resolve.loadLabel(packageManager).toString()

 

二、擷取手機可用記憶體和總記憶體(手機的記憶體資訊主要在/proc/meminfo檔案中,其中第一行是總記憶體,而剩餘記憶體可通過ActivityManager.MemoryInfo得到):

private String[] getTotalMemory() {             String[] result = {"",""};  //1-total 2-avail             ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();               mActivityManager.getMemoryInfo(mi);               long mTotalMem = 0;             long mAvailMem = mi.availMem;             String str1 = "/proc/meminfo";             String str2;             String[] arrayOfString;             try {                 FileReader localFileReader = new FileReader(str1);                 BufferedReader localBufferedReader = new BufferedReader(localFileReader, 8192);                 str2 = localBufferedReader.readLine();                 arrayOfString = str2.split("\\s+");                 mTotalMem = Integer.valueOf(arrayOfString[1]).intValue() * 1024;                 localBufferedReader.close();             } catch (IOException e) {                 e.printStackTrace();             }             result[0] = Formatter.formatFileSize(this, mTotalMem);             result[1] = Formatter.formatFileSize(this, mAvailMem);             Log.i(TAG, "meminfo total:" + result[0] + " used:" + result[1]);             return result;      }

三、擷取手機CPU資訊(和記憶體資訊同理,cpu資訊可通過讀取/proc/cpuinfo檔案來得到,其中第一行為cpu型號,第二行為cpu頻率):

private String[] getCpuInfo() {              String str1 = "/proc/cpuinfo";              String str2 = "";              String[] cpuInfo = {"", ""};  //1-cpu型號  //2-cpu頻率              String[] arrayOfString;              try {                  FileReader fr = new FileReader(str1);                  BufferedReader localBufferedReader = new BufferedReader(fr, 8192);                  str2 = localBufferedReader.readLine();                  arrayOfString = str2.split("\\s+");                  for (int i = 2; i < arrayOfString.length; i++) {                      cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";                  }                  str2 = localBufferedReader.readLine();                  arrayOfString = str2.split("\\s+");                  cpuInfo[1] += arrayOfString[2];                  localBufferedReader.close();              } catch (IOException e) {              }              Log.i(TAG, "cpuinfo:" + cpuInfo[0] + " " + cpuInfo[1]);              return cpuInfo;          }

 

四、擷取手機MAC地址:

    private String getMacAddress(){              String result = "";              WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);              WifiInfo wifiInfo = wifiManager.getConnectionInfo();              result = wifiInfo.getMacAddress();              Log.i(TAG, "macAdd:" + result);              return result;      }

 五、擷取螢幕密度三種方法:

// 擷取螢幕密度(方法1)int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       // 螢幕寬(像素,如:480px)int screenHeight = getWindowManager().getDefaultDisplay().getHeight();      // 螢幕高(像素,如:800p) Log.e(TAG + "  getDefaultDisplay", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);  // 擷取螢幕密度(方法2)DisplayMetrics dm = new DisplayMetrics();dm = getResources().getDisplayMetrics(); float density  = dm.density;        // 螢幕密度(像素比例:0.75/1.0/1.5/2.0)int densityDPI = dm.densityDpi;     // 螢幕密度(每寸像素:120/160/240/320)float xdpi = dm.xdpi;           float ydpi = dm.ydpi; Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI); screenWidth  = dm.widthPixels;      // 螢幕寬(像素,如:480px)screenHeight = dm.heightPixels;     // 螢幕高(像素,如:800px) Log.e(TAG + "  DisplayMetrics(111)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);   // 擷取螢幕密度(方法3)dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm); density  = dm.density;      // 螢幕密度(像素比例:0.75/1.0/1.5/2.0)densityDPI = dm.densityDpi;     // 螢幕密度(每寸像素:120/160/240/320)xdpi = dm.xdpi;         ydpi = dm.ydpi; Log.e(TAG + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);Log.e(TAG + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI); int screenWidthDip = dm.widthPixels;        // 螢幕寬(dip,如:320dip)int screenHeightDip = dm.heightPixels;      // 螢幕寬(dip,如:533dip) Log.e(TAG + "  DisplayMetrics(222)", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip); screenWidth  = (int)(dm.widthPixels * density + 0.5f);      // 螢幕寬(px,如:480px)screenHeight = (int)(dm.heightPixels * density + 0.5f);     // 螢幕高(px,如:800px) Log.e(TAG + "  DisplayMetrics(222)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.