Configuración del escritorio con desplazamiento cíclico del escritorio del sistema Android
2. Agregue esta función al código fuente nativo de Android.
2. Código fuente nativo de Android Agregue esta función
Idea: primero cree la interfaz y luego guarde el valor seleccionado en la tabla del sistema en el sistema (entrada de shell adb) data/data/com.android.provides. settings/databases /settings.db base de datos,
Luego agregue esta función en el código fuente nativo de Android
El código fuente de Launch2 puede obtener si se selecciona un escritorio recurrente en la base de datos, para realizar tareas relacionadas con el código.
Primero vaya a la interfaz de usuario:
Agregue una casilla de verificación en el archivo accesibilidad_settings.xml en la fuente de configuración:
Código Java
android:key="launch_repeat"android:title="@string/launch_repeat_title"
android:persistent="false"/gt;
Agregar res en la fuente de configuración Relevante código:
Agregar código relevante en valores/string.xml:
Iniciar duplicación
En valores-zh-rCN/string.xml:
"Escritorio recurrente"
Agregue el código fuente de configuración de OnCreate en AccessibilitySettings.java:
Código Java
/*** *** **************************************/
mLaunchRepeat=( CheckBoxPreference ) findPreference(
LAUNCH_REPEAT);
int LaunchRepeat=Settings.System.getInt(this.getContentResolver(),
"launch_repeat", 0); //eliminar si está seleccionado
if(LaunchRepeat==1)//si está seleccionado, compruébalo la próxima vez que abras la configuración
mLaunchRepeat.setChecked(true);
p>else
mLaunchRepeat.setChecked(false); //Si no está seleccionado, déjelo sin marcar la próxima vez que abra la configuración
/* *** *************************************/
Por supuesto , hay algunos La cantidad debe definirse:
private final String LAUNCH_REPEAT =
"launch_repeat";
private CheckBoxPreference mLaunchRepeat;
También en la función onPreferenceTreeClick Se agregó contenido:
Código Java
//xxnan agregado
if(LAUNCH_REPEAT.putInt(getContentResolver(), p>
" launch_repeat",
((CheckBoxPreference)preference).isChecked()?
1:0 // Almacenar la selección en la tabla del sistema
}
//Agregado por xxnan
Si está listo para seleccionar "Desktop Loop" al hacer clic, puede ingresar (adb she
ll Enter) y vea la tabla del sistema
en la base de datos settings.db (sqlite3 settings.db) en data/ data/com.android.providers.settings/databases 33|launch_repeat|1 (seleccione * de sistema;).
En este punto, ha almacenado datos en la tabla del sistema y en la interfaz de usuario, el siguiente paso es obtener este valor en el código fuente de Launch2 (bucle o no).
Vaya al código fuente de Launcher2 y busque el archivo Workspace.java, que tiene los cambios correspondientes:
En onTouchEvent, antes de que haya cambios en el bucle, se ve así:
Código Java
caso MotionEvent.
if (mTouchState == TOUCH_STATE_SCROLLING) {
Final VelocityTracker velocityTracker = mVelocityTracker
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity;
final int velocidadX = (int)
velocityTracker.getXVelocity(mActivePointerId);
final int screenWidth = getWidth()
final int WhichScreen = (mScrollX) (screenWidth / 2))/ screenWidth;
final float scrolledPos = (float) mScrollX / screenWidth
Log.i("velocityX", "velocityX=" speedX "whatScreen= " cualPantalla);
/****** ********************************** ** *********/
//modificado por xxnan
if (velocityX gt; SNAP_VELOCITY) {
// Lanzar fuerte suficiente para moverse hacia la izquierda.
// No muevas más de una pantalla a la vez.
Log.i("numscreen", "numscreen=" mCurrentScreen);
/* final intbound = scrolledPos lt; whichScreen?
( (mCurrentScreen) getChildCount()) - 1 ) getChildCount():
mCurrentScreen; */
final int enlazado = ( (mCurrentScreen getChildCount()) - 1 ) getChildCount()
Log.i("numscreen", "bound="bound);
snapToScreen(bound, speedX, true);
} else if (velocityX lt; -SNAP_VELOCITY ) {
// Muévete con fuerza hacia la derecha
// No vuele por varias pantallas a la vez.
(mCurrentScreen 1) getChildCount(): mCurrentScreen;*/
final intbound = (mCurrentScreen 1) getChildCount()
snapToScreen(bound, speedX) , verdadero);
} else {
snapToScreen(whatScreen, 0, verdadero);
}
/**** ********************** **********************/
//El siguiente es el código local
/*if (velocityX gt; SNAP_VELOCITY amp; mCurrentScreen gt; 0) {
// Muévete con fuerza hacia la izquierda.
// No muevas más de una pantalla a la vez.
final intbound = scrolledPos lt; whatScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.napToScreen(Math. min(whatScreen, encuadernado) , velocidadX, verdadero);
} else if (velocityX lt; -SNAP_VELOCITY amp; amp; mCurrentScreen lt;
getChildCount() - 1) {
// Muévete hacia la derecha
// No vueles por varias pantallas a la vez.
mCurrentScreen 1: mCurrentScreen;
snapToScreen(Math.max(cuálScreen, enlazado), velocidadX, verdadero
} else {
<); p> snapToScreen(whatScreen, 0, true);}*/
}
mTouchState = TOUCH_STATE_REST;
ActivePointerId = INVALID_POINTER ;
releaseVelocityTracker();
break;
Luego, es necesario agregar un juicio donde se realiza la modificación si el valor obtenido en el sistema. es 1, se puede repetir, si es 0, no se puede repetir.
El código se modifica de la siguiente manera:
Código Java
case MotionEvent.ACTION_UP:
if (mTouchState == TOUCH_STATE_SCROLLING) {
Final VelocityTracker velocidadTracker = mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
final int velocidadX = (int)
velocidadTracker.getXVelocity (mActivePointerId);
final int screenWidth = getWidth();
final int whichScreen = (mScrollX (screenWidth / 2))/ screenWidth; >final float scrolledPos = (float) mScrollX / screenWidth;
Log.i(" velocidadX", "velocityX=" velocidadX "whatScreen="
/***); *** *******************************************/
/ / modificado por xxnan 2013-1-9
launch_repeat=Settings.System.getInt(mContext.getContentResolver(),
"launch_repeat", 0 //take); saque la tabla del sistema con el valor de "launch_repeat"
Log.i("launch_repeat"," launch_repeat=" launch_repeat);
if(launch_repeat==1)// si es 1, entonces haz un bucle, esto es lo que se cambió antes
{
if (velocityX gt; SNAP_VELOCITY) {
//Muévete con fuerza al izquierda.
// No muevas más de una pantalla a la vez.
Log.i("numscreen", "numscreen=" mCurrentScreen);
/* final intbound = scrolledPos lt; whichScreen?
( (mCurrentScreen) getChildCount()) - 1 ) getChildCount():
mCurrentScreen; */
final int enlazado = ( (mCurrentScreen getChildCount()) - 1 ) getChildCount()
Log.i("numscreen", "bound="bound);
snapToScreen(bound, speedX, true);
} else if (velocityX lt; -SNAP_VELOCITY ) {
// Muévete con fuerza hacia la derecha
// No vuele por varias pantallas a la vez.
(mCurrentScreen 1) getChildCount(): mCurrentScreen;*/
final intbound = (mCurrentScreen 1) getChildCount()
snapToScreen(bound, speedX) , verdadero);
} else {
snapToScreen(whatScreen, 0, verdadero);
}
}
else// Si es 0, es el código local
{
if (velocityX gt; SNAP_VELOCITY amp; mCurrentScreen gt; 0) {
/ / Muévete fuerte hacia la izquierda.
// No muevas más de una pantalla a la vez.
final intbound = scrolledPos lt; whatScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.napToScreen(Math. min(whatScreen, encuadernado) , velocidadX, verdadero);
} else if (velocityX lt; -SNAP_VELOCITY amp; amp; mCurrentScreen lt;
getChildCount() - 1) {
// Muévete hacia la derecha
// No vueles por varias pantallas a la vez.
mCurrentScreen 1: mCurrentScreen;
snapToScreen(Math.max(cuálScreen, enlazado), velocidadX, verdadero
} else {
snapToScreen(cuálScreen, 0, verdadero);
}
}
}
/******* * *****************************************/
// El siguiente es el código local
/* if (velocityX gt; SNAP_VELOCITY amp; mCurrentScreen gt; 0) {
// Muévete hacia la izquierda con fuerza.
// No muevas más de una pantalla a la vez.
final intbound = scrolledPos lt; whatScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.napToScreen(Math. min(whatScreen, encuadernado) , velocidadX, verdadero);
} else if (velocityX lt; -SNAP_VELOCITY amp; amp; mCurrentScreen lt;
getChildCount() - 1) {
// Muévete fuerte hacia la derecha
// No vuele a través de varias pantallas a la vez
mCurrentScreen 1: mCurrentScreen;
snapToScreen(Math.max( whatScreen, enlazado), velocidadX, verdadero);
} else {
snapToScreen(whatScreen, 0, verdadero
}*/); p>
}
mTouchState = TOUCH_STATE_REST;
ActivePointerId = INVALID_POINTER;
releaseVelocityTracker(); p>
Por supuesto, aquí es necesario definir varias cantidades y importar varios paquetes:
Importar paquete de software:
//add by xxnan
importar android.content .ContentResolver; //Obtener datos de las tablas del sistema
importar android.provider.Settings;
Definir variables:
privado int launch_repeat; //obtiene el valor de si se repite o no
Estos son todos los cambios que necesita realizar, además de compilar el código fuente para Launch2 y Configuración en paquete/aplicaciones y colocar el resultado. fuera/objetivo/.
Launch2.apk y Settings.apk en/system/app reemplazarán las dos aplicaciones en system/app en el teléfono.