`
xyz_lmn
  • 浏览: 62071 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

 
阅读更多

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

  1. Intentintent=newIntent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  2. Uriuri=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的。
  1. //utilitymethodusedtostartsubactivity
  2. privatevoidstartApplicationDetailsActivity(){
  3. //Createintenttostartnewactivity
  4. Intentintent=newIntent(Intent.ACTION_VIEW);
  5. intent.setClass(this,InstalledAppDetails.class);
  6. intent.putExtra(APP_PKG_NAME,mCurrentPkgName);
  7. //startnewactivitytodisplayextendedinformation
  8. startActivityForResult(intent,INSTALLED_APP_DETAILS);
  9. }
但是常量APP_PKG_NAME的定义并不相同。
2.2中定义为"pkg",2.1中定义为"com.android.settings.ApplicationPkgName"
那么,对于2.1及以下版本,我们可以这样调用InstalledAppDetails:
  1. Intenti=newIntent(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"
综上,通用的调用“应用程序信息”的代码如下:
  1. privatestaticfinalStringSCHEME="package";
  2. /**
  3. *调用系统InstalledAppDetails界面所需的Extra名称(用于Android2.1及之前版本)
  4. */
  5. privatestaticfinalStringAPP_PKG_NAME_21="com.android.settings.ApplicationPkgName";
  6. /**
  7. *调用系统InstalledAppDetails界面所需的Extra名称(用于Android2.2)
  8. */
  9. privatestaticfinalStringAPP_PKG_NAME_22="pkg";
  10. /**
  11. *InstalledAppDetails所在包名
  12. */
  13. privatestaticfinalStringAPP_DETAILS_PACKAGE_NAME="com.android.settings";
  14. /**
  15. *InstalledAppDetails类名
  16. */
  17. privatestaticfinalStringAPP_DETAILS_CLASS_NAME="com.android.settings.InstalledAppDetails";
  18. /**
  19. *调用系统InstalledAppDetails界面显示已安装应用程序的详细信息。对于Android2.3(ApiLevel
  20. *9)以上,使用SDK提供的接口;2.3以下,使用非公开的接口(查看InstalledAppDetails源码)。
  21. *
  22. *@paramcontext
  23. *
  24. *@parampackageName
  25. *应用程序的包名
  26. */
  27. publicstaticvoidshowInstalledAppDetails(Contextcontext,StringpackageName){
  28. Intentintent=newIntent();
  29. finalintapiLevel=Build.VERSION.SDK_INT;
  30. if(apiLevel>=9){//2.3(ApiLevel9)以上,使用SDK提供的接口
  31. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  32. Uriuri=Uri.fromParts(SCHEME,packageName,null);
  33. intent.setData(uri);
  34. }else{//2.3以下,使用非公开的接口(查看InstalledAppDetails源码)
  35. //2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。
  36. finalStringappPkgName=(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. }
分享到:
评论

相关推荐

    Android开发指南中文版-----应用程序框架

    应用程序基础Application Fundamentals 4 关键类 4 应用程序组件 5 激活组件:intent 7 关闭组件 7 manifest文件 8 Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理堆栈 13 启动...

    Android系统库和第三方功能实现库

    Android系统库是指Android操作系统内部提供的一些基本功能或服务的类库,可以帮助应用程序实现常见的任务和操作,如UI设计、数据库管理、网络通信等。常用的Android系统库包括: 1. SDK(Software Development Kit...

    Android课程设计---基于Android系统的音乐播放器设计与实现.doc

    根据Android的软件框图,其软件层次结 构自下而上分为以下几个层次: 第一、操作系统层(OS) 第二、各种库(Libraries)和Android 运行环境(RunTime) 第三、应用程序框架(Application Framework) 第四、应用...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    android群雄传

    9.3 Android Apk应用信息获取之Activity Manager 215 9.4 解析Packages.xml获取系统信息 218 9.5 Android安全机制 220 9.5.1 Android安全机制简介 220 9.5.2 Android系统安全隐患 222 9.5.3 Android Apk反编译 ...

    Android 退出多Activity的application的方式方法

    在开发过程中,我们常常需要一个退出功能,来退出该应用的所有Activity,本篇文章主要介绍了Android 退出多Activity的application的方式,有兴趣的可以了解一下。

    Android开发宝典.rar

    应用程序基础Application Fundamentals 4 关键类 4 应用程序组件 5 激活组件:intent 7 关闭组件 7 manifest文件 8 Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理...

    Android项目设计与开发:服务的概念.ppt

    即使用户切到另一应用程序,服务仍可以在后台运行。 服务的概念 服务的创建方式与创建Activity类似,只需要继承Service类,然后在清单文件中注册即可。 1、创建服务类 public class MyService extends Service 2、在...

    android 面试2

    答:ANR(Application Not Responding):应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应的对话框 避免ANR:Android应用程序通常运行在一个单独的线程里面,称谓主线程,...

    Android 4游戏编程入门经典

     2.3 运行和调试android应用程序  2.3.1 连接设备  2.3.2 创建一个android虚拟设备  2.3.3 运行应用程序  2.3.4 调试应用程序  2.3.5 logcat和ddms  2.3.6 使用adb  2.4 小结 第3章 游戏开发基础  3.1 游戏...

    Android开发指南中文版

    应用程序基础Application Fundamentals 4 关键类 4 应用程序组件 5 激活组件:intent 7 关闭组件 7 manifest文件 8 Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理堆栈 13 启动...

    Android无需root实现apk的静默安装

    Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new ...

    安卓开发观察者模式应用-一个service通知多个activity更新ui的实现

    安卓开发观察者模式应用-一个service通知多个activity更新ui的实现, service与activity的交互: 1.接口回调 2.自定义广播 3.观察者模式

    android游戏编程入门

     4.1 定义一个Android应用程序:  清单文件 77  4.1.1 <manifest>元素 78  4.1.2 <application>元素 79  4.1.3 <activity>元素 80  4.1.4 <uses-permission>元素 82  4.1.5 <uses...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    13.2.2 创建WAVE播放器Android应用程序 306 13.2.3 创建WAVE播放器主Activity 306 13.2.4 实现WAVE Aduio播放 310 13.3 运行WAVE Audio Player 327 13.4 小结 328 第14章 程序概要分析和NEON优化 329 14.1 用...

    SwissArmyKnife-android免root兼容所有版本ui调试工具.zip

    使用方式compile 'com.wanjian:sak:0.0.3'android 4.0及以上用户直接在application的onCreate中调用 com.wanjian.sak.LayoutManager.init(Application context) ,其他版本可以在activity的onResume中调用...

    实验一Android环境构建与Activity生命周期.doc

    } @Override //在重新进入可视生命周期前被调用,载入界面所需要的更改信息 public void onRestart() { super. onRestart(); Log.i(TAG,"(4) onRestart()");} @Override //在活动生命周期结束时被调用,用于保存持久...

Global site tag (gtag.js) - Google Analytics