Hay una preferencia en la clase Settings.Secure que se oculta desde el SDK:
/**
* The preferred network mode 7 = Global
* 6 = EvDo only
* 5 = CDMA w/o EvDo
* 4 = CDMA/EvDo auto
* 3 = GSM/WCDMA auto
* 2 = WCDMA only
* 1 = GSM only
* 0 = GSM/WCDMA preferred
* @hide
*/
public static final String PREFERRED_NETWORK_MODE =
"preferred_network_mode";
Usted podría utilizar la reflexión sobre este o simplemente localizar la constante para su proyecto. El problema con esto es que no puede cambiar el valor de esta configuración (como con todas las configuraciones seguras), solo puede leerla. Los valores mencionados anteriormente no son los únicos posibles, en realidad hay algunos más ubicados en com.android.internal.telephony.RILConstants, que de nuevo se oculta del SDK y requeriría Reflection para acceder.
Hay otro método oculto en TelephonyManager, pero nuevamente es de solo lectura, no hay otro método para establecer esta constante. Esto dirá exactamente lo que quiere saber, si el dispositivo está ajustado en "LTE/CDMA" (LTE_ON_CDMA_TRUE) o "Sólo CDMA" (LTE_ON_CDMA_FALSE):
/**
* Return if the current radio is LTE on CDMA. This
* is a tri-state return value as for a period of time
* the mode may be unknown.
*
* @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
* or {@link Phone#LTE_ON_CDMA_TRUE}
*
* @hide
*/
public int getLteOnCdmaMode() {
try {
return getITelephony().getLteOnCdmaMode();
} catch (RemoteException ex) {
// Assume no ICC card if remote exception which shouldn't happen
return Phone.LTE_ON_CDMA_UNKNOWN;
} catch (NullPointerException ex) {
// This could happen before phone restarts due to crashing
return Phone.LTE_ON_CDMA_UNKNOWN;
}
}
De mi investigación no se podía hacer tal una aplicación sin acceso de root y usando algo como setprop
desde la línea de comandos, pero incluso entonces puede necesitar reiniciar todo el proceso de telefonía para que esta configuración surta efecto.
Finalmente, si todavía está interesado, consulte com.android.phone.Settings para ver cómo el sistema maneja esta alternancia. Es bastante elaborado, y como mencioné requeriría permisos que una aplicación Android normal no se otorgaría.
yo sepa, las aplicaciones ordinarias del SDK de Android no pueden cambiar esto. – CommonsWare
Ah, muy interesante. Espero que ese no sea el caso. Investigando ahora. Escuché que existe un widget para teléfonos HTC, lo que me lleva a creer que * se puede * hacer. –
Si el widget de la aplicación en cuestión se envía con teléfonos HTC, esa no es una aplicación ordinaria de Android SDK. – CommonsWare