調用Android系統“應用程式資訊(Application Info)”介面

來源:互聯網
上載者:User

“Android系統設定->應用程式->管理應用程式”列表下,列出了系統已安裝的應用程式。選擇其中一個程式,則進入“應用程式信
息(Application
Info)”介面。這個介面顯示了程式名稱、版本、儲存、許可權等資訊,並有卸載、停止、清除緩衝等按鈕,可謂功能不少。如果在編寫相關程式時(比如任務管
理器)可以調用這個面板,自然提供了很大的方便。那麼如何?呢?

在最新的Android SDK 2.3(API Level 9)中,提供了這樣的介面。在文檔路徑

docs/reference/android/provider/Settings.html#ACTION_APPLICATION_DETAILS_SETTINGS

下,有這樣的描述:

public static final String ACTION_APPLICATION_DETAILS_SETTINGS    Since: API Level 9

Activity Action: Show screen of details about a particular application.
In some cases, a matching Activity may not exist, so ensure you safeguard against this.
Input:
The Intent's data URI specifies the application package name to be
shown, with the "package" scheme. That is "package:com.my.app".
Output: Nothing.
Constant Value: "android.settings.APPLICATION_DETAILS_SETTINGS"

就是說,我們只要以android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS作為Action;“package:應用程式的包名”作為URI,就可以用startActivity啟動應用程式資訊介面了。代碼如下:

view plain
  1. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
  2. Uri uri = Uri.fromParts(SCHEME, packageName, null);  
  3. intent.setData(uri);  
  4. startActivity(intent);  

 

但是,在Android 2.3之前的版本,並沒有公開相關的介面。通過查看系統設定platform/packages/apps/Settings.git程式的源碼,可以發現應用程式資訊介面為InstalledAppDetails。在這裡(2.1)還有這裡(2.2),我們可以分別看到 Android2.1Android2.2的應用管理程式(ManageApplications.java)是如何啟動InstalledAppDetails的。view plain
  1. // utility method used to start sub activity  
  2. private void startApplicationDetailsActivity() {  
  3.     // Create intent to start new activity  
  4.     Intent intent = new Intent(Intent.ACTION_VIEW);  
  5.     intent.setClass(this, InstalledAppDetails.class);  
  6.     intent.putExtra(APP_PKG_NAME, mCurrentPkgName);  
  7.     // start new activity to display extended information  
  8.     startActivityForResult(intent, INSTALLED_APP_DETAILS);  
  9. }  
但是常量 APP_PKG_NAME的定義並不相同。2.2中定義為"pkg",2.1中定義為"com.android.settings.ApplicationPkgName"那麼, 對於2.1及以下版本,我們可以這樣調用InstalledAppDetails:view plain
  1. Intent i = new Intent(Intent.ACTION_VIEW);                  
  2. i.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");  
  3. i.putExtra("com.android.settings.ApplicationPkgName", packageName);   
  4. startActivity(i);  
對於2.2,只需替換上面putExtra的第一個參數為"pkg"   綜上,通用的調用“應用程式資訊”的代碼如下:view plain
  1. private static final String SCHEME = "package";  
  2. /** 
  3.  * 調用系統InstalledAppDetails介面所需的Extra名稱(用於Android 2.1及之前版本) 
  4.  */  
  5. private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";  
  6. /** 
  7.  * 調用系統InstalledAppDetails介面所需的Extra名稱(用於Android 2.2) 
  8.  */  
  9. private static final String APP_PKG_NAME_22 = "pkg";  
  10. /** 
  11.  * InstalledAppDetails所在包名 
  12.  */  
  13. private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";  
  14. /** 
  15.  * InstalledAppDetails類名 
  16.  */  
  17. private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";  
  18. /** 
  19.  * 調用系統InstalledAppDetails介面顯示已安裝應用程式的詳細資料。 對於Android 2.3(Api Level 
  20.  * 9)以上,使用SDK提供的介面; 2.3以下,使用非公開的介面(查看InstalledAppDetails源碼)。 
  21.  *  
  22.  * @param context 
  23.  *  
  24.  * @param packageName 
  25.  *            應用程式的包名 
  26.  */  
  27. public static void showInstalledAppDetails(Context context, String packageName) {  
  28.     Intent intent = new Intent();  
  29.     final int apiLevel = Build.VERSION.SDK_INT;  
  30.     if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的介面  
  31.         intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
  32.         Uri uri = Uri.fromParts(SCHEME, packageName, null);  
  33.         intent.setData(uri);  
  34.     } else { // 2.3以下,使用非公開的介面(查看InstalledAppDetails源碼)  
  35.         // 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。  
  36.         final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22  
  37.                 : APP_PKG_NAME_21);  
  38.         intent.setAction(Intent.ACTION_VIEW);  
  39.         intent.setClassName(APP_DETAILS_PACKAGE_NAME,  
  40.                 APP_DETAILS_CLASS_NAME);  
  41.         intent.putExtra(appPkgName, packageName);  
  42.     }  
  43.     context.startActivity(intent);  
  44. }  

 

相關文章

聯繫我們

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