settings里添加两指调节音量item及功能
来源:互联网 发布:惠州网络问政阳光清单 编辑:程序博客网 时间:2024/06/07 07:51
记录开发一个手势体感功能—两指调节音量
触摸屏的功能肯定会用到PhoneWindow.java,在frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java下面(基于Android6.0),
//add (start)import android.content.Intent;import android.content.ContentResolver;import android.provider.Settings;import android.app.Instrumentation;import java.text.DecimalFormat;//add (end)public class PhoneWindow extends Window implements MenuBuilder.Callback {private final static String TAG = "PhoneWindow";//add (start) private Context mContext; private int pointy1 = 0; private int pointy2 = 0; private int mpointy1 = 0; private int mpointy2 = 0; private boolean is_move = false; private boolean isSendKeyCodeThreadStart = false;//add (end) public PhoneWindow(Context context) { super(context); //add (start) mContext = context; //add (end) mLayoutInflater = LayoutInflater.from(context); }//add (start) private boolean setStreamVolume(MotionEvent ev){ if(ev.getAction()== MotionEvent.ACTION_POINTER_2_DOWN){ pointy1= (int) ev.getAxisValue(MotionEvent.AXIS_Y, 0); pointy2= (int) ev.getAxisValue(MotionEvent.AXIS_Y, 1); }else if(ev.getAction()== MotionEvent.ACTION_MOVE){ try { mpointy1 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 0); mpointy2 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 1); }catch (IllegalArgumentException i) { //do nothing } if((mpointy1 > pointy1) && (mpointy2 > pointy2)){ try { pointy1 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 0); pointy2 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 1); }catch (IllegalArgumentException i) { //do nothing } if(!isSendKeyCodeThreadStart){ sendKeyCode(KeyEvent.KEYCODE_VOLUME_DOWN); //sendKeyCode((float)mpointy1); } is_move = true; Log.e("pp","===========111============"); }else if((mpointy1 < pointy1) && (mpointy2 < pointy2)){ try { pointy1 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 0); pointy2 = (int) ev.getAxisValue(MotionEvent.AXIS_Y, 1); }catch (IllegalArgumentException i) { //do nothing } if(!isSendKeyCodeThreadStart){ sendKeyCode(KeyEvent.KEYCODE_VOLUME_UP); //sendKeyCode((float)mpointy1); } is_move = true; Log.e("pp","===========222============"); } }else if(ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_2_UP){ isSendKeyCodeThreadStart = false; return false; } return false; } private void sendKeyCode(final int keyCode){ new Thread() { @Override public void run() { isSendKeyCodeThreadStart = true; Instrumentation instrumentation = new Instrumentation(); while (isSendKeyCodeThreadStart) { if(is_move){ try { instrumentation.sendKeyDownUpSync(keyCode); Log.e("pp","===========keyCode============"+keyCode); } catch (Exception e) { e.printStackTrace(); Log.e("pp","========Exception======"); } is_move = false; } Log.e("pp","===========OOO============"); } } }.start(); } //add (end)@Override public boolean dispatchTouchEvent(MotionEvent ev) { final Callback cb = getCallback(); if (DBG_MOTION) { Log.d(TAG, "dispatchTouchEvent = " + ev + ", cb = " + cb + ", destroyed? = " + isDestroyed() + ", mFeatureId = " + mFeatureId); } ContentResolver resolver = mContext.getContentResolver(); //add (start) if (Settings.System.getInt(resolver, "Two_fingers_Switch_themes", 0) == 1){ setStreamVolume(ev); } //add(end) return cb != null && !isDestroyed() && mFeatureId < 0 ? cb.dispatchTouchEvent(ev) : super.dispatchTouchEvent(ev); }
然后在settings里面在加一个界面(针对Android6.0)代码,如下:
package com.android.settings;import android.content.ContentResolver;import android.content.res.Configuration;import android.os.Bundle;import android.os.SystemProperties;import android.preference.Preference;import android.preference.Preference.OnPreferenceClickListener;import android.preference.PreferenceFragment;import android.provider.Settings;import android.preference.PreferenceScreen;import android.preference.SwitchPreference;import android.util.Log;public class FingerGestureSettings extends PreferenceFragment implements Preference.OnPreferenceChangeListener, OnPreferenceClickListener { private static final String TAG = "FingerGestureSettings"; private static final String KEY_TWO_FINGER_CHANGEVOLUME = "two_fingers_changevolume"; private SwitchPreference mTwoFingerChangeVolume; private ContentResolver mResolver = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.finger_gesture_settings); mResolver = getActivity().getContentResolver(); mTwoFingerChangeVolume = (SwitchPreference) findPreference(KEY_TWO_FINGER_CHANGEVOLUME); mTwoFingerChangeVolume.setOnPreferenceClickListener(this); mTwoFingerChangeVolume.setOnPreferenceChangeListener(this); mTwoFingerChangeVolume.setPersistent(false); if (getResources().getBoolean(R.bool.remove_two_finger_changevolume)) { getPreferenceScreen().removePreference(mTwoFingerChangeVolume); } mTwoFingerChangeVolume.setChecked((Settings.System.getInt(mResolver, "Two_fingers_Switch_themes", 0) == 1) ? true : false); Log.d(TAG, "mTwoFingerChangeVolume=" + Settings.System.getInt(mResolver, "Two_fingers_Switch_themes", 0) + " "); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onPause() { super.onPause(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { Log.e(TAG, "onPreferenceTreeClick"); return super.onPreferenceTreeClick(preferenceScreen, preference); } public boolean onPreferenceChange(Preference preference, Object objValue) { final String key = preference.getKey(); Log.e(TAG, "onPreferenceChange,key=" + key); if (KEY_TWO_FINGER_CHANGEVOLUME.equals(key)) { boolean checked = mTwoFingerChangeVolume.isChecked(); Log.e(TAG, "checked=" + !checked); Settings.System.putInt(mResolver, "Two_fingers_Switch_themes", !checked ? 1 : 0); Log.e(TAG, "two_fingers_changevolume=" + Settings.System.getInt(mResolver, "Two_fingers_Switch_themes", 0)); } return true; } @Override public boolean onPreferenceClick(Preference preference) { Log.e(TAG, "onPreferenceClick"); return false; }}
settings里面还要找到相应的布局文件添加一下布局即可,如:新建一个xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" android:title="@string/two_finger_changevolume_title" > <SwitchPreference android:key="two_fingers_changevolume" android:summary="@string/accessibility_two_fingers_changevolume_summary" android:title="@string/accessibility_two_fingers_changevolume_title" /></PreferenceScreen>
如上基本可以在settings里面添加一个功能:两指调节音量
阅读全文
0 0
- settings里添加两指调节音量item及功能
- 为cocos2d-x添加调节视频音量的功能(Android)
- 音量调节及静音
- 音量调节及静音
- Android里的音量调节
- Dephi 音量调节及静音
- 音量及屏幕亮度调节
- Android音量调节两种方式
- 系统音量调节添加回调方法
- 【Android】系统音量及屏幕亮度调节
- 音量调节
- 音量调节
- 音量调节
- Settings添加屏幕旋转功能
- Android 框架层录音音量调节功能引入
- 音频技术之调节音量及设置静音
- 音频技术之调节音量及设置静音
- VC++音频技术之调节音量及设置静音
- 如何在Linux环境下建立Git Server并设置用户
- 程序员的宇宙时间线
- access函数判断文件是否存在
- Swift项目引入第三方库的方法
- [一起学Hive]之十二-Hive SQL的优化
- settings里添加两指调节音量item及功能
- Websocket协议的学习、调研和实现
- Java分支语句
- Android秒级编译方案-Freeline集成和使用过程中的一些问题和解决方案
- CSS-display、块级元素与内联元素
- Hive权限管理默认认证-传统模式
- Java 选择排序
- N的阶乘的长度 斯特林近似
- php无法执行system()的shell脚本但是Linux终端可以执行