android4.4 添加快捷开关(以截屏为例)

A,frameworks\base\packages\SystemUI\res\values\config.xml

         添加: <bool name="quick_settings_show_screenshot">truebool>

        

B,frameworks\base\packages\SystemUI\res\values\strings.xml

         添加:<string name="quick_settings_screen_shot_label">Screen shotstring

 

C,frameworks\base\packages\SystemUI\res\values-zh-rCN\strings.xml

         添加:<string name="quick_settings_screen_shot_label" msgid="f9870466a61654f367d">屏幕截图string>

D,添加图标

        ①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

E,添加单布局文件:

frameworks\base\packages\SystemUI\res\layout\quick_settings_tile_screen_shot.xml

xml version="1.0" encoding="utf-8"?>

<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"
    />

 

 

F,添加相应java代码:

         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;

再在addTemporaryTiles() 方法里面的最后添加相应代码:

///////////////////////////////////////_1126/////////////////////////////////////////////
            // 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(TAG, "---------------------------------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);
        }

 

随后在外部添加相应调用代码:

/*******************_1126*********************************/
    
    // 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)) {
                    mScreenshotConnection = conn;
                    mHandler.postDelayed(mScreenshotTimeout, 10000);
                }
            }
        }
    
    /**************************************************/

 

系统编译后的最终效果如下图(找了个关于SIM的图标代替):

android4.4 添加快捷开关(以截屏为例)_第1张图片

      

------------------------------------------------------------------------------------- -------------------------------------- -------------------------

参考:http://blog.csdn.net/yicao821/article/details/17416649

转载于:https://www.cnblogs.com/Miami/p/4998441.html

你可能感兴趣的:(android4.4 添加快捷开关(以截屏为例))