768项目MT6735 SystemUI外部接口

768项目MT6735 SystemUI外部接口

一、SystemUI应用启动流程

com.android.server.SystemServer.startOtherServices
| com.android.server.SystemServer.startSystemUi
|__
com.android.systemui.SystemUIService.onCreate
|__ com.android.systemui.SystemUIApplication.startServicesIfNeeded

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
for (int i=0; i<N; i++) {
Class<?> cl = SERVICES[i];
if (DEBUG) Log.d(TAG, "loading: " + cl);
try {
mServices[i] = (SystemUI)cl.newInstance();
} catch (IllegalAccessException ex) {
throw new RuntimeException(ex);
} catch (InstantiationException ex) {
throw new RuntimeException(ex);
}
mServices[i].mContext = this;
mServices[i].mComponents = mComponents;
if (DEBUG) Log.d(TAG, "running: " + mServices[i]);
mServices[i].start();

if (mBootCompleted) {
mServices[i].onBootCompleted();
}
}

private final Class<?>[] SERVICES = new Class[] {
com.android.systemui.keyguard.KeyguardViewMediator.class,
com.android.systemui.recent.Recents.class,
com.android.systemui.volume.VolumeUI.class,
com.android.systemui.statusbar.SystemBars.class,
com.android.systemui.usb.StorageNotification.class,
com.android.systemui.power.PowerUI.class,
com.android.systemui.media.RingtonePlayer.class
};

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
<service android:name="SystemUIService" android:exported="true" />

二、外部接口

1、应用服务启动

frameworks/base/services/java/com/android/server/SystemServer.java#startSystemUi

1
2
3
4
5
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.systemui",
"com.android.systemui.SystemUIService"));
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.OWNER);

2、设置-显示-亮度(报错Activity找不到)

packages/apps/Settings/res/xml/display_settings.xml#brightness

1
2
3
4
5
6
<PreferenceScreen
android:key="brightness"
android:title="@string/brightness"
settings:keywords="@string/keywords_display_brightness_level">
<intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
</PreferenceScreen>

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<activity
android:name=".settings.BrightnessDialog"
android:label="@string/quick_settings_brightness_dialog_title"
android:theme="@android:style/Theme.DeviceDefault.Dialog"
android:finishOnCloseSystemDialogs="true"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

3、keyguard锁屏

PhoneWindowManager通过mKeyguardDelegate操作屏锁

  • frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#mKeyguardDelegate
  • frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
  • frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
  • frameworks/base/core/java/com/android/internal/policy/IKeyguardService.aidl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
com.android.internal.policy.impl.PhoneWindowManager.systemReady
|__com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate.KeyguardServiceDelegate


com.android.internal.policy.impl.PhoneWindowManager.systemBooted
|__com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate.bindService
|____com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate.mKeyguardConnection
|______com.android.internal.policy.impl.keyguard.KeyguardServiceWrapper.KeyguardServiceWrapper


com.android.internal.policy.impl.PhoneWindowManager.wakingUp
|__com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate.onScreenTurnedOn
|____com.android.internal.policy.impl.keyguard.KeyguardServiceWrapper.onScreenTurnedOn
|______com.android.systemui.keyguard.KeyguardService.mBinder#onScreenTurnedOn

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
<service android:name=".keyguard.KeyguardService" android:exported="true" android:enabled="@bool/config_enableKeyguardService" />

Intent.ACTION_USER_PRESENT相关

此广播最终是由com.android.systemui.keyguard.KeyguardViewMediator中发送,文档表明当设备唤醒用户可以操作界面时发送(等价于设备解锁时)

以下为相关代码调用

avatar

4、截屏

  • frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
  • frameworks/base/packages/SystemUI/AndroidManifest.xml
  • frameworks/base/media/java/android/media/projection/MediaProjectionManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
com.android.internal.policy.impl.PhoneWindowManager.interceptKeyBeforeDispatching
|__com.android.internal.policy.impl.PhoneWindowManager.mScreenshotRunnable
|____com.android.internal.policy.impl.PhoneWindowManager.takeScreenshot

ComponentName cn = new ComponentName("com.android.systemui","com.android.systemui.screenshot.TakeScreenshotService");
Intent intent = new Intent();
intent.setComponent(cn);


com.example.android.screencapture.ScreenCaptureFragment.startScreenCapture
|__android.media.projection.MediaProjectionManager.createScreenCaptureIntent

/**
* Returns an Intent that <b>must</b> passed to startActivityForResult()
* in order to start screen capture. The activity will prompt
* the user whether to allow screen capture. The result of this
* activity should be passed to getMediaProjection.
*/
public Intent createScreenCaptureIntent() {
Intent i = new Intent();
i.setClassName("com.android.systemui",
"com.android.systemui.media.MediaProjectionPermissionActivity");
return i;
}

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
<service android:name=".screenshot.TakeScreenshotService" android:process=":screenshot" android:exported="false" />

<!-- started from MediaProjectionManager -->
<activity
android:name=".media.MediaProjectionPermissionActivity"
android:exported="true"
android:theme="@style/Theme.AlertDialogHost"
android:finishOnCloseSystemDialogs="true"
android:launchMode="singleTop"
android:excludeFromRecents="true" />

5、设置-开发者选项-显示CPU使用情况

  • packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java
  • packages/apps/TvSettings/Settings/src/com/android/tv/settings/system/DeveloperOptionsActivity.java
  • frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
<service android:name=".LoadAverageService" android:exported="true" />

packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java

1
2
3
4
5
6
7
8
9
10
11
12
private void writeCpuUsageOptions() {
boolean value = mShowCpuUsage.isChecked();
Settings.Global.putInt(getActivity().getContentResolver(),
Settings.Global.SHOW_PROCESSES, value ? 1 : 0);
Intent service = (new Intent())
.setClassName("com.android.systemui", "com.android.systemui.LoadAverageService");
if (value) {
getActivity().startService(service);
} else {
getActivity().stopService(service);
}
}

6、桌面壁纸

  • frameworks/base/core/java/android/service/wallpaper/WallpaperService.java
  • frameworks/base/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
  • frameworks/base/core/java/android/app/IWallpaperManager.aidl
  • frameworks/base/core/java/android/app/WallpaperManager.java
  • frameworks/base/core/java/android/service/wallpaper/IWallpaperEngine.aidl
  • frameworks/base/core/java/android/app/WallpaperInfo.java

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
<service android:name=".ImageWallpaper" android:permission="android.permission.BIND_WALLPAPER" android:exported="true" />

1
2
3
4
com.android.server.SystemServer.startOtherServices
--com.android.server.wallpaper.WallpaperManagerService.WallpaperManagerService

mImageWallpaper = ComponentName.unflattenFromString(context.getResources().getString(R.string.image_wallpaper_component));

frameworks/base/core/res/res/values/config.xml

1
2
<!-- Component name of the built in wallpaper used to display bitmap wallpapers. This must not be null. -->
<string name="image_wallpaper_component" translatable="false">com.android.systemui/com.android.systemui.ImageWallpaper</string>

7、StatusBar接口

frameworks/base/core/java/com/android/internal/statusbar/IStatusBar.aidl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.android.internal.statusbar;

import android.view.KeyEvent;
import com.android.internal.statusbar.StatusBarIcon;
import android.service.notification.StatusBarNotification;

/** @hide */
oneway interface IStatusBar
{
// 显示状态图标
void setIcon(int index, in StatusBarIcon icon);
// 移除图标
void removeIcon(int index);
/**
* Disable some features in the status bar. Pass the bitwise-or of the DISABLE_* flags.
* To re-enable everything, pass {@link #DISABLE_NONE}.
* <cn>禁用状态栏某些特征,传递bit位禁用标识,重置传递{@link #DISABLE_NONE}值</cn>
*/
void disable(int state);

void animateExpandNotificationsPanel();
void animateExpandSettingsPanel();
void animateCollapsePanels();
void setSystemUiVisibility(int vis, int mask);
void topAppWindowChanged(boolean menuVisible);
void setImeWindowStatus(in IBinder token, int vis, int backDisposition,
boolean showImeSwitcher);
void setWindowState(int window, int state);
void buzzBeepBlinked();
void notificationLightOff();
void notificationLightPulse(int argb, int millisOn, int millisOff);
// 显示最近任务列表
void showRecentApps(boolean triggeredFromAltTab);
// 隐藏最近任务列表
void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey);
void toggleRecentApps();
void preloadRecentApps();
void cancelPreloadRecentApps();
void showScreenPinningRequest();

/** M: Support "SystemUI SIM indicator" feature. @{ */
void showSimIndicator(String businessType, long indicatorID);
void hideSimIndicator();
/** }@ */
/** M: [SystemUI] Support Smartbook Feature. @{ */
void dispatchStatusBarKeyEvent(in KeyEvent event);
/** }@ */
}

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<activity android:name=".recent.RecentsActivity"
android:label="@string/accessibility_desc_recent_apps"
android:theme="@style/RecentsStyle"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:resumeWhilePausing="true"
android:exported="true">
<intent-filter>
<action android:name="com.android.systemui.TOGGLE_RECENTS" />
</intent-filter>
</activity>

<!-- Alternate Recents -->
<activity android:name=".recents.RecentsActivity"
android:label="@string/accessibility_desc_recent_apps"
android:exported="false"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:stateNotNeeded="true"
android:resumeWhilePausing="true"
android:theme="@style/config_recents_activity_theme">
<intent-filter>
<action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
</intent-filter>
</activity>

8、USB相关

关联类:

  • frameworks/base/services/usb/java/com/android/server/usb/UsbSettingsManager.java
  • frameworks/base/services/usb/java/com/android/server/usb/UsbHostManager.java
  • frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
  • frameworks/base/services/usb/java/com/android/server/usb/UsbService.java
  • frameworks/base/core/java/android/hardware/usb/IUsbManager.aidl
  • frameworks/base/core/java/android/hardware/usb/UsbAccessory.java
  • frameworks/base/core/java/android/hardware/usb/UsbDevice.java
  • frameworks/base/core/java/android/hardware/usb/UsbInterface.java
  • `frameworks/base/core/java/android/hardware/usb/UsbEndpoint.java’
  • frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java

应用使用文档见https://developer.android.google.cn/guide/topics/connectivity/usb/

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!-- started from UsbDeviceSettingsManager -->
<activity android:name=".usb.UsbConfirmActivity"
android:exported="true"
android:permission="android.permission.MANAGE_USB"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
</activity>

<!-- started from UsbDeviceSettingsManager -->
<activity android:name=".usb.UsbPermissionActivity"
android:exported="true"
android:permission="android.permission.MANAGE_USB"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
</activity>

<!-- started from UsbDeviceSettingsManager -->
<activity android:name=".usb.UsbResolverActivity"
android:exported="true"
android:permission="android.permission.MANAGE_USB"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
</activity>

<!-- started from UsbDeviceSettingsManager -->
<activity android:name=".usb.UsbAccessoryUriActivity"
android:exported="true"
android:permission="android.permission.MANAGE_USB"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
</activity>

<!-- started from UsbDebuggingManager -->
<activity android:name=".usb.UsbDebuggingActivity"
android:permission="android.permission.MANAGE_USB"
android:theme="@style/Theme.SystemUI.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true">
</activity>

<activity android:name=".usb.UsbStorageActivity"
android:label="@*android:string/usb_storage_activity_title"
android:excludeFromRecents="true">
</activity>

UsbStorageActivity
通过状态栏通知项点击进入设置页面启用大容量存储设备,通过电脑访问设备外部存储数据

1
com.android.systemui.usb.StorageNotification#updateUsbMassStorageNotification

UsbPermissionActivity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
android.hardware.usb.UsbManager.requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent)
|__com.android.server.usb.UsbService.requestDevicePermission
|____com.android.server.usb.UsbSettingsManager.requestPermission(android.hardware.usb.UsbDevice, java.lang.String, android.app.PendingIntent)
|______com.android.server.usb.UsbSettingsManager.requestPermissionDialog

private void requestPermissionDialog(Intent intent, String packageName, PendingIntent pi) {
final int uid = Binder.getCallingUid();

// compare uid with packageName to foil apps pretending to be someone else
try {
ApplicationInfo aInfo = mPackageManager.getApplicationInfo(packageName, 0);
if (aInfo.uid != uid) {
throw new IllegalArgumentException("package " + packageName +
" does not match caller's uid " + uid);
}
} catch (PackageManager.NameNotFoundException e) {
throw new IllegalArgumentException("package " + packageName + " not found");
}

long identity = Binder.clearCallingIdentity();
intent.setClassName("com.android.systemui",
"com.android.systemui.usb.UsbPermissionActivity");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_INTENT, pi);
intent.putExtra("package", packageName);
intent.putExtra(Intent.EXTRA_UID, uid);
try {
mUserContext.startActivityAsUser(intent, mUser);
} catch (ActivityNotFoundException e) {
Slog.e(TAG, "unable to start UsbPermissionActivity");
} finally {
Binder.restoreCallingIdentity(identity);
}
}

UsbDebuggingActivity

Name of the activity or service that prompts the user to reject, accept, or whitelist
an adb host’s public key, when an unwhitelisted host connects to the local adbd.
Can be customized for other product types

9、网络流量数据超额界面

frameworks/base/services/core/java/com/android/server/net/NetworkPolicyManagerService.java

1
2
3
4
5
6
7
8
9
10
11
12
com.android.server.net.NetworkPolicyManagerService.updateNotificationsLocked
|__com.android.server.net.NetworkPolicyManagerService.notifyOverLimitLocked
|____com.android.server.net.NetworkPolicyManagerService.buildNetworkOverLimitIntent

private static Intent buildNetworkOverLimitIntent(NetworkTemplate template) {
final Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.systemui", "com.android.systemui.net.NetworkOverLimitActivity"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_NETWORK_TEMPLATE, template);
return intent;
}

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
<!-- started from NetworkPolicyManagerService -->
<activity
android:name=".net.NetworkOverLimitActivity"
android:exported="true"
android:permission="android.permission.MANAGE_NETWORK_POLICY"
android:theme="@android:style/Theme.DeviceDefault.Light.Panel"
android:finishOnCloseSystemDialogs="true"
android:launchMode="singleTop"
android:taskAffinity="com.android.systemui.net"
android:excludeFromRecents="true" />

10、设置-显示-互动屏保-甜品盒

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!-- platform logo easter egg activity -->
<activity
android:name=".DessertCase"
android:exported="true"
android:label="@string/dessert_case"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:hardwareAccelerated="true"
android:launchMode="singleInstance"
android:screenOrientation="locked"
android:process=":sweetsweetdesserts"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<!-- a gallery of delicious treats -->
<service
android:name=".DessertCaseDream"
android:exported="true"
android:label="@string/dessert_case"
android:permission="android.permission.BIND_DREAM_SERVICE"
android:enabled="false"
android:process=":sweetsweetdesserts"
>
<intent-filter>
<action android:name="android.service.dreams.DreamService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>

11、彩蛋游戏--设置-关于设备-版本号(五次连击)

frameworks/base/core/java/com/android/internal/app/PlatLogoActivity.java
packages/apps/TvSettings/Settings/src/com/android/tv/settings/about/AboutActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
com.android.tv.settings.about.AboutActivity.mPlatLogoActivity

/**
* Intent component to launch PlatLogo Easter egg.
*/
private static final ComponentName mPlatLogoActivity = new ComponentName("android",
"com.android.internal.app.PlatLogoActivity");


com.android.internal.app.PlatLogoActivity#onAttachedToWindow

startActivity(new Intent(Intent.ACTION_MAIN)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
.addCategory("com.android.internal.category.PLATLOGO"));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<activity android:name=".egg.LLandActivity"
android:theme="@android:style/Theme.Material.Light.NoActionBar"
android:exported="true"
android:label="@string/lland"
android:hardwareAccelerated="true"
android:launchMode="singleInstance"
android:screenOrientation="locked"
android:process=":sweetsweetdesserts"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.android.internal.category.PLATLOGO" />
</intent-filter>
</activity>

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<activity android:name=".egg.LLandActivity"
android:theme="@android:style/Theme.Material.Light.NoActionBar"
android:exported="true"
android:label="@string/lland"
android:hardwareAccelerated="true"
android:launchMode="singleInstance"
android:screenOrientation="locked"
android:process=":sweetsweetdesserts"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.android.internal.category.PLATLOGO" />
</intent-filter>
</activity>

12、Somnambulator

关联类

frameworks/base/core/java/android/service/dreams/Sandman.java

A simple activity that launches a dream.

Note: This Activity is special. If this class is moved to another package or renamed, be sure to update the component name in {@link Sandman}.

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<activity android:name=".Somnambulator"
android:label="@string/start_dreams"
android:icon="@mipmap/ic_launcher_dreams"
android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
android:exported="true"
android:excludeFromRecents="true"
>
<!--
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.DESK_DOCK" />
</intent-filter>
</activity>

13、打盹模式组件DozeService

frameworks/base/core/res/res/values/config.xml

1
2
3
<!-- Dream of notifications -->
<string name="config_dozeComponent">com.android.systemui/com.android.systemui.doze.DozeService | null</string>
<bool name="config_dozeAfterScreenOff">true | false</bool>

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
<!-- Doze with notifications, run in main sysui process for every user  -->
<service
android:name=".doze.DozeService"
android:exported="true"
android:singleUser="true"
android:permission="android.permission.BIND_DREAM_SERVICE" />

14、多窗口

frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- Add for Multi-window -->
<provider
android:name="com.android.systemui.floatpanel.FloatWindowProvider"
android:authorities="com.android.systemui.floatwindow"
android:exported="true"
android:readPermission="com.android.launcher.permission.READ_SETTINGS"
android:writePermission="com.android.launcher.permission.WRITE_SETTINGS" />
<receiver android:name=".floatpanel.FloatModel" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="action_multiwindow_disable_pkg_updated" />
<data android:scheme = "package"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.LOCALE_CHANGED" />
</intent-filter>
</receiver>


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wilber_bai@hotmail.com

文章标题:768项目MT6735 SystemUI外部接口

文章字数:2,917

本文作者:风沉殇史

发布时间:2017-12-12, 12:12:12

最后更新:2020-01-03, 15:36:06

原始链接:http://wilber.win/posts/f62b7330/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏