diff options
Diffstat (limited to 'docs/html-intl/intl/es')
-rw-r--r-- | docs/html-intl/intl/es/preview/api-overview.jd | 521 | ||||
-rw-r--r-- | docs/html-intl/intl/es/preview/behavior-changes.jd | 403 | ||||
-rw-r--r-- | docs/html-intl/intl/es/preview/features/runtime-permissions.jd | 794 | ||||
-rw-r--r-- | docs/html-intl/intl/es/preview/overview.jd | 362 |
4 files changed, 2080 insertions, 0 deletions
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 + + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>Contenido del documento<a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle"> + + <span class="more">mostrar más</span> + <span class="less" style="display:none">mostrar menos</span></a></h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#app-linking">Vinculación de la aplicación</a></li> + <li><a href="#backup">Copia de seguridad automática para aplicaciones</a></li> + <li><a href="#authentication">Autenticación</a> + <ol> + <li><a href="#fingerprint-authentication">Autenticación por huellas dactilares</a></li> + <li><a href="#confirm-credential">Confirmar credencial</a></li> + </ol> + </li> + <li><a href="#direct-share">Compartir de forma directa</a></li> + <li><a href="#voice-interactions">Interacciones de voz</a></li> + <li><a href="#assist">Asistencia de API</a></li> + <li><a href="#notifications">Notificaciones</a></li> + <li><a href="#bluetooth-stylus">Soporte del lápiz Bluetooth</a></li> + <li><a href="#ble-scanning">Exploración mejorada de Bluetooth de bajo consumo</a></li> + <li><a href="#hotspot">Soporte de Hotspot 2.0 versión 1</a></li> + <li><a href="#4K-display">Modo de pantalla 4K</a></li> + <li><a href="#behavior-themeable-colorstatelists">ColorStateLists para poder aplicar temas</a></li> + <li><a href="#audio">Características de audio</a></li> + <li><a href="#video">Características de video</a></li> + <li><a href="#camera">Características de la cámara</a> + <ol> + <li><a href="#flashlight">API para luz de flash</a></li> + <li><a href="#reprocessing">Reprocesamiento de la cámara</a></li> + </ol> + </li> + <li><a href="#afw">Características de Android for Work</a></li> +</ol> + +<h2>Diferencias de las API</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">Nivel de API 22 para la versión preliminar de Android M »</a> </li> +</ol> + +</div> +</div> + +<p>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.</p> + +<p>M Developer Preview está destinado a <strong>usuarios desarrolladores principiantes</strong> y <strong>evaluadores</strong>. + Si le interesa influenciar la dirección del marco de trabajo de Android, +<a href="{@docRoot}preview/setup-sdk.html">pruebe M Developer Preview y</a> envíenos sus comentarios. + +</p> + +<p class="caution"><strong>Advertencia:</strong> No publique las aplicaciones que utilizan M Developer Preview en la tienda de Google Play. +</p> + +<p class="note"><strong>Nota:</strong> Este documento, a menudo, hace referencia a clases y métodos que aún no cuentan con materiales de referencia disponibles en <a href="{@docRoot}">developer.android.com</a>. + 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 <a href="{@docRoot}preview/download.html#docs"> referencia de la versión preliminar</a>. +</p> + +<h3>Importantes cambios en los comportamientos</h3> + +<p>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. +</p> + +<p>Consulte la sección <a href="behavior-changes.html">Cambios en los comportamientos</a> para obtener información detallada.</p> + +<h2 id="app-linking">Vinculación de la aplicación</h2> +<p>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 +<a href="{@docRoot}preview/features/app-linking.html">Vinculación de la aplicación</a>. + + + +<h2 id="backup">Copia de seguridad automática para aplicaciones</h2> +<p>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 +<a href="{@docRoot}preview/backup/index.html">Copia de seguridad automática para aplicaciones</a>. +</p> + +<h2 id="authentication">Autenticación</h2> +<p>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 <a href="{@docRoot}training/articles/keystore.html">sistema Android Keystore</a>. +</p> + +<h3 id="fingerprint-authentication">Autenticación por huellas dactilares</h3> + +<p>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 +<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">aplicación de muestra</a>. 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. + + + +</p> + +<p>Para utilizar esta característica en su aplicación, primero agregue el permiso {@code USE_FINGERPRINT} en su manifiesto. +</p> + +<pre> +<uses-permission + android:name="android.permission.USE_FINGERPRINT" /> +</pre> + +<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> + +<p>Para ver cómo una aplicación implementa la autenticación por huellas dactilares, consulte la sección +<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link"> +Ejemplo de diálogo de huella dactilar</a>.</p> + +<p>Si está evaluando esta característica, siga estos pasos:</p> +<ol> +<li>Instale la Revisión de herramientas del SDK de Android versión 24.3, si todavía no la instaló.</li> +<li>Registre una huella dactilar nueva en el emulador; para hacerlo, vaya a +<strong>Settings > Security > Fingerprint</strong>, luego siga las instrucciones de registro.</li> +<li>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. + +<pre class="no-prettyprint"> +adb -e emu finger touch <finger_id> +</pre> +<p>En Windows, posiblemente tenga que ejecutar {@code telnet 127.0.0.1 <emulator-id>} seguido de + {@code finger touch <finger_id>}. +</p> +</li> +</ol> + +<h3 id="confirm-credential">Confirmar credencial</h3> +<p>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. +</p> + +<p>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. +</p> + +<p>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. + +</p> + +<p>Para ver cómo la aplicación implementa esta característica, consulte la sección +<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link"> +Ejemplo de cómo confirmar la credencial</a>.</p> + +<h2 id="direct-share">Compartir de forma directa</h2> + +<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" /> + +<p>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 <em>destinos para compartir de forma directa</em> 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ú <em>Share</em>. + + 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. + +</p> + +<p>Para habilitar destinos para compartir de forma directa, debe definir una clase que extienda el +{@code android.service.} <br> +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}.</p> +<p>El ejemplo a continuación muestra de qué manera podría declarar {@code ChooserTargetService} en su manifiesto. +</p> +<pre> +<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> +</pre> + +<p>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. +</p> + +<pre> +<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> +</pre> + +<h2 id="voice-interactions">Interacciones de voz</h2> +<p> +Esta versión preliminar proporciona una nueva API de interacción de voz que, junto con las +<a href="https://developers.google.com/voice-actions/" class="external-link">acciones de voz</a>, +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 +<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">sitio para desarrolladores de acciones de voz</a>. +</p> + +<h2 id="assist">Asistencia de API</h2> +<p> +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 <strong>Home</strong>. +</p> +<p>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}. + +</p> + +<p>Para proporcionarle al asistente contexto adicional desde su aplicación, siga estos pasos:</p> + +<ol> +<li>Implemente la interfaz {@link android.app.Application.OnProvideAssistDataListener}.</li> +<li>Registre esta escucha usando +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li> +<li>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()}. +</ol> + +<h2 id="notifications">Notificaciones</h2> +<p>Esta versión preliminar agrega los siguientes cambios de API para las notificaciones:</p> +<ul> + <li>Nuevo nivel de filtro {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} que corresponde al nuevo modo ocupado <em>Solo alarmas</em>. +</li> + <li>Nuevo valor de categoría {@code Notification.CATEGORY_REMINDER} que se utiliza para distinguir recordatorios programados por el usuario de otros eventos + ({@link android.app.Notification#CATEGORY_EVENT}) y alarmas + ({@link android.app.Notification#CATEGORY_ALARM}). +</li> + <li>Nueva clase {@code android.graphics.drawable.Icon} que se puede adjuntar a sus notificaciones a través de los métodos {@code Notification.Builder.setSmallIcon(Icon)} y +{@code Notification.Builder.setLargeIcon(Icon)}. +</li> + <li>Nuevo método {@code NotificationManager.getActiveNotifications()} que permite que sus aplicaciones descubran qué notificaciones se encuentran actualmente activas. + Para ver una implementación de la aplicación que utilice esta característica, consulte la sección <a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">Ejemplo de notificaciones activas</a>. +</li> +</ul> + +<h2 id="bluetooth-stylus">Compatibilidad del lápiz Bluetooth</h2> +<p>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. +</p> + +<p>Utilice las constantes y los métodos {@link android.view.MotionEvent} para detectar las interacciones del botón del lápiz: +</p> +<ul> +<li>Si el usuario toca un lápiz con un botón en la pantalla de su aplicación, el método +{@link android.view.MotionEvent#getToolType(int) getTooltype()} devuelve +{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li> +<li>Para las aplicaciones que tienen como destino la versión preliminar de Android M, el método +{@link android.view.MotionEvent#getButtonState() getButtonState()} +devuelve {@code MotionEvent.STYLUS_BUTTON_PRIMARY} cuando el usuario presiona el botón principal del lápiz. + Si el lápiz tiene un segundo botón, el mismo método devuelve +{@code MotionEvent.STYLUS_BUTTON_SECONDARY} cuando el usuario lo presiona. Si el usuario presiona ambos botones simultáneamente, el método devuelve ambos valores juntos separados por “OR” ({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}). + +</li> +<li> +Para las aplicaciones que tienen como destino una versión anterior de la plataforma, el método +{@link android.view.MotionEvent#getButtonState() getButtonState()} devuelve +{@link android.view.MotionEvent#BUTTON_SECONDARY} (cuando se presiona el botón principal), +{@link android.view.MotionEvent#BUTTON_TERTIARY} (cuando se presiona el botón secundario) o ambos. +</li> +</ul> + +<h2 id="ble-scanning">Exploración mejorada de Bluetooth de bajo consumo</h2> +<p> +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. + +</p> + +<h2 id="hotspot">Soporte de Hotspot 2.0 versión 1</h2> +<p> +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. + + +</p> + +<h2 id="4K-display">Modo de pantalla 4K</h2> +<p>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()}. + +</p> + +<p>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. +</p> + +<h2 id="behavior-themeable-colorstatelists">ColorStateLists para poder aplicar temas</h2> +<p>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}. +</p> + +<h2 id="audio">Características de audio</h2> + +<p>Esta versión preliminar agrega mejoras al procesamiento de audio en Android, lo que incluye lo siguiente: </p> +<ul> + <li>Soporte para el protocolo <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> +, con las nuevas API {@code android.media.midi}. Utilice estas API para enviar y recibir eventos MIDI. +</li> + <li>Clases nuevas {@code android.media.AudioRecord.Builder} y {@code android.media.AudioTrack.Builder} + para crear capturas de audio digital y objetos de reproducción respectivamente, y configurar propiedades de receptores y fuentes de audio para invalidar los valores predeterminados del sistema. +</li> + <li>Enlaces de API para asociar dispositivos de entrada y de audio. Esto resulta particularmente útil si su aplicación les permite a los usuarios iniciar una búsqueda por voz desde un controlador para juegos o un control remoto conectados a un TV con Android. El sistema invoca la nueva devolución de llamada {@code android.app.Activity.onSearchRequested()} cuando el usuario inicia una búsqueda. + + + Para determinar si el dispositivo de entrada del usuario tiene un micrófono incorporado, recupere el objeto {@link android.view.InputDevice} de esa devolución de llamada y luego llame al nuevo método +{@code InputDevice.hasMic()}. +</li> + <li>Nueva clase {@code android.media.AudioDevicesManager}, que le permite recuperar una lista de todos los dispositivos de audio receptores y fuente adjuntos. + También puede especificar un objeto +{@code android.media.OnAudioDeviceConnectionListener} si desea que su aplicación reciba una notificación cuando se conecta o desconecta un dispositivo de audio. +</li> +</ul> + +<h2 id="video">Características de video</h2> +<p>Esta versión preliminar agrega nuevas capacidades a las API de procesamiento de video, entre ellas, las siguientes:</p> +<ul> +<li>Nueva clase {@code android.media.MediaSync} que ayuda a las aplicaciones a representar de forma sincrónica transmisiones de audio y video. + Los búferes de audio se envían de manera que no generan bloqueo y regresan mediante una devolución de llamada. + Además, admite una velocidad de reproducción dinámica. +</li> +<li>Nuevo evento {@code MediaDrm.EVENT_SESSION_RECLAIMED}, que indica cuando una sesión abierta por la aplicación es reclamada por el administrador de recursos. + Si su aplicación utiliza sesiones DRM, debe controlar este evento y asegurarse de no utilizar una sesión reclamada. + +</li> +<li>Nuevo código de error {@code MediaCodec.CodecException.ERROR_RECLAIMED}, que indica que el administrador de recursos reclamó el recurso multimedia utilizado por el códec. + Con esta excepción, se debe liberar el códec, ya que pasó al estado terminal. + +</li> +<li>Nueva interfaz {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} para obtener una indicación de la cantidad máxima de instancias concurrentes de códec admitidas. + +</li> +<li>Nuevo método {@code MediaPlayer.setPlaybackParams()} para configurar la velocidad de reproducción multimedia para reproducciones rápidas o lentas. + Además, alarga o acelera la reproducción de audio de forma automática junto con el video. +</li> +</ul> + +<h2 id="camera">Características de la cámara</h2> +<p>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: +</p> + +<h3 id="flashlight">API para luz de flash</h3> +<p>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. +</p> + +<p>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()}.</p> + +<h3 id="reprocessing">API de reprocesamiento</h3> +<p>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. + +</p> + +<p>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:</p> + +<ol> +<li>Llame al método {@code ImageWriter.dequeueInputImage()}.</li> +<li>Complete los datos en el búfer de entrada.</li> +<li>Envíe el búfer a la cámara llamando al método {@code ImageWriter.queueInputImage()}.</li> +</ol> + +<p>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. +</p> + +<p>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.</p> + +<h2 id="afw">Características de Android for Work</h2> +<p>Esta versión preliminar incluye las siguientes API nuevas para Android for Work:</p> +<ul> + <li><strong>Controles mejorados para dispositivos corporativos de uso único:</strong> El propietario de dispositivo ahora puede controlar las configuraciones que se describen a continuación para mejorar la administración de los dispositivos corporativos de uso único (Corporate-Owned, Single-Use, COSU). + + + <ul> + <li>Deshabilitar o volver a habilitar la protección de seguridad con el método +{@code DevicePolicyManager.setKeyguardEnabledState()}.</li> + <li>Deshabilitar o volver a habilitar la barra de estado (lo que incluye configuraciones rápidas, notificaciones y el gesto de navegación al deslizar el dedo hacia arriba para iniciar Google Now) con el método +{@code DevicePolicyManager.setStatusBarEnabledState()}. +</li> + <li>Deshabilitar o volver a habilitar el inicio seguro con la constante {@link android.os.UserManager} +{@code DISALLOW_SAFE_BOOT}.</li> + <li>Evitar que se apague la pantalla mientras el dispositivo se encuentra conectado con la constante + {@link android.provider.Settings.Global} {@code STAY_ON_WHILE_PLUGGED_IN}.</li> + </ul> + </li> + <li><strong>Instalación y desinstalación automáticas de aplicaciones por parte del propietario de dispositivo:</strong> Un propietario de dispositivo ahora puede instalar y desinstalar aplicaciones de manera automática con las API {@link android.content.pm.PackageInstaller} +, independiente de Google Play for Work. + Ahora, puede aprovisionar los dispositivos a través de un propietario de dispositivo que obtiene e instala aplicaciones sin interacción del usuario. + Esta característica es útil para habilitar el aprovisionamiento con un toque de quioscos u otros dispositivos similares sin activar una cuenta de Google. +</li> +<li><strong>Acceso automático al certificado de empresa:</strong> Ahora cuando una aplicación llama a +{@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()}, antes de que se indique al usuario que seleccione un certificado, el propietario de dispositivo o perfil puede llamar al método {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} para proporcionar el alias de forma automática a la aplicación que realiza la solicitud. + + + Esta característica le permite conceder a las aplicaciones gestionadas acceso a certificados sin interacción del usuario. +</li> +<li><strong>Aceptación automática de actualizaciones del sistema:</strong> Al configurar una directiva de actualización del sistema con +{@code DevicePolicyManager.setSystemUpdatePolicy()}, el propietario de dispositivo ahora puede aceptar automáticamente una actualización del sistema, por ejemplo, en el caso de un dispositivo de quiosco, o posponer la actualización y evitar que el usuario la ejecute durante un plazo de hasta 30 días. + + Además, un administrador puede configurar un período de tiempo diario en el que se debe ejecutar una actualización, por ejemplo, durante las horas en que no se usa el dispositivo de quiosco. + Cuando hay una actualización del sistema disponible, el sistema verifica si la aplicación Work Policy Controller definió una directiva de actualización del sistema y se comporta según corresponda. + + +</li> +<li> +<strong>Instalación delegada de certificados:</strong> Ahora, un propietario de dispositivo o perfil puede concederle a una aplicación de terceros la capacidad de llamar a estas API de administración de certificados {@link android.app.admin.DevicePolicyManager}: + + +<ul> + <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName) +getInstalledCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[]) +hasCaCertInstalled()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[]) +installCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[]) +uninstallCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName) +uninstallAllUserCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String) +installKeyPair()}</li> +</ul> +</li> +<li><strong>Protección de restablecimiento de la configuración predeterminada de fábrica:</strong> Al aprovisionar a un propietario de dispositivo, ahora podrá configurar parámetros para desbloquear la protección de restablecimiento de la configuración predeterminada de fábrica (Factory Reset Protection, FRP) configurando el paquete +{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS}. + Una aplicación de Programador NFC puede proporcionar estos parámetros después del restablecimiento de un dispositivo para desbloquear la FRP y aprovisionar al dispositivo sin requerir la cuenta de Google configurada previamente. + + Si no modifica estos parámetros, la FRP se conserva y evita que el dispositivo se active sin las credenciales de Google activadas previamente. + + +<p>Además, al configurar las restricciones de la aplicación en los servicios de Google Play, los propietarios de dispositivos pueden especificar cuentas de Google alternativas para desbloquear la FRP y reemplazar las que se encuentran activadas en el dispositivo. +</p> +</li> +<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> +<li><strong>Seguimiento del uso de datos:</strong> Ahora, un propietario de dispositivo o perfil puede consultar las estadísticas de uso de datos que se pueden ver en <strong>Settings > Data</strong> utilizando los nuevos métodos +{@code android.app.usage.NetworkStatsManager}. + A los propietarios de perfiles se les concede automáticamente permiso para consultar los datos del perfil que administran, mientras que los propietarios de dispositivo obtienen acceso a los datos de uso del usuario principal administrado. + +</li> +<li><strong>Administración de permisos de tiempo de ejecución:</strong> +<p>Un propietario de dispositivo o perfil puede configurar una directiva de permisos para todas las solicitudes de tiempo de ejecución de todas las aplicaciones que utilizan +{@code DevicePolicyManager.setPermissionPolicy()}, a fin de pedirle confirmación al usuario para conceder el permiso de manera normal, o bien, para conceder o negar el permiso automáticamente sin notificarlo. + + Si se configura la última directiva, el usuario no puede modificar la selección realizada por el propietario de dispositivo o perfil dentro de la pantalla de permisos de la aplicación en <strong>Settings</strong>. + +</p></li> +<li><strong>VPN en Settings:</strong> Las aplicaciones de la VPN (red privada virtual) ahora se pueden ver en +<strong>Settings > More > VPN</strong>. Además, las notificaciones que acompañan el uso de la VPN ahora son específicas para la manera en que dicha VPN está configurada. + + Para el propietario de perfil, las notificaciones son específicas dependiendo de si la VPN se configura para un perfil administrado, un perfil personal o ambos. + Para un propietario de dispositivo, las notificaciones son específicas dependiendo de si la VPN se configura para todo el dispositivo. +</li> +<li><strong>Notificación del estado del trabajo:</strong> Ahora aparecerá un ícono de maletín en la barra de estado siempre que una aplicación del perfil administrado tenga una actividad en primer plano. + Además, si el dispositivo se desbloquea directamente para la actividad de una aplicación del perfil administrado, se mostrará una notificación del sistema para informarle al usuario que se encuentra dentro del perfil de trabajo. + + +</li> +</ul> + +<p class="note"> + Para obtener una vista detallada de todos los cambios de la API en M Developer Preview, consulte el <a href="{@docRoot}preview/download.html">Informe de diferencias de las API</a>. +</p> 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 + + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>Contenido del documento</h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#behavior-runtime-permissions">Permisos de tiempo de ejecución</a></li> + <li><a href="#behavior-power">Optimizaciones de ahorro de energía</a> + <ol> + <li><a href="#behavior-doze">Doze</a></li> + <li><a href="#behavior-app-standby">App Standby</a></li> + </ol> + </li> + <li><a href="#behavior-adoptable-storage">Dispositivos de almacenamiento adoptables</a></li> + <li><a href="#behavior-apache-http-client">Eliminación del cliente HTTP de Apache</a></li> + <li><a href="#behavior-audiomanager-Changes">Cambios en AudioManager</a></li> + <li><a href="#behavior-test-selection">Selección de texto</a></li> + <li><a href="#behavior-keystore">Cambios en Android Keystore</a></li> + <li><a href="#behavior-network">Cambios en las funciones de red y Wi-Fi</a></li> + <li><a href="#behavior-camera">Cambios en el servicio de cámara</a></li> + <li><a href="#behavior-art-runtime">Tiempo de ejecución de ART</a></li> + <li><a href="#behavior-apk-validation">Validación de APK</a></li> + <li><a href="#behavior-afw">Cambios en Android for Work</a></li> +</ol> + +<h2>Diferencias de las API</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">Nivel de API 22 para la versión preliminar de Android M »</a> </li> +</ol> + + +<h2>Consulte también</h2> +<ol> +<li><a href="{@docRoot}preview/api-overview.html">Información general de la API de M Developer Preview</a> </li> +</ol> + +</div> +</div> + +<p>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. +</p> + +<p>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. +</p> + +<h2 id="behavior-runtime-permissions">Permisos de tiempo de ejecución</h1> +<p>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. + + </p> + +<p>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. +</p> + +<p>Para obtener detalles sobre la compatibilidad del nuevo modelo de permisos en su aplicación, consulte la página +<a href="{@docRoot}preview/features/runtime-permissions.html"> +Permisos</a> de la versión preliminar para desarrolladores. Para obtener consejos sobre cómo evaluar el impacto en su aplicación, consulte la <a href="{@docRoot}preview/testing/guide.html#runtime-permissions">Guía de prueba</a>. +</p> + +<h2 id="behavior-power">Optimizaciones de ahorro de energía</h2> +<p>Esta versión preliminar introduce nuevas optimizaciones de ahorro de energía para aplicaciones y dispositivos inactivos.</p> + +<h3 id="behavior-doze">Doze</h3> +<p>Si un dispositivo está desconectado y permanece quieto con la pantalla apagada durante un período determinado, pasará al modo <em>Doze</em>, 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. + +</p> + +<p>Durante el modo Doze, se aplican las siguientes restricciones a sus aplicaciones:</p> +<ul> +<li>Se deshabilita el acceso a la red, salvo que su aplicación reciba una señal de prioridad alta de Google Cloud Messaging (envío de mensajes a través de la nube de Google). +</li> +<li>Se ignoran los <a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">Wakelocks</a>.</li> +<li>Se deshabilitan las alarmas programadas con la clase {@link android.app.AlarmManager}, salvo las alarmas que haya configurado con el método {@link android.app.AlarmManager#setAlarmClock setAlarmClock()} +y con {@code AlarmManager.setAndAllowWhileIdle()}. +</li> +<li>No se realiza la detección de Wi-Fi.</li> +<li>No se permite la ejecución de sincronizaciones ni trabajos para sus adaptadores de sincronización y {@link android.app.job.JobScheduler}. +</li> +</ul> +</p> +<p>Al salir del modo Doze, el dispositivo ejecuta los trabajos y las sincronizaciones pendientes.</p> +<p>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: + +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> +<p class="note"><strong>Nota:</strong> La próxima versión de +<a href="https://developers.google.com/cloud-messaging/" class="external-link"> +Google Cloud Messaging</a> 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. + +</p> + +<p>Consulte la +<a href="{@docRoot}preview/testing/guide.html#doze-standby">Guía de prueba</a> para obtener consejos sobre cómo probar el modo Doze en su aplicación. + </p> + +<h3 id="behavior-app-standby">App Standby</h3> +<p>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: +</p> + +<ul> +<li>El usuario inicia explícitamente la aplicación.</li> +<li>La aplicación actualmente tiene un proceso en primer plano (ya sea como una actividad o un servicio en primer plano, o en uso por parte de otra actividad u otro servicio en primer plano). +</li> +<li>La aplicación genera una notificación que los usuarios ven en la pantalla de bloqueo o en la bandeja de notificaciones. +</li> +<li>El usuario solicita explícitamente que la aplicación esté exenta de optimizaciones mediante las <strong>Configuraciones</strong>. +</li> +</ul> + +<p>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. +</p> + +<p>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: + +</p> +<pre class="no-prettyprint"> +$ 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> +</pre> + +<p class="note"><strong>Nota:</strong> La próxima versión de +<a href="https://developers.google.com/cloud-messaging/" class="external-link"> +Google Cloud Messaging</a> (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. + +</p> + +<p>Consulte la +<a href="{@docRoot}preview/testing/guide.html#doze-standby">Guía de prueba</a> para obtener consejos sobre cómo probar el modo App Standby en sus aplicaciones. + </p> + +<h2 id="behavior-adoptable-storage">Dispositivos de almacenamiento adoptables</h2> +<p> +Con esta versión preliminar, los usuarios pueden <em>adoptar</em> 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 +<a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code android:installLocation}</a> +del manifiesto. +</p> + +<p>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. + + +</p> + +<ul> +<li>Métodos {@link android.content.Context}: + <ul> + <li>{@link android.content.Context#getFilesDir() getFilesDir()}</li> + <li>{@link android.content.Context#getCacheDir() getCacheDir()}</li> + <li>{@link android.content.Context#getCodeCacheDir() getCodeCacheDir()}</li> + <li>{@link android.content.Context#getDatabasePath(java.lang.String) getDatabasePath()}</li> + <li>{@link android.content.Context#getDir(java.lang.String,int) getDir()}</li> + <li>{@link android.content.Context#getNoBackupFilesDir() getNoBackupFilesDir()}</li> + <li>{@link android.content.Context#getFileStreamPath(java.lang.String) getFileStreamPath()}</li> + <li>{@link android.content.Context#getPackageCodePath() getPackageCodePath()}</li> + <li>{@link android.content.Context#getPackageResourcePath() getPackageResourcePath()}</li> + </ul> +</li> +<li>Campos {@link android.content.pm.ApplicationInfo}: + <ul> + <li>{@link android.content.pm.ApplicationInfo#dataDir dataDir}</li> + <li>{@link android.content.pm.ApplicationInfo#sourceDir sourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#nativeLibraryDir nativeLibraryDir}</li> + <li>{@link android.content.pm.ApplicationInfo#publicSourceDir publicSourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#splitSourceDirs splitSourceDirs}</li> + <li>{@link android.content.pm.ApplicationInfo#splitPublicSourceDirs splitPublicSourceDirs}</li> + </ul> +</li> +</ul> + +<p>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: +</p> + +<pre class="no-prettyprint"> +$ adb shell sm set-force-adoptable true +</pre> + +<h2 id="behavior-apache-http-client">Eliminación del cliente HTTP de Apache</h2> +<p>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}: + +</p> +<pre> +android { + useLibrary 'org.apache.http.legacy' +} +</pre> +<p>Android está migrando de la biblioteca OpenSSL a +<a href="https://boringssl.googlesource.com/boringssl/" class="external-link">BoringSSL</a> +. 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. + +</p> + +<h2 id="behavior-audiomanager-Changes">Cambios en AudioManager</h2> +<p>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}. + +</p> + +<h2 id="behavior-test-selection">Selección de texto</h2> + +<img src="{@docRoot}preview/images/text-selection.gif" style="float:right; margin:0 0 20px 30px" width="360" height="640" /> + +<p>Ahora, cuando los usuarios seleccionen texto en su aplicación, usted puede mostrar acciones de selección de texto, como +<em>cortar</em>, <em>copiar</em> y <em>pegar</em> en una +<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">barra de herramientas flotante</a>. 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 +<a href="{@docRoot}guide/topics/ui/menus.html#CABforViews"> +Habilitación del modo de acción contextual para vistas individuales</a>. +</p> + +<p>Si desea implementar una barra de herramientas flotante para selección de texto, realice los siguientes cambios en sus aplicaciones existentes: +</p> +<ol> +<li>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)}.</li> +<li>Tome su implementación existente de {@code ActionMode.Callback} y, en su lugar, haga que sea extendida +{@code ActionMode.Callback2}.</li> +<li>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. +</li> +<li>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()}. +</li> +</ol> + +<p>Si utiliza la biblioteca <a href="{@docRoot}tools/support-library/index.html"> +Android Support Library</a> 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}. +</p> + +<h2 id="behavior-keystore">Cambios en Android Keystore</h2> +<p>Con esta versión preliminar, el +<a href="{@docRoot}training/articles/keystore.html">proveedor de Android Keystore</a> ya no admite DSA. + Aún se admite ECDSA.</p> + +<p>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. +</p> + +<h2 id="behavior-network">Cambios en las funciones de red y Wi-Fi</h2> + +<p>Esta versión preliminar introduce en las API de redes y Wi-Fi los siguientes cambios en los comportamientos.</p> +<ul> +<li>Ahora sus aplicaciones pueden cambiar el estado de los objetos {@link android.net.wifi.WifiConfiguration} solo si usted creó estos objetos. + Usted no puede modificar ni eliminar objetos +{@link android.net.wifi.WifiConfiguration} creados por el usuario o por otras aplicaciones. +</li> +<li> +Anteriormente, si una aplicación forzaba al dispositivo a conectarse a una red Wi-Fi específica utilizando +{@link android.net.wifi.WifiManager#enableNetwork(int,boolean) enableNetwork()} con la configuración +{@code disableAllOthers=true}, el dispositivo se desconectaba de otras redes, como los datos móviles. + En esta versión preliminar, el dispositivo ya no se desconectará de otras redes como estas. Si {@code targetSdkVersion} de su aplicación es {@code “20”} o inferior, se anclará a la red Wi-Fi seleccionada. + + Si {@code targetSdkVersion} de su aplicación es {@code “21”} o posterior, use las API de redes múltiples (como +{@link android.net.Network#openConnection(java.net.URL) openConnection()}, +{@link android.net.Network#bindSocket(java.net.Socket) bindSocket()} y el nuevo método +{@code ConnectivityManager.bindProcessToNetwork()}) para garantizar que el tráfico de su red se envíe a la red seleccionada. + +</li> +</ul> + +<h2 id="behavior-camera">Cambios en el servicio de cámara</h2> +<p>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:</p> +<ul> +<li>El acceso a los recursos del subsistema de la cámara, lo que incluye abrir y configurar un dispositivo de cámara, se concede según la “prioridad” del proceso de la aplicación cliente. + Por lo general, los procesos de la aplicación con actividades en primer plano o visibles para el usuario, reciben una prioridad más alta, lo que hace que el uso y la adquisición de recursos de la cámara sean más dependientes. + +</li> +<li>Los clientes con cámara activa para aplicaciones de menor prioridad pueden ser “expulsados” cuando una aplicación de mayor prioridad intenta utilizar la cámara. + En la API {@link android.hardware.Camera} obsoleta, esto hace que se llame al método +{@link android.hardware.Camera.ErrorCallback#onError(int,android.hardware.Camera) onError()} para el cliente expulsado. + + En la API {@link android.hardware.camera2 Camera2}, esto hace que se llame al método +{@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected(android.hardware.camera2.CameraDevice) onDisconnected()} +para el cliente expulsado.</li> +<li>En los dispositivos con hardware de cámara correcto, distintos procesos de la aplicación pueden abrir y utilizar de forma independiente dispositivos de cámara separados al mismo tiempo. + Sin embargo, ahora el servicio de cámara detecta y no permite los casos de uso de procesos múltiples, donde el acceso simultáneo genera una degradación considerable del rendimiento o de las capacidades de cualquiera de los dispositivos de cámara abiertos. + + Este cambio puede generar “expulsiones” de clientes de menor prioridad, incluso cuando ninguna otra aplicación esté intentando acceder directamente al mismo dispositivo de cámara. + + +</li> +<li> +Cambiar el usuario actual provoca que se expulsen los clientes con cámara activa en las aplicaciones que pertenecen a la cuenta de usuario anterior. + El acceso a la cámara se limita a perfiles de usuario que pertenecen al usuario actual del dispositivo. En la práctica, esto significa que una cuenta de “invitado”, por ejemplo, no podrá abandonar los procesos en ejecución que utilicen el subsistema de la cámara cuando el usuario haya cambiado a otra cuenta. + + +</li> +</ul> + +<h2 id="behavior-art-runtime">Tiempo de ejecución de ART</h2> +<p>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 +<a href="{@docRoot}tools/support-library/features.html#v7-appcompat">biblioteca AppCompat versión 7</a> o la +<a href="{@docRoot}tools/support-library/features.html#v7-recyclerview">biblioteca RecyclerView versión 7</a>, 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. +</p> + +<p>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 (<a href="https://code.google.com/p/android/issues/detail?id=6670" class="external-link"> +error público 6670</a>), 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. +</p> + +<p>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}).</p> +</p> + +<h2 id="behavior-apk-validation">Validación de APK</h2> +<p>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. +</p> + +<h2 id="behavior-afw">Cambios en Android for Work</h2> +<p>Esta versión preliminar incluye los siguientes cambios en los comportamientos para Android for Work:</p> +<ul> +<li><strong>Contactos de trabajo en contextos personales:</strong> Ahora, el registro de llamadas de Google Dialer muestra los contactos de trabajo cuando el usuario ve las llamadas anteriores. Si se configura {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} en {@code true}, se ocultan los contactos de perfiles de trabajo en el registro de llamadas de Google Dialer. + + + Los contactos de trabajo se pueden mostrar junto con los contactos personales en los dispositivos a través de Bluetooth solo si usted configura {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} en {@code false}. + + De forma predeterminada, se configura en {@code true}. + +</li> +<li><strong>Eliminación de configuraciones de Wi-Fi:</strong> Las configuraciones de Wi-Fi agregadas por un propietario de perfil (por ejemplo, al llamar al método +{@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration) +addNetwork()}) ahora se borran si se elimina ese perfil de trabajo. +</li> +<li><strong>Bloqueo de configuraciones de Wi-Fi:</strong> El usuario ya no puede modificar ni eliminar las configuraciones de Wi-Fi creadas por un propietario activo del dispositivo. + El usuario aún puede crear y modificar sus propias configuraciones de Wi-Fi, siempre que no se haya definido la constante {@link android.os.UserManager} +{@link android.os.UserManager#DISALLOW_CONFIG_WIFI} para ese usuario. +</li> +<li><strong>Descarga de Work Policy Controller mediante la incorporación de una cuenta de Google:</strong> Cuando una cuenta de Google que requiere gestión a través de una aplicación de Work Policy Controller (WPC) se agrega a un dispositivo fuera de un contexto administrado, el flujo de incorporación de la cuenta ahora le pide al usuario que instale el WPC apropiado. Este comportamiento también se aplica a las cuentas agregadas mediante +<strong>Settings > Accounts</strong> en el asistente para instalación inicial del dispositivo. + + +</li> +<li><strong>Cambios en comportamientos específicos de la API DevicePolicyManager:</strong> +Llamar al método {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()} +afecta la cámara solo del usuario que lo llama; llamarlo desde el perfil administrado no afecta las aplicaciones de cámara que se ejecutan en el usuario principal. + Asimismo, el método +{@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()} +ahora se encuentra disponible para propietarios de perfiles, además de propietarios de dispositivos. Un propietario de perfil puede configurar las siguientes restricciones de protección de seguridad: + +<ul> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} y + {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}, que afectan las configuraciones de protección de seguridad para el usuario primario del perfil. +</li> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, que solo afecta las notificaciones generadas por aplicaciones en el perfil administrado. +</li> +</ul> +</li> +</ul> 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 + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>Quickview</h2> + <ul> + <li>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. +</li> + <li>Los usuarios pueden cancelar los permisos en cualquier momento desde la pantalla Settings de la aplicación. +</li> + <li>La aplicación necesita controlar los permisos cada vez que se ejecuta. +</li> + </ul> + + <h2>Contenido del documento</h2> + <ol> + <li><a href="#overview">Información general</a></li> + <li><a href="#coding">Codificación para permisos de tiempo de ejecución</a></li> + <li><a href="#testing">Prueba de permisos de tiempo de ejecución</a></li> + <li><a href="#best-practices">Mejores prácticas</a></li> + </ol> + +<!-- + <h2>Related Samples</h2> + <ol> + <li></li> + </ol> +--> + +<!-- + <h2>See also</h2> + <ol> + <li></li> + </ol> +--> + </div> <!-- qv --> +</div> <!-- qv-wrapper --> + + +<p> + 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. + + + + +</p> + +<p> + 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. + + +</p> + +<h2 id="overview"> + Información general +</h2> + +<p> + 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: +</p> + +<ul> + <li> + <strong>Declaración de los permisos:</strong> Al igual que en las plataformas anteriores de Android, la aplicación declara todos los permisos que necesita en el manifiesto. + + </li> + + <li> + <strong>Grupos de permisos:</strong> Según su función, los permisos se dividen en +<em>grupos de permisos</em>. Por ejemplo, el grupo de permisos +<code>CONTACTS</code> contiene permisos para leer y escribir los contactos y la información de perfil del usuario. + + </li> + + <li> + <p><strong>Permisos limitados concedidos durante la instalación:</strong> Cuando el usuario instala o actualiza la aplicación, el sistema le concede a la aplicación todos los permisos que la aplicación solicita que corresponden a {@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}. + + + Por ejemplo, los permisos para la alarma y los permisos de intento corresponden a {@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}, por lo que se conceden automáticamente durante la instalación. + + </p> + + <p>El sistema puede concederle a la aplicación permisos de firma y de sistema, como se especifica en la sección <a href="#system-apps">Permisos de firma y de sistema de la aplicación</a>. + + Al usuario <em>no</em> se le solicitará conceder ningún permiso durante la instalación. +</p> + </li> + + <li> + <strong>Solicitud de permisos al usuario durante el tiempo de ejecución:</strong> Cuando la aplicación solicita un permiso, el sistema le muestra al usuario un diálogo y luego llama a la función de devolución de llamada de la aplicación para notificarle si el permiso se otorgó. + + Si el usuario concede un permiso, la aplicación recibe todos los permisos del área funcional de dicho permiso, los cuales fueron declarados en el manifiesto de la aplicación. + + + </li> + +</ul> + +<p> + 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: + +</p> + +<ul> + + <li> + <strong>Siempre compruebe los permisos:</strong> Siempre que una aplicación necesite realizar una acción que requiere algún permiso, primero debe comprobar si ya tiene otorgado ese permiso. + + En caso de no tenerlo, solicitará que se le otorgue ese permiso. + + </li> + + <li> + <strong>Administre la falta de permisos correctamente:</strong> Si la aplicación no recibe un permiso adecuado, deberá administrar la falla sin errores. + + Por ejemplo, si se necesita el permiso solo para una característica añadida, la aplicación puede desactivar esa característica. + Si el permiso es fundamental para que la aplicación funcione, la aplicación podrá desactivar toda su funcionalidad e informar al usuario que se deben conceder dichos permisos. + + + </li> + + <div class="figure" style="width:220px" id="fig-perms-screen"> + <img src="{@docRoot}preview/features/images/app-permissions-screen_2x.png" srcset="{@docRoot}preview/features/images/app-permissions-screen.png 1x, {@docRoot}preview/features/images/app-permissions-screen_2x.png 2x" alt="" width="220"> + <p class="img-caption"> + <strong>Figura 1</strong> Pantalla de permisos en Settings de la aplicación. + </p> + </div> + + <li> + <strong>Los permisos son revocables:</strong> Los usuarios pueden revocar los permisos en cualquier momento. + Si un usuario desactiva los permisos de una aplicación, la aplicación <em>no</em> recibe ningún aviso. + Nuevamente, la aplicación deberá verificar que cuenta con los permisos necesarios antes de realizar cualquier acción restringida. + + </li> +</ul> + +<p class="note"> + <strong>Nota:</strong> Si una aplicación tiene como destino M Developer Preview, <em>debe</em> utilizar el nuevo modelo de permisos. + +</p> + +<p> + 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. + + +</p> + +<p class="note"> + <strong>Nota:</strong> 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. + + +</p> + +<h3 id="system-apps"> + Permisos de las aplicaciones de firma y de sistema +</h3> + +<p> + 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: + +</p> + +<ul> + <li>Si una aplicación es parte de la imagen del sistema, la aplicación recibe automáticamente todos los permisos enumerados en el manifiesto. + + </li> + + <li>Si la aplicación solicita permisos en el manifiesto que corresponden a {@link + android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE} y la aplicación está firmada con el mismo certificado que el de la aplicación que declaró dichos permisos, el sistema le concede a la aplicación que los solicita esos permisos durante la instalación. + + + + </li> +</ul> + +<p> + En ambos casos, el usuario aún puede revocar los permisos en cualquier momento si accede a la pantalla <strong>Settings</strong> del sistema y selecciona <strong>Apps ></strong> + + <i>app_name</i> <strong>> Permissions</strong>. La aplicación debe seguir controlando los permisos al momento de la ejecución y solicitarlos si fuese necesario. + + +</p> + +<h3 id="compatibility"> + Compatibilidad con modelos anteriores y posteriores +</h3> + +<p> + 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. + + +</p> + +<p class="note"> + <strong>Nota:</strong> 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. + +</p> + +<p> + 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. + + + +</p> + +<p class="note"> + <strong>Nota:</strong> 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. + + +</p> + +<h3 id="perms-vs-intents">Permisos frente a intentos</h3> + +<p> + 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. + +</p> + +<p> + 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 +<code>android.permission.CAMERA</code>, 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. + + +</p> + +<p> + 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. +</p> + +<p> + 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. + +</p> + +<p> + Si utiliza los permisos: +</p> + +<ul> + <li>La aplicación posee total control sobre la experiencia del usuario cuando usted realiza la operación. + Sin embargo, un control tan amplio complica su tarea, ya que usted deberá diseñar una UI apropiada. + + </li> + + <li>Se le solicita al usuario otorgar el permiso una vez, la primera vez que usted realiza la operación. + Luego, su aplicación puede realizar la operación sin requerir interacción adicional por parte del usuario. + Sin embargo, si el usuario no concede el permiso (o lo revoca luego), su aplicación queda inhabilitada para realizar la operación. + + + </li> +</ul> + +<p> + Si utiliza un intento: +</p> + +<ul> + <li>No debe diseñar la UI para la operación. La aplicación que controla el intento provee la UI. Sin embargo, esto significa que usted no tiene control sobre la experiencia del usuario. + + El usuario podrá interactuar con una aplicación que usted no conoce. + + </li> + + <li>Si el usuario no tiene una aplicación predeterminada para la operación, el sistema le solicita al usuario que elija una aplicación. Si el usuario no designa un controlador predeterminado, es probable que surja un diálogo adicional cada vez que realice la operación. + + + + </li> +</ul> + +<h2 id="coding">Codificación para permisos de tiempo de ejecución</h2> + +<p> + 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. + + + +</p> + +<h3 id="enabling"> + Habilitar el nuevo modelo de permisos +</h3> + +<p> + Para habilitar el nuevo modelo de permisos de M Developer Preview, configure el atributo +<code>targetSdkVersion</code> de la aplicación en <code>"MNC"</code> y +<code>compileSdkVersion</code> en <code>"android-MNC"</code>. Al hacerlo, se habilitan todas las características de los nuevos permisos. + +</p> + +<p> + Para el lanzamiento de la versión preliminar, debe establecer <code>minSdkVersion</code> en +<code>"MNC"</code> para compilar con el SDK preliminar. +</p> + +<h3 id="m-only-perm"> + Establecer un permiso solo para la versión preliminar de Android M +</h3> + +<p> + Puede utilizar el nuevo elemento <code><uses-permission-sdk-m></code> 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 <code><uses-permission-sdk-m></code>, 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. + + + + + + +</p> + +<p> + Si la aplicación se ejecuta en un dispositivo con M Developer Preview, +<code><uses-permission-sdk-m></code> se comporta al igual que +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. + 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. + +</p> + +<h3 id="prompting"> + Solicitar permisos +</h3> + +<p> + 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. + +</p> + +<p> + 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 <code><uses-permission-sdk-m></code>. + + +</p> + +<h4 id="check-platform">Controlar en qué plataforma se ejecuta la aplicación</h4> + +<p> + 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 <code>"MNC"</code>. +</p> + +<h4 id="check-for-permission">Controlar si la aplicación cuenta con los permisos necesarios</h4> + +<p>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 <code>Context.checkSelfPermission( + +<i>permission_name</i>)</code>. 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 <code>Context.checkSelfPermission(Manifest.permission.CAMERA)</code>. + +</p> + +<p class="table-caption" id="permission-groups"> + <strong>Tabla 1.</strong> Permisos y grupo de permisos.</p> +<table> + <tr> + <th scope="col">Grupo de permisos</th> + <th scope="col">Permisos</th> + </tr> + + <tr> + <td><code>android.permission-group.CALENDAR</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CALENDAR</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.WRITE_CALENDAR</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CAMERA</code></td> + <td> + <ul> + <li> + <code>android.permission.CAMERA</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CONTACTS</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CONTACTS</code> + </li> + <li> + <code>android.permission.WRITE_CONTACTS</code> + </li> + <li> + <code>android.permission.READ_PROFILE</code> + </li> + <li> + <code>android.permission.WRITE_PROFILE</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.LOCATION</code></td> + <td> + <ul> + <li> + <code>android.permission.ACCESS_FINE_LOCATION</code> + </li> + <li> + <code>android.permission.ACCESS_COARSE_LOCATION</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.MICROPHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.RECORD_AUDIO</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.PHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_PHONE_STATE</code> + </li> + <li> + <code>android.permission.CALL_PHONE</code> + </li> + <li> + <code>android.permission.READ_CALL_LOG</code> + </li> + <li> + <code>android.permission.WRITE_CALL_LOG</code> + </li> + <li> + <code>com.android.voicemail.permission.ADD_VOICEMAIL</code> + </li> + <li> + <code>android.permission.USE_SIP</code> + </li> + <li> + <code>android.permission.PROCESS_OUTGOING_CALLS</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SENSORS</code></td> + <td> + <ul> + <li> + <code>android.permission.BODY_SENSORS</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.USE_FINGERPRINT</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SMS</code></td> + <td> + <ul> + <li> + <code>android.permission.SEND_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_SMS</code> + </li> + <li> + <code>android.permission.READ_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_WAP_PUSH</code> + </li> + <li> + <code>android.permission.RECEIVE_MMS</code> + </li> + <li> + <code>android.permission.READ_CELL_BROADCASTS</code> + </li> + </ul> + </td> + </tr> + +</table> + +<h4 id="request-permissions">Solicitar permisos si se necesitan</h4> + +<p>Si la aplicación no posee los permisos que necesita, llama al método +<code>Activity.requestPermissions(String[], int)</code> 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 +<code>requestPermissions()</code>. + +</p> + + <p>El siguiente código verifica si la aplicación tiene permisos para leer los contactos del usuario y solicita los permisos de ser necesario: +</p> + +<pre> +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; +} +</pre> + +<h4 id="handle-response">Administrar la respuesta a la solicitud de permisos</h4> + +<p> + Cuando una aplicación solicita permisos, el sistema le muestra al usuario una ventana de diálogo. + Cuando el usuario responde, el sistema invoca +<code>Activity.onRequestPermissionsResult(int, String[], int[])</code> + 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 <code>requestPermissions()</code>. + + Por ejemplo, si una aplicación solicita acceso <code>READ_CONTACTS</code>, es posible que tenga el siguiente método de devolución de llamada: + + +</p> + +<pre> +@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 + } +} +</pre> + + <p>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. + + </li> +</p> + +<p> + 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 <code>requestPermissions()</code> para solicitar ese permiso, el sistema rechaza la solicitud inmediatamente. + + En este caso, el sistema llama a su <code>onRequestPermissionsResult()</code> 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. + +</p> + +<h2 id="testing">Prueba de permisos de tiempo de ejecución</h2> + + +<p> + 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. + + +</p> + +<p> + 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 <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (adb)</a> que le permitirán probar su aplicación con cualquier configuración de permisos que necesite probar. + + + +</p> + +<h3> + Nuevas opciones y comandos adb +</h3> + +<p> + 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. + +</p> + +<h4> + Instalar con permisos +</h4> + +<p> + Puede utilizar la nueva opción <code>-g</code> del comando <a href="{@docRoot}tools/help/adb.html#move"><code>adb + install</code></a>, que instala la aplicación y concede todos los permisos enumerados en el manifiesto de la aplicación: + +</p> + +<pre class="no-pretty-print"> +$ adb install -g <path_to_apk> +</pre> + +<h4> + Conceder y revocar permisos +</h4> + +<p> + Puede utilizar los comandos ADB nuevos <a href="{@docRoot}tools/help/adb.html#pm">package manager (pm)</a> para conceder y revocar permisos a una aplicación instalada. Esta funcionalidad puede resultar útil para pruebas automáticas. + + +</p> + +<p> + Para conceder un permiso, utilice el comando <code>grant</code> de package manager: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant <package_name> <permission_name> +</pre> + +<p> + Por ejemplo, para conceder el paquete de permisos com.example.myapp para grabar audio utilice este comando: + +</p> + +<pre class="no-pretty-print"> +$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO +</pre> + +<p> + Para revocar un permiso, utilice el comando <code>revoke</code> de package manager: +</p> + +<pre class="no-pretty-print"> +$ adb pm revoke <package_name> <permission_name> +</pre> + +<h2 id="best-practices">Mejores prácticas</h2> + +<p> + 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. + +</p> + + +<h3 id="bp-what-you-need">Solicite solo los permisos que necesite</h3> + +<p> + 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. +</p> + +<p> + Por ejemplo, a menudo, su aplicación puede obtener la funcionalidad necesaria a través de un <a href="{@docRoot}guide/components/intents-filters.html">intento</a> 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. + + +</p> + +<h3 id="bp-dont-overwhelm"> + No abrume al usuario +</h3> + +<p> + 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. + + +</p> + +<p> + 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, <em>no</em> 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. + +</p> + +<p> + Si su aplicación proporciona un tutorial, se recomienda que se pidan los permisos esenciales de la aplicación al final del tutorial. + +</p> + +<h3 id="bp-explain"> + Explique por qué se necesitan los permisos +</h3> + +<p> + El diálogo de permisos que muestra el sistema cuando llama a + <code>requestPermissions()</code> 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 <code>requestPermissions()</code>. + +</p> + +<p> + 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 <em>antes</em> de llamar a +<code>requestPermissions()</code>. + +</p> + +<p> + 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 <code>requestPermissions()</code> 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. + + +</p> 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 + +<p> + Bienvenido a <strong>Android M Developer Preview</strong>, 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. + +</p> + +<div style="background-color:#eceff1;padding:1em;"> +<div class="wrap"> + <div class="cols"> + <div class="col-4of12"> + <h5> + Imágenes del sistema emulador y de hardware + </h5> + + <p> + Ejecute y pruebe sus aplicaciones en Nexus 5, 6, 9 y Player (para TV), además del emulador. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Último código de la plataforma + </h5> + + <p> + Durante la versión preliminar, ofreceremos múltiples actualizaciones, por lo que usted realizará la prueba comparando los últimos cambios de la plataforma. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Actualizaciones vía OTA + </h5> + + <p> + Luego de actualizar su dispositivo a la versión preliminar inicial, usted podrá obtener actualizaciones por red inalámbrica (over-the-air, OTA). + + </p> + </div> + </div> + + <div class="cols"> + + + <div class="col-4of12"> + <h5> + Nuevos comportamientos y capacidades + </h5> + + <p> + 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. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Ventana de prioridad para los problemas informados por los desarrolladores + </h5> + + <p> + 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. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Comentarios y soporte + </h5> + + <p> + Infórmenos los problemas y envíenos comentarios a través de nuestro <a href="https://code.google.com/p/android-developer-preview/">seguimiento de problemas</a>. + Póngase en contacto con otros desarrolladores de la comunidad <a href="http://g.co/dev/AndroidMDevPreview">M Developer Community</a>. + + </p> + </div> + </div> +</div> +</div> + +<!-- +<p> + With the M Developer Preview, you'll get an early start on testing your apps, + with enough time to make adjustments before the public platform release later + in the year. We'll provide several updates to the Preview tools in the weeks + ahead, so you can keep in sync with the latest changes as the platform moves + toward launch. +</p> +<img src="{@docRoot}preview/images/m-preview-timeline.png" alt= +"Preview program timeline" id="timeline"> +<p> + You can help us improve the platform by <a href= + "https://code.google.com/p/android-developer-preview/">reporting issues</a> + through our feedback channels. This is especially + critical in the first month of the preview, when we’ll be giving priority to + developer-reported issues and feedback. +</p> --> + + +<h2 id="timeline"> + Escala de tiempo y actualizaciones +</h2> +<img src="{@docRoot}preview/images/m-preview-timeline-crop.png" alt="Preview program timeline" id="timeline"> +<p> + 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. + + +</p> + +<p> + En momentos clave del desarrollo, lanzaremos actualizaciones para sus dispositivos de prueba. + Los momentos clave tentativos son los siguientes: +</p> + +<ul> + <li> + <strong>Preview 1</strong> (lanzamiento inicial de la versión preliminar, fines de mayo) + </li> + + <li> + <strong>Preview 2</strong> (fines de junio, comienzos de julio) + </li> + + <li> + <strong>Preview 3</strong> (casi la versión final, a fines de julio) + </li> +</ul> + +<p> + Estas actualizaciones terminan con el <strong>SDK final</strong> (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. + + +</p> + +<p> + A medida que usted prueba y desarrolla en Android M, le recomendamos que <strong>mantenga su entorno de desarrollo actualizado</strong> a medida que se lanzan las actualizaciones de la versión preliminar. + + Para que el proceso sea más fácil, lanzaremos <strong>actualizaciones OTA</strong> 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. + + +</p> +<p class="note"> + <strong>Nota:</strong> El SDK final y las imágenes del sistema no se pueden proporcionar vía OTA y deberán <strong>actualizarse manualmente</strong> en sus dispositivos de prueba.</strong> + + +</p> + +<p> + Le informaremos cuando las actualizaciones de la versión preliminar se encuentren disponibles a través del blog de Android para desarrolladores (<a href="http://android-developers.blogspot.com/">Android Developers Blog</a>), de este sitio y de la comunidad de desarrolladores <a href="http://g.co/dev/AndroidMDevPreview">Android M Developer Community</a>. + + +</p> + +<h2 id="preview_tools"> + ¿Qué ofrece la versión preliminar? +</h2> + +<p> + 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. + + +</p> + +<h4> + Herramientas del SDK +</h4> + +<p> + Estos componentes se pueden descargar mediante SDK Manager en <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a>: +</p> + +<ul> + <li><strong>Herramientas del SDK</strong> de M Developer Preview + </li> + + <li><strong>Imagen del sistema emulador</strong> (32-bit y 64-bit) de M Developer Preview + + </li> + + <li><strong>Imagen del sistema emulador para Android TV</strong> (32-bit) de M Developer Preview + + </li> +</ul> + +<h4> + Imágenes del sistema de hardware +</h4> + +<p> + Puede descargar estas imágenes del sistema de hardware para dispositivos Nexus desde la <a href="download.html">página de Descargas</a>: + +</p> + +<ul> + <li> + <strong>Nexus 5</strong> (GSM/LTE) imagen del sistema del dispositivo “hammerhead” + </li> + + <li> + <strong>Nexus 6</strong> imagen del sistema del dispositivo “shamu” + </li> + + <li> + <strong>Nexus 9</strong> (Wi-Fi) imagen del sistema del dispositivo “volantis” + </li> + + <li> + <strong>Nexus Player</strong> (Android TV) imagen del sistema del dispositivo “fugu” + </li> +</ul> + +<h4> + Documentación y código de muestra +</h4> + +<p> + Estos recursos de documentación lo ayudan a obtener información sobre la versión preliminar: +</p> + +<ul> + <li> + <a href="setup-sdk.html">Configurar el SDK</a>: contiene instrucciones paso a paso para comenzar. + + </li> + + <li> + <a href="{@docRoot}preview/testing/guide.html">Guía de prueba</a> y <a href="behavior-changes.html">Cambios en los comportamientos</a>: le indican las áreas más importantes que debe probar. + </li> + + <li>Documentación sobre las nuevas API, lo que incluye <a href="api-overview.html">Información general de la API</a>, <a href="{@docRoot}preview/download.html#docs">Referencia de la API</a> que se puede descargar y guías detalladas para desarrolladores sobre características clave como <a href="{@docRoot}preview/features/runtime-permissions.html">permisos</a>, <a href="{@docRoot}preview/backup/index.html">copias de seguridad de la aplicación</a>, entre otras. + + + + + </li> + + <li> + <a href="{@docRoot}preview/samples.html">Código de ejemplo</a>: indica cómo admitir permisos y otras características nuevas. + + </li> + + <li> + <a href="{@docRoot}preview/support.html#release-notes">Notas de la versión</a> para la versión actual de M Developer Preview, lo que incluye notas sobre los cambios e informes de diferencias. + + </li> +</ul> + +<h4> + Recursos de soporte +</h4> + +<p> + Utilice los siguientes recursos de soporte durante el proceso de prueba y desarrollo en M Developer Preview: + +</p> + +<ul> + <li><a href="https://code.google.com/p/android-developer-preview/">El seguimiento de problemas de M Developer Preview</a> es su<strong> canal principal de comentarios.</strong> + + A través de este seguimiento de problemas, usted puede informarnos errores o problemas de rendimiento, y enviarnos comentarios generales. + También puede buscar <a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">problemas recurrentes</a> y encontrar soluciones alternativas detalladas. + + </li> + + <li><a href="http://g.co/dev/AndroidMDevPreview">Android M Developer Community</a> es una comunidad en Google+ donde usted puede <strong>contactarse con otros desarrolladores</strong> que estén trabajando con Android M. Puede compartir comentarios o ideas, o encontrar respuestas a sus dudas sobre Android M. + + + + </li> +</ul> + + +<h2 id="preview_apis_and_publishing"> + Selección del destino, API preliminares y publicación +</h2> + +<p> + Android M Developer Preview es una versión solo para desarrollo y <strong>no tiene un nivel de API estándar</strong>. + 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 <code><a href= + "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> de su aplicación como <code>“MNC”</code>. + + + +</p> + +<p> + Android M Developer Preview ofrece <strong>API preliminares</strong> + — 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 <strong>cambios menores en la API</strong> 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. + +</p> + +<p class="note"> + 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. + + +</p> + +<p> + En cuanto a la publicación, Google Play <strong>no permite que se publiquen aplicaciones que tienen como destino M Developer Preview</strong>. + 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. + + +</p> + +<h2 id="get_started"> + ¿Cómo comenzar? +</h2> + +<p> + Para comenzar a probar su aplicación: +</p> + +<ol> + <li>Revise el artículo <a href="{@docRoot}preview/api-overview.html">Información general de la API</a> y <a href="{@docRoot}preview/behavior-changes.html">Cambios en los comportamientos</a> para obtener una idea sobre las novedades y cómo estas pueden afectar sus aplicaciones. + + En especial, infórmese sobre el nuevo modelo de <a href="{@docRoot}preview/features/runtime-permissions.html">permisos de tiempo de ejecución</a>, las opciones de ahorro de energía y las copias de seguridad automáticas. + + + </li> + + <li>Configure su entorno siguiendo las instrucciones para <a href="{@docRoot}preview/setup-sdk.html">Configurar el SDK de la versión preliminar</a> y configurar los dispositivos de prueba. + + + </li> + + <li>Siga las <a href="https://developers.google.com/android/nexus/images">instrucciones de actualización</a> 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.</a> + + </li> + + <li>Descargue la <a href="{@docRoot}preview/download.html#docs">Referencia de la API de M Preview</a> y los <a href="{@docRoot}preview/samples.html">Ejemplos de M Preview</a> para obtener más información sobre las nuevas características de la API y sobre cómo utilizarlas en su aplicación. + + + + </li> + + <li>Únase a la comunidad <a href="http://g.co/dev/AndroidMDevPreview">Android M Developer Community</a> para recibir las últimas noticias y para contactarse con otros desarrolladores que estén trabajando con la nueva plataforma. + + + </li> +</ol> + +<p> + ¡Agradecemos su participación en el programa Android M Developer Preview! +</p> |