天天看點

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

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

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

<a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DETAILS_SETTINGS">docs/reference/android/provider/Settings.html#ACTION_APPLICATION_DETAILS_SETTINGS</a>

下,有這樣的描述:

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啟動應用程式資訊界面了。代碼如下:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  

Uri uri = Uri.fromParts(SCHEME, packageName, null);  

intent.setData(uri);  

startActivity(intent); 

但是,在Android 2.3之前的版本,并沒有公開相關的接口。

// utility method used to start sub activity  

private void startApplicationDetailsActivity() {  

    // Create intent to start new activity  

    Intent intent = new Intent(Intent.ACTION_VIEW);  

    intent.setClass(this, InstalledAppDetails.class);  

    intent.putExtra(APP_PKG_NAME, mCurrentPkgName);  

    // start new activity to display extended information  

    startActivityForResult(intent, INSTALLED_APP_DETAILS);  

但是常量APP_PKG_NAME的定義并不相同。

2.2中定義為"pkg",2.1中定義為"com.android.settings.ApplicationPkgName"

那麼,對于2.1及以下版本,我們可以這樣調用InstalledAppDetails:

Intent i = new Intent(Intent.ACTION_VIEW);                  

i.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");  

i.putExtra("com.android.settings.ApplicationPkgName", packageName);   

startActivity(i); 

對于2.2,隻需替換上面putExtra的第一個參數為"pkg"

綜上,通用的調用“應用程式資訊”的代碼如下:

private static final String SCHEME = "package";  

/**  

 * 調用系統InstalledAppDetails界面所需的Extra名稱(用于Android 2.1及之前版本)  

 */ 

private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";  

 * 調用系統InstalledAppDetails界面所需的Extra名稱(用于Android 2.2)  

private static final String APP_PKG_NAME_22 = "pkg";  

 * InstalledAppDetails所在包名  

private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";  

 * InstalledAppDetails類名  

private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";  

 * 調用系統InstalledAppDetails界面顯示已安裝應用程式的詳細資訊。 對于Android 2.3(Api Level  

 * 9)以上,使用SDK提供的接口; 2.3以下,使用非公開的接口(檢視InstalledAppDetails源碼)。  

 *   

 * @param context  

 * @param packageName  

 *            應用程式的包名  

public static void showInstalledAppDetails(Context context, String packageName) {  

    Intent intent = new Intent();  

    final int apiLevel = Build.VERSION.SDK_INT;  

    if (apiLevel &gt;= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口  

        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  

        Uri uri = Uri.fromParts(SCHEME, packageName, null);  

        intent.setData(uri);  

    } else { // 2.3以下,使用非公開的接口(檢視InstalledAppDetails源碼)  

        // 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。  

        final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22  

                : APP_PKG_NAME_21);  

        intent.setAction(Intent.ACTION_VIEW);  

        intent.setClassName(APP_DETAILS_PACKAGE_NAME,  

                APP_DETAILS_CLASS_NAME);  

        intent.putExtra(appPkgName, packageName);  

    }  

    context.startActivity(intent);  

}  

     本文轉自xyz_lmn51CTO部落格,原文連結:http://blog.51cto.com/xyzlmn/817135,如需轉載請自行聯系原作者

繼續閱讀