Merge "docs: remove trailing white space from jd files" into nyc-dev
This commit is contained in:
@@ -428,7 +428,7 @@ sdk.platform.apiLevel=21
|
||||
<p>Cuando el sistema detecta una red adecuada, se conecta a la red e invoca la devolución de llamada {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()}. Puedes usar el objeto {@link android.net.Network} de la devolución de llamada para obtener información adicional acerca de la red o para indicar que el tráfico use la red seleccionada.</p>
|
||||
|
||||
<h3 id="BluetoothBroadcasting">Bluetooth de baja energía</h3>
|
||||
<p>Android 4.3 introdujo compatibilidad de plataforma para <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth de baja energía</a> (<em>Bluetooth LE</em>) en el rol central. En Android 5.0, un dispositivo Android ahora puede actuar como un <em>dispositivo periférico</em> Bluetooth LE. Las aplicaciones pueden utilizar esta capacidad para que otros dispositivos cercanos detecten su presencia. Por ejemplo, puedes crear aplicaciones que permiten que un dispositivo funcione como un podómetro o un monitor de estado, y comunique sus datos a otro dispositivo Bluetooth LE.</p>
|
||||
<p>Android 4.3 introdujo compatibilidad de plataforma para <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth de baja energía</a> (<em>Bluetooth LE</em>) en el rol central. En Android 5.0, un dispositivo Android ahora puede actuar como un <em>dispositivo periférico</em> Bluetooth LE. Las aplicaciones pueden utilizar esta capacidad para que otros dispositivos cercanos detecten su presencia. Por ejemplo, puedes crear aplicaciones que permiten que un dispositivo funcione como un podómetro o un monitor de estado, y comunique sus datos a otro dispositivo Bluetooth LE.</p>
|
||||
<p>Las nuevas API {@link android.bluetooth.le} permiten a sus aplicaciones transmitir anuncios, buscar respuestas y establecer conexiones con dispositivos Bluetooth LE cercanos. Para utilizar las nuevas funciones de anuncio y búsqueda, agrega el permiso {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} en el manifiesto. Cuando los usuarios actualizan o descargan tu aplicación desde Play Store, se les pide que concedan el siguiente permiso a tu aplicación: "Información de conexión Bluetooth: Permite que la aplicación controle Bluetooth, incluida la transmisión de información a dispositivos Bluetooth cercanos o la obtención de información sobre ellos".</p>
|
||||
|
||||
<p>Para comenzar el anuncio de Bluetooth LE a fin de que otros dispositivos puedan detectar tu aplicación, llama a {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} y envía una implementación de la clase {@link android.bluetooth.le.AdvertiseCallback}. El objeto de devolución de llamada recibe un informe del éxito o fracaso de la operación de anuncio.</p>
|
||||
|
||||
@@ -137,7 +137,7 @@ evento. En la pantalla de detalles del evento, es posible navegar con los botone
|
||||
|
||||
<h4>Notificaciones emergentes</h4>
|
||||
|
||||
<p><em>Las notificaciones emergentes</em> omiten el panel lateral de notificaciones y aparecen directamente
|
||||
<p><em>Las notificaciones emergentes</em> omiten el panel lateral de notificaciones y aparecen directamente
|
||||
frente al usuario. Estas casi nunca se utilizan, y se <strong>deben reservar para ocasiones en las que es necesario proporcionar una
|
||||
respuesta oportuna y es necesario realizar una interrupción en el contexto del usuario</strong>. Por ejemplo,
|
||||
en Talk se utiliza este estilo para alertar al usuario sobre una invitación de un amigo para participar en una videocharla, ya que esta
|
||||
|
||||
@@ -56,7 +56,7 @@ Android, esta se omitirá
|
||||
</ul>
|
||||
|
||||
<p class="note"><strong>Nota:</strong> El diseño de las notificaciones de esta versión de
|
||||
Android se diferencia
|
||||
Android se diferencia
|
||||
de manera significativa del diseño de las versiones anteriores. Para obtener información sobre el diseño de las notificaciones en versiones
|
||||
anteriores, consulte <a href="./notifications_k.html">Notificaciones en Android 4.4 y versiones anteriores</a>.</p>
|
||||
|
||||
@@ -189,7 +189,7 @@ que aparece en la parte superior de una
|
||||
a los usuarios
|
||||
durante un período breve, con un diseño expandido que expone las posibles acciones.</p>
|
||||
<p> Luego de este período, la notificación se retira hacia el
|
||||
panel de notificaciones. Si la <a href="#correctly_set_and_manage_notification_priority">prioridad</a> de una notificación
|
||||
panel de notificaciones. Si la <a href="#correctly_set_and_manage_notification_priority">prioridad</a> de una notificación
|
||||
se marca como Alta, Máxima o Pantalla completa, se obtiene una notificación emergente.</p>
|
||||
|
||||
<p><b>Buenos ejemplos de notificaciones emergentes</b></p>
|
||||
@@ -291,8 +291,8 @@ Las notificaciones de alta prioridad activan la pantalla de notificaciones emerg
|
||||
<p>Utilícelo para las notificaciones que desea que el usuario reciba, pero
|
||||
que son menos urgentes. Las notificaciones de baja prioridad tienden a aparecer en la parte inferior de la lista,
|
||||
por lo que son ideales para
|
||||
eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen
|
||||
estas
|
||||
eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen
|
||||
estas
|
||||
actualizaciones, pero estas notificaciones nunca tendrán prioridad sobre las comunicaciones
|
||||
urgentes o directas.</p>
|
||||
</td>
|
||||
@@ -545,7 +545,7 @@ iconos de notificaciones para
|
||||
|
||||
<p><strong>Lo que debe hacer</strong></p>
|
||||
<p>Utilizar el <a href="/design/style/iconography.html#notification">estilo de icono de notificación</a>
|
||||
adecuado para los iconos pequeños y el
|
||||
adecuado para los iconos pequeños y el
|
||||
<a href="/design/style/iconography.html#action-bar">estilo
|
||||
de icono de barra de acción</a> del diseño Material Light para los iconos
|
||||
de acciones.</p>
|
||||
@@ -571,7 +571,7 @@ deben ser una imagen sobre un fondo blanco o transparente.</p>
|
||||
<h3 id="pulse_the_notification_led_appropriately">Pulsación adecuada del
|
||||
LED de notificaciones</h3>
|
||||
|
||||
<p>Muchos dispositivos con Android incluyen un LED de notificaciones, que se utiliza para mantener al
|
||||
<p>Muchos dispositivos con Android incluyen un LED de notificaciones, que se utiliza para mantener al
|
||||
usuario informado sobre los
|
||||
eventos cuando la pantalla está apagada. Las notificaciones con un nivel de prioridad <code>MAX</code>,
|
||||
<code>HIGH</code> o <code>DEFAULT</code> deben
|
||||
@@ -701,7 +701,7 @@ comentarios sobre tareas más extensas, como descargar un archivo o codificar un
|
||||
eliminar las notificaciones constantes del panel lateral de notificaciones.</p>
|
||||
|
||||
<h3 id="ongoing_notifications">Reproducción de medios</h3>
|
||||
<p>En Android 5.0, la pantalla de bloqueo no muestra los controles de transporte para la clase
|
||||
<p>En Android 5.0, la pantalla de bloqueo no muestra los controles de transporte para la clase
|
||||
{@link android.media.RemoteControlClient} obsoleta. Sin embargo, <em>sí</em> muestra las notificaciones, de modo que las notificaciones de reproducción de cada
|
||||
aplicación ahora son la forma principal
|
||||
en la que los usuarios controlan la reproducción desde el estado bloqueado. A través de este comportamiento, se le otorga más control
|
||||
@@ -771,7 +771,7 @@ para cualquier persona que agarre el dispositivo y encienda la pantalla.</p>
|
||||
<ul>
|
||||
<li> En el caso de los dispositivos que posean una pantalla de bloqueo segura (PIN, patrón o contraseña), la interface está formada por
|
||||
partes públicas y privadas. La interfaz pública se puede mostrar en una pantalla de bloqueo segura y,
|
||||
por ende, cualquier persona puede verla. La interfaz privada es el mundo detrás de esa pantalla de bloqueo y
|
||||
por ende, cualquier persona puede verla. La interfaz privada es el mundo detrás de esa pantalla de bloqueo y
|
||||
solo se revela cuando el usuario se registra en el dispositivo.</li>
|
||||
</ul>
|
||||
|
||||
@@ -799,7 +799,7 @@ Se muestra todo el contenido de la notificación.
|
||||
Esta es la opción predeterminada del sistema si no se especificó el grado de visibilidad.</li>
|
||||
<li><code><a
|
||||
href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
|
||||
En la pantalla de bloqueo se muestra la información básica sobre la existencia de esta notificación, incluido
|
||||
En la pantalla de bloqueo se muestra la información básica sobre la existencia de esta notificación, incluido
|
||||
el icono y el nombre de la aplicación a través de la cual se publicó. No se muestra el resto de los detalles de la notificación.
|
||||
A continuación, especificamos algunos puntos que se deben tener en cuenta:
|
||||
<ul>
|
||||
|
||||
@@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>Acerca de Google Play</h2>
|
||||
<ol style="list-style-type:none;">
|
||||
|
||||
@@ -158,7 +158,7 @@ page.metaDescription=Distribuye tus aplicaciones y contenido para Android Auto.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ten en cuenta que la revisión afecta la disponibilidad de tu aplicación para otros dispositivos en la
|
||||
Ten en cuenta que la revisión afecta la disponibilidad de tu aplicación para otros dispositivos en la
|
||||
Play Store de Google; por ejemplo, para teléfonos y tablets.
|
||||
Si tienes una aplicación actual que incluya actualizaciones para el componente de teléfono/tablet,
|
||||
el componente de Android Auto debe pasar la revisión antes de que la aplicación actualizada
|
||||
|
||||
@@ -4,8 +4,8 @@ page.image=/distribute/images/developer-console.jpg
|
||||
Xnonavpage=true
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>Características de la publicación</h2>
|
||||
<ol>
|
||||
@@ -303,7 +303,7 @@ Xnonavpage=true
|
||||
<p>
|
||||
En la mayoría de los casos, todo lo que necesitas es un solo paquete de aplicaciones (APK), y generalmente es la manera
|
||||
más sencilla de administrar y mantener la aplicación. Sin embargo, si necesitas
|
||||
proporcionar un APK distinto para diferentes dispositivos, Google Play te
|
||||
proporcionar un APK distinto para diferentes dispositivos, Google Play te
|
||||
permite hacerlo.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias
|
||||
font-weight:bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<ol id="qv">
|
||||
<h2>En este documento:</h2>
|
||||
@@ -141,7 +141,7 @@ page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias
|
||||
confirmar que es apta para familias. Suponiendo que tu aplicación cumple con todos los requisitos
|
||||
del programa, prevemos que el tiempo de publicación no debería prolongarse
|
||||
más allá de lo habitual; no obstante, puede haber una demora en la publicación de la aplicación si se
|
||||
rechaza durante la revisión para la inclusión en Diseñado para familias.
|
||||
rechaza durante la revisión para la inclusión en Diseñado para familias.
|
||||
</dd>
|
||||
|
||||
<dt>
|
||||
|
||||
@@ -78,7 +78,7 @@ page.metaDescription=Únete a Diseñado para familias en pocos pasos sencillos.
|
||||
|
||||
<p class="note">
|
||||
<strong>Nota</strong>: Las aplicaciones publicadas en el programa Diseñado para familias
|
||||
también están disponibles para todos los usuarios en Google Play.
|
||||
también están disponibles para todos los usuarios en Google Play.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -477,7 +477,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
||||
No. Cuando Google inicie el proceso de aprobación, tu aplicación para Auto se someterá a una revisión de
|
||||
seguridad del conductor y no estará
|
||||
disponible para distribución hasta que se apruebe. Dado que es el mismo APK que el
|
||||
que utilizas para teléfonos y tablets, tus actualizaciones en la Play Store para esos dispositivos no estará disponible hasta que
|
||||
que utilizas para teléfonos y tablets, tus actualizaciones en la Play Store para esos dispositivos no estará disponible hasta que
|
||||
finalice el proceso de aprobación para Auto.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<li><a href="#listing">Google Play</a></li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Prueba</h2>
|
||||
<ol>
|
||||
<li><a href="#test-environment">Configuración de un entorno de prueba</a></li>
|
||||
@@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Calidad de las aplicaciones para tablets</a></li>
|
||||
<li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimiza tu aplicación</a></li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<th style="width:54px;">
|
||||
ID
|
||||
</th>
|
||||
|
||||
|
||||
|
||||
<th>
|
||||
Descripción
|
||||
|
||||
@@ -56,7 +56,7 @@ Xnonavpage=true
|
||||
|
||||
<p>El primer paso en la provisión de una excelente experiencia con la aplicación en tablets es asegurarte
|
||||
de que la aplicación cumpla con los <em>criterios de calidad de la aplicación principal</em> en todos los dispositivos
|
||||
y formatos a los que apunte. Para obtener información completa, consulta las <a href="{@docRoot}distribute/essentials/quality/core.html">Pautas de calidad de la aplicación principal</a>.
|
||||
y formatos a los que apunte. Para obtener información completa, consulta las <a href="{@docRoot}distribute/essentials/quality/core.html">Pautas de calidad de la aplicación principal</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -119,7 +119,7 @@ style="font-weight:500;">Despídete de tu IU "estirada"</span>: En las tablets,
|
||||
<li>Proporciona diseños personalizados, según sea necesario, para las pantallas <code>large</code> y
|
||||
<code>xlarge</code>. También puedes proporcionar diseños que se cargarán
|
||||
en función de la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">dimensión
|
||||
más corta</a> de la pantalla o la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">altura y el ancho
|
||||
más corta</a> de la pantalla o la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">altura y el ancho
|
||||
mínimos disponibles</a>.
|
||||
</li>
|
||||
|
||||
@@ -208,7 +208,7 @@ android.app.Fragment}. Esto te permite
|
||||
maximizar la reutilización de códigos entre diferentes factores y pantallas que
|
||||
compartan contenido.</li>
|
||||
<li>Decide en qué tamaños de pantalla usarás una IU multipanel y luego proporciona los
|
||||
diferentes diseños en los depósitos para el tamaño de pantalla correspondiente (como
|
||||
diferentes diseños en los depósitos para el tamaño de pantalla correspondiente (como
|
||||
<code>large</code>/<code>xlarge</code>) o anchos mínimos de pantalla (como
|
||||
<code>sw600dp</code>/<code>sw720</code>).</li>
|
||||
</ul>
|
||||
@@ -492,7 +492,7 @@ o simplemente centrando el icono dentro del botón transparente.</li>
|
||||
|
||||
<pre><uses-feature android:name="android.hardware.telephony" android:required="false" /></pre></li>
|
||||
|
||||
<li>En forma similar, revisa el manifiesto para detectar elementos <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> que
|
||||
<li>En forma similar, revisa el manifiesto para detectar elementos <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> que
|
||||
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">impliquen requisitos
|
||||
de características de hardware</a> que no sean adecuadas para tablets. Si encuentras esos
|
||||
permisos, asegúrate de declarar explícitamente un elemento
|
||||
@@ -735,7 +735,7 @@ o simplemente centrando el icono dentro del botón transparente.</li>
|
||||
distribución. </p>
|
||||
|
||||
<p>Si la página de Sugerencias para la optimización indica problemas "Pendientes" que crees que no
|
||||
corresponden a tu aplicación o afectan la calidad de la aplicación en las tablets,
|
||||
corresponden a tu aplicación o afectan la calidad de la aplicación en las tablets,
|
||||
usa el <a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">Formulario de contacto de Diseñado para tablets»</a> para comunicárnoslo. Revisaremos
|
||||
tu aplicación y actualizaremos tu página de Sugerencias para la optimización
|
||||
según corresponda.</p>
|
||||
|
||||
@@ -132,7 +132,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi
|
||||
<ul>
|
||||
<li>Cumple las pautas de Calidad de la aplicación principal
|
||||
<ul>
|
||||
<li>Sigue las <a href="{@docRoot}design/index.html">pautas de
|
||||
<li>Sigue las <a href="{@docRoot}design/index.html">pautas de
|
||||
Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material
|
||||
Design</a> en tu aplicación.
|
||||
</li>
|
||||
@@ -261,7 +261,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi
|
||||
los criterios, recibirás una <strong>notificación por correo electrónico enviada a tu cuenta
|
||||
de desarrollador</strong> con un resumen de las áreas que debes abordar. Una vez que realices
|
||||
los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para
|
||||
desarrolladores.
|
||||
desarrolladores.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -282,7 +282,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi
|
||||
|
||||
<li>
|
||||
<em>Aprobada</em>: se revisó tu aplicación y se aprobó. La aplicación
|
||||
estará disponible de forma directa para los usuarios de Android TV.
|
||||
estará disponible de forma directa para los usuarios de Android TV.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
||||
@@ -127,7 +127,7 @@ Una vez que hayas leído las pautas, el paso siguientes es desarrollar tu aplica
|
||||
<ul>
|
||||
<li>Cumple las pautas de Calidad de la aplicación principal.
|
||||
<ul>
|
||||
<li>Sigue las <a href="{@docRoot}design/index.html">pautas de
|
||||
<li>Sigue las <a href="{@docRoot}design/index.html">pautas de
|
||||
Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material
|
||||
Design</a> en tu aplicación.
|
||||
</li>
|
||||
@@ -152,7 +152,7 @@ desarrollo de aplicaciones para Wear</a>.</li>
|
||||
<p>
|
||||
Una vez que hayas creado tu APK listo para el lanzamiento y lo hayas probado para asegurarte de que cumple todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>, cárgalo
|
||||
a la Consola para desarrolladores. Actualiza el directorio de tu tienda con capturas de pantalla de tu aplicación para Wear y configura opciones
|
||||
de distribución, según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play, consulta la
|
||||
de distribución, según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play, consulta la
|
||||
<a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación para el lanzamiento.</a>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -870,7 +870,7 @@ data-maxresults="6">
|
||||
<li>
|
||||
<p>
|
||||
"Dispositivos compatibles" indica que tus aplicaciones están llegando a los dispositivos
|
||||
a los que pretendías llegar. De lo contrario, deberás verificar con tu equipo de desarrollo
|
||||
a los que pretendías llegar. De lo contrario, deberás verificar con tu equipo de desarrollo
|
||||
los requisitos y las reglas de filtrado de las aplicaciones.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
@@ -903,7 +903,7 @@ data-maxresults="6">
|
||||
Responde las reseñas, si fuera posible. Te recomendamos que interactúes
|
||||
con los usuarios internacionales en sus idiomas o en un idioma común, si fuera posible.
|
||||
Si no lo es, puedes intentar utilizar herramientas de traducción, aunque es posible que no puedas
|
||||
prever los resultados. Si tu aplicación se vuelve muy popular en un idioma, considera
|
||||
prever los resultados. Si tu aplicación se vuelve muy popular en un idioma, considera
|
||||
la posibilidad de obtener ayuda por parte de hablantes nativos para brindar soporte.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
@@ -81,7 +81,7 @@ Por ejemplo, si una aplicación requiere una cámara, Google Play no mostrará l
|
||||
solicite específicamente la aplicación al hacer clic en un vínculo profundo que apunte directamente a la
|
||||
ID de la aplicación en Google Play.</p>
|
||||
|
||||
<p>Puedes usar cualquier combinación de los filtros disponibles para tu aplicación. Por ejemplo, puedes establecer un requisito
|
||||
<p>Puedes usar cualquier combinación de los filtros disponibles para tu aplicación. Por ejemplo, puedes establecer un requisito
|
||||
<code>minSdkVersion</code> de <code>"4"</code> y configurar <code>smallScreens="false"</code>
|
||||
en la aplicación; luego, al cargar la aplicación a Google Play, podrías apuntar a países (operadores) europeos
|
||||
únicamente. De este modo, los filtros de Google Play evitarán que la aplicación esté disponible en un dispositivo
|
||||
@@ -102,7 +102,7 @@ Play</a>, pueden ver todas las aplicaciones publicadas. No obstante, el sitio we
|
||||
|
||||
<h2 id="manifest-filters">Filtrado en función del manifiesto de la aplicación</h2>
|
||||
|
||||
<p>La mayoría de los filtros son activados por elementos del archivo de manifiesto de una
|
||||
<p>La mayoría de los filtros son activados por elementos del archivo de manifiesto de una
|
||||
aplicación, <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
|
||||
(aunque no todo lo que se encuentra en el archivo de manifiesto puede desencadenar el filtrado).
|
||||
La tabla 1 contiene los elementos del manifiesto que debes usar para desencadenar el
|
||||
|
||||
@@ -62,7 +62,7 @@ las nuevas funciones para desarrolladores. </p>
|
||||
<h2 id="multi-window_support">Compatibilidad con ventanas múltiples</h2>
|
||||
|
||||
|
||||
<p>En Android N, presentamos una nueva y muy solicitada función multitarea
|
||||
<p>En Android N, presentamos una nueva y muy solicitada función multitarea
|
||||
en la plataforma: la compatibilidad con ventanas múltiples. </p>
|
||||
|
||||
<p>Los usuarios ahora pueden abrir dos aplicaciones al mismo tiempo en la pantalla. </p>
|
||||
@@ -815,7 +815,7 @@ externo. Cuando se usan las nuevas API, el sistema emplea una IU de
|
||||
permisos simple en la que se detallan claramente los directorios a los cuales
|
||||
la aplicación solicita acceso.</p>
|
||||
|
||||
<p>Para obtener más información, consulta la documentación
|
||||
<p>Para obtener más información, consulta la documentación
|
||||
<a href="{@docRoot}preview/features/scoped-folder-access.html">Acceso
|
||||
a directorios determinados</a> para desarrolladores.</p>
|
||||
|
||||
@@ -846,7 +846,7 @@ de aplicaciones que crean aplicaciones de alto rendimiento y ejecución prolonga
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Android N incluye compatibilidad opcional para un
|
||||
Android N incluye compatibilidad opcional para un
|
||||
<em>modo de rendimiento sostenido</em>, que permite que los fabricantes de equipo original (OEM) arrojen datos sobre las capacidades de rendimiento del dispositivo
|
||||
para las aplicaciones de ejecución prolongada. Los desarrolladores
|
||||
de aplicaciones pueden usar estos datos para perfeccionar sus aplicaciones y alcanzar un nivel
|
||||
@@ -854,7 +854,7 @@ uniforme y predecible de rendimiento en el dispositivo durante períodos prolong
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con
|
||||
Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con
|
||||
Nexus 6P. Para usar esta función,
|
||||
establece el indicador de rendimiento sostenido de la ventana
|
||||
que deseas ejecutar en el modo de rendimiento sostenido. Establece este indicador con el método
|
||||
@@ -888,7 +888,7 @@ consulta <a href="https://developers.google.com/vr/android/">Google VR SDK para
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Puedes establecer un ícono desde el id. de un recurso llamando a
|
||||
<li>Puedes establecer un ícono desde el id. de un recurso llamando a
|
||||
<code>PrinterInfo.Builder.setResourceIconId()</code>.
|
||||
</li>
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ determinadas intents implícitas.
|
||||
determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se
|
||||
desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo
|
||||
permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el
|
||||
resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock},
|
||||
resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock},
|
||||
alarmas de {@link android.app.AlarmManager}, GPS y análisis de Wi-Fi. Independientemente de que
|
||||
se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el
|
||||
dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen
|
||||
@@ -199,7 +199,7 @@ determinadas intents implícitas.
|
||||
Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados,
|
||||
y un intento de hacerlo utilizando
|
||||
{@link android.content.Context#MODE_WORLD_READABLE} o
|
||||
{@link android.content.Context#MODE_WORLD_WRITEABLE} activará una
|
||||
{@link android.content.Context#MODE_WORLD_WRITEABLE} activará una
|
||||
{@link java.lang.SecurityException}.
|
||||
<p class="note">
|
||||
<strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente.
|
||||
@@ -211,7 +211,7 @@ determinadas intents implícitas.
|
||||
<li>
|
||||
Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al
|
||||
receptor una ruta de acceso inaccesible. Por lo tanto, los intentos de pasar un
|
||||
URI <code>file://</code> activan una
|
||||
URI <code>file://</code> activan una
|
||||
<code>FileUriExposedException</code>. La manera recomendada para compartir el
|
||||
contenido de un archivo privado consiste en utilizar el {@link
|
||||
android.support.v4.content.FileProvider}.
|
||||
@@ -221,8 +221,8 @@ determinadas intents implícitas.
|
||||
almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una
|
||||
ruta de acceso inaccesible cuando acceden a {@link
|
||||
android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a
|
||||
Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
|
||||
intentan acceder a
|
||||
Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
|
||||
intentan acceder a
|
||||
{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
|
||||
Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública
|
||||
usando
|
||||
@@ -573,7 +573,7 @@ Muchas API de la plataforma han comenzado a controlar en busca del envío de car
|
||||
a través de transacciones {@link android.os.Binder}. Además, el
|
||||
sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions}
|
||||
como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un
|
||||
ejemplo común es almacenar demasiados datos en
|
||||
ejemplo común es almacenar demasiados datos en
|
||||
{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
|
||||
lo que hace que {@code ActivityThread.StopInfo} emita una
|
||||
{@code RuntimeException} cuando la aplicación se orienta a Android N.
|
||||
@@ -585,7 +585,7 @@ la {@link android.view.View}
|
||||
no está anexada a una ventana, el sistema
|
||||
pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}.
|
||||
La tarea {@link java.lang.Runnable} no se ejecuta hasta que la
|
||||
{@link android.view.View} esté anexada
|
||||
{@link android.view.View} esté anexada
|
||||
a una ventana. Este comportamiento soluciona los siguientes errores:
|
||||
<ul>
|
||||
<li>Si una aplicación publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU
|
||||
@@ -600,7 +600,7 @@ a una ventana. Este comportamiento soluciona los siguientes errores:
|
||||
Si una aplicación en Android N con el permiso
|
||||
{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
|
||||
intentaba borrar un paquete instalado por otra aplicación,
|
||||
el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debían esperar recibir el estado
|
||||
el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debían esperar recibir el estado
|
||||
{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
|
||||
al invocar
|
||||
{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
|
||||
|
||||
@@ -35,7 +35,7 @@ page.keywords="android for work", "android N", "enterprise", "QR code"
|
||||
<li><a href="#process-logging">Registros de procesos empresariales
|
||||
</a></li>
|
||||
|
||||
<li><a href="#bug-reports">Informes de errores remotos
|
||||
<li><a href="#bug-reports">Informes de errores remotos
|
||||
</a></li>
|
||||
|
||||
<li><a href="#remove-cert">Quitar un certificado de cliente
|
||||
@@ -109,7 +109,7 @@ Android N.</p>
|
||||
Si el propietario de un perfil envía una intent {@link
|
||||
android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD}, el
|
||||
sistema le pide al usuario que configure una comprobación de seguridad. El propietario del perfil también puede
|
||||
enviar una intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>
|
||||
enviar una intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>
|
||||
para que el usuario establezca un bloqueo de dispositivo.
|
||||
</p>
|
||||
|
||||
@@ -133,7 +133,7 @@ Android N.</p>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Para obtener detalles sobre los nuevos métodos y constantes, consulta la página de referencia de
|
||||
Para obtener detalles sobre los nuevos métodos y constantes, consulta la página de referencia de
|
||||
<code>DevicePolicyManager</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK</a>.
|
||||
</p>
|
||||
|
||||
@@ -156,7 +156,7 @@ Android N.</p>
|
||||
<p>
|
||||
Los lanzadores deben aplicar una IU distintiva para las aplicaciones suspendidas a fin de mostrar que las
|
||||
aplicaciones no están actualmente disponibles; por ejemplo, el ícono de la aplicación puede aparecer en color
|
||||
gris. Los lanzadores pueden averiguar si una aplicación está suspendida llamando al nuevo método
|
||||
gris. Los lanzadores pueden averiguar si una aplicación está suspendida llamando al nuevo método
|
||||
<code>DevicePolicyManager.getPackageSuspended()</code>.
|
||||
</p>
|
||||
|
||||
@@ -181,9 +181,9 @@ Android N.</p>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Los propietarios pueden requerir el uso de una VPN llamando al nuevo método
|
||||
Los propietarios pueden requerir el uso de una VPN llamando al nuevo método
|
||||
<code>DevicePolicyManager.setAlwaysOnVpnPackage()</code>. Para averiguar
|
||||
si el propietario ha establecido un requisito de VPN, llama al nuevo método
|
||||
si el propietario ha establecido un requisito de VPN, llama al nuevo método
|
||||
<code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>.
|
||||
</p>
|
||||
|
||||
@@ -255,7 +255,7 @@ Android N.</p>
|
||||
<p>
|
||||
Los propietarios pueden reiniciar sus dispositivos de forma remota. En algunos casos, no se puede acceder al botón de encendido de los dispositivos implementados en
|
||||
lugares públicos dentro de recintos. Si se debe
|
||||
reiniciar un dispositivo, los administradores pueden hacerlo utilizando el nuevo método
|
||||
reiniciar un dispositivo, los administradores pueden hacerlo utilizando el nuevo método
|
||||
<code>DevicePolicyManager.reboot()</code>.
|
||||
</p>
|
||||
|
||||
@@ -271,7 +271,7 @@ Android N.</p>
|
||||
<p>
|
||||
Los propietarios de dispositivos pueden identificar actividades sospechosas mediante un rastreo remoto de la actividad del
|
||||
dispositivo, incluidos inicios de aplicaciones, actividad adb y desbloqueos de pantalla. Los registros de
|
||||
procesos no requieren del consentimiento del usuario. Para recuperar registros, los propietarios de dispositivos habilitan
|
||||
procesos no requieren del consentimiento del usuario. Para recuperar registros, los propietarios de dispositivos habilitan
|
||||
los registros de dispositivos mediante <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
|
||||
</p>
|
||||
|
||||
@@ -402,10 +402,10 @@ Android N.</p>
|
||||
|
||||
<p>
|
||||
El propietario del dispositivo o perfil puede habilitar otra aplicación para que administre las restricciones de
|
||||
aplicaciones mediante el nuevo método
|
||||
aplicaciones mediante el nuevo método
|
||||
<code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
|
||||
. La aplicación nominada puede controlar si se otorgó este permiso
|
||||
llamando a
|
||||
llamando a
|
||||
<code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
|
||||
</p>
|
||||
|
||||
@@ -461,8 +461,8 @@ Android N.</p>
|
||||
<p>
|
||||
Los propietarios de perfiles y dispositivos pueden configurar múltiples certificados de CA para una configuración
|
||||
de Wi-Fi determinada. Cuando las redes de Wi-Fi corporativas tienen CA independientes para
|
||||
diferentes puntos de acceso con el mismo SSID, los administradores de TI pueden incluir todas las
|
||||
CA relevantes en la configuración Wi-Fi utilizando el nuevo método
|
||||
diferentes puntos de acceso con el mismo SSID, los administradores de TI pueden incluir todas las
|
||||
CA relevantes en la configuración Wi-Fi utilizando el nuevo método
|
||||
<code>setCaCertificates()</code>.
|
||||
</p>
|
||||
|
||||
@@ -511,7 +511,7 @@ Android N.</p>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
El teléfono debe controlar el nuevo marcador
|
||||
El teléfono debe controlar el nuevo marcador
|
||||
<code>android.telecom.Call.PROPERTY_WORK_CALL</code> para determinar si una llamada es
|
||||
de tipo laboral. Si se trata de una llamada laboral, el teléfono debe indicarlo
|
||||
, por ejemplo, mediante el agregado de una insignia de trabajo.
|
||||
@@ -524,7 +524,7 @@ Android N.</p>
|
||||
usuario modifique el fondo de pantalla. Los propietarios de dispositivos o perfiles aún pueden
|
||||
modificar el fondo de pantalla. Sin embargo, solo pueden hacerlo para el
|
||||
usuario o perfil que controlan. Por ejemplo, el propietario de un perfil no puede modificar el
|
||||
fondo de pantalla del usuario primario,
|
||||
fondo de pantalla del usuario primario,
|
||||
pero sí pueden hacerlo el propietario de un dispositivo o el propietario de un perfil en el perfil principal. El propietario de un dispositivo o perfil que desea modificar el
|
||||
fondo de pantalla debe controlar si el usuario o perfil que administra posee un
|
||||
fondo de pantalla ({@link android.app.WallpaperManager#isWallpaperSupported
|
||||
@@ -544,7 +544,7 @@ Android N.</p>
|
||||
<h2 id="health-monitoring">Control del estado del dispositivo</h2>
|
||||
|
||||
<p>
|
||||
El propietario de un perfil o dispositivo puede usar la nueva interfaz
|
||||
El propietario de un perfil o dispositivo puede usar la nueva interfaz
|
||||
<code>HardwarePropertiesManager</code> para recuperar información
|
||||
sobre el estado del dispositivo, como por ejemplo, las temperaturas de CPU o GPU y el uso de la CPU. La nueva interfaz
|
||||
de control es especialmente útil para controlar dispositivos sin supervisión
|
||||
|
||||
@@ -274,7 +274,7 @@ public static void scheduleJob(Context context) {
|
||||
</pre>
|
||||
<p>
|
||||
Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación
|
||||
recibe un callback y se pasa un objeto {@link android.app.job.JobParameters}
|
||||
recibe un callback y se pasa un objeto {@link android.app.job.JobParameters}
|
||||
al método {@link android.app.job.JobService#onStartJob onStartJob()}
|
||||
en {@code MediaContentJob.class}.
|
||||
</p>
|
||||
|
||||
@@ -58,7 +58,7 @@ el almacenamiento encriptado por credencial.</p>
|
||||
<p>Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan
|
||||
ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por
|
||||
dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como
|
||||
<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo
|
||||
<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo
|
||||
<code>android:directBootAware</code> como verdadero en el manifiesto.<p>
|
||||
|
||||
<p>Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión
|
||||
|
||||
@@ -158,7 +158,7 @@ page.keywords="multi-window", "android N", "split screen", "free-form"
|
||||
si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer
|
||||
atributos en tu manifiesto para controlar el tamaño y el diseño.
|
||||
La configuración de atributos de una actividad raíz se aplica a todas las actividades
|
||||
de su pila de tareas. Por ejemplo, si
|
||||
de su pila de tareas. Por ejemplo, si
|
||||
<code>android:resizeableActivity</code> está configurado en true para la actividad raíz, se puede modificar el tamaño de todas las actividades
|
||||
de la pila de tareas.
|
||||
</p>
|
||||
@@ -474,7 +474,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
||||
|
||||
<p>
|
||||
Ya sea que actualices o no tu aplicación para Android N, debes
|
||||
verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla
|
||||
verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla
|
||||
en modo de ventanas múltiples en un dispositivo con Android N.
|
||||
</p>
|
||||
|
||||
@@ -526,7 +526,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
||||
</li>
|
||||
|
||||
<li>Cambia el tamaño de tu aplicación en modo de pantalla dividida al arrastrar la línea divisoria.
|
||||
Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos
|
||||
Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos
|
||||
necesarios de la IU.
|
||||
</li>
|
||||
|
||||
|
||||
@@ -194,7 +194,7 @@ notificationManager.notify(notificationId, repliedNotification);
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
En el caso de las aplicaciones interactivas, como los chats, podría ser útil incluir
|
||||
En el caso de las aplicaciones interactivas, como los chats, podría ser útil incluir
|
||||
contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podrían mostrar
|
||||
múltiples líneas de historial de chat. Cuando el usuario responde a través de {@link
|
||||
android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas
|
||||
|
||||
@@ -181,7 +181,7 @@ video en la actividad de reproducción actual en modo de pantalla completa, en l
|
||||
iniciar una nueva actividad que podría confundir al usuario.</p>
|
||||
|
||||
<p>A fin de garantizar que se utilice una única actividad para las solicitudes de reproducción de video y que esta
|
||||
ingrese en el modo PIP o salga de este cuando sea necesario, configura el
|
||||
ingrese en el modo PIP o salga de este cuando sea necesario, configura el
|
||||
<code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto:
|
||||
</p>
|
||||
|
||||
@@ -209,5 +209,5 @@ esquina de la pantalla, debes evitar mostrar información importante en la panta
|
||||
en cualquier área que pueda quedar oculta detrás de la ventana de PIP.</p>
|
||||
|
||||
<p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para
|
||||
recibir eventos de entradas durante este modo, usa
|
||||
recibir eventos de entradas durante este modo, usa
|
||||
<code>MediaSession.setMediaButtonReceiver()</code>.</p>
|
||||
|
||||
@@ -41,17 +41,17 @@ directorio externo.</li>
|
||||
<code>StorageVolume</code> correcta. Luego, crea una intent llamando al
|
||||
método <code>StorageVolume.createAccessIntent()</code> de esa instancia.
|
||||
Usa esta intención para acceder a directorios de almacenamiento externo. Para obtener una lista de
|
||||
todos los volúmenes disponibles, incluidos los volúmenes de medios extraíbles, usa
|
||||
todos los volúmenes disponibles, incluidos los volúmenes de medios extraíbles, usa
|
||||
<code>StorageManager.getVolumesList()</code>.</p>
|
||||
|
||||
<p>Si tienes información sobre un archivo específico, usa
|
||||
<code>StorageManager.getStorageVolume(File)</code> para obtener el
|
||||
<code>StorageVolume</code> que contiene el archivo. Llama a
|
||||
<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
|
||||
<p>Si tienes información sobre un archivo específico, usa
|
||||
<code>StorageManager.getStorageVolume(File)</code> para obtener el
|
||||
<code>StorageVolume</code> que contiene el archivo. Llama a
|
||||
<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
|
||||
directorio de almacenamiento externo del archivo.</p>
|
||||
|
||||
<p>
|
||||
En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a
|
||||
En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a
|
||||
<code>StorageVolume.createAccessIntent()</code> para solicitar acceso al volumen
|
||||
completo, en lugar de un directorio específico.
|
||||
<code>StorageVolume.createAccessIntent()</code> regresa un valor nulo si pasas un
|
||||
@@ -140,7 +140,7 @@ de usuario. Si el usuario deniega una solicitud y la aplicación solicita acceso
|
||||
|
||||
<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
|
||||
{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
|
||||
<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una
|
||||
<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una
|
||||
segunda solicitud para obtener acceso a medios extraíbles.</p>
|
||||
|
||||
<p>Si el usuario selecciona <b>Don't ask again</b> y deniega la solicitud, todas las
|
||||
|
||||
@@ -171,7 +171,7 @@ page.image=images/cards/card-nyc_2x.jpg
|
||||
<p>
|
||||
Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}.
|
||||
Ten en cuenta que, si usas el formato PEM, el archivo debe incluir <em>solo</em> datos PEM
|
||||
y ningún texto adicional. También puedes brindar elementos
|
||||
y ningún texto adicional. También puedes brindar elementos
|
||||
<a href="#certificates"><code><certificates></code></a>
|
||||
múltiples en lugar de solo uno.
|
||||
</p>
|
||||
@@ -338,7 +338,7 @@ base-config}, si no están anidados. Los valores no establecidos en la {@code ba
|
||||
example.com} deben usar un conjunto personalizado de CA. Además, el tráfico de Cleartext a
|
||||
estos dominios se permite <em>excepto</em> con las conexiones a {@code
|
||||
secure.example.com}. Anidando la configuración para {@code
|
||||
secure.example.com} dentro de la configuración para {@code example.com},
|
||||
secure.example.com} dentro de la configuración para {@code example.com},
|
||||
{@code trust-anchors} no necesita duplicación.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -33,13 +33,13 @@ durante la grabación y gestionar las sesiones grabadas.</p>
|
||||
|
||||
<p class="note"><strong>Nota:</strong> La aplicación Live Channels todavía no
|
||||
permite que los usuarios creen grabaciones ni accedan a estas. Hasta que se realicen
|
||||
cambios en la aplicación Live Channels, es posible que sea difícil probar completamente la
|
||||
cambios en la aplicación Live Channels, es posible que sea difícil probar completamente la
|
||||
experiencia de grabación para tu servicio de entrada de TV.</p>
|
||||
|
||||
<h2 id="supporting">Indicar la compatibilidad para la grabación</h2>
|
||||
|
||||
<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el
|
||||
atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio
|
||||
<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el
|
||||
atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio
|
||||
en <code>true</code>:
|
||||
</p>
|
||||
|
||||
@@ -49,7 +49,7 @@ en <code>true</code>:
|
||||
android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
|
||||
</pre>
|
||||
|
||||
<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta
|
||||
<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta
|
||||
<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar el servicio de entrada
|
||||
de TV en el manifiesto</a>.
|
||||
</p>
|
||||
@@ -123,7 +123,7 @@ las aplicaciones de canal con funcionalidad de grabación en la tabla de proveed
|
||||
<code>RecordedPrograms.Uri</code>. Usa API de proveedor de contenido para
|
||||
leer, agregar y borrar entradas de esta tabla.</p>
|
||||
|
||||
<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta
|
||||
<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta
|
||||
<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
|
||||
Conceptos básicos sobre el proveedor de contenido</a>.</p>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ page.tags="preview", "developer preview"
|
||||
|
||||
<p>
|
||||
Android N te brinda la oportunidad de garantizar que tus aplicaciones funcionen con la próxima versión de la plataforma.
|
||||
Esta versión preliminar incluye diversas API y cambios en los comportamientos que pueden
|
||||
Esta versión preliminar incluye diversas API y cambios en los comportamientos que pueden
|
||||
tener impactos en tu aplicación, como se describe en las secciones <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>.
|
||||
Al probar tu aplicación con la versión preliminar, te debes centrar en algunos cambios específicos del sistema para garantizar que los usuarios disfruten de una buena experiencia.
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ page.tags="preview", "developer", "android"
|
||||
comportamientos</a> se indican áreas clave que debes probar.</li>
|
||||
<li> Documentación de nuevas API, entre la que se incluye <a href="{@docRoot}preview/api-overview.html">Información general de API</a>, una <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia
|
||||
de API</a> descargable
|
||||
y guías exhaustivas para desarrolladores que muestran, por ejemplo, soporte
|
||||
y guías exhaustivas para desarrolladores que muestran, por ejemplo, soporte
|
||||
de múltiples ventanas, notificaciones integradas, soporte de múltiples configuraciones regionales y mucho más.
|
||||
<li> <a href="{@docRoot}preview/samples.html">Ejemplo de código</a>, en el que se
|
||||
demuestra la manera de admitir permisos y otras funciones nuevas.
|
||||
|
||||
@@ -92,7 +92,7 @@ Android N Preview SDK en Android Studio de la siguiente manera:</p>
|
||||
<a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
|
||||
<td width="100%">
|
||||
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||
</td>
|
||||
</tr>
|
||||
<table>
|
||||
|
||||
@@ -85,7 +85,7 @@ page.image=images/cards/card-n-support_2x.png
|
||||
|
||||
<li>Developer Preview 3 está <strong>disponible en todos los dispositivos
|
||||
compatibles:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
|
||||
C, General Mobile 4G (Android One) y Sony Xperia Z3 (modelos D6603 y
|
||||
C, General Mobile 4G (Android One) y Sony Xperia Z3 (modelos D6603 y
|
||||
D6653).
|
||||
|
||||
</li>
|
||||
@@ -123,7 +123,7 @@ page.image=images/cards/card-n-support_2x.png
|
||||
<h4>Multiprocess WebView</h4>
|
||||
|
||||
<p>
|
||||
Desde la versión 51 de Android N, WebView ejecutará contenido web en
|
||||
Desde la versión 51 de Android N, WebView ejecutará contenido web en
|
||||
procesos individuales de espacio aislado cuando se haya habilitado
|
||||
la opción "Multiprocess WebView". El equipo de WebView espera recibir comentarios sobre compatibilidad y
|
||||
rendimiento de tiempo de ejecución en N antes de habilitar Multiprocess WebView en
|
||||
@@ -154,7 +154,7 @@ page.image=images/cards/card-n-support_2x.png
|
||||
que permite que una aplicación monitoree su rendimiento de representación de IU mediante la exposición de una
|
||||
transmisión de API Pub/Sub para transferir información sobre el intervalo de los fotogramas para la ventana actual
|
||||
de la aplicación. Puedes usar <code>FrameMetricsListener</code> para medir
|
||||
el rendimiento de la IU del nivel de interacción en producción con una granularidad mayor y
|
||||
el rendimiento de la IU del nivel de interacción en producción con una granularidad mayor y
|
||||
sin la necesidad de contar con conexión USB.
|
||||
</p>
|
||||
|
||||
@@ -223,7 +223,7 @@ page.image=images/cards/card-n-support_2x.png
|
||||
<dd>
|
||||
Ahora, el sistema utiliza metadatos de la actividad para definir el modo de mosaico.
|
||||
(Antes, el valor de devolución de
|
||||
<code>TileService.onTileAdded()</code> determinaba el modo de mosaico). Para obtener más información, consulta
|
||||
<code>TileService.onTileAdded()</code> determinaba el modo de mosaico). Para obtener más información, consulta
|
||||
<code>TileService.META_DATA_ACTIVE_TILE</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a> descargable.
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -686,9 +686,9 @@ seguimiento de problemas</a>.</p>
|
||||
<h4>OEM unlock</h4>
|
||||
|
||||
<ul>
|
||||
<li>En algunos dispositivos, <strong>Enable OEM unlock</strong> aparecerá inhabilitado en
|
||||
<li>En algunos dispositivos, <strong>Enable OEM unlock</strong> aparecerá inhabilitado en
|
||||
"Developer Options" al ejecutar DP2.<br>
|
||||
<strong>Método alternativo:</strong> Apúntate para
|
||||
<strong>Método alternativo:</strong> Apúntate para
|
||||
el Programa Android Beta (si aún no lo has hecho) en
|
||||
<a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>. Luego, date de baja y acepta el
|
||||
paso a una versión anterior (OTA). Darse de baja hará que el dispositivo pase a la versión Android 6.0. Ahora deberías
|
||||
@@ -764,7 +764,7 @@ seguimiento de problemas</a>.</p>
|
||||
<li>En la muestra multithreadCmdBuffer, {@code vkCmdClearColorImage()} falla cuando
|
||||
se ejecuta con el controlador N-DP2.</li>
|
||||
<li>Los valores de devolución de {@code vkGetPhysicalDeviceFormatProperties()} no configuran un valor
|
||||
para {@code VkFormatProperties::linearTilingFeatures} que, como resultado,
|
||||
para {@code VkFormatProperties::linearTilingFeatures} que, como resultado,
|
||||
toma el valor de 0.</li>
|
||||
<li>Los anexos del búfer de fotogramas de punto flotante de Vulkan no se manejan de forma correcta.</li>
|
||||
</ul>
|
||||
@@ -892,7 +892,7 @@ seguimiento de problemas</a>.</p>
|
||||
<h4 id="dialer">Teléfono</h4>
|
||||
|
||||
<ul>
|
||||
<li>La aplicación Teléfono no es compatible con el inicio directo. Este tema se abordará más adelante en
|
||||
<li>La aplicación Teléfono no es compatible con el inicio directo. Este tema se abordará más adelante en
|
||||
N Developer Preview.
|
||||
</li>
|
||||
|
||||
@@ -1021,7 +1021,7 @@ seguimiento de problemas</a>.</p>
|
||||
</li>
|
||||
|
||||
<li>El primer registro en un perfil de trabajo tarda varios minutos en
|
||||
completarse. Esto puede hacer que el dispositivo tarde más de lo normal en volverse
|
||||
completarse. Esto puede hacer que el dispositivo tarde más de lo normal en volverse
|
||||
visible en la API Play EMM.
|
||||
</li>
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ next.title=Cómo determinar y controlar el tipo de conector y el estado de la co
|
||||
next.link=docking-monitoring.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
@@ -24,9 +24,9 @@ next.link=docking-monitoring.html
|
||||
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<p>Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duración de la batería, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la batería.</p>
|
||||
|
||||
<p>El impacto derivado de actualizar aplicaciones en la duración de la batería varía en función del nivel de batería y del estado de carga del dispositivo, mientras que es insignificante cuando este está conectado a la corriente. Por ello, en la mayoría de los casos, puedes maximizar la frecuencia de actualización cuando el dispositivo esté conectado a un cargador. Por el contrario, si el dispositivo está en proceso de descarga, disminuir la frecuencia de actualización te permitirá aumentar la duración de la batería.</p>
|
||||
@@ -34,8 +34,8 @@ next.link=docking-monitoring.html
|
||||
<p>Del mismo modo, puedes comprobar el nivel de carga de la batería y reducir la frecuencia de las actualizaciones o incluso detenerlas cuando la batería esté a punto de agotarse.</p>
|
||||
|
||||
|
||||
<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2>
|
||||
|
||||
<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2>
|
||||
|
||||
<p>En primer lugar, te recomendamos que determines el estado de carga actual. {@link android.os.BatteryManager} envía los detalles de carga y de la batería en un {@link android.content.Intent} persistente que incluye el estado de carga.</p>
|
||||
|
||||
<p>Se trata de un intento persistente, por lo que no es necesario registrar un {@link android.content.BroadcastReceiver}. Para ello, solo tienes que ejecutar {@code registerReceiver} transmitiendo {@code null} como el receptor (como se muestra en el siguiente fragmento). A continuación, se devuelve el intento de estado actual de la batería. Puedes transmitir un objeto {@link android.content.BroadcastReceiver} real, pero hablaremos sobre las actualizaciones en otra sección, por lo que no es necesario ahora.</p>
|
||||
@@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
|
||||
<p>Normalmente, debes maximizar la frecuencia de las actualizaciones en segundo plano si el dispositivo está conectado a un cargador de corriente alterna, disminuir esa frecuencia si se utiliza un cargador USB y reducirla aún más si la batería se está descargando.</p>
|
||||
|
||||
|
||||
<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2>
|
||||
<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2>
|
||||
|
||||
<p>Modificar el estado de carga es tan fácil como conectar el dispositivo a un enchufe o USB. Por ello, es importante que supervises el estado de carga por si se producen cambios y modifiques la frecuencia de actualización según corresponda.</p>
|
||||
|
||||
@@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
|
||||
|
||||
<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
||||
status == BatteryManager.BATTERY_STATUS_FULL;
|
||||
|
||||
|
||||
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
||||
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
|
||||
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
|
||||
@@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
|
||||
}</pre>
|
||||
|
||||
|
||||
<h2 id="CurrentLevel">Cómo determinar el nivel de batería actual</h2>
|
||||
<h2 id="CurrentLevel">Cómo determinar el nivel de batería actual</h2>
|
||||
|
||||
<p>En algunos casos, también es útil determinar el nivel de batería actual. Puedes disminuir la frecuencia de las actualizaciones en segundo plano si el nivel de carga de la batería es inferior a un valor determinado.</p>
|
||||
|
||||
@@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
|
||||
float batteryPct = level / (float)scale;</pre>
|
||||
|
||||
|
||||
<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</h2>
|
||||
<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</h2>
|
||||
|
||||
<p>No puedes controlar el estado de la batería de forma continua fácilmente, pero tampoco es necesario.</p>
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ next.link=manifest-receivers.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
@@ -27,7 +27,7 @@ next.link=manifest-receivers.html
|
||||
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Algunos de los usos más comunes para las alarmas con repetición y los servicios en segundo plano es programar actualizaciones regulares de los datos de aplicaciones a partir de recursos de Internet, almacenar datos en la memoria caché o ejecutar descargas a largo plazo. Sin embargo, si no estás conectado a Internet o la conexión es demasiado débil para completar la descarga, ¿para qué activar el dispositivo y programar la actualización?</p>
|
||||
@@ -35,18 +35,18 @@ next.link=manifest-receivers.html
|
||||
<p>Puedes utilizar {@link android.net.ConnectivityManager} para comprobar si estás conectado a Internet y, en ese caso, el tipo de conexión que estás utilizando.</p>
|
||||
|
||||
|
||||
<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2>
|
||||
|
||||
<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2>
|
||||
|
||||
<p>No es necesario programar una actualización basada en un recurso de Internet si no estás conectado. En el fragmento que aparece a continuación, se muestra cómo utilizar {@link android.net.ConnectivityManager} para consultar la red activa y determinar si hay conexión a Internet.</p>
|
||||
|
||||
<pre>ConnectivityManager cm =
|
||||
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
|
||||
|
||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||
boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
|
||||
|
||||
|
||||
<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2>
|
||||
<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2>
|
||||
|
||||
<p>También puedes determinar el tipo de conexión a Internet que hay disponible.</p>
|
||||
|
||||
@@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
|
||||
<p>Cuando hayas inhabilitado las actualizaciones, es importante que detectes si se hay cambios en la conectividad para poder reanudarlas cuando se haya establecido una conexión a Internet.</p>
|
||||
|
||||
|
||||
<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2>
|
||||
<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2>
|
||||
|
||||
<p>{@link android.net.ConnectivityManager} emite la acción {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) cuando se han modificado los detalles de la conectividad. Puedes registrar un receptor de emisión en el archivo de manifiesto para detectar estos cambios y reanudar (o cancelar) las actualizaciones en segundo plano según corresponda.</p>
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
@@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html
|
||||
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Los dispositivos Android se pueden conectar a distintos tipos de conectores. Por ejemplo, se puede utilizar conectores para coche o domésticos y tanto digitales como analógicos. Normalmente, el estado del conector está vinculado al estado de carga, ya que muchos conectores cargan el dispositivo mientras está conectado.</p>
|
||||
@@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html
|
||||
<p>El estado del conector se emite también como un {@link android.content.Intent} persistente, lo que te permite consultar si el dispositivo está conectado o no y, si lo está, determinar el tipo de conector.</p>
|
||||
|
||||
|
||||
<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2>
|
||||
|
||||
<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2>
|
||||
|
||||
<p>La información sobre el estado del conector se incluye como información adicional en una emisión persistente de la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Por ello, no es necesario registrar un {@link android.content.BroadcastReceiver}. Solo tienes que ejecutar {@link android.content.Context#registerReceiver registerReceiver()} transmitiendo {@code null} como el receptor de emisión, como se muestra en el fragmento de código que aparece a continuación.</p>
|
||||
|
||||
<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
|
||||
@@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
|
||||
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
|
||||
|
||||
|
||||
<h2 id="DockType">Cómo determinar el tipo de conector actual</h2>
|
||||
<h2 id="DockType">Cómo determinar el tipo de conector actual</h2>
|
||||
|
||||
<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores:
|
||||
<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores:
|
||||
<ul><li>coche,</li>
|
||||
<li>escritorio,</li>
|
||||
<li>escritorio de gama baja (analógico),</li>
|
||||
@@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
|
||||
<p>Ten en cuenta que las últimas dos opciones se introdujeron en Android únicamente en el nivel 11 del API. Por ello, te recomendamos que compruebes las tres opciones solo cuando te interese más el tipo de conector que si se trata de un conector digital o analógico:</p>
|
||||
|
||||
<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
|
||||
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
|
||||
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
|
||||
dockState == EXTRA_DOCK_STATE_LE_DESK ||
|
||||
dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
|
||||
|
||||
|
||||
<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2>
|
||||
<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2>
|
||||
|
||||
<p>Cuando el dispositivo está conectado a un conector o desconectado del mismo, se emite la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Para controlar los cambios que se produzcan en el estado del conector del dispositivo, solo tienes que registrar un receptor de emisión en el archivo de manifiesto de la aplicación, como se muestra en el fragmento que aparece a continuación:</p>
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ next.link=battery-monitoring.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>Dependencias y requisitos previos</h2>
|
||||
<h2>Dependencias y requisitos previos</h2>
|
||||
<ul>
|
||||
<li>Android 2.0 (nivel 5 del API) o superior</li>
|
||||
<li>Experiencia con <a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a></li>
|
||||
@@ -21,19 +21,19 @@ next.link=battery-monitoring.html
|
||||
<li><a href="{@docRoot}guide/components/services.html">Servicios</a>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Uno de los objetivos de tu aplicación debe ser limitar su impacto en la duración de la batería del dispositivo en el que esté instalada. Después de leer estas secciones, podrás desarrollar aplicaciones que optimizarán el uso de la batería en función del estado del dispositivo en el que estén instaladas.</p>
|
||||
|
||||
<p>Al tomar medidas como inhabilitar las actualizaciones de servicios en segundo plano o disminuir la frecuencia de dichas actualizaciones cuando el nivel de batería sea bajo, puedes garantizar que se minimice el impacto de tu aplicación en la duración de la batería sin afectar a la experiencia del usuario.</p>
|
||||
|
||||
<h2>Secciones</h2>
|
||||
|
||||
<h2>Secciones</h2>
|
||||
|
||||
<!-- Create a list of the lessons in this class along with a short description of each lesson.
|
||||
These should be short and to the point. It should be clear from reading the summary whether someone
|
||||
will want to jump to a lesson or not.-->
|
||||
|
||||
will want to jump to a lesson or not.-->
|
||||
|
||||
<dl>
|
||||
<dt><b><a href="battery-monitoring.html">Cómo controlar el nivel de batería y el estado de carga</a></b></dt>
|
||||
<dd>Obtén más información sobre cómo determinar y controlar el nivel de batería actual y los cambios en el estado de carga para modificar la frecuencia de actualizaciones en segundo plano de tu aplicación.</dd>
|
||||
@@ -46,4 +46,4 @@ will want to jump to a lesson or not.-->
|
||||
|
||||
<dt><b><a href="manifest-receivers.html">Cómo manipular los receptores de emisión bajo demanda</a></b></dt>
|
||||
<dd>Los receptores de emisión que declaras en el archivo de manifiesto se pueden alternar durante la ejecución para inhabilitar los que no son necesarios debido al estado actual del dispositivo. Obtén más información sobre cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento y cómo posponer acciones hasta que el dispositivo se encuentre en un estado concreto.</dd>
|
||||
</dl>
|
||||
</dl>
|
||||
@@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
@@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html
|
||||
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un {@link android.content.BroadcastReceiver} para cada estado que vayas a controlar y registrar cada uno de ellos en el archivo de manifiesto de tu aplicación. A continuación, en cada uno de esos receptores solo tienes que volver a programar las alarmas recurrentes en función del estado actual del dispositivo.</p>
|
||||
@@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html
|
||||
<p>Un efecto secundario de este método es que tu aplicación activará el dispositivo siempre que uno de los receptores se active (probablemente, con más frecuencia de la necesaria).</p>
|
||||
|
||||
<p>Te recomendamos que inhabilites o habilites los receptores de emisión en el momento de la ejecución. De este modo, puedes utilizar los receptores que hayas declarado en el archivo de manifiesto como alarmas pasivas que se activan mediante los eventos del sistema solo cuando es necesario.</p>
|
||||
|
||||
|
||||
<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2>
|
||||
|
||||
|
||||
<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2>
|
||||
|
||||
<p>Se puede utilizar el {@link android.content.pm.PackageManager} para alternar el estado habilitado en cualquier componente definido en el archivo de manifiesto, incluidos los receptores de emisión que quieras habilitar o inhabilitar, como se muestra en el fragmento que aparece a continuación:</p>
|
||||
|
||||
<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
|
||||
|
||||
@@ -10,9 +10,9 @@ previous.link=screendensities.html
|
||||
|
||||
|
||||
<!-- This is the training bar -->
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
|
||||
<ol>
|
||||
@@ -27,17 +27,17 @@ previous.link=screendensities.html
|
||||
<ul>
|
||||
<li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
|
||||
<div class="download-box">
|
||||
<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>En función del diseño actual de tu aplicación, la interfaz puede variar. Por ejemplo, si tu aplicación está en modo de panel dual, haz clic en un elemento del panel izquierdo para que aparezca en el panel de la derecha. Asimismo, si está en modo de panel único, el contenido debería aparecer por sí mismo (en otra actividad).</p>
|
||||
|
||||
@@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity {
|
||||
setContentView(R.layout.main_layout);
|
||||
|
||||
View articleView = findViewById(R.id.article);
|
||||
mIsDualPane = articleView != null &&
|
||||
mIsDualPane = articleView != null &&
|
||||
articleView.getVisibility() == View.VISIBLE;
|
||||
}
|
||||
}
|
||||
@@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) {
|
||||
else {
|
||||
/* use list navigation (spinner) */
|
||||
actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
|
||||
SpinnerAdapter adap = new ArrayAdapter<String>(this,
|
||||
SpinnerAdapter adap = new ArrayAdapter<String>(this,
|
||||
R.layout.headline_item, CATEGORIES);
|
||||
actionBar.setListNavigationCallbacks(adap, handler);
|
||||
}
|
||||
@@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment {
|
||||
public class HeadlinesFragment extends ListFragment {
|
||||
...
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent,
|
||||
public void onItemClick(AdapterView<?> parent,
|
||||
View view, int position, long id) {
|
||||
if (null != mHeadlineSelectedListener) {
|
||||
mHeadlineSelectedListener.onHeadlineSelected(position);
|
||||
|
||||
@@ -6,10 +6,10 @@ next.link=screensizes.html
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>Dependencias y requisitos previos</h2>
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>Dependencias y requisitos previos</h2>
|
||||
|
||||
<ul>
|
||||
<li>Android 1.6 o superior (Android 2.1 o superior para la aplicación de ejemplo)</li>
|
||||
@@ -26,17 +26,17 @@ href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</
|
||||
<ul>
|
||||
<li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
<div class="download-box">
|
||||
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
<div class="download-box">
|
||||
<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Android se utiliza en cientos de dispositivos con diferentes tamaños de pantalla, desde pequeños teléfonos hasta enormes televisores. Por ello, es importante que diseñes tu aplicación para que sea compatible con todos los tamaños de pantalla y esté disponible para el mayor número de usuarios posible.</p>
|
||||
|
||||
<p>Sin embargo, no es suficiente con que tu aplicación sea compatible con diferentes dispositivos. Cada tamaño de pantalla ofrece diferentes posibilidades y retos para la interacción del usuario. Por ello, para satisfacer completamente a tus usuarios e impresionarlos, tu aplicación debe ir más allá de simplemente <em>admitir</em> varias pantallas: debe <em>optimizar</em> la experiencia de usuario para cada configuración de pantalla.</p>
|
||||
@@ -47,17 +47,17 @@ href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</
|
||||
|
||||
<p class="note"><strong>Nota:</strong> en esta sección y en el ejemplo correspondiente, se utiliza la <a
|
||||
href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</a> para poder usar las API de <PH>{@link android.app.Fragment}</PH> en versiones anteriores a Android 3.0. Debes descargar y la biblioteca y añadirla a tu aplicación para poder utilizar todas las API que se indican en esta sección.</p>
|
||||
|
||||
|
||||
<h2>Secciones</h2>
|
||||
|
||||
<dl>
|
||||
<dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt>
|
||||
<dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd>
|
||||
|
||||
<dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt>
|
||||
<dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de píxeles (mediante píxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd>
|
||||
|
||||
<dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt>
|
||||
<dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd>
|
||||
</dl>
|
||||
|
||||
<h2>Secciones</h2>
|
||||
|
||||
<dl>
|
||||
<dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt>
|
||||
<dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd>
|
||||
|
||||
<dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt>
|
||||
<dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de píxeles (mediante píxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd>
|
||||
|
||||
<dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt>
|
||||
<dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd>
|
||||
</dl>
|
||||
|
||||
@@ -12,8 +12,8 @@ next.link=adaptui.html
|
||||
|
||||
|
||||
<!-- This is the training bar -->
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
<ol>
|
||||
@@ -29,15 +29,15 @@ next.link=adaptui.html
|
||||
</ul>
|
||||
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
<div class="download-box">
|
||||
|
||||
<div class="download-box">
|
||||
<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>En esta sección se explica cómo proporcionar diferentes recursos y utilizar unidades de medida de resolución independiente para admitir diferentes densidades de pantalla.</p>
|
||||
|
||||
@@ -48,8 +48,8 @@ next.link=adaptui.html
|
||||
<p>Por ejemplo, al especificar un espacio entre dos vistas, debes utilizar <code>dp</code> en lugar de <code>px</code>:</p>
|
||||
|
||||
<pre>
|
||||
<Button android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
<Button android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/clickme"
|
||||
android:layout_marginTop="20dp" />
|
||||
</pre>
|
||||
@@ -57,8 +57,8 @@ next.link=adaptui.html
|
||||
<p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p>
|
||||
|
||||
<pre>
|
||||
<TextView android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
<TextView android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="20sp" />
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ next.link=screendensities.html
|
||||
|
||||
|
||||
<!-- This is the training bar -->
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
<div id="tb-wrapper">
|
||||
<div id="tb">
|
||||
|
||||
<h2>En esta sección puedes aprender:</h2>
|
||||
<ol>
|
||||
@@ -30,26 +30,26 @@ next.link=screendensities.html
|
||||
<li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
<div class="download-box">
|
||||
<h2>¡Pruébalo!</h2>
|
||||
|
||||
<div class="download-box">
|
||||
<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<p class="filename">NewsReader.zip</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p>
|
||||
<ul>
|
||||
<li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li>
|
||||
<li>Configura la pantalla con el diseño de interfaz adecuado.</li>
|
||||
<ul>
|
||||
<li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li>
|
||||
<li>Configura la pantalla con el diseño de interfaz adecuado.</li>
|
||||
<li>Asegúrate de aplicar el diseño adecuado a la pantalla correspondiente.</li>
|
||||
<li>Utiliza el mapa de bits con la escala adecuada.</li>
|
||||
</ul>
|
||||
<li>Utiliza el mapa de bits con la escala adecuada.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2>
|
||||
<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2>
|
||||
|
||||
<p>Para garantizar que el diseño es flexible y que se adapta a varios tamaños de pantalla, debes utilizar los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para la altura y el ancho de algunos componentes de la vista. Si utilizas <code>"wrap_content"</code>, el ancho o la altura de la vista se establece en el tamaño mínimo necesario para adaptar el contenido a esta vista, mientras que <code>"match_parent"</code> (también conocido como <code>"fill_parent"</code> antes del nivel 8 del API) provoca que el componente se amplíe hasta coincidir con el tamaño de la vista principal.</p>
|
||||
|
||||
@@ -65,7 +65,7 @@ next.link=screendensities.html
|
||||
<p class="img-caption"><strong>Figura 1.</strong> La aplicación de ejemplo News Reader en modo vertical (izquierda) y horizontal (derecha)</p>
|
||||
|
||||
|
||||
<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2>
|
||||
<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2>
|
||||
|
||||
<p>Puedes crear diseños de un cierto nivel de complejidad con instancias anidadas de <PH>{@link android.widget.LinearLayout}</PH> y combinaciones de los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code>. Sin embargo, <PH>{@link android.widget.LinearLayout}</PH> no te permite controlar con precisión las relaciones espaciales de las vistas secundarias; las vistas de <PH>{@link android.widget.LinearLayout}</PH> simplemente se alinean en paralelo. Si quieres orientar las vistas secundarias de una forma que no sea una línea recta, a menudo la mejor solución es utilizar <PH>{@link android.widget.RelativeLayout}</PH>que te permite especificar el diseño según las relaciones espaciales entre los componentes. Por ejemplo, puedes alinear una vista secundaria en el lateral izquierdo y otra vista en el lateral derecho de la pantalla.</p>
|
||||
|
||||
@@ -115,8 +115,8 @@ next.link=screendensities.html
|
||||
|
||||
<p>Ten en cuenta que aunque el tamaño de los componentes es diferente, las relaciones espaciales se mantienen según se ha especificado con <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
|
||||
|
||||
|
||||
<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2>
|
||||
|
||||
<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2>
|
||||
|
||||
<p>Hay mucha diferencia entre un diseño flexible y un diseño relativo como el que se ha utilizado en las secciones anteriores. Aunque ambos diseños se adaptan a diferentes pantalla estirando el espacio dentro de los componentes y alrededor de los mismos, puede que no ofrezcan la mejor experiencia de usuario para cada tamaño de pantalla. Por tanto, tu aplicación no solo debe implementar los diseños flexibles, sino que también debe ofrecer varios diseños alternativos para diferentes configuraciones de pantalla. Para ello, se utilizan <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">calificadores de configuración</a>, que permiten que el tiempo de ejecución seleccione el recurso adecuado en función de la configuración actual del dispositivo (por ejemplo, un diseño diferente para diferentes tamaños de pantalla).</p>
|
||||
|
||||
@@ -158,7 +158,7 @@ next.link=screendensities.html
|
||||
<p>No obstante, esto no funcionará en los dispositivos anteriores a Android 3.2 porque no reconocen <code>sw600dp</code> como calificador de tamaño, por lo que también tendrás que seguir utilizando el calificador <code>large</code>. Por tanto, debes tener un archivo con el nombre <code>res/layout-large/main.xml</code> idéntico a <code>res/layout-sw600dp/main.xml</code>. En la siguiente sección, obtendrás información sobre una técnica que te permite evitar que se dupliquen los archivos de diseños.</p>
|
||||
|
||||
|
||||
<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2>
|
||||
<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2>
|
||||
|
||||
<p>El calificador de ancho mínimo solo está disponible en Android 3.2 o superior. Por tanto, tendrás que seguir utilizando los contenedores de tamaño abstractos (pequeño, normal, grande y extragrande) para que sean compatibles con versiones anteriores. Por ejemplo, si quieres que tu interfaz de usuario sea de panel único en teléfonos pero multipanel en tablets de 7", televisiones y otros dispositivos grandes, tendrás que utilizar los siguientes archivos:</p>
|
||||
|
||||
@@ -202,7 +202,7 @@ next.link=screendensities.html
|
||||
<PH>{@code large}</PH>y las televisiones y los tablets posteriores a la versión 3.2 utilizarán <code>sw600dp</code>).</p>
|
||||
|
||||
|
||||
<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2>
|
||||
<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2>
|
||||
|
||||
<p>Aunque algunos diseños se pueden utilizar tanto en modo horizontal como vertical, la mayoría de ellos pueden beneficiarse de los ajustes. A continuación, se indica cómo se comporta el diseño según cada tamaño y orientación de la pantalla en la aplicación de ejemplo News Reader:</p>
|
||||
|
||||
|
||||
@@ -277,7 +277,7 @@ meskipun hanya sesuatu yang sederhana.</p>
|
||||
<div class="col-7">
|
||||
|
||||
<h4 id="do-heavy-lifting-for-me">Lakukan pekerjaan yang sulit untuk saya</h4>
|
||||
<p>Buatlah pemula merasa seperti ahli dengan memungkinkan mereka untuk melakukan hal-hal yang mereka pikir tidak akan bisa.
|
||||
<p>Buatlah pemula merasa seperti ahli dengan memungkinkan mereka untuk melakukan hal-hal yang mereka pikir tidak akan bisa.
|
||||
Misalnya, pintasan yang menggabungkan beberapa efek foto dapat membuat foto amatir terlihat mengagumkan hanya
|
||||
dalam beberapa langkah.</p>
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ pemberitahuan tunggal yang mengarahkan pengguna ke layar antara. Layar ini meran
|
||||
kejadian tersebut, dan menyediakan path bagi pengguna untuk menjelajah ke dalam aplikasi. Pemberitahuan dengan gaya seperti ini
|
||||
disebut <em>pemberitahuan tidak langsung</em>.</p>
|
||||
|
||||
<p>Berbeda dengan pemberitahuan standar (langsung), menekan tombol Back dari
|
||||
<p>Berbeda dengan pemberitahuan standar (langsung), menekan tombol Back dari
|
||||
layar antara pada pemberitahuan tidak langsung akan mengembalikan pengguna ke titik pemicu pemberitahuan tersebut—tidak ada
|
||||
layar tambahan yang disisipkan ke dalam back-stack. Setelah pengguna melanjutkan ke dalam aplikasi dari
|
||||
layar antara, tombol Up dan Back akan berperilaku seperti pada pemberitahuan standar, sebagaimana dijelaskan di atas:
|
||||
@@ -168,7 +168,7 @@ yang akan dibahas di bawah ini.</p>
|
||||
informasi dan semua tindakan terkait yang dapat dilakukan pengguna. Aplikasi Anda adalah kumpulan
|
||||
aktivitas, yang terdiri dari aktivitas yang Anda buat dan aktivitas yang Anda gunakan ulang dari aplikasi lain.</p>
|
||||
|
||||
<p><strong>Tugas</strong> adalah urutan aktivitas yang diikuti pengguna untuk mencapai tujuan.
|
||||
<p><strong>Tugas</strong> adalah urutan aktivitas yang diikuti pengguna untuk mencapai tujuan.
|
||||
Tugas tunggal dapat memanfaatkan aktivitas dari satu aplikasi saja, atau dapat memanfaatkan aktivitas dari sejumlah
|
||||
aplikasi berbeda.</p>
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ jendela lain.</p>
|
||||
<p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar
|
||||
satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang
|
||||
ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap
|
||||
aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali
|
||||
aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali
|
||||
aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas
|
||||
dalam sebuah tumpukan ("back-stack"). Bila sebuah aktivitas baru dimulai, aktivitas itu akan didorong ke atas back-stack dan
|
||||
mengambil fokus pengguna. Back-stack mematuhi mekanisme dasar tumpukan "masuk terakhir, keluar pertama",
|
||||
@@ -67,7 +67,7 @@ melalui metode callback daur hidupnya.
|
||||
Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam
|
||||
statusnya—apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya—dan
|
||||
masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang
|
||||
sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas
|
||||
sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas
|
||||
objek besar, seperti koneksi jaringan atau database. Bila aktivitas dilanjutkan, Anda bisa
|
||||
memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini
|
||||
semuanya bagian dari daur hidup aktivitas.</p>
|
||||
@@ -89,7 +89,7 @@ terpenting adalah:</p>
|
||||
<dl>
|
||||
<dt>{@link android.app.Activity#onCreate onCreate()}</dt>
|
||||
<dd>Anda harus mengimplementasikan metode ini. Sistem memanggilnya saat membuat
|
||||
aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial
|
||||
aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial
|
||||
aktivitas.
|
||||
Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView
|
||||
setContentView()} untuk mendefinisikan layout untuk antarmuka pengguna aktivitas.</dd>
|
||||
@@ -115,7 +115,7 @@ dalam jendela aktivitas dan bisa merespons interaksi pengguna. Misalnya, sebuah
|
||||
tombol yang mengawali suatu tindakan bila pengguna menyentuhnya.</p>
|
||||
|
||||
<p>Android menyediakan sejumlah tampilan siap-dibuat yang bisa Anda gunakan untuk mendesain dan mengatur
|
||||
layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar,
|
||||
layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar,
|
||||
misalnya tombol, bidang teks, kotak cek, atau sekadar sebuah gambar. "Layout" adalah tampilan yang diturunkan dari {@link
|
||||
android.view.ViewGroup} yang memberikan sebuah model layout unik untuk tampilan anaknya, misalnya
|
||||
layout linier, layout grid, atau layout relatif. Anda juga bisa mensubkelaskan kelas-kelas {@link android.view.View} dan
|
||||
@@ -124,7 +124,7 @@ layout Anda sendiri dan menerapkannya ke layout aktivitas Anda.</p>
|
||||
|
||||
<p>Cara paling umum untuk mendefinisikan layout dengan menggunakan tampilan adalah dengan file layout XML yang disimpan dalam
|
||||
sumber daya aplikasi Anda. Dengan cara ini, Anda bisa memelihara desain antarmuka pengguna Anda secara terpisah dari
|
||||
kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI
|
||||
kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI
|
||||
aktivitas Anda dengan {@link android.app.Activity#setContentView(int) setContentView()}, dengan meneruskan
|
||||
ID sumber daya untuk layout itu. Akan tetapi, Anda juga bisa membuat {@link android.view.View} baru dalam
|
||||
kode aktivitas dan membuat hierarki tampilan dengan menyisipkan {@link
|
||||
@@ -169,7 +169,7 @@ untuk informasi selengkapnya tentang cara mendeklarasikan aktivitas Anda dalam m
|
||||
|
||||
<p>Elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
|
||||
<activity>}</a> juga bisa menetapkan berbagai filter intent—dengan menggunakan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
|
||||
<intent-filter>}</a> —untuk mendeklarasikan cara komponen aplikasi lain
|
||||
<intent-filter>}</a> —untuk mendeklarasikan cara komponen aplikasi lain
|
||||
mengaktifkannya.</p>
|
||||
|
||||
<p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub
|
||||
@@ -251,7 +251,7 @@ startActivity(intent);
|
||||
|
||||
<p>Ekstra {@link android.content.Intent#EXTRA_EMAIL} yang ditambahkan ke intent adalah sebuah larik string
|
||||
alamat email yang menjadi tujuan pengiriman email. Bila aplikasi email merespons intent ini,
|
||||
aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to"
|
||||
aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to"
|
||||
pada formulir penulisan email. Dalam situasi ini, aktivitas aplikasi email dimulai dan bila
|
||||
pengguna selesai, aktivitas Anda akan dilanjutkan.</p>
|
||||
|
||||
@@ -297,7 +297,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
</pre>
|
||||
|
||||
<p>Contoh ini menunjukkan logika dasar yang harus Anda gunakan dalam metode {@link
|
||||
android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani
|
||||
android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani
|
||||
hasil aktivitas. Syarat pertama memeriksa apakah permintaan berhasil—jika ya, maka
|
||||
{@code resultCode} akan berupa {@link android.app.Activity#RESULT_OK}—dan apakah permintaan
|
||||
yang direspons hasil ini dikenal—dalam hal ini, {@code requestCode} cocok dengan
|
||||
@@ -602,19 +602,19 @@ tidak berubah. Sebagai gantinya, sistem harus membuat ulang objek {@link android
|
||||
menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari
|
||||
bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin
|
||||
mengharapkan aktivitas untuk sama persis dengan sebelumnya. Dalam situasi ini, Anda bisa memastikan bahwa
|
||||
informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan
|
||||
informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan
|
||||
metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link
|
||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
|
||||
|
||||
<p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
|
||||
sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini
|
||||
sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan
|
||||
sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan
|
||||
informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link
|
||||
android.os.Bundle#putString putString()} dan {@link
|
||||
android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda
|
||||
dan pengguna menyusuri kembali ke aktivitas tersebut, sistem akan membuat kembali aktivitas dan meneruskan
|
||||
{@link android.os.Bundle} ke {@link android.app.Activity#onCreate onCreate()} maupun {@link
|
||||
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu
|
||||
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu
|
||||
metode ini, Anda bisa mengekstrak status tersimpan dari {@link android.os.Bundle} dan memulihkan
|
||||
status aktivitas. Jika tidak ada informasi status untuk dipulihkan, maka {@link
|
||||
android.os.Bundle} yang diteruskan kepada adalah Anda null (yang akan terjadi bila aktivitas dibuat untuk
|
||||
@@ -639,7 +639,7 @@ onPause()}.</p>
|
||||
<p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link
|
||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
|
||||
akan dipulihkan oleh implementasi default {@link
|
||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya,
|
||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya,
|
||||
implementasi default akan memanggil metode {@link
|
||||
android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@link
|
||||
android.view.View} dalam layout, yang memungkinkan setiap tampilan untuk memberi informasi tentang dirinya
|
||||
@@ -696,7 +696,7 @@ menggunakan aplikasi.</p>
|
||||
, dan bahasa). Bila terjadi perubahan demikian, Android akan membuat kembali aktivitas yang berjalan
|
||||
(sistem akan memanggil {@link android.app.Activity#onDestroy}, kemudian segera memanggil {@link
|
||||
android.app.Activity#onCreate onCreate()}). Perilaku ini
|
||||
didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang
|
||||
didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang
|
||||
aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk
|
||||
layar orientasi dan ukuran yang berbeda).</p>
|
||||
|
||||
@@ -722,7 +722,7 @@ Perubahan Runtime</a>.</p>
|
||||
akan berhenti sementara dan berhenti sama sekali (walau tidak akan berhenti jika masih terlihat di latar belakang), saat
|
||||
aktivitas lain dibuat. Jika aktivitas-aktivitas ini berbagi data yang disimpan ke disk atau di tempat lain, Anda perlu
|
||||
memahami bahwa aktivitas pertama tidak dihentikan sepenuhnya sebelum aktivitas kedua dibuat.
|
||||
Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian
|
||||
Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian
|
||||
aktivitas pertama.</p>
|
||||
|
||||
<p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam
|
||||
|
||||
@@ -137,7 +137,7 @@ mendefinisikan {@link android.os.Handler} yang akan merespons aneka tipe objek {
|
||||
android.os.Message}. {@link android.os.Handler}
|
||||
ini adalah dasar bagi {@link android.os.Messenger} yang nanti bisa berbagi {@link android.os.IBinder}
|
||||
dengan klien, sehingga memungkinkan klien mengirim perintah ke layanan dengan menggunakan objek {@link
|
||||
android.os.Message}. Selain itu, klien bisa mendefinisikan sendiri {@link android.os.Messenger}
|
||||
android.os.Message}. Selain itu, klien bisa mendefinisikan sendiri {@link android.os.Messenger}
|
||||
sehingga layanan bisa mengirim balik pesan.
|
||||
<p>Inilah cara termudah melakukan komunikasi antarproses (IPC), karena {@link
|
||||
android.os.Messenger} akan mengantre semua permintaan ke dalam satu thread sehingga Anda tidak perlu mendesain
|
||||
@@ -539,7 +539,7 @@ selengkapnya di bawah ini.)</p>
|
||||
</ol>
|
||||
|
||||
<p>Misalnya, cuplikan berikut menghubungkan klien ke layanan yang dibuat di atas dengan
|
||||
<a href="#Binder">memperluas kelas Binder</a>, sehingga tinggal mengkonversi
|
||||
<a href="#Binder">memperluas kelas Binder</a>, sehingga tinggal mengkonversi
|
||||
{@link android.os.IBinder} yang dihasilkan ke kelas {@code LocalService} dan meminta instance {@code
|
||||
LocalService}:</p>
|
||||
|
||||
@@ -573,7 +573,7 @@ bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
|
||||
</pre>
|
||||
|
||||
<ul>
|
||||
<li>Parameter pertama {@link android.content.Context#bindService bindService()} adalah sebuah
|
||||
<li>Parameter pertama {@link android.content.Context#bindService bindService()} adalah sebuah
|
||||
{@link android.content.Intent} yang secara eksplisit menyebutkan layanan yang akan diikat (walaupun intent
|
||||
boleh implisit).</li>
|
||||
<li>Parameter kedua adalah objek {@link android.content.ServiceConnection}.</li>
|
||||
|
||||
@@ -36,7 +36,7 @@ parent.link=activities.html
|
||||
<li>{@link android.app.FragmentManager}</li>
|
||||
<li>{@link android.app.FragmentTransaction}</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Lihat juga</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}training/basics/fragments/index.html">Membangun UI Dinamis dengan Fragmen</a></li>
|
||||
@@ -47,32 +47,32 @@ dan Handset</a></li>
|
||||
</div>
|
||||
|
||||
<p>{@link android.app.Fragment} mewakili perilaku atau bagian dari antarmuka pengguna dalam
|
||||
{@link android.app.Activity}. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas untuk membangun UI
|
||||
multipanel dan menggunakan kembali sebuah fragmen dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian
|
||||
modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian input sendiri, dan
|
||||
yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang
|
||||
{@link android.app.Activity}. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas untuk membangun UI
|
||||
multipanel dan menggunakan kembali sebuah fragmen dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian
|
||||
modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian input sendiri, dan
|
||||
yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang
|
||||
bisa digunakan kembali dalam aktivitas berbeda).</p>
|
||||
|
||||
<p>Fragmen harus selalu tertanam dalam aktivitas dan daur hidup fragmen secara langsung
|
||||
<p>Fragmen harus selalu tertanam dalam aktivitas dan daur hidup fragmen secara langsung
|
||||
dipengaruhi oleh daur hidup aktivitas host-nya. Misalnya, saat aktivitas dihentikan sementara,
|
||||
semua fragmen di dalamnya juga dihentikan sementara, dan bila aktivitas dimusnahkan, semua fragmen juga demikian. Akan tetapi, saat
|
||||
aktivitas berjalan (dalam <a href="{@docRoot}guide/components/activities.html#Lifecycle">status daur hidup</a> <em>dilanjutkan</em>, Anda bisa
|
||||
memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi
|
||||
aktivitas berjalan (dalam <a href="{@docRoot}guide/components/activities.html#Lifecycle">status daur hidup</a> <em>dilanjutkan</em>, Anda bisa
|
||||
memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi
|
||||
fragmen, Anda juga bisa menambahkannya ke back-stack yang dikelola oleh aktivitas
|
||||
—setiap entri back-stack merupakan record transaksi fragmen yang
|
||||
—setiap entri back-stack merupakan record transaksi fragmen yang
|
||||
terjadi. Dengan back-stack pengguna dapat membalikkan transaksi fragmen (mengarah mundur),
|
||||
dengan menekan tombol <em>Back</em>.</p>
|
||||
|
||||
<p>Bila Anda menambahkan fragmen sebagai bagian dari layout aktivitas, fragmen itu berada dalam {@link
|
||||
android.view.ViewGroup} di hierarki tampilan aktivitas tersebut dan fragmen mendefinisikan
|
||||
android.view.ViewGroup} di hierarki tampilan aktivitas tersebut dan fragmen mendefinisikan
|
||||
layout
|
||||
tampilannya sendiri. Anda bisa menyisipkan fragmen ke dalam layout aktivitas dengan mendeklarasikan fragmen dalam file layout aktivitas
|
||||
, sebagai elemen {@code <fragment>}, atau dari kode aplikasi dengan menambahkannya ke
|
||||
{@link android.view.ViewGroup} yang ada. Akan tetapi, fragmen tidak harus menjadi bagian dari
|
||||
layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk
|
||||
{@link android.view.ViewGroup} yang ada. Akan tetapi, fragmen tidak harus menjadi bagian dari
|
||||
layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk
|
||||
aktivitas tersebut.</p>
|
||||
|
||||
<p>Dokumen ini menjelaskan cara membangun aplikasi menggunakan fragmen, termasuk
|
||||
<p>Dokumen ini menjelaskan cara membangun aplikasi menggunakan fragmen, termasuk
|
||||
cara fragmen mempertahankan statusnya bila ditambahkan ke back-stack aktivitas, berbagi
|
||||
kejadian dengan aktivitas, dan fragmen lain dalam aktivitas, berkontribusi pada action-bar
|
||||
aktivitas, dan lainnya.</p>
|
||||
@@ -80,45 +80,45 @@ aktivitas, dan lainnya.</p>
|
||||
|
||||
<h2 id="Design">Filosofi Desain</h2>
|
||||
|
||||
<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih
|
||||
dinamis dan fleksibel pada layar besar, seperti tablet. Karena
|
||||
layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan
|
||||
bertukar komponen UI. Fragmen memungkinkan desain seperti itu tanpa perlu mengelola perubahan
|
||||
kompleks pada hierarki tampilan. Dengan membagi layout aktivitas menjadi beberapa fragmen, Anda bisa
|
||||
mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack
|
||||
<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih
|
||||
dinamis dan fleksibel pada layar besar, seperti tablet. Karena
|
||||
layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan
|
||||
bertukar komponen UI. Fragmen memungkinkan desain seperti itu tanpa perlu mengelola perubahan
|
||||
kompleks pada hierarki tampilan. Dengan membagi layout aktivitas menjadi beberapa fragmen, Anda bisa
|
||||
mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack
|
||||
yang dikelola oleh aktivitas.</p>
|
||||
|
||||
<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di
|
||||
sebelah kiri dan fragmen lainnya untuk menampilkan artikel di sebelah kanan—kedua fragmen ini muncul di satu
|
||||
aktivitas, berdampingan, dan masing-masing fragmen memiliki serangkaian metode callback daur hidup dan menangani kejadian input
|
||||
<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di
|
||||
sebelah kiri dan fragmen lainnya untuk menampilkan artikel di sebelah kanan—kedua fragmen ini muncul di satu
|
||||
aktivitas, berdampingan, dan masing-masing fragmen memiliki serangkaian metode callback daur hidup dan menangani kejadian input
|
||||
penggunanya sendiri. Sehingga, sebagai ganti menggunakan satu aktivitas untuk memilih
|
||||
artikel dan aktivitas lainnya untuk membaca artikel, pengguna bisa memilih artikel dan membaca semuanya dalam
|
||||
artikel dan aktivitas lainnya untuk membaca artikel, pengguna bisa memilih artikel dan membaca semuanya dalam
|
||||
aktivitas yang sama, sebagaimana diilustrasikan dalam layout tablet pada gambar 1.</p>
|
||||
|
||||
<p>Anda harus mendesain masing-masing fragmen sebagai komponen aktivitas modular dan bisa digunakan kembali. Yakni, karena
|
||||
setiap fragmen mendefinisikan layoutnya dan perilakunya dengan callback daur hidupnya sendiri, Anda bisa memasukkan
|
||||
<p>Anda harus mendesain masing-masing fragmen sebagai komponen aktivitas modular dan bisa digunakan kembali. Yakni, karena
|
||||
setiap fragmen mendefinisikan layoutnya dan perilakunya dengan callback daur hidupnya sendiri, Anda bisa memasukkan
|
||||
satu fragmen dalam banyak aktivitas, sehingga Anda harus mendesainnya untuk digunakan kembali dan mencegah
|
||||
memanipulasi satu fragmen dari fragmen lain secara langsung. Ini terutama penting karena dengan
|
||||
fragmen modular Anda bisa mengubah kombinasi fragmen untuk ukuran layar berbeda. Saat mendesain aplikasi
|
||||
untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam
|
||||
memanipulasi satu fragmen dari fragmen lain secara langsung. Ini terutama penting karena dengan
|
||||
fragmen modular Anda bisa mengubah kombinasi fragmen untuk ukuran layar berbeda. Saat mendesain aplikasi
|
||||
untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam
|
||||
konfigurasi layout berbeda untuk mengoptimalkan pengalaman pengguna berdasarkan ruang layar yang tersedia. Misalnya
|
||||
, pada handset, fragmen mungkin perlu dipisahkan untuk menyediakan UI panel tunggal
|
||||
, pada handset, fragmen mungkin perlu dipisahkan untuk menyediakan UI panel tunggal
|
||||
bila lebih dari satu yang tidak cocok dalam aktivitas yang sama.</p>
|
||||
|
||||
<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
|
||||
<p class="img-caption"><strong>Gambar 1.</strong> Contoh cara dua modul UI yang didefinisikan oleh
|
||||
fragmen bisa digabungkan ke dalam satu aktivitas untuk desain tablet, namun dipisahkan untuk
|
||||
fragmen bisa digabungkan ke dalam satu aktivitas untuk desain tablet, namun dipisahkan untuk
|
||||
desain handset.</p>
|
||||
|
||||
<p>Misalnya—untuk melanjutkan contoh aplikasi berita— aplikasi bisa menanamkan
|
||||
dua fragmen dalam <em>Aktivitas A</em>, saat berjalan pada perangkat berukuran tablet. Akan tetapi, pada
|
||||
layar berukuran handset, ruang untuk kedua fragmen tidak cukup, sehingga <em>Aktivitas A</em> hanya
|
||||
menyertakan fragmen untuk daftar artikel, dan saat pengguna memilih artikel,
|
||||
<em>Aktivitas B</em> akan dimulai, termasuk fragmen kedua untuk membaca artikel. Sehingga, aplikasi mendukung
|
||||
layar berukuran handset, ruang untuk kedua fragmen tidak cukup, sehingga <em>Aktivitas A</em> hanya
|
||||
menyertakan fragmen untuk daftar artikel, dan saat pengguna memilih artikel,
|
||||
<em>Aktivitas B</em> akan dimulai, termasuk fragmen kedua untuk membaca artikel. Sehingga, aplikasi mendukung
|
||||
tablet dan handset dengan menggunakan kembali fragmen dalam kombinasi berbeda, seperti diilustrasikan dalam
|
||||
gambar 1.</p>
|
||||
|
||||
<p>Untuk informasi selengkapnya tentang mendesain aplikasi menggunakan kombinasi fragmen berbeda
|
||||
<p>Untuk informasi selengkapnya tentang mendesain aplikasi menggunakan kombinasi fragmen berbeda
|
||||
untuk konfigurasi layar berbeda, lihat panduan untuk <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Mendukung Tablet dan Handset</a>.</p>
|
||||
|
||||
|
||||
@@ -131,26 +131,26 @@ untuk konfigurasi layar berbeda, lihat panduan untuk <a href="{@docRoot}guide/pr
|
||||
aktivitasnya berjalan).</p>
|
||||
</div>
|
||||
|
||||
<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau
|
||||
subkelasnya yang ada). Kelas {@link android.app.Fragment} memiliki kode yang mirip seperti
|
||||
<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau
|
||||
subkelasnya yang ada). Kelas {@link android.app.Fragment} memiliki kode yang mirip seperti
|
||||
{@link android.app.Activity}. Kelas ini memiliki metode callback yang serupa dengan aktivitas, seperti
|
||||
{@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
|
||||
{@link android.app.Fragment#onPause onPause()}, dan {@link android.app.Fragment#onStop onStop()}. Sebenarnya
|
||||
, jika Anda mengkonversi aplikasi Android saat ini untuk menggunakan fragmen, Anda mungkin cukup memindahkan
|
||||
kode dari metode callback aktivitas ke masing-masing metode callback
|
||||
kode dari metode callback aktivitas ke masing-masing metode callback
|
||||
fragmen.</p>
|
||||
|
||||
<p>Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:</p>
|
||||
|
||||
<dl>
|
||||
<dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
|
||||
<dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
|
||||
menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen
|
||||
<dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
|
||||
menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen
|
||||
dihentikan sementara atau dihentikan, kemudian dilanjutkan.</dd>
|
||||
<dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
|
||||
<dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya
|
||||
untuk yang pertama kali. Untuk menggambar UI fragmen, Anda harus mengembalikan {@link android.view.View} dari metode
|
||||
ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika
|
||||
<dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya
|
||||
untuk yang pertama kali. Untuk menggambar UI fragmen, Anda harus mengembalikan {@link android.view.View} dari metode
|
||||
ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika
|
||||
fragmen tidak menyediakan UI.</dd>
|
||||
<dt>{@link android.app.Activity#onPause onPause()}</dt>
|
||||
<dd>Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang meninggalkan
|
||||
@@ -161,7 +161,7 @@ pengguna mungkin tidak kembali).</dd>
|
||||
|
||||
<p>Kebanyakan aplikasi harus mengimplementasikan setidaknya tiga metode ini untuk setiap fragmen, namun ada
|
||||
beberapa metode callback lain yang juga harus Anda gunakan untuk menangani berbagai tahap
|
||||
daur hidup fragmen. Semua metode callback daur hidup akan dibahas secara lebih detail, di bagian
|
||||
daur hidup fragmen. Semua metode callback daur hidup akan dibahas secara lebih detail, di bagian
|
||||
tentang <a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>.</p>
|
||||
|
||||
|
||||
@@ -171,15 +171,15 @@ android.app.Fragment}:</p>
|
||||
<dl>
|
||||
<dt>{@link android.app.DialogFragment}</dt>
|
||||
<dd>Menampilkan dialog mengambang. Penggunaan kelas ini untuk membuat dialog merupakan alternatif yang baik dari
|
||||
penggunaan metode helper dialog di kelas {@link android.app.Activity}, karena Anda bisa
|
||||
menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas,
|
||||
penggunaan metode helper dialog di kelas {@link android.app.Activity}, karena Anda bisa
|
||||
menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas,
|
||||
sehingga pengguna bisa kembali ke fragmen yang ditinggalkan.</dd>
|
||||
|
||||
<dt>{@link android.app.ListFragment}</dt>
|
||||
<dd>Menampilkan daftar item yang dikelola oleh adaptor (seperti {@link
|
||||
android.widget.SimpleCursorAdapter}), serupa dengan {@link android.app.ListActivity}. Menampilkan
|
||||
beberapa metode pengelolaan daftar tampilan seperti callback {@link
|
||||
android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} untuk
|
||||
android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} untuk
|
||||
menangani kejadian klik.</dd>
|
||||
|
||||
<dt>{@link android.preference.PreferenceFragment}</dt>
|
||||
@@ -196,7 +196,7 @@ layoutnya sendiri ke aktivitas.</p>
|
||||
|
||||
<p>Untuk menyediakan layout fragmen, Anda harus mengimplementasikan metode callback {@link
|
||||
android.app.Fragment#onCreateView onCreateView()}, yang dipanggil sistem Android
|
||||
bila tiba saatnya fragmen menggambar layoutnya. Implementasi Anda atas metode ini harus mengembalikan
|
||||
bila tiba saatnya fragmen menggambar layoutnya. Implementasi Anda atas metode ini harus mengembalikan
|
||||
{@link android.view.View} yang menjadi akar layout fragmen.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Jika fragmen adalah subkelas {@link
|
||||
@@ -205,7 +205,7 @@ android.app.ListFragment}, implementasi default akan mengembalikan {@link androi
|
||||
|
||||
<p>Untuk mengembalikan layout dari {@link
|
||||
android.app.Fragment#onCreateView onCreateView()}, Anda bisa memekarkannya dari <a href="{@docRoot}guide/topics/resources/layout-resource.html">sumber daya layout</a> yang didefinisikan di XML. Untuk
|
||||
membantu melakukannya, {@link android.app.Fragment#onCreateView onCreateView()} menyediakan objek
|
||||
membantu melakukannya, {@link android.app.Fragment#onCreateView onCreateView()} menyediakan objek
|
||||
{@link android.view.LayoutInflater}.</p>
|
||||
|
||||
<p>Misalnya, ini adalah subkelas {@link android.app.Fragment} yang memuat layout dari file
|
||||
@@ -227,7 +227,7 @@ public static class ExampleFragment extends Fragment {
|
||||
<h3>Membuat layout</h3>
|
||||
<p>Dalam contoh di atas, {@code R.layout.example_fragment} merupakan acuan ke sumber daya layout
|
||||
bernama {@code example_fragment.xml} yang tersimpan dalam sumber daya aplikasi. Untuk informasi tentang cara
|
||||
membuat layout di XML, lihat dokumentasi
|
||||
membuat layout di XML, lihat dokumentasi
|
||||
<a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -235,12 +235,12 @@ membuat layout di XML, lihat dokumentasi
|
||||
<p>Parameter {@code container} yang diteruskan ke {@link android.app.Fragment#onCreateView
|
||||
onCreateView()} adalah induk {@link android.view.ViewGroup} (dari layout aktivitas) tempat
|
||||
layout fragmen
|
||||
akan disisipkan. Parameter {@code savedInstanceState} adalah {@link android.os.Bundle} yang
|
||||
akan disisipkan. Parameter {@code savedInstanceState} adalah {@link android.os.Bundle} yang
|
||||
menyediakan data tentang instance fragmen sebelumnya, jika fragmen dilanjutkan
|
||||
(status pemulihan dibahas selengkapnya di bagian tentang <a href="#Lifecycle">Menangani
|
||||
Daur Hidup Fragmen</a>).</p>
|
||||
|
||||
<p>Metode {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} membutuhkan
|
||||
<p>Metode {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} membutuhkan
|
||||
tiga argumen:</p>
|
||||
<ul>
|
||||
<li>ID sumber daya layout yang ingin dimekarkan.</li>
|
||||
@@ -260,7 +260,7 @@ fragmen ke aktivitas.</p>
|
||||
|
||||
<h3 id="Adding">Menambahkan fragmen ke aktivitas</h3>
|
||||
|
||||
<p>Biasanya, fragmen berkontribusi pada sebagian UI ke aktivitas host, yang ditanamkan sebagai
|
||||
<p>Biasanya, fragmen berkontribusi pada sebagian UI ke aktivitas host, yang ditanamkan sebagai
|
||||
bagian dari hierarki tampilan keseluruhan aktivitas. Ada dua cara untuk menambahkan fragmen ke layout
|
||||
aktivitas:</p>
|
||||
|
||||
@@ -297,13 +297,13 @@ untuk mengambil setiap fragmen. Sistem akan menyisipkan {@link android.view.View
|
||||
|
||||
<div class="note">
|
||||
<p><strong>Catatan:</strong> Setiap fragmen memerlukan identifier
|
||||
unik yang bisa digunakan sistem untuk memulihkan fragmen jika aktivitas dimulai kembali (dan identifier yang bisa digunakan menangkap
|
||||
unik yang bisa digunakan sistem untuk memulihkan fragmen jika aktivitas dimulai kembali (dan identifier yang bisa digunakan menangkap
|
||||
fragmen untuk melakukan transaksi, seperti menghapusnya). Ada tiga cara untuk memberikan
|
||||
ID bagi fragmen:</p>
|
||||
<ul>
|
||||
<li>Memberikan atribut {@code android:id} bersama ID unik.</li>
|
||||
<li>Memberikan atribut {@code android:tag} bersama string unik.</li>
|
||||
<li>Jika Anda tidak memberikan dua hal tersebut, sistem akan menggunakan ID
|
||||
<li>Jika Anda tidak memberikan dua hal tersebut, sistem akan menggunakan ID
|
||||
tampilan kontainer.</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -354,15 +354,15 @@ android.app.FragmentTransaction#add(Fragment,String)} (dengan menyediakan string
|
||||
dalam layout aktivitas, ini tidak akan menerima panggilan ke {@link
|
||||
android.app.Fragment#onCreateView onCreateView()}. Jadi Anda tidak perlu mengimplementasikan metode itu.</p>
|
||||
|
||||
<p>Menyediakan tag string untuk fragmen tidak hanya untuk fragmen non-UI—Anda juga bisa
|
||||
<p>Menyediakan tag string untuk fragmen tidak hanya untuk fragmen non-UI—Anda juga bisa
|
||||
menyediakan tag string untuk fragmen yang memiliki UI—namun jika fragmen tidak memiliki UI
|
||||
, maka tag string adalah satu-satunya cara untuk mengidentifikasinya. Jika Anda ingin mendapatkan fragmen dari
|
||||
, maka tag string adalah satu-satunya cara untuk mengidentifikasinya. Jika Anda ingin mendapatkan fragmen dari
|
||||
aktivitas nantinya, Anda perlu menggunakan {@link android.app.FragmentManager#findFragmentByTag
|
||||
findFragmentByTag()}.</p>
|
||||
|
||||
<p>Untuk contoh aktivitas yang menggunakan fragmen sebagai pekerja latar belakang, tanpa UI, lihat sampel {@code
|
||||
FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui
|
||||
Android SDK Manager) dan terletak di sistem Anda sebagai
|
||||
FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui
|
||||
Android SDK Manager) dan terletak di sistem Anda sebagai
|
||||
<code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p>
|
||||
|
||||
|
||||
@@ -378,7 +378,7 @@ mendapatkannya, panggil {@link android.app.Activity#getFragmentManager()} dari a
|
||||
<li>Dapatkan fragmen yang ada di aktivitas dengan {@link
|
||||
android.app.FragmentManager#findFragmentById findFragmentById()} (untuk fragmen yang menyediakan UI dalam
|
||||
layout aktivitas) atau {@link android.app.FragmentManager#findFragmentByTag
|
||||
findFragmentByTag()} (untuk fragmen yang menyediakan atau tidak menyediakan UI).</li>
|
||||
findFragmentByTag()} (untuk fragmen yang menyediakan atau tidak menyediakan UI).</li>
|
||||
<li>Tarik fragmen dari back-stack, dengan {@link
|
||||
android.app.FragmentManager#popBackStack()} (mensimulasikan perintah <em>Back</em> oleh pengguna).</li>
|
||||
<li>Daftarkan listener untuk perubahan pada back-stack, dengan {@link
|
||||
@@ -395,7 +395,7 @@ menambah dan menghapus fragmen.</p>
|
||||
|
||||
<h2 id="Transactions">Melakukan Transaksi Fragmen</h2>
|
||||
|
||||
<p>Fitur menarik terkait penggunaan fragmen di aktivitas adalah kemampuan menambah, menghapus, mengganti,
|
||||
<p>Fitur menarik terkait penggunaan fragmen di aktivitas adalah kemampuan menambah, menghapus, mengganti,
|
||||
dan melakukan tindakan lain dengannya, sebagai respons atas interaksi pengguna. Setiap set perubahan
|
||||
yang Anda lakukan untuk aktivitas disebut transaksi dan Anda bisa melakukan transaksi menggunakan API di {@link
|
||||
android.app.FragmentTransaction}. Anda juga bisa menyimpan setiap transaksi ke back-stack yang dikelola
|
||||
@@ -423,7 +423,7 @@ android.app.FragmentTransaction#addToBackStack addToBackStack()}, untuk menambah
|
||||
ke back-stack dari transaksi fragmen. Back-stack ini dikelola oleh aktivitas dan memungkinkan
|
||||
pengguna kembali ke status fragmen sebelumnya, dengan menekan tombol <em>Back</em>.</p>
|
||||
|
||||
<p>Misalnya, berikut ini cara mengganti satu fragmen dengan yang fragmen yang lain, dan mempertahankan
|
||||
<p>Misalnya, berikut ini cara mengganti satu fragmen dengan yang fragmen yang lain, dan mempertahankan
|
||||
status sebelumnya di back-stack:</p>
|
||||
|
||||
<pre>
|
||||
@@ -442,18 +442,18 @@ transaction.commit();
|
||||
|
||||
<p>Dalam contoh ini, {@code newFragment} menggantikan fragmen apa saja (jika ada) yang saat ini berada dalam
|
||||
kontainer layout yang diidentifikasi oleh ID {@code R.id.fragment_container}. Dengan memanggil @link
|
||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti
|
||||
disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen
|
||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti
|
||||
disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen
|
||||
sebelumnya dengan menekan tombol <em>Back</em>.</p>
|
||||
|
||||
<p>Jika Anda menambahkan beberapa perubahan pada transaksi (seperti {@link
|
||||
android.app.FragmentTransaction#add add()} atau {@link android.app.FragmentTransaction#remove
|
||||
remove()}) dan panggil {@link
|
||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan
|
||||
sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke
|
||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan
|
||||
sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke
|
||||
back-stack sebagai satu transaksi dan tombol <em>Back</em> akan membalikannya semua.</p>
|
||||
|
||||
<p>Urutan menambahkan perubahan pada {@link android.app.FragmentTransaction} tidak berpengaruh,
|
||||
<p>Urutan menambahkan perubahan pada {@link android.app.FragmentTransaction} tidak berpengaruh,
|
||||
kecuali:</p>
|
||||
<ul>
|
||||
<li>Anda harus memanggil {@link android.app.FragmentTransaction#commit()} paling akhir</li>
|
||||
@@ -462,9 +462,9 @@ urutan penambahannya akan menentukan urutan munculnya dalam hierarki tampilan</l
|
||||
</ul>
|
||||
|
||||
<p>Jika Anda tidak memanggil {@link android.app.FragmentTransaction#addToBackStack(String)
|
||||
addToBackStack()} saat melakukan transaksi yang menghapus fragmen, maka fragmen itu
|
||||
addToBackStack()} saat melakukan transaksi yang menghapus fragmen, maka fragmen itu
|
||||
akan dimusnahkan bila transaksi diikat dan pengguna tidak bisa mengarah kembali ke sana. Sedangkan, jika
|
||||
Anda memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} saat
|
||||
Anda memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} saat
|
||||
menghapus fragmen, maka fragmen itu akan <em>dihentikan</em> dan akan dilanjutkan jika pengguna mengarah
|
||||
kembali.</p>
|
||||
|
||||
@@ -473,9 +473,9 @@ transisi, dengan memanggil {@link android.app.FragmentTransaction#setTransition
|
||||
mengikatnya.</p>
|
||||
|
||||
<p>Memanggil {@link android.app.FragmentTransaction#commit()} tidak akan langsung menjalankan
|
||||
transaksi. Namun sebuah jadwal akan dibuat untuk dijalankan pada thread UI aktivitas (thread "utama")
|
||||
transaksi. Namun sebuah jadwal akan dibuat untuk dijalankan pada thread UI aktivitas (thread "utama")
|
||||
begitu thread bisa melakukannya. Akan tetapi, jika perlu Anda bisa memanggil {@link
|
||||
android.app.FragmentManager#executePendingTransactions()} dari thread UI untuk segera
|
||||
android.app.FragmentManager#executePendingTransactions()} dari thread UI untuk segera
|
||||
mengeksekusi transaksi yang diserahkan oleh {@link android.app.FragmentTransaction#commit()}. Hal itu
|
||||
biasanya tidak perlu kecuali jika transaksi merupakan dependensi bagi pekerjaan dalam thread lain.</p>
|
||||
|
||||
@@ -503,7 +503,7 @@ android.app.Fragment#getActivity()} dan dengan mudah melakukan tugas-tugas seper
|
||||
View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
|
||||
</pre>
|
||||
|
||||
<p>Demikian pula, aktivitas Anda bisa memanggil metode di fragmen dengan meminta acuan ke
|
||||
<p>Demikian pula, aktivitas Anda bisa memanggil metode di fragmen dengan meminta acuan ke
|
||||
{@link android.app.Fragment} dari {@link android.app.FragmentManager}, menggunakan {@link
|
||||
android.app.FragmentManager#findFragmentById findFragmentById()} atau {@link
|
||||
android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Misalnya:</p>
|
||||
@@ -537,7 +537,7 @@ public static class FragmentA extends ListFragment {
|
||||
</pre>
|
||||
|
||||
<p>Selanjutnya aktivitas yang menjadi host fragmen akan mengimplementasikan antarmuka {@code OnArticleSelectedListener}
|
||||
dan
|
||||
dan
|
||||
mengesampingkan {@code onArticleSelected()} untuk memberi tahu fragmen B mengenai kejadian dari fragmen A. Untuk memastikan
|
||||
bahwa aktivitas host mengimplementasikan antarmuka ini, metode callback fragmen A {@link
|
||||
android.app.Fragment#onAttach onAttach()} (yang dipanggil sistem saat menambahkan
|
||||
@@ -564,7 +564,7 @@ public static class FragmentA extends ListFragment {
|
||||
|
||||
<p>Jika aktivitas belum mengimplementasikan antarmuka, maka fragmen akan melontarkan
|
||||
{@link java.lang.ClassCastException}.
|
||||
Jika berhasil, anggota {@code mListener} yang menyimpan acuan ke implementasi aktivitas
|
||||
Jika berhasil, anggota {@code mListener} yang menyimpan acuan ke implementasi aktivitas
|
||||
{@code OnArticleSelectedListener}, sehingga fragmen A bisa berbagi kejadian dengan aktivitas, dengan memanggil metode
|
||||
yang didefinisikan oleh antarmuka {@code OnArticleSelectedListener}. Misalnya, jika fragmen A adalah
|
||||
ekstensi dari {@link android.app.ListFragment}, maka setiap kali
|
||||
@@ -654,7 +654,7 @@ seluruh layar).</dd>
|
||||
<dt><i>Dihentikan</i></dt>
|
||||
<dd>Fragmen tidak terlihat. Aktivitas host telah dihentikan atau
|
||||
fragmen telah dihapus dari aktivitas namun ditambahkan ke back-stack. Fragmen yang dihentikan
|
||||
masih hidup (semua status dan informasi anggota masih disimpan oleh sistem). Akan tetapi, fragmen
|
||||
masih hidup (semua status dan informasi anggota masih disimpan oleh sistem). Akan tetapi, fragmen
|
||||
tidak terlihat lagi oleh pengguna dan akan dimatikan jika aktivitas dimatikan.</dd>
|
||||
</dl>
|
||||
|
||||
@@ -668,10 +668,10 @@ android.app.Fragment#onActivityCreated onActivityCreated()}. Untuk informasi sel
|
||||
status, lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>
|
||||
.</p>
|
||||
|
||||
<p>Perbedaan paling signifikan dalam daur hidup antara aktivitas dan fragmen ada
|
||||
<p>Perbedaan paling signifikan dalam daur hidup antara aktivitas dan fragmen ada
|
||||
pada cara penyimpanannya dalam back-stack masing-masing. Aktivitas ditempatkan ke back-stack aktivitas
|
||||
yang dikelola oleh sistem saat dihentikan, secara default (sehingga pengguna bisa mengarah kembali
|
||||
ke aktivitas dengan tombol <em>Back</em>, seperti yang dibahas dalam <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan Back-Stack</a>).
|
||||
ke aktivitas dengan tombol <em>Back</em>, seperti yang dibahas dalam <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan Back-Stack</a>).
|
||||
Akan tetapi, fragmen yang ditempatkan ke back-stack dikelola oleh aktivitas host hanya saat
|
||||
Anda secara eksplisit meminta agar instance disimpan dengan memanggil {@link
|
||||
android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} selama transaksi yang
|
||||
@@ -736,7 +736,7 @@ melalui daur hidupnya oleh aktivitas.</p>
|
||||
<p>Untuk merangkum semua yang telah dibahas dalam dokumen ini, berikut ini contoh aktivitas
|
||||
yang menggunakan dua fragmen untuk membuat layout dua panel. Aktivitas di bawah ini menyertakan satu fragmen untuk
|
||||
menampilkan daftar putar Shakespeare dan fragmen lainnya menampilkan rangkuman pemutaran bila dipilih dari
|
||||
daftar. Aktivitas ini juga menunjukkan cara menyediakan konfigurasi fragmen berbeda,
|
||||
daftar. Aktivitas ini juga menunjukkan cara menyediakan konfigurasi fragmen berbeda,
|
||||
berdasarkan konfigurasi layar.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Kode sumber lengkap untuk aktivitas ini tersedia di
|
||||
@@ -752,7 +752,7 @@ android.app.Activity#onCreate onCreate()}:</p>
|
||||
|
||||
{@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout}
|
||||
|
||||
<p>Dengan layout ini, sistem akan membuat instance {@code TitlesFragment} (yang mencantumkan
|
||||
<p>Dengan layout ini, sistem akan membuat instance {@code TitlesFragment} (yang mencantumkan
|
||||
judul) segera setelah aktivitas memuat layout, sementara {@link android.widget.FrameLayout}
|
||||
(lokasi penempatan fragmen untuk menampilkan rangkuman pemutaran) menempati ruang di sisi kanan
|
||||
layar, namun pada awalnya masih kosong. Seperti yang akan Anda lihat di bawah ini, sampai pengguna memilih item
|
||||
@@ -769,14 +769,14 @@ tersimpan di {@code res/layout/fragment_layout.xml}:</p>
|
||||
|
||||
<p>Layout ini hanya menyertakan {@code TitlesFragment}. Ini artinya saat perangkat berada dalam
|
||||
orientasi tegak, hanya judul daftar putar yang terlihat. Jadi, saat pengguna mengklik item
|
||||
daftar dalam konfigurasi ini, aplikasi akan memulai aktivitas baru untuk menampilkan rangkuman,
|
||||
daftar dalam konfigurasi ini, aplikasi akan memulai aktivitas baru untuk menampilkan rangkuman,
|
||||
sebagai ganti pemuatan fragmen kedua.</p>
|
||||
|
||||
<p>Berikutnya, Anda bisa melihat bagaimana hal ini dilakukan dalam kelas fragmen. Pertama adalah {@code
|
||||
TitlesFragment}, yang menampilkan judul daftar putar Shakespeare. Fragmen ini membuat ekstensi {@link
|
||||
android.app.ListFragment} dan mengandalkannya itu untuk menangani sebagian besar pekerjaan tampilan daftar.</p>
|
||||
|
||||
<p>Saat Anda memeriksa kode ini, perhatikan bahwa ada dua kemungkinan perilaku saat pengguna mengklik
|
||||
<p>Saat Anda memeriksa kode ini, perhatikan bahwa ada dua kemungkinan perilaku saat pengguna mengklik
|
||||
item daftar: bergantung pada layout mana yang aktif, bisa membuat dan menampilkan fragmen
|
||||
baru untuk menampilkan detail dalam aktivitas yang sama (menambahkan fragmen ke {@link
|
||||
android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditampilkan).</p>
|
||||
@@ -785,11 +785,11 @@ android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditamp
|
||||
|
||||
<p>Fragmen kedua, {@code DetailsFragment} menampilkan rangkuman pemutaran untuk item yang dipilih dari
|
||||
daftar dari {@code TitlesFragment}:</p>
|
||||
|
||||
|
||||
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
|
||||
|
||||
<p>Ingatlah dari kelas {@code TitlesFragment}, bahwa, jika pengguna mengklik item daftar dan
|
||||
layout saat ini <em>tidak</em> menyertakan tampilan {@code R.id.details} (yaitu tempat
|
||||
layout saat ini <em>tidak</em> menyertakan tampilan {@code R.id.details} (yaitu tempat
|
||||
{@code DetailsFragment} berada), maka aplikasi memulai aktivitas {@code DetailsActivity}
|
||||
untuk menampilkan konten item.</p>
|
||||
|
||||
@@ -798,14 +798,14 @@ yang dipilih saat layar dalam orientasi tegak:</p>
|
||||
|
||||
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
|
||||
details_activity}
|
||||
|
||||
|
||||
<p>Perhatikan bahwa aktivitas ini selesai sendiri jika konfigurasi mendatar, sehingga aktivitas utama
|
||||
bisa mengambil alih dan menampilkan {@code DetailsFragment} bersama {@code TitlesFragment}.
|
||||
Ini bisa terjadi jika pengguna memulai {@code DetailsActivity} saat dalam orientasi tegak, namun kemudian
|
||||
memutarnya menjadi mendatar (yang akan memulai lagi aktivitas saat ini).</p>
|
||||
|
||||
|
||||
<p>Untuk contoh lainnya mengenai penggunaan fragmen (dan file sumber lengkap untuk contoh ini),
|
||||
<p>Untuk contoh lainnya mengenai penggunaan fragmen (dan file sumber lengkap untuk contoh ini),
|
||||
lihat aplikasi contoh Demo API yang tersedia di <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
|
||||
ApiDemos</a> (bisa diunduh dari <a href="{@docRoot}resources/samples/get.html">Komponen contoh SDK</a>).</p>
|
||||
|
||||
|
||||
@@ -22,44 +22,44 @@ page.title=Dasar-Dasar Aplikasi
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi
|
||||
<p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi
|
||||
kode Anda—bersama data dan file sumber daya —ke dalam APK: <i>Paket Android</i>,
|
||||
yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten
|
||||
yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten
|
||||
aplikasi Android dan merupakan file yang digunakan perangkat berbasis Android untuk menginstal aplikasi.</p>
|
||||
|
||||
<p>Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri: </p>
|
||||
|
||||
<ul>
|
||||
<li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap
|
||||
<li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap
|
||||
aplikasi adalah pengguna berbeda.</li>
|
||||
|
||||
<li>Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya
|
||||
digunakan oleh sistem dan tidak diketahui aplikasi). Sistem menetapkan izin
|
||||
bagi semua file dalam aplikasi sehingga hanya ID pengguna yang diizinkan yang bisa mengaksesnya. </li>
|
||||
|
||||
<li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari
|
||||
<li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari
|
||||
aplikasi lainnya.</li>
|
||||
|
||||
<li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses
|
||||
<li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses
|
||||
bila ada komponen aplikasi yang perlu dijalankan, kemudian mematikan proses bila tidak lagi diperlukan
|
||||
atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.</li>
|
||||
</ul>
|
||||
|
||||
<p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti,
|
||||
<p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti,
|
||||
secara default aplikasi hanya memiliki akses ke komponen yang diperlukannya untuk melakukan pekerjaannya dan
|
||||
tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian
|
||||
tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian
|
||||
sistem bila tidak diberi izin.</p>
|
||||
|
||||
<p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi
|
||||
untuk mengakses layanan sistem:</p>
|
||||
|
||||
<ul>
|
||||
<li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama,
|
||||
<li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama,
|
||||
dalam hal ini keduanya bisa saling mengakses file masing-masing. Untuk menghemat sumber daya sistem, aplikasi dengan ID
|
||||
pengguna yang sama juga bisa diatur agar berjalan dalam proses Linux yang sama dan menggunakan VM yang sama (
|
||||
aplikasi juga harus ditandatangani dengan sertifikat yang sama).</li>
|
||||
<li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak
|
||||
pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua
|
||||
<li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak
|
||||
pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua
|
||||
izin aplikasi harus diberikan oleh pengguna saat menginstal.</li>
|
||||
</ul>
|
||||
|
||||
@@ -69,7 +69,7 @@ selanjutnya memperkenalkan Anda pada:</p>
|
||||
<li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li>
|
||||
<li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat
|
||||
untuk aplikasi.</li>
|
||||
<li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan
|
||||
<li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan
|
||||
aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
|
||||
</ul>
|
||||
|
||||
@@ -78,8 +78,8 @@ aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
|
||||
<h2 id="Components">Komponen Aplikasi</h2>
|
||||
|
||||
<p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android.
|
||||
Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen
|
||||
merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia
|
||||
Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen
|
||||
merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia
|
||||
sebagai kesatuan sendiri dan memainkan peran tertentu—masing-masing merupakan
|
||||
blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.</p>
|
||||
|
||||
@@ -93,7 +93,7 @@ dan daur hidupnya sendiri yang mendefinisikan cara komponen dibuat dan dimusnahk
|
||||
<dt><b>Aktivitas</b></dt>
|
||||
|
||||
<dd>Sebuah <i>aktivitas</i> mewakili satu layar dengan antarmuka pengguna. Misalnya,
|
||||
aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email
|
||||
aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email
|
||||
baru, aktivitas lain untuk menulis email, dan aktivitas satunya lagi untuk membaca email. Walaupun
|
||||
semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email,
|
||||
masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai
|
||||
@@ -110,7 +110,7 @@ tentang hal ini dalam panduan pengembang <a href="{@docRoot}guide/components/act
|
||||
|
||||
<dd>Sebuah <i>layanan</i> adalah komponen yang berjalan di latar belakang untuk melakukan
|
||||
operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses jarak jauh. Layanan
|
||||
tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara
|
||||
tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara
|
||||
pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa
|
||||
memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai
|
||||
layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya.
|
||||
@@ -125,7 +125,7 @@ pengembang <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p>
|
||||
|
||||
<dd>Sebuah <i>penyedia konten</i> mengelola seperangkat data-bersama aplikasi. Anda bisa menyimpan data
|
||||
dalam sistem file, database SQLite, di web, atau lokasi penyimpanan permanen lainnya
|
||||
yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan
|
||||
yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan
|
||||
memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia
|
||||
konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi
|
||||
dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link
|
||||
@@ -137,7 +137,7 @@ penyedia konten untuk menyimpan catatan.</p>
|
||||
|
||||
<p>Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider}
|
||||
dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi
|
||||
lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang
|
||||
lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang
|
||||
<a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
|
||||
</dd>
|
||||
|
||||
@@ -163,7 +163,7 @@ lihat kelas {@link android.content.BroadcastReceiver}.</p>
|
||||
|
||||
|
||||
|
||||
<p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai
|
||||
<p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai
|
||||
komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil
|
||||
foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi
|
||||
Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk mengambil foto. Anda tidak
|
||||
@@ -175,7 +175,7 @@ kamera seakan menjadi bagian dari aplikasi Anda.</p>
|
||||
<p>Saat sistem memulai komponen, sistem akan memulai proses untuk aplikasi itu (jika
|
||||
belum berjalan) dan membuat instance kelas yang diperlukan untuk komponen. Misalnya, jika aplikasi Anda
|
||||
memulai aktivitas dalam aplikasi kamera yang mengambil foto, aktivitas itu akan
|
||||
berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda.
|
||||
berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda.
|
||||
Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik
|
||||
masuk tunggal (misalnya tidak ada fungsi {@code main()}).</p>
|
||||
|
||||
@@ -198,13 +198,13 @@ atau milik aplikasi lain.</p>
|
||||
mengaktifkan komponen tertentu atau komponen <em>tipe</em> komponen tertentu—masing-masing intent
|
||||
bisa eksplisit atau implisit.</p>
|
||||
|
||||
<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau
|
||||
"mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui
|
||||
oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu
|
||||
<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau
|
||||
"mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui
|
||||
oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu
|
||||
aktivitas untuk menampilkan gambar atau membuka halaman web. Dalam beberapa kasus, Anda bisa memulai
|
||||
aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil
|
||||
aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil
|
||||
dalam {@link android.content.Intent} (misalnya Anda bisa mengeluarkan intent agar
|
||||
pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang
|
||||
pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang
|
||||
menunjuk ke kontak yang dipilih).</p>
|
||||
|
||||
<p>Untuk penerima siaran, intent hanya mendefinisikan
|
||||
@@ -213,18 +213,18 @@ hanya menyertakan string tindakan yang menunjukkan "baterai hampir habis").</p>
|
||||
|
||||
<p>Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan
|
||||
diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver
|
||||
konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan
|
||||
konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan
|
||||
transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link
|
||||
android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia
|
||||
konten dan komponen yang meminta informasi (demi keamanan).</p>
|
||||
|
||||
<p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p>
|
||||
<ul>
|
||||
<li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan
|
||||
<li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan
|
||||
meneruskan {@link android.content.Intent} ke {@link android.content.Context#startActivity
|
||||
startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()}
|
||||
(bila Anda ingin aktivitas mengembalikan hasil).</li>
|
||||
<li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan
|
||||
<li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan
|
||||
meneruskan {@link android.content.Intent} ke {@link android.content.Context#startService
|
||||
startService()}. Atau Anda bisa mengikat ke layanan dengan meneruskan {@link android.content.Intent} ke
|
||||
{@link android.content.Context#bindService bindService()}.</li>
|
||||
@@ -237,7 +237,7 @@ android.content.ContentProvider#query query()} pada {@link android.content.Conte
|
||||
</ul>
|
||||
|
||||
<p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
|
||||
Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen
|
||||
Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen
|
||||
tertentu juga tersedia dalam dokumen berikut: <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>, <a href="{@docRoot}guide/components/services.html">Layanan</a>, {@link
|
||||
android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
|
||||
|
||||
@@ -245,7 +245,7 @@ android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers
|
||||
<h2 id="Manifest">File Manifes</h2>
|
||||
|
||||
<p>Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui
|
||||
keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file
|
||||
keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file
|
||||
"manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar
|
||||
dari direktori proyek aplikasi.</p>
|
||||
|
||||
@@ -258,8 +258,8 @@ akses-baca ke kontak pengguna.</li>
|
||||
minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.</li>
|
||||
<li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera,
|
||||
layanan Bluetooth, atau layar multisentuh.</li>
|
||||
<li>Pustaka API aplikasi perlu ditautkan (selain
|
||||
API kerangka kerja Android), seperti pustaka
|
||||
<li>Pustaka API aplikasi perlu ditautkan (selain
|
||||
API kerangka kerja Android), seperti pustaka
|
||||
<a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li>
|
||||
<li>Dan lainnya</li>
|
||||
</ul>
|
||||
@@ -287,7 +287,7 @@ href="{@docRoot}guide/topics/manifest/application-element.html"><application&
|
||||
aplikasi.</p>
|
||||
|
||||
<p>Dalam elemen <code><a
|
||||
href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
|
||||
href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
|
||||
atribut {@code android:name} menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas {@link
|
||||
android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan
|
||||
digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.</p>
|
||||
@@ -310,12 +310,12 @@ penyedia konten</li>
|
||||
|
||||
<p>Aktivitas, layanan, dan penyedia konten yang Anda sertakan dalam kode sumber, namun tidak
|
||||
dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan. Akan tetapi,
|
||||
penerima siaran
|
||||
bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek
|
||||
penerima siaran
|
||||
bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek
|
||||
{@link android.content.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil
|
||||
{@link android.content.Context#registerReceiver registerReceiver()}.</p>
|
||||
|
||||
<p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda,
|
||||
<p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda,
|
||||
lihat dokumentasi <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">File AndroidManifest.xml</a>. </p>
|
||||
|
||||
|
||||
@@ -379,7 +379,7 @@ membacanya, namun layanan eksternal seperti Google Play akan membacanya untuk me
|
||||
penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p>
|
||||
|
||||
<p>Misalnya, jika aplikasi memerlukan kamera dan menggunakan API yang disediakan dalam Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7)
|
||||
, Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p>
|
||||
, Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p>
|
||||
|
||||
<pre>
|
||||
<manifest ... >
|
||||
@@ -390,10 +390,10 @@ penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p>
|
||||
</manifest>
|
||||
</pre>
|
||||
|
||||
<p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan
|
||||
<p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan
|
||||
Android versi <em>lebih rendah</em> dari 2.1 tidak bisa menginstal aplikasi Anda dari Google Play.</p>
|
||||
|
||||
<p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak
|
||||
<p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak
|
||||
<em>mengharuskannya</em>. Dalam hal itu, aplikasi Anda harus mengatur atribut <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a>
|
||||
ke {@code "false"} dan memeriksa saat runtime apakah
|
||||
perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.</p>
|
||||
@@ -455,11 +455,11 @@ membuat sumber daya alternatif untuk konfigurasi perangkat berbeda, bacalah <a h
|
||||
mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi
|
||||
untuk digunakan oleh aplikasi lain.</dd>
|
||||
<dt><a href="{@docRoot}guide/components/activities.html">Aktivitas</a></dt>
|
||||
<dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity},
|
||||
<dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity},
|
||||
yang menyediakan layar tersendiri dalam aplikasi bersama antarmuka pengguna.</dd>
|
||||
<dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a></dt>
|
||||
<dd>Informasi tentang cara aplikasi Android disusun untuk memisahkan sumber daya aplikasi dari
|
||||
kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk
|
||||
kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk
|
||||
konfigurasi perangkat tertentu.
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -468,11 +468,11 @@ konfigurasi perangkat tertentu.
|
||||
<h2 class="norule">Anda juga mungkin tertarik dengan:</h2>
|
||||
<dl>
|
||||
<dt><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a></dt>
|
||||
<dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan
|
||||
<dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan
|
||||
pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk
|
||||
perangkat berbeda.</dd>
|
||||
<dt><a href="{@docRoot}guide/topics/security/permissions.html">Izin Sistem</a></dt>
|
||||
<dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin
|
||||
<dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin
|
||||
yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
page.title=Komponen Aplikasi
|
||||
page.landing=true
|
||||
page.landing.intro=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
|
||||
page.metaDescription=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
|
||||
page.landing.intro=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
|
||||
page.metaDescription=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
|
||||
page.landing.image=images/develop/app_components.png
|
||||
page.image=images/develop/app_components.png
|
||||
|
||||
@@ -11,7 +11,7 @@ page.image=images/develop/app_components.png
|
||||
|
||||
<div class="col-6">
|
||||
<h3>Artikel Blog</h3>
|
||||
|
||||
|
||||
<a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
|
||||
<h4>Menggunakan DialogFragments</h4>
|
||||
<p>Dalam posting ini, saya akan menunjukkan cara menggunakan DialogFragments dengan pustaka dukungan v4 (untuk kompatibilitas mundur pada perangkat sebelum Honeycomb) untuk menunjukkan dialog edit sederhana dan mengembalikan hasil ke Aktivitas pemanggil menggunakan antarmuka.</p>
|
||||
@@ -21,7 +21,7 @@ page.image=images/develop/app_components.png
|
||||
<h4>Fragmen Untuk Semua</h4>
|
||||
<p>Hari ini kami telah merilis pustaka statis yang memperlihatkan API Fragment yang sama (serta LoaderManager baru dan beberapa kelas lain) agar aplikasi yang kompatibel dengan Android 1.6 atau yang lebih baru bisa menggunakan fragmen untuk membuat antarmuka pengguna yang kompatibel dengan tablet. </p>
|
||||
</a>
|
||||
|
||||
|
||||
<a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
|
||||
<h4>Multithreading untuk Kinerja</h4>
|
||||
<p>Praktik yang baik dalam membuat aplikasi yang responsif adalah memastikan thread UI utama Anda
|
||||
@@ -32,7 +32,7 @@ ditangani di thread berbeda.</p>
|
||||
|
||||
<div class="col-6">
|
||||
<h3>Pelatihan</h3>
|
||||
|
||||
|
||||
<a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
|
||||
<h4>Mengelola Daur Hidup Aktivitas</h4>
|
||||
<p>Bagian ini menjelaskan pentingnya metode callback daur hidup yang diterima setiap instance Aktivitas
|
||||
|
||||
@@ -21,14 +21,14 @@ parent.link=activities.html
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Kelas-kelas utama</h2>
|
||||
<ol>
|
||||
<li>{@link android.app.LoaderManager}</li>
|
||||
<li>{@link android.content.Loader}</li>
|
||||
|
||||
</ol>
|
||||
|
||||
</ol>
|
||||
|
||||
<h2>Contoh-contoh terkait</h2>
|
||||
<ol>
|
||||
<li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">
|
||||
@@ -51,7 +51,7 @@ konten berubah.</li>
|
||||
dibuat kembali setelah perubahan konfigurasi. Karena itu, loader tidak perlu melakukan query ulang
|
||||
datanya.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="summary">Rangkuman Loader API</h2>
|
||||
|
||||
<p>Ada beberapa kelas dan antarmuka yang mungkin dilibatkan dalam menggunakan
|
||||
@@ -64,11 +64,11 @@ loader pada aplikasi. Semuanya dirangkum dalam tabel ini:</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.app.LoaderManager}</td>
|
||||
<td>Kelas abstrak yang dikaitkan dengan {@link android.app.Activity} atau
|
||||
<td>Kelas abstrak yang dikaitkan dengan {@link android.app.Activity} atau
|
||||
{@link android.app.Fragment} untuk mengelola satu atau beberapa instance {@link
|
||||
android.content.Loader}. Ini membantu aplikasi mengelola
|
||||
operasi berjalan lebih lama bersamaan dengan daur hidup {@link android.app.Activity}
|
||||
atau {@link android.app.Fragment}; penggunaan paling umumnya adalah dengan
|
||||
atau {@link android.app.Fragment}; penggunaan paling umumnya adalah dengan
|
||||
{@link android.content.CursorLoader}, akan tetapi aplikasi bebas menulis loader-nya
|
||||
sendiri untuk memuat tipe data lainnya.
|
||||
<br />
|
||||
@@ -97,7 +97,7 @@ baru bila konten berubah. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.content.CursorLoader}</td>
|
||||
<td>Subkelas {@link android.content.AsyncTaskLoader} yang meng-query
|
||||
<td>Subkelas {@link android.content.AsyncTaskLoader} yang meng-query
|
||||
{@link android.content.ContentResolver} dan mengembalikan {@link
|
||||
android.database.Cursor}. Kelas ini mengimplementasikan protokol {@link
|
||||
android.content.Loader} dengan cara standar untuk query kursor,
|
||||
@@ -124,15 +124,15 @@ yang menggunakan loader biasanya berisi yang berikut ini:</p>
|
||||
<li>{@link android.app.Activity} atau {@link android.app.Fragment}.</li>
|
||||
<li>Instance {@link android.app.LoaderManager}.</li>
|
||||
<li>{@link android.content.CursorLoader} akan memuat data yang didukung oleh {@link
|
||||
android.content.ContentProvider}. Atau, Anda dapat mengimplementasikan subkelas sendiri
|
||||
android.content.ContentProvider}. Atau, Anda dapat mengimplementasikan subkelas sendiri
|
||||
dari {@link android.content.Loader} atau {@link android.content.AsyncTaskLoader} untuk
|
||||
memuat data dari beberapa sumber lain.</li>
|
||||
<li>Implementasi untuk {@link android.app.LoaderManager.LoaderCallbacks}.
|
||||
Di sinilah Anda membuat loader baru dan mengelola acuan bagi loader
|
||||
yang ada.</li>
|
||||
yang ada.</li>
|
||||
<li>Cara menampilkan data loader, seperti {@link
|
||||
android.widget.SimpleCursorAdapter}.</li>
|
||||
<li>Sumber data, seperti {@link android.content.ContentProvider}, saat menggunakan
|
||||
<li>Sumber data, seperti {@link android.content.ContentProvider}, saat menggunakan
|
||||
{@link android.content.CursorLoader}.</li>
|
||||
</ul>
|
||||
<h3 id="starting">Memulai Loader</h3>
|
||||
@@ -140,11 +140,11 @@ android.widget.SimpleCursorAdapter}.</li>
|
||||
<p>{@link android.app.LoaderManager} mengelola satu atau beberapa instance {@link
|
||||
android.content.Loader} dalam {@link android.app.Activity} atau
|
||||
{@link android.app.Fragment}. Hanya ada satu {@link
|
||||
android.app.LoaderManager} per aktivitas atau fragmen.</p>
|
||||
android.app.LoaderManager} per aktivitas atau fragmen.</p>
|
||||
|
||||
<p>Anda biasanya
|
||||
memulai {@link android.content.Loader} dalam metode {@link
|
||||
android.app.Activity#onCreate onCreate()} aktivitas, atau dalam metode
|
||||
android.app.Activity#onCreate onCreate()} aktivitas, atau dalam metode
|
||||
{@link android.app.Fragment#onActivityCreated onActivityCreated()} fragmen. Anda
|
||||
melakukannya dengan cara berikut ini:</p>
|
||||
|
||||
@@ -157,13 +157,13 @@ parameter berikut:</p>
|
||||
<ul>
|
||||
<li>ID unik yang mengidentifikasi loader. Dalam contoh ini, ID-nya adalah 0.</li>
|
||||
<li>Argumen opsional untuk dipasok ke loader
|
||||
pada saat pembuatan (dalam contoh ini <code>null</code>).</li>
|
||||
pada saat pembuatan (dalam contoh ini <code>null</code>).</li>
|
||||
|
||||
<li>Implementasi {@link android.app.LoaderManager.LoaderCallbacks}, yang
|
||||
akan dipanggil {@link android.app.LoaderManager} untuk melaporkan kejadian loader. Dalam contoh
|
||||
ini, kelas lokal mengimplementasikan antarmuka {@link
|
||||
android.app.LoaderManager.LoaderCallbacks}, sehingga meneruskan acuan
|
||||
ke dirinya sendiri, {@code this}.</li>
|
||||
ke dirinya sendiri, {@code this}.</li>
|
||||
</ul>
|
||||
<p>Panggilan {@link android.app.LoaderManager#initLoader initLoader()} memastikan bahwa loader
|
||||
telah dimulai dan aktif. Ia memiliki dua kemungkinan hasil:</p>
|
||||
@@ -193,7 +193,7 @@ masa hidup loader secara otomatis. {@link android.app.LoaderManager}
|
||||
memulai dan menghentikan pemuatan jika perlu, dan menjaga status loader
|
||||
dan konten terkaitnya. Seperti yang tersirat di sini, Anda akan jarang berinteraksi dengan loader
|
||||
secara langsung (meskipun misalnya menggunakan metode loader untuk menyempurnakan perilaku
|
||||
loader, lihat contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>).
|
||||
loader, lihat contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>).
|
||||
Anda paling sering akan menggunakan metode {@link
|
||||
android.app.LoaderManager.LoaderCallbacks} untuk mengintervensi proses
|
||||
pemuatan saat terjadi kejadian tertentu. Untuk diskusi selengkapnya mengenai topik ini, lihat <a href="#callback">Menggunakan Callback LoaderManager</a>.</p>
|
||||
@@ -245,7 +245,7 @@ Membuat instance dan mengembalikan {@link android.content.Loader} baru untuk ID
|
||||
— Dipanggil bila loader yang dibuat sebelumnya selesai dimuat.
|
||||
</li></ul>
|
||||
<ul>
|
||||
<li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}
|
||||
<li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}
|
||||
— Dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
|
||||
tidak tersedia.
|
||||
</li>
|
||||
@@ -322,7 +322,7 @@ data tersebut karena loader memilikinya dan akan menanganinya.</p>
|
||||
<p>Loader akan melepas data setelah mengetahui bahwa aplikasi tidak
|
||||
lagi menggunakannya. Misalnya, jika data adalah kursor dari {@link
|
||||
android.content.CursorLoader}, Anda tidak boleh memanggil {@link
|
||||
android.database.Cursor#close close()} sendiri. Jika kursor ditempatkan
|
||||
android.database.Cursor#close close()} sendiri. Jika kursor ditempatkan
|
||||
dalam {@link android.widget.CursorAdapter}, Anda harus menggunakan metode {@link
|
||||
android.widget.SimpleCursorAdapter#swapCursor swapCursor()} agar
|
||||
{@link android.database.Cursor} lama tidak ditutup. Misalnya:</p>
|
||||
@@ -343,7 +343,7 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
|
||||
<p>Metode ini dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
|
||||
tidak tersedia. Callback ini memungkinkan Anda mengetahui
|
||||
kapan data akan dilepas sehingga dapat menghapus acuannya ke callback. </p>
|
||||
<p>Implementasi ini memanggil
|
||||
<p>Implementasi ini memanggil
|
||||
{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}
|
||||
dengan nilai <code>null</code>:</p>
|
||||
|
||||
@@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) {
|
||||
android.app.Fragment} yang menampilkan {@link android.widget.ListView} berisi
|
||||
hasil query terhadap penyedia konten kontak. Ia menggunakan {@link
|
||||
android.content.CursorLoader} untuk mengelola query pada penyedia.</p>
|
||||
|
||||
|
||||
<p>Agar aplikasi dapat mengakses kontak pengguna, seperti yang ditampilkan dalam contoh ini,
|
||||
manifesnya harus menyertakan izin
|
||||
{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p>
|
||||
|
||||
@@ -25,13 +25,13 @@ page.tags=daur hidup,latar belakang
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang
|
||||
berjalan, sistem Android akan memulai proses Linux baru untuk aplikasi dengan satu thread
|
||||
eksekusi. Secara default, semua komponen aplikasi yang sama berjalan dalam proses dan
|
||||
thread yang sama (disebut thread "utama"). Jika komponen aplikasi dimulai dan sudah ada
|
||||
proses untuk aplikasi itu (karena komponen lain dari aplikasi itu sudah ada), maka komponen
|
||||
akan dimulai dalam proses itu dan menggunakan thread eksekusi yang sama. Akan tetapi, Anda bisa
|
||||
mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk
|
||||
<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang
|
||||
berjalan, sistem Android akan memulai proses Linux baru untuk aplikasi dengan satu thread
|
||||
eksekusi. Secara default, semua komponen aplikasi yang sama berjalan dalam proses dan
|
||||
thread yang sama (disebut thread "utama"). Jika komponen aplikasi dimulai dan sudah ada
|
||||
proses untuk aplikasi itu (karena komponen lain dari aplikasi itu sudah ada), maka komponen
|
||||
akan dimulai dalam proses itu dan menggunakan thread eksekusi yang sama. Akan tetapi, Anda bisa
|
||||
mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk
|
||||
setiap proses.</p>
|
||||
|
||||
<p>Dokumen ini membahas cara kerja proses dan thread di aplikasi Android.</p>
|
||||
@@ -39,7 +39,7 @@ setiap proses.</p>
|
||||
|
||||
<h2 id="Processes">Proses</h2>
|
||||
|
||||
<p>Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan
|
||||
<p>Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan
|
||||
aplikasi tidak boleh mengubah ini. Akan tetapi, jika Anda merasa perlu mengontrol proses milik
|
||||
komponen tertentu, Anda dapat melakukannya dalam file manifes.</p>
|
||||
|
||||
@@ -47,54 +47,54 @@ komponen tertentu, Anda dapat melakukannya dalam file manifes.</p>
|
||||
<activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
|
||||
<service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
|
||||
<receiver>}</a>, dan <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
|
||||
<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan
|
||||
dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen
|
||||
<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan
|
||||
dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen
|
||||
berjalan dalam prosesnya sendiri atau agar beberapa komponen menggunakan proses yang sama sementara yang lainnya tidak. Anda juga bisa mengatur
|
||||
{@code android:process} agar komponen aplikasi yang berbeda berjalan dalam proses yang sama
|
||||
—sepanjang aplikasi menggunakan ID Linux yang sama dan ditandatangani
|
||||
—sepanjang aplikasi menggunakan ID Linux yang sama dan ditandatangani
|
||||
dengan sertifikat yang sama.</p>
|
||||
|
||||
<p>Elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
|
||||
<application>}</a> juga mendukung atribut {@code android:process}, untuk mengatur
|
||||
<application>}</a> juga mendukung atribut {@code android:process}, untuk mengatur
|
||||
nilai default yang berlaku bagi semua komponen.</p>
|
||||
|
||||
<p>Android bisa memutuskan untuk mematikan proses pada waktu tertentu, bila memori tinggal sedikit dan diperlukan oleh
|
||||
<p>Android bisa memutuskan untuk mematikan proses pada waktu tertentu, bila memori tinggal sedikit dan diperlukan oleh
|
||||
proses lain yang lebih mendesak untuk melayani pengguna. Komponen
|
||||
aplikasi yang berjalan dalam proses yang dimatikan maka sebagai konsekuensinya juga akan dimusnahkan. Proses dimulai
|
||||
aplikasi yang berjalan dalam proses yang dimatikan maka sebagai konsekuensinya juga akan dimusnahkan. Proses dimulai
|
||||
kembali untuk komponen itu bila ada lagi pekerjaan untuk mereka lakukan.</p>
|
||||
|
||||
<p>Saat memutuskan proses yang akan dimatikan, sistem Android akan mempertimbangkan kepentingan relatifnya bagi
|
||||
pengguna. Misalnya, sistem lebih mudah menghentikan proses yang menjadi host aktivitas yang tidak
|
||||
lagi terlihat di layar, dibandingkan dengan proses yang menjadi host aktivitas yang terlihat. Karena itu, keputusan
|
||||
lagi terlihat di layar, dibandingkan dengan proses yang menjadi host aktivitas yang terlihat. Karena itu, keputusan
|
||||
untuk menghentikan proses bergantung pada keadaan komponen yang berjalan dalam proses tersebut. Aturan
|
||||
yang digunakan untuk menentukan proses yang akan dihentikan dibahas di bawah ini. </p>
|
||||
|
||||
|
||||
<h3 id="Lifecycle">Daur hidup proses</h3>
|
||||
|
||||
<p>Sistem Android mencoba mempertahankan proses aplikasi selama mungkin, namun
|
||||
<p>Sistem Android mencoba mempertahankan proses aplikasi selama mungkin, namun
|
||||
pada akhirnya perlu menghapus proses lama untuk mengambil kembali memori bagi proses baru atau yang lebih penting. Untuk
|
||||
menentukan proses yang akan
|
||||
dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan
|
||||
komponen yang berjalan dalam proses dan status komponen tersebut. Proses yang memiliki
|
||||
dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan
|
||||
komponen yang berjalan dalam proses dan status komponen tersebut. Proses yang memiliki
|
||||
prioritas terendah akan dimatikan terlebih dahulu, kemudian yang terendah berikutnya, dan seterusnya, jika perlu
|
||||
untuk memulihkan sumber daya sistem.</p>
|
||||
|
||||
<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa
|
||||
tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan
|
||||
<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa
|
||||
tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan
|
||||
<em>dimatikan terakhir</em>):</p>
|
||||
|
||||
<ol>
|
||||
<li><b>Proses latar depan</b>
|
||||
<p>Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses
|
||||
<p>Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses
|
||||
dianggap berada di latar depan jika salah satu kondisi berikut terpenuhi:</p>
|
||||
|
||||
<ul>
|
||||
<li>Proses menjadi host {@link android.app.Activity} yang berinteraksi dengan pengguna dengan metode ({@link
|
||||
android.app.Activity}{@link android.app.Activity#onResume onResume()} telah
|
||||
android.app.Activity}{@link android.app.Activity#onResume onResume()} telah
|
||||
dipanggil).</li>
|
||||
|
||||
<li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang sedang berinteraksi dengan
|
||||
<li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang sedang berinteraksi dengan
|
||||
pengguna.</li>
|
||||
|
||||
<li>Proses menjadi host {@link android.app.Service} yang berjalan "di latar depan"—
|
||||
@@ -108,23 +108,23 @@ onStart()}, atau {@link android.app.Service#onDestroy onDestroy()}).</li>
|
||||
android.content.BroadcastReceiver#onReceive onReceive()}-nya.</li>
|
||||
</ul>
|
||||
|
||||
<p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai
|
||||
upaya terakhir— jika memori hampir habis sehingga semuanya tidak bisa terus berjalan. Pada umumnya, pada
|
||||
titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan
|
||||
<p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai
|
||||
upaya terakhir— jika memori hampir habis sehingga semuanya tidak bisa terus berjalan. Pada umumnya, pada
|
||||
titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan
|
||||
diperlukan agar antarmuka pengguna tetap responsif.</p></li>
|
||||
|
||||
<li><b>Proses yang terlihat</b>
|
||||
<p>Proses yang tidak memiliki komponen latar depan, namun masih bisa
|
||||
memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi
|
||||
<p>Proses yang tidak memiliki komponen latar depan, namun masih bisa
|
||||
memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi
|
||||
berikut terpenuhi:</p>
|
||||
|
||||
<ul>
|
||||
<li>Proses ini menjadi host {@link android.app.Activity} yang tidak berada di latar depan, namun masih
|
||||
terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil).
|
||||
Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga
|
||||
terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil).
|
||||
Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga
|
||||
aktivitas sebelumnya terlihat berada di belakangnya.</li>
|
||||
|
||||
<li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang terlihat (atau latar
|
||||
<li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang terlihat (atau latar
|
||||
depan)</li>
|
||||
</ul>
|
||||
|
||||
@@ -134,53 +134,53 @@ diperlukan agar semua proses latar depan tetap berjalan. </p>
|
||||
|
||||
<li><b>Proses layanan</b>
|
||||
<p>Proses yang menjalankan layanan yang telah dimulai dengan metode {@link
|
||||
android.content.Context#startService startService()} dan tidak termasuk dalam salah satu dari dua kategori
|
||||
yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini
|
||||
umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang
|
||||
atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk
|
||||
android.content.Context#startService startService()} dan tidak termasuk dalam salah satu dari dua kategori
|
||||
yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini
|
||||
umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang
|
||||
atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk
|
||||
mempertahankannya bersama semua proses latar depan dan proses yang terlihat. </p>
|
||||
</li>
|
||||
|
||||
<li><b>Proses latar belakang</b>
|
||||
<p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode
|
||||
{@link android.app.Activity#onStop onStop()} aktivitas telah dipanggil). Proses ini tidak memiliki dampak
|
||||
langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi
|
||||
proses latar depan, proses yang terlihat,
|
||||
atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan
|
||||
dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru
|
||||
<p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode
|
||||
{@link android.app.Activity#onStop onStop()} aktivitas telah dipanggil). Proses ini tidak memiliki dampak
|
||||
langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi
|
||||
proses latar depan, proses yang terlihat,
|
||||
atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan
|
||||
dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru
|
||||
terlihat oleh pengguna sebagai yang terakhir untuk dimatikan. Jika aktivitas mengimplementasikan metode
|
||||
daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek
|
||||
yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan
|
||||
daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek
|
||||
yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan
|
||||
semua statusnya yang terlihat. Lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>
|
||||
untuk mendapatkan informasi tentang menyimpan dan memulihkan status.</p>
|
||||
</li>
|
||||
|
||||
<li><b>Proses kosong</b>
|
||||
<p>Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses
|
||||
<p>Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses
|
||||
seperti ini tetap hidup adalah untuk keperluan caching, meningkatkan waktu mulai (startup) bila
|
||||
nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber
|
||||
nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber
|
||||
daya sistem secara keseluruhan antara proses cache dan cache kernel yang mendasarinya.</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<p>Android sebisa mungkin memeringkat proses setinggi
|
||||
mungkin, berdasarkan prioritas komponen yang sedang aktif dalam proses. Misalnya, jika suatu proses menjadi host sebuah layanan dan
|
||||
mungkin, berdasarkan prioritas komponen yang sedang aktif dalam proses. Misalnya, jika suatu proses menjadi host sebuah layanan dan
|
||||
aktivitas yang terlihat, proses akan diperingkat sebagai proses yang terlihat, bukan sebagai proses layanan.</p>
|
||||
|
||||
<p>Selain itu, peringkat proses dapat meningkat karena adanya proses lain yang bergantung padanya
|
||||
—proses yang melayani proses lain tidak bisa diperingkat lebih rendah daripada proses yang
|
||||
sedang dilayaninya. Misalnya, jika penyedia konten dalam proses A melayani klien dalam proses B, atau
|
||||
jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah
|
||||
—proses yang melayani proses lain tidak bisa diperingkat lebih rendah daripada proses yang
|
||||
sedang dilayaninya. Misalnya, jika penyedia konten dalam proses A melayani klien dalam proses B, atau
|
||||
jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah
|
||||
prioritasnya dibandingkan dengan proses B.</p>
|
||||
|
||||
<p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang,
|
||||
aktivitas yang memulai operasi yang berjalan lama mungkin lebih baik memulai <a href="{@docRoot}guide/components/services.html">layanan</a> untuk operasi itu, daripada hanya
|
||||
<p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang,
|
||||
aktivitas yang memulai operasi yang berjalan lama mungkin lebih baik memulai <a href="{@docRoot}guide/components/services.html">layanan</a> untuk operasi itu, daripada hanya
|
||||
membuat thread pekerja—khususnya jika operasi mungkin akan berlangsung lebih lama daripada aktivitas.
|
||||
Misalnya, aktivitas yang mengunggah gambar ke situs web harus memulai layanan
|
||||
Misalnya, aktivitas yang mengunggah gambar ke situs web harus memulai layanan
|
||||
untuk mengunggah sehingga unggahan bisa terus berjalan di latar belakang meskipun pengguna meninggalkan aktivitas tersebut.
|
||||
Menggunakan layanan akan memastikan operasi paling tidak memiliki prioritas "proses layanan",
|
||||
apa pun yang terjadi pada aktivitas. Ini menjadi alasan yang sama yang membuat penerima siaran harus
|
||||
Menggunakan layanan akan memastikan operasi paling tidak memiliki prioritas "proses layanan",
|
||||
apa pun yang terjadi pada aktivitas. Ini menjadi alasan yang sama yang membuat penerima siaran harus
|
||||
menjalankan layanan daripada hanya menempatkan operasi yang menghabiskan waktu di thread.</p>
|
||||
|
||||
|
||||
@@ -188,35 +188,35 @@ menjalankan layanan daripada hanya menempatkan operasi yang menghabiskan waktu d
|
||||
|
||||
<h2 id="Threads">Thread</h2>
|
||||
|
||||
<p>Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama,
|
||||
<p>Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama,
|
||||
"main". Thread ini sangat penting karena bertugas mengirim kejadian ke widget
|
||||
antarmuka pengguna yang sesuai, termasuk kejadian menggambar. Ini juga merupakan thread yang
|
||||
membuat aplikasi berinteraksi dengan komponen dari Android UI toolkit (komponen dari paket {@link
|
||||
android.widget} dan {@link android.view}). Karena itu, thread 'main' juga terkadang
|
||||
android.widget} dan {@link android.view}). Karena itu, thread 'main' juga terkadang
|
||||
disebut thread UI.</p>
|
||||
|
||||
<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua
|
||||
komponen yang berjalan di proses yang sama akan dibuat instance-nya dalam thread UI, dan sistem akan memanggil
|
||||
<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua
|
||||
komponen yang berjalan di proses yang sama akan dibuat instance-nya dalam thread UI, dan sistem akan memanggil
|
||||
setiap komponen yang dikirim dari thread itu. Akibatnya, metode yang merespons callback sistem
|
||||
(seperti {@link android.view.View#onKeyDown onKeyDown()} untuk melaporkan tindakan pengguna atau metode callback daur hidup)
|
||||
selalu berjalan di thread UI proses.</p>
|
||||
|
||||
<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian
|
||||
sentuh ke widget, yang selanjutnya menetapkan status ditekan dan mengirim permintaan yang tidak divalidasi ke
|
||||
<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian
|
||||
sentuh ke widget, yang selanjutnya menetapkan status ditekan dan mengirim permintaan yang tidak divalidasi ke
|
||||
antrean kejadian. Thread UI akan menghapus antrean permintaan dan memberi tahu widget bahwa widget harus menggambar
|
||||
dirinya sendiri.</p>
|
||||
|
||||
<p>Saat aplikasi melakukan pekerjaan intensif sebagai respons terhadap interaksi pengguna, model
|
||||
<p>Saat aplikasi melakukan pekerjaan intensif sebagai respons terhadap interaksi pengguna, model
|
||||
thread tunggal ini bisa menghasilkan kinerja yang buruk kecuali jika Anda mengimplementasikan aplikasi dengan benar. Khususnya jika
|
||||
semua terjadi di thread UI, melakukan operasi yang panjang seperti akses ke jaringan atau query
|
||||
database akan memblokir seluruh UI. Bila thread diblokir, tidak ada kejadian yang bisa dikirim,
|
||||
termasuk kejadian menggambar. Dari sudut pandang pengguna, aplikasi
|
||||
termasuk kejadian menggambar. Dari sudut pandang pengguna, aplikasi
|
||||
tampak mogok (hang). Lebih buruk lagi, jika thread UI diblokir selama lebih dari beberapa detik
|
||||
(saat ini sekitar 5 detik) pengguna akan ditampilkan dialog "<a href="http://developer.android.com/guide/practices/responsiveness.html">aplikasi tidak
|
||||
merespons</a>" (ANR) yang populer karena reputasi buruknya. Pengguna nanti bisa memutuskan untuk keluar dari aplikasi dan menghapus aplikasi
|
||||
merespons</a>" (ANR) yang populer karena reputasi buruknya. Pengguna nanti bisa memutuskan untuk keluar dari aplikasi dan menghapus aplikasi
|
||||
jika mereka tidak suka.</p>
|
||||
|
||||
<p>Selain itu, toolkit Android UI <em>bukan</em> thread-safe. Jadi, Anda tidak harus memanipulasi
|
||||
<p>Selain itu, toolkit Android UI <em>bukan</em> thread-safe. Jadi, Anda tidak harus memanipulasi
|
||||
UI dari thread pekerja—Anda harus melakukan semua manipulasi pada antarmuka pengguna dari thread
|
||||
UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:</p>
|
||||
|
||||
@@ -227,12 +227,12 @@ UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:</p>
|
||||
|
||||
<h3 id="WorkerThreads">Thread pekerja</h3>
|
||||
|
||||
<p>Karena model thread tunggal yang dijelaskan di atas, Anda dilarang memblokir thread
|
||||
<p>Karena model thread tunggal yang dijelaskan di atas, Anda dilarang memblokir thread
|
||||
UI demi daya respons UI aplikasi. Jika memiliki operasi untuk dijalankan
|
||||
yang tidak seketika, Anda harus memastikan untuk melakukannya di thread terpisah (thread "latar belakang" atau
|
||||
thread "pekerja").</p>
|
||||
|
||||
<p>Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari
|
||||
<p>Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari
|
||||
thread terpisah dan menampilkannya dalam {@link android.widget.ImageView}:</p>
|
||||
|
||||
<pre>
|
||||
@@ -246,13 +246,13 @@ public void onClick(View v) {
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Awalnya hal ini tampak bekerja dengan baik, karena menciptakan thread baru untuk menangani
|
||||
<p>Awalnya hal ini tampak bekerja dengan baik, karena menciptakan thread baru untuk menangani
|
||||
operasi jaringan. Akan tetapi, hal tersebut melanggar aturan kedua model thread tunggal: <em>jangan mengakses
|
||||
toolkit Android UI dari luar thread UI</em>—sampel ini memodifikasi {@link
|
||||
android.widget.ImageView} dari thread pekerja sebagai ganti thread UI. Ini bisa
|
||||
mengakibatkan perilaku yang tidak terdefinisi dan tidak diharapkan, yang bisa menyulitkan dan menghabiskan waktu untuk melacaknya.</p>
|
||||
|
||||
<p>Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari
|
||||
<p>Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari
|
||||
thread lainnya. Berikut ini daftar metode yang bisa membantu:</p>
|
||||
|
||||
<ul>
|
||||
@@ -284,10 +284,10 @@ public void onClick(View v) {
|
||||
<p>Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread
|
||||
sementara {@link android.widget.ImageView} dimanipulasi dari thread UI.</p>
|
||||
|
||||
<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit
|
||||
dan sulit dipertahankan. Untuk menangani interaksi yang lebih kompleks dengan thread pekerja, Anda bisa mempertimbangkan
|
||||
<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit
|
||||
dan sulit dipertahankan. Untuk menangani interaksi yang lebih kompleks dengan thread pekerja, Anda bisa mempertimbangkan
|
||||
penggunaan {@link android.os.Handler}di thread pekerja, untuk memproses pesan yang dikirim dari
|
||||
thread UI. Mungkin solusi terbaiknya adalah memperpanjang kelas {@link android.os.AsyncTask},
|
||||
thread UI. Mungkin solusi terbaiknya adalah memperpanjang kelas {@link android.os.AsyncTask},
|
||||
yang akan menyederhanakan eksekusi tugas-tugas thread pekerja yang perlu berinteraksi dengan UI.</p>
|
||||
|
||||
|
||||
@@ -298,10 +298,10 @@ pengguna. AsyncTask memblokir operasi di thread pekerja kemudian mempublikasikan
|
||||
di thread UI, tanpa mengharuskan Anda untuk menangani sendiri thread dan/atau handler sendiri.</p>
|
||||
|
||||
<p>Untuk menggunakannya, Anda harus menempatkan {@link android.os.AsyncTask} sebagai subkelas dan mengimplementasikan metode callback {@link
|
||||
android.os.AsyncTask#doInBackground doInBackground()} yang berjalan di kumpulan
|
||||
android.os.AsyncTask#doInBackground doInBackground()} yang berjalan di kumpulan
|
||||
thread latar belakang. Untuk memperbarui UI, Anda harus mengimplementasikan {@link
|
||||
android.os.AsyncTask#onPostExecute onPostExecute()}, yang memberikan hasil dari {@link
|
||||
android.os.AsyncTask#doInBackground doInBackground()} dan berjalan di thread UI, jadi Anda bisa
|
||||
android.os.AsyncTask#doInBackground doInBackground()} dan berjalan di thread UI, jadi Anda bisa
|
||||
memperbarui UI dengan aman. Selanjutnya Anda bisa menjalankan tugas dengan memanggil {@link android.os.AsyncTask#execute execute()}
|
||||
dari thread UI.</p>
|
||||
|
||||
@@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
|
||||
protected Bitmap doInBackground(String... urls) {
|
||||
return loadImageFromNetwork(urls[0]);
|
||||
}
|
||||
|
||||
|
||||
/** The system calls this to perform work in the UI thread and delivers
|
||||
* the result from doInBackground() */
|
||||
protected void onPostExecute(Bitmap result) {
|
||||
@@ -328,16 +328,16 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Kini UI aman dan kode jadi lebih sederhana, karena memisahkan pekerjaan ke
|
||||
<p>Kini UI aman dan kode jadi lebih sederhana, karena memisahkan pekerjaan ke
|
||||
dalam bagian-bagian yang harus dilakukan pada thread pekerja dan thread UI.</p>
|
||||
|
||||
<p>Anda harus membaca acuan {@link android.os.AsyncTask} untuk memahami sepenuhnya
|
||||
<p>Anda harus membaca acuan {@link android.os.AsyncTask} untuk memahami sepenuhnya
|
||||
cara menggunakan kelas ini, namun berikut ini ikhtisar singkat cara kerjanya:</p>
|
||||
|
||||
<ul>
|
||||
<li>Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai
|
||||
akhir tugas, dengan menggunakan generik</li>
|
||||
<li>Metode {@link android.os.AsyncTask#doInBackground doInBackground()} berjalan secara otomatis pada
|
||||
<li>Metode {@link android.os.AsyncTask#doInBackground doInBackground()} berjalan secara otomatis pada
|
||||
thread pekerja</li>
|
||||
<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
|
||||
android.os.AsyncTask#onPostExecute onPostExecute()}, dan {@link
|
||||
@@ -352,23 +352,23 @@ android.os.AsyncTask#onProgressUpdate onProgressUpdate()} pada thread UI</li>
|
||||
|
||||
<p class="caution"><strong>Perhatian:</strong> Masalah lain yang mungkin Anda temui saat menggunakan
|
||||
thread pekerja adalah restart tak terduga dalam aktivitas karena <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan konfigurasi runtime</a>
|
||||
(seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk
|
||||
melihat cara mempertahankan tugas selama restart ini dan cara membatalkan
|
||||
(seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk
|
||||
melihat cara mempertahankan tugas selama restart ini dan cara membatalkan
|
||||
tugas dengan benar saat aktivitas dimusnahkan, lihat kode sumber untuk aplikasi sampel <a href="http://code.google.com/p/shelves/">Shelves</a>.</p>
|
||||
|
||||
|
||||
<h3 id="ThreadSafe">Metode thread-safe</h3>
|
||||
|
||||
<p> Dalam beberapa situasi, metode yang Anda implementasikan bisa dipanggil dari lebih dari satu thread,
|
||||
<p> Dalam beberapa situasi, metode yang Anda implementasikan bisa dipanggil dari lebih dari satu thread,
|
||||
dan karena itu harus ditulis agar menjadi thread-safe. </p>
|
||||
|
||||
<p>Ini terutama terjadi untuk metode yang bisa dipanggil dari jauh —seperti metode dalam <a href="{@docRoot}guide/components/bound-services.html">layanan terikat</a>. Bila sebuah panggilan pada
|
||||
metode yang dijalankan dalam {@link android.os.IBinder} berasal dari proses yang sama di mana
|
||||
<p>Ini terutama terjadi untuk metode yang bisa dipanggil dari jauh —seperti metode dalam <a href="{@docRoot}guide/components/bound-services.html">layanan terikat</a>. Bila sebuah panggilan pada
|
||||
metode yang dijalankan dalam {@link android.os.IBinder} berasal dari proses yang sama di mana
|
||||
{@link android.os.IBinder IBinder} berjalan, metode ini akan dieksekusi di thread pemanggil.
|
||||
Akan tetapi, bila panggilan berasal proses lain, metode akan dieksekusi dalam thread yang dipilih dari
|
||||
kumpulan (pool) thread yang dipertahankan sistem dalam proses yang sama seperti{@link android.os.IBinder
|
||||
IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode
|
||||
{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI
|
||||
IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode
|
||||
{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI
|
||||
proses layanan, metode yang diimplementasikan dalam objek yang dikembalikan {@link android.app.Service#onBind
|
||||
onBind()} (misalnya, subkelas yang mengimplementasikan metode RPC) akan dipanggil dari thread
|
||||
di pool. Karena layanan bisa memiliki lebih dari satu klien, maka lebih dari satu pool thread bisa melibatkan
|
||||
@@ -382,19 +382,19 @@ android.content.ContentProvider} yang merespons permintaan itu—metode {@li
|
||||
android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert
|
||||
insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
|
||||
android.content.ContentProvider#update update()}, dan {@link android.content.ContentProvider#getType
|
||||
getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI
|
||||
untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun
|
||||
getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI
|
||||
untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun
|
||||
sekaligus, metode-metode ini juga harus diimplementasikan sebagai thread-safe. </p>
|
||||
|
||||
|
||||
<h2 id="IPC">Komunikasi Antarproses</h2>
|
||||
|
||||
<p>Android menawarkan mekanisme komunikasi antarproses (IPC) menggunakan panggilan prosedur jauh
|
||||
(RPC), yang mana metode ini dipanggil oleh aktivitas atau komponen aplikasi lain, namun dieksekusi dari
|
||||
(RPC), yang mana metode ini dipanggil oleh aktivitas atau komponen aplikasi lain, namun dieksekusi dari
|
||||
jauh (di proses lain), bersama hasil yang dikembalikan ke
|
||||
pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa
|
||||
dipahami sistem operasi, mentransmisikannya dari proses lokal dan ruang alamat untuk proses jauh
|
||||
dan ruang proses, kemudian merakit kembali dan menetapkannya kembali di sana. Nilai-nilai yang dikembalikan
|
||||
pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa
|
||||
dipahami sistem operasi, mentransmisikannya dari proses lokal dan ruang alamat untuk proses jauh
|
||||
dan ruang proses, kemudian merakit kembali dan menetapkannya kembali di sana. Nilai-nilai yang dikembalikan
|
||||
akan ditransmisikan dalam arah berlawanan. Android menyediakan semua kode untuk melakukan transaksi IPC
|
||||
ini, sehingga Anda bisa fokus pada pendefinisian dan implementasi antarmuka pemrograman RPC. </p>
|
||||
|
||||
|
||||
@@ -60,23 +60,23 @@ layar ikhtisar. Selain itu, atribut <code><a href="{@docRoot}guide/topics/manife
|
||||
<h2 id="adding">Menambahkan Tugas ke Layar Ikhtisar</h2>
|
||||
|
||||
<p>Penggunaan flag kelas {@link android.content.Intent} untuk menambahkan tugas memberi kontrol lebih besar
|
||||
atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ikhtisar. Bila menggunakan atribut
|
||||
atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ikhtisar. Bila menggunakan atribut
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas
|
||||
, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas
|
||||
yang ada untuk dokumen tersebut.</p>
|
||||
|
||||
<h3 id="flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</h3>
|
||||
|
||||
<p>Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode
|
||||
<p>Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode
|
||||
{@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()}
|
||||
dari kelas {@link android.app.ActivityManager.AppTask}, dengan meneruskannya ke intent yang
|
||||
dari kelas {@link android.app.ActivityManager.AppTask}, dengan meneruskannya ke intent yang
|
||||
menjalankan aktivitas tersebut. Untuk menyisipkan jeda logis agar sistem memperlakukan aktivitas Anda sebagai tugas
|
||||
baru di layar ikhtisar, teruskan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
||||
baru di layar ikhtisar, teruskan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
||||
dalam metode {@link android.content.Intent#addFlags(int) addFlags()} dari {@link android.content.Intent}
|
||||
yang memulai aktivitas itu.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
||||
menggantikan flag {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET},
|
||||
menggantikan flag {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET},
|
||||
yang tidak digunakan lagi pada Android 5.0 (API level 21).</p>
|
||||
|
||||
<p>Jika Anda menetapkan flag {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} saat membuat
|
||||
@@ -169,18 +169,18 @@ bila pengguna membuka dokumen dengan aplikasi:</p>
|
||||
|
||||
<dt>"{@code none”}"</dt>
|
||||
<dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Layar ikhtisar memperlakukan
|
||||
aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang
|
||||
aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang
|
||||
dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
|
||||
|
||||
<dt>"{@code never}"</dt>
|
||||
<dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Mengatur nilai ini akan mengesampingkan
|
||||
perilaku flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
||||
dan {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, jika salah satunya ditetapkan di
|
||||
dan {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, jika salah satunya ditetapkan di
|
||||
intent, dan layar ikhtisar menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari
|
||||
aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
|
||||
</dl>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Untuk nilai selain {@code none} dan {@code never},
|
||||
<p class="note"><strong>Catatan:</strong> Untuk nilai selain {@code none} dan {@code never},
|
||||
aktivitas harus didefinisikan dengan {@code launchMode="standard"}. Jika atribut ini tidak ditetapkan, maka
|
||||
{@code documentLaunchMode="none"} akan digunakan.</p>
|
||||
|
||||
@@ -219,8 +219,8 @@ public void onRemoveFromRecents(View view) {
|
||||
</pre>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Penggunaan metode
|
||||
{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
|
||||
akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti
|
||||
{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
|
||||
akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti
|
||||
dibahas di bawah ini.</p>
|
||||
|
||||
<h3 id="#retain-finished">Mempertahankan tugas yang telah selesai</h3>
|
||||
|
||||
@@ -186,7 +186,7 @@ dari komponen aplikasi lain.</p>
|
||||
aplikasi Anda.</p>
|
||||
|
||||
<p>Untuk mendeklarasikan layanan Anda, tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>
|
||||
sebagai anak
|
||||
sebagai anak
|
||||
elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>. Misalnya:</p>
|
||||
|
||||
<pre>
|
||||
@@ -539,7 +539,7 @@ layanan tersebut harus berhenti sendiri dengan memanggil {@link android.app.Serv
|
||||
komponen lain bisa menghentikannya dengan memanggil {@link android.content.Context#stopService stopService()}.</p>
|
||||
|
||||
<p>Setelah diminta untuk berhenti dengan {@link android.app.Service#stopSelf stopSelf()} atau {@link
|
||||
android.content.Context#stopService stopService()}, sistem akan menghapus layanan
|
||||
android.content.Context#stopService stopService()}, sistem akan menghapus layanan
|
||||
secepatnya.</p>
|
||||
|
||||
<p>Akan tetapi, bila layanan Anda menangani beberapa permintaan ke {@link
|
||||
|
||||
@@ -29,7 +29,7 @@ parent.link=activities.html
|
||||
<ol>
|
||||
<li><a href="{@docRoot}design/patterns/navigation.html">Desain Android:
|
||||
Navigasi</a></li>
|
||||
<li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemen manifes
|
||||
<li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemen manifes
|
||||
{@code <activity>}</a></li>
|
||||
<li><a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a></li>
|
||||
</ol>
|
||||
@@ -52,7 +52,7 @@ dikirim, aktivitas Anda akan dilanjutkan dan seolah-olah aktivitas email adalah
|
||||
aktivitas mungkin dari aplikasi yang berbeda, Android akan tetap mempertahankan pengalaman pengguna yang mulus
|
||||
dengan menjalankan kedua aktivitas dalam <em>tugas</em> yang sama.</p>
|
||||
|
||||
<p>Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna
|
||||
<p>Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna
|
||||
saat melakukan pekerjaan tertentu. Aktivitas tersebut diatur dalam tumpukan (<em>back-stack</em>), dalam
|
||||
urutan membuka setiap aktivitas.</p>
|
||||
|
||||
@@ -93,7 +93,7 @@ tidak pernah disusun ulang, hanya didorong dan dikeluarkan dari back-stack&mdash
|
||||
aktivitas saat ini dan dikeluarkan bila pengguna meninggalkannya menggunakan tombol <em>Back</em>. Dengan demikian,
|
||||
back-stack
|
||||
beroperasi sebagai struktur objek "masuk terakhir, keluar pertama". Gambar 1 melukiskan perilaku
|
||||
ini dengan jangka waktu yang menunjukkan kemajuan antar aktivitas beserta
|
||||
ini dengan jangka waktu yang menunjukkan kemajuan antar aktivitas beserta
|
||||
back-stack pada setiap waktu.</p>
|
||||
|
||||
<img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
|
||||
@@ -148,7 +148,7 @@ pengguna untuk memulai aktivitas tertentu dari lebih dari satu aktivitas, instan
|
||||
aktivitas tersebut akan dibuat dan didorong ke back-stack (bukannya memunculkan instance sebelumnya dari
|
||||
aktivitas ke atas). Dengan demikian, satu aktivitas pada aplikasi Anda mungkin dibuat beberapa
|
||||
kali (bahkan dari beberapa tugas), seperti yang ditampilkan dalam gambar 3. Dengan demikian, jika pengguna mengarahkan mundur
|
||||
menggunakan tombol <em>Back</em>, setiap instance aktivitas ini akan ditampilkan dalam urutan saat
|
||||
menggunakan tombol <em>Back</em>, setiap instance aktivitas ini akan ditampilkan dalam urutan saat
|
||||
dibuka (masing-masing
|
||||
dengan status UI sendiri). Akan tetapi, Anda bisa memodifikasi perilaku ini jika tidak ingin aktivitas
|
||||
dibuat instance-nya lebih dari sekali. Caranya dibahas di bagian selanjutnya tentang <a href="#ManagingTasks">Mengelola Tugas</a>.</p>
|
||||
@@ -347,7 +347,7 @@ aktivitas apa pun yang dimulai dengan ini akan dibuka di tugas yang terpisah.</d
|
||||
selalu dibuka dalam tugasnya sendiri—dengan menetapkan mode pembuka {@code singleTask} dalam elemen<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.
|
||||
Ini berarti bahwa jika aplikasi Anda mengeluarkan
|
||||
intent untuk membuka Browser Android, aktivitasnya <em>tidak</em> akan ditempatkan dalam tugas
|
||||
yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser
|
||||
yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser
|
||||
sudah memiliki tugas yang berjalan di latar belakang, tugas tersebut akan dimajukan untuk menangani intent
|
||||
baru.</p>
|
||||
|
||||
@@ -387,13 +387,13 @@ adalah:</p>
|
||||
<dd>Memulai aktivitas dalam tugas baru. Jika tugas sudah dijalankan untuk aktivitas yang sekarang
|
||||
Anda mulai, tugas tersebut akan dibawa ke latar depan dengan status terakhir yang dipulihkan dan aktivitas
|
||||
akan menerima intent baru dalam {@link android.app.Activity#onNewIntent onNewIntent()}.
|
||||
<p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
|
||||
<p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
|
||||
yang dibahas di bagian sebelumnya.</p></dd>
|
||||
<dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt>
|
||||
<dd>Jika aktivitas yang dimulai adalah aktivitas saat ini (di bagian teratas back-stack), maka
|
||||
instance yang ada akan menerima panggilan ke {@link android.app.Activity#onNewIntent onNewIntent()}
|
||||
sebagai ganti membuat instance baru aktivitas.
|
||||
<p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
|
||||
<p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
|
||||
yang dibahas di bagian sebelumnya.</p></dd>
|
||||
<dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
|
||||
<dd>Jika aktivitas yang dimulai sudah berjalan dalam tugas saat ini, maka sebagai
|
||||
@@ -427,8 +427,8 @@ afinitas default untuk suatu aktivitas. Aktivitas yang didefinisikan dalam
|
||||
aplikasi yang berbeda bisa berbagi afinitas, atau aktivitas yang didefinisikan dalam aplikasi yang sama bisa
|
||||
diberi afinitas tugas yang berbeda.</p>
|
||||
|
||||
<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan
|
||||
dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
|
||||
<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan
|
||||
dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
|
||||
elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p>
|
||||
|
||||
<p>Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
|
||||
@@ -444,7 +444,7 @@ tugas default untuk aplikasi.</p>
|
||||
{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}
|
||||
.
|
||||
|
||||
<p>Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas
|
||||
<p>Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas
|
||||
yang disebut {@link android.app.Activity#startActivity startActivity()}. Ini didorong ke back-stack
|
||||
yang sama seperti caller. Akan tetapi, jika intent yang diteruskan ke
|
||||
{@link android.app.Activity#startActivity startActivity()}
|
||||
@@ -473,7 +473,7 @@ dimilikinya, bila tugas tersebut di bawa ke latar depan.</p>
|
||||
yang didefinisikan sebagai bagian dari aplikasi perjalanan. Aktivitas memiliki afinitas yang sama dengan aktivitas lain dalam aplikasi
|
||||
yang sama (afinitas aplikasi default) dan aktivitas ini memungkinkan re-parenting dengan atribut ini.
|
||||
Bila salah satu aktivitas Anda memulai aktivitas laporan cuaca, awalnya aktivitas ini dimiliki oleh tugas
|
||||
yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan,
|
||||
yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan,
|
||||
aktivitas laporan cuaca akan ditetapkan kembali ke tugas itu dan ditampilkan di dalamnya.</p>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -497,7 +497,7 @@ apa yang mereka kerjakan sebelum dan kembali ke tugas itu untuk memulai sesuatu
|
||||
<dt><code><a
|
||||
href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
|
||||
</dt>
|
||||
<dd>Jika atribut ini ditetapkan ke {@code "true"} dalam aktivitas akar tugas,
|
||||
<dd>Jika atribut ini ditetapkan ke {@code "true"} dalam aktivitas akar tugas,
|
||||
perilaku default yang baru dijelaskan tidak akan terjadi.
|
||||
Tugas akan mempertahankan semua aktivitas dalam back-stack bahkan setelah sekian lama.</dd>
|
||||
|
||||
@@ -516,7 +516,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask
|
||||
<dd>Atribut ini seperti <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>,
|
||||
namun beroperasi pada
|
||||
satu aktivitas, bukan pada seluruh tugas. Hal ini juga bisa menyebabkan aktivitas
|
||||
hilang, termasuk aktivitas akar. Bila ini diatur ke {@code "true"},
|
||||
hilang, termasuk aktivitas akar. Bila ini diatur ke {@code "true"},
|
||||
aktivitas akan tetap menjadi bagian dari tugas hanya untuk sesi saat ini. Jika pengguna
|
||||
keluar dan kemudian kembali ke tugas tersebut, tugas tidak akan ada lagi.</dd>
|
||||
</dl>
|
||||
@@ -552,14 +552,14 @@ pembuka</a> yang menandai aktivitas selalu memulai tugas, {@code "singleTask"} d
|
||||
{@code "singleInstance"}, hanya boleh digunakan bila aktivitas memiliki filter
|
||||
{@link android.content.Intent#ACTION_MAIN}
|
||||
dan {@link android.content.Intent#CATEGORY_LAUNCHER}. Bayangkan, misalnya, apa yang akan
|
||||
terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai
|
||||
tugas yang baru, dan pengguna menghabiskan lebih banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol
|
||||
terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai
|
||||
tugas yang baru, dan pengguna menghabiskan lebih banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol
|
||||
<em>Home</em>. Tugas kini dikirim ke latar belakang dan tidak terlihat. Sekarang pengguna tidak memiliki cara untuk kembali
|
||||
ke tugas tersebut, karena tidak dinyatakan dalam launcher aplikasi.</p>
|
||||
|
||||
<p>Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, atur dalam
|
||||
<p>Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, atur dalam
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
pada
|
||||
pada
|
||||
<a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a>
|
||||
elemen ke {@code "true"} (lihat <a href="#Clearing">Menghapus back-stack</a>).</p>
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ page.title=Manifes Aplikasi
|
||||
Setiap aplikasi harus memiliki file AndroidManifest.xml (bernama persis seperti ini) di direktori akar.
|
||||
<span itemprop="description">File manifes
|
||||
menyediakan informasi penting tentang aplikasi ke sistem Android,
|
||||
informasi yang harus dimiliki sistem agar bisa menjalankan setiap kode
|
||||
informasi yang harus dimiliki sistem agar bisa menjalankan setiap kode
|
||||
aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini:
|
||||
</p>
|
||||
|
||||
@@ -32,26 +32,26 @@ aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini:
|
||||
Nama paket berfungsi sebagai identifier unik untuk aplikasi.</li>
|
||||
|
||||
<li>Menjelaskan berbagai komponen aplikasi—aktivitas,
|
||||
layanan, penerima siaran, dan penyedia konten
|
||||
yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan
|
||||
mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent
|
||||
Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai
|
||||
layanan, penerima siaran, dan penyedia konten
|
||||
yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan
|
||||
mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent
|
||||
Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai
|
||||
komponennya dan dalam kondisi apa bisa diluncurkan.</li>
|
||||
|
||||
<li>Menentukan proses yang akan menjadi host komponen aplikasi.</li>
|
||||
<li>Menentukan proses yang akan menjadi host komponen aplikasi.</li>
|
||||
|
||||
<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk
|
||||
mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li>
|
||||
<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk
|
||||
mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li>
|
||||
|
||||
<li>Juga mendeklarasikan izin lain yang harus dimiliki untuk
|
||||
<li>Juga mendeklarasikan izin lain yang harus dimiliki untuk
|
||||
untuk berinteraksi dengan komponen aplikasi.</li>
|
||||
|
||||
<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan
|
||||
profil dan informasi lain saat aplikasi berjalan. Deklarasi ini
|
||||
<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan
|
||||
profil dan informasi lain saat aplikasi berjalan. Deklarasi ini
|
||||
hanya ada di manifes saat aplikasi dibuat dan diuji;
|
||||
deklarasi dihapus sebelum aplikasi dipublikasikan.</li>
|
||||
|
||||
<li>Mendeklarasikan tingkat minimum API Android yang diperlukan
|
||||
<li>Mendeklarasikan tingkat minimum API Android yang diperlukan
|
||||
aplikasi.</li>
|
||||
|
||||
<li>Mencantumkan daftar pustaka yang harus ditautkan aplikasi.</li>
|
||||
@@ -61,12 +61,12 @@ aplikasi.</li>
|
||||
<h2 id="filestruct">Struktur File Manifes</h2>
|
||||
|
||||
<p>
|
||||
Diagram di bawah ini menampilkan struktur umum file manifes dan setiap
|
||||
elemen yang bisa ditampungnya. Setiap elemen, bersama
|
||||
atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat
|
||||
informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram,
|
||||
dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama
|
||||
elemen lainnya.
|
||||
Diagram di bawah ini menampilkan struktur umum file manifes dan setiap
|
||||
elemen yang bisa ditampungnya. Setiap elemen, bersama
|
||||
atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat
|
||||
informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram,
|
||||
dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama
|
||||
elemen lainnya.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
@@ -126,9 +126,9 @@ elemen lainnya.
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini
|
||||
dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa
|
||||
menambahkan elemen atau atribut sendiri.
|
||||
Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini
|
||||
dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa
|
||||
menambahkan elemen atau atribut sendiri.
|
||||
</p>
|
||||
|
||||
<p style="margin-left: 2em">
|
||||
@@ -158,74 +158,74 @@ menambahkan elemen atau atribut sendiri.
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 id="filec">Konvensi File</h2>
|
||||
|
||||
<p>
|
||||
Sebagian konvensi dan aturan berlaku secara umum untuk semua elemen
|
||||
Sebagian konvensi dan aturan berlaku secara umum untuk semua elemen
|
||||
dan atribut di manifes:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><b>Elemen</b></dt>
|
||||
<dd>Hanya elemen
|
||||
<dd>Hanya elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> dan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali.
|
||||
Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun
|
||||
setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali.
|
||||
Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun
|
||||
setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang
|
||||
berarti.
|
||||
|
||||
<p>
|
||||
Jika elemen tidak berisi apa pun, berarti elemen itu berisi elemen lain.
|
||||
Jika elemen tidak berisi apa pun, berarti elemen itu berisi elemen lain.
|
||||
Semua nilai diatur melalui atribut, bukan sebagai data karakter dalam elemen.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, dan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
||||
bisa dicampur dalam urutan apa pun. (Elemen
|
||||
Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, dan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
||||
bisa dicampur dalam urutan apa pun. (Elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
|
||||
merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
ini aliasnya.)
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Atribut</b></dt>
|
||||
<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian
|
||||
yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan
|
||||
dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan
|
||||
<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian
|
||||
yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan
|
||||
dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan
|
||||
nilai default atau menyatakan apa yang terjadi jika tidak ada spesifikasi.
|
||||
|
||||
<p>Selain untuk beberapa atribut elemen akar
|
||||
<p>Selain untuk beberapa atribut elemen akar
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>,
|
||||
semua nama atribut dimulai dengan awalan {@code android:} —
|
||||
misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut
|
||||
semua nama atribut dimulai dengan awalan {@code android:} —
|
||||
misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut
|
||||
dengan nama.
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Mendeklarasikan nama kelas</b></dt>
|
||||
<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen
|
||||
aplikasi itu sendiri (elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
) dan aktivitas komponen — utamanya
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
|
||||
layanan
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
|
||||
penerima siaran
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>),
|
||||
dan penyedia konten
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>).
|
||||
<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen
|
||||
aplikasi itu sendiri (elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
) dan aktivitas komponen — utamanya
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
|
||||
layanan
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
|
||||
penerima siaran
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>),
|
||||
dan penyedia konten
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>).
|
||||
|
||||
<p>
|
||||
Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen
|
||||
({@link android.app.Activity}, {@link android.app.Service},
|
||||
{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}),
|
||||
subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan
|
||||
paket lengkap.
|
||||
Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen
|
||||
({@link android.app.Activity}, {@link android.app.Service},
|
||||
{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}),
|
||||
subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan
|
||||
paket lengkap.
|
||||
Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai berikut:
|
||||
</p>
|
||||
|
||||
@@ -239,12 +239,12 @@ Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai be
|
||||
</manifest></pre>
|
||||
|
||||
<p>
|
||||
Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik,
|
||||
string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||
melalui atribut
|
||||
Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik,
|
||||
string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||
melalui atribut
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code>
|
||||
). Penetapan berikut sama dengan di atas:
|
||||
). Penetapan berikut sama dengan di atas:
|
||||
</p>
|
||||
|
||||
<pre><manifest package="com.example.project" . . . >
|
||||
@@ -257,13 +257,13 @@ string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam el
|
||||
</manifest></pre>
|
||||
|
||||
<p>
|
||||
Saat memulai komponen, Android akan membuat instance subkelas yang diberi nama.
|
||||
Saat memulai komponen, Android akan membuat instance subkelas yang diberi nama.
|
||||
Jika subkelas tidak ditetapkan, maka akak dibuat instance kelas dasar.
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Banyak nilai</b></dt>
|
||||
<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu
|
||||
diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen.
|
||||
<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu
|
||||
diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen.
|
||||
Misalnya, filter intent dapat mencantumkan beberapa tindakan:
|
||||
|
||||
<pre><intent-filter . . . >
|
||||
@@ -275,23 +275,23 @@ Misalnya, filter intent dapat mencantumkan beberapa tindakan:
|
||||
|
||||
<dt><b>Nilai sumber daya</b></dt>
|
||||
<dd>Beberapa atribut memiliki nilai yang bisa ditampilkan kepada pengguna — misalnya
|
||||
, label dan ikon aktivitas. Nilai atribut ini
|
||||
harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber
|
||||
, label dan ikon aktivitas. Nilai atribut ini
|
||||
harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber
|
||||
daya dinyatakan dalam format berikut,</p>
|
||||
|
||||
<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p>
|
||||
|
||||
<p>
|
||||
dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan
|
||||
dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau
|
||||
"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu.
|
||||
dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan
|
||||
dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau
|
||||
"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu.
|
||||
Misalnya:
|
||||
</p>
|
||||
|
||||
<pre><activity android:icon="@drawable/smallPic" . . . ></pre>
|
||||
|
||||
<p>
|
||||
Nilai tema diekspresikan dengan cara yang sama, namun dengan awal '{@code ?}'
|
||||
Nilai tema diekspresikan dengan cara yang sama, namun dengan awal '{@code ?}'
|
||||
dan bukan '{@code @}':
|
||||
</p>
|
||||
|
||||
@@ -299,8 +299,8 @@ dan bukan '{@code @}':
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Nilai-nilai string</b></dt>
|
||||
<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}')
|
||||
harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk
|
||||
<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}')
|
||||
harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk
|
||||
baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
|
||||
</dl>
|
||||
|
||||
@@ -308,7 +308,7 @@ baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
|
||||
<h2 id="filef">Fitur File</h2>
|
||||
|
||||
<p>
|
||||
Bagian berikut menjelaskan cara menerapkan sebagian fitur Android
|
||||
Bagian berikut menjelaskan cara menerapkan sebagian fitur Android
|
||||
dalam file manifest.
|
||||
</p>
|
||||
|
||||
@@ -316,37 +316,37 @@ dalam file manifest.
|
||||
<h3 id="ifs">Filter Intent</h3>
|
||||
|
||||
<p>
|
||||
Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima
|
||||
siaran) diaktifkan oleh <i>intent</i>. Intent adalah
|
||||
sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan
|
||||
tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori
|
||||
komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya.
|
||||
Android mencari komponen yang sesuai untuk merespons intent, meluncurkan
|
||||
instance komponen baru jika diperlukan, dan meneruskannya ke
|
||||
Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima
|
||||
siaran) diaktifkan oleh <i>intent</i>. Intent adalah
|
||||
sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan
|
||||
tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori
|
||||
komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya.
|
||||
Android mencari komponen yang sesuai untuk merespons intent, meluncurkan
|
||||
instance komponen baru jika diperlukan, dan meneruskannya ke
|
||||
objek Intent.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya
|
||||
— melalui <i>filter intent</i>. Karena sistem Android
|
||||
harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen,
|
||||
filter intent ditetapkan dalam manifes sebagai elemen
|
||||
Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya
|
||||
— melalui <i>filter intent</i>. Karena sistem Android
|
||||
harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen,
|
||||
filter intent ditetapkan dalam manifes sebagai elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||
. Sebuah komponen dapat memiliki filter dalam jumlah berapa saja, masing-masing menjelaskan
|
||||
. Sebuah komponen dapat memiliki filter dalam jumlah berapa saja, masing-masing menjelaskan
|
||||
kemampuan yang berbeda.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Intent yang secara eksplisit menamai komponen target akan mengaktifkan komponen itu;
|
||||
filter tidak berperan. Namun intent yang tidak menetapkan target
|
||||
dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter
|
||||
filter tidak berperan. Namun intent yang tidak menetapkan target
|
||||
dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter
|
||||
komponen.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Untuk informasi tentang cara objek Intent diuji terhadap filter intent,
|
||||
lihat dokumen terpisah,
|
||||
<a href="{@docRoot}guide/components/intents-filters.html">Intent
|
||||
Untuk informasi tentang cara objek Intent diuji terhadap filter intent,
|
||||
lihat dokumen terpisah,
|
||||
<a href="{@docRoot}guide/components/intents-filters.html">Intent
|
||||
dan Filter Intent</a>.
|
||||
</p>
|
||||
|
||||
@@ -354,42 +354,42 @@ dan Filter Intent</a>.
|
||||
<h3 id="iconlabel">Ikon dan Label</h3>
|
||||
|
||||
<p>
|
||||
Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk
|
||||
ikon kecil dan label teks yang bisa ditampilkan kepada pengguna. Sebagian ada juga yang memiliki atribut
|
||||
{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa
|
||||
ditampilkan pada layar. Misalnya, elemen
|
||||
Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk
|
||||
ikon kecil dan label teks yang bisa ditampilkan kepada pengguna. Sebagian ada juga yang memiliki atribut
|
||||
{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa
|
||||
ditampilkan pada layar. Misalnya, elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan
|
||||
memberi izin bagi aplikasi yang memintanya, ikon yang mewakili
|
||||
izin, nama izin, dan keterangan yang
|
||||
memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan
|
||||
memberi izin bagi aplikasi yang memintanya, ikon yang mewakili
|
||||
izin, nama izin, dan keterangan yang
|
||||
mengikutinya bisa ditampilkan kepada pengguna.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi
|
||||
{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini.
|
||||
Karena itu, ikon dan label yang ditetapkan dalam elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
adalah ikon dan label default untuk setiap komponen aplikasi.
|
||||
Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
— adalah pengaturan default untuk setiap elemen komponen
|
||||
Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi
|
||||
{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini.
|
||||
Karena itu, ikon dan label yang ditetapkan dalam elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
adalah ikon dan label default untuk setiap komponen aplikasi.
|
||||
Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
— adalah pengaturan default untuk setiap elemen komponen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||
. Jika elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label,
|
||||
maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan
|
||||
. Jika elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label,
|
||||
maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan
|
||||
filter intent.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen
|
||||
kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang
|
||||
diiklankan oleh filter. Misalnya, filter dengan pengaturan
|
||||
"{@code android.intent.action.MAIN}" dan
|
||||
"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas
|
||||
sebagai aktivitas yang memulai aplikasi—, yaitu
|
||||
sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang
|
||||
Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen
|
||||
kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang
|
||||
diiklankan oleh filter. Misalnya, filter dengan pengaturan
|
||||
"{@code android.intent.action.MAIN}" dan
|
||||
"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas
|
||||
sebagai aktivitas yang memulai aplikasi—, yaitu
|
||||
sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang
|
||||
diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launcher.
|
||||
</p>
|
||||
|
||||
@@ -397,14 +397,14 @@ diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launc
|
||||
<h3 id="perms">Izin</h3>
|
||||
|
||||
<p>
|
||||
Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian
|
||||
kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode
|
||||
penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna.
|
||||
Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian
|
||||
kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode
|
||||
penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan
|
||||
tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan
|
||||
Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan
|
||||
tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan
|
||||
oleh Android:
|
||||
</p>
|
||||
|
||||
@@ -418,25 +418,25 @@ Sebuah fitur bisa dilindungi paling banyak oleh satu izin.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin,
|
||||
aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen
|
||||
Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin,
|
||||
aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
dalam manifes. Kemudian, bila aplikasi telah diinstal pada
|
||||
perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak
|
||||
dengan memeriksa otoritas yang menandatangani
|
||||
sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna.
|
||||
Jika izin diberikan, aplikasi tersebut bisa menggunakan
|
||||
fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal
|
||||
tanpa ada pemberitahuan apa pun kepada pengguna.
|
||||
dalam manifes. Kemudian, bila aplikasi telah diinstal pada
|
||||
perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak
|
||||
dengan memeriksa otoritas yang menandatangani
|
||||
sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna.
|
||||
Jika izin diberikan, aplikasi tersebut bisa menggunakan
|
||||
fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal
|
||||
tanpa ada pemberitahuan apa pun kepada pengguna.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan,
|
||||
penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan
|
||||
izin mana pun yang didefinisikan oleh Android (tercantum dalam
|
||||
{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan
|
||||
oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan
|
||||
dengan elemen
|
||||
Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan,
|
||||
penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan
|
||||
izin mana pun yang didefinisikan oleh Android (tercantum dalam
|
||||
{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan
|
||||
oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan
|
||||
dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
. Misalnya, aktivitas dapat dilindungi sebagai berikut:
|
||||
</p>
|
||||
@@ -457,43 +457,43 @@ dengan elemen
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya
|
||||
dideklarasikan dengan elemen
|
||||
Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya
|
||||
dideklarasikan dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
, penggunaannya juga diminta dengan elemen
|
||||
, penggunaannya juga diminta dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
. Penggunaannya harus diminta agar komponen
|
||||
aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu
|
||||
diberlakukan oleh aplikasi itu sendiri.
|
||||
. Penggunaannya harus diminta agar komponen
|
||||
aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu
|
||||
diberlakukan oleh aplikasi itu sendiri.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Dalam contoh yang sama, jika atribut {@code permission} ditetapkan
|
||||
untuk izin yang dideklarasikan di tempat lain
|
||||
lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut
|
||||
tidak perlu mendeklarasikannya lagi dengan elemen
|
||||
Dalam contoh yang sama, jika atribut {@code permission} ditetapkan
|
||||
untuk izin yang dideklarasikan di tempat lain
|
||||
lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut
|
||||
tidak perlu mendeklarasikannya lagi dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
. Akan tetapi, penggunaannya masih perlu dengan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>.
|
||||
. Akan tetapi, penggunaannya masih perlu dengan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
||||
mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam
|
||||
kode. Dan
|
||||
Elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
||||
mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam
|
||||
kode. Dan
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
||||
mendefinisikan label untuk seperangkat izin (yang sama-sama dideklarasikan dalam manifes dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin
|
||||
dikelompokkan saat ditampilkan kepada pengguna. Elemen
|
||||
mendefinisikan label untuk seperangkat izin (yang sama-sama dideklarasikan dalam manifes dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin
|
||||
dikelompokkan saat ditampilkan kepada pengguna. Elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
||||
tidak menetapkan izin mana dimiliki grup;
|
||||
tidak menetapkan izin mana dimiliki grup;
|
||||
elemen hanya memberi nama grup. Izin ditempatkan dalam grup
|
||||
dengan memberikan nama grup ke elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
melalui atribut
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code>
|
||||
dengan memberikan nama grup ke elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
melalui atribut
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code>
|
||||
.
|
||||
</p>
|
||||
|
||||
@@ -501,17 +501,17 @@ dengan memberikan nama grup ke elemen
|
||||
<h3 id="libs">Pustaka</h3>
|
||||
|
||||
<p>
|
||||
Setiap aplikasi ditautkan dengan pustaka default Android, yang
|
||||
menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum
|
||||
seperti Activity, Service, Intent, View, Button, Application, ContentProvider,
|
||||
Setiap aplikasi ditautkan dengan pustaka default Android, yang
|
||||
menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum
|
||||
seperti Activity, Service, Intent, View, Button, Application, ContentProvider,
|
||||
dan sebagainya).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda
|
||||
menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan
|
||||
paket tersebut. Manifes harus berisi elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang
|
||||
terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan
|
||||
Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda
|
||||
menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan
|
||||
paket tersebut. Manifes harus berisi elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang
|
||||
terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan
|
||||
dalam dokumentasi paket.)
|
||||
</p>
|
||||
|
||||
@@ -42,7 +42,7 @@ page.title=Penyedia Kalender
|
||||
<li><a href="#intent-view">Menggunakan intent untuk menampilkan data kalender</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
|
||||
|
||||
<li><a href="#sync-adapter">Adaptor Sinkronisasi</a></li>
|
||||
</ol>
|
||||
|
||||
@@ -63,8 +63,8 @@ pada kalender, kejadian, peserta, pengingat, dan seterusnya.</p>
|
||||
|
||||
<p>API Penyedia Kalender bisa digunakan oleh aplikasi dan adaptor sinkronisasi. Aturannya
|
||||
bervariasi menurut tipe program yang membuat panggilan. Dokumen ini
|
||||
terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk
|
||||
pembahasan ragam adaptor sinkronisasi, lihat
|
||||
terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk
|
||||
pembahasan ragam adaptor sinkronisasi, lihat
|
||||
<a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ data kalender seorang pengguna.</p>
|
||||
<p>Setiap penyedia konten membuka sebuah URI publik (yang dibungkus sebagai objek
|
||||
{@link android.net.Uri}
|
||||
) yang mengidentifikasikan set datanya secara unik. Penyedia konten yang mengontrol
|
||||
beberapa set data (beberapa tabel) mengekspos URI terpisah untuk tiap set. Semua
|
||||
beberapa set data (beberapa tabel) mengekspos URI terpisah untuk tiap set. Semua
|
||||
URI untuk penyedia diawali dengan string "content://". String ini
|
||||
mengidentifikasi data sebagai dikontrol oleh penyedia konten. Penyedia Kalender
|
||||
mendefinisikan konstanta untuk URI masing-masing kelas (tabel). URI ini
|
||||
@@ -113,26 +113,26 @@ tabel dan bidang utama yang saling berkaitan.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p>{@link android.provider.CalendarContract.Calendars}</p></td>
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
informasi khusus kalender. Tiap baris dalam tabel ini berisi data untuk
|
||||
satu kalender, seperti nama, warna, informasi sinkronisasi, dan seterusnya.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Events}</td>
|
||||
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
informasi khusus kejadian. Tiap baris dalam tabel ini berisi informasi untuk satu
|
||||
kejadian—misalnya, judul kejadian, lokasi, waktu mulai, waktu
|
||||
selesai, dan seterusnya. Kejadian bisa terjadi satu kali atau bisa berulang beberapa kali. Peserta,
|
||||
pengingat, dan properti perluasan disimpan dalam tabel terpisah.
|
||||
Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
||||
pengingat, dan properti perluasan disimpan dalam tabel terpisah.
|
||||
Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
||||
yang mengacu {@link android.provider.BaseColumns#_ID} dalam tabel Events.</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances}</td>
|
||||
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
waktu mulai dan waktu selesai setiap bentuk kejadian. Tiap baris dalam tabel ini
|
||||
mewakili satu bentuk kejadian. Untuk kejadian satu kali ada pemetaan 1:1
|
||||
@@ -141,7 +141,7 @@ secara otomatis yang sesuai dengan beberapa kejadian itu.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Attendees}</td>
|
||||
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
informasi peserta (tamu) kejadian. Tiap baris mewakili satu tamu
|
||||
kejadian. Ini menetapkan tipe tamu dan respons kehadiran tamu
|
||||
@@ -149,17 +149,17 @@ untuk kejadian.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Reminders}</td>
|
||||
|
||||
|
||||
<td>Tabel ini menyimpan
|
||||
data peringatan/pemberitahuan. Tiap baris mewakili satu peringatan untuk sebuah kejadian. Sebuah
|
||||
kejadian bisa memiliki beberapa pengingat. Jumlah maksimum pengingat per kejadian
|
||||
ditetapkan dalam
|
||||
{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},
|
||||
ditetapkan dalam
|
||||
{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},
|
||||
yang diatur oleh adaptor sinkronisasi yang
|
||||
memiliki kalender yang diberikan. Pengingat ditetapkan dalam menit sebelum kejadian
|
||||
dan memiliki metode yang menentukan cara pengguna akan diperingatkan.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
<p>API Penyedia Kalender didesain agar luwes dan tangguh. Sementara itu
|
||||
@@ -178,9 +178,9 @@ Kalender</a>.</p>
|
||||
|
||||
|
||||
<li><strong>Adaptor sinkronisasi.</strong> Adaptor sinkronisasi menyinkronkan data kalender
|
||||
pada perangkat pengguna dengan server atau sumber data lain. Dalam tabel
|
||||
pada perangkat pengguna dengan server atau sumber data lain. Dalam tabel
|
||||
{@link android.provider.CalendarContract.Calendars} dan
|
||||
{@link android.provider.CalendarContract.Events},
|
||||
{@link android.provider.CalendarContract.Events},
|
||||
ada kolom yang dicadangkan untuk digunakan adaptor sinkronisasi.
|
||||
Penyedia dan aplikasi tidak boleh memodifikasinya. Sebenarnya, tabel-tabel itu tidak
|
||||
terlihat kecuali jika diakses sebagai adaptor sinkronisasi. Untuk informasi selengkapnya tentang
|
||||
@@ -211,7 +211,7 @@ untuk menghapus, menyisipkan, atau memperbarui data kalender:</p>
|
||||
|
||||
<p>Tabel {@link android.provider.CalendarContract.Calendars} berisi data
|
||||
untuk tiap kalender. Kolom-kolom
|
||||
berikut ini bisa ditulisi oleh aplikasi maupun <a href="#sync-adapter">adaptor sinkronisasi</a>.
|
||||
berikut ini bisa ditulisi oleh aplikasi maupun <a href="#sync-adapter">adaptor sinkronisasi</a>.
|
||||
Untuk mengetahui daftar lengkap bidang-bidang yang didukung, lihat
|
||||
acuan {@link android.provider.CalendarContract.Calendars}.</p>
|
||||
<table>
|
||||
@@ -229,7 +229,7 @@ acuan {@link android.provider.CalendarContract.Calendars}.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td>
|
||||
|
||||
|
||||
<td>Sebuah boolean yang menunjukkan apakah kalender dipilih untuk ditampilkan. Nilai
|
||||
0 menunjukkan bahwa kejadian yang terkait dengan kalender ini tidak boleh
|
||||
ditampilkan. Nilai 1 menunjukkan bahwa kejadian yang terkait dengan kalender ini harus
|
||||
@@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances}.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td>
|
||||
|
||||
|
||||
<td>Sebuah boolean yang menunjukkan apakah kalender harus disinkronkan dan apakah
|
||||
kejadiannya harus disimpan pada perangkat. Nilai 0 berarti jangan menyinkronkan kalender ini atau
|
||||
simpan kejadiannya pada perangkat. Nilai 1 berarti menyinkronkan kejadian untuk kalender ini
|
||||
@@ -253,8 +253,8 @@ dan simpan kejadiannya pada perangkat.</td>
|
||||
<p>Berikut ini adalah contoh yang menampilkan cara mendapatkan kalender yang dimiliki oleh
|
||||
pengguna tertentu. Untuk memudahkan, dalam contoh ini, operasi query ditampilkan dalam
|
||||
thread antarmuka pengguna ("thread utama"). Dalam praktiknya, hal ini harus dilakukan dalam
|
||||
thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat
|
||||
<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar
|
||||
thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat
|
||||
<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar
|
||||
membaca data melainkan memodifikasinya, lihat {@link android.content.AsyncQueryHandler}.
|
||||
</p>
|
||||
|
||||
@@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] {
|
||||
Calendars.CALENDAR_DISPLAY_NAME, // 2
|
||||
Calendars.OWNER_ACCOUNT // 3
|
||||
};
|
||||
|
||||
|
||||
// The indices for the projection array above.
|
||||
private static final int PROJECTION_ID_INDEX = 0;
|
||||
private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
|
||||
private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
|
||||
private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre>
|
||||
|
||||
|
||||
|
||||
<div class="sidebox-wrapper"> <div class="sidebox"> <h3>Mengapa Anda harus menyertakan
|
||||
ACCOUNT_TYPE?</h3> <p>Jika Anda membuat query pada {@link
|
||||
android.provider.CalendarContract.Calendars#ACCOUNT_NAME
|
||||
Calendars.ACCOUNT_NAME}, Anda juga harus menyertakan
|
||||
Calendars.ACCOUNT_NAME}, Anda juga harus menyertakan
|
||||
{@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE}
|
||||
dalam pemilihan. Itu karena akun yang bersangkutan
|
||||
hanya dianggap unik mengingat <code>ACCOUNT_NAME</code> dan
|
||||
@@ -289,7 +289,7 @@ autentikator akun yang digunakan bila akun didaftarkan dengan
|
||||
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} untuk kalender
|
||||
yang tidak terkait dengan akun perangkat. Akun {@link
|
||||
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} tidak
|
||||
disinkronkan.</p> </div> </div>
|
||||
disinkronkan.</p> </div> </div>
|
||||
|
||||
|
||||
<p> Di bagian berikutnya pada contoh ini, Anda akan membuat query. Pemilihan
|
||||
@@ -301,59 +301,59 @@ kalender yang memiliki <code>ACCOUNT_NAME</code>
|
||||
telah ditampilkan pengguna, bukan hanya kalender yang dimiliki pengguna, hilangkan <code>OWNER_ACCOUNT</code>.
|
||||
Query tersebut akan menghasilkan objek {@link android.database.Cursor}
|
||||
yang bisa Anda gunakan untuk menyusuri set hasil yang dikembalikan oleh
|
||||
query database. Untuk diskusi selengkapnya tentang penggunaan query dalam penyedia konten,
|
||||
query database. Untuk diskusi selengkapnya tentang penggunaan query dalam penyedia konten,
|
||||
lihat <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Kalender</a>.</p>
|
||||
|
||||
|
||||
<pre>// Run query
|
||||
Cursor cur = null;
|
||||
ContentResolver cr = getContentResolver();
|
||||
Uri uri = Calendars.CONTENT_URI;
|
||||
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
|
||||
Uri uri = Calendars.CONTENT_URI;
|
||||
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
|
||||
+ Calendars.ACCOUNT_TYPE + " = ?) AND ("
|
||||
+ Calendars.OWNER_ACCOUNT + " = ?))";
|
||||
String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google",
|
||||
"sampleuser@gmail.com"};
|
||||
// Submit the query and get a Cursor object back.
|
||||
"sampleuser@gmail.com"};
|
||||
// Submit the query and get a Cursor object back.
|
||||
cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre>
|
||||
|
||||
<p>Bagian berikutnya ini menggunakan kursor untuk merunut set hasil. Bagian ini menggunakan
|
||||
konstanta yang disiapkan pada awal contoh ini untuk menghasilkan nilai-nilai
|
||||
bagi tiap bidang.</p>
|
||||
|
||||
|
||||
<pre>// Use the cursor to step through the returned records
|
||||
while (cur.moveToNext()) {
|
||||
long calID = 0;
|
||||
String displayName = null;
|
||||
String accountName = null;
|
||||
String ownerName = null;
|
||||
|
||||
|
||||
// Get the field values
|
||||
calID = cur.getLong(PROJECTION_ID_INDEX);
|
||||
displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
|
||||
accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
|
||||
ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
|
||||
|
||||
|
||||
// Do something with the values...
|
||||
|
||||
...
|
||||
}
|
||||
</pre>
|
||||
|
||||
|
||||
<h3 id="modify-calendar">Memodifikasi kalender</h3>
|
||||
|
||||
<p>Untuk melakukan pembaruan kalender, Anda bisa menyediakan {@link
|
||||
android.provider.BaseColumns#_ID} kalender itu baik sebagai ID yang ditambahkan ke
|
||||
URI
|
||||
URI
|
||||
|
||||
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
atau sebagai item pemilihan pertama. Pemilihan
|
||||
harus diawali dengan <code>"_id=?"</code>, dan
|
||||
<code>selectionArg</code> pertama harus berupa {@link
|
||||
android.provider.BaseColumns#_ID} kalender.
|
||||
android.provider.BaseColumns#_ID} kalender.
|
||||
Anda juga bisa melakukan pembaruan dengan menuliskan kode ID dalam URI. Contoh ini mengubah
|
||||
nama tampilan kalender dengan pendekatan
|
||||
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
nama tampilan kalender dengan pendekatan
|
||||
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
:</p>
|
||||
|
||||
<pre>private static final String DEBUG_TAG = "MyActivity";
|
||||
@@ -375,7 +375,7 @@ perlu membuat sebuah kalender lokal, aplikasi bisa melakukannya dengan melakukan
|
||||
penyisipan kalender sebagai adaptor sinkronisasi, menggunakan {@link
|
||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} dari {@link
|
||||
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}.
|
||||
{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}
|
||||
{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}
|
||||
adalah sebuah tipe akun khusus untuk kalender yang tidak
|
||||
terkait dengan akun perangkat. Kalender tipe ini tidak disinkronkan dengan server. Untuk
|
||||
diskusi tentang adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
|
||||
@@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td>
|
||||
|
||||
|
||||
<td>Durasi kejadian dalam format <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a>.
|
||||
Misalnya, nilai <code>"PT1H"</code> menyatakan bahwa kejadian
|
||||
akan berlangsung satu jam, dan nilai <code>"P2W"</code> menunjukkan
|
||||
@@ -444,39 +444,39 @@ durasi 2 minggu. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td>
|
||||
|
||||
|
||||
<td>Nilai 1 menunjukkan kejadian ini memakan waktu sehari penuh, seperti yang didefinisikan oleh
|
||||
zona waktu lokal. Nilai 0 menunjukkan kejadian adalah kejadian biasa yang mungkin dimulai
|
||||
dan selesai pada sembarang waktu selama suatu hari.</td>
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td>
|
||||
|
||||
|
||||
<td>Aturan perulangan untuk format kejadian. Misalnya,
|
||||
<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Anda bisa menemukan
|
||||
contoh selengkapnya <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">di sini</a>.</td>
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td>
|
||||
<td>Tanggal perulangan kejadian.
|
||||
Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE}
|
||||
bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE}
|
||||
<td>Tanggal perulangan kejadian.
|
||||
Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE}
|
||||
bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE}
|
||||
untuk mendefinisikan satu set agregat
|
||||
kejadian berulang. Untuk diskusi selengkapnya, lihat <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">Spesifikasi RFC5545</a>.</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td>
|
||||
|
||||
<td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa
|
||||
|
||||
<td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa
|
||||
dijadwalkan. </td>
|
||||
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td>
|
||||
@@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}. Perhatikan bahwa aturan ini tidak berlaku
|
||||
Anda menyisipkan kejadian melalui Intent {@link
|
||||
android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam
|
||||
skenario itu, sebuah zona waktu default akan diberikan.</li>
|
||||
|
||||
|
||||
<li>Untuk kejadian tidak-berulang, Anda harus menyertakan {@link
|
||||
android.provider.CalendarContract.EventsColumns#DTEND}. </li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li>Untuk kejadian berulang, Anda harus menyertakan sebuah {@link
|
||||
android.provider.CalendarContract.EventsColumns#DURATION} selain {@link
|
||||
android.provider.CalendarContract.EventsColumns#RRULE} atau {@link
|
||||
@@ -526,9 +526,9 @@ android.provider.CalendarContract.EventsColumns#RDATE}. Perhatikan bahwa aturan
|
||||
Anda menyisipkan kejadian melalui Intent {@link
|
||||
android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam
|
||||
skenario itu, Anda bisa menggunakan {@link
|
||||
android.provider.CalendarContract.EventsColumns#RRULE} bersama {@link android.provider.CalendarContract.EventsColumns#DTSTART} dan {@link android.provider.CalendarContract.EventsColumns#DTEND}, dan aplikasi Calendar
|
||||
android.provider.CalendarContract.EventsColumns#RRULE} bersama {@link android.provider.CalendarContract.EventsColumns#DTSTART} dan {@link android.provider.CalendarContract.EventsColumns#DTEND}, dan aplikasi Calendar
|
||||
akan mengubahnya menjadi durasi secara otomatis.</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
<p>Berikut ini adalah contoh penyisipan kejadian. Penyisipan ini dilakukan dalam thread UI
|
||||
@@ -539,8 +539,8 @@ informasi selengkapnya, lihat {@link android.content.AsyncQueryHandler}.</p>
|
||||
|
||||
<pre>
|
||||
long calID = 3;
|
||||
long startMillis = 0;
|
||||
long endMillis = 0;
|
||||
long startMillis = 0;
|
||||
long endMillis = 0;
|
||||
Calendar beginTime = Calendar.getInstance();
|
||||
beginTime.set(2012, 9, 14, 7, 30);
|
||||
startMillis = beginTime.getTimeInMillis();
|
||||
@@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values);
|
||||
|
||||
// get the event ID that is the last element in the Uri
|
||||
long eventID = Long.parseLong(uri.getLastPathSegment());
|
||||
//
|
||||
//
|
||||
// ... do something with event ID
|
||||
//
|
||||
//</pre>
|
||||
@@ -578,14 +578,14 @@ peserta atau pengingat ke kejadian.</p>
|
||||
gunakan Intent {@link android.content.Intent#ACTION_EDIT EDIT}, seperti
|
||||
dijelaskan dalam <a href="#intent-edit">Menggunakan intent untuk mengedit kejadian</a>.
|
||||
Akan tetapi, jika perlu, Anda bisa mengedit kejadian secara langsung. Untuk melakukan pembaruan
|
||||
suatu kejadian, Anda bisa memberikan <code>_ID</code>
|
||||
suatu kejadian, Anda bisa memberikan <code>_ID</code>
|
||||
kejadian itu sebagai ID yang ditambahkan ke URI ({@link
|
||||
android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
atau sebagai item pemilihan pertama.
|
||||
android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||
atau sebagai item pemilihan pertama.
|
||||
Pemilihan harus dimulai dengan <code>"_id=?"</code>, dan
|
||||
<code>selectionArg</code> yang pertama harus berupa <code>_ID</code> kejadian. Anda juga bisa
|
||||
melakukan pembaruan dengan menggunakan pemilihan tanpa ID. Berikut ini adalah contoh pembaruan
|
||||
kejadian. Contoh ini mengubah judul kejadian dengan pendekatan
|
||||
kejadian. Contoh ini mengubah judul kejadian dengan pendekatan
|
||||
{@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}
|
||||
:</p>
|
||||
|
||||
@@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver();
|
||||
ContentValues values = new ContentValues();
|
||||
Uri updateUri = null;
|
||||
// The new title for the event
|
||||
values.put(Events.TITLE, "Kickboxing");
|
||||
values.put(Events.TITLE, "Kickboxing");
|
||||
updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
||||
int rows = getContentResolver().update(updateUri, values, null, null);
|
||||
Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre>
|
||||
@@ -625,22 +625,22 @@ ContentValues values = new ContentValues();
|
||||
Uri deleteUri = null;
|
||||
deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
||||
int rows = getContentResolver().delete(deleteUri, null, null);
|
||||
Log.i(DEBUG_TAG, "Rows deleted: " + rows);
|
||||
Log.i(DEBUG_TAG, "Rows deleted: " + rows);
|
||||
</pre>
|
||||
|
||||
<h2 id="attendees">Tabel Peserta</h2>
|
||||
|
||||
<p>Tiap baris tabel {@link android.provider.CalendarContract.Attendees}
|
||||
mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil
|
||||
{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}
|
||||
mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil
|
||||
{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}
|
||||
akan menghasilkan daftar peserta untuk
|
||||
kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.
|
||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini
|
||||
kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.
|
||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini
|
||||
harus cocok dengan {@link
|
||||
android.provider.BaseColumns#_ID} kejadian tertentu.</p>
|
||||
android.provider.BaseColumns#_ID} kejadian tertentu.</p>
|
||||
|
||||
<p>Tabel berikut mencantumkan
|
||||
bidang-bidang yang bisa ditulis. Saat menyisipkan peserta baru, Anda harus menyertakan semuanya
|
||||
bidang-bidang yang bisa ditulis. Saat menyisipkan peserta baru, Anda harus menyertakan semuanya
|
||||
kecuali <code>ATTENDEE_NAME</code>.
|
||||
</p>
|
||||
|
||||
@@ -698,7 +698,7 @@ kecuali <code>ATTENDEE_NAME</code>.
|
||||
<h3 id="add-attendees">Menambahkan Peserta</h3>
|
||||
|
||||
<p>Berikut ini adalah contoh yang menambahkan satu peserta ke kejadian. Perhatikan bahwa
|
||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
||||
diperlukan:</p>
|
||||
|
||||
<pre>
|
||||
@@ -718,17 +718,17 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values);
|
||||
<h2 id="reminders">Tabel Pengingat</h2>
|
||||
|
||||
<p>Tiap baris tabel {@link android.provider.CalendarContract.Reminders}
|
||||
mewakili satu pengingat untuk sebuah kejadian. Memanggil
|
||||
mewakili satu pengingat untuk sebuah kejadian. Memanggil
|
||||
{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} akan menghasilkan daftar pengingat untuk
|
||||
kejadian dengan
|
||||
kejadian dengan
|
||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.</p>
|
||||
|
||||
|
||||
<p>Tabel berikut mencantumkan bidang-bidang yang bisa ditulis untuk pengingat. Semua bidang harus
|
||||
disertakan saat menyisipkan pengingat baru. Perhatikan bahwa adaptor sinkronisasi menetapkan
|
||||
tipe pengingat yang didukungnya dalam tabel {@link
|
||||
android.provider.CalendarContract.Calendars}. Lihat
|
||||
{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}
|
||||
android.provider.CalendarContract.Calendars}. Lihat
|
||||
{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}
|
||||
untuk detailnya.</p>
|
||||
|
||||
|
||||
@@ -773,16 +773,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre>
|
||||
|
||||
<h2 id="instances">Tabel Instances</h2>
|
||||
|
||||
<p>Tabel
|
||||
<p>Tabel
|
||||
{@link android.provider.CalendarContract.Instances} menyimpan
|
||||
waktu mulai dan waktu selesai kejadian. Tiap baris dalam tabel ini
|
||||
mewakili satu bentuk kejadian. Tabel instance tidak bisa ditulis dan hanya
|
||||
menyediakan sebuah cara untuk membuat query kejadian. </p>
|
||||
|
||||
<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan
|
||||
bahwa zona waktu didefinisikan oleh
|
||||
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE}
|
||||
dan
|
||||
<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan
|
||||
bahwa zona waktu didefinisikan oleh
|
||||
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE}
|
||||
dan
|
||||
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p>
|
||||
|
||||
|
||||
@@ -801,18 +801,18 @@ dan
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances#END_DAY}</td>
|
||||
|
||||
|
||||
<td>Hari selesai Julian dari instance, relatif terhadap
|
||||
zona waktu Kalender.
|
||||
|
||||
zona waktu Kalender.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td>
|
||||
|
||||
|
||||
<td>Menit selesai dari instance yang diukur dari tengah malam di zona waktu
|
||||
Kalender.</td>
|
||||
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td>
|
||||
@@ -820,16 +820,16 @@ Kalender.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances#START_DAY}</td>
|
||||
<td>Hari mulai Julian dari instance, relatif terhadap zona waktu Kalender.
|
||||
<td>Hari mulai Julian dari instance, relatif terhadap zona waktu Kalender.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td>
|
||||
|
||||
|
||||
<td>Menit mulai dari instance yang diukur dari tengah malam, relatif terhadap
|
||||
zona waktu Kalender.
|
||||
zona waktu Kalender.
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
@@ -840,7 +840,7 @@ zona waktu Kalender.
|
||||
dalam URI. Dalam contoh ini, {@link android.provider.CalendarContract.Instances}
|
||||
mendapatkan akses ke bidang {@link
|
||||
android.provider.CalendarContract.EventsColumns#TITLE} melalui
|
||||
implementasi antarmuka {@link android.provider.CalendarContract.EventsColumns}-nya.
|
||||
implementasi antarmuka {@link android.provider.CalendarContract.EventsColumns}-nya.
|
||||
Dengan kata lain, {@link
|
||||
android.provider.CalendarContract.EventsColumns#TITLE} dihasilkan melalui
|
||||
tampilan database, bukan melalui query terhadap tabel {@link
|
||||
@@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] {
|
||||
Instances.BEGIN, // 1
|
||||
Instances.TITLE // 2
|
||||
};
|
||||
|
||||
|
||||
// The indices for the projection array above.
|
||||
private static final int PROJECTION_ID_INDEX = 0;
|
||||
private static final int PROJECTION_BEGIN_INDEX = 1;
|
||||
@@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis();
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
endTime.set(2011, 10, 24, 8, 0);
|
||||
long endMillis = endTime.getTimeInMillis();
|
||||
|
||||
|
||||
Cursor cur = null;
|
||||
ContentResolver cr = getContentResolver();
|
||||
|
||||
@@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis);
|
||||
ContentUris.appendId(builder, endMillis);
|
||||
|
||||
// Submit the query
|
||||
cur = cr.query(builder.build(),
|
||||
INSTANCE_PROJECTION,
|
||||
selection,
|
||||
selectionArgs,
|
||||
cur = cr.query(builder.build(),
|
||||
INSTANCE_PROJECTION,
|
||||
selection,
|
||||
selectionArgs,
|
||||
null);
|
||||
|
||||
|
||||
while (cur.moveToNext()) {
|
||||
String title = null;
|
||||
long eventID = 0;
|
||||
long beginVal = 0;
|
||||
|
||||
long beginVal = 0;
|
||||
|
||||
// Get the field values
|
||||
eventID = cur.getLong(PROJECTION_ID_INDEX);
|
||||
beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
|
||||
title = cur.getString(PROJECTION_TITLE_INDEX);
|
||||
|
||||
// Do something with the values.
|
||||
Log.i(DEBUG_TAG, "Event: " + title);
|
||||
|
||||
// Do something with the values.
|
||||
Log.i(DEBUG_TAG, "Event: " + title);
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(beginVal);
|
||||
calendar.setTimeInMillis(beginVal);
|
||||
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
|
||||
Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime()));
|
||||
Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime()));
|
||||
}
|
||||
}</pre>
|
||||
|
||||
@@ -922,9 +922,9 @@ while (cur.moveToNext()) {
|
||||
<td><br>
|
||||
{@link android.content.Intent#ACTION_VIEW VIEW} <br></td>
|
||||
<td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p>
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}.
|
||||
Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>.
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}.
|
||||
Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>.
|
||||
|
||||
</td>
|
||||
<td>Membuka kalender pada waktu yang ditetapkan oleh <code><ms_since_epoch></code>.</td>
|
||||
@@ -935,11 +935,11 @@ Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/
|
||||
|
||||
</td>
|
||||
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>.
|
||||
|
||||
|
||||
</td>
|
||||
<td>Menampilkan kejadian yang ditetapkan oleh <code><event_id></code>.</td>
|
||||
|
||||
@@ -952,12 +952,12 @@ Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/
|
||||
<tr>
|
||||
<td>{@link android.content.Intent#ACTION_EDIT EDIT} </td>
|
||||
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Menggunakan intent untuk mengedit kejadian</a>.
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
<td>Mengedit kejadian yang ditetapkan oleh <code><event_id></code>.</td>
|
||||
|
||||
@@ -972,11 +972,11 @@ Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/provid
|
||||
<br>
|
||||
{@link android.content.Intent#ACTION_INSERT INSERT} </td>
|
||||
<td><p><code>content://com.android.calendar/events</code></p>
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
|
||||
Anda juga bisa mengacu ke URI dengan
|
||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
||||
Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>.
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
<td>Membuat sebuah kejadian.</td>
|
||||
@@ -996,7 +996,7 @@ Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/provid
|
||||
<td>Nama kejadian.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
|
||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
||||
CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
|
||||
<td>Waktu mulai kejadian dalam milidetik sejak waktu patokan.</td>
|
||||
@@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME
|
||||
CalendarContract.EXTRA_EVENT_END_TIME}</td>
|
||||
|
||||
|
||||
<td>Waktu selesai kejadian dalam milidetik sejak waktu patokan.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY
|
||||
CalendarContract.EXTRA_EVENT_ALL_DAY}</td>
|
||||
|
||||
|
||||
<td>Sebuah boolean yang menunjukkan bahwa kejadian sehari penuh. Nilai bisa
|
||||
<code>true</code> atau <code>false</code>.</td> </tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION
|
||||
Events.EVENT_LOCATION}</td>
|
||||
|
||||
|
||||
<td>Lokasi kejadian.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION
|
||||
Events.DESCRIPTION}</td>
|
||||
|
||||
|
||||
<td>Keterangan kejadian.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td>
|
||||
<td>
|
||||
{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL
|
||||
Events.ACCESS_LEVEL}</td>
|
||||
|
||||
|
||||
<td>Apakah kejadian bersifat privat atau publik.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY
|
||||
Events.AVAILABILITY}</td>
|
||||
|
||||
|
||||
<td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa dijadwalkan.</td>
|
||||
|
||||
</table>
|
||||
|
||||
</table>
|
||||
<p>Bagian berikut menjelaskan cara menggunakan semua intent ini.</p>
|
||||
|
||||
|
||||
@@ -1059,23 +1059,23 @@ akan memungkinkan aplikasi Anda menyerahkan tugas penyisipan kejadian ke Kalende
|
||||
Dengan pendekatan ini, aplikasi Anda bahkan tidak perlu menyertakan izin {@link
|
||||
android.Manifest.permission#WRITE_CALENDAR} dalam <a href="#manifest">file manifesnya</a>.</p>
|
||||
|
||||
|
||||
|
||||
<p>Bila pengguna menjalankan aplikasi yang menggunakan pendekatan ini, aplikasi akan mengirim
|
||||
izin ke Kalender untuk menyelesaikan penambahan kejadian. Intent {@link
|
||||
android.content.Intent#ACTION_INSERT INSERT} menggunakan bidang-bidang ekstra
|
||||
untuk mengisi formulir lebih dahulu dengan detail kejadian dalam Kalender. Pengguna nanti bisa
|
||||
membatalkan kejadian, mengedit formulir sebagaimana diperlukan, atau menyimpan kejadian ke
|
||||
kalender mereka.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>Berikut ini adalah cuplikan kode yang menjadwalkan kejadian pada tanggal 19 Januari 2012, yang berjalan
|
||||
dari 7:30 pagi hingga 8:30 pagi Perhatikan hal-hal berikut tentang cuplikan kode ini:</p>
|
||||
|
||||
<ul>
|
||||
<li>Cuplikan kode ini menetapkan {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}
|
||||
<li>Cuplikan kode ini menetapkan {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}
|
||||
sebagai URI-nya.</li>
|
||||
|
||||
|
||||
<li>Cuplikan kode ini menggunakan bidang-bidang ekstra {@link
|
||||
android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
||||
CalendarContract.EXTRA_EVENT_BEGIN_TIME} dan {@link
|
||||
@@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME
|
||||
CalendarContract.EXTRA_EVENT_END_TIME} untuk mengisi dahulu formulir
|
||||
dengan waktu kejadian. Nilai-nilai untuk waktu ini harus dalam milidetik UTC
|
||||
sejak waktu patokan.</li>
|
||||
|
||||
|
||||
<li>Cuplikan kode ini menggunakan bidang ekstra {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}
|
||||
untuk memberikan daftar undangan yang dipisah koma, yang ditetapkan melalui alamat email.</li>
|
||||
|
||||
|
||||
</ul>
|
||||
<pre>
|
||||
Calendar beginTime = Calendar.getInstance();
|
||||
@@ -1158,18 +1158,18 @@ mengakses Penyedia Kalender:</p>
|
||||
|
||||
<ul>
|
||||
<li>Adaptor sinkronisasi perlu menetapkan bahwa dirinya sebuah adaptor sinkronisasi dengan mengatur {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} ke <code>true</code>.</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li>Adaptor sinkronisasi perlu memberikan {@link
|
||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} dan {@link
|
||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} sebagai parameter query dalam URI. </li>
|
||||
|
||||
|
||||
<li>Adaptor sinkronisasi memiliki akses tulis ke lebih banyak kolom daripada aplikasi atau widget.
|
||||
Misalnya, aplikasi hanya bisa mengubah sedikit karakteristik kalender,
|
||||
Misalnya, aplikasi hanya bisa mengubah sedikit karakteristik kalender,
|
||||
misalnya nama, nama tampilan, pengaturan visibilitas, dan apakah kalender
|
||||
disinkronkan atau tidak. Sebagai perbandingan, adaptor sinkronisasi bisa mengakses bukan hanya kolom-kolom itu, namun banyak kolom lainnya,
|
||||
misalnya warna kalender, zona waktu, tingkat akses, lokasi, dan seterusnya.
|
||||
Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan
|
||||
Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan
|
||||
<code>ACCOUNT_TYPE</code> yang ditetapkannya.</li> </ul>
|
||||
|
||||
<p>Berikut ini adalah metode pembantu yang bisa Anda gunakan untuk menghasilkan URI bagi penggunaan dengan adaptor sinkronisasi:</p>
|
||||
@@ -1180,5 +1180,5 @@ Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan
|
||||
.appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
|
||||
}
|
||||
</pre>
|
||||
<p>Untuk contoh implementasi adaptor sinkronisasi (yang tidak terkait secara khusus dengan Kalender), lihat
|
||||
<p>Untuk contoh implementasi adaptor sinkronisasi (yang tidak terkait secara khusus dengan Kalender), lihat
|
||||
<a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>.
|
||||
|
||||
@@ -236,7 +236,7 @@ page.title=Dasar-Dasar Penyedia Konten
|
||||
Misalnya, untuk mendapatkan daftar kata dan lokalnya dari Penyedia Kamus Pengguna,
|
||||
Anda memanggil {@link android.content.ContentResolver#query ContentResolver.query()}.
|
||||
Metode {@link android.content.ContentResolver#query query()} memanggil
|
||||
metode {@link android.content.ContentProvider#query ContentProvider.query()} yang didefinisikan oleh
|
||||
metode {@link android.content.ContentProvider#query ContentProvider.query()} yang didefinisikan oleh
|
||||
Penyedia Kamus Pengguna. Baris-baris kode berikut menunjukkan sebuah
|
||||
panggilan {@link android.content.ContentResolver#query ContentResolver.query()}:
|
||||
<p>
|
||||
@@ -251,7 +251,7 @@ mCursor = getContentResolver().query(
|
||||
</pre>
|
||||
<p>
|
||||
Tabel 2 menampilkan cara argumen untuk
|
||||
{@link android.content.ContentResolver#query
|
||||
{@link android.content.ContentResolver#query
|
||||
query(Uri,projection,selection,selectionArgs,sortOrder)} cocok dengan sebuah pernyataan SELECT di SQL:
|
||||
</p>
|
||||
<p class="table-caption">
|
||||
@@ -310,7 +310,7 @@ mCursor = getContentResolver().query(
|
||||
{@link android.provider.UserDictionary.Words#CONTENT_URI} mengandung URI konten dari
|
||||
tabel "words" kamus pengguna. Objek {@link android.content.ContentResolver}
|
||||
akan mengurai otoritas URI, dan menggunakannya untuk "mengetahui" penyedia dengan
|
||||
membandingkan otoritas tersebut dengan sebuah tabel sistem berisi penyedia yang dikenal.
|
||||
membandingkan otoritas tersebut dengan sebuah tabel sistem berisi penyedia yang dikenal.
|
||||
{@link android.content.ContentResolver} kemudian bisa mengirim argumen query ke penyedia
|
||||
yang benar.
|
||||
</p>
|
||||
@@ -343,8 +343,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
|
||||
salah satunya.
|
||||
</p>
|
||||
<p class="note">
|
||||
<strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder}
|
||||
berisi metode praktis untuk membangun objek dari string URI yang tersusun dengan baik.
|
||||
<strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder}
|
||||
berisi metode praktis untuk membangun objek dari string URI yang tersusun dengan baik.
|
||||
{@link android.content.ContentUris} berisi metode praktis untuk menambahkan nilai ID ke
|
||||
URI. Cuplikan kode sebelumnya menggunakan {@link android.content.ContentUris#withAppendedId
|
||||
withAppendedId()} untuk menambahkan id ke URI konten User Dictionary.
|
||||
@@ -359,8 +359,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
|
||||
</p>
|
||||
<p class="note">
|
||||
Demi kejelasan, cuplikan kode di bagian ini memanggil
|
||||
{@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam
|
||||
kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya
|
||||
{@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam
|
||||
kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya
|
||||
adalah menggunakan kelas {@link android.content.CursorLoader}, yang dijelaskan
|
||||
lebih detail dalam panduan <a href="{@docRoot}guide/components/loaders.html">
|
||||
Loader</a>. Juga, baris-baris kode tersebut hanyalah cuplikan; tidak menunjukkan sebuah aplikasi
|
||||
@@ -428,7 +428,7 @@ String[] mSelectionArgs = {""};
|
||||
<p>
|
||||
Cuplikan berikutnya menampilkan cara menggunakan
|
||||
{@link android.content.ContentResolver#query ContentResolver.query()}, dengan menggunakan Penyedia Kamus Pengguna
|
||||
sebagai contoh. Query klien penyedia serupa dengan query SQL, dan berisi satu
|
||||
sebagai contoh. Query klien penyedia serupa dengan query SQL, dan berisi satu
|
||||
set kolom yang akan dihasilkan, satu set kriteria pemilihan, dan urutan sortir.
|
||||
</p>
|
||||
<p>
|
||||
@@ -438,8 +438,8 @@ String[] mSelectionArgs = {""};
|
||||
<p>
|
||||
Ekspresi yang menetapkan baris yang harus diambil dipecah menjadi klausa pemilihan dan
|
||||
argumen pemilihan. Klausa pemilihan adalah kombinasi ekspresi logis dan boolean,
|
||||
nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan
|
||||
parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai
|
||||
nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan
|
||||
parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai
|
||||
dari larik argumen pemilihan (variabel <code>mSelectionArgs</code>).
|
||||
</p>
|
||||
<p>
|
||||
@@ -558,21 +558,21 @@ String[] selectionArgs = {""};
|
||||
selectionArgs[0] = mUserInput;
|
||||
</pre>
|
||||
<p>
|
||||
Sebuah klausa pemilihan yang menggunakan <code>?</code> sebagai parameter yang bisa diganti dan sebuah larik
|
||||
Sebuah klausa pemilihan yang menggunakan <code>?</code> sebagai parameter yang bisa diganti dan sebuah larik
|
||||
argumen pemilihan adalah cara yang lebih disukai untuk menyebutkan pemilihan, sekalipun penyedia tidak
|
||||
dibuat berdasarkan database SQL.
|
||||
</p>
|
||||
<!-- Displaying the results -->
|
||||
<h3 id="DisplayResults">Menampilkan hasil query</h3>
|
||||
<p>
|
||||
Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu
|
||||
menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh
|
||||
Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu
|
||||
menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh
|
||||
proyeksi query untuk baris yang cocok dengan kriteria pemilihan query. Objek
|
||||
{@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang
|
||||
dimuatnya. Dengan metode {@link android.database.Cursor}, Anda bisa mengulang baris-baris dalam
|
||||
{@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang
|
||||
dimuatnya. Dengan metode {@link android.database.Cursor}, Anda bisa mengulang baris-baris dalam
|
||||
hasil, menentukan tipe data tiap kolom, mengambil data dari kolom, dan memeriksa
|
||||
properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor}
|
||||
akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat
|
||||
properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor}
|
||||
akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat
|
||||
bila {@link android.database.Cursor} berubah, atau keduanya.
|
||||
</p>
|
||||
<p class="note">
|
||||
@@ -703,14 +703,14 @@ if (mCursor != null) {
|
||||
<p>
|
||||
Untuk mendapatkan izin yang diperlukan untuk mengakses penyedia, aplikasi memintanya dengan elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna
|
||||
harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya,
|
||||
dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna
|
||||
harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya,
|
||||
Package Manager akan melanjutkan instalasi; jika pengguna tidak menyetujui, Package Manager
|
||||
akan membatalkan instalasi.
|
||||
</p>
|
||||
<p>
|
||||
Elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
berikut meminta akses baca ke Penyedia Kamus Pengguna:
|
||||
</p>
|
||||
<pre>
|
||||
@@ -793,8 +793,8 @@ content://user_dictionary/words/<id_value>
|
||||
Untuk memperbarui sebuah baris, gunakan objek {@link android.content.ContentValues} dengan
|
||||
nilai-nilai yang diperbarui, persis seperti yang Anda lakukan pada penyisipan, dan kriteria pemilihan persis seperti yang Anda lakukan pada query.
|
||||
Metode klien yang Anda gunakan adalah
|
||||
{@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan
|
||||
nilai-nilai ke objek {@link android.content.ContentValues} untuk kolom yang sedang Anda perbarui. Jika Anda
|
||||
{@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan
|
||||
nilai-nilai ke objek {@link android.content.ContentValues} untuk kolom yang sedang Anda perbarui. Jika Anda
|
||||
ingin membersihkan konten kolom, aturlah nilai ke <code>null</code>.
|
||||
</p>
|
||||
<p>
|
||||
@@ -828,7 +828,7 @@ mRowsUpdated = getContentResolver().update(
|
||||
</pre>
|
||||
<p>
|
||||
Anda juga harus membersihkan input pengguna bila memanggil
|
||||
{@link android.content.ContentResolver#update ContentResolver.update()}. Untuk mengetahui selengkapnya tentang
|
||||
{@link android.content.ContentResolver#update ContentResolver.update()}. Untuk mengetahui selengkapnya tentang
|
||||
hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
|
||||
</p>
|
||||
<h3 id="Deleting">Menghapus data</h3>
|
||||
@@ -858,7 +858,7 @@ mRowsDeleted = getContentResolver().delete(
|
||||
</pre>
|
||||
<p>
|
||||
Anda juga harus membersihkan input pengguna bila memanggil
|
||||
{@link android.content.ContentResolver#delete ContentResolver.delete()}. Untuk mengetahui selengkapnya tentang
|
||||
{@link android.content.ContentResolver#delete ContentResolver.delete()}. Untuk mengetahui selengkapnya tentang
|
||||
hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
|
||||
</p>
|
||||
<!-- Provider Data Types -->
|
||||
@@ -883,7 +883,7 @@ mRowsDeleted = getContentResolver().delete(
|
||||
</ul>
|
||||
<p>
|
||||
Tipe data lain yang sering digunakan penyedia adalah Binary Large OBject (BLOB) yang diimplementasikan sebagai
|
||||
larik byte 64 KB. Anda bisa melihat tipe data yang tersedia dengan memperhatikan metode "get"
|
||||
larik byte 64 KB. Anda bisa melihat tipe data yang tersedia dengan memperhatikan metode "get"
|
||||
kelas {@link android.database.Cursor}.
|
||||
</p>
|
||||
<p>
|
||||
@@ -905,7 +905,7 @@ mRowsDeleted = getContentResolver().delete(
|
||||
{@link android.content.ContentResolver#getType ContentResolver.getType()}.
|
||||
</p>
|
||||
<p>
|
||||
Bagian <a href="#MIMETypeReference">Acuan Tipe MIME</a> menerangkan
|
||||
Bagian <a href="#MIMETypeReference">Acuan Tipe MIME</a> menerangkan
|
||||
sintaks tipe MIME baik yang standar maupun custom.
|
||||
</p>
|
||||
|
||||
@@ -946,9 +946,9 @@ mRowsDeleted = getContentResolver().delete(
|
||||
Untuk mengakses penyedia dalam "mode batch",
|
||||
buat satu larik objek {@link android.content.ContentProviderOperation}, kemudian
|
||||
kirim larik itu ke penyedia konten dengan
|
||||
{@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan
|
||||
<em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu.
|
||||
Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja
|
||||
{@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan
|
||||
<em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu.
|
||||
Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja
|
||||
terhadap tabel yang berbeda. Panggilan ke {@link android.content.ContentResolver#applyBatch
|
||||
ContentResolver.applyBatch()} menghasilkan satu larik hasil.
|
||||
</p>
|
||||
@@ -1011,7 +1011,7 @@ mRowsDeleted = getContentResolver().delete(
|
||||
<p>
|
||||
Penyedia mendefinisikan izin URI untuk URI konten dalam manifesnya, dengan menggunakan atribut
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">android:grantUriPermission</a></code>
|
||||
dari elemen
|
||||
dari elemen
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>
|
||||
, serta elemen anak
|
||||
<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code>
|
||||
@@ -1184,7 +1184,7 @@ content://com.example.trains/Line2/5
|
||||
vnd.android.cursor.<strong>item</strong>/vnd.example.line2
|
||||
</pre>
|
||||
<p>
|
||||
Kebanyakan penyedia konten mendefinisikan konstanta kelas kontrak untuk tipe MIME yang digunakannya. Kelas kontrak
|
||||
Kebanyakan penyedia konten mendefinisikan konstanta kelas kontrak untuk tipe MIME yang digunakannya. Kelas kontrak
|
||||
{@link android.provider.ContactsContract.RawContacts} pada Penyedia Kontak
|
||||
misalnya, mendefinisikan konstanta
|
||||
{@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} untuk tipe MIME
|
||||
|
||||
@@ -1171,7 +1171,7 @@ metadata lain yang melekat ke penyedia. Kelas
|
||||
<li>
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label">
|
||||
android:label</a></code>: Label informatif yang menjelaskan penyedia atau
|
||||
datanya, atau keduanya. Label ini muncul dalam daftar aplikasi di
|
||||
datanya, atau keduanya. Label ini muncul dalam daftar aplikasi di
|
||||
<em>Settings</em> > <em>Apps</em> > <em>All</em>.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1189,7 +1189,7 @@ metadata lain yang melekat ke penyedia. Kelas
|
||||
Aplikasi bisa mengakses penyedia konten secara tidak langsung dengan sebuah {@link android.content.Intent}.
|
||||
Aplikasi tidak memanggil satu pun dari metode-metode {@link android.content.ContentResolver} atau
|
||||
{@link android.content.ContentProvider}. Sebagai gantinya, aplikasi mengirim intent yang memulai aktivitas,
|
||||
yang sering kali merupakan bagian dari aplikasi penyedia sendiri. Aktivitas tujuan bertugas
|
||||
yang sering kali merupakan bagian dari aplikasi penyedia sendiri. Aktivitas tujuan bertugas
|
||||
mengambil dan menampilkan data dalam UI-nya. Bergantung pada tindakan dalam intent,
|
||||
aktivitas tujuan juga bisa meminta pengguna untuk membuat modifikasi pada data penyedia.
|
||||
Intent juga bisa berisi data "ekstra" yang menampilkan aktivitas tujuan
|
||||
|
||||
@@ -69,7 +69,7 @@ menempelkan data atau file yang kompleks dari aplikasi Anda ke aplikasi lain.
|
||||
<p>
|
||||
Android sendiri berisi penyedia konten yang mengelola data seperti informasi audio, video, gambar, dan
|
||||
kontak pribadi. Anda bisa melihat sebagian informasi ini tercantum dalam dokumentasi
|
||||
acuan untuk paket
|
||||
acuan untuk paket
|
||||
<code><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a>
|
||||
</code>. Dengan beberapa batasan, semua penyedia ini bisa diakses oleh aplikasi Android
|
||||
apa saja.
|
||||
|
||||
@@ -96,7 +96,7 @@ walaupun cara penyedia dokumen Anda secara fisik menyimpan data adalah terserah
|
||||
Platform Android terdiri dari beberapa penyedia dokumen bawaan, seperti
|
||||
Downloads, Images, dan Videos.</li>
|
||||
|
||||
<li><strong>Aplikasi klien</strong>—Aplikasi custom yang memanggil intent
|
||||
<li><strong>Aplikasi klien</strong>—Aplikasi custom yang memanggil intent
|
||||
{@link android.content.Intent#ACTION_OPEN_DOCUMENT} dan/atau
|
||||
{@link android.content.Intent#ACTION_CREATE_DOCUMENT} dan menerima
|
||||
file yang dihasilkan penyedia dokumen.</li>
|
||||
@@ -446,7 +446,7 @@ bisa terus menulis ke dokumen itu.</p>
|
||||
|
||||
<h3 id="delete">Menghapus dokumen</h3>
|
||||
|
||||
<p>Jika Anda memiliki URI dokumen dan
|
||||
<p>Jika Anda memiliki URI dokumen dan
|
||||
{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS}
|
||||
dokumen berisi
|
||||
{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE},
|
||||
|
||||
@@ -60,7 +60,7 @@ melihat ke sana untuk menemukan ID sumber daya. ID sumber daya selalu terdiri da
|
||||
string}, {@code drawable}, dan {@code layout}. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat <a href="available-resources.html">Tipe Sumber Daya</a>.
|
||||
</li>
|
||||
<li><em>Nama sumber daya</em>, bisa berupa: nama file,
|
||||
tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika
|
||||
tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika
|
||||
sumber daya itu sebuah nilai sederhana (misalnya sebuah string).</li>
|
||||
</ul>
|
||||
|
||||
@@ -259,8 +259,8 @@ mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya:</p>
|
||||
android:text="@string/hello" />
|
||||
</pre>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang
|
||||
waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain.
|
||||
<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang
|
||||
waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain.
|
||||
Untuk informasi tentang cara menciptakan
|
||||
sumber daya alternatif (seperti string lokal), lihat <a href="providing-resources.html#AlternativeResources">Menyediakan Sumber Daya Alternatif
|
||||
</a>. Untuk panduan lengkap melokalkan aplikasi Anda ke bahasa lain,
|
||||
@@ -332,6 +332,6 @@ android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple
|
||||
|
||||
<p>Dalam contoh ini, {@link android.R.layout#simple_list_item_1} adalah sumber daya layout yang didefinisikan oleh
|
||||
platform untuk item di {@link android.widget.ListView}. Anda bisa menggunakannya sebagai ganti menciptakan
|
||||
layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang
|
||||
layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang
|
||||
<a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>.</p>
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ aplikasi, agar Anda bisa memeliharanya secara independen. Mengeksternalkan
|
||||
sumber daya juga membuat Anda dapat menyediakan sumber daya alternatif yang mendukung konfigurasi
|
||||
perangkat tertentu seperti bahasa atau ukuran layar yang berbeda, yang semakin penting
|
||||
seiring semakin banyak tersedianya perangkat berbasis Android dengan konfigurasi berbeda. Untuk
|
||||
memberikan kompatibilitas dengan konfigurasi berbeda, Anda harus menata sumber daya dalam
|
||||
memberikan kompatibilitas dengan konfigurasi berbeda, Anda harus menata sumber daya dalam
|
||||
direktori {@code res/} proyek Anda, menggunakan berbagai subdirektori yang mengelompokkan sumber daya menurut tipe
|
||||
dan konfigurasinya.</p>
|
||||
|
||||
@@ -46,7 +46,7 @@ ukuran layar berbeda.</p>
|
||||
<em>alternatif</em> untuk aplikasi Anda:</p>
|
||||
<ul>
|
||||
<li>Sumber daya default adalah sumber daya yang harus digunakan apa pun
|
||||
konfigurasi perangkatnya atau jika tidak ada sumber daya alternatif yang sesuai
|
||||
konfigurasi perangkatnya atau jika tidak ada sumber daya alternatif yang sesuai
|
||||
dengan konfigurasi saat ini.</li>
|
||||
<li>Sumber daya alternatif adalah sumber daya yang Anda desain untuk digunakan dengan
|
||||
konfigurasi tertentu. Untuk menetapkan bahwa satu kelompok sumber daya ditujukan bagi konfigurasi tertentu,
|
||||
|
||||
@@ -176,7 +176,7 @@ string</a>.</li>
|
||||
<li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li>
|
||||
</ul>
|
||||
<p>Lihat <a href="string-resource.html">Sumber Daya String</a>,
|
||||
<a href="style-resource.html">Sumber Daya Gaya</a>, dan
|
||||
<a href="style-resource.html">Sumber Daya Gaya</a>, dan
|
||||
<a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -289,7 +289,7 @@ qualifier konfigurasi.</p>
|
||||
dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja,
|
||||
<code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk
|
||||
Orange.</p>
|
||||
<p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal
|
||||
<p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal
|
||||
dari kartu SIM.</p>
|
||||
<p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal
|
||||
spesifik untuk negara itu di aplikasi Anda). Jika Anda perlu menetapkan hanya berdasarkan bahasa, maka gunakan qualifier
|
||||
@@ -312,7 +312,7 @@ dan kode jaringan seluler.</p>
|
||||
dll.
|
||||
</td>
|
||||
<td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO
|
||||
639-1</a>, bisa juga diikuti dengan kode wilayah
|
||||
639-1</a>, bisa juga diikuti dengan kode wilayah
|
||||
dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO
|
||||
3166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}").
|
||||
</p><p>
|
||||
@@ -428,8 +428,8 @@ berubah antara lanskap dan potret agar cocok dengan lebar sebenarnya saat ini.</
|
||||
<p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
|
||||
untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
|
||||
lebar layar perangkat saat ini. Nilai
|
||||
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
||||
elemen UI persisten di tepi kiri atau kanan, layar
|
||||
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
||||
elemen UI persisten di tepi kiri atau kanan, layar
|
||||
menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan
|
||||
elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p>
|
||||
<p><em>Ditambahkan dalam API level 13.</em></p>
|
||||
@@ -455,14 +455,14 @@ sumber daya —bersama nilai yang didefinisikan oleh <code><N></code>.
|
||||
berubah antara lanskap dan potret agar cocok dengan tinggi sebenarnya saat ini.</p>
|
||||
<p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
|
||||
untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi)
|
||||
tinggi layar perangkat saat ini. Nilai
|
||||
tinggi layar perangkat saat ini. Nilai
|
||||
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
||||
elemen UI persisten di tepi atas atau bawah, layar akan
|
||||
menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan
|
||||
elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi
|
||||
layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
|
||||
disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula
|
||||
dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan
|
||||
elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi
|
||||
layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
|
||||
disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula
|
||||
dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan
|
||||
untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan.
|
||||
<p><em>Ditambahkan dalam API level 13.</em></p>
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp}
|
||||
@@ -482,35 +482,35 @@ Multi Layar</a>.</p>
|
||||
</td>
|
||||
<td>
|
||||
<ul class="nolist">
|
||||
<li>{@code small}: Layar yang berukuran serupa dengan
|
||||
layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
|
||||
adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah
|
||||
<li>{@code small}: Layar yang berukuran serupa dengan
|
||||
layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
|
||||
adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah
|
||||
dan VGA densitas tinggi.</li>
|
||||
<li>{@code normal}: Layar yang berukuran serupa dengan
|
||||
<li>{@code normal}: Layar yang berukuran serupa dengan
|
||||
layar HVGA densitas sedang. Ukuran layout minimum untuk
|
||||
layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah
|
||||
layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah
|
||||
WQVGA densitas rendah, HVGA densitas sedang, WVGA
|
||||
densitas tinggi.</li>
|
||||
<li>{@code large}: Layar yang berukuran serupa dengan
|
||||
<li>{@code large}: Layar yang berukuran serupa dengan
|
||||
layar VGA densitas sedang.
|
||||
Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp.
|
||||
Misalnya layar VGA dan WVGA densitas sedang.</li>
|
||||
<li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
|
||||
densitas sedang tradisional. Ukuran layout minimum untuk
|
||||
layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar
|
||||
<li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
|
||||
densitas sedang tradisional. Ukuran layout minimum untuk
|
||||
layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar
|
||||
seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar
|
||||
berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li>
|
||||
</ul>
|
||||
<p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa
|
||||
<p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa
|
||||
sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber
|
||||
daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya
|
||||
mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
|
||||
<p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan
|
||||
qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi
|
||||
<p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan
|
||||
qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi
|
||||
Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code
|
||||
xlarge}, namun perangkat memiliki ukuran layar normal).</p>
|
||||
<p><em>Ditambahkan dalam API level 4.</em></p>
|
||||
|
||||
|
||||
<p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
|
||||
Layar</a> untuk informasi selengkapnya.</p>
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
|
||||
@@ -552,7 +552,7 @@ tidak ada kaitannya dengan orientasi layar.</p>
|
||||
<p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar
|
||||
layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
|
||||
informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation},
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation},
|
||||
yang menunjukkan orientasi perangkat saat ini.</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -569,19 +569,19 @@ yang menunjukkan orientasi perangkat saat ini.</p>
|
||||
<ul class="nolist">
|
||||
<li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li>
|
||||
<li>{@code desk}: Perangkat sedang menampilkan di dudukan perangkat di meja</li>
|
||||
<li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan
|
||||
<li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan
|
||||
pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna,
|
||||
terutama diorientasikan seputar DPAD atau
|
||||
terutama diorientasikan seputar DPAD atau
|
||||
interaksi non-pointer lainnya</li>
|
||||
<li>{@code appliance}: Perangkat berlaku sebagai
|
||||
<li>{@code appliance}: Perangkat berlaku sebagai
|
||||
alat, tanpa tampilan</li>
|
||||
<li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li>
|
||||
</ul>
|
||||
<p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p>
|
||||
<p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan
|
||||
<p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan
|
||||
ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan
|
||||
dan Memantau Kondisi dan Tipe Dudukan</a>.</p>
|
||||
<p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di
|
||||
<p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di
|
||||
dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link
|
||||
android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
|
||||
informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
|
||||
@@ -601,7 +601,7 @@ informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p
|
||||
<p><em>Ditambahkan dalam API level 8.</em></p>
|
||||
<p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam
|
||||
mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari. Anda dapat mengaktifkan
|
||||
atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi
|
||||
atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi
|
||||
aplikasi Anda selama runtime.</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -627,8 +627,8 @@ aplikasi Anda selama runtime.</p>
|
||||
Level 8.</em></li>
|
||||
<li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API
|
||||
Level 16.</em></li>
|
||||
<li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
|
||||
lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a>
|
||||
<li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
|
||||
lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a>
|
||||
dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API
|
||||
Level 18.</em></li>
|
||||
<li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda
|
||||
@@ -696,7 +696,7 @@ fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untu
|
||||
hal ini memengaruhi aplikasi Anda selama runtime.</p>
|
||||
<p>Lihat juga bidang konfigurasi {@link
|
||||
android.content.res.Configuration#hardKeyboardHidden} dan {@link
|
||||
android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas
|
||||
android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas
|
||||
keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -716,7 +716,7 @@ pengguna
|
||||
<li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak
|
||||
pada pengguna.</li>
|
||||
</ul>
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard},
|
||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard},
|
||||
yang menunjukkan metode utama input teks yang tersedia.</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -810,7 +810,7 @@ Sumber Daya</a>.</p>
|
||||
<li>Anda bisa menetapkan beberapa qualifier untuk satu set sumber daya, yang dipisahkan dengan tanda hubung. Misalnya,
|
||||
<code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi
|
||||
lanskap.</li>
|
||||
<li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>.
|
||||
<li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>.
|
||||
Misalnya:
|
||||
<ul>
|
||||
<li>Salah: <code>drawable-hdpi-port/</code></li>
|
||||
@@ -947,7 +947,7 @@ layout-land/} untuk lanskap dan {@code layout-port/} untuk potret, biarkan salah
|
||||
{@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p>
|
||||
|
||||
<p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada
|
||||
konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan
|
||||
konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan
|
||||
qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru,
|
||||
namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama
|
||||
Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi
|
||||
@@ -1058,7 +1058,7 @@ Layar</a>.</p>
|
||||
</li>
|
||||
|
||||
<li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi
|
||||
layar adalah qualifier berikutnya yang memiliki kecocokan.
|
||||
layar adalah qualifier berikutnya yang memiliki kecocokan.
|
||||
Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus:
|
||||
<pre class="classic no-pretty-print">
|
||||
<strike>drawable-en/</strike>
|
||||
|
||||
@@ -82,12 +82,12 @@ aktivitas untuk mempertahankan objek stateful.</p>
|
||||
<p>Untuk mempertahankan objek stateful dalam fragmen selama perubahan konfigurasi runtime:</p>
|
||||
|
||||
<ol>
|
||||
<li>Perluas kelas {@link android.app.Fragment} dan deklarasikan referensi ke objek stateful
|
||||
<li>Perluas kelas {@link android.app.Fragment} dan deklarasikan referensi ke objek stateful
|
||||
Anda.</li>
|
||||
<li>Panggil {@link android.app.Fragment#setRetainInstance(boolean)} saat fragmen dibuat.
|
||||
</li>
|
||||
<li>Tambahkan fragmen ke aktivitas.</li>
|
||||
<li>Gunakan {@link android.app.FragmentManager} untuk mengambil fragmen saat aktivitas
|
||||
<li>Gunakan {@link android.app.FragmentManager} untuk mengambil fragmen saat aktivitas
|
||||
di-restart.</li>
|
||||
</ol>
|
||||
|
||||
@@ -125,8 +125,8 @@ membocorkan semua tampilan dan sumber daya instance aktivitas semula. (Sumber da
|
||||
berarti bahwa aplikasi Anda tetap menyimpannya dan tidak bisa dijadikan kumpulan sampah, sehingga bisa banyak
|
||||
memori yang hilang.)</p>
|
||||
|
||||
<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas.
|
||||
Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan
|
||||
<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas.
|
||||
Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan
|
||||
konfigurasi runtime. Misalnya, definisikan aktivitas Anda sebagai berikut:</p>
|
||||
|
||||
<pre>
|
||||
|
||||
@@ -69,7 +69,7 @@ semacam kontrol input tertentu, Anda bisa membangun <a href="{@docRoot}guide/top
|
||||
<tr>
|
||||
<td><a href="controls/radiobutton.html">Tombol radio</a></td>
|
||||
<td>Mirip dengan kotak cek, hanya saja cuma satu opsi yang bisa dipilih dalam kumpulan tersebut.</td>
|
||||
<td>{@link android.widget.RadioGroup RadioGroup}
|
||||
<td>{@link android.widget.RadioGroup RadioGroup}
|
||||
<br>{@link android.widget.RadioButton RadioButton} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -74,7 +74,7 @@ tertarik dalam membuat instance objek View saat runtime, lihat referensi kelas {
|
||||
<code>EditText.setText()</code>. </p>
|
||||
|
||||
<p class="note"><strong>Tip:</strong> Ketahui selengkapnya berbagai tipe layout dalam <a href="{@docRoot}guide/topics/ui/layout-objects.html">Objek
|
||||
Layout Umum</a>. Ada juga sekumpulan tutorial tentang cara membangun berbagai layout dalam panduan tutorial
|
||||
Layout Umum</a>. Ada juga sekumpulan tutorial tentang cara membangun berbagai layout dalam panduan tutorial
|
||||
<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>.</p>
|
||||
|
||||
<h2 id="write">Tulis XML</h2>
|
||||
@@ -107,7 +107,7 @@ dalam direktori <code>res/layout/</code> proyek Android, sehingga nanti bisa dik
|
||||
|
||||
<h2 id="load">Muat Sumber Daya XML</h2>
|
||||
|
||||
<p>Saat mengompilasi aplikasi, masing-masing file layout XML akan dikompilasi dalam sebuah sumber daya
|
||||
<p>Saat mengompilasi aplikasi, masing-masing file layout XML akan dikompilasi dalam sebuah sumber daya
|
||||
{@link android.view.View}. Anda harus memuat sumber daya layout dari kode aplikasi, dalam implementasi
|
||||
callback {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}.
|
||||
Lakukan dengan memanggil <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,
|
||||
@@ -367,8 +367,8 @@ kiri anak B) atau terhadap induk (disejajarkan dengan atas induknya).</p>
|
||||
|
||||
<h2 id="AdapterViews" style="clear:left">Membangun Layout dengan Adaptor</h2>
|
||||
|
||||
<p>Bila isi layout bersifat dinamis atau tidak dipastikan sebelumnya, Anda bisa menggunakan layout yang menjadi
|
||||
subkelas {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime.
|
||||
<p>Bila isi layout bersifat dinamis atau tidak dipastikan sebelumnya, Anda bisa menggunakan layout yang menjadi
|
||||
subkelas {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime.
|
||||
Subkelas dari kelas {@link android.widget.AdapterView} menggunakan {@link android.widget.Adapter} untuk
|
||||
mengikat data ke layoutnya. {@link android.widget.Adapter} berfungsi sebagai penghubung antara sumber data
|
||||
dan layout{@link android.widget.AdapterView}—{@link android.widget.Adapter}
|
||||
@@ -445,7 +445,7 @@ harus memasukkan tampilan layout. Misalnya, jika Anda ingin untuk membuat daftar
|
||||
nama orang dan nomor telepon, Anda bisa melakukan query yang menghasilkan {@link
|
||||
android.database.Cursor} yang berisi satu baris untuk tiap orang dan kolom-kolom untuk nama dan
|
||||
nomor. Selanjutnya Anda membuat larik string yang menentukan kolom dari {@link
|
||||
android.database.Cursor} yang Anda inginkan dalam layout untuk setiap hasil dan larik integer yang menentukan
|
||||
android.database.Cursor} yang Anda inginkan dalam layout untuk setiap hasil dan larik integer yang menentukan
|
||||
tampilan yang sesuai untuk menempatkan masing-masing kolom:</p>
|
||||
<pre>
|
||||
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
|
||||
|
||||
@@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment
|
||||
<li>{@link android.app.DialogFragment}</li>
|
||||
<li>{@link android.app.AlertDialog}</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Lihat juga</h2>
|
||||
<ol>
|
||||
<li><a href="{@docRoot}design/building-blocks/dialogs.html">Panduan desain dialog</a></li>
|
||||
@@ -89,7 +89,7 @@ pada layar besar dan kecil).</p>
|
||||
|
||||
<p>Bagian-bagian berikutnya dalam panduan ini akan menjelaskan cara menggunakan {@link
|
||||
android.support.v4.app.DialogFragment} yang dikombinasikan dengan objek {@link android.app.AlertDialog}
|
||||
. Jika Anda ingin membuat picker tanggal atau waktu, Anda harus membaca panduan
|
||||
. Jika Anda ingin membuat picker tanggal atau waktu, Anda harus membaca panduan
|
||||
<a href="{@docRoot}guide/topics/ui/controls/pickers.html">Picker</a>.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong>
|
||||
@@ -235,8 +235,8 @@ AlertDialog dialog = builder.create();
|
||||
</pre>
|
||||
|
||||
<p>Metode <code>set...Button()</code> mengharuskan adanya judul bagi tombol (disediakan
|
||||
oleh suatu <a href="{@docRoot}guide/topics/resources/string-resource.html">sumber daya string</a>) dan
|
||||
{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil
|
||||
oleh suatu <a href="{@docRoot}guide/topics/resources/string-resource.html">sumber daya string</a>) dan
|
||||
{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil
|
||||
bila pengguna menekan tombol.</p>
|
||||
|
||||
<p>Ada tiga macam tombol tindakan yang Anda bisa tambahkan:</p>
|
||||
@@ -247,8 +247,8 @@ bila pengguna menekan tombol.</p>
|
||||
<dd>Anda harus menggunakan tipe ini untuk membatalkan tindakan.</dd>
|
||||
<dt>Netral</dt>
|
||||
<dd>Anda harus menggunakan tipe ini bila pengguna mungkin tidak ingin melanjutkan tindakan,
|
||||
namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan
|
||||
tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd>
|
||||
namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan
|
||||
tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd>
|
||||
</dl>
|
||||
|
||||
<p>Anda hanya bisa menambahkan salah satu tipe tombol ke {@link
|
||||
@@ -271,7 +271,7 @@ Dialog dengan satu judul dan daftar.</p>
|
||||
<li>Daftar pilihan ganda persisten (kotak cek)</li>
|
||||
</ul>
|
||||
|
||||
<p>Untuk membuat daftar pilihan tunggal seperti dalam gambar 3,
|
||||
<p>Untuk membuat daftar pilihan tunggal seperti dalam gambar 3,
|
||||
gunakan metode {@link android.app.AlertDialog.Builder#setItems setItems()}:</p>
|
||||
|
||||
<pre style="clear:right">
|
||||
@@ -291,7 +291,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
<p>Karena daftar muncul dalam area konten dialog,
|
||||
dialog tidak bisa menampilkan pesan dan daftar sekaligus dan Anda harus menetapkan judul untuk
|
||||
dialog dengan {@link android.app.AlertDialog.Builder#setTitle setTitle()}.
|
||||
dialog dengan {@link android.app.AlertDialog.Builder#setTitle setTitle()}.
|
||||
Untuk menentukan item daftar, panggil {@link
|
||||
android.app.AlertDialog.Builder#setItems setItems()}, dengan meneruskan larik.
|
||||
Atau, Anda bisa menetapkan daftar menggunakan {@link
|
||||
@@ -300,7 +300,7 @@ dengan data dinamis (seperti dari database) dengan menggunakan {@link android.wi
|
||||
|
||||
<p>Jika Anda memilih untuk mendukung daftar dengan {@link android.widget.ListAdapter},
|
||||
selalu gunakan sebuah {@link android.support.v4.content.Loader} agar konten dimuat
|
||||
secara asinkron. Hal ini dijelaskan lebih jauh dalam panduan
|
||||
secara asinkron. Hal ini dijelaskan lebih jauh dalam panduan
|
||||
<a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">Membuat Layout
|
||||
dengan Adaptor</a> dan <a href="{@docRoot}guide/components/loaders.html">Loader</a>
|
||||
.</p>
|
||||
@@ -317,11 +317,11 @@ Daftar item pilihan ganda.</p>
|
||||
|
||||
<h4 id="Checkboxes">Menambahkan daftar pilihan ganda atau pilihan tunggal persisten</h4>
|
||||
|
||||
<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau
|
||||
item pilihan tunggal (tombol radio), gunakan masing-masing metode
|
||||
<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau
|
||||
item pilihan tunggal (tombol radio), gunakan masing-masing metode
|
||||
{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String,
|
||||
DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau
|
||||
{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
||||
DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau
|
||||
{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
||||
setSingleChoiceItems()}.</p>
|
||||
|
||||
<p>Misalnya, berikut ini cara membuat daftar pilihan ganda seperti
|
||||
@@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
// If the user checked the item, add it to the selected items
|
||||
mSelectedItems.add(which);
|
||||
} else if (mSelectedItems.contains(which)) {
|
||||
// Else, if the item is already in the array, remove it
|
||||
// Else, if the item is already in the array, remove it
|
||||
mSelectedItems.remove(Integer.valueOf(which));
|
||||
}
|
||||
}
|
||||
@@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
<p>Walaupun daftar tradisional maupun daftar dengan tombol radio
|
||||
menyediakan tindakan "pilihan tunggal", Anda harus menggunakan {@link
|
||||
android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
||||
android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
||||
setSingleChoiceItems()} jika ingin mempertahankan pilihan pengguna.
|
||||
Yakni, jika nanti membuka dialog lagi untuk menunjukkan pilihan pengguna,
|
||||
maka Anda perlu membuat daftar dengan tombol radio.</p>
|
||||
@@ -442,7 +442,7 @@ Anda harus mengubah keluarga font ke {@code "sans-serif"} sehingga kedua bidang
|
||||
gaya font yang cocok.</p>
|
||||
|
||||
<p>Untuk memekarkan layout dalam {@link android.support.v4.app.DialogFragment} Anda,
|
||||
ambillah {@link android.view.LayoutInflater} dengan
|
||||
ambillah {@link android.view.LayoutInflater} dengan
|
||||
{@link android.app.Activity#getLayoutInflater()} dan panggil
|
||||
{@link android.view.LayoutInflater#inflate inflate()}, dengan parameter pertama
|
||||
adalah ID sumber daya layout dan parameter kedua adalah tampilan induk untuk layout.
|
||||
@@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
LoginDialogFragment.this.getDialog().cancel();
|
||||
}
|
||||
});
|
||||
});
|
||||
return builder.create();
|
||||
}
|
||||
</pre>
|
||||
@@ -505,7 +505,7 @@ antarmuka yang akan digunakan untuk mengirim kembali suatu kejadian ke aktivitas
|
||||
|
||||
<pre>
|
||||
public class NoticeDialogFragment extends DialogFragment {
|
||||
|
||||
|
||||
/* The activity that creates an instance of this dialog fragment must
|
||||
* implement this interface in order to receive event callbacks.
|
||||
* Each method passes the DialogFragment in case the host needs to query it. */
|
||||
@@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment {
|
||||
public void onDialogPositiveClick(DialogFragment dialog);
|
||||
public void onDialogNegativeClick(DialogFragment dialog);
|
||||
}
|
||||
|
||||
|
||||
// Use this instance of the interface to deliver action events
|
||||
NoticeDialogListener mListener;
|
||||
|
||||
|
||||
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
@@ -543,7 +543,7 @@ melalui implementasi antarmuka {@code NoticeDialogListener}:</p>
|
||||
public class MainActivity extends FragmentActivity
|
||||
implements NoticeDialogFragment.NoticeDialogListener{
|
||||
...
|
||||
|
||||
|
||||
public void showNoticeDialog() {
|
||||
// Create an instance of the dialog fragment and show it
|
||||
DialogFragment dialog = new NoticeDialogFragment();
|
||||
@@ -638,12 +638,12 @@ android.support.v4.app.Fragment} yang bisa ditanamkan.</p>
|
||||
|
||||
<p>Akan tetapi, dalam hal ini Anda tidak bisa menggunakan {@link android.app.AlertDialog.Builder AlertDialog.Builder}
|
||||
atau objek {@link android.app.Dialog} lain untuk membangun dialog. Jika
|
||||
Anda ingin {@link android.support.v4.app.DialogFragment}
|
||||
Anda ingin {@link android.support.v4.app.DialogFragment}
|
||||
bisa ditanamkan, Anda harus mendefinisikan dialog UI dalam layout, lalu memuat layout itu dalam metode callback
|
||||
{@link android.support.v4.app.DialogFragment#onCreateView
|
||||
onCreateView()}.</p>
|
||||
|
||||
<p>Berikut ini adalah contoh {@link android.support.v4.app.DialogFragment} yang bisa muncul sebagai
|
||||
<p>Berikut ini adalah contoh {@link android.support.v4.app.DialogFragment} yang bisa muncul sebagai
|
||||
dialog maupun fragmen yang bisa ditanamkan (menggunakan layout bernama <code>purchase_items.xml</code>):</p>
|
||||
|
||||
<pre>
|
||||
@@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment {
|
||||
// Inflate the layout to use as dialog or embedded fragment
|
||||
return inflater.inflate(R.layout.purchase_items, container, false);
|
||||
}
|
||||
|
||||
|
||||
/** The system calls this only when creating the layout in a dialog. */
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
@@ -678,7 +678,7 @@ atau UI layar penuh, berdasarkan ukuran layar:</p>
|
||||
public void showDialog() {
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
CustomDialogFragment newFragment = new CustomDialogFragment();
|
||||
|
||||
|
||||
if (mIsLargeLayout) {
|
||||
// The device is using a large layout, so show the fragment as a dialog
|
||||
newFragment.show(fragmentManager, "dialog");
|
||||
@@ -776,7 +776,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} dalam {@link
|
||||
android.support.v4.app.DialogFragment} Anda.</p>
|
||||
|
||||
<p>Anda juga bisa <em>membatalkan</em> dialog. Ini merupakan kejadian khusus yang menunjukkan bahwa pengguna
|
||||
secara eksplisit meninggalkan dialog tanpa menyelesaikan tugas. Hal ini terjadi jika pengguna menekan tombol
|
||||
secara eksplisit meninggalkan dialog tanpa menyelesaikan tugas. Hal ini terjadi jika pengguna menekan tombol
|
||||
<em>Back</em>, menyentuh layar di luar area dialog,
|
||||
atau jika Anda secara eksplisit memanggil {@link android.app.Dialog#cancel()} pada {@link
|
||||
android.app.Dialog} (seperti saat merespons tombol "Cancel" dalam dialog).</p>
|
||||
|
||||
@@ -60,7 +60,7 @@ dan konsisten, Anda harus menggunakan API {@link android.view.Menu} untuk menyaj
|
||||
tindakan dan opsi lain dalam aktivitas kepada pengguna.</p>
|
||||
|
||||
<p>Mulai dengan Android 3.0 (API level 11), perangkat berbasis Android tidak perlu lagi
|
||||
menyediakan tombol <em>Menu</em> tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari
|
||||
menyediakan tombol <em>Menu</em> tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari
|
||||
dependensi pada panel menu 6 item biasa, dan sebagai ganti menyediakan action-bar untuk menyajikan
|
||||
berbagai tindakan pengguna yang lazim.</p>
|
||||
|
||||
@@ -83,9 +83,9 @@ tidak memilikinya), sehingga Anda harus bermigrasi ke penggunaan action-bar untu
|
||||
opsi lainnya.</p>
|
||||
<p>Lihat bagian tentang <a href="#options-menu">Membuat Menu Opsi</a>.</p>
|
||||
</dd>
|
||||
|
||||
|
||||
<dt><strong>Menu konteks dan mode tindakan kontekstual</strong></dt>
|
||||
|
||||
|
||||
<dd>Menu konteks adalah <a href="#FloatingContextMenu">menu mengambang</a> yang muncul saat
|
||||
pengguna mengklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi konten atau
|
||||
bingkai konteks yang dipilih.
|
||||
@@ -94,7 +94,7 @@ item tindakan yang memengaruhi konten yang dipilih dalam baris di bagian atas la
|
||||
memilih beberapa item sekaligus.</p>
|
||||
<p>Lihat bagian tentang <a href="#context-menu">Membuat Menu Kontekstual</a>.</p>
|
||||
</dd>
|
||||
|
||||
|
||||
<dt><strong>Menu popup</strong></dt>
|
||||
<dd>Menu popup menampilkan daftar item secara vertikal yang dipasang pada tampilan yang
|
||||
memanggil menu. Ini cocok untuk menyediakan kelebihan tindakan yang terkait dengan konten tertentu atau
|
||||
@@ -128,14 +128,14 @@ ukuran layar, dan konfigurasi lainnya dengan memanfaatkan kerangka kerja <a href
|
||||
proyek dan buat menu dengan elemen-elemen berikut:</p>
|
||||
<dl>
|
||||
<dt><code><menu></code></dt>
|
||||
<dd>Mendefinisikan {@link android.view.Menu}, yang merupakan sebuah kontainer untuk item menu. Elemen
|
||||
<dd>Mendefinisikan {@link android.view.Menu}, yang merupakan sebuah kontainer untuk item menu. Elemen
|
||||
<code><menu></code> harus menjadi simpul akar untuk file dan bisa menampung salah satu atau beberapa dari elemen
|
||||
<code><item></code> dan <code><group></code>.</dd>
|
||||
|
||||
<dt><code><item></code></dt>
|
||||
<dd>Membuat {@link android.view.MenuItem}, yang mewakili satu item menu. Elemen ini
|
||||
bisa berisi elemen <code><menu></code> tersarang guna untuk membuat submenu.</dd>
|
||||
|
||||
|
||||
<dt><code><group></code></dt>
|
||||
<dd>Kontainer opsional tak terlihat untuk elemen-elemen {@code <item>}. Kontainer ini memungkinkan Anda
|
||||
mengelompokkan item menu untuk berbagi properti seperti status aktif dan visibilitas. Untuk informasi
|
||||
@@ -253,7 +253,7 @@ aktivitas. Jika perlu, Anda bisa menyusun ulang item menu dengan atribut {@code
|
||||
dalam setiap {@code <item>} yang perlu Anda pindahkan.</p>
|
||||
|
||||
<p>Untuk menetapkan menu opsi suatu aktivitas, kesampingkan {@link
|
||||
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragmen-fragmen menyediakan
|
||||
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragmen-fragmen menyediakan
|
||||
callback {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()} sendiri). Dalam metode ini
|
||||
, Anda bisa memekarkan sumber daya menu (<a href="#xml">yang didefinisikan dalam XML</a>) menjadi {@link
|
||||
android.view.Menu} yang disediakan dalam callback. Misalnya:</p>
|
||||
@@ -273,7 +273,7 @@ dengan API {@link android.view.MenuItem}.</p>
|
||||
|
||||
<p>Jika Anda mengembangkan aplikasi untuk Android 2.3.x dan yang lebih rendah, sistem akan memanggil {@link
|
||||
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} untuk membuat menu opsi
|
||||
bila pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi,
|
||||
bila pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi,
|
||||
sistem akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} saat
|
||||
memulai aktivitas, untuk menampilkan item menu pada action-bar.</p>
|
||||
|
||||
@@ -285,7 +285,7 @@ memulai aktivitas, untuk menampilkan item menu pada action-bar.</p>
|
||||
sistem akan memanggil metode {@link android.app.Activity#onOptionsItemSelected(MenuItem)
|
||||
onOptionsItemSelected()} aktivitas Anda. Metode ini meneruskan {@link android.view.MenuItem} yang dipilih. Anda
|
||||
bisa mengidentifikasi item dengan memanggil {@link android.view.MenuItem#getItemId()}, yang menghasilkan
|
||||
ID unik untuk item menu itu (yang didefinisikan oleh atribut {@code android:id} dalam sumber daya menu atau dengan
|
||||
ID unik untuk item menu itu (yang didefinisikan oleh atribut {@code android:id} dalam sumber daya menu atau dengan
|
||||
integer yang diberikan ke metode {@link android.view.Menu#add(int,int,int,int) add()}). Anda bisa mencocokkan
|
||||
ID ini dengan item menu yang diketahui untuk melakukan tindakan yang sesuai. Misalnya:</p>
|
||||
|
||||
@@ -317,7 +317,7 @@ untuk setiap fragmen (sesuai dengan urutan penambahan fragmen) hingga satu fragm
|
||||
{@code true} atau semua fragmen telah dipanggil.</p>
|
||||
|
||||
<p class="note"><strong>Tip:</strong> Android 3.0 menambahkan kemampuan mendefinisikan perilaku on-click
|
||||
untuk item menu dalam XML, dengan menggunakan atribut {@code android:onClick}. Nilai atribut
|
||||
untuk item menu dalam XML, dengan menggunakan atribut {@code android:onClick}. Nilai atribut
|
||||
harus berupa nama metode yang didefinisikan aktivitas dengan menggunakan menu. Metode
|
||||
harus bersifat publik dan menerima satu parameter {@link android.view.MenuItem}—bila sistem
|
||||
memanggilnya, metode ini akan meneruskan item menu yang dipilih. Untuk informasi selengkapnya dan contoh, lihat dokumen <a href="{@docRoot}guide/topics/resources/menu-resource.html">Sumber Daya Menu</a>.</p>
|
||||
@@ -346,7 +346,7 @@ lagi kecuali menu diinvalidkan karena suatu alasan. Akan tetapi, Anda harus meng
|
||||
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} hanya untuk membuat
|
||||
status menu awal dan tidak untuk membuat perubahan selama daur hidup aktivitas.</p>
|
||||
|
||||
<p>Jika Anda ingin mengubah menu opsi berdasarkan
|
||||
<p>Jika Anda ingin mengubah menu opsi berdasarkan
|
||||
kejadian yang terjadi selama daur hidup aktivitas, Anda bisa melakukannya dalam metode
|
||||
{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Metode ini
|
||||
meneruskan objek {@link android.view.Menu} sebagaimana adanya saat ini sehingga Anda bisa mengubahnya,
|
||||
@@ -363,7 +363,7 @@ ditampilkan pada action-bar. Bila ada kejadian dan Anda ingin melakukan pembarua
|
||||
memanggil {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} untuk meminta
|
||||
sistem memanggil {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong>
|
||||
<p class="note"><strong>Catatan:</strong>
|
||||
Anda tidak boleh mengubah item dalam menu opsi berdasarkan {@link android.view.View} yang saat ini
|
||||
difokus. Saat dalam mode sentuh (bila pengguna tidak sedang menggunakan trackball atau d-pad), tampilan
|
||||
tidak bisa mengambil fokus, sehingga Anda tidak boleh menggunakan fokus sebagai dasar untuk mengubah
|
||||
@@ -419,7 +419,7 @@ android.app.Activity#registerForContextMenu(View) registerForContextMenu()}.</p>
|
||||
</li>
|
||||
|
||||
<li>Implementasikan metode {@link
|
||||
android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
|
||||
android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
|
||||
dalam {@link android.app.Activity} atau {@link android.app.Fragment} Anda.
|
||||
<p>Bila tampilan yang terdaftar menerima kejadian klik-lama, sistem akan memanggil metode {@link
|
||||
android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
|
||||
@@ -445,7 +445,7 @@ dimekarkan.</p>
|
||||
|
||||
<li>Implementasikan {@link android.app.Activity#onContextItemSelected(MenuItem)
|
||||
onContextItemSelected()}.
|
||||
<p>Bila pengguna memilih item menu, sistem akan memanggil metode ini sehingga Anda bisa melakukan
|
||||
<p>Bila pengguna memilih item menu, sistem akan memanggil metode ini sehingga Anda bisa melakukan
|
||||
tindakan yang sesuai. Misalnya:</p>
|
||||
|
||||
<pre>
|
||||
@@ -609,7 +609,7 @@ someView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
|
||||
<p>Bila Anda memanggil {@link android.app.Activity#startActionMode startActionMode()}, sistem akan mengembalikan
|
||||
{@link android.view.ActionMode} yang dibuat. Dengan menyimpannya dalam variabel anggota, Anda bisa
|
||||
membuat perubahan ke action-bar kontekstual sebagai respons terhadap kejadian lainnya. Dalam contoh di atas,
|
||||
membuat perubahan ke action-bar kontekstual sebagai respons terhadap kejadian lainnya. Dalam contoh di atas,
|
||||
{@link android.view.ActionMode} digunakan untuk memastikan bahwa instance {@link android.view.ActionMode}
|
||||
tidak dibuat kembali jika sudah aktif, dengan memeriksa apakah anggota bernilai nol sebelum memulai
|
||||
mode tindakan.</p>
|
||||
@@ -742,8 +742,8 @@ yang menampilkan menu popup:</p>
|
||||
|
||||
<pre>
|
||||
<ImageButton
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_overflow_holo_dark"
|
||||
android:contentDescription="@string/descr_overflow_button"
|
||||
android:onClick="showPopup" />
|
||||
@@ -1010,7 +1010,7 @@ pertama.</p>
|
||||
<p>Anda juga bisa menawarkan layanan aktivitas Anda pada aplikasi lainnya, sehingga
|
||||
aplikasi Anda bisa disertakan dalam menu aplikasi lain (membalik peran yang dijelaskan di atas).</p>
|
||||
|
||||
<p>Agar bisa dimasukkan dalam menu aplikasi lain, Anda perlu mendefinisikan
|
||||
<p>Agar bisa dimasukkan dalam menu aplikasi lain, Anda perlu mendefinisikan
|
||||
filter intent seperti biasa, tetapi pastikan menyertakan nilai-nilai {@link android.content.Intent#CATEGORY_ALTERNATIVE}
|
||||
dan/atau {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} untuk
|
||||
kategori filter intent. Misalnya:</p>
|
||||
@@ -1026,6 +1026,6 @@ kategori filter intent. Misalnya:</p>
|
||||
<p>Baca selengkapnya tentang penulisan filter intent dalam dokumen
|
||||
<a href="/guide/components/intents-filters.html">Intent dan Filter Intent</a>.</p>
|
||||
|
||||
<p>Untuk contoh aplikasi yang menggunakan teknik ini, lihat contoh kode
|
||||
<p>Untuk contoh aplikasi yang menggunakan teknik ini, lihat contoh kode
|
||||
<a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note
|
||||
Pad</a>.</p>
|
||||
|
||||
@@ -147,7 +147,7 @@ pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem
|
||||
</p>
|
||||
<p>
|
||||
Dalam {@link android.app.Notification}, tindakan itu sendiri didefinisikan oleh
|
||||
{@link android.app.PendingIntent} berisi
|
||||
{@link android.app.PendingIntent} berisi
|
||||
{@link android.content.Intent} yang memulai
|
||||
{@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan
|
||||
{@link android.app.PendingIntent} dengan gestur, panggil metode
|
||||
@@ -174,12 +174,12 @@ pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem
|
||||
android.support.v4.app.NotificationCompat}. Ada
|
||||
lima level prioritas, mulai dari {@link
|
||||
android.support.v4.app.NotificationCompat#PRIORITY_MIN} (-2) hingga {@link
|
||||
android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur,
|
||||
android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur,
|
||||
prioritas default akan ditetapkan {@link
|
||||
android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0).
|
||||
</p>
|
||||
<p> Untuk informasi tentang mengatur level prioritas, lihat "Mengatur
|
||||
dan mengelola prioritas pemberitahuan dengan benar" dalam panduan
|
||||
dan mengelola prioritas pemberitahuan dengan benar" dalam panduan
|
||||
Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.
|
||||
</p>
|
||||
<!-- ------------------------------------------------------------------------------------------ -->
|
||||
@@ -310,7 +310,7 @@ mBuilder.setStyle(inBoxStyle);
|
||||
<!-- ------------------------------------------------------------------------------------------ -->
|
||||
<h2 id="Managing">Mengelola Pemberitahuan</h2>
|
||||
<p>
|
||||
Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama,
|
||||
Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama,
|
||||
hindari membuat pemberitahuan yang sama sekali baru. Sebagai gantinya, Anda harus mempertimbangkan untuk memperbarui
|
||||
pemberitahuan sebelumnya, baik dengan mengubah sebagian nilainya atau dengan menambahkan nilai, atau keduanya.
|
||||
</p>
|
||||
@@ -506,7 +506,7 @@ numMessages = 0;
|
||||
TaskStackBuilder.create()}.
|
||||
</li>
|
||||
<li>
|
||||
Tambahkan back-stack ke stack-builder dengan memanggil
|
||||
Tambahkan back-stack ke stack-builder dengan memanggil
|
||||
{@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}.
|
||||
Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam
|
||||
manifes, back-stack berisi objek {@link android.content.Intent} yang
|
||||
@@ -933,7 +933,7 @@ untuk informasi selengkapnya tentang API baru untuk mengelola sesi media dan men
|
||||
tampilan normal dibatasi hingga 64 dp, dan layout tampilan yang diperluas dibatasi hingga 256 dp.
|
||||
</p>
|
||||
<p>
|
||||
Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance
|
||||
Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance
|
||||
objek {@link android.widget.RemoteViews} yang memekarkan file layout XML. Kemudian,
|
||||
sebagai ganti memanggil metode seperti
|
||||
{@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()},
|
||||
|
||||
@@ -39,7 +39,7 @@ dan elemen <code><LinearLayout></code> membuat kelompok tampilan {@link an
|
||||
<pre>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical" >
|
||||
<TextView android:id="@+id/text"
|
||||
@@ -60,7 +60,7 @@ layout.</p>
|
||||
<p>Untuk mendapatkan panduan lengkap mengenai pembuatan layout UI, lihat <a href="declaring-layout.html">Layout
|
||||
XML</a>.
|
||||
|
||||
|
||||
|
||||
<h2 id="UIComponents">Komponen Antarmuka Pengguna</h2>
|
||||
|
||||
<p>Anda tidak harus membuat semua UI menggunakan objek {@link android.view.View} dan {link
|
||||
|
||||
@@ -82,7 +82,7 @@ cara membangun pengaturan aplikasi Anda menggunakan API {@link android.preferenc
|
||||
|
||||
<img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" />
|
||||
<p class="img-caption"><strong>Gambar 1.</strong> Cuplikan layar dari pengaturan
|
||||
aplikasi Messaging Android. Memilih item yang didefinisikan oleh {@link android.preference.Preference}
|
||||
aplikasi Messaging Android. Memilih item yang didefinisikan oleh {@link android.preference.Preference}
|
||||
akan membuka antarmuka untuk mengubah pengaturan.</p>
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ tersimpan bisa berupa tipe nilai apa pun yang didukung (tercantum di atas).</dd>
|
||||
java.lang.String}.</dd>
|
||||
</dl>
|
||||
|
||||
<p>Lihat kelas {@link android.preference.Preference} untuk mengetahui daftar subkelas lain dan
|
||||
<p>Lihat kelas {@link android.preference.Preference} untuk mengetahui daftar subkelas lain dan
|
||||
propertinya.</p>
|
||||
|
||||
<p>Tentu saja, kelas bawaan tidak mengakomodasi setiap kebutuhan dan aplikasi Anda mungkin memerlukan
|
||||
@@ -226,7 +226,7 @@ android.preference.ListPreference}. Kedua item tersebut menyertakan tiga atribut
|
||||
<dt>{@code android:key}</dt>
|
||||
<dd>Atribut ini diperlukan untuk preferensi yang mempertahankan nilai data. Ini menetapkan kunci
|
||||
unik (string) yang digunakan sistem saat menyimpan nilai pengaturan ini dalam {@link
|
||||
android.content.SharedPreferences}.
|
||||
android.content.SharedPreferences}.
|
||||
<p>Instance satu-satunya di mana atribut ini <em>tidak diperlukan</em> adalah bila preferensi berupa
|
||||
{@link android.preference.PreferenceCategory} atau {@link android.preference.PreferenceScreen}, atau
|
||||
preferensi menetapkan {@link android.content.Intent} untuk dipanggil (dengan elemen <a href="#Intents">{@code <intent>}</a>) atau {@link android.app.Fragment} untuk ditampilkan (dengan atribut <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code
|
||||
@@ -285,7 +285,7 @@ android.preference.PreferenceCategory}.</p>
|
||||
|
||||
<pre>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_sms_storage_title"
|
||||
android:key="pref_key_storage_settings">
|
||||
<CheckBoxPreference
|
||||
@@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p>
|
||||
android:summary="@string/pref_summary_auto_delete"
|
||||
android:title="@string/pref_title_auto_delete"
|
||||
android:defaultValue="false"... />
|
||||
<Preference
|
||||
<Preference
|
||||
android:key="pref_key_sms_delete_limit"
|
||||
android:dependency="pref_key_auto_delete"
|
||||
android:summary="@string/pref_summary_delete_limit"
|
||||
android:title="@string/pref_title_sms_delete"... />
|
||||
<Preference
|
||||
<Preference
|
||||
android:key="pref_key_mms_delete_limit"
|
||||
android:dependency="pref_key_auto_delete"
|
||||
android:summary="@string/pref_summary_delete_limit"
|
||||
@@ -370,12 +370,12 @@ sebagai anak dari elemen {@code <Preference>} yang bersangkutan.</p>
|
||||
|
||||
<dl>
|
||||
<dt>{@code android:action}</dt>
|
||||
<dd>Tindakan yang akan ditetapkan, sesuai metode
|
||||
<dd>Tindakan yang akan ditetapkan, sesuai metode
|
||||
{@link android.content.Intent#setAction setAction()}.</dd>
|
||||
<dt>{@code android:data}</dt>
|
||||
<dd>Data yang akan ditetapkan, sesuai metode {@link android.content.Intent#setData setData()}.</dd>
|
||||
<dt>{@code android:mimeType}</dt>
|
||||
<dd>Tipe MIME yang akan ditetapkan, sesuai metode
|
||||
<dd>Tipe MIME yang akan ditetapkan, sesuai metode
|
||||
{@link android.content.Intent#setType setType()}.</dd>
|
||||
<dt>{@code android:targetClass}</dt>
|
||||
<dd>Bagian kelas dari nama komponen, sesuai metode {@link android.content.Intent#setComponent
|
||||
@@ -588,11 +588,11 @@ tunggal dalam elemen {@code <preference-headers>} akar. Misalnya:</p>
|
||||
<pre>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<header
|
||||
<header
|
||||
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"
|
||||
android:title="@string/prefs_category_one"
|
||||
android:summary="@string/prefs_summ_category_one" />
|
||||
<header
|
||||
<header
|
||||
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"
|
||||
android:title="@string/prefs_category_two"
|
||||
android:summary="@string/prefs_summ_category_two" >
|
||||
@@ -672,15 +672,15 @@ android.preference.Preference <Preference>} mengirimkan {@link android.con
|
||||
akan dimuat.</p>
|
||||
|
||||
<p>Misalnya, ini adalah file XML untuk header preferensi yang menggunakan Android 3.0
|
||||
dan yang lebih tinggi ({@code res/xml/preference_headers.xml}):</p>
|
||||
dan yang lebih tinggi ({@code res/xml/preference_headers.xml}):</p>
|
||||
|
||||
<pre>
|
||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<header
|
||||
<header
|
||||
android:fragment="com.example.prefs.SettingsFragmentOne"
|
||||
android:title="@string/prefs_category_one"
|
||||
android:summary="@string/prefs_summ_category_one" />
|
||||
<header
|
||||
<header
|
||||
android:fragment="com.example.prefs.SettingsFragmentTwo"
|
||||
android:title="@string/prefs_category_two"
|
||||
android:summary="@string/prefs_summ_category_two" />
|
||||
@@ -692,18 +692,18 @@ Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p>
|
||||
|
||||
<pre>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<Preference
|
||||
<Preference
|
||||
android:title="@string/prefs_category_one"
|
||||
android:summary="@string/prefs_summ_category_one" >
|
||||
<intent
|
||||
<intent
|
||||
android:targetPackage="com.example.prefs"
|
||||
android:targetClass="com.example.prefs.SettingsActivity"
|
||||
android:action="com.example.prefs.PREFS_ONE" />
|
||||
</Preference>
|
||||
<Preference
|
||||
<Preference
|
||||
android:title="@string/prefs_category_two"
|
||||
android:summary="@string/prefs_summ_category_two" >
|
||||
<intent
|
||||
<intent
|
||||
android:targetPackage="com.example.prefs"
|
||||
android:targetClass="com.example.prefs.SettingsActivity"
|
||||
android:action="com.example.prefs.PREFS_TWO" />
|
||||
@@ -879,7 +879,7 @@ prefs.registerOnSharedPreferenceChangeListener(
|
||||
});
|
||||
</pre>
|
||||
|
||||
<p>Sebagai gantinya, simpan referensi ke listener dalam bidang data instance
|
||||
<p>Sebagai gantinya, simpan referensi ke listener dalam bidang data instance
|
||||
objek yang akan ada selama listener dibutuhkan:</p>
|
||||
|
||||
<pre>
|
||||
@@ -975,11 +975,11 @@ negatif dan positif default:</p>
|
||||
public class NumberPickerPreference extends DialogPreference {
|
||||
public NumberPickerPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
|
||||
setDialogLayoutResource(R.layout.numberpicker_dialog);
|
||||
setPositiveButtonText(android.R.string.ok);
|
||||
setNegativeButtonText(android.R.string.cancel);
|
||||
|
||||
|
||||
setDialogIcon(null);
|
||||
}
|
||||
...
|
||||
@@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) {
|
||||
// Cast state to custom BaseSavedState and pass to superclass
|
||||
SavedState myState = (SavedState) state;
|
||||
super.onRestoreInstanceState(myState.getSuperState());
|
||||
|
||||
|
||||
// Set this Preference's widget to reflect the restored state
|
||||
mNumberPicker.setValue(myState.value);
|
||||
}
|
||||
|
||||
@@ -26,11 +26,11 @@ tindakan terjadi pada objek itu. Misalnya, bila View (seperti Button/Tombol) dis
|
||||
metode <code>onTouchEvent()</code> akan dipanggil pada objek itu. Akan tetapi, untuk mencegatnya, Anda harus memperluas
|
||||
kelas dan mengesampingkan metode itu. Akan tetapi, memperluas setiap objek View
|
||||
untuk menangani kejadian seperti itu tidaklah praktis. Karena itulah kelas View juga berisi
|
||||
sekumpulan antarmuka tersarang dengan callback yang jauh lebih mudah didefinisikan. Antarmuka ini,
|
||||
sekumpulan antarmuka tersarang dengan callback yang jauh lebih mudah didefinisikan. Antarmuka ini,
|
||||
yang disebut <a href="#EventListeners">event listener</a>, merupakan tiket Anda untuk menangkap interaksi pengguna dengan UI.</p>
|
||||
|
||||
<p>Walaupun Anda akan lebih sering menggunakan event listener ini untuk interaksi pengguna,
|
||||
mungkin ada saatnya Anda ingin memperluas kelas View, untuk membuat komponen custom.
|
||||
mungkin ada saatnya Anda ingin memperluas kelas View, untuk membuat komponen custom.
|
||||
Mungkin Anda ingin memperluas kelas {@link android.widget.Button}
|
||||
untuk membuat sesuatu yang lebih menarik. Dalam hal ini, Anda akan dapat mendefinisikan perilaku kejadian default untuk kelas Anda dengan menggunakan
|
||||
kelas <a href="#EventHandlers">event handler</a>.</p>
|
||||
@@ -46,28 +46,28 @@ telah didaftarkan dengan listener dipicu oleh interaksi pengguna dengan item dal
|
||||
|
||||
<dl>
|
||||
<dt><code>onClick()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnClickListener}.
|
||||
<dd>Dari {@link android.view.View.OnClickListener}.
|
||||
Ini dipanggil baik saat pengguna menyentuh item
|
||||
(bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
|
||||
menekan tombol "enter" yang sesuai atau menekan trackball.</dd>
|
||||
<dt><code>onLongClick()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnLongClickListener}.
|
||||
Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh),
|
||||
<dd>Dari {@link android.view.View.OnLongClickListener}.
|
||||
Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh),
|
||||
maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
|
||||
menekan serta menahan tombol "enter" yang sesuai atau menekan dan menahan trackball (selama satu detik).</dd>
|
||||
<dt><code>onFocusChange()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnFocusChangeListener}.
|
||||
<dd>Dari {@link android.view.View.OnFocusChangeListener}.
|
||||
Ini dipanggil saat pengguna menyusuri ke atau dari item, dengan menggunakan tombol navigasi atau trackball.</dd>
|
||||
<dt><code>onKey()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnKeyListener}.
|
||||
<dd>Dari {@link android.view.View.OnKeyListener}.
|
||||
Ini dipanggil saat pengguna memfokuskan pada item dan menekan atau melepas tombol fisik pada perangkat.</dd>
|
||||
<dt><code>onTouch()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnTouchListener}.
|
||||
<dd>Dari {@link android.view.View.OnTouchListener}.
|
||||
Ini dipanggil saat pengguna melakukan tindakan yang digolongkan sebagai kejadian sentuh, termasuk penekanan, pelepasan,
|
||||
atau gerak perpindahan pada layar (dalam batasan item itu).</dd>
|
||||
<dt><code>onCreateContextMenu()</code></dt>
|
||||
<dd>Dari {@link android.view.View.OnCreateContextMenuListener}.
|
||||
Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi
|
||||
<dd>Dari {@link android.view.View.OnCreateContextMenuListener}.
|
||||
Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi
|
||||
tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menu</a>.
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -75,8 +75,8 @@ tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/me
|
||||
<p>Metode ini satu-satunya yang menempati antarmukanya masing-masing. Untuk mendefinisikan salah satu metode ini
|
||||
dan menangani kejadian Anda, implementasikan antarmuka tersarang dalam Aktivitas Anda atau definisikan sebagai kelas anonim.
|
||||
Kemudian, teruskan satu
|
||||
instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil
|
||||
<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>
|
||||
instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil
|
||||
<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>
|
||||
dan teruskan implementasi {@link android.view.View.OnClickListener OnClickListener} Anda.)</p>
|
||||
|
||||
<p>Contoh di bawah menunjukkan cara mendaftarkan on-click listener untuk Button. </p>
|
||||
@@ -121,20 +121,20 @@ public class ExampleActivity extends Activity implements OnClickListener {
|
||||
nilai hasil, namun beberapa metode event listener lainnya harus mengembalikan boolean. Sebabnya
|
||||
bergantung pada kejadian. Untuk sebagian yang mengembalikan boolean, ini sebabnya:</p>
|
||||
<ul>
|
||||
<li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> -
|
||||
Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh.
|
||||
Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
|
||||
<li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> -
|
||||
Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh.
|
||||
Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
|
||||
mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
|
||||
on-click listener lainnya.</li>
|
||||
<li><code>{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent) onKey()}</code> -
|
||||
<li><code>{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent) onKey()}</code> -
|
||||
Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh.
|
||||
Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
|
||||
Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
|
||||
mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
|
||||
on-key listener lainnya.</li>
|
||||
<li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> -
|
||||
Ini mengembalikan boolean untuk menunjukkan apakah listener Anda telah menggunakan kejadian ini. Yang penting adalah
|
||||
kejadian ini bisa memiliki beberapa tindakan yang saling mengikuti. Jadi, jika Anda mengembalikan <em>salah</em>saat
|
||||
kejadian tindakan turun diterima, itu menunjukkan bahwa Anda belum menggunakan kejadian itu dan juga
|
||||
<li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> -
|
||||
Ini mengembalikan boolean untuk menunjukkan apakah listener Anda telah menggunakan kejadian ini. Yang penting adalah
|
||||
kejadian ini bisa memiliki beberapa tindakan yang saling mengikuti. Jadi, jika Anda mengembalikan <em>salah</em>saat
|
||||
kejadian tindakan turun diterima, itu menunjukkan bahwa Anda belum menggunakan kejadian itu dan juga
|
||||
tidak tertarik dengan tindakan berikutnya dari kejadian ini. Karena itu, Anda tidak akan diminta untuk melakukan tindakan
|
||||
lainnya dalam kejadian, seperti gerakan jari, atau kejadian tindakan naik yang akan terjadi.</li>
|
||||
</ul>
|
||||
@@ -142,12 +142,12 @@ tidak tertarik dengan tindakan berikutnya dari kejadian ini. Karena itu, Anda ti
|
||||
<p>Ingatlah bahwa kejadian tombol fisik selalu disampaikan ke View yang sedang difokus. Kejadian ini dikirim mulai dari atas
|
||||
hierarki View, kemudian turun hingga tujuan yang sesuai. Jika View Anda (atau anak View Anda)
|
||||
saat ini sedang fokus, maka Anda dapat melihat kejadian berpindah melalui metode.<code>{@link android.view.View#dispatchKeyEvent(KeyEvent)
|
||||
dispatchKeyEvent()}</code> Sebagai pengganti untuk menangkap kejadian penting melalui View, Anda juga dapat menerima
|
||||
dispatchKeyEvent()}</code> Sebagai pengganti untuk menangkap kejadian penting melalui View, Anda juga dapat menerima
|
||||
semua kejadian dalam Aktivitas Anda dengan <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>
|
||||
dan <code>{@link android.app.Activity#onKeyUp(int,KeyEvent) onKeyUp()}</code>.</p>
|
||||
|
||||
<p>Selain itu, saat memikirkan tentang input teks aplikasi Anda, ingatlah bahwa banyak perangkat yang hanya memiliki
|
||||
metode input perangkat lunak. Metode seperti itu tidak harus berbasis tombol; sebagian mungkin menggunakan input suara, tulisan tangan, dan seterusnya. Meskipun
|
||||
metode input perangkat lunak. Metode seperti itu tidak harus berbasis tombol; sebagian mungkin menggunakan input suara, tulisan tangan, dan seterusnya. Meskipun
|
||||
metode input menyajikan antarmuka seperti keyboard, itu umumnya <strong>tidak</strong> memicu keluarga kejadian
|
||||
<code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>. Anda sama sekali tidak boleh
|
||||
membangun UI yang mengharuskan penekanan tombol tertentu dikontrol kecuali jika Anda ingin membatasi aplikasi Anda pada perangkat yang memiliki
|
||||
@@ -157,14 +157,14 @@ metode input mengenai reaksi yang diharapkan aplikasi Anda, sehingga bisa mengub
|
||||
tentang bagaimana metode input perangkat lunak seharusnya bekerja dan percayalah bahwa metode akan menyediakan teks yang sudah diformat bagi aplikasi Anda.</p>
|
||||
|
||||
<p class="note"><strong>Catatan:</strong> Android akan memanggil event handler terlebih dahulu kemudian handler
|
||||
default yang sesuai dari definisi kelas. Karena itu, mengembalikan <em>benar</em> dari event listener ini akan menghentikan
|
||||
penyebaran kejadian ke event listener lain dan juga akan memblokir callback ke
|
||||
default yang sesuai dari definisi kelas. Karena itu, mengembalikan <em>benar</em> dari event listener ini akan menghentikan
|
||||
penyebaran kejadian ke event listener lain dan juga akan memblokir callback ke
|
||||
event handler default di View. Pastikan bahwa Anda ingin mengakhiri kejadian saat mengembalikan <em>true</em>.</p>
|
||||
|
||||
|
||||
<h2 id="EventHandlers">Event Handler</h2>
|
||||
|
||||
<p>Jika Anda membuat komponen custom dari View, maka Anda dapat mendefinisikan penggunaan beberapa
|
||||
<p>Jika Anda membuat komponen custom dari View, maka Anda dapat mendefinisikan penggunaan beberapa
|
||||
metode callback sebagai event handler default.
|
||||
Dalam dokumen tentang <a href="{@docRoot}guide/topics/ui/custom-components.html">Komponen
|
||||
Custom</a>, Anda akan melihat penggunaan beberapa callback umum untuk penanganan kejadian,
|
||||
@@ -176,19 +176,19 @@ termasuk:</p>
|
||||
<li><code>{@link android.view.View#onTouchEvent}</code> - Dipanggil bila terjadi kejadian gerakan layar sentuh.</li>
|
||||
<li><code>{@link android.view.View#onFocusChanged}</code> - Dipanggil bila View memperoleh atau kehilangan fokus.</li>
|
||||
</ul>
|
||||
<p>Ada beberapa metode lain yang harus Anda ketahui, yang bukan bagian dari kelas View,
|
||||
<p>Ada beberapa metode lain yang harus Anda ketahui, yang bukan bagian dari kelas View,
|
||||
namun bisa berdampak langsung pada kemampuan Anda menangani kejadian. Jadi, saat mengelola kejadian yang lebih kompleks dalam
|
||||
layout, pertimbangkanlah metode-metode lain ini:</p>
|
||||
<ul>
|
||||
<li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent)
|
||||
Activity.dispatchTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
|
||||
Activity.dispatchTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
|
||||
android.app.Activity} Anda mencegat semua kejadian sentuh sebelum dikirim ke jendela.</li>
|
||||
<li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)
|
||||
ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
|
||||
android.view.ViewGroup} memantau kejadian saat dikirim ke View anak.</li>
|
||||
<li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean)
|
||||
ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Panggil ini
|
||||
pada View induk untuk menunjukan larangan mencegat kejadian sentuh dengan <code>{@link
|
||||
pada View induk untuk menunjukan larangan mencegat kejadian sentuh dengan <code>{@link
|
||||
android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li>
|
||||
</ul>
|
||||
|
||||
@@ -199,11 +199,11 @@ perlu memberikan fokus pada item tindakan (seperti tombol) agar pengguna bisa me
|
||||
yang akan menerima input. Akan tetapi jika perangkat memiliki kemampuan sentuh, dan pengguna
|
||||
mulai berinteraksi dengan antarmuka dengan menyentuhnya, maka Anda tidak perlu lagi
|
||||
menyorot item, atau memfokuskan pada View tertentu. Karena itu, ada mode
|
||||
untuk interaksi yang bernama "mode sentuh".
|
||||
untuk interaksi yang bernama "mode sentuh".
|
||||
</p>
|
||||
<p>
|
||||
Untuk perangkat berkemampuan sentuh, setelah pengguna menyentuh layar, perangkat
|
||||
akan masuk ke mode sentuh. Dari sini dan selanjutnya, hanya View dengan
|
||||
akan masuk ke mode sentuh. Dari sini dan selanjutnya, hanya View dengan
|
||||
{@link android.view.View#isFocusableInTouchMode} benar yang akan dapat difokus, seperti widget pengedit teks.
|
||||
View lain yang dapat disentuh, seperti tombol, tidak akan difokus bila disentuh; View ini akan
|
||||
langsung memicu on-click listener bila ditekan.
|
||||
@@ -214,7 +214,7 @@ keluar dari mode sentuh, dan mencari tampilan untuk difokuskan. Kini pengguna bi
|
||||
dengan antarmuka pengguna tanpa menyentuh layar.
|
||||
</p>
|
||||
<p>
|
||||
Status mode sentuh dipertahankan di seluruh sistem (semua jendela dan aktivitas).
|
||||
Status mode sentuh dipertahankan di seluruh sistem (semua jendela dan aktivitas).
|
||||
Untuk query status saat ini, Anda bisa memanggil
|
||||
{@link android.view.View#isInTouchMode} untuk mengetahui apakah perangkat saat ini sedang dalam mode sentuh.
|
||||
</p>
|
||||
@@ -257,7 +257,7 @@ mana pun, tidak pula akan menyusuri ke bawah dari Button kedua. Karena sekarang
|
||||
mendefinisikan Button bawah sebagai <var>nextFocusUp</var> (dan sebaliknya), fokus navigasi akan
|
||||
silih berganti dari atas ke bawah dan bawah ke atas.</p>
|
||||
|
||||
<p>Jika Anda ingin mendeklarasikan View sebagai dapat difokus dalam UI (bila biasanya tidak dapat difokus),
|
||||
<p>Jika Anda ingin mendeklarasikan View sebagai dapat difokus dalam UI (bila biasanya tidak dapat difokus),
|
||||
tambahkan atribut XML <code>android:focusable</code> ke View, dalam deklarasi layout Anda.
|
||||
Atur nilai <var>true</var>. Anda juga bisa mendeklarasikan View
|
||||
sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTouchMode</code>.</p>
|
||||
@@ -282,7 +282,7 @@ sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTou
|
||||
the framework will take care of measuring, laying out, and drawing the tree
|
||||
as appropriate.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on
|
||||
the UI thread when calling any method on any View.
|
||||
If you are doing work on other threads and want to update the state of a View
|
||||
|
||||
@@ -815,7 +815,7 @@ penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem a
|
||||
sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
|
||||
oleh aplikasi.</p>
|
||||
|
||||
<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
|
||||
<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
|
||||
<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
|
||||
Directory Access</a>.</p>
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ page.image=images/cards/card-n-changes_2x.png
|
||||
|
||||
<p>
|
||||
Bersama fitur dan kemampuan baru, Android N
|
||||
menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini
|
||||
menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini
|
||||
menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan
|
||||
dalam aplikasi Anda.
|
||||
</p>
|
||||
@@ -482,7 +482,7 @@ JavaVM::AttachCurrentThread from <jni.h>.
|
||||
</li>
|
||||
|
||||
<li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat
|
||||
berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code>
|
||||
berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code>
|
||||
secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
|
||||
tidak terkelola. Selain itu, <code>CreateUser()</code> dan
|
||||
<code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
|
||||
|
||||
@@ -297,7 +297,7 @@ public static void scheduleJob(Context context) {
|
||||
<dd>
|
||||
Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code
|
||||
null} jika tidak ada URI yang memicu pekerjaan (misalnya, pekerjaan
|
||||
dipicu karena batas waktu atau alasan lainnya), atau jumlah
|
||||
dipicu karena batas waktu atau alasan lainnya), atau jumlah
|
||||
URI yang berubah lebih dari 50.
|
||||
</dd>
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ page.image=images/cards/card-nyc_2x.jpg
|
||||
<p>
|
||||
N Developer Preview memperluas {@link android.net.ConnectivityManager}
|
||||
API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver
|
||||
pengguna</a> dan <a href="#monitor-changes">memantau perubahan
|
||||
pengguna</a> dan <a href="#monitor-changes">memantau perubahan
|
||||
preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah
|
||||
pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
|
||||
data latar belakang.
|
||||
|
||||
@@ -325,7 +325,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
||||
<p class="note">
|
||||
<strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
|
||||
mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code>
|
||||
mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga
|
||||
mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga
|
||||
mengembalikan nilai true.
|
||||
</p>
|
||||
</dd>
|
||||
|
||||
@@ -739,7 +739,7 @@ Sumber sertifikat CA, bisa salah satu dari
|
||||
</dt>
|
||||
|
||||
<dd>
|
||||
Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya
|
||||
Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya
|
||||
{@code "SHA-256"} yang didukung.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -126,7 +126,7 @@ memasang Android N Preview SDK, lihat <a href="{@docRoot}preview/setup-sdk.html"
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Agar dapat menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan
|
||||
Agar dapat menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan
|
||||
<a class="external-link" href="https://source.android.com/source/jack.html">Jack toolchain</a> yang baru. Toolchain Android
|
||||
yang baru ini mengompilasi sumber bahasa Java menjadi dex
|
||||
bytecode yang bisa dibaca Android, memiliki format pustaka {@code .jack} sendiri, dan menyediakan sebagian besar fitur toolchain
|
||||
|
||||
@@ -167,7 +167,7 @@ page.tags="preview", "developer", "android"
|
||||
<p>
|
||||
<strong>Tiga tahapan pencapaian pratinjau pertama</strong> memberikan <strong>ujian
|
||||
pertama dan lingkungan pengembangan</strong> yang membantu Anda mengidentifikasi
|
||||
masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan
|
||||
masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan
|
||||
yang diperlukan untuk menargetkan platform baru. Ini adalah periode prioritas yang akan
|
||||
memberi kami masukan dari Anda tentang fitur dan API serta masalah kompatibilitas file
|
||||
— untuk semua ini, gunakan <a href="{@docRoot}preview/bug">Issue
|
||||
@@ -314,8 +314,8 @@ page.tags="preview", "developer", "android"
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk
|
||||
Android N</a> memiliki
|
||||
<li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk
|
||||
Android N</a> memiliki
|
||||
petunjuk langkah demi langkah untuk memulai.</li>
|
||||
<li> <a href="{@docRoot}preview/behavior-changes.html">Perubahan
|
||||
Perilaku</a> akan menunjukkan kepada Anda bidang-bidang utama untuk diuji.</li>
|
||||
|
||||
@@ -92,7 +92,7 @@ kotak centang <strong>Android N Preview</strong>.</li>
|
||||
<a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
|
||||
<td width="100%">
|
||||
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||
</td>
|
||||
</tr>
|
||||
<table>
|
||||
|
||||
@@ -457,7 +457,7 @@ Tracker</a>.</p>
|
||||
versi aplikasi multi-APK yang didesain untuk mendukung Vulkan yang lebih rendah pada
|
||||
perangkat dengan dukungan versi yang lebih tinggi. Saat ini, Google Play Store tidak
|
||||
menerima unggahan aplikasi yang menggunakan penargetan versi Vulkan. Dukungan ini
|
||||
akan ditambahkan pada Google Play Store di masa mendatang dan diperbaiki dalam
|
||||
akan ditambahkan pada Google Play Store di masa mendatang dan diperbaiki dalam
|
||||
Google Play Services versi berikutnya (akan disertakan dalam rilis Developer Preview
|
||||
mendatang). Perangkat N yang menggunakan Google Play Services 9.0.83 akan
|
||||
tetap menerima versi Aplikasi yang menargetkan dukungan Vulkan dasar.
|
||||
|
||||
@@ -66,7 +66,7 @@ sediakan listener sebagai gantinya.</p>
|
||||
<p>Anda bisa mengambil warna mencolok dari gambar dengan metode getter di kelas
|
||||
<code>Palette</code>, misalnya <code>Palette.getVibrantColor</code>.</p>
|
||||
|
||||
<p>Untuk menggunakan kelas {@link android.support.v7.graphics.Palette} dalam proyek Anda, tambahkan
|
||||
<p>Untuk menggunakan kelas {@link android.support.v7.graphics.Palette} dalam proyek Anda, tambahkan
|
||||
<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> berikut ke
|
||||
modul aplikasi Anda:</p>
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ android.support.v7.widget.RecyclerView.LayoutManager RecyclerView.LayoutManager}
|
||||
<h3>Animasi</h3>
|
||||
|
||||
<p>Animasi untuk menambahkan dan menghapus item diaktifkan secara default di {@link
|
||||
android.support.v7.widget.RecyclerView}. Untuk menyesuaikan animasi ini, perluas kelas
|
||||
android.support.v7.widget.RecyclerView}. Untuk menyesuaikan animasi ini, perluas kelas
|
||||
{@link android.support.v7.widget.RecyclerView.ItemAnimator RecyclerView.ItemAnimator}dan gunakan
|
||||
metode {@link android.support.v7.widget.RecyclerView#setItemAnimator RecyclerView.setItemAnimator()}.
|
||||
</p>
|
||||
@@ -253,7 +253,7 @@ dalam layout:</p>
|
||||
|
||||
<p>Widget {@link android.support.v7.widget.RecyclerView} dan {@link android.support.v7.widget.CardView}
|
||||
adalah bagian dari <a href="{@docRoot}tools/support-library/features.html#v7">v7 Support
|
||||
Library</a>. Untuk menggunakan widget dalam proyek Anda, tambahkan
|
||||
Library</a>. Untuk menggunakan widget dalam proyek Anda, tambahkan
|
||||
<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> ini ke
|
||||
modul aplikasi Anda:</p>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>Google Play について</h2>
|
||||
<ol style="list-style-type:none;">
|
||||
|
||||
@@ -160,4 +160,4 @@ page.metaDescription=アプリとコンテンツを Android Auto に配布しま
|
||||
data-query="collection:autolanding"
|
||||
data-cardSizes="9x6, 6x3x2"
|
||||
data-maxResults="6">
|
||||
</div>
|
||||
</div>
|
||||
@@ -5,7 +5,7 @@ Xnonavpage=true
|
||||
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>公開機能</h2>
|
||||
<ol>
|
||||
|
||||
@@ -36,4 +36,4 @@ page.tags="families"
|
||||
|
||||
<div class="paging-links" style="padding-top:.75em;">
|
||||
<a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">次のトピック:オプトイン</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -10,7 +10,7 @@ page.metaDescription=Designed for Families に関する質問と回答
|
||||
font-weight:bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<ol id="qv">
|
||||
<h2>本書の内容</h2>
|
||||
@@ -106,7 +106,7 @@ page.metaDescription=Designed for Families に関する質問と回答
|
||||
</dt>
|
||||
|
||||
<dd>
|
||||
Designed for Families プログラムにオプトインすると、Google Play はアプリを審査し、ファミリー層に適切かどうか確認します。アプリがすべてのプログラム要件に準拠している場合、公開までの時間は通常よりも長くかかることはないはずです。ただし、Designed for Families 審査で却下された場合、アプリの公開が遅れる可能性があります。
|
||||
Designed for Families プログラムにオプトインすると、Google Play はアプリを審査し、ファミリー層に適切かどうか確認します。アプリがすべてのプログラム要件に準拠している場合、公開までの時間は通常よりも長くかかることはないはずです。ただし、Designed for Families 審査で却下された場合、アプリの公開が遅れる可能性があります。
|
||||
</dd>
|
||||
|
||||
<dt>
|
||||
|
||||
@@ -51,7 +51,7 @@ page.metaDescription=ほんの数ステップで Designed for Families に参加
|
||||
</p>
|
||||
|
||||
<p class="note">
|
||||
<strong>注:</strong> Designed for Families プログラムで公開されたアプリは Google Play ですべてのユーザーも利用できます。
|
||||
<strong>注:</strong> Designed for Families プログラムで公開されたアプリは Google Play ですべてのユーザーも利用できます。
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -67,4 +67,4 @@ page.metaDescription=ほんの数ステップで Designed for Families に参加
|
||||
|
||||
<div class="paging-links" style="padding-top:.75em;">
|
||||
<a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">次のトピック:よくある質問</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -54,4 +54,4 @@ page.image=distribute/images/play_dev_guide.png
|
||||
data-query="collection:play_dev_guide"
|
||||
data-cardSizes="9x6"
|
||||
data-maxResults="1">
|
||||
</div>
|
||||
</div>
|
||||
@@ -431,4 +431,4 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
||||
|
||||
<p class="caution">
|
||||
<strong>重要: </strong>この制限のため、Auto サポートのプロトタイプの作成に、実働 APK を使用してはなりません。
|
||||
</p>
|
||||
</p>
|
||||
@@ -13,7 +13,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<li><a href="#listing">Google Play</a></li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>テスト</h2>
|
||||
<ol>
|
||||
<li><a href="#test-environment">テスト環境の設定</a></li>
|
||||
@@ -25,7 +25,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<li><a href="{@docRoot}distribute/essentials/quality/tablets.html">タブレットのアプリ品質</a></li>
|
||||
<li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,7 +70,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
||||
<th style="width:54px;">
|
||||
ID
|
||||
</th>
|
||||
|
||||
|
||||
|
||||
<th>
|
||||
説明
|
||||
@@ -1011,4 +1011,4 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
|
||||
|
||||
<p>
|
||||
{@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()} を使用して<code>ThreadPolicy</code> に対するポリシー違反の<strong>視覚通知</strong>を有効にします。
|
||||
</p>
|
||||
</p>
|
||||
@@ -46,7 +46,7 @@ Xnonavpage=true
|
||||
|
||||
<div class="headerLine"><h2 id="core-app-quality">1.タブレット アプリの基本的な品質テスト</h2></div>
|
||||
|
||||
<p>タブレット アプリの優れたエクスペリエンスを提供する最初のステップは、アプリがターゲットとしているすべてのデバイスとフォーム ファクタに対して、<em>アプリの中核品質基準</em>に適合していることを確認することです。詳細については、<a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質に関するガイドライン</a>を参照してください。
|
||||
<p>タブレット アプリの優れたエクスペリエンスを提供する最初のステップは、アプリがターゲットとしているすべてのデバイスとフォーム ファクタに対して、<em>アプリの中核品質基準</em>に適合していることを確認することです。詳細については、<a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質に関するガイドライン</a>を参照してください。
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -395,4 +395,4 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
|
||||
</p>
|
||||
<p>
|
||||
はい。上記の要件は、アプリが Google Play で Android Wear アプリとして識別され、Android Wear ユーザーが発見しやすくなるかどうかのみを判断するものです。アプリが Wear アプリとして承認されなくても、電話やタブレットなどの他のデバイス タイプで利用可能です。ウェアラブル端末へのインストールも可能です。
|
||||
</p>
|
||||
</p>
|
||||
@@ -134,4 +134,4 @@ href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=e
|
||||
data-query="collection:distribute/googleplay/gettingstarted"
|
||||
data-sortOrder="-timestamp"
|
||||
data-cardSizes="9x3"
|
||||
data-maxResults="6"></div>
|
||||
data-maxResults="6"></div>
|
||||
@@ -173,7 +173,7 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に
|
||||
<h3 id="track_review">5.審査と承認をトラッキングする</h3>
|
||||
|
||||
<p>
|
||||
アプリが上述の Android TV 向けの技術上の基準と品質基準に適合すると、ユーザーはそのアプリを Android TV で活用できるようになります。アプリが基準を満たしていない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
|
||||
アプリが上述の Android TV 向けの技術上の基準と品質基準に適合すると、ユーザーはそのアプリを Android TV で活用できるようになります。アプリが基準を満たしていない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -190,7 +190,7 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<em>承認</em> — アプリが審査され、承認されました。アプリは Android TV ユーザーが直接利用できるようになります。
|
||||
<em>承認</em> — アプリが審査され、承認されました。アプリは Android TV ユーザーが直接利用できるようになります。
|
||||
</li>
|
||||
|
||||
<li>
|
||||
@@ -207,4 +207,4 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に
|
||||
data-query="collection:tvlanding"
|
||||
data-cardSizes="9x6, 6x3x2"
|
||||
data-maxResults="6">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -196,4 +196,4 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android Wear に
|
||||
data-query="collection:wearlanding"
|
||||
data-cardSizes="6x2"
|
||||
data-maxResults="3">
|
||||
</div>
|
||||
</div>
|
||||
@@ -789,4 +789,4 @@ data-maxresults="6">
|
||||
data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
|
||||
data-sortOrder="-timestamp"
|
||||
data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
|
||||
data-maxResults="6"></div>
|
||||
data-maxResults="6"></div>
|
||||
@@ -2,7 +2,7 @@ page.title=ローカライズのチェックリスト
|
||||
page.metaDescription=Android と Google Play から提供される世界中のユーザーを活用します。このチェックリストを読んで、お客様の製品を世界中のマーケットに提供する方法の概要を把握してください。
|
||||
meta.tags="localizing, publishing, disttools"
|
||||
page.tags="local, l10n, translation, language"
|
||||
page.image=/distribute/images/localization-checklist.jpg
|
||||
page.image=/distribute/images/localization-checklist.jpg
|
||||
|
||||
@jd:body
|
||||
|
||||
@@ -713,4 +713,4 @@ data-maxresults="6">
|
||||
data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
|
||||
data-sortOrder="-timestamp"
|
||||
data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
|
||||
data-maxResults="6"></div>
|
||||
data-maxResults="6"></div>
|
||||
@@ -263,4 +263,4 @@ href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-featur
|
||||
|
||||
<p class="caution"><strong>警告:</strong> 同じアプリに複数の APK を公開することは拡張機能とみなされます。<strong>大部分のアプリは、広範囲のデバイス設定をサポートする APK を 1 つだけ公開すべきです</strong>。複数の APK を公開する場合、フィルタ固有のルールに従う必要があります。また、設定ごとに適切なアップデート パスを確保するため、各 APK のバージョン コードに特別な注意を払う必要があります。</p>
|
||||
|
||||
<p>Google Play で複数の APK を公開する方法について詳しくは、<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数の APK サポート(Multiple APK Support)</a>をご覧ください。</p>
|
||||
<p>Google Play で複数の APK を公開する方法について詳しくは、<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数の APK サポート(Multiple APK Support)</a>をご覧ください。</p>
|
||||
@@ -53,7 +53,7 @@ page.tags=activity,intent
|
||||
<p> 通常、アプリケーションは複数のアクティビティで構成されており、各アプリケーションはそれぞれ緩やかにつながっています。
|
||||
一般的には、アプリケーションの 1 つのアクティビティが「メイン」アクティビティとして指定され、ユーザーが初めてアプリケーションを起動したときに表示されるのがこのアクティビティになります。
|
||||
その後、各アクティビティで別のアクティビティを開始して別の操作を実行できます。
|
||||
新しいアクティビティの開始時には、前のアクティビティは停止しますが、そのアクティビティはシステムによってスタック(「バックスタック」)に維持されます
|
||||
新しいアクティビティの開始時には、前のアクティビティは停止しますが、そのアクティビティはシステムによってスタック(「バックスタック」)に維持されます
|
||||
|
||||
新しいアクティビティが開始すると、それがバックスタックに入ってユーザーに表示されます。
|
||||
バックスタックは「後入れ先出し」の基本的なスタック メカニズムを順守するため、ユーザーが現在のアクティビティを完了して [<em>戻る</em>] ボタンを押すと、そのアクティビティはスタックから消え(破棄され)、前のアクティビティが再開します。
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user