如何调用Android系统程序详细信息界面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调用Android系统程序详细信息界面相关的知识,希望对你有一定的参考价值。

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

view plain
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.1和Android2.2的应用管理程序(ManageApplications.java)是如何启动InstalledAppDetails的。
view plain
// 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:
view plain
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"

综上,通用的调用“应用程序信息”的代码如下:
view plain
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);
参考技术A 参考这个网址
http://blog.csdn.net/ZhengZhiRen/article/details/6159750

直接复制最后的通用的调用代码即可
不过31行那里有个错误,把31行改为
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
即可本回答被提问者采纳
参考技术B 参考这个网址
http://blog.csdn.net/ZhengZhiRen/article/details/6159750

直接复制最后的通用的调用代码即可
不过31行那里有个错误,把31行改为
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
即可

android怎么调用系统日历的添加事件界面

 详细修改如下:
  1.首先准备各种大小的ic_newevents_numberindication.9.png图片。
如果是搞开发的,在以前的项目中都可以找到的。
  2.定义个未读信息支持的app事件xml,这个支持短信,日历,电话,邮件:
  b/packages/apps/Launcher3/res/xml/unread_support_shortcuts.xml
  内容如下:
  +<?xml version="1.0" encoding="UTF-8"?>
  +<unreadshortcuts xmlns:launcher="http://schemas.android.com/apk/res-

  auto/com.android.launcher3">
  +
  + <shortcut
  + launcher:unreadPackageName="com.android.dialer"
  + launcher:unreadClassName="com.android.dialer.DialtactsActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_contacts_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.android.mms"
  + launcher:unreadClassName="com.android.mms.ui.BootActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_mms_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.android.email"
  + launcher:unreadClassName="com.android.email.activity.Welcome"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_email_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.android.calendar"
  + launcher:unreadClassName="com.android.calendar.AllInOneActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_calendar_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.orangelabs.rcs"
  +

  launcher:unreadClassName="com.mediatek.rcse.activities.ChatMainActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_rcse_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.android.cellbroadcastreceiver"
  +

  launcher:unreadClassName="com.android.cellbroadcastreceiver.CellBroadcastLis

  tActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_android_calendar_unread"
  + />
  + <shortcut
  + launcher:unreadPackageName="com.mediatek.cellbroadcastreceiver"
  +

  launcher:unreadClassName="com.mediatek.cellbroadcastreceiver.CellBroadcastLi

  stActivity"
  + launcher:unreadType="0"
  + launcher:unreadKey="com_mediatek_cellbroadcastreceiver_unread"
  + />
  +</unreadshortcuts>

  3.添加几种需要用到而之前没有的权限:

  b/packages/apps/Launcher3/AndroidManifest.xml
  <original-package android:name="com.android.launcher3" />
  <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
  + <uses-permission

  android:name="android.permission.ADVANCED_WIDGET_API"/>
  + <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
  + <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
  + <uses-permission android:name="android.permission.DELETE_PACKAGES"/>

  4.定义要用的字符串:b/packages/apps/Launcher3/res/values/attrs.xml
  + <!-- XML attributes used by unread_support_shortcuts.xml -->
  + <declare-styleable name="UnreadShortcut">
  + <attr name="unreadPackageName" format="string" />
  + <attr name="unreadClassName" format="string" />
  + <attr name="unreadKey" format="string" />
  + <attr name="unreadType" format="integer" />
  + </declare-styleable>

  5.定义显示的数字大小尺寸,这个可以自己修改到满意,这个是四行五列排列的

  1080*1920屏幕大小的尺寸。
  b/packages/apps/Launcher3/res/values/dimens.xml
  + <!-- Add for unread events feature. -->
  + <dimen name="unread_minWidth">20dp</dimen>
  + <dimen name="hotseat_unread_margin_top">16dp</dimen>
  + <dimen name="hotseat_unread_margin_right">8dp</dimen>
  + <dimen name="folder_unread_margin_top">16dp</dimen>
  + <dimen name="folder_unread_margin_right">14dp</dimen>
  + <dimen name="workspace_unread_margin_top">16dp</dimen>
  + <dimen name="workspace_unread_margin_right">16dp</dimen>
  + <dimen name="app_list_unread_margin_top">20dp</dimen>
  + <dimen name="app_list_unread_margin_right">16dp</dimen>
  + <dimen name="unread_text_margin">8dp</dimen>
  + <dimen name="unread_text_number_size">14sp</dimen>
  + <dimen name="unread_text_plus_size">10sp</dimen>
参考技术A Intent intent = new Intent(Intent.ACTION_INSERT); intent.setData(CalendarContract.Events.CONTENT_URI);
startActivity(intent);
跳转日历添加事件界面,试试这个方法吧本回答被提问者和网友采纳

以上是关于如何调用Android系统程序详细信息界面的主要内容,如果未能解决你的问题,请参考以下文章

在android中调用方法详细信息,例如行号,方法名称和类名称[重复]

2022最全面&详细的Android学习指南,零基础快速入门的通道

2022最全面&详细的Android学习指南,零基础快速入门的通道

如何告诉应用程序在地址簿中添加或删除或修改了新联系人及其在android中的详细信息

在调用 close() 时,用户界面不会关闭

公交查询系统的设计之详细设计程序流程图(2)