Preguntas y respuestas: ¿Qué funciones se han actualizado con Android P?
1. Función WiFi RTT: navegación precisa en terrenos complejos
La función WiFi RTT es una nueva función lanzada por Android P. En principio, es consistente con el principio de posicionamiento del red celular, pero esta función Para compensar en gran medida las deficiencias del posicionamiento interior de las redes celulares, WiFi RTT podrá proporcionar un posicionamiento interior de alta precisión, lo cual es difícil de lograr con las redes celulares.
WiFi rtt es una característica completamente nueva. Agregue el paquete RTT en el paquete android.net.wifi para almacenar clases e interfaces relacionadas con WiFi RTT.
La API de WiFi RTT se centra en WifiRttManager. Con la ayuda de puntos de acceso AP o WiFi y el principio de RTT, la ubicación del dispositivo se puede localizar con precisión a través de más de tres puntos de alcance.
WiFiRTTManager proporciona una interfaz de alcance, que es una operación de alcance asíncrona. Según la documentación oficial (/reference/Android/net/wifi/RTT/wifirtmanager.html), su interfaz de rango es la siguiente:
rango inicial vacío (solicitud de rango, devolución de llamada RangingResultCallback, controlador Handler) ;
Nota:? La definición de interfaz de la versión 1 de vista previa de Android P de la plataforma SDK es diferente, pero la interfaz real en la imagen oficial es consistente con esto. Los desarrolladores deben actualizar a la última versión de Android P Preview 2, en la que Google ha corregido esta interfaz.
En la interfaz, RangingRequest se construye a partir de RangingRequest. El generador y los parámetros requeridos por RangingRequest que generará RangingRequest. ¿El constructor puede obtener contenido relevante a través de servicios del sistema como WiFiManager, como? list & ltScanResult & gtscan results = wifi manager . getscanresults();
A continuación se proporciona una demostración de prueba sencilla para su referencia:
Privado WifiRttManager wifiRttManager
Privado WifiManager wifiManager
@override
vacío protegido al crear (estado de instancia guardado del paquete){
// ......
if (getPackageManager().hasSystemFeature(administrador de paquetes.FEATURE_WIFI_RTT)) {
servicio de objeto = este .getapplicationcontext(). getSystemService(Context.WIFI_RTT_Ranging_Service);
Instancia de servicio de WifiRttManager){
wifiRttManager= (WifiRttManager) servicio;
Registro i(etiqueta, "Obteniendo WifiRttManager. exitosamente.");
}
administrador wifi = (administrador wifi)this. getapplicationcontext(). getSystemService(contexto.
WIFI_service);
filtro de intención filtro wifi = nuevo filtro de intención();
addaction wifi (administrador wifi. network_status_changed_action);
addaction wifi. (administrador de wifi. network_status_changed_action);
p>
addaction de wifi (administrador de wifi.WIFI_STATUS_CHANGED_Action);
addaction de wifi (administrador de wifi.Scan_RESULTS_AVAILABLE_Action); p >
registerReceiver(new WifiChangeReceiver(), carta wifi);
}
//...
}
Privado void startScanAPs() {
administrador wifi .setwifienabled(true);
administrador wifi inicia
} p><. p>La clase WifiChangeReceiver extiende BroadcastReceiver {
@RequiresApi(api = 28)
@override
public void onReceive(contexto contexto, intención intención){ p>
if (intent.getAction(). Equals (WifiManager. Acciones disponibles para los resultados del análisis){
List & ltScanResult & gtscan results = wifi manager . getscanresults();
p>
Log.i(label, "Tamaño de escaneo Wifi:"+Resultados del escaneo. tamaño());
for(Resultado del escaneo Resultado del escaneo:? resultado del escaneo){
Log.i(marca, resultado del escaneo. tostring());
RangingRequest builder = nueva solicitud de rango.
builder();
builder. addaccess point(resultado del escaneo);
wifirttmanager. start range(builder. build(), new RangingResultCallback() {
@SuppressLint("Override ")
@Override
public void(int I){
// TODO
} p>
@SuppressLint("Override ")
@Override
anulación pública en resultados de rango (List & lt;RangingResult & gtList){
// TODO obtiene resultados de la lista
for(RangingResult result: list){
Log.i(mark, result. tostring());
}
}
}, nuevo controlador());
}
}
} p>
}
Cuando utilice WiFi RTT, debe agregar la siguiente declaración a AndroidManifest.xml:
& ltuses-feature Android:name = " Android . hardware . wifi . RTT "/& gt;
Con el código simple anterior, se puede realizar la función de WiFi RTT.
La función WiFi RTT es adecuada para grandes lugares interiores y exteriores con terrenos complejos, como centros comerciales, lugares de entretenimiento, grandes instalaciones de ocio, parques de atracciones, etc. y proporciona funciones como navegación precisa de áreas locales en Lugares. Creo que en un corto período de tiempo podrá experimentar esta conveniente función en las principales aplicaciones de mapas. Esto será de gran ayuda para los adictos a la carretera y los socios analfabetos en mapas.
En segundo lugar, recorte de pantalla: soporte a Liu Haiping
Con el lanzamiento del iPhone X, "Liu Haiping" ha alcanzado un clímax sin precedentes. Android P proporciona soluciones de compatibilidad y adaptación de la interfaz de usuario para pantallas con formas especiales. A través de las interfaces relevantes proporcionadas por la clase DisplayCutout, puede obtener información sobre el área de recorte en la pantalla.
Con DisplayCutout, puede obtener la siguiente información:
mostrar recorte display cutout = view .
getDisplayCutout();
if(displayCutout!= null) {
límites de región = mostrar recorte();
Log.d(TAG, String.format("Bounds:%s ", Bounds . tostring()));
int top = mostrar recorte . getsafeinsettop()
int bottom = mostrar recorte . ();
int izquierda = mostrar recorte . getsafeinsteleft();
int derecha = mostrar recorte .
Log.d(TAG, string . format(" Borde de corte: [izquierda: %d, arriba: %d, derecha: %d, abajo: %d]", izquierda, arriba, derecha, abajo)); /p>
El área pública getBounds() puede obtener toda la información del área de recorte, que es el área de recorte.
público int getSafeInsetTop()
público int getSafeInsetBottom()
público int getSafeInsetLeft()
público int getSafeInsetRight() p>
Las cuatro interfaces anteriores pueden obtener el valor límite del área segura después del área de resección.
A través de los datos anteriores, los desarrolladores pueden controlar con precisión el dibujo de la interfaz de usuario y evitar la visualización anormal de la interfaz de usuario causada por dibujar el contenido de la interfaz de usuario en el área de recorte.
En los teléfonos Android, Liu Haiping sigue siendo extremadamente raro. Para facilitar la depuración de los desarrolladores, Google ha proporcionado especialmente soporte de corte en la imagen de vista previa de Android P. Para conocer métodos de apertura específicos, consulte la sección recortada del documento de descripción de funciones proporcionado por Google.
Parte cortada:/preview/features.html#cutout
Como se muestra en la imagen, el autor usó el Pixel 2 XL que tenía a mano para experimentar la configuración de recorte de Android P.
En tercer lugar, optimización de notificaciones: operaciones más diversas, contenido más rico
Android P optimiza la riqueza y operatividad del contenido de notificaciones.
En la última versión, se ha optimizado y actualizado la gestión de notificaciones del sistema Android. Android O proporciona capacidades de canal más detalladas. Al presionar la barra de notificaciones, debe especificar el NotificationChannel. Los usuarios pueden seleccionar canales de notificación y solo permitir que se muestren notificaciones enviadas por canales de interés. La experiencia de mensajería mejora enormemente con la configuración del canal y la optimización sin distracciones.
Experiencia de mensajes mejorada
¿Android P continúa mejorando la notificación de mensajes mejorada [v1]? . Las respuestas directas y los aportes han estado disponibles en las notificaciones desde Android 7.0, y Android P ha realizado aún más mejoras en esta función.
Las notificaciones de Android P admiten contenido de imagen. El contenido de la imagen del mensaje se puede proporcionar a través del método setData() y mostrarse al usuario en la notificación.
Android P también simplifica la configuración de notificaciones. Anuncios de clase. Se agregó Persona a Android P para distinguir información sobre los participantes en la misma conversación, como sus avatares y URI. Según la explicación oficial, en Android P, algunas otras API de mensajes de notificación también usan Person en lugar de la CharSequence anterior.
Experiencia simple del desarrollo de una nueva API;
canal de notificación canal = nuevo canal de notificación(" WtTestChannel ",
"WtTestChannel", NotificationManager. Importance_ Default );
canal. habilitar luces (verdadero); //El punto en la esquina superior derecha del icono del almuerzo
channel.setLightColor(color.red); point
p>channel . setshowbadge(true); //Si se muestra la notificación del canal en el icono de pulsación larga
Notificación. generador generador=
Nueva notificación. Constructor(MainActivity.this,
"WtTestChannel");
Notificación. Persona p = nueva notificación. persona();
p . set name(" probamos ");
p.setUri("/" +
" ui/1 . 2 0/PC/static/image/new logo-16042 png ");
Notificación. MessagingStyle messageStyle=Nueva notificación. estilo de mensajería(p);
Notificación. Estilo de mensaje. Mensaje mensaje=
Nueva notificación. estilo de mensajería . /1 2 . 0/PC/static/image/new logo-16042 . .addMessage(mensaje);
constructor . establecer estilo(estilo de mensaje);
constructor . setsmallicon(r . mapa MIP . IC _ lanzador); Notificación de notificación = constructor . build();
Administrador de notificaciones NotificationManager =
(administrador de notificaciones)getSystemService(
actividad principal . this . getapplicationcontext() . notification_service );
notify manager . createnotificationchannel(channel);
notifyManager.notify("WeTest ", 1, notificación
Configuración del canal, transmisión y distracción); -Optimización gratuita
En Android P, nos centramos en enriquecer el contenido y al mismo tiempo simplificar la configuración del canal.
En la versión de Android O, NotificationChannel se introdujo por primera vez. Los desarrolladores deben configurar el canal correspondiente para enviar notificaciones a los usuarios. ¿Pueden los usuarios ser más granulares [v1]? Seleccione un canal para la aplicación en lugar de suprimir todo el contenido de las notificaciones de la aplicación.
En Android P, la gestión de notificaciones está aún más optimizada, incluido el bloqueo de grupos de canales, proporcionando nuevos tipos de transmisión y nuevas prioridades de No Molestar.
Bloquear grupo de canales:? Los usuarios pueden filtrar todo el grupo de canales de una aplicación en la configuración de notificaciones.
Los desarrolladores pueden usar isBlocked() para determinar si un grupo de canales está bloqueado. Según el resultado, no se enviará ninguna notificación al grupo de canales bloqueado. Además, los desarrolladores pueden consultar la configuración actual del grupo de canales utilizando la nueva interfaz getNotificationChannelGroup() en su aplicación.
Nuevo tipo de transmisión: el nuevo tipo de transmisión es la transmisión de "cambio de estado de protección de canal (grupo)", que agrega las funciones de canales y grupos de canales. En la aplicación de desarrollador, puede recibir transmisiones de canales (grupos) de su propiedad y realizar operaciones basadas en contenido de transmisión específico. Los desarrolladores pueden ver información específica relacionada con las transmisiones a través de NotificationManager. Para la acción de transmisión, puede ver los métodos y la información específicos a través de la transmisión.
Prioridad No molestar:? Administrador de notificaciones. La política agrega dos nuevas constantes de prioridad, PRIORITY_CATEGORY_ALARMS y PRIORITY_CATEGORY_media_system_other? (El sonido multimedia, del sistema y del juego tienen prioridad).
En cuarto lugar, compatibilidad con múltiples cámaras y videocámaras* * *
Recientemente, han aparecido uno tras otro modelos de doble cámara y multicámara. Las cámaras duales y múltiples ofrecen funciones que no son posibles con una sola cámara, como zoom continuo, vistas panorámicas y visión estereoscópica. Android P también proporciona soporte API a nivel de sistema a este respecto.
Android P proporciona una API del sistema que admite dos o más cámaras físicas para recopilar flujos de datos simultáneamente. La mayoría de los equipos de doble cámara proporcionados anteriormente por los fabricantes OEM fueron personalizados por los propios fabricantes. En este momento, Android P lanzó API y formuló especificaciones de API desde el nivel del sistema.
La nueva API proporciona la capacidad de cambiar flujos de datos lógicos o flujos de datos mixtos entre diferentes cámaras. En términos de latencia de captura, se proporcionan nuevos parámetros de sesión para reducir la latencia de captura inicial. Al mismo tiempo, proporciona a la cámara la capacidad de detener e iniciar repetidamente la transmisión de la cámara en diversos escenarios en los que se utiliza la cámara. En términos de flash, Android P agrega soporte para flash basado en pantalla. En términos de estabilización de imagen óptica, Android P proporciona a los desarrolladores marcas de tiempo OIS para optimizar la estabilidad de la imagen y otros efectos especiales.
Además, Android P también admite cámaras USB/UVC externas, lo que permite el uso de módulos de cámara externos más potentes.
En quinto lugar, admite el posprocesamiento de medios de imágenes
Android P ha lanzado un nuevo ImageDecoder, que no solo admite la decodificación, el escalado y el recorte de varios formatos de imágenes, sino que también admite la Decodificación de imágenes decodificadas. Con esta función, puede agregar efectos personalizados complejos, como esquinas redondeadas, o colocar su imagen en un marco circular. Escriba una función de devolución de llamada de posprocesamiento y podrá agregar cualquier instrucción de dibujo para lograr el efecto deseado.
Además, Android P admite de forma nativa animaciones en formatos GIF y WebP, y agrega la clase AnimatedImageDrawable, que es compatible directamente con la clase decodificadora ImageDecoder recientemente agregada. El uso es similar a la clase de animación vectorial AnimatedVectorDrawable y la implementación también es similar. Al agregar subprocesos de renderizado y subprocesos de trabajo, no es necesario procesar actualizaciones de animación en el subproceso de la interfaz de usuario. Se puede decir que su uso es indoloro y sin preocupaciones.
A continuación se muestra una imagen gif escribiendo código y utiliza el mecanismo de posprocesamiento para dibujar un círculo verde sólido en el medio de la imagen.
imagen final ImageView =(ImageView)findViewById(r . id . imagen
Archivo gif Archivo = nuevo Archivo("/data/local/tmp/test . gif ") ;
If (!gifFile.exists()) {
Log.d(etiqueta, "¡el archivo gif no existe!");
Return;
p>}
Decodificador de imágenes.
fuente fuente = imagen decoder.createsource(archivo gif);
Prueba {
d = ImageDecoder.decodeDrawable(fuente, new ImageDecoder.onheaderdecodelistener(){
@cover
vacío público en el encabezado decodificado (decodificador de imagen decodificador de imagen, ImageDecoder final. ImageInfo imageInfo, ImageDecoder. Fuente fuente) {
imageDecoder.setPostProcessor(nuevo postprocesador() { p>
@Override
public int onPostProcess(Canvas Canvas){
int w = imageInfo.getSize();
int h = imageInfo. getSize();
pintura pintura = nueva pintura();
pintura .setantialias(true);
pintura.setColor(color.verde);
canvas.drawCircle(w/2, h/2, h/4, nueva pintura (dibujo));
Devuelve 0
}
});
}
});
image.setVisibility(Ver. Visible
imagen ); setimagedrawable(d);
} catch (IOException e){
Log.d(TAG, e . tostring());
}
Botón Botón =(Botón)findViewById(r . id . Texto del botón
botón.setOnClickListener(nueva vista.OnClickListener() {
@override
public void onClick(ver vista){
if (d!= null & amp&AnimatedImageDrawable d instancia){
Anuncio AnimatedImageDrawable =(AnimatedImageDrawable)d;
if (ad.isRunning()) {
Log.d(label, "Detener ejecución");
ad stop(); >} En caso contrario {
Log.d(label, "Empezar a ejecutar");
ad start();
}
}
});
Sexto, es compatible con HDR VP9 y HEIF.
Android P tiene soporte integrado para codificación de imágenes HDR VP9 y HEIF (heic). HEIF es un formato de compresión eficiente lanzado por Apple en iOS11 y ya es compatible con IphoneX, Iphone 8 y IPhone 8P. Este formato tiene una tasa de compresión más alta, pero la codificación en este formato requiere soporte de hardware, pero la decodificación no. HEIFWriter en la última biblioteca de soporte admite la conversión de buffers de bytes, superficies o clases de mapas de bits YUV a imágenes estáticas en formato Heif.
Android P ha lanzado recientemente MediaPlayer2, que admite listas de reproducción creadas por DataSourceDesc.
Descripción general de la optimización y actualización de funciones
1. Neural Network API 1.1
En el Android 8.1 (API nivel 27) lanzado recientemente, Google lanzó Android. plataforma por primera vez La API de red neuronal se lanzó en Internet, lo que significa que el nivel de inteligencia de nuestros teléfonos Android ha mejorado enormemente. Esta vez, Android P enriquece aún más su soporte para redes neuronales, no solo optimizando las API relacionadas anteriores, sino que también proporciona 9 nuevas operaciones para brindar un soporte más profundo para operaciones de datos específicas.
En segundo lugar, mejorar el llenado automático de formularios
Android 8.0 (API nivel 26) introduce el marco de llenado automático, lo que facilita el llenado de formularios en la aplicación. Android P lanzó el servicio de autocompletar e implementó muchas mejoras para mejorar aún más la experiencia del usuario al completar formularios.
En tercer lugar, seguridad mejorada
Android P introduce muchas características de seguridad nuevas, incluido un cuadro de diálogo unificado de verificación de huellas dactilares y una confirmación de usuario de alta confianza de transacciones confidenciales. La interfaz de usuario de autenticación de huellas dactilares en la aplicación también será más consistente.
Cuadro de diálogo de verificación unificada de huellas dactilares
Si una aplicación de terceros desea utilizar huellas dactilares, el marco del sistema Android proporciona un cuadro de diálogo de autenticación de huellas dactilares para la aplicación, que puede proporcionar una apariencia unificada. y experiencia para que los usuarios la utilicen más segura. Si su programa todavía usa FingerprintManager, use FingerprintDialog en su lugar y el sistema mostrará un cuadro de diálogo. Por cierto, antes de usar FingerprintDialog, no olvide llamar al método hasSystemFeature() para comprobar si el dispositivo móvil admite huellas dactilares.
Confirmación de usuario de alta confianza de transacciones confidenciales
El sistema Android P proporciona una API de confirmación protegida. Con este nuevo conjunto de API, las aplicaciones pueden usar el cuadro de diálogo ConfirmationDialog para solicitarle al usuario que apruebe una breve declaración. Esto permite a la aplicación recordarle que una transacción confidencial (como un pago) está a punto de realizarse. terminado.
Si el usuario acepta la declaración, la aplicación recibirá un código de autenticación de mensaje key-hash (HMAC) generado por el TEE para proteger la entrada y verificación de la visualización del cuadro de diálogo. Esta firma indica que ha leído la declaración y está de acuerdo con ella.
Módulo de seguridad de hardware
Android P también proporciona un StrongBox Keymaster, una implementación específica almacenada en el módulo de seguridad de hardware. Este módulo de seguridad de hardware tiene su propia CPU, espacio de almacenamiento seguro, verdadero generador de números aleatorios y mecanismos adicionales para resistir la manipulación de aplicaciones o la carga maliciosa de aplicaciones no autorizadas. Al verificar las claves almacenadas en StrongBox Keymaster, el sistema confirma la integridad de las claves a través de un entorno de ejecución confiable (TEE). Para reducir el consumo de energía, StrongBox admite un conjunto de algoritmos y claves de diferentes longitudes:
●?RSA 2048
●?AES 128 y 256
●? ECDSA P-256
●HMAC-SHA256 (admite cualquier longitud de clave desde 8 bytes hasta 64 bytes)
●Triple DES 168
Cabe señalar que este mecanismo requiere soporte de hardware.
Importar claves de seguridad al almacén de claves
Agregue claves importadas al almacén de claves utilizando el nuevo formato de clave codificada ASN.1, con contraseñas adicionales proporcionadas por las funciones de seguridad de Android P Decrypt. Luego, KeyMaster puede descifrar la clave almacenada en KeyStore, lo que evita que el texto sin formato de la clave aparezca en la memoria del dispositivo. Esta característica requiere que el dispositivo sea compatible con Keymaster 4.
En cuarto lugar, admite el cifrado de copias de seguridad de Android del cliente.
Android P admite el cifrado de copias de seguridad de Android con claves de cliente.
Esta medida de privacidad requiere el PIN del dispositivo, la contraseña de patrón o la contraseña estándar para recuperar datos de los datos respaldados en el dispositivo del usuario.
Optimización de la accesibilidad del verbo (abreviatura de verbo)
Para que la aplicación sea más cómoda de usar, Android proporciona a los desarrolladores optimización de la usabilidad en muchos aspectos.
1. Semántica de navegación
Android P proporciona a los desarrolladores muchos puntos de optimización en el cambio de escena y el funcionamiento de la aplicación.
2. Título del panel de accesibilidad
Android P proporciona un nuevo mecanismo para la Sección, llamado título del panel de accesibilidad. El Servicio de Accesibilidad puede recibir cambios en estos encabezados para poder proporcionar información más detallada para ciertos cambios.
El título de la sección especificada se puede configurar a través del nuevo atributo de Android: accesibilidadPaneTitle, o se puede configurar en tiempo de ejecución a través de setAccessibilityPaneTitle().
3. Navegación en la barra superior
Android P proporciona un nuevo mecanismo de navegación para la barra superior, que muestra encabezados lógicos configurando el atributo android:accessibilityHeading de la instancia de vista en verdadero. Con estos encabezados, los usuarios pueden navegar de un encabezado al siguiente.
4. Salida y navegación grupal
Para los lectores de pantalla, Android P proporciona un nuevo atributo Android:screenReaderFocusable para ver en lugar del android:focusable original para marcarlo como vista de configuración resuelta. focus para permitir que los lectores de pantalla funcionen en ciertos escenarios. En este punto, los lectores de pantalla deben conocer las vistas que tienen android:screenReaderFocusable y android:focusable configurados en verdadero.
5. Fácil operación
Interacción de información sobre herramientas
En Android P, puede usar getTooltipText() para leer el contenido de texto de la información sobre herramientas. Utilice los nuevos ACTION_SHOW_TOOLTIP y ACTION_HIDE_TOOLTIP para controlar las vistas que muestran u ocultan información sobre herramientas.
Nuevas interacciones globales
Android P proporciona dos nuevas operaciones en la clase AccessibilityService. El servicio del desarrollador puede ayudar a los usuarios a bloquear la pantalla a través de GLOBAL_ACTION_LOCK_SCREEN y ayudar a los usuarios a completar capturas de pantalla a través de GLOBAL_ACTION_TAKE_SCREEN.
Algunos detalles de los cambios de formulario
Android P optimiza la adquisición de contenido actualizado cuando los múltiples formularios de la App cambian simultáneamente. Cuando aparece TYPE_WINDOWS_CHANGED, los desarrolladores pueden obtener cambios en el formulario a través de la API getWindowChanges().
Cuando cambian varios formularios, cada formulario emitirá su propio evento y los desarrolladores pueden obtener la vista raíz del formulario del evento a través de getSource().
Si su aplicación define títulos de panel de accesibilidad para las vistas, su servicio puede reconocer los cambios correspondientes cuando se actualiza la interfaz de usuario. Cuando ocurre el evento TYPE_WINDOW_STATE_CHANGED, puede obtener los cambios en el formulario actual utilizando el tipo devuelto por el nuevo método getContentChangeTypes(). Por ejemplo, ¿ahora se puede detectar un [v1] a través del mecanismo anterior? Si el panel tiene un título nuevo o si desaparece.
Nuevo esquema de rotación para verbos intransitivos
Rotar la pantalla es una operación necesaria en algunos juegos, vídeos y otros escenarios, pero en algunos escenarios, el usuario no gira la pantalla para usar la aplicación La pantalla cambia de vertical a horizontal o viceversa. Para evitar este mal funcionamiento, Android P proporciona un nuevo mecanismo. Los desarrolladores pueden especificar que la pantalla no gire con la gravedad, pero los usuarios pueden controlar la rotación de la pantalla a través de un botón separado.