Android Apps & Notifications 源码解析记录(一)
程序员文章站
2022-05-14 21:14:28
...
引言
这是我第一次使用博客来记录Android学习和使用过程中积累。有些使用过的东西,以后的工作中可能会用到,用这种方式来方便自己今后查阅,也希望对大家有所帮助。因为能力有限,文中有不足或是错误的地方还请见谅
这次博客的内容
对源码Setting部分 Apps & Notifications功能实现的页面进行定位,方便实现功能时查看,后续会记录功能具体实现的过程,和遇到的问题。
- Applications
1)获得应用列表:
这里只是Android 原生Setting中所展示的应用列表,通过查看源码,在ApplicationsState.java 文件中,获得 应用列表的方法如下:
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> mApps = mPackageManager.queryIntentActivities(mainIntent, PackageManager.MATCH_DISABLED_COMPONENTS
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
2)单个应用详细信息页面:
android 源码里InstalledAppDetails,.java文件 ,主要对应的功能Uninstall, Notifications,Permissions,Storage,Data usage。
每个功能对应的页面:
功能 | 源码java文件 |
---|---|
Notifications | AppNotificationSettings.java |
Permissions | ManagePermissionsActivity.java |
Storage | AppStorageSettings.java |
Data usage | AppDataUsage.java |
- Notifications
1)对AppNotificationSettings.java的解析后,得出的主要功能:打开通知
public void setNotificationForPackage(String pkgName, boolean enabel) {
UILog.d(TAG, "setNotificationForPackage: " + pkgName);
try {
ApplicationInfo info = mPackageManager.getApplicationInfo(pkgName, PackageManager.GET_META_DATA);
NotificationChannel channel = mNotificationManager.getNotificationChannelForPackage(pkgName, info.uid, NotificationChannel.DEFAULT_CHANNEL_ID, true);
if (channel != null) {
final int importance = enabel ? NotificationManager.IMPORTANCE_UNSPECIFIED : NotificationManager.IMPORTANCE_NONE;
channel.setImportance(importance);
channel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
mNotificationManager.updateNotificationChannelForPackage(pkgName, info.uid, channel);
}
mNotificationManager.setNotificationsEnabledForPackage(pkgName, info.uid, enabel);
} catch (RemoteException e) {
e.printStackTrace();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
- Permissions
1)管理Permissions 的ManagePermissionsActivity.java 代码的查看,这个是所有权限的类通过通过 Intent启动时传递的参数,判断单个应用还是所有应用权限管理,后续的功能细节需要展开页面
Intent | 对应Fragment |
---|---|
Intent.ACTION_MANAGE_PERMISSIONS | 权限组管理 |
Intent.ACTION_MANAGE_APP_PERMISSIONS | 应用的权限组管理 |
Intent.ACTION_MANAGE_PERMISSION_APPS | 权限组的应用管理 |
推荐阅读