From 4fd1a573eb0724251b5c0986c7f0ae7b36d52369 Mon Sep 17 00:00:00 2001 From: David Friedman Date: Mon, 29 Jun 2015 16:03:08 -0700 Subject: Docs: Localized M-Preview pages Bug: 21789313 Change-Id: Ifb4a45a65acd7b786e05bdf7b7dd86698093fbdf --- docs/html-intl/intl/es/preview/api-overview.jd | 521 ++++++++++++++ docs/html-intl/intl/es/preview/behavior-changes.jd | 403 +++++++++++ .../es/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/es/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/ja/preview/api-overview.jd | 521 ++++++++++++++ docs/html-intl/intl/ja/preview/behavior-changes.jd | 402 +++++++++++ .../ja/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/ja/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/ko/preview/api-overview.jd | 521 ++++++++++++++ docs/html-intl/intl/ko/preview/behavior-changes.jd | 402 +++++++++++ .../ko/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/ko/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/pt-br/preview/api-overview.jd | 521 ++++++++++++++ .../intl/pt-br/preview/behavior-changes.jd | 402 +++++++++++ .../pt-br/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ .../pt-br/preview/images/direct-share-screen.png | Bin 0 -> 57767 bytes .../preview/images/direct-share-screen_2x.png | Bin 0 -> 195946 bytes .../pt-br/preview/images/fingerprint-screen.png | Bin 0 -> 39082 bytes .../pt-br/preview/images/fingerprint-screen_2x.png | Bin 0 -> 127518 bytes .../preview/images/m-preview-timeline-crop.png | Bin 0 -> 10205 bytes .../pt-br/preview/images/m-preview-timeline.png | Bin 0 -> 13002 bytes .../preview/images/perf-test-frame-latency.png | Bin 0 -> 161802 bytes .../pt-br/preview/images/perf-test-framestats.png | Bin 0 -> 7785 bytes .../intl/pt-br/preview/images/text-selection.gif | Bin 0 -> 212462 bytes .../pt-br/preview/images/work-profile-screen.png | Bin 0 -> 39183 bytes .../preview/images/work-profile-screen_2x.png | Bin 0 -> 126304 bytes docs/html-intl/intl/pt-br/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/ru/preview/api-overview.jd | 521 ++++++++++++++ docs/html-intl/intl/ru/preview/behavior-changes.jd | 402 +++++++++++ .../ru/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/ru/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/zh-cn/preview/api-overview.jd | 521 ++++++++++++++ .../intl/zh-cn/preview/behavior-changes.jd | 402 +++++++++++ .../zh-cn/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/zh-cn/preview/overview.jd | 362 ++++++++++ docs/html-intl/intl/zh-tw/preview/api-overview.jd | 521 ++++++++++++++ .../intl/zh-tw/preview/behavior-changes.jd | 402 +++++++++++ .../zh-tw/preview/features/runtime-permissions.jd | 794 +++++++++++++++++++++ docs/html-intl/intl/zh-tw/preview/overview.jd | 362 ++++++++++ 39 files changed, 14554 insertions(+) create mode 100644 docs/html-intl/intl/es/preview/api-overview.jd create mode 100644 docs/html-intl/intl/es/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/es/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/es/preview/overview.jd create mode 100644 docs/html-intl/intl/ja/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ja/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ja/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/ja/preview/overview.jd create mode 100644 docs/html-intl/intl/ko/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ko/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ko/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/ko/preview/overview.jd create mode 100644 docs/html-intl/intl/pt-br/preview/api-overview.jd create mode 100644 docs/html-intl/intl/pt-br/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/text-selection.gif create mode 100644 docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png create mode 100644 docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png create mode 100644 docs/html-intl/intl/pt-br/preview/overview.jd create mode 100644 docs/html-intl/intl/ru/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ru/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ru/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/ru/preview/overview.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/api-overview.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/overview.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/api-overview.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/overview.jd (limited to 'docs') diff --git a/docs/html-intl/intl/es/preview/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd new file mode 100644 index 0000000..ddd34db --- /dev/null +++ b/docs/html-intl/intl/es/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=Información general de la API +page.keywords=versión preliminar,sdk,compatibilidad +page.tags=recursos de la versión preliminar, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

M Developer Preview le brinda una perspectiva avanzada de la próxima versión de la plataforma Android, que ofrece nuevas características para usuarios y desarrolladores de aplicaciones. + + En este documento, se brinda una introducción sobre las API más distinguidas.

+ +

M Developer Preview está destinado a usuarios desarrolladores principiantes y evaluadores. + Si le interesa influenciar la dirección del marco de trabajo de Android, +pruebe M Developer Preview y envíenos sus comentarios. + +

+ +

Advertencia: No publique las aplicaciones que utilizan M Developer Preview en la tienda de Google Play. +

+ +

Nota: Este documento, a menudo, hace referencia a clases y métodos que aún no cuentan con materiales de referencia disponibles en developer.android.com. + Estos elementos de API tienen el formato {@code code style} en este documento (sin hipervínculos). + Para obtener la documentación preliminar de la API para estos elementos, descargue la referencia de la versión preliminar. +

+ +

Importantes cambios en los comportamientos

+ +

Si publicó anteriormente una aplicación para Android, tenga en cuenta que su aplicación podría verse afectada por los cambios en la plataforma. +

+ +

Consulte la sección Cambios en los comportamientos para obtener información detallada.

+ +

Vinculación de la aplicación

+

Esta versión preliminar mejora el sistema de intentos de Android al proporcionar una vinculación más sólida de la aplicación. Esta característica le permite asociar una aplicación con un dominio web propio. + Según esta asociación, la plataforma puede determinar la aplicación predeterminada que se debe utilizar para controlar un vínculo web en particular y omitir el paso de pedirles a los usuarios que seleccionen una aplicación. Para aprender a implementar esta característica, consulte la sección +Vinculación de la aplicación. + + + +

Copia de seguridad automática para aplicaciones

+

Ahora, el sistema realiza restauraciones y copias de seguridad de datos completas y automáticas para las aplicaciones. Este comportamiento se habilita de forma predeterminada para las aplicaciones que tienen como destino la versión preliminar de Android M; usted no necesita agregar ningún código adicional. + Si los usuarios eliminan sus cuentas de Google, también se eliminarán sus datos de copias de seguridad. + Para obtener información sobre cómo funciona esta característica y cómo configurar qué elementos incluir en la copia de seguridad del sistema de archivo, consulte la sección +Copia de seguridad automática para aplicaciones. +

+ +

Autenticación

+

Esta versión preliminar ofrece nuevas API para permitirle autenticar usuarios al usar escaneos de huellas dactilares en los dispositivos compatibles y verificar cuán reciente es la última autenticación del usuario al utilizar un mecanismo de desbloqueo de dispositivos (como una contraseña de pantalla de bloqueo). + + Use estas API junto con el sistema Android Keystore. +

+ +

Autenticación por huellas dactilares

+ +

Para autenticar usuarios mediante el escaneo de huellas dactilares, obtenga una instancia de la nueva clase +{@code android.hardware.fingerprint.FingerprintManager} y llame al método +{@code FingerprintManager.authenticate()}. Su aplicación se debe ejecutar en un dispositivo compatible con un sensor de huellas dactilares. + Debe implementar la interfaz de usuario para el flujo de autenticación por huellas dactilares en su aplicación y debe utilizar el ícono de huella dactilar estándar de Android en la UI. El ícono de huella dactilar de Android ({@code c_fp_40px.png}) se incluye en la +aplicación de muestra. Si está desarrollando múltiples aplicaciones que utilizan la autenticación por huellas dactilares, tenga en cuenta que cada aplicación debe autenticar la huella dactilar del usuario de manera independiente. + + + +

+ +

Para utilizar esta característica en su aplicación, primero agregue el permiso {@code USE_FINGERPRINT} en su manifiesto. +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

Para ver cómo una aplicación implementa la autenticación por huellas dactilares, consulte la sección + +Ejemplo de diálogo de huella dactilar.

+ +

Si está evaluando esta característica, siga estos pasos:

+
    +
  1. Instale la Revisión de herramientas del SDK de Android versión 24.3, si todavía no la instaló.
  2. +
  3. Registre una huella dactilar nueva en el emulador; para hacerlo, vaya a +Settings > Security > Fingerprint, luego siga las instrucciones de registro.
  4. +
  5. Use un emulador para emular eventos táctiles de huellas dactilares con el siguiente comando. + Utilice el mismo comando para emular eventos táctiles de huellas dactilares en la pantalla de bloqueo o en su aplicación. + +
    +adb -e emu finger touch <finger_id>
    +
    +

    En Windows, posiblemente tenga que ejecutar {@code telnet 127.0.0.1 <emulator-id>} seguido de + {@code finger touch <finger_id>}. +

    +
  6. +
+ +

Confirmar credencial

+

Su aplicación puede autenticar usuarios según el tiempo que haya pasado desde que desbloquearon su dispositivo por última vez. Esta característica evita que los usuarios tengan que recordar contraseñas adicionales específicas de la aplicación y elimina la necesidad de que usted tenga que implementar su propia interfaz de usuario de autenticación. + + Su aplicación debe utilizar esta característica junto con una implementación de clave pública o secreta para la autenticación del usuario. +

+ +

Para definir la duración del tiempo de espera en el que se puede volver a usar la misma clave después de que un usuario se haya autenticado correctamente, llame al nuevo método +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} +cuando configure {@link javax.crypto.KeyGenerator} o +{@link java.security.KeyPairGenerator}. + Esta característica actualmente funciona para operaciones criptográficas simétricas. +

+ +

Evite mostrar el diálogo de nueva autenticación de forma excesiva: sus aplicaciones deben intentar utilizar el objeto criptográfico primero y, si se agota el tiempo de espera, deben usar el método +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} +para volver a autenticar el usuario dentro de su aplicación. + +

+ +

Para ver cómo la aplicación implementa esta característica, consulte la sección + +Ejemplo de cómo confirmar la credencial.

+ +

Compartir de forma directa

+ + + +

Esta versión preliminar le proporciona API para que la acción de compartir sea intuitiva y rápida para los usuarios. Ahora, puede definir destinos para compartir de forma directa que inician una actividad específica en su aplicación. Estos destinos para compartir de forma directa se exponen a los usuarios a través del menú Share. + + Esta característica les permite a los usuarios compartir contenido con los destinos, como contactos, dentro de otras aplicaciones. + Por ejemplo, el destino para compartir de forma directa podría iniciar una actividad en otra aplicación de red social, lo que le permite al usuario compartir contenido directamente con una comunidad o un amigo específicos de esa aplicación. + +

+ +

Para habilitar destinos para compartir de forma directa, debe definir una clase que extienda el +{@code android.service.}
+Clase {@code chooser.ChooserTargetService}. Declare su +{@code ChooserTargetService} en el manifiesto. En esa declaración, especifique el permiso +{@code BIND_CHOOSER_TARGET_SERVICE} y un filtro de intento con la acción +{@code SERVICE_INTERFACE}.

+

El ejemplo a continuación muestra de qué manera podría declarar {@code ChooserTargetService} en su manifiesto. +

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

Para cada actividad que desee exponer a {@code ChooserTargetService}, agregue un elemento +{@code <meta-data>} con el nombre +{@code "android.service.chooser.chooser_target_service"} en el manifiesto de su aplicación. +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

Interacciones de voz

+

+Esta versión preliminar proporciona una nueva API de interacción de voz que, junto con las +acciones de voz, +le permite compilar experiencias de conversaciones de voz en sus aplicaciones. Llame al método +{@code android.app.Activity.isVoiceInteraction()} para determinar si su actividad se inició en respuesta a una acción de voz. + De ser así, su aplicación puede utilizar la clase +{@code android.app.VoiceInteractor} para solicitar una confirmación de voz por parte del usuario, realizar una selección de una lista de opciones y mucho más. + Para obtener más información sobre cómo implementar acciones de voz, consulte el +sitio para desarrolladores de acciones de voz. +

+ +

Asistencia de API

+

+Esta versión preliminar ofrece una nueva manera para que los usuarios interactúen con sus aplicaciones a través de un asistente. Si desea utilizar esta característica, el usuario debe habilitar el asistente para utilizar el contexto actual. + Una vez habilitado, para invocar al asistente dentro de cualquier aplicación, el usuario debe mantener presionado el botón Home. +

+

Su aplicación puede optar por no compartir el contexto actual con el asistente al configurar la marca +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Además del conjunto de información estándar que la plataforma le pasa al asistente, su aplicación puede compartir información adicional usando la nueva clase {@code android.app.Activity.AssistContent}. + +

+ +

Para proporcionarle al asistente contexto adicional desde su aplicación, siga estos pasos:

+ +
    +
  1. Implemente la interfaz {@link android.app.Application.OnProvideAssistDataListener}.
  2. +
  3. Registre esta escucha usando +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.
  4. +
  5. Para proporcionar información contextual específica de la actividad, invalide la devolución de llamada +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} +y, opcionalmente, la nueva devolución de llamada {@code Activity.onProvideAssistContent()}. +
+ +

Notificaciones

+

Esta versión preliminar agrega los siguientes cambios de API para las notificaciones:

+ + +

Compatibilidad del lápiz Bluetooth

+

Esta versión preliminar ofrece soporte mejorado para las entradas de usuarios que utilizan un lápiz Bluetooth. Los usuarios pueden sincronizar y conectar un lápiz Bluetooth compatible con su teléfono o tablet. + Mientras está conectado, la información de posición de la pantalla táctil se fusiona con la información de los botones y la presión del lápiz para proporcionar una mayor variedad de expresiones que al utilizar la pantalla táctil solamente. + + Su aplicación puede obedecer cuando se presiona el botón del lápiz y cuando se realizan acciones secundarias al registrar las nuevas devoluciones de llamadas +{@code View.onStylusButtonPressListener} y {@code GestureDetector.OnStylusButtonPressListener} +en su actividad. +

+ +

Utilice las constantes y los métodos {@link android.view.MotionEvent} para detectar las interacciones del botón del lápiz: +

+ + +

Exploración mejorada de Bluetooth de bajo consumo

+

+Si su aplicación realiza exploraciones de Bluetooth de bajo consumo, puede utilizar el nuevo método +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} para especificar que usted desea que las devoluciones de llamadas se notifiquen solo cuando se encuentre por primera vez un paquete de anuncio que coincida con el conjunto +{@link android.bluetooth.le.ScanFilter} y cuando no se vea durante un período determinado. + + Este enfoque de exploración es más eficaz en cuanto al consumo de energía que la que se proporciona en la versión anterior de la plataforma. + +

+ +

Soporte de Hotspot 2.0 versión 1

+

+Esta versión preliminar agrega soporte para la especificación de Hotspot 2.0 versión 1 en los dispositivos Nexus 6 y Nexus 9. Para proveer credenciales de Hotspot 2.0 en su aplicación, use los métodos nuevos de la clase +{@link android.net.wifi.WifiEnterpriseConfig}, como {@code setPlmn()} y +{@code setRealm()}. + En el objeto {@link android.net.wifi.WifiConfiguration}, puede configurar los campos +{@link android.net.wifi.WifiConfiguration#FQDN} y {@code providerFriendlyName}. La nueva propiedad {@code ScanResult.PasspointNetwork} indica si una red detectada representa un punto de acceso de Hotspot 2.0. + + +

+ +

Modo de pantalla 4K

+

Ahora, la plataforma permite que las aplicaciones soliciten que la resolución de pantalla se actualice a una representación 4K en el hardware compatible. + Para consultar la resolución física actual, use las nuevas API +{@code android.view.Display.Mode}. Si la UI se establece en una resolución lógica más baja y se aumenta a una resolución física más alta, tenga en cuenta que la resolución física que devuelve el método +{@code Display.Mode.getPhysicalWidth()} puede ser diferente de la resolución lógica informada por {@link android.view.Display#getSize(android.graphics.Point) getSize()}. + +

+ +

Puede pedirle al sistema que cambie la resolución física en su aplicación mientras se ejecuta y, para ello, debe configurar la propiedad {@code WindowManager.LayoutParams.preferredDisplayModeId} de la ventana de su aplicación. + Esta característica resulta útil si desea cambiar a la resolución de pantalla 4K. + Mientras se encuentra en el modo de pantalla 4K, la UI se continúa representando en la resolución original (como 1080p) y se aumenta a 4K, pero los objetos +{@link android.view.SurfaceView} pueden mostrar contenido en la resolución nativa. +

+ +

ColorStateLists para poder aplicar temas

+

Ahora, los atributos de tema se admiten en +{@link android.content.res.ColorStateList} para los dispositivos que ejecutan la versión preliminar de Android M. Los métodos +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} y +{@link android.content.res.Resources#getColor(int) getColor()} se dejaron de usar. Si desea llamar a estas API, en su lugar, llame a los métodos nuevos {@code Context.getColorStateList()} o +{@code Context.getColor()}. + Estos métodos también se encuentran disponibles en la biblioteca AppCompat v4 vía {@link android.support.v4.content.ContextCompat}. +

+ +

Características de audio

+ +

Esta versión preliminar agrega mejoras al procesamiento de audio en Android, lo que incluye lo siguiente:

+ + +

Características de video

+

Esta versión preliminar agrega nuevas capacidades a las API de procesamiento de video, entre ellas, las siguientes:

+ + +

Características de la cámara

+

Esta versión preliminar incluye las siguientes API nuevas para acceder a la luz de flash de la cámara y para el reprocesamiento de imágenes de la cámara: +

+ +

API para luz de flash

+

Si un dispositivo de cámara cuenta con una unidad de flash, puede llamar al método {@code CameraManager.setTorchMode()} +para activar o desactivar el modo linterna de una unidad de flash sin abrir el dispositivo de cámara. La aplicación no tiene propiedad exclusiva de la unidad de flash ni del dispositivo de cámara. + El modo linterna se desactiva y deja de estar disponible cuando la cámara no se encuentra disponible o cuando otros recursos de la cámara que mantienen la linterna encendida dejan de estar disponibles. + + Otras aplicaciones también pueden llamar a {@code setTorchMode()} +para desactivar el modo linterna. Cuando se cierra la última aplicación que activó el modo linterna, este modo se desactiva. +

+ +

Si desea registrar una devolución de llamada para recibir una notificación sobre el estado del modo linterna, llame al método +{@code CameraManager.registerTorchCallback()}. La primera vez que se registra la devolución de llamada, se llama inmediatamente con el estado del modo linterna de todos los dispositivos de cámara que se conocen actualmente y que tengan una unidad de flash. + + Si el modo linterna se activa o desactiva correctamente, se invoca al método +{@code CameraManager.TorchCallback.onTorchModeChanged()}.

+ +

API de reprocesamiento

+

La API {@link android.hardware.camera2 Camera2} se extiende para admitir el reprocesamiento de imágenes privadas de formato opaco y YUV. + Su aplicación determina si las capacidades de reprocesamiento se encuentran disponibles vía {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. + Si un dispositivo admite el reprocesamiento, usted puede crear una sesión de captura de cámara reprocesable llamando a +{@code CameraDevice.createReprocessableCaptureSession()} y puede crear solicitudes para el reprocesamiento de búferes de entrada. + +

+ +

Utilice la clase {@code ImageWriter} para conectar el flujo del búfer de entrada a la entrada de reprocesamiento de la cámara. + Para obtener un búfer vacío, siga el modelo de programación que se indica a continuación:

+ +
    +
  1. Llame al método {@code ImageWriter.dequeueInputImage()}.
  2. +
  3. Complete los datos en el búfer de entrada.
  4. +
  5. Envíe el búfer a la cámara llamando al método {@code ImageWriter.queueInputImage()}.
  6. +
+ +

Si está utilizando un objeto {@code ImageWriter} junto con una imagen +{@code android.graphics.ImageFormat.PRIVATE}, su aplicación no puede acceder a los datos de la imagen de forma directa. + En cambio, pase la imagen {@code ImageFormat.PRIVATE} directamente a +{@code ImageWriter} llamando al método {@code ImageWriter.queueInputImage()} sin ninguna copia del búfer. +

+ +

La clase {@code ImageReader} ahora admite secuencias de imagen de formato {@code android.graphics.ImageFormat.PRIVATE}. + Este soporte le permite que su aplicación mantenga una cola de imagen circular de imágenes de salida +{@code ImageReader}, seleccione una o más imágenes y las envíe a +{@code ImageWriter} para el reprocesamiento de la cámara.

+ +

Características de Android for Work

+

Esta versión preliminar incluye las siguientes API nuevas para Android for Work:

+ + +

+ Para obtener una vista detallada de todos los cambios de la API en M Developer Preview, consulte el Informe de diferencias de las API. +

diff --git a/docs/html-intl/intl/es/preview/behavior-changes.jd b/docs/html-intl/intl/es/preview/behavior-changes.jd new file mode 100644 index 0000000..75936bd --- /dev/null +++ b/docs/html-intl/intl/es/preview/behavior-changes.jd @@ -0,0 +1,403 @@ +page.title=Cambios en los comportamientos +page.keywords=versión preliminar,sdk,compatibilidad +sdk.platform.apiLevel=MNC +@jd:body + + +
+ +
+ +

Además de nuevas características y capacidades, M Developer Preview incluye diversos cambios en el sistema y cambios en los comportamientos de la API. + En este documento, se destacan algunos de los cambios principales que debe comprender y justificar en sus aplicaciones. +

+ +

Si publicó anteriormente una aplicación para Android, tenga en cuenta que su aplicación podría verse afectada por estos cambios en la plataforma. +

+ +

Permisos de tiempo de ejecución

+

Esta versión preliminar introduce un nuevo modelo de permisos en el que los usuarios ahora pueden administrar directamente los permisos de la aplicación en tiempo de ejecución. + Este modelo les proporciona a los usuarios mayor visibilidad y control sobre los permisos y, al mismo tiempo, simplifica los procesos de instalación y actualización automática para los desarrolladores de aplicaciones. Los usuarios pueden conceder o revocar permisos de forma individual para las aplicaciones instaladas. + +

+ +

En sus aplicaciones que tienen como destino la versión preliminar de Android M, asegúrese de comprobar y solicitar los permisos en tiempo de ejecución. + Para determinar si se concedió un permiso a su aplicación, llame al nuevo método {@code Context.checkSelfPermission()}. + Para solicitar un permiso, llame al nuevo método +{@code Activity.requestPermission()}. Incluso si su aplicación no tiene como destino la versión preliminar de Android M, debería probar su aplicación de acuerdo con el nuevo modelo de permisos. +

+ +

Para obtener detalles sobre la compatibilidad del nuevo modelo de permisos en su aplicación, consulte la página + +Permisos de la versión preliminar para desarrolladores. Para obtener consejos sobre cómo evaluar el impacto en su aplicación, consulte la Guía de prueba. +

+ +

Optimizaciones de ahorro de energía

+

Esta versión preliminar introduce nuevas optimizaciones de ahorro de energía para aplicaciones y dispositivos inactivos.

+ +

Doze

+

Si un dispositivo está desconectado y permanece quieto con la pantalla apagada durante un período determinado, pasará al modo Doze, en el que el dispositivo intenta mantener el sistema en estado de suspensión. + En este modo, los dispositivos reanudan periódicamente el funcionamiento normal durante períodos breves, de manera que la aplicación se pueda sincronizar y el sistema pueda realizar las operaciones pendientes. + +

+ +

Durante el modo Doze, se aplican las siguientes restricciones a sus aplicaciones:

+ +

+

Al salir del modo Doze, el dispositivo ejecuta los trabajos y las sincronizaciones pendientes.

+

Para probar esta característica, conecte un dispositivo que esté ejecutando la versión preliminar de Android M a su equipo de desarrollo y llame a los siguientes comandos: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

Nota: La próxima versión de + +Google Cloud Messaging le permite designar mensajes de prioridad alta. + Si su aplicación recibe mensajes de GCM de prioridad alta, se le concede un breve acceso a la red, incluso cuando el dispositivo se encuentra en modo Doze. + +

+ +

Consulte la +Guía de prueba para obtener consejos sobre cómo probar el modo Doze en su aplicación. +

+ +

App Standby

+

Con esta versión preliminar, el sistema puede determinar que las aplicaciones se encuentran inactivas cuando no están en uso activo. + La aplicación se considera inactiva después de un cierto período, salvo que el sistema detecte alguna de las siguientes señales: +

+ + + +

Si el dispositivo está desconectado, las aplicaciones que se consideren inactivas tendrán deshabilitado el acceso a la red y se suspenderán sus sincronizaciones y trabajos. + Cuando el dispositivo se conecte a un sistema de alimentación, estas aplicaciones se podrán conectar a la red y podrán ejecutar los trabajos y las sincronizaciones pendientes. + Si el dispositivo queda inactivo durante períodos prolongados, las aplicaciones inactivas pueden acceder a la red aproximadamente una vez al día. +

+ +

Para probar esta característica, conecte un dispositivo que esté ejecutando la versión preliminar de Android M a su equipo de desarrollo y llame a los siguientes comandos: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

Nota: La próxima versión de + +Google Cloud Messaging (GCM) le permite designar mensajes de prioridad alta. + Si su aplicación recibe mensajes de GCM de prioridad alta, se le concede un breve acceso a la red, incluso cuando la aplicación está inactiva. + +

+ +

Consulte la +Guía de prueba para obtener consejos sobre cómo probar el modo App Standby en sus aplicaciones. +

+ +

Dispositivos de almacenamiento adoptables

+

+Con esta versión preliminar, los usuarios pueden adoptar dispositivos de almacenamiento externo, como tarjetas SD. Al adoptar un dispositivo de almacenamiento externo, el dispositivo se cifra y se formatea para que actúe como un elemento de almacenamiento interno. + Esta característica les permite a los usuarios mover tanto las aplicaciones como los datos privados de esas aplicaciones entre dispositivos de almacenamiento. + Al mover aplicaciones, el sistema respeta la preferencia +{@code android:installLocation} +del manifiesto. +

+ +

Si su aplicación accede a las API o a los campos que se indican a continuación, tenga en cuenta que las rutas de archivo que devuelven se modificarán dinámicamente cuando la aplicación se mueva entre dispositivos de almacenamiento interno y externo. Al crear rutas de archivo, lo más recomendable es que siempre llame a estas API de forma dinámica. No use rutas de archivo codificadas de forma rígida ni continúe usando rutas de archivo completas que se hayan creado anteriormente. + + +

+ + + +

Para depurar esta característica en la versión preliminar para desarrolladores, puede habilitar la opción de adoptar una unidad USB que esté conectada a un dispositivo Android mediante un cable USB On-The-Go (OTG) y para habilitarla puede ejecutar el siguiente comando: +

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

Eliminación del cliente HTTP de Apache

+

Esta versión preliminar elimina el soporte del cliente HTTP de Apache. Si su aplicación utiliza este cliente y tiene como destino Android 2.3 (API de nivel 9) o una versión posterior, use, en su lugar, la clase {@link java.net.HttpURLConnection}. + + Esta API es más eficaz porque reduce el uso de la red mediante compresión y almacenamiento de respuesta en caché transparentes, y minimiza el consumo de energía. + Para continuar utilizando las API HTTP de Apache, primero debe declarar la siguiente dependencia en tiempo de compilación en su archivo {@code build.gradle}: + +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Android está migrando de la biblioteca OpenSSL a +BoringSSL +. Si utiliza Android NDK en su aplicación, no vincule bibliotecas criptográficas que no forman parte de la API de NDK, como {@code libcrypto.so} y {@code libssl.so}. + Estas bibliotecas no son API públicas y se pueden modificar o interrumpir sin aviso en todas las versiones y todos los dispositivos. Además, puede exponerse a vulnerabilidades de seguridad. + + En cambio, modifique su código nativo para llamar a las API de criptografía de Java a través de JNI o para vincular estáticamente una biblioteca criptográfica de su elección. + +

+ +

Cambios en AudioManager

+

Ya no se admitirán las funciones de ajustar el volumen de forma directa o silenciar secuencias específicas por medio de la clase {@link android.media.AudioManager} +. El método {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} es obsoleto, por lo que debe llamar al método +{@code AudioManager.requestAudioFocus()} en su lugar. Del mismo modo, el método +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} es obsoleto; en su lugar, llame al método{@code AudioManager.adjustStreamVolume()} y pase los valores de dirección {@code ADJUST_MUTE} o {@code ADJUST_UNMUTE}. + +

+ +

Selección de texto

+ + + +

Ahora, cuando los usuarios seleccionen texto en su aplicación, usted puede mostrar acciones de selección de texto, como +cortar, copiar y pegar en una +barra de herramientas flotante. La implementación de la interacción del usuario es similar a la de la barra de acciones contextuales, como se describe en la sección + +Habilitación del modo de acción contextual para vistas individuales. +

+ +

Si desea implementar una barra de herramientas flotante para selección de texto, realice los siguientes cambios en sus aplicaciones existentes: +

+
    +
  1. En su objeto {@link android.view.View} o {@link android.app.Activity}, cambie sus llamados +{@link android.view.ActionMode} de +{@code startActionMode(Callback)} a {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.
  2. +
  3. Tome su implementación existente de {@code ActionMode.Callback} y, en su lugar, haga que sea extendida +{@code ActionMode.Callback2}.
  4. +
  5. Invalide el método {@code Callback2.onGetContentRect()} para proporcionar las coordenadas del objeto {@link android.graphics.Rect} de contenido (como un rectángulo de selección de texto) en la vista. +
  6. +
  7. Si el posicionamiento del rectángulo ya no es válido y este es el único elemento por invalidar, llame al método {@code ActionMode.invalidateContentRect()}. +
  8. +
+ +

Si utiliza la biblioteca +Android Support Library versión 22.2, tenga en cuenta que las barras de herramientas flotantes no son compatibles con versiones anteriores y AppCompat toma el control de los objetos {@link android.view.ActionMode} de forma predeterminada. + + Esto impide que se muestren las barras de herramientas flotantes. Para permitir la compatibilidad de +{@link android.view.ActionMode} en +{@link android.support.v7.app.AppCompatActivity}, llame a +{@code android.support.v7.app.AppCompatActivity.getDelegate()}, luego llame a +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} en el objeto +{@link android.support.v7.app.AppCompatDelegate} devuelto y configure el parámetro de entrada como {@code false}. + Esta llamada devuelve el control de los objetos {@link android.view.ActionMode} al marco de trabajo. + En los dispositivos que ejecutan la versión preliminar de Android M, eso permite que el marco de trabajo admita los modos de barras de herramientas flotantes o +{@link android.support.v7.app.ActionBar}, mientras que en los dispositivos anteriores a la versión preliminar de Android M solo se admiten los modos {@link android.support.v7.app.ActionBar}. +

+ +

Cambios en Android Keystore

+

Con esta versión preliminar, el +proveedor de Android Keystore ya no admite DSA. + Aún se admite ECDSA.

+ +

Las claves que no requieren cifrado de datos estáticos ya no se eliminarán cuando se restablezca o deshabilite la pantalla de bloqueo seguro (por ejemplo, cuando lo haga el usuario o el administrador del dispositivo). + Las claves que requieren el cifrado de datos estáticos se eliminarán durante estos eventos. +

+ +

Cambios en las funciones de red y Wi-Fi

+ +

Esta versión preliminar introduce en las API de redes y Wi-Fi los siguientes cambios en los comportamientos.

+ + +

Cambios en el servicio de cámara

+

En esta versión preliminar, el modelo para acceder a los recursos compartidos en el servicio de cámara se cambió del modelo de acceso anterior “por orden de llegada” a un modelo de acceso en el que se favorecen los procesos de prioridad alta. + + Los cambios en el comportamiento del servicio incluyen los siguientes:

+ + +

Tiempo de ejecución de ART

+

El tiempo de ejecución de ART ahora implementa correctamente reglas de acceso para el método +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Este cambio soluciona el problema que ocurría con Dalvik, que comprobaba las reglas de acceso incorrectamente en las versiones anteriores. Si su aplicación utiliza el método +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} y usted desea invalidar comprobaciones de acceso, llame al método +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} con el parámetro de entrada configurado en {@code true}. + + + + Si su aplicación utiliza la +biblioteca AppCompat versión 7 o la +biblioteca RecyclerView versión 7, debe actualizar su aplicación para utilizar las versiones más recientes de estas bibliotecas. + De lo contrario, asegúrese de que las clases personalizadas a las que se haga referencia desde el XML estén actualizadas, de manera que se pueda acceder a sus constructores de clases. +

+ +

Esta versión preliminar actualiza el comportamiento del vinculador dinámico. El vinculador dinámico ahora entiende la diferencia entre {@code soname} de una biblioteca y su ruta de acceso ( +error público 6670), y ahora se implementa la búsqueda por {@code soname}. + + + Las aplicaciones que anteriormente funcionaban y que tenían entradas {@code DT_NEEDED} incorrectas (generalmente, rutas absolutas en el sistema de archivo del equipo de compilación) pueden generar error al cargarse. +

+ +

Ahora se implementa correctamente la marca {@code dlopen(3) RTLD_LOCAL}. Tenga en cuenta que +{@code RTLD_LOCAL} es lo predeterminado, por lo que se verán afectadas las llamadas a {@code dlopen(3)} que no utilizaron explícitamente +{@code RTLD_LOCAL} (salvo que su aplicación haya usado {@code RTLD_GLOBAL} explícitamente). Con +{@code RTLD_LOCAL}, los símbolos no estarán disponibles para las bibliotecas cargadas por llamadas posteriores a +{@code dlopen(3)} (a diferencia de lo que sucede al hacer referencia mediante entradas {@code DT_NEEDED}).

+

+ +

Validación de APK

+

Ahora la plataforma realiza validaciones más estrictas de APK. El APK se considera dañado si un archivo está declarado en el manifiesto, pero no está presente en el APK en sí. + Si se elimina algún contenido, se debe volver a firmar el APK. +

+ +

Cambios en Android for Work

+

Esta versión preliminar incluye los siguientes cambios en los comportamientos para Android for Work:

+ diff --git a/docs/html-intl/intl/es/preview/features/runtime-permissions.jd b/docs/html-intl/intl/es/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..15bd954 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=Permisos +page.tags=recursos de la versión preliminar, androidm +page.keywords=permisos, tiempo de ejecución, vista preliminar +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

Quickview

+
    +
  • Si su aplicación tiene como destino el SDK de la versión preliminar de Android M, se solicitará a los usuarios que concedan permisos durante el tiempo de ejecución, en lugar de durante la instalación. +
  • +
  • Los usuarios pueden cancelar los permisos en cualquier momento desde la pantalla Settings de la aplicación. +
  • +
  • La aplicación necesita controlar los permisos cada vez que se ejecuta. +
  • +
+ +

Contenido del documento

+
    +
  1. Información general
  2. +
  3. Codificación para permisos de tiempo de ejecución
  4. +
  5. Prueba de permisos de tiempo de ejecución
  6. +
  7. Mejores prácticas
  8. +
+ + + + +
+
+ + +

+ M Developer Preview introduce un nuevo modelo de permisos de la aplicación que facilita a los usuarios el proceso de instalación y actualización de aplicaciones. + Si una aplicación que se ejecuta en la versión preliminar de Android M es compatible con el nuevo modelo de permisos, el usuario no tiene que conceder ningún permiso al instalar o actualizar la aplicación. En su lugar, la aplicación solicitará los permisos a medida que los vaya necesitado y el sistema mostrará al usuario un diálogo en el que le solicitará los permisos necesarios. + + + + +

+ +

+ Si la aplicación es compatible con el nuevo modelo de permisos, podrá instalarse y ejecutarse en los dispositivos con versiones anteriores de Android, utilizando el modelo de permisos anterior en esos dispositivos. + + +

+ +

+ Información general +

+ +

+ En M Developer Preview, la plataforma introduce un nuevo modelo +de permisos de la aplicación. A continuación, se presenta un resumen de los componentes principales de este nuevo modelo: +

+ + + +

+ Este modelo de permisos cambia la forma en la que la aplicación se comporta para características que requieren permisos. + A continuación, se presenta un resumen de las prácticas de desarrollo que debe seguir para ajustarse a este modelo: + +

+ + + +

+ Nota: Si una aplicación tiene como destino M Developer Preview, debe utilizar el nuevo modelo de permisos. + +

+ +

+ A partir del lanzamiento de M Developer Preview, no todas las aplicaciones de Google implementarán por completo el nuevo modelo de permisos. + Google actualiza estas aplicaciones durante el transcurso de M Developer Preview para respetar adecuadamente las configuraciones de alternancia de los permisos. + + +

+ +

+ Nota: Si la aplicación cuenta con su propia superficie de API, no transmita permisos sin antes asegurarse de que el iniciador de la llamada cuente con los permisos requeridos para acceder a esa información. + + +

+ +

+ Permisos de las aplicaciones de firma y de sistema +

+ +

+ Generalmente, cuando el usuario instala una aplicación, el sistema solo otorga a la aplicación +{@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL}. Sin embargo, en ciertas circunstancias, el sistema le concede a la aplicación más permisos: + +

+ + + +

+ En ambos casos, el usuario aún puede revocar los permisos en cualquier momento si accede a la pantalla Settings del sistema y selecciona Apps > + + app_name > Permissions. La aplicación debe seguir controlando los permisos al momento de la ejecución y solicitarlos si fuese necesario. + + +

+ +

+ Compatibilidad con modelos anteriores y posteriores +

+ +

+ Si una aplicación no tiene como destino M Developer Preview, la aplicación continúa utilizando el modelo de permisos anterior, incluso en dispositivos con la versión preliminar de Android M. + Cuando el usuario instala la aplicación, el sistema le solicita al usuario que otorgue todos los permisos enumerados en el manifiesto de la aplicación. + + +

+ +

+ Nota: En dispositivos que ejecutan M Developer Preview, el usuario puede desactivar los permisos para cualquier aplicación (incluso para aplicaciones heredadas) desde la pantalla Settings de la aplicación. + + Si un usuario desactiva permisos para una aplicación heredada, el sistema desactiva las funciones correspondientes de forma automática. + Cuando la aplicación intenta realizar una operación que requiere ese permiso, la operación no generará necesariamente una excepción. + + En su lugar, devolverá un conjunto de datos vacíos, indicará un error o, de lo contrario, mostrará un comportamiento inesperado. + Por ejemplo, si realiza una consulta sobre el calendario sin permisos, el método devuelve un conjunto de datos vacíos. + +

+ +

+ Si instala una aplicación que utiliza el nuevo modelo de permisos en un dispositivo que no ejecuta la versión preliminar de Android M, el sistema la trata como cualquier otra aplicación: el sistema le pide al usuario, durante la instalación, que conceda los permisos declarados. + + + +

+ +

+ Nota: Para el lanzamiento de la versión preliminar, debe configurar la versión mínima del SDK en M Preview SDK para compilar con la versión del SDK preliminar. + Esto significa que no podrá probar dichas aplicaciones en plataformas anteriores durante la versión preliminar para desarrolladores. + + +

+ +

Permisos frente a intentos

+ +

+ En muchas situaciones, puede elegir entre dos formas para que sus aplicaciones realicen una tarea. + Puede hacer que su aplicación solicite permiso para realizar la operación por sí misma. + De lo contrario, puede hacer que la aplicación utilice un intento para que otra aplicación realice la tarea. + +

+ +

+ Por ejemplo, supongamos que su aplicación necesita poder tomar fotografías con la cámara del dispositivo. + Su aplicación puede solicitar el permiso +android.permission.CAMERA, lo que le permite a su aplicación acceder a la cámara directamente. + Entonces, su aplicación utilizará las API de la cámara para controlar la cámara y tomar una fotografía. + Este enfoque le otorga a su aplicación total control del proceso de fotografía y le permite incorporar la UI de la cámara en su aplicación. + + +

+ +

+ Sin embargo, si no necesita dicho control, puede utilizar {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} para solicitar una imagen. + Cuando ejecute el intento, se le solicita al usuario que elija una aplicación de cámara (en caso de que no haya una aplicación de cámara predeterminada) y esa aplicación tomará la fotografía. + + La aplicación de cámara devuelve la fotografía al método {@link + android.app.Activity#onActivityResult onActivityResult()} de su aplicación. +

+ +

+ De manera similar, si necesita realizar una llamada telefónica, acceder a los contactos del usuario, etc., lo puede hacer creando intentos apropiados o puede solicitar los permisos e ingresar directamente a los objetos apropiados. + + Cada enfoque tiene ventajas y desventajas. + +

+ +

+ Si utiliza los permisos: +

+ + + +

+ Si utiliza un intento: +

+ + + +

Codificación para permisos de tiempo de ejecución

+ +

+ Si su aplicación tiene como destino el nuevo M Developer Preview, deberá usar el nuevo modelo de permisos. + Esto significa que, además de declarar los permisos necesarios en el manifiesto, también debe comprobar si tiene los permisos de tiempo de ejecución y solicitarlos en caso de no tenerlos. + + + +

+ +

+ Habilitar el nuevo modelo de permisos +

+ +

+ Para habilitar el nuevo modelo de permisos de M Developer Preview, configure el atributo +targetSdkVersion de la aplicación en "MNC" y +compileSdkVersion en "android-MNC". Al hacerlo, se habilitan todas las características de los nuevos permisos. + +

+ +

+ Para el lanzamiento de la versión preliminar, debe establecer minSdkVersion en +"MNC" para compilar con el SDK preliminar. +

+ +

+ Establecer un permiso solo para la versión preliminar de Android M +

+ +

+ Puede utilizar el nuevo elemento <uses-permission-sdk-m> en el manifiesto de la aplicación para indicar que se necesita un permiso solo para M Developer Preview. + Si declara un permiso de esta manera, cuando la aplicación se instale en un dispositivo anterior, el sistema no le solicitará al usuario el permiso ni se lo otorgará a la aplicación. Al usar el elemento <uses-permission-sdk-m>, puede añadir nuevos permisos a las versiones actualizadas de su aplicación sin forzar a los usuarios a otorgar permisos cuando instalen la actualización. + + + + + + +

+ +

+ Si la aplicación se ejecuta en un dispositivo con M Developer Preview, +<uses-permission-sdk-m> se comporta al igual que +<uses-permission>. + El sistema no le solicita al usuario que otorgue ningún permiso al instalar la aplicación y la aplicación solicita los permisos a medida que se necesiten. + +

+ +

+ Solicitar permisos +

+ +

+ Si su aplicación utiliza el nuevo modelo de permisos de M Developer Preview, no se le pedirá al usuario que otorgue todos los permisos cuando la aplicación se ejecute por primera vez en un dispositivo con la versión preliminar de Android M. + + En su lugar, su aplicación solicita los permisos a medida que los necesita. + Cuando su aplicación solicita un permiso, el sistema le muestra un diálogo al usuario. + +

+ +

+ Si su aplicación se ejecuta en un dispositivo con SDK 22 o anterior, la aplicación utiliza el modelo de permisos anterior. + Cuando el usuario instala la aplicación, se le solicita que otorgue todos los permisos que la aplicación requiere en su manifiesto, excepto aquellos permisos marcados con <uses-permission-sdk-m>. + + +

+ +

Controlar en qué plataforma se ejecuta la aplicación

+ +

+ Este modelo de permisos es compatible solamente con dispositivos que ejecutan M Developer Preview. + Antes de llamar a cualquiera de estos métodos, la aplicación debe verificar en qué plataforma se está ejecutando y, para hacerlo, se controla el valor de {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME}. + + Si el dispositivo ejecuta M Developer Preview, +{@link android.os.Build.VERSION#CODENAME CODENAME} es "MNC". +

+ +

Controlar si la aplicación cuenta con los permisos necesarios

+ +

Cuando el usuario intenta realizar algo que requiere un permiso, la aplicación controla si ya tiene el permiso para realizar esa operación. + Para hacerlo, la aplicación llama a Context.checkSelfPermission( + +permission_name). La aplicación debe realizar este control incluso si sabe que el usuario ya ha concedido ese permiso, ya que el usuario puede revocar los permisos de una aplicación en cualquier momento. + + + Por ejemplo, si un usuario quiere usar una aplicación para tomar una fotografía, la aplicación llama a Context.checkSelfPermission(Manifest.permission.CAMERA). + +

+ +

+ Tabla 1. Permisos y grupo de permisos.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Grupo de permisosPermisos
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

Solicitar permisos si se necesitan

+ +

Si la aplicación no posee los permisos que necesita, llama al método +Activity.requestPermissions(String[], int) para solicitar el permiso o los permisos apropiados. + La aplicación pasa el permiso o los permisos que necesita y un “código de solicitud” entero. + + Este método funciona de manera asincrónica: realiza la devolución inmediatamente y cuando el usuario responde a la ventana de diálogo, el sistema llama al método de devolución de llamada de la aplicación con los resultados, y pasa el mismo “código de solicitud” que pasó la aplicación a +requestPermissions(). + +

+ +

El siguiente código verifica si la aplicación tiene permisos para leer los contactos del usuario y solicita los permisos de ser necesario: +

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

Administrar la respuesta a la solicitud de permisos

+ +

+ Cuando una aplicación solicita permisos, el sistema le muestra al usuario una ventana de diálogo. + Cuando el usuario responde, el sistema invoca +Activity.onRequestPermissionsResult(int, String[], int[]) + de su aplicación y le transfiere la respuesta del usuario. Su aplicación necesita invalidar ese método. La devolución de llamada pasa el mismo código de solicitud que usted pasó a requestPermissions(). + + Por ejemplo, si una aplicación solicita acceso READ_CONTACTS, es posible que tenga el siguiente método de devolución de llamada: + + +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

Si el usuario concede un permiso, el sistema le otorga a la aplicación todos los permisos enumerados en el manifiesto para esa área funcional. + Se deben tomar acciones apropiadas si el usuario rechaza la solicitud. + Por ejemplo, usted podría desactivar cualquier acción del menú que dependa de este permiso. + + +

+ +

+ Cuando el sistema le solicita al usuario que otorgue un permiso, el usuario tiene la opción de indicarle al sistema que no solicite ese permiso de nuevo. + En ese caso, cuando la aplicación utiliza requestPermissions() para solicitar ese permiso, el sistema rechaza la solicitud inmediatamente. + + En este caso, el sistema llama a su onRequestPermissionsResult() de la misma manera en que lo haría si el usuario hubiese rechazado explícitamente su solicitud nuevamente. + + Por esta razón, su aplicación no puede asumir que se ha llevado a cabo algún tipo de interacción con el usuario. + +

+ +

Prueba de permisos de tiempo de ejecución

+ + +

+ Si su aplicación tiene como destino M Developer Preview, debe probar que administre los permisos correctamente. + No debe asumir que su aplicación tiene algún permiso en particular cuando se ejecuta. + Cuando la aplicación se ejecuta por primera vez, es muy probable que no tenga permisos y el usuario puede revocar o reestablecer los permisos en cualquier momento. + + +

+ +

+ Debe probar su aplicación para asegurarse de que funciona correctamente en todas las situaciones de permisos. + Con el SDK de la versión preliminar de Android M, hemos brindado nuevos comandos Android Debug Bridge (adb) que le permitirán probar su aplicación con cualquier configuración de permisos que necesite probar. + + + +

+ +

+ Nuevas opciones y comandos adb +

+ +

+ Las herramientas de plataforma del SDK de la versión preliminar de Android M contienen varios comandos nuevos que le permiten probar la manera en que su aplicación administra los permisos. + +

+ +

+ Instalar con permisos +

+ +

+ Puede utilizar la nueva opción -g del comando adb + install, que instala la aplicación y concede todos los permisos enumerados en el manifiesto de la aplicación: + +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ Conceder y revocar permisos +

+ +

+ Puede utilizar los comandos ADB nuevos package manager (pm) para conceder y revocar permisos a una aplicación instalada. Esta funcionalidad puede resultar útil para pruebas automáticas. + + +

+ +

+ Para conceder un permiso, utilice el comando grant de package manager: +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ Por ejemplo, para conceder el paquete de permisos com.example.myapp para grabar audio utilice este comando: + +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ Para revocar un permiso, utilice el comando revoke de package manager: +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

Mejores prácticas

+ +

+ El nuevo modelo de permisos brinda a los usuarios una experiencia más fluida y les facilita la instalación de aplicaciones, además de hacerlos sentir cómodos con las actividades de sus aplicaciones. + + Sugerimos las siguientes mejores prácticas para obtener el mayor beneficio del nuevo modelo. + +

+ + +

Solicite solo los permisos que necesite

+ +

+ Cada vez que solicite un permiso, usted obliga al usuario a tomar una decisión. + La funcionalidad de su aplicación se verá reducida si el usuario rechaza la solicitud. + Debe minimizar la cantidad de veces que realiza estas solicitudes. +

+ +

+ Por ejemplo, a menudo, su aplicación puede obtener la funcionalidad necesaria a través de un intento en lugar de una solicitud de permiso. + + Si su aplicación necesita tomar fotografías con la cámara del teléfono, la aplicación puede utilizar un intento {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE}. + Cuando su aplicación ejecuta el intento, el sistema le solicita al usuario que elija una aplicación para la cámara que ya está instalada a fin de tomar la fotografía. + + +

+ +

+ No abrume al usuario +

+ +

+ Si expone al usuario a muchas solicitudes de permisos al mismo tiempo, lo abrumará y hará que deje de usar su aplicación. Por el contrario, debe pedir permisos en la medida que los necesite. + + +

+ +

+ A veces, uno o más permisos pueden ser absolutamente necesarios para la aplicación. En ese caso, es recomendable pedir todos los permisos no bien se inicie la aplicación. + + Por ejemplo, si crea una aplicación de fotografía, la aplicación necesitará acceso a la cámara del dispositivo. + Cuando el usuario inicie la aplicación por primera vez, no se sorprenderá si la aplicación le solicita permiso para usar la cámara. + + Sin embargo, si la misma aplicación además tuviese una característica para compartir fotografías con los contactos del usuario, no solicite ese permiso la primera vez que se ejecute. + + En su lugar, espere hasta que el usuario utilice la característica “compartir” para solicitar el permiso en ese momento. + +

+ +

+ Si su aplicación proporciona un tutorial, se recomienda que se pidan los permisos esenciales de la aplicación al final del tutorial. + +

+ +

+ Explique por qué se necesitan los permisos +

+ +

+ El diálogo de permisos que muestra el sistema cuando llama a + requestPermissions() informa qué permisos necesita su aplicación pero no establece el motivo. + A veces, el usuario puede confundirse. + Es una buena idea explicarle al usuario los motivos por los que la aplicación necesita esos permisos antes de llamar a requestPermissions(). + +

+ +

+ Por ejemplo, una aplicación de fotografía puede solicitar servicios de ubicación para añadir una etiqueta geográfica a las fotografías. + Es posible que un usuario típico no sepa que una fotografía puede contener información sobre la ubicación y se confundiría si una aplicación de fotografía solicita la ubicación. + + En este caso, es recomendable que la aplicación le informe al usuario acerca de esta característica antes de llamar a +requestPermissions(). + +

+ +

+ Una forma de hacerlo es incorporar estas solicitudes en el tutorial de la aplicación. El tutorial puede mostrar todas las características de la aplicación, una por vez, y mientras lo hace explicar los permisos que son necesarios. + + Por ejemplo, el tutorial de la aplicación de fotografía puede mostrar la característica “compartir fotografías con contactos” y luego explicarle al usuario que debe otorgar permisos para que la aplicación vea los contactos del usuario. + + + La aplicación puede entonces llamar a requestPermissions() para solicitarle al usuario ese acceso. + Por supuesto, no todos los usuarios siguen el tutorial, por lo que aun así debe controlar y solicitar los permisos durante el funcionamiento normal de la aplicación. + + +

diff --git a/docs/html-intl/intl/es/preview/overview.jd b/docs/html-intl/intl/es/preview/overview.jd new file mode 100644 index 0000000..49cc3d3 --- /dev/null +++ b/docs/html-intl/intl/es/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=Información general del programa +page.metaDescription=Bienvenido a Android M Developer Preview, el programa que le brinda todo lo que necesita para probar y optimizar sus aplicaciones para la próxima versión de Android. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ Bienvenido a Android M Developer Preview, el programa que le brinda todo lo que necesita para probar y optimizar sus aplicaciones para la próxima versión de Android. + + Es gratis y puede comenzar a utilizarlo ahora mismo. Solo tiene que descargar las herramientas de M Developer Preview. + +

+ +
+
+
+
+
+ Imágenes del sistema emulador y de hardware +
+ +

+ Ejecute y pruebe sus aplicaciones en Nexus 5, 6, 9 y Player (para TV), además del emulador. + +

+
+ +
+
+ Último código de la plataforma +
+ +

+ Durante la versión preliminar, ofreceremos múltiples actualizaciones, por lo que usted realizará la prueba comparando los últimos cambios de la plataforma. + +

+
+ +
+
+ Actualizaciones vía OTA +
+ +

+ Luego de actualizar su dispositivo a la versión preliminar inicial, usted podrá obtener actualizaciones por red inalámbrica (over-the-air, OTA). + +

+
+
+ +
+ + +
+
+ Nuevos comportamientos y capacidades +
+ +

+ Inicie el funcionamiento con anticipación para admitir los comportamientos de la nueva plataforma como el nuevo modelo de permisos de tiempos de ejecución y las opciones de ahorro de energía. + +

+
+ +
+
+ Ventana de prioridad para los problemas informados por los desarrolladores +
+ +

+ Durante las primeras semanas, daremos prioridad a los problemas informados por los desarrolladores; por lo tanto, realice las pruebas y envíe sus comentarios lo antes posible. + +

+
+ +
+
+ Comentarios y soporte +
+ +

+ Infórmenos los problemas y envíenos comentarios a través de nuestro seguimiento de problemas. + Póngase en contacto con otros desarrolladores de la comunidad M Developer Community. + +

+
+
+
+
+ + + + +

+ Escala de tiempo y actualizaciones +

+Preview program timeline +

+ M Developer Preview estará disponible a partir del 28 de mayo hasta la versión final del SDK de Android M, que lanzaremos al poco tiempo del lanzamiento público durante el tercer trimestre de 2015. + + +

+ +

+ En momentos clave del desarrollo, lanzaremos actualizaciones para sus dispositivos de prueba. + Los momentos clave tentativos son los siguientes: +

+ + + +

+ Estas actualizaciones terminan con el SDK final (más adelante durante el tercer trimestre), lo que proporcionará tanto las API oficiales para la nueva versión de Android como los comportamientos y las características finales del sistema. + + +

+ +

+ A medida que usted prueba y desarrolla en Android M, le recomendamos que mantenga su entorno de desarrollo actualizado a medida que se lanzan las actualizaciones de la versión preliminar. + + Para que el proceso sea más fácil, lanzaremos actualizaciones OTA para los dispositivos que ya hayan sido actualizados a una compilación de la versión preliminar y brindaremos imágenes del sistema que puede descargar y actualizar manualmente. + + +

+

+ Nota: El SDK final y las imágenes del sistema no se pueden proporcionar vía OTA y deberán actualizarse manualmente en sus dispositivos de prueba. + + +

+ +

+ Le informaremos cuando las actualizaciones de la versión preliminar se encuentren disponibles a través del blog de Android para desarrolladores (Android Developers Blog), de este sitio y de la comunidad de desarrolladores Android M Developer Community. + + +

+ +

+ ¿Qué ofrece la versión preliminar? +

+ +

+ M Developer Preview incluye todo lo que necesita para probar sus aplicaciones actuales en una variedad de tamaños de pantalla, de tecnologías de redes, de conjuntos de chip CPU/GPU y de arquitecturas de hardware. + + +

+ +

+ Herramientas del SDK +

+ +

+ Estos componentes se pueden descargar mediante SDK Manager en Android Studio: +

+ + + +

+ Imágenes del sistema de hardware +

+ +

+ Puede descargar estas imágenes del sistema de hardware para dispositivos Nexus desde la página de Descargas: + +

+ + + +

+ Documentación y código de muestra +

+ +

+ Estos recursos de documentación lo ayudan a obtener información sobre la versión preliminar: +

+ + + +

+ Recursos de soporte +

+ +

+ Utilice los siguientes recursos de soporte durante el proceso de prueba y desarrollo en M Developer Preview: + +

+ + + + +

+ Selección del destino, API preliminares y publicación +

+ +

+ Android M Developer Preview es una versión solo para desarrollo y no tiene un nivel de API estándar. + Si quiere darse de baja de los comportamientos de compatibilidad para probar su aplicación (lo que es muy recomendado), puede elegir como destino M Developer Preview estableciendo targetSdkVersion de su aplicación como “MNC”. + + + +

+ +

+ Android M Developer Preview ofrece API preliminares + — las API no serán oficiales hasta que se lance el SDK final, lo que actualmente está planeado para el tercer trimestre de 2015. + Esto quiere decir que surgirán cambios menores en la API con el tiempo, particularmente durante las primeras semanas del programa. + + Con cada actualización de Android M Developer Preview, proporcionaremos un resumen con los cambios realizados. + +

+ +

+ Tenga en cuenta que aunque las API preliminares pueden modificarse, los comportamientos del sistema subyacente, como los permisos de tiempo de ejecución y las opciones de ahorro de energía, se mantienen estables y disponibles para cualquier prueba inmediata. + + +

+ +

+ En cuanto a la publicación, Google Play no permite que se publiquen aplicaciones que tienen como destino M Developer Preview. + Una vez que el SDK final de Android M esté disponible, podrá seleccionar como destino el nivel de API oficial de Android M y publicar su aplicación en Google Play. + + Mientras tanto, si desea distribuir una aplicación con Android M como destino a otros evaluadores, lo puede hacer por correo electrónico o mediante descarga directa desde su sitio. + + +

+ +

+ ¿Cómo comenzar? +

+ +

+ Para comenzar a probar su aplicación: +

+ +
    +
  1. Revise el artículo Información general de la API y Cambios en los comportamientos para obtener una idea sobre las novedades y cómo estas pueden afectar sus aplicaciones. + + En especial, infórmese sobre el nuevo modelo de permisos de tiempo de ejecución, las opciones de ahorro de energía y las copias de seguridad automáticas. + + +
  2. + +
  3. Configure su entorno siguiendo las instrucciones para Configurar el SDK de la versión preliminar y configurar los dispositivos de prueba. + + +
  4. + +
  5. Siga las instrucciones de actualización para actualizar la última imagen del sistema del desarrollador de Android M para Nexus 5, 6, 9 y Player. + + Cuando haya actualizado su dispositivo de desarrollo, recibirá las actualizaciones de la versión preliminar mediante actualizaciones OTA. + +
  6. + +
  7. Descargue la Referencia de la API de M Preview y los Ejemplos de M Preview para obtener más información sobre las nuevas características de la API y sobre cómo utilizarlas en su aplicación. + + + +
  8. + +
  9. Únase a la comunidad Android M Developer Community para recibir las últimas noticias y para contactarse con otros desarrolladores que estén trabajando con la nueva plataforma. + + +
  10. +
+ +

+ ¡Agradecemos su participación en el programa Android M Developer Preview! +

diff --git a/docs/html-intl/intl/ja/preview/api-overview.jd b/docs/html-intl/intl/ja/preview/api-overview.jd new file mode 100644 index 0000000..2c0816b --- /dev/null +++ b/docs/html-intl/intl/ja/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API の概要 +page.keywords=プレビュー,sdk,互換性 +page.tags=previewresources, androidm sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + + +
+ +
+ +

M Developer Preview では、ユーザーやアプリ開発者に Android プラットフォームの次期リリースの新機能をいち早く試していただくことができます。 + +このドキュメントでは、いくつかの注目すべき API の概要について説明します。

+ +

M Developer Preview は、Developer の早期導入者テスターを対象としています。 +是非 +M Developer Preview を試してフィードバックをご提供ください。あなたのご意見が、Android フレームワークの方向性を決定する上で貴重な情報になります。 + +

+ +

注意: M Developer Preview を使用したアプリは、Google Play ストアには公開しないでください。 +

+ +

: このドキュメントには、まだ developer.android.com のリファレンス マテリアルにないクラスやメソッドが多数登場します。 +このドキュメントでは、API エレメントは {@code code style} 形式で記載されています(ハイパーリンクなし)。 +これらのエレメントに関する API ドキュメント(準備段階)については、プレビューのリファレンスをダウンロードしてください。 +

+ +

重要な動作の変更点

+ +

過去に Android にアプリを公開したことがある場合は、アプリがプラットフォームの変更による影響を受ける場合があります。 +

+ +

詳細については、Behavior Changes をご覧ください。

+ +

アプリのリンク機能

+

このプレビューでは、アプリのリンク機能を強化することで Android のインテント システムが向上しました。この機能では、所有するウェブドメインにアプリを関連付けることができます。 +この関連付けに基づいて、プラットフォームが特定のウェブリンクの処理に使用するデフォルトのアプリを決めることができ、ユーザーにアプリを選択させる操作をスキップできます。この機能の実装方法については、 +アプリのリンク機能をご覧ください。 + + + +

アプリの自動バックアップ

+

システムで、アプリの自動フルデータ バックアップと復元を実行できるようになりました。この動作は、M Preview を対象としたアプリでデフォルトで有効になっています。追加のコードは必要ありません。 +ユーザーが Google アカウントを削除すると、バックアップ データも削除されます。 +この機能の仕組みとファイル システムでバックアップ対象を設定する方法については、 +アプリの自動バックアップをご覧ください。 +

+ +

認証

+

このプレビューでは、サポートされる端末での指紋スキャンを使用したユーザー認証や、端末のロック解除メカニズム(ロック画面のパスワードなど)を使って最後にユーザーが認証された時期の確認などを行える新しい API が提供されます。 + +これらの API は、Android キーストローク システムと共に使用します。 +

+ +

指紋認証

+ +

指紋スキャンでユーザーを認証するには、新しい +{@code android.hardware.fingerprint.FingerprintManager} クラスのインスタンスを取得して、 +{@code FingerprintManager.authenticate()} メソッドを呼び出します。アプリは、指紋センサー付きの、互換性のある端末上で実行している必要があります。 +指紋認証フローのユーザー インターフェースをアプリに実装し、UI には標準の Android 指紋アイコンを使用する必要があります。Android 指紋アイコン({@code c_fp_40px.png})はサンプルアプリに含まれています。指紋認証を使用するアプリを複数開発する場合は、それぞれのアプリで個別にユーザーの指紋を認証する必要があります。 + + + + +

+ +

アプリでこの機能を使用するには、まずマニフェストに {@code USE_FINGERPRINT} パーミッションを追加する必要があります。 +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

アプリでの指紋認証の実装については、 +指紋ダイアログのサンプルをご覧ください。 +

+ +

この機能をテストする場合は、次の手順を使用します。

+
    +
  1. Android SDK Tools Revision 24.3 をインストールします(まだインストールしていない場合)。
  2. +
  3. +[設定] > [セキュリティ] > [指紋] の登録手順に従い、エミュレータに新しい指紋を登録します。
  4. +
  5. エミュレータを使って、次のコマンドで指紋のタッチ ベントをエミュレートします。 +同じコマンドを使って、ロック画面やアプリでの指紋のタッチイベントをエミュレートします。 + +
    +adb -e emu finger touch <finger_id>
    +
    +

    Windows では、{@code telnet 127.0.0.1 <emulator-id>}、 +{@code finger touch <finger_id>} の順に実行する必要がある場合があります。 +

    +
  6. +
+ +

資格情報の確認

+

アプリでは、ユーザーがいつ、最後に端末のロックを解除したかに基づいて、ユーザーを認証できます。この機能によって、ユーザーがアプリ固有のパスワードを覚えたり、開発者が独自の認証ユーザー インターフェースを実装したりする必要性がなくなります。 + +アプリでこの機能を使用する場合は、ユーザー認証用の公開鍵か秘密鍵を実装する必要があります。 +

+ +

ユーザーが正常に認証された後、同じキーを再使用できるタイムアウト期間を設定するには、{@link javax.crypto.KeyGenerator} か +{@link java.security.KeyPairGenerator} のセットアップ後に新しい +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} メソッドを呼び出します。 + +現在、この機能は対象暗号化操作で動作します。 +

+ +

再認証ダイアログを過度に表示しないようにします。アプリでは、まず暗号オブジェクトを使用し、タイムアウトした場合は +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} メソッドを使用してユーザーをアプリ内で再認証するようにします。 + + +

+ +

アプリでのこの機能の実装については、 +資格情報の確認サンプルをご覧ください。 +

+ +

ダイレクト シェア

+ + + +

このプレビューでは、ユーザーが直感的にすばやく共有できるようにする API が提供されます。アプリで特定のアクティビティを起動するダイレクト シェアのターゲットを定義すると、それらのダイレクト シェアのターゲットは [共有] メニューに表示されるようになります。 + +この機能を使うと、他のアプリ内にある連絡先などのターゲットにコンテンツを共有できます。 +たとえば、ダイレクト シェアのターゲットによって他のソーシャル ネットワーク アプリのアクティビティが起動し、そのアプリ内の特定の友人やコミュニティに直接コンテンツを共有できるようになります。 + +

+ +

ダイレクト シェアのターゲットを有効にするには、まず +{@code android.service.} を拡張するクラスを定義する必要があります。
+{@code chooser.ChooserTargetService} クラス。マニフェストで +{@code ChooserTargetService} を宣言します。その宣言内で、 +{@code BIND_CHOOSER_TARGET_SERVICE} パーミッションと、 +{@code SERVICE_INTERFACE} アクションを使ったインテント フィルタを指定します。

+

次の例は、マニフェストで {@code ChooserTargetService} を宣言する方法を示しています。 +

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

{@code ChooserTargetService} に公開するアクティビティごとに、 {@code "android.service.chooser.chooser_target_service"} という名前の +{@code <meta-data>} 要素をアプリのマニフェストに追加します。 + +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

音声インタラクション

+

+このプレビューでは、音声アクションと共に使用することでアプリに対話形式の音声操作をビルドできる新しい音声インタラクション API が提供されます。 + + +{@code android.app.Activity.isVoiceInteraction()} メソッドを呼び出して、アクティビティが音声アクションへの応答として開始されたかどうかを確認します。 +音声アクションへの応答であった場合、アプリで +{@code android.app.VoiceInteractor} クラスを使用してユーザーに音声の確認や、オプションのリストからの選択などを要求できます。 +音声アクションの実装の詳細については、 +音声アクションの開発者サイトをご覧ください。 +

+ +

Assist API

+

+このプレビューでは、アシスタントを介してユーザーがアプリを操作できる新しい方法が用意されています。この機能を使用するには、ユーザーが現在のコンテキストを使うようアシスタントを有効にする必要があります。 +有効にすると、ホーム ボタンを長押しすることで、すべてのアプリ内でアシスタントを呼び出すことができます。 +

+

+{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} フラグを設定すると、アプリが現在のコンテキストをアシスタントと共有しないようにできます。新しい {@code android.app.Activity.AssistContent} クラスを使用すると、プラットフォームがアシスタントに渡す標準的な情報セットの他に、アプリで追加の情報を共有できます。 + +

+ +

アプリから追加のコンテキストをアシスタントに提供するには、次の手順を使用します。

+ +
    +
  1. {@link android.app.Application.OnProvideAssistDataListener} インターフェースを実装します。
  2. +
  3. +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} を使用してこのリスナーを登録します。
  4. +
  5. アクティビティ固有の文脈情報を提供するには、 +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} コールバックと、任意で新しい +{@code Activity.onProvideAssistContent()} コールバックをオーバーライドします。 +
+ +

通知

+

このプレビューでは、通知に関して次のような API の変更点が追加されています。

+ + +

Bluetooth スタイラスのサポート

+

このプレビューでは、Bluetooth スタイラスを使用したユーザー入力のサポートが強化されました。互換性のある Bluetooth スタイラスと電話やタブレットをペアリングして接続できます。 +接続されている間、タッチスクリーンからの位置情報とスタイラスからの筆圧やボタン情報を合わせることで、タッチスクリーン単独の場合よりも表現の幅が大きく広がります。 + +新しい +{@code View.onStylusButtonPressListener} コールバックと {@code GestureDetector.OnStylusButtonPressListener} コールバックをアクティビティに登録すると、スタイラスのボタンが押されたことをアプリがリッスンし、次のアクションを実行できるようになります。 + +

+ +

スタイラスのボタン操作を検出するには、{@link android.view.MotionEvent} メソッドと定数を使用します。 +

+ + +

Bluetooth Low Energy のスキャンの改善

+

+アプリで Bluetooth Low Energy スキャンを実行する場合は、新しい +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} メソッドを使って、設定された +{@link android.bluetooth.le.ScanFilter} に一致する宣伝パケットが最初に見つかったときと、それが長期間見つからない場合に通知する目的でのみコールバックが必要であると指定できます。 + +このスキャン アプローチは、以前のプラットフォーム バージョンで提供されていたものよりもはるかに効率的です。 + +

+ +

アクセス ポイント 2.0 リリース 1 のサポート

+

+このプレビューでは、Nexus 6 と Nexus 9 端末のアクセス ポイント2.0 Release 1 仕様のサポートが追加されました。アクセス ポイント 2.0 の資格情報をアプリに提供するには、 +{@code setPlmn()} や {@code setRealm()} などの +{@link android.net.wifi.WifiEnterpriseConfig} クラスの新しいメソッドを使用します。 +{@link android.net.wifi.WifiConfiguration} オブジェクトで、 +{@link android.net.wifi.WifiConfiguration#FQDN} フィールドと {@code providerFriendlyName} フィールドを設定できます。新しい {@code ScanResult.PasspointNetwork} プロパティは、検出されたネットワークがアクセス ポイント 2.0 のアクセス ポイントを表しているかどうかを示します。 + + +

+ +

4K ディスプレイ モード

+

互換性のあるハードウェアで、ディスプレイの解像度を 4K レンダリングにアップグレードするようアプリから要求できるようになりました。 +現在の物理的解像度を照会するには、新しい +{@code android.view.Display.Mode} API を使用します。UI が低い論理的解像度で描画されていて、より高い物理的解像度にアップスケールされた場合は、 +{@code Display.Mode.getPhysicalWidth()} メソッドが返す物理的解像度が {@link android.view.Display#getSize(android.graphics.Point) getSize()} で報告される論理的解像度と異なる場合があります。 + +

+ +

アプリ ウィンドウの +{@code WindowManager.LayoutParams.preferredDisplayModeId} プロパティを設定することで、アプリの実行時に物理的解像度を変更するようシステムに要求できます。この機能は、4K ディスプレイの解像度に切り替えたい場合に便利です。 +4K ディスプレイ モード中、UI は引き続き元の解像度(1080p など)で表示され、4K にアップスケールされますが、 +{@link android.view.SurfaceView} オブジェクトではコンテンツをネイティブの解像度で表示する場合があります。 +

+ +

テーマ化可能な ColorStateLists

+

M Preview を実行する端末で、テーマの属性が +{@link android.content.res.ColorStateList} でサポートされるようになりました。 +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} メソッドと +{@link android.content.res.Resources#getColor(int) getColor()} メソッドは廃止されました。これらの API を呼び出す場合は、代わりに新しい {@code Context.getColorStateList()} メソッドか +{@code Context.getColor()} メソッドを呼び出します。 +これらのメソッドは、{@link android.support.v4.content.ContextCompat} の v4 appcompat ライブラリにもあります。 +

+ +

オーディオ機能

+ +

このプレビューでは、次のように Android でのオーディオ処理が改善されました。

+ + +

ビデオ機能

+

このプレビューでは、ビデオ処理の API に次のような新機能が追加されました。

+ + +

カメラ機能

+

このプレビューでは、カメラのフラッシュやカメラによる画像の再処理にアクセスするための新しい API が用意されています。 +

+ +

Flashlight API

+

カメラ端末にフラッシュ ユニットが付属している場合は、{@code CameraManager.setTorchMode()} メソッドを呼び出すことで、カメラ端末を開かずにフラッシュ ユニットのタッチモードのオン/オフを切り替えることができます。 +アプリには、フラッシュ ユニットやカメラ端末のフラッシュの独占所有権はありません。 +トーチモードは、カメラ端末が利用不可になったときや、トーチを付けている他のカメラリソースが利用不可になったときにオフになり、利用できなくなります。 + +他のアプリでも {@code setTorchMode()} を呼び出してトーチモードをオフにできます。 +最後にトーチモードをオンにしたアプリが閉じられると、トーチモードはオフになります。 +

+ +

+{@code CameraManager.registerTorchCallback()} メソッドを呼び出すことで、トーチモードの状態に関する通知を受けるようコールバックを登録できます。コールバックを初めて登録したときに、現在検知されているすべてのフラッシュ ユニット付きのカメラ端末のトーチモードの状態が即座に呼び出されます。 + +トーチモードが正常にオン/オフされると、 +{@code CameraManager.TorchCallback.onTorchModeChanged()} メソッドが呼び出されます。

+ +

Reprocessing API

+

{@link android.hardware.camera2 Camera2} API は、YUV とプライベートな不透明形式の画像の再処理をサポートするよう拡張されました。 +アプリは、再処理機能が利用可能かどうかを {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 経由で確認します。 +端末が再処理をサポートしている場合は、 +{@code CameraDevice.createReprocessableCaptureSession()} を呼び出して再処理可能なカメラ撮影セッションを作成し、入力バッファの再処理の要求を作成できます。 + +

+ +

入力バッファのフローをカメラの再処理入力に接続するには、{@code ImageWriter} クラスを使用します。 +空のバッファを取得するには、次のプログラミング モデルを使用します。

+ +
    +
  1. {@code ImageWriter.dequeueInputImage()} メソッドを呼び出します。
  2. +
  3. 入力バッファにデータを入力します。
  4. +
  5. {@code ImageWriter.queueInputImage()} メソッドを呼び出して、バッファをカメラに送ります。
  6. +
+ +

{@code ImageWriter} オブジェクトを +{@code android.graphics.ImageFormat.PRIVATE} 画像と共に使用する場合、アプリから直接画像データにアクセスすることはできません。 +代わりに、{@code ImageWriter.queueInputImage()} メソッドをバッファコピーなしで呼び出して、{@code ImageFormat.PRIVATE} 画像を直接 +{@code ImageWriter} に渡します。 +

+ +

{@code ImageReader} クラスで {@code android.graphics.ImageFormat.PRIVATE} 形式の画像ストリームがサポートされるようになりました。 +これにより、アプリが +{@code ImageReader} 出力画像の循環的な画像のキューを維持でき、1 つ以上の画像を選択して、それらをカメラの再処理用に +{@code ImageWriter} に送ることができます。

+ +

Android for Work の機能

+

このプレビューには、次のような Android for Work 用の新しい API が含まれています。

+ + +

+ M Developer Preview のすべての API の変更点の詳細については、API Differences Report をご覧ください。 +

diff --git a/docs/html-intl/intl/ja/preview/behavior-changes.jd b/docs/html-intl/intl/ja/preview/behavior-changes.jd new file mode 100644 index 0000000..a7950a1 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=動作の変更点 +page.keywords=プレビュー,sdk,compatibility +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

M Developer Preview には、新機能以外にもさまざまなシステムの変更点や API の動作の変更点が盛り込まれています。 +このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。 +

+ +

過去に Android にアプリを公開したことがある場合は、アプリがこれらの変更による影響を受ける場合があることに注意してください。 +

+ +

実行時パーミッション

+

このプレビューでは、アプリのパーミッションを実行時にユーザーが直接管理できる新しいパーミッション モデルが採用されました。 +このモデルによって、ユーザーに対するパーミッションの可視性と制御性が向上し、アプリ開発者にとってはアプリのインストールや自動アップデート プロセスの効率が上がります。ユーザーはインストール済みアプリのパーミッションを個別に付与したり取り消したりできます。 + +

+ +

M Preview を対象としたアプリでは、必ずパーミッションを実行時に確認、要求するようにします。 +アプリにパーミッションが付与されているかどうかを確認するには、新しい {@code Context.checkSelfPermission()} メソッドを呼び出します。 +パーミッションを要求するには、新しい +{@code Activity.requestPermission()} メソッドを呼び出します。アプリが M を対象としていない場合でも、新しいパーミッション モデルでアプリをテストするようにしてください。 +

+ +

アプリで新しいパーミッションをサポートする際の詳細については、Developer Preview ページの +Permissions をご覧ください。 +アプリへの影響を評価する際のヒントについては、Testing Guide をご覧ください。 +

+ +

省電力の最適化

+

このプレビューでは、アイドル中の端末やアプリに対する新しい省電力の最適化機能が採用されています。

+ +

Doze

+

端末が電源に接続されておらず、画面が一定時間オフ状態の場合は Doze モードに入り、システムをスリープ状態に保ちます。 +このモードでは、端末は定期的に通常の操作を短時間再開することで、アプリを同期したり、システムが保留中の操作を行ったりすることができます。 + +

+ +

Doze 中は、アプリに次の制限が適用されます。

+ +

+

端末が Doze モードでなくなると、保留中のすべての同期とジョブが実行されます。

+

この機能をテストするには、M Preview を実行する端末を開発マシンに接続して、次のコマンドを呼び出します。 + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

: +Google Cloud Messaging の次期リリースでは、高優先度のメッセージを指定できます。 + +アプリが高優先度の GCM メッセージを受信する場合は、端末が Doze 中でも短時間のネットワーク アクセスが付与されます。 + +

+ +

アプリで Doze をテストする方法のヒントについては、 +Testing Guide をご覧ください。 +

+ +

App Standby

+

このプレビューでは、アクティブに使用されていないアプリをシステムがアイドル状態であるとみなす場合があります。 +システムが次の信号を検出しない場合、一定時間の経過後にアプリはアイドル状態であるとみなされます。 +

+ + + +

端末が電源に接続されていない場合、アイドル中のみなされたアプリのネットワーク アクセスは無効になり、同期とジョブは保留されます。 +端末が電源に接続されると、アプリのネットワーク アクセスは許可され、保留中のすべてのジョブと同期が実行されます。 +端末が長時間アイドル状態の場合、アイドル中のアプリは 1 日 1 回程度ネットワーク アクセスが許可されます。 +

+ +

この機能をテストするには、M Preview を実行する端末を開発マシンに接続して、次のコマンドを呼び出します。 + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

注: +Google Cloud Messaging(GCM)の次期リリースでは、高優先度のメッセージを指定できます。 + +アプリが高優先度の GCM メッセージを受信する場合は、アプリがアイドル 中でも短時間のネットワーク アクセスが付与されます。 + +

+ +

アプリで App Standby をテストする方法のヒントについては、 +Testing Guide をご覧ください。 +

+ +

追加可能なストレージ端末

+

+このプレビューでは、SD カードなどの外部ストレージ端末を追加できます。外部ストレージ端末を追加すると、端末が内部ストレージのように動作するよう暗号化とフォーマットが行われます。 +この機能によって、アプリとアプリの個人データをストレージ端末間で移動できるようになります。 +アプリを移動する際、システムはマニフェストの +{@code android:installLocation} を遵守します。 + +

+ +

アプリが次の API やフィールドにアクセスする場合は、アプリが内部ストレージ端末と外部ストレージ端末間で移動する際に返されるファイルパスが動的に変化することに注意してください。ファイルパスの構築時は、これらの API を動的に呼び出すことを強くお勧めします。ハードコードされたファイル パスを使用したり、過去にビルドした完全修飾ファイルパスをそのまま使用したりしないでください。 + + +

+ + + +

Developer Preview のこの機能をデバッグするには、USB On-The-Go(OTG)ケーブルで Android 端末に接続された USB ドライブの追加を有効にして、次のコマンドを実行します。 +

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

Apache HTTP Client の削除

+

このプレビューでは、Apache HTTP クライアントのサポートが削除されました。アプリでこのクライアントを使用していて、Android 2.3(API レベル 9)以上を対象としている場合は、代わりに {@link java.net.HttpURLConnection} クラスを使用します。 + +この API は透過的データ圧縮と応答のキャッシュによってネットワーク使用を軽減し、電源の消費を最小化するため、効率性が向上します。 +Apache HTTP API を引き続き使用するには、まず {@code build.gradle} ファイルで次のコンパイル時の依存関係を宣言する必要があります。 + +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Android は、OpenSSL から +BoringSSL ライブラリに移行しています。 +アプリで Android NDK を使用している場合は、{@code libcrypto.so} や {@code libssl.so} など、NDK API の一部でない暗号化ライブラリにリンクしないでください。 +これらのライブラリは パブリック API ではなく、リリースや端末に対する通知なしで変更されたり、中断したりする可能性があります。また、セキュリティ上の脆弱性を露呈する場合もあります。 + +代わりに、ネイティブ コードを変更して JNI 経由で Java の暗号化 API を呼び出すか、希望の暗号化ライブラリに静的リンクします。 + +

+ +

AudioManager の変更点

+

{@link android.media.AudioManager} クラスで音量を直接設定したり、特定のストリームをミュートにしたりする方法はサポートされなくなりました。 +{@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} メソッドは廃止されたため、代わりに +{@code AudioManager.requestAudioFocus()} メソッドを呼び出す必要があります。同様に、 +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} メソッドも廃止され、代わりに {@code AudioManager.adjustStreamVolume()} メソッドを呼び出して、値に {@code ADJUST_MUTE} か {@code ADJUST_UNMUTE} を渡します。 + +

+ +

テキスト選択

+ + + +

ユーザーがアプリ内でテキストを選択するとき、 +切り取りコピー貼り付けなどのテキスト選択のアクションを +フローティング ツール バーに表示できるようになりました。 +個別のビューに対してコンテキスト アクション モードを有効にするにあるように、コンテキスト アクションバーに関するユーザー操作の実装も同様です。 + +

+ +

テキスト選択にフローティング ツール バーを実装するには、既存のアプリに次の変更を加えます。 +

+
    +
  1. {@link android.view.View} オブジェクトか {@link android.app.Activity} オブジェクトで、{@link android.view.ActionMode} の呼び出しを +{@code startActionMode(Callback)} から {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)} に変更します。 +
  2. +
  3. 既存の {@code ActionMode.Callback} の実装を、{@code ActionMode.Callback2} に拡張します。 +
  4. +
  5. {@code Callback2.onGetContentRect()} メソッドをオーバーライドして、ビューのコンテンツの {@link android.graphics.Rect} オブジェクト)テキスト選択の四角形など)の座標を指定します。 +
  6. +
  7. 四角形の位置が有効でなくなり、無効な要素がこれのみである場合は、{@code ActionMode.invalidateContentRect()} メソッドを呼び出します。 +
  8. +
+ +

+Android Support Library revision 22.2 を使用している場合、フローティング ツール バーに下方互換性はなく、デフォルトで appcompat が代わりに {@link android.view.ActionMode} オブジェクトを制御することに注意してください。 + +これにより、フローティング ツール バーは表示されなくなります。 +{@link android.support.v7.app.AppCompatActivity} で +{@link android.view.ActionMode} がサポートされるようにするには、 +{@code android.support.v7.app.AppCompatActivity.getDelegate()} を呼び出して、返された +{@link android.support.v7.app.AppCompatDelegate} オブジェクトで +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} を呼び出し、 入力パラメータを {@code false} に設定します。 +この呼び出して、{@link android.view.ActionMode} オブジェクトの制御がフレームワークに戻ります。 +M Preview を実行する端末ではフレームワークによる +{@link android.support.v7.app.ActionBar} やフローティング ツール バー モードのサポートが可能ですが、M Preview 以前の端末では +{@link android.support.v7.app.ActionBar} モードのみがサポートされます。

+ +

Android キーストロークの変更点

+

このプレビューでは、 +Android Keystore プロバイダによる DSA のサポートがなくなります。 +ECDSA は引き続きサポートされます。

+ +

停止時に暗号化を必要としないキーが、ロック画面の(ユーザーや端末の管理者などによる)無効時やリセット時に削除されなくなりました。 +停止時に暗号化を必要とするキーは、これらのイベント時に削除されます。 +

+ +

Wi-Fi とネットワークの変更点

+ +

このプレビューでは、Wi-Fi API とネットワーク API の動作に次のような変更点が追加されました。

+ + +

カメラ サービスの変更点

+

このプレビューでは、カメラ サービスの共有リソースへのアクセスモデルが、以前の "先着順" モデルから、"優先度順" に変更されました。 + +この動作の変更には、次のようなものがあります。

+ + +

ART ランタイム

+

ART ランタイムで、 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} メソッドに対するアクセスルールを正常に実装できるようになりました。この変更によって、以前のバージョンで Dalvik がアクセス ルールを正しく確認できなかった問題が解決しました。アプリで +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} メソッドを使用していて、アクセス チェックをオーバーライドしたい場合は、 {@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} メソッドを使って入力パラメータを {@code true} に設定します。 + + + + +アプリで +v7 appcompat ライブラリや +v7 recyclerview ライブラリを使用する場合は、これらのライブラリの最新バージョンを使用するようアプリをアップデートする必要があります。 +アップデートしない場合は、XML から参照するカスタム クラスがアップデートされていて、クラス コンストラクタがアクセス可能であることを確認しておく必要があります。 +

+ +

このプレビューでは、動的リンクの動作がアップデートされました。動的リンクでは、ライブラリの {@code soname} とそのパス( +public bug 6670)の違いを認識でき、{@code soname} が実装されています。 + + +以前動作していたアプリで間違った {@code DT_NEEDED} エントリを持つもの(ビルドマシンのファイル システムの絶対パスなど)は、読み込み時に失敗する場合があります。 +

+ +

{@code dlopen(3) RTLD_LOCAL} フラグは正常に実装されました。 +{@code RTLD_LOCAL} はデフォルトのため、 +{@code RTLD_LOCAL} を明示的に使用しない {@code dlopen(3)} への呼び出しは影響を受けます(アプリで明示的に {@code RTLD_GLOBAL} を使用している場合を除く)。 +{@code RTLD_LOCAL} では、後に +{@code dlopen(3)} への呼び出しで読み込まれたライブラリで記号は使用できません({@code DT_NEEDED} エントリによって参照された場合とは逆)。

+

+ +

APK の検証

+

プラットフォームでより厳しい APK の検証が行われるようになりました。APK がマニフェスト ファイルで宣言されているにもかかわらず、APK 自体に存在しない場合、その APK は破損しているとみなされます。 +コンテンツが一部でも削除された場合は、APK の再署名が必要になります。 +

+ +

Android for Work の変更点

+

このプレビューには、次のような Android for Work に関する動作の変更点が含まれています。

+ diff --git a/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd b/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..f582756 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=パーミッション +page.tags=previewresources, androidm +page.keywords=パーミッション,実行時,プレビュー +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

クイックビュー

+
    +
  • アプリのターゲットが M Preview SDK の場合、インストール時ではなく実行時に、パーミッションを付与するようユーザーに求めます。 +
  • +
  • ユーザーはいつでもアプリの [設定] 画面からパーミッションを取り消すことができます。 +
  • +
  • アプリは実行時に毎回、必要なパーミッションがあることを確認する必要があります。 +
  • +
+ +

本書の内容

+
    +
  1. 概要
  2. +
  3. 実行時のパーミッションのコード
  4. +
  5. 実行時のパーミッションをテストする
  6. +
  7. ベスト プラクティス
  8. +
+ + + + +
+
+ + +

+ M Developer Preview では、アプリをインストールしてアップグレードするユーザーのプロセスを効率化する新しいアプリのパーミッション モデルが導入されました。 +M Preview で実行しているアプリで新しいパーミッション モデルがサポートされている場合、ユーザーはアプリをインストールまたはアップグレードするときにパーミッションを付与する必要はありません。その代わりに、アプリは必要になるとパーミッションを要求し、パーミッションを確認するよう求めるダイアログが表示されます。 + + + + +

+ +

+ アプリで新しいパーミッション モデルがサポートされている場合、以前のバージョンの Android を実行している端末で、以前のパーミッション モデルを使ってインストールして実行することもできます。 + + +

+ +

+ 概要 +

+ +

+ M Developer Preview とともに、プラットフォームでは新しいアプリのパーミッション モデルが導入されました。 +この新しいモデルの主要なコンポーネントの概要を次に示します。 +

+ + + +

+ このパーミッション モデルにより、パーミッションを要求する機能に対するアプリの動作方法が変わります。 +このモデルに合わせるために、従う必要のある開発プラクティスの概要を次に示します。 + +

+ + + +

+ 注: アプリのターゲットが M Developer Preview の場合、新しいパーミッション モデルを使う必要があります。 + +

+ +

+ M Developer Preview のローンチ時点では、すべての Google アプリで新しいパーミッション モデルが完全に実装されているわけではありません。 +Google はこれらのアプリを M Developer Preview 中にアップデートして、パーミッションの切り替え設定を完全に実装します。 + + +

+ +

+ 注: アプリに独自の API サーフェスがある場合、まず呼び出し側にそのデータへのアクセスに必要なパーミッションがあることを確認しないままパーミッションをプロキシしないでください。 + + +

+ +

+ システムアプリと署名のパーミッション +

+ +

+ 本来、ユーザーがアプリをインストールするとき、システムはアプリに + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL} のみを付与します。ただし、特定の環境では、アプリにより多くのパーミッションが付与されます。 + +

+ + + +

+ + +どちらの場合でも、ユーザーはシステムの [設定] 画面に移動して [アプリ] > [app_name] > [パーミッション] を選ぶと、いつでもパーミッションを取り消すことができます。アプリは実行時にパーミッションを継続して確認し、必要に応じて要求する必要があります。 + + +

+ +

+ 上方互換と下方互換 +

+ +

+ アプリのターゲットが M Developer Preview 以外の場合、M Preview 端末でも以前のパーミッション モデルを引き続き使います。 +ユーザーがアプリをインストールするとき、ユーザーはアプリのマニフェストでリストされているすべてのパーミッションを付与するように要求されます。 + + +

+ +

+ 注: M Developer Preview を実行している端末で、ユーザーはアプリの [設定] 画面から従来のアプリを含むすべてのアプリのパーミッションをオフにできます。 + +従来のアプリに対してパーミッションをオフにすると、適切な機能がサイレント状態で無効になります。 +アプリがそのパーミッションを必要とする操作を実行しようとするとき、その操作によって必ずしも例外が発生するとは限りません。 + +代わりに、空のデータセットを返す、エラーを示す、または予期しない動作を返すことがあります。 +たとえば、パーミッションなしでカレンダーを照会すると、メソッドは空のデータセットを返します。 + +

+ +

+ M Preview を実行していない端末で新しいパーミッション モデルを使ってアプリをインストールする場合、他のすべてのアプリと同様に扱われ、インストール時に、すべての宣言されたパーミッションを付与するようユーザーに求めます。 + + + +

+ +

+ 注: Preview リリースの場合、M Preview SDK に SDK の最小バージョンを設定して Preview SDK でコンパイルする必要があります。 +つまり、Developer Preview 中は従来のプラットフォームでそのようなアプリをテストできません。 + + +

+ +

パーミッションとインテント

+ +

+ 多くの場合、アプリがタスクを実行するには 2 つの方法から選択できます。 +アプリ自体が操作を実行するパーミッションを要求できます。 +アプリでインテントを使うようにして、別のアプリがそのタスクを実行するようにすることもできます。 + +

+ +

+ たとえば、端末のカメラで写真を撮る機能がアプリに必要だとします。 +アプリは android.permission.CAMERA パーミッションをリクエストでき、それによりアプリが直接カメラにアクセスできるようになります。 + +そのとき、アプリはカメラの API を使ってカメラを制御し、写真を撮ります。 +このアプローチにより、アプリが写真のプロセスを完全に制御し、カメラの UI をアプリに組み込むことができます。 + + +

+ +

+ ただし、そのような制御が不要な場合は、{@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} インテントを使うだけで画像を要求できます。 +インテントを開始すると、カメラアプリ(デフォルトのカメラアプリがない場合)を選んでアプリで写真を撮るよう求めるメッセージが表示されます。 + +カメラアプリはアプリの {@link + android.app.Activity#onActivityResult onActivityResult()} メソッドに写真を返します。 +

+ +

+ 同様に、ユーザーの連絡先にアクセスするなどして電話をかける必要がある場合、適切なインテントを作成するか、パーミッションを要求して適切なオブジェクトに直接アクセスできます。 + +各アプローチにはメリットとデメリットがあります。 + +

+ +

+ パーミッションを使う場合: +

+ + + +

+ インテントを使う場合: +

+ + + +

実行時のパーミッションのコード

+ +

+ アプリのターゲットが新しい M Developer Preview の場合、新しいパーミッション モデルを使う必要があります。 +つまり、マニフェストで必要なパーミッションを宣言する他に、実行時にパーミッションがあることを確認し、まだパーミッションがない場合にはパーミッションを要求します。 + + + +

+ +

+ 新しいパーミッション モデルを有効にする +

+ +

+ 新しい M Developer Preview パーミッション モデルを有効にするには、アプリの targetSdkVersion 属性を "MNC" に、compileSdkVersion"android-MNC" に設定します。 + +このように設定することで、新しいパーミッション機能すべてが有効になります。 + +

+ +

+ Preview リリースの場合、minSdkVersion"MNC" に設定して Preview SDK でコンパイルする必要があります。 + +

+ +

+ M Preview のみに対するパーミッションの設計 +

+ +

+ アプリ マニフェストで新しい <uses-permission-sdk-m> 要素を使って、M Developer Preview のみで必要なパーミッションを表示できます。 +このようにしてパーミッションを宣言すると、アプリを以前の端末にインストールする場合はユーザーにメッセージが表示されないか、アプリにパーミッションが付与されません。<uses-permission-sdk-m> 要素を使うと、新しいパーミッションを追加してインストールをアップデートするときにパーミッションの付与を強制せずにアプリのバージョンがアップデートされます。 + + + + + + +

+ +

+ M Developer Preview を使ってアプリが端末で実行されている場合、<uses-permission-sdk-m><uses-permission> と同じように動作します。 + + + アプリをインストールするとき、パーミッションの付与を求めるメッセージは表示されず、アプリは必要なときにパーミッションを要求します。 + +

+ +

+ パーミッションについてのダイアログを表示する +

+ +

+ アプリで新しい M Developer Preview パーミッション モデルが使われている場合、M Preview を実行している端末でアプリを初めて起動するとき、すべての権限を付与する必要はありません。 + +その代わりに、アプリは必要なときにパーミッションを要求します。 +アプリがパーミッションを要求すると、ユーザーにダイアログが表示されます。 + +

+ +

+ SDK 22 以降がインストールされた端末でアプリを実行する場合、アプリでは以前のパーミッション モデルが使われます。 +ユーザーがアプリをインストールすると、アプリがそのマニフェストで要求するすべてのパーミッションの付与を求めるメッセージが表示されます。ただし、<uses-permission-sdk-m> というラベルの付いたパーミッションは例外です。 + + +

+ +

アプリが実行されているプラットフォームを確認する

+ +

+ このパーミッション モデルは、M Developer Preview を実行している端末でのみサポートされます。 +これらのメソッドのいずれかを呼び出す前に、アプリは {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME} の値を確認してどのプラットフォーム上で実行されているのかを確認する必要があります。 + +端末で M Developer Preview が実行されている場合、{@link android.os.Build.VERSION#CODENAME CODENAME} は "MNC" です。 + +

+ +

アプリに必要なパーミッションがあるかどうかを確認する

+ +

ユーザーがパーミッションを要求する動作を行うと、アプリは現在この操作を実行するためのパーミッションがあるかどうかを確認します。 + + +確認するために、アプリは Context.checkSelfPermission(permission_name) を呼び出します。ユーザーが既にパーミッションを付与していることをアプリが認識している場合でも、ユーザーはいつでもアプリのパーミッションを取り消すことができるため、この確認が行われます。 + + +たとえば、ユーザーがアプリを使って写真を撮る場合、アプリは Context.checkSelfPermission(Manifest.permission.CAMERA) を呼び出します。 + +

+ +

+ 表 1.パーミッションとパーミッション グループ。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
パーミッション グループパーミッション
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

必要に応じてパーミッションを要求する

+ +

アプリに必要なパーミッションがない場合、アプリは Activity.requestPermissions(String[], int) メソッドを呼び出して適切なパーミッションを要求します。 + +アプリは必要なパーミッションと整数の「要求コード」を渡します。 + + このメソッドは非同期に機能します。このメソッドはすぐに返され、ユーザーがダイアログ ボックスに応答した後、システムはその結果と一緒にアプリのコールバック メソッドを呼び出し、アプリが requestPermissions() に渡すのと同じ「要求コード」を渡します。 + + +

+ +

次のコードは、ユーザーの連絡先を読み込むパーミッションがアプリにあることを確認し、必要に応じてパーミッションを要求します。 +

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

パーミッションの要求への応答を処理する

+ +

+ アプリがパーミッションを要求すると、システムによってダイアログ ボックスが表示されます。 +ユーザーが応答すると、システムはアプリの Activity.onRequestPermissionsResult(int, String[], int[]) を呼び出し、ユーザーの応答を渡します。 + +アプリはそのメソッドをオーバーライドする必要があります。コールバックには開発者が requestPermissions() に渡したのと同じ要求コードが渡されます。 + +たとえばアプリが READ_CONTACTS アクセスを要求する場合、次のコールバック メソッドが含まれる可能性があります。 + + +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

ユーザーがパーミッションを付与すると、システムは、機能領域のアプリ マニフェストがリストするすべてのパーミッションを付与します。 +ユーザーが要求を拒否する場合は、適切なアクションを取ってください。 +たとえば、このパーミッションに応じて、すべてのメニュー アクションを無効にできます。 + + +

+ +

+ ユーザーにパーミッションの付与を確認するとき、ユーザーにそのパーミッションについて再度確認しないようにするオプションがあります。 +この場合、アプリが requestPermissions() を使ってパーミッションを確認すると、システムはその要求をすぐに拒否します。 + +この場合、システムはユーザーが要求を再度明示的に拒否する場合と同様に onRequestPermissionsResult() を呼び出します。 + +このため、アプリではユーザーとの直接的なやり取りが発生することが想定されません。 + +

+ +

実行時のパーミッションをテストする

+ + +

+ アプリのターゲットが M Developer Preview の場合、パーミッションが正しく処理されることをテストする必要があります。 +アプリ起動時に特定のパーミッションがアプリにあることは想定できません。 +アプリが初めて起動されるとき、パーミッションがない可能性が高く、ユーザーはいつでもパーミッションを取り消すまたは復元できます。 + + +

+ +

+ アプリがすべてのパーミッションの状況下で確実に正しく動作することをテストしてください。 +M Preview SDK とともに、新しい Android デバッグ ブリッジ(adb)コマンドが導入され、試す必要のあるあらゆるパーミッション設定でアプリをテストできます。 + + + +

+ +

+ 新しい adb コマンドとオプション +

+ +

+ M Preview SDK Platform-tools では、アプリがパーミッションをどう処理するかをテストするための、いくつかの新しいコマンドが導入されました + +

+ +

+ パーミッション付きでインストールする +

+ +

+ adb + install コマンドの新しい -g オプションを使ってアプリをインストールし、そのマニフェストにリストされるすべてのパーミッションを付与できます。 + +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ パーミッションの付与と取り消し +

+ +

+ 新しい ADB Package Manager(pm)コマンドを使って、インストールされているアプリにパーミッションを付与したり取り消したりできます。この機能は自動化されたテストに役立ちます。 + + +

+ +

+ パーミッションを付与するには、Package Manager の grant コマンドを使います。 +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ たとえば、com.example.myapp パッケージ パーミッションを付与してオーディオを録音するには、このコマンドを使います。 + +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ パーミッションを取り消すには、Package Manager の revoke コマンドを使います。 +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

ベスト プラクティス

+ +

+ 新しいパーミッション モデルにより、ユーザーはよりスムーズな操作感を得られ、アプリを簡単にインストールできるようになり、アプリが実行している内容に満足します。 + +新しいモデルを最大限に活用するために、次のベスト プラクティスをお勧めします。 + +

+ + +

必要なパーミッションのみを要求する

+ +

+ パーミッションを要求するたびに、ユーザーに決定するよう強制します。 + ユーザーが要求を却下すると、アプリの機能が低下します。 + これらの要求回数は最小限にしてください。 +

+ +

+ たとえば、アプリがパーミッションを要求する代わりに、インテントを使って必要な機能を取得できる場合がよくあります。 + +アプリが携帯電話のカメラで写真を撮る必要がある場合、そのアプリでは {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE} インテントを使用できます。 +アプリがインテントを実行すると、写真を撮るためのインストール済みのカメラアプリを選ぶようユーザーに促します。 + + +

+ +

+ ユーザーを疲れさせない +

+ +

+ ユーザーにパーミッションをたくさん要求すると、ユーザーを疲れさせてしまい、アプリが終了される原因になります。代わりに、ユーザーには必要なパーミッションのみを要求してください。 + + +

+ +

+ アプリ対して 1 つ以上のパーミッションが必須である場合もあります。その場合は、アプリの起動後すぐに、すべてのパーミッションを要求することが合理的である場合があります。 + +たとえば、カメラアプリを作成する場合、アプリは端末のカメラにアクセスする必要があります。 +アプリを初めて起動するときにカメラの使用についてのパーミッションを求められても驚かないはずです。 + +ただし、同じアプリにユーザーの連絡先と写真を共有する機能もある場合は、最初の起動時にパーミッションを要求しない方が無難です。 + +その代わりに、ユーザーが「共有」機能を使うまで待ち、そのときにパーミッションを要求します。 + +

+ +

+ アプリにチュートリアルが含まれる場合は、チュートリアルのシーケンスの最後で、アプリに必須のパーミッションを要求する方が合理的です。 + +

+ +

+ パーミッションが必要な理由を説明する +

+ +

+ requestPermissions() を呼び出すとき、システムによって表示されるパーミッション ダイアログにはアプリが必要としているパーミッションは表示されますが、理由は表示されません。 + +これによりユーザーが困惑する場合もあります。 + requestPermissions() を呼び出す前に、アプリがパーミッションを必要としている理由をユーザーに説明するのはよい方法です。 + +

+ +

+ たとえば、カメラアプリでは、位置情報サービスを使って写真に位置情報タグを付けられるようにする場合があります。 +通常のユーザーは、写真に位置情報が含まれる場合があることを認識していない可能性があり、なぜカメラアプリで位置情報が必要なのか困惑する可能性があります。 + +この場合、アプリが requestPermissions() を呼び出すに、この機能についてユーザーに知らせることをお勧めします。 + + +

+ +

+ その方法として、これらの要求をアプリのチュートリアルに組み込むこともできます。チュートリアルでは、アプリの各機能を順番に表示できるので、必要なパーミッションを説明できます。 + +たとえば、カメラアプリのチュートリアルでは、「連絡先と写真を共有する」機能について説明し、ユーザーの連絡先を参照するためにアプリにパーミッションが必要であることをユーザーに知らせることができます。 + + +その後、アプリは requestPermissions() を呼び出して、ユーザーにそのアクセスを求めることができます。 +もちろん、すべてのユーザーがチュートリアルに従うわけではないため、アプリの通常操作中にパーミッションを確認して要求することも必要です。 + + +

diff --git a/docs/html-intl/intl/ja/preview/overview.jd b/docs/html-intl/intl/ja/preview/overview.jd new file mode 100644 index 0000000..4cefdd1 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=プログラム概要 +page.metaDescription=Android M Developer Preview では、Android の次のバージョンでアプリをテストして最適化するためのすべてを備えています。 +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ Android M Developer Preview では、Android の次のバージョンでアプリをテストして最適化するためのすべてを備えています。 + +M Developer Preview ツールをダウンロードするだけで、無料ですぐにご利用いただけます。 + +

+ +
+
+
+
+
+ ハードウェアとエミュレータのシステム イメージ +
+ +

+ Nexus 5、6、9、Nexus Player(TV 向け)やエミュレータでアプリをテストしましょう。 + +

+
+ +
+
+ 最新プラットフォーム コード +
+ +

+ プレビューで複数のアップデートが提供されますので、最新プラットフォームの変更に応じてテストできます。 + +

+
+ +
+
+ OTA でのアップデート +
+ +

+ デバイスに初期プレビューをコピーしたら、無線経由でアップデートを入手できます。 + +

+
+
+ +
+ + +
+
+ 新しい動作と機能 +
+ +

+ 新しい実行時パーミッション モデルや省電力機能など、新しいプラットフォームの動作をあらかじめサポートする + +

+
+ +
+
+ 開発者が報告した問題に対する優先度ウィンドウ +
+ +

+ 最初の数週間で開発者から報告のあった問題について優先度を設定し、可能な限り早くテストを行いフィードバックを提供できるようにします。 + +

+
+ +
+
+ フィードバックとサポート +
+ +

+ Issue Tracker で問題を報告し、フィードバックをお送りください。 + M Developer コミュニティ で他の開発者とつながりましょう。 + +

+
+
+
+
+ + + + +

+ タイムラインとアップデート +

+Preview program timeline +

+ M Developer Preview は 5 月 28 日から最終の Android M SDK まで実行されます。Android M SDK はまもなく、2015 年第三四半期に予定されている正式公開の前にリリースされます。 + + +

+ +

+ 開発の主なマイルストーンごとにテスト端末へアップデートを配信する予定としています。 + 暫定マイルストーンは以下のとおりです。 +

+ + + +

+ アップデートは第三四半期後半に予定されている最終 SDK で終了します。最終版では新しい Android に対する正式な API や最終的なシステム動作や機能が提供されます。 + + +

+ +

+ Android M でのテストや開発に際しては、Preview アップデートがリリースされるたびに開発環境を最新に保つことを強くお勧めします。 + + プロセスをより容易にするため、既に Preview ビルドがインストールされた端末に無線経由でアップデート(OTA)を配信します。また手動でダウンロードして展開できるシステム イメージもご提供します。 + + +

+

+ 注: 最終 SDK とシステム イメージは OTA では配信できません。代わりにテスト端末に手動でコピーする必要があります。 + + +

+ +

+ Preview アップデートをご利用いただけるようになった際は Android デベロッパー ブログ、このサイト、Android M デベロッパー コミュニティでお知らせします。 + + +

+ +

+ Preview の内容 +

+ +

+ M Developer Preview では、ご利用のアプリをさまざまな画面サイズ、ネットワーク、テクノロジー、CPU や GPU チップセット、ハードウェア設計でテストするために必要なあらゆるものを備えています。 + + +

+ +

+ SDK ツール +

+ +

+ 各コンポーネントは Android Studio の SDK Manager でダウンロードできます。 +

+ + + +

+ ハードウェアのシステム イメージ +

+ +

+ Nexus 端末向けハードウェア システム イメージは、ダウンロード ページからダウンロードできます。 + +

+ + + +

+ ドキュメントとサンプル コード +

+ +

+ 次のドキュメント リソースで Preview についての詳細をご確認いただけます。 +

+ + + +

+ サポート リソース +

+ +

+ M Developer Preview でのテストや開発について、次のサポート リソースをご確認いただけます。 + +

+ + + + +

+ 対象、プレビュー API、公開 +

+ +

+ Android M Developer Preview は開発リリースのみであり、標準 API レベルはありません。 +アプリのテストで互換性の問題は除外する場合(強く推奨します)、アプリのtargetSdkVersion“MNC” に設定することで M Developer Preview を対象にできます。 + + + +

+ +

+ Android M Developer Preview ではプレビュー API を配信しています。現在 2015 年度第三四半期に予定されている最終 SDK がリリースされるまで、API は正式版ではありません。 + +つまり、時間がたつにつれて API の細かな変更が見込まれます(特にプログラムの最初の数週間)。 + +Android M Developer Preview でアップデートがあればその都度変更の概要をご提供します。 + +

+ +

+ プレビュー API は変更される可能性がありますが、実行時パーミッションや省電力機能などのシステムの基幹にかかわる機能には変更はありませんので、すぐにテストしていただけます。 + + +

+ +

+ 公開に関して、Google Play では M Developer Preview 対象アプリは公開できません。 +Android M 最終 SDK が利用可能になれば正式な Android M API レベルを対象にして、Google Play でアプリを公開できるようになります。 + +それまでは、Android M 対象のアプリをテスターに配布する場合は電子メールで送付したりご自分のサイトから直接ダウンロードしてもらったりしてください。 + + +

+ +

+ 開始するには +

+ +

+ アプリのテストをはじめるには: +

+ +
    +
  1. API 概要Behavior Changes で新しい機能やご自分のアプリへの影響についてご確認ください。 + +特に、実行時パーミッション モデルや省電力機能、自動バックアップ機能についてお確かめください。 + + +
  2. + +
  3. Setting up the Preview SDK の手順に従い、ご利用の環境をセットアップしてテスト端末を構成してください。 + + +
  4. + +
  5. コピー手順に従い、最新の M Developer Preview システム イメージを Nexus 5、6、9、Nexus Player にコピーします。 + +1 度開発端末に Preview 環境をコピーすると、アップデートが無線経由(OTA)で配信されます。 + +
  6. + +
  7. M Preview API リファレンスM Preview サンプルをダウンロードして、新しい API の機能についてさらに学び、ご自分のアプリで活用する方法についてご確認ください。 + + + +
  8. + +
  9. Android M Developer コミュニティに参加して最新のニュースを入手し、Preview に取り組んでいる他のデベロッパーとつながってください。 + + +
  10. +
+ +

+ Android M Developer Preview プログラムへのご参加ありがとうございます。 +

diff --git a/docs/html-intl/intl/ko/preview/api-overview.jd b/docs/html-intl/intl/ko/preview/api-overview.jd new file mode 100644 index 0000000..aac9a44 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API 개요 +page.keywords=미리 보기, SDK, 호환성 +page.tags=previewresources, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

M 개발자 미리 보기에서는 다가오는 Android 플랫폼 릴리스를 미리 볼 수 있도록 하였습니다. 이 릴리스는 사용자와 앱 개발자를 위한 여러 가지 새 기능을 제공합니다. + + 이 문서에서는 가장 중요한 API를 몇 가지 소개합니다.

+ +

M 개발자 미리 보기는 개발자 얼리 어답터테스터를 위해 마련된 것입니다. + Android 프레임워크가 나아갈 방향에 영향을 미치는 데 관심이 있으시다면, M 개발자 미리 보기를 시도해 보시고 피드백을 보내주세요! + + +

+ +

주의: M 개발자 미리 보기를 사용하는 앱을 Google Play 스토어에 게시하지 마세요. +

+ +

참고: 이 문서에서 종종 언급하는 클래스와 메서드 중에는 아직 developer.android.com에서 참조 자료로 이용할 수 없는 것도 있습니다. + 이와 같은 API 요소는 이 문서에서 {@code code style}로 형식 지정되어 있습니다(하이퍼링크 없이). + 이러한 요소에 대한 임시 API 관련 문서가 필요한 경우, 미리 보기 참조를 다운로드하세요. +

+ +

중요한 동작 변경

+ +

이전에 Android용 앱을 게시한 적이 있는 경우, 플랫폼 변경으로 인해 앱이 영향받을 수 있다는 점을 유의하세요. +

+ +

완전한 정보는 동작 변경을 참조하세요.

+ +

앱 연결

+

이 미리 보기는 더욱 강력한 앱 연결을 제공하여 Android의 인텐트 시스템을 한층 강화합니다. 이 기능을 사용하면 앱을 본인이 소유한 웹 도메인과 연관시킬 수 있습니다. + 플랫폼은 이 연관 관계를 근거로 특정한 웹 링크를 처리하는 데 사용할 기본 앱을 결정할 수 있고 사용자에게 앱을 선택하라는 메시지를 건너뛸 수 있습니다. 이 기능을 구현하는 방법을 알아보려면 앱 연결을 참조하세요. + + + + +

앱용 자동 백업

+

시스템에서 이제 앱에 대한 완전한 데이터 백업과 복원을 자동으로 수행합니다. 이 동작은 앱 대상 지정 M 미리 보기에 대한 기본으로 활성화되며, 추가 코드를 전혀 추가하지 않아도 됩니다. + 사용자가 Google 계정을 삭제하면 계정의 백업 데이터도 함께 삭제됩니다. + 이 기능의 작동 원리와 파일 시스템에서 백업 내용 구성하는 방법에 대해 알아보려면 앱용 자동 백업을 참조하세요. + +

+ +

인증

+

이 미리 보기에서는 사용자를 인증할 때 지원되는 기기에서 지문 스캔을 사용하도록 해주는 새로운 API를 제공합니다. 또한 기기 잠금 해제 메커니즘(예: 화면 잠금 비밀번호)을 사용해 사용자의 마지막 인증 시간을 확인할 수도 있습니다. + + 이러한 API는 Android Keystore 시스템과 함께 사용하세요. +

+ +

지문 인증

+ +

지문 스캔을 통해 사용자를 인증하려면 새로운 {@code android.hardware.fingerprint.FingerprintManager} 클래스의 인스턴스를 가져와 {@code FingerprintManager.authenticate()} 메서드를 호출하세요. + + 앱이 지문 센서가 있는 호환되는 기기에서 실행되고 있어야 합니다. + 지문 인증 흐름에 대한 사용자 인터페이스를 앱에 구현해야 하며, UI에 표준 Android 지문 아이콘을 사용해야 합니다. 이 Android 지문 아이콘({@code c_fp_40px.png})은 샘플 앱에 포함되어 있습니다. 지문 인증을 사용하는 앱을 여러 개 개발하는 경우, 각 앱이 사용자의 지문을 따로따로 인증해야 한다는 사실을 명심하세요. + + + + +

+ +

앱에서 이 기능을 사용하려면 우선 매니페스트에 {@code USE_FINGERPRINT} 권한을 추가해야 합니다. +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

지문 인증의 앱 구현을 확인하려면, 지문 대화 샘플을 참조하세요. + +

+ +

이 기능을 테스트하는 경우, 다음 단계를 따르면 됩니다.

+
    +
  1. 아직 Android SDK 도구 수정 버전 24.3을 설치합니다(설치하지 않은 경우).
  2. +
  3. 에뮬레이터에 새 지문을 등록하려면 설정 > 보안 > 지문으로 이동한 다음, 등록 지침을 따르면 됩니다. +
  4. +
  5. 에뮬레이터를 사용하여 지문 터치 이벤트를 에뮬레이트하되 다음 명령을 사용하세요. + 잠금 화면이나 앱에서 지문 터치 이벤트를 에뮬레이트할 때에도 같은 명령을 사용합니다. + +
    +adb -e emu finger touch <finger_id>
    +
    +

    Windows에서는 {@code telnet 127.0.0.1 <emulator-id>}에 뒤이어 {@code finger touch <finger_id>}를 실행해야 할 수도 있습니다. + +

    +
  6. +
+ +

확인 자격 증명

+

앱에서 사용자를 인증할 때 해당 사용자가 기기를 마지막으로 잠금 해제한 시간을 근거로 할 수 있습니다. 이 기능을 사용하면 사용자가 앱에 따라 각기 다른 비밀번호를 기억할 필요가 없어지고, 개발자는 자신만의 인증 사용자 인터페이스를 구현하지 않아도 됩니다. + + 앱에서 이 기능을 사용하려면 사용자 인증에 대한 공개 또는 비밀 키 구현과 함께 사용해야 합니다. +

+ +

사용자를 성공적으로 인증한 다음 같은 키를 재사용하기 위한 시간 초과 기간을 설정하려면, 새로운 {@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} 메서드를 호출하세요. {@link javax.crypto.KeyGenerator} 또는 {@link java.security.KeyPairGenerator}를 설정할 때 사용하면 됩니다. + + + + 현재 이 기능은 대칭형 암호화 작동에 맞게 작동합니다. +

+ +

재인증 대화창을 과도하게 표시하는 것을 삼가세요. 우선 앱에서 암호화 객체 사용을 시도해보고, 제한 시간이 만료되면 {@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} 메서드를 사용해 앱 내에서 해당 사용자를 재인증하면 됩니다. + + + +

+ +

이 기능의 앱 구현을 확인하려면, 확인 자격 증명 샘플를 참조하세요. + +

+ +

직접 공유

+ + + +

이 미리 보기에서는 사용자가 공유 기능을 간편하고 신속하게 이용할 수 있도록 해주는 API를 제공합니다. 이제 앱에서 특정 액티비티를 시작하는 직접 공유 대상을 정의할 수 있습니다. 이와 같은 직접 공유 대상은 공유 메뉴를 통해 사용자에게 노출됩니다. + + 이 기능을 사용하면 사용자가 다른 앱 내의 대상(예: 연락처)에 대해 콘텐츠를 공유할 수 있습니다. + 예를 들어, 직접 공유 대상이 다른 소셜 네트워크 앱에서 액티비티를 시작하면 사용자가 해당 앱에 있는 특정 친구나 커뮤니티와 콘텐츠를 공유할 수 있습니다. + +

+ +

직접 공유 대상을 활성화하려면 반드시 {@code android.service.} +
+{@code chooser.ChooserTargetService} 클래스를 확장하는 클래스를 정의해야 합니다. 매니페스트에서 {@code ChooserTargetService}를 선언하고 + 해당 선언 내에서 {@code BIND_CHOOSER_TARGET_SERVICE} 권한을 지정하고 {@code SERVICE_INTERFACE} 작업으로 인텐트 필터를 지정합니다. + +

+

다음 예는 매니페스트에서 {@code ChooserTargetService}를 선언할 수 있는 방법입니다. +

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

{@code ChooserTargetService}에 노출하고자 하는 액티비티마다 {@code <meta-data>} 요소를 하나씩 추가하고, 앱 매니페스트에 {@code "android.service.chooser.chooser_target_service"} 이름을 추가합니다. + + +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

음성 상호작용

+

+이 미리 보기에서 제공하는 새로운 음성 상호작용 API는 음성 액션과 같이 앱에 대화형 음성 환경을 구축할 수 있도록 합니다. + + {@code android.app.Activity.isVoiceInteraction()} 메서드를 호출하여 액티비티가 음성 액션에 대응하여 시작된 것인지 알아보세요. + + 이 경우에 해당되면, 앱이 {@code android.app.VoiceInteractor} 클래스를 사용하여 사용자로부터 음성 확인을 요청하거나, 선택 항목 목록에서 선택하게 하는 등 여러 가지 일을 할 수 있습니다. + + 음성 액션 구현에 대한 자세한 정보는 음성 액션 개발자 사이트를 참조하세요. + +

+ +

지원 API

+

+이 미리 보기에서는 사용자가 도우미를 통해 앱에 참여하게 하는 새로운 방식을 제시합니다. 이 기능을 사용하려면, 사용자가 현재 컨텍스트를 사용하기 위해 도우미를 활성화해야 합니다. + 일단 활성화하고 나면 버튼을 길게 눌러 해당 도우미를 어느 앱에서나 불러낼 수 있습니다. +

+

앱이 현재 컨텍스트를 도우미와 공유하지 않기로 선택하는 경우, {@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 플래그를 설정하면 됩니다. + 플랫폼이 도우미에게 전달하는 일반적인 일련의 정보 외에도 앱이 추가적인 정보를 공유할 수 있도록 하려면 새로 나온 {@code android.app.Activity.AssistContent} 클래스를 사용할 수 있습니다. + +

+ +

도우미에게 앱에서 가져온 추가 컨텍스트를 제공하려면, 다음 단계를 따르면 됩니다.

+ +
    +
  1. {@link android.app.Application.OnProvideAssistDataListener} 인터페이스를 구현합니다.
  2. +
  3. {@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}를 사용하여 이 수신기를 등록합니다. +
  4. +
  5. 액티비티에 따라 각기 다른 상황별 정보를 제공하려면 {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} 콜백을 재정의하고, 선택 사항으로 새로운 {@code Activity.onProvideAssistContent()} 콜백도 재정의합니다. + + +
+ +

알림

+

이 미리 보기에서는 알림 기능에 다음과 같은 API 변경을 추가합니다.

+ + +

블루투스 스타일러스 지원

+

이 미리 보기에서는 블루투스 스타일러스를 사용하는 사용자 입력에 대한 지원을 개선하여 제공합니다. 사용자는 전화기나 태블릿을 호환되는 블루투스 스타일러스와 페어링하고 이에 연결할 수 있습니다. + 연결된 동안 터치 스크린에서 가져온 위치 정보가 스타일러스에서 가져온 압력 및 버튼 정보와 합쳐져 하나의 터치 스크린을 사용할 때보다 훨씬 폭넓은 표현을 제공합니다. + + 앱이 스타일러스 버튼 누르기를 수신 대기하고 보조 작업을 수행하도록 하려면, 액티비티에 새로운 {@code View.onStylusButtonPressListener} 및 {@code GestureDetector.OnStylusButtonPressListener} 콜백을 등록하면 됩니다. + + +

+ +

스타일러스 버튼 상호작용을 감지하려면 {@link android.view.MotionEvent} 메서드와 상수를 사용하세요. +

+ + +

블루투스 저전력 스캔 개선

+

+앱이 블루투스 저전력 스캔을 수행하는 경우, 새로운 {@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 메서드를 사용해 콜백에 알림을 원하는 시점을 지정할 수 있습니다.즉, 정해진 {@link android.bluetooth.le.ScanFilter}에 일치하는 광고 패킷을 처음 찾았을 때와 이것을 일정한 시간 동안 확인하지 못했을 때에만 콜백에 알리도록 하면 됩니다. + + + + 스캔 기능에 대해 이런 식으로 접근하면 이전 버전의 플랫폼에서 제공되었던 것에 비해 훨씬 전력 효율적입니다. + +

+ +

핫스팟 2.0 릴리스 1 지원

+

+이 미리 보기에서는 Nexus 6 및 Nexus 9 기기에서의 핫스팟 2.0 릴리스 1 사양에 대한 지원을 추가합니다. 앱에 핫스팟 2.0 자격 증명을 프로비저닝하려면 {@link android.net.wifi.WifiEnterpriseConfig} 클래스의 새 메서드를 사용할 수 있습니다(예: {@code setPlmn()} 및 {@code setRealm()}). + + + {@link android.net.wifi.WifiConfiguration} 객체에서는 {@link android.net.wifi.WifiConfiguration#FQDN} 및 {@code providerFriendlyName} 필드를 설정하면 됩니다. 새로 나온 {@code ScanResult.PasspointNetwork} 속성이 감지된 네트워크가 핫스팟 2.0 액세스 지점을 나타내는지 여부를 알려줍니다. + + + +

+ +

4K 디스플레이 모드

+

이제 플랫폼에서 앱이 호환되는 하드웨어에서 디스플레이 해상도를 4K 렌더링으로 업그레이드하도록 요청할 수 있습니다. + 현재의 물리적 해상도를 쿼리하려면 새로운 {@code android.view.Display.Mode} API를 사용할 수 있습니다. + UI가 더 낮은 논리적 해상도에서 그려졌고 더 큰 물리적 해상도에 맞춰 확장된 경우, {@code Display.Mode.getPhysicalWidth()} 메서드가 반환하는 물리적 해상도가 {@link android.view.Display#getSize(android.graphics.Point) getSize()}가 보고하는 논리적 해상도와 다를 수 있다는 점을 유의하세요. + + +

+ +

앱이 실행되는 중에 시스템에 물리적 해상도를 변경하도록 요청할 수도 있습니다. 앱의 창에서 {@code WindowManager.LayoutParams.preferredDisplayModeId} 속성을 설정하면 됩니다. + 이 기능은 4K 디스플레이 해상도로 전환하고자 하는 경우 무척 유용합니다. + 4K 디스플레이 모드에서 UI는 계속 원래 해상도(예: 1080p)에서 렌더링되며 4K로 확장되지만, {@link android.view.SurfaceView} 객체는 원래 해상도에서 콘텐츠를 표시할 수 있습니다. + +

+ +

테마 지정 가능 ColorStateLists

+

이제 M 미리 보기를 실행하는 기기에 대해 테마 속성이 {@link android.content.res.ColorStateList}에서 지원됩니다. + {@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 및 {@link android.content.res.Resources#getColor(int) getColor()} 메서드는 사용이 중단되었습니다. + + 이러한 API를 호출하려면, 대신 새로운 {@code Context.getColorStateList()} 또는 {@code Context.getColor()} 메서드를 호출하세요. + + 이 두 메서드는 v4 AppCompat 라이브러리에서도 {@link android.support.v4.content.ContextCompat}를 통해 이용할 수 있습니다. +

+ +

오디오 기능

+ +

이 미리 보기에서는 Android에서의 오디오 처리에 개선점을 더했습니다.

+ + +

비디오 기능

+

이 미리 보기에서는 비디오 처리 API에 새로운 기능을 추가합니다.

+ + +

카메라 기능

+

이 미리 보기에는 다음과 같은 새 API를 제공하여 카메라의 플래시에 액세스하고 이미지를 재처리하는 카메라에 액세스할 수 있도록 했습니다. +

+ +

Flashlight API

+

카메라 기기에 플래시 장치가 있는 경우, {@code CameraManager.setTorchMode()} 메서드를 호출하여 카메라 기기를 열지 않고도 플래시 장치의 Torch 모드를 켜거나 끌 수 있습니다. + 앱에는 플래시 장치 또는 카메라 기기에 대한 독점적인 소유권이 없습니다. + Torch 모드는 꺼져 있다가 카메라 기기를 이용할 수 없게 될 때마다 이용 불가능한 상태가 되고, Torch 모드를 켜진 상태로 유지하던 다른 카메라 리소스를 이용할 수 없게 되면 이용 불가능하게 됩니다. + + 다른 앱도 {@code setTorchMode()}를 호출하여 Torch 모드를 끌 수 있습니다. + Torch 모드를 켠 마지막 앱이 종료되면 Troch 모드도 꺼집니다. +

+ +

Torch 모드 상태에 대해 알림을 받기 위한 콜백을 등록하려면 {@code CameraManager.registerTorchCallback()} 메서드를 호출하면 됩니다. + 콜백을 처음 등록하면 그 즉시, 현재 알려진 모든 카메라 기기(플래시 장치가 있는)의 Torch 모드 상태와 함께 호출됩니다. + + Torch 모드가 성공적으로 켜지거나 꺼지면 {@code CameraManager.TorchCallback.onTorchModeChanged()} 메서드가 불려나옵니다. +

+ +

재처리 API

+

{@link android.hardware.camera2 Camera2} API를 확장하여 YUV를 지원하고 비공개 불투명 형식 이미지 재처리를 지원하게 되었습니다. + 앱은 재처리 기능을 이용할 수 있는지 알아보기 위해 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}를 통합니다. + 기기가 재처리를 지원하는 경우, 재처리 가능한 카메라 캡처 세션을 생성하려면 {@code CameraDevice.createReprocessableCaptureSession()}을 호출하고 입력 버퍼 재처리를 위한 요청을 생성하면 됩니다. + + +

+ +

{@code ImageWriter} 클래스를 사용하여 카메라 재처리 입력에 입력 버퍼 흐름을 연결시키세요. + 빈 버퍼를 가져오려면 다음과 같은 프로그래밍 모델을 따르면 됩니다.

+ +
    +
  1. {@code ImageWriter.dequeueInputImage()} 메서드를 호출합니다.
  2. +
  3. 입력 버퍼에 이 데이터를 채웁니다.
  4. +
  5. {@code ImageWriter.queueInputImage()} 메서드를 호출하여 해당 버퍼를 카메라에 전송합니다.
  6. +
+ +

{@code ImageWriter} 객체와 {@code android.graphics.ImageFormat.PRIVATE} 이미지를 함께 사용하는 경우, 앱이 이미지 데이터에 직접 액세스할 수 없습니다. + + 대신, 버퍼 사본 없이 {@code ImageWriter.queueInputImage()} 메서드를 호출하여 {@code ImageFormat.PRIVATE} 이미지를 {@code ImageWriter}에 직접 전달하면 됩니다. + +

+ +

이제 {@code ImageReader} 클래스가 {@code android.graphics.ImageFormat.PRIVATE} 형식 이미지 스트림을 지원합니다. + 이로써 앱이 {@code ImageReader} 출력 이미지의 원형 이미지 대기열을 유지하고 하나 이상의 이미지를 선택하여 이들을 {@code ImageWriter}에 보내 카메라 재처리를 할 수 있습니다. + +

+ +

Android for Work 기능

+

이 미리 보기에는 다음과 같은 Android for Work에 대한 새 API가 포함되어 있습니다.

+ + +

+ M 개발자 미리 보기의 모든 API 변경 내용에 대한 상세한 정보는 API 차이점 보고서를 참조하세요. +

diff --git a/docs/html-intl/intl/ko/preview/behavior-changes.jd b/docs/html-intl/intl/ko/preview/behavior-changes.jd new file mode 100644 index 0000000..fa95070 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=동작 변경 +page.keywords=미리 보기, SDK, 호환성 +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

M 개발자 미리 보기에는 새로운 기능 및 특징과 더불어 다양한 시스템 변경과 API 동작 변경 내용이 포함되어 있습니다. + 이 문서에서는 개발자 여러분이 숙지해야 하고 앱을 개발할 때 감안해야 하는 몇 가지 주요 변경 내용을 소개하겠습니다. +

+ +

이전에 Android용 앱을 게시한 적이 있는 경우, 이와 같은 플랫폼 변경으로 인해 앱이 영향을 받을 수 있다는 점을 유의하세요. +

+ +

런타임 권한

+

이 미리 보기에서는 새 권한 모델을 소개합니다. 여기에서는 이제 사용자가 런타임에 직접 앱 권한을 관리할 수 있게 됩니다. + 이 모델을 사용하면 사용자에게 개선된 가시성과 권한에 대한 제어권을 부여하는 한편 앱 개발자에게는 설치와 자동 업데이트 과정을 간소화해줍니다. 사용자는 설치된 여러 앱에 대해 따로따로 권한을 허용하거나 취소할 수 있습니다. + +

+ +

M 미리 보기를 대상으로 하는 앱을 개발하는 경우, 권한 확인과 요청은 런타임에 해야 합니다. + 앱에 어떤 권한이 허용되었는지 판단하려면, 새로운 {@code Context.checkSelfPermission()} 메서드를 호출하면 됩니다. + 권한을 요청하려면 새 {@code Activity.requestPermission()} 메서드를 호출하세요. + 앱이 M을 대상으로 하지 않더라도, 앱을 새 권한 모델에서 테스트해보는 것이 좋습니다. +

+ +

앱에서 새 권한 모델을 지원하는 방법에 대한 자세한 내용은 권한 개발자 미리 보기 페이지를 참조하세요. + + 앱에 미친 영향을 평가하는 방법에 대한 팁은 테스트 가이드를 참조하세요. +

+ +

절전 최적화

+

이 미리 보기에서는 유휴 상태의 기기 및 앱에 대한 새로운 절전 최적화 기능을 소개합니다.

+ +

Doze

+

기기의 플러그가 뽑히고 화면이 꺼진 채로 일정 시간 동안 변화 없는 상태로 유지되면, Doze 상태로 들어갑니다. 이 상태에서는 기기가 시스템을 절전 모드 상태로 유지하려 시도합니다. + 이 모드에서 기기는 정기적으로 잠시 동안 정상 작동을 재개하여 앱 동기화가 일어날 수 있도록 하고 보류된 작업이 있으면 시스템이 이를 수행할 수 있도록 합니다. + +

+ +

앱이 Doze 상태에 있는 동안 다음과 같은 제한 사항이 적용됩니다.

+ +

+

기기가 Doze 모드를 종료하면 보류되어 있던 작업과 동기화를 모두 실행합니다.

+

이 기능을 테스트하려면 개발 머신에 M 미리 보기를 실행하는 기기를 연결하여 다음과 같은 명령을 호출하면 됩니다. + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

참고: 다가오는 Google Cloud 메시지 릴리스에서는 개발자에게 우선 순위가 높은 메시지를 지정하게 해줍니다. + + + 앱이 우선 순위가 높은 GCM 메시지를 수신하면 이 앱에는 기기가 Doze 모드에 있더라도 잠시 네트워크 액세스가 허용됩니다. + +

+ +

앱에서 Doze를 테스트하는 방법에 대한 팁은 테스트 가이드를 참조하세요. + +

+ +

앱 대기 모드

+

이 미리 보기에서는 시스템이 보기에 앱이 활성 사용 중이 아닌 경우 해당 앱은 유휴 상태라고 판별할 수 있습니다. + 일정 시간이 지나면 앱이 유휴 상태인 것으로 간주되는데, 시스템이 다음과 같은 신호 중 하나를 감지하는 경우는 예외입니다. +

+ + + +

기기의 플러그가 뽑혀 있는 경우, 유휴 상태인 것으로 간주된 앱은 자신의 네트워크 액세스를 비활성화하고 동기화와 작업을 일시 중단시킵니다. + 기기가 전원 공급 장치에 연결되면 이와 같은 앱에 네트워크 액세스가 허용되며 보류 중이었던 작업과 동기화를 모두 실행할 수 있습니다. + 기기가 오랜 시간 동안 유휴 상태인 경우, 유휴 앱에는 하루에 한 번 정도 네트워크 액세스가 허용됩니다. +

+ +

이 기능을 테스트하려면 개발 머신에 M 미리 보기를 실행하는 기기를 연결하여 다음과 같은 명령을 호출하면 됩니다. + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

참고: 다가오는 Google Cloud 메시지(GCM) 릴리스에서는 개발자에게 우선 순위가 높은 메시지를 지정할 수 있습니다. + + + 앱이 우선 순위가 높은 GCM 메시지를 수신하면 이 앱에는 앱이 유휴 상태에 있더라도 잠시 네트워크 액세스가 허용됩니다. + +

+ +

앱에서 앱 대기 모드를 테스트하는 방법에 대한 팁은 테스트 가이드를 참조하세요. + +

+ +

채택 가능한 저장소 기기

+

+이 미리 보기에서는 사용자가 SD 카드와 같은 외부 저장소 기기를 채택할 수 있습니다. 외부 저장소 기기를 채택하면 기기를 암호화하고 포맷하여 내부 저장소처럼 작동하도록 합니다. + 이 기능을 사용하면 사용자가 앱과 해당 앱의 비공개 데이터를 여러 저장소 기기 사이에서 이동시킬 수 있습니다. + 앱을 이동시키는 경우, 시스템은 매니페스트의 {@code android:installLocation} 기본 설정을 사용합니다. + + +

+ +

앱이 다음과 같은 API 또는 필드에 액세스하는 경우, 앱이 내부 및 외부 저장소 기기 사이를 이동하면서 반환하는 파일 경로가 급격하게 달라진다는 점을 유의하세요. 파일 경로를 구축할 때에는 이와 같은 API를 항상 동적으로 호출하는 것을 강력히 권장합니다. 하드코드된 파일 경로를 사용하거나 이전에 구축된 정규화된 파일 경로를 유지하지 마세요. + + +

+ + + +

개발자 미리 보기에서 이 기능을 디버그하려면, 다음 명령을 실행하여 USB On-The-Go(OTG) 케이블을 통해 Android 기기에 연결된 USB 드라이브 채택을 활성화하면 됩니다. +

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

Apache HTTP 클라이언트 제거

+

이 미리 보기에서는 Apache HTTP 클라이언트에 대한 지원을 제거합니다. 앱이 이 클라이언트를 사용하고 Android 2.3(API 레벨 9) 이상을 대상으로 하는 경우, {@link java.net.HttpURLConnection} 클래스를 대신 사용하세요. + + 이는 투명한 압축과 응답 캐싱을 통해 네트워크 사용량을 줄이고 전력 소모를 최소화하기 때문에 API가 더 효율적입니다. + Apache HTTP API를 계속 사용하려면 우선 다음과 같은 컴파일-시간 종속성을 {@code build.gradle} 파일에서 선언해야 합니다. + +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Android는 OpenSSL에서 BoringSSL 라이브러리로 옮겨갑니다. + + 앱에서 Android NDK를 사용하는 경우, NDK API의 일부분이 아닌 암호화 라이브러리에 대해 링크를 연결하지 마세요(예:{@code libcrypto.so} 및 {@code libssl.so}). + 이러한 라이브러리는 공개 API가 아니며, 여러 릴리스와 기기에 걸쳐 통보 없이 변경되거나 중단될 수 있으며 스스로를 보안 취약점에 노출시킬 수도 있습니다. + + 대신에 원래 코드를 수정하여 JNI를 통해 Java 암호화 API를 호출하도록 하거나, 직접 선택한 암호화 라이브러리에 대해 정적으로 연결하도록 하세요. + +

+ +

AudioManager 변경

+

볼륨을 직접 설정하거나 특정 스트림을 {@link android.media.AudioManager} 클래스를 통해 음소거하는 것은 이제 더 이상 지원되지 않습니다. + {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} 메서드는 사용이 중단되었으며, 그 대신 {@code AudioManager.requestAudioFocus()} 메서드를 호출해야 합니다. + 이와 마찬가지로, {@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} 메서드도 사용이 중단되었습니다. 그 대신 {@code AudioManager.adjustStreamVolume()} 메서드를 호출하고 방향 값 {@code ADJUST_MUTE} 또는 {@code ADJUST_UNMUTE}에서 전달해야 합니다. + + +

+ +

텍스트 선택

+ + + +

사용자가 앱에서 텍스트를 선택하면 이제 텍스트 선택 작업을 표시할 수 있습니다. 예를 들어 잘라내기, 복사붙여넣기부동 도구 모음으로 표시하게 됩니다. + + 이 사용자 상호작용 구현은 상황별 작업 모음에서와 비슷합니다. 이 내용은 각각의 보기에 대한 상황별 작업 모드의 활성화에 설명되어 있습니다. + + +

+ +

텍스트 선택을 위해 부동 도구 모음을 구현하려면 기존 앱에 다음과 같은 변경을 적용하면 됩니다. +

+
    +
  1. {@link android.view.View} 또는 {@link android.app.Activity} 객체에서 {@link android.view.ActionMode} 호출을 {@code startActionMode(Callback)}에서 {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}로 변경합니다. + +
  2. +
  3. 기존 {@code ActionMode.Callback} 구현을 변경하여 대신 {@code ActionMode.Callback2}를 확장합니다. +
  4. +
  5. {@code Callback2.onGetContentRect()} 메서드를 재정의하여 보기에서 콘텐츠 {@link android.graphics.Rect} 객체(예: 텍스트 선택 직사각형)의 좌표를 제공합니다. +
  6. +
  7. 직사각형 위치 지정이 더 이상 유효하지 않고, 무효화할 요소가 이것뿐인 경우 {@code ActionMode.invalidateContentRect()} 메서드를 호출합니다. +
  8. +
+ +

Android 지원 라이브러리 수정 버전 22.2를 사용하는 경우, 부동 도구 모음은 이전 버전과 호환되지 않으며 AppCompat이 기본적으로 {@link android.view.ActionMode} 객체의 제어권을 넘겨받는다는 점을 유의하세요. + + + 이렇게 하면 부동 도구 모음이 표시되지 않도록 방지합니다. {@link android.support.v7.app.AppCompatActivity}에서 {@link android.view.ActionMode}를 활성화하려면, {@code android.support.v7.app.AppCompatActivity.getDelegate()}를 호출한 다음 {@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()}를 반환된 {@link android.support.v7.app.AppCompatDelegate} 객체에서 호출하고 입력 매개변수를 {@code false}로 설정하세요. + + + + + + 이 호출은 {@link android.view.ActionMode} 객체의 제어권을 프레임워크에 돌려줍니다. + M 미리 보기를 실행하는 기기에서 이렇게 하면 프레임워크가 {@link android.support.v7.app.ActionBar} 또는 부동 도구 모음 모드를 지원할 수 있고, 한편 M 미리 보기 이전 기기에서는 {@link android.support.v7.app.ActionBar} 모드만 지원됩니다. + +

+ +

Android 키노트 변경

+

이 미리 보기에서는 Android 키노트 제공자가 더 이상 DSA를 지원하지 않습니다. + + ECDSA는 여전히 지원됩니다.

+ +

휴식 중일 때 암호화가 필요하지 않은 키도 보안 잠금 화면이 비활성화되거나 재설정될 때(예: 사용자가 또는 기기 관리자가 재설정) 더 이상 삭제되지 않습니다. + 휴식 중일 때 암호화가 필요한 키는 이러한 이벤트 중에 삭제됩니다. +

+ +

Wi-Fi 및 네트워킹 변경

+ +

이 미리 보기에서는 Wi-Fi와 네트워킹 API에 다음과 같은 동작 변경을 도입합니다.

+ + +

카메라 서비스 변경

+

이 미리 보기에서는 카메라 서비스에서 공유된 리소스에 액세스하는 모델이 이전의 "선착순" 액세스 모델에서 바뀌어 우선 순위가 높은 프로세스를 선호하는 액세스 모델로 변경되었습니다. + + 서비스 동작에 대한 변경 내용은 다음과 같습니다.

+ + +

ART 런타임

+

이제 ART 런타임이 {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 메서드에 대한 액세스 규칙을 제대로 구현할 수 있습니다. + 이 변경 덕분에 이전 버전에서는 Dalvik이 액세스 규칙을 잘못 확인하던 문제를 해결했습니다. 앱이 {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 메서드를 사용하고 액세스 확인을 재정의하고자 하는 경우, {@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} 메서드를 호출하되 입력 매개변수를 {@code true}로 설정한 상태로 사용합니다. + + + + + + 앱이 v7 AppCompat 라이브러리 또는 v7 RecyclerView 라이브러리를 사용하는 경우, 앱을 업데이트하여 이러한 라이브러리의 최신 버전을 사용하도록 해야 합니다. + + + 그렇지 않으면, XML에서 참조되는 모든 사용자 지정 클래스가 업데이트되도록 확인하여 그 클래스 생성자에 액세스할 수 있도록 해야 합니다. +

+ +

이 미리 보기에서는 동적 링커의 동작을 업데이트합니다. 동적 링커는 이제 라이브러리의 {@code soname}과 그 경로(공개 버그 6670) 사이의 차이점을 숙지하고 있으며, 이제 {@code soname} 기준 검색도 구현되었습니다. + + + + 이전에 작동한 앱 중에서 {@code DT_NEEDED} 항목이 있는 경우(주로 빌드 머신의 파일 시스템에 있는 절대 경로) 로딩했을 때 실패할 수 있습니다. +

+ +

이제 {@code dlopen(3) RTLD_LOCAL} 플래그를 올바르게 구현했습니다. 이때 {@code RTLD_LOCAL}이 기본이므로 {@code dlopen(3)}에 대한 호출 중에서 {@code RTLD_LOCAL}을 명시적으로 사용하지 않으면 영향받을 수 있다는 점을 유의하세요(다만 앱이 명시적으로 {@code RTLD_GLOBAL}을 사용한 경우는 예외입니다). + + {@code RTLD_LOCAL}의 경우, 나중에 {@code dlopen(3)}으로 한 호출로 인해 로딩된 라이브러리에서는 기호를 이용할 수 없게 됩니다({@code DT_NEEDED} 항목에 의해 참조된 것과는 반대입니다). + +

+

+ +

APK 유효성 검사

+

이제 플랫폼이 APK에 대해 좀 더 엄격한 유효성 검사를 수행합니다. APK는 파일이 매니페스트에서는 선언되었지만 APK 자체에는 없는 경우 손상된 것으로 간주됩니다. + 콘텐츠가 하나라도 제거되면 APK를 다시 서명해야 합니다. +

+ +

Android for Work 변경

+

이 미리 보기에는 Android for Work에 대해 다음과 같은 동작 변경을 포함합니다.

+ diff --git a/docs/html-intl/intl/ko/preview/features/runtime-permissions.jd b/docs/html-intl/intl/ko/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..20c5232 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=권한 +page.tags=previewresources, androidm +page.keywords=권한, 런타임, 미리 보기 +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

간략히 보기

+
    +
  • 앱이 M 미리 보기 SDK를 대상으로 하는 경우, 앱은 사용자에게 설치 시점이 아닌 런타임에 권한을 허용하도록 메시지를 표시합니다. +
  • +
  • 사용자는 앱 설정 화면에서 언제든 권한을 취소할 수 있습니다. +
  • +
  • 앱은 실행될 때마다 자신에게 필요한 권한이 있는지 확인해야 합니다. +
  • +
+ +

이 문서의 내용

+
    +
  1. 개요
  2. +
  3. 런타임 권한에 대한 코딩
  4. +
  5. 런타임 권한 테스트
  6. +
  7. 모범 사례
  8. +
+ + + + +
+
+ + +

+ M 개발자 미리 보기에서는 새로운 앱 권한 모델을 소개하여 사용자가 앱을 설치하고 업그레이드하는 과정을 간소화할 수 있습니다. + M 미리 보기에서 실행되는 앱이 새 권한 모델을 지원하는 경우, 사용자가 앱을 설치하거나 업그레이드할 때 아무런 권한을 허용하지 않아도 됩니다. 그 대신, 앱이 필요할 때마다 권한을 요청하고 시스템이 사용자에게 해당 권한을 요청하는 대화창을 표시합니다. + + + + +

+ +

+ 앱이 새 권한 모델을 지원하는 경우, Android 이전 버전을 실행하는 기기에서도 설치 및 실행할 수 있는 것은 변하지 않습니다. 이 경우, 그러한 기기의 기존 권한 모델을 사용합니다. + + +

+ +

+ 개요 +

+ +

+ M 개발자 미리 보기에서는 플랫폼에 새로운 권한 모델을 도입합니다. + 이 새로운 모델의 주요 구성 요소를 다음과 같이 요약해 보았습니다. +

+ + + +

+ 이 권한 모델은 앱이 권한을 필요로 하는 기능에 대해 동작하는 방식을 바꾸어 놓습니다. + 다음은 이 모델에 적응하기 위한 몇 가지 개발 사례를 요약했습니다. + +

+ + + +

+ 참고: 앱이 M 개발자 미리 보기를 대상으로 하는 경우, 반드시 새 권한 모델을 사용해야 합니다. + +

+ +

+ M 개발자 미리 보기 시작 시점에는 Google 앱 중에 새 권한 모델을 완전히 구현하지 않는 앱도 있습니다. + Google은 이러한 앱을 M 개발자 미리 보기를 시행하면서 시간을 두고 업데이트하여 권한 설정/해제 설정을 제대로 사용하도록 할 예정입니다. + + +

+ +

+ 참고: 앱에 자체 API 표면이 있는 경우, 권한을 대리로 허가하기 전에 우선 발신자에게 해당 데이터에 액세스할 필수 권한이 있는지 확인해야 합니다. + + +

+ +

+ 시스템 앱 및 서명 권한 +

+ +

+ 보통 사용자가 앱을 설치하면 시스템이 앱에 {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}만 허용합니다. + + 하지만 시스템이 앱에 더 많은 권한을 허용하는 경우도 몇 가지 있습니다. + +

+ + + +

+ 두 가지 경우 모두, 사용자가 언제든 권한을 취소할 수 있는 것은 변하지 않습니다. 시스템의 설정 화면으로 이동하여 앱 > + + app_name > 권한을 선택하면 됩니다. 이 앱은 계속해서 런타임에 권한을 확인하고 필요한 경우 해당 권한을 요청해야 합니다. + + +

+ +

+ 이전 및 이후 버전과의 호환성 +

+ +

+ 앱이 M 개발자 미리 보기를 대상으로 하지 않더라도, 앱은 M 미리 보기 기기에서도 기존 권한 모델을 계속 사용합니다. + 사용자가 앱을 설치하면 시스템이 사용자에게 앱의 매니페스트에 목록으로 표시된 권한을 모두 허용하도록 요청합니다. + + +

+ +

+ 참고: M 개발자 미리 보기를 실행하는 기기에서는 사용자가 어느 앱에 대해서든(레거시 앱 포함) 앱의 설정 화면에서 권한을 끌 수 있습니다. + + 사용자가 레거시 앱에 대한 권한을 끄면, 시스템이 자동으로 적절한 기능을 비활성화합니다. + 앱이 해당 권한을 필요로 하는 작업을 수행하려 시도한다고 해도 그 작업이 반드시 예외를 발생시키는 것은 아닙니다. + + 그 대신에 빈 데이터 세트를 반환하거나 오류를 신호하거나, 기타 예기치 못한 동작을 선보일 수 있습니다. + 예를 들어 권한 없이 캘린더를 쿼리하면 해당 메서드가 빈 데이터 세트를 반환합니다. + +

+ +

+ M 미리 보기를 실행하지 않는 기기에서 새 권한 모델을 사용하는 앱을 설치하면 시스템은 해당 앱을 다른 앱과 똑같이 다룹니다. 즉, 설치 시점에 시스템에 사용자에게 선언된 권한 모두를 허용하도록 요청합니다. + + + +

+ +

+ 참고: 미리 보기 릴리스에서는 최소 SDK 버전을 M 미리 보기 SDK로 설정해야 미리 보기 SDK와 컴파일할 수 있습니다. + 즉, 개발자 미리 보기 시행 중에는 그러한 앱을 기존 플랫폼에서 테스트할 수 없다는 뜻입니다. + + +

+ +

권한과 인텐트 비교

+ +

+ 대부분의 경우, 앱에게 어떤 작업을 수행하도록 하려면 두 가지 방식 중 하나를 선택할 수 있습니다. + 첫째로 앱이 작업을 직접 수행하도록 권한을 요청할 수 있습니다. + 또는, 앱에 인텐트를 사용하도록 하여 또 다른 앱이 해당 작업을 수행하도록 할 수 있습니다. + +

+ +

+ 예를 들어 앱이 기기 카메라로 사진을 촬영할 수 있어야 한다고 가정합시다. + 그러면 앱은 android.permission.CAMERA 권한을 요청할 수 있습니다. 이렇게 하면 앱이 카메라에 직접 액세스할 수 있습니다. + + 그런 다음 앱이 카메라 API를 사용하여 카메라를 제어하고 사진을 촬영합니다. + 이 방식을 사용하면 앱에 사진 촬영 과정에 대해 완전한 제어권을 부여하고, 카메라 UI를 앱에 통합할 수 있습니다. + + +

+ +

+ 하지만, 그러한 제어권이 필요하지 않은 경우라면 그저 {@link android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} 인텐트를 사용해 이미지를 요청하면 됩니다. + + 이 인텐트를 시작하면 사용자에게 카메라 앱을 선택하라는 메시지가 표시되고(기본 카메라 앱이 이미 있는 경우) 그 앱이 사진을 촬영합니다. + + 이 카메라 앱은 촬영한 사진을 개발자의 앱의 {@link android.app.Activity#onActivityResult onActivityResult()} 메서드에 반환합니다. + +

+ +

+ 이와 마찬가지로, 전화를 걸어야 하거나 사용자의 연락처에 액세스해야 하는 경우 등에는 적절한 인텐트를 만들거나 적절한 객체에 직접 액세스하도록 권한을 요청할 수 있습니다. + + 이 두 가지 방식에는 각각 장단점이 있습니다. + +

+ +

+ 권한을 사용하는 경우: +

+ + + +

+ 인텐트를 사용하는 경우: +

+ + + +

런타임 권한에 대한 코딩

+ +

+ 새로운 M 개발자 미리 보기를 대상으로 앱을 개발하는 경우, 새 권한 모델을 사용해야 합니다. + 이는 즉, 매니페스트에 필요한 권한을 선언하는 것 말고도 런타임에 자신이 해당 권한을 가지고 있는지도 확인해야 하며, 그러한 권한을 이미 가지고 있지 않으면 권한을 요청해야 한다는 뜻입니다. + + + +

+ +

+ 새 권한 모델 활성화하기 +

+ +

+ 새로운 M 개발자 미리 보기 권한 모델을 활성화하려면 앱의 targetSdkVersion 특성을 "MNC"로 설정하고, compileSdkVersion"android-MNC"로 설정하세요. + + 이렇게 하면 새 권한 기능이 모두 활성화됩니다. + +

+ +

+ 미리 보기 릴리스에서는 minSdkVersion"MNC"로 설정해야만 미리 보기 SDK와 컴파일할 수 있습니다. + +

+ +

+ M 미리 보기 전용 권한 지정하기 +

+ +

+ 새 <uses-permission-sdk-m> 요소를 앱 매니페스트에 사용하여 권한이 M 개발자 미리 보기에서만 필요하다는 것을 나타낼 수 있습니다. + 권한을 이런 식으로 선언하면 앱이 이전 버전의 기기에 설치될 때마다 시스템에서 사용자에게 메시지를 표시하지도 않고 앱에 권한을 허용하지도 않습니다. <uses-permission-sdk-m> 요소를 사용하면 새 권한을 앱의 업데이트된 버전에 추가하면서도 사용자가 업데이트를 설치할 때 권한을 허용하라고 강제로 시키지 않아도 됩니다. + + + + + + +

+ +

+ 앱이 M 개발자 미리 보기를 갖춘 기기에서 실행되는 경우, <uses-permission-sdk-m><uses-permission>과 똑같이 동작합니다. + + + 시스템은 사용자가 앱을 설치할 때 권한을 허용하라는 메시지를 표시하지 않고, 앱이 필요할 때마다 권한을 요청하게 됩니다. + +

+ +

+ 권한에 대한 메시지 표시하기 +

+ +

+ 앱이 새로운 M 개발자 미리 보기 권한 모델을 사용하는 경우, 앱이 M 미리 보기에서 실행되는 기기에서 처음 시작되었을 때 사용자에게 모든 권한을 허용하도록 요청하지 않습니다. + + 대신, 앱은 필요할 때마다 권한을 요청합니다. + 앱이 권한을 요청하면 시스템이 사용자에게 대화창으로 표시합니다. + +

+ +

+ 앱이 SDK 22 이하를 탑재한 기기에서 실행되는 경우, 앱은 기존 권한 모델을 사용합니다. + 사용자가 앱을 설치하면 앱이 자신의 매니페스트에서 요청하는 모든 권한을 허용하라는 메시지가 표시되는데, 이때 <uses-permission-sdk-m>이라는 레이블이 붙은 권한은 예외입니다. + + +

+ +

앱이 실행되는 플랫폼 확인

+ +

+ 이 권한 모델은 M 개발자 미리 보기를 실행하는 기기에서만 지원됩니다. + 이러한 메서드 중에서 호출하려면 앱은 우선 {@link android.os.Build.VERSION#CODENAME Build.VERSION.CODENAME} 값을 확인하여 자신이 어느 플랫폼에서 실행 중인지 확인해야 합니다. + + + 기기가 M 개발자 미리 보기에서 실행 중인 경우, {@link android.os.Build.VERSION#CODENAME CODENAME}은 "MNC"입니다. + +

+ +

앱에 필요한 권한이 있는지 확인

+ +

사용자가 권한을 필요로 하는 무언가를 하려고 시도하면, 앱은 자신이 현재 이 작업을 수행하는 데 필요한 권한을 가지고 있는지 확인합니다. + 이렇게 하기 위해 앱은 Context.checkSelfPermission( )을 호출합니다. + +permission_name 사용자가 앱의 권한을 언제든 취소할 수 있기 때문에 앱은 사용자가 해당 권한을 이미 허용했다는 것을 알고 있더라도 확인 작업을 수행해야 합니다. + + + 예를 들어, 사용자가 사진 촬영 앱을 사용하고자 한다면 앱은 Context.checkSelfPermission(Manifest.permission.CAMERA)를 호출합니다. + +

+ +

+ 표 1. 권한과 권한 그룹.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
권한 그룹권한
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

필요한 경우 권한 요청

+ +

앱이 자신에게 필요한 권한을 이미 가지고 있지 않은 경우, 앱은 Activity.requestPermissions(String[], int) 메서드를 호출하여 적절한 권한(여러 개일 수 있음)을 요청합니다. + + 앱은 원하는 권한을 요청하면서 정수 "요청 코드"를 요청합니다. + + 이 메서드는 비동기화 방식으로 기능합니다. 이는 즉각적으로 반환되며, 사용자가 대화 상자에 응답한 다음에는 시스템이 결과를 가지고 앱의 콜백 메서드를 호출하여 앱이 requestPermissions()에 전달한 "요청 코드"와 같은 코드를 전달합니다. + + +

+ +

다음 코드는 앱에 사용자의 연락처를 읽을 권한이 있는지 코드 확인을 하고, 필요한 경우 해당 권한을 요청합니다. +

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

권한 요청 응답 처리하기

+ +

+ 앱이 권한을 요청하면 시스템이 사용자에게 대화 상자를 표시합니다. + 사용자가 응답하면 시스템은 앱의 Activity.onRequestPermissionsResult(int, String[], int[])를 불러내 이를 사용자 응답에 전달합니다. + + 앱은 해당 메서드를 재정의해야 합니다. 이 콜백에는 개발자가 requestPermissions()에 전달한 것과 같은 요청 코드가 전달됩니다. + + 예를 들어 어느 앱이 READ_CONTACTS 액세스를 요청한다면 다음과 같은 콜백 메서드를 가지고 있을 수 있습니다. + + +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

사용자가 권한을 허용하면 시스템은 앱 매니페스트에 그 기능 영역에 대해 목록으로 표시된 모든 권한을 해당 앱에 부여합니다. + 사용자가 요청을 거부하면 적절한 조치를 취해야 합니다. + 예를 들어 이 권한에 좌우되는 메뉴 작업을 모두 비활성화할 수 있습니다. + + +

+ +

+ 시스템이 사용자에게 권한을 허용하도록 요청하면 사용자에게는 시스템에 해당 권한을 다시 요청하지 말라고 지시할 선택권이 있습니다. + 그런 경우, 앱이 해당 권한을 요청하기 위해 requestPermissions()를 사용하면 시스템이 즉시 요청을 거부합니다. + + 이 경우 시스템은 사용자가 명시적으로 개발자의 요청을 다시 거부한 것처럼 onRequestPermissionsResult()를 호출합니다. + + 이러한 이유로, 앱은 사용자와의 직접적인 상호작용이 일어났다고 가정해서는 안 됩니다. + +

+ +

런타임 권한 테스트

+ + +

+ M 개발자 미리 보기를 대상으로 삼고 앱을 개발하는 경우, 이 앱이 권한을 적절하게 처리하는지 테스트해보아야 합니다. + 앱이 실행될 때 특정 권한을 가지고 있다고 가정해서는 안 됩니다. + 앱을 처음 시작할 때에는 아무런 권한도 없을 가능성이 높고, 사용자가 언제든 권한을 취소하거나 복원할 수 있기 때문입니다. + + +

+ +

+ 앱을 테스트하여 모든 권한 관련 상황에서 제대로 작동하는지 확인하는 것이 좋습니다. + M 미리 보기 SDK에서는 새로운 Android 디버그 브리지(adb) 명령을 제공하여 여러분이 시도해 보아야 하는 권한 설정이 무엇이든 앱을 테스트할 수 있도록 하였습니다. + + + +

+ +

+ 새로운 adb 명령 및 선택 사항 +

+ +

+ M 미리 보기 SDK 플랫폼 도구에서는 여러 가지 새로운 명령을 제공하여 앱이 권한을 처리하는 방식을 테스트해볼 수 있습니다. + +

+ +

+ 권한으로 설치 +

+ +

+ adb + install 명령의 새로운 -g 선택 항목을 사용하면 앱을 설치하고 해당 앱의 매니페스트에 목록으로 표시된 모든 권한을 허용합니다. + +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ 권한 허용 및 취소 +

+ +

+ 새로운 ADB 패키지 관리자(pm) 명령을 사용하면 설치된 앱에 권한을 허용하고 취소할 수 있습니다. 이 기능은 자동화 설정에서 유용하게 쓰일 수 있습니다. + + +

+ +

+ 권한을 허용하려면, 패키지 관리자의 grant 명령을 사용하세요. +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ 예를 들어 com.example.myapp 패키지 권한을 허용하여 오디오를 녹음하려면 이 명령을 사용하면 됩니다. + +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ 권한을 취소하려면, 패키지 관리자의 revoke 명령을 사용하세요. +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

모범 사례

+ +

+ 새 권한 모델을 사용하면 사용자에게 보다 원활한 환경을 제공하고, 앱을 더욱 쉽게 설치하며 앱이 어떤 작업을 하고 있는지 바로 확인할 수 있습니다. + + 새 모델의 장점을 최대한 활용할 수 있도록 다음과 같은 모범 사례를 추천해 드립니다. + +

+ + +

필요한 권한만 요청

+ +

+ 권한을 요청할 때마다 사용자에게는 결정을 내리라는 강요를 하는 셈입니다. + 사용자가 요청을 거절하면 앱의 기능이 저하됩니다. + 때문에 이러한 요청을 하는 횟수를 최소한으로 줄이는 것이 좋습니다. +

+ +

+ 예를 들어 앱이 권한을 요청하는 대신 인텐트를 사용해 필요한 기능을 얻을 수 있는 경우도 꽤 많습니다. + + 앱이 전화기의 카메라를 사용해 사진을 촬영해야 하는 경우, 앱은 {@link android.provider.MediaStore#ACTION_IMAGE_CAPTURE MediaStore.ACTION_IMAGE_CAPTURE} 인텐트를 사용할 수 있습니다. + + + 앱이 인텐트를 실행하면 시스템이 사용자에게 메시지를 표시해 이미 설치된 카메라 앱을 선택하여 사진을 촬영하도록 합니다. + + +

+ +

+ 사용자에게 부담을 주지 말 것 +

+ +

+ 사용자에게 엄청나게 많은 수의 권한 요청을 한꺼번에 들이밀면 사용자가 부담을 느끼고 앱을 종료해버리는 결과를 초래할 수 있습니다. 대신 권한이 필요할 때마다 요청하는 것이 좋습니다. + + +

+ +

+ 일부 경우에는 앱에 절대적으로 꼭 필요한 권한이 한 개 이상 있을 수도 있습니다. 그런 경우에는 앱이 시작되자마자 해당 권한을 모두 요청하는 것을 권장합니다. + + 예를 들어 사진 앱을 만들면 앱이 기기 카메라로 액세스할 수 있는 권한이 필요합니다. + 사용자가 앱을 처음으로 시작할 때 카메라를 사용할 권한을 요청받아도 놀라지는 않을 것입니다. + + 하지만 같은 앱에 사용자의 연락처과 사진을 공유하는 기능도 있다고 가정한다면 이 경우 해당 권한을 첫 시작 시점에 요청하는 것은 별로 권장할 만한 일이 아닙니다. + + 대신, 사용자가 "공유" 기능을 요청하려 할 때까지 기다렸다가 그 때 해당 권한을 요청하면 됩니다. + +

+ +

+ 앱이 튜토리얼을 제공하는 경우, 튜토리얼 시퀀스가 다 끝날 무렵에 앱의 필수 권한을 요청하는 것이 이치에 맞을 수 있습니다. + +

+ +

+ 권한이 필요한 이유 설명 +

+ +

+ 개발자가 requestPermissions()를 호출하면 시스템이 표시하는 권한 대화창에는 앱이 원하는 권한이 무엇인지는 나타나 있지만 그것이 필요한 이유는 설명하지 않습니다. + + 사용자가 이런 것을 의아하게 여기는 경우가 있을 수 있습니다. + 우선 사용자에게 앱이 왜 그런 권한을 원하는지 설명한 다음 requestPermissions()를 호출하는 것이 좋습니다. + +

+ +

+ 예를 들어 사진 앱인 경우 위치 서비스를 이용하고자 할 수 있습니다. 그래야 사진에 지오태그를 표시할 수 있기 때문입니다. + 일반적인 사용자는 사진에 위치 정보를 담을 수 있다는 점을 모를 수도 있고, 그러면 사진 앱이 왜 위치를 알고 싶어 하는지 의아하게 여길 수 있습니다. + + 그러므로 이런 경우에는 앱이 사용자에게 이런 기능에 대해 미리 알려드린 후 requestPermissions()를 호출하는 것이 좋습니다. + + +

+ +

+ 이를 수행하기 위한 한 가지 방법은 이러한 요청을 앱 튜토리얼에 넣는 것입니다. 튜토리얼에는 앱의 각 기능을 표시할 수 있고, 그러면서 어느 권한이 필요한지 설명할 수도 있기 때문입니다. + + 예를 들어 사진 앱의 튜토리얼에서 "연락처 목록의 지인들과 사진 공유" 기능을 시연한 다음 사용자에게 앱이 사용자의 연락처를 보려면 권한을 부여해야 한다고 알리면 됩니다. + + + 그런 다음, 앱이 requestPermissions()를 호출하여 사용자에게 해당 액세스를 요청합니다. + 물론 튜토리얼을 따르지 않는 사용자도 있게 마련이므로 앱의 정상 작동 중에 권한을 확인하고 요청해야 합니다. + + +

diff --git a/docs/html-intl/intl/ko/preview/overview.jd b/docs/html-intl/intl/ko/preview/overview.jd new file mode 100644 index 0000000..d325725 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=프로그램 개요 +page.metaDescription=Android M 개발자 미리 보기를 시작하신 여러분, 환영합니다. 이 프로그램은 Android의 다음 버전에 대해 앱을 테스트하고 최적화하는 데 필요한 모든 것을 제공해 드립니다. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ Android M 개발자 미리 보기를 시작하신 여러분, 환영합니다. 이 프로그램은 Android의 다음 버전에 대해 앱을 테스트하고 최적화하는 데 필요한 모든 것을 제공해 드립니다. + + 이 프로그램은 무료이며, M 개발자 미리 보기 도구만 다운로드하면 시작하실 수 있습니다. + +

+ +
+
+
+
+
+ 하드웨어 및 에뮬레이터 시스템 이미지 +
+ +

+ Nexus 5, 6, 9, Player(TV용)와 에뮬레이터에서 앱을 실행하고 테스트해 보세요. + +

+
+ +
+
+ 최신 플랫폼 코드 +
+ +

+ 미리 보기 시행 중에 여러 번의 업데이트를 제공할 예정입니다. 이로써 여러분은 항상 최신 플랫폼 변경에 대해 테스트할 수 있습니다. + +

+
+ +
+
+ 업데이트를 OTA로 전달 +
+ +

+ 일단 기기를 최초 미리 보기에 플래시하고 나면 OTA로 업데이트를 받을 수 있습니다. + +

+
+
+ +
+ + +
+
+ 새 동작 및 기능 +
+ +

+ 작업을 일찍 시작하여 새 런타임 권한 모델과 절전 기능 등 새로운 플랫폼 동작을 지원합니다. + +

+
+ +
+
+ 개발자가 보고한 문제에 대한 우선 순위 창 +
+ +

+ Google에서는 처음 몇 주 동안 개발자가 보고한 문제에 우선 순위를 부여할 예정입니다. 가능한 빨리 테스트하고 피드백을 보내 주세요. + +

+
+ +
+
+ 피드백 및 지원 +
+ +

+ 문제를 보고하고 Google의 문제 추적기를 사용해 피드백을 보내 주세요. + M 개발자 커뮤니티를 이용하면 다른 개발자들과 의견을 주고받을 수 있습니다. + +

+
+
+
+
+ + + + +

+ 일정 및 업데이트 +

+Preview program timeline +

+ M 개발자 미리 보기는 5월 28일부터 최종 Android M SDK가 출시될 때까지 실행됩니다. 최종 버전은 2015년 3사분기 중으로 예정된 공개 릴리스 직전에 출시할 계획입니다. + + +

+ +

+ 개발 중 중요 단계에 다다를 때마다 여러분의 테스트 기기를 위해 업데이트를 전달해 드리겠습니다. + 잠정적인 중요 단계는 다음과 같습니다. +

+ + + +

+ 이러한 업데이트는 최종 SDK(3사분기 후반)로 막을 내릴 것이며, 이것으로 Android 새 버전에 대한 공식 API뿐만 아니라 최종 시스템 동작 및 기능도 제공하게 됩니다. + + +

+ +

+ Android M에서 테스트와 개발을 수행하는 동안 미리 보기 업데이트가 출시되는 것에 맞춰 개발 환경을 최신 상태로 유지할 것을 강력히 권장합니다. + + 이 과정을 보다 단순화하기 위해 이미 미리 보기 빌드에 플래시한 기기에는 OTA(over-the-air) 업데이트를 제공할 예정이며, 이외에도 수동으로 다운로드하고 플래시할 수 있는 시스템 이미지도 제공할 계획입니다. + + +

+

+ 참고: 최종 SDK와 시스템 이미지는 OTA로 전달할 수 없습니다. 그 대신 개발자 본인의 테스트 기기에서 수동으로 플래시해야 합니다. + + +

+ +

+ 미리 보기 업데이트를 이용할 수 있게 될 때마다 Android 개발자 블로그, 해당 사이트 및 Android M 개발자 커뮤니티를 통해서 알려드릴 것입니다. + + +

+ +

+ 미리 보기 내용 +

+ +

+ M 개발자 미리 보기에는 기존 앱을 여러 가지 화면 크기, 네트워크 기술, CPU/GPU 칩세트 및 하드웨어 아키텍처에서 테스트하는 데 필요한 모든 것이 포함되어 있습니다. + + +

+ +

+ SDK 도구 +

+ +

+ 이러한 구성 요소는 Android Studio에서 SDK Manager를 통해 다운로드할 수 있습니다. +

+ + + +

+ 하드웨어 시스템 이미지 +

+ +

+ Nexus 기기에 대한 다음과 같은 하드웨어 시스템 이미지는 다운로드 페이지에서 다운로드할 수 있습니다. + +

+ + + +

+ 관련 문서 및 샘플 코드 +

+ +

+ 다음과 같은 관련 문서 리소스는 미리 보기에 대해 익히는 데 유용합니다. +

+ + + +

+ 지원 리소스 +

+ +

+ M 개발자 미리 보기에서 테스트하고 개발하는 데 유용한 지원 리소스를 소개합니다. + +

+ + + + +

+ 대상 지정, 미리 보기 API 및 게시 +

+ +

+ Android M 개발자 미리 보기는 개발 전용 릴리스이며 표준 API 레벨이 없습니다. + 앱을 테스트하기 위해 호환성 동작에서 옵트아웃하고자 하는 경우(강력히 권장함), M 개발자 미리 보기를 대상으로 지정하면 됩니다. 앱의 targetSdkVersion“MNC”로 지정하세요. + + + +

+ +

+ Android M 개발자 미리 보기에서는 미리 보기 API를 제공합니다. —이 API는 최종 SDK가 출시될 때까지 공식적인 버전으로 인정되지 않습니다. 최종 SDK 릴리스는 현재 2015년 삼사분기 무렵으로 예정되어 있습니다. + + 이는 즉, 시간이 지나면서 사소한 API 변경이 있을 것이라는 점을 예상해야 한다는 뜻입니다. 특히 프로그램 초반 몇 주 동안은 유의해야 합니다. + + Android M 개발자 미리 보기를 업데이트할 때마다 변경 내용을 요약해서 제공해 드릴 것입니다. + +

+ +

+ 미리 보기 API는 변경될 수 있지만, 런타임 권한과 절전 기능과 같은 기본 시스템 동작은 안정적이며 지금 바로 테스트 가능한 상태입니다. + + +

+ +

+ 게시에 관해서는, Google Play에서는 M 개발자 미리 보기를 대상으로 삼는 앱의 게시를 방지합니다. + Android M 최종 SDK를 이용할 수 있게 되면 공식 Android M API 레벨을 대상으로 지정할 수 있고, 그때 Google Play에 앱을 게시하면 됩니다. + + 그때까지는 테스터들에게 Android M을 대상으로 지정한 앱을 배포하고자 하는 경우 이메일이나 본인의 사이트에서 직접 다운로드를 통해 하시면 됩니다. + + +

+ +

+ 시작 방법 +

+ +

+ 앱 테스트를 시작하려면 +

+ +
    +
  1. API 개요동작 변경을 검토해 새로운 내용과 이것이 본인의 앱에 미치는 영향에 대해 알고 있어야 합니다. + + 특히, 새로운 런타임 권한 모델, 절전 기능과 자동 백업에 대해 숙지하는 것이 좋습니다. + + +
  2. + +
  3. 환경을 설정할 때에는 미리 보기 SDK 설정과 테스트 기기를 구성하는 데 관련된 지침을 따르세요. + + +
  4. + +
  5. 플래시 지침을 따라 최신 M 개발자 미리 보기 시스템 이미지를 Nexus 5, 6, 9 및 Player에 플래시하세요. + + 일단 개발 기기를 플래시하고 나면, 미리 보기 업데이트가 OTA(over-the-air) 업데이트를 통해 전달됩니다. + +
  6. + +
  7. M 미리 보기 API 참조M 미리 보기 샘플을 다운로드하면 새로운 API 기능과 앱에서 그러한 기능을 사용하는 방법에 대해 좀 더 자세히 파악할 수 있습니다. + + + +
  8. + +
  9. Android M 개발자 커뮤니티에 가입하여 최신 소식을 알아보고, 새 플랫폼으로 작업하는 다른 개발자들과 이야기를 나눠보세요. + + +
  10. +
+ +

+ Android M 개발자 미리 보기 프로그램에 참가해 주셔서 대단히 감사합니다! +

diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd new file mode 100644 index 0000000..33e8c1f --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=Visão geral da API +page.keywords=preview,sdk,compatibility +page.tags=previewresources, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

O M Developer Preview fornece uma visualização avançada no próximo lançamento + para a plataforma Android, oferecendo novos recursos para desenvolvedores e usuários +de aplicativos. Este documento fornece uma introdução às APIs mais notáveis.

+ +

O M Developer Preview foi feito para novos desenvolvedores +adotantes e testadores. Caso tenha interesse + em influenciar a direção da estrutura do Android, +experimente o M Developer + Preview e envie-nos feedback!

+ +

Cuidado: não publique aplicativos +que usam o M Developer Preview na Google Play Store.

+ +

Observação: este documento frequentemente +menciona classes e métodos que ainda não possuem material de referência disponível em developer.android.com. Esses elementos de API +são formatados em {@code code style} neste documento (sem hyperlinks). Para a +documentação de API preliminar destes elementos, faça o download da referência da prévia.

+ +

Alterações importantes de comportamento

+ +

Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado +pelas alterações na plataforma.

+ +

Consulte alterações de comportamento para obter mais informações.

+ +

Vínculo de aplicativo

+

Esta prévia aprimora o sistema de intenções do Android fornecendo vínculo de aplicativo mais poderoso. +Este recurso permite que você associe um aplicativo com um domínio de web próprio. Com base nesta +associação, a plataforma pode determinar o aplicativo padrão a ser usado para lidar com um link da web +em particular e ignorar a solicitação aos usuários para selecionar um aplicativo. Para aprender como implementar este aplicativo, consulte +vínculo de aplicativo. + +

Backup automático para aplicativos

+

O sistema agora realiza backup automático completo de dados e restauração para aplicativos. Este comportamento +é ativado por padrão para aplicativos com M Preview; não é necessário mais código adicional. Se +os usuários excluírem as contas da Google, os dados de backup também serão excluídos. Para aprender como este recurso +funciona e como configurar o backup no sistema do arquivo, consulte +backup automático para aplicativos.

+ +

Autenticação

+

Esta prévia oferece novas APIs para permitir que você autentique os usuários usando digitalizadores de impressão digital em dispositivos +suportados e verifique o quão recentemente os usuários autenticaram pela última vez usando o +mecanismo de desbloqueio por dispositivo (como senha de tela de bloqueio). Use essas APIs em conjunto com +o sistema Android Keystore.

+ +

Autenticação com impressão digital

+ +

Para autenticar os usuários por meio de digitalização de impressão digital, adquira uma instância da nova classe +{@code android.hardware.fingerprint.FingerprintManager} e chame o método +{@code FingerprintManager.authenticate()}. O aplicativo deve ser executado em um dispositivo +compatível com sensor de impressão digital. Deve-se implementar a interface do usuário para o fluxo de autenticação +de impressão digital no aplicativo e usar o ícone de impressão digital padrão do Android na IU. +O ícone de impressão digital do Android ({@code c_fp_40px.png}) é incluído no +aplicativo de exemplo. Caso esteja desenvolvendo vários aplicativos que usam +autenticação de impressão digital, observe que cada aplicativo deve autenticar a impressão digital do usuário independentemente. +

+ +

Para usar este recurso no aplicativo, adicione primeiro a permissão {@code USE_FINGERPRINT} no +manifesto.

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

Para ver a implementação do aplicativo da autenticação com impressão digital, consulte o + + exemplo de caixa de diálogo de impressão digital.

+ +

Caso esteja testando este recurso, siga estas etapas:

+
    +
  1. Instale o Android SDK Tools Revision 24.3, caso ainda não tenha instalado.
  2. +
  3. Registre uma nova impressão digital no emulador acessando +Configurações > Segurança > Impressão digital e, em seguida, siga as instruções de registro.
  4. +
  5. Use um emulador para emular eventos de toque de dedo com o +comando a seguir. Use o mesmo comando para emular os eventos de toque de impressão digital na tela de +bloqueio ou no aplicativo. +
    +adb -e emu finger touch <finger_id>
    +
    +

    No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 <emulator-id>} seguido de +{@code finger touch <finger_id>}. +

    +
  6. +
+ +

Confirmação de credencial

+

O aplicativo pode autenticar os usuários com base no quão recentemente o dispositivo foi desbloqueado pela última vez. Este +recurso libera o usuário de ter que lembrar de senhas específicas de aplicativo extras e evita +a necessidade de implementar a própria interface do usuário de autenticação. O aplicativo deve usar este recurso +em conjunto com uma implementação de chave secreta ou pública para a implementação de usuário.

+ +

Para definir uma duração de tempo limite em que a mesma chave pode ser usada novamente +após o usuário autenticar, chame o novo método +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} + ao definir um {@link javax.crypto.KeyGenerator} ou +{@link java.security.KeyPairGenerator}. Este recurso funciona para operações criptográficas +simétricas.

+ +

Evite exibir o diálogo de nova autenticação excessivamente — os aplicativos devem tentar +usar o objeto criptográfico primeiro e, se o tempo limite expirar, usar o método +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} + para autenticar novamente o usuário dentro do aplicativo. +

+ +

Para ver uma implementação de aplicativo deste recurso, consulte o + +exemplo de confirmação de credencial.

+ +

Compartilhamento direto

+ + + +

Esta prévia fornece as APIs para tornar o compartilhamento intuitivo e rápido para os usuários. É possível +definir os alvos de compartilhamento direto que iniciam uma atividade específica no aplicativo. +Esses alvos de compartilhamento direto são expostos aos usuários por meio do menu Compartilhar. Este recurso permite que os usuários +compartilhem conteúdos aos alvos, como contatos, dentro de outros aplicativos. Por exemplo: o alvo de compartilhamento direto +pode iniciar uma atividade em outro aplicativo de rede social, o que permite que o usuário compartilhe o conteúdo diretamente +para um amigo ou comunidade específica neste aplicativo.

+ +

Para ativar os alvos de compartilhamento direto, deve-se definir uma classe que estende a classe +{@code android.service.}
+{@code chooser.ChooserTargetService}. Declare o +{@code ChooserTargetService} no manifesto. Dentro desta declaração, especifique a permissão +{@code BIND_CHOOSER_TARGET_SERVICE} e um filtro de intenções na ação +{@code SERVICE_INTERFACE}.

+

O seguinte exemplo mostra como se deve declarar o {@code ChooserTargetService} no +manifesto.

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

Para cada atividade que quiser expor ao {@code ChooserTargetService}, adicione um elemento +{@code <meta-data>} com o nome +{@code "android.service.chooser.chooser_target_service"} no manifesto do aplicativo. +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

Interações por voz

+

+Esta prévia fornece uma API de interação por voz que, junto com +ações de voz +, permite a criação de experiências por voz nos aplicativos. Chame o método +{@code android.app.Activity.isVoiceInteraction()} para determinar se a atividade +foi iniciada em resposta à ação de voz. Caso tenha sido iniciada, o aplicativo pode usar a classe +{@code android.app.VoiceInteractor} para solicitar uma confirmação de voz do usuário, +selecionar a partir de uma lista de opções e muito mais. Para aprender mais sobre a implementação de ações de voz, consulte +o site de desenvolvedor de ações de voz. +

+ +

Auxiliar API

+

+Esta prévia oferece uma nova maneira de usuários se envolverem com os aplicativos com um assistente. Para usar este +recurso, o usuário deve possibilitar que o assistente use o contexto atual. Quando ativado, +o usuário pode invocar um assistente dentro de qualquer aplicativo mantendo o botão Iniciar pressionado.

+

O aplicativo pode optar por não compartilhar o contexto atual com o assistente configurando o sinalizador +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Além do conjunto +padrão de informações que a plataforma passa ao assistente, o aplicativo pode compartilhar +informações adicionais usando a nova classe {@code android.app.Activity.AssistContent}.

+ +

Para fornecer ao assistente contexto adicional do aplicativo, siga estas etapas:

+ +
    +
  1. Implemente a interface {@link android.app.Application.OnProvideAssistDataListener}.
  2. +
  3. Registre esta escuta usando +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.
  4. +
  5. Para fornecer informações contextuais específicas da atividade, substitua o retorno de chamada +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} + e, opcionalmente, o novo retorno de chamada {@code Activity.onProvideAssistContent()}. +
+ +

Notificações

+

Esta prévia adiciona as seguintes alterações de API às notificações:

+ + +

Suporte para Bluetooth Stylus

+

Esta prévia fornece um suporte aprimorado para a entrada de usuário usando um Bluetooth Stylus. Os usuários podem +parear e conectar um Bluetooth Stylus compatível com o telefone ou tablet. Quando conectado, as informações +de posição da tela tátil são fundidas com as informações de botão e pressão do Stylus +para fornecer um alcance maior de expressão em comparação à tela tátil sozinha. O aplicativo pode escutar o pressionar +de botões do Stylus e realizar ações secundárias registrando os novos retornos de chamada +{@code View.onStylusButtonPressListener} e {@code GestureDetector.OnStylusButtonPressListener} + na atividade.

+ +

Use as constantes e os métodos {@link android.view.MotionEvent} para detectar as interações +de botão do Stylus:

+ + +

Digitalização de baixa energia por Bluetooth aprimorada

+

+Se o aplicativo realizar digitalizações de baixa energia por Bluetooth, é possível usar o novo método +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} para especificar +que você quer que os retornos de chamada sejam notificados apenas quando um pacote de propaganda correspondente ao conjunto +{@link android.bluetooth.le.ScanFilter} for encontrado primeiro e quando +ele não for visto por um período. Esta abordagem de digitalização é mais eficiente +do que a fornecida na versão anterior da plataforma. +

+ +

Suporte a Hotspot 2.0 Release 1

+

+Esta prévia adiciona suporte ao Hotspot 2.0 Release 1 nos dispositivos Nexus 6 e Nexus 9. Para fornecer +as credenciais de Hotspot 2.0 no aplicativo, use os novos métodos da classe +{@link android.net.wifi.WifiEnterpriseConfig}, como {@code setPlmn()} e +{@code setRealm()}. No objeto {@link android.net.wifi.WifiConfiguration}, é possível definir os campos +{@link android.net.wifi.WifiConfiguration#FQDN} e {@code providerFriendlyName}. +A nova propriedade {@code ScanResult.PasspointNetwork} indica se uma rede detectada representa +um ponto de acesso Hotspot 2.0. +

+ +

Modo de exibição 4K

+

A plataforma agora permite que aplicativos solicitem que a resolução seja aprimorada para renderização 4K +em hardware compatível. Para consultar a resolução física atual, use as novas APIs +{@code android.view.Display.Mode}. Se a IU for desenhada em uma resolução lógica +menor e for redimensionada para uma resolução física maior, saiba que a resolução física que o método +{@code Display.Mode.getPhysicalWidth()} retorna pode ser diferente da resolução +física informada por {@link android.view.Display#getSize(android.graphics.Point) getSize()}.

+ +

É possível solicitar que o sistema altere a resolução física no aplicativo à medida que ele é executado configurando +a propriedade {@code WindowManager.LayoutParams.preferredDisplayModeId} da janela do aplicativo. Este +recurso é útil se quiser alternar para a resolução de exibição 4K. Enquanto estiver no modo de exibição 4K, +a IU continua a ser renderizada na resolução original (como 1080 p) e é escalonada para 4K, mas os objetos +{@link android.view.SurfaceView} podem exibir o conteúdo na resolução nativa.

+ +

ColorStateLists com tema

+

Os atributos de tema agora são suportados no +{@link android.content.res.ColorStateList} para dispositivos que executam o M Preview. Os métodos +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} e +{@link android.content.res.Resources#getColor(int) getColor()} ficaram obsoletos. Caso esteja chamando +essas APIs, chame os novos métodos {@code Context.getColorStateList()} ou +{@code Context.getColor()}. Esses métodos também estão disponíveis na biblioteca +v4 appcompat via {@link android.support.v4.content.ContextCompat}.

+ +

Recursos de áudio

+ +

Esta prévia adiciona aprimoramentos ao processamento de áudio no Android, incluindo:

+ + +

Recursos de vídeo

+

Esta prévia adiciona novas capacidades às APIs de processamento de vídeo, incluindo:

+ + +

Recursos de câmera

+

Esta prévia inclui as seguintes novas APIs para acessar a lanterna da câmera +e para o reprocessamento da câmera de imagens:

+ +

API da lanterna

+

Se um dispositivo de câmera tem uma unidade de flash, é possível chamar o método {@code CameraManager.setTorchMode()} +para ligar ou desligar o modo de tocha da unidade de flash sem abrir o dispositivo da câmera. O aplicativo +não tem propriedade exclusiva da unidade de flash ou do dispositivo de câmera. O modo de tocha é desativado +e torna-se indisponível sempre que o dispositivo de câmera estiver indisponível ou quando outros +recursos de câmera que mantêm a tocha ativada ficam indisponíveis. Outros aplicativos também podem chamar {@code setTorchMode()} +para desativar o modo de tocha. Quando o aplicativo que ativou o modo +de tocha for fechado, o modo é desativado.

+ +

É possível registrar um retorno de chamada para ser notificado sobre o estado da tocha chamando o método +{@code CameraManager.registerTorchCallback()}. Na primeira vez que o retorno de chamada é registrado, +ele é imediatamente chamado com o estado do modo de tocha de todos os dispositivos de câmera conhecidos com +uma unidade de flash. Se o modo de tocha é ativado ou desativado, o método +{@code CameraManager.TorchCallback.onTorchModeChanged()} é invocado.

+ +

API de reprocessamento

+

A API {@link android.hardware.camera2 Camera2} é estendida para suportar YUV e reprocessamento +de imagem de formato opaco privado. O aplicativo determina se as capacidades de reprocessamento estão disponíveis +via {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Se um dispositivo suporta o reprocessamento, +é possível criar uma sessão de captura de câmera de reprocessamento chamando +{@code CameraDevice.createReprocessableCaptureSession()} e criando solicitações para o reprocessamento +do buffer de entrada.

+ +

Use a classe {@code ImageWriter} para conectar o fluxo de buffer de entrada à entrada de reprocessamento +da câmera. Para obter um buffer vazio, siga este modelo de programação:

+ +
    +
  1. Chame o método {@code ImageWriter.dequeueInputImage()}.
  2. +
  3. Preencha os dados no buffer de entrada.
  4. +
  5. Envie o buffer à câmera chamando o método {@code ImageWriter.queueInputImage()}.
  6. +
+ +

Caso esteja usando um objeto {@code ImageWriter} junto com uma imagem +{@code android.graphics.ImageFormat.PRIVATE}, o aplicativo não poderá acessar os dados +da imagem diretamente. Em vez disso, passe a imagem {@code ImageFormat.PRIVATE} diretamente ao +{@code ImageWriter} chamando o método {@code ImageWriter.queueInputImage()} sem nenhuma +cópia de buffer.

+ +

A classe {@code ImageReader} agora suporta as transmissões de imagem +de formato {@code android.graphics.ImageFormat.PRIVATE}. Este suporte permite que o aplicativo mantenha uma fila de imagem circular de imagens de saída +{@code ImageReader}, selecione uma ou mais imagens e envie-as para +{@code ImageWriter} para o reprocessamento de câmera.

+ +

Recursos do Android for Work

+

Esta prévia inclui as seguintes novas APIs para Android for Work:

+ + +

+ Para obter uma vista detalhada de todas as alterações de API no M Developer Preview, consulte o relatório de diferenças de API. +

diff --git a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd new file mode 100644 index 0000000..cd99bbd --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=Mudanças de comportamento +page.keywords=preview,sdk,compatibility +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

Junto com novas capacidades e recursos, o M Developer Preview inclui uma variedade +de mudanças do sistema e alterações no comportamento da API. Este documento destaca algumas +das alterações principais que você deve entender e levar em consideração nos aplicativos.

+ +

Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado + pelas alterações na plataforma.

+ +

Permissões do tempo de execução

+

Esta prévia introduz um novo modelo de permissões em que os usuários podem gerenciar diretamente + as permissões do aplicativo no tempo de execução. Este modelo fornece aos usuários uma visibilidade aprimorada e controle sobre permissões, + ao mesmo tempo em que agiliza os processos de atualização automática e instalação para os desenvolvedores de aplicativos. +Os usuários podem conceder ou revogar as permissões individualmente para os aplicativos instalados.

+ +

Nos aplicativos direcionados para o M Preview, certifique-se de verificar e solicitar as permissões + no tempo de execução. Para determinar se o aplicativo recebeu uma permissão, chame + o novo método {@code Context.checkSelfPermission()}. Para solicitar uma permissão, chame o novo método + {@code Activity.requestPermission()}. Mesmo se o aplicativo não é direcionado para o M, + deve-se testá-lo sob o novo modelo de permissões.

+ +

Para obter mais detalhes sobre o suporte do novo modelo de permissões no aplicativo, consulte a página de prévia de desenvolvedor + +Permissões. Para obter dicas sobre como avaliar o impacto no aplicativo, + consulte o guia de teste.

+ +

Otimizações de economia de energia

+

Esta prévia introduz novas otimizações de economia de energia para dispositivos e aplicativos ociosos.

+ +

Soneca

+

Se o dispositivo estiver desconectado e parado com a tela desligada por um período, + o modo Soneca será ativado, onde ele tentará manter o sistema em um estado ocioso. Neste modo, + os dispositivos retomam as operações normais periodicamente por breves períodos para que a sincronização de aplicativos + possa ocorrer e para que o sistema possa realizar quaisquer operações pendentes.

+ +

As seguintes restrições se aplicam aos aplicativos durante a Soneca:

+ +

+

Quando o dispositivo sair do modo soneca, quaisquer sincronizações e trabalhos pendentes são executados.

+

É possível testar este recurso conectando o dispositivo executando o M Preview + à máquina de desenvolvimento e chamando os seguintes comandos: +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

Observação: o próximo lançamento do + +Google Cloud Messaging permite que você designe + mensagens de alta prioridade. Se o aplicativo recebe mensagens de alta prioridade do GCM, + um acesso breve à rede é concedido mesmo quando o dispositivo está no modo soneca. +

+ +

Consulte o +guia de teste para obter dicas sobre +como testar a soneca nos aplicativos.

+ +

Aplicativo em espera

+

Com esta prévia, o sistema pode determinar quais aplicativos estão em espera quando +não estão em uso ativo. O aplicativo é considerado em espera após um período, a não ser que o sistema detecte +algum destes sinais:

+ + + +

Se o dispositivo estiver desconectado, o aplicativo considerado ocioso terá o acesso +à rede desativado e as sincronizações e os trabalhos suspensos. Quando o dispositivo está conectado em uma fonte de alimentação, + esses aplicativos têm acesso à rede permitido e podem executar quaisquer sincronizações e trabalhos pendentes. Se o dispositivo permanece ocioso por longos períodos, + os aplicativos ociosos têm acesso à rede permitido aproximadamente uma vez por dia.

+ +

É possível testar este recurso conectando o dispositivo executando o M Preview + à máquina de desenvolvimento e chamando os seguintes comandos: +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

Observação: o próximo lançamento do + +Google Cloud Messaging (GCM) permite que você +designe mensagens de alta prioridade. Se o aplicativo recebe mensagens de alta prioridade do GCM, +um acesso breve à rede é concedido mesmo quando o aplicativo está ocioso. +

+ +

Consulte o +guia de teste para obter dicas sobre como +testar a espera dos aplicativos.

+ +

Dispositivos de armazenamento adotáveis

+

+Com esta prévia, os usuários podem adotar dispositivos de armazenamento externo como cartões SD. Adotar um dispositivo +de armazenamento externo criptografa e formata o dispositivo para agir como um armazenamento interno. Este recurso +permite que os usuários movam aplicativos e dados privados desses aplicativos entre dispositivos de armazenamento. Ao mover aplicativos, +o sistema respeita a preferência +{@code android:installLocation} +no manifesto.

+ +

Se o aplicativo acessar as seguintes APIs ou campos, saiba que os caminhos de arquivos retornados +serão alterados dinamicamente quando o aplicativo for movido entre os dispositivos de armazenamento externo e interno. +Ao compilar caminhos de arquivos, é recomendado que essas APIs sempre sejam chamadas dinamicamente. +Não use caminhos de arquivo criptografados nem persista em caminhos de arquivo completamente qualificados que foram compilados anteriormente.

+ + + +

Para depurar este recurso na prévia de desenvolvedor, é possível ativar a adoção +de uma unidade USB que está conectada a um dispositivo Android por meio de um cabo USB On-The-Go (OTG) executando este comando:

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

Remoção do cliente Apache HTTP

+

Esta prévia remove o suporte para o cliente Apache HTTP. Se o aplicativo estiver usando este cliente e for direcionado +para Android 2.3 (nível da API 9) ou mais recente, use +a classe {@link java.net.HttpURLConnection}. Esta API é mais eficiente, pois reduz o uso de rede por meio de compressão transparente e armazenamento +em cachê de respostas, além de minimizar o consumo de energia. Para continuar usando as APIs do Apache HTTP, +deve-se primeiro declarar a dependência de tempo de compilação no arquivo {@code build.gradle}: +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

O Android está mudando da biblioteca OpenSSL para +BoringSSL +. Caso esteja usando o Android NDK no aplicativo, não vincule contra bibliotecas criptográficas +que não fazem parte da API de NDK, como {@code libcrypto.so} e {@code libssl.so}. Estas bibliotecas não são APIs públicas +e podem mudar ou apresentar erros sem notificar entre liberações e dispositivos. +Além disso, você pode se expor a vulnerabilidades de segurança. Em vez disso, +modifique o código nativo para chamar as APIs de criptografia Java via JNI ou para vincular estaticamente +com relação a uma biblioteca criptográfica de sua escolha.

+ +

Mudanças no AudioManager

+

Ajustar o volume diretamente ou desativar o áudio de transmissões específicas por meio da classe {@link android.media.AudioManager} +não são mais recursos suportados. O método {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} é obsoleto e deve-se chamar o método +{@code AudioManager.requestAudioFocus()}. De forma semelhante, o método +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} é +obsoleto; em vez disso, chame o método {@code AudioManager.adjustStreamVolume()} +e passe o valor da direção de {@code ADJUST_MUTE} ou {@code ADJUST_UNMUTE}.

+ +

Seleção de texto

+ + + +

Quando os usuários selecionam o texto no aplicativo, agora é possível exibir ações de seleção de texto como +Recortar, Copiar e Colar na +barra de ferramentas flutuante. A implementação da interação do usuário é semelhante ao processo +da barra de ação contextual, como descrito em + +Ativação do modo de ação contextual para vistas individuais.

+ +

Para implementar uma barra de ferramentas flutuante para seleção de texto, faça as seguintes alterações nos aplicativos +existentes:

+
    +
  1. No objeto {@link android.view.View} ou {@link android.app.Activity}, altere as chamadas +{@link android.view.ActionMode} de +{@code startActionMode(Callback)} para {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.
  2. +
  3. Pegue a implementação existente de {@code ActionMode.Callback} e torne-a uma extensão de +{@code ActionMode.Callback2}.
  4. +
  5. Substitua o método {@code Callback2.onGetContentRect()} para fornecer as coordenadas do conteúdo +do objeto {@link android.graphics.Rect} (como um retângulo de seleção de texto) na vista.
  6. +
  7. Se o posicionamento do retângulo deixar de ser válido e for o único elemento a ser invalidado, +chame o método {@code ActionMode.invalidateContentRect()}.
  8. +
+ +

Caso esteja usando a +biblioteca de suporte Android revisão 22.2, saiba que as barras de ferramentas flutuantes não +têm compatibilidade com versões anteriores e que o appcompat tem controle sobre os objetos {@link android.view.ActionMode} por +padrão. Isto evita que barras de ferramentas flutuantes sejam exibidas. Para ativar o suporte de +{@link android.view.ActionMode} em um +{@link android.support.v7.app.AppCompatActivity}, chame +{@code android.support.v7.app.AppCompatActivity.getDelegate()} e, em seguida, chame +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} no objeto +{@link android.support.v7.app.AppCompatDelegate} retornado e defina +o parâmetro de entrada para {@code false}. Esta chamada retorna o controle dos objetos {@link android.view.ActionMode} +à estrutura. Em dispositivos que são executados no M Preview, isto permite que a estrutura suporte os modos de +{@link android.support.v7.app.ActionBar} ou de barra de ferramenta flutuante, enquanto que, para dispositivos anteriores ao M Preview, +somente os modos {@link android.support.v7.app.ActionBar} são suportados.

+ +

Mudanças no Android Keystore

+

Com esta prévia, +o provedor Android Keystore não suporta mais +DSA. ECDSA ainda é suportado.

+ +

As chaves que não exigem criptografia em rest não precisam ser excluídas quando a tela de bloqueio segura +é desativada ou redefinida (por exemplo, pelo usuário ou por um administrador do dispositivo). As chaves que exigem +criptografia serão excluídas durante esses eventos.

+ +

Mudanças de rede e Wi-Fi

+ +

Esta prévia introduz as seguintes alterações de comportamento nas APIs de rede e Wi-Fi.

+ + +

Mudanças no serviço de câmera

+

Nesta prévia, o modelo para acessar recursos compartilhados no serviço de câmera foi alterado +do antigo modelo de acesso “primeiro a chegar, primeiro a ser atendido” para um modelo de acesso onde +os processos de alta prioridade são favorecidos. As mudanças no comportamento do serviço incluem:

+ + +

Tempo de execução de ART

+

O tempo de execução de ART agora implementa adequadamente as regras de acesso +para o método {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Esta +alteração corrige um problema onde o Dalvik estava verificando as regras de acesso incorretamente em versões anteriores. +Se o aplicativo usa o método +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} e você quer +substituir as verificações de acesso, chame o método +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} com o parâmetro +de entrada definido como {@code true}. Se o aplicativo usar a +biblioteca v7 appcompat ou a +biblioteca v7 recyclerview, +deve-se atualizá-lo para usar as versões mais recentes dessas bibliotecas. Caso contrário, certifique-se +de que as classes personalizadas mencionadas a partir do XML sejam atualizadas para que os construtores de classe estejam acessíveis.

+ +

Esta prévia atualiza o comportamento do vinculador dinâmico. O vinculador dinâmico agora entende +a diferença entre um {@code soname} da biblioteca e o seu caminho +( +erro público 6670), e a pesquisa por {@code soname} +agora está implementada. Os aplicativos que anteriormente trabalhavam e têm entradas {@code DT_NEEDED} inválidas +(geralmente, caminhos absolutos no sistema de arquivo na máquina de programação) podem falhar ao serem carregados.

+ +

O sinalizador {@code dlopen(3) RTLD_LOCAL} agora está corretamente implementado. Observe que +{@code RTLD_LOCAL} é o padrão. Portanto, chamadas para {@code dlopen(3)} que não usam explicitamente +{@code RTLD_LOCAL} serão afetadas (a não ser que o aplicativo tenha usado explicitamente {@code RTLD_GLOBAL}). Com +{@code RTLD_LOCAL}, os símbolos não estarão disponíveis para as bibliotecas carregadas por chamadas posteriores a +{@code dlopen(3)} (o oposto ocorre quando mencionado por entradas {@code DT_NEEDED}).

+

+ +

Validação de APK

+

A plataforma agora realiza validações mais estritas de APKs. Um APK é considerado corrompido se um arquivo +for declarado no manifesto, mas não estiver presente no próprio APK. Um APK deve ser atribuído novamente se qualquer +conteúdo for removido.

+ +

Mudanças do Android for Work

+

Esta prévia inclui as seguintes mudanças de comportamento para Android for Work:

+ diff --git a/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd b/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..762e1ae --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=Permissões +page.tags=previewresources, androidm +page.keywords=permissions, runtime, preview +page.image={@docRoot}preview/images/permissions_check.png +@jd:body + + +
+
+

Visualização rápida

+
    +
  • Se o aplicativo direciona o M Preview SDK, ele indica aos usuários para conceder + permissões no tempo de execução, em vez de tempo de instalação.
  • +
  • Os usuários podem revogar as permissões a qualquer momento na tela de configurações +do aplicativo.
  • +
  • O aplicativo precisa verificar se tem as permissões necessárias +sempre que for executado.
  • +
+ +

Neste documento

+
    +
  1. Visão geral
  2. +
  3. Codificação para permissões de tempo de execução
  4. +
  5. Teste de permissões de tempo de execução
  6. +
  7. Práticas recomendadas
  8. +
+ + + + +
+
+ + +

+ O M Developer Preview introduz um novo modelo de permissões de aplicativo +que agiliza o processo de instalação e atualização de aplicativos para os usuários. Se um aplicativo + que está sendo executado no M Preview suporta o novo modelo de permissões, o usuário não precisa conceder + permissões ao instalar ou atualizar o aplicativo. Em vez disso, o aplicativo + solicita as permissões à medida que precisar e o sistema exibe um diálogo + ao usuário pedindo a permissão. +

+ +

+ Se um aplicativo suportar o novo modelo de permissões, ele + ainda poderá ser instalado e executado em versões mais antigas do Android, usando o antigo modelo + de permissões nesses dispositivos. +

+ +

+ Visão geral +

+ +

+ Com o M Developer Preview, a plataforma introduz um novo modelo + de permissões. Eis um resumo dos componentes essenciais deste novo modelo: +

+ + + +

+ Este modelo de permissões altera a forma como o aplicativo se comporta diante os recursos + que precisam de permissões. Eis um resumo das práticas de desenvolvimento que devem + ser seguidas para ajustar para este modelo: +

+ + + +

+ Observação: se um aplicativo direcionar o M Developer Preview, ele + deve usar o novo modelo de permissões. +

+ +

+ No momento do lançamento do M Developer Preview, + nem todos os aplicativos Google implementam completamente o novo modelo de permissões. A Google está atualizando estes aplicativos + durante o curso do M Developer Preview para respeitar adequadamente a configuração + de alternação de permissões. +

+ +

+ Observação: se o aplicativo tiver a própria superfície de API, + não represente permissões sem antes garantir que o autor da chamada tenha as permissões necessárias + para acessar esses dados. +

+ +

+ Permissões de assinatura e aplicativos do sistema +

+ +

+ Geralmente, quando um usuário instala um aplicativo, o sistema somente fornece ao aplicativo o + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL}. No entanto, sob algumas circunstâncias, o sistema concede + ao aplicativo mais permissões: +

+ + + +

+ Em ambos os casos, o usuário ainda pode revogar as permissões a qualquer + momento acessando a tela de configurações do sistema e escolhendo Aplicativos + > app_name > Permissões. O aplicativo + deve continuar com a verificação das permissões no tempo de execução e solicitá-las + se necessário. +

+ +

+ Compatibilidade anterior e posterior +

+ +

+ Se um aplicativo não direciona para o M Developer Preview, ele deve continuar a usar + o modelo antigo de permissões mesmo nos dispositivos M Preview. Quando o usuário instala + o aplicativo, o sistema pede para que ele conceda todas as permissões + listadas no manifesto do aplicativo. +

+ +

+ Observação: em dispositivos que são executados no M Developer Preview, + um usuário pode desativar as permissões para qualquer aplicativo (incluindo aplicativos de legado) + na tela de configurações do aplicativo. Se um usuário desativa as permissões de um aplicativo de legado, o sistema + silenciosamente desativa a funcionalidade adequada. Quando um aplicativo tentar realizar + uma operação que requer esta permissão, a operação não necessariamente causará + uma exceção. Em vez disso, ele retornará um conjunto de dados vazio, + sinalizará um erro ou exibirá um comportamento inesperado. Por exemplo, caso queira + consultar um calendário sem permissão, o método retorna um conjunto de dados vazio. +

+ +

+ Se instalar um aplicativo usando o novo modelo de permissões em um dispositivo + que não está executando o M Preview, + o sistema o tratará da mesma forma que qualquer outro aplicativo: o sistema pedirá + para que o usuário conceda todas as permissões declaradas no momento da instalação. +

+ +

+ Observação: para a liberação de prévia, deve-se definir a versão mínima de SDK + para o M Preview SDK para compilar com o SDK de prévia. Isto significa que você + não poderá testar tais aplicativos em plataformas mais antigas durante a prévia + de desenvolvedor. +

+ +

Permissões versus intenções

+ +

+ Em vários casos, é possível escolher entre duas maneiras para que o aplicativo realize + uma tarefa. É possível fazer com que o aplicativo solicite uma permissão para realizar a operação + por conta própria. Alternativamente, é possível fazer com que o aplicativo use uma intenção para que outro aplicativo + realize a tarefa. +

+ +

+ Por exemplo, imagine que o aplicativo precisa da função de tirar fotos com + a câmera do dispositivo. O aplicativo pode solicitar a permissão +android.permission.CAMERA, que permite que ele acesse + a câmera diretamente. O aplicativo então usará as APIs da câmera + para controlar a câmera e tirar uma foto. Esta abordagem fornece ao aplicativo + controle completo sobre o processo de fotografia e permite + que você incorpore a IU da câmera. +

+ +

+ No entanto, caso não precise de tal controle, é possível apenas usar uma intenção {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} + para solicitar uma imagem. Ao iniciar a intenção, o usuário deve escolher + um aplicativo de câmera (se não houver um aplicativo padrão de câmera) + para tirar a foto. O aplicativo da câmera retorna a imagem ao método {@link + android.app.Activity#onActivityResult onActivityResult()} do aplicativo. +

+ +

+ De forma semelhante, caso precise realizar uma ligação, + acessar os contatos do usuário etc., é possível fazer estas ações criando uma intenção adequada + ou solicitar a permissão e o acesso aos objetos adequados diretamente. Essas são + as vantagens e desvantagens de cada abordagem. +

+ +

+ Se usar permissões: +

+ + + +

+ Se usar uma intenção: +

+ + + +

Codificação para permissões de tempo de execução

+ +

+ Se um aplicativo direciona o novo M Developer Preview, ele deve usar o novo + modelo de permissões. Isto significa que, além de declarar as permissões necessárias no manifesto, + deve-se também verificar se o aplicativo + tem as permissões no tempo de execução e, + caso ainda não as tenha, solicitá-las. +

+ +

+ Possibilitar um novo modelo de permissões +

+ +

+ Para possibilitar o modelo de permissões do M Developer Preview, configure o atributo +targetSdkVersion do aplicativo para "MNC" e +compileSdkVersion para "android-MNC". Isto ativará + todos os novos recursos de permissão. +

+ +

+ Para a liberação de uma prévia, deve-se definir minSdkVersion para +"MNC" para compilar com o SDK de prévia. +

+ +

+ Designar uma permissão somente para o M Preview +

+ +

+ É possível usar o novo elemento <uses-permission-sdk-m> no manifesto do aplicativo + para indicar que uma permissão é necessária apenas no M Developer Preview. Se você + declarar uma permissão desta maneira, sempre que o aplicativo for instalado + em um dispositivo mais antigo, o sistema não solicitará ao usuário + nem concederá a permissão ao aplicativo. Usando o elemento <uses-permission-sdk-m> +, é possível adicionar novas permissões + a versões atualizadas do aplicativo sem forçar os usuários a conceder permissões + ao instalar a atualização. +

+ +

+ Se o aplicativo está sendo executado em um dispositivo com M Developer Preview, o +<uses-permission-sdk-m> se comporta da mesma forma que +<uses-permission>. + O sistema não solicita ao usuário que conceda quaisquer permissões ao instalar o aplicativo + e o aplicativo solicita as permissões à medida que forem necessárias. +

+ +

+ Solicitação de permissões +

+ +

+ Se o aplicativo usa o novo modelo de permissões do M Developer Preview, + o usuário não recebe solicitações para conceder todas as permissões quando o aplicativo é iniciado pela primeira vez em um dispositivo + que está sendo executado no M Preview. Em vez disso, o aplicativo solicita as permissões à medida + que forem necessárias. Quando um aplicativo solicita uma permissão, o sistema exibe uma caixa de diálogo + ao usuário. +

+ +

+ Se o aplicativo executar em um dispositivo que tem SDK 22 ou inferior, + ele usará o antigo modelo de permissões. Quando o usuário instala o aplicativo, ele é solicitado a conceder + todas as permissões que o aplicativo lista no manifesto, + exceto as permissões que forem marcadas com <uses-permission-sdk-m>. +

+ +

Verifique em qual plataforma o aplicativo está sendo executado

+ +

+ Este modelo de permissões é suportado apenas em dispositivos que estão executando + o M Developer Preview. Antes de chamar qualquer um destes métodos, + o aplicativo deve verificar em qual plataforma está sendo executado + verificando o valor de {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME}. Se o dispositivo estiver sendo executado no M Developer Preview, + {@link android.os.Build.VERSION#CODENAME CODENAME} será "MNC". +

+ +

Verifique se o aplicativo tem a permissão necessária

+ +

Quando o usuário tenta fazer algo que requer uma permissão, + o aplicativo verifica se tem a permissão para realizar esta operação. Para fazer isto, + o aplicativo chama + Context.checkSelfPermission(permission_name). O aplicativo + deve realizar isto para verificar se sabe que o usuário já concedeu esta permissão, + levando em consideração que o usuário pode revogar + as permissões do aplicativo a qualquer momento. Por exemplo, + se um usuário quiser usar um aplicativo para tirar uma foto, o aplicativo chamará + Context.checkSelfPermission(Manifest.permission.CAMERA).

+ +

+ Tabela 1. Permissões e grupos de permissões.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Grupo de permissõesPermissões
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

Solicitar permissões se necessário

+ +

Se o aplicativo já não tem a permissão necessária, ele chama o método + Activity.requestPermissions(String[], int) para solicitar + as permissões necessárias. O aplicativo passa + as permissões que deseja e também um "código de solicitação" do inteiro. + Este método funciona de forma assíncrona: ele retorna imediatamente e, + depois que o usuário responde à caixa de diálogo, o sistema chama + o método de retorno de chamada do aplicativo com os resultados, passando o mesmo "código de solicitação" que o aplicativo passou + para requestPermissions().

+ +

O seguinte código verifica se o aplicativo tem a permissão + para ler os contatos do usuário e solicita a permissão, se necessário:

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

Lidar com a resposta de solicitação das permissões

+ +

+ Quando um aplicativo solicita as permissões, o sistema apresenta uma caixa de diálogo + ao usuário. Quando o usuário responde, o sistema invoca o + Activity.onRequestPermissionsResult(int, String[], int[]) + do aplicativo, passando a ele a resposta do usuário. O aplicativo precisa substituir este método. O retorno de chamada + recebe o mesmo código de solicitação passado para + requestPermissions(). Por exemplo, se um aplicativo solicita o acesso + READ_CONTACTS, ele pode ter o seguinte + método de retorno de chamada: +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

Se o usuário concede a permissão, o sistema fornece ao aplicativo todas as permissões + que o manifesto do aplicativo lista para esta área funcional. Se o usuário negar a solicitação, + deve-se tomar a ação adequada. Por exemplo, deve-se desativar + quaisquer ações de menu que dependam desta permissão. + +

+ +

+ Quando o sistema pede para que o usuário conceda uma permissão, esse usuário tem a opção + de dizer ao sistema para que não peça esta permissão novamente. Nesse caso, + quando um aplicativo usa requestPermissions() para solicitar esta permissão, + o sistema nega imediatamente. Neste caso, o sistema chama + onRequestPermissionsResult() da mesma forma que faria se o usuário tivesse + rejeitado explicitamente a solicitação novamente. Por este motivo, o aplicativo + não pode presumir que uma interação direta com o usuário ocorreu. +

+ +

Teste de permissões de tempo de execução

+ + +

+ Se o aplicativo for direcionado para o M Developer Preview, deve-se testar + se ele lida com as permissões corretamente. Não se pode presumir que o aplicativo + terá qualquer permissão quando executado. Quando o aplicativo é iniciado pela primeira vez, + é provável que não tenha permissões. O usuário pode revogar e restaurar permissões + a qualquer momento. +

+ +

+ Deve-se testar o aplicativo para garantir que ele se comporte corretamente em todas + as situações de permissão. Com o M Preview SDK, fornecemos os novos comandos + de Android + Debug Bridge (adb) para possibilitar que o aplicativo seja testado com quaisquer + configurações de permissões necessárias. +

+ +

+ Novas opções e comandos adb +

+ +

+ As ferramentas da plataforma M Preview SDK fornecem vários comandos novos para permitir + que você teste como o aplicativo lida com permissões. +

+ +

+ Instalar com permissões +

+ +

+ É possível usar a nova opção -g do comando adb + install, que instala o aplicativo + e fornece todas as permissões listadas em seu manifesto: +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ Conceder e revogar permissões +

+ +

+ É possível usar os novos comandos do gerenciador + de pacotes (pm) de ADB para conceder e revogar as permissões de um aplicativo instalado. + Esta funcionalidade pode ser útil para testes automatizados. +

+ +

+ Para conceder uma permissão, use o comando grant do gerenciador de pacote: +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ Por exemplo: para conceder a permissão do pacote com.example.myapp para gravar áudios, + use este comando: +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ Para revogar uma permissão, use o comando revoke do gerenciador de pacote: +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

Práticas recomendadas

+ +

+ O novo modelo de permissões fornece aos usuários uma experiência mais suave + e facilita a instalação de aplicativos, deixando-os mais confortáveis + com o que os aplicativos estão fazendo. Sugerimos que você siga as práticas recomendadas para aproveitar + todas as vantagens do novo modelo. +

+ + +

Peça somente as permissões necessárias

+ +

+ Sempre que você pede uma permissão, o usuário é forçado a tomar uma decisão. + Se o usuário negar a solicitação, a funcionalidade do aplicativo será reduzida. + Deve-se minimizar o número de solicitações realizadas. +

+ +

+ Por exemplo: o aplicativo pode frequentemente adquirir a funcionalidade necessária usando + uma intenção em vez + de solicitar permissões. Se o aplicativo precisa tirar fotos com a câmera do telefone, + é possível usar uma intenção {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE}. Quando o aplicativo executa a intenção, + o sistema pede para que o usuário escolha um aplicativo de câmera já instalado + para tirar a foto. +

+ +

+ Não oprima o usuário +

+ +

+ Se você confrontar o usuário com várias solicitações de permissão de uma só vez, + é possível que ele se sinta oprimido e saia do aplicativo. + Em vez disso, deve-se solicitar as permissões somente quando necessário. +

+ +

+ Em alguns casos, uma ou mais permissões podem ser absolutamente essenciais para o aplicativo. + Nesta situação, faz sentido solicitar todas as permissões assim + que o aplicativo é iniciado. Por exemplo: se você fizer um aplicativo de fotografia, + ele precisará de acesso à câmera do dispositivo. Quando o usuário iniciar o aplicativo + pela primeira vez, ele não se surpreenderá quando receber + uma solicitação de permissão para usar a câmera. Mas, se o mesmo aplicativo tiver um recurso + para compartilhar fotos com os contatos do usuário, não se deve + pedir esta permissão na primeira inicialização. Em vez disso, espere o usuário tentar usar + o recurso de compartilhamento para pedir a permissão. +

+ +

+ Se o aplicativo fornecer um tutorial, faz sentido solicitar as permissões + necessárias no final da sequência do tutorial. +

+ +

+ Explique o porquê da necessidade das permissões +

+ +

+ O diálogo de permissões exibido pelo sistema ao chamar + requestPermissions() diz quais permissões o aplicativo requer, + mas não diz o porquê. Em alguns casos, o usuário pode achar isto confuso. + É uma boa ideia explicar ao usuário o porquê da necessidade das permissões + para o aplicativo antes de chamar requestPermissions(). +

+ +

+ Por exemplo: um aplicativo de fotografia pode precisar usar serviços de localização + para poder marcar as fotos geograficamente. Um usuário normal pode não entender que uma foto + pode conter informações de localização e ficar confuso quando + o aplicativo de fotografia quiser saber a localização. Portanto, neste caso, é uma boa ideia o aplicativo explicar + ao usuário sobre este recurso antes de chamar + requestPermissions(). +

+ +

+ Uma maneira de fazer isto é incorporar estas solicitações em um tutorial do aplicativo. O tutorial pode exibir cada um dos recursos + do aplicativo e, à medida que fizer isto, + pode também explicar quais permissões são necessárias. Por exemplo, o tutorial do aplicativo de fotografia + pode demonstrar os recursos de compartilhamento de fotos com os contatos e, + em seguida, dizer ao usuário que ele precisa fornecer as permissões + para que o aplicativo possa visualizar os contatos. O aplicativo pode então chamar requestPermissions() para solicitar + ao usuário este acesso. É claro que nem todos os usuários seguirão o tutorial. + Portanto, ainda é necessário verificar e solicitar as permissões durante + a operação normal do aplicativo. +

diff --git a/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png new file mode 100644 index 0000000..a53a33e Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png new file mode 100644 index 0000000..87816ff Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png new file mode 100644 index 0000000..77f9982 Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png new file mode 100644 index 0000000..4749bcf Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png new file mode 100644 index 0000000..724a6af Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png new file mode 100644 index 0000000..e9a339e Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png b/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png new file mode 100644 index 0000000..87d1cfc Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png b/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png new file mode 100644 index 0000000..589a923 Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/text-selection.gif b/docs/html-intl/intl/pt-br/preview/images/text-selection.gif new file mode 100644 index 0000000..1d82fc6 Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/text-selection.gif differ diff --git a/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png new file mode 100644 index 0000000..c3e4e44 Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png differ diff --git a/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png new file mode 100644 index 0000000..5dcf610 Binary files /dev/null and b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png differ diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd new file mode 100644 index 0000000..ce5a596 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=Visão geral do programa +page.metaDescription=Boas-vindas ao Android M Developer Preview, um programa que fornece tudo que é necessário para testar e otimizar os aplicativos para a próxima versão do Android. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ Boas-vindas ao Android M Developer Preview, um programa que fornece + tudo que é necessário para testar e otimizar os aplicativos para a próxima versão + do Android. É de graça e você pode começar agora mesmo: basta fazer + o download das ferramentas M Developer Preview. +

+ +
+
+
+
+
+ Imagens de sistema de emulador e hardware +
+ +

+ Execute e teste os aplicativos no Nexus 5, 6, 9 e Player (para TV), bem como + em emuladores. +

+
+ +
+
+ Código de plataforma mais recente +
+ +

+ Nós forneceremos várias atualizações durante a prévia. Portanto, você + testará de acordo com as alterações mais recentes da plataforma. +

+
+ +
+
+ Atualizações entregues por OTA +
+ +

+ É possível obter atualizações por OTA (over-the-air) ao programar o dispositivo + em flash para a prévia inicial. +

+
+
+ +
+ + +
+
+ Novos comportamentos e capacidades +
+ +

+ Inicie o trabalho cedo para suportar os novos comportamentos da plataforma, + como novo modelo de permissões de tempo de execução e recursos de economia de energia. +

+
+ +
+
+ Janela de prioridades para problemas informados por desenvolvedores +
+ +

+ Durante as primeiras semanas, nós daremos prioridade aos problemas informados + por desenvolvedores. Portanto, teste e forneça-nos feedback o quanto antes. +

+
+ +
+
+ Feedback e suporte +
+ +

+ Informe problemas e dê-nos feedback usando o issue tracker. + Conecte-se a outros desenvolvedores na Comunidade M Developer. + +

+
+
+
+
+ + + + +

+ Linha do tempo e atualizações +

+Preview program timeline +

+ O M Developer Preview estará em execução de 28 de maio até o Android M SDK final, que + disponibilizaremos brevemente antes do lançamento público durante + o 3º trimestre de 2015. +

+ +

+ Nos marcos de desenvolvimento principais, entregamos atualizações para os dispositivos de teste. + Os marcos de experiência são +

+ + + +

+ Estas atualizações culminam no SDK final (no 3º trimestre), + que fornecerá APIs oficiais para a nova versão do Android, + bem como os recursos e comportamentos do sistema final. +

+ +

+ Ao testar e desenvolver no Android M, recomendamos que você mantenha + o ambiente de desenvolvimento atualizado à medida que atualizações do Preview são lançadas. + Para facilitar o processo, fornecemos atualizações "over-the-air" + (OTA) aos dispositivos já programados em flash para uma versão do Preview, além + de fornecemos imagens do sistema que estão disponíveis para download e programação em flash manualmente. +

+

+ Observação: as imagens do sistema e o SDK final não podem ser entregues + por OTA. Em vez disso, precisarão ser programadas em flash manualmente para + os dispositivos de teste. +

+ +

+ Notificaremos você quando as atualizações do Preview estiverem disponíveis por meio do Blogue de desenvolvedores do Android, além + deste site + e da Comunidade Android M Developer. +

+ +

+ O que há no Preview? +

+ +

+ O M Developer Preview inclui tudo que é necessário para testar os aplicativos existentes + em uma variedade de tamanhos de tela, tecnologias de rede, chipsets de CPU/GPU + e arquiteturas de hardware. +

+ +

+ Ferramentas SDK +

+ +

+ É possível fazer o download destes componentes pelo SDK Manager no Android Studio: +

+ + + +

+ Imagens do sistema de hardware +

+ +

+ É possível fazer o download destas imagens de sistema de hardware para dispositivos Nexus a partir + da página de download: +

+ + + +

+ Exemplo de código e documentação +

+ +

+ Estes recursos de documentação ajudam você a aprender sobre o Preview: +

+ + + +

+ Recursos de suporte +

+ +

+ Use estes recursos de suporte ao testar e desenvolver no + M Developer Preview: +

+ + + + +

+ Destinação, APIs de prévia e publicação +

+ +

+ O Android M Developer Preview é uma versão apenas para desenvolvimento + e não possui um nível da API padrão. Caso opte + pelos comportamentos de compatibilidade para testar o aplicativo (o que é muito recomendado), + é possível destinar o M Developer Preview configurando o targetSdkVersion + do aplicativo para “MNC”. +

+ +

+ O Android M Developer Preview fornece APIs de prévia + — as APIs não serão oficiais até o lançamento do SDK final, + atualmente planejado para o terceiro trimestre de 2015. Isto significa que é possível + esperar alterações secundárias de APIs com o tempo, especialmente + durante as semanas iniciais do programa. Forneceremos um resumo das alterações + com cada atualização do Android M Developer Preview. +

+ +

+ Observe que, apesar das APIs da prévia poderem ser alteradas, os comportamentos essenciais do sistema, + como permissões de tempo de execução e recursos de economia de energia, são estáveis e estão prontos + para serem testados. +

+ +

+ Em termos de publicação, o Google Play evita a publicação de aplicativos + destinados para o M Developer Preview. Quando o SDK final do Android M estiver + disponível, você poderá destinar o nível da API do Android M oficial + e publicar o aplicativo no Google Play. Enquanto isso, caso queira distribuir um aplicativo + destinado para Android M para testadores, é possível fazê-lo por e-mail ou por download direto + a partir do site. +

+ +

+ Como começar +

+ +

+ Para começar o teste do aplicativo: +

+ +
    +
  1. Revise a Visão geral da API + e as Mudanças de comportamento para + ter uma ideia do que há de novo e como isto afeta os aplicativos. Em particular, aprenda mais sobre + o novo modelode permissões + de tempo de execução, recursos de economia de energia e backup automático. +
  2. + +
  3. Configure o ambiente seguindo as instruções para + Configurar o Preview SDK + e ajustar os dispositivos de teste. +
  4. + +
  5. Siga + as instruções de programação em flash para programar em flash a imagem do sistema do M Developer Preview mais recente + para Nexus 5, 6, 9 e Player. Após programar em flash o dispositivo de desenvolvimento, + as atualizações do Preview serão entregues por atualizações OTA (over-the-air). +
  6. + +
  7. Faça o download da Referência da API do + M Preview e dos exemplos do M Preview + para obter mais informações sobre os novos recursos de API e como usá-los + no aplicativo. +
  8. + +
  9. Junte-se à Comunidade Android M + Developer para obter as notícias mais recentes e conecte-se a outros + desenvolvedores que trabalham com a nova plataforma. +
  10. +
+ +

+ Agradecemos a sua participação no programa M Developer Preview do Android! +

diff --git a/docs/html-intl/intl/ru/preview/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd new file mode 100644 index 0000000..ae30e09 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=Обзор API-интерфейсов +page.keywords=предварительная версия,пакет sdk,совместимость +page.tags=previewresources, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

M Developer Preview — ознакомительная версия предстоящего выпуска платформы Android, +в котором реализованы новые возможности как для пользователей, так и для +разработчиков приложений. В этой статье мы расскажем о наиболее интересных API-интерфейсах.

+ +

Версия M Developer Preview предназначена для тех, кто хочет первым ознакомиться с новой платформой, +а также для тестировщиков. M Developer Preview — прекрасная возможность +повлиять на вектор развития +платформы Android. +Мы с нетерпением ждем ваших отзывов!

+ +

Внимание! Не публикуйте в магазине Google Play приложения, +предназначенные для M Developer Preview.

+ +

Примечание. В этой статье часто упоминаются классы и методы, +для которых на сайте developer.android.com пока еще нет справочных материалов. Такие элементы API-интерфейса обозначаются здесь следующим образом: +{@code code style} (без гиперссылок). Чтобы ознакомиться с предварительной документацией по этим элементам, +загрузите справочное руководство по предварительной версии.

+ +

Важные изменения в работе приложений

+ +

Если вы ранее публиковали приложения для Android, то примите во внимание, что изменения в платформе могут повлиять +на работу опубликованных приложений.

+ +

Подробные сведения представлены в статье Изменения в работе.

+ +

Связывание приложений

+

В M Preview улучшена система намерений Android за счет более эффективного связывания приложений. +Теперь у вас есть возможность связывать приложения с вашими собственными веб-доменами. Благодаря этому +платформа может сама, без вмешательства пользователя, определить приложение, которое будет использоваться по умолчанию +для обработки определенной веб-ссылки. О том, как реализовать такую возможность, можно почитать в статье +Связывание приложений. + +

Автоматическое резервное копирование для приложений

+

Теперь система автоматически выполняет полное резервное копирование и восстановление данных ваших приложений. Для приложений, +написанных под M Preview, эта функция включена по умолчанию — вам даже не нужно добавлять отдельный код. Если пользователь решит удалить свою учетную запись Google, все резервные копии его данных также будут удалены. + О том, как работает эта функция и как настроить параметры резервного копирования элементов файловой системы, + рассказано в статье +Автоматическое резервное копирование для приложений.

+ +

Авторизация

+

В M Preview представлены новые API-интерфейсы, которые позволяют авторизовать пользователей по отпечатку пальца +(на устройствах, поддерживающих такую возможность), а также подтвердить учетные данные, если пользователь недавно авторизовался через механизмы разблокировки устройства +(например, вводил пароль для разблокировки экрана). Эти API-интерфейсы рекомендуется использовать совместно с +системой хранилища ключей Android.

+ +

Авторизация по отпечатку пальца

+ +

Чтобы авторизовать пользователя по отпечатку пальца, получите экземпляр нового класса +{@code android.hardware.fingerprint.FingerprintManager} и вызовите метод +{@code FingerprintManager.authenticate()}. Эта функция доступна для совместимых +устройств, оснащенных сканером отпечатков пальцев. Прежде всего, вам необходимо реализовать в своем приложении пользовательский интерфейс проверки +подлинности по отпечатку пальца, а также использовать для него стандартный значок отпечатка пальца Android. +Этот значок ({@code c_fp_40px.png}) вы можете найти в +примере приложения. При разработке нескольких приложений, использующих функцию авторизации по отпечатку пальца, +помните, что каждое из них должно самостоятельно выполнять проверку подлинности. +

+ +

Чтобы реализовать эту функцию, сначала добавьте в файл манифеста разрешение {@code USE_FINGERPRINT}. +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

Пример такой проверки подлинности вы найдете в +примере +диалогового окна авторизации по отпечатку пальца.

+ +

Если вы тестируете эту функцию, выполните следующие действия:

+
    +
  1. Установите инструменты SDK Android (версию 24.3), если у вас их еще нет.
  2. +
  3. Зарегистрируйте в эмуляторе новый отпечаток пальца (в разделе +Настройки > Безопасность > Отпечаток пальца) и следуйте дальнейшим инструкциям.
  4. +
  5. Воспользовавшись указанной ниже командой, сымитируйте в эмуляторе события касания для проверки отпечатка пальца. + С помощью этой же команды сымитируйте события касания для проверки отпечатка пальца на экране блокировки или в +своем приложении. +
    +adb -e emu finger touch <finger_id>
    +
    +

    В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 <emulator-id>}, а затем +{@code finger touch <finger_id>}. +

    +
  6. +
+ +

Подтверждение учетных данных

+

Для авторизации пользователей ваше приложение может обратиться к сведениям о том, как давно они разблокировали свое устройство в последний раз. Эта функция +избавляет пользователя от необходимости запоминать отдельные пароли для каждого приложения, а вас — от необходимости +реализовывать собственный пользовательский интерфейс авторизации. В приложении эту функцию следует +использовать совместно с реализацией открытого или секретного ключа для авторизации пользователей.

+ +

Чтобы задать временя ожидания, в течение которого после успешной +авторизации можно использовать ключ повторно, вызовите новый метод +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} +при настройке {@link javax.crypto.KeyGenerator} или +{@link java.security.KeyPairGenerator}. На сегодняшний день эта функция совместима с симметричными криптографическими +операциями.

+ +

Не стоит слишком часто отображать диалоговое окно повторной авторизации — ваше +приложение должно сначала попробовать использовать криптографический объект и только потом, если окажется, что время ожидания истекло, обратиться к методу +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} +для повторной авторизации пользователя. +

+ +

Как можно реализовать эту функцию, показано в +примерепроверки учетных данных. +

+ +

Прямой обмен контентом

+ + + +

M Preview содержит API-интерфейсы для интуитивно понятного и быстрого обмена контентом между пользователями. Теперь вы можете +определить целевые объекты прямого обмена, которые будут запускать определенную операцию в приложении +и открываться в меню Поделиться. С помощью данной функции пользователи могут обмениваться контентом +с целевыми объектами, такими как контакты, в других приложениях. Например, целевой объект прямого обмена может запустить операцию +в другом приложении социальной сети, что позволит пользователю напрямую делиться контентом с другом +или членами сообщества через это приложение.

+ +

Чтобы включить использование целевых объектов прямого обмена, необходимо определить класс, который наследует класс +{@code android.service.}
+{@code chooser.ChooserTargetService}. Объявите +{@code ChooserTargetService} в манифесте. В этом объявлении укажите разрешение +{@code BIND_CHOOSER_TARGET_SERVICE} и фильтр намерений с помощью действия +{@code SERVICE_INTERFACE}.

+

В примере ниже показано, как объявить {@code ChooserTargetService} + в вашем манифесте.

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент +{@code <meta-data>} с именем +{@code "android.service.chooser.chooser_target_service"}. +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

Голосовой интерфейс

+

+В M Preview представлен новый голосовой API-интерфейс, который, наряду с +голосовыми командами, +позволяет встраивать в приложение диалоговое голосовое взаимодействие. Вызовите метод +{@code android.app.Activity.isVoiceInteraction()}, чтобы определить, была ли операция запущена +в ответ на голосовую команду. Если это так, ваше приложение может использовать класс +{@code android.app.VoiceInteractor}, чтобы получить голосовое подтверждение от пользователя, предложить ему список вариантов +на выбор и многое другое. Подробнее о реализации голосовых команд можно почитать в +руководстве к голосовому интерфейсу. +

+ +

API-интерфейс помощника

+

+M Preview предлагает новый способ взаимодействия пользователей с приложением — взаимодействие посредством помощника. Для этого +пользователю необходимо разришить помощнику использовать текущий контекст, после чего он сможет вызывать помощника +в любом приложении, удерживая кнопку Домой.

+

Разработчик может также запретить приложению сообщать помощнику текущий контекст. Для этого установите флаг +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Кроме стандартного набора +информации, который платформа передает помощнику, ваше приложение может сообщать ему дополнительные +сведения посредством нового класса {@code android.app.Activity.AssistContent}.

+ +

Чтобы предоставить помощнику дополнительный контекст из вашего приложения, выполните следующие действия:

+ +
    +
  1. Реализуйте интерфейс {@link android.app.Application.OnProvideAssistDataListener}.
  2. +
  3. Зарегистрируйте этот приемник с помощью +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.
  4. +
  5. Для предоставления контекста, относящего к конкретной операции, переопределите метод обратного вызова +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()}, +а также, при желании, новый метод обратного вызова{@code Activity.onProvideAssistContent()}. +
+ +

Уведомления

+

В API-интерфейс уведомлений внесены следующие изменения:

+ + +

Поддержка пера Bluetooth

+

В M Preview улучшена поддержка ввода с помощью пера Bluetooth. Пользователи могут подключить +совместимое перо Bluetooth к своему смартфону или планшету. Когда перо подключено, данные о его +положении объединяются со сведениями о степени нажима и нажатия кнопки на пере, +и таким образом при сенсорном вводе используются не только возможности сенсорного экрана. Ваше приложение может отслеживать +нажатия кнопки пера и выполнять дополнительные действия, регистрируя в операции новые методы обратного вызова +{@code View.onStylusButtonPressListener} и +{@code GestureDetector.OnStylusButtonPressListener}.

+ +

Для определения нажатий кнопок пера используйте методы и константы {@link android.view.MotionEvent}: +

+ + +

Улучшенное сканирование Bluetooth с низким потреблением энергии

+

+Если ваше приложение выполняет сканирование Bluetooth с низким потреблением энергии, вы можете при помощи нового метода +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} указать, что обратные вызовы следует уведомлять только в случае, если прежде обнаружен пакет объявления, + совпадающий с заданным фильтром +{@link android.bluetooth.le.ScanFilter}, или если он не обнаруживается в течение заданного периода времени. + Такой подход к сканированию обеспечивает еще большую экономию энергии, чем это было возможно в предыдущей +версии платформы. +

+ +

Поддержка Hotspot 2.0, выпуск 1

+

+В M Preview включена поддержка Hotspot 2.0 (выпуск 1) для устройств Nexus 6 и Nexus 9. Для +предоставления учетных данных Hotspot 2.0 в вашем приложении используйте новые методы класса +{@link android.net.wifi.WifiEnterpriseConfig}, такие как {@code setPlmn()} и +{@code setRealm()}. В объекте {@link android.net.wifi.WifiConfiguration} можно задать поля +{@link android.net.wifi.WifiConfiguration#FQDN} и {@code providerFriendlyName}. +Новое свойство{@code ScanResult.PasspointNetwork} показывает, является ли обнаруженная +сеть точкой доступа Hotspot 2.0. +

+ +

Режим отображения в формате 4K

+

Теперь платформа позволяет приложениям запрашивать увеличение разрешения экрана до 4K при обработке изображения +на совместимом устройстве. Чтобы запросить текущее физическое разрешение, используйте новые API-интерфейсы +{@code android.view.Display.Mode}. Если элементы пользовательского интерфейса, отрисованные в более низком логическом разрешении, масштабируются до +более высокого физического разрешения, обратите внимание, что метод физического разрешения +{@code Display.Mode.getPhysicalWidth()} возвращает результат, который может отличаться от результата выполнения метода логического разрешения +{@link android.view.Display#getSize(android.graphics.Point) getSize()} .

+ +

Можно отправить запрос системе на изменение физического разрешения в активном приложении, задав для окна вашего приложения свойство +{@code WindowManager.LayoutParams.preferredDisplayModeId}. Эта +функция особенно полезна в случаях, когда требуется переключиться на разрешение экрана 4K. В режиме отображения в формате 4K элементы +пользовательского интерфейса отрисовываются в исходном разрешении (например, 1080p) и масштабируются до 4K, однако содержимое +{@link android.view.SurfaceView} объектов может отображаться с использованием основного разрешения.

+ +

Метод ColorStateLists для работы с темами

+

Теперь метод +{@link android.content.res.ColorStateList} для устройств под управлением M Preview поддерживает атрибуты темы. Методы +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} и +{@link android.content.res.Resources#getColor(int) getColor()} уже неактуальны. Если вы +вызываете эти API-интерфейсы, вызовите вместо них новые методы {@code Context.getColorStateList()} или +{@code Context.getColor()}, Доступные также в библиотеке v4 appcompat +посредством {@link android.support.v4.content.ContextCompat}.

+ +

Работа с аудио

+ +

В M Preview реализован ряд улучшений в области обработки аудиофайлов системой Android, включая следующие:

+ + +

Работа с видео

+

В M Preview вы обнаружите новые возможности API-интерфейсов для обработки видео, в том числе:

+ + +

Возможности камеры

+

В M Preview представлены следующие API-интерфейсы для вспышки камеры и повторной обработки +изображений камерой.

+ +

API-интерфейс вспышки

+

Если камера оснащена вспышкой, вы можете вызвать метод{@code CameraManager.setTorchMode()}, +чтобы включить или отключить режим фонарика, не запуская камеру. Приложение +не может заполучить вспышку или камеру в единоличное пользование. Режим фонарика отключается +и становится недоступен, когда камера недоступна или ресурсов камеры недостаточно для использования вспышки в качестве +фонарика. Кроме того, другие приложения могут вызывать метод {@code setTorchMode()} +для отключения режима фонарика. При закрытии приложения, которое включило режим фонарика, этот режим +отключается.

+ +

Чтобы зарегистрировать обратный вызов для уведомления о режиме фонарика, вызовите метод +{@code CameraManager.registerTorchCallback()}. При первой регистрации обратного вызова +он сразу же вызывается со сведениями о состоянии режима фонарика для всех известных к настоящему моменту устройств, +оснащенных вспышкой. При успешном включении или отключении фонарика вызывается метод +{@code CameraManager.TorchCallback.onTorchModeChanged()}.

+ +

API-интерфейс повторной обработки

+

API-интерфейс {@link android.hardware.camera2 Camera2} теперь поддерживает повторную обработку цветовых моделей YUV и изображений в собственном +формате непрозрачности. Чтобы определить, возможна ли повторная обработка, приложение использует метод +{@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Если устройство поддерживает повторную обработку, +вы можете создать сеанс захвата изображения с камеры с возможностью повторной обработки, вызвав метод +{@code CameraDevice.createReprocessableCaptureSession()}, а затем создать запросы на повторную обработку буфера +входных данных.

+ +

Чтобы подключить поток буфера входных данных к модулю повторной обработки изображения с камеры, используйте класс +{@code ImageWriter}. Чтобы получить пустой буфер, выполните следующие действия:

+ +
    +
  1. Вызовите метод {@code ImageWriter.dequeueInputImage()}.
  2. +
  3. Заполните буфер входными данными.
  4. +
  5. Отправьте буфер в камеру, вызвав метод {@code ImageWriter.queueInputImage()}.
  6. +
+ +

Если вы используете объект {@code ImageWriter} вместе с изображением +{@code android.graphics.ImageFormat.PRIVATE}, вашему приложению не удастся получить доступ к изображению +напрямую. Вместо этого передайте изображение {@code ImageFormat.PRIVATE} прямо в +{@code ImageWriter}, вызвав метод {@code ImageWriter.queueInputImage()} без копии +буфера.

+ +

Класс {@code ImageReader} теперь поддерживает потоки изображений в формате {@code android.graphics.ImageFormat.PRIVATE}. + Благодаря этому ваше приложение может организовать циклическую очередь выходных изображений +{@code ImageReader}, выбрать одно или несколько изображений и отправить их в +{@code ImageWriter} для повторной обработки камерой.

+ +

Возможности Android for Work

+

В M Preview представлены новые API-интерфейсы для Android for Work:

+ + +

+ Подробные сведения обо всех изменениях в API-интерфейсах в версии M Developer Preview представлены в отчете о различиях между API-интерфейсами. +

diff --git a/docs/html-intl/intl/ru/preview/behavior-changes.jd b/docs/html-intl/intl/ru/preview/behavior-changes.jd new file mode 100644 index 0000000..0623ea7 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=Изменения в работе +page.keywords=предварительная версия,пакет sdk,совместимость +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

Наряду с новыми функциями и возможностями, версия M Developer Preview также включает в себя ряд +системных изменений и изменений в работе API-интерфейсов. В этом документе рассматриваются +определенные ключевые изменения, о которых следует знать, чтобы учитывать их при разработке приложений.

+ +

Если вы ранее публиковали приложения для Android, то примите во внимание, +что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.

+ +

Разрешения на выполнение

+

В M Preview представлена новая модель разрешений: теперь пользователи могут управлять разрешениями приложений +напрямую во время работы с ними. Такая модель обеспечивает улучшенное управление +разрешениями и одновременно позволяет оптимизировать установку и автоматическое обновление для разработчиков. +Пользователи могут предоставлять разрешения или отзывать их отдельно для каждого установленного приложения.

+ +

В ваших приложениях, предназначенных для M Preview, следует в обязательном порядке проверить такие разрешения и при необходимости +запросить их. Чтобы определить, было ли вашему приложению предоставлено разрешение, вызовите новый метод +{@code Context.checkSelfPermission()}. Чтобы запросить разрешение, вызовите новый метод +{@code Activity.requestPermission()}. Даже если ваше приложение не предназначено для использования в версии M, вам все равно следует +протестировать его с использованием новой модели разрешений.

+ +

Подробные сведения о поддержке новой модели +разрешений вашим приложением представлены в статье +Разрешения. Как можно проверить влияние новой модели на ваше приложение, читайте в +руководстве по тестированию

+ +

Оптимизация экономии энергии

+

В M Preview реализован ряд новых функций оптимизации экономии энергии для неактивных устройств и приложений.

+ +

Режим «Doze»

+

Если устройство отключено от сети и остается неактивным (и с выключенным экраном) в течение определенного времени, +оно переходит в режим Doze и старается, чтобы система не выходила из спящего состояния. В этому режиме +устройство периодически возобновляет свою обычную работу на краткие промежутки времени, чтобы произвести +синхронизацию и позволить системе выполнить какие-либо отложенные операции.

+ +

Когда устройство находится в режиме «Doze», к приложениям применяются следующие ограничения:

+ +

+

После выхода из режима «Doze», устройство приступает к выполнению любых отложенных заданий и операций синхронизации.

+

Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру +для разработки и выполните следующие команды: +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

Примечание. В предстоящем выпуске службы +Google Cloud Messaging +реализована возможность назначения сообщений +с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткое время предоставляется +доступ к сети, даже если устройство находится в режиме «Doze». +

+ +

Советы по тестированию работы приложений в режиме «Doze» представлены +в руководстве +по тестированию.

+ +

Ждущий режим для приложений

+

В M Preview система может определять, что приложения неактивны, когда они +не используются. Приложение считается неактивным по прошествии определенного периода времени до тех пор, пока система +не обнаружит один из следующих сигналов:

+ + + +

Если устройство отключено от электросети, для приложений, которые считаются неактивными, закрывается доступ к Интернету, +а их операции синхронизации и задания приостанавливаются. После подключения устройства к электросети доступ к Интернету для приложений возобновится +и они смогут приступить к выполнению любых ожидающих заданий и операций синхронизации. Если устройство +неактивно в течение длительного времени, неактивным приложениям раз в день предоставляется доступ к сети.

+ +

Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру +для разработки и выполните следующие команды: +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

Примечание. В предстоящем выпуске службы +Google Cloud Messaging (GCM) +реализована возможность назначения сообщений +с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткий промежуток времени предоставляется +доступ к сети, даже если приложение находится в неактивном состоянии. +

+ +

Советы по тестированию работы приложений в ждущем режиме представлены +в руководстве +по тестированию.

+ +

Подключаемые устройства хранения

+

+В M Preview пользователи могут подключать внешние устройства хранения, такие как SD-карты, и использовать их как внутреннее хранилище, +зашифровав и отформатировав требуемым образом. Благодаря этому + пользователи могут переносить как сами приложения, так свои файлы для этих приложений с одного устройства хранения на другое. При переносе +приложений система руководствуется настройкой +{@code android:installLocation} +в манифесте.

+ +

Если ваше приложение работает с указанными ниже API-интерфейсами или полями, следует помнить, что возвращаемые ими пути к файлам +будут динамически изменяться при перемещении приложения с внутреннего хранилища на внешнее устройство или наоборот. +При создании путей к файлам настоятельно рекомендуется всегда вызывать эти API-интерфейсы динамическим образом. +Не используйте жестко запрограммированные пути к файлам и не указывайте созданные ранее полные пути к файлам.

+ + + +

Для отладки этой функции в Developer Preview подключите USB-устройство, + к устройству Android посредством USB-кабеля On-The-Go (OTG) и выполните следующую команду:

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

Отказ от HTTP-клиента Apache

+

В M Preview удалена поддержка HTTP-клиента Apache. Если ваше приложение, разработанное для +Android 2.3 (уровень API 9) или более поздней версии, использует этот клиент, вам необходимо воспользоваться вместо него классом {@link java.net.HttpURLConnection}. + Этот API-интерфейс более эффективный, поскольку он сокращает использование сетевого трафика за счет прозрачного сжатия +и кэширования ответов, а также сводит к минимуму потребление энергии. Чтобы продолжить использовать API-интерфейсы HTTP Apache, +сначала объявите в своем файле {@code build.gradle} следующую зависимость compile-time: +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Вместо OpenSSL в Android теперь будет использоваться библиотека +BoringSSL +. Если вы используете в ваших приложениях Android NDK, не связывайте его с криптографическими библиотеками, +которые не входят в состав API-интерфейса NDK, такими как {@code libcrypto.so} и {@code libssl.so}. Эти библиотеки +не являются общедоступными API-интерфейсами, и в разных выпусках или на разных устройствах они могут быть изменены или разбиты без предварительного уведомления. +Кроме того, этим вы можете создать уязвимости в системе безопасности вашего продукта. Вместо этого внесите изменения в +собственный код для вызова криптографических API-интерфейсов Java посредством JNI или статической ссылки на +библиотеку криптографии по своему выбору.

+ +

Изменения в классе AudioManager

+

Теперь в платформе не поддерживается настройка уровня громкости напрямую или отключение звука определенных потоков с помощью класса {@link android.media.AudioManager}. + Метод {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} больше не используется. Вместо него следует вызывать метод +{@code AudioManager.requestAudioFocus()}. Также больше не используется метод +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()}; +вместо него следует вызывать метод {@code AudioManager.adjustStreamVolume()} +и передавать в него значение направления {@code ADJUST_MUTE} или {@code ADJUST_UNMUTE}.

+ +

Выделение текста

+ + + +

Теперь, когда пользователь выделяет текст в приложении, такие дополнительные действия как +Вырезать, Копировать и Вставить, можно отображать на +перемещаемой панели инструментов. Реализация взаимодействия пользователя с текстом аналогична той, которая используется для +контекстного меню, +как описано в статье +Запуск контекстного меню для отдельных представлений.

+ +

Чтобы реализовать перемещаемую панель инструментов для выделения текста, внесите в ваши существующие приложения +следующие изменения.

+
    +
  1. В объекте {@link android.view.View} или {@link android.app.Activity} измените вызовы +{@link android.view.ActionMode} с +{@code startActionMode(Callback)} на {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.
  2. +
  3. Возьмите свою реализацию класса {@code ActionMode.Callback} и сделайте его наследуемой от класса +{@code ActionMode.Callback2}.
  4. +
  5. Переопределите метод {@code Callback2.onGetContentRect()} для указания координат объекта +{@link android.graphics.Rect} контента (например, прямоугольника выделения текста) в представлении.
  6. +
  7. Если расположение прямоугольника больше недействительно и это единственный элемент, который не подлежит пересчитыванию, +вызовите метод {@code ActionMode.invalidateContentRect()}.
  8. +
+ +

Если вы используете +вспомогательную библиотеку Android версии 22.2, то помните, что перемещаемым панелям инструментов +не свойственна обратная совместимость и по умолчанию для управления объектами {@link android.view.ActionMode} +используется библиотека appcompat. Это означает, что перемещаемые панели инструментов не будут отображаться. Чтобы включить поддержку +{@link android.view.ActionMode} в +{@link android.support.v7.app.AppCompatActivity}, вызовите метод +{@code android.support.v7.app.AppCompatActivity.getDelegate()}, затем вызовите +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} для возвращенного объекта +{@link android.support.v7.app.AppCompatDelegate} и задайте для параметра input +значение {@code false}. Этот вызов возвращает управление объектами {@link android.view.ActionMode} +платформе. На устройствах под управлением M Preview платформа поддерживает как режимы +{@link android.support.v7.app.ActionBar}, так и режимы перемещаемых панелей инструментов, тогда как на устройствах под управлением более ранних версий +поддерживаются только режимы {@link android.support.v7.app.ActionBar}.

+ +

Изменения в хранилище ключей Android

+

В M Preview +поставщик хранилища ключей Android больше не поддерживает +DSA. ECDSA по-прежнему поддерживается.

+ +

Ключи, для которых не требуется шифрование в хранилище, больше не будут удаляться при отключении или сбросе защищенного экрана блокировки +(например, пользователем или администратором устройства). Ключи, для которых требуется шифрование +в хранилище, во время таких событий будут удалены.

+ +

Изменения в работе с Wi-Fi и сетями

+ +

Ниже перечислены изменения в API-интерфейсах для работы с Wi-Fi и сетями, реализованные в M Preview.

+ + +

Изменения в службе камеры

+

В M Preview изменена модель получения доступа к ресурсам в службе камеры. + Если раньше запросы доступа обрабатывались в порядке поступления, то теперь процессы с высоким приоритетом имеют преимущество. + В работе службы камеры произошли следующие изменения:

+ + +

Среда выполнения ART

+

Среда выполнения ART теперь должным образом реализует правила доступа для метода +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Это +изменение позволило устранить проблему, связанную с тем, что в предыдущих версиях система Dalvik неправильно проверяла правила доступа. +Если ваше приложение использует метод +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} и вы +хотите переопределить проверки доступа, вызовите метод +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()}, присвоив параметру input +значение {@code true}. Если ваше приложение использует +библиотеку appcompat v7 или +библиотеку recyclerview v7, +вам необходимо установить актуальные версии этих библиотек. В противном случае убедитесь в том, +что любые настраиваемые классы, на которые имеются ссылки из XML, обновлены и их конструкторы классов доступны.

+ +

В M Preview обновлено поведение динамического компоновщика. Теперь он распознает разницу между +{@code soname} библиотеки и путем к ней +(ошибка 6670, о которой сообщалось в открытых источниках), +и позволяет выполнять поиск по {@code soname}. + Приложения, которые ранее работали, но содержали неправильные записи {@code DT_NEEDED} +(обычно абсолютные пути в файловой системе компьютера для сборки), теперь при загрузке могут выдавать ошибки.

+ +

В M Preview правильно реализован флаг {@code dlopen(3) RTLD_LOCAL}. Обратите внимание, что +{@code RTLD_LOCAL} используется по умолчанию, поэтому будут затронуты вызовы {@code dlopen(3)}, которые явно не используют +{@code RTLD_LOCAL} (за исключением случаев, когда ваше приложение явным образом использует{@code RTLD_GLOBAL}). Поскольку используется +{@code RTLD_LOCAL}, символы не будут доступны для библиотек, загруженных с использованием последующих вызовов +{@code dlopen(3)} (в противоположность ссылкам из записей {@code DT_NEEDED}).

+

+ +

Проверка пакетов APK

+

Теперь платформа более строго подходит к проверке пакетов APK. Пакет APK считается поврежденным, если файл объявлен +в манифесте, но отсутствует в самом пакете APK. Пакет APK подлежит повторной подписи в случае удаления любого его +содержимого.

+ +

Изменения в Android for Work

+

В M Preview представлены следующие изменения работы Android for Work:

+ diff --git a/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd b/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..7d12b2d --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=Разрешения +page.tags=previewresources, androidm +page.keywords=разрешения, среда выполнения, предварительная версия +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

Краткое описание

+
    +
  • Если ваше приложение предназначено для пакета SDK M Preview, пользователю будет предложено предоставить для него разрешения + не в процессе установки, а при работе с приложением.
  • +
  • Пользователь также может в любой момент отозвать разрешения, воспользовавшись экраном приложения «Настройки» +.
  • +
  • Ваше приложение должно проверять наличие соответствующих разрешений при каждом запуске. +
  • +
+ +

Содержание документа

+
    +
  1. Обзор
  2. +
  3. Добавление в код разрешений на выполнение
  4. +
  5. Тестирование разрешений на выполнение
  6. +
  7. Советы и рекомендации
  8. +
+ + + + +
+
+ + +

+ В версии M Developer Preview представлена новая модель разрешений для приложений, которая +оптимизирует для пользователей процесс установки и обновления приложений. Если приложение, +работающее в M Preview, поддерживает новую модель разрешений, пользователю не нужно предоставлять какие-либо +разрешения при установке приложения или его обновлении. Вместо этого приложение +запрашивает разрешения, когда в них возникает необходимость, — в таких случаях система отображает для пользователя диалоговое окно с просьбой предоставить +соответствующее разрешение. +

+ +

+ Если приложение поддерживает новую модель разрешений, его, тем не менее, можно установить и +запустить на устройстве под управлением одной из более ранних версий Android, и оно будет использовать старую модель +разрешений. +

+ +

+ Обзор +

+ +

+ В версии M Developer Preview представлена новая +модель разрешений. Ниже приводится краткий обзор ее ключевых компонентов: +

+ + + +

+ Новая модель разрешений влияет на поведение приложений при работе с функциями, для +которых требуются разрешения. При использовании этой модели в разработке + обратите внимание на следующие рекомендации: +

+ + + +

+ Примечание. Если приложение предназначено для M Developer Preview, оно +должно в обязательном порядке использовать новую модель разрешений. +

+ +

+ На момент выпуска M Developer Preview не все приложения Google в полной мере реализуют + новую модель разрешений. Google обновляет эти приложения +по мере разработки M Developer Preview, чтобы они должным образом поддерживали настройки +разрешений. +

+ +

+ Примечание. Если у вашего приложения имеется собственная поверхность API-интерфейса, прежде чем проксировать +разрешения, убедитесь сначала в том, что у вызывающей операции имеются надлежащие +разрешения на доступ к данным. +

+ +

+ Предоставление приложениям системных разрешений и подписи +

+ +

+ Как правило, когда пользователь устанавливает приложение, система предоставляет такому приложению только те +разрешения, которые соответствуют константе {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL +PROTECTION_NORMAL}. Однако в определенных ситуациях система предоставляет +приложению больше разрешений: +

+ + + +

+ В обоих случаях пользователь по-прежнему может в любое время отозвать разрешения, обратившись к +экрану Настройки и выбрав Приложения +> название_приложения > Разрешения. Поэтому приложение все равноу +должно проверять наличие разрешений во время выполнения и при необходимости запрашивать их. + +

+ +

+ Совместимость с предыдущими и последующими версиями +

+ +

+ Если приложение не предназначено для M Developer Preview, оно +продолжает использовать старую модель разрешений даже на устройствах под управлением M Preview. В таком случае при установке приложения + система предлагает пользователю предоставить все разрешения, +указанные в манифесте приложения. +

+ +

+ Примечание. На устройствах под управлением M Developer Preview пользователь может отключить +разрешения для любого приложения (включая устаревшие приложения) на экране «Настройки». + Если пользователь решит отключить разрешения для устаревших приложений, система +автоматически отключит соответствующие функциональные возможности. Когда приложение пытается +выполнить операцию, для которой требуется такое разрешение, это +не обязательно приведет к возникновению исключения. Вместо этого оно может выдать пустой набор данных, +сигнал об ошибке или иным образом обозначить непредвиденное поведение. Например, если запросить +календарь, не имея соответствующего разрешения, метод возвратит пустой набор данных. +

+ +

+ При установке приложения с использованием новой модели разрешений на устройство +под управлением другой версии ОС, отличной от M Preview, +система рассматривает такое приложение как любое другое и предлагает +пользователю предоставить все объявленные разрешения уже во время установки. +

+ +

+ Примечание. В случае с предварительной версией в качестве минимальной версии пакета SDK +следует задать версию SDK M Preview, чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии. Это означает, +что вы не сможете протестировать такие приложения на старых платформах +во время использования предварительной версии для разработчиков. +

+ +

Разрешения и намерения

+ +

+ Во многих случаях при разработке приложения у вас есть выбор между двумя способами выполнения задачи: + вы можете настроить приложение таким образом, чтобы оно самостоятельно запрашивало соответствующие разрешения на выполнение +операции, или же можно указать ему использовать намерение, чтобы задачу выполнило +другое приложение. +

+ +

+ Например, предположим, что вашему приложению требуется возможность делать снимки с помощью камеры устройства. + Ваше приложение может запросить разрешение +android.permission.CAMERA, которое позволит ему напрямую получить доступ +к камере. Затем ваше приложение использует API-интерфейсы камеры +для управления камерой и получения снимков. Благодаря такому подходу ваше приложение получает +полный контроль над процессом фотографирования. Кроме того, это позволяет вам вставить пользовательский интерфейс камеры +в свое приложение. +

+ +

+ Если же вам не требуется такой контроль, просто воспользуйтесь намерением {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} +для запроса изображения. Когда вы запускаете намерение, пользователю предлагается выбрать +приложение камеры (если оно отличается от приложения камеры по умолчанию), после чего +это приложение делает снимок. Приложение камеры возвращает полученное изображение в метод {@link +android.app.Activity#onActivityResult onActivityResult()} вашего приложения. +

+ +

+ Аналогичным образом, если вам необходимо позвонить, получить доступ к контактам пользователя и так далее, +можно создать соответствующее намерение или запросить +разрешение и напрямую получить доступ к нужным объектам. У каждого подхода есть +как преимущества, так и недостатки. +

+ +

+ При использовании разрешений: +

+ + + +

+ При использовании намерений: +

+ + + +

Добавление в код разрешений на выполнение

+ +

+ Если ваше приложение предназначено для новой версии M Developer Preview, вы должны в обязательном порядке использовать +новую модель разрешений. Это означает, что кроме объявления требуемых разрешений +в манифесте, вам следует проверять наличие этих разрешений +во время выполнения, а также запрашивать их, если у вас +еще нет необходимых разрешений. +

+ +

+ Активация новой модели разрешений +

+ +

+ Чтобы активировать новую модель разрешений M Developer Preview, задайте для атрибута +targetSdkVersion приложения значение "MNC", а для атрибута +compileSdkVersion – значение "android-MNC". Это позволит +включить все функции новой модели разрешений. +

+ +

+ В случае с предварительной версией необходимо задать для параметра minSdkVersion значение +"MNC", чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии. +

+ +

+ Назначение разрешений только для M Preview +

+ +

+ В манифесте приложения можно использовать новый элемент <uses-permission-sdk-m>, +чтобы указать, что разрешение требуется только для M Developer Preview. Если объявить +разрешение таким способом, то при установке приложения на устройство с более старой версией платформы +система не будет отправлять запрос пользователю или предоставлять разрешение приложению. +С помощью элемента <uses-permission-sdk-m> +вы можете добавлять новые разрешения +в обновленные версии вашего приложения без принудительного запроса у пользователей разрешений при +установке обновления. +

+ +

+ Если приложение запущено на устройстве под управлением M Developer Preview, +поведение элемента <uses-permission-sdk-m> аналогично поведению +<uses-permission>. + Система не запрашивает у пользователей предоставление каких-либо разрешений, когда они устанавливают +приложение. Вместо этого приложение само запрашивает разрешения, когда они требуются. +

+ +

+ Запрос разрешений +

+ +

+ Если ваше приложение использует новую модель разрешений M Developer Preview, то при первом запуске приложения +на устройстве под управлением +M Preview пользователю не предлагается предоставить все разрешения. Вместо этого приложение само запрашивает разрешения, когда они +требуются. Когда приложение запрашивает разрешение, система отображает для пользователя соответствующее диалоговое +окно. +

+ +

+ Если ваше приложение запущено на устройстве с пакетом SDK уровня 22 или более низкого, то приложение использует старую +модель разрешений. То есть при каждой устновке приложения пользователю будет предложено предоставить приложению все разрешения, +запрашиваемые в манифесте приложения, кроме +отмеченных элементом <uses-permission-sdk-m>. +

+ +

Проверка платформы, на которой выполняется приложение

+ +

+ Новая модель разрешений поддерживается только на устройствах под управлением M Developer +Preview. Прежде чем вызывать любые из этих методов, приложению следует проверить, +на какой платформе оно выполняется, +обратившись к значению параметра {@link android.os.Build.VERSION#CODENAME +Build.VERSION.CODENAME}. Если устройство работает под управлением M Developer Preview, +то значение параметра{@link android.os.Build.VERSION#CODENAME CODENAME} будет "MNC". +

+ +

Проверка наличия у приложения необходимого разрешения

+ +

Когда пользователи пытаются выполнить какое-либо действие, для которого требуется разрешение, приложение +проверяет, имеется ли у него в настоящее время разрешение на выполнение этой операции. Для этого +приложение вызывает метод +Context.checkSelfPermission(permission_name). Приложению +следует выполнять такую проверку даже в том случае, если ему известно, что пользователь уже предоставил +необходимое разрешение, +поскольку пользователь может в любое время отозвать разрешения приложения. Например, если пользователь +хочет получить снимок с помощью приложения, то приложение вызывает метод +Context.checkSelfPermission(Manifest.permission.CAMERA).

+ +

+ Таблица 1. Разрешения и группы разрешений.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Группа разрешенийРазрешения
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

Запрос разрешений при необходимости

+ +

Если у приложения нет требуемого разрешения, оно вызывает метод +Activity.requestPermissions(String[], int), чтобы запросить его. + Приложение передает в него +требуемые разрешения, а также целочисленный код запроса. + Этот метод выполняется асинхронно: он возвращает результат сразу же, а после того как пользователь +предоставляет ответ в диалоговом окне, система вызывает метод обратного вызова +приложения с результатами и передает в него тот же код запроса, который приложение передало в метод +requestPermissions().

+ +

Ниже представлен пример кода для проверки наличия у приложения разрешения на чтение контактов +пользователя и запроса соответствующего разрешения при необходимости.

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

Обработка ответа на запрос разрешений

+ +

+ Когда приложение запрашивает разрешения, система отображает для пользователя соответствующее диалоговое +окно. После получения ответа от пользователя система вызывает метод +Activity.onRequestPermissionsResult(int, String[], int[]) +вашего приложения и передает в него ответ пользователя. Вашему приложению необходимо переопределить этот метод. В обратном +вызове передается тот же код запроса, который вы передали в метод +requestPermissions(). Например, если приложение запрашивает доступ на +READ_CONTACTS, то метод обратного вызова +может быть следующим: +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

Если пользователь предоставляет разрешение, система, в свою очередь, представляет все разрешения, +запрашиваемые в манифесте приложения для обозначенной функциональной области. Если пользователь +отказывает в предоставлении разрешения, вам необходимо принять меры. Например, вы можете отключить любые пункты меню +, для использования которых требуется это разрешение. + +

+ +

+ Когда система предлагает пользователю предоставить разрешение, он может указать системе, +чтобы она больше не запрашивала это разрешение. В этом случае, +когда приложение использует метод requestPermissions() для запроса такого разрешения, +система сразу же отклоняет запрос. При этом система вызывает ваш метод +onRequestPermissionsResult() так же, как если бы пользователь повторно +отклонил ваш запрос. Поэтому ваше приложение +не считает, что имело место прямое взаимодействие с пользователем. +

+ +

Тестирование разрешений на выполнение

+ + +

+ Если ваше приложение предназначено для новой версии M Developer Preview, то вы должны протестировать +его и убедиться в том, что оно должным образом обрабатывает разрешения. Не надо исходить из того, что к началу работы ваше приложение уже имеет +любые определенные разрешения. При первом запуске приложения оно, +скорее всего, не будет обладать разрешениями, а в дальнейшем пользователь может в любой момент отозвать или восстановить +разрешения. +

+ +

+ Вам следует протестировать ваше приложение и убедиться в том, что оно ведет себя должным образом в +любых ситуациях, касающихся разрешений. Мы включили в состав пакета SDK M Preview SDK новые команды +Android +Debug Bridge (ADB), чтобы вы могли протестировать ваше приложение с любыми настройками разрешений, +которые вы хотите попробовать в действии. +

+ +

+ Новые команды и параметры ADB +

+ +

+ В состав пакета инструментов SDK M Preview входит ряд новых команд, позволяющих протестировать обработку разрешений +вашим приложением. +

+ +

+ Установка с разрешениями +

+ +

+ Можно воспользоваться новым параметром -g команды adb + install, который служит для установки +приложения и предоставления всех разрешений, указанных в его манифесте: +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ Предоставление разрешений и их отзыв +

+ +

+ Для предоставления разрешений установленному приложению и их отзыва можно использовать новые команды диспетчера пакетов +ADB. +Такая функциональная возможность может быть полезна для автоматизированного тестирования. +

+ +

+ Для представления разрешения используйте команду grant диспетчера пакетов: +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ Например, чтобы представить пакету com.example.myapp разрешение на запись +аудио, воспользуйтесь следующей командой: +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ Чтобы отозвать разрешение, используйте команду revoke диспетчера пакетов: +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

Советы и рекомендации

+ +

+ Новая модель разрешений делает работу пользователей удобнее, +упрощает для них процесс установки приложений и позволяет лучше понимать, +что делает то или иное приложение. Чтобы использовать все преимущества +этой модели, примите во внимание следующие рекомендации: +

+ + +

Запрашивайте только те разрешения, которые необходимы

+ +

+ Каждый раз, когда вы запрашиваете разрешение, вы заставляете пользователя делать выбор. + Если пользователь отклоняет запрос, соответствующая функциональная возможность приложения отключается. + Вам следует сократить количество таких запросов. +

+ +

+ Например, во многих случаях можно предоставить приложению доступ к нужной функции посредством +намерения вместо +запроса разрешений. Если вашему приложению необходимо получить снимки с камеры +телефона, можно использовать намерение {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE +MediaStore.ACTION_IMAGE_CAPTURE}. Когда ваше приложение выполняет намерение, система +предлагает пользователю выбрать уже установленное приложение камеры для +получения снимков. +

+ +

+ Не перегружайте пользователя запросами +

+ +

+ Если на пользователя обрушивается сразу много запросов разрешений, он может +решить, что все это слишком сложно, и просто закрыть приложение. Поэтому разрешения следует +запрашивать только тогда, когда это необходимо. +

+ +

+ Иногда приложению жизненно необходимы одно или несколько разрешений. +В таких случаях имеет смысл запросить все разрешения +сразу при запуске приложения. Например, если вы разрабатываете приложение для фотографирования, то ему +однозначно потребуется доступ к камере устройства. Когда пользователь в первый раз запускает приложение, +он не удивится, если приложение запросит у него разрешение на +использование камеры. Однако если в этом же приложении имеется функция обмена фотографиями с +контактами пользователя, возможно, не следует запрашивать соответствующее разрешение при +первом запуске приложения. Лучше дождаться, когда пользователю потребуется функция обмена контентом, +и уже тогда запросить разрешение. +

+ +

+ Если в вашем приложении имеются обучающие материалы, может оказаться целесообразным запросить необходимые разрешения +после того, как пользователь изучит материалы. +

+ +

+ Всегда поясняйте, для чего требуются те или иные разрешения +

+ +

+ В диалоговом окне запроса разрешений, которое система отображает при вызове вами метода +requestPermissions(), обозначается требуемое для приложения разрешение, +однако не указывается, для чего оно необходимо. В некоторых случаях это может озадачить пользователя. + Поэтому, прежде чем вызывать метод +requestPermissions(), стоит пояснить пользователю, для чего вашему приложению требуются разрешения. +

+ +

+ Например, приложению для фотографирования может потребоваться доступ к службам геолокации, чтобы фотографии можно было снабдить +геотегами. Не все пользователи знают, что +фотография может содержать данные о месте съемки, и им может показаться странным, что приложение для фотографирования запрашивает данные +о местоположении. В этом случае полезно +рассказать пользователю о такой возможности, прежде чем вызывать метод +requestPermissions(). +

+ +

+ Это можно сделать, в частности, внедрив такие запросы в обучающие материалы приложения. В обучающих +материалах могут содержаться описания каждой из функций приложения с пояснением, +какие разрешения необходимы для их использования. Например, в обучающий материал по работе с приложением для фотографирования +можно включить описание функции обмена контентом с контактами, после чего +пояснить, что для этого пользователю следует предоставить приложению доступ к его контактам. + После этого приложение может вызвать метод requestPermissions() для запроса +доступа. Конечно, не все пользователи обращаются к обучающим материалам, +поэтому вам по-прежнему следует проверять наличие разрешений и при необходимости запрашивать +их во время обычной работы приложения. +

diff --git a/docs/html-intl/intl/ru/preview/overview.jd b/docs/html-intl/intl/ru/preview/overview.jd new file mode 100644 index 0000000..6ed1d20 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=Обзор программы +page.metaDescription=Добро пожаловать в программу Android M Developer Preview, участники которой получают всё необходимое для тестирования и оптимизации своих приложений для следующей версии платформы Android. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ Добро пожаловать в программу Android M Developer Preview, участники которой получают всё необходимоедля тестирования и оптимизации своих приложений для следующей версии платформы Android. + + Это бесплатная программа, и приступить к ее использованию можно прямо сейчас, загрузив +инструменты M Developer Preview. +

+ +
+
+
+
+
+ Системные образы эмулятора и оборудования +
+ +

+ Запускайте и тестируйте ваши приложения на устройствах Nexus 5, 6, 9 и Player (для Android TV), а также в эмуляторе. + +

+
+ +
+
+ Самый актуальный код платформы +
+ +

+ Во время знакомства с предварительной версией платформы мы будем предоставлять различные обновления, поэтому вы сможете протестировать самые актуальные изменения в платформе. + +

+
+ +
+
+ Получение обновлений по беспроводной связи +
+ +

+ После прошивки своего устройства для работы с предварительной версией платформы вы сможете получать обновления по беспроводной связи. + +

+
+
+ +
+ + +
+
+ Новые возможности и новые функции +
+ +

+ Начните уже заранее реализовывать в своих приложениях поддержку расширенной функциональности платформы, например, новую модель разрешений на выполнение и функции сбережения энергии. + +

+
+ +
+
+ Приоритетная обработка отчетов об ошибках от разработчиков +
+ +

+ В течение первых нескольких недель мы будем рассматривать отчеты об ошибках, поступающие от разработчиков, в приоритетном порядке, поэтому не теряйте времени и приступайте к тестированию и составлению отзывов как можно раньше. + +

+
+ +
+
+ Отзывы и поддержка +
+ +

+ Отправляйте нам отчеты об ошибках и предоставляйте свои отзывы с помощью нашей системы отслеживания проблем. + Обменивайтесь идеями и предложениями с другими разработчиками в сообществе разработчиков Android M. + +

+
+
+
+
+ + + + +

+ График и обновления +

+Preview program timeline +

+ Тестирование версии M Developer Preview запланировано на период с 28 мая до выпуска окончательной версии пакета SDK Android M, который +состоится незадолго до публикации новой платформы в открытом доступе в +третьем квартале 2015 г. +

+ +

+ На ключевых этапах разработки платформы мы предоставим обновления для тестовых устройств. + Ниже перечислены предварительные даты этих ключевых этапов. +

+ + + +

+ Завершающим этапом обновлений станет выход окончательной версии пакета SDK (в третьем квартале), +где будут представлены официальные API-интерфейсы для новой версии Android, а также +окончательные версии функций и поведений системы. +

+ +

+ Мы настоятельно рекомендуем вам в ходе тестирования и разработки приложений для Android M постоянно +обновлять вашу среду разработки по мере выхода обновлений для версии Preview. + Чтобы упростить этот процесс, мы будем отправлять на устройства, которые уже прошиты для работы с предварительной версией платформы, обновления по беспроводной сети. +Мы также будем предоставлять вам системные образы, которые можно +загрузить и использовать для прошивки устройства вручную. +

+

+ Примечание. Окончательные версии пакета SDK и системных образов не будут отправляться по беспроводной сети, +их придется вручную установить на +тестовые устройства. +

+ +

+ Мы будем сообщать о появлении обновлений для версии Preview в блоге разработчиков Android, а +также на этом сайте и в +сообществе разработчиков Android M. +

+ +

+ Что входит в состав Preview? +

+ +

+ M Developer Preview содержит всё, что вам необходимо для тестирования ваших существующих приложений на экранах различных размеров, +тестирования с использованием различных сетевых технологий, чипсетов ЦП и графических процессоров, + а также на различных архитектурах оборудования. +

+ +

+ Инструменты SDK +

+ +

+ С помощью менеджера SDK в Android Studio вы можете загрузить следующие компоненты: +

+ + + +

+ Системные образы оборудования +

+ +

+ На странице +Загрузки можно скачать следующие системные образы оборудования: +

+ + + +

+ Документация и примеры кода +

+ +

+ Здесь вы можете найти документацию, где представлены подробные сведения о версии Preview: +

+ + + +

+ Ресурсы поддержки +

+ +

+ При тестировании и разработке приложений для M +Developer Preview рекомендуем пользоваться следующими ресурсами поддержки: +

+ + + + +

+ Выбор целевого уровня, предварительные версии API-интерфейсов и публикация приложений +

+ +

+ Выпуск Android M Developer Preview предназначен исключительно для разработки и +не имеет стандартного уровня API. Если вы не хотите +проверять свое приложение на совместимость (хотя мы настоятельно рекомендуем делать это), +выберите целевой уровень M Developer Preview, задав для параметра targetSdkVersion +своего приложения значение “MNC”. +

+ +

+ В Android M Developer Preview представлены предварительные версии API-интерфейсов +—. Такие API-интерфейсы не будут официально опубликованы до выпуска окончательной версии пакета SDK, + намеченого на третий квартал 2015 г. Это означает, что в будущем можно +ожидать незначительных изменений в API-интерфейсах, особенно в +первые недели действия программы. Каждое обновление +Android M Developer Preview будет включать обзор изменений. +

+ +

+ Обратите внимание, что несмотря на возможные изменения в предварительных версиях API-интерфейсов, соответствующие расширения функциональности системы, +такие как разрешения на выполнение и функции сбережения энергии, работают стабильно и уже готовы для +тестирования. +

+ +

+ Что касается публикации приложений, то политика Google Play однозначно запрещает публикацию приложений, +разработанных для M Developer Preview. После выхода окончательной версии пакета SDK Android M +вы сможете выбрать официальный целевой уровень API Android M и приступить +к публикации ваших приложений в магазине Google Play. Тем временем, если вы хотите распространить приложение, предназначенное для +тестировщиков Android M, то используйте для этого электронную почту или разместите такие приложения на своем сайте +для прямой загрузки. +

+ +

+ Начало работы +

+ +

+ Чтобы приступить к тестированию своего приложения, выполните указанные ниже действия. +

+ +
    +
  1. Ознакомьтесь с обзором API-интерфейсов +и сведениями об изменениях в работе, чтобы получить +представление о новых возможностях платформы и о том, как это может повлиять на ваши приложения. В частности, узнайте подробнее о новой модели +разрешений на +выполнение, функциях сбережения энергии и автоматическом резервном копировании. +
  2. + +
  3. Настройте свою среду, руководствуясь инструкциями по +настройке пакета SDK Preview +и конфигурированию тестовых устройств. +
  4. + +
  5. Выполните +инструкции по прошивке, чтобы прошить устройства +Nexus 5, 6, 9 и Player с использованием последнего системного образа M Developer Preview. После прошивки вашего устройства для разработки +обновления Preview на него будут приходить по беспроводной сети. +
  6. + +
  7. Загрузите справочник по API-интерфейсам M Previewпримеры кода M Preview +, чтобы узнать больше о новых возможностях API-интерфейсов и о том, как использовать их в ваших +приложениях. +
  8. + +
  9. Присоединяйтесь к сообществу разработчиков Android +M, чтобы всегда быть в курсе последних новостей и общаться с другими +разработчиками, работающими с новой платформой. +
  10. +
+ +

+ Благодарим за участие в программе Android M Developer! +

diff --git a/docs/html-intl/intl/zh-cn/preview/api-overview.jd b/docs/html-intl/intl/zh-cn/preview/api-overview.jd new file mode 100644 index 0000000..c64a38e --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API 概览 +page.keywords=预览版,sdk,兼容性 +page.tags=previewresources, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

M 开发者预览版可让您预览即将推出的 Android 平台版本为用户和应用开发者提供的新功能。 + +本文旨在介绍其中最值得关注的 API。

+ +

M 开发者预览版的适用对象是喜欢尝鲜的开发者测试人员。 +如果您有兴趣影响 Android 框架的发展方向,欢迎试用 M 开发者预览版并向我们提供反馈! + + +

+ +

注意:请不要在 Google Play 商店中发布基于 M 开发者预览版的应用。 +

+ +

注:本文经常提及的一些类和方法在 developer.android.com 上尚未提供相关参考资料。 +这些 API 元素在本文中设置为 {@code code style} 格式(不带超链接)。 +如需查看这些元素的初步 API 文档,请下载预览版参考资料。 +

+ +

重要的行为变更

+ +

如果您之前发布过 Android 应用,请注意您的应用可能受到平台变化的影响。 +

+ +

如需了解完整信息,请参阅行为变更

+ +

应用链接

+

此预览版通过提供功能更强大的应用链接,增强了 Android 的意向系统。您可以利用此功能将应用与您拥有的某个 Web 域关联。 +平台可以根据此关联确定在处理特定 Web 链接时默认使用的应用,跳过提示用户选择应用的步骤。如需了解如何实现此功能,请参阅应用链接。 + + + + +

自动备份应用

+

现在,系统可以自动为应用执行完整数据备份和恢复。对于以 M 预览版为目标平台的应用,系统会默认启用此行为,您无需额外添加任何代码。 +如果用户删除其 Google 帐户,其备份数据也会被删除。 +如需了解该功能的工作方式以及配置文件系统备份内容的方法,请参阅自动备份应用。 + +

+ +

身份验证

+

本预览版提供一些新的 API,在受支持的设备上,用户只需扫描其指纹即可完成身份验证,还可检查系统最后一次使用设备解锁机制(如锁屏密码)对用户进行身份验证是发生在多久之前。 + +这些 API 可与 Android 密钥库系统结合使用。 +

+ +

指纹身份验证

+ +

如需通过指纹扫描验证用户身份,请获取新增 +{@code android.hardware.fingerprint.FingerprintManager} 类的实例,并调用 +{@code FingerprintManager.authenticate()} 方法。您的应用必须运行在带有指纹传感器的兼容设备上。 +您必须在应用中实现指纹身份验证流的用户界面,并在 UI 中使用标准 Android 指纹图标。示例应用中包含有 Android 指纹图标 ({@code c_fp_40px.png})。请注意,如果您要开发多个使用指纹身份验证的应用,每个应用必须独立验证用户的指纹。 + + + + +

+ +

如需在您的应用中使用此功能,请先在清单文件中添加 {@code USE_FINGERPRINT} 权限。 +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

如需查看指纹身份验证的应用实现,请参阅指纹对话框示例。 + +

+ +

如果您要测试此功能,请执行以下步骤:

+
    +
  1. 如果您尚未安装 Android SDK 工具 24.3 修订版,请执行此操作。
  2. +
  3. 转到设置 > 安全 > 指纹,然后按照登记说明在模拟器中登记新指纹。 +
  4. +
  5. 使用模拟器通过以下命令模拟指纹触摸事件。 +使用同一命令模拟锁屏上或应用中的指纹触摸事件。 + +
    +adb -e emu finger touch <finger_id>
    +
    +

    在 Windows 上,您可能需要运行带有 +{@code finger touch <finger_id>} 参数的 {@code telnet 127.0.0.1 <emulator-id>} 命令。 +

    +
  6. +
+ +

确认凭据

+

您的应用可以根据用户在多久之前最后一次解锁设备来验证其身份。此功能让用户不必费心记忆应用特定密码,您也无需实现自己的身份验证用户界面。 + +您的应用应当利用此功能并结合实现公钥或私钥,以进行用户身份验证。 +

+ +

如需设置成功验证用户身份后可再次使用同一密钥的超时持续时间,请在设置 {@link javax.crypto.KeyGenerator} 或 +{@link java.security.KeyPairGenerator} 时调用新增的 +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} + 方法。 +此功能目前适用于对称加密操作。 +

+ +

避免过多显示重新验证对话框 -- 您的应用应尝试先使用加密对象,如果超时到期,请使用 +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} 方法在您的应用内重新验证用户身份。 + + +

+ +

如需查看此功能的应用实现,请参阅确认凭据示例。 + +

+ +

直接共享

+ + + +

本预览版为您提供的 API 可让用户直观、快捷地进行共享。现在,您可以定义可在您的应用内启动特定活动的直接共享目标。这些直接共享目标通过“共享”菜单公开给用户。 + +此功能让用户可以向其他应用内的目标(如联系人)共享内容。 +例如,直接共享目标可以启动另一社交网络应用中的某个活动,让用户可以直接向该应用中的某位朋友或某个社区共享内容。 + +

+ +

如需启用直接共享目标,您必须定义一个类,用于扩展 +{@code android.service.}
+{@code chooser.ChooserTargetService} 类。在清单文件中声明您的 +{@code ChooserTargetService}。在该声明内,指定 +{@code BIND_CHOOSER_TARGET_SERVICE} 权限和一个带有 +{@code SERVICE_INTERFACE} 操作的意向过滤器。

+

以下示例展示了如何在清单文件中声明 {@code ChooserTargetService}。 +

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

对于您想要向 {@code ChooserTargetService} 公开的每个活动,请在您的应用清单文件中为其添加一个名为 +{@code "android.service.chooser.chooser_target_service"} 的 +{@code <meta-data>} 元素。 +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

语音交互

+

+本预览版提供了一个新的语音交互 API,与 +语音操作一起使用时,可让您为应用内建对话式语音体验。 +调用 +{@code android.app.Activity.isVoiceInteraction()} 方法可确定您的活动是否为响应语音操作而启动。 +如果是这样,则您的应用可以使用 +{@code android.app.VoiceInteractor} 类请求用户进行语音确认、从选项列表中进行选择以及执行其他操作。 +如需了解有关实现语音操作的更多信息,请参阅 +语音操作开发者网站。 +

+ +

助手 API

+

+本预览版提供了一种让用户通过助手程序与应用进行互动的新方式。如需使用此功能,用户必须启用助手以使用当前上下文。 +启用后,用户可通过长按主页按钮在任何应用内召唤助手。 +

+

您的应用可通过设置 +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 标志选择不与助手共享当前上下文。除了平台传递给助手的一组标准信息外,您的应用还可利用新增的 {@code android.app.Activity.AssistContent} 类共享其他信息。 + +

+ +

如需为助手提供您的应用内的其他上下文,请执行以下步骤:

+ +
    +
  1. 实现 {@link android.app.Application.OnProvideAssistDataListener} 接口。
  2. +
  3. 利用 +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} 注册此侦听器。
  4. +
  5. 如需提供特定于活动的上下文信息,请替代 +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} + 回调和新增的 {@code Activity.onProvideAssistContent()} 回调(可选操作)。 +
+ +

通知

+

本预览版针对通知功能引入了下列 API 变更:

+ + +

蓝牙触控笔支持

+

本预览版改善了对用户使用蓝牙触控笔进行输入的支持。用户可将兼容的蓝牙触控笔与其手机或平板电脑配对并建立连接。 +连接后,来自触摸屏的位置信息将与来自触控笔的压力和按键信息融合,从而实现比单纯使用触摸屏更丰富的表达。 + +您的应用可以通过在活动中注册新增的 +{@code View.onStylusButtonPressListener} 回调和 {@code GestureDetector.OnStylusButtonPressListener} + 回调侦听触控笔按键动作并执行辅助操作。 +

+ +

可使用 {@link android.view.MotionEvent} 方法和常量来检测触控笔按键交互: +

+ + +

改进的蓝牙低功耗扫描

+

+如果您的应用执行蓝牙低功耗扫描,可以使用新增的 +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 方法指定您只希望在下列条件下通知回调:首次找到与设置的 +{@link android.bluetooth.le.ScanFilter} 匹配的播发数据包并且该数据包已有一段时间没有出现。 + +这种扫描方法与旧平台版本中提供的方法相比更加节能。 + +

+ +

Hotspot 2.0 第 1 版支持

+

+本预览版在 Nexus 6 和 Nexus 9 设备上添加了对 Hotspot 2.0 第 1 版规范的支持。如需在您的应用中设置 Hotspot 2.0 凭据,请使用新增的 +{@link android.net.wifi.WifiEnterpriseConfig} 类方法,如 {@code setPlmn()} 方法和 +{@code setRealm()} 方法。 +在 {@link android.net.wifi.WifiConfiguration} 对象中,您可以设置 +{@link android.net.wifi.WifiConfiguration#FQDN} 字段和 {@code providerFriendlyName} 字段。 +新增的 {@code ScanResult.PasspointNetwork} 属性可指示检测到的网络是否为 Hotspot 2.0 接入点。 + +

+ +

4K 显示模式

+

现在,平台允许应用在兼容硬件上请求将显示分辨率升级到 4K 渲染。 +如需查询当前物理分辨率,请使用新增的 +{@code android.view.Display.Mode} API。请注意,如果 UI 是以较低逻辑分辨率绘制并通过放大达到更高的物理分辨率,则 +{@code Display.Mode.getPhysicalWidth()} 方法返回的物理分辨率可能不同于 {@link android.view.Display#getSize(android.graphics.Point) getSize()} 所报告的逻辑分辨率。 + +

+ +

您可以通过设置应用窗口的 {@code WindowManager.LayoutParams.preferredDisplayModeId} 属性请求系统更改应用运行时的物理分辨率。 +如果您想切换到 4K 显示分辨率,此功能会很有帮助。 +在 4K 显示模式下,UI 仍然以原始分辨率(如 1080p)渲染,通过放大达到 4K,但 +{@link android.view.SurfaceView} 对象可能会以原生分辨率显示内容。 +

+ +

主题化 ColorStateList

+

对于运行 M 预览版的设备,现在支持在 +{@link android.content.res.ColorStateList} 中使用主题属性。 +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 方法和 +{@link android.content.res.Resources#getColor(int) getColor()} 方法已弃用。如果您要调用这些 API,请改为调用新增的 {@code Context.getColorStateList()} 方法或 +{@code Context.getColor()} 方法。 +还可在 v4 appcompat 库中通过 {@link android.support.v4.content.ContextCompat} 使用这些方法。 +

+ +

音频功能

+ +

本预览版增强了 Android 上的音频处理功能,包括:

+ + +

视频功能

+

本预览版为视频处理 API 添加了新功能,包括:

+ + +

相机功能

+

本预览版提供了下列用于访问相机闪光灯和相机图像再处理的新 API: +

+ +

闪光灯 API

+

如果相机设备带有闪光灯,您可以通过调用 {@code CameraManager.setTorchMode()} + 方法,在不打开相机设备的情况下打开或关闭闪光灯的火炬模式。应用对闪光灯或相机设备不享有独占所有权。 +每当相机设备不可用,或者开启火炬的其他相机资源不可用时,火炬模式即会被关闭并变为不可用状态。 + +其他应用也可调用 {@code setTorchMode()} 来关闭火炬模式。 +当最后一个开启火炬模式的应用关闭时,火炬模式就会被关闭。 +

+ +

您可以注册一个回调,通过调用 +{@code CameraManager.registerTorchCallback()} 方法接收有关火炬模式状态的通知。第一次注册回调时,系统会立即调用它,并返回所有当前已知配备闪光灯的相机设备的火炬模式状态。 + +如果成功开启或关闭火炬模式,系统会调用 +{@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。

+ +

再处理 API

+

{@link android.hardware.camera2 Camera2} API 进行了扩展,以支持 YUV 和专用不透明格式图像再处理。 +您的应用通过 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 确定再处理功能是否可用。 +如果设备支持再处理,您可以通过调用 +{@code CameraDevice.createReprocessableCaptureSession()} 创建一个可再处理的相机捕获会话并创建输入缓冲区再处理请求。 + +

+ +

使用 {@code ImageWriter} 类可将输入缓冲区流与相机再处理输入相连。 +如需获得空白缓冲区,请遵循以下编程模型:

+ +
    +
  1. 调用 {@code ImageWriter.dequeueInputImage()} 方法。
  2. +
  3. 在输入缓冲区中填充数据。
  4. +
  5. 通过调用 {@code ImageWriter.queueInputImage()} 方法将缓冲区发送至相机。
  6. +
+ +

如果您将 {@code ImageWriter} 对象与 +{@code android.graphics.ImageFormat.PRIVATE} 图像一起使用,您的应用并不能直接访问图像数据。 +请改为调用 {@code ImageWriter.queueInputImage()} 方法,将 {@code ImageFormat.PRIVATE} 图像直接传递给 +{@code ImageWriter},而无需进行任何缓冲区复制。 +

+ +

{@code ImageReader} 类现在支持 {@code android.graphics.ImageFormat.PRIVATE} 格式图像流。 +凭借此支持特性,您的应用可使 +{@code ImageReader} 输出图像保持为循环图像队列,还可选择一个或多个图像并将其发送给 +{@code ImageWriter} 进行相机再处理。

+ +

Android for Work 功能

+

本预览版提供了下列用于 Android for Work 的新 API:

+ + +

+ 如需详细了解 M 开发者预览版中的所有 API 变更,请参阅 API 差异报告。 +

diff --git a/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd b/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd new file mode 100644 index 0000000..39494b9 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=行为变更 +page.keywords=预览版,sdk,兼容性 +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

M 开发者预览版除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。 +本文重点介绍您应该了解并在开发应用时加以考虑的一些重要变更。 +

+ +

如果您之前发布过 Android 应用,请注意您的应用可能受到这些平台变更的影响。 +

+ +

运行时权限

+

本预览版引入了一种新的权限模型,如今,用户可直接在运行时管理应用权限。 +这种模型让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。 + +

+ +

对于面向 M 预览版开发的应用,请务必在运行时检查和请求权限。 +如需确定您的应用是否已被授予权限,请调用新增的 {@code Context.checkSelfPermission()} 方法。 +如需请求权限,请调用新增的 +{@code Activity.requestPermission()} 方法。即使您的应用不是针对 M 开发的,您也应该在新权限模型下测试您的应用。 +

+ +

如需了解有关在您的应用中支持新权限模型的详细信息,请参阅开发者预览版的权限页面。 + +如需了解如何评估新模型对应用的影响,请参阅测试指南。 +

+ +

节能优化

+

本预览版引入了针对空闲设备和应用的最新节能优化技术。

+ +

打盹

+

如果设备未插入电源,并在屏幕关闭后的一段时间内保持不活动状态,则会进入打盹模式,在该模式下设备会尝试让系统保持休眠状态。 +在该模式下,设备会定期短时间恢复正常工作,以便进行应用同步,还可让系统执行任何挂起的操作。 + +

+ +

在打盹模式下,您的应用会受到以下限制:

+ +

+

当设备退出打盹模式时,它会执行任何挂起的作业和同步。

+

您可以通过将运行 M 预览版的设备与您的开发计算机相连,并调用以下命令来测试此功能: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

:即将推出的 + + Google Cloud Messaging 版本允许您指定高优先级消息。 +如果您的应用收到高优先级 GCM 消息,即使设备处于打盹模式,系统也会向其授予短时间的网络访问权限。 + +

+ +

如需了解在您的应用中测试打盹模式的技巧,请参阅 +测试指南。 +

+ +

应用待机

+

使用本预览版时,系统会在应用未被主动使用时确定其处于空闲状态。 +除非系统检测到以下信号之一,否则将在一段时间后将您的应用视为处于空闲状态: +

+ + + +

如果设备未插入电源,系统会将被视为处于空闲状态的应用的网络访问禁用,并暂停其同步和作业。 +当设备插入电源时,系统将允许这些应用访问网络并执行任何挂起的作业和同步。 +如果设备长时间处于空闲状态,系统将按每天大约一次的频率允许空闲状态的应用访问网络。 +

+ +

您可以通过将运行 M 预览版的设备与您的开发计算机相连,并调用以下命令来测试此功能: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

:即将推出的 + + Google Cloud Messaging (GCM) 版本允许您指定高优先级消息。 +如果您的应用收到高优先级 GCM 消息,即使其处于空闲状态,也会被授予短时间的网络访问权限。 + +

+ +

如需了解在您的应用中测试应用待机的技巧,请参阅 +测试指南。 +

+ +

可采用的存储设备

+

+使用本预览版时,用户可以采用 SD 卡等外部存储设备。采用外部存储设备可加密和格式化设备,使其具有类似内部存储设备的行为。 +用户可以利用此特性在存储设备之间移动应用及其私有数据。 +移动应用时,系统会遵守清单文件中的 +{@code android:installLocation} + 首选项。 +

+ +

请注意,在内部存储设备与外部存储设备之间移动应用时,如果您的应用访问以下 API 或字段,它们返回的文件路径将会动态变化。郑重建议:在生成文件路径时,请始终动态调用这些 API。请勿使用硬编码文件路径或之前生成的永久性完全限定文件路径。 + + +

+ + + +

如需在开发者预览版中调试此功能,您可以将一个 USB 驱动器通过一根 USB On-The-Go (OTG) 电缆连接到 Android 设备并运行以下命令启用对该 USB 驱动器的采用: +

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

取消支持 Apache HTTP 客户端

+

本预览版取消了对 Apache HTTP 客户端的支持。如果您的应用使用该客户端,并以 Android 2.3(API 级别 9)或更高版本为目标平台,请改用 {@link java.net.HttpURLConnection} 类。 + +此 API 效率更高,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。 +如需继续使用 Apache HTTP API,您必须先在 {@code build.gradle} 文件中声明以下编译时依赖项: + +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Android 正在从使用 OpenSSL 库转向使用 +BoringSSL + 库。如果您要在应用中使用 Android NDK,请勿链接到并非 NDK API 组成部分的加密库,如 {@code libcrypto.so} 和 {@code libssl.so}。 +这些库并非公共 API,可能会在不同版本和设备上毫无征兆地发生变化或出现故障。此外,您还可能让自己暴露在安全漏洞的风险之下。 + +请改为修改原生代码,以通过 JNI 调用 Java 加密 API,或静态链接到您选择的加密库。 + +

+ +

音频管理器变更

+

不再支持通过 {@link android.media.AudioManager} + 类直接设置音量或将特定音频流静音。{@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} 方法已弃用,您应该改为调用 +{@code AudioManager.requestAudioFocus()} 方法。类似地, +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} 方法也已弃用,请改为调用 {@code AudioManager.adjustStreamVolume()} 方法并传入方向值 {@code ADJUST_MUTE} 或 {@code ADJUST_UNMUTE}。 + +

+ +

文本选择

+ + + +

现在,当用户在您的应用中选择文本时,您可以在一个浮动工具栏中显示“剪切”、“复制”和“粘贴”等文本选择操作。 + +其在用户交互实现上与为单个视图启用上下文操作模式中所述的上下文操作栏类似。 + + +

+ +

如需实现可用于文本选择的浮动工具栏,请在您的现有应用中做出以下更改: +

+
    +
  1. 在 {@link android.view.View} 对象或 {@link android.app.Activity} 对象中,将 +{@link android.view.ActionMode} 调用从 +{@code startActionMode(Callback)} 更改为 {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}。
  2. +
  3. 改为使用 {@code ActionMode.Callback} 的现有实现扩展 +{@code ActionMode.Callback2}。
  4. +
  5. 替代 {@code Callback2.onGetContentRect()} 方法,用于提供 {@link android.graphics.Rect} 内容对象(如文本选择矩形)在视图中的坐标。 +
  6. +
  7. 如果矩形的定位不再有效,并且这是唯一需要声明为无效的元素,请调用 {@code ActionMode.invalidateContentRect()} 方法。 +
  8. +
+ +

请注意,如果您使用 + Android Support Library 22.2 修订版,浮动工具栏不向后兼容,默认情况下 appcompat 会获得对 {@link android.view.ActionMode} 对象的控制权。 + +这会禁止显示浮动工具栏。如需在 +{@link android.support.v7.app.AppCompatActivity} 中启用 +{@link android.view.ActionMode} 支持,请调用 +{@code android.support.v7.app.AppCompatActivity.getDelegate()},然后对返回的 +{@link android.support.v7.app.AppCompatDelegate} 调用 +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()},并将输入参数设置为 {@code false}。 +此调用会将 {@link android.view.ActionMode} 对象的控制权交还给框架。 +在运行 M 预览版的设备上,框架可以支持 +{@link android.support.v7.app.ActionBar} 模式或浮动工具栏模式;而在运行 M 预览版之前版本的设备上,框架仅支持 {@link android.support.v7.app.ActionBar} 模式。 +

+ +

Android 密钥库变更

+

使用本预览版时, +Android 密钥库提供程序不再支持 DSA, +但仍支持 ECDSA。

+ +

禁用或重置安全锁屏时(例如,由用户或设备管理员执行此类操作时),系统将不再删除需要闲时加密的密钥, +但在上述事件期间会删除需要闲时加密的密钥。 +

+ +

Wi-Fi 和网络连接变更

+ +

本预览版对 Wi-Fi 和网络连接 API 引入了以下行为变更。

+ + +

相机服务变更

+

在本预览版中,相机服务中共享资源的访问模式已从之前的“先到先得”访问模式更改为高优先级进程优先的访问模式。 + +对服务行为的变更包括:

+ + +

ART 运行时

+

ART 运行时现在可正确实现 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法的访问规则。此变更修正了之前版本中 Dalvik 无法正确检查访问规则的问题。如果您的应用使用 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法,并且您想替代访问检查,请调用 +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} 方法(将输入参数设置为 {@code true})。 + + + +如果您的应用使用 +v7 appcompat 库或 +v7 recyclerview 库,则您必须更新应用以使用这些库的最新版本。 +否则,请务必更新从 XML 引用的任何自定义类,以便能够访问它们的类构造函数。 +

+ +

本预览版更新了动态链接程序的行为。动态链接程序现在可以识别库的 {@code soname} 与其路径之间的差异( +公开 bug 6670),并且现在已实现了按 {@code soname} 搜索。 + + +之前包含错误的 {@code DT_NEEDED} 条目(通常是开发计算机文件系统上的绝对路径)却仍工作正常的应用,如今可能会出现加载失败。 +

+ +

现已正确实现 {@code dlopen(3) RTLD_LOCAL} 标志。请注意, +{@code RTLD_LOCAL} 是默认值,因此不显式使用 +{@code RTLD_LOCAL} 的 {@code dlopen(3)} 调用将受到影响(除非您的应用显式使用 {@code RTLD_GLOBAL})。使用 +{@code RTLD_LOCAL} 时,在随后通过调用 +{@code dlopen(3)} 加载的库中并不能使用这些符号(这与由 {@code DT_NEEDED} 条目引用的情况截然不同)。

+

+ +

APK 验证

+

该平台现在执行的 APK 验证更为严格。如果在清单文件中声明的文件在 APK 中并不存在,该 APK 将被视为已损坏。 +移除任何内容后必须重新签署 APK。 +

+ +

Android for Work 变更

+

本预览版包含下列针对 Android for Work 的行为变更:

+ diff --git a/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd b/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..94a6212 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=权限 +page.tags=预览资源, androidm +page.keywords=权限, 运行时, 预览 +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

内容快览

+
    +
  • 如果您的应用主要面向 M 预览版 SDK,则会在运行时(而非安装时)提示用户授予权限。 +
  • +
  • 用户可以随时从应用“设置”屏幕撤销权限。 +
  • +
  • 每次运行时,应用均需检查自身是否具备所需的权限。 +
  • +
+ +

本文内容

+
    +
  1. 概览
  2. +
  3. 为运行时权限编码
  4. +
  5. 测试运行时权限
  6. +
  7. 最佳做法
  8. +
+ + + + +
+
+ + +

+ M 开发者预览版引入了一种新的应用权限模型,旨在简化用户安装和升级应用的过程。 +如果在 M 预览版上运行的应用支持新权限模型,则用户无需在安装或升级应用时授予任何权限。相反,应用会根据需要请求权限,且系统将向用户显示一个请求权限的对话框。 + + + + +

+ +

+ 如果应用支持新权限模型,则仍可在运行旧版 Android 的设备上使用旧权限模型安装并运行此应用。 + + +

+ +

+ 概览 +

+ +

+ 通过 M 开发者预览版,该平台引入了新的应用权限模型。 +以下概述了此新模型的主要组件: +

+ + + +

+ 对于需要权限的功能,此权限模型将改变应用的行为方式。 +以下概述了您调整此模型时所应遵循的开发实践: + +

+ + + +

+ 注:如果应用主要面向 M 开发者预览版,则必须使用新权限模型。 + +

+ +

+ 截至 M 开发者预览版发布,并非所有 Google 应用均已完全实现新权限模型。 +Google 会在 M 开发者预览版运行期间更新这些应用,以便严格遵守权限切换设置。 + + +

+ +

+ 注:如果您的应用拥有自己的 API 接口,请先确保调用方具备访问该数据所需的必要权限,然后再代理权限。 + + +

+ +

+ 系统应用和签名权限 +

+ +

+ 通常,当用户安装应用时,系统仅授予应用 + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL}。但在某些情况下,系统将授予应用更多权限: + +

+ + + +

+ 在这两种情况下,用户仍可随时撤销权限,具体方法是:转到系统的设置屏幕,然后选择应用 > + + 应用名称 > 权限。应用应在运行时继续检查权限,并根据需要请求权限。 + + +

+ +

+ 前后兼容性 +

+ +

+ 如果应用并非面向 M 开发者预览版,则即使是在 M 预览版设备上,该应用也会继续使用旧权限模型。 +当用户安装应用时,系统将要求用户授予应用清单文件中列出的所有权限。 + + +

+ +

+ 注:在运行 M 开发者预览版的设备上,用户可以从应用的“设置”屏幕禁用任何应用(包括旧版应用)的权限。 + +如果用户禁用某旧版应用的权限,则系统将以静默方式禁用相应的功能。 +当应用尝试执行需要该权限的操作时,该操作不一定会导致出现异常。 + +相反,它可能会返回空数据集、报告错误或以其他方式表现出异常行为。 +例如,如果您未经许可查询日历,则该方法会返回空数据集。 + +

+ +

+ 如果您在未运行 M 预览版的设备上使用新权限模型安装应用,则系统将采用与其他任何应用相同的方式处理:系统会在安装应用时要求用户授予声明的所有权限。 + + + +

+ +

+ 注:对于预览版本,您必须将最低 SDK 版本设置为 M 预览版 SDK,才可使用预览版 SDK 进行编译。 +这意味着在开发者预览版运行期间,您无法在旧版平台上测试此类应用。 + + +

+ +

权限与意向的比较

+ +

+ 许多情况下,您可以使用以下两种方式之一来让您的应用执行某项任务。 +您可以将应用设置为请求执行操作本身所需的权限。 +或者,您可以将应用设置为通过传送意向,让其他应用来执行任务。 + +

+ +

+ 例如,假设应用需要能够使用设备相机拍摄照片。 +应用可以请求 +android.permission.CAMERA 权限,以便允许其直接访问相机。 +然后,应用将使用 Camera API 控制相机并拍摄照片。 +利用此方法,您的应用能够完全控制摄影过程,并支持您将相机 UI 合并至应用中。 + + +

+ +

+ 但是,如果您无需此类控制,则可仅使用 {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} 意向来请求图像。 +启动该意向时,系统会提示用户选择相机应用(如果没有默认相机应用),然后该应用将拍摄照片。 + +该相机应用会将照片返回给应用的 {@link + android.app.Activity#onActivityResult onActivityResult()} 方法。 +

+ +

+ 同样,如果您需要打电话、访问用户的联系人或要执行其他操作,则可通过创建适当的意向来完成,或者您可以请求相应的权限并直接访问相应的对象。 + +每种方法各有优缺点。 + +

+ +

+ 如果使用权限: +

+ + + +

+ 如果使用意向: +

+ + + +

为运行时权限编码

+ +

+ 如果应用主要面向新的 M 开发者预览版,则您必须使用新权限模型。 +这意味着除了通过清单文件声明所需的权限以外,您还必须检查应用运行时是否已有相应的权限,如果没有,则需要请求权限。 + + + +

+ +

+ 启用新权限模型 +

+ +

+ 要启用新的 M 开发者预览版权限模型,请将应用的 +targetSdkVersion 属性设置为 "MNC",并将 +compileSdkVersion 设置为 "android-MNC"。这样可启用所有新的权限功能。 + +

+ +

+ 对于预览版本,您必须将 minSdkVersion 设置为 +"MNC",才能使用预览版 SDK 进行编译。 +

+ +

+ 指定仅用于 M 预览版的权限 +

+ +

+ 您可以使用应用清单文件中的新 <uses-permission-sdk-m> 元素指明仅在 M 开发者预览版中需要某权限。 +如果您以这种方式声明权限,则每当在旧版设备上安装应用时,系统都不会提示用户或向应用授予权限。通过使用 <uses-permission-sdk-m> + 元素,您可以将新权限添加到更新后的应用版本,而不必强制用户在安装更新时授予权限。 + + + + + +

+ +

+ 如果应用在已安装 M 开发者预览版的设备上运行,则 +<uses-permission-sdk-m> 的行为与 +<uses-permission> 相同。 + 系统不会在安装应用时提示用户授予任何权限,且应用将根据需要请求权限。 + +

+ +

+ 提示授予权限 +

+ +

+ 如果应用使用新的 M 开发者预览版权限模型,则在运行 M 预览版的设备上首次启动应用时,系统不会要求用户授予所有权限。 + +相反,应用将根据需要请求权限。 +当应用请求某权限时,系统会向用户显示一个对话框。 + +

+ +

+ 如果应用在已安装 SDK 22 或更低版本的设备上运行,则应用将使用旧权限模型。 +当用户安装应用时,系统将提示他们授予应用在清单文件中请求的所有权限,但那些带有 <uses-permission-sdk-m> 标记的权限除外。 + + +

+ +

检查运行应用的平台

+ +

+ 只有运行 M 开发者预览版的设备支持此权限模型。 +在调用其中任何方法之前,应用均应通过检查 {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME} 的值来验证运行应用的平台。 + +如果设备正在运行 M 开发者预览版,则 +{@link android.os.Build.VERSION#CODENAME CODENAME} 为 "MNC"。 +

+ +

检查应用是否具备所需的权限

+ +

当用户尝试执行需要权限的操作时,应用将检查目前是否具备执行此操作所需的权限。 +为此,应用将调用 +Context.checkSelfPermission( +permission_name)。即便知道用户已授予该权限,应用也应执行此检查,因为用户可以随时撤销应用的权限。 + + +例如,如果用户需要使用应用拍摄照片,则应用将调用 +Context.checkSelfPermission(Manifest.permission.CAMERA)。 +

+ +

+ 表 1.权限和权限组。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
权限组权限
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

根据需要请求权限

+ +

如果应用尚无所需的权限,则应用将调用 +Activity.requestPermissions(String[], int) 方法,请求提供一项或多项适当的权限。 +应用将传递所需的一项或多项权限,以及整数“请求代码”。 + + 此方法异步运行:它会立即返回,并且在用户响应对话框之后,系统会使用结果调用应用的回调方法,将应用传递的相同“请求代码”传递到 requestPermissions()。 + + +

+ +

以下代码检查应用是否具备读取用户联系人所需的权限,并根据需要请求该权限: +

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

处理权限请求响应

+ +

+ 当应用请求权限时,系统将向用户显示一个对话框。 +当用户响应时,系统将调用应用的 +Activity.onRequestPermissionsResult(int, String[], int[]) +,向其传递用户响应。应用需要替代该方法。回调会将您传递的相同请求代码传递给 +requestPermissions()。 +例如,如果应用请求 +READ_CONTACTS 访问权限,则可能采用以下回调方法: + +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

如果用户授予权限,则系统会为应用授予应用清单文件为该功能区域列出的所有权限。 +如果用户拒绝请求,则您应采取适当的操作。 +例如,您可以禁用任何取决于此权限的菜单操作。 + + +

+ +

+ 当系统要求用户授予权限时,用户可以选择指示系统不再要求提供该权限。 +在这种情况下,当应用使用 requestPermissions() 请求该权限时,系统会立即拒绝此请求。 + +在这种情况下,如果用户已再次明确拒绝您的请求,则系统会以同样的方式调用您的 onRequestPermissionsResult()。 + +因此,您的应用不能假设用户采取了任何直接交互行为。 + +

+ +

测试运行时权限

+ + +

+ 如果应用主要面向 M 开发者预览版,则您必须测试它是否正确处理权限。 +您不能假设应用在运行时具备任何特定的权限。 +应用首次启动时,它可能没有任何权限,且用户可以随时撤销或恢复权限。 + + +

+ +

+ 您应测试应用,确保它在所有权限情况下均可正常运行。 +通过 M 预览版 SDK,我们提供了新的 +Android + Debug Bridge (adb) 命令,支持您使用需要尝试的任何权限设置测试应用。 + +

+ +

+ 新 adb 命令和选项 +

+ +

+ M 预览版 SDK 平台工具提供了多个新命令,支持您测试应用处理权限的方式。 + +

+ +

+ 使用权限安装 +

+ +

+ 您可以使用 adb + install 命令的新 -g 选项,该选项将安装应用并授予其清单文件中列出的所有权限: + +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ 授予和撤销权限 +

+ +

+ 您可以使用新的 ADB 软件包管理器 (pm) 命令向已安装的应用授予权限和撤销其权限。此功能对于自动化测试非常有用。 + + +

+ +

+ 要授予权限,请使用软件包管理器的 grant 命令: +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ 例如,要向录音​​授予 com.example.myapp 软件包权限,请使用以下命令: + +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ 要撤销权限,请使用软件包管理器的 revoke 命令: +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

最佳做法

+ +

+ 新权限模型为用户带来更流畅的体验,让他们能够更轻松地安装应用,并得心应手地使用应用的各项功能。 + +为了充分利用该新模型,我们建议采用下列最佳做法。 + +

+ + +

仅请求自己所需的权限

+ +

+ 每次您请求权限时,实际上是在强迫用户作出决定。 + 如果用户拒绝请求,则会减少应用的功能。 + 您应尽量减少提出这些请求的次数。 +

+ +

+ 例如,应用往往可以通过使用 +意向(而不是请求权限)获得所需的功能。 +如果应用需要使用手机的相机拍摄照片,则可使用 + {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE} 意向。当应用执行该意向时,系统会提示用户选择已安装的相机应用拍摄照片。 + + +

+ +

+ 不要让用户感到无所适从 +

+ +

+ 如果您让用户一次面对大量权限请求,用户可能会感到无所适从并因此退出应用。替代做法是,您应根据需要请求权限。 + + +

+ +

+ 某些情况下,您的应用可能绝对需要一项或多项权限。在这种情况下,合理的做法是,在应用启动之后立即请求所有权限。 + +例如,如果您运行摄影应用,则该应用需要访问设备的相机。 +当用户首次启动该应用时,不会对请求使用相机所需的权限感到惊讶。 + +但是,如果同一应用还具备与用户联系人共享照片的功能,则您不应在首次启动时请求用户提供该权限, + +而是等到用户尝试使用“共享”功能之后,再请求该权限。 + +

+ +

+ 如果应用提供了教程,则合理的做法是,在教程结束时请求提供应用的必要权限。 + +

+ +

+ 解释需要权限的原因 +

+ +

+ 系统在您调用 +requestPermissions() 时显示的权限对话框将说明应用所需的权限,但不会解释为何需要这些权限。 +在某些情况下,用户可能会感到困惑。 + 最好在调用 requestPermissions() 之前向用户解释应用需要权限的原因。 + +

+ +

+ 例如,摄影应用可能需要使用位置服务,以便能够为照片添加地理标签。 +通常,用户可能不了解照片能够包含位置信息,并且对摄影应用想要了解具体位置感到不解。 + +因此在这种情况下,应用最好在调用 +requestPermissions() 之前告知此功能的相关信息。 + +

+ +

+ 其中一种办法是将这些请求纳入应用教程。这样,教程可以依次显示应用的每项功能,并在显示每项功能时解释需要哪些相应的权限。 + +例如,摄影应用的教程可以演示其“与您的联系人共享照片”功能,然后告知用户需要为应用授予权限以便其查看用户的联系人。 + + +然后,应用可以调用 requestPermissions(),要求用户提供该访问权限。 +当然,并非所有用户都会按照教程操作,因此您仍需在应用的正常操作期间检查和请求权限。 + + +

diff --git a/docs/html-intl/intl/zh-cn/preview/overview.jd b/docs/html-intl/intl/zh-cn/preview/overview.jd new file mode 100644 index 0000000..cebbf06 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=计划概览 +page.metaDescription=欢迎参加 Android M 开发者预览版计划。此计划将为您提供针对 Android 的下一版本测试和优化应用所需的所有功能。 +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ 欢迎使用 Android M 开发者预览版计划。此计划将为您提供针对 Android 的下一版本测试和优化应用所需的所有功能。 + +它是一款免费软件。您仅需下载 M 开发者预览版工具即可立即使用。 + +

+ +
+
+
+
+
+ 硬件和模拟器系统映像 +
+ +

+ 在 Nexus 5、6、9 和 Player(适用于电视)以及模拟器中运行并测试应用。 + +

+
+ +
+
+ 最新的平台代码 +
+ +

+ 我们将在预览版期间提供多次更新,因此您将可以针对最新的平台变更测试您的应用。 + +

+
+ +
+
+ 通过 OTA(空中下载技术)更新 +
+ +

+ 在向设备刷入初始预览版后,即可通过 OTA 技术获取更新。 + +

+
+
+ +
+ + +
+
+ 新行为和新功能 +
+ +

+ 尽早做好支持新平台行为(例如新运行时权限模型和省电功能)的准备工作。 + +

+
+ +
+
+ 为处理开发者反馈问题而设的优先窗口 +
+ +

+ 在最初的几周里,我们将优先处理开发者报告的问题,以便尽快测试并提供反馈。 + +

+
+ +
+
+ 反馈和支持 +
+ +

+ 使用问题跟踪器向我们报告问题并提供反馈。 + 与 M 开发者社区中的其他开发者建立联系。 + +

+
+
+
+
+ + + + +

+ 时间表和更新 +

+Preview program timeline +

+ M 开发者预览版从 5 月 28 日开始一直运行到最终 Android M SDK 发布为止。最终的 Android M SDK 将于 2015 年第三季度公众版发布之前不久发布。 + + +

+ +

+ 在开发阶段的各个里程碑,我们将为您的测试设备提供预览版更新。 + 暂定的里程碑包括 +

+ + + +

+ 这些更新将促进形成最终版本的 SDK(第三季度末),为 Android 新版本以及最终的系统行为和功能交付官方 API。 + + +

+ +

+ 如果您在 Android M 中进行测试和开发,我们郑重建议您随着预览版更新的发布,将开发环境保持为相应的最新版本。 + + 为了简化这一过程,我们将为已刷入预览版内部版本的设备提供空中下载 (OTA) 更新功能,并提供可供您手动下载并刷入的系统映像。 + + +

+

+ 注:最终的 SDK 和系统映像无法通过 OTA 交付,而是需要手动刷入到测试设备中。 + + +

+ +

+ 当有预览版更新可用时,我们将通过 Android 开发者博客、此站点以及 Android M 开发者社区通知您。 + + +

+ +

+ 预览版具有哪些功能? +

+ +

+ M 开发者预览版包括您在各种使用不同屏幕尺寸、网络技术、CPU/GPU 芯片和硬件架构的设备中测试现有应用所需的所有功能。 + + +

+ +

+ SDK 工具 +

+ +

+ 您可通过 Android Studio 中的 SDK 管理器下载这些组件: +

+ + + +

+ 硬件系统映像 +

+ +

+ 您可从“下载”页面中下载这些供 Nexus 设备使用的硬件系统映像: + +

+ + + +

+ 文档和示例代码 +

+ +

+ 以下文档资源有助于您了解预览版: +

+ + + +

+ 支持资源 +

+ +

+ 在 M 开发者预览版中测试和开发时,您可使用以下支持资源: + +

+ + + + +

+ 锁定目标、预览版 API 和发布 +

+ +

+ Android M 开发者预览版是仅面向开发的版本, +并不具有标准的 API 级别。如果您想选择拒绝通过兼容性行为测试您的应用(强烈推荐),则可将应用的 targetSdkVersion + 设置为 “MNC”,从而锁定 M 开发者预览版。 + + +

+ +

+ Android M 开发者预览版提供预览 API 功能 +— 在最终的 SDK 发布之前,这些 API 都不是正式的 API。目前,最终的 SDK 计划于 2015 年第三季度发布。 +这意味着一段时期内,特别是该计划的最初几周内, +API 可能会出现细微变化。 +我们会通过 Android M 开发者预览版的每次更新,为您提供一份变更摘要。 + +

+ +

+ 请注意,尽管预览版 API 可能会更改,但运行时权限和省电功能等基本系统行为仍保持稳定,可以立即用于测试。 + + +

+ +

+ 关于发布,Google Play 会禁止发布面向 M 开发者预览版的应用。 +当 Android M 最终版本 SDK 可用时,您可以锁定官方 Android M API 级别,并将应用发布至 Google Play。 + +与此同时,如果您需要将针对 Android M 的应用分发给测试者,则可通过电子邮件或从您的站点直接下载实现这一点。 + + +

+ +

+ 如何开始 +

+ +

+ 要开始测试应用,请执行以下操作: +

+ +
    +
  1. 查看 API 概览行为变更,大致了解新功能及其如何影响您的应用。 + +特别地,您需要了解新的运行时权限模型、省电功能和自动备份。 + + +
  2. + +
  3. 遵循有关设置预览版 SDK 和配置测试设备的说明,来设置您的环境。 + + +
  4. + +
  5. 遵循刷入说明,刷入 Nexus 5、6、9 和 Player 的最新 M 开发者预览版系统映像。 + +为开发设备刷入系统映像后,预览版更新将通过无线 (OTA) 更新进行交付。 + +
  6. + +
  7. 下载 M 预览版 API 参考资料M 预览版示例,更深入地了解新 API 功能以及如何在应用中使用这些功能。 + + + +
  8. + +
  9. 加入 Android M 开发者社区,获取最新资讯并与使用新平台的其他开发者建立联系。 + + +
  10. +
+ +

+ 感谢您参加 Android M 开发者预览版计划! +

diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd new file mode 100644 index 0000000..f6c5696 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API 總覽 +page.keywords=預覽,sdk,相容性 +page.tags=previewresources, androidm +sdk。platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +
+ +
+ +

M 開發人員預覽版讓您能夠搶先查看即將發行的 Android 平台版本,這個版本將提供可供使用者和應用程式開發人員使用的新功能。 + +本文件提供最值得受到矚目的 API 簡介。

+ +

M 開發人員預覽版的適用對象是早期採用的開發人員測試者。 +如果您對於如何影響 Android 架構方向深感興趣,請嘗試使用 M 開發人員預覽版,然後將您的意見反應傳送給我們! + + +

+ +

注意:請勿將使用 M 開發人員預覽版的應用程式發行到 Google Play 商店。 +

+ +

注意:本文件通常會參考 developer.android.com 上尚未提供可用參考資料的類別和方法。 +這些 API 元素在本文件中的格式是 {@code code style} (不含超連結)。 +如需這些元素的 API 初稿文件,請下載預覽版參考資料。 +

+ +

重要行為變更

+ +

如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式會受到平台中的變更所影響。 +

+ +

如需完整資訊,請參閱行為變更

+ +

應用程式連結

+

這個預覽版提供功能更強大的應用程式連結來增強 Android 的意圖系統。此功能讓您能夠將應用程式關聯到您自己的 Web 網域。 +根據這個關聯,平台可以判斷要用來處理特定 Web 連結的預設應用程式,並略過提示使用者選取應用程式的程序。如要深入瞭解如何實作此功能,請參閱應用程式連結。 + + + + +

針對應用程式進行自動備份

+

系統現在會針對應用程式執行自動完整資料備份與還原。預設會針對目標為 M 預覽版的應用程式啟用這個行為;您不需要新增任何其他的程式碼。 +如果使用者刪除他們的 Google 帳戶,也會同時刪除他們的備份資料。 +如要深入瞭解此功能的運作方式以及如何在檔案系統上設定要備份的內容,請參閱針對應用程式進行自動備份。 + +

+ +

驗證

+

這個預覽版提供新的 API,讓您能夠在支援的裝置上利用使用者的指紋掃描來驗證他們,並使用裝置解鎖機制 (例如鎖定螢幕密碼) 來檢查距離最後一次驗證該使用者的時間有多接近。 + +將這些 API 與 Android 金鑰存放區系統搭配使用。 +

+ +

指紋驗證

+ +

如要透過指紋掃描驗證使用者,請取得新的 +{@code android.hardware.fingerprint.FingerprintManager} 類別的執行個體,然後呼叫 +{@code FingerprintManager.authenticate()} 方法。您的應用程式必須在配備指紋感應器的相容裝置上執行。 +您必須在應用程式上實作適用於指紋驗證流程的使用者介面,並在您的 UI 中使用標準的 Android 指紋圖示。Android 指紋圖示 ({@code c_fp_40px.png}) 隨附於範例應用程式中。如果您正在開發多個使用指紋驗證的應用程式,請注意,每個應用程式都必須個別驗證使用者的指紋。 + + + + +

+ +

如要在您的應用程式中使用此功能,請先在您的宣示說明中新增 {@code USE_FINGERPRINT} 權限。 +

+ +
+<uses-permission
+        android:name="android.permission.USE_FINGERPRINT" />
+
+ + + +

如要查看指紋驗證的應用程式實作,請參閱指紋對話方塊範例。 + +

+ +

如果您正在測試此功能,請依照下列步驟執行:

+
    +
  1. 安裝 Android SDK 工具修訂版 24.3 (如果您尚未安裝)。
  2. +
  3. 前往 [設定] > [安全性] > [指紋],然後依照註冊指示,在模擬器中註冊新的指紋。 +
  4. +
  5. 使用模擬器,利用下列命令來模擬指紋輕觸事件。 +使用同一個命令,在鎖定螢幕上或您的應用程式中模擬指紋輕觸事件。 + +
    +adb -e emu finger touch <finger_id>
    +
    +

    在 Windows 上,您可能必須執行 {@code telnet 127.0.0.1 <emulator-id>},後面接著 +{@code finger touch <finger_id>}。 +

    +
  6. +
+ +

確認認證

+

您的應用程式可以根據使用者最近一次將裝置解鎖的時間有多接近來驗證他們。此功能讓使用者不需記住其他應用程式特定的密碼,並且讓您不需要實作自己的驗證使用者介面。 + +您的應用程式應該將此功能與公用或秘密金鑰實作搭配使用,來進行使用者驗證。 +

+ +

如要設定在成功驗證使用者之後,同一個金鑰可重複使用的逾時時間長度,可在您設定 {@link javax.crypto.KeyGenerator} 或 +{@link java.security.KeyPairGenerator} 時,呼叫新的 +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} +方法。 +此功能目前適用於對稱式密碼編譯操作。 +

+ +

避免過度顯示重新驗證對話方塊 -- 您的應用程式應該先嘗試使用密碼編譯物件,如果逾時過期,才使用 +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} +方法在您的應用程式內重新驗證使用者。 + +

+ +

如要查看此功能的應用程式實作,請參閱確認認證範例。 + +

+ +

直接分享

+ + + +

這個預覽版提供 API,讓使用者能夠以直覺且快速的方式進行分享。您現在可以定義「直接分享目標」,在您的應用程式中啟動特定的行為。這些直接分享目標是透過 [分享] 選單來向使用者公開。 + +此功能讓使用者能夠將內容分享到其他應用程式內的目標,例如聯絡人。 +例如,直接分享目標可以在其他社交網路應用程式中啟動某個活動,讓使用者能夠在該應用程式中,直接與特定的朋友或社群分享內容。 + +

+ +

如要啟用直接分享目標,您必須定義一個類別來擴充 +{@code android.service.}
+{@code chooser.ChooserTargetService} 類別。在宣示說明中宣告您的 +{@code ChooserTargetService}。在該宣告中,指定 +{@code BIND_CHOOSER_TARGET_SERVICE} 權限以及含有 +{@code SERVICE_INTERFACE} 動作的意圖篩選條件。

+

下列範例示範如何在您的宣示說明中宣告 {@code ChooserTargetService}。 +

+
+<service android:name=".ChooserTargetService"
+        android:label="@string/service_name"
+        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+    <intent-filter>
+        <action android:name="android.service.chooser.ChooserTargetService" />
+    </intent-filter>
+</service>
+
+ +

針對您要向 {@code ChooserTargetService} 公開的每個活動,在您的應用程式宣示說明中,新增名稱為 +{@code "android.service.chooser.chooser_target_service"} 的 +{@code <meta-data>} 元素。 +

+ +
+<activity android:name=".MyShareActivity”
+        android:label="@string/share_activity_label">
+    <intent-filter>
+        <action android:name="android.intent.action.SEND" />
+    </intent-filter>
+<meta-data
+        android:name="android.service.chooser.chooser_target_service"
+        android:value=".ChooserTargetService" />
+</activity>
+
+ +

語音互動

+

+這個預覽版提供新的語音互動 API,可與語音操作搭配使用,讓您能夠在應用程式內建置交談式語音體驗。 + +呼叫 +{@code android.app.Activity.isVoiceInteraction()} 方法,來判斷是否已啟動您的活動來回應語音操作。 +如果是,則您的應用程式可以使用 +{@code android.app.VoiceInteractor} 類別,來要求使用者進行語音確認、從選項清單中選取,以及其他更多動作。 +如要深入瞭解如何實作語音操作,請參閱語音操作開發人員網站。 + +

+ +

協助 API

+

+這個預覽版提供一種新方式,可透過小幫手吸引使用者來使用您的應用程式。如要使用此功能,使用者必須啟用小幫手來使用目前的內容。 +啟用之後,使用者就能夠在所有應用程式內,按住 Home 按鈕不放來啟用小幫手。 +

+

您的應用程式可以設定 +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 旗標,選擇不要與小幫手分享目前的內容。除了平台傳遞給小幫手的一組標準資訊之外,您的應用程式也可以使用新的 {@code android.app.Activity.AssistContent} 類別來分享其他資訊。 + +

+ +

如要將您應用程式的其他內容提供給小幫手,請依照下列步驟執行:

+ +
    +
  1. 實作 {@link android.app.Application.OnProvideAssistDataListener} 介面。
  2. +
  3. 使用 +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} 來註冊這個監聽器。
  4. +
  5. 如要提供特定活動的內容資訊,請覆寫 + {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} +回呼,然後選擇性地覆寫新的 {@code Activity.onProvideAssistContent()} 回呼。 +
+ +

通知

+

這個預覽版新增了下列適用於通知的 API 變更:

+ + +

藍牙手寫筆支援

+

這個預覽版提供對於使用者使用藍牙手寫筆進行輸入的改良支援。使用者可以將相容的藍芽手寫筆與他們的手機或平板電腦配對並連線。 +連線之後,來自觸控螢幕的位置資訊會與來自手寫筆的壓力和按鈕資訊結合,比起單獨使用觸控螢幕,這樣能夠提供更大範圍的表達方式。 + +您的應用程式可以藉由在您的活動中註冊新的 +{@code View.onStylusButtonPressListener} 和 {@code GestureDetector.OnStylusButtonPressListener} +回呼,來監聽手寫筆按鈕的按下動作,並執行次要動作。 +

+ +

使用 {@link android.view.MotionEvent} 方法和常數來偵測手寫筆按鈕互動: +

+ + +

已改進藍牙低電量掃描

+

+如果您的應用程式會執行藍芽低電量掃描,就可以使用新的 +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 方法,來指定如果先找到符合 +{@link android.bluetooth.le.ScanFilter} 組合的廣告封包,以及在某個時段中找不到它時,只需通知回呼。 + +比起先前平台版本中所提供的功能,這個掃描方法功能更強大且更有效率。 + +

+ +

無線基地台 2.0 版本 1 支援

+

+這個預覽版在 Nexus 6 和 Nexus 9 裝置上新增對於無線基地台 2.0 版本 1 規格的支援。如要在您的應用程式中佈建無線基地台 2.0 認證,請使用 +{@link android.net.wifi.WifiEnterpriseConfig} 類別的新方法,例如 {@code setPlmn()} 和 +{@code setRealm()}。 +在 {@link android.net.wifi.WifiConfiguration} 物件中,您可以設定 +{@link android.net.wifi.WifiConfiguration#FQDN} 和 {@code providerFriendlyName} 欄位。新的 {@code ScanResult.PasspointNetwork} 屬性指出偵測到的網路是否代表無線基地台 2.0 存取點。 + + +

+ +

4K 顯示模式

+

此平台現在允許應用程式能夠要求將在相容硬體中呈現的顯示解析度升級到 4K。 +如要查詢目前的實際解析度,請使用新的 +{@code android.view.Display.Mode} API。如果 UI 是使用較低的邏輯解析度來繪製,並向上升級為較高的實際解析度,請注意, +{@code Display.Mode.getPhysicalWidth()} 方法傳回的實際解析度可能會與 {@link android.view.Display#getSize(android.graphics.Point) getSize()} 報告的邏輯解析度不同。 + +

+ +

您可以在應用程式執行時,藉由設定應用程式視窗的 {@code WindowManager.LayoutParams.preferredDisplayModeId} 屬性,來要求系統變更該應用程式中的實際解析度。 +如果您想要切換為 4K 顯示解析度,這個功能非常實用。 +儘管在 4K 顯示模式中,UI 會持續使用原始解析度 (例如 1080p) 來呈現並向上升級為 4K,但是 +{@link android.view.SurfaceView} 物件可能會以原生解析度來顯示內容。 +

+ +

具備設計風格的 ColorStateList

+

針對執行 M 預覽版的裝置, +{@link android.content.res.ColorStateList} 中目前支援設計風格屬性。 +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 和 +{@link android.content.res.Resources#getColor(int) getColor()} 方法已過時。如果您正在呼叫這些 API,請改為呼叫新的 {@code Context.getColorStateList()} 或 +{@code Context.getColor()} 方法。 +您也可以透過 {@link android.support.v4.content.ContextCompat},在 v4 appcompat 程式庫中取得這些方法。 +

+ +

音訊功能

+ +

這個預覽版在 Android 上新增了音訊處理的增強功能,包括:

+ + +

影片功能

+

這個預覽版在影片處理 API 中增加了新功能,包括:

+ + +

相機功能

+

這個預覽版包含下列可用來存取相機閃光燈和相機重新處理影像的 API: +

+ +

閃光燈 API

+

如果相機裝置具有閃光裝置,則您可以呼叫 {@code CameraManager.setTorchMode()} +方法,在不開啟相機裝置的情況下,開啟或關閉閃光裝置的閃光模式。應用程式不具備閃光裝置或相機裝置的獨佔擁有權。 +每當相機裝置變成無法使用時,或者,當其他相機資源讓閃光變成無法使用時,閃光模式也會關閉且變成無法使用。 + +其他應用程式也會呼叫 {@code setTorchMode()} +來關閉閃光模式。關閉最後一個開啟閃光模式的應用程式時,閃光模式即會關閉。 +

+ +

您可以呼叫 +{@code CameraManager.registerTorchCallback()} 方法,來註冊回呼要收到有關閃光模式狀態的通知。第一次註冊回呼時,會立即使用所有目前已知具有閃光裝置之相機裝置的閃光模式來呼叫它。 + +如果成功開啟或關閉閃光模式,即會叫用 +{@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。

+ +

重新處理 API

+

{@link android.hardware.camera2 Camera2} API 已擴充,支援重新處理 YUV 和私人不透明格式的影像。 +您的應用程式會判斷是否可透過 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 使用重新處理功能。 +如果裝置支援重新處理,您就可以呼叫 +{@code CameraDevice.createReprocessableCaptureSession()} 來建立可重新處理的相機拍攝工作階段,然後建立適用於重新處理輸入緩衝區的要求。 + +

+ +

使用 {@code ImageWriter} 類別,將輸入緩衝區流程連接到相機重新處理輸入。 +如要取得空的緩衝區,請依照這個程式設計模型執行:

+ +
    +
  1. 呼叫 {@code ImageWriter.dequeueInputImage()} 方法。
  2. +
  3. 在輸入緩衝區中填入資料。
  4. +
  5. 呼叫 {@code ImageWriter.queueInputImage()} 方法,將緩衝區傳送到相機。
  6. +
+ +

如果您將 {@code ImageWriter} 物件和 +{@code android.graphics.ImageFormat.PRIVATE} 影像一起使用,您的應用程式就無法直接存取影像資料。 +請改為呼叫 {@code ImageWriter.queueInputImage()} 方法但不含任何緩衝區複本,直接將 {@code ImageFormat.PRIVATE} 影像傳遞到 +{@code ImageWriter}。 +

+ +

{@code ImageReader} 類別現在支援 {@code android.graphics.ImageFormat.PRIVATE} 格式的影像串流。 +這個支援讓您的應用程式能夠保留 +{@code ImageReader} 輸出影像的循環影像佇列、選取一或多個影像,然後將它們傳送到 +{@code ImageWriter} 以進行相機重新處理。

+ +

Android for Work 功能

+

這個預覽版包含下列適用於 Android for Work 功能的新 API:

+ + +

+ 如需 M 開發人員預覽版中所有 API 變更的詳細檢視,請參閱 API 差異報告。 +

diff --git a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd new file mode 100644 index 0000000..405aea1 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=行為變更 +page.keywords=預覽版,sdk,相容性 +sdk.platform.apiLevel=MNC +@jd:body + +
+ +
+ +

除了新特性和功能以外,M 開發人員預覽版還包含各種不同的系統變更和 API 行為變更。 +本文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。 +

+ +

如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。 +

+ +

執行階段權限

+

這個預覽版引進了新的權限模型,使用者現在可以在執行階段直接管理應用程式權限。 +這個模型為使用者提供了改良的能見度並使其可完全控制權限,同時為應用程式開發人員提供更流暢的安裝和自動更新程序。使用者可以針對安裝的應用程式個別授與或撤銷權限。 + +

+ +

在目標為 M 預覽版的應用程式中,請務必在執行階段檢查並要求權限。 +如要判斷您的應用程式是否已獲授與權限,請呼叫新的 {@code Context.checkSelfPermission()} 方法。 +如要要求權限,請呼叫新的 +{@code Activity.requestPermission()} 方法。即使您的應用程式目標不是 M,還是應該在新的權限模型下測試您的應用程式。 +

+ +

如需在您的應用程式中支援新權限模型的詳細資訊,請參閱權限開發人員預覽版頁面。 + +如需評估對您應用程式的影響的祕訣,請參閱測試指南。 +

+ +

省電最佳化

+

這個預覽版針對閒置的裝置和應用程式引進了新的省電最佳化功能。

+ +

休眠

+

如果拔除裝置電源並關閉螢幕使其保持靜止狀態一段時間,該裝置即會進入「休眠」模式,它會嘗試讓系統保持睡眠狀態。 +在此模式中,裝置會在短期間內定期繼續執行正常操作,因此,會進行應用程式同步處理,而系統可以執行任何待處理的操作。 + +

+ +

處於休眠狀態時,下列限制會套用到您的應用程式:

+ +

+

當裝置離開休眠狀態時,就會執行所有待處理的工作和同步處理。

+

您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell dumpsys deviceidle step
+$ adb shell dumpsys deviceidle -h
+
+

注意:即將發行的 Google 雲端通訊版本讓您能夠指定高優先順序的訊息。 + + +如果您的應用程式收到高優先順序的 GCM 訊息,即使裝置處於休眠狀態,系統還是會授與它短暫的網路存取權限。 + +

+ +

如需如何在您的應用程式中測試休眠的祕訣,請參閱測試指南。 + +

+ +

應用程式待命

+

使用這個預覽版時,系統可在應用程式處於未使用狀態時,判斷它們是否處於閒置狀態。 +除非系統偵測到以下任一個訊號,否則會在一段時間之後將應用程式視為閒置: +

+ + + +

如果拔除了裝置電源,即會停用被視為閒置之應用程式的網路存取,並擱置它們的同步處理和工作。 +為裝置插上電源時,就允許這些應用程式進行網路存取,且可執行所有已擱置的工作和同步處理。 +如果裝置長時間處於閒置狀態,則允許閒置的應用程式進行網路存取,大約是一天一次。 +

+ +

您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: + +

+
+$ adb shell dumpsys battery unplug
+$ adb shell am set-idle <packageName> true
+$ adb shell am set-idle <packageName> false
+$ adb shell am get-idle <packageName>
+
+ +

注意:即將發行的 Google 雲端通訊 (GCM) 版本讓您能夠指定高優先順序的訊息。 + + +如果您的應用程式收到高優先順序的 GCM 訊息,即使應用程式處於閒置狀態,系統還是會授與它短暫的網路存取權限。 + +

+ +

如需如何在您的應用程式中測試應用程式待命的祕訣,請參閱測試指南。 + +

+ +

可採用的儲存裝置

+

+使用這個預覽版時,使用者可以採用像是 SD 卡的外部儲存裝置。採用外部儲存裝置會加密並格式化裝置,使其可如內部儲存空間般運作。 +此功能讓使用者能夠在儲存裝置之間移動應用程式和這些應用程式的私人資料。 +移動應用程式時,系統會採用宣示說明中的 {@code android:installLocation} 偏好設定。 + + +

+ +

如果您的應用程式會存取下列 API 或欄位,請注意,在內部和外部儲存裝置之間移動應用程式時,它們傳回的檔案路徑將會動態變更。建置檔案路徑時,強烈建議您一律動態呼叫這些 API。請勿使用硬式編碼的檔案路徑或保留先前建置的完整檔案路徑。 + + +

+ + + +

如要在開發人員預覽版中對此功能進行偵錯,您可以執行下列命令來採用 USB 磁碟機 (這個磁碟機是透過 USB On-The-Go (OTG) 纜線連接到 Android 裝置): +

+ +
+$ adb shell sm set-force-adoptable true
+
+ +

移除 Apache HTTP 用戶端

+

這個預覽版已移除對於 Apache HTTP 用戶端的支援。如果您的應用程式正在使用這個用戶端且目標為 Android 2.3 (API 級別 9) 或更高版本,請改為使用 {@link java.net.HttpURLConnection} 類別。 + +這個 API 的效率更高,因為它能透過透明的壓縮和回應快取來降低網路使用量,並將電源耗用量降至最低。 +如要繼續使用 Apache HTTP API,您必須先在 {@code build.gradle} 檔案中宣告下列編譯時期的相依性: + +

+
+android {
+    useLibrary 'org.apache.http.legacy'
+}
+
+

Android 正從 OpenSSL 移至 BoringSSL 程式庫。 + +如果您正在應用程式中使用 Android NDK,請勿連結不屬於 NDK API 一部分的密碼編譯程式庫,例如 {@code libcrypto.so} 和 {@code libssl.so}。 +這些程式庫不是公用 API,而且可能在沒有通知的情況下,在新的版本和裝置上變更或終止支援。此外,您可能會讓自己暴露於安全性弱點中。 + +因此,請改為修改您的原生程式碼,透過 JNI 來呼叫 Java 密碼編譯 API,或以靜態方式連結您選擇的密碼編譯程式庫。 + +

+ +

AudioManager 變更

+

不再支援透過 {@link android.media.AudioManager} 類別直接設定音量或將特定串流設定為靜音。 +{@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} 方法已過時,您應該改為呼叫 +{@code AudioManager.requestAudioFocus()} 方法。同樣地, +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} 方法已過時;請改為呼叫 {@code AudioManager.adjustStreamVolume()} 方法並傳入方向值 {@code ADJUST_MUTE} 或 {@code ADJUST_UNMUTE}。 + +

+ +

文字選取

+ + + +

當使用者在您的應用程式中選取文字時,您現在可以在浮動工具列中顯示文字選取動作,例如,剪下、複製及貼上。 + +使用者互動實作類似於針對內容關聯動作列所做的實作,如為個別的檢視啟用內容關聯動作模式中所述。 + + +

+ +

如要實作適用於文字選取的浮動工具列,請在您現有的應用程式中進行下列變更: +

+
    +
  1. 在您的 {@link android.view.View} 或 {@link android.app.Activity} 物件中,將 +{@link android.view.ActionMode} 呼叫從 +{@code startActionMode(Callback)} 變更為 {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}。
  2. +
  3. 進行 {@code ActionMode.Callback} 的現有實作,並改為讓它擴充 +{@code ActionMode.Callback2}。
  4. +
  5. 覆寫 {@code Callback2.onGetContentRect()} 方法,以在檢視中提供內容 {@link android.graphics.Rect} 物件 (例如,文字選取矩形區塊) 的座標。 +
  6. +
  7. 如果矩形區塊位置不再有效,而且這是唯一變成無效的元素,請呼叫 {@code ActionMode.invalidateContentRect()} 方法。 +
  8. +
+ +

如果您正在使用 Android 支援程式庫版本 22.2,請注意,浮動工具列無法向下相容,而且 appcompat 預設會取得 {@link android.view.ActionMode} 物件的完整控制權。 + + +這可防止浮動工具列顯示。如要在 +{@link android.support.v7.app.AppCompatActivity} 中啟用 +{@link android.view.ActionMode} 支援,請呼叫 +{@code android.support.v7.app.AppCompatActivity.getDelegate()},然後在傳回的 +{@link android.support.v7.app.AppCompatDelegate} 物件中呼叫 +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()},並將輸入參數設定為 {@code false}。 +這個呼叫會將 {@link android.view.ActionMode} 物件的控制權傳回架構中。 +儘管在 M 預覽版之前的裝置中,只支援 {@link android.support.v7.app.ActionBar} 模式,但在執行 M 預覽版的裝置中,允許架構支援 +{@link android.support.v7.app.ActionBar} 或浮動工具列模式。 +

+ +

Android 金鑰存放區變更

+

使用這個預覽版時,Android 金鑰存放區供應程式不再支援 DSA。 + +但仍支援 ECDSA。

+ +

在停用或重設安全鎖定螢幕時 (例如,由使用者或裝置管理員執行),將不再刪除其餘不需加密的金鑰。 +在這些事件期間,將會刪除其餘需要加密的金鑰。 +

+ +

Wi-Fi 和網路變更

+ +

這個預覽版引進了下列對於 Wi-Fi 和網路 API 的行為變更。

+ + +

相機服務變更

+

在這個預覽版中,在相機服務中存取分享資源的模型已經從先前的「先進先服務」存取模型變更為依照優先順序針對處理程序進行處理的存取模型。 + +對於服務行為的變更如下:

+ + +

ART 執行階段

+

ART 執行階段現在可以正確實作 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法的存取規則。這個變更會修正 Dalvik 在先前版本中以不正確方式檢查存取規則的問題。如果您的應用程式使用 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法且您想要覆寫存取檢查,請搭配已設定為 {@code true} 的輸入參數呼叫 +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} 方法。 + + + +如果您的應用程式使用 v7 appcompat 程式庫v7 recyclerview 程式庫,您就必須更新應用程式來使用這些程式庫的最新版本。 + + +否則,請確定從 XML 參考的所有自訂類別都會更新,如此一來就能存取其類別建構函式。 +

+ +

這個預覽版會更新動態連結器的行為。動態連結器現在瞭解程式庫的 {@code soname} 與其路徑 (公開的 Bug 6670) 之間的差異,而且現在會實作依 {@code soname} 進行搜尋。 + + + +先前可運作但含有錯誤 {@code DT_NEEDED} 項目 (通常是組建電腦之檔案系統上的絕對路徑) 的應用程式可能會在載入時失敗。 +

+ +

{@code dlopen(3) RTLD_LOCAL} 旗標現在會以正確的方式實作。請注意, +{@code RTLD_LOCAL} 是預設值,因此,對 {@code dlopen(3)} 的呼叫 (不會明確使用 +{@code RTLD_LOCAL}) 將會受到影響 (除非您的應用程式明確使用 {@code RTLD_GLOBAL})。使用 +{@code RTLD_LOCAL},由後續呼叫 +{@code dlopen(3)} (相對於 {@code DT_NEEDED} 項目所參考) 所載入的程式庫將無法使用符號。

+

+ +

APK 驗證

+

此平台現在會執行較嚴格的 APK 驗證。如果檔案宣告於宣示說明中但未出現在 APK 本身中,則 APK 會被視為毀損。 +如果移除了任何內容,就必須重新簽署 APK。 +

+ +

Android for Work 變更

+

這個預覽版包含下列對於 Android for Work 的行為變更:

+ diff --git a/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd b/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..cf756aa --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=權限 +page.tags=previewresources, androidm +page.keywords=權限, 執行階段, 預覽 +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +
+
+

快速檢視

+
    +
  • 如果您的應用程式是以 M 預覽版 SDK 為目標,它會提示使用者在執行階段授與權限,而不是安裝期間。 +
  • +
  • 使用者能隨時從應用程式 [設定] 畫面撤銷權限。 +
  • +
  • 您的應用程式每次執行時都需要檢查它是否有所需的權限。 +
  • +
+ +

本文件內容

+
    +
  1. 總覽
  2. +
  3. 編寫執行階段權限的程式碼
  4. +
  5. 測試執行階段權限
  6. +
  7. 建議做法
  8. +
+ + + + +
+
+ + +

+ M 開發人員預覽版導入新的應用程式權限模型,簡化使用者安裝和升級應用程式的程序。 +如果 M 預覽版上執行的應用程式支援新的權限模型,使用者安裝或升級應用程式時,不需要授與任何權限。應用程式會在需要時才要求權限,而且系統會對使用者顯示要求權限的對話方塊。 + + + + +

+ +

+ 如果應用程式支援新的權限模型,它仍能在在執行舊版 Android 的裝置上安裝並執行 (在那些裝置上使用舊的權限模型)。 + + +

+ +

+ 總覽 +

+ +

+ 使用 M 開發人員預覽版,平台導入新的應用程式權限模型。 +以下是這個新模型的主要元件摘要: +

+ + + +

+ 此權限模型改變應用程式要求權限的功能行為。 +以下是您應遵循以調整此模型的開發做法摘要: + +

+ + + +

+ 注意:如果應用程式是以 M 開發人員預覽版為目標,「務必要」 +使用新的權限模型。 +

+ +

+ 自 M 開發人員預覽版推出起,並非所有 Google 應用程式都完全實作新的權限模型。 +Google 正透過 M 開發人員預覽版逐漸更新這些應用程式,以適當保留權限切換設定。 + + +

+ +

+ 注意:如果您的應用程式有自己的 API 介面,務必要先確定呼叫端具備存取該資料的必要權限後,再 Proxy 權限。 + + +

+ +

+ 系統應用程式和簽名權限 +

+ +

+ 一般來說,當使用者安裝應用程式時,系統只會將 + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL} 授與應用程式。不過,在某些情況下,系統會授與應用程式更多權限: + +

+ + + +

+ 在這兩種情況下,使用者仍能隨時撤銷權限,只要前往系統的 [設定] 畫面,然後選擇 [應用程式] > + + app_name > [權限]。應用程式應持續在執行階段檢查是否具備權限,並在必要時予以要求。 + + +

+ +

+ 往後和回溯相容性 +

+ +

+ 如果應用程式不是以 M 開發人員預覽版為目標,即使在 M 預覽版裝置上,應用程式也會持續使用舊的權限模型。 +當使用者安裝應用程式時,系統會要求使用者授與應用程式的宣示說明中列出的所有權現。 + + +

+ +

+ 注意:在執行 M 開發人員預覽版的裝置上,使用者能從應用程式的設定畫面關閉任何應用程式 (包括舊版應用程式) 的權限。 + +如果使用者關閉舊版應用程式的權限,系統會自動停用適當功能。 +當應用程式嘗試執行需要那項權限的操作時,該操作不一定會造成例外狀況。 + +而可能傳回空的資料集,通知發生錯誤,或展示未預期的行為。 +例如,如果您不具備查詢行事曆的權限,方法會傳回空的資料集。 + +

+ +

+ 如果您在並非執行 M 預覽版的裝置上使用新的權限模型來安裝應用程式,系統會將它和任何其他應用程式一視同仁:系統會在安裝期間要求使用者授與所有宣告的權限。 + + + +

+ +

+ 注意:對於預覽版,您必須將 SDK 最低版本設定為 M 預覽版 SDK,才能以預覽版 SDK 編譯。 +這表示在開發人員預覽版期間,您將無法在舊版平台上測試這類應用程式。 + + +

+ +

權限與意圖比較

+ +

+ 在許多情況下,您可以為應用程式在兩種方法當中擇一來執行工作。 +您可以讓應用程式要求權限以自行執行操作。 +或者,您可以讓應用程式使用意圖,讓其他應用程式來執行工作。 + +

+ +

+ 例如,假設您的應用程式需要能夠使用裝置相機拍攝相片。 +您的應用程式能要求 +android.permission.CAMERA 權限,讓應用程式直接存取相機。 +接著,應用程式會使用相機 API 來控制相機並拍攝相片。 +這種方法可讓您的應用程式對攝影處理程序有完整控制權,並讓您將相機 UI 納入應用程式。 + + +

+ +

+ 不過,如果您不需要這類控制權,您可以只使用 {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} 意圖來要求影像。 +當您啟動意圖時,會提示使用者選擇相機應用程式 (如果還沒有預設的相機應用程式),然後該應用程式會拍攝相片。 + +相機應用程式會將相片傳回應用程式的 {@link + android.app.Activity#onActivityResult onActivityResult()} 方法。 +

+ +

+ 同樣地,如果您需要撥打電話、存取使用者的聯絡人等等,您都可以建立適當的意圖來執行,或是要求權限,然後直接存取適當的物件。 + +每種方法各有利弊。 + +

+ +

+ 如果您使用權限: +

+ + + +

+ 如果您使用意圖: +

+ + + +

編寫執行階段權限的程式碼

+ +

+ 如果您的應用程式是以新的 M 開發人員預覽版為目標,請務必使用新的權限模型。 +這表示除了在宣示說明中宣告所需的權限之外,您也必須在執行階段檢查是否具備權限,並在您不具備時要求權限。 + + + +

+ +

+ 啟用新的權限模型 +

+ +

+ 如要啟用新的 M 開發人員預覽版權限模型,可將應用程式的 +targetSdkVersion 屬性設定為 "MNC",並將 +compileSdkVersion 設定為 "android-MNC"。這樣做可啟用所有新權限功能。 + +

+ +

+ 對於預覽版,您必須將 minSdkVersion 設定為 +"MNC",才能以預覽版 SDK 編譯。 +

+ +

+ 指定只限 M 預覽版使用的權限 +

+ +

+ 您可以在宣示說明中使用新的 <uses-permission-sdk-m> 元素,指出只有在 M 預覽版上才需要某權限。 +如果您以這種方式宣告權限,每當在舊版裝置上安裝應用程式時,系統都不會提示使用者或將權限授與應用程式。藉由使用 <uses-permission-sdk-m> 元素,當使用者安裝更新時,您不需要強制他們授與權限,就可以將新的權限新增至更新的應用程式版本。 + + + + + + +

+ +

+ 如果應用程式在使用 M 開發人員預覽版的裝置上執行, +<uses-permission-sdk-m> 的運作方式會和 +<uses-permission> 相同。 + 當他們安裝應用程式時,系統不會提示使用者授與任何權限,而應用程式會在需要時才要求權限。 + +

+ +

+ 提示授與權限 +

+ +

+ 如果您的應用程式使用新的 M 開發人員預覽版權限模型,在執行 M 預覽版的裝置上初次啟動應用程式時,不會要求使用者授與所有權限。 + +您的應用程式會在需要時才要求權限。 +應用程式要求權限時,系統會對使用者顯示對話方塊。 + +

+ +

+ 如果您的應用程式在 SDK 22 以下版本的裝置上執行,應用程式會使用舊的權限模型。 +當使用者安裝應用程式時,會提示他們授與應用程式在其宣示說明中要求的所有權限,但標示為 <uses-permission-sdk-m> 的那些權限除外。 + + +

+ +

檢查應用程式執行所在的平台

+ +

+ 只有執行 M 開發人員預覽版的裝置上才支援此權限模型。 +呼叫這些方法之前,應用程式應該檢查 {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME} 的值,驗證它執行所在的平台。 + +如果裝置是執行 M 開發人員預覽版, +{@link android.os.Build.VERSION#CODENAME CODENAME} 是 "MNC"。 +

+ +

檢查應用程式是否具備所需權限

+ +

當使用者嘗試執行需要權限的操作時,應用程式會檢查它目前是否具備可執行此操作的權限。 +如要這麼做,應用程式可呼叫 + +Context.checkSelfPermission(permission_name)。由於使用者可以隨時撤銷應用程式的權限,即使應用程式知道使用者已授與該權限,還是應該執行此檢查。 + + +例如,如果使用者想要使用應用程式拍攝相片,應用程式會呼叫 Context.checkSelfPermission(Manifest.permission.CAMERA)。 + +

+ +

+ 表 1.權限和權限群組。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
權限群組權限
android.permission-group.CALENDAR +
    +
  • + android.permission.READ_CALENDAR +
  • +
+
    +
  • + android.permission.WRITE_CALENDAR +
  • +
+
android.permission-group.CAMERA +
    +
  • + android.permission.CAMERA +
  • +
+
android.permission-group.CONTACTS +
    +
  • + android.permission.READ_CONTACTS +
  • +
  • + android.permission.WRITE_CONTACTS +
  • +
  • + android.permission.READ_PROFILE +
  • +
  • + android.permission.WRITE_PROFILE +
  • +
+
android.permission-group.LOCATION +
    +
  • + android.permission.ACCESS_FINE_LOCATION +
  • +
  • + android.permission.ACCESS_COARSE_LOCATION +
  • +
+
android.permission-group.MICROPHONE +
    +
  • + android.permission.RECORD_AUDIO +
  • +
+
android.permission-group.PHONE +
    +
  • + android.permission.READ_PHONE_STATE +
  • +
  • + android.permission.CALL_PHONE +
  • +
  • + android.permission.READ_CALL_LOG +
  • +
  • + android.permission.WRITE_CALL_LOG +
  • +
  • + com.android.voicemail.permission.ADD_VOICEMAIL +
  • +
  • + android.permission.USE_SIP +
  • +
  • + android.permission.PROCESS_OUTGOING_CALLS +
  • +
+
android.permission-group.SENSORS +
    +
  • + android.permission.BODY_SENSORS +
  • +
+
    +
  • + android.permission.USE_FINGERPRINT +
  • +
+
android.permission-group.SMS +
    +
  • + android.permission.SEND_SMS +
  • +
  • + android.permission.RECEIVE_SMS +
  • +
  • + android.permission.READ_SMS +
  • +
  • + android.permission.RECEIVE_WAP_PUSH +
  • +
  • + android.permission.RECEIVE_MMS +
  • +
  • + android.permission.READ_CELL_BROADCASTS +
  • +
+
+ +

必要時要求權限

+ +

如果應用程式還沒有所需的權限,應用程式會呼叫 +Activity.requestPermissions(String[], int) 方法以要求適當的權限。 +應用程式會傳遞它所需的權限,還有整數「要求代碼」。 + + 這種方法以非同步方式運作:它會立即傳回,並在使用者回應對話方塊後,系統會以該結果呼叫應用程式的回呼方法,傳遞應用程式傳遞給 requestPermissions() 的相同「要求代碼」。 + + +

+ +

下列程式碼會檢查應用程式是否具備讀取使用者聯絡人的權限,並在必要時要求權限。 +

+ +
+if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+        != PackageManager.PERMISSION_GRANTED) {
+    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
+
+    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
+    // app-defined int constant
+
+    return;
+}
+
+ +

處理權限要求回應

+ +

+ 當應用程式要求權限時,系統會對使用者呈現對話方塊。 +當使用者回應時,系統會呼叫 Activity.onRequestPermissionsResult(int, String[], int[]) 並將使用者回應傳遞給它。 + +您的應用程式需要覆寫該方法。將您傳遞給 requestPermissions() 的相同要求代碼傳遞給回呼。 + +例如,如果應用程式要求 READ_CONTACTS 存取權,可能會有下列回呼方法: + + +

+ +
+@Override
+public void onRequestPermissionsResult(int requestCode,
+        String permissions[], int[] grantResults) {
+    switch (requestCode) {
+        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+
+                // permission was granted, yay! do the
+                // calendar task you need to do.
+
+            } else {
+
+                // permission denied, boo! Disable the
+                // functionality that depends on this permission.
+            }
+            return;
+        }
+
+        // other 'switch' lines to check for other
+        // permissions this app might request
+    }
+}
+
+ +

如果使用者授與權限,系統就會將應用程式宣示說明所列出該功能區域的所有權限給予應用程式。 +如果使用者拒絕要求,您應該執行適當動作。 +例如,您可能會停用依存於此權限的任何選單動作。 + + +

+ +

+ 系統要求使用者授與權限時,使用者可選擇告知系統不要再次要求該權限。 +在上述情況下,當應用程式使用 requestPermissions() 要求該權限時,系統會立即拒絕要求。 + +在這種情況下,如果使用者再次明確拒絕您的要求,系統會以相同的方式呼叫您的 onRequestPermissionsResult()。 + +基於這個理由,您的應用程式不能假設已與使用者發生任何直接互動。 + +

+ +

測試執行階段權限

+ + +

+ 如果您的應用程式是以新的 M 開發人員預覽版為目標,您必須測試它是否能適當處理權限。 +您不能假設應用程式在執行時具備任何特定權限。 +應用程式初次啟動時,很可能不具備任何權限,且使用者可隨時撤銷或還原權限。 + + +

+ +

+ 您應該測試應用程式,確保它在所有權限情況下都能正常運作。 +使用 M 預覽版 SDK,我們現在提供 Android 偵錯橋 (adb) 命令,不管需要嘗試哪種權限設定都能讓您測試。 + + + +

+ +

+ 新的 adb 命令和選項 +

+ +

+ M 預覽版 SDK 平台工具提供的數個命令可讓您測試應用程式如何處理權限。 + +

+ +

+ 連同權限一併安裝 +

+ +

+ 您可以使用 adb + install 命令的新 -g 選項,安裝應用程式並授與其宣示說明中列出的所有權限: + +

+ +
+$ adb install -g <path_to_apk>
+
+ +

+ 授與和撤銷權限 +

+ +

+ 您可以使用新的 ADB 套件管理員 (pm) 命令,對安裝的應用程式授與和撤銷權限。此功能在自動化測試時非常實用。 + + +

+ +

+ 如要授與權限,可使用套件管理員的 grant 命令: +

+ +
+$ adb pm grant <package_name> <permission_name>
+
+ +

+ 例如,如要將可錄製音訊的權限授與 com.example.myapp 套件,請使用此命令: + +

+ +
+$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO
+
+ +

+ 如要撤銷權限,可使用套件管理員的 revoke 命令: +

+ +
+$ adb pm revoke <package_name> <permission_name>
+
+ +

最佳做法

+ +

+ 新的權限模型讓使用者有更順暢的體驗,並能輕鬆安裝應用程式且對應用程式執行的工作感到自在。 + +建議使用下列最佳做法以充分利用新的模型。 + +

+ + +

只要求您所需的權限

+ +

+ 每次要求權限時,您都是在強迫使用者做出決定。 + 如果使用者拒絕要求,就會減少您應用程式的功能。 + 您應該儘可能減少提出這些要求的次數。 +

+ +

+ 例如,您的應用程式可經常使用意圖來取得所需功能,而不是要求權限。 + +如果您的應用程式需要使用手機的相機拍攝相片,應用程式可以使用 {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE} 意圖。 +當您的應用程式執行意圖時,系統會提示使用者選擇已安裝的相機應用程式來拍攝相片。 + + +

+ +

+ 別讓使用者無法承受 +

+ +

+ 如果您讓使用者一次面對太多權限要求,可能會讓使用者無法承受而結束您的應用程式。您應該改為在需要時才要求權限。 + + +

+ +

+ 在某些情況下,您的應用程式可能必須具備一或多個權限。在那種情況下,在應用程式啟動時立即要求所有權限是合理的舉措。 + +例如,如果您建立攝影應用程式,該應用程式會需要存取裝置相機。 +使用者初次啟動應用程式時,看到要求使用相機的權限不會被嚇到。 + +但如果相同的應用程式具有與使用者聯絡人分享相片的功能,您可能「不」應該在初次啟動時要求該權限。 + +可以等到使用者嘗試使用「分享」功能時,再要求該權限。 + +

+ +

+ 如果您的應用程式提供教學課程,在教學課程結束時要求應用程式的基本權限是合理的舉措。 + +

+ +

+ 說明需要權限的原因 +

+ +

+ 當您呼叫 +requestPermissions() 時,系統顯示的權限對話方塊會說明您的應用程式想要的權限,但不會說明原因。 +在某些情況下,使用者可能會感到不解。 + 在呼叫 requestPermissions() 前對使用者說明應用程式想要權限的原因是不錯的想法。 + +

+ +

+ 例如,攝影應用程式可能想要使用定位服務,以便將相片加上地理標籤。 +一般使用者可能不明白相片可以包含定位資訊,而不明白為何攝影應用程式會想要知道位置。 + +在這種情況下,在呼叫 requestPermissions()「之前」,將此功能的相關資訊告訴使用者會是不錯的想法。 + + +

+ +

+ 您可以將這些要求與應用程式教學課程結合來完成此作業。教學課程可依序顯示應用程式的各項功能,並可以同時說明需要哪些權限。 + +例如,攝影應用程式的教學課程可以示範「與聯絡人分享相片」功能,接著告訴使用者需要提供權限,應用程式才能看到使用者的聯絡人。 + + +接著,應用程式可以呼叫 requestPermissions(),要求使用者提供該存取權。 +當然,並非每位使用者都會依照教學課程執行動作,所以您仍需要在應用程式的正常操作期間檢查和要求權限。 + + +

diff --git a/docs/html-intl/intl/zh-tw/preview/overview.jd b/docs/html-intl/intl/zh-tw/preview/overview.jd new file mode 100644 index 0000000..63cde32 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=程式總覽 +page.metaDescription=歡迎使用 Android M 開發人員預覽版,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +

+ 歡迎使用「Android M 開發人員預覽版」,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 + +免費使用,您只要下載 M 開發人員預覽版工具,就能立即開始使用。 + +

+ +
+
+
+
+
+ 硬體與模擬器系統映像 +
+ +

+ 在 Nexus 5、6、9 和 Player (適用於電視) ,以及模擬器上執行和測試您的應用程式。 + +

+
+ +
+
+ 最新的平台程式碼 +
+ +

+ 我們將在預覽版期間提供多次更新,讓您能夠針對最新的平台變更進行測試。 + +

+
+ +
+
+ 透過 OTA 傳遞更新 +
+ +

+ 在您將裝置刷新為初始預覽版之後,就能以無線方式取得更新。 + +

+
+
+ +
+ + +
+
+ 新行為和功能 +
+ +

+ 儘早開始開發以支援新的平台行為,例如新的執行階段權限模型和省電功能。 + +

+
+ +
+
+ 開發人員限時優先回報問題 +
+ +

+ 在前幾個星期內,我們將讓開發人員優先回報問題,因此請盡快測試並提供意見反應。 + +

+
+ +
+
+ 意見反應與支援 +
+ +

+ 使用問題追蹤器回報問題並提供意見反應。 + 與 M 開發人員社群中的其他開發人員聯絡。 + +

+
+
+
+
+ + + + +

+ 時間軸和更新 +

+Preview program timeline +

+ M 開發人員預覽版可從 5 月 28 日開始執行,直到我們將在 2015 年第 3 季正式發行之前發行的最終版 Android M SDK。 + + +

+ +

+ 我們將在主要的開發里程碑為您的測試裝置提供更新。 + 里程碑暫定如下 +

+ + + +

+ 這些更新最終會成為「最終版 SDK」 (稍後於第 3 季),為新版 Android 提供正式的 API,以及最終的系統行為和功能。 + + +

+ +

+ 當您在 Android M 上測試和開發時,強烈建議您在預覽版更新發行時立即更新,讓「您的開發環境保持在最新狀態」。 + + 為了讓程序更簡單,我們將對更新為預覽版建置的裝置以無線 (OTA) 方式提供更新,還會提供您能手動下載和更新的系統映像。 + + +

+

+ 注意:最終版 SDK 與系統映像無法以 OTA 方式提供,將必須以手動方式更新至您的測試裝置。 + + +

+ +

+ 我們將透過 Android 開發人員部落格,還有本網站與 Android M 開發人員社群來通知您有可用的預覽版更新。 + + +

+ +

+ 預覽版新增功能 +

+ +

+ M 開發人員預覽版包含您針對各種不同螢幕大小、網路技術、 CPU/GPU 晶片組及硬體架構,測試現有應用程式所需的一切。 + + +

+ +

+ SDK 工具 +

+ +

+ 您可以透過 Android Studio 中的「SDK 管理器」下載以下元件: +

+ + + +

+ 硬體系統映像 +

+ +

+ 您可以從下載頁面下載適用於 Nexus 裝置的以下硬體系統映像: + +

+ + + +

+ 文件和範例程式碼 +

+ +

+ 這些文件資源可協助您瞭解預覽版: +

+ + + +

+ 支援資源 +

+ +

+ 在 M 開發人員預覽版上測試和開發時,請使用以下支援資源: + +

+ + + + +

+ 目標設定、預覽版 API 及發行 +

+ +

+ Android M 開發人員預覽版是開發專用的版本,而且沒有標準的 API 層級。 +如果您想要選擇退出相容性行為以測試您的應用程式 (強烈建議),您可以將應用程式的 targetSdkVersion 設定為 “MNC”,就能以 M 開發人員預覽版為目標。 + + + +

+ +

+ Android M 開發人員預覽版提供預覽版 API — 在最終版 SDK (目前規劃在 2015 年第三季) 發行之前的都不是正式 API。 + +這表示您可以預期 API 會隨時間而有些許變更,特別是程式一開始的幾週。 + +我們會將 Android M 開發人員預覽版每次更新的變更摘要提供給您。 + +

+ +

+ 請注意,雖然預覽版 API 可能會改變,但例如執行階段權限和省電功能等基本系統行為,均已穩定且能夠立即測試。 + + +

+ +

+ 在發行方面,Google Play 會禁止您發行以 M 開發人員預覽版為目標的應用程式。 +當 Android M 最終版 SDK 推出時,您將能夠以正式 Android M API 層級為目標,並將您的應用程式發行至 Google Play。 + +同時,您可以透過電子郵件或直接從您的網站下載,來對測試者散佈以 Android M 為目標的應用程式。 + + +

+ +

+ 如何開始 +

+ +

+ 如要開始測試您的應用程式: +

+ +
    +
  1. 檢閱 API 總覽行為變更,以瞭解新增功能,還有它會如何影響您的應用程式。 + +特別是瞭解新的執行階段權限模型、省電功能以及自動化備份。 + + +
  2. + +
  3. 依照設定預覽版 SDK 的指示來設定您的環境,並設定測試裝置。 + + +
  4. + +
  5. 依照刷新指示,針對 Nexus 5、6、9 及 Player 刷新最新的 M 開發人員預覽版系統映像。 + +在您刷新開發裝置之後,預覽版更新將以無線 (OTA) 更新的方式提供。 + +
  6. + +
  7. 下載 M 預覽版 API 參考資料M 預覽版範例,以深入瞭解新的 API 功能以及如何在您的應用程式中運用。 + + + +
  8. + +
  9. 加入 Android M 開發人員社群以取得最新消息,並與其他使用新平台的開發人員聯絡。 + + +
  10. +
+ +

+ 感謝您參與 Android M 開發人員預覽版程式! +

-- cgit v1.1