调用Android系统“应用程序信息(Application Info)”界面

ZhengZhiren

http://blog.csdn.net/ZhengZhiRen/archive/2011/01/23/6159750.aspx

 

“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启动应用程序信息界面了。代码如下:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts(SCHEME, packageName, null); intent.setData(uri); startActivity(intent);  但是,在Android 2.3之前的版本,并没有公开相关的接口。 通过查看系统设置 platform/packages/apps/Settings.git程序的源码,可以发现应用程序信息界面为InstalledAppDetails。 在 这里(2.1)还有 这里(2.2),我们可以分别看到 Android2.1Android2.2的应用管理程序(ManageApplications.java)是如何启动InstalledAppDetails的。 // 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 >= 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); }   

 

更多相关文章

  1. Android(安卓)4编程入门经典—开发智能手机与平板电脑应用
  2. Android(安卓)GestureDetector详解
  3. Android(安卓)学习之界面跳转
  4. SharedPreferenced
  5. 处理运行时更改
  6. 从notify中恢复Activity
  7. android 使用google钱包 步骤
  8. android(4) 第一次启动滑动界面
  9. Android(安卓)显示Intent和隐式Intent

随机推荐

  1. Android仿“守望先锋”加载动画
  2. Android(安卓)Studio中提交library到Jcen
  3. android2.2应用开发之IccCard(sim卡或USIM
  4. android手动连接wifi的过程
  5. Android系统中aidl的理解和service的添加
  6. Android(安卓)开发遇坑备忘录(二)
  7. Android(安卓)访问FTP 服务器,实现文件的
  8. android studio 报错 non-zero exit valu
  9. Android(安卓)TextView 自动换行问题
  10. Android(安卓)MVVM架构模式 详解和综合运