调用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. 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的。

 
  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);  

但是常量APP_PKG_NAME的定义并不相同。
2.2中定义为"pkg",2.1中定义为"com.android.settings.ApplicationPkgName"
那么, 对于2.1及以下版本,我们可以这样调用InstalledAppDetails:

 
  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"
 
 
综上,通用的调用“应用程序信息”的代码如下:

 
  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. }  

 



     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/817135,如需转载请自行联系原作者

相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
271 4
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
74 14
|
1月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
1月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
1月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
1月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
2月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
1月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
50 0
|
8月前
|
移动开发 安全 Android开发
构建高效Android应用:Kotlin协程的实践与优化策略
【5月更文挑战第30天】 在移动开发领域,性能优化始终是关键议题之一。特别是对于Android开发者来说,如何在保证应用流畅性的同时,提升代码的执行效率,已成为不断探索的主题。近年来,Kotlin语言凭借其简洁、安全和实用的特性,在Android开发中得到了广泛的应用。其中,Kotlin协程作为一种新的并发处理机制,为编写异步、非阻塞性的代码提供了强大工具。本文将深入探讨Kotlin协程在Android开发中的应用实践,以及如何通过协程优化应用性能,帮助开发者构建更高效的Android应用。

热门文章

最新文章