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

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

A,frameworksasepackagesSystemUI esvaluesconfig.xml

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

        

B,frameworksasepackagesSystemUI esvaluesstrings.xml

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

 

C,frameworksasepackagesSystemUI esvalues-zh-rCNstrings.xml

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

D,添加图标

        ①frameworksasepackagesSystemUI esdrawable-hdpiic_qs_screen_shot.png

②frameworksasepackagesSystemUI esdrawable-mdpiic_qs_screen_shot.png

③frameworksasepackagesSystemUI esdrawable-xhdpiic_qs_screen_shot.png

E,添加单布局文件:

frameworksasepackagesSystemUI eslayoutquick_settings_tile_screen_shot.xml

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

<TextViewxmlns: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代码:

         frameworksasepackagesSystemUIsrccomandroidsystemuistatusbarphoneQuickSettings.java

 

 import android.content.ServiceConnection;import android.os.IBinder;import android.os.Message;import android.os.Messenger;

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

///_1126/// screen shotQuickSettingsTileView 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() {@Overridepublic 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() {@Overridepublic 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()) {@Overridepublic 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) {}}}@Overridepublic void onServiceDisconnected(ComponentName name) {}};if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {mScreenshotConnection = conn;mHandler.postDelayed(mScreenshotTimeout, 10000);}}}/**************************************************/

 

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

      

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

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

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

更多相关:

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...

  • android:id 为控件指定相应的IDandroid:text 指定控件的文本,置尽量使用strings.xmlandroid:grivity 指定控件的基本位置 ,比如举重,居右,android:padding 指定控件的内边距,控件当中的内容android:singleLine 如果设置为真的话,则将控件的内容在同一行当中显示...

  • 布局主要分两个 其中主布局是

  • 大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它。它的使用更加简单,只需要创建一个 AnimationDrawabledF对象来表示Frame动画,然后通过addFrame 方法把每一帧要显示的内容添加进去,并设置播放间隔时间,本例子中间隔时间为5S, 最后通过start 方法就可。 以播放这个动画了,...

  • 作业要求: 作一个显示框里面分成三行 一二行占这个框的1/2 第三行独占1/2 第三行里面分成两列第一列占25%,第二列占75%。 屏幕显示效果 实现步骤:  

  • 一:Service简介 Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service。 1:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交...