Red de conocimiento informático - Conocimiento informático - Configuración del escritorio con desplazamiento cíclico del escritorio del sistema Android

Configuración del escritorio con desplazamiento cíclico del escritorio del sistema Android

1. Seleccione "Desktop Loop" en "Accesibilidad" de la configuración del teléfono móvil

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(),

" 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

}*/

}

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.