diff --git a/docs/html-intl/intl/es/preview/download_mp2.jd b/docs/html-intl/intl/es/preview/download_mp2.jd deleted file mode 100644 index d71d8fdd0b7ea..0000000000000 --- a/docs/html-intl/intl/es/preview/download_mp2.jd +++ /dev/null @@ -1,360 +0,0 @@ -page.title=Descargas -page.image=images/cards/card-download_16-9_2x.png - -@jd:body - -
- El SDK de la versión preliminar de Android M incluye herramientas de desarrollo, archivos de sistema de Android y archivos de biblioteca que lo ayudarán a probar su aplicación y las nuevas API que se incluirán en la próxima versión de la plataforma. - En este documento, se describe la manera de obtener los componentes que se pueden descargar de la versión preliminar para probar su aplicación. - -
- - -- El SDK de la versión preliminar se encuentra disponible para descargarlo a través del Administrador de SDK de Android. Para obtener más información sobre cómo descargar y configurar el SDK de la versión preliminar, consulte la sección Configurar el SDK de la versión preliminar. - -
- - -- El paquete de descarga de documentación para desarrolladores brinda información detallada de referencia sobre las API y un informe de diferencias de las API para la versión preliminar. -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- Estas imágenes del sistema le permiten instalar una versión preliminar de la plataforma en un dispositivo físico para realizar pruebas. - Al configurar un dispositivo con una de estas imágenes, puede instalar y probar su aplicación para ver cómo funciona en la próxima versión de la plataforma. - El proceso de instalación de una imagen del sistema en un dispositivo elimina todos los datos del dispositivo, por lo que debe hacer una copia de seguridad de los datos antes de instalar una imagen del sistema. - - -
- -- Advertencia: Las siguientes imágenes del sistema de Android son versiones preliminares y están sujetas a cambios. El uso que haga de estas imágenes del sistema se rige por el Contrato de licencia de la versión preliminar del SDK de Android. - Las imágenes del sistema de la versión preliminar de Android no son versiones estables y pueden contener errores y defectos que pueden generar daños en sus sistemas informáticos, dispositivos y datos. - - Las imágenes del sistema de la versión preliminar de Android no se someten a las mismas pruebas que el OS de fábrica y podrían hacer que el teléfono, y las aplicaciones y los servicios instalados dejen de funcionar. - - -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- Si desea utilizar una imagen del dispositivo para realizar pruebas, debe instalarla en un dispositivo compatible. Siga las instrucciones que se ofrecen a continuación para instalar una imagen del sistema: - -
- -- Nota: Cuando haya actualizado un dispositivo de desarrollo con la imagen del sistema de la versión preliminar, se actualizará automáticamente con la próxima versión preliminar a través de actualizaciones OTA. - -
- -- Si desea desinstalar la versión preliminar y restablecer las especificaciones de fábrica en un dispositivo, visite el sitio developers.google.com/android y descargue la imagen con la que desea actualizar su dispositivo. - - Siga las instrucciones que se describen en esa página para actualizar la imagen en su dispositivo. - -
- -- Los procesos en segundo plano pueden consumir mucha memoria y batería. Por ejemplo, una - transmisión implícita puede iniciar muchos procesos en segundo plano registrados para - escucharla, aunque esos procesos quizá no desempeñen un trabajo considerable. Esto puede - afectar de forma significativa tanto el rendimiento del dispositivo como la experiencia de usuario. -
- -- Para corregir este problema, en Android N se aplican las siguientes - restricciones: -
- -- Si la aplicación utiliza cualquiera de estas intents, debes quitar las dependencias en - ellas lo antes posible a fin de poder orientar los dispositivos Android N correctamente. - El framework de Android ofrece varias soluciones para mitigar la necesidad de - estas transmisiones implícitas. Por ejemplo, {@link android.app.job.JobScheduler} - y - {@code GcmNetworkManager} proporcionan mecanismos sólidos para programar operaciones - de red cuando se cumplen las condiciones especificadas, como una conexión a una - red de uso no medido. Ahora también puedes usar {@link android.app.job.JobScheduler} - para reaccionar a cambios en relación con los proveedores de contenido. Los objetos {@link android.app.job.JobInfo} - encapsulan los parámetros que usa {@link android.app.job.JobScheduler} - para programar el trabajo. Cuando se cumplen las condiciones del trabajo, el sistema - ejecuta ese trabajo en el {@link android.app.job.JobService} de tu aplicación. -
- -- En este documento, aprenderemos cómo usar métodos alternativos, como - {@link android.app.job.JobScheduler}, para adaptar tu aplicación a esas nuevas - restricciones. -
- -- Las aplicaciones orientadas a Android N no reciben transmisiones {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} si en su manifiesto - registran que las reciben, y los procesos que dependan de esta - transmisión no se iniciarán. Esto podría ser un problema para aplicaciones que buscan - escuchar los cambios en la red o realizar múltiples actividades en red cuando el - dispositivo se conecta a una red sin medición de uso. Ya existen varias soluciones - en relación con esta restricción en el framework de Android, pero elegir - la correcta depende de lo que quieras lograr con tu aplicación. -
- -- Nota: Un {@link android.content.BroadcastReceiver} registrado con - {@link android.content.Context#registerReceiver Context.registerReceiver()} - continúa recibiendo estas transmisiones mientras se ejecuta la aplicación. -
- -- Cuando uses la clase {@link android.app.job.JobInfo.Builder JobInfo.Builder} - para crear tu objeto {@link android.app.job.JobInfo}, aplica el método {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} y pasa {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} como parámetro de trabajo. El siguiente ejemplo de código - programa la ejecución de un servicio cuando el dispositivo se conecta a una red sin - medición de uso y se está cargando: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- Cuando se cumplan las condiciones para tu trabajo, tu aplicación recibirá un callback para ejecutar - el método {@link android.app.job.JobService#onStartJob onStartJob()} en la - {@code JobService.class} especificada. Para ver más ejemplos de la implementación de {@link - android.app.job.JobScheduler}, consulta la aplicación de ejemplo JobScheduler. -
- -- Las aplicaciones que usan servicios de GMSCore y están orientadas a Android 5.0 (API nivel 21) - o anterior, pueden usar - {@code GcmNetworkManager} y especificar {@code Task.NETWORK_STATE_UNMETERED}. -
- -- Las aplicaciones que se ejecutan aún pueden escuchar {@code CONNECTIVITY_CHANGE} con un - {@link android.content.BroadcastReceiver} registrado. No obstante, la API {@link - android.net.ConnectivityManager} ofrece un método más robusto para solicitar - un callback solo cuando se cumplen las condiciones de red especificadas. -
- -- Los objetos {@link android.net.NetworkRequest} definen los parámetros del - callback de la red en términos de {@link android.net.NetworkCapabilities}. Creas - objetos {@link android.net.NetworkRequest} con la clase {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - y luego pasa el objeto {@link android.net.NetworkRequest} al sistema. Cuando - se cumplen las condiciones de la red, la aplicación recibe un callback para ejecutar el método - {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} definido en su clase {@link - android.net.ConnectivityManager.NetworkCallback}. -
- -- La aplicación continuará recibiendo callbacks hasta que la aplicación salga o llame a - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}. -
- -- En Android N, las aplicaciones no pueden enviar ni recibir transmisiones {@link - android.hardware.Camera#ACTION_NEW_PICTURE} ni {@link - android.hardware.Camera#ACTION_NEW_VIDEO}. Esta restricción ayuda a - aliviar el impacto en el rendimiento y la experiencia de usuario cuando varias aplicaciones deben - activarse para procesar una nueva imagen o video. Android N - extiende {@link android.app.job.JobInfo} y {@link - android.app.job.JobParameters} para proporcionar una solución alternativa. -
- -- Para activar trabajos en los cambios del URI de contenido, Android N extiende - la API {@link android.app.job.JobInfo} con los siguientes métodos: -
- -- Nota: No se puede usar {@code TriggerContentUri()} junto - con {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} ni {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}. Para controlar de forma constante la presencia de cambios en el contenido, programa un nuevo - {@link android.app.job.JobInfo} antes de que el {@link - android.app.job.JobService} de la aplicación termine de administrar la callback más reciente. -
- -- El siguiente código de ejemplo programa la activación de un trabajo cuando el sistema informe - un cambio en el URI de contenido, {@code MEDIA_URI}: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación - recibe un callback y se pasa un objeto {@link android.app.job.JobParameters} - al método {@link android.app.job.JobService#onStartJob onStartJob()} - en {@code MediaContentJob.class}. -
- -- Android N también amplía {@link android.app.job.JobParameters} para - permitir que tu aplicación reciba información útil sobre qué autoridades de contenido - y URI activaron el trabajo: -
- -- El siguiente código de ejemplo anula el método {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} y - registra las autoridades de contenido y los URI que activaron el trabajo: -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- Optimizar tus aplicaciones para que se ejecuten en dispositivos con poca memoria o en condiciones de niveles bajos - de memoria puede mejorar el rendimiento y la experiencia del usuario. Eliminar - dependencias en servicios en segundo plano y receptores de transmisiones implícitas - registrados estadísticamente puede ayudar a que tu aplicación se ejecute mejor en esos dispositivos. Si bien - Android N toma medidas para reducir algunos de estos problemas, te - recomendamos que optimices tu aplicación para que pueda ejecutarse sin utilizar esos - procesos en segundo plano. -
- -- Android N presenta algunos comandos adicionales de Android Debug Bridge (ADB) que - puedes usar para probar el comportamiento de la aplicación con esos procesos en segundo plano deshabilitados: -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - ICU4J es un conjunto de bibliotecas de Java de código abierto y amplio uso que brinda soporte de Unicode - y de globalización para aplicaciones de software. Android N - expone un subconjunto de las API de ICU4J en el framework de Android para que los desarrolladores de aplicaciones - lo usen debajo del paquete {@code android.icu}. Estas API usan - datos de ubicación que están presentes en el dispositivo. Como resultado, puedes reducir la superficie de APK - evitando la compilación de las bibliotecas de ICU4J en APK. En lugar de esto, puedes - llamarlas en el framework. (En este caso, posiblemente debas brindar - versiones múltiples - del APK, de modo que los usuarios que usan versiones de Android inferiores a Android N - puedan descargar una versión de la aplicación que incluya las bibliotecas de ICU4J). -
- -- Al principio de este documento, encontrarás información básica sobre el mínimo de niveles de Android API - necesarios para soportar estas bibliotecas. Más adelante, encontrarás explicaciones sobre qué - necesitas saber acerca de la implementación de ICU4J específica para Android. Por último, - encontrarás explicaciones sobre cómo usar las API de ICU4J en el framework de Android. -
- -
- Android N expone un subconjunto de las API de ICU4J mediante el
- paquete android.icu, en lugar de com.ibm.icu. El
-framework de Android puede elegir no
- exponer las API de ICU4J por varias razones; por ejemplo, Android N no expone
- algunas API obsoletas o algunas que el equipo de ICU aún no ha declarado como
- estables. A medida que el equipo de ICU deje de usar API en el futuro, Android también las marcará
- como obsoletas, pero las seguirá incluyendo.
-
Tabla 1. Versiones de ICU y CLDR usadas - en Android N.
-| Nivel de Android API | -Versión de ICU | -Versión de CLDR | -
|---|---|---|
| Android N | -56 | -28 | -
Debes tener en cuenta lo siguiente:
- -
- Si ya estás usando las API de ICU4J en tu aplicación y las
- API de android.icu cumplen con tus requisitos, migrar hacia las
- API del framework implicará que cambies tus importaciones de Java
- de com.ibm.icu a android.icu. Luego, puedes
- quitar tu propia copia de los archivos de ICU4J del APK.
-
- Nota: Las API del framework de ICU4J usan el espacio de nombres {@code android.icu} - en lugar de {@code com.ibm.icu}. El motivo de esto es evitar conflictos de espacio de nombres - en APK que contienen sus propias bibliotecas de {@code com.ibm.icu}. -
- -
- Algunas clases de los paquetes de java y de android son
- equivalentes a las clases de ICU4J. Sin embargo, ICU4J a menudo brinda una compatibilidad
- más amplia para estándares e idiomas.
-
Aquí tienes algunos ejemplos para comenzar:
-| Clase | -Alternativa | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J se presenta bajo la licencia de ICU. Para obtener información más detallada, consulta la Guía de usuario - de ICU. -
diff --git a/docs/html-intl/intl/es/preview/features/multilingual-support.jd b/docs/html-intl/intl/es/preview/features/multilingual-support.jd deleted file mode 100644 index b03777c4e2141..0000000000000 --- a/docs/html-intl/intl/es/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=Idioma y configuración regional -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N brinda un soporte mejorado para los usuarios de diferentes idiomas -y les permite seleccionar múltiples configuraciones regionales en la configuración. Android N -brinda esta capacidad expandiendo ampliamente la cantidad de configuraciones regionales compatibles -y cambiando la forma en que el sistema resuelve los recursos. El nuevo método de resolución -de recursos es más robusto y está diseñado para ser compatible con APK existentes, pero -debes tener especial cuidado para detectar cualquier comportamiento inesperado. Por ejemplo, debes -realizar pruebas para asegurarte de que tu aplicación muestre el idioma esperado de forma predeterminada. Además, -si tu aplicación permite múltiples idiomas, debes asegurarte de que esta compatibilidad funcione -como debería. Por último, debes tratar de asegurarte de que tu aplicación administre con facilidad -los idiomas para los cuales no diseñaste explícitamente la aplicación.
- -Al inicio de este documento, encontrarás una explicación sobre la estrategia de resolución de recursos anterior a -Android N. Luego, encontrarás una descripción de la estrategia de resolución de recursos -mejorada de Android N. Por último, encontrarás una explicación sobre cómo aprovechar -la cantidad expandida de configuraciones regionales para permitir acceso a más usuarios de diferentes idiomas.
- -Antes de Android N, Android no siempre podía - hacer coincidir correctamente las configuraciones regionales de la aplicación y del sistema.
- -Por ejemplo, imagina que tienes la siguiente situación:
-Cuando el código Java hace referencia a cadenas, el sistema carga - las cadenas del archivo de recursos ({@code en_US}) predeterminado, incluso si la aplicación tiene - recursos en español localizados en {@code es_ES}. Esto se debe a que, cuando el sistema - no puede encontrar una coincidencia exacta, continúa buscando recursos y se quita el - código del país de la configuración regional. Finalmente, si no se encuentra una coincidencia, el sistema regresa - a la configuración predeterminada, que es {@code en_US}.
- - -El sistema también usaba {@code en_US} de forma predeterminada si el usuario elegía un idioma que - no era compatible con la aplicación, como el francés. Por ejemplo:
- --Tabla 1. Resolución de recursos sin una coincidencia de configuración regional exacta. -
-| Configuración del usuario | -Recursos de la aplicación | -Resolución de recursos | -
|---|---|---|
| fr_CH | -
-Predeterminado (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Intentar fr_CH => Error -Intentar fr => Error -Usar predeterminado (en) - |
-
En este ejemplo, el sistema muestra las cadenas en inglés sin -saber si el usuario comprende este idioma. Este comportamiento es muy común -hoy en día. Android N debería reducir sustancialmente la frecuencia -de resultados como este.
- -Android N brinda una resolución de recursos más robusta y
-encuentra mejores recursos de forma automática. Sin embargo, para acelerar la resolución y mejorar la
-facilidad de mantenimiento, debes almacenar los recursos en el dialecto primario.
- Por ejemplo, si antes almacenabas los recursos en español en el directorio {@code es-US}
-, pásalos al directorio {@code es-419}, que contiene la variante de Latinoamérica.
- De forma similar, si tienes cadenas de recursos en una carpeta llamada {@code en-GB}, cámbiale
- el nombre a {@code en-001} (inglés internacional), ya que el dialecto primario más común
- para las cadenas en en-GB es {@code en-001}.
- Los siguientes ejemplos explican por qué estas prácticas mejoran el desempeño
- y la confiabilidad de la resolución de recursos.
Con Android N, el caso descrito en la Tabla 1 se resuelve -de otra forma:
- --Tabla 2. Una estrategia de resolución mejorada para los casos en que no -hay una coincidencia de configuración regional exacta.
-| Configuración del usuario | -Recursos de la aplicación | -Resolución de recursos | -
|---|---|---|
|
-
-Predeterminado (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Intentar fr_CH => Error -Intentar fr => Error -Intentar secundario de fr => fr_FR -Usar fr_FR - |
-
Así, los recursos se muestran en francés en lugar de en inglés. Este ejemplo también muestra - por qué deberías almacenar las cadenas en francés en {@code fr} en lugar de en {@code fr_FR} - para Android N. Aquí, el procedimiento se basa en hacer coincidir el dialecto primario más cercano, - lo cual hace que la resolución sea más rápida y más predecible.
- -Además de esta lógica de resolución mejorada, Android ofrece ahora más - idiomas de usuario de entre los cuales elegir. Volvamos a ver el ejemplo anterior con el idioma italiano - especificado como un idioma de usuario adicional, pero sin compatibilidad de la aplicación con el idioma francés.
- --Tabla 3. Resolución de recursos cuando la aplicación solo hace coincidir la -configuración regional de segunda preferencia del usuario.
-| Configuración del usuario | -Recursos de la aplicación | -Resolución de recursos | - -
|---|---|---|
|
-
-Predeterminado (en) -de_DE -es_ES -it_IT - |
-
-Intentar fr_CH => Error -Intentar fr => Error -Intentar secundario de fr => Error -Intentar it_CH => Error -Intentar it => Error -Intentar secundario de it => it_IT -Usar it_IT - |
-
-
El usuario recibe la información en un idioma que comprende, si bien la aplicación no -es compatible con el idioma francés.
- - -Android N incorpora una nueva API, {@code LocaleList.getDefault()}, -que les permite a las aplicaciones consultar directamente la lista de idiomas que ha especificado el usuario. Esta API - te permite crear un comportamiento de la aplicación - más sofisticado y una presentación de contenido más optimizada. Por ejemplo, las búsquedas - pueden mostrar resultados en múltiples idiomas según la configuración del usuario. Las aplicaciones de navegadores - pueden evitar ofrecer la traducción de páginas que están en un idioma que el usuario comprende, - y las aplicaciones de teclado pueden habilitar automáticamente todos los diseños correctos.
- -Hasta Android 6.0 (API nivel 23), Android solo permitía una o dos - configuraciones regionales para muchos idiomas comunes - (en, es, ar, fr, ru). Debido a que había solo unas pocas variantes para cada idioma, -las aplicaciones podían almacenar algunos números y fechas como cadenas preprogramadas -en los archivos de recursos. Sin embargo, con el conjunto ampliado de configuraciones regionales -compatibles de Android, puede haber diferencias importantes -en los formatos de fecha, hora, moneda e -información similar, incluso dentro de una sola configuración regional. Preprogramar los formatos puede generar -una experiencia confusa para los usuarios. Por lo tanto, cuando desarrolles aplicaciones para Android, -asegúrate de usar formateadores en lugar de preprogramar las cadenas de números y fechas.
- -Un muy buen ejemplo es el árabe. Android N expandió su compatibilidad de -una configuración regional, {@code ar_EG}, a 27 configuraciones regionales. Estas configuraciones regionales pueden compartir la mayoría de los recursos, -pero algunas prefieren dígitos ASCII, mientras que otras prefieren dígitos nativos. Por ejemplo, -cuando desees crear una oración con una variable de dígito, como -"Elige un PIN de 4 dígitos", usa formateadores como se muestra a continuación:
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/es/preview/features/notification-updates.jd b/docs/html-intl/intl/es/preview/features/notification-updates.jd deleted file mode 100644 index ff0635ebe10c5..0000000000000 --- a/docs/html-intl/intl/es/preview/features/notification-updates.jd +++ /dev/null @@ -1,393 +0,0 @@ -page.title=Notificaciones -page.tags=notifications -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
Android N presenta varias API nuevas que permiten a las aplicaciones publicar -notificaciones altamente visibles e interactivas.
- -Android N amplía la API de notificación existente {@link android.support.v4.app.RemoteInput} -para admitir respuestas en línea en teléfonos celulares. Esta función permite a los usuarios - responder rápidamente desde el panel de notificaciones sin tener que visitar tu aplicación.
- -- Android N también te permite agrupar notificaciones similares para que - aparezcan como una sola notificación. Para que esto sea posible, Android N usa el método existente {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()}. Los usuarios pueden expandir cada una de las - notificaciones y realizar acciones como responder e ignorar en cada una - de ellas, de forma individual desde el panel de notificaciones. -
- -Por último, Android N también suma nuevas API que te permiten aprovechar las decoraciones -del sistema en las vistas de notificación personalizadas de tu aplicación. Estas API ayudan a -garantizar que las vistas de notificaciones compartan una presentación acorde a las -plantillas estándar.
- -En este documento se destacan algunos de los cambios clave que puedes tener en cuenta - al usar las nuevas funciones de notificación en tus aplicaciones.
- -Con la función de respuesta directa en Android N, los usuarios pueden responder
-rápidamente mensajes de texto o actualizar listas de tareas directamente dentro de la interfaz de
-notificación. En un dispositivo portátil, la acción de respuesta en línea aparece como un botón adicional
- anexado a la notificación. Cuando un usuario responde mediante el teclado, el sistema adjunta
- la respuesta de texto a la intent
- que especificaste para la acción de notificación y envía la intención a tu
- aplicación para dispositivos portátiles.
-
-
-
-
- Figura 1. Android N agrega el botón de acción Reply -. -
- -Para crear una acción de notificación que admita respuesta directa: -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput().
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
Cuando se active la acción de notificación, -el sistema le solicitará al usuario que ingrese una respuesta.
- -
-- Figura 2. El usuario ingresa texto desde el panel de notificaciones. -
- -- Para recibir entradas del usuario de la interfaz de notificación a la actividad que - declaraste en la intent de la acción de respuesta: -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- En el caso de las aplicaciones interactivas, como los chats, podría ser útil incluir - contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podrían mostrar - múltiples líneas de historial de chat. Cuando el usuario responde a través de {@link - android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas - por medio del método {@code setRemoteInputHistory()}. -
- -- La notificación se debe actualizar o cancelar luego de que la aplicación haya - recibido entradas remotas. Cuando el usuario responde a una actualización remota - por medio de la respuesta directa, - no canceles la notificación. En cambio, actualiza la notificación para mostrar la respuesta del usuario. -En el caso de las notificaciones que utilizan {@code MessagingStyle}, debes agregar -la respuesta como el mensaje más reciente. Cuando se utilizan otras plantillas, puedes -agregar la respuesta del usuario al historial de entradas remotas. -
- -Android N ofrece a los desarrolladores una nueva manera de representar - una cola de notificaciones: notificaciones integradas. Esto es similar a la función - Pilas de - notificaciones en Android Wear. Por ejemplo, si tu aplicación crea notificaciones - para los mensajes recibidos, cuando se recibe más de un mensaje, agrupa las - notificaciones en un solo paquete. Puedes - usar el método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} para agrupar notificaciones similares.
- -- El grupo de notificaciones impone una jerarquía en las notificaciones que lo integran. - En la parte superior de esa jerarquía se encuentra una notificación principal que muestra información - resumida para el grupo. El usuario puede expandir - progresivamente el grupo de notificaciones, y el sistema muestra más información a medida que el - usuario continúa indagando. Cuando el usuario expande el paquete, el sistema revela más - información para todas sus notificaciones secundarias; cuando el usuario - expande una de esas notificaciones, el sistema revela todo su contenido. -
- -
-- Figura 3. El usuario puede expandir progresivamente el grupo de - notificaciones. -
- -- Nota: Si la misma aplicación envía cuatro o más notificaciones - y no se especifica un grupo, el - sistema las agrupa automáticamente. -
- -Para obtener información acerca de cómo agregar notificaciones a un grupo, consulta -Agregar -cada notificación a un grupo.
- - -Esta sección proporciona pautas acerca de cuándo usar grupos de notificaciones en lugar -de las notificaciones {@link android.app.Notification.InboxStyle InboxStyle} -que estaban disponibles en versiones anteriores de la -plataforma Android.
- -Solo debes usar grupos de notificaciones si se cumplen todas las siguientes condiciones -para tu caso de uso:
- -Algunos ejemplos de buenos casos de uso para grupos de notificaciones incluyen: una aplicación de mensajería -que exhiba una lista de mensajes entrantes, o una aplicación de correo electrónico que exhiba una lista de -correos electrónicos recibidos.
- --Algunos ejemplos de casos en los que se prefiere una sola notificación - incluyen mensajes individuales de una sola persona, o una lista de - elementos de texto de una sola línea. Para lograr esto, puedes usar -({@link android.app.Notification.InboxStyle InboxStyle} o -{@link android.app.Notification.BigTextStyle BigTextStyle}) -. -
- -- La aplicación siempre debe publicar un resumen del grupo, aún si el grupo contiene una sola - notificación secundaria. Si contiene una sola notificación, el sistema suprimirá el resumen y mostrará directamente la - notificación secundaria. Esto garantiza - que el sistema pueda proporcionar una experiencia uniforme cuando el usuario quita con un gesto de "deslizar" notificaciones - secundarias de un grupo. -
- -- Nota: Esta versión de Android N aún no - suprime el resumen para los grupos de notificaciones que contienen una sola notificación secundaria. Esta - funcionalidad se agregará en una versión posterior de Android N. -
- -Si bien el sistema generalmente muestra las notificaciones secundarias como un grupo, puedes configurarlas - para que aparezcan temporalmente como - - notificaciones emergentes. Esta función es especialmente útil porque permite - el acceso inmediato a la notificación secundaria más reciente y a las acciones asociadas a ella. -
- - -- Tanto los grupos de notificaciones como las entradas remotas han formado parte de la API {@link - android.app.Notification} desde Android 5.0 (API nivel 21) para soportar dispositivos - con Android Wear. Si ya compilaste notificaciones con esas API, - lo único que debes hacer es verificar que el comportamiento de la aplicación concuerde - las pautas antes descritas y considerar la implementación de {@code - setRemoteInputHistory()}. -
- -- Para poder ser compatible con versiones anteriores, están disponibles las mismas API con - la clase {@link android.support.v4.app.NotificationCompat} - de la biblioteca de soporte, que te permite crear notificaciones que funcionan en versiones de Android - anteriores. En dispositivos portátiles y tablets, los usuarios solo ven la notificación de resumen - de modo que una aplicación aún debe tener un estilo de bandeja de entrada o una notificación equivalente - que represente todo el contenido del grupo. Dado que los dispositivos con Android - Wear permiten a los usuarios ver todas las notificaciones secundarias incluso en - niveles anteriores de la plataforma, debes crear notificaciones secundarias independientemente del nivel de - API. -
- -A partir de la versión Android N, puedes personalizar vistas de notificaciones y -aún obtener decoraciones del sistema, como encabezados de notificaciones, acciones y diseños -expandibles.
- -Para habilitar esta característica, Android N suma las siguientes API para que puedas diseñar tu - vista personalizada:
- -Para usar esta nueva API, llama al método {@code setStyle()} y pásale -el estilo de la vista personalizada que hayas elegido.
- -Este fragmento muestra cómo crear un objeto de notificación personalizada con el método -{@code DecoratedCustomViewStyle()}.
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- Android N presenta una nueva API para personalizar el estilo de una notificación.
- Por medio de la clase MessageStyle, puedes modificar varias de las
- etiquetas que aparecen en la notificación, incluidos el título de la conversación,
- mensajes adicionales y la vista de contenido para la notificación.
-
- El siguiente fragmento de código demuestra cómo personalizar el estilo
- de una notificación mediante la clase MessageStyle.
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd
deleted file mode 100644
index c6bf1759393b8..0000000000000
--- a/docs/html-intl/intl/in/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-page.title=Optimalisasi Latar Belakang
-page.metaDescription=Pembatasan baru pada siaran implisit.
-page.keywords="android N", "implicit broadcasts", "job scheduler"
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-- Proses latar belakang bisa menguras memori dan baterai. Misalnya, sebuah - siaran implisit dapat memulai banyak proses latar belakang yang telah didaftarkan - untuk mendengarkannya, sekalipun proses-proses itu mungkin tidak melakukan banyak pekerjaan. Hal ini bisa - berdampak besar pada kinerja perangkat dan pengalaman pengguna. -
- -- Untuk meringankan masalah ini, Android N menerapkan pembatasan - berikut: -
- -- Jika aplikasi Anda menggunakan intent ini, Anda harus membuang dependensi padanya - secepat mungkin agar Anda bisa menargetkan perangkat Android N dengan benar. - Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan - siaran implisit ini. Misalnya, {@link android.app.job.JobScheduler} - dan - {@code GcmNetworkManager} menyediakan mekanisme yang tangguh untuk menjadwalkan operasi - jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan - berbiaya tetap, terpenuhi. Anda sekarang juga bisa menggunakan {@link android.app.job.JobScheduler} - untuk bereaksi terhadap perubahan penyedia materi. Objek {@link android.app.job.JobInfo} - membungkus parameter yang digunakan {@link android.app.job.JobScheduler} - untuk menjadwalkan pekerjaan Anda. Bila syarat-syarat pekerjaan sudah terpenuhi, sistem - akan mengeksekusi pekerjaan ini pada {@link android.app.job.JobService} aplikasi Anda. -
- -- Dalam dokumen ini, kita akan mempelajari cara menggunakan metode alternatif, seperti - {@link android.app.job.JobScheduler}, untuk menyesuaikan aplikasi Anda dengan pembatasan - yang baru. -
- -- Aplikasi yang menargetkan Android N tidak menerima siaran {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} jika mereka - mendaftar untuk menerimanya dalam manifes mereka, dan proses yang bergantung pada siaran - ini tidak akan dimulai. Hal ini bisa menimbulkan masalah bagi aplikasi yang ingin - memantau perubahan jaringan atau melakukan aktivitas jaringan dalam jumlah besar bila perangkat - menghubungkan ke jaringan berbiaya tetap. Beberapa solusi untuk menyiasati pembatasan - ini sudah ada dalam kerangka kerja Android, namun pemilihan solusi - yang tepat bergantung pada apa yang ingin dicapai oleh aplikasi Anda. -
- -- Catatan: Sebuah {@link android.content.BroadcastReceiver} yang mendaftar pada - {@link android.content.Context#registerReceiver Context.registerReceiver()} - akan terus menerima siaran ini saat aplikasi berjalan. -
- -- Saat menggunakan kelas {@link android.app.job.JobInfo.Builder JobInfo.Builder} - untuk membangun objek {@link android.app.job.JobInfo} Anda, terapkan metode {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} dan teruskan {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} sebagai parameter pekerjaan. Contoh kode berikut - menjadwalkan layanan yang akan dijalankan ketika perangkat terhubung ke jaringan - berbiaya tetap dan dikenai biaya: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- Bila syarat untuk pekerjaan Anda terpenuhi, aplikasi Anda akan menerima callback untuk menjalankan - metode {@link android.app.job.JobService#onStartJob onStartJob()} dalam - {@code JobService.class} yang ditetapkan. Untuk melihat contoh selengkapnya mengenai implementasi {@link - android.app.job.JobScheduler}, lihat aplikasi contoh JobScheduler. -
- -- Aplikasi yang menggunakan layanan GMSCore, dan menargetkan Android 5.0 (API level 21) - atau yang lebih rendah, bisa menggunakan - {@code GcmNetworkManager} dan menetapkan {@code Task.NETWORK_STATE_UNMETERED}. -
- -- Aplikasi yang berjalan tetap bisa memantau {@code CONNECTIVITY_CHANGE} dengan - {@link android.content.BroadcastReceiver} yang telah didaftarkan. Akan tetapi, {@link - android.net.ConnectivityManager} API menyediakan metode yang lebih tangguh untuk meminta - callback hanya bila persyaratan jaringan yang ditetapkan terpenuhi. -
- -- Objek {@link android.net.NetworkRequest} mendefinisikan parameter - callback jaringan dari segi {@link android.net.NetworkCapabilities}. Anda - membuat objek {@link android.net.NetworkRequest} dengan kelas {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - kemudian meneruskan objek {@link android.net.NetworkRequest} ke sistem. Bila - syarat jaringan terpenuhi, aplikasi akan menerima callback untuk mengeksekusi - metode {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} yang didefinisikan dalam kelas {@link - android.net.ConnectivityManager.NetworkCallback}. -
- -- Aplikasi akan terus menerima callback hingga aplikasi keluar atau memanggil - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}. -
- -- Di Android N, aplikasi tidak bisa mengirim atau menerima siaran {@link - android.hardware.Camera#ACTION_NEW_PICTURE} atau {@link - android.hardware.Camera#ACTION_NEW_VIDEO}. Pembatasan ini membantu - meringankan dampak terhadap kinerja dan pengalaman pengguna bila beberapa aplikasi harus - aktif untuk memproses gambar atau video baru. Android N - memperluas {@link android.app.job.JobInfo} dan {@link - android.app.job.JobParameters} untuk menyediakan solusi alternatif. -
- -- Untuk memicu pekerjaan saat perubahan URI materi, Android N memperluas - {@link android.app.job.JobInfo} API dengan metode berikut: -
- -- Catatan: {@code TriggerContentUri()} tidak bisa digunakan - bersama-sama dengan {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} atau {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}. Untuk terus memantau perubahan materi, jadwalkan - {@link android.app.job.JobInfo} baru sebelum {@link - android.app.job.JobService} aplikasi selesai menangani callback terbaru. -
- -- Kode contoh berikut menjadwalkan pekerjaan yang akan dipicu bila sistem melaporkan - perubahan ke URI materi, {@code MEDIA_URI}: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- Bila sistem melaporkan perubahan dalam URI materi yang ditetapkan, aplikasi Anda - akan menerima callback dan objek {@link android.app.job.JobParameters} - akan diteruskan ke metode {@link android.app.job.JobService#onStartJob onStartJob()} - dalam {@code MediaContentJob.class}. -
- -- Android N juga memperluas {@link android.app.job.JobParameters} untuk - memungkinkan aplikasi Anda menerima informasi yang berguna tentang otoritas materi - dan URI yang memicu pekerjaan: -
- -- Kode contoh berikut mengganti metode {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} dan - mencatat otoritas materi serta URI yang telah memicu pekerjaan: -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- Mengoptimalkan aplikasi Anda untuk berjalan pada perangkat yang mempunyai memori rendah, atau dalam kondisi - memori rendah, dapat meningkatkan kinerja dan pengalaman pengguna. Membuang - dependensi pada layanan latar belakang dan penerima siaran - implisit yang terdaftar secara statis bisa membantu aplikasi Anda berjalan lebih baik pada perangkat demikian. Meskipun - Android N telah mengambil langkah-langkah untuk mengurangi sebagian masalah ini, Anda disarankan - agar mengoptimalkan aplikasi untuk berjalan tanpa menggunakan - proses latar belakang ini sama sekali. -
- -- Android N memperkenalkan beberapa tambahan perintah Android Debug Bridge (ADB) yang - bisa Anda gunakan untuk menguji perilaku aplikasi dengan proses latar belakang dinonaktifkan: -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - ICU4J merupakan serangkaian pustaka Java sumber terbuka yang banyak digunakan dan menyediakan Unicode - serta dukungan globalisasi untuk aplikasi perangkat lunak. Android N - mengekspos subset ICU4J API dalam kerangka kerja Android bagi pengembang aplikasi - untuk digunakan pada paket {@code android.icu}. API ini menggunakan - data pelokalan yang ada pada perangkat. Hasilnya, Anda bisa mengurangi footprint - APK dengan tidak mengompilasi pustaka ICU4J ke APK Anda; sebagai gantinya, - cukup memanggilnya dalam kerangka kerja. (Dalam hal ini, Anda mungkin perlu menyediakan - beberapa versi - APK Anda, sehingga pengguna yang menjalankan versi Android lebih rendah dari Android N - bisa mengunduh versi aplikasi yang berisi pustaka ICU4J.) -
- -- Dokumen ini diawali dengan menyediakan beberapa informasi dasar tentang level Android API - minimum yang diperlukan untuk mendukung pustaka-pustaka ini. Kemudian dijelaskan tentang apa - yang perlu Anda ketahui tentang implementasi ICU4J spesifik Android. Terakhir, - Anda akan diberi tahu cara menggunakan ICU4J API dalam kerangka kerja Android. -
- -
- Android N mengekspos subset ICU4J API lewat
- paket android.icu, bukannya com.ibm.icu. Kerangka kerja
- Android dapat memilih untuk tidak
- mengekspos ICU4J API karena berbagai alasan; misalnya, Android N tidak mengekspos
- beberapa API yang tidak digunakan lagi atau yang dinyatakan belum
- stabil oleh tim ICU. Karena tim ICU tidak lagi menggunakan API di masa mendatang, Android juga akan menandainya
- sebagai tidak digunakan lagi namun akan terus menyertakannya.
-
Tabel 1. Versi ICU dan CLDR yang digunakan - di Android N.
-| Level Android API | -Versi ICU | -Versi CLDR | -
|---|---|---|
| Android N | -56 | -28 | -
Inilah beberapa hal penting yang harus diperhatikan:
- -
- Jika Anda sudah menggunakan ICU4J API dalam aplikasi, dan
- android.icu API memenuhi persyaratan Anda, maka migrasi ke
- API kerangka kerja mengharuskan Anda untuk mengubah impor Java
- dari com.ibm.icu ke android.icu. Kemudian Anda bisa
- membuang salinan file ICU4J dari APK.
-
- Catatan: API kerangka kerja ICU4J menggunakan ruang nama {@code android.icu} - sebagai ganti {@code com.ibm.icu}. Hal ini untuk menghindari konflik - ruang nama di APK yang berisi pustaka {@code com.ibm.icu} sendiri. -
- -
- Beberapa kelas dalam paket java dan android memiliki
- padanannya dengan yang ditemukan di ICU4J. Akan tetapi, ICU4J seringkali menyediakan dukungan
- yang lebih luas untuk standar dan bahasa.
-
Inilah beberapa contoh untuk membantu Anda memulai:
-| Kelas | -Alternatif | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J dirilis dengan lisensi ICU. Untuk detailnya, lihat Panduan Pengguna - ICU. -
diff --git a/docs/html-intl/intl/in/preview/features/multilingual-support.jd b/docs/html-intl/intl/in/preview/features/multilingual-support.jd deleted file mode 100644 index 29104cb4da7c5..0000000000000 --- a/docs/html-intl/intl/in/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=Bahasa dan Lokal -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N memberikan dukungan yang disempurnakan untuk pengguna multibahasa, -yang memungkinkan mereka memilih beberapa lokal dalam setelan. Android N -menyediakan kemampuan ini dengan memperbanyak jumlah lokal yang didukung -dan mengubah cara sistem mengatasi masalah sumber daya. Metode baru mengatasi -masalah sumber daya ini lebih tangguh dan didesain agar kompatibel dengan APK yang ada, namun -Anda harus ekstra hati-hati terhadap perilaku tak terduga. Misalnya, Anda -harus menguji untuk memastikan aplikasi Anda secara default diatur ke bahasa yang diinginkan. Juga, -jika aplikasi Anda mendukung beberapa bahasa, Anda harus memastikan dukungan ini berfungsi -sebagaimana diinginkan. Terakhir, Anda harus mencoba memastikan aplikasi Anda dengan lancar menangani -bahasa yang tidak secara eksplisit Anda dukung dalam desain.
- -Dokumen ini diawali dengan menjelaskan strategi resolusi sumber daya sebelum -Android N. Berikutnya, akan dijelaskan strategi -resolusi sumber daya Android N yang telah ditingkatkan. Terakhir, akan djelaskan cara memanfaatkan -jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.
- -Sebelum Android N, Android tidak selalu - berhasil mencocokkan lokal aplikasi dan lokal sistem.
- -Misalnya, anggaplah Anda menghadapi situasi berikut:
-Bila kode Java Anda merujuk ke string, sistem akan memuat -string dari file sumber daya default ({@code en_US}), sekalipun aplikasi memiliki -sumber daya bahasa Spanyol yang dilokalkan pada {@code es_ES}. Hal ini karena bila sistem - tidak bisa menemukan hasil yang persis, sistem akan terus mencari sumber daya dengan menghilangkan - kode negara dari lokal tersebut. Akhirnya, jika tidak ada hasil yang ditemukan, sistem akan mengembalikan - ke default, yakni {@code en_US}.
- - -Sistem juga akan default ke {@code en_US} jika pengguna memilih -bahasa yang sama sekali tidak didukung oleh aplikasi, seperti bahasa Prancis. Misalnya:
- --Tabel 1. Resolusi sumber daya tanpa lokal yang persis sama. -
-| Setelan Pengguna | -Sumber Daya Aplikasi | -Resolusi Sumber Daya | -
|---|---|---|
| fr_CH | -
-default (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Coba fr_CH => Gagal -Coba fr => Gagal -Gunakan default (en) - |
-
Dalam contoh ini, sistem menampilkan string bahasa Inggris -tanpa mengetahui apakah pengguna memahami bahasa Inggris. Perilaku ini sudah sangat umum -sekarang. Android N harus mengurangi frekuensi -hasil seperti ini secara substansial.
- -Android N menghadirkan resolusi sumber daya yang lebih handal, dan
-secara otomatis menemukan solusi yang lebih baik. Akan tetapi, untuk mempercepat resolusi dan meningkatkan
-kemudahan pemeliharaan, Anda harus menyimpan sumber daya dalam dialek induk yang paling umum.
- Misalnya, jika sebelumnya Anda telah menyimpan sumber daya bahasa Spanyol di direktori {@code es-US}
-, pindahkan ke direktori {@code es-419}, yang berisi bahasa Spanyol Amerika Latin.
- Demikian pula, jika Anda memiliki string sumber daya dalam folder bernama {@code en-GB}, ganti nama
- folder itu menjadi {@code en-001} (bahasa Inggris internasional), karena induk yang paling umum
- untuk string en-GB adalah {@code en-001}.
- Contoh berikut menjelaskan mengapa praktik-praktik ini meningkatkan kinerja dan
-reliabilitas resolusi sumber daya.
Dengan Android N, kasus yang dijelaskan dalam Tabel 1 diatasi -secara berbeda:
- --Tabel 2. Strategi resolusi yang ditingkatkan bila tidak ada -lokal yang sama persis.
-| Setelan Pengguna | -Sumber Daya Aplikasi | -Resolusi Sumber Daya | -
|---|---|---|
|
-
-default (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Coba fr_CH => Gagal -Coba fr => Gagal -Coba anak dari fr => fr_FR -Gunakan fr_FR - |
-
Sekarang pengguna mendapatkan sumber daya bahasa Prancis sebagai ganti bahasa Inggris. Contoh ini juga menunjukkan - mengapa Anda harus menyimpan string bahasa Prancis di {@code fr} bukan pada {@code fr_FR} - untuk Android N. Arah aksi di sini adalah untuk mencocokkan dengan induk dialek terdekat, - membuat resolusi lebih cepat dan lebih dapat diprediksi.
- -Selain logika resolusi yang diperbaiki ini, Android sekarang menawarkan lebih banyak -pilihan bahasa untuk pengguna. Mari kita coba lagi contoh di atas dengan menetapkan bahasa Italia - sebagai bahasa pengguna tambahan, tetapi tanpa dukungan aplikasi untuk bahasa Prancis.
- --Tabel 3. Resolusi sumber daya bila aplikasi hanya mencocokkan -setelan lokal yang disukai kedua oleh pengguna.
-| Setelan Pengguna | -Sumber Daya Aplikasi | -Resolusi Sumber Daya | - -
|---|---|---|
|
-
-default (en) -de_DE -es_ES -it_IT - |
-
-Coba fr_CH => Gagal -Coba fr => Gagal -Coba anak dari fr => Gagal -Coba it_CH => Gagal -Coba it => Gagal -Coba anak dari it => it_IT -Gunakan it_IT - |
-
-
Pengguna tetap mendapatkan bahasa yang mereka pahami, meskipun aplikasi tidak -mendukung bahasa Prancis.
- - -Android N menambahkan API baru {@code LocaleList.getDefault()} -yang memungkinkan aplikasi langsung kueri daftar bahasa yang telah ditetapkan pengguna. API ini -memungkinkan Anda membuat - perilaku aplikasi yang lebih canggih dan tampilan materi yang lebih optimal. Misalnya, Telusur - bisa menampilkan hasil dalam beberapa bahasa berdasarkan setelan pengguna. Aplikasi browser - bisa menghindari penawaran menerjemahkan halaman dalam bahasa yang sudah diketahui pengguna, - dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai.
- -Hingga Android 6.0 (API level 23), Android hanya mendukung satu atau dua lokal - untuk banyak bahasa umum -(en, es, ar, fr, ru). Karena hanya ada beberapa varian dari setiap bahasa, -aplikasi bisa menghindar dengan menyimpan beberapa nomor dan tanggal sebagai string hard-code -dalam file sumber daya. Akan tetapi, dengan perluasan set lokal yang didukung Android, -maka akan ada -perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi -serupa bahkan dalam lokal tunggal. Menjadikan format Anda sebagai hard-code bisa menghasilkan -pengalaman yang membingungkan bagi pengguna akhir. Karena itu, saat mengembangkan untuk Android N -pastikan menggunakan formatter sebagai ganti menjadikan string angka dan tanggal sebagai hard-code.
- -Contoh terbaik adalah bahasa Arab, yang mendukung Android N berkembang dari -satu {@code ar_EG} menjadi 27 lokal bahasa Arab. Bahasa lokal ini bisa berbagi hampir semua sumber daya, -namun sebagian lebih memilih digit ASCII, sementara yang lain memilih digit asli. Misalnya, -bila Anda ingin membuat kalimat dengan variabel digit, seperti -"Pilih PIN 4 digit", gunakan formatter seperti yang ditampilkan di bawah ini:
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/in/preview/features/notification-updates.jd b/docs/html-intl/intl/in/preview/features/notification-updates.jd deleted file mode 100644 index 0ad2770a4c487..0000000000000 --- a/docs/html-intl/intl/in/preview/features/notification-updates.jd +++ /dev/null @@ -1,393 +0,0 @@ -page.title=Pemberitahuan -page.tags=pemberitahuan -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
Android N memperkenalkan beberapa API baru yang memungkinkan aplikasi untuk mengeposkan -pemberitahuan yang sangat mudah terlihat dan interaktif.
- -Android N menambahkan API pemberitahuan{@link android.support.v4.app.RemoteInput} -yang ada untuk mendukung balasan inline pada handset. Fitur ini memungkinkan pengguna - merespons dengan cepat dari bayangan pemberitahuan tanpa mengunjungi aplikasi Anda.
- -- Android N juga memungkinkan Anda menggabungkan pemberitahuan yang serupa agar - muncul sebagai satu pemberitahuan. Untuk memungkinkan hal ini, Android N menggunakan metode {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} yang sudah ada. Pengguna bisa memperluas setiap - pemberitahuan, dan melakukan tindakan seperti membalas dan menutup setiap - pemberitahuan, satu per satu dari bayangan pemberitahuan. -
- -Terakhir, Android N juga menambahkan API baru yang memungkinkan Anda untuk memanfaatkan dekorasi -sistem dalam tampilan pemberitahuan yang disesuaikan untuk aplikasi Anda. API ini membantu -memastikan semua tampilan pemberitahuan sama-sama menggunakan penyajian yang konsisten dengan -template standar.
- -Dokumen ini menyoroti beberapa perubahan penting yang harus Anda - perhitungkan saat menggunakan fitur pemberitahuan baru dalam aplikasi Anda.
- -Dengan fitur Balasan Langsung di Android N, pengguna bisa dengan cepat
-merespons pesan teks atau memperbarui daftar tugas secara langsung dalam antarmuka
-pemberitahuan. Pada perangkat genggam, tindakan balasan inline muncul sebagai tombol tambahan
- yang dilampirkan pada pemberitahuan. Bila pengguna membalas lewat keyboard, sistem akan melampirkan
- respons teks ke intent
- yang telah Anda tetapkan untuk tindakan pemberitahuan dan mengirimkan intent ke
- aplikasi perangkat genggam Anda.
-
-
-
-
- Gambar 1. Android N menambahkan tombol tindakan Reply. - -
- -Untuk membuat tindakan pemberitahuan yang mendukung balasan langsung: -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput().
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
Sistem akan meminta pengguna memasukkan respons bila mereka memicu -tindakan pemberitahuan.
- -
-- Gambar 2. Pengguna memasukkan teks dari bayangan pemberitahuan. -
- -- Untuk menerima masukan pengguna dari antarmuka pemberitahuan ke aktivitas yang Anda -deklarasikan dalam intent tindakan balasan: -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- Untuk aplikasi interaktif, seperti chat, akan berguna bila menyertakan - konteks tambahan saat menangani teks yang diambil. Misalnya, aplikasi ini bisa menampilkan - beberapa baris riwayat chat sekaligus. Bila pengguna merespons melalui {@link - android.support.v4.app.RemoteInput}, Anda bisa memperbarui riwayat balasan - menggunakan metode {@code setRemoteInputHistory()}. -
- -- Pemberitahuan harus diperbarui atau dibatalkan setelah aplikasi - menerima masukan jarak jauh. Bila pengguna membalas ke pembaruan jarak jauh - menggunakan Balasan Langsung, - jangan batalkan pemberitahuan. Melainkan, perbarui pemberitahuan untuk menampilkan balasan pengguna. -Untuk pemberitahuan yang menggunakan {@code MessagingStyle}, Anda harus menambahkan -balasannya sebagai pesan terbaru. Saat menggunakan template lain, Anda bisa -menambahkan balasan pengguna ke riwayat masukan jarak jauh. -
- -Android N membekali pengembang dengan sebuah cara baru untuk menyatakan - antrean pemberitahuan: bundel pemberitahuan. Ini mirip dengan fitur - Tumpukan - Pemberitahuan dalam Android Wear. Misalnya, jika aplikasi Anda membuat pemberitahuan - untuk pesan yang diterima, bila lebih dari satu pesan diterima, pemberitahuan tersebut akan - dibundel sebagai satu grup. Anda bisa - menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} yang ada untuk membundel pemberitahuan yang sama.
- -- Grup pemberitahuan menerapkan hierarki pada pemberitahuan yang ada di dalamnya. - Di bagian teratas hierarki adalah pemberitahuan induk yang menampilkan informasi - rangkuman untuk grup tersebut. Pengguna secara bertahap bisa - memperbesar grup pemberitahuan, dan sistem akan menampilkan informasi lebih banyak saat - pengguna menggali lebih dalam. Bila pengguna memperbesar bundel, sistem akan memperlihatkan informasi lebih - banyak untuk semua pemberitahuan anak; bila pengguna - memperbesar salah satu pemberitahuan tersebut, sistem akan memperlihatkan seluruh isinya. -
- -
-- Gambar 3. Pengguna secara bertahap bisa memperluas grup - pemberitahuan. -
- -- Catatan: Jika aplikasi yang sama mengirim empat atau beberapa pemberitahuan - dan tidak menetapkan pengelompokan, - sistem secara otomatis akan mengelompokannya. -
- -Untuk mengetahui cara menambahkan pemberitahuan ke grup, lihat -Menambahkan -Setiap Pemberitahuan ke Grup.
- - -Bagian ini memberikan panduan tentang kapan menggunakan grup pemberitahuan sebagai ganti -pemberitahuan {@link android.app.Notification.InboxStyle InboxStyle} -yang telah tersedia di -platform Android versi sebelumnya.
- -Anda harus menggunakan grup pemberitahuan hanya jika semua kondisi berikut ini -bernilai benar untuk kasus penggunaan Anda:
- -Contoh kasus penggunaan yang baik untuk grup pemberitahuan antara lain: aplikasi perpesanan -yang menampilkan daftar pesan yang masuk, atau aplikasi email yang menampilkan daftar email -yang diterima.
- --Contoh kasus penggunaan saat pemberitahuan tunggal lebih disukai - meliputi pesan pribadi dari satu orang, atau representasi daftar dari - item teks baris tunggal. Anda bisa menggunakan -({@link android.app.Notification.InboxStyle InboxStyle} atau -{@link android.app.Notification.BigTextStyle BigTextStyle}) untuk mencapai -hal ini. -
- -- Aplikasi ini harus selalu mengeposkan rangkuman grup, sekalipun grup hanya berisi - satu anak. Sistem akan menyembunyikan rangkuman dan langsung menampilkan - pemberitahuan anak jika hanya berisi pemberitahuan tunggal. Hal ini akan memastikan - sistem bisa memberikan pengalaman yang konsisten saat pengguna menggeser - anak grup. -
- -- Catatan: Versi Android N ini tidak menyembunyikan - rangkuman untuk grup pemberitahuan yang berisi satu anak. Fungsionalitas - ini akan ditambahkan dalam Android N versi berikutnya. -
- -Walaupun sistem biasanya menampilkan pemberitahuan anak sebagai sebuah grup, Anda bisa menyetelnya - agar muncul untuk sementara muncul sebagai - - pemberitahuan pendahuluan. Fitur ini khususnya berguna karena memungkinkan - akses langsung ke pemberitahuan anak terbaru dan tindakan yang dikaitkan dengannya. -
- - -- Baik grup pemberitahuan maupun masukan jauh telah menjadi bagian dari {@link - android.app.Notification} API sejak Android 5.0 (API level 21) untuk mendukung - perangkat Android Wear. Jika Anda sudah membuat pemberitahuan dengan API ini, - satu-satunya tindakan yang harus Anda ambil adalah memverifikasi apakah perilaku aplikasi sesuai dengan panduan yang - dijelaskan di atas, dan mempertimbangkan implementasi {@code - setRemoteInputHistory()}. -
- -- Untuk mendukung kompatibilitas mundur, tersedia API yang sama bersama - kelas {@link android.support.v4.app.NotificationCompat} - pustaka dukungan, yang memungkinkan Anda untuk membuat pemberitahuan yang bekerja pada versi Android - sebelumnya. Pada perangkat genggam dan tablet, pengguna hanya melihat pemberitahuan rangkuman, - sehingga aplikasi masih memiliki model inbox atau pemberitahuan sama yang - mewakili seluruh materi informasi grup. Karena perangkat Android - Wear memungkinkan pengguna melihat semua pemberitahuan anak bahkan pada level platform - yang lebih lama, maka Anda harus membangun pemberitahuan anak dengan mengabaikan level - API. -
- -Mulai dari Android N, Anda bisa menyesuaikan tampilan pemberitahuan dan -tetap mendapatkan dekorasi sistem seperti header pemberitahuan, tindakan, dan -layout yang bisa diperluas.
- -Untuk mengaktifkan kemampuan ini, Android N menambahkan API berikut untuk menata gaya - tampilan khusus Anda:
- -Untuk menggunakan API baru ini, panggil metode {@code setStyle()}, dengan meneruskan -gaya tampilan khusus yang diinginkan padanya.
- -Cuplikan ini menampilkan cara membuat objek pemberitahuan khusus dengan metode -{@code DecoratedCustomViewStyle()}.
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- Android N memperkenalkan API baru untuk menyesuaikan gaya pemberitahuan.
- Dengan menggunakan kelas MessageStyle, Anda bisa mengubah beberapa
- label yang ditampilkan pada pemberitahuan, termasuk judul percakapan,
- pesan tambahan, dan tampilan materi untuk pemberitahuannya.
-
- Cuplikan kode berikut memperagakan cara menyesuaikan sebuah
- gaya pemberitahuan menggunakan kelas MessageStyle.
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/ja/preview/download_mp2.jd b/docs/html-intl/intl/ja/preview/download_mp2.jd
deleted file mode 100644
index 67b1bc4126cf3..0000000000000
--- a/docs/html-intl/intl/ja/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=ダウンロード
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-- Android M Preview SDK には、アプリとプラットフォームの次期リリースで提供される新しい API とのテストに役立つ開発ツール、Android システム ファイル、ライブラリ ファイルが含まれています。 -このドキュメントでは、アプリのテスト用にダウンロードできる Preview のコンポーネントを入手する方法について説明します。 - -
- - -- Preview SDK Android SDK マネージャー経由でダウンロードできます。Preview SDK のダウンロードと設定の詳細については、Set Up the Preview SDK をご覧ください。 - -
- - -- デベロッパー ドキュメントのダウンロード パッケージでは、詳細な Preview の API リファレンス情報や API の比較レポートが提供されます。 -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- これらのシステム イメージでは、テスト用に物理端末にプラットフォームのプレビュー バージョンをインストールできます。 -端末にこれらのイメージを 1 つ以上設定すると、アプリをインストールして、プラットフォームの次期バージョンでアプリがどのように動作するかをテストできます。 -端末にシステム イメージをインストールするプロセスでは、端末からすべてのデータが削除されるため、システム イメージのインストール前にデータをバックアップする必要があります。 - - -
- -- 警告: 次の Android システム イメージはプレビュー版であり、今後変更される可能性があります。デベロッパーによるシステム イメージの使用は、Android SDK Preview 使用許諾契約に準拠するものとします。 -Android Preview システム イメージは安定したリリースではなく、お使いのコンピュータ システム、端末、データに影響を与える可能性のあるエラーや欠陥が含まれている場合があります。 - -プレビュー版の Android システム イメージは工場出荷版の OS と同等のテストを受けておらず、お使いの電話やインストールされているサービス、アンインストールの動作停止を引き起こす場合があります。 - - -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- テスト用に端末イメージを使用するには、互換性のある端末にインストールする必要があります。次の手順に従って、システム イメージをインストールします。 - -
- -- 注: 開発用端末に Preview のシステム イメージをフラッシュすると、OTA アップデートを通じて次のプレビュー リリースに自動的にアップグレードされます。 - -
- -- Preview をアンインストールして、工場出荷時の仕様に戻すには、 -developers.google.com/android にアクセス -して、端末にフラッシュするイメージをダウンロードします。同じページの手順に従って端末にイメージをフラッシュします。 - -
- -- バックグラウンド処理が多くのメモリと電池を消費する場合があります。たとえば、多くのバックグラウンド処理が暗黙的なブロードキャストをリッスンするように登録されていますが、バックグラウンド処理が有用でない場合でも、暗黙的なブロードキャストによりこれらの処理が開始されることがあります。 - -バックグラウンド処理が端末のパフォーマンスとユーザー エクスペリエンスの両方に多大な影響を及ぼす可能性があります。 - -
- -- Android N では、こういった問題を緩和するために、以下の制限が適用されます。 - -
- -- アプリでこれらのインテントのいずれかを使用する場合は、Android N 端末を適切にターゲットにできるように、可能な限りインテントとの依存性を削除する必要があります。 - - Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。 -たとえば、{@link android.app.job.JobScheduler} と -{@code GcmNetworkManager} は、従量制ではないネットワークへの接続など、指定条件が満たされたときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。 - - -また、コンテンツ プロバイダの変更に対応するために、{@link android.app.job.JobScheduler} を使用することもできます。{@link android.app.job.JobInfo} オブジェクトは、{@link android.app.job.JobScheduler} がジョブをスケジュールするために使用するパラメータをカプセル化します。 - - -ジョブの条件が満たされると、システムはこのジョブをアプリの {@link android.app.job.JobService} で実行します。 - -
- -- このドキュメントでは、アプリをこれらの新しい制限に対応させるために、 -{@link android.app.job.JobScheduler} などの代替メソッドの使用法について説明します。 - -
- -- Android N 向けのアプリは、マニフェストで {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストの受信登録をしていても、このブロードキャストを受信しません。また、このブロードキャストに依存している処理は開始されません。 - -これにより、ネットワークの変更をリッスンするアプリ、または端末が従量制ではないネットワークに接続したときにネットワーク アクティビティをまとめて実行するアプリに問題が発生する可能性があります。 - -Android フレームワークは、この制限を回避するためのいくつかのソリューションを備えていますが、アプリで実行するタスクに応じて、適切なソリューションを選択してください。 - - -
- -- 注: -{@link android.content.Context#registerReceiver Context.registerReceiver()} で登録された {@link android.content.BroadcastReceiver} は、アプリが実行中のときにこれらのブロードキャストを継続して受信します。 - -
- -- {@link android.app.job.JobInfo} オブジェクトをビルドするために {@link android.app.job.JobInfo.Builder JobInfo.Builder} を使用するときは、{@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} メソッドを適用し、{@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} をジョブ パラメータとして渡します。 -次のコードサンプルは、端末が従量制ではないネットワークに接続し、充電しているときに実行するサービスをスケジュールします。 - - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- ジョブの条件が満たされたとき、アプリはコールバックを受け取り、指定された {@code JobService.class} で {@link android.app.job.JobService#onStartJob onStartJob()} メソッドを実行します。 - -{@link - android.app.job.JobScheduler} 実装の例については、JobScheduler サンプルアプリをご覧ください。 -
- -- GMSCore サービスを使用し、Android 5.0(API レベル 21)以前をターゲットにしているアプリは、 -{@code GcmNetworkManager} を使用して {@code Task.NETWORK_STATE_UNMETERED} を指定できます。 - -
- -- 実行されているアプリは、登録された {@link android.content.BroadcastReceiver} を使用して {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。 -ただし、{@link - android.net.ConnectivityManager} API は、特定のネットワーク条件が満たされたときだけコールバックをリクエストするより堅牢なメソッドを提供します。 - -
- -- {@link android.net.NetworkRequest} オブジェクトは、{@link android.net.NetworkCapabilities} に応じてネットワーク コールバックのパラメータを定義します。 -{@link - android.net.NetworkRequest.Builder NetworkRequest.Builder} クラスを使って {@link android.net.NetworkRequest} オブジェクトを作成します。次に、{@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} は、{@link android.net.NetworkRequest} オブジェクトをシステムに渡します。 - -ネットワーク条件が満たされると、アプリはコールバックを受け取り、{@link - android.net.ConnectivityManager.NetworkCallback} クラスで定義された {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} メソッドを実行します。 - - -
- -- アプリは終了するか、{@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()} を呼び出すまで、コールバックを受信し続けます。 - -
- -- Android N では、アプリは、{@link - android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link - android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この制限は、新しいイメージや動画を処理するためにいくつかのアプリを起動する必要があるときに、パフォーマンスとユーザー エクスペリエンスへの影響を軽減するのに役立ちます。 - -Android N では、{@link android.app.job.JobInfo} と {@link - android.app.job.JobParameters} を拡張することにより、代わりのソリューションを提供しています。 - -
- -- Android N では、コンテンツ URI の変更でジョブをトリガーするために、{@link android.app.job.JobInfo} API に次のメソッドが追加されています。 - -
- -- 注: {@code TriggerContentUri()} は、{@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} または {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()} と組み合わせて使うことはできません。 -コンテンツの変更を継続的に監視するには、アプリの {@link - android.app.job.JobService} が最新のコールバックの処理を完了する前に、新しい -{@link android.app.job.JobInfo} をスケジュールします。 -
- -- 次のサンプルコードは、システムが変更をコンテンツ URI {@code MEDIA_URI} に通知するときにトリガーされるジョブをスケジュールします。 - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- システムが特定のコンテンツ URI の変更を通知すると、アプリはコールバックを受け取り、{@link android.app.job.JobParameters} オブジェクトが {@code MediaContentJob.class} の {@link android.app.job.JobService#onStartJob onStartJob()} メソッドに渡されます。 - - - -
- -- また、Android N では、{@link android.app.job.JobParameters} が拡張され、ジョブをトリガーしたコンテンツ権限や URI についての有用な情報をアプリが受け取れるようになっています。 - - -
- -- 次のサンプルコードは、{@link - android.app.job.JobService#onStartJob JobService.onStartJob()} メソッドをオーバーライドし、ジョブを起動したコンテンツ権限と URI を記録します。 - -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- アプリをメモリ不足の端末またはメモリ不足の状況で実行するために最適化すると、パフォーマンスとユーザー エクスペリエンスが向上します。 -バックグラウンド サービスと静的に登録された暗黙的なブロードキャスト レシーバーへの依存関係を削除すると、そのような端末上のアプリの動作が向上します。 - -Android N では、これらの問題を削減するための措置が講じられていますが、これらのバックグラウンド処理をまったく使用せずに、アプリが実行されるように最適化することをお勧めします。 - - - -
- -- Android N には、それらのバックグラウンド処理を無効にした状態でアプリの動作をテストするために使用できるいくつかの Android Debug Bridge(ADB)コマンドが追加されています。 - -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - ICU4J は幅広く使用されている、オープンソースの Java ライブラリのセットで、Unicode のほか、ソフトウェア アプリのグローバル化のサポートを提供しています。 -Android N では、アプリのデベロッパー向けの Android フレームワーク内で ICU4J API のサブセットを公開しており、{@code android.icu} パッケージ内で使用できます。 - -これらの API は、端末上のローカライズ データを使用します。 -そのため、ICU4J ライブラリを APK にコンパイルせず、フレームワーク内にあるライブラリを呼び出せばよいので、APK のフットプリントを削減できます - -(この場合、Android N より前のバージョンの Android を実行しているユーザーも、ICU4J ライブラリを含むバージョンのアプリをダウンロードできるようにするには、APK を複数のバージョン用意する必要があります)。 - - - -
- -- ここではまず、これらのライブラリをサポートするために必要な最低限の Android API レベルについて基本的な情報を説明します。 -次に、Android 固有の ICU4J の実装に必要な情報を説明します。 -最後に、Android フレームワーク内で ICU4J API を使用する方法について説明します。 - -
- -
- Android N では、com.ibm.icu ではなく
-android.icu パッケージを介して ICU4J API のサブセットを公開しています。Android フレームワークでは、さまざまな理由により ICU4J API を公開しないという選択も考えられます。たとえば、Android N で廃止された API を公開しないため、または ICU チームからまだ安定版の発表がないため、などの理由があります。
-
-
-
-ICU チームが今後 API を廃止した場合、Android でも廃止と見なすことになりますが、引き続きそれらの API を含める予定です。
-
-
表 1. Android N で使用される ICU および CLDR のバージョン -
-| Android API レベル | -ICU バージョン | -CLDR バージョン | -
|---|---|---|
| Android N | -56 | -28 | -
いくつか注意事項があります。
- -
- アプリ内で既に ICU4J API を使用しており、
-android.icu API がその要件を満たしている場合、このフレームワーク API に移行するには、Java のインポートを com.ibm.icu から android.icu に変更します。
-
-次に、APK から ICU4J ファイルのコピーを削除します。
-
-
- 注:ICU4J フレームワーク API では、名前空間に {@code com.ibm.icu} ではなく{@code android.icu} を使用します。 -これは、独自の {@code com.ibm.icu} ライブラリを含む APK で名前空間が競合しないようにするためです。 - -
- -
- java および android パッケージには、ICU4J にあるクラスと同等のクラスが一部含まれています。
-しかし多くの場合、ICU4J では、より幅広い標準と言語のサポートを提供しています。
-
-
次に、すぐに利用できる例をいくつか示します。
-| クラス | -代替クラス | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J は ICU ライセンスでリリースされています。詳細については、ICU ユーザーガイドをご覧ください。 - -
diff --git a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd deleted file mode 100644 index 44686d2a04b9c..0000000000000 --- a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=言語とロケール -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N では、複数言語のユーザーのサポートが強化されており、設定で複数のロケールを選択できます。 -Android N ではこの機能を提供するために、サポート対象のロケール数を大幅に拡大し、システムがリソースを解決する方法を変更しました。 - -この新しいリソース解決方法は、より堅牢で、既存の APK との互換性を保つよう設計されていますが、予想外の動作には十分に注意してください。 - -たとえば、アプリで目的の言語がデフォルトに設定されているかをテストする必要があります。 -また、アプリで複数の言語をサポートする場合、そのサポートが意図したとおりに機能するかを確かめてください。 - -最後に、明示的にサポートを設計していない言語については、アプリで適切に処理する必要があります。 -
- -このドキュメントでは最初に、Android N より前のバージョンのリソース解決方針について説明します。次に、Android N の改善されたリソース解決方針について説明します。 - -最後に、増大したロケールを活用し、より多くの複数言語ユーザーをサポートする方法について説明します。 -
- -Android N より前のバージョンの Android では、アプリとシステムのロケールを一致させることができない場合がありました。 -
- -たとえば、以下の状況を想定します。
-Java コードが文字列を参照するときに、アプリでスペイン語のリソースが {@code es_ES} でローカライズされている場合でも、システムではデフォルト({@code en_US})リソース ファイルから文字列が読み込まれます。 - -これは、システムで完全一致が見つからない場合に、ロケールから国コードを削除して引き続きリソースを探すためです。 - -最後に、一致が見つからない場合は、デフォルトである {@code en_US} にフォールバックされます。 -
- - -ユーザーがアプリでまったくサポートされていないフランス語などを選択した場合にも、システムはデフォルトの {@code en_US} を読み込みます。 -次に例を示します。
- --表 1. ロケールの完全一致がない場合のリソース解決 -
-| ユーザー設定 | -アプリのリソース | -リソース解決 | -
|---|---|---|
| fr_CH | -
-デフォルト(en) -de_DE -es_ES -fr_FR -it_IT - |
-
-fr_CH を試行 => 失敗 -fr を試行 => 失敗 -デフォルト(en)を使用 - |
-
この例では、システムはユーザーが英語を理解できるかどうかを認識せず、英語の文字列を表示します。 -この動作は現在、ごく一般的です。 -Android N では、このような状況が大幅に削減されるはずです。 -
- -Android N は、より堅牢なリソース解決を導入しており、自動的に適切な代替言語を見つけます。
-ただし、解決を迅速化し保守性を向上させるには、最も一般的な親言語でリソースを保存する必要があります。
-
- たとえば、これまで {@code es-US} ディレクトリにスペイン語のリソースを保存していた場合、{@code es-419} ディレクトリに移動します。ここには、ラテンアメリカのスペイン語が格納されます。
-
- 同様に {@code en-GB} という名前のフォルダにリソースを保存している場合、そのフォルダの名前を {@code en-001}(国際英語)に変更します。en-GB 文字列の最も一般的な親言語は {@code en-001} であるためです。
-
-
- 次の例では、このような対応がリソース解決のパフォーマンスと信頼性を向上する根拠について説明します。
-
Android N では、表 1 で説明した例の解決方法が異なります。 -
- --表 2. ロケールの完全一致が存在しない場合の改善された解決方針 -
-| ユーザー設定 | -アプリのリソース | -リソース解決 | -
|---|---|---|
|
-
-デフォルト(en) -de_DE -es_ES -fr_FR -it_IT - |
-
-fr_CH を試行 => 失敗 -fr を試行 => 失敗 -fr の子言語を試行 => fr_FR -fr_FR を使用 - |
-
これで、ユーザーは英語ではなくフランス語のリソースを利用できます。この例は、フランス語の文字列を Android N の {@code fr_FR} ではなく {@code fr} に保存すべき理由も示しています。これが、最も近い親言語と一致させ、迅速に解決し、予測しやすくするための対策になります。 - - -
- -この改善された解決ロジックに加えて、Android では、選択できるユーザー言語を増やしました。 -もう一度上記の例で説明します。今回は、追加のユーザー言語としてイタリア語が指定され、アプリはフランス語をサポートしていません。 -
- --表 3. アプリがユーザーの 2 番目に優先されるロケール設定のみと一致する場合のリソース解決 -
-| ユーザー設定 | -アプリのリソース | -リソース解決 | - -
|---|---|---|
|
-
-デフォルト(en) -de_DE -es_ES -it_IT - |
-
-fr_CH を試行 => 失敗 -fr を試行 => 失敗 -fr の子を試行 => 失敗 -it_CH を試行 => 失敗 -it を試行 => 失敗 -it の子言語を試行 => it_IT -it_IT を使用 - |
-
-
アプリでフランス語をサポートしていなくても、ユーザーが理解できる言語が使用されます。 -
- - -Android N では、新しい API {@code LocaleList.getDefault()} が加わりました。これにより、アプリは直接、ユーザーが指定した言語のリストを問い合わせることができます。 -この API を使用すると、アプリの動作がさらに洗練され、コンテンツの表示がより最適化されます。 - -たとえば検索で、ユーザーの設定に基づいて複数の言語で結果を表示できます。 -ブラウザ アプリは、ユーザーが理解できる言語の翻訳ページを表示することがなくなり、キーボード アプリは、自動的に最適なレイアウトを有効にすることができます。 - -
- -Android 6.0(API レベル 23)までは、Android は多くの一般的な言語(en、es、ar、fr、ru)に対して 1 つか 2 つのロケールのみをサポートしていました。 - -各言語にはわずかなバリエーションしかなかったため、アプリはリソース ファイルでハードコーディングされた文字列として数字や日付を保存し、処理することができました。 - -しかし Android で幅広いロケールのセットがサポートされるようになったため、日付、時刻、通貨などの情報は、1 つのロケール内でも形式が大幅に異なる場合があります。 - - -形式をハードコーディングすると、エンドユーザーが混乱するおそれがあります。 -したがって、Android N で開発するときは、数字や日付の文字列をハードコーディングせず、必ずフォーマッタを使用してください。 -
- -その良い例がアラビア語です。アラビア語のロケールのサポートは {@code ar_EG} の 1 つだけでしたが、Android N では 27 に増えました。 -これらのロケールは、ほとんどのリソースを共有できますが、数字は ASCII 表記とネイティブ表記で好みが分かれています。 -たとえば、「4 桁の PIN を選択してください」など、数字の変数を含む文を作成する場合、以下のようにフォーマッタを使用します。 - -
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/ja/preview/features/notification-updates.jd b/docs/html-intl/intl/ja/preview/features/notification-updates.jd deleted file mode 100644 index d7cdc36c2d768..0000000000000 --- a/docs/html-intl/intl/ja/preview/features/notification-updates.jd +++ /dev/null @@ -1,393 +0,0 @@ -page.title=通知 -page.tags=notifications -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
Android N には、アプリが視認性の高いインタラクティブな通知を投稿できるようにする新しい API がいくつか導入されています。 -
- -Android N では、ハンドセットでインライン リプライをサポートするために、既存の {@link android.support.v4.app.RemoteInput} 通知 API が拡張されています。 -これらの機能を使用すると、ユーザーは、アプリにアクセスすることなく、通知シェードからすばやく応答できます。 -
- -- Android N では、類似した通知をバンドルして、単一の通知として表示することもできます。 -このバンドルを可能にするために、Android N では、既存の {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} メソッドが使用されます。ユーザーは、各通知を展開して、通知シェードから個別に返信や消去などのアクションを各通知に対して行うことができます。 - - -
- -最後に、Android N には、アプリのカスタマイズした通知ビューでシステム デコレーションを活用できるようにする新しい API が追加されています。 -これらの API は、通知ビューで、標準のテンプレートを使った一貫した表示を共有できるようにします。 - -
- -このドキュメントでは、アプリでこれらの新しい通知機能を使用するときに考慮する必要のある主な変更点について説明します。 -
- -Android N のダイレクト リプライ機能を使用すると、ユーザーは、テキスト メッセージにすばやく応答したり、通知インターフェース内でタスクリストを直接アップデートしたりできます。
-
-ハンドヘルド デバイスでは、インライン リプライ アクションが、通知にアタッチされた追加ボタンとして表示されます。
-ユーザーがキーボード経由で返信する場合、通知アクション向けに指定したインテントにテキストによる応答がアタッチされ、そのインテントがハンドヘルド デバイス用アプリに送信されます。
-
-
-
-
-
-
-
- 図 1. Android N に追加された [Reply] アクション ボタン。 - -
- -ダイレクト リプライをサポートする通知アクションを作成する方法は次のとおりです。 -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput() を使用して、{@link android.support.v4.app.RemoteInput} オブジェクトをアクションにアタッチします。
-
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
ユーザーが通知アクションをトリガーすると、ユーザーは応答を入力するよう求められます。 -
- -
-- 図 2. ユーザーは通知シェードでテキスト メッセージを入力できます。 -
- -- リプライ アクションのインテントで宣言したアクティビティで、通知インターフェースからのユーザー入力を取得する方法は次のとおりです。 - -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- チャットなどのインタラクティブなアプリでは、取得されたテキストを処理するときに、追加のコンテキストを含めると役立つ場合があります。 -たとえば、このようなアプリでは複数行のチャット履歴が表示されることがあります。 -{@link - android.support.v4.app.RemoteInput} を介してユーザーが応答した場合、{@code setRemoteInputHistory()} メソッドを使用してリプライ履歴を更新できます。 - -
- -- アプリがリモート入力を受け取った後、通知は更新またはキャンセルされる必要があります。 -ユーザーがダイレクト リプライを使用してリモート更新にリプライする場合は、通知をキャンセルしないでください。 - -代わりに、通知を更新してユーザーのリプライを表示します。{@code MessagingStyle} を使用した通知の場合は、リプライを最新のメッセージとして追加する必要があります。 - -他のテンプレートを使用する場合は、ユーザーのリプライをリモート入力履歴に追加できます。 - -
- -Android N は、通知のキューを表す新しい方法である - バンドル通知をデベロッパーに提供します。この機能は、Android Wear の通知スタック機能に似ています。 - -たとえば、受信したメッセージの通知をアプリで作成する場合、複数のメッセージが受信されると、通知が単一のグループにバンドルされます。 - -既存の {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} メソッドを使用して、同様の通知をバンドルできます。 -
- -- 通知グループでは、通知グループを構成する通知が階層化されます。 - この階層の最上位には、そのグループの概要情報を表示する親通知があります。 -ユーザーは通知グループを順次展開できます。ユーザーが階層を深くたどると、より多くの情報が表示されます。 - -ユーザーがバンドルを展開すると、すべての子通知の詳細情報が表示されます。ユーザーがいずれかの通知を展開すると、そのコンテンツがすべて表示されます。 - - -
- -
-- 図 3. ユーザーは通知グループを順次展開できます。 - -
- -- 注:同じアプリが 4 つ以上の通知を送信するときにグループ化が指定されていない場合、システムにより自動的に通知がグループ化されます。 - - -
- -通知をグループに追加する方法については、各通知をグループに追加するをご覧ください。 - -
- - -このセクションでは、前のバージョンの Android プラットフォームで利用可能な {@link android.app.Notification.InboxStyle InboxStyle} 通知の代わりに、通知グループを使用する必要がある状況についてのガイドラインを提供します。 - - -
- -ユースケースで次のすべての条件が満たされた場合にのみ通知グループを使用する必要があります。 -
- -通知グループの適切なユースケースの例には、着信メッセージのリストを表示するメッセージング アプリや受信したメールのリストを表示するメールアプリなどが含まれます。 - -
- --単一の通知が望ましいユースケースの例には、1 人のユーザーからの個別メッセージや、1 行のテキスト メッセージ アイテムのリスト表示が含まれます。 - -このリスト表示を行うには、 -{@link android.app.Notification.InboxStyle InboxStyle} または {@link android.app.Notification.BigTextStyle BigTextStyle} を使用します。 - - -
- -- アプリは、グループに単一の子通知が含まれている場合でも、グループの概要を常に送信する必要があります。 -グループに単一の通知のみが含まれている場合、システムによって、概要の表示が非表示になり、子通知が直接表示されます。 -これにより、ユーザーがグループの子通知をスワイプして消すときに一貫した使用感が出ます。 - - -
- -- 注:このバージョンの Android N では、単一の子通知が含まれる通知グループの概要を非表示にできません。 -この機能は、将来のバージョンの Android N に追加されます。 - -
- -通常、子通知はグループとして表示されますが、子通知をヘッドアップ通知として一時的に表示するように設定できます。 - - -この機能は、特に最新の子通知とその関連するアクションへの即時アクセスを可能にするので便利です。 - -
- - -- Android 5.0(API レベル 21)以降では、Android Wear 端末をサポートするために、通知グループとリモート入力が {@link - android.app.Notification} API の一部になっています。 -これらの API を使用して通知を既に作成している場合は、アプリの動作が上記のガイドラインに適合していることの確認と、{@code - setRemoteInputHistory()} の実装検討のみを行ってください。 - - -
- -- 下位互換性をサポートするために、サポート ライブラリの {@link android.support.v4.app.NotificationCompat} クラスで同じ API が利用できるようになっているため、前の Android バージョンで機能する通知を作成できます。 - - -携帯端末とタブレットでは、概要通知のみがユーザーに表示されるため、アプリは、受信トレイスタイルやグループの全情報を表す同等の通知を引き続きサポートする必要があります。 - -Android Wear 端末では、古いプラットフォーム レベル上にもすべての子通知が表示されるため、API レベルに関係なく、子通知を作成する必要があります。 - - - -
- -Android N 以降では通知ビューをカスタマイズでき、通知ヘッダー、アクション、展開レイアウトなどのシステム デコレーションを引き続き取得できます。 - -
- -この機能を有効にするために、Android N には、カスタムビューにスタイルを適用する次の API が追加されています。 -
- -この新しい API を使用するには、{@code setStyle()} メソッドを呼び出し、目的のカスタムビュー スタイルに渡します。 -
- -次のコード スニペットは、 -{@code DecoratedCustomViewStyle()} メソッドでカスタム通知オブジェクトを作成する方法を示しています。
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- Android N では、通知スタイルをカスタマイズするための新しい API が提供されます。
- MessageStyle クラスを使用して、会話タイトル、追加メッセージ、通知のコンテンツ ビューなど、通知に表示される複数のラベルを変更できます。
-
-
-
- 次のコード スニペットは、MessageStyle クラスを使用して通知のスタイルをカスタマイズする方法を示しています。
-
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/ko/preview/download_mp2.jd b/docs/html-intl/intl/ko/preview/download_mp2.jd
deleted file mode 100644
index ff9dd7eab8d74..0000000000000
--- a/docs/html-intl/intl/ko/preview/download_mp2.jd
+++ /dev/null
@@ -1,360 +0,0 @@
-page.title=다운로드
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-- Android M 미리 보기 SDK에는 개발 도구, Android 시스템 파일 및 라이브러리 파일이 포함되어 있어 앱을 테스트하고 플랫폼의 다음 릴리스에 도입되는 새 API를 테스트하는 데 유용합니다. - 이 문서에서는 미리 보기의 다운로드할 수 있는 구성 요소를 가져와 앱을 테스트하는 방법에 대해 설명합니다. - -
- - -- 미리 보기 SDK는 Android SDK Manager를 통해 다운로드할 수 있습니다. 미리 보기 SDK를 다운로드하고 구성하는 데 관한 자세한 정보는 미리 보기 SDK 설정하기를 참조하십시오. - -
- - -- 개발자 관련 문서 다운로드 패키지에서는 자세한 API 참조 정보와 미리 보기에 대한 API 차이점 보고서를 제공합니다. -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- 이러한 시스템 이미지를 사용하면 물리적인 기기에서 플랫폼의 미리 보기 버전을 설치하여 테스트할 수 있게 해줍니다. - 이러한 이미지 중 한 가지로 기기를 구성하면, 앱을 설치하고 테스트하여 앱이 플랫폼의 다음 버전에서 어떤 성능을 보일지 확인할 수 있습니다. - 기기에 시스템 이미지를 설치하는 과정은기기에서 모든 데이터를 제거하므로, 시스템 이미지를 설치하기에 앞서 데이터를 백업하는 것이 좋습니다. - - -
- -- 경고: 다음 Android 시스템 이미지는 미리 보기이며 사정에 따라 변동될 수 있습니다. 이러한 시스템 이미지를 사용할 때에는 Android SDK 미리 보기 라이선스 계약을 따라야 합니다. - Android 미리 보기 시스템 이미지는 안정된 릴리스가 아니며, 오류나 결함이 들어있을 수 있고 이 때문에 컴퓨터 시스템, 기기 및 데이터에 손상을 초래할 수 있습니다. - - 미리 보기 Android 시스템 이미지는 공장 OS와 같은 테스트를 거치며 전화기 및 설치된 서비스와 애플리케이션의 작동이 중단되는 결과를 낳을 수 있습니다. - - -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- 기기 이미지를 테스트용으로 사용하려면, 이를 호환되는 기기에 설치해야만 합니다. 시스템 이미지를 설치하려면 아래의 지침을 따르십시오. - -
- -- 참고: 일단 개발 기기에 미리 보기 시스템 이미지를 플래시하고 나면 이것은 OTA(over-the-air) 업데이트를 통해 다음 미리 보기 릴리스에 맞춰 자동으로 업그레이드됩니다. - -
- -- 미리 보기의 설치를 제거하고 기기를 공장 사양으로 되돌리고자 하는 경우, developers.google.com/android를 방문하여 기기에 플래시하고자 하는 이미지를 다운로드하십시오. - - 해당 페이지에 있는 지침을 따라 기기에 이미지를 플래시하면 됩니다. - -
- -- 백그라운드 프로세스는 메모리와 배터리를 많이 소모할 수 있습니다. 예를 들어, 암시적 브로드캐스트는 -이 브로드캐스트를 수신하도록 등록된 많은 백그라운드 프로세스를 시작할 수 있지만 -해당 프로세스가 많은 작업을 수행하지 못할 경우가 있습니다. 이로 인해 기기 성능과 - 사용자 환경에 모두 상당한 영향을 미칠 수 있습니다. -
- -- 이 문제를 완화하기 위해, Android N은 다음과 같은 제한을 -적용합니다. -
- -- 앱이 이들 인텐트 중 하나라도 사용하는 경우에는, -Android N 기기를 올바로 대상으로 삼을 수 있도록 이들 인텐트에 대한 종속성을 최대한 빨리 제거해야 합니다. - Android 프레임워크는 이러한 암시적 브로드캐스트의 - 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link android.app.job.JobScheduler} -및 - {@code GcmNetworkManager}는 지정된 -조건(예: 비 데이터 통신 네트워크에 연결)이 충족될 경우 네트워크 작업을 -예약할 수 있는 강력한 메커니즘을 제공합니다. 이제 {@link android.app.job.JobScheduler}를 -사용하여 콘텐츠 제공자의 변경에 대응할 수도 있습니다. {@link android.app.job.JobInfo} -객체는 {@link android.app.job.JobScheduler}가 -작업 예약에 사용하는 매개변수를 캡슐화합니다. 작업 조건이 충족되면 시스템은 -이 작업을 앱의 {@link android.app.job.JobService}에서 실행합니다. -
- -- 이 문서에서는 대체 메서드(예: {@link android.app.job.JobScheduler})를 -사용하여 이러한 새로운 제한에 맞게 앱을 적용하는 방법에 대해 -배워보겠습니다. -
- -- Android N을 대상으로 하는 앱은 {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를 수신하지 않으며(이 브로드캐스트를 수신하도록 매니페스트에 등록하는 경우), 이 -브로드캐스트에 의존하는 프로세스는 -시작되지 않습니다. 이 경우에는 기기가 고정 요금제 네트워크에 연결될 때, -네트워크 변경 사항을 수신하려는 앱이나 대량의 네트워크 액티비티를 -수행하려는 앱에 문제가 생길 수 있습니다. 이 제한을 해결하기 위한 여러 가지 -해결책이 Android 프레임워크에 이미 있지만, 올바른 해결책을 선택하는 것은 -앱의 용도에 따라 다릅니다. -
- -- 참고: {@link android.content.Context#registerReceiver Context.registerReceiver()}로 - 등록된 {@link android.content.BroadcastReceiver}는 앱이 - 실행되는 중에 계속해서 이 브로드캐스트를 수신합니다. -
- -- {@link android.app.job.JobInfo.Builder JobInfo.Builder} 클래스를 -사용하여 {@link android.app.job.JobInfo} 객체를 빌드하는 경우, {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} 메서드를 적용하고 {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED}를 작업 매개변수로 전달합니다. 다음의 코드 샘플에서는 기기가 비 데이터 통신 -네트워크에 연결되어 충전 중일 때 실행할 서비스를 -예약합니다. -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- 작업의 조건이 충족되면, 앱은 -{@link android.app.job.JobService#onStartJob onStartJob()} 메서드를 지정된 {@code JobService.class}에서 실행하기 위한 콜백을 -수신합니다. {@link - android.app.job.JobScheduler} 구현의 더 많은 예를 보려면, JobScheduler 샘플 앱을 참조하세요. -
- -- GMSCore 서비스를 사용하고 Android 5.0(API 레벨 21) 이하를 대상으로 하는 앱은 -{@code GcmNetworkManager}를 사용하고 {@code Task.NETWORK_STATE_UNMETERED}를 -지정할 수 있습니다. -
- -- 실행 중인 앱은 등록된 {@link android.content.BroadcastReceiver}로 {@code CONNECTIVITY_CHANGE}를 여전히 수신할 수 -있습니다. 하지만 {@link - android.net.ConnectivityManager} API는 지정된 네트워크 조건이 충족될 경우에만 콜백을 요청하는 - 더욱 강력한 메서드를 제공합니다. -
- -- {@link android.net.NetworkRequest} 객체는 {@link android.net.NetworkCapabilities}의 -관점에서 네트워크 콜백의 매개변수를 정의합니다. {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder} 클래스로 {@link android.net.NetworkRequest} 객체를 -생성합니다. 이어서 {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} -이 {@link android.net.NetworkRequest} 객체를 시스템에 전달합니다. 네트워크 조건이 충족되면, 앱은 {@link - android.net.ConnectivityManager.NetworkCallback} 클래스에 정의된 {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} 메서드를 -실행하기 위한 콜백을 -수신합니다. -
- -- 앱이 종료되거나 앱이 {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}을 호출할 때까지 계속해서 -콜백을 수신합니다. -
- -- Android N에서 앱은 {@link - android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link - android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 제한은 새로운 이미지나 - 동영상을 처리하기 위해 여러 앱을 깨워야 하는 경우, 성능 및 사용자 환경에 - 미치는 영향을 줄여줍니다. Android N은 - {@link android.app.job.JobInfo} 및 {@link - android.app.job.JobParameters}를 확장하여 대체 해결책을 제공합니다. -
- -- 콘텐츠 URI 변경에 대한 작업을 트리거하기 위해, Android N은 - 다음과 같은 메서드로 {@link android.app.job.JobInfo} API를 확장합니다. -
- -- 참고: {@code TriggerContentUri()}는 {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} 또는 {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}와 -조합으로 사용될 수 없습니다. 콘텐츠 변경을 계속해서 모니터링하려면, 앱의 {@link - android.app.job.JobService}가 가장 최근 콜백의 처리를 완료하기 전에 새로운 -{@link android.app.job.JobInfo}를 예약하세요. -
- -- 다음 샘플 코드에서는 콘텐츠 URI, {@code MEDIA_URI}의 -변경을 시스템이 보고할 때 트리거할 작업을 예약합니다. -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- 지정된 콘텐츠 URI에서의 변경을 시스템이 보고할 때, -앱이 콜백을 수신하고 {@link android.app.job.JobParameters} 객체가 -{@code MediaContentJob.class}의 {@link android.app.job.JobService#onStartJob onStartJob()}메서드에 -전달됩니다. -
- -- 또한, Android N에서는 어떤 콘텐츠 기관과 - URI가 해당 작업을 트리거했는지에 대한 유용한 정보를 앱이 - 수신할 수 있도록 {@link android.app.job.JobParameters}를 확장합니다. -
- -- 다음 샘플 코드에서는 {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} 메서드를 재정의하고 -, 작업을 트리거한 콘텐츠 기관과 URI를 기록합니다. -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- 저용량 메모리 기기나 저용량 메모리 조건에서 -앱이 실행되도록 최적화하면 성능과 사용자 환경을 개선할 수 있습니다. 백그라운드 서비스에 대한 종속성과 정적으로 등록된 - 암시적 브로드캐스트 수신기에 대한 종속성을 제거하면 해당 기기에서 앱을 - 더욱 빨리 실행할 수 있습니다. Android N은 이러한 문제 중 일부를 줄이기 위한 - 조치를 취하고 있지만, 백그라운드 - 프로세스를 전혀 사용하지 않고 앱이 실행되도록 - 최적화하는 것이 좋습니다. -
- -- Android N에서는 백그라운드 프로세스를 -비활성화하고 앱 동작을 테스트하는 데 사용할 수 있는 몇 가지 추가적인 ADB(Android 디버그 브리지) 명령을 도입했습니다. -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - ICU4J는 오픈 소스이며 널리 사용되는 Java 라이브러리 세트로, 소프트웨어 애플리케이션에 유니코드와 -세계화 지원을 제공합니다. Android N은 -Android 프레임워크에서 앱 개발자가 -{@code android.icu} 패키지에서 사용할 수 있는 ICU4J API의 하위 세트를 노출합니다. 이 API는 -기기의 현지화 데이터를 사용합니다. 따라서 ICU4J 라이브러리를 APK로 컴파일하지 않고 -프레임워크에서 호출하여APK -풋프린트를 줄일 수 있습니다. (이 경우, Android N 이하 버전의 Android를 -실행하는 사용자가 ICU4J 라이브러리를 포함한 앱 버전을 다운로드할 수 있도록 -여러 버전의 -APK를 제공해야 할 수도 있습니다.) -
- -- 이 문서에서는 먼저 이 라이브러리 지원에 필요한 최소 -Android API 레벨과 관련된 몇 가지 기본 정보를 제공합니다. 그 후, -각 Android에서 ICU4J를 구현하는 데 무엇이 필요한지 설명합니다. 마지막으로, -Android 프레임워크에서 ICU4J API를 사용하는 방법을 설명합니다. -
- -
- Android N은
-com.ibm.icu가 아니라 android.icu 패키지를 통해 ICU4J API의 하위 세트를 노출합니다.
-Android 프레임워크는 여러 가지 이유로
-ICU4J API를 노출하지 않을 수 있습니다. 예컨대 Android N은
-일부 사용 중단된 API나 ICU 팀에서 안정적이라고 선언하지 않은 API를
-노출하지 않습니다. ICU 팀이 이후 API의 사용을 중단하면, Android도
-이를 사용 중단됨으로 표시하지만 계속 포함합니다.
-
표 1. -Android N에서 사용된 ICU 및 CLDR 버전.
-| Android API 레벨 | -ICU 버전 | -CLDR 버전 | -
|---|---|---|
| Android N | -56 | -28 | -
중요한 참고 사항:
- -
- 앱에서 이미 ICU4J API를 사용하고 있고
-android.icu API가 요구사항을 충족한다면
-프레임워크 API로 마이그레이션할 때 Java 가져오기를
-com.ibm.icu에서 android.icu로 변경해야 합니다. 그러면 APK에서
-ICU4J 파일 사본을 삭제할 수 있습니다.
-
- 참고: ICU4J 프레임워크 API는 {@code com.ibm.icu} 대신 {@code android.icu} -네임스페이스를 사용합니다. 이는 자체 {@code com.ibm.icu} 라이브러리가 포함된 APK에서 -네임스페이스 충돌을 피하기 위해서입니다. -
- -
- java와 android 패키지의 일부 클래스는
-ICU4J의 클래스와 같습니다. 그러나 ICU4J는 종종 더욱 폭넓은
-표준과 언어를 지원합니다.
-
시작하기 위한 몇 가지 예시는 다음과 같습니다.
-| 클래스 | -대체 | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J는 ICU 라이선스에 따라 배포됩니다. 자세한 내용은 ICU - 사용자 가이드를 참조하세요. -
diff --git a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd deleted file mode 100644 index 6b3e9994f9160..0000000000000 --- a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=언어 및 로케일 -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N에서는 다국어 사용자를 위한 지원이 개선되었으므로 -이러한 사용자가 이제 설정에서 여러 로케일을 선택할 수 있습니다. Android N은 -지원되는 로케일 수를 대폭 확대하고 -시스템이 리소스를 결정하는 방식을 변경하여 이 기능을 제공합니다. 새로 도입된 리소스 결정 방법은 -더욱 안정적이고 기존 APK와 호환되도록 설계되어 있지만 -예상치 못한 동작이 없는지 신중히 살펴봐야 합니다. 예를 들어, -앱이 예상 언어로 기본 설정되어 있는지 테스트해야 합니다. 또한, -앱이 여러 언어를 지원한다면 -원하는 대로 작동하는지 확인해야 합니다. 마지막으로 -앱이 지원하도록 명시하지 않은 언어를 무리 없이 처리하는지 확인해야 합니다.
- -이 문서에서는 -Android N 이전의 리소스 결정 전략을 설명한 뒤에, Android N의 개선된 -리소스 결정 전략을 설명합니다. 마지막으로 -더 많은 다국어 사용자를 지원하기 위해 확장된 로케일을 활용하는 방법을 설명합니다.
- -Android N 이전의 Android에서는 - 앱과 시스템 로케일을 매칭하지 못하는 경우가 가끔 있었습니다.
- -예를 들어, 다음과 같은 상황이라고 가정해 봅시다.
-Java 코드가 문자열을 참조할 때 -앱에서 {@code es_ES} 아래에 스페인어 리소스를 현지화했더라도, 시스템은 기본({@code en_US}) 리소스 파일로부터 문자열을 -로드합니다. 그 이유는 시스템이 -정확한 일치 항목을 찾을 수 없을 때 해당 로케일에서 국가 코드를 -제거하여 리소스를 계속 찾기 때문입니다. 마지막으로, 일치 항목을 찾지 못한 경우 시스템은 기본값({@code en_US})으로 다시 -돌아갑니다.
- - -또한, 앱에서 전혀 지원하지 않는 언어(예: 프랑스어)를 사용자가 선택하면 시스템은 기본값을 {@code en_US}로 -설정합니다. 예를 들면 다음과 같습니다.
- --표 1. 정확한 로케일 일치가 없는 경우 리소스 결정. -
-| 사용자 설정 | -앱 리소스 | -리소스 결정 | -
|---|---|---|
| fr_CH | -
-기본값(en) -de_DE -es_ES -fr_FR -it_IT - |
-
-fr_CH 시도 => 실패 -fr 시도 => 실패 -기본값(en) 사용 - |
-
이 예시에서 시스템은 -사용자가 영어를 이해할 수 있는지 여부와 관계없이 영어 문자열을 표시합니다. 현재 이러한 동작이 상당히 -일반적입니다. Android N은 이런 -결과가 나타나는 빈도를 상당히 낮추었습니다.
- -Android N은 더욱 안정적인 리소스 결정을 사용하고
-자동으로 더욱 알맞은 대안책을 찾습니다. 그러나 결정 속도를 높이고
-관리성을 개선하려면 가장 일반적인 상위 방언에 리소스를 저장해야 합니다.
- 예를 들어, 전에 {@code es-US} 디렉터리에
-스페인어 리소스를 저장했다면 남미 스페인어가 있는 {@code es-419} 디렉터리로 이동합니다.
- 마찬가지로 {@code en-GB}란 폴더에 리소스 문자열이 있다면
-폴더 이름을 {@code en-001}(국제 영어)로 변경합니다.
-en-GB 문자열의 가장 일반적인 상위 리소스는 {@code en-001}이기 때문입니다.
- 다음은 이러한 방법이
-성능과 리소스 결정의 신뢰성을 개선하는 이유를 설명하는 예시입니다.
Android N의 경우, 표 1의 사례는 -다르게 결정됩니다.
- --표 2. 정확한 로케일 일치가 없을 경우 -개선된 결정 전략.
-| 사용자 설정 | -앱 리소스 | -리소스 결정 | -
|---|---|---|
|
-
-기본값(en) -de_DE -es_ES -fr_FR -it_IT - |
-
-fr_CH 시도 => 실패 -fr 시도 => 실패 -Fr의 하위 리소스 시도 => fr_FR -fr_FR 사용 - |
-
이제 사용자는 영어 대신 프랑스어 리소스를 보게 됩니다. 이 예시에서는 -Android N에서 프랑스어 문자열을 {@code fr_FR} -이 아니라 {@code fr}에 저장해야 하는 이유를 알 수 있습니다. 이러한 동작을 통해 가장 가까운 상위 방언과 일치시켜서 -더욱 빠르고 예측 가능하게 결정합니다.
- -Android는 이러한 결정 논리를 개선했을 뿐만 아니라 -선택 가능한 언어를 더 많이 제공합니다. 위의 예시에 이탈리아어가 추가 사용자 언어로 지정되었지만 -앱에서 프랑스어를 지정하지 않는 경우를 적용해 보겠습니다.
- --표 3. 앱이 사용자의 두 번째 선호 로케일 설정에만 일치할 때 -리소스 결정.
-| 사용자 설정 | -앱 리소스 | -리소스 결정 | - -
|---|---|---|
|
-
-기본값(en) -de_DE -es_ES -it_IT - |
-
-fr_CH 시도 => 실패 -fr 시도 => 실패 -fr의 하위 리소스 시도 => 실패 -it_CH 시도 => 실패 -it 시도 => 실패 -it의 하위 리소스 시도 => it_IT -it_IT 사용 - |
-
-
앱이 프랑스어를 지원하지 않지만 -사용자는 여전히 자신이 이해하는 언어를 볼 수 있습니다.
- - -Android N에서는 앱이 사용자가 지정한 언어 목록을 직접 쿼리할 수 있는 새로운 API {@code LocaleList.getDefault()}가 -추가되었습니다. 이 API는 -앱 동작을 더욱 정교하게 해주고 - 콘텐츠 표시를 더 최적화해 줍니다. 예를 들어, 검색 시 -사용자 설정에 따라 여러 언어로 결과를 표시할 수 있습니다. 브라우저 앱은 -사용자가 이미 알고 있는 언어로 -번역 페이지를 제공하지 않고, 키보드 앱은 모든 적절한 레이아웃을 자동 활성화할 수 있습니다.
- -Android 6.0(API 레벨 23)까지 Android는 많은 공통 언어(en, es, ar, fr, ru)에 대해 -1~2개의 로케일만 -지원했습니다. 각 언어의 변종은 몇 개뿐이기 때문에 -리소스 파일에 하드코딩된 문자열로 몇 개의 숫자와 날짜를 저장하는 것만으로 -충분했습니다. 그러나 Android에서 지원되는 로케일 세트가 확장되면서 -단일 로케일 내에서조차 -날짜, 시간, 통화 및 유사 정보에 -큰 차이가 생길 수 있게 되었습니다. 형식 하드코딩은 -최종 사용자에게 혼란을 줄 수 있습니다. 그러므로 Android N을 개발할 때는 -숫자와 날짜 문자열을 하드코딩하는 대신 포맷터를 사용하도록 하세요.
- -가장 좋은 예시로는 아랍어가 있습니다. Android N에서 아랍어 지원이 -{@code ar_EG} 1개에서 27개 아랍어 로케일로 확장되었습니다. 이러한 로케일은 대부분의 리소스를 공유할 수 있지만 -어떤 로케일은 ASCII 숫자를 선호하고 어떤 로케일은 네이티브 숫자를 선호합니다. 예를 들어, -"4자리 PIN 선택"과 같은 숫자 변수가 포함된 문장을 생성하려면 -아래와 같이 포맷터를 사용합니다.
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/ko/preview/features/notification-updates.jd b/docs/html-intl/intl/ko/preview/features/notification-updates.jd deleted file mode 100644 index 480eda0a042c2..0000000000000 --- a/docs/html-intl/intl/ko/preview/features/notification-updates.jd +++ /dev/null @@ -1,393 +0,0 @@ -page.title=알림 -page.tags=알림 -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - - - -
Android N에서는 가시성과 상호 작용이 뛰어난 알림을 -앱이 게시할 수 있도록 여러 가지 새로운 API를 도입했습니다.
- -Android N에서는 핸드셋에서 인라인 회신을 지원하기 위해 기존의 {@link android.support.v4.app.RemoteInput} -알림 API를 확장합니다. 이 기능을 사용하면 앱을 방문하지 않고도 알림 창에서 -신속하게 응답할 수 있습니다.
- -- Android N에서는 또한 비슷한 알림을 묶어서 단일 알림으로 -표시할 수도 있습니다. 이것이 가능하도록, Android N에서는 기존의 {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} 메서드를 사용합니다. 사용자가 각 알림을 확장할 수 있으며, 각 알림에 대해 회신 및 -닫기와 같은 동작을 알림 창에서 개별적으로 수행할 -수 있습니다. -
- -마지막으로, Android N에서는 또한 앱의 사용자 지정된 알림 -뷰에서 시스템 장식을 활용할 수 있는 새 API를 추가합니다. 이들 API는 표준 템플릿을 통해 알림 뷰가 -일관된 프레젠테이션을 공유하도록 보장해 -줍니다.
- -이 문서에서는 새 알림 기능을 앱에서 사용할 때 고려해야 -하는 몇 가지 주요 변경 사항을 중점적으로 다룹니다.
- -Android N에 있는 직접 회신 기능을 사용하여, 사용자가 문자
-메시지에 신속하게 응답하거나 알림 인터페이스 내에서 직접
-작업 목록을 업데이트할 수 있습니다. 핸드헬드에서 인라인 회신 동작은 알림에 연결된 추가적인
-버튼으로 나타납니다. 사용자가 키보드를 통해 회신하면
-시스템은 여러분이 알림 동작에 지정했던
-인텐트에 텍스트 응답을 첨부하고 이 인텐트를
- 핸드헬드 앱으로 보냅니다.
-
-
-
-
- 그림 1. Android N이 Reply - 동작 버튼을 추가합니다. -
- -직접 회신을 지원하는 알림 동작을 만들려면: -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput()을 사용하여 {@link android.support.v4.app.RemoteInput}
-객체를 동작에 첨부합니다.
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
시스템이 사용자에게 알림 동작이 트리거될 때 응답을 입력하라는 -메시지를 표시합니다.
- -
-- 그림 2. 사용자가 알림 창에서 텍스트를 입력합니다. -
- -- 회신 동작의 인텐트에 선언하셨던 액티비티에 대해 알림 - 인터페이스로부터 사용자 입력을 수신하려면: -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- 채팅과 같은 대화형 앱의 경우, 검색된 텍스트를 처리할 때 - 추가 컨텍스트를 포함하는 것이 유용할 수 있습니다. 예를 들어, 이들 앱은 여러 줄의 채팅 기록을 -표시할 수 있습니다. 사용자가 {@link - android.support.v4.app.RemoteInput}을 통해 응답하는 경우, -{@code setRemoteInputHistory()} 메서드를 사용하여 회신 기록을 업데이트할 수 있습니다. -
- -- 앱이 원격 입력을 수신한 후에는 알림이 업데이트되거나 - 취소되어야 합니다. 사용자가 Direct Reply를 사용하여 원격 업데이트에 -회신할 때는 알림을 -취소하지 마세요. 그 대신, 사용자의 회신을 표시하도록 알림을 업데이트하세요. -{@code MessagingStyle}을 사용하는 알림의 경우, 회신을 최신 메시지로서 -추가해야 합니다. 다른 템플릿을 사용할 경우 사용자의 -회신을 원격 입력 기록에 추가할 수 있습니다. -
- -Android N에서는 일련의 알림을 표시하기 위한 새로운 방식을 -개발자에게 제공합니다. 묶음 알림. 이것은 -Android Wear의 알림 -스택 기능과 유사합니다. 예를 들어, 수신된 메시지에 대해 앱이 알림을 생성하는 경우, -둘 이상의 메시지가 수신되면 그 알림을 하나의 -단일 그룹으로 묶습니다. 기존의 -{@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} 메서드를 사용하여 유사한 알림을 묶을 수 있습니다.
- -- 알림 그룹은 이 그룹을 구성하는 알림을 계층 구조로 만듭니다. - 계층 구조의 맨 위는 그룹의 요약 정보가 표시되는 상위 -알림입니다. 사용자는 알림 그룹을 점진적으로 확장할 수 있으며, 시스템은 -사용자가 더 깊이 파고들수록 더 많은 정보를 -표시합니다. 사용자가 번들을 확장하면 시스템은 모든 하위 알림에 대해 -더 많은 정보를 표시하며, 사용자가 이들 알림 중 하나를 확장하면 -시스템은 알림의 전체 콘텐츠를 표시합니다. -
- -
-- 그림 3. 사용자는 알림 그룹을 점진적으로 확장할 수 - 있습니다. -
- -- 참고: 동일 앱이 4개 이상의 알림을 보내면서 -그룹화를 지정하지 않으면, -시스템에서 이들 알림을 자동으로 그룹화합니다. -
- -알림을 그룹에 추가하는 방법을 알아보려면 -각 -알림을 그룹에 추가를 참조하세요.
- - -이 섹션에서는 이전 버전의 Android 플랫폼에서 -사용되었던 {@link android.app.Notification.InboxStyle InboxStyle} -알림 대신에 알림 그룹을 사용할 때의 지침을 -제공합니다.
- -자신의 사용 사례에서 다음의 모든 조건이 충족되는 경우에만 -알림 그룹을 사용해야 합니다.
- -알림 그룹의 사용 사례에 대한 좋은 예로는, 수신 메시지의 -목록을 표시하는 메시징 앱이나 수신된 이메일의 목록을 표시하는 -이메일 앱이 있습니다.
- --단일 알림이 바람직한 사례의 예로는, 한 사람이 보낸 -개별 메시지나 1줄 텍스트 항목의 목록 표시가 -있습니다. 이를 수행하기 위해 -({@link android.app.Notification.InboxStyle InboxStyle} 또는 -{@link android.app.Notification.BigTextStyle BigTextStyle})을 사용할 -수 있습니다. -
- -- 그룹에 하나의 하위 항목만 포함되어 있더라도 앱은 -항상 그룹 요약을 게시해야 합니다. 하나의 알림만 포함된 경우에는 시스템이 요약을 -억제하고 하위 알림을 직접 표시합니다. 이렇게 하면 사용자가 그룹의 -하위 항목을 스와이프할 때 시스템이 일관된 경험을 제공할 수 -있습니다. -
- -- 참고: 이 버전의 Android N에서는 아직 단일 하위 -항목이 포함된 알림 그룹에 대해 요약을 억제하지 않습니다. 이 -기능은 이후 버전의 Android N에 추가될 것입니다. -
- -시스템은 -일반적으로 하위 알림을 그룹으로 표시하지만, -이 알림이 일시적으로 헤드업 알림으로 -나타나도록 설정할 수 있습니다. 이 기능을 사용하면 가장 최근의 하위 항목과 이에 -관련된 동작에 즉시 액세스할 수 있으므로 특히 유용합니다. -
- - -- Android 5.0(API 레벨 21) 이후로, 알림 그룹과 -원격 입력은 Android Wear 기기를 지원하기 위한 {@link - android.app.Notification} API의 일부였습니다. 이미 이들 API로 알림을 작성한 경우 수행할 조치는, -앱 동작이 위에 설명된 지침과 일치하는지 확인하고 {@code - setRemoteInputHistory()} 구현을 -고려하는 것입니다. -
- -- 이전 버전과의 호환성을 지원하기 위해, -지원 라이브러리의 {@link android.support.v4.app.NotificationCompat} -클래스로 동일한 API를 사용할 수 있으며, 이전 Android 버전에서 작동하는 알림을 작성할 -수 있습니다. 핸드헬드와 태블릿에서는 요약 알림만 사용자에게 보이므로, -앱은 해당 그룹의 전체 정보 콘텐츠에 대해 받은편지함 -스타일이나 이와 동등한 알림 표시를 계속 가져야 합니다. Android -Wear 기기에서는 구형 플랫폼 레벨에서도 -사용자가 모든 하위 알림을 볼 수 있으므로, API 레벨에 상관없이 하위 알림을 -작성해야 합니다. -
- -Android N부터는 알림 뷰를 사용자 지정할 수 있으며 -알림 헤더, 동작 및 확장 가능한 레이아웃과 같은 시스템 장식을 계속 -획득할 수 있습니다.
- -이 기능을 활성화하기 위해, Android N에서는 다음과 -같은 API를 추가하여 사용자 지정 뷰의 스타일을 지정합니다.
- -이 새로운 API를 사용하려면, {@code setStyle()} 메서드를 호출하여, -원하는 사용자 지정 뷰 스타일에 전달합니다.
- -이 조각에서는 -{@code DecoratedCustomViewStyle()} 메서드로 사용자 지정 알림 객체를 구성하는 방법을 보여줍니다.
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- Android N에서는 알림 메시지의 스타일을 사용자 지정하기 위한 새로운 API를 도입했습니다.
- MessageStyle 클래스를 사용하면 대화 제목, 추가 메시지 및 알림에 대한 콘텐츠 뷰를 비롯하여
-알림 메시지에 표시되는 여러 가지 레이블을
-변경할 수 있습니다.
-
- 다음 코드 조각에서는
- MessageStyle 클래스를 사용하여 알림 스타일을 사용자 지정하는 방법을 보여 줍니다.
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/pt-br/preview/download_mp2.jd b/docs/html-intl/intl/pt-br/preview/download_mp2.jd
deleted file mode 100644
index 12ef194461112..0000000000000
--- a/docs/html-intl/intl/pt-br/preview/download_mp2.jd
+++ /dev/null
@@ -1,360 +0,0 @@
-page.title=Downloads
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-- O Android M Preview SDK inclui ferramentas de desenvolvimento, arquivos de sistema do Android e arquivos da biblioteca - para ajudar você a testar o aplicativo e novas APIs da próxima versão da plataforma. Este documento - descreve como adquirir os componentes disponíveis para download da prévia para o teste do aplicativo. -
- - -- O Preview SDK está disponível para download no Android SDK Manager. Para obter mais informações - sobre o download e a configuração do Preview SDK, consulte Configuração do Preview SDK. -
- - -- O pacote de download da documentação do desenvolvedor fornece informações de referência de API detalhadas e um relatório de diferença de API para a prévia. -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- Essas imagens do sistema permitem que você instale uma versão de prévia da plataforma em um dispositivo físico -para fins de teste. Ao configurar um dispositivo com uma dessas imagens, é possível instalar e testar o aplicativo - para verificar o seu desempenho na próxima versão da plataforma. O processo de instalação de uma imagem do sistema - em um dispositivo remove todos os dados do dispositivo. Portanto, deve-se realizar um backup dos dados - antes de instalar uma imagem do sistema. -
- -- Aviso: as seguintes imagens do sistema Android são prévias e estão sujeitas a alterações. O uso - dessas imagens do sistema são governadas pelo Contrato de licença do Android SDK Preview. As imagens do sistema do Android Preview - não são versões estáveis e podem conter erros e defeitos que podem resultar - em danos aos sistemas do computador, aos dispositivos e aos dados. As imagens do sistema Android Preview - não estão sujeitas ao mesmo teste do sistema operacional de fábrica e podem fazer com que o telefone e aplicativos e os serviços - instalados parem de funcionar. -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- Para usar uma imagem de dispositivo para testes, deve-se instalá-lo em um dispositivo compatível. Siga - as instruções abaixo para instalar uma imagem de sistema. -
- -- Observação: ao programar em flash a imagem do sistema de prévia no dispositivo de desenvolvimento, - ele é atualizado automaticamente com o próximo lançamento da prévia por meio de atualizações over-the-air (OTA). -
- -- Caso queira desinstalar a prévia e reverter o dispositivo para as especificações de fábrica, acesse - developers.google.com/android e - faça o download da imagem que deseja programar em flash no dispositivo. Siga as instruções nesta página - para programar em flash a imagem no dispositivo. -
- -- Os processos em segundo plano podem fazer uso intensivo de memória e bateria. Por exemplo, uma - transmissão implícita poderá iniciar diversos processos em segundo plano registrados - para escutá-la, mesmo se esses processos não forem muito usados. Isso pode afetar - substancialmente o desempenho do dispositivo e a experiência do usuário. -
- -- Para aliviar esse problema, o Android N aplica as seguintes -restrições: -
- -- Se o seu aplicativo usar qualquer uma dessas intenções, remova as dependências delas - assim que possível para direcionar corretamente os dispositivos Android N. - A estrutura do Android oferece diversas soluções para reduzir a necessidade dessas - transmissões implícitas. Por exemplo, {@link android.app.job.JobScheduler} - e -{@code GcmNetworkManager} oferecem mecanismos robustos para agendar operações - de rede quando ocorrem condições especificadas, como conexão a uma - rede ilimitada. Agora, você também pode usar {@link android.app.job.JobScheduler} - para reagir a mudanças em provedores de conteúdo. Os objetos {@link android.app.job.JobInfo} - encapsulam os parâmetros usados por {@link android.app.job.JobScheduler} - para agendar o seu trabalho. Quando as condições do trabalho forem atendidas, o sistema - executará o trabalho no {@link android.app.job.JobService} do seu aplicativo. -
- -- Neste documento, veremos como usar métodos alternativos, como - {@link android.app.job.JobScheduler}, para adaptar seu aplicativo a essas novas - restrições. -
- -- Os aplicativos direcionados ao Android N não receberão transmissões {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem - registrados para recebê-las no seu manifesto e os processos que dependerem dessas - transmissões não serão iniciados. Isso pode ser um problema para aplicativos que quiserem - escutar mudanças de rede ou executar atividades de rede em massa quando o - dispositivo se conectar a uma rede ilimitada. Já existem várias soluções para contornar essa - restrição na estrutura do Android, mas a escolha da solução correta - depende do que o aplicativo pretende realizar. -
- -- Observação: Um {@link android.content.BroadcastReceiver} registrado em - {@link android.content.Context#registerReceiver Context.registerReceiver()} - continuará a receber essas transmissões enquanto o aplicativo estiver em execução. -
- -- Ao usar a classe {@link android.app.job.JobInfo.Builder JobInfo.Builder} - para compilar o objeto {@link android.app.job.JobInfo}, aplique o método {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} e passe {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} como parâmetro do trabalho. O código a seguir - agendará a execução de um serviço quando o dispositivo se conectar a uma rede - ilimitada e estiver carregando: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- Quando as condições para o trabalho forem atendidas, o aplicativo receberá um retorno de chamada para executar - o método {@link android.app.job.JobService#onStartJob onStartJob()} na - {@code JobService.class} especificada. Para ver mais exemplos da implementação de {@link - android.app.job.JobScheduler}, consulte o aplicativo de exemplo do JobScheduler. -
- -- Os aplicativos que usarem serviços do GMSCore e forem direcionados ao Android 5.0 (nível da API 21) - ou anterior poderão usar - {@code GcmNetworkManager} e especificar {@code Task.NETWORK_STATE_UNMETERED}. -
- -- Os aplicativos em execução ainda poderão escutar {@code CONNECTIVITY_CHANGE} com um - {@link android.content.BroadcastReceiver} registrado. No entanto, a API {@link - android.net.ConnectivityManager} oferece um método mais robusto para solicitar - um retorno de chamada apenas quando condições de rede especificadas são atendidas. -
- -- Os objetos {@link android.net.NetworkRequest} definem os parâmetros do - retorno de chamada de rede em termos de {@link android.net.NetworkCapabilities}. Objetos - {@link android.net.NetworkRequest} são criados com a classe {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder}. Em seguida, {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - passa o objeto {@link android.net.NetworkRequest} ao sistema. Quando - as condições de rede forem atendidas, o aplicativo receberá um retorno de chamada para executar o - método {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} definido em sua classe {@link - android.net.ConnectivityManager.NetworkCallback}. -
- -- O aplicativo continuará a receber retornos de chamada até que o aplicativo encerre ou chame - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}. -
- -- No Android N, os aplicativos não conseguem enviar nem receber transmissões {@link - android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link - android.hardware.Camera#ACTION_NEW_VIDEO}. Essa restrição ajuda a - aliviar os impactos no desempenho e na experiência de usuário quando vários aplicativos devem - despertar para processar uma nova imagem ou vídeo. O Android N - estende {@link android.app.job.JobInfo} e {@link - android.app.job.JobParameters} para oferecer uma solução alternativa. -
- -- Para acionar trabalhos em mudanças de URI de conteúdo, o Android N estende - a API {@link android.app.job.JobInfo} com os seguintes métodos: -
- -- Observação: não é possível usar {@code TriggerContentUri()} - juntamente com {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} ou {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}. Para monitorar continuamente mudanças de conteúdo, agende um novo - {@link android.app.job.JobInfo} antes que o {@link - android.app.job.JobService} do aplicativo encerre o processamento do retorno de chamada mais recente. -
- -- O exemplo de código a seguir agenda um trabalho que será acionado quando o sistema indicar - uma mudança no URI de conteúdo {@code MEDIA_URI}: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- Quando o sistema indicar uma mudança nos URIs de conteúdo especificados, o aplicativo - receberá um retorno de chamada e um objeto {@link android.app.job.JobParameters} será - passado para o método {@link android.app.job.JobService#onStartJob onStartJob()} - na {@code MediaContentJob.class}. -
- -- O Android N também estende {@link android.app.job.JobParameters} para - permitir que o aplicativo receba informações úteis sobre quais autoridades de conteúdo - e URIs acionaram o trabalho: -
- -- O exemplo de código a seguir substitui o método {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} e - registra as autoridades de conteúdo e URIs que acionaram o trabalho: -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- A otimização dos aplicativos para execução em dispositivos com pouca memória ou em - condições de pouca memória pode melhorar o desempenho e a experiência do usuário. A remoção de - dependências de serviços em segundo plano e receptores de transmissão - implícita registrados estatisticamente pode aprimorar a execução do aplicativo nesses dispositivos. Embora - o Android N avance na redução de alguns desses problemas, - recomendamos que você otimize os aplicativos para execução sem o uso desses - processos em segundo plano. -
- -- O Android N introduz alguns comandos adicionais do Android Debug Bridge (ADB) que - podem ser usados para testar o comportamento do aplicativo de teste com esses processos em segundo plano desativados: -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - O ICU4J é um conjunto de bibliotecas Java de código aberto e amplamente usadas que fornecem suporte para Unicode - e globalização para aplicativos de software. O Android N - expõe um subconjunto de APIs do ICU4J na estrutura do Android para uso dos desenvolvedores de aplicativos - no pacote {@code android.icu}. Essas APIs usam - dados de localização presentes no dispositivo. Consequentemente, você pode reduzir o uso de APK - ao não compilar as bibliotecas do ICU4J no seu APK. Em vez disso, pode - simplesmente chamá-las na estrutura. (Neste caso, pode ser conveniente fornecer - várias versões - do seu APK para que os usuários que tenham versões inferiores ao Android N - possam fazer o download de uma versão do aplicativo que contenha as bibliotecas do ICU4J.) -
- -- Este documento começa fornecendo informações básicas sobre os níveis mínimos da - Android API necessários para oferecer suporte a essas bibliotecas. Em seguida, ele explica o que - você deve saber sobre a implementação do ICU4J específica do Android. Por fim, - ele informa como usar as APIs do ICU4J na estrutura do Android. -
- -
- O Android N expõe um subconjunto de APIs do ICU4J por meio do pacote
- android.icu, não do com.ibm.icu. A
- estrutura do Android pode optar por não
- expor as APIs do ICU4J por diversos motivos. Por exemplo, o Android N não expõe
- algumas APIs obsoletas ou que a equipe do ICU ainda não declarou como
- estáveis. Conforme a equipe do ICU torna APIs obsoletas, o Android também as marcará
- como obsoletas, mas continuará incluindo-as.
-
Tabela 1. Versões ICU e CLDR usadas - no Android N.
-| Nível da Android API | -Versão ICU | -Versão CLDR | -
|---|---|---|
| Android N | -56 | -28 | -
Algumas observações importantes:
- -
- Se você já estiver usando as APIs do ICU4J no seu aplicativo e as APIs
- android.icu atenderem aos seus requisitos, a migração para
- as APIs de estrutura exigirão que você altere as importações Java
- de com.ibm.icu para android.icu. Você, então, poderá
- remover sua própria cópia dos arquivos do ICU4J do APK.
-
- Observação: As APIs de estrutura do ICU4J usam o namespace {@code android.icu} - em vez de {@code com.ibm.icu}. Isso ocorre para evitar conflitos - de namespace em APKs que contêm as próprias bibliotecas {@code com.ibm.icu}. -
- -
- Algumas classes dos pacotes java e android têm
- equivalentes para as encontradas no ICU4J. No entanto, o ICU4J frequentemente fornece um suporte
- mais amplo para padrões e linguagens.
-
Alguns exemplos para você começar:
-| Classe | -Alternativas | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- O ICU4J é liberado sob a licença do ICU. Para saber mais, consulte o Guia do usuário do - ICU. -
diff --git a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd deleted file mode 100644 index c00eb9b9a798d..0000000000000 --- a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=Idioma e localidades -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -O Android N oferece suporte avançado para usuários multilíngues, -permitindo que eles selecionem várias localidades nas configurações. O Android N -fornece esse recurso ao expandir significativamente a quantidade de localidades com suporte -e mudando a forma como o sistema resolve recursos. O novo método para resolver -recursos é mais robusto e foi projetado para ser compatível com APKs existentes, mas -tenha cuidado adicional para identificar comportamentos inesperados. Por exemplo, você -deve testar para garantir que seu aplicativo assuma o idioma esperado por padrão. Além disso, -se seu aplicativo oferecer suporte a vários idiomas, você deverá garantir que esse suporte funcione da maneira -esperada. Por fim, garanta que seu aplicativo possa lidar corretamente -com idiomas que ele não tenha sido explicitamente projetado para suportar.
- -Este documento começa explicando a estratégia de resolução de recursos anterior ao -Android N. Em seguida, ele descreve a estratégia -de resolução de recursos aprimorada do Android N. Por fim, ele explica como aproveitar as vantagens -do maior número de localidades para oferecer suporte a usuários multilíngues.
- -Antes do Android N, o Android nem sempre conseguia - fazer a correspondência correta entre aplicativos e localidades do sistema.
- -Considere, por exemplo, que temos a seguinte situação:
-Quando seu código Java usa strings como referência, o sistema carrega -strings do arquivo de recursos padrão ({@code en_US}), mesmo que o aplicativo tenha recursos em -espanhol localizados em {@code es_ES}. Isso acontece porque, quando - não consegue encontrar uma correspondência exata, o sistema continua procurando recursos após extrair o - código do país da localidade. Por fim, se não há correspondência, o sistema volta - ao padrão, que é {@code en_US}.
- - -O sistema também usaria {@code en_US} como padrão se o usuário escolhesse um idioma - não suportado pelo aplicativo, como o francês. Por exemplo:
- --Tabela 1. Resolução de recurso sem uma correspondência exata de localidade. -
-| Configurações do usuário | -Recursos do aplicativo | -Resolução do recurso | -
|---|---|---|
| fr_CH | -
-padrão (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Tentativa de fr_CH => Falha -Tentativa de fr => Falha -Usar o padrão (en) - |
-
Neste exemplo, o sistema exibe strings em inglês sem saber -se o usuário entende inglês. Esse comportamento é bastante comum -hoje em dia. O Android N deverá reduzir de forma significativa a frequência de -resultados como esse.
- -O Android N proporciona uma resolução de recurso mais robusta e
-encontra soluções alternativas melhores. No entanto, para agilizar a resolução e melhorar
- a capacidade de manutenção, você deve armazenar os recursos no dialeto pai mais comum.
- Por exemplo, se você estava armazenando recursos em espanhol no diretório {@code es-US}
- antes, mova-os para o diretório {@code es-419}, que contém o espanhol latino-americano.
- Da mesma maneira, se você tiver strings de recurso em uma pasta {@code en-GB}, renomeie
- essa pasta para {@code en-001} (inglês internacional), pois o pai mais comum
- para strings en-GB é {@code en-001}.
- O exemplo a seguir explica por que essas práticas melhoram o desempenho e
-a confiabilidade da resolução de recursos.
Com o Android N, o caso descrito na Tabela 1 é resolvido -de forma diferente:
- --Tabela 2. Uma estratégia de resolução melhorada para quando não há -uma correspondência exata para a localidade.
-| Configurações do usuário | -Recursos do aplicativo | -Resolução do recurso | -
|---|---|---|
|
-
-padrão (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Tentativa de fr_CH => Falha -Tentativa de fr => Falha -Tentativa de filhos de fr => fr_FR -Usar fr_FR - |
-
Agora o usuário obtém recursos em francês em vez de inglês. Esse exemplo também mostra - por que você deve armazenar strings em francês em {@code fr} em vez de em {@code fr_FR} - para o Android N. Nesse caso, a ação necessária é fazer a correspondência com o dialeto pai mais próximo, - tornando a resolução mais rápida e mais previsível.
- -Além dessa lógica de resolução melhorada, agora o Android oferece mais - idiomas de usuário dentre os quais escolher. Vamos experimentar o exemplo acima novamente com o italiano - especificado como um idioma de usuário adicional, mas sem suporte para francês no aplicativo.
- --Tabela 3. Resolução de recurso quando o aplicativo faz a correspondência apenas da -segunda configuração de localidade preferencial do usuário.
-| Configurações do usuário | -Recursos do aplicativo | -Resolução do recurso | - -
|---|---|---|
|
-
-padrão (en) -de_DE -es_ES -it_IT - |
-
-Tentativa de fr_CH => Falha -Tentativa de fr => Falha -Tentativa de filhos de fr => Falha -Tentativa de it_CH => Falha -Tentativa de it => Falha -Tentativa de filhos de it => it_IT -Usar it_IT - |
-
-
O usuário obtém um idioma que ele compreende, mesmo que o aplicativo não tenha suporte para -o francês.
- - -O Android N adiciona uma nova API {@code LocaleList.getDefault()} -que permite que os aplicativos façam uma consulta direta na lista de idiomas especificados por um usuário. Essa API -permite que você crie um comportamento mais sofisticado - para o aplicativo e uma exibição de conteúdo mais otimizada. Por exemplo, uma pesquisa - pode mostrar resultados em vários idiomas com base nas configurações do usuário. Aplicativos de navegador - podem evitar ofertas de tradução de páginas em um idioma que o usuário conhece - e os aplicativos de teclado também podem ativar todos os layouts apropriados automaticamente.
- -Até o Android 6.0 (nível da API 23), o Android oferecia suporte para apenas uma ou duas localidades - para muitos idiomas comuns -(en, es, ar, fr, ru). Como só existiam poucas variantes de cada idioma, -os aplicativos podiam armazenar alguns números e datas como strings no código -nos arquivos de recurso. No entanto, com o conjunto mais amplo de localidades suportadas do Android, -podem existir -diferenças significativas nos formatos de data, hora, moeda e informações -similares dentro da mesma localidade. Colocar formatos no código pode produzir uma -experiência confusa para os usuários. Portanto, ao desenvolver para o Android N, -não deixe de usar formatadores em vez de strings no código para números e datas.
- -Um bom exemplo é o árabe, cujo suporte no Android N foi expandido de -uma {@code ar_EG} para 27 localidades de árabe. Essas localidades podem compartilhar a maioria dos recursos, -mas algumas preferem dígitos ASCII, enquanto outras preferem dígitos nativos. Por exemplo, -quando você quer criar uma frase com uma variável em dígito, como -“Choose a 4 digit pin”, use formatadores como mostrado abaixo:
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd deleted file mode 100644 index 36988da09ea50..0000000000000 --- a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd +++ /dev/null @@ -1,391 +0,0 @@ -page.title=Notificações -page.tags=notificações -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
O Android N introduz diversas APIs novas que permitem que aplicativos publiquem - notificações altamente visíveis e interativas.
- -O Android N estende a API de notificação {@link android.support.v4.app.RemoteInput} - atual para permitir respostas em linha em celulares. Esse recurso permite que os usuários - respondam rapidamente na aba de notificações sem acessar o aplicativo.
- -- O Android N permite empacotar notificações semelhantes para - exibição como única notificação. Para que isso seja possível, o Android N usa o método {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} existente. Os usuários podem expandir todas as - notificações, executando ações como responder e descartar em cada uma - delas individualmente na aba de notificações. -
- -Por fim, o Android N também adiciona várias APIs que permitem usar decorações - do sistema nas visualizações de notificação personalizadas do aplicativo. Essas APIs ajudam - a garantir que as visualizações de notificação compartilhem uma apresentação consistente com os - modelos padrão.
- -Este documento destaca algumas principais mudanças que você deve considerar - ao usar os novos recursos de notificação em aplicativos.
- -Com o recurso de resposta direta no Android N, os usuários podem responder
- rapidamente a mensagens de texto ou atualizar listas de tarefas diretamente na interface de
- notificação. Em um dispositivo portátil, a ação de resposta em linha aparece como botão adicional
- anexado à notificação. Quando um usuário responde pelo teclado, o sistema anexa
- a resposta de texto à intenção especificada como ação de notificação e envia a intenção ao aplicativo no dispositivo.
-
-
-
-
- Figura 1.O Android N adiciona o botão de ação Reply -. -
- -Para criar uma ação de notificação com suporte à resposta direta: -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput().
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
O sistema solicita que o usuário informe uma resposta quando acionar a - ação de notificação.
- -
-- Figura 2. O usuário insere texto na aba de notificações. -
- -- Para receber a entrada do usuário da interface de notificação para a atividade - declarada na intenção de ação de resposta: -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- Para aplicativos interativos, como bate-papos, pode ser útil incluir contexto - adicional ao lidar com texto recebido. Por exemplo, estes aplicativos podem exibir - várias linhas de histórico de bate-papo. Quando o usuário responde por {@link - android.support.v4.app.RemoteInput}, você pode atualizar o histórico de respostas - usando o método {@code setRemoteInputHistory()}. -
- -- A notificação precisará ser atualizada ou cancelada depois que o aplicativo tiver - recebido a entrada remota. Quando o usuário responde a uma atualização remota - usando uma Resposta direta, - não cancele a notificação. Em vez disso, atualize a notificação para exibir a resposta do usuário. -Para notificações que usam {@code MessagingStyle}, adicione - a resposta como última mensagem. Ao usar outros modelos, você pode -anexar a resposta do usuário ao histórico da entrada remota. -
- -O Android N oferece aos desenvolvedores uma nova forma de representar - uma fila de notificações: notificações empacotadas. Essa forma é semelhante ao recurso - Pilhas - de Notificações no Android Wear. Por exemplo, se o aplicativo criar notificações - para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as - notificações como um único grupo. Você pode - usar o método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} para empacotar notificações semelhantes.
- -- Um grupo de notificações impõe uma hierarquia nas notificações que o compõe. - Na parte superior dessa hierarquia, está a notificação pai, que exibe informações - resumidas para o grupo. O usuário pode expandir - progressivamente o grupo de notificações e o sistema mostra mais informações à medida que o - usuário aumenta o detalhamento. Quando o usuário expande o pacote, o sistema revela - mais informações para todas as notificações filhas. Quando o usuário - expande uma das notificações, o sistema revela todo o seu conteúdo. -
- -
-- Figura 3. O usuário pode expandir progressivamente o grupo - de notificações. -
- -- Observação: Se o mesmo aplicativo enviar quatro ou mais notificações - e não especificar um agrupamento, o - sistema as agrupará automaticamente. -
- -Para saber como adicionar notificações a um grupo, consulte -Adicionar -cada notificação a um grupo.
- - -Esta seção oferece diretrizes sobre quando usar grupos de notificações em vez - de notificações {@link android.app.Notification.InboxStyle InboxStyle} - que foram disponibilizadas em versões anteriores da - plataforma Android.
- -Você deve usar grupos de notificações apenas quando todas as condições a seguir forem - verdadeiras para o seu caso de uso:
- -Os exemplos de bons casos de uso para grupos de notificações incluem: um aplicativo de mensagens - exibindo uma lista de mensagens recebidas ou um aplicativo de e-mail exibindo uma lista de - e-mails recebidos.
- --Os exemplos de casos em que uma única notificação é preferível - incluem mensagens individuais de uma única pessoa ou uma representação em lista - de itens de texto com uma única linha. Você pode usar -({@link android.app.Notification.InboxStyle InboxStyle} ou - {@link android.app.Notification.BigTextStyle BigTextStyle}) para - isso. -
- -- O aplicativo deve sempre publicar um resumo do grupo, mesmo se o grupo tiver apenas uma - única filha. O sistema suprimirá o resumo e exibirá diretamente a - notificação filha se ela contiver apenas uma única notificação. Isso garante - que o sistema possa oferecer uma experiência consistente quando o usuário deslizar por - filhas de um grupo. -
- -- Observação: esta versão do Android N ainda não - elimina o resumo de grupos de notificações contendo uma única filha. Essa - funcionalidade será adicionada em uma versão posterior do Android N. -
- -Embora o sistema normalmente exiba notificações filhas como grupo, você pode - configurá-las para exibição temporária como - - notificações heads-up. Esse recurso é particularmente útil porque permite - acesso imediato à filha mais recente e a suas ações associadas. -
- - -- Os grupos de notificações e as entradas remotas fazem parte da API {@link - android.app.Notification} desde o Android 5.0 (nível da API 21) para oferecer suporte a - dispositivos Android Wear. Se você já criou notificações com essas APIs, - a única ação necessária é verificar se o comportamento do aplicativo corresponde - às diretrizes descritas acima e considerar a implementação de {@code - setRemoteInputHistory()}. -
- -- Para compatibilidade com versões anteriores, as mesmas APIs estão disponíveis com - a classe {@link android.support.v4.app.NotificationCompat} da biblioteca de suporte, - permitindo criar notificações que funcionem em versões anteriores do - Android. Em celulares e tablets, os usuários somente visualizam as notificações resumidas. - Portanto, um aplicativo deve ter uma notificação no estilo de caixa de entrada ou equivalente, - representativa de todo o conteúdo de informações do grupo. Como os dispositivos Android - Wear permitem que os usuários vejam todas as notificações filhas, mesmo em níveis - de plataforma antigos, você deve criar notificações filhas independentemente do nível - da API. -
- -Começando com o Android N, é possível personalizar visualizações de notificação e - continuar obtendo decorações de sistema, como cabeçalhos de notificação, ações e layouts - expansíveis.
- -Para ativar esses recursos, o Android N adiciona as seguintes APIs para aplicar estilo à - visualização personalizada:
- -Para usar essa nova API, chame o método {@code setStyle()}, passando o - estilo de visualização personalizada desejado.
- -O snippet mostra como construir um objeto de notificação personalizada com o método -{@code DecoratedCustomViewStyle()}.
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- O Android N traz uma nova API para personalização do estilo de uma notificação.
- Usando a classe MessageStyle, você pode alterar vários
-rótulos exibidos na notificação, incluindo o título da conversa,
- mensagens adicionais e a visualização de conteúdo para a notificação.
-
- O seguinte snippet de código demonstra como personalizar o estilo de uma
- notificação usando a classe MessageStyle.
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/ru/preview/download_mp2.jd b/docs/html-intl/intl/ru/preview/download_mp2.jd
deleted file mode 100644
index 13872d1d6e13c..0000000000000
--- a/docs/html-intl/intl/ru/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=Загрузки
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-- В состав SDK Android M Preview входят инструменты для разработки, системные файлы Android и файлы библиотеки, призванные -помочь вам в тестировании ваших приложений и новых API-интерфейсов, которые будут реализованы в предстоящем выпуске платформы. В этом документе -рассказывается, как загрузить необходимые компоненты Preview для тестирования ваших приложений. -
- - -- Загрузить SDK Preview можно с помощью менеджера SDK Android. Дополнительные сведения -о загрузке и настройке SDK Preview представлены в статье Настройка SDK Preview. -
- - -- В пакете документации для разработчиков, который доступен для загрузки, представлены подробные сведения об API-интерфейсах, а также о различиях между API-интерфейсами для Preview. -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- С помощью этих системных образов можно установить предварительную версию платформы на физическое устройство для -тестирования. Используя один из этих образов для настройки устройства, вы можете установить и протестировать ваше приложение, чтобы узнать, как оно будет работать в будущей версии -платформы. В процессе установки системного образа -на устройстве удаляются все данные, поэтому перед установкой образа обязательно сделайте резервное копирование данных. - -
- -- Предупреждение. Перечисленные ниже системные образы Android являются предварительными и могут быть изменены. Использование вами -этих образов регулируется Лицензионным соглашением на использование пакета SDK Android Preview. Системные образы предварительной версии Android -не являются стабильными и могут содержать ошибки и дефекты, -способные повредить ваши компьютеры, устройства и данные. Системные образы предварительной версии Android не проходят такое же тестирование, -как заводская ОС. Поэтому в результате использования этих образов ваш телефон и установленные на нем приложения -и службы могут перестать работать. -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- Чтобы воспользоваться образом устройства для тестирования, установите его на совместимое устройство. Следуйте -инструкциям по установке системного образа. -
- -- Примечание. После прошивки устройства для разработки с использованием системного образа с предварительной версией платформы -она будет автоматически обновлена до следующего выпуска Preview по беспроводной сети. -
- -- Чтобы удалить Preview и восстановить заводские настройки устройства, перейдите на сайт -developers.google.com/android -и загрузите образ, который требуется использовать для прошивки. Следуйте инструкциям, приведенным на странице, -чтобы прошить ваше устройство с использованием выбранного образа. -
- -- Фоновые процессы могут потреблять много памяти и заряда аккумулятора. Например, -неявное широковещательное сообщение может запускать множество фоновых процессов, -которые его прослушивают, даже если они сами не выполняют полезной работы. Это -может значительно снизить производительность устройства и быстродействие пользовательского интерфейса. -
- -- Чтобы устранить подобные проблемы, в N Developer Preview применяются следующие -ограничения. -
- -- Платформа Android предоставляет несколько решений, позволяющих отказаться -от таких неявных рассылок. Например, в {@link android.app.job.JobScheduler} -и -{@code GcmNetworkManager} реализованы надежные механизмы для планирования сетевых -операций, которые запускаются при выполнении определенных условий, таких как наличие безлимитной -сети. Теперь вы также можете использовать {@link android.app.job.JobScheduler} -, чтобы реагировать на изменения поставщиков контента. В объектах {@link android.app.job.JobInfo} -инкапсулированы параметры, которые {@link android.app.job.JobScheduler} -использует для планирования заданий. Если условия задания выполнены, система -выполняет его через {@link android.app.job.JobService} вашего приложения. -
- -- Здесь мы рассмотрим, как использовать альтернативные методы, такие как -{@link android.app.job.JobScheduler}, для адаптации приложения к новым -ограничениям. -
- -- Приложения для N Developer Preview не получают широковещательные сообщения {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION}, если они -зарегистрированы для их получения в своем манифесте. При этом процессы, которые зависят от этого -широковещательного сообщения, не запускаются. Это может вызвать проблемы для приложений, которым необходимо -прослушивать изменения сети или выполнять -массовые сетевые операции, когда устройство подключается к безлимитной сети. Платформа Android уже предоставляет ряд способов обойти -это ограничение, но выбор нужного метода -зависит от того, чего вы хотите добиться от приложения. -
- -- Примечание. Объект {@link android.content.BroadcastReceiver}, зарегистрированный с помощью метода -{@link android.content.Context#registerReceiver Context.registerReceiver()}, -продолжает получать такие рассылки, если приложение работает в активном режиме. -
- -- При использовании класса {@link android.app.job.JobInfo.Builder JobInfo.Builder} для создания -объекта {@link android.app.job.JobInfo} примените метод {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} и передайте {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} в качестве параметра задания. В следующем примере кода -служба запускается, если устройство подключается к безлимитной -сети и заряжается: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- Если условия задания выполнены, приложение получает обратный вызов для запуска -метода {@link android.app.job.JobService#onStartJob onStartJob()} в указанном -классе {@code JobService.class}. Другие примеры реализации {@link - android.app.job.JobScheduler} см. в примере приложения JobScheduler. -
- -- В приложениях, использующих службы GMSCore и предназначенных для Android 5.0 (уровень API 21) -или предыдущих версий, можно воспользоваться - {@code GcmNetworkManager} и указать {@code Task.NETWORK_STATE_UNMETERED}. -
- -- Приложения в активном режиме по-прежнему могут прослушивать {@code - CONNECTIVITY_CHANGE} с помощью зарегистрированного объекта {@link - android.content.BroadcastReceiver}. Однако в API-интерфейсе {@link - android.net.ConnectivityManager} есть более надежный метод для запроса -обратного вызова только при выполнении указанных сетевых условий. -
- -- В объектах {@link android.net.NetworkRequest} параметры -сетевого обратного вызова задаются с помощью {@link android.net.NetworkCapabilities}. Объекты {@link android.net.NetworkRequest} создаются -с использованием класса {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder}. Затем метод {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - передает объект {@link android.net.NetworkRequest} системе. Если -сетевые условия выполнены, приложение получает обратный вызов для выполнения метода - {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()}, определенного в своем классе {@link - android.net.ConnectivityManager.NetworkCallback}. -
- -- Приложение продолжает получать обратные вызовы, пока оно не будет закрыто или не будет вызван метод - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}. -
- -- В N Developer Preview приложения не могут отправлять или получать широковещательные сообщения {@link - android.hardware.Camera#ACTION_NEW_PICTURE} и {@link - android.hardware.Camera#ACTION_NEW_VIDEO}. Это ограничение - позволяет улучшить производительность, если для обработки нового изображения или видео должны - активироваться несколько приложений. N Developer Preview - расширяет классы {@link android.app.job.JobInfo} и {@link - android.app.job.JobParameters}, что дает разработчикам альтернативное решение. -
- -- Для активации заданий при изменении URI контента в N Developer Preview - были добавлены следующие методы для API-интерфейса {@link android.app.job.JobInfo}. -
- -- Примечание. Метод {@code TriggerContentUri()} не может использоваться - вместе с {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} или {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}. Чтобы непрерывно отслеживать изменения контента, запланируйте новый объект задания - {@link android.app.job.JobInfo}, прежде чем {@link - android.app.job.JobService} завершит обработку последнего обратного вызова. -
- -- В следующем примере кода планируется задание, которое активируется, когда система сообщает - об изменении URI контента {@code MEDIA_URI}: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- Если система сообщает об изменении указанных URI контента, приложение - получает обратный вызов, а объект {@link android.app.job.JobParameters} передается - методу {@link android.app.job.JobService#onStartJob onStartJob()} - в {@code MediaContentJob.class}. -
- -- В N Developer Preview также расширен класс {@link android.app.job.JobParameters}, чтобы - приложения могли получать полезные сведения о том, какие источники контента - и URI инициировали задание. -
- -- В следующем примере кода перегружается метод {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} и - записываются источники и URI контента, вызвавшие задание: -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- Оптимизация приложений для устройств с малым объемом памяти - или для условий с ограниченным объемом памяти помогает улучшить производительность и удобство работы пользователей. Удаление - зависимостей от фоновых служб и статически зарегистрированных приемников неявных широковещательных сообщений - способно помочь приложению более эффективно работать на таких устройствах. Хотя - на платформе N Developer Preview приняты меры для устранения некоторых из этих проблем, - рекомендуется оптимизировать приложения, полностью отказавшись - от подобных фоновых процессов. -
- -- В N Developer Preview представлен ряд дополнительных команд Android Debug Bridge (ADB), с помощью - которых можно тестировать поведение приложения с отключенными фоновыми процессами. -
- -
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-
- - ICU4J — широко используемый набор библиотек Java с открытым кодом, обеспечивающий для приложений поддержку формата Unicode -и глобализации. Android N -открывает в платформе Android частичный набор API-интерфейсов ICU4J, который разработчики приложений -могут использовать в составе пакета {@code android.icu}. Эти API используют -данные локализации, присутствующие на устройстве. Это позволяет уменьшить размеры APK -, не компилируя библиотеки ICU4J в APK, а -просто вызывая их в платформе. (В этом случае может оказаться удобно предоставлять -несколько версий -вашего APK, чтобы пользователи с версиями Android ниже Android N -могли загружать версию приложения, содержащую библиотеки ICU4J.) -
- -- В начале этого документа предоставляется базовая информация по минимальным уровням -Android API, которые требуются для поддержки этих библиотек. Далее приводятся необходимые пояснения -о реализации ICU4J в Android. В заключение -в нем рассказывается, как использовать API-интерфейсы ICU4J в платформе Android. -
- -
- В Android N частичный набор API-интерфейсов ICU4J открывается через пакет
- android.icu, а не через com.ibm.icu. Для платформы
-Android может быть принято решение не
-открывать API-интерфейсы ICU4J по различным причинам. Например, Android N не открывает
-некоторые устаревшие API-интерфейсы, а также те, которые рабочая группа ICU еще не объявила
-стабильными. По мере того, как рабочая группа ICU будет объявлять API-интерфейсы устаревшими, они будут так же помечаться и в Android,
-но при этом будут и дальше входить в состав платформы.
-
Таблица 1. Версии ICU и CLDR, используемые -в Android N.
-| Уровень Android API | -Версия ICU | -Версия CLDR | -
|---|---|---|
| Android N | -56 | -28 | -
Следует отметить несколько важных моментов:
- -
- Если вы уже используете в своем приложении API-интерфейсы ICU4J, и если API
- android.icu соответствуют вашим требованиям, то для перехода на
-API-интерфейсы платформы вам нужно будет изменить импорт Java
-с com.ibm.icu на android.icu. После этого вы сможете
-удалить свои копии файлов ICU4J из APK.
-
- Примечание. API-интерфейсы ICU4J в платформе используют пространство имен {@code android.icu} -вместо {@code com.ibm.icu}. Это позволяет избежать конфликтов пространств имен -в пакетах APK, содержащих собственные библиотеки {@code com.ibm.icu}. -
- -
- Некоторые классы в пакетах java и android имеют
-эквиваленты в ICU4J. Однако ICU4J обычно обеспечивает более широкую
-поддержку стандартов и языков.
-
Ниже приведены несколько примеров для начала работы:
-| Класс | -Альтернативы | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J выпускается по лицензии ICU. Более подробную информацию можно найти в Руководстве пользователя -ICU. -
diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd deleted file mode 100644 index 83e9968f73da4..0000000000000 --- a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd +++ /dev/null @@ -1,217 +0,0 @@ -page.title=Язык и языковой стандарт -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N обеспечивает расширенную поддержку многоязычных пользователей, -позволяя им выбирать в настройках из нескольких языковых стандартов. Эта возможность реализована в Android N -за счет значительного увеличения числа поддерживаемых языковых стандартов -и изменения способа разрешения ресурсов в системе. Новый метод разрешения -ресурсов более надежен и разработан с учетом совместимости с существующими APK. Тем не менее, -при его использовании следует очень внимательно следить за признаками непредвиденного поведения приложения. Например, при его использовании -следует провести тесты и убедиться, что приложение по умолчанию использует ожидаемый язык. Если -ваше приложение поддерживает несколько языков, нужно убедиться, что поддержка работает -ожидаемым образом. Также следует попытаться обеспечить корректную работу приложения с -языками, поддержка которых не предусматривалась явным образом в его коде.
- -В начале этого документа рассказывается о стратегии разрешения ресурсов, которая использовалась до появления -Android N. Далее в нем описывается улучшенная стратегия -разрешения ресурсов в Android N. В последней части документа рассказывается о том, как использовать -дополнительные языковые стандарты для поддержки большего числа многоязычных пользователей.
- -До выпуска Android N в Android не всегда удавалось успешно сопоставлять - языковые стандарты приложений и системы. Допустим, по умолчанию в вашем приложении используется английский язык - (США), но оно также содержит строки на испанском, локализованные в файлах ресурсов {@code es_ES}. -
-В коде Java разрешение языков строк происходило следующим -образом:
-Проблемы с разрешением возникали из-за того, что система удаляла код страны - из строки языкового стандарта при отсутствии точного совпадения. Например:
--Таблица 1. Разрешение ресурсов без точного совпадения языковых стандартов. -
-| Пользовательские настройки | -Ресурсы приложения | -Разрешение ресурсов | -
|---|---|---|
| fr_CH | -
-по умолчанию (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Попытка использования fr_CH => Отказ -Попытка использования fr => Отказ -Использование языка по умолчанию (en) - |
-
В этом примере система отображает строки на английском, -не зная, понимает ли пользователь английский язык. Такое поведение приложений сейчас довольно -распространено. С выпуском Android N подобные ситуации -будут возникать намного реже.
- -В Android N используется более надежная система разрешения ресурсов,
-которая автоматически находит более подходящие альтернативные варианты. Однако для ускорения процесса разрешения и упрощения
- обслуживания ресурсы следует хранить на наиболее распространенном языке верхнего уровня.
- Например, если вы хранили ресурсы на испанском в каталоге{@code es-US}
-, их следует переместить в каталог {@code es-419}, где содержатся ресурсы на латиноамериканском диалекте испанского языка.
- Аналогичным образом, если вы хранили строки ресурсов в папке {@code en-GB}, вам следует изменить название папки
- на {@code en-001} (международная версия английского языка), поскольку {@code en-001} — наиболее распространенный
- язык верхнего уровня для строк en-GB.
- В следующих примерах объясняется, почему такая практика повышает производительность и
-надежность процесса разрешения ресурсов.
В Android N ситуация, описанная в Таблице 1, разрешается -иначе:
- --Таблица 2. Улучшенная стратегия разрешения при отсутствии -точного совпадения языкового стандарта.
-| Пользовательские настройки | -Ресурсы приложения | -Разрешение ресурсов | -
|---|---|---|
|
-
-по умолчанию (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Попытка использования fr_CH => Отказ -Попытка использования fr => Отказ -Попытка использования диалекта fr => fr_FR -Использование fr_FR - |
-
В этом примере пользователь получает ресурсы на французском языке, а не на английском. В этом примере также показано, почему для Android N - следует хранить строки на французском языке в каталоге {@code fr}, а не в каталоге {@code fr_FR}. -Здесь целью разрешения является нахождение наиболее близкого диалекта верхнего уровня, - что ускоряет процесс разрешения и делает его более предсказуемым.
- -Помимо улучшенной логики разрешения в Android добавлены - дополнительные языки. Рассмотрим предыдущий пример в ситуации, когда итальянский - указан как дополнительный язык пользователя, а приложение не поддерживает французский язык.
- --Таблица 3. Разрешение ресурсов в ситуации, когда приложение находит соответствие только для -второго предпочитаемого пользователем языкового стандарта.
-| Пользовательские настройки | -Ресурсы приложения | -Разрешение ресурсов | - -
|---|---|---|
|
-
-по умолчанию (en) -de_DE -es_ES -it_IT - |
-
-Попытка использования fr_CH => Отказ -Попытка использования fr => Отказ -Попытка использования диалекта fr => Отказ -Попытка использования it_CH => Отказ -Попытка использования it => Отказ -Попытка использования диалекта it => it_IT -Использование it_IT - |
-
-
Пользователь получает данные на понятном ему языке, хотя приложение и не -поддерживает французский язык.
- - -В Android N добавлен новый API {@code LocaleList.GetDefault()}, - позволяющий приложениям напрямую запрашивать список языков, выбранных пользователем. Этот API -позволяет реализовать более сложное поведение - приложений и лучше оптимизировать отображение содержимого на экране. Например, результаты поиска - могут отображаться на разных языках в зависимости от пользовательских настроек. Приложения в браузере - могут не предлагать пользователю перевести приложения на знакомый ему язык, - а приложения, использующие клавиатуру, могут автоматически включать все подходящие раскладки.
- -Версии Android до 6.0 включительно (уровень API 23) поддерживали только один или два языковых стандарта - для большинства распространенных языков -(en, es, ar, fr, ru). Поскольку у каждого языка имелось лишь немного вариантов, -приложения могли хранить числа и даты в виде жестко закодированных строк -в файлах ресурсов. Однако с расширением числа поддерживаемых Android языковых стандартов -могут возникнуть -значительные различия форматов даты, времени, валюты и другой подобной -информации даже в рамках одного языкового стандарта. Жесткое кодирование форматов может запутать -конечных пользователей. Поэтому при разработке приложений для Android N -следует использовать средства форматирования, а не жесткое кодирование строк с числами и датами.
- -В качестве наглядного примера можно привести арабский язык, поддержка которого в Android N расширена -с одного {@code ar_EG} до 27 языковых стандартов. Большинство ресурсов этих языковых стандартов общие, но -в некоторых из них используются цифры формата ASCII, а в других — собственные цифры. Например, -если вы хотите создать предложение с числовой переменной -"Выберите ПИН-код из 4 цифр", вам нужно использовать средства форматирования следующим образом:
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/ru/preview/features/notification-updates.jd b/docs/html-intl/intl/ru/preview/features/notification-updates.jd deleted file mode 100644 index 54b3bc36f5d46..0000000000000 --- a/docs/html-intl/intl/ru/preview/features/notification-updates.jd +++ /dev/null @@ -1,328 +0,0 @@ -page.title=Уведомления -page.tags=notifications -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
В Android N представлено несколько новых API-интерфейсов, позволяющих -публиковать заметные и интерактивные уведомления.
- -Существующий API-интерфейс уведомлений {@link android.support.v4.app.RemoteInput} -в Android N расширен для поддержки внутренних ответов на смартфонах. С помощью этой возможности - пользователи могут быстро отвечать на сообщения в панели уведомлений, не открывая приложение.
- -- Android N также позволяет группировать несколько похожих - уведомлений, чтобы они отображались как одно. Для этого в Android N используется существующий метод {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()}. Пользователи могут развернуть все - уведомления и выполнить различные действия, например ответить на сообщение - или закрыть каждое из уведомлений по отдельности в панели уведомлений. -
- -Наконец, в Android N представлены новые API-интерфейсы, позволяющие -использовать системные элементы в собственных представлениях уведомлений вашего приложения. Благодаря им -уведомления отображаются единообразно на основе -стандартных шаблонов.
- -В этом документе рассматриваются некоторые наиболее важные изменения, - которые следует учитывать при использовании новых уведомлений в приложениях.
- -С помощью прямых ответов пользователи
- Android N могут быстро отвечать на текстовые сообщения и обновлять списки задач непосредственно в интерфейсе
-уведомлений. На мобильных устройствах действие внутреннего ответа обозначается
- как дополнительная кнопка в уведомлении. Если пользователь набирает ответ на клавиатуре, система
- прикрепляет текст ответа к намерению,
- указанному для действия уведомления, и передает намерение в ваше
- приложение.
-
-
-
-
- Рисунок 1. В Android N добавлена кнопка Reply. - -
- -Создание действия уведомления, которое поддерживает прямой ответ: -
- --// Key for the string that's delivered in the action's intent -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput().
-
--// Create the reply action and add the remote input -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action -Notification notification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, notification); - --
Система запрашивает у пользователя ввод ответа, если он инициирует -действие уведомления.
- -
-- Рисунок 2. Пользователь вводит текст в панели уведомлений. -
- -Получение введенного пользователем текста из интерфейса -уведомлений в операции, объявленной в намерении действия:
--Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); -- -
В следующем фрагменте кода показано, как метод извлекает введенный -текст из группы:
- -
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
-
-Приложения могут применять логику, чтобы определить, какие действия следует выполнить с полученным -текстом. -Для интерактивных приложений (например, чатов) предоставьте больше контекста в самом уведомлении - (например, несколько строк истории чата, в том числе собственные сообщения пользователя), - чтобы у пользователя было достаточно информации для ответа. -Когда пользователь отвечает через {@link android.support.v4.app.RemoteInput}, - добавьте текст в историю ответов, применив метод {@code setRemoteInputHistory()}. -
- -Android N предоставляет разработчикам новый способ отображения - очереди уведомлений: группы уведомлений. Они похожи на - стеки - уведомлений в Android Wear. Например, если приложение создает уведомления - для входящих сообщений и получено несколько сообщений, объедините - уведомления в одну группу. Для группировки похожих уведомлений используйте - существующий метод {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()}.
- -- Уведомления в группе формируют иерархию, - на вершине которой находится родительское уведомление, отображающее - сводную информацию о группе. Пользователь может постепенно - раскрывать группу уведомлений, при этом система показывает дополнительные - сведения. Если пользователь раскрывает группу, система отображает больше - информации о всех дочерних уведомлениях. Если же пользователь - развернет одно из уведомлений, его содержимое показывается полностью. -
- -
-- Рисунок 3. Пользователь может постепенно раскрывать группу уведомлений. - -
- -Добавление уведомлений в группу описано в разделе -Добавление -каждого уведомления в группу.
- - -В этом разделе описываются рекомендации по использованию групп -уведомлений вместо уведомлений {@link android.app.Notification.InboxStyle InboxStyle}, - которые были доступны в предыдущих версиях платформы - Android.
- -Вам следует использовать группы уведомлений, только если выполняются -все следующие условия.
- -Примером использования групп уведомлений может служить приложение -для обмена сообщениями, которое показывает список входящих сообщений, -или почтовое приложение, отображающее список полученных писем.
- --К примерам ситуаций, когда предпочтительнее использовать одно - уведомление, относятся отдельные сообщения от одного пользователя или - списочное представление однострочных текстовых элементов. Для них можно использовать -{@link android.app.Notification.InboxStyle InboxStyle} или -{@link android.app.Notification.BigTextStyle BigTextStyle}. - -
- -- Приложение всегда должно публиковать сводную информацию группы, даже если эта группа содержит - всего одно дочернее уведомление. В этом случае система не показывает сводную информацию, а - непосредственно отображает это уведомление. Это обеспечивает - единообразие интерфейса при - пролистывании дочернего элемента группы. -
- -- Примечание. Эта версия Android N пока еще не - блокирует отображение сводной информации для групп уведомлений, содержащих только один дочерний элемент. Эта - возможность будет добавлена в следующих версиях Android N. -
- -Хотя система обычно отображает дочерние уведомления в виде группы, - их можно временно показывать в виде - всплывающих -уведомлений. Эта возможность очень удобна, так как позволяет - быстро получить доступ к последнему дочернему уведомлению и связанным с ним действиям. -
- - -- И группы уведомлений, и удаленный ввод входили в состав API {@link - android.app.Notification} для поддержки устройств - Android Wear, начиная с Android 5.0 (уровень API 21). Если вы уже использовали эти API-интерфейсы для создания уведомлений, - вам нужно только убедиться, что поведение приложения соответствует - описанным выше рекомендациям, и рассмотреть возможность реализации {@code - setRemoteInputHistory()}. -
- -- Для поддержки обратной совместимости те же API-интерфейсы доступны в - классе {@link android.support.v4.app.NotificationCompat} - вспомогательной библиотеки, что позволяет реализовать уведомления, работающие в предыдущих версиях Android. - На смартфонах и планшетах пользователи видят только сводное уведомление, - поэтому в приложении все равно должно быть уведомление - в стиле Inbox или аналогичное уведомление, содержащее всю информацию о группе. Так как устройства Android -Wear позволяют пользователям видеть все дочерние уведомления даже - на более ранних уровнях платформы, эти уведомления следует создавать независимо от уровня API. - -
- -Начиная с Android N, вы можете настраивать представления уведомлений -и по-прежнему получать системные элементы, такие как заголовки уведомлений, действия и -расширяемые макеты.
- -Для этого в Android N добавлены следующие API-интерфейсы, позволяющие - настраивать собственные представления.
- -Чтобы воспользоваться этим новым API-интерфейсом, вызовите метод {@code setStyle()}, передав в него -нужный стиль собственного представления.
- -В этом фрагменте показано, как создать собственный объект уведомления с помощью метода -{@code DecoratedCustomViewStyle()}.
- --Notification noti = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd deleted file mode 100644 index 39e1c15b7a8bc..0000000000000 --- a/docs/html-intl/intl/vi/preview/features/background-optimization.jd +++ /dev/null @@ -1,390 +0,0 @@ -page.title=Tối ưu hóa Chạy ngầm -page.metaDescription=Các hạn chế mới đối với truyền phát không biểu thị. -page.keywords="android N", "implicit broadcasts", "job scheduler" -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -
- Các tiến trình chạy ngầm có thể tiêu tốn bộ nhớ và pin. Ví dụ, một - truyền phát không biểu thị có thể bắt đầu nhiều tiến trình chạy ngầm đã đăng ký - để theo dõi chúng, ngay cả khi các tiến trình đó có thể không làm việc nhiều. Điều này có thể có - ảnh hưởng lớn đến cả hiệu suất của thiết bị lẫn trải nghiệm của người dùng. -
- -- Để loại bỏ vấn đề này, N Developer Preview áp dụng các hạn chế - sau: -
- -- Khuôn khổ Android cung cấp một số giải pháp để giảm thiểu sự cần thiết đối với - các truyền phát không biểu thị. Ví dụ, {@link android.app.job.JobScheduler} - và - {@code GcmNetworkManager} cung cấp một cơ chế lên lịch hiệu quả - cho các hoạt động mạng khi đáp ứng các điều kiện được chỉ định, ví dụ như kết nối tới mạng - không đo lưu lượng. Bây giờ bạn cũng có thể sử dụng {@link android.app.job.JobScheduler} - để phản ứng lại với các thay đổi đối với các trình cung cấp nội dung. Các đối tượng {@link android.app.job.JobInfo} - gói gọn các tham số {@link android.app.job.JobScheduler} - dùng để lên lịch tác vụ của bạn. Khi đáp ứng được các điều kiện của tác vụ, hệ thống - sẽ thực thi tác vụ này trên {@link android.app.job.JobService} của ứng dụng của bạn. -
- -- Trong tài liệu này, chúng ta sẽ tìm hiểu cách sử dụng các phương thức thay thế, chẳng hạn như - {@link android.app.job.JobScheduler}, để thích ứng ứng dụng của bạn với các hạn chế - mới này. -
- -- Các ứng dụng nhắm đến N Developer Preview không nhận được truyền phát {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng - đăng ký nhận truyền phát trong bản kê khai của chúng, và các tiến trình phụ thuộc vào truyền phát này - sẽ không khởi động. Điều này cũng đặt ra một vấn đề cho ứng dụng - về việc theo dõi thay đổi mạng hoặc thực hiện các hoạt động mạng hàng loạt khi - thiết bị kết nối với một mạng không đo lưu lượng. Một số giải pháp để tránh khỏi hạn chế này - đã tồn tại trong khuôn khổ Android, nhưng chọn được một giải pháp phù hợp - phụ thuộc vào những gì bạn muốn ứng dụng của bạn hoàn thành. -
- -- Lưu ý: Một{@link android.content.BroadcastReceiver} có đăng ký - {@link android.content.Context#registerReceiver Context.registerReceiver()} - tiếp tục nhận các truyền phát này trong khi ứng dụng đang ở tiền cảnh. -
- -- Khi sử dụng lớp{@link android.app.job.JobInfo.Builder JobInfo.Builder} - để xây dựng đối tượng {@link android.app.job.JobInfo} của bạn, hãy áp dụng phương thức {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} và chuyển {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} dưới dạng một tham số tác vụ. Đoạn mã mẫu sau - lên lịch một dịch vụ để chạy khi thiết bị kết nối với một mạng - không đo lưu lượng và đang sạc: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- Khi các điều kiện cho tác vụ của bạn đã được đáp ứng, ứng dụng của bạn sẽ nhận được lệnh gọi lại để chạy - phương thức{@link android.app.job.JobService#onStartJob onStartJob()}trong - {@code JobService.class} được chỉ định. Để xem thêm các ví dụ về triển khai {@link - android.app.job.JobScheduler} , hãy xem ứng dụng mẫu JobScheduler. -
- -- Các ứng dụng sử dụng dịch vụ GMSCore, và nhắm đến Android 5.0 (API mức 21) - hoặc thấp hơn, có thể sử dụng - {@code GcmNetworkManager} và quy định {@code Task.NETWORK_STATE_UNMETERED}. -
- -- Các ứng dụng đang chạy ở tiền cảnh vẫn có thể theo dõi {@code - CONNECTIVITY_CHANGE} bằng một{@link - android.content.BroadcastReceiver} đã đăng ký. Tuy nhiên, API {@link - android.net.ConnectivityManager} cung cấp phương thức yêu cầu lệnh gọi lại hiệu quả hơn - chỉ khi đáp ứng được các điều kiện được chỉ định. -
- -- Các đối tượng {@link android.net.NetworkRequest} định nghĩa các tham số của - lệnh gọi lại mạng xét về {@link android.net.NetworkCapabilities}. Bạn - tạo các đối tượng {@link android.net.NetworkRequest} bằng lớp {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - rồi chuyển đối tượng{@link android.net.NetworkRequest} sang hệ thống. Khi - đáp ứng được các điều kiện mạng, ứng dụng nhận lệnh gọi lại để thực thi phương thức - {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} như được định nghĩa trong lớp {@link - android.net.ConnectivityManager.NetworkCallback} của nó. -
- -- Ứng dụng tiếp tục nhận lệnh gọi lại cho đến khi ứng dụng tồn tại hoặc nó gọi - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()}. -
- -- Trong N Developer Preview, ứng dụng không thể gửi hoặc nhận các truyền phát {@link - android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link - android.hardware.Camera#ACTION_NEW_VIDEO}. Hạn chế này giúp - loại bỏ các tác động về hiệu suất và trải nghiệm của người dùng khi một số ứng dụng phải - thức dậy để xử lý một ảnh hoặc video mới. N Developer Preview - mở rộng {@link android.app.job.JobInfo} và {@link - android.app.job.JobParameters} để cung cấp một giải pháp thay thế. -
- -- Để kích hoạt tác vụ khi thay đổi URI nội dung, N Developer Preview sẽ mở rộng - API{@link android.app.job.JobInfo} bằng các phương thức sau: -
- -- Lưu ý: {@code TriggerContentUri()} không thể được sử dụng - kết hợp với {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} hoặc {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()}. Để tiếp tục theo dõi các thay đổi nội dung, hãy lên lịch một - {@link android.app.job.JobInfo} mới trước khi {@link - android.app.job.JobService} của ứng dụng hoàn thành xử lý lệnh gọi lại gần đây nhất. -
- -- Đoạn mã mẫu sau lên lịch kích hoạt một tác vụ khi hệ thống báo cáo - có sự thay đổi về URI nội dung, {@code MEDIA_URI}: -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- Khi hệ thống báo cáo có sự thay đổi trong (các) URI nội dung được chỉ định, ứng dụng của bạn - sẽ nhận được lệnh gọi lại và một đối tượng {@link android.app.job.JobParameters} được chuyển sang - phương thức {@link android.app.job.JobService#onStartJob onStartJob()} - trong {@code MediaContentJob.class}. -
- -- N Developer Preview cũng mở rộng {@link android.app.job.JobParameters} để - cho phép ứng dụng của bạn nhận thông tin hữu ích về những gì thẩm quyền nội dung - và các URI đã kích hoạt tác vụ: -
- -- Mã mẫu sau sẽ ghi đè lên phương thức {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} và - và ghi lại các thẩm quyền nội dung và URI đã kích hoạt tác vụ. -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- Tối ưu hóa ứng dụng của bạn để chạy trên các thiết bị có bộ nhớ ít, hoặc đang trong điều kiện - bộ nhớ ít có thể cải thiện hiệu suất và trải nghiệm của người dùng. Loại bỏ - các thành phần phụ thuộc trên các dịch vụ chạy ngầm và bộ thu truyền phát không biểu thị đã đăng ký tĩnh - có thể giúp ứng dụng của bạn chạy tốt hơn trên các thiết bị như vậy. Mặc dù - N Developer Preview thực hiện các bước để giảm bớt một vài trong số các vấn đề này, nhưng chúng tôi - khuyến nghị bạn nên tối ưu ứng dụng của bạn để chạy hoàn toàn không cần sử dụng - các tiến trình chạy ngầm này. -
- -- N Developer Preview giới thiệu một số lệnh Android Debug Bridge (ADB) bổ sung mà - bạn có thể sử dụng để kiểm thử hành vi của ứng dụng bằng các tiến trình chạy ngầm đã bị vô hiệu hóa đó: -
- -
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-
- - ICU4J là bộ thư viện Java mã nguồn mở được sử dụng rộng rãi để cung cấp hỗ trợ Unicode - và toàn cầu hóa cho các ứng dụng phần mềm. Android N - cung cấp một tập nhỏ các API ICU4J trong khuôn khổ Android cho các nhà phát triển ứng dụng - sử dụng trong gói {@code android.icu}. Các API này sử dụng - dữ liệu bản địa hóa có trong thiết bị. Do đó, bạn có thể giảm kích thước tệp APK - bằng cách không biên dịch các thư viện ICU4J vào tệp APK; thay vào đó bạn có thể - gọi chúng trong khuôn khổ một cách đơn giản. (Trong trường hợp này, bạn có thể muốn cung cấp - nhiều phiên bản - tệp APK để những người dùng chạy phiên bản Android thấp hơn Android N - có thể tải phiên bản ứng dụng có chứa các thư viện ICU4J.) -
- -- Tài liệu này sẽ bắt đầu bằng việc cung cấp thông tin cơ bản về các mức Android API - tối thiểu cần để hỗ trợ các thư viện này. Sau đó tài liệu sẽ giải thích những gì - bạn cần để hiểu được công việc triển khai ICU4J liên quan cụ thể đến Android. Cuối cùng, - tài liệu sẽ cho bạn biết cách sử dụng các API ICU4J trong khuôn khổ Android. -
- -
- Android N cung cấp một tập nhỏ các API ICU4J thông qua
- gói android.icu thay vì gói com.ibm.icu.
-Khuôn khổ Android có thể chọn không
- cung cấp các API ICU4J vì nhiều lý do; ví dụ, Android N không cung cấp
- một số API bị loại bỏ hoặc những API chưa được đội ngũ ICU công bố là
- bản ổn định. Vì nhóm ICU sẽ loại bỏ các API này trong tương lai do đó Android cũng sẽ đánh dấu
- chúng là bị loại bỏ nhưng vẫn tiếp tục thêm vào.
-
Bảng 1. Các phiên bản ICU và CLDR được sử dụng - trong Android N.
-| Mức Android API | -Phiên bản ICU | -Phiên bản CLDR | -
|---|---|---|
| Android N | -56 | -28 | -
Sau đây là một vài lưu ý quan trọng:
- -
- Nếu bạn đã sử dụng các API ICU4J trong ứng dụng và
- các API android.icu đáp ứng yêu cầu của bạn thì việc chuyển nhập sang
- các API của khuôn khổ đòi hỏi bạn phải thay đổi thành phần nhập vào của Java
- từ com.ibm.icu sang android.icu. Khi đó bạn có thể
- xóa các tệp ICU4J của bạn khỏi tệp APK.
-
- Lưu ý: Các API khuôn khổ ICU4J sử dụng không gian tên {@code android.icu} - thay vì {@code com.ibm.icu}. Điều này là để tránh xung đột - không gian tên trong các tệp APK có chứa các thư viện {@code com.ibm.icu} của riêng chúng. -
- -
- Một số lớp trong gói java vàandroid có
- các lớp tương ứng với các lớp trong ICU4J. Tuy nhiên, ICU4J thường cung cấp hỗ trợ
- rộng hơn cho các tiêu chuẩn và ngôn ngữ.
-
Sau đây là một số ví dụ để giúp bạn bắt đầu:
-| Lớp | -Thay thế | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J được phát hành theo giấy phép ICU. Hãy xem Hướng dẫn sử dụng - ICU để biết thêm chi tiết. -
diff --git a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd deleted file mode 100644 index 94a71277ce7d5..0000000000000 --- a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd +++ /dev/null @@ -1,217 +0,0 @@ -page.title=Ngôn ngữ và Bản địa -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N cung cấp hỗ trợ cải tiến cho người dùng sử dụng nhiều ngôn ngữ, -cho phép họ chọn nhiều bản địa trong phần cài đặt. Android N -cung cấp khả năng này bằng cách mở rộng số lượng lớn các bản địa được hỗ trợ -và thay đổi cách hệ thống phân giải tài nguyên. Phương thức phân giải tài nguyên -mới hoạt động mạnh mẽ hơn và được thiết kế để tương thích với các tệp APK có sẵn. Tuy nhiên -bạn cần kiểm tra thêm để phát hiện mọi hành vi không mong muốn. Ví dụ, bạn -cần kiểm thử để đảm bảo rằng ứng dụng của mình sẽ thiết lập mặc định cho ngôn ngữ mong muốn. Ngoài ra, -nếu ứng dụng của bạn hỗ trợ đa ngôn ngữ thì bạn cần đảm bảo rằng việc hỗ trợ này hoạt động như -dự kiến. Cuối cùng, bạn cần cố gắng đảm bảo rằng ứng dụng sẽ xử lý tinh tế -những ngôn ngữ mà bạn không có ý định thiết kế ứng dụng để hỗ trợ.
- -Tài liệu này sẽ bắt đầu bằng việc giải thích về chiến lược phân giải tài nguyên trong phiên bản trước -Android N. Tiếp theo, tài liệu sẽ mô tả chiến lược phân giải tài nguyên -được cải tiến của Android N. Cuối cùng, tài liệu sẽ giải thích cách sử dụng -số lượng các bản địa được mở rộng để hỗ trợ thêm nhiều người dùng đa ngữ.
- -Trước Android N, không phải lúc nào Android cũng có thể so khớp -thành công ứng dụng với các bản địa của hệ thống. Ví dụ, giả sử ngôn ngữ mặc định của ứng dụng của bạn - là Tiếng Anh (Mỹ) nhưng ứng dụng cũng có các xâu văn bản Tiếng Tây Ban Nha được bản địa hóa trong các tệp tài nguyên {@code es_ES} -.
-Khi mã nguồn Java tham chiếu đến các xâu đó thì nó sẽ phân giải các ngôn ngữ của xâu như -sau:
-Các vấn đề phân giải này phát sinh bởi vì hệ thống sẽ gỡ mã quốc gia - khỏi bản địa nếu nó không tìm thấy sự trùng khớp tuyệt đối. Ví dụ:
--Bảng 1. Phân giải tài nguyên không có trùng khớp bản địa tuyệt đối. -
-| Cài đặt Người dùng | -Tài nguyên Ứng dụng | -Phân giải tài nguyên | -
|---|---|---|
| fr_CH | -
-mặc định (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Thử fr_CH => Không được -Thử fr => Không được -Sử dụng mặc định (en) - |
-
Trong ví dụ này, hệ thống hiển thị các xâu Tiếng Anh mà không -xác định được liệu người dùng có biết Tiếng Anh hay không. Đây là hành vi khá phổ biến -ngày nay. Android N cần phải giảm bớt đáng kể tần suất -của những kết quả như vậy.
- -Android N mang đến cách thức phân giải tài nguyên mạnh mẽ hơn, và
-tìm các giải pháp thay thế hiệu quả hơn một cách tự động. Tuy nhiên, để tăng tốc việc phân giải và nâng cao
-khả năng bảo trì, bạn cần lưu trữ các tài nguyên trong những nhánh ngôn ngữ mẹ phổ biến nhất.
- Ví dụ, nếu trước đây lưu tài nguyên Tiếng Tây Ban Nha trong thư mục {@code es-US}
- thì hãy chuyển chúng vào trong thư mục {@code es-419}, nơi chứa Tiếng Tây Ban Nha Mỹ La-tinh.
- Tương tự, nếu bạn có các xâu tài nguyên trong một thư mục có tên {@code en-GB} thì hãy đổi tên
- thư mục đó thành {@code en-001} (Tiếng Anh quốc tế) bởi vì nhánh mẹ
-phổ biến nhất cho chuỗi en-GB là {@code en-001}.
- Các ví dụ sau sẽ giải thích tại sao các thực hành này sẽ nâng cao hiệu năng và
-độ ổn định của việc phân giải tài nguyên.
Với Android N, trường hợp được mô tả trong Bảng 1 được phân giải -theo cách khác:
- --Bảng 2. Một chiến lược phân giải cải tiến khi không có -trùng khớp bản địa tuyệt đối.
-| Cài đặt Người dùng | -Tài nguyên Ứng dụng | -Phân giải tài nguyên | -
|---|---|---|
|
-
-mặc định (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-Thử fr_CH => Không được -Thử fr => Không được -Thử nhánh con của fr => fr_FR -Sử dụng fr_FR - |
-
Bây giờ thì người dùng sẽ nhận được tài nguyên Tiếng Pháp thay vì Tiếng Anh. Ví dụ này cũng cho thấy - lý do bạn nên lưu trữ các xâu Tiếng Pháp trong {@code fr} thay vì {@code fr_FR} - cho Android N. Phương pháp ở đây là ghép nhánh ngôn ngữ mẹ gần nhất, - giúp cho việc phân giải nhanh hơn và dễ dự đoán hơn.
- -Ngoài lôgic phân giải được cải tiến này, Android giờ đây cung cấp thêm nhiều -ngôn ngữ cho người dùng lựa chọn. Chúng ta hãy thử lại ví dụ trên với Tiếng Ý - được xác định là một ngôn ngữ người dùng bổ sung nhưng không được ứng dụng hỗ trợ cho Tiếng Pháp.
- --Bảng 3. Phân giải tài nguyên khi ứng dụng chỉ khớp -với cài đặt bản địa được ưu tiên thứ hai của người dùng.
-| Cài đặt Người dùng | -Tài nguyên Ứng dụng | -Phân giải tài nguyên | - -
|---|---|---|
|
-
-mặc định (en) -de_DE -es_ES -it_IT - |
-
-Thử fr_CH => Không được -Thử fr => Không được -Thử nhánh con của fr => Không được -Thử it_CH => Không được -Thử it => Không được -Thử nhánh con của it => it_IT -Sử dụng it_IT - |
-
-
Người dùng vẫn nhận được ngôn ngữ họ biết mặc dù ứng dụng không -hỗ trợ Tiếng Pháp.
- - -Android N bổ sung thêm một API {@code LocaleList.GetDefault()} - mới cho phép các ứng dụng truy vấn trực tiếp danh sách các ngôn ngữ mà người dùng đã chỉ định. API này -cho phép bạn tạo hành vi ứng dụng -phức tạp hơn và hiển thị nội dung được tối ưu hóa tốt hơn. Ví dụ, Tìm kiếm - có thể hiển thị các kết quả bằng nhiều ngôn ngữ dựa trên cài đặt của người dùng. Các ứng dụng trình duyệt - có thể tránh đề nghị dịch trang web sang một ngôn ngữ mà người dùng đó đã biết, - và các ứng dụng bàn phím có thể tự động bật tất cả các bố trí phù hợp.
- -Tính tới Android 6.0 (API mức 23), Android 6.0 chỉ hỗ trợ một hoặc hai bản địa -cho nhiều ngôn ngữ phổ biến -(en, es, ar, fr, ru). Bởi vì chỉ có một vài biến thể của từng ngôn ngữ, -các ứng dụng không gặp vấn đề gì với việc lưu trữ một số chữ số và ngày tháng dưới dạng xâu được chèn trực tiếp khi viết mã -trong các tệp tài nguyên. Tuy nhiên, với tập hợp mở rộng các bản địa được hỗ trợ bởi Android, -có thể có -nhiều khác biệt lớn về các định dạng ngày tháng, thời gian, tiền tệ và thông tin -tương tự ngay cả trong một bản địa. Chèn trực tiếp các định dạng có thể khiến -người dùng cuối bối rối. Do đó, khi phát triển cho Android N -hãy đảm bảo sử dụng các bộ định dạng thay vì các xâu chữ số và ngày tháng được chèn trực tiếp khi viết mã.
- -Một ví dụ điển hình là Tiếng Ả-rập với được Android N hỗ trợ mở rộng từ -một {@code ar_EG} tới 27 bản địa Tiếng Ả-rập. Các bản địa này có thể chia sẻ hầu hết các tài nguyên, -nhưng một số bản địa ưu tiên chữ số ASCII trong khi những bản địa khác lại ưu tiên con số truyền thống. Ví dụ, -khi bạn muốn soạn một câu có biến bằng số, như -"Choose a 4 digit pin" thì bạn hãy sử dụng bộ định dạng như sau:
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/vi/preview/features/notification-updates.jd b/docs/html-intl/intl/vi/preview/features/notification-updates.jd deleted file mode 100644 index f60646a46f43d..0000000000000 --- a/docs/html-intl/intl/vi/preview/features/notification-updates.jd +++ /dev/null @@ -1,328 +0,0 @@ -page.title=Thông báo -page.tags=notifications -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - -
Android N giới thiệu một số API mới cho phép ứng dụng đăng -các thông báo có khả năng hiển thị và tương tác cao.
- -Android N mở rộng API thông báo {@link android.support.v4.app.RemoteInput} -hiện có để hỗ trợ trả lời giữa dòng trên thiết bị cầm tay. Tính năng này cho phép người dùng - phản hồi nhanh chóng từ khu vực hiển thị thông báo mà không cần truy cập ứng dụng của bạn.
- -- Android N cũng cho phép bạn gộp các thông báo tương tự nhau để - xuất hiện dưới dạng một thông báo đơn lẻ. Để điều này có thể xảy ra, Android N sử dụng phương thức {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} hiện có. Người dùng có thể mở rộng mỗi - thông báo, và thực hiện các hành động như trả lời và bỏ qua trên mỗi - thông báo, từng thông báo một từ khu vực hiển thị thông báo. -
- -Cuối cùng, Android N cũng thêm các API mới cho phép bạn tận dụng các trang trí -của hệ thống trong các dạng xem thông báo tùy chỉnh của ứng dụng của bạn. Các API này giúp -đảm bảo rằng dạng xem thông báo có chung một cách trình bày nhất quán -với các mẫu tiêu chuẩn.
- -Tài liệu này nêu bật một số các thay đổi chính mà bạn cần cân nhắc - khi sử dụng các tính năng thông báo mới trong ứng dụng của mình.
- -Với tính năng Trả lời Trực tiếp trong Android N, người dùng có thể
-phản hồi lại tin nhắn văn bản hoặc cập nhật danh sách tác vụ trực tiếp trong giao diện
-của thông báo. Trên thiết bị cầm tay, hành động trả lời giữa dòng xuất hiện dưới dạng một nút bổ sung
- được gắn kèm với thông báo đó. Khi người dùng trả lời qua bàn phím, hệ thống sẽ đính kèm
- phản hồi bằng văn bản với ý định
- bạn đã quy định cho hành động thông báo và gửi ý định đến ứng dụng cầm tay
- của bạn.
-
-
-
-
- Hình 1. Android N thêm nút hành động Reply -. -
- -Để tạo một hành động thông báo hỗ trợ trả lời trực tiếp: -
- --// Key for the string that's delivered in the action's intent -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput().
-
--// Create the reply action and add the remote input -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action -Notification notification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, notification); - --
Hệ thống sẽ nhắc người dùng nhập liệu một phản hồi khi chúng kích hoạt -hành động thông báo.
- -
-- Hình 2. Người dùng nhập liệu văn bản từ khu vực hiển thị thông báo. -
- -Để nhận mục nhập của người dùng từ giao diện thông báo đến hoạt động bạn -đã khai báo trong ý định của hành động trả lời:
--Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); -- -
Đoạn mã sau minh họa cách thức một phương thức truy xuất văn bản đầu vào -từ một gói:
- -
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
-
-Ứng dụng có thể áp dụng lô-gic để quyết định hành động nào nên lấy trên văn bản -được truy xuất. -Đối với các ứng dụng tương tác (chẳng hạn như trò chuyện), hãy cung cấp thêm ngữ cảnh trong chính thông báo - (ví dụ như nhiều dòng lịch sử trò chuyện, gồm có các tin nhắn của riêng người dùng) - để người dùng có thể phản hồi phù hợp. -Khi người dùng phản hồi qua {@link android.support.v4.app.RemoteInput}, - hãy bao gồm văn bản trong lịch sử trả lời bằng phương thức {@code setRemoteInputHistory()} -.
- -Android N cung cấp cho các nhà phát triển một cách mới để hiển thị - hàng đợi thông báo: thông báo gộp. Cách hiển thị này tương tự với tính năng - Ngăn xếp - Thông báo có trong Android Wear. Ví dụ, nếu ứng dụng của bạn tạo thông báo - cho tin nhắn nhận được, khi có nhiều hơn một tin nhắn nhận được, hãy gói - các thông báo lại với nhau thành một nhóm đơn lẻ. Bạn có thể - sử dụng phương thức {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} hiện có để gói các thông báo tương tự.
- -- Nhóm thông báo sẽ quy định phân cấp trên các thông báo bao gồm nó. - Ở trên cùng của phân cấp là thông báo mẹ hiển thị tóm tắt - thông tin cho nhóm đó. Người dùng có thể mở rộng - nhóm thông báo tăng dần lên, và hệ thống sẽ hiển thị thêm thông tin khi - người dùng truy sâu hơn. Khi người dùng mở rộng gói này, hệ thống sẽ lộ ra thêm - thông tin cho tất cả các thông báo con của gói, khi người dùng - mở rộng một trong những thông báo đó, hệ thống sẽ lộ ra toàn bộ nội dung của nó. -
- -
-- Hình 3. Người dùng có thể mở rộng nhóm - thông báo tăng dần lên. -
- -Để tìm hiểu cách thêm thông báo vào một nhóm, xem -Thêm -Mỗi Thông báo vào một Nhóm.
- - -Mục này sẽ cung cấp hướng dẫn về việc khi nào sử dụng nhóm thông báo thay vì - các thông báo{@link android.app.Notification.InboxStyle InboxStyle} -có sẵn trong các phiên bản cũ hơn của -nền tảng Android.
- -Bạn nên sử dụng các nhóm thông báo chỉ khi tất cả các điều kiện sau là -đúng đối với trường hợp sử dụng của bạn:
- -Các ví dụ về các trường hợp sử dụng tốt nhóm thông báo bao gồm: ứng dụng nhắn tin -hiển thị danh sách các tin nhắn đến, hoặc ứng dụng email hiển thị danh sách -các email đã nhận được.
- --Ví dụ về các trường hợp trong đó một thông báo đơn lẻ được ưu tiên - bao gồm tin nhắn riêng từ một người đơn lẻ, hoặc biểu diễn danh sách - các mục văn bản một hàng. Bạn có thể sử dụng -({@link android.app.Notification.InboxStyle InboxStyle} hoặc -{@link android.app.Notification.BigTextStyle BigTextStyle}) để hoàn thành -việc này. -
- -- Ứng dụng sẽ luôn đăng tóm tắt nhóm, ngay cả khi nhóm chỉ chứa - một thông báo con duy nhất. Hệ thống này sẽ ngăn chặn tóm tắt và hiển thị trực tiếp - thông báo con nếu nó chỉ chứa một thông báo duy nhất. Điều này đảm bảo - rằng hệ thống có thể cung cấp một trải nghiệm nhất quán khi người dùng trượt nhanh khỏi - thông báo con của nhóm. -
- -- Lưu ý: Phiên bản Android N này không - ngăn chặn tóm tắt cho nhóm thông báo có chứa một thông báo con duy nhất. Chức năng - này sẽ được thêm vào trong phiên bản sau của Android N. -
- -Trong khi hệ thống thường hiển thị các thông báo con dưới dạng một nhóm, bạn có thể đặt - chúng tạm thời hiển thị dưới dạng - - thông báo cảnh báo. Tính năng này đặc biệt hữu ích bởi vì nó cho phép - truy cập ngay lập tức thông báo con gần đây nhất và các hành động liên kết với thông báo con đó. -
- - -- Cả nhóm thông báo và đầu vào từ xa đều là một phần của API {@link - android.app.Notification} vì Android 5.0 (API mức 21) hỗ trợ - các thiết bị Android Wear. Nếu bạn đã dựng các thông báo bằng các API này, - hành động duy nhất bạn cần phải thực hiện là xác minh rằng ứng dụng có hành vi tương ứng - với các hướng dẫn đã mô tả ở trên, và cân nhắc việc triển khai {@code - setRemoteInputHistory()}. -
- -- Để hỗ trợ tính tương thích ngược, các API giống vậy sẽ được cung cấp cho - lớp {@link android.support.v4.app.NotificationCompat} - của thư viện hỗ trợ, cho phép bạn dựng các thông báo hoạt động trên các phiên bản - Android cũ hơn. Trên máy tính bảng và thiết bị cầm tay, người dùng chỉ nhìn thấy thông báo tóm tắt, - vì vậy ứng dụng vẫn có kiểu hòm thư hoặc thông báo tương tự - biểu diễn cho toàn bộ nội dung thông tin của nhóm. Vì các thiết bị Android - Wear cho phép người dùng xem các thông báo con thậm chí trên - các mức nền tảng thấp hơn, bạn nên dựng các thông báo con dù cho mức API - là mức nào. -
- -Bắt đầu từ Android N, bạn có thể tùy chỉnh dạng xem và -vẫn có các trang trí hệ thống như tiêu đề thông báo, hành động, và -các bố trí mở rộng được.
- -Để kích hoạt khả năng này, Android N thêm các API sau để tạo kiểu cho dạng xem tùy chỉnh - của bạn:
- -Để sử dụng API mới này, hãy gọi phương thức {@code setStyle()}, chuyển nó sang -kiểu dạng xem tùy chỉnh mong muốn.
- -Đoạn mã này cho biết cách dựng đối tượng thông báo tùy chỉnh bằng phương thức -{@code DecoratedCustomViewStyle()}.
- --Notification noti = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -diff --git a/docs/html-intl/intl/zh-cn/preview/download_mp2.jd b/docs/html-intl/intl/zh-cn/preview/download_mp2.jd deleted file mode 100644 index ba5249a46029b..0000000000000 --- a/docs/html-intl/intl/zh-cn/preview/download_mp2.jd +++ /dev/null @@ -1,359 +0,0 @@ -page.title=下载 -page.image=images/cards/card-download_16-9_2x.png - -@jd:body - -
- Android M 预览版 SDK 包括开发工具、Android 系统文件和库文件,旨在帮助您在下一版本的平台中测试您的应用以及该平台提供的新 API。 -本文旨在介绍如何获得“预览版”的可下载组件,以便测试您的应用。 - -
- - -- 预览版 SDK 可通过 Android SDK 管理器下载。如需了解有关下载和配置预览版 SDK 的详细信息,请参阅设置预览版 SDK。 - -
- - -- 开发者文档下载软件包提供详细的 API 参考信息和“预览版”的 API 差异报告。 -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- 这些系统映像允许您在实际设备上安装预览版平台,以便进行测试。 -通过使用这些映像之一配置设备,您可以安装并测试您的应用,以了解其在下一版本平台上的性能表现。 -在设备上安装系统映像的过程会删除设备中的所有数据,因此您应该在安装系统映像之前备份数据。 - - -
- -- 警告:以下 Android 系统映像是预览版,可能会随时发生变化。您对这些系统映像的使用受 Android SDK 预览版许可协议的制约。 -Android 预览版系统映像并非稳定版本,可能包含会对您的计算机系统、设备和数据造成损害的错误和缺陷。 - -Android 预览版系统映像未经过与出厂操作系统相同的测试,可能会导致您的手机和安装的服务与应用停止工作。 - - -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- 要使用设备映像进行测试,您必须将其安装到兼容设备上。请按照下面的说明安装系统映像: - -
- -- 注:为开发设备刷入预览版系统映像之后,它将通过无线 (OTA) 更新自动升级到下一个预览版本。 - -
- -- 如果您想要卸载预览版并将设备还原至出厂规格,请转到 -developers.google.com/android 并下载要为设备刷入的映像。 -按照该页面上的说明将映像刷入设备中。 - -
- -- 后台进程非常耗费内存和电池。例如,隐式广播可以启动许多已注册侦听它的后台进程,即使这些进程可能没有执行许多工作。 - -这会严重影响设备性能和用户体验。 - -
- -- 为缓解这个问题,Android N 应用了以下限制: - -
- -- 如果您的应用使用任何 Intent,您仍需要尽快移除它们的依赖关系,以正确适配 Android N 设备。 - - Android 框架提供多个解决方案来缓解对这些隐式广播的需求。 -例如,{@link android.app.job.JobScheduler} -和 -{@code GcmNetworkManager} 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。 - -现在,您还可以使用 {@link android.app.job.JobScheduler} -来响应内容提供程序所发生的变更。{@link android.app.job.JobInfo} -对象封装了 {@link android.app.job.JobScheduler} -用来安排您的作业的参数。如果符合作业条件,系统将在应用的 {@link android.app.job.JobService} 上执行此作业。 - -
- -- 在本文档中,我们将学习如何使用备用方法(如 {@link android.app.job.JobScheduler})调整您的应用以符合这些新限制。 - - -
- -- 面向 Android N 的应用不会收到 {@link -android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们在清单中注册接收这些广播亦是如此,依赖此广播的流程也不会启动。 - -这可能会给需要侦听网络变化或者需要在设备接入无限流量网络时执行批量网络活动的应用造成问题。 - -Android 框架中已存在多个可绕过此限制的解决方案,但需要根据您想要应用实现的目标来选择正确的解决方案。 - - -
- -- 注:当应用运行时,通过 -{@link android.content.Context#registerReceiver Context.registerReceiver()} -中注册的 {@link android.content.BroadcastReceiver} 将继续接收这些广播。 -
- -- 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 类构建 -{@link android.app.job.JobInfo} 对象时,应用 {@link -android.app.job.JobInfo.Builder#setRequiredNetworkType -setRequiredNetworkType()} 方法,并将 {@link android.app.job.JobInfo -JobInfo.NETWORK_TYPE_UNMETERED} 作为作业参数传递。以下代码示例展示如何安排当设备接入无限流量网络且正在充电时要运行的服务: - - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- 当符合作业条件时,应用会收到回调以运行指定的{@code JobService.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。 - -如需查看 {@link - android.app.job.JobScheduler} 实现的更多示例,请参阅 JobScheduler 示例应用。 -
- -- 使用 GMSCore 服务且面向 Android 5.0(API 级别 21)或更低版本系统的应用可以使用 -{@code GcmNetworkManager} 并指定 {@code Task.NETWORK_STATE_UNMETERED}。 - -
- -- 注册了 {@link android.content.BroadcastReceiver} 的运行的应用仍可侦听 {@code CONNECTIVITY_CHANGE}。 -不过,{@link -android.net.ConnectivityManager} API 提供了一个更稳健可靠的方法,可以仅在符合指定的网络条件时才请求回调。 - -
- -- {@link android.net.NetworkRequest} 对象根据 {@link android.net.NetworkCapabilities} 定义网络回调的参数。 -使用 {@link -android.net.NetworkRequest.Builder NetworkRequest.Builder} 类创建 {@link android.net.NetworkRequest} 对象。然后,{@link -android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, -android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} -将 {@link android.net.NetworkRequest} 对象传递给系统。 -当符合网络条件时,应用会收到回调以执行在其 {@link -android.net.ConnectivityManager.NetworkCallback} 类中定义的 -{@link android.net.ConnectivityManager.NetworkCallback#onAvailable -onAvailable()} 方法。 - -
- -- 应用继续接收回调,直至应用退出或调用 -{@link android.net.ConnectivityManager#unregisterNetworkCallback -unregisterNetworkCallback()}。 -
- -- 在 Android N 中,应用无法发送或接收 {@link -android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link -android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此限制有助于缓解必须唤醒多个应用以处理新图像或视频时对性能和用户体验造成的影响。 - -Android N 扩展了 {@link android.app.job.JobInfo} 和 {@link -android.app.job.JobParameters} 以提供备用解决方案。 - -
- -- 为了针对内容 URI 变化触发作业,Android N 使用以下方法扩展了 {@link android.app.job.JobInfo} API: - -
- -- 注: {@code TriggerContentUri()} 无法与 {@link android.app.job.JobInfo.Builder#setPeriodic -setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted -setPersisted()} 结合使用。 -若要持续监控内容变化,则可在应用的 {@link -android.app.job.JobService} 完成处理最新的回调前安排新的 -{@link android.app.job.JobInfo}。 -
- -- 以下示例代码展示如何安排当系统报告内容 URI {@code MEDIA_URI} 所发生变化时要触发的作业: - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- 当系统报告指定内容 URI 所发生变化时,应用将收到一个回调,并向 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} -方法传递一个 {@link android.app.job.JobParameters} 对象。 - - -
- -- Android N 也扩展了{@link android.app.job.JobParameters},以允许应用接收有关哪些内容权限和 URI 已触发作业的有用信息: - - -
- -- 以下示例代码重写 {@link -android.app.job.JobService#onStartJob JobService.onStartJob()} 方法并记录已触发作业的内容权限和 URI: - -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- 优化您的应用以在低内存设备上或在低内存条件下运行,这样可以提升性能和用户体验。 -删除后台服务依赖关系和静态注册的隐式广播接收器可帮助您的应用在此类设备上运行得更好。 - -尽管 Android N 采取了措施以减少部分问题,但建议您优化自己的应用,使其能够在完全不使用这些后台进程的情况下运行。 - - - -
- -- Android N 推出了一些附加 Android 调试桥 (ADB) 命令,您可以使用这些命令测试在禁用那些后台进程情况下的应用行为: - -
- -
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-
- - ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。 -Android N 在 {@code android.icu} 软件包下显示 Android 框架中的 ICU4J API 子集,供应用开发者使用。 - -这些 API 使用设备上具有的本地化数据。 -因此,您可以通过不将 ICU4J 库编译到 APK 来减少 APK 占用空间;相反,您可以只在框架中调用它们。 - -(在此情况下,您可能想要提供多个版本的 APK,这样,运行比 Android N 低的 Android 版本的用户可以下载包含 ICU4J 库的应用版本。) - - - -
- -- 本文档开头提供了有关支持这些库所需的最低 Android API 级别的一些基本信息。 -然后,介绍关于 Android 特定的 ICU4J 实现您需要了解的内容。 -最后,介绍如何在 Android 框架中使用 ICU4J API。 - -
- -
- Android N 通过
-android.icu 软件包(而非 com.ibm.icu)显示 ICU4J API 的子集。由于种种原因,Android 框架可能选择不显示 ICU4J API;例如,Android N 不显示一些已弃用的 API 或 ICU 团队尚未将其声明为“稳定”的 API。
-
-
-
-由于 ICU 团队将来会弃用这些 API,因此,Android 也会将其标记为已弃用,但将继续包含它们。
-
-
表 1. Android N 中使用的 ICU 和 CLDR 版本。 -
-| Android API 级别 | -ICU 版本 | -CLDR 版本 | -
|---|---|---|
| Android N | -56 | -28 | -
以下是几点注意事项:
- -
- 如果您已在应用中使用 ICU4J API,且
-android.icu API 符合您的要求,那么要迁移至框架 API,需要将 Java 导入从 com.ibm.icu 更改为 android.icu。
-
-然后,您可以从 APK 移除您自己的 ICU4J 文件的副本。
-
-
- 注:ICU4J 框架 API 使用 {@code android.icu} -命名空间,而不是 {@code com.ibm.icu}。这是为了避免在包含自己的 {@code com.ibm.icu} 库的 APK 中出现命名空间冲突。 - -
- -
- java 和 android 软件包中的某些类与在 ICU4J 中找到的一些类等效。
-不过,ICU4J 通常为标准和语言提供更广泛的支持。
-
-
下面是一些入门示例:
-| 类 | -替代项 | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J 按照 ICU 许可发布。如需了解详情,请参阅 ICU 用户指南。 - -
diff --git a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd deleted file mode 100644 index 248d6a06c7bfc..0000000000000 --- a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd +++ /dev/null @@ -1,221 +0,0 @@ -page.title=语言和区域设置 -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N 为多语言用户提供增强的支持,让他们可以在设置中选择多个区域设置。 -Android N 通过大幅扩展受支持的区域设置数量并更改系统解析资源的方式来提供此功能。 - -全新的解析资源方法更加稳健,并且设计为与现有 APK 兼容,但要格外细心,以发现任何异常行为。 - -例如,您应进行测试,以确保应用默认显示预期的语言。 -另外,如果应用支持多语言,您应确保此支持合乎预期。 - -最后,对于您没有将其显式设计为支持的语言,应设法确保应用能够妥善地处理它们。 -
- -本文档开头介绍 Android N 之前的资源解析策略。接下来介绍 Android N 改进的资源解析策略。 - -最后,介绍如何充分利用扩展的区域设置数量来支持更多的多语言用户。 -
- -在 Android N 之前,Android 并非始终能够成功匹配应用和系统区域设置。 -
- -例如,假设您遇到了以下情况:
-当您的 Java 代码引用字符串时,系统会从默认 ({@code en_US}) 资源文件加载字符串,即使应用在 {@code es_ES} 下有本地化的西班牙语资源。 - -这是因为当系统无法找到精确匹配时,它会继续通过将国家/地区代码从区域设置中剥离来查找资源。 - -最后,如果未找到匹配,系统会恢复为默认模式,即 {@code en_US}。 -
- - -如果用户选择应用根本不支持的语言(如法语),则系统也会默认显示 {@code en_US}。 -例如:
- --表 1. 没有精确区域设置匹配项的资源解析。 -
-| 用户设置 | -应用资源 | -资源解析 | -
|---|---|---|
| fr_CH | -
-默认值 (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-尝试 fr_CH => 失败 -尝试 fr => 失败 -使用默认值 (en) - |
-
在此示例中,系统在不知道用户是否理解英语的情况下显示英语字符串。 -目前,此行为很常见。 -Android N 应该会大幅减少出现此类结果的频率。 -
- -Android N 可提供更稳健的资源解析,并自动查找更好的备用方法。
-不过,为了加速解析和提升可维护性,您应以最常用的母语存储资源。
-
- 例如,如果您之前将西班牙语资源存储在 {@code es-US} 目录中,请将它们移动到 {@code es-419} 目录,该目录包含拉丁美洲西班牙语。
-
- 同理,如果您在名为 {@code en-GB} 的文件夹中存储有资源字符串,则将此文件夹重命名为 {@code en-001}(国际英语),因为 en-GB 字符串的最常用母语为 {@code en-001}。
-
-
- 以下示例介绍为什么这些做法可提升性能和资源解析的可靠性。
-
使用 Android N,以不同的方式解析表 1 中所描述的案例: -
- --表 2. 针对没有精确区域设置匹配项时改进的资源解析策略。 -
-| 用户设置 | -应用资源 | -资源解析 | -
|---|---|---|
|
-
-默认值 (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-尝试 fr_CH => 失败 -尝试 fr => 失败 -尝试 fr 的子项 => fr_FR -使用 fr_FR - |
-
现在,用户获得的是法语资源而不是英语。此示例还表明对于 Android N,您为什么应将法语字符串存储在 {@code fr}(而非 {@code fr_FR})中。此处的做法是匹配最接近的母语,从而使解析更快速且更具预见性。 - - -
- -除了这个改进的解析逻辑外,Android 现在还提供更多的用户语言以供选择。 -下面,我们将意大利语指定为附加用户语言,但假设应用不支持法语,再次尝试上面的示例。 -
- --表 3. 应用仅与用户的次优区域设置匹配时的资源解析。 -
-| 用户设置 | -应用资源 | -资源解析 | - -
|---|---|---|
|
-
-默认值 (en) -de_DE -es_ES -it_IT - |
-
-尝试 fr_CH => 失败 -尝试 fr => 失败 -尝试 fr 的子项 => 失败 -尝试 it_CH => 失败 -尝试 it => 失败 -尝试 it 的子项 => it_IT -使用 it_IT - |
-
-
用户仍会获取他们理解的语言,即使应用不支持法语。 -
- - -Android N 添加了新的 API {@code LocaleList.getDefault()},从而让应用可以直接查询用户已指定的语言列表。 -您可以使用此 API 创建更成熟的应用行为和更优化的内容显示。 - -例如,搜索可以基于用户的设置以多种语言显示结果。 -浏览器应用可避免翻译以用户理解的语言显示的页面,键盘应用可自动启用所有适用的布局。 - -
- -直到 Android 6.0(API 级别 23),Android 仅支持许多常用语言(en、es、ar、fr、ru)的一个或两个区域设置。 - -由于每种语言只有几种变体,因此,应用可以通过在资源文件中将一些数字和日期存储为硬编码字符串解决此问题。 - -不过,随着 Android 扩展了支持的区域设置集,即使在一个区域设置中,日期、时间、货币及类似信息也会存在显著差异。 - - -对您的格式进行硬编码会让最终用户困惑不已。 -因此,在针对 Android N 开发应用时请务必使用格式化程序代替硬编码数字和日期字符串。 -
- -阿拉伯语就是最好的例子,Android N 将对其的支持从一个 {@code ar_EG} 扩展到 27 个阿拉伯语区域设置。 -这些区域设置可以共享大多数资源,但其中一些资源首选 ASCII 数字,另一些则首选本地数字。 -例如,如果您想要创建一个具有数字变量的句子,如“Choose a 4 digit pin”,则按如下所示使用格式化程序: - -
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd deleted file mode 100644 index 900eea6131dc2..0000000000000 --- a/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd +++ /dev/null @@ -1,393 +0,0 @@ -page.title=通知 -page.tags=通知 -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - - - -
Android N 引入了一些新 API,允许应用发布具有高度可见性和交互性的通知。 -
- -Android N 扩展了现有 {@link android.support.v4.app.RemoteInput} 通知 API,以支持手持式设备上的内联回复。 -此功能允许用户从通知栏快速进行回复,无需访问应用。 -
- -- 此外,Android N 还允许捆绑类似的通知并将它们显示为一则通知。 -为了实现此功能,Android N 使用现有的 {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} 方法。用户可以从通知栏展开各通知,并分别对每则通知进行回复和清除等操作。 - - -
- -最后,Android N 还添加了一些新 API,允许您在应用的自定义通知视图中使用系统装饰元素。 -这些 API 可帮助确保通知视图与标准模板的展示效果相一致。 - -
- -本文重点介绍您在应用中使用新通知功能时应加以考虑的一些重要变更。 -
- -利用 Android N 中的直接回复功能,用户可以直接在通知界面内快速回复短信或更新任务列表。
-
-在手持式设备上,可通过通知中另外附加的按钮进行内联回复操作。
-当用户通过键盘回复时,系统会将文本回复附加到您为通知操作指定的 Intent,并将 Intent 发送到手持式设备应用。
-
-
-
-
-
-
-
- 图 1.Android N 添加了 Reply 操作按钮。 - -
- -要创建支持直接回复的通知操作: -
- --// Key for the string that's delivered in the action's intent. -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput() 向操作附加 {@link android.support.v4.app.RemoteInput} 对象。
-
-
--// Create the reply action and add the remote input. -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action. -Notification newMessageNotification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification. -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, newMessageNotification); - --
在触发通知操作时系统提示用户输入回复。 -
- -
-- 图 2.用户从通知栏输入文本。 -
- -- 要从通知界面接收用户输入并发送到在回复操作的 Intent 中声明的 Activity: - -
- --Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); --
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
- -// Build a new notification, which informs the user that the system -// handled their interaction with the previous notification. -Notification repliedNotification = - new Notification.Builder(context) - .setSmallIcon(R.drawable.ic_message) - .setContentText(getString(R.string.replied)) - .build(); - -// Issue the new notification. -NotificationManager notificationManager = - NotificationManager.from(context); -notificationManager.notify(notificationId, repliedNotification); --
- 对于交互式应用(例如聊天),这可以用来在处理检索到的文本时添加其他上下文。 -例如,这些应用可以显示多行聊天记录。 -当用户通过 {@link - android.support.v4.app.RemoteInput} 回复时,您可以使用 {@code setRemoteInputHistory()} 方法更新回复历史。 - -
- -- 在应用收到远程输入后,必须更新或取消通知。 -如果用户使用直接回复来对远程更新进行回复,则不可取消通知。 - -否则,更新通知以显示用户的回复。对于使用 {@code MessagingStyle} 的通知,您应该添加回复来作为最新消息。 - -当使用其它模板时,您可以将用户的回复追加到远程输入历史。 - -
- -Android N 为开发者提供了表示通知队列的新方法: - 捆绑通知。这类似于 Android Wear 中的通知堆栈功能。 - -例如,如果应用为接收的消息创建通知,那么在接收到多个消息时,应用会将通知捆绑在一起成为一个群组。 - -您可以使用现有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} 方法捆绑类似的通知。 -
- -- 通知组对组内的通知施加层次结构。 - 层次结构的顶层是父级通知,其显示该群组的摘要信息。 -用户可以逐步展开通知组,随着用户深入展开,系统将显示更多信息。 - -当用户展开捆绑包时,系统将显示其所有子通知的更多信息;当用户展开其中一则通知时,系统显示该通知的所有内容。 - - -
- -
-- 图 3.用户可以逐步展开通知组。 - -
- -- 注:如果同一应用发送了四条或以上通知,并且未指定分组,系统会自动将它们分到一组。 - - -
- -如需了解如何将通知添加到组,请参阅将各通知添加到组。 - -
- - -本节提供了有关何时使用通知组而非早期版本 Android 平台中的 {@link android.app.Notification.InboxStyle InboxStyle} 通知的指南。 - - -
- -只有在您的用例满足以下所有条件时才应使用通知组: -
- -好的通知组用例示例包括:显示传入消息列表的短信应用,或显示收到的电子邮件列表的电子邮件应用。 - -
- --适合显示单一通知的用例示例包括:从某一个人收到的单独消息,或以列表表示的单行文本项目。 - -您可以使用 {@link android.app.Notification.InboxStyle InboxStyle} 或 -{@link android.app.Notification.BigTextStyle BigTextStyle} 实现此功能。 - - -
- -- 即使组内仅含有一则子通知,应用也应发布组摘要。 -如果只含有一则通知,系统将取消摘要并直接显示子通知。 -这样可确保用户在滑动切换组内的子通知时,系统仍可以提供一致的用户体验。 - - -
- -- 注:本版本 Android N 目前还无法在仅含一则子通知时取消通知组的摘要。 -我们将在之后版本的 Android N 中添加此功能。 - -
- -虽然系统通常以群组的方式显示子通知,但您可以进行设置,使其暂时作为浮动通知显示。 - - -该功能非常实用,因为其允许用户立即访问最近的子通知以及与其相关的操作。 - -
- - -- 自 Android 5.0(API 级别 21)起,{@link - android.app.Notification} API 中就添加了通知组和远程输入,以支持 Android Wear 设备。 -如果您已经使用这些 API 构建通知,则只需验证应用行为是否符合上述指南,并考虑实现 {@code - setRemoteInputHistory()}。 - - -
- -- 为了支持后向兼容性,支持库的 {@link android.support.v4.app.NotificationCompat} 类中提供了相同的 API,以便您构建可在早期 Android 版本中运行的通知。 - - -在手持式设备和平板电脑上,用户只能看到摘要通知,因此应用应仍提供收件箱式或类似形式的通知显示模式,以显示群组的全部信息内容。 - -鉴于 Android Wear 设备允许用户查看所有子通知,包括更早级别平台上的通知,您应在不依赖 API 级别的基础上构建子通知。 - - - -
- -从 Android N 开始,您将可以自定义通知视图,同时仍可以使用系统装饰元素,例如通知标头、操作和可展开的布局。 - -
- -为启用该功能,Android N 添加了以下 API,以便您样式化自己的自定义视图: -
- -如需使用这些新 API,可调用 {@code setStyle()} 方法,并向其传递所需的自定义视图样式。 -
- -此代码段显示了如何使用 {@code DecoratedCustomViewStyle()} 方法构建自定义通知对象。 -
- --Notification notification = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -- -
- Android N 引入了一项新的 API 来自定义通知样式。
- 使用 MessageStyle 类,您可以更改在通知中显示的多个标签,包括会话标题、其他消息和通知的内容视图。
-
-
-
- 以下代码段演示了如何使用 MessageStyle 类来自定义通知样式。
-
-
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-
diff --git a/docs/html-intl/intl/zh-tw/preview/download_mp2.jd b/docs/html-intl/intl/zh-tw/preview/download_mp2.jd
deleted file mode 100644
index 3b54080c19bfe..0000000000000
--- a/docs/html-intl/intl/zh-tw/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=下載
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-- Android M 預覽版 SDK 有開發工具、Android 系統檔案以及程式庫檔案,可以幫助測試您的應用程式和下一個平台版本隨附的新 API。 -本文件會說明如何取得可下載的預覽版元件來測試您的應用程式。 - -
- - -- 預覽版 SDK 可透過 Android SDK 管理器下載取得。如需有關下載和設定預覽版 SDK 的詳細資訊,請參閱設定預覽版 SDK。 - -
- - -- 開發人員文件下載套件提供詳細的 API 參考資料和預覽版的 API 差異報告。 -
- -| Description | -Download / Checksums | -
|---|---|
| Android M Preview 2 Developer Docs |
- m-preview-2-developer-docs.zip - MD5: 1db6fff9c722b0339757e1cdf43663a8 - SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 - |
-
- 這些系統映像可以讓您在實體裝置上安裝預覽版的平台來進行測試。 -使用其中一個映像設定裝置,您就可以安裝並測試您的應用程式,瞭解應用程式在下一個版本的平台上表現如何。 -在裝置上安裝系統映像的過程中,會「移除裝置當中所有的資料」,因此您應該在安裝系統映像之前備份您的資料。 - - -
- -- 警告:下列 Android 系統映像是預覽版,可能隨時會有變更。使用這些系統映像受到「Android SDK 預覽版授權協議」的約束。 -Android 預覽版系統映像還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成損害。 - -預覽版的 Android 系統映像與出廠作業系統的測試不同,可能會導致您的手機和安裝的服務與應用程式停止運作。 - - -
- -| Device | -Download / Checksums | -
|---|---|
| Nexus 5 (GSM/LTE) "hammerhead" |
- hammerhead-MPZ79M-preview-b1f4bde4.tgz - MD5: 2ca9f18bf47a061b339bab52647ceb0d - SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 - |
-
| Nexus 6 "shamu" |
- shamu-MPZ79M-preview-e1024040.tgz - MD5: 24a2118da340b9afedfbdfc026f6ff81 - SHA-1: e10240408859d5188c4aae140e1c539130ba614b - |
-
| Nexus 9 "volantis" |
- volantis-MPZ79M-preview-9f305342.tgz - MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e - SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 - |
-
| Nexus Player "fugu" |
- fugu-MPZ79N-preview-fb63af98.tgz - MD5: e8d081137a20b66df595ee69523314b5 - SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 - |
-
- 如果要使用裝置映像進行測試,您必須先在相容的裝置上安裝映像。請依照下面的指示安裝系統映像: - -
- -- 注意:在您使用預覽版系統映像更新開發裝置之後,裝置就會透過無線 (OTA) 更新方式自動升級為下一個預覽版版本。 - -
- -- 如果您要解除安裝預覽版並將裝置還原成出廠規格,請至 -developers.google.com/android 並下載您要為裝置更新的映像。 -依照該頁面的指示,將映像更新到您的裝置。 - -
- -- 背景處理程序可能耗用大量的記憶體或電池電力。例如,隱含式廣播可能會啟動許多已註冊要接聽它的背景處理程序,即使那些處理程序可能不會執行太多工作。 - -這可能會對裝置效能與使用者體驗兩者造成實質影響。 - -
- -- 為減輕此問題,N Developer Preview 套用下列限制: - -
- -- Android 架構提供數種解決方案來減少這些隱含式廣播的需求。 -例如,{@link android.app.job.JobScheduler} 與 - {@code GcmNetworkManager} 提供的健全機制,可在符合指定條件 (例如,連線到非計量付費網路) 的情況下排程網路操作。 - - -您甚至可以使用 {@link android.app.job.JobScheduler} 對內容提供者的變更採取因應動作。{@link android.app.job.JobInfo} 物件會封裝 {@link android.app.job.JobScheduler} 用來排程您的工作的參數。 - - -符合工作的條件時,系統會在應用程式的 {@link android.app.job.JobService} 上執行此工作。 - -
- -- 在此文件中,我們將學習如何使用替代方法 (例如 - {@link android.app.job.JobScheduler}) 改寫您的應用程式以配合這些新的限制。 - -
- -- 目標為 N Developer Preview 的應用程式,如果在宣示說明中註冊以接收廣播,則不會收到 {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,而相依於此廣播的處理程序將不會啟動。 - -這可能會在裝置連線到非計量付費網路時,對想要接聽網路變更或執行大量網路活動的應用程式造成問題。 - -Android 架構中已經有數個可以避過此限制的解決方案,但是選擇適當的方法取決於您想要應用程式完成什麼工作。 - - -
- -- 注意:使用 - {@link android.content.Context#registerReceiver Context.registerReceiver()} - 註冊的 {@link android.content.BroadcastReceiver} 會在應用程式位於前景時繼續接收這些廣播。 -
- -- 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 類別建置 {@link android.app.job.JobInfo} 物件時,請套用 {@link - android.app.job.JobInfo.Builder#setRequiredNetworkType - setRequiredNetworkType()} 方法並傳遞 {@link android.app.job.JobInfo - JobInfo.NETWORK_TYPE_UNMETERED} 當做工作參數。 -下列程式碼範例會排程服務,讓它在裝置連線到非計量付費網路和收費時執行: - - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-
-
-- 符合您工作的條件時,您的應用程式會收到一個回呼,在指定的 {@code JobService.class} 中執行{@link android.app.job.JobService#onStartJob onStartJob()} 方法。 - -如果要檢視更多 {@link - android.app.job.JobScheduler} 實作的範例,請參閱 JobScheduler 範例應用程式。 -
- -- 使用 GMSCore 服務且目標為 Android 5.0 (API 層級 21) 或更低的應用程式,可以使用 - {@code GcmNetworkManager} 並指定 {@code Task.NETWORK_STATE_UNMETERED}。 - -
- -- 在前景執行的應用程式,只要使用註冊的 {@link - android.content.BroadcastReceiver} ,仍然可以接聽 {@code - CONNECTIVITY_CHANGE}。然而,{@link - android.net.ConnectivityManager} API 提供更建全的方法,只在符合指定的網路條件時才要求回呼。 - -
- -- {@link android.net.NetworkRequest} 物件以 {@link android.net.NetworkCapabilities} 的方式定義網路回呼的參數。 -您使用 {@link - android.net.NetworkRequest.Builder NetworkRequest.Builder} 類別建立{@link android.net.NetworkRequest} 物件。接著 {@link - android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, - android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} - 會將 {@link android.net.NetworkRequest} 物件傳遞到系統。 -符合網路條件時,應用程式會收到回呼,執行它的 {@link - android.net.ConnectivityManager.NetworkCallback} 類別中定義的 - {@link android.net.ConnectivityManager.NetworkCallback#onAvailable - onAvailable()} 方法。 - -
- -- 應用程式會持續收到回呼,直到應用程式結束或呼叫 - {@link android.net.ConnectivityManager#unregisterNetworkCallback - unregisterNetworkCallback()} 才停止。 -
- -- 在 N Developer Preview 中,應用程式無法傳送或接收 {@link - android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link - android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。在必須喚醒數個應用程式來處理新的影像或視訊時,此限制有助於降低對效能與使用者體驗的影響。 - -N Developer Preview 擴充 {@link android.app.job.JobInfo} 與 {@link - android.app.job.JobParameters} 來提供替代解決方案。 - -
- -- 為了在內容 URI 變更時觸發工作,N Developer Preview 使用下列方法擴充 {@link android.app.job.JobInfo} API: - -
- -- 注意:{@code TriggerContentUri()} 無法與 {@link android.app.job.JobInfo.Builder#setPeriodic - setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted - setPersisted()} 結合使用。 -為了持續監視內容變更,請在應用程式的 {@link - android.app.job.JobService} 完成處理最近的回呼之前,排程新的 - {@link android.app.job.JobInfo}。 -
- -- 下列範例程式碼會排程一個工作,在系統回報內容 URI {@code MEDIA_URI} 變更時觸發該工作: - -
- -
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-
-- 當系統回報指定內容 URI 中有變更時,您的應用程式會收到一個回呼,而且會傳遞一個 {@link android.app.job.JobParameters} 物件到 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。 - - - -
- -- N Developer Preview 也擴充 {@link android.app.job.JobParameters} 以允許您的應用程式接收有關內容授權單位與觸發工作之 URI 的實用資訊: - - -
- -- 下列範例程式碼會覆寫 {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} 方法,並記錄觸發工作的內容授權單位與 URI: - -
- -
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-
-
-- 最佳化您的應用程式,讓它可以在低記憶體裝置上或低記憶體狀況下執行,這樣可以改進效能與使用者體驗。 -移除背景服務上的相依性與靜態註冊的隱含式廣播接收器,有助於讓您的應用程式在此類裝置上執行得更順暢。 - -雖然 N Developer Preview 採取一些步驟來減少一些此類問題,但是還是建議您最佳化您的應用程式,讓它完全不必使用這些背景處理程序。 - - - -
- -- N Developer Preview 引進一些額外的 Android Debug Bridge (ADB) 命令,您可以使用這些命令測試在那些背景處理程序停用時的應用程式行為: - -
- -
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-
-
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-
- - ICU4J 是廣為使用的一組開放原始碼 Java 程式庫,為軟體應用程式提供 Unicode 與全球化支援。 -Android N 在 Android 架構中公開一個 ICU4J API 的子集,供應用程式開發人員在 {@code android.icu} 套件下使用。 - -這些 API 使用裝置上呈現的當地語系化資料。 -因此,您可以不用將 ICU4J 程式庫編譯到 APK 而降低 APK 的使用;相反地,您只需在架構中呼叫這些程式庫 - -(在此情況中,您可能要提供多個版本的 APK,這樣執行低於 Android N 之 Android 版本的使用者即可下載包含 ICU4J 程式庫的應用程式版本)。 - - - -
- -- 此文件一開始先提供支援這些程式庫所需之最低 Android API 層級的一些基本資訊。 -接著它說明 Android 特定實作 ICU4J 的相關須知事項。 -最後,它告訴您如何在 Android 架構中使用 ICU4J API。 - -
- -
- Android N 透過
- android.icu 套件 (而非 com.ibm.icu) 公開一個 ICU4J API 的子集。Android 架構可能因為各種原因選擇不公開 ICU4J API;例如,Android N 沒有公開一些已過時的 API 或 ICU 團隊尚未宣布為穩定的 API。
-
-
-
-因為 ICU 團隊將來會將 API 視為過時,所以 Android 也會將這些 API 標示為已過時但繼續包含它們。
-
-
表 1. Android N 中使用的 ICU 與 CLDR 版本。 -
-| Android API 層級 | -ICU 版本 | -CLDR 版本 | -
|---|---|---|
| Android N | -56 | -28 | -
以下是一些必須注意的重要事項:
- -
- 如果您已經在應用程式中使用 ICU4J API,而且
- android.icu API 符合您的需求,那麼遷移到架構 API 需要您將 Java 匯入從 com.ibm.icu 變更為 android.icu。
-
-接著您可以從 APK 移除您自己的 ICU4J 檔案。
-
-
- 注意:ICU4J 架構 API 使用 {@code android.icu} 命名空間而非 {@code com.ibm.icu}。 -這是為了避免包含自己的 {@code com.ibm.icu} 程式庫的 APK 中發生命名空間衝突。 - -
- -
- java 與 android 套件中的一些類別包含可在 ICU4J 中找到的同等項目。
-然而,ICU4J 通常為標準與語言提供更廣泛的支援。
-
-
以下提供一些快速入門範例:
-| 類別 | -替代項目 | -
|---|---|
java.lang.Character |
-android.icu.lang.UCharacter |
-
java.text.BreakIterator |
-android.icu.text.BreakIterator |
-
java.text.DecimalFormat |
-android.icu.text.DecimalFormat |
-
java.util.Calendar |
-
-android.icu.util.Calendar |
-
android.text.BidiFormatter
- |
-android.icu.text.Bidi
- |
-
android.text.format.DateFormat
- |
-android.icu.text.DateFormat
- |
-
android.text.format.DateUtils |
-android.icu.text.DateFormat
-android.icu.text.RelativeDateTimeFormatter
- |
-
- ICU4J 是根據 ICU 授權而發行。如需詳細資料,請參閱 ICU 使用者指南。 - -
diff --git a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd deleted file mode 100644 index 5570b4dbb51e5..0000000000000 --- a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd +++ /dev/null @@ -1,217 +0,0 @@ -page.title=語言和地區設定 -page.tags=androidn -page.image=images/cards/card-nyc_2x.jpg - -@jd:body - -Android N 增強對多語言使用者的支援,讓他們可在設定中選取多個地區設定。 -Android N 藉由擴充支援的地區設定數量和改變系統解析資源的方式來提供多語言支援。 - -解析資源的新方法更加健全,而且它的設計是與現有 APK 相容,但是您應該特別注意任何未預期的行為。 - -例如,您應該進行測試,確認應用程式預設在預期的語言。 -此外,如果您的應用程式支援多個語言,則應該確保這項支援也能如預定方式運作。 - -最後,您應該試著確認應用程式可以順暢地處理沒有明確設計要支援的語言。 -
- -本文件一開始會先說明在 Android N 之前的資源解析策略。接下來,它會描述 Android N 的已改進的資源解析策略。 - -最後,它會說明如何利用擴充的地區設定數量來支援更多的多語言使用者。 -
- -在 Android N 之前,Android 並不總能成功地對應應用程式與系統地區設定。 -舉例來說,假設您應用程式的預設語言的是 US English,但是它的 {@code es_ES} 資源檔案中也包含當地語言化的西班牙文字串。 - -
-當您的 Java 程式碼參考這些字串時,它會以下列方式來解析字串語言: -
-出現這些解析問題的原因,是如果系統找不到符合的項目,它會剝除地區設定中的國家/地區代碼。 -例如:
--表 1. 沒有完全符合的地區設定的資源解析。 -
-| 使用者設定 | -應用程式資源 | -資源解析 | -
|---|---|---|
| fr_CH | -
-預設 (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-嘗試 fr_CH => 失敗 -嘗試 fr => 失敗 -使用預設 (en) - |
-
在此例中,系統會顯示英文字串,而不知道使用者是否了解英文。 -現在這種行為相當常見。 -Android N 可以大幅降低出現這類結果的頻率。 -
- -Android N 帶來更健全的資源解析,而且會自動發現更佳的遞補。
-然而,為了加速解析和改進維護能力,您應該將資源存放在最常用的父系語言中。
-
- 例如,如果之前將西班牙文資源存放在 {@code es-US} 目錄,請將它們移到包含拉丁美洲西班牙文的 {@code es-419} 目錄。
-
- 同樣地,如果在名為 {@code en-GB} 的資料夾中包含資源字串,請將資料夾重新命名為 {@code en-001} (國際英文),因為 en-GB 字串的最常見父系為 {@code en-001}。
-
-
- 下列範例說明為什麼這些做法可改善資源解析的效能和可靠性。
-
在 Android N 中,表 1 中所述的案例會用不同的方式解析: -
- --表 2. 沒有完全符合的地區設定的已改進解析策略。 -
-| 使用者設定 | -應用程式資源 | -資源解析 | -
|---|---|---|
|
-
-預設 (en) -de_DE -es_ES -fr_FR -it_IT - |
-
-嘗試 fr_CH => 失敗 -嘗試 fr => 失敗 -嘗試 fr 的子項 => fr_FR -使用 fr_FR - |
-
現在使用者會取得法文資源而非英文資源。這個範例也顯示為什麼在 Android N 中,您應該將法文字串存放在 {@code fr} 而非 {@code fr_FR} 中。以下是比對最接近父系語言的動作步驟,這些步驟可讓解析更快、更容易預測。 - - -
- -除了這個已改進的解析邏輯之外,現在 Android 還提供更多使用者語言供您選擇。 -讓我們指定義大利文做為額外的使用者語言但應用程式不支援法文的情況,再試一次上述的範例。 -
- --表 3. 應用程式只比對到符合使用者第二個慣用地區設定時的資源解析。 -
-| 使用者設定 | -應用程式資源 | -資源解析 | - -
|---|---|---|
|
-
-預設 (en) -de_DE -es_ES -it_IT - |
-
-嘗試 fr_CH => 失敗 -嘗試 fr => 失敗 -嘗試 fr 的子項 => 失敗 -嘗試 it_CH => 失敗 -嘗試 it => 失敗 -嘗試 it 的子項 => it_IT -使用 it_IT - |
-
-
即使應用程式不支援法文,但是使用者仍然取得他們了解的語言。 -
- - -Android N 增加了新的 API {@code LocaleList.GetDefault()} -,讓應用程式直接查詢使用者指定的語言清單。這個 API 可讓您建立更精細的應用程式行為,也能更好的最佳化內容的顯示方式。 - -例如,搜尋可以根據使用者的設定以多語言顯示結果。 -瀏覽器應用程式可以避免提供以使用者已知語言來翻譯網頁的選項,鍵盤應用程式可以自動啟用所有適當的版面配置。 - -
- -直到 Android 6.0 (API 層級 23),Android 還只支援許多常用語言 (en、es、ar、fr、ru) 的一或兩個地區設定。 - -因為每種語言只有幾種變體,所以應用程式不用在資源檔案中將一些數字和日期儲存為硬式編碼字串。 - -然而,隨著 Android 擴充了支援的地區設定之後,即使在單一地區設定中,日期、時間、貨幣和類似資訊的格式可能會有顯著的差異。 - - -硬式編碼您的格式會對使用者產生令人混淆的體驗。 -因此,針對 Android N 進行開發時,請務必使用格式子,而不要硬式編碼數字和日期字串。 -
- -最主要的範例是阿拉伯文,它對 Android N 的支援從一個 {@code ar_EG} 擴充到 27 個阿拉伯地區設定。 -這些地區設定可以共用大多數的資源,但是有些地區設定慣用 ASCII 數字,而其他地區設定慣用當地數字。 -例如,在您想要建立一個包含數字變數的句子時,例如 "Choose a 4 digit pin",請使用如下所示的格式設定: - -
- -format(locale, "Choose a %d-digit PIN", 4)diff --git a/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd deleted file mode 100644 index 5ebcebb2a5a26..0000000000000 --- a/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd +++ /dev/null @@ -1,328 +0,0 @@ -page.title=通知 -page.tags=notifications -helpoutsWidget=true -page.image=/preview/images/notifications-card.png - -trainingnavtop=true - -@jd:body - - - -
Android N 引進數個新 API,允許應用程式張貼相當顯眼且互動式的通知。 -
- -Android N 擴充現有的 {@link android.support.v4.app.RemoteInput} -通知 API,支援在手機上內嵌回覆。此功能允許使用者從通知欄快速回應,而不必造訪您的應用程式。 -
- -- Android N 也允許您將類似的通知結合成單一通知。 -Android N 使用現有的 {@link - android.support.v4.app.NotificationCompat.Builder#setGroup - NotificationCompat.Builder.setGroup()} 方法來實現此目標。使用者能擴充每個通知,並可個別從通知欄執行動作,例如回覆和關閉每一個通知。 - - -
- -最後,Android N 還新增 API 讓您在應用程式的自訂通知檢視中利用系統的裝飾。 -這些 API 可協助確保通知檢視和標準範本的呈現方式一致。 - -
- -本文件將強調說明一些重要變更,您應該在應用程式中使用新的通知功能時納入考量。 -
- -使用 Android N 中的直接回覆功能,使用者可直接在通知介面內快速回應文字訊息或更新工作清單。
-
-在手持式裝置上,內嵌回覆動作看起來就像是通知附加的額外按鈕。
-當使用者透過鍵盤回覆時,系統會在您為通知動作指定的意圖附加文字回應,然後將意圖傳送給您的手持裝置應用程式。
-
-
-
-
-
-
-
- 圖 1. Android N 新增「回覆」 - 操作按鈕. -
- -建立支援直接回覆的通知動作: -
- --// Key for the string that's delivered in the action's intent -private static final String KEY_TEXT_REPLY = "key_text_reply"; -String replyLabel = getResources().getString(R.string.reply_label); -RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); --
addRemoteInput() 將 {@link android.support.v4.app.RemoteInput}
- 物件附加到動作。
-
--// Create the reply action and add the remote input -Notification.Action action = - new Notification.Action.Builder(R.drawable.ic_reply_icon, - getString(R.string.label), replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); --
-// Build the notification and add the action -Notification notification = - new Notification.Builder(mContext) - .setSmallIcon(R.drawable.ic_message) - .setContentTitle(getString(R.string.title)) - .setContentText(getString(R.string.content)) - .addAction(action)) - .build(); - -// Issue the notification -NotificationManager notificationManager = - NotificationManager.from(mContext); -notificationManager.notify(notificationId, notification); - --
當使用者觸發通知動作時,系統會提示使用者輸入回應。 -
- -
-- 圖 2. 使用者從通知欄輸入文字。 -
- -從您在回覆動作的意圖中所宣告動作的通知介面接收使用者輸入: -
--Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); -- -
下列程式碼片段說明方法如何從組合中擷取輸入文字: -
- -
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-
-
-應用程式可以套用邏輯,決定擷取文字時要採取的動作。對於互動式應用程式 (像是聊天),要在通知本身提供更多內容 (例如,多行聊天歷程記錄,包括使用者自己的訊息),使用者才能適當回應。當使用者透過 {@link android.support.v4.app.RemoteInput} 回應時,請使用 {@code setRemoteInputHistory()} - 方法在回覆歷程記錄中包括文字。 - - - - - -
- -Android N 提供開發人員呈現通知佇列的全新方式: - 整合式通知。這類似於 Android Wear - 中的通知堆疊。 -例如,若您的應用程式會為接收的訊息建立通知,收到多個訊息時,會將通知結合成單一群組。 - -您可以使用現有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup -Builder.setGroup()} 方法,結合類似的通知。 -
- -- 通知群組會對其中所含的通知強制施行階層。 - 階層的最上方是上層通知,顯示該群組的摘要資訊。 -使用者可以逐漸擴充通知群組,而系統會在使用者更深入探查時顯示更多資訊。 - -當使用者擴充組合時,系統會為所有子通知揭露更多資訊。當使用者擴充當中的其中一個通知時,系統會顯示該通知的所有內容。 - - -
- -
-- 圖 3. 使用者可以逐漸擴充通知群組。 - -
- -若要了解如何將通知新增至群組,請參閱將每個通知新增至群組。 - -
- - -本節提供使用通知群組時的指導方針,而不是舊版 Android 平台可用的 {@link android.app.Notification.InboxStyle InboxStyle} -通知。 - -
- -只有當您的使用案例與下列條件全部相符時,才應該使用通知群組: -
- -良好的通知群組使用案例範例包括:顯示一連串傳入訊息的訊息傳送應用程式,或顯示一系列所接收電子郵件清單的電子郵件應用程式。 - -
- --建議使用的單一通知案例範例包括:來自單人的個別訊息,或以清單呈現單行的文字項目。 - -您可以使用 -({@link android.app.Notification.InboxStyle InboxStyle} 或 -{@link android.app.Notification.BigTextStyle BigTextStyle}) 來完成。 - -
- -- 應用程式應一律張貼群組摘要,即使群組當中只包含單一子項。 -如果只包含單一通知,系統會抑制摘要,並直接顯示子通知。 -這可確保當使用者滑動離開群組子項時,系統能提供一致的體驗。 - - -
- -- 注意:本版 Android N 還不會抑制包含單一子通知的通知群組摘要。 -更新的 Android N 版本才會新增此功能。 - -
- -雖然系統通常會將子通知顯示為群組,但您可以設定子通知,暫時顯示為抬頭通知 -。 - -此功能允許立即存取最新的子通知和與它相關的動作,因此特別實用。 - -
- - -- 自從 Android 5.0 (API 層級 21) 支援 Android Wear 裝置以來,通知群組與遠端輸入都是 {@link - android.app.Notification} API 的一部分。 -如果您已使用這些 API 建置通知,您必須採取的動作只有確認應用程式行為符合上述的指導方針,以及考慮實作 {@code - setRemoteInputHistory()}。 - - -
- -- 為了支援回溯相容性,相同的 API 可與支援程式庫的 {@link android.support.v4.app.NotificationCompat} - 類別搭配使用,讓您建置能在舊版 Android 上運作的通知。 - -在手持裝置與平板電腦上,使用者只會看到摘要通知,應用程式應仍要為群組的完整資訊內容提供收件匣樣式或同等的通知呈現方式。 - -雖然 Android - Wear 裝置即使在較舊的平台層級上,也允許使用者查看所有子通知,但不論 API 層級為何,您都應該建置子通知。 - - -
- -從 Android N 開始,您可以自訂通知檢視,也仍然可以取得系統裝飾,例如通知標題、動作及可擴充的版面配置。 - -
- -若要啟用此功能,Android N 新增下列 API 供您設定自訂檢視的樣式: -
- -若要使用這個新 API,請呼叫 {@code setStyle()} 方法,再傳遞給想要的自訂檢視樣式。 -
- -此程式碼片段顯示如何使用 -{@code DecoratedCustomViewStyle()} 方法,建構自訂通知物件。
- --Notification noti = new Notification.Builder() - .setSmallIcon(R.drawable.ic_stat_player) - .setLargeIcon(albumArtBitmap)) - .setCustomContentView(contentView); - .setStyle(new Notification.DecoratedCustomViewStyle()) - .build(); - -