转载地址:
http://blog.csdn.net/yicao821/article/details/17416649
1》frameworks\base\packages\SystemUI\res\values\config.xml
- <!-- Whether screenshot shows up in quick settings or not add by xxx-->
- <bool name="quick_settings_show_screenshot">true</bool>
- <string name="quick_settings_screen_shot_label">Screen shot</string>
- <string name="quick_settings_screen_shot_label" msgid="f9870466a61654f367d">屏幕截图</string>
4》添加截屏图标
①frameworks\base\packages\SystemUI\res\drawable-hdpi\ic_qs_screen_shot.png
②frameworks\base\packages\SystemUI\res\drawable-mdpi\ic_qs_screen_shot.png
③frameworks\base\packages\SystemUI\res\drawable-xhdpi\ic_qs_screen_shot.png
5》frameworks\base\packages\SystemUI\res\layout\quick_settings_tile_screen_shot.xml
- <?xml version="1.0" encoding="utf-8"?>
- <!-- Copyright (C) 2012 The Android Open Source Project
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/screen_shot_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_screen_shot"
- android:text="@string/quick_settings_screen_shot_label"
- />
6》frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettings.java
- import android.content.ServiceConnection;
- import android.os.IBinder;
- import android.os.Message;
- import android.os.Messenger;
- /*
- QuickSettingsTileView mediaTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- mediaTile.setContent(R.layout.quick_settings_tile_media, inflater);
- parent.addView(mediaTile);
- QuickSettingsTileView imeTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- imeTile.setContent(R.layout.quick_settings_tile_ime, inflater);
- imeTile.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- parent.removeViewAt(0);
- }
- });
- parent.addView(imeTile);
- */
- // screen shot
- QuickSettingsTileView ScreenShotTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- ScreenShotTile.setContent(R.layout.quick_settings_tile_screen_shot, inflater);
- ScreenShotTile.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Log.i("bright", "screen shot is clicked.");
- //takeScreenshot();
- mBar.collapseAllPanels(true);
- mHandler.removeCallbacks(mScreenshotClick);
- mHandler.postDelayed(mScreenshotClick, 500);
- }
- });
- if (mContext.getResources().getBoolean(R.bool.quick_settings_show_screenshot)) {
- parent.addView(ScreenShotTile);
- }
- // add by xxx, for screen shot in quick settings.
- private final Runnable mScreenshotClick = new Runnable() {
- public void run() {
- takeScreenshot();
- }
- };
- private final Object mScreenshotLock = new Object();
- private ServiceConnection mScreenshotConnection = null;
- private final Runnable mScreenshotTimeout = new Runnable() {
- @Override public void run() {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != null) {
- mContext.unbindService(mScreenshotConnection);
- mScreenshotConnection = null;
- }
- }
- }
- };
- // Assume this is called from the Handler thread.
- private void takeScreenshot() {
- Log.i("bright", "start take screen shot.");
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != null) {
- return;
- }
- ComponentName cn = new ComponentName("com.android.systemui",
- "com.android.systemui.screenshot.TakeScreenshotService");
- Intent intent = new Intent();
- intent.setComponent(cn);
- ServiceConnection conn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection != this) {
- return;
- }
- Messenger messenger = new Messenger(service);
- Message msg = Message.obtain(null, 1);
- final ServiceConnection myConn = this;
- Handler h = new Handler(mHandler.getLooper()) {
- @Override
- public void handleMessage(Message msg) {
- synchronized (mScreenshotLock) {
- if (mScreenshotConnection == myConn) {
- mContext.unbindService(mScreenshotConnection);
- mScreenshotConnection = null;
- mHandler.removeCallbacks(mScreenshotTimeout);
- }
- }
- }
- };
- msg.replyTo = new Messenger(h);
- msg.arg1 = msg.arg2 = 1;
- try {
- messenger.send(msg);
- } catch (RemoteException e) {
- }
- }
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {}
- };
- if (mContext.bindService(
- intent, conn, Context.BIND_AUTO_CREATE, UserHandle.USER_CURRENT)) {
- mScreenshotConnection = conn;
- mHandler.postDelayed(mScreenshotTimeout, 10000);
- }
- }
- }