在關機界面添加截圖功能,可以參考如下步驟修改實現:
1.步驟
1.1
<string name="global_action_screenshot_xxxx">screenshot</string>
<string name="global_action_screenshot_xxxx">截屏</string>
1.2
請注意,爲了保證資源文件能夠被編譯進去,請同步將此資源添加到symbols.xml中。
<java-symbol type="string" name="global_action_screenshot" />
2.步驟
在alps\frameworks\base\core\res\res\drawable-hdpi中
ic_lock_screenshot.png
3.步驟
frameworks\base\services\core\java\com\android\server\policy\GlobalActions.java
private static final String GLOBAL_ACTION_KEY_SCREENSHOT = "screenshot";
文件中的createDialog()函數中添加:
/**
* Create the global actions dialog.
* @return A new dialog.
*/
private GlobalActionsDialog createDialog() {
......
onAirplaneModeChanged();
mItems = new ArrayList<Action>();
String[] defaultActions = mContext.getResources().getStringArray(
com.android.internal.R.array.config_globalActionsList);
ArraySet<String> addedKeys = new ArraySet<String>();
for (int i = 0; i < defaultActions.length; i++) {
String actionKey = defaultActions[i];
if (addedKeys.contains(actionKey)) {
// If we already have added this, don't add it again.
continue;
}
.....
////////Added for screenshot items start
else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {
mItems.add(new ScreenShotAction());
}
/////////added end
......
}
private final class ScreenShotAction extends SinglePressAction {
private ScreenShotAction() {
super(com.android.internal.R.drawable.ic_lock_screenshot,
R.string.global_action_screenshot);
}
@Override
public boolean showDuringKeyguard() {
return true;
}
@Override
public boolean showBeforeProvisioning() {
return true;
}
@Override
public void onPress() {
mWindowManagerFuncs.xxxCaptureScreen();
}
}
4.步驟
alps\frameworks\base\core\java\android\view\WindowManagerPolicy.java文件中,
找到WindowManagerFuncs這個interface的定義,增加如下function的聲明:
public interface WindowManagerFuncs {
public void xxxCaptureScreen();//
}
5.步驟
alps\frameworks\base\core\java\android\view\WindowManagerPolicy.java文件中在最後,增加如下function的聲明:
public void xxxScreenshotNow();
6.步驟
frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java
中,因爲其實現了WindowManagerFuncs這個接口,需要在該文件中添加xxxCaptureScreen()函數的實現體。
找到xxxCaptureScreen()函數,在其後面添加xxxCaptureScreen()函數,函數內容如下:
@Override
public void xxxCaptureScreen() {
mPolicy.xxxScreenshotNow();
}
7.步驟
alps\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java
中,因爲其實現了WindowManagerPolicy這個接口,需要在該文件中添加xxxScreenshotNow()函數的實現體。該方法即可實現截圖
public void xxxScreenshotNow(){
}