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>
|
<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>
|
<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>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>
|
<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>
|
<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
|
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,
|
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
|
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>
|
</ul>
|
||||||
|
|
||||||
<p class="note"><strong>Nota:</strong> El diseño de las notificaciones de esta versión de
|
<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
|
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>
|
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
|
a los usuarios
|
||||||
durante un período breve, con un diseño expandido que expone las posibles acciones.</p>
|
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
|
<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>
|
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>
|
<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
|
<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,
|
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
|
por lo que son ideales para
|
||||||
eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen
|
eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen
|
||||||
estas
|
estas
|
||||||
actualizaciones, pero estas notificaciones nunca tendrán prioridad sobre las comunicaciones
|
actualizaciones, pero estas notificaciones nunca tendrán prioridad sobre las comunicaciones
|
||||||
urgentes o directas.</p>
|
urgentes o directas.</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -545,7 +545,7 @@ iconos de notificaciones para
|
|||||||
|
|
||||||
<p><strong>Lo que debe hacer</strong></p>
|
<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>
|
<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
|
<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 icono de barra de acción</a> del diseño Material Light para los iconos
|
||||||
de acciones.</p>
|
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
|
<h3 id="pulse_the_notification_led_appropriately">Pulsación adecuada del
|
||||||
LED de notificaciones</h3>
|
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
|
usuario informado sobre los
|
||||||
eventos cuando la pantalla está apagada. Las notificaciones con un nivel de prioridad <code>MAX</code>,
|
eventos cuando la pantalla está apagada. Las notificaciones con un nivel de prioridad <code>MAX</code>,
|
||||||
<code>HIGH</code> o <code>DEFAULT</code> deben
|
<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>
|
eliminar las notificaciones constantes del panel lateral de notificaciones.</p>
|
||||||
|
|
||||||
<h3 id="ongoing_notifications">Reproducción de medios</h3>
|
<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
|
{@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
|
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
|
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>
|
<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
|
<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,
|
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>
|
solo se revela cuando el usuario se registra en el dispositivo.</li>
|
||||||
</ul>
|
</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>
|
Esta es la opción predeterminada del sistema si no se especificó el grado de visibilidad.</li>
|
||||||
<li><code><a
|
<li><code><a
|
||||||
href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
|
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.
|
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:
|
A continuación, especificamos algunos puntos que se deben tener en cuenta:
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg
|
|||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<div id="qv">
|
<div id="qv">
|
||||||
<h2>Acerca de Google Play</h2>
|
<h2>Acerca de Google Play</h2>
|
||||||
<ol style="list-style-type:none;">
|
<ol style="list-style-type:none;">
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ page.metaDescription=Distribuye tus aplicaciones y contenido para Android Auto.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<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.
|
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,
|
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
|
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
|
Xnonavpage=true
|
||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<div id="qv">
|
<div id="qv">
|
||||||
<h2>Características de la publicación</h2>
|
<h2>Características de la publicación</h2>
|
||||||
<ol>
|
<ol>
|
||||||
@@ -303,7 +303,7 @@ Xnonavpage=true
|
|||||||
<p>
|
<p>
|
||||||
En la mayoría de los casos, todo lo que necesitas es un solo paquete de aplicaciones (APK), y generalmente es la manera
|
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
|
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.
|
permite hacerlo.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias
|
|||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<ol id="qv">
|
<ol id="qv">
|
||||||
<h2>En este documento:</h2>
|
<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
|
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
|
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
|
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>
|
</dd>
|
||||||
|
|
||||||
<dt>
|
<dt>
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ page.metaDescription=Únete a Diseñado para familias en pocos pasos sencillos.
|
|||||||
|
|
||||||
<p class="note">
|
<p class="note">
|
||||||
<strong>Nota</strong>: Las aplicaciones publicadas en el programa Diseñado para familias
|
<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>
|
||||||
|
|
||||||
<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
|
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á
|
seguridad del conductor y no estará
|
||||||
disponible para distribución hasta que se apruebe. Dado que es el mismo APK que el
|
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.
|
finalice el proceso de aprobación para Auto.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
|||||||
<li><a href="#listing">Google Play</a></li>
|
<li><a href="#listing">Google Play</a></li>
|
||||||
|
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>Prueba</h2>
|
<h2>Prueba</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="#test-environment">Configuración de un entorno de prueba</a></li>
|
<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/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>
|
<li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimiza tu aplicación</a></li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
|||||||
<th style="width:54px;">
|
<th style="width:54px;">
|
||||||
ID
|
ID
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
|
|
||||||
<th>
|
<th>
|
||||||
Descripción
|
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
|
<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
|
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>
|
||||||
|
|
||||||
<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
|
<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
|
<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
|
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>.
|
mínimos disponibles</a>.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ android.app.Fragment}. Esto te permite
|
|||||||
maximizar la reutilización de códigos entre diferentes factores y pantallas que
|
maximizar la reutilización de códigos entre diferentes factores y pantallas que
|
||||||
compartan contenido.</li>
|
compartan contenido.</li>
|
||||||
<li>Decide en qué tamaños de pantalla usarás una IU multipanel y luego proporciona los
|
<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>large</code>/<code>xlarge</code>) o anchos mínimos de pantalla (como
|
||||||
<code>sw600dp</code>/<code>sw720</code>).</li>
|
<code>sw600dp</code>/<code>sw720</code>).</li>
|
||||||
</ul>
|
</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>
|
<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
|
<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
|
de características de hardware</a> que no sean adecuadas para tablets. Si encuentras esos
|
||||||
permisos, asegúrate de declarar explícitamente un elemento
|
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>
|
distribución. </p>
|
||||||
|
|
||||||
<p>Si la página de Sugerencias para la optimización indica problemas "Pendientes" que crees que no
|
<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
|
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
|
tu aplicación y actualizaremos tu página de Sugerencias para la optimización
|
||||||
según corresponda.</p>
|
según corresponda.</p>
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Cumple las pautas de Calidad de la aplicación principal
|
<li>Cumple las pautas de Calidad de la aplicación principal
|
||||||
<ul>
|
<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
|
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.
|
Design</a> en tu aplicación.
|
||||||
</li>
|
</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
|
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
|
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
|
los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para
|
||||||
desarrolladores.
|
desarrolladores.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -282,7 +282,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi
|
|||||||
|
|
||||||
<li>
|
<li>
|
||||||
<em>Aprobada</em>: se revisó tu aplicación y se aprobó. La aplicación
|
<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>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ Una vez que hayas leído las pautas, el paso siguientes es desarrollar tu aplica
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Cumple las pautas de Calidad de la aplicación principal.
|
<li>Cumple las pautas de Calidad de la aplicación principal.
|
||||||
<ul>
|
<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
|
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.
|
Design</a> en tu aplicación.
|
||||||
</li>
|
</li>
|
||||||
@@ -152,7 +152,7 @@ desarrollo de aplicaciones para Wear</a>.</li>
|
|||||||
<p>
|
<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
|
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
|
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>
|
<a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación para el lanzamiento.</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -870,7 +870,7 @@ data-maxresults="6">
|
|||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
"Dispositivos compatibles" indica que tus aplicaciones están llegando a los dispositivos
|
"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.
|
los requisitos y las reglas de filtrado de las aplicaciones.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -903,7 +903,7 @@ data-maxresults="6">
|
|||||||
Responde las reseñas, si fuera posible. Te recomendamos que interactúes
|
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.
|
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
|
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.
|
la posibilidad de obtener ayuda por parte de hablantes nativos para brindar soporte.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</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
|
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>
|
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>
|
<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
|
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
|
ú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>
|
<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>
|
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).
|
(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
|
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>
|
<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>
|
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>
|
<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
|
permisos simple en la que se detallan claramente los directorios a los cuales
|
||||||
la aplicación solicita acceso.</p>
|
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 href="{@docRoot}preview/features/scoped-folder-access.html">Acceso
|
||||||
a directorios determinados</a> para desarrolladores.</p>
|
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>
|
||||||
|
|
||||||
<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
|
<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
|
para las aplicaciones de ejecución prolongada. Los desarrolladores
|
||||||
de aplicaciones pueden usar estos datos para perfeccionar sus aplicaciones y alcanzar un nivel
|
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>
|
||||||
|
|
||||||
<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,
|
Nexus 6P. Para usar esta función,
|
||||||
establece el indicador de rendimiento sostenido de la ventana
|
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
|
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>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<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>.
|
<code>PrinterInfo.Builder.setResourceIconId()</code>.
|
||||||
</li>
|
</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
|
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
|
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
|
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
|
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
|
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
|
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,
|
Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados,
|
||||||
y un intento de hacerlo utilizando
|
y un intento de hacerlo utilizando
|
||||||
{@link android.content.Context#MODE_WORLD_READABLE} o
|
{@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}.
|
{@link java.lang.SecurityException}.
|
||||||
<p class="note">
|
<p class="note">
|
||||||
<strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente.
|
<strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente.
|
||||||
@@ -211,7 +211,7 @@ determinadas intents implícitas.
|
|||||||
<li>
|
<li>
|
||||||
Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al
|
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
|
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
|
<code>FileUriExposedException</code>. La manera recomendada para compartir el
|
||||||
contenido de un archivo privado consiste en utilizar el {@link
|
contenido de un archivo privado consiste en utilizar el {@link
|
||||||
android.support.v4.content.FileProvider}.
|
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
|
almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una
|
||||||
ruta de acceso inaccesible cuando acceden a {@link
|
ruta de acceso inaccesible cuando acceden a {@link
|
||||||
android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a
|
android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a
|
||||||
Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
|
Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
|
||||||
intentan acceder a
|
intentan acceder a
|
||||||
{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
|
{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
|
||||||
Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública
|
Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública
|
||||||
usando
|
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
|
a través de transacciones {@link android.os.Binder}. Además, el
|
||||||
sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions}
|
sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions}
|
||||||
como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un
|
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()},
|
{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
|
||||||
lo que hace que {@code ActivityThread.StopInfo} emita una
|
lo que hace que {@code ActivityThread.StopInfo} emita una
|
||||||
{@code RuntimeException} cuando la aplicación se orienta a Android N.
|
{@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
|
no está anexada a una ventana, el sistema
|
||||||
pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}.
|
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
|
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:
|
a una ventana. Este comportamiento soluciona los siguientes errores:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Si una aplicación publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU
|
<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
|
Si una aplicación en Android N con el permiso
|
||||||
{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
|
{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
|
||||||
intentaba borrar un paquete instalado por otra aplicación,
|
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}
|
{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
|
||||||
al invocar
|
al invocar
|
||||||
{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
|
{@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
|
<li><a href="#process-logging">Registros de procesos empresariales
|
||||||
</a></li>
|
</a></li>
|
||||||
|
|
||||||
<li><a href="#bug-reports">Informes de errores remotos
|
<li><a href="#bug-reports">Informes de errores remotos
|
||||||
</a></li>
|
</a></li>
|
||||||
|
|
||||||
<li><a href="#remove-cert">Quitar un certificado de cliente
|
<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
|
Si el propietario de un perfil envía una intent {@link
|
||||||
android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD}, el
|
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
|
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.
|
para que el usuario establezca un bloqueo de dispositivo.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ Android N.</p>
|
|||||||
</p>
|
</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>.
|
<code>DevicePolicyManager</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ Android N.</p>
|
|||||||
<p>
|
<p>
|
||||||
Los lanzadores deben aplicar una IU distintiva para las aplicaciones suspendidas a fin de mostrar que las
|
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
|
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>.
|
<code>DevicePolicyManager.getPackageSuspended()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -181,9 +181,9 @@ Android N.</p>
|
|||||||
</p>
|
</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
|
<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>.
|
<code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ Android N.</p>
|
|||||||
<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
|
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
|
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>.
|
<code>DevicePolicyManager.reboot()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ Android N.</p>
|
|||||||
<p>
|
<p>
|
||||||
Los propietarios de dispositivos pueden identificar actividades sospechosas mediante un rastreo remoto de la actividad del
|
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
|
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>.
|
los registros de dispositivos mediante <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -402,10 +402,10 @@ Android N.</p>
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
El propietario del dispositivo o perfil puede habilitar otra aplicación para que administre las restricciones de
|
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>
|
<code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
|
||||||
. La aplicación nominada puede controlar si se otorgó este permiso
|
. La aplicación nominada puede controlar si se otorgó este permiso
|
||||||
llamando a
|
llamando a
|
||||||
<code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
|
<code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -461,8 +461,8 @@ Android N.</p>
|
|||||||
<p>
|
<p>
|
||||||
Los propietarios de perfiles y dispositivos pueden configurar múltiples certificados de CA para una configuración
|
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
|
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
|
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
|
CA relevantes en la configuración Wi-Fi utilizando el nuevo método
|
||||||
<code>setCaCertificates()</code>.
|
<code>setCaCertificates()</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -511,7 +511,7 @@ Android N.</p>
|
|||||||
</p>
|
</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
|
<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
|
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.
|
, 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
|
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
|
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
|
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
|
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 debe controlar si el usuario o perfil que administra posee un
|
||||||
fondo de pantalla ({@link android.app.WallpaperManager#isWallpaperSupported
|
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>
|
<h2 id="health-monitoring">Control del estado del dispositivo</h2>
|
||||||
|
|
||||||
<p>
|
<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
|
<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
|
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
|
de control es especialmente útil para controlar dispositivos sin supervisión
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ public static void scheduleJob(Context context) {
|
|||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación
|
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()}
|
al método {@link android.app.job.JobService#onStartJob onStartJob()}
|
||||||
en {@code MediaContentJob.class}.
|
en {@code MediaContentJob.class}.
|
||||||
</p>
|
</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
|
<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
|
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
|
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>
|
<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
|
<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
|
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.
|
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
|
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
|
<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.
|
de la pila de tareas.
|
||||||
</p>
|
</p>
|
||||||
@@ -474,7 +474,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Ya sea que actualices o no tu aplicación para Android N, debes
|
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.
|
en modo de ventanas múltiples en un dispositivo con Android N.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -526,7 +526,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>Cambia el tamaño de tu aplicación en modo de pantalla dividida al arrastrar la línea divisoria.
|
<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.
|
necesarios de la IU.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ notificationManager.notify(notificationId, repliedNotification);
|
|||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>
|
<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
|
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
|
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
|
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>
|
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
|
<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:
|
<code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto:
|
||||||
</p>
|
</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>
|
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
|
<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>
|
<code>MediaSession.setMediaButtonReceiver()</code>.</p>
|
||||||
|
|||||||
@@ -41,17 +41,17 @@ directorio externo.</li>
|
|||||||
<code>StorageVolume</code> correcta. Luego, crea una intent llamando al
|
<code>StorageVolume</code> correcta. Luego, crea una intent llamando al
|
||||||
método <code>StorageVolume.createAccessIntent()</code> de esa instancia.
|
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
|
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>
|
<code>StorageManager.getVolumesList()</code>.</p>
|
||||||
|
|
||||||
<p>Si tienes información sobre un archivo específico, usa
|
<p>Si tienes información sobre un archivo específico, usa
|
||||||
<code>StorageManager.getStorageVolume(File)</code> para obtener el
|
<code>StorageManager.getStorageVolume(File)</code> para obtener el
|
||||||
<code>StorageVolume</code> que contiene el archivo. Llama a
|
<code>StorageVolume</code> que contiene el archivo. Llama a
|
||||||
<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
|
<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
|
||||||
directorio de almacenamiento externo del archivo.</p>
|
directorio de almacenamiento externo del archivo.</p>
|
||||||
|
|
||||||
<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
|
<code>StorageVolume.createAccessIntent()</code> para solicitar acceso al volumen
|
||||||
completo, en lugar de un directorio específico.
|
completo, en lugar de un directorio específico.
|
||||||
<code>StorageVolume.createAccessIntent()</code> regresa un valor nulo si pasas un
|
<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,
|
<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" />
|
{@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>
|
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
|
<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>
|
<p>
|
||||||
Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}.
|
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
|
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>
|
<a href="#certificates"><code><certificates></code></a>
|
||||||
múltiples en lugar de solo uno.
|
múltiples en lugar de solo uno.
|
||||||
</p>
|
</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
|
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
|
estos dominios se permite <em>excepto</em> con las conexiones a {@code
|
||||||
secure.example.com}. Anidando la configuración para {@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.
|
{@code trust-anchors} no necesita duplicación.
|
||||||
</p>
|
</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
|
<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
|
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>
|
experiencia de grabación para tu servicio de entrada de TV.</p>
|
||||||
|
|
||||||
<h2 id="supporting">Indicar la compatibilidad para la grabación</h2>
|
<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
|
<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
|
atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio
|
||||||
en <code>true</code>:
|
en <code>true</code>:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ en <code>true</code>:
|
|||||||
android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
|
android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
|
||||||
</pre>
|
</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
|
<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar el servicio de entrada
|
||||||
de TV en el manifiesto</a>.
|
de TV en el manifiesto</a>.
|
||||||
</p>
|
</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
|
<code>RecordedPrograms.Uri</code>. Usa API de proveedor de contenido para
|
||||||
leer, agregar y borrar entradas de esta tabla.</p>
|
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">
|
<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
|
||||||
Conceptos básicos sobre el proveedor de contenido</a>.</p>
|
Conceptos básicos sobre el proveedor de contenido</a>.</p>
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ page.tags="preview", "developer preview"
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Android N te brinda la oportunidad de garantizar que tus aplicaciones funcionen con la próxima versión de la plataforma.
|
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>.
|
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.
|
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>
|
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
|
<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
|
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.
|
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
|
<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.
|
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>
|
<a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
|
||||||
<td width="100%">
|
<td width="100%">
|
||||||
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
||||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<table>
|
<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
|
<li>Developer Preview 3 está <strong>disponible en todos los dispositivos
|
||||||
compatibles:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
|
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).
|
D6653).
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@@ -123,7 +123,7 @@ page.image=images/cards/card-n-support_2x.png
|
|||||||
<h4>Multiprocess WebView</h4>
|
<h4>Multiprocess WebView</h4>
|
||||||
|
|
||||||
<p>
|
<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
|
procesos individuales de espacio aislado cuando se haya habilitado
|
||||||
la opción "Multiprocess WebView". El equipo de WebView espera recibir comentarios sobre compatibilidad y
|
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
|
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
|
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
|
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
|
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.
|
sin la necesidad de contar con conexión USB.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -223,7 +223,7 @@ page.image=images/cards/card-n-support_2x.png
|
|||||||
<dd>
|
<dd>
|
||||||
Ahora, el sistema utiliza metadatos de la actividad para definir el modo de mosaico.
|
Ahora, el sistema utiliza metadatos de la actividad para definir el modo de mosaico.
|
||||||
(Antes, el valor de devolución de
|
(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.
|
<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>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -686,9 +686,9 @@ seguimiento de problemas</a>.</p>
|
|||||||
<h4>OEM unlock</h4>
|
<h4>OEM unlock</h4>
|
||||||
|
|
||||||
<ul>
|
<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>
|
"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
|
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
|
<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
|
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
|
<li>En la muestra multithreadCmdBuffer, {@code vkCmdClearColorImage()} falla cuando
|
||||||
se ejecuta con el controlador N-DP2.</li>
|
se ejecuta con el controlador N-DP2.</li>
|
||||||
<li>Los valores de devolución de {@code vkGetPhysicalDeviceFormatProperties()} no configuran un valor
|
<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>
|
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>
|
<li>Los anexos del búfer de fotogramas de punto flotante de Vulkan no se manejan de forma correcta.</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -892,7 +892,7 @@ seguimiento de problemas</a>.</p>
|
|||||||
<h4 id="dialer">Teléfono</h4>
|
<h4 id="dialer">Teléfono</h4>
|
||||||
|
|
||||||
<ul>
|
<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.
|
N Developer Preview.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -1021,7 +1021,7 @@ seguimiento de problemas</a>.</p>
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>El primer registro en un perfil de trabajo tarda varios minutos en
|
<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.
|
visible en la API Play EMM.
|
||||||
</li>
|
</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
|
next.link=docking-monitoring.html
|
||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<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>
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
|
||||||
</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>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>
|
<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>
|
<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>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>
|
<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>
|
<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>
|
<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 {
|
<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||||
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
||||||
status == BatteryManager.BATTERY_STATUS_FULL;
|
status == BatteryManager.BATTERY_STATUS_FULL;
|
||||||
|
|
||||||
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
||||||
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
|
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
|
||||||
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
|
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
|
||||||
@@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
|
|||||||
}</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>
|
<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>
|
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>
|
<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
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<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>
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</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>
|
<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>
|
<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>
|
<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 =
|
<pre>ConnectivityManager cm =
|
||||||
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
|
||||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||||
boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
|
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>
|
<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>
|
<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>
|
<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
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<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>
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</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>
|
<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>
|
<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>
|
<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);
|
<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>
|
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>
|
<ul><li>coche,</li>
|
||||||
<li>escritorio,</li>
|
<li>escritorio,</li>
|
||||||
<li>escritorio de gama baja (analógico),</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>
|
<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;
|
<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_LE_DESK ||
|
||||||
dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
|
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>
|
<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
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>Dependencias y requisitos previos</h2>
|
<h2>Dependencias y requisitos previos</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Android 2.0 (nivel 5 del API) o superior</li>
|
<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>
|
<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>
|
<li><a href="{@docRoot}guide/components/services.html">Servicios</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</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>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>
|
<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.
|
<!-- 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
|
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>
|
<dl>
|
||||||
<dt><b><a href="battery-monitoring.html">Cómo controlar el nivel de batería y el estado de carga</a></b></dt>
|
<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>
|
<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>
|
<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>
|
<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
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<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>
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</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>
|
<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>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>
|
<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>
|
<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);
|
<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ previous.link=screendensities.html
|
|||||||
|
|
||||||
|
|
||||||
<!-- This is the training bar -->
|
<!-- This is the training bar -->
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<h2>En esta sección puedes aprender:</h2>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
@@ -27,17 +27,17 @@ previous.link=screendensities.html
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li>
|
<li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>¡Pruébalo!</h2>
|
<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>
|
<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>
|
<p class="filename">NewsReader.zip</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</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>
|
<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);
|
setContentView(R.layout.main_layout);
|
||||||
|
|
||||||
View articleView = findViewById(R.id.article);
|
View articleView = findViewById(R.id.article);
|
||||||
mIsDualPane = articleView != null &&
|
mIsDualPane = articleView != null &&
|
||||||
articleView.getVisibility() == View.VISIBLE;
|
articleView.getVisibility() == View.VISIBLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) {
|
|||||||
else {
|
else {
|
||||||
/* use list navigation (spinner) */
|
/* use list navigation (spinner) */
|
||||||
actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
|
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);
|
R.layout.headline_item, CATEGORIES);
|
||||||
actionBar.setListNavigationCallbacks(adap, handler);
|
actionBar.setListNavigationCallbacks(adap, handler);
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment {
|
|||||||
public class HeadlinesFragment extends ListFragment {
|
public class HeadlinesFragment extends ListFragment {
|
||||||
...
|
...
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent,
|
public void onItemClick(AdapterView<?> parent,
|
||||||
View view, int position, long id) {
|
View view, int position, long id) {
|
||||||
if (null != mHeadlineSelectedListener) {
|
if (null != mHeadlineSelectedListener) {
|
||||||
mHeadlineSelectedListener.onHeadlineSelected(position);
|
mHeadlineSelectedListener.onHeadlineSelected(position);
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ next.link=screensizes.html
|
|||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>Dependencias y requisitos previos</h2>
|
<h2>Dependencias y requisitos previos</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Android 1.6 o superior (Android 2.1 o superior para la aplicación de ejemplo)</li>
|
<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>
|
<ul>
|
||||||
<li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
|
<li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>¡Pruébalo!</h2>
|
<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>
|
<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>
|
<p class="filename">NewsReader.zip</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</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>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>
|
<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
|
<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>
|
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>
|
|
||||||
|
<h2>Secciones</h2>
|
||||||
<dl>
|
|
||||||
<dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt>
|
<dl>
|
||||||
<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="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="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>
|
<dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt>
|
||||||
</dl>
|
<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 -->
|
<!-- This is the training bar -->
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<h2>En esta sección puedes aprender:</h2>
|
||||||
<ol>
|
<ol>
|
||||||
@@ -29,15 +29,15 @@ next.link=adaptui.html
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>¡Pruébalo!</h2>
|
<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>
|
<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>
|
<p class="filename">NewsReader.zip</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</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>
|
<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>
|
<p>Por ejemplo, al especificar un espacio entre dos vistas, debes utilizar <code>dp</code> en lugar de <code>px</code>:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
<Button android:layout_width="wrap_content"
|
<Button android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/clickme"
|
android:text="@string/clickme"
|
||||||
android:layout_marginTop="20dp" />
|
android:layout_marginTop="20dp" />
|
||||||
</pre>
|
</pre>
|
||||||
@@ -57,8 +57,8 @@ next.link=adaptui.html
|
|||||||
<p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p>
|
<p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
<TextView android:layout_width="match_parent"
|
<TextView android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textSize="20sp" />
|
android:textSize="20sp" />
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ next.link=screendensities.html
|
|||||||
|
|
||||||
|
|
||||||
<!-- This is the training bar -->
|
<!-- This is the training bar -->
|
||||||
<div id="tb-wrapper">
|
<div id="tb-wrapper">
|
||||||
<div id="tb">
|
<div id="tb">
|
||||||
|
|
||||||
<h2>En esta sección puedes aprender:</h2>
|
<h2>En esta sección puedes aprender:</h2>
|
||||||
<ol>
|
<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>
|
<li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>¡Pruébalo!</h2>
|
<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>
|
<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>
|
<p class="filename">NewsReader.zip</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p>
|
<p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li>
|
<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>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>Asegúrate de aplicar el diseño adecuado a la pantalla correspondiente.</li>
|
||||||
<li>Utiliza el mapa de bits con la escala adecuada.</li>
|
<li>Utiliza el mapa de bits con la escala adecuada.</li>
|
||||||
</ul>
|
</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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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">
|
<div class="col-7">
|
||||||
|
|
||||||
<h4 id="do-heavy-lifting-for-me">Lakukan pekerjaan yang sulit untuk saya</h4>
|
<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
|
Misalnya, pintasan yang menggabungkan beberapa efek foto dapat membuat foto amatir terlihat mengagumkan hanya
|
||||||
dalam beberapa langkah.</p>
|
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
|
kejadian tersebut, dan menyediakan path bagi pengguna untuk menjelajah ke dalam aplikasi. Pemberitahuan dengan gaya seperti ini
|
||||||
disebut <em>pemberitahuan tidak langsung</em>.</p>
|
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 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 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:
|
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
|
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>
|
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
|
Tugas tunggal dapat memanfaatkan aktivitas dari satu aplikasi saja, atau dapat memanfaatkan aktivitas dari sejumlah
|
||||||
aplikasi berbeda.</p>
|
aplikasi berbeda.</p>
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ jendela lain.</p>
|
|||||||
<p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar
|
<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
|
satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang
|
||||||
ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap
|
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
|
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
|
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",
|
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
|
Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam
|
||||||
statusnya—apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya—dan
|
statusnya—apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya—dan
|
||||||
masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang
|
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
|
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
|
memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini
|
||||||
semuanya bagian dari daur hidup aktivitas.</p>
|
semuanya bagian dari daur hidup aktivitas.</p>
|
||||||
@@ -89,7 +89,7 @@ terpenting adalah:</p>
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>{@link android.app.Activity#onCreate onCreate()}</dt>
|
<dt>{@link android.app.Activity#onCreate onCreate()}</dt>
|
||||||
<dd>Anda harus mengimplementasikan metode ini. Sistem memanggilnya saat membuat
|
<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.
|
aktivitas.
|
||||||
Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView
|
Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView
|
||||||
setContentView()} untuk mendefinisikan layout untuk antarmuka pengguna aktivitas.</dd>
|
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>
|
tombol yang mengawali suatu tindakan bila pengguna menyentuhnya.</p>
|
||||||
|
|
||||||
<p>Android menyediakan sejumlah tampilan siap-dibuat yang bisa Anda gunakan untuk mendesain dan mengatur
|
<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
|
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
|
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
|
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
|
<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
|
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
|
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
|
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
|
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
|
<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
|
<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>
|
mengaktifkannya.</p>
|
||||||
|
|
||||||
<p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub
|
<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
|
<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,
|
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
|
pada formulir penulisan email. Dalam situasi ini, aktivitas aplikasi email dimulai dan bila
|
||||||
pengguna selesai, aktivitas Anda akan dilanjutkan.</p>
|
pengguna selesai, aktivitas Anda akan dilanjutkan.</p>
|
||||||
|
|
||||||
@@ -297,7 +297,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Contoh ini menunjukkan logika dasar yang harus Anda gunakan dalam metode {@link
|
<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
|
hasil aktivitas. Syarat pertama memeriksa apakah permintaan berhasil—jika ya, maka
|
||||||
{@code resultCode} akan berupa {@link android.app.Activity#RESULT_OK}—dan apakah permintaan
|
{@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
|
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
|
menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari
|
||||||
bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin
|
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
|
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
|
metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link
|
||||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
|
||||||
|
|
||||||
<p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
|
<p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
|
||||||
sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini
|
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
|
informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link
|
||||||
android.os.Bundle#putString putString()} dan {@link
|
android.os.Bundle#putString putString()} dan {@link
|
||||||
android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda
|
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
|
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
|
{@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
|
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
|
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
|
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
|
<p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link
|
||||||
android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
|
||||||
akan dipulihkan oleh implementasi default {@link
|
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
|
implementasi default akan memanggil metode {@link
|
||||||
android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@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
|
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
|
, 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
|
(sistem akan memanggil {@link android.app.Activity#onDestroy}, kemudian segera memanggil {@link
|
||||||
android.app.Activity#onCreate onCreate()}). Perilaku ini
|
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
|
aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk
|
||||||
layar orientasi dan ukuran yang berbeda).</p>
|
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
|
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
|
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.
|
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>
|
aktivitas pertama.</p>
|
||||||
|
|
||||||
<p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam
|
<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}
|
android.os.Message}. {@link android.os.Handler}
|
||||||
ini adalah dasar bagi {@link android.os.Messenger} yang nanti bisa berbagi {@link android.os.IBinder}
|
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
|
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.
|
sehingga layanan bisa mengirim balik pesan.
|
||||||
<p>Inilah cara termudah melakukan komunikasi antarproses (IPC), karena {@link
|
<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
|
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>
|
</ol>
|
||||||
|
|
||||||
<p>Misalnya, cuplikan berikut menghubungkan klien ke layanan yang dibuat di atas dengan
|
<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
|
{@link android.os.IBinder} yang dihasilkan ke kelas {@code LocalService} dan meminta instance {@code
|
||||||
LocalService}:</p>
|
LocalService}:</p>
|
||||||
|
|
||||||
@@ -573,7 +573,7 @@ bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<ul>
|
<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
|
{@link android.content.Intent} yang secara eksplisit menyebutkan layanan yang akan diikat (walaupun intent
|
||||||
boleh implisit).</li>
|
boleh implisit).</li>
|
||||||
<li>Parameter kedua adalah objek {@link android.content.ServiceConnection}.</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.FragmentManager}</li>
|
||||||
<li>{@link android.app.FragmentTransaction}</li>
|
<li>{@link android.app.FragmentTransaction}</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>Lihat juga</h2>
|
<h2>Lihat juga</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="{@docRoot}training/basics/fragments/index.html">Membangun UI Dinamis dengan Fragmen</a></li>
|
<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>
|
</div>
|
||||||
|
|
||||||
<p>{@link android.app.Fragment} mewakili perilaku atau bagian dari antarmuka pengguna dalam
|
<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
|
{@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
|
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
|
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
|
yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang
|
||||||
bisa digunakan kembali dalam aktivitas berbeda).</p>
|
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,
|
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
|
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
|
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
|
memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi
|
||||||
fragmen, Anda juga bisa menambahkannya ke back-stack yang dikelola oleh aktivitas
|
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),
|
terjadi. Dengan back-stack pengguna dapat membalikkan transaksi fragmen (mengarah mundur),
|
||||||
dengan menekan tombol <em>Back</em>.</p>
|
dengan menekan tombol <em>Back</em>.</p>
|
||||||
|
|
||||||
<p>Bila Anda menambahkan fragmen sebagai bagian dari layout aktivitas, fragmen itu berada dalam {@link
|
<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
|
layout
|
||||||
tampilannya sendiri. Anda bisa menyisipkan fragmen ke dalam layout aktivitas dengan mendeklarasikan fragmen dalam file layout aktivitas
|
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
|
, 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
|
{@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
|
layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk
|
||||||
aktivitas tersebut.</p>
|
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
|
cara fragmen mempertahankan statusnya bila ditambahkan ke back-stack aktivitas, berbagi
|
||||||
kejadian dengan aktivitas, dan fragmen lain dalam aktivitas, berkontribusi pada action-bar
|
kejadian dengan aktivitas, dan fragmen lain dalam aktivitas, berkontribusi pada action-bar
|
||||||
aktivitas, dan lainnya.</p>
|
aktivitas, dan lainnya.</p>
|
||||||
@@ -80,45 +80,45 @@ aktivitas, dan lainnya.</p>
|
|||||||
|
|
||||||
<h2 id="Design">Filosofi Desain</h2>
|
<h2 id="Design">Filosofi Desain</h2>
|
||||||
|
|
||||||
<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih
|
<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
|
dinamis dan fleksibel pada layar besar, seperti tablet. Karena
|
||||||
layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan
|
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
|
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
|
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
|
mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack
|
||||||
yang dikelola oleh aktivitas.</p>
|
yang dikelola oleh aktivitas.</p>
|
||||||
|
|
||||||
<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di
|
<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
|
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
|
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
|
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>
|
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
|
<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
|
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
|
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
|
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
|
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
|
untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam
|
||||||
konfigurasi layout berbeda untuk mengoptimalkan pengalaman pengguna berdasarkan ruang layar yang tersedia. Misalnya
|
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>
|
bila lebih dari satu yang tidak cocok dalam aktivitas yang sama.</p>
|
||||||
|
|
||||||
<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
|
<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
|
||||||
<p class="img-caption"><strong>Gambar 1.</strong> Contoh cara dua modul UI yang didefinisikan oleh
|
<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>
|
desain handset.</p>
|
||||||
|
|
||||||
<p>Misalnya—untuk melanjutkan contoh aplikasi berita— aplikasi bisa menanamkan
|
<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
|
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
|
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,
|
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
|
<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
|
tablet dan handset dengan menggunakan kembali fragmen dalam kombinasi berbeda, seperti diilustrasikan dalam
|
||||||
gambar 1.</p>
|
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>
|
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>
|
aktivitasnya berjalan).</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau
|
<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
|
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.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#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
|
||||||
{@link android.app.Fragment#onPause onPause()}, dan {@link android.app.Fragment#onStop onStop()}. Sebenarnya
|
{@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
|
, 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>
|
fragmen.</p>
|
||||||
|
|
||||||
<p>Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:</p>
|
<p>Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:</p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
|
<dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
|
||||||
<dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
|
<dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
|
||||||
menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen
|
menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen
|
||||||
dihentikan sementara atau dihentikan, kemudian dilanjutkan.</dd>
|
dihentikan sementara atau dihentikan, kemudian dilanjutkan.</dd>
|
||||||
<dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
|
<dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
|
||||||
<dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya
|
<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
|
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
|
ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika
|
||||||
fragmen tidak menyediakan UI.</dd>
|
fragmen tidak menyediakan UI.</dd>
|
||||||
<dt>{@link android.app.Activity#onPause onPause()}</dt>
|
<dt>{@link android.app.Activity#onPause onPause()}</dt>
|
||||||
<dd>Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang meninggalkan
|
<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
|
<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
|
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>
|
tentang <a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>.</p>
|
||||||
|
|
||||||
|
|
||||||
@@ -171,15 +171,15 @@ android.app.Fragment}:</p>
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>{@link android.app.DialogFragment}</dt>
|
<dt>{@link android.app.DialogFragment}</dt>
|
||||||
<dd>Menampilkan dialog mengambang. Penggunaan kelas ini untuk membuat dialog merupakan alternatif yang baik dari
|
<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
|
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,
|
menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas,
|
||||||
sehingga pengguna bisa kembali ke fragmen yang ditinggalkan.</dd>
|
sehingga pengguna bisa kembali ke fragmen yang ditinggalkan.</dd>
|
||||||
|
|
||||||
<dt>{@link android.app.ListFragment}</dt>
|
<dt>{@link android.app.ListFragment}</dt>
|
||||||
<dd>Menampilkan daftar item yang dikelola oleh adaptor (seperti {@link
|
<dd>Menampilkan daftar item yang dikelola oleh adaptor (seperti {@link
|
||||||
android.widget.SimpleCursorAdapter}), serupa dengan {@link android.app.ListActivity}. Menampilkan
|
android.widget.SimpleCursorAdapter}), serupa dengan {@link android.app.ListActivity}. Menampilkan
|
||||||
beberapa metode pengelolaan daftar tampilan seperti callback {@link
|
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>
|
menangani kejadian klik.</dd>
|
||||||
|
|
||||||
<dt>{@link android.preference.PreferenceFragment}</dt>
|
<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
|
<p>Untuk menyediakan layout fragmen, Anda harus mengimplementasikan metode callback {@link
|
||||||
android.app.Fragment#onCreateView onCreateView()}, yang dipanggil sistem Android
|
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>
|
{@link android.view.View} yang menjadi akar layout fragmen.</p>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong> Jika fragmen adalah subkelas {@link
|
<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
|
<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
|
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>
|
{@link android.view.LayoutInflater}.</p>
|
||||||
|
|
||||||
<p>Misalnya, ini adalah subkelas {@link android.app.Fragment} yang memuat layout dari file
|
<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>
|
<h3>Membuat layout</h3>
|
||||||
<p>Dalam contoh di atas, {@code R.layout.example_fragment} merupakan acuan ke sumber daya layout
|
<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
|
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>
|
<a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -235,12 +235,12 @@ membuat layout di XML, lihat dokumentasi
|
|||||||
<p>Parameter {@code container} yang diteruskan ke {@link android.app.Fragment#onCreateView
|
<p>Parameter {@code container} yang diteruskan ke {@link android.app.Fragment#onCreateView
|
||||||
onCreateView()} adalah induk {@link android.view.ViewGroup} (dari layout aktivitas) tempat
|
onCreateView()} adalah induk {@link android.view.ViewGroup} (dari layout aktivitas) tempat
|
||||||
layout fragmen
|
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
|
menyediakan data tentang instance fragmen sebelumnya, jika fragmen dilanjutkan
|
||||||
(status pemulihan dibahas selengkapnya di bagian tentang <a href="#Lifecycle">Menangani
|
(status pemulihan dibahas selengkapnya di bagian tentang <a href="#Lifecycle">Menangani
|
||||||
Daur Hidup Fragmen</a>).</p>
|
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>
|
tiga argumen:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>ID sumber daya layout yang ingin dimekarkan.</li>
|
<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>
|
<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
|
bagian dari hierarki tampilan keseluruhan aktivitas. Ada dua cara untuk menambahkan fragmen ke layout
|
||||||
aktivitas:</p>
|
aktivitas:</p>
|
||||||
|
|
||||||
@@ -297,13 +297,13 @@ untuk mengambil setiap fragmen. Sistem akan menyisipkan {@link android.view.View
|
|||||||
|
|
||||||
<div class="note">
|
<div class="note">
|
||||||
<p><strong>Catatan:</strong> Setiap fragmen memerlukan identifier
|
<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
|
fragmen untuk melakukan transaksi, seperti menghapusnya). Ada tiga cara untuk memberikan
|
||||||
ID bagi fragmen:</p>
|
ID bagi fragmen:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Memberikan atribut {@code android:id} bersama ID unik.</li>
|
<li>Memberikan atribut {@code android:id} bersama ID unik.</li>
|
||||||
<li>Memberikan atribut {@code android:tag} bersama string 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>
|
tampilan kontainer.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -354,15 +354,15 @@ android.app.FragmentTransaction#add(Fragment,String)} (dengan menyediakan string
|
|||||||
dalam layout aktivitas, ini tidak akan menerima panggilan ke {@link
|
dalam layout aktivitas, ini tidak akan menerima panggilan ke {@link
|
||||||
android.app.Fragment#onCreateView onCreateView()}. Jadi Anda tidak perlu mengimplementasikan metode itu.</p>
|
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
|
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
|
aktivitas nantinya, Anda perlu menggunakan {@link android.app.FragmentManager#findFragmentByTag
|
||||||
findFragmentByTag()}.</p>
|
findFragmentByTag()}.</p>
|
||||||
|
|
||||||
<p>Untuk contoh aktivitas yang menggunakan fragmen sebagai pekerja latar belakang, tanpa UI, lihat sampel {@code
|
<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
|
FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui
|
||||||
Android SDK Manager) dan terletak di sistem Anda sebagai
|
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>
|
<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
|
<li>Dapatkan fragmen yang ada di aktivitas dengan {@link
|
||||||
android.app.FragmentManager#findFragmentById findFragmentById()} (untuk fragmen yang menyediakan UI dalam
|
android.app.FragmentManager#findFragmentById findFragmentById()} (untuk fragmen yang menyediakan UI dalam
|
||||||
layout aktivitas) atau {@link android.app.FragmentManager#findFragmentByTag
|
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
|
<li>Tarik fragmen dari back-stack, dengan {@link
|
||||||
android.app.FragmentManager#popBackStack()} (mensimulasikan perintah <em>Back</em> oleh pengguna).</li>
|
android.app.FragmentManager#popBackStack()} (mensimulasikan perintah <em>Back</em> oleh pengguna).</li>
|
||||||
<li>Daftarkan listener untuk perubahan pada back-stack, dengan {@link
|
<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>
|
<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
|
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
|
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
|
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
|
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>
|
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>
|
status sebelumnya di back-stack:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -442,18 +442,18 @@ transaction.commit();
|
|||||||
|
|
||||||
<p>Dalam contoh ini, {@code newFragment} menggantikan fragmen apa saja (jika ada) yang saat ini berada dalam
|
<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
|
kontainer layout yang diidentifikasi oleh ID {@code R.id.fragment_container}. Dengan memanggil @link
|
||||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti
|
android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti
|
||||||
disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen
|
disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen
|
||||||
sebelumnya dengan menekan tombol <em>Back</em>.</p>
|
sebelumnya dengan menekan tombol <em>Back</em>.</p>
|
||||||
|
|
||||||
<p>Jika Anda menambahkan beberapa perubahan pada transaksi (seperti {@link
|
<p>Jika Anda menambahkan beberapa perubahan pada transaksi (seperti {@link
|
||||||
android.app.FragmentTransaction#add add()} atau {@link android.app.FragmentTransaction#remove
|
android.app.FragmentTransaction#add add()} atau {@link android.app.FragmentTransaction#remove
|
||||||
remove()}) dan panggil {@link
|
remove()}) dan panggil {@link
|
||||||
android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan
|
android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan
|
||||||
sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke
|
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>
|
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>
|
kecuali:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Anda harus memanggil {@link android.app.FragmentTransaction#commit()} paling akhir</li>
|
<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>
|
</ul>
|
||||||
|
|
||||||
<p>Jika Anda tidak memanggil {@link android.app.FragmentTransaction#addToBackStack(String)
|
<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
|
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
|
menghapus fragmen, maka fragmen itu akan <em>dihentikan</em> dan akan dilanjutkan jika pengguna mengarah
|
||||||
kembali.</p>
|
kembali.</p>
|
||||||
|
|
||||||
@@ -473,9 +473,9 @@ transisi, dengan memanggil {@link android.app.FragmentTransaction#setTransition
|
|||||||
mengikatnya.</p>
|
mengikatnya.</p>
|
||||||
|
|
||||||
<p>Memanggil {@link android.app.FragmentTransaction#commit()} tidak akan langsung menjalankan
|
<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
|
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
|
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>
|
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);
|
View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
|
||||||
</pre>
|
</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
|
{@link android.app.Fragment} dari {@link android.app.FragmentManager}, menggunakan {@link
|
||||||
android.app.FragmentManager#findFragmentById findFragmentById()} atau {@link
|
android.app.FragmentManager#findFragmentById findFragmentById()} atau {@link
|
||||||
android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Misalnya:</p>
|
android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Misalnya:</p>
|
||||||
@@ -537,7 +537,7 @@ public static class FragmentA extends ListFragment {
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Selanjutnya aktivitas yang menjadi host fragmen akan mengimplementasikan antarmuka {@code OnArticleSelectedListener}
|
<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
|
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
|
bahwa aktivitas host mengimplementasikan antarmuka ini, metode callback fragmen A {@link
|
||||||
android.app.Fragment#onAttach onAttach()} (yang dipanggil sistem saat menambahkan
|
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
|
<p>Jika aktivitas belum mengimplementasikan antarmuka, maka fragmen akan melontarkan
|
||||||
{@link java.lang.ClassCastException}.
|
{@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
|
{@code OnArticleSelectedListener}, sehingga fragmen A bisa berbagi kejadian dengan aktivitas, dengan memanggil metode
|
||||||
yang didefinisikan oleh antarmuka {@code OnArticleSelectedListener}. Misalnya, jika fragmen A adalah
|
yang didefinisikan oleh antarmuka {@code OnArticleSelectedListener}. Misalnya, jika fragmen A adalah
|
||||||
ekstensi dari {@link android.app.ListFragment}, maka setiap kali
|
ekstensi dari {@link android.app.ListFragment}, maka setiap kali
|
||||||
@@ -654,7 +654,7 @@ seluruh layar).</dd>
|
|||||||
<dt><i>Dihentikan</i></dt>
|
<dt><i>Dihentikan</i></dt>
|
||||||
<dd>Fragmen tidak terlihat. Aktivitas host telah dihentikan atau
|
<dd>Fragmen tidak terlihat. Aktivitas host telah dihentikan atau
|
||||||
fragmen telah dihapus dari aktivitas namun ditambahkan ke back-stack. Fragmen yang dihentikan
|
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>
|
tidak terlihat lagi oleh pengguna dan akan dimatikan jika aktivitas dimatikan.</dd>
|
||||||
</dl>
|
</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>
|
status, lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>
|
||||||
.</p>
|
.</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
|
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
|
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
|
Akan tetapi, fragmen yang ditempatkan ke back-stack dikelola oleh aktivitas host hanya saat
|
||||||
Anda secara eksplisit meminta agar instance disimpan dengan memanggil {@link
|
Anda secara eksplisit meminta agar instance disimpan dengan memanggil {@link
|
||||||
android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} selama transaksi yang
|
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
|
<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
|
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
|
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>
|
berdasarkan konfigurasi layar.</p>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong> Kode sumber lengkap untuk aktivitas ini tersedia di
|
<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}
|
{@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}
|
judul) segera setelah aktivitas memuat layout, sementara {@link android.widget.FrameLayout}
|
||||||
(lokasi penempatan fragmen untuk menampilkan rangkuman pemutaran) menempati ruang di sisi kanan
|
(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
|
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
|
<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
|
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>
|
sebagai ganti pemuatan fragmen kedua.</p>
|
||||||
|
|
||||||
<p>Berikutnya, Anda bisa melihat bagaimana hal ini dilakukan dalam kelas fragmen. Pertama adalah {@code
|
<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
|
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>
|
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
|
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
|
baru untuk menampilkan detail dalam aktivitas yang sama (menambahkan fragmen ke {@link
|
||||||
android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditampilkan).</p>
|
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
|
<p>Fragmen kedua, {@code DetailsFragment} menampilkan rangkuman pemutaran untuk item yang dipilih dari
|
||||||
daftar dari {@code TitlesFragment}:</p>
|
daftar dari {@code TitlesFragment}:</p>
|
||||||
|
|
||||||
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
|
{@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
|
<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}
|
{@code DetailsFragment} berada), maka aplikasi memulai aktivitas {@code DetailsActivity}
|
||||||
untuk menampilkan konten item.</p>
|
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
|
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
|
||||||
details_activity}
|
details_activity}
|
||||||
|
|
||||||
<p>Perhatikan bahwa aktivitas ini selesai sendiri jika konfigurasi mendatar, sehingga aktivitas utama
|
<p>Perhatikan bahwa aktivitas ini selesai sendiri jika konfigurasi mendatar, sehingga aktivitas utama
|
||||||
bisa mengambil alih dan menampilkan {@code DetailsFragment} bersama {@code TitlesFragment}.
|
bisa mengambil alih dan menampilkan {@code DetailsFragment} bersama {@code TitlesFragment}.
|
||||||
Ini bisa terjadi jika pengguna memulai {@code DetailsActivity} saat dalam orientasi tegak, namun kemudian
|
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>
|
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">
|
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>
|
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>
|
||||||
</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>,
|
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>
|
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>
|
<p>Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri: </p>
|
||||||
|
|
||||||
<ul>
|
<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>
|
aplikasi adalah pengguna berbeda.</li>
|
||||||
|
|
||||||
<li>Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya
|
<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
|
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>
|
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>
|
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
|
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>
|
atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.</li>
|
||||||
</ul>
|
</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
|
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>
|
sistem bila tidak diberi izin.</p>
|
||||||
|
|
||||||
<p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi
|
<p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi
|
||||||
untuk mengakses layanan sistem:</p>
|
untuk mengakses layanan sistem:</p>
|
||||||
|
|
||||||
<ul>
|
<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
|
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 (
|
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>
|
aplikasi juga harus ditandatangani dengan sertifikat yang sama).</li>
|
||||||
<li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak
|
<li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak
|
||||||
pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua
|
pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua
|
||||||
izin aplikasi harus diberikan oleh pengguna saat menginstal.</li>
|
izin aplikasi harus diberikan oleh pengguna saat menginstal.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ selanjutnya memperkenalkan Anda pada:</p>
|
|||||||
<li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li>
|
<li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li>
|
||||||
<li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat
|
<li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat
|
||||||
untuk aplikasi.</li>
|
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>
|
aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -78,8 +78,8 @@ aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
|
|||||||
<h2 id="Components">Komponen Aplikasi</h2>
|
<h2 id="Components">Komponen Aplikasi</h2>
|
||||||
|
|
||||||
<p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android.
|
<p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android.
|
||||||
Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen
|
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
|
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
|
sebagai kesatuan sendiri dan memainkan peran tertentu—masing-masing merupakan
|
||||||
blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.</p>
|
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>
|
<dt><b>Aktivitas</b></dt>
|
||||||
|
|
||||||
<dd>Sebuah <i>aktivitas</i> mewakili satu layar dengan antarmuka pengguna. Misalnya,
|
<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
|
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,
|
semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email,
|
||||||
masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai
|
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
|
<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
|
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
|
pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa
|
||||||
memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai
|
memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai
|
||||||
layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya.
|
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
|
<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
|
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
|
memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia
|
||||||
konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi
|
konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi
|
||||||
dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link
|
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}
|
<p>Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider}
|
||||||
dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi
|
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>
|
<a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
|
||||||
</dd>
|
</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
|
komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil
|
||||||
foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi
|
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
|
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
|
<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
|
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
|
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
|
Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik
|
||||||
masuk tunggal (misalnya tidak ada fungsi {@code main()}).</p>
|
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
|
mengaktifkan komponen tertentu atau komponen <em>tipe</em> komponen tertentu—masing-masing intent
|
||||||
bisa eksplisit atau implisit.</p>
|
bisa eksplisit atau implisit.</p>
|
||||||
|
|
||||||
<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau
|
<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
|
"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
|
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 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
|
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>
|
menunjuk ke kontak yang dipilih).</p>
|
||||||
|
|
||||||
<p>Untuk penerima siaran, intent hanya mendefinisikan
|
<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
|
<p>Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan
|
||||||
diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver
|
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
|
transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link
|
||||||
android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia
|
android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia
|
||||||
konten dan komponen yang meminta informasi (demi keamanan).</p>
|
konten dan komponen yang meminta informasi (demi keamanan).</p>
|
||||||
|
|
||||||
<p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p>
|
<p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p>
|
||||||
<ul>
|
<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
|
meneruskan {@link android.content.Intent} ke {@link android.content.Context#startActivity
|
||||||
startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()}
|
startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()}
|
||||||
(bila Anda ingin aktivitas mengembalikan hasil).</li>
|
(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
|
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
|
startService()}. Atau Anda bisa mengikat ke layanan dengan meneruskan {@link android.content.Intent} ke
|
||||||
{@link android.content.Context#bindService bindService()}.</li>
|
{@link android.content.Context#bindService bindService()}.</li>
|
||||||
@@ -237,7 +237,7 @@ android.content.ContentProvider#query query()} pada {@link android.content.Conte
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
|
<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
|
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>
|
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>
|
<h2 id="Manifest">File Manifes</h2>
|
||||||
|
|
||||||
<p>Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui
|
<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
|
"manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar
|
||||||
dari direktori proyek aplikasi.</p>
|
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>
|
minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.</li>
|
||||||
<li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera,
|
<li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera,
|
||||||
layanan Bluetooth, atau layar multisentuh.</li>
|
layanan Bluetooth, atau layar multisentuh.</li>
|
||||||
<li>Pustaka API aplikasi perlu ditautkan (selain
|
<li>Pustaka API aplikasi perlu ditautkan (selain
|
||||||
API kerangka kerja Android), seperti pustaka
|
API kerangka kerja Android), seperti pustaka
|
||||||
<a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li>
|
<a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li>
|
||||||
<li>Dan lainnya</li>
|
<li>Dan lainnya</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -287,7 +287,7 @@ href="{@docRoot}guide/topics/manifest/application-element.html"><application&
|
|||||||
aplikasi.</p>
|
aplikasi.</p>
|
||||||
|
|
||||||
<p>Dalam elemen <code><a
|
<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
|
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
|
android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan
|
||||||
digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.</p>
|
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
|
<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,
|
dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan. Akan tetapi,
|
||||||
penerima siaran
|
penerima siaran
|
||||||
bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek
|
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.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil
|
||||||
{@link android.content.Context#registerReceiver registerReceiver()}.</p>
|
{@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>
|
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>
|
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)
|
<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>
|
<pre>
|
||||||
<manifest ... >
|
<manifest ... >
|
||||||
@@ -390,10 +390,10 @@ penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p>
|
|||||||
</manifest>
|
</manifest>
|
||||||
</pre>
|
</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>
|
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>
|
<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
|
ke {@code "false"} dan memeriksa saat runtime apakah
|
||||||
perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.</p>
|
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
|
mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi
|
||||||
untuk digunakan oleh aplikasi lain.</dd>
|
untuk digunakan oleh aplikasi lain.</dd>
|
||||||
<dt><a href="{@docRoot}guide/components/activities.html">Aktivitas</a></dt>
|
<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>
|
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>
|
<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
|
<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.
|
konfigurasi perangkat tertentu.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -468,11 +468,11 @@ konfigurasi perangkat tertentu.
|
|||||||
<h2 class="norule">Anda juga mungkin tertarik dengan:</h2>
|
<h2 class="norule">Anda juga mungkin tertarik dengan:</h2>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a></dt>
|
<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
|
pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk
|
||||||
perangkat berbeda.</dd>
|
perangkat berbeda.</dd>
|
||||||
<dt><a href="{@docRoot}guide/topics/security/permissions.html">Izin Sistem</a></dt>
|
<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>
|
yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
page.title=Komponen Aplikasi
|
page.title=Komponen Aplikasi
|
||||||
page.landing=true
|
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.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.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.landing.image=images/develop/app_components.png
|
||||||
page.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">
|
<div class="col-6">
|
||||||
<h3>Artikel Blog</h3>
|
<h3>Artikel Blog</h3>
|
||||||
|
|
||||||
<a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
|
<a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
|
||||||
<h4>Menggunakan DialogFragments</h4>
|
<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>
|
<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>
|
<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>
|
<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>
|
||||||
|
|
||||||
<a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
|
<a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
|
||||||
<h4>Multithreading untuk Kinerja</h4>
|
<h4>Multithreading untuk Kinerja</h4>
|
||||||
<p>Praktik yang baik dalam membuat aplikasi yang responsif adalah memastikan thread UI utama Anda
|
<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">
|
<div class="col-6">
|
||||||
<h3>Pelatihan</h3>
|
<h3>Pelatihan</h3>
|
||||||
|
|
||||||
<a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
|
<a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
|
||||||
<h4>Mengelola Daur Hidup Aktivitas</h4>
|
<h4>Mengelola Daur Hidup Aktivitas</h4>
|
||||||
<p>Bagian ini menjelaskan pentingnya metode callback daur hidup yang diterima setiap instance Aktivitas
|
<p>Bagian ini menjelaskan pentingnya metode callback daur hidup yang diterima setiap instance Aktivitas
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ parent.link=activities.html
|
|||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>Kelas-kelas utama</h2>
|
<h2>Kelas-kelas utama</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li>{@link android.app.LoaderManager}</li>
|
<li>{@link android.app.LoaderManager}</li>
|
||||||
<li>{@link android.content.Loader}</li>
|
<li>{@link android.content.Loader}</li>
|
||||||
|
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>Contoh-contoh terkait</h2>
|
<h2>Contoh-contoh terkait</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">
|
<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
|
dibuat kembali setelah perubahan konfigurasi. Karena itu, loader tidak perlu melakukan query ulang
|
||||||
datanya.</li>
|
datanya.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2 id="summary">Rangkuman Loader API</h2>
|
<h2 id="summary">Rangkuman Loader API</h2>
|
||||||
|
|
||||||
<p>Ada beberapa kelas dan antarmuka yang mungkin dilibatkan dalam menggunakan
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.app.LoaderManager}</td>
|
<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
|
{@link android.app.Fragment} untuk mengelola satu atau beberapa instance {@link
|
||||||
android.content.Loader}. Ini membantu aplikasi mengelola
|
android.content.Loader}. Ini membantu aplikasi mengelola
|
||||||
operasi berjalan lebih lama bersamaan dengan daur hidup {@link android.app.Activity}
|
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
|
{@link android.content.CursorLoader}, akan tetapi aplikasi bebas menulis loader-nya
|
||||||
sendiri untuk memuat tipe data lainnya.
|
sendiri untuk memuat tipe data lainnya.
|
||||||
<br />
|
<br />
|
||||||
@@ -97,7 +97,7 @@ baru bila konten berubah. </td>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.content.CursorLoader}</td>
|
<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
|
{@link android.content.ContentResolver} dan mengembalikan {@link
|
||||||
android.database.Cursor}. Kelas ini mengimplementasikan protokol {@link
|
android.database.Cursor}. Kelas ini mengimplementasikan protokol {@link
|
||||||
android.content.Loader} dengan cara standar untuk query kursor,
|
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>{@link android.app.Activity} atau {@link android.app.Fragment}.</li>
|
||||||
<li>Instance {@link android.app.LoaderManager}.</li>
|
<li>Instance {@link android.app.LoaderManager}.</li>
|
||||||
<li>{@link android.content.CursorLoader} akan memuat data yang didukung oleh {@link
|
<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
|
dari {@link android.content.Loader} atau {@link android.content.AsyncTaskLoader} untuk
|
||||||
memuat data dari beberapa sumber lain.</li>
|
memuat data dari beberapa sumber lain.</li>
|
||||||
<li>Implementasi untuk {@link android.app.LoaderManager.LoaderCallbacks}.
|
<li>Implementasi untuk {@link android.app.LoaderManager.LoaderCallbacks}.
|
||||||
Di sinilah Anda membuat loader baru dan mengelola acuan bagi loader
|
Di sinilah Anda membuat loader baru dan mengelola acuan bagi loader
|
||||||
yang ada.</li>
|
yang ada.</li>
|
||||||
<li>Cara menampilkan data loader, seperti {@link
|
<li>Cara menampilkan data loader, seperti {@link
|
||||||
android.widget.SimpleCursorAdapter}.</li>
|
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>
|
{@link android.content.CursorLoader}.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3 id="starting">Memulai Loader</h3>
|
<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
|
<p>{@link android.app.LoaderManager} mengelola satu atau beberapa instance {@link
|
||||||
android.content.Loader} dalam {@link android.app.Activity} atau
|
android.content.Loader} dalam {@link android.app.Activity} atau
|
||||||
{@link android.app.Fragment}. Hanya ada satu {@link
|
{@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
|
<p>Anda biasanya
|
||||||
memulai {@link android.content.Loader} dalam metode {@link
|
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
|
{@link android.app.Fragment#onActivityCreated onActivityCreated()} fragmen. Anda
|
||||||
melakukannya dengan cara berikut ini:</p>
|
melakukannya dengan cara berikut ini:</p>
|
||||||
|
|
||||||
@@ -157,13 +157,13 @@ parameter berikut:</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<li>ID unik yang mengidentifikasi loader. Dalam contoh ini, ID-nya adalah 0.</li>
|
<li>ID unik yang mengidentifikasi loader. Dalam contoh ini, ID-nya adalah 0.</li>
|
||||||
<li>Argumen opsional untuk dipasok ke loader
|
<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
|
<li>Implementasi {@link android.app.LoaderManager.LoaderCallbacks}, yang
|
||||||
akan dipanggil {@link android.app.LoaderManager} untuk melaporkan kejadian loader. Dalam contoh
|
akan dipanggil {@link android.app.LoaderManager} untuk melaporkan kejadian loader. Dalam contoh
|
||||||
ini, kelas lokal mengimplementasikan antarmuka {@link
|
ini, kelas lokal mengimplementasikan antarmuka {@link
|
||||||
android.app.LoaderManager.LoaderCallbacks}, sehingga meneruskan acuan
|
android.app.LoaderManager.LoaderCallbacks}, sehingga meneruskan acuan
|
||||||
ke dirinya sendiri, {@code this}.</li>
|
ke dirinya sendiri, {@code this}.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Panggilan {@link android.app.LoaderManager#initLoader initLoader()} memastikan bahwa loader
|
<p>Panggilan {@link android.app.LoaderManager#initLoader initLoader()} memastikan bahwa loader
|
||||||
telah dimulai dan aktif. Ia memiliki dua kemungkinan hasil:</p>
|
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
|
memulai dan menghentikan pemuatan jika perlu, dan menjaga status loader
|
||||||
dan konten terkaitnya. Seperti yang tersirat di sini, Anda akan jarang berinteraksi dengan 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
|
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
|
Anda paling sering akan menggunakan metode {@link
|
||||||
android.app.LoaderManager.LoaderCallbacks} untuk mengintervensi proses
|
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>
|
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.
|
— Dipanggil bila loader yang dibuat sebelumnya selesai dimuat.
|
||||||
</li></ul>
|
</li></ul>
|
||||||
<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
|
— Dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
|
||||||
tidak tersedia.
|
tidak tersedia.
|
||||||
</li>
|
</li>
|
||||||
@@ -322,7 +322,7 @@ data tersebut karena loader memilikinya dan akan menanganinya.</p>
|
|||||||
<p>Loader akan melepas data setelah mengetahui bahwa aplikasi tidak
|
<p>Loader akan melepas data setelah mengetahui bahwa aplikasi tidak
|
||||||
lagi menggunakannya. Misalnya, jika data adalah kursor dari {@link
|
lagi menggunakannya. Misalnya, jika data adalah kursor dari {@link
|
||||||
android.content.CursorLoader}, Anda tidak boleh memanggil {@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
|
dalam {@link android.widget.CursorAdapter}, Anda harus menggunakan metode {@link
|
||||||
android.widget.SimpleCursorAdapter#swapCursor swapCursor()} agar
|
android.widget.SimpleCursorAdapter#swapCursor swapCursor()} agar
|
||||||
{@link android.database.Cursor} lama tidak ditutup. Misalnya:</p>
|
{@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
|
<p>Metode ini dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
|
||||||
tidak tersedia. Callback ini memungkinkan Anda mengetahui
|
tidak tersedia. Callback ini memungkinkan Anda mengetahui
|
||||||
kapan data akan dilepas sehingga dapat menghapus acuannya ke callback. </p>
|
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()}
|
{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}
|
||||||
dengan nilai <code>null</code>:</p>
|
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
|
android.app.Fragment} yang menampilkan {@link android.widget.ListView} berisi
|
||||||
hasil query terhadap penyedia konten kontak. Ia menggunakan {@link
|
hasil query terhadap penyedia konten kontak. Ia menggunakan {@link
|
||||||
android.content.CursorLoader} untuk mengelola query pada penyedia.</p>
|
android.content.CursorLoader} untuk mengelola query pada penyedia.</p>
|
||||||
|
|
||||||
<p>Agar aplikasi dapat mengakses kontak pengguna, seperti yang ditampilkan dalam contoh ini,
|
<p>Agar aplikasi dapat mengakses kontak pengguna, seperti yang ditampilkan dalam contoh ini,
|
||||||
manifesnya harus menyertakan izin
|
manifesnya harus menyertakan izin
|
||||||
{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p>
|
{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p>
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ page.tags=daur hidup,latar belakang
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang
|
<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
|
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
|
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
|
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
|
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
|
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
|
mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk
|
||||||
setiap proses.</p>
|
setiap proses.</p>
|
||||||
|
|
||||||
<p>Dokumen ini membahas cara kerja proses dan thread di aplikasi Android.</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>
|
<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
|
aplikasi tidak boleh mengubah ini. Akan tetapi, jika Anda merasa perlu mengontrol proses milik
|
||||||
komponen tertentu, Anda dapat melakukannya dalam file manifes.</p>
|
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
|
<activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
|
||||||
<service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-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
|
<receiver>}</a>, dan <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
|
||||||
<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan
|
<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan
|
||||||
dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen
|
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
|
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
|
{@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>
|
dengan sertifikat yang sama.</p>
|
||||||
|
|
||||||
<p>Elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
|
<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>
|
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
|
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>
|
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
|
<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
|
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
|
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>
|
yang digunakan untuk menentukan proses yang akan dihentikan dibahas di bawah ini. </p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="Lifecycle">Daur hidup proses</h3>
|
<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
|
pada akhirnya perlu menghapus proses lama untuk mengambil kembali memori bagi proses baru atau yang lebih penting. Untuk
|
||||||
menentukan proses yang akan
|
menentukan proses yang akan
|
||||||
dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan
|
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
|
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
|
prioritas terendah akan dimatikan terlebih dahulu, kemudian yang terendah berikutnya, dan seterusnya, jika perlu
|
||||||
untuk memulihkan sumber daya sistem.</p>
|
untuk memulihkan sumber daya sistem.</p>
|
||||||
|
|
||||||
<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa
|
<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa
|
||||||
tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan
|
tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan
|
||||||
<em>dimatikan terakhir</em>):</p>
|
<em>dimatikan terakhir</em>):</p>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><b>Proses latar depan</b>
|
<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>
|
dianggap berada di latar depan jika salah satu kondisi berikut terpenuhi:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Proses menjadi host {@link android.app.Activity} yang berinteraksi dengan pengguna dengan metode ({@link
|
<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>
|
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>
|
pengguna.</li>
|
||||||
|
|
||||||
<li>Proses menjadi host {@link android.app.Service} yang berjalan "di latar depan"—
|
<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>
|
android.content.BroadcastReceiver#onReceive onReceive()}-nya.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai
|
<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
|
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
|
titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan
|
||||||
diperlukan agar antarmuka pengguna tetap responsif.</p></li>
|
diperlukan agar antarmuka pengguna tetap responsif.</p></li>
|
||||||
|
|
||||||
<li><b>Proses yang terlihat</b>
|
<li><b>Proses yang terlihat</b>
|
||||||
<p>Proses yang tidak memiliki komponen latar depan, namun masih bisa
|
<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
|
memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi
|
||||||
berikut terpenuhi:</p>
|
berikut terpenuhi:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Proses ini menjadi host {@link android.app.Activity} yang tidak berada di latar depan, namun masih
|
<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).
|
terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil).
|
||||||
Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga
|
Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga
|
||||||
aktivitas sebelumnya terlihat berada di belakangnya.</li>
|
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>
|
depan)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -134,53 +134,53 @@ diperlukan agar semua proses latar depan tetap berjalan. </p>
|
|||||||
|
|
||||||
<li><b>Proses layanan</b>
|
<li><b>Proses layanan</b>
|
||||||
<p>Proses yang menjalankan layanan yang telah dimulai dengan metode {@link
|
<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
|
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
|
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
|
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
|
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>
|
mempertahankannya bersama semua proses latar depan dan proses yang terlihat. </p>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><b>Proses latar belakang</b>
|
<li><b>Proses latar belakang</b>
|
||||||
<p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode
|
<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
|
{@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
|
langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi
|
||||||
proses latar depan, proses yang terlihat,
|
proses latar depan, proses yang terlihat,
|
||||||
atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan
|
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
|
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
|
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
|
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
|
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>
|
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>
|
untuk mendapatkan informasi tentang menyimpan dan memulihkan status.</p>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><b>Proses kosong</b>
|
<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
|
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>
|
daya sistem secara keseluruhan antara proses cache dan cache kernel yang mendasarinya.</p>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
<p>Android sebisa mungkin memeringkat proses setinggi
|
<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>
|
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
|
<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
|
—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
|
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
|
jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah
|
||||||
prioritasnya dibandingkan dengan proses B.</p>
|
prioritasnya dibandingkan dengan proses B.</p>
|
||||||
|
|
||||||
<p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang,
|
<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
|
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.
|
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.
|
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",
|
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
|
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>
|
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>
|
<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
|
"main". Thread ini sangat penting karena bertugas mengirim kejadian ke widget
|
||||||
antarmuka pengguna yang sesuai, termasuk kejadian menggambar. Ini juga merupakan thread yang
|
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
|
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>
|
disebut thread UI.</p>
|
||||||
|
|
||||||
<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua
|
<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
|
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
|
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)
|
(seperti {@link android.view.View#onKeyDown onKeyDown()} untuk melaporkan tindakan pengguna atau metode callback daur hidup)
|
||||||
selalu berjalan di thread UI proses.</p>
|
selalu berjalan di thread UI proses.</p>
|
||||||
|
|
||||||
<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian
|
<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
|
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
|
antrean kejadian. Thread UI akan menghapus antrean permintaan dan memberi tahu widget bahwa widget harus menggambar
|
||||||
dirinya sendiri.</p>
|
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
|
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
|
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,
|
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
|
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
|
(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>
|
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 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>
|
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>
|
<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
|
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
|
yang tidak seketika, Anda harus memastikan untuk melakukannya di thread terpisah (thread "latar belakang" atau
|
||||||
thread "pekerja").</p>
|
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>
|
thread terpisah dan menampilkannya dalam {@link android.widget.ImageView}:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -246,13 +246,13 @@ public void onClick(View v) {
|
|||||||
}
|
}
|
||||||
</pre>
|
</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
|
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
|
toolkit Android UI dari luar thread UI</em>—sampel ini memodifikasi {@link
|
||||||
android.widget.ImageView} dari thread pekerja sebagai ganti thread UI. Ini bisa
|
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>
|
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>
|
thread lainnya. Berikut ini daftar metode yang bisa membantu:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@@ -284,10 +284,10 @@ public void onClick(View v) {
|
|||||||
<p>Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread
|
<p>Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread
|
||||||
sementara {@link android.widget.ImageView} dimanipulasi dari thread UI.</p>
|
sementara {@link android.widget.ImageView} dimanipulasi dari thread UI.</p>
|
||||||
|
|
||||||
<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit
|
<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
|
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
|
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>
|
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>
|
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
|
<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
|
thread latar belakang. Untuk memperbarui UI, Anda harus mengimplementasikan {@link
|
||||||
android.os.AsyncTask#onPostExecute onPostExecute()}, yang memberikan hasil dari {@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()}
|
memperbarui UI dengan aman. Selanjutnya Anda bisa menjalankan tugas dengan memanggil {@link android.os.AsyncTask#execute execute()}
|
||||||
dari thread UI.</p>
|
dari thread UI.</p>
|
||||||
|
|
||||||
@@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
|
|||||||
protected Bitmap doInBackground(String... urls) {
|
protected Bitmap doInBackground(String... urls) {
|
||||||
return loadImageFromNetwork(urls[0]);
|
return loadImageFromNetwork(urls[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The system calls this to perform work in the UI thread and delivers
|
/** The system calls this to perform work in the UI thread and delivers
|
||||||
* the result from doInBackground() */
|
* the result from doInBackground() */
|
||||||
protected void onPostExecute(Bitmap result) {
|
protected void onPostExecute(Bitmap result) {
|
||||||
@@ -328,16 +328,16 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
|
|||||||
}
|
}
|
||||||
</pre>
|
</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>
|
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>
|
cara menggunakan kelas ini, namun berikut ini ikhtisar singkat cara kerjanya:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai
|
<li>Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai
|
||||||
akhir tugas, dengan menggunakan generik</li>
|
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>
|
thread pekerja</li>
|
||||||
<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
|
<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
|
||||||
android.os.AsyncTask#onPostExecute onPostExecute()}, dan {@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
|
<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>
|
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
|
(seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk
|
||||||
melihat cara mempertahankan tugas selama restart ini dan cara membatalkan
|
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>
|
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>
|
<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>
|
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
|
<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
|
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.
|
{@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
|
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
|
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
|
IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode
|
||||||
{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI
|
{@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
|
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
|
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
|
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
|
android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert
|
||||||
insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
|
insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
|
||||||
android.content.ContentProvider#update update()}, dan {@link android.content.ContentProvider#getType
|
android.content.ContentProvider#update update()}, dan {@link android.content.ContentProvider#getType
|
||||||
getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI
|
getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI
|
||||||
untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun
|
untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun
|
||||||
sekaligus, metode-metode ini juga harus diimplementasikan sebagai thread-safe. </p>
|
sekaligus, metode-metode ini juga harus diimplementasikan sebagai thread-safe. </p>
|
||||||
|
|
||||||
|
|
||||||
<h2 id="IPC">Komunikasi Antarproses</h2>
|
<h2 id="IPC">Komunikasi Antarproses</h2>
|
||||||
|
|
||||||
<p>Android menawarkan mekanisme komunikasi antarproses (IPC) menggunakan panggilan prosedur jauh
|
<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
|
jauh (di proses lain), bersama hasil yang dikembalikan ke
|
||||||
pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa
|
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
|
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
|
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
|
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>
|
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>
|
<h2 id="adding">Menambahkan Tugas ke Layar Ikhtisar</h2>
|
||||||
|
|
||||||
<p>Penggunaan flag kelas {@link android.content.Intent} untuk menambahkan tugas memberi kontrol lebih besar
|
<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>
|
<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>
|
yang ada untuk dokumen tersebut.</p>
|
||||||
|
|
||||||
<h3 id="flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</h3>
|
<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()}
|
{@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
|
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}
|
dalam metode {@link android.content.Intent#addFlags(int) addFlags()} dari {@link android.content.Intent}
|
||||||
yang memulai aktivitas itu.</p>
|
yang memulai aktivitas itu.</p>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong> Flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
<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>
|
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
|
<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>
|
<dt>"{@code none”}"</dt>
|
||||||
<dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Layar ikhtisar memperlakukan
|
<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>
|
dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
|
||||||
|
|
||||||
<dt>"{@code never}"</dt>
|
<dt>"{@code never}"</dt>
|
||||||
<dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Mengatur nilai ini akan mengesampingkan
|
<dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Mengatur nilai ini akan mengesampingkan
|
||||||
perilaku flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
|
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
|
intent, dan layar ikhtisar menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari
|
||||||
aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
|
aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
|
||||||
</dl>
|
</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
|
aktivitas harus didefinisikan dengan {@code launchMode="standard"}. Jika atribut ini tidak ditetapkan, maka
|
||||||
{@code documentLaunchMode="none"} akan digunakan.</p>
|
{@code documentLaunchMode="none"} akan digunakan.</p>
|
||||||
|
|
||||||
@@ -219,8 +219,8 @@ public void onRemoveFromRecents(View view) {
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong> Penggunaan metode
|
<p class="note"><strong>Catatan:</strong> Penggunaan metode
|
||||||
{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
|
{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
|
||||||
akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti
|
akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti
|
||||||
dibahas di bawah ini.</p>
|
dibahas di bawah ini.</p>
|
||||||
|
|
||||||
<h3 id="#retain-finished">Mempertahankan tugas yang telah selesai</h3>
|
<h3 id="#retain-finished">Mempertahankan tugas yang telah selesai</h3>
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ dari komponen aplikasi lain.</p>
|
|||||||
aplikasi Anda.</p>
|
aplikasi Anda.</p>
|
||||||
|
|
||||||
<p>Untuk mendeklarasikan layanan Anda, tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>
|
<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>
|
elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>. Misalnya:</p>
|
||||||
|
|
||||||
<pre>
|
<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>
|
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
|
<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>
|
secepatnya.</p>
|
||||||
|
|
||||||
<p>Akan tetapi, bila layanan Anda menangani beberapa permintaan ke {@link
|
<p>Akan tetapi, bila layanan Anda menangani beberapa permintaan ke {@link
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ parent.link=activities.html
|
|||||||
<ol>
|
<ol>
|
||||||
<li><a href="{@docRoot}design/patterns/navigation.html">Desain Android:
|
<li><a href="{@docRoot}design/patterns/navigation.html">Desain Android:
|
||||||
Navigasi</a></li>
|
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>
|
{@code <activity>}</a></li>
|
||||||
<li><a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a></li>
|
<li><a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a></li>
|
||||||
</ol>
|
</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
|
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>
|
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
|
saat melakukan pekerjaan tertentu. Aktivitas tersebut diatur dalam tumpukan (<em>back-stack</em>), dalam
|
||||||
urutan membuka setiap aktivitas.</p>
|
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,
|
aktivitas saat ini dan dikeluarkan bila pengguna meninggalkannya menggunakan tombol <em>Back</em>. Dengan demikian,
|
||||||
back-stack
|
back-stack
|
||||||
beroperasi sebagai struktur objek "masuk terakhir, keluar pertama". Gambar 1 melukiskan perilaku
|
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>
|
back-stack pada setiap waktu.</p>
|
||||||
|
|
||||||
<img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
|
<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 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
|
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
|
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
|
dibuka (masing-masing
|
||||||
dengan status UI sendiri). Akan tetapi, Anda bisa memodifikasi perilaku ini jika tidak ingin aktivitas
|
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>
|
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>.
|
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
|
Ini berarti bahwa jika aplikasi Anda mengeluarkan
|
||||||
intent untuk membuka Browser Android, aktivitasnya <em>tidak</em> akan ditempatkan dalam tugas
|
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
|
sudah memiliki tugas yang berjalan di latar belakang, tugas tersebut akan dimajukan untuk menangani intent
|
||||||
baru.</p>
|
baru.</p>
|
||||||
|
|
||||||
@@ -387,13 +387,13 @@ adalah:</p>
|
|||||||
<dd>Memulai aktivitas dalam tugas baru. Jika tugas sudah dijalankan untuk aktivitas yang sekarang
|
<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
|
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()}.
|
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>
|
yang dibahas di bagian sebelumnya.</p></dd>
|
||||||
<dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt>
|
<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
|
<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()}
|
instance yang ada akan menerima panggilan ke {@link android.app.Activity#onNewIntent onNewIntent()}
|
||||||
sebagai ganti membuat instance baru aktivitas.
|
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>
|
yang dibahas di bagian sebelumnya.</p></dd>
|
||||||
<dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
|
<dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
|
||||||
<dd>Jika aktivitas yang dimulai sudah berjalan dalam tugas saat ini, maka sebagai
|
<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
|
aplikasi yang berbeda bisa berbagi afinitas, atau aktivitas yang didefinisikan dalam aplikasi yang sama bisa
|
||||||
diberi afinitas tugas yang berbeda.</p>
|
diberi afinitas tugas yang berbeda.</p>
|
||||||
|
|
||||||
<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan
|
<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan
|
||||||
dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
|
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>
|
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>
|
<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}
|
{@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 disebut {@link android.app.Activity#startActivity startActivity()}. Ini didorong ke back-stack
|
||||||
yang sama seperti caller. Akan tetapi, jika intent yang diteruskan ke
|
yang sama seperti caller. Akan tetapi, jika intent yang diteruskan ke
|
||||||
{@link android.app.Activity#startActivity startActivity()}
|
{@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 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.
|
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
|
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>
|
aktivitas laporan cuaca akan ditetapkan kembali ke tugas itu dan ditampilkan di dalamnya.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -497,7 +497,7 @@ apa yang mereka kerjakan sebelum dan kembali ke tugas itu untuk memulai sesuatu
|
|||||||
<dt><code><a
|
<dt><code><a
|
||||||
href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
|
href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
|
||||||
</dt>
|
</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.
|
perilaku default yang baru dijelaskan tidak akan terjadi.
|
||||||
Tugas akan mempertahankan semua aktivitas dalam back-stack bahkan setelah sekian lama.</dd>
|
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>,
|
<dd>Atribut ini seperti <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>,
|
||||||
namun beroperasi pada
|
namun beroperasi pada
|
||||||
satu aktivitas, bukan pada seluruh tugas. Hal ini juga bisa menyebabkan aktivitas
|
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
|
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>
|
keluar dan kemudian kembali ke tugas tersebut, tugas tidak akan ada lagi.</dd>
|
||||||
</dl>
|
</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
|
{@code "singleInstance"}, hanya boleh digunakan bila aktivitas memiliki filter
|
||||||
{@link android.content.Intent#ACTION_MAIN}
|
{@link android.content.Intent#ACTION_MAIN}
|
||||||
dan {@link android.content.Intent#CATEGORY_LAUNCHER}. Bayangkan, misalnya, apa yang akan
|
dan {@link android.content.Intent#CATEGORY_LAUNCHER}. Bayangkan, misalnya, apa yang akan
|
||||||
terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai
|
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
|
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
|
<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>
|
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>
|
<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>
|
<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>
|
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.
|
Setiap aplikasi harus memiliki file AndroidManifest.xml (bernama persis seperti ini) di direktori akar.
|
||||||
<span itemprop="description">File manifes
|
<span itemprop="description">File manifes
|
||||||
menyediakan informasi penting tentang aplikasi ke sistem Android,
|
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:
|
aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -32,26 +32,26 @@ aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini:
|
|||||||
Nama paket berfungsi sebagai identifier unik untuk aplikasi.</li>
|
Nama paket berfungsi sebagai identifier unik untuk aplikasi.</li>
|
||||||
|
|
||||||
<li>Menjelaskan berbagai komponen aplikasi—aktivitas,
|
<li>Menjelaskan berbagai komponen aplikasi—aktivitas,
|
||||||
layanan, penerima siaran, dan penyedia konten
|
layanan, penerima siaran, dan penyedia konten
|
||||||
yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan
|
yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan
|
||||||
mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent
|
mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent
|
||||||
Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai
|
Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai
|
||||||
komponennya dan dalam kondisi apa bisa diluncurkan.</li>
|
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
|
<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk
|
||||||
mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li>
|
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>
|
untuk berinteraksi dengan komponen aplikasi.</li>
|
||||||
|
|
||||||
<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan
|
<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan
|
||||||
profil dan informasi lain saat aplikasi berjalan. Deklarasi ini
|
profil dan informasi lain saat aplikasi berjalan. Deklarasi ini
|
||||||
hanya ada di manifes saat aplikasi dibuat dan diuji;
|
hanya ada di manifes saat aplikasi dibuat dan diuji;
|
||||||
deklarasi dihapus sebelum aplikasi dipublikasikan.</li>
|
deklarasi dihapus sebelum aplikasi dipublikasikan.</li>
|
||||||
|
|
||||||
<li>Mendeklarasikan tingkat minimum API Android yang diperlukan
|
<li>Mendeklarasikan tingkat minimum API Android yang diperlukan
|
||||||
aplikasi.</li>
|
aplikasi.</li>
|
||||||
|
|
||||||
<li>Mencantumkan daftar pustaka yang harus ditautkan aplikasi.</li>
|
<li>Mencantumkan daftar pustaka yang harus ditautkan aplikasi.</li>
|
||||||
@@ -61,12 +61,12 @@ aplikasi.</li>
|
|||||||
<h2 id="filestruct">Struktur File Manifes</h2>
|
<h2 id="filestruct">Struktur File Manifes</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Diagram di bawah ini menampilkan struktur umum file manifes dan setiap
|
Diagram di bawah ini menampilkan struktur umum file manifes dan setiap
|
||||||
elemen yang bisa ditampungnya. Setiap elemen, bersama
|
elemen yang bisa ditampungnya. Setiap elemen, bersama
|
||||||
atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat
|
atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat
|
||||||
informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram,
|
informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram,
|
||||||
dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama
|
dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama
|
||||||
elemen lainnya.
|
elemen lainnya.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -126,9 +126,9 @@ elemen lainnya.
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini
|
Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini
|
||||||
dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa
|
dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa
|
||||||
menambahkan elemen atau atribut sendiri.
|
menambahkan elemen atau atribut sendiri.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p style="margin-left: 2em">
|
<p style="margin-left: 2em">
|
||||||
@@ -158,74 +158,74 @@ menambahkan elemen atau atribut sendiri.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2 id="filec">Konvensi File</h2>
|
<h2 id="filec">Konvensi File</h2>
|
||||||
|
|
||||||
<p>
|
<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:
|
dan atribut di manifes:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><b>Elemen</b></dt>
|
<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/manifest-element.html"><manifest></a></code> dan
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||||
yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali.
|
yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali.
|
||||||
Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun
|
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
|
setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang
|
||||||
berarti.
|
berarti.
|
||||||
|
|
||||||
<p>
|
<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.
|
Semua nilai diatur melalui atribut, bukan sebagai data karakter dalam elemen.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, 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/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/provider-element.html"><provider></a></code>, dan
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
||||||
bisa dicampur dalam urutan apa pun. (Elemen
|
bisa dicampur dalam urutan apa pun. (Elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
|
||||||
merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti
|
merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||||
ini aliasnya.)
|
ini aliasnya.)
|
||||||
</p></dd>
|
</p></dd>
|
||||||
|
|
||||||
<dt><b>Atribut</b></dt>
|
<dt><b>Atribut</b></dt>
|
||||||
<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian
|
<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian
|
||||||
yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan
|
yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan
|
||||||
dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan
|
dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan
|
||||||
nilai default atau menyatakan apa yang terjadi jika tidak ada spesifikasi.
|
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>,
|
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>,
|
||||||
semua nama atribut dimulai dengan awalan {@code android:} —
|
semua nama atribut dimulai dengan awalan {@code android:} —
|
||||||
misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut
|
misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut
|
||||||
dengan nama.
|
dengan nama.
|
||||||
</p></dd>
|
</p></dd>
|
||||||
|
|
||||||
<dt><b>Mendeklarasikan nama kelas</b></dt>
|
<dt><b>Mendeklarasikan nama kelas</b></dt>
|
||||||
<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen
|
<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen
|
||||||
aplikasi itu sendiri (elemen
|
aplikasi itu sendiri (elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||||
) dan aktivitas komponen — utamanya
|
) dan aktivitas komponen — utamanya
|
||||||
(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
|
(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
|
||||||
layanan
|
layanan
|
||||||
(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
|
(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
|
||||||
penerima siaran
|
penerima siaran
|
||||||
(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>),
|
(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>),
|
||||||
dan penyedia konten
|
dan penyedia konten
|
||||||
(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>).
|
(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>).
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen
|
Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen
|
||||||
({@link android.app.Activity}, {@link android.app.Service},
|
({@link android.app.Activity}, {@link android.app.Service},
|
||||||
{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}),
|
{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}),
|
||||||
subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan
|
subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan
|
||||||
paket lengkap.
|
paket lengkap.
|
||||||
Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai berikut:
|
Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai berikut:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -239,12 +239,12 @@ Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai be
|
|||||||
</manifest></pre>
|
</manifest></pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik,
|
Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik,
|
||||||
string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen
|
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>
|
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||||
melalui atribut
|
melalui atribut
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code>
|
<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>
|
</p>
|
||||||
|
|
||||||
<pre><manifest package="com.example.project" . . . >
|
<pre><manifest package="com.example.project" . . . >
|
||||||
@@ -257,13 +257,13 @@ string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam el
|
|||||||
</manifest></pre>
|
</manifest></pre>
|
||||||
|
|
||||||
<p>
|
<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.
|
Jika subkelas tidak ditetapkan, maka akak dibuat instance kelas dasar.
|
||||||
</p></dd>
|
</p></dd>
|
||||||
|
|
||||||
<dt><b>Banyak nilai</b></dt>
|
<dt><b>Banyak nilai</b></dt>
|
||||||
<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu
|
<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu
|
||||||
diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen.
|
diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen.
|
||||||
Misalnya, filter intent dapat mencantumkan beberapa tindakan:
|
Misalnya, filter intent dapat mencantumkan beberapa tindakan:
|
||||||
|
|
||||||
<pre><intent-filter . . . >
|
<pre><intent-filter . . . >
|
||||||
@@ -275,23 +275,23 @@ Misalnya, filter intent dapat mencantumkan beberapa tindakan:
|
|||||||
|
|
||||||
<dt><b>Nilai sumber daya</b></dt>
|
<dt><b>Nilai sumber daya</b></dt>
|
||||||
<dd>Beberapa atribut memiliki nilai yang bisa ditampilkan kepada pengguna — misalnya
|
<dd>Beberapa atribut memiliki nilai yang bisa ditampilkan kepada pengguna — misalnya
|
||||||
, label dan ikon aktivitas. Nilai atribut ini
|
, label dan ikon aktivitas. Nilai atribut ini
|
||||||
harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber
|
harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber
|
||||||
daya dinyatakan dalam format berikut,</p>
|
daya dinyatakan dalam format berikut,</p>
|
||||||
|
|
||||||
<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p>
|
<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan
|
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
|
dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau
|
||||||
"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu.
|
"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu.
|
||||||
Misalnya:
|
Misalnya:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre><activity android:icon="@drawable/smallPic" . . . ></pre>
|
<pre><activity android:icon="@drawable/smallPic" . . . ></pre>
|
||||||
|
|
||||||
<p>
|
<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 @}':
|
dan bukan '{@code @}':
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -299,8 +299,8 @@ dan bukan '{@code @}':
|
|||||||
</p></dd>
|
</p></dd>
|
||||||
|
|
||||||
<dt><b>Nilai-nilai string</b></dt>
|
<dt><b>Nilai-nilai string</b></dt>
|
||||||
<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}')
|
<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}')
|
||||||
harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk
|
harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk
|
||||||
baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
|
baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
@@ -308,7 +308,7 @@ baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
|
|||||||
<h2 id="filef">Fitur File</h2>
|
<h2 id="filef">Fitur File</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Bagian berikut menjelaskan cara menerapkan sebagian fitur Android
|
Bagian berikut menjelaskan cara menerapkan sebagian fitur Android
|
||||||
dalam file manifest.
|
dalam file manifest.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -316,37 +316,37 @@ dalam file manifest.
|
|||||||
<h3 id="ifs">Filter Intent</h3>
|
<h3 id="ifs">Filter Intent</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima
|
Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima
|
||||||
siaran) diaktifkan oleh <i>intent</i>. Intent adalah
|
siaran) diaktifkan oleh <i>intent</i>. Intent adalah
|
||||||
sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan
|
sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan
|
||||||
tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori
|
tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori
|
||||||
komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya.
|
komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya.
|
||||||
Android mencari komponen yang sesuai untuk merespons intent, meluncurkan
|
Android mencari komponen yang sesuai untuk merespons intent, meluncurkan
|
||||||
instance komponen baru jika diperlukan, dan meneruskannya ke
|
instance komponen baru jika diperlukan, dan meneruskannya ke
|
||||||
objek Intent.
|
objek Intent.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya
|
Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya
|
||||||
— melalui <i>filter intent</i>. Karena sistem Android
|
— melalui <i>filter intent</i>. Karena sistem Android
|
||||||
harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen,
|
harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen,
|
||||||
filter intent ditetapkan dalam manifes sebagai elemen
|
filter intent ditetapkan dalam manifes sebagai elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
<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.
|
kemampuan yang berbeda.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Intent yang secara eksplisit menamai komponen target akan mengaktifkan komponen itu;
|
Intent yang secara eksplisit menamai komponen target akan mengaktifkan komponen itu;
|
||||||
filter tidak berperan. Namun intent yang tidak menetapkan target
|
filter tidak berperan. Namun intent yang tidak menetapkan target
|
||||||
dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter
|
dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter
|
||||||
komponen.
|
komponen.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Untuk informasi tentang cara objek Intent diuji terhadap filter intent,
|
Untuk informasi tentang cara objek Intent diuji terhadap filter intent,
|
||||||
lihat dokumen terpisah,
|
lihat dokumen terpisah,
|
||||||
<a href="{@docRoot}guide/components/intents-filters.html">Intent
|
<a href="{@docRoot}guide/components/intents-filters.html">Intent
|
||||||
dan Filter Intent</a>.
|
dan Filter Intent</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -354,42 +354,42 @@ dan Filter Intent</a>.
|
|||||||
<h3 id="iconlabel">Ikon dan Label</h3>
|
<h3 id="iconlabel">Ikon dan Label</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk
|
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
|
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
|
{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa
|
||||||
ditampilkan pada layar. Misalnya, elemen
|
ditampilkan pada layar. Misalnya, elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||||
memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan
|
memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan
|
||||||
memberi izin bagi aplikasi yang memintanya, ikon yang mewakili
|
memberi izin bagi aplikasi yang memintanya, ikon yang mewakili
|
||||||
izin, nama izin, dan keterangan yang
|
izin, nama izin, dan keterangan yang
|
||||||
mengikutinya bisa ditampilkan kepada pengguna.
|
mengikutinya bisa ditampilkan kepada pengguna.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi
|
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.
|
{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini.
|
||||||
Karena itu, ikon dan label yang ditetapkan dalam elemen
|
Karena itu, ikon dan label yang ditetapkan dalam elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||||
adalah ikon dan label default untuk setiap komponen aplikasi.
|
adalah ikon dan label default untuk setiap komponen aplikasi.
|
||||||
Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen
|
Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||||
— adalah pengaturan default untuk setiap elemen komponen
|
— adalah pengaturan default untuk setiap elemen komponen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||||
. Jika elemen
|
. Jika elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
<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,
|
menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label,
|
||||||
maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan
|
maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan
|
||||||
filter intent.
|
filter intent.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen
|
Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen
|
||||||
kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang
|
kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang
|
||||||
diiklankan oleh filter. Misalnya, filter dengan pengaturan
|
diiklankan oleh filter. Misalnya, filter dengan pengaturan
|
||||||
"{@code android.intent.action.MAIN}" dan
|
"{@code android.intent.action.MAIN}" dan
|
||||||
"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas
|
"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas
|
||||||
sebagai aktivitas yang memulai aplikasi—, yaitu
|
sebagai aktivitas yang memulai aplikasi—, yaitu
|
||||||
sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang
|
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.
|
diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launcher.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -397,14 +397,14 @@ diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launc
|
|||||||
<h3 id="perms">Izin</h3>
|
<h3 id="perms">Izin</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian
|
Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian
|
||||||
kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode
|
kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode
|
||||||
penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna.
|
penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan
|
Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan
|
||||||
tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan
|
tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan
|
||||||
oleh Android:
|
oleh Android:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -418,25 +418,25 @@ Sebuah fitur bisa dilindungi paling banyak oleh satu izin.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin,
|
Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin,
|
||||||
aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen
|
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>
|
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||||
dalam manifes. Kemudian, bila aplikasi telah diinstal pada
|
dalam manifes. Kemudian, bila aplikasi telah diinstal pada
|
||||||
perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak
|
perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak
|
||||||
dengan memeriksa otoritas yang menandatangani
|
dengan memeriksa otoritas yang menandatangani
|
||||||
sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna.
|
sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna.
|
||||||
Jika izin diberikan, aplikasi tersebut bisa menggunakan
|
Jika izin diberikan, aplikasi tersebut bisa menggunakan
|
||||||
fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal
|
fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal
|
||||||
tanpa ada pemberitahuan apa pun kepada pengguna.
|
tanpa ada pemberitahuan apa pun kepada pengguna.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan,
|
Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan,
|
||||||
penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan
|
penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan
|
||||||
izin mana pun yang didefinisikan oleh Android (tercantum dalam
|
izin mana pun yang didefinisikan oleh Android (tercantum dalam
|
||||||
{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan
|
{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan
|
||||||
oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan
|
oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan
|
||||||
dengan elemen
|
dengan elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||||
. Misalnya, aktivitas dapat dilindungi sebagai berikut:
|
. Misalnya, aktivitas dapat dilindungi sebagai berikut:
|
||||||
</p>
|
</p>
|
||||||
@@ -457,43 +457,43 @@ dengan elemen
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya
|
Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya
|
||||||
dideklarasikan dengan elemen
|
dideklarasikan dengan elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
<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>
|
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||||
. Penggunaannya harus diminta agar komponen
|
. Penggunaannya harus diminta agar komponen
|
||||||
aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu
|
aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu
|
||||||
diberlakukan oleh aplikasi itu sendiri.
|
diberlakukan oleh aplikasi itu sendiri.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Dalam contoh yang sama, jika atribut {@code permission} ditetapkan
|
Dalam contoh yang sama, jika atribut {@code permission} ditetapkan
|
||||||
untuk izin yang dideklarasikan di tempat lain
|
untuk izin yang dideklarasikan di tempat lain
|
||||||
lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut
|
lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut
|
||||||
tidak perlu mendeklarasikannya lagi dengan elemen
|
tidak perlu mendeklarasikannya lagi dengan elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||||
. Akan tetapi, penggunaannya masih perlu dengan
|
. Akan tetapi, penggunaannya masih perlu dengan
|
||||||
<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>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Elemen
|
Elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
||||||
mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam
|
mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam
|
||||||
kode. Dan
|
kode. Dan
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
<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
|
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>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||||
dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin
|
dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin
|
||||||
dikelompokkan saat ditampilkan kepada pengguna. Elemen
|
dikelompokkan saat ditampilkan kepada pengguna. Elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
<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
|
elemen hanya memberi nama grup. Izin ditempatkan dalam grup
|
||||||
dengan memberikan nama grup ke elemen
|
dengan memberikan nama grup ke elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||||
melalui atribut
|
melalui atribut
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code>
|
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code>
|
||||||
.
|
.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -501,17 +501,17 @@ dengan memberikan nama grup ke elemen
|
|||||||
<h3 id="libs">Pustaka</h3>
|
<h3 id="libs">Pustaka</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Setiap aplikasi ditautkan dengan pustaka default Android, yang
|
Setiap aplikasi ditautkan dengan pustaka default Android, yang
|
||||||
menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum
|
menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum
|
||||||
seperti Activity, Service, Intent, View, Button, Application, ContentProvider,
|
seperti Activity, Service, Intent, View, Button, Application, ContentProvider,
|
||||||
dan sebagainya).
|
dan sebagainya).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda
|
Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda
|
||||||
menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan
|
menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan
|
||||||
paket tersebut. Manifes harus berisi elemen
|
paket tersebut. Manifes harus berisi elemen
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang
|
<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
|
terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan
|
||||||
dalam dokumentasi paket.)
|
dalam dokumentasi paket.)
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ page.title=Penyedia Kalender
|
|||||||
<li><a href="#intent-view">Menggunakan intent untuk menampilkan data kalender</a></li>
|
<li><a href="#intent-view">Menggunakan intent untuk menampilkan data kalender</a></li>
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="#sync-adapter">Adaptor Sinkronisasi</a></li>
|
<li><a href="#sync-adapter">Adaptor Sinkronisasi</a></li>
|
||||||
</ol>
|
</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
|
<p>API Penyedia Kalender bisa digunakan oleh aplikasi dan adaptor sinkronisasi. Aturannya
|
||||||
bervariasi menurut tipe program yang membuat panggilan. Dokumen ini
|
bervariasi menurut tipe program yang membuat panggilan. Dokumen ini
|
||||||
terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk
|
terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk
|
||||||
pembahasan ragam adaptor sinkronisasi, lihat
|
pembahasan ragam adaptor sinkronisasi, lihat
|
||||||
<a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
|
<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
|
<p>Setiap penyedia konten membuka sebuah URI publik (yang dibungkus sebagai objek
|
||||||
{@link android.net.Uri}
|
{@link android.net.Uri}
|
||||||
) yang mengidentifikasikan set datanya secara unik. Penyedia konten yang mengontrol
|
) 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
|
URI untuk penyedia diawali dengan string "content://". String ini
|
||||||
mengidentifikasi data sebagai dikontrol oleh penyedia konten. Penyedia Kalender
|
mengidentifikasi data sebagai dikontrol oleh penyedia konten. Penyedia Kalender
|
||||||
mendefinisikan konstanta untuk URI masing-masing kelas (tabel). URI ini
|
mendefinisikan konstanta untuk URI masing-masing kelas (tabel). URI ini
|
||||||
@@ -113,26 +113,26 @@ tabel dan bidang utama yang saling berkaitan.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><p>{@link android.provider.CalendarContract.Calendars}</p></td>
|
<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
|
informasi khusus kalender. Tiap baris dalam tabel ini berisi data untuk
|
||||||
satu kalender, seperti nama, warna, informasi sinkronisasi, dan seterusnya.</td>
|
satu kalender, seperti nama, warna, informasi sinkronisasi, dan seterusnya.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Events}</td>
|
<td>{@link android.provider.CalendarContract.Events}</td>
|
||||||
|
|
||||||
<td>Tabel ini menyimpan
|
<td>Tabel ini menyimpan
|
||||||
informasi khusus kejadian. Tiap baris dalam tabel ini berisi informasi untuk satu
|
informasi khusus kejadian. Tiap baris dalam tabel ini berisi informasi untuk satu
|
||||||
kejadian—misalnya, judul kejadian, lokasi, waktu mulai, waktu
|
kejadian—misalnya, judul kejadian, lokasi, waktu mulai, waktu
|
||||||
selesai, dan seterusnya. Kejadian bisa terjadi satu kali atau bisa berulang beberapa kali. Peserta,
|
selesai, dan seterusnya. Kejadian bisa terjadi satu kali atau bisa berulang beberapa kali. Peserta,
|
||||||
pengingat, dan properti perluasan disimpan dalam tabel terpisah.
|
pengingat, dan properti perluasan disimpan dalam tabel terpisah.
|
||||||
Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
|
||||||
yang mengacu {@link android.provider.BaseColumns#_ID} dalam tabel Events.</td>
|
yang mengacu {@link android.provider.BaseColumns#_ID} dalam tabel Events.</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances}</td>
|
<td>{@link android.provider.CalendarContract.Instances}</td>
|
||||||
|
|
||||||
<td>Tabel ini menyimpan
|
<td>Tabel ini menyimpan
|
||||||
waktu mulai dan waktu selesai setiap bentuk kejadian. Tiap baris dalam tabel ini
|
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
|
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>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Attendees}</td>
|
<td>{@link android.provider.CalendarContract.Attendees}</td>
|
||||||
|
|
||||||
<td>Tabel ini menyimpan
|
<td>Tabel ini menyimpan
|
||||||
informasi peserta (tamu) kejadian. Tiap baris mewakili satu tamu
|
informasi peserta (tamu) kejadian. Tiap baris mewakili satu tamu
|
||||||
kejadian. Ini menetapkan tipe tamu dan respons kehadiran tamu
|
kejadian. Ini menetapkan tipe tamu dan respons kehadiran tamu
|
||||||
@@ -149,17 +149,17 @@ untuk kejadian.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Reminders}</td>
|
<td>{@link android.provider.CalendarContract.Reminders}</td>
|
||||||
|
|
||||||
<td>Tabel ini menyimpan
|
<td>Tabel ini menyimpan
|
||||||
data peringatan/pemberitahuan. Tiap baris mewakili satu peringatan untuk sebuah kejadian. Sebuah
|
data peringatan/pemberitahuan. Tiap baris mewakili satu peringatan untuk sebuah kejadian. Sebuah
|
||||||
kejadian bisa memiliki beberapa pengingat. Jumlah maksimum pengingat per kejadian
|
kejadian bisa memiliki beberapa pengingat. Jumlah maksimum pengingat per kejadian
|
||||||
ditetapkan dalam
|
ditetapkan dalam
|
||||||
{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},
|
{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},
|
||||||
yang diatur oleh adaptor sinkronisasi yang
|
yang diatur oleh adaptor sinkronisasi yang
|
||||||
memiliki kalender yang diberikan. Pengingat ditetapkan dalam menit sebelum kejadian
|
memiliki kalender yang diberikan. Pengingat ditetapkan dalam menit sebelum kejadian
|
||||||
dan memiliki metode yang menentukan cara pengguna akan diperingatkan.</td>
|
dan memiliki metode yang menentukan cara pengguna akan diperingatkan.</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>API Penyedia Kalender didesain agar luwes dan tangguh. Sementara itu
|
<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
|
<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.Calendars} dan
|
||||||
{@link android.provider.CalendarContract.Events},
|
{@link android.provider.CalendarContract.Events},
|
||||||
ada kolom yang dicadangkan untuk digunakan adaptor sinkronisasi.
|
ada kolom yang dicadangkan untuk digunakan adaptor sinkronisasi.
|
||||||
Penyedia dan aplikasi tidak boleh memodifikasinya. Sebenarnya, tabel-tabel itu tidak
|
Penyedia dan aplikasi tidak boleh memodifikasinya. Sebenarnya, tabel-tabel itu tidak
|
||||||
terlihat kecuali jika diakses sebagai adaptor sinkronisasi. Untuk informasi selengkapnya tentang
|
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
|
<p>Tabel {@link android.provider.CalendarContract.Calendars} berisi data
|
||||||
untuk tiap kalender. Kolom-kolom
|
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
|
Untuk mengetahui daftar lengkap bidang-bidang yang didukung, lihat
|
||||||
acuan {@link android.provider.CalendarContract.Calendars}.</p>
|
acuan {@link android.provider.CalendarContract.Calendars}.</p>
|
||||||
<table>
|
<table>
|
||||||
@@ -229,7 +229,7 @@ acuan {@link android.provider.CalendarContract.Calendars}.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td>
|
<td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td>
|
||||||
|
|
||||||
<td>Sebuah boolean yang menunjukkan apakah kalender dipilih untuk ditampilkan. Nilai
|
<td>Sebuah boolean yang menunjukkan apakah kalender dipilih untuk ditampilkan. Nilai
|
||||||
0 menunjukkan bahwa kejadian yang terkait dengan kalender ini tidak boleh
|
0 menunjukkan bahwa kejadian yang terkait dengan kalender ini tidak boleh
|
||||||
ditampilkan. Nilai 1 menunjukkan bahwa kejadian yang terkait dengan kalender ini harus
|
ditampilkan. Nilai 1 menunjukkan bahwa kejadian yang terkait dengan kalender ini harus
|
||||||
@@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances}.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td>
|
<td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td>
|
||||||
|
|
||||||
<td>Sebuah boolean yang menunjukkan apakah kalender harus disinkronkan dan apakah
|
<td>Sebuah boolean yang menunjukkan apakah kalender harus disinkronkan dan apakah
|
||||||
kejadiannya harus disimpan pada perangkat. Nilai 0 berarti jangan menyinkronkan kalender ini atau
|
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
|
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
|
<p>Berikut ini adalah contoh yang menampilkan cara mendapatkan kalender yang dimiliki oleh
|
||||||
pengguna tertentu. Untuk memudahkan, dalam contoh ini, operasi query ditampilkan dalam
|
pengguna tertentu. Untuk memudahkan, dalam contoh ini, operasi query ditampilkan dalam
|
||||||
thread antarmuka pengguna ("thread utama"). Dalam praktiknya, hal ini harus dilakukan dalam
|
thread antarmuka pengguna ("thread utama"). Dalam praktiknya, hal ini harus dilakukan dalam
|
||||||
thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat
|
thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat
|
||||||
<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar
|
<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar
|
||||||
membaca data melainkan memodifikasinya, lihat {@link android.content.AsyncQueryHandler}.
|
membaca data melainkan memodifikasinya, lihat {@link android.content.AsyncQueryHandler}.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] {
|
|||||||
Calendars.CALENDAR_DISPLAY_NAME, // 2
|
Calendars.CALENDAR_DISPLAY_NAME, // 2
|
||||||
Calendars.OWNER_ACCOUNT // 3
|
Calendars.OWNER_ACCOUNT // 3
|
||||||
};
|
};
|
||||||
|
|
||||||
// The indices for the projection array above.
|
// The indices for the projection array above.
|
||||||
private static final int PROJECTION_ID_INDEX = 0;
|
private static final int PROJECTION_ID_INDEX = 0;
|
||||||
private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
|
private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
|
||||||
private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
|
private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
|
||||||
private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre>
|
private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre>
|
||||||
|
|
||||||
|
|
||||||
<div class="sidebox-wrapper"> <div class="sidebox"> <h3>Mengapa Anda harus menyertakan
|
<div class="sidebox-wrapper"> <div class="sidebox"> <h3>Mengapa Anda harus menyertakan
|
||||||
ACCOUNT_TYPE?</h3> <p>Jika Anda membuat query pada {@link
|
ACCOUNT_TYPE?</h3> <p>Jika Anda membuat query pada {@link
|
||||||
android.provider.CalendarContract.Calendars#ACCOUNT_NAME
|
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}
|
{@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE}
|
||||||
dalam pemilihan. Itu karena akun yang bersangkutan
|
dalam pemilihan. Itu karena akun yang bersangkutan
|
||||||
hanya dianggap unik mengingat <code>ACCOUNT_NAME</code> dan
|
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
|
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} untuk kalender
|
||||||
yang tidak terkait dengan akun perangkat. Akun {@link
|
yang tidak terkait dengan akun perangkat. Akun {@link
|
||||||
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} tidak
|
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
|
<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>.
|
telah ditampilkan pengguna, bukan hanya kalender yang dimiliki pengguna, hilangkan <code>OWNER_ACCOUNT</code>.
|
||||||
Query tersebut akan menghasilkan objek {@link android.database.Cursor}
|
Query tersebut akan menghasilkan objek {@link android.database.Cursor}
|
||||||
yang bisa Anda gunakan untuk menyusuri set hasil yang dikembalikan oleh
|
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>
|
lihat <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Kalender</a>.</p>
|
||||||
|
|
||||||
|
|
||||||
<pre>// Run query
|
<pre>// Run query
|
||||||
Cursor cur = null;
|
Cursor cur = null;
|
||||||
ContentResolver cr = getContentResolver();
|
ContentResolver cr = getContentResolver();
|
||||||
Uri uri = Calendars.CONTENT_URI;
|
Uri uri = Calendars.CONTENT_URI;
|
||||||
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
|
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
|
||||||
+ Calendars.ACCOUNT_TYPE + " = ?) AND ("
|
+ Calendars.ACCOUNT_TYPE + " = ?) AND ("
|
||||||
+ Calendars.OWNER_ACCOUNT + " = ?))";
|
+ Calendars.OWNER_ACCOUNT + " = ?))";
|
||||||
String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google",
|
String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google",
|
||||||
"sampleuser@gmail.com"};
|
"sampleuser@gmail.com"};
|
||||||
// Submit the query and get a Cursor object back.
|
// Submit the query and get a Cursor object back.
|
||||||
cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre>
|
cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre>
|
||||||
|
|
||||||
<p>Bagian berikutnya ini menggunakan kursor untuk merunut set hasil. Bagian ini menggunakan
|
<p>Bagian berikutnya ini menggunakan kursor untuk merunut set hasil. Bagian ini menggunakan
|
||||||
konstanta yang disiapkan pada awal contoh ini untuk menghasilkan nilai-nilai
|
konstanta yang disiapkan pada awal contoh ini untuk menghasilkan nilai-nilai
|
||||||
bagi tiap bidang.</p>
|
bagi tiap bidang.</p>
|
||||||
|
|
||||||
<pre>// Use the cursor to step through the returned records
|
<pre>// Use the cursor to step through the returned records
|
||||||
while (cur.moveToNext()) {
|
while (cur.moveToNext()) {
|
||||||
long calID = 0;
|
long calID = 0;
|
||||||
String displayName = null;
|
String displayName = null;
|
||||||
String accountName = null;
|
String accountName = null;
|
||||||
String ownerName = null;
|
String ownerName = null;
|
||||||
|
|
||||||
// Get the field values
|
// Get the field values
|
||||||
calID = cur.getLong(PROJECTION_ID_INDEX);
|
calID = cur.getLong(PROJECTION_ID_INDEX);
|
||||||
displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
|
displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
|
||||||
accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
|
accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
|
||||||
ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
|
ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
|
||||||
|
|
||||||
// Do something with the values...
|
// Do something with the values...
|
||||||
|
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h3 id="modify-calendar">Memodifikasi kalender</h3>
|
<h3 id="modify-calendar">Memodifikasi kalender</h3>
|
||||||
|
|
||||||
<p>Untuk melakukan pembaruan kalender, Anda bisa menyediakan {@link
|
<p>Untuk melakukan pembaruan kalender, Anda bisa menyediakan {@link
|
||||||
android.provider.BaseColumns#_ID} kalender itu baik sebagai ID yang ditambahkan ke
|
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
|
atau sebagai item pemilihan pertama. Pemilihan
|
||||||
harus diawali dengan <code>"_id=?"</code>, dan
|
harus diawali dengan <code>"_id=?"</code>, dan
|
||||||
<code>selectionArg</code> pertama harus berupa {@link
|
<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
|
Anda juga bisa melakukan pembaruan dengan menuliskan kode ID dalam URI. Contoh ini mengubah
|
||||||
nama tampilan kalender dengan pendekatan
|
nama tampilan kalender dengan pendekatan
|
||||||
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||||
:</p>
|
:</p>
|
||||||
|
|
||||||
<pre>private static final String DEBUG_TAG = "MyActivity";
|
<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
|
penyisipan kalender sebagai adaptor sinkronisasi, menggunakan {@link
|
||||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} dari {@link
|
android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} dari {@link
|
||||||
android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}.
|
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
|
adalah sebuah tipe akun khusus untuk kalender yang tidak
|
||||||
terkait dengan akun perangkat. Kalender tipe ini tidak disinkronkan dengan server. Untuk
|
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>
|
diskusi tentang adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
|
||||||
@@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td>
|
<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>.
|
<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
|
Misalnya, nilai <code>"PT1H"</code> menyatakan bahwa kejadian
|
||||||
akan berlangsung satu jam, dan nilai <code>"P2W"</code> menunjukkan
|
akan berlangsung satu jam, dan nilai <code>"P2W"</code> menunjukkan
|
||||||
@@ -444,39 +444,39 @@ durasi 2 minggu. </td>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td>
|
<td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td>
|
||||||
|
|
||||||
<td>Nilai 1 menunjukkan kejadian ini memakan waktu sehari penuh, seperti yang didefinisikan oleh
|
<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
|
zona waktu lokal. Nilai 0 menunjukkan kejadian adalah kejadian biasa yang mungkin dimulai
|
||||||
dan selesai pada sembarang waktu selama suatu hari.</td>
|
dan selesai pada sembarang waktu selama suatu hari.</td>
|
||||||
|
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td>
|
<td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td>
|
||||||
|
|
||||||
<td>Aturan perulangan untuk format kejadian. Misalnya,
|
<td>Aturan perulangan untuk format kejadian. Misalnya,
|
||||||
<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Anda bisa menemukan
|
<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>
|
contoh selengkapnya <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">di sini</a>.</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td>
|
<td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td>
|
||||||
<td>Tanggal perulangan kejadian.
|
<td>Tanggal perulangan kejadian.
|
||||||
Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE}
|
Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE}
|
||||||
bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE}
|
bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE}
|
||||||
untuk mendefinisikan satu set agregat
|
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>
|
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>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td>
|
<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>
|
dijadwalkan. </td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td>
|
<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
|
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
|
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>
|
skenario itu, sebuah zona waktu default akan diberikan.</li>
|
||||||
|
|
||||||
<li>Untuk kejadian tidak-berulang, Anda harus menyertakan {@link
|
<li>Untuk kejadian tidak-berulang, Anda harus menyertakan {@link
|
||||||
android.provider.CalendarContract.EventsColumns#DTEND}. </li>
|
android.provider.CalendarContract.EventsColumns#DTEND}. </li>
|
||||||
|
|
||||||
|
|
||||||
<li>Untuk kejadian berulang, Anda harus menyertakan sebuah {@link
|
<li>Untuk kejadian berulang, Anda harus menyertakan sebuah {@link
|
||||||
android.provider.CalendarContract.EventsColumns#DURATION} selain {@link
|
android.provider.CalendarContract.EventsColumns#DURATION} selain {@link
|
||||||
android.provider.CalendarContract.EventsColumns#RRULE} atau {@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
|
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
|
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
|
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>
|
akan mengubahnya menjadi durasi secara otomatis.</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>Berikut ini adalah contoh penyisipan kejadian. Penyisipan ini dilakukan dalam thread UI
|
<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>
|
<pre>
|
||||||
long calID = 3;
|
long calID = 3;
|
||||||
long startMillis = 0;
|
long startMillis = 0;
|
||||||
long endMillis = 0;
|
long endMillis = 0;
|
||||||
Calendar beginTime = Calendar.getInstance();
|
Calendar beginTime = Calendar.getInstance();
|
||||||
beginTime.set(2012, 9, 14, 7, 30);
|
beginTime.set(2012, 9, 14, 7, 30);
|
||||||
startMillis = beginTime.getTimeInMillis();
|
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
|
// get the event ID that is the last element in the Uri
|
||||||
long eventID = Long.parseLong(uri.getLastPathSegment());
|
long eventID = Long.parseLong(uri.getLastPathSegment());
|
||||||
//
|
//
|
||||||
// ... do something with event ID
|
// ... do something with event ID
|
||||||
//
|
//
|
||||||
//</pre>
|
//</pre>
|
||||||
@@ -578,14 +578,14 @@ peserta atau pengingat ke kejadian.</p>
|
|||||||
gunakan Intent {@link android.content.Intent#ACTION_EDIT EDIT}, seperti
|
gunakan Intent {@link android.content.Intent#ACTION_EDIT EDIT}, seperti
|
||||||
dijelaskan dalam <a href="#intent-edit">Menggunakan intent untuk mengedit kejadian</a>.
|
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
|
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
|
kejadian itu sebagai ID yang ditambahkan ke URI ({@link
|
||||||
android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
|
||||||
atau sebagai item pemilihan pertama.
|
atau sebagai item pemilihan pertama.
|
||||||
Pemilihan harus dimulai dengan <code>"_id=?"</code>, dan
|
Pemilihan harus dimulai dengan <code>"_id=?"</code>, dan
|
||||||
<code>selectionArg</code> yang pertama harus berupa <code>_ID</code> kejadian. Anda juga bisa
|
<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
|
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()}
|
{@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}
|
||||||
:</p>
|
:</p>
|
||||||
|
|
||||||
@@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver();
|
|||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
Uri updateUri = null;
|
Uri updateUri = null;
|
||||||
// The new title for the event
|
// The new title for the event
|
||||||
values.put(Events.TITLE, "Kickboxing");
|
values.put(Events.TITLE, "Kickboxing");
|
||||||
updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
||||||
int rows = getContentResolver().update(updateUri, values, null, null);
|
int rows = getContentResolver().update(updateUri, values, null, null);
|
||||||
Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre>
|
Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre>
|
||||||
@@ -625,22 +625,22 @@ ContentValues values = new ContentValues();
|
|||||||
Uri deleteUri = null;
|
Uri deleteUri = null;
|
||||||
deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
|
||||||
int rows = getContentResolver().delete(deleteUri, null, null);
|
int rows = getContentResolver().delete(deleteUri, null, null);
|
||||||
Log.i(DEBUG_TAG, "Rows deleted: " + rows);
|
Log.i(DEBUG_TAG, "Rows deleted: " + rows);
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2 id="attendees">Tabel Peserta</h2>
|
<h2 id="attendees">Tabel Peserta</h2>
|
||||||
|
|
||||||
<p>Tiap baris tabel {@link android.provider.CalendarContract.Attendees}
|
<p>Tiap baris tabel {@link android.provider.CalendarContract.Attendees}
|
||||||
mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil
|
mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil
|
||||||
{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}
|
{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}
|
||||||
akan menghasilkan daftar peserta untuk
|
akan menghasilkan daftar peserta untuk
|
||||||
kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.
|
kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.
|
||||||
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini
|
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini
|
||||||
harus cocok dengan {@link
|
harus cocok dengan {@link
|
||||||
android.provider.BaseColumns#_ID} kejadian tertentu.</p>
|
android.provider.BaseColumns#_ID} kejadian tertentu.</p>
|
||||||
|
|
||||||
<p>Tabel berikut mencantumkan
|
<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>.
|
kecuali <code>ATTENDEE_NAME</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -698,7 +698,7 @@ kecuali <code>ATTENDEE_NAME</code>.
|
|||||||
<h3 id="add-attendees">Menambahkan Peserta</h3>
|
<h3 id="add-attendees">Menambahkan Peserta</h3>
|
||||||
|
|
||||||
<p>Berikut ini adalah contoh yang menambahkan satu peserta ke kejadian. Perhatikan bahwa
|
<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>
|
diperlukan:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -718,17 +718,17 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values);
|
|||||||
<h2 id="reminders">Tabel Pengingat</h2>
|
<h2 id="reminders">Tabel Pengingat</h2>
|
||||||
|
|
||||||
<p>Tiap baris tabel {@link android.provider.CalendarContract.Reminders}
|
<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
|
{@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>
|
{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.</p>
|
||||||
|
|
||||||
|
|
||||||
<p>Tabel berikut mencantumkan bidang-bidang yang bisa ditulis untuk pengingat. Semua bidang harus
|
<p>Tabel berikut mencantumkan bidang-bidang yang bisa ditulis untuk pengingat. Semua bidang harus
|
||||||
disertakan saat menyisipkan pengingat baru. Perhatikan bahwa adaptor sinkronisasi menetapkan
|
disertakan saat menyisipkan pengingat baru. Perhatikan bahwa adaptor sinkronisasi menetapkan
|
||||||
tipe pengingat yang didukungnya dalam tabel {@link
|
tipe pengingat yang didukungnya dalam tabel {@link
|
||||||
android.provider.CalendarContract.Calendars}. Lihat
|
android.provider.CalendarContract.Calendars}. Lihat
|
||||||
{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}
|
{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}
|
||||||
untuk detailnya.</p>
|
untuk detailnya.</p>
|
||||||
|
|
||||||
|
|
||||||
@@ -773,16 +773,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre>
|
|||||||
|
|
||||||
<h2 id="instances">Tabel Instances</h2>
|
<h2 id="instances">Tabel Instances</h2>
|
||||||
|
|
||||||
<p>Tabel
|
<p>Tabel
|
||||||
{@link android.provider.CalendarContract.Instances} menyimpan
|
{@link android.provider.CalendarContract.Instances} menyimpan
|
||||||
waktu mulai dan waktu selesai kejadian. Tiap baris dalam tabel ini
|
waktu mulai dan waktu selesai kejadian. Tiap baris dalam tabel ini
|
||||||
mewakili satu bentuk kejadian. Tabel instance tidak bisa ditulis dan hanya
|
mewakili satu bentuk kejadian. Tabel instance tidak bisa ditulis dan hanya
|
||||||
menyediakan sebuah cara untuk membuat query kejadian. </p>
|
menyediakan sebuah cara untuk membuat query kejadian. </p>
|
||||||
|
|
||||||
<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan
|
<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan
|
||||||
bahwa zona waktu didefinisikan oleh
|
bahwa zona waktu didefinisikan oleh
|
||||||
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE}
|
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE}
|
||||||
dan
|
dan
|
||||||
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p>
|
{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p>
|
||||||
|
|
||||||
|
|
||||||
@@ -801,18 +801,18 @@ dan
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances#END_DAY}</td>
|
<td>{@link android.provider.CalendarContract.Instances#END_DAY}</td>
|
||||||
|
|
||||||
<td>Hari selesai Julian dari instance, relatif terhadap
|
<td>Hari selesai Julian dari instance, relatif terhadap
|
||||||
zona waktu Kalender.
|
zona waktu Kalender.
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td>
|
<td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td>
|
||||||
|
|
||||||
<td>Menit selesai dari instance yang diukur dari tengah malam di zona waktu
|
<td>Menit selesai dari instance yang diukur dari tengah malam di zona waktu
|
||||||
Kalender.</td>
|
Kalender.</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td>
|
<td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td>
|
||||||
@@ -820,16 +820,16 @@ Kalender.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances#START_DAY}</td>
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td>
|
<td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td>
|
||||||
|
|
||||||
<td>Menit mulai dari instance yang diukur dari tengah malam, relatif terhadap
|
<td>Menit mulai dari instance yang diukur dari tengah malam, relatif terhadap
|
||||||
zona waktu Kalender.
|
zona waktu Kalender.
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
@@ -840,7 +840,7 @@ zona waktu Kalender.
|
|||||||
dalam URI. Dalam contoh ini, {@link android.provider.CalendarContract.Instances}
|
dalam URI. Dalam contoh ini, {@link android.provider.CalendarContract.Instances}
|
||||||
mendapatkan akses ke bidang {@link
|
mendapatkan akses ke bidang {@link
|
||||||
android.provider.CalendarContract.EventsColumns#TITLE} melalui
|
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
|
Dengan kata lain, {@link
|
||||||
android.provider.CalendarContract.EventsColumns#TITLE} dihasilkan melalui
|
android.provider.CalendarContract.EventsColumns#TITLE} dihasilkan melalui
|
||||||
tampilan database, bukan melalui query terhadap tabel {@link
|
tampilan database, bukan melalui query terhadap tabel {@link
|
||||||
@@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] {
|
|||||||
Instances.BEGIN, // 1
|
Instances.BEGIN, // 1
|
||||||
Instances.TITLE // 2
|
Instances.TITLE // 2
|
||||||
};
|
};
|
||||||
|
|
||||||
// The indices for the projection array above.
|
// The indices for the projection array above.
|
||||||
private static final int PROJECTION_ID_INDEX = 0;
|
private static final int PROJECTION_ID_INDEX = 0;
|
||||||
private static final int PROJECTION_BEGIN_INDEX = 1;
|
private static final int PROJECTION_BEGIN_INDEX = 1;
|
||||||
@@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis();
|
|||||||
Calendar endTime = Calendar.getInstance();
|
Calendar endTime = Calendar.getInstance();
|
||||||
endTime.set(2011, 10, 24, 8, 0);
|
endTime.set(2011, 10, 24, 8, 0);
|
||||||
long endMillis = endTime.getTimeInMillis();
|
long endMillis = endTime.getTimeInMillis();
|
||||||
|
|
||||||
Cursor cur = null;
|
Cursor cur = null;
|
||||||
ContentResolver cr = getContentResolver();
|
ContentResolver cr = getContentResolver();
|
||||||
|
|
||||||
@@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis);
|
|||||||
ContentUris.appendId(builder, endMillis);
|
ContentUris.appendId(builder, endMillis);
|
||||||
|
|
||||||
// Submit the query
|
// Submit the query
|
||||||
cur = cr.query(builder.build(),
|
cur = cr.query(builder.build(),
|
||||||
INSTANCE_PROJECTION,
|
INSTANCE_PROJECTION,
|
||||||
selection,
|
selection,
|
||||||
selectionArgs,
|
selectionArgs,
|
||||||
null);
|
null);
|
||||||
|
|
||||||
while (cur.moveToNext()) {
|
while (cur.moveToNext()) {
|
||||||
String title = null;
|
String title = null;
|
||||||
long eventID = 0;
|
long eventID = 0;
|
||||||
long beginVal = 0;
|
long beginVal = 0;
|
||||||
|
|
||||||
// Get the field values
|
// Get the field values
|
||||||
eventID = cur.getLong(PROJECTION_ID_INDEX);
|
eventID = cur.getLong(PROJECTION_ID_INDEX);
|
||||||
beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
|
beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
|
||||||
title = cur.getString(PROJECTION_TITLE_INDEX);
|
title = cur.getString(PROJECTION_TITLE_INDEX);
|
||||||
|
|
||||||
// Do something with the values.
|
// Do something with the values.
|
||||||
Log.i(DEBUG_TAG, "Event: " + title);
|
Log.i(DEBUG_TAG, "Event: " + title);
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.setTimeInMillis(beginVal);
|
calendar.setTimeInMillis(beginVal);
|
||||||
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
|
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>
|
}</pre>
|
||||||
|
|
||||||
@@ -922,9 +922,9 @@ while (cur.moveToNext()) {
|
|||||||
<td><br>
|
<td><br>
|
||||||
{@link android.content.Intent#ACTION_VIEW VIEW} <br></td>
|
{@link android.content.Intent#ACTION_VIEW VIEW} <br></td>
|
||||||
<td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p>
|
<td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p>
|
||||||
Anda juga bisa mengacu ke URI dengan
|
Anda juga bisa mengacu ke URI dengan
|
||||||
{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}.
|
{@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>.
|
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>
|
||||||
<td>Membuka kalender pada waktu yang ditetapkan oleh <code><ms_since_epoch></code>.</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>
|
||||||
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
||||||
|
|
||||||
Anda juga bisa mengacu ke URI dengan
|
Anda juga bisa mengacu ke URI dengan
|
||||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
{@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>.
|
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>
|
||||||
<td>Menampilkan kejadian yang ditetapkan oleh <code><event_id></code>.</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>
|
<tr>
|
||||||
<td>{@link android.content.Intent#ACTION_EDIT EDIT} </td>
|
<td>{@link android.content.Intent#ACTION_EDIT EDIT} </td>
|
||||||
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
<td><p><code>content://com.android.calendar/events/<event_id></code></p>
|
||||||
|
|
||||||
Anda juga bisa mengacu ke URI dengan
|
Anda juga bisa mengacu ke URI dengan
|
||||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
{@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>.
|
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>
|
||||||
<td>Mengedit kejadian yang ditetapkan oleh <code><event_id></code>.</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>
|
<br>
|
||||||
{@link android.content.Intent#ACTION_INSERT INSERT} </td>
|
{@link android.content.Intent#ACTION_INSERT INSERT} </td>
|
||||||
<td><p><code>content://com.android.calendar/events</code></p>
|
<td><p><code>content://com.android.calendar/events</code></p>
|
||||||
|
|
||||||
Anda juga bisa mengacu ke URI dengan
|
Anda juga bisa mengacu ke URI dengan
|
||||||
{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
|
{@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>.
|
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>
|
||||||
|
|
||||||
<td>Membuat sebuah kejadian.</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>
|
<td>Nama kejadian.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
||||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
||||||
CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
|
CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
|
||||||
<td>Waktu mulai kejadian dalam milidetik sejak waktu patokan.</td>
|
<td>Waktu mulai kejadian dalam milidetik sejak waktu patokan.</td>
|
||||||
@@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME
|
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME
|
||||||
CalendarContract.EXTRA_EVENT_END_TIME}</td>
|
CalendarContract.EXTRA_EVENT_END_TIME}</td>
|
||||||
|
|
||||||
<td>Waktu selesai kejadian dalam milidetik sejak waktu patokan.</td>
|
<td>Waktu selesai kejadian dalam milidetik sejak waktu patokan.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY
|
<td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY
|
||||||
CalendarContract.EXTRA_EVENT_ALL_DAY}</td>
|
CalendarContract.EXTRA_EVENT_ALL_DAY}</td>
|
||||||
|
|
||||||
<td>Sebuah boolean yang menunjukkan bahwa kejadian sehari penuh. Nilai bisa
|
<td>Sebuah boolean yang menunjukkan bahwa kejadian sehari penuh. Nilai bisa
|
||||||
<code>true</code> atau <code>false</code>.</td> </tr>
|
<code>true</code> atau <code>false</code>.</td> </tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION
|
<td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION
|
||||||
Events.EVENT_LOCATION}</td>
|
Events.EVENT_LOCATION}</td>
|
||||||
|
|
||||||
<td>Lokasi kejadian.</td>
|
<td>Lokasi kejadian.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION
|
<td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION
|
||||||
Events.DESCRIPTION}</td>
|
Events.DESCRIPTION}</td>
|
||||||
|
|
||||||
<td>Keterangan kejadian.</td>
|
<td>Keterangan kejadian.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td>
|
|||||||
<td>
|
<td>
|
||||||
{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL
|
{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL
|
||||||
Events.ACCESS_LEVEL}</td>
|
Events.ACCESS_LEVEL}</td>
|
||||||
|
|
||||||
<td>Apakah kejadian bersifat privat atau publik.</td>
|
<td>Apakah kejadian bersifat privat atau publik.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY
|
<td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY
|
||||||
Events.AVAILABILITY}</td>
|
Events.AVAILABILITY}</td>
|
||||||
|
|
||||||
<td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa dijadwalkan.</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>
|
<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
|
Dengan pendekatan ini, aplikasi Anda bahkan tidak perlu menyertakan izin {@link
|
||||||
android.Manifest.permission#WRITE_CALENDAR} dalam <a href="#manifest">file manifesnya</a>.</p>
|
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
|
<p>Bila pengguna menjalankan aplikasi yang menggunakan pendekatan ini, aplikasi akan mengirim
|
||||||
izin ke Kalender untuk menyelesaikan penambahan kejadian. Intent {@link
|
izin ke Kalender untuk menyelesaikan penambahan kejadian. Intent {@link
|
||||||
android.content.Intent#ACTION_INSERT INSERT} menggunakan bidang-bidang ekstra
|
android.content.Intent#ACTION_INSERT INSERT} menggunakan bidang-bidang ekstra
|
||||||
untuk mengisi formulir lebih dahulu dengan detail kejadian dalam Kalender. Pengguna nanti bisa
|
untuk mengisi formulir lebih dahulu dengan detail kejadian dalam Kalender. Pengguna nanti bisa
|
||||||
membatalkan kejadian, mengedit formulir sebagaimana diperlukan, atau menyimpan kejadian ke
|
membatalkan kejadian, mengedit formulir sebagaimana diperlukan, atau menyimpan kejadian ke
|
||||||
kalender mereka.</p>
|
kalender mereka.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p>Berikut ini adalah cuplikan kode yang menjadwalkan kejadian pada tanggal 19 Januari 2012, yang berjalan
|
<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>
|
dari 7:30 pagi hingga 8:30 pagi Perhatikan hal-hal berikut tentang cuplikan kode ini:</p>
|
||||||
|
|
||||||
<ul>
|
<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>
|
sebagai URI-nya.</li>
|
||||||
|
|
||||||
<li>Cuplikan kode ini menggunakan bidang-bidang ekstra {@link
|
<li>Cuplikan kode ini menggunakan bidang-bidang ekstra {@link
|
||||||
android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
|
||||||
CalendarContract.EXTRA_EVENT_BEGIN_TIME} dan {@link
|
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
|
CalendarContract.EXTRA_EVENT_END_TIME} untuk mengisi dahulu formulir
|
||||||
dengan waktu kejadian. Nilai-nilai untuk waktu ini harus dalam milidetik UTC
|
dengan waktu kejadian. Nilai-nilai untuk waktu ini harus dalam milidetik UTC
|
||||||
sejak waktu patokan.</li>
|
sejak waktu patokan.</li>
|
||||||
|
|
||||||
<li>Cuplikan kode ini menggunakan bidang ekstra {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}
|
<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>
|
untuk memberikan daftar undangan yang dipisah koma, yang ditetapkan melalui alamat email.</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<pre>
|
<pre>
|
||||||
Calendar beginTime = Calendar.getInstance();
|
Calendar beginTime = Calendar.getInstance();
|
||||||
@@ -1158,18 +1158,18 @@ mengakses Penyedia Kalender:</p>
|
|||||||
|
|
||||||
<ul>
|
<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 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
|
<li>Adaptor sinkronisasi perlu memberikan {@link
|
||||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} dan {@link
|
android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} dan {@link
|
||||||
android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} sebagai parameter query dalam URI. </li>
|
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.
|
<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
|
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,
|
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.
|
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>
|
<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>
|
<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();
|
.appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
|
||||||
}
|
}
|
||||||
</pre>
|
</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>.
|
<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,
|
Misalnya, untuk mendapatkan daftar kata dan lokalnya dari Penyedia Kamus Pengguna,
|
||||||
Anda memanggil {@link android.content.ContentResolver#query ContentResolver.query()}.
|
Anda memanggil {@link android.content.ContentResolver#query ContentResolver.query()}.
|
||||||
Metode {@link android.content.ContentResolver#query query()} memanggil
|
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
|
Penyedia Kamus Pengguna. Baris-baris kode berikut menunjukkan sebuah
|
||||||
panggilan {@link android.content.ContentResolver#query ContentResolver.query()}:
|
panggilan {@link android.content.ContentResolver#query ContentResolver.query()}:
|
||||||
<p>
|
<p>
|
||||||
@@ -251,7 +251,7 @@ mCursor = getContentResolver().query(
|
|||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Tabel 2 menampilkan cara argumen untuk
|
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:
|
query(Uri,projection,selection,selectionArgs,sortOrder)} cocok dengan sebuah pernyataan SELECT di SQL:
|
||||||
</p>
|
</p>
|
||||||
<p class="table-caption">
|
<p class="table-caption">
|
||||||
@@ -310,7 +310,7 @@ mCursor = getContentResolver().query(
|
|||||||
{@link android.provider.UserDictionary.Words#CONTENT_URI} mengandung URI konten dari
|
{@link android.provider.UserDictionary.Words#CONTENT_URI} mengandung URI konten dari
|
||||||
tabel "words" kamus pengguna. Objek {@link android.content.ContentResolver}
|
tabel "words" kamus pengguna. Objek {@link android.content.ContentResolver}
|
||||||
akan mengurai otoritas URI, dan menggunakannya untuk "mengetahui" penyedia dengan
|
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
|
{@link android.content.ContentResolver} kemudian bisa mengirim argumen query ke penyedia
|
||||||
yang benar.
|
yang benar.
|
||||||
</p>
|
</p>
|
||||||
@@ -343,8 +343,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
|
|||||||
salah satunya.
|
salah satunya.
|
||||||
</p>
|
</p>
|
||||||
<p class="note">
|
<p class="note">
|
||||||
<strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder}
|
<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.
|
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
|
{@link android.content.ContentUris} berisi metode praktis untuk menambahkan nilai ID ke
|
||||||
URI. Cuplikan kode sebelumnya menggunakan {@link android.content.ContentUris#withAppendedId
|
URI. Cuplikan kode sebelumnya menggunakan {@link android.content.ContentUris#withAppendedId
|
||||||
withAppendedId()} untuk menambahkan id ke URI konten User Dictionary.
|
withAppendedId()} untuk menambahkan id ke URI konten User Dictionary.
|
||||||
@@ -359,8 +359,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
|
|||||||
</p>
|
</p>
|
||||||
<p class="note">
|
<p class="note">
|
||||||
Demi kejelasan, cuplikan kode di bagian ini memanggil
|
Demi kejelasan, cuplikan kode di bagian ini memanggil
|
||||||
{@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam
|
{@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
|
kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya
|
||||||
adalah menggunakan kelas {@link android.content.CursorLoader}, yang dijelaskan
|
adalah menggunakan kelas {@link android.content.CursorLoader}, yang dijelaskan
|
||||||
lebih detail dalam panduan <a href="{@docRoot}guide/components/loaders.html">
|
lebih detail dalam panduan <a href="{@docRoot}guide/components/loaders.html">
|
||||||
Loader</a>. Juga, baris-baris kode tersebut hanyalah cuplikan; tidak menunjukkan sebuah aplikasi
|
Loader</a>. Juga, baris-baris kode tersebut hanyalah cuplikan; tidak menunjukkan sebuah aplikasi
|
||||||
@@ -428,7 +428,7 @@ String[] mSelectionArgs = {""};
|
|||||||
<p>
|
<p>
|
||||||
Cuplikan berikutnya menampilkan cara menggunakan
|
Cuplikan berikutnya menampilkan cara menggunakan
|
||||||
{@link android.content.ContentResolver#query ContentResolver.query()}, dengan menggunakan Penyedia Kamus Pengguna
|
{@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.
|
set kolom yang akan dihasilkan, satu set kriteria pemilihan, dan urutan sortir.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@@ -438,8 +438,8 @@ String[] mSelectionArgs = {""};
|
|||||||
<p>
|
<p>
|
||||||
Ekspresi yang menetapkan baris yang harus diambil dipecah menjadi klausa pemilihan dan
|
Ekspresi yang menetapkan baris yang harus diambil dipecah menjadi klausa pemilihan dan
|
||||||
argumen pemilihan. Klausa pemilihan adalah kombinasi ekspresi logis dan boolean,
|
argumen pemilihan. Klausa pemilihan adalah kombinasi ekspresi logis dan boolean,
|
||||||
nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan
|
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
|
parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai
|
||||||
dari larik argumen pemilihan (variabel <code>mSelectionArgs</code>).
|
dari larik argumen pemilihan (variabel <code>mSelectionArgs</code>).
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@@ -558,21 +558,21 @@ String[] selectionArgs = {""};
|
|||||||
selectionArgs[0] = mUserInput;
|
selectionArgs[0] = mUserInput;
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<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
|
argumen pemilihan adalah cara yang lebih disukai untuk menyebutkan pemilihan, sekalipun penyedia tidak
|
||||||
dibuat berdasarkan database SQL.
|
dibuat berdasarkan database SQL.
|
||||||
</p>
|
</p>
|
||||||
<!-- Displaying the results -->
|
<!-- Displaying the results -->
|
||||||
<h3 id="DisplayResults">Menampilkan hasil query</h3>
|
<h3 id="DisplayResults">Menampilkan hasil query</h3>
|
||||||
<p>
|
<p>
|
||||||
Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu
|
Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu
|
||||||
menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh
|
menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh
|
||||||
proyeksi query untuk baris yang cocok dengan kriteria pemilihan query. Objek
|
proyeksi query untuk baris yang cocok dengan kriteria pemilihan query. Objek
|
||||||
{@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang
|
{@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
|
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
|
hasil, menentukan tipe data tiap kolom, mengambil data dari kolom, dan memeriksa
|
||||||
properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor}
|
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
|
akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat
|
||||||
bila {@link android.database.Cursor} berubah, atau keduanya.
|
bila {@link android.database.Cursor} berubah, atau keduanya.
|
||||||
</p>
|
</p>
|
||||||
<p class="note">
|
<p class="note">
|
||||||
@@ -703,14 +703,14 @@ if (mCursor != null) {
|
|||||||
<p>
|
<p>
|
||||||
Untuk mendapatkan izin yang diperlukan untuk mengakses penyedia, aplikasi memintanya dengan elemen
|
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>
|
<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
|
dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna
|
||||||
harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya,
|
harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya,
|
||||||
Package Manager akan melanjutkan instalasi; jika pengguna tidak menyetujui, Package Manager
|
Package Manager akan melanjutkan instalasi; jika pengguna tidak menyetujui, Package Manager
|
||||||
akan membatalkan instalasi.
|
akan membatalkan instalasi.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Elemen
|
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:
|
berikut meminta akses baca ke Penyedia Kamus Pengguna:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
@@ -793,8 +793,8 @@ content://user_dictionary/words/<id_value>
|
|||||||
Untuk memperbarui sebuah baris, gunakan objek {@link android.content.ContentValues} dengan
|
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.
|
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
|
Metode klien yang Anda gunakan adalah
|
||||||
{@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan
|
{@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
|
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>.
|
ingin membersihkan konten kolom, aturlah nilai ke <code>null</code>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@@ -828,7 +828,7 @@ mRowsUpdated = getContentResolver().update(
|
|||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Anda juga harus membersihkan input pengguna bila memanggil
|
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>.
|
hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
|
||||||
</p>
|
</p>
|
||||||
<h3 id="Deleting">Menghapus data</h3>
|
<h3 id="Deleting">Menghapus data</h3>
|
||||||
@@ -858,7 +858,7 @@ mRowsDeleted = getContentResolver().delete(
|
|||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Anda juga harus membersihkan input pengguna bila memanggil
|
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>.
|
hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
|
||||||
</p>
|
</p>
|
||||||
<!-- Provider Data Types -->
|
<!-- Provider Data Types -->
|
||||||
@@ -883,7 +883,7 @@ mRowsDeleted = getContentResolver().delete(
|
|||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
Tipe data lain yang sering digunakan penyedia adalah Binary Large OBject (BLOB) yang diimplementasikan sebagai
|
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}.
|
kelas {@link android.database.Cursor}.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@@ -905,7 +905,7 @@ mRowsDeleted = getContentResolver().delete(
|
|||||||
{@link android.content.ContentResolver#getType ContentResolver.getType()}.
|
{@link android.content.ContentResolver#getType ContentResolver.getType()}.
|
||||||
</p>
|
</p>
|
||||||
<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.
|
sintaks tipe MIME baik yang standar maupun custom.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -946,9 +946,9 @@ mRowsDeleted = getContentResolver().delete(
|
|||||||
Untuk mengakses penyedia dalam "mode batch",
|
Untuk mengakses penyedia dalam "mode batch",
|
||||||
buat satu larik objek {@link android.content.ContentProviderOperation}, kemudian
|
buat satu larik objek {@link android.content.ContentProviderOperation}, kemudian
|
||||||
kirim larik itu ke penyedia konten dengan
|
kirim larik itu ke penyedia konten dengan
|
||||||
{@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan
|
{@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan
|
||||||
<em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu.
|
<em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu.
|
||||||
Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja
|
Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja
|
||||||
terhadap tabel yang berbeda. Panggilan ke {@link android.content.ContentResolver#applyBatch
|
terhadap tabel yang berbeda. Panggilan ke {@link android.content.ContentResolver#applyBatch
|
||||||
ContentResolver.applyBatch()} menghasilkan satu larik hasil.
|
ContentResolver.applyBatch()} menghasilkan satu larik hasil.
|
||||||
</p>
|
</p>
|
||||||
@@ -1011,7 +1011,7 @@ mRowsDeleted = getContentResolver().delete(
|
|||||||
<p>
|
<p>
|
||||||
Penyedia mendefinisikan izin URI untuk URI konten dalam manifesnya, dengan menggunakan atribut
|
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>
|
<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>
|
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>
|
||||||
, serta elemen anak
|
, serta elemen anak
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code>
|
<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
|
vnd.android.cursor.<strong>item</strong>/vnd.example.line2
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<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
|
{@link android.provider.ContactsContract.RawContacts} pada Penyedia Kontak
|
||||||
misalnya, mendefinisikan konstanta
|
misalnya, mendefinisikan konstanta
|
||||||
{@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} untuk tipe MIME
|
{@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} untuk tipe MIME
|
||||||
|
|||||||
@@ -1171,7 +1171,7 @@ metadata lain yang melekat ke penyedia. Kelas
|
|||||||
<li>
|
<li>
|
||||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label">
|
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label">
|
||||||
android:label</a></code>: Label informatif yang menjelaskan penyedia atau
|
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>.
|
<em>Settings</em> > <em>Apps</em> > <em>All</em>.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</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 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
|
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,
|
{@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,
|
mengambil dan menampilkan data dalam UI-nya. Bergantung pada tindakan dalam intent,
|
||||||
aktivitas tujuan juga bisa meminta pengguna untuk membuat modifikasi pada data penyedia.
|
aktivitas tujuan juga bisa meminta pengguna untuk membuat modifikasi pada data penyedia.
|
||||||
Intent juga bisa berisi data "ekstra" yang menampilkan aktivitas tujuan
|
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>
|
<p>
|
||||||
Android sendiri berisi penyedia konten yang mengelola data seperti informasi audio, video, gambar, dan
|
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
|
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><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a>
|
||||||
</code>. Dengan beberapa batasan, semua penyedia ini bisa diakses oleh aplikasi Android
|
</code>. Dengan beberapa batasan, semua penyedia ini bisa diakses oleh aplikasi Android
|
||||||
apa saja.
|
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
|
Platform Android terdiri dari beberapa penyedia dokumen bawaan, seperti
|
||||||
Downloads, Images, dan Videos.</li>
|
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_OPEN_DOCUMENT} dan/atau
|
||||||
{@link android.content.Intent#ACTION_CREATE_DOCUMENT} dan menerima
|
{@link android.content.Intent#ACTION_CREATE_DOCUMENT} dan menerima
|
||||||
file yang dihasilkan penyedia dokumen.</li>
|
file yang dihasilkan penyedia dokumen.</li>
|
||||||
@@ -446,7 +446,7 @@ bisa terus menulis ke dokumen itu.</p>
|
|||||||
|
|
||||||
<h3 id="delete">Menghapus dokumen</h3>
|
<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}
|
{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS}
|
||||||
dokumen berisi
|
dokumen berisi
|
||||||
{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE},
|
{@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>.
|
string}, {@code drawable}, dan {@code layout}. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat <a href="available-resources.html">Tipe Sumber Daya</a>.
|
||||||
</li>
|
</li>
|
||||||
<li><em>Nama sumber daya</em>, bisa berupa: nama file,
|
<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>
|
sumber daya itu sebuah nilai sederhana (misalnya sebuah string).</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -259,8 +259,8 @@ mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya:</p>
|
|||||||
android:text="@string/hello" />
|
android:text="@string/hello" />
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang
|
<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang
|
||||||
waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain.
|
waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain.
|
||||||
Untuk informasi tentang cara menciptakan
|
Untuk informasi tentang cara menciptakan
|
||||||
sumber daya alternatif (seperti string lokal), lihat <a href="providing-resources.html#AlternativeResources">Menyediakan Sumber Daya Alternatif
|
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,
|
</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
|
<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
|
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>
|
<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
|
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
|
perangkat tertentu seperti bahasa atau ukuran layar yang berbeda, yang semakin penting
|
||||||
seiring semakin banyak tersedianya perangkat berbasis Android dengan konfigurasi berbeda. Untuk
|
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
|
direktori {@code res/} proyek Anda, menggunakan berbagai subdirektori yang mengelompokkan sumber daya menurut tipe
|
||||||
dan konfigurasinya.</p>
|
dan konfigurasinya.</p>
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ ukuran layar berbeda.</p>
|
|||||||
<em>alternatif</em> untuk aplikasi Anda:</p>
|
<em>alternatif</em> untuk aplikasi Anda:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Sumber daya default adalah sumber daya yang harus digunakan apa pun
|
<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>
|
dengan konfigurasi saat ini.</li>
|
||||||
<li>Sumber daya alternatif adalah sumber daya yang Anda desain untuk digunakan dengan
|
<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,
|
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>
|
<li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Lihat <a href="string-resource.html">Sumber Daya String</a>,
|
<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>
|
<a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -289,7 +289,7 @@ qualifier konfigurasi.</p>
|
|||||||
dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja,
|
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
|
<code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk
|
||||||
Orange.</p>
|
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>
|
dari kartu SIM.</p>
|
||||||
<p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal
|
<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
|
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.
|
dll.
|
||||||
</td>
|
</td>
|
||||||
<td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO
|
<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
|
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}").
|
3166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}").
|
||||||
</p><p>
|
</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
|
<p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
|
||||||
untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
|
untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
|
||||||
lebar layar perangkat saat ini. Nilai
|
lebar layar perangkat saat ini. Nilai
|
||||||
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
||||||
elemen UI persisten di tepi kiri atau kanan, layar
|
elemen UI persisten di tepi kiri atau kanan, layar
|
||||||
menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan
|
menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan
|
||||||
elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p>
|
elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p>
|
||||||
<p><em>Ditambahkan dalam API level 13.</em></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>
|
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
|
<p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
|
||||||
untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi)
|
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
|
di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
|
||||||
elemen UI persisten di tepi atas atau bawah, layar akan
|
elemen UI persisten di tepi atas atau bawah, layar akan
|
||||||
menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan
|
menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan
|
||||||
elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi
|
elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi
|
||||||
layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
|
layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
|
||||||
disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula
|
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
|
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.
|
untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan.
|
||||||
<p><em>Ditambahkan dalam API level 13.</em></p>
|
<p><em>Ditambahkan dalam API level 13.</em></p>
|
||||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp}
|
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp}
|
||||||
@@ -482,35 +482,35 @@ Multi Layar</a>.</p>
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="nolist">
|
<ul class="nolist">
|
||||||
<li>{@code small}: Layar yang berukuran serupa dengan
|
<li>{@code small}: Layar yang berukuran serupa dengan
|
||||||
layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
|
layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
|
||||||
adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah
|
adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah
|
||||||
dan VGA densitas tinggi.</li>
|
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 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
|
WQVGA densitas rendah, HVGA densitas sedang, WVGA
|
||||||
densitas tinggi.</li>
|
densitas tinggi.</li>
|
||||||
<li>{@code large}: Layar yang berukuran serupa dengan
|
<li>{@code large}: Layar yang berukuran serupa dengan
|
||||||
layar VGA densitas sedang.
|
layar VGA densitas sedang.
|
||||||
Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp.
|
Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp.
|
||||||
Misalnya layar VGA dan WVGA densitas sedang.</li>
|
Misalnya layar VGA dan WVGA densitas sedang.</li>
|
||||||
<li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
|
<li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
|
||||||
densitas sedang tradisional. Ukuran layout minimum untuk
|
densitas sedang tradisional. Ukuran layout minimum untuk
|
||||||
layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar
|
layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar
|
||||||
seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar
|
seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar
|
||||||
berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li>
|
berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li>
|
||||||
</ul>
|
</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
|
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
|
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>
|
mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
|
||||||
<p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan
|
<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
|
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
|
Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code
|
||||||
xlarge}, namun perangkat memiliki ukuran layar normal).</p>
|
xlarge}, namun perangkat memiliki ukuran layar normal).</p>
|
||||||
<p><em>Ditambahkan dalam API level 4.</em></p>
|
<p><em>Ditambahkan dalam API level 4.</em></p>
|
||||||
|
|
||||||
<p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
|
<p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
|
||||||
Layar</a> untuk informasi selengkapnya.</p>
|
Layar</a> untuk informasi selengkapnya.</p>
|
||||||
<p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
|
<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
|
<p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar
|
||||||
layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
|
layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
|
||||||
informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
|
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>
|
yang menunjukkan orientasi perangkat saat ini.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -569,19 +569,19 @@ yang menunjukkan orientasi perangkat saat ini.</p>
|
|||||||
<ul class="nolist">
|
<ul class="nolist">
|
||||||
<li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li>
|
<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 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,
|
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>
|
interaksi non-pointer lainnya</li>
|
||||||
<li>{@code appliance}: Perangkat berlaku sebagai
|
<li>{@code appliance}: Perangkat berlaku sebagai
|
||||||
alat, tanpa tampilan</li>
|
alat, tanpa tampilan</li>
|
||||||
<li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li>
|
<li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p>
|
<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
|
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>
|
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
|
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
|
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>
|
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><em>Ditambahkan dalam API level 8.</em></p>
|
||||||
<p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam
|
<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
|
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>
|
aplikasi Anda selama runtime.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -627,8 +627,8 @@ aplikasi Anda selama runtime.</p>
|
|||||||
Level 8.</em></li>
|
Level 8.</em></li>
|
||||||
<li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API
|
<li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API
|
||||||
Level 16.</em></li>
|
Level 16.</em></li>
|
||||||
<li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
|
<li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
|
||||||
lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a>
|
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
|
dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API
|
||||||
Level 18.</em></li>
|
Level 18.</em></li>
|
||||||
<li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda
|
<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>
|
hal ini memengaruhi aplikasi Anda selama runtime.</p>
|
||||||
<p>Lihat juga bidang konfigurasi {@link
|
<p>Lihat juga bidang konfigurasi {@link
|
||||||
android.content.res.Configuration#hardKeyboardHidden} dan {@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>
|
keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -716,7 +716,7 @@ pengguna
|
|||||||
<li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak
|
<li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak
|
||||||
pada pengguna.</li>
|
pada pengguna.</li>
|
||||||
</ul>
|
</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>
|
yang menunjukkan metode utama input teks yang tersedia.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</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,
|
<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
|
<code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi
|
||||||
lanskap.</li>
|
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:
|
Misalnya:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Salah: <code>drawable-hdpi-port/</code></li>
|
<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>
|
{@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p>
|
||||||
|
|
||||||
<p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada
|
<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,
|
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
|
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
|
Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi
|
||||||
@@ -1058,7 +1058,7 @@ Layar</a>.</p>
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi
|
<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:
|
Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus:
|
||||||
<pre class="classic no-pretty-print">
|
<pre class="classic no-pretty-print">
|
||||||
<strike>drawable-en/</strike>
|
<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>
|
<p>Untuk mempertahankan objek stateful dalam fragmen selama perubahan konfigurasi runtime:</p>
|
||||||
|
|
||||||
<ol>
|
<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>
|
Anda.</li>
|
||||||
<li>Panggil {@link android.app.Fragment#setRetainInstance(boolean)} saat fragmen dibuat.
|
<li>Panggil {@link android.app.Fragment#setRetainInstance(boolean)} saat fragmen dibuat.
|
||||||
</li>
|
</li>
|
||||||
<li>Tambahkan fragmen ke aktivitas.</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>
|
di-restart.</li>
|
||||||
</ol>
|
</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
|
berarti bahwa aplikasi Anda tetap menyimpannya dan tidak bisa dijadikan kumpulan sampah, sehingga bisa banyak
|
||||||
memori yang hilang.)</p>
|
memori yang hilang.)</p>
|
||||||
|
|
||||||
<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas.
|
<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
|
Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan
|
||||||
konfigurasi runtime. Misalnya, definisikan aktivitas Anda sebagai berikut:</p>
|
konfigurasi runtime. Misalnya, definisikan aktivitas Anda sebagai berikut:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ semacam kontrol input tertentu, Anda bisa membangun <a href="{@docRoot}guide/top
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href="controls/radiobutton.html">Tombol radio</a></td>
|
<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>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>
|
<br>{@link android.widget.RadioButton RadioButton} </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ tertarik dalam membuat instance objek View saat runtime, lihat referensi kelas {
|
|||||||
<code>EditText.setText()</code>. </p>
|
<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
|
<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>
|
<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>.</p>
|
||||||
|
|
||||||
<h2 id="write">Tulis XML</h2>
|
<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>
|
<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
|
{@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()}.
|
callback {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}.
|
||||||
Lakukan dengan memanggil <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,
|
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>
|
<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
|
<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 {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime.
|
||||||
Subkelas dari kelas {@link android.widget.AdapterView} menggunakan {@link android.widget.Adapter} untuk
|
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
|
mengikat data ke layoutnya. {@link android.widget.Adapter} berfungsi sebagai penghubung antara sumber data
|
||||||
dan layout{@link android.widget.AdapterView}—{@link android.widget.Adapter}
|
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
|
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
|
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
|
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>
|
tampilan yang sesuai untuk menempatkan masing-masing kolom:</p>
|
||||||
<pre>
|
<pre>
|
||||||
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
|
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment
|
|||||||
<li>{@link android.app.DialogFragment}</li>
|
<li>{@link android.app.DialogFragment}</li>
|
||||||
<li>{@link android.app.AlertDialog}</li>
|
<li>{@link android.app.AlertDialog}</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>Lihat juga</h2>
|
<h2>Lihat juga</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="{@docRoot}design/building-blocks/dialogs.html">Panduan desain dialog</a></li>
|
<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
|
<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}
|
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>
|
<a href="{@docRoot}guide/topics/ui/controls/pickers.html">Picker</a>.</p>
|
||||||
|
|
||||||
<p class="note"><strong>Catatan:</strong>
|
<p class="note"><strong>Catatan:</strong>
|
||||||
@@ -235,8 +235,8 @@ AlertDialog dialog = builder.create();
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Metode <code>set...Button()</code> mengharuskan adanya judul bagi tombol (disediakan
|
<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
|
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
|
{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil
|
||||||
bila pengguna menekan tombol.</p>
|
bila pengguna menekan tombol.</p>
|
||||||
|
|
||||||
<p>Ada tiga macam tombol tindakan yang Anda bisa tambahkan:</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>
|
<dd>Anda harus menggunakan tipe ini untuk membatalkan tindakan.</dd>
|
||||||
<dt>Netral</dt>
|
<dt>Netral</dt>
|
||||||
<dd>Anda harus menggunakan tipe ini bila pengguna mungkin tidak ingin melanjutkan tindakan,
|
<dd>Anda harus menggunakan tipe ini bila pengguna mungkin tidak ingin melanjutkan tindakan,
|
||||||
namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan
|
namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan
|
||||||
tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd>
|
tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<p>Anda hanya bisa menambahkan salah satu tipe tombol ke {@link
|
<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>
|
<li>Daftar pilihan ganda persisten (kotak cek)</li>
|
||||||
</ul>
|
</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>
|
gunakan metode {@link android.app.AlertDialog.Builder#setItems setItems()}:</p>
|
||||||
|
|
||||||
<pre style="clear:right">
|
<pre style="clear:right">
|
||||||
@@ -291,7 +291,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|||||||
|
|
||||||
<p>Karena daftar muncul dalam area konten dialog,
|
<p>Karena daftar muncul dalam area konten dialog,
|
||||||
dialog tidak bisa menampilkan pesan dan daftar sekaligus dan Anda harus menetapkan judul untuk
|
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
|
Untuk menentukan item daftar, panggil {@link
|
||||||
android.app.AlertDialog.Builder#setItems setItems()}, dengan meneruskan larik.
|
android.app.AlertDialog.Builder#setItems setItems()}, dengan meneruskan larik.
|
||||||
Atau, Anda bisa menetapkan daftar menggunakan {@link
|
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},
|
<p>Jika Anda memilih untuk mendukung daftar dengan {@link android.widget.ListAdapter},
|
||||||
selalu gunakan sebuah {@link android.support.v4.content.Loader} agar konten dimuat
|
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
|
<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>
|
dengan Adaptor</a> dan <a href="{@docRoot}guide/components/loaders.html">Loader</a>
|
||||||
.</p>
|
.</p>
|
||||||
@@ -317,11 +317,11 @@ Daftar item pilihan ganda.</p>
|
|||||||
|
|
||||||
<h4 id="Checkboxes">Menambahkan daftar pilihan ganda atau pilihan tunggal persisten</h4>
|
<h4 id="Checkboxes">Menambahkan daftar pilihan ganda atau pilihan tunggal persisten</h4>
|
||||||
|
|
||||||
<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau
|
<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau
|
||||||
item pilihan tunggal (tombol radio), gunakan masing-masing metode
|
item pilihan tunggal (tombol radio), gunakan masing-masing metode
|
||||||
{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String,
|
{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String,
|
||||||
DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau
|
DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau
|
||||||
{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
|
||||||
setSingleChoiceItems()}.</p>
|
setSingleChoiceItems()}.</p>
|
||||||
|
|
||||||
<p>Misalnya, berikut ini cara membuat daftar pilihan ganda seperti
|
<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
|
// If the user checked the item, add it to the selected items
|
||||||
mSelectedItems.add(which);
|
mSelectedItems.add(which);
|
||||||
} else if (mSelectedItems.contains(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));
|
mSelectedItems.remove(Integer.valueOf(which));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|||||||
|
|
||||||
<p>Walaupun daftar tradisional maupun daftar dengan tombol radio
|
<p>Walaupun daftar tradisional maupun daftar dengan tombol radio
|
||||||
menyediakan tindakan "pilihan tunggal", Anda harus menggunakan {@link
|
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.
|
setSingleChoiceItems()} jika ingin mempertahankan pilihan pengguna.
|
||||||
Yakni, jika nanti membuka dialog lagi untuk menunjukkan pilihan pengguna,
|
Yakni, jika nanti membuka dialog lagi untuk menunjukkan pilihan pengguna,
|
||||||
maka Anda perlu membuat daftar dengan tombol radio.</p>
|
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>
|
gaya font yang cocok.</p>
|
||||||
|
|
||||||
<p>Untuk memekarkan layout dalam {@link android.support.v4.app.DialogFragment} Anda,
|
<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.app.Activity#getLayoutInflater()} dan panggil
|
||||||
{@link android.view.LayoutInflater#inflate inflate()}, dengan parameter pertama
|
{@link android.view.LayoutInflater#inflate inflate()}, dengan parameter pertama
|
||||||
adalah ID sumber daya layout dan parameter kedua adalah tampilan induk untuk layout.
|
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) {
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
LoginDialogFragment.this.getDialog().cancel();
|
LoginDialogFragment.this.getDialog().cancel();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
@@ -505,7 +505,7 @@ antarmuka yang akan digunakan untuk mengirim kembali suatu kejadian ke aktivitas
|
|||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
public class NoticeDialogFragment extends DialogFragment {
|
public class NoticeDialogFragment extends DialogFragment {
|
||||||
|
|
||||||
/* The activity that creates an instance of this dialog fragment must
|
/* The activity that creates an instance of this dialog fragment must
|
||||||
* implement this interface in order to receive event callbacks.
|
* implement this interface in order to receive event callbacks.
|
||||||
* Each method passes the DialogFragment in case the host needs to query it. */
|
* 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 onDialogPositiveClick(DialogFragment dialog);
|
||||||
public void onDialogNegativeClick(DialogFragment dialog);
|
public void onDialogNegativeClick(DialogFragment dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use this instance of the interface to deliver action events
|
// Use this instance of the interface to deliver action events
|
||||||
NoticeDialogListener mListener;
|
NoticeDialogListener mListener;
|
||||||
|
|
||||||
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
|
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onAttach(Activity activity) {
|
||||||
@@ -543,7 +543,7 @@ melalui implementasi antarmuka {@code NoticeDialogListener}:</p>
|
|||||||
public class MainActivity extends FragmentActivity
|
public class MainActivity extends FragmentActivity
|
||||||
implements NoticeDialogFragment.NoticeDialogListener{
|
implements NoticeDialogFragment.NoticeDialogListener{
|
||||||
...
|
...
|
||||||
|
|
||||||
public void showNoticeDialog() {
|
public void showNoticeDialog() {
|
||||||
// Create an instance of the dialog fragment and show it
|
// Create an instance of the dialog fragment and show it
|
||||||
DialogFragment dialog = new NoticeDialogFragment();
|
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}
|
<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
|
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
|
bisa ditanamkan, Anda harus mendefinisikan dialog UI dalam layout, lalu memuat layout itu dalam metode callback
|
||||||
{@link android.support.v4.app.DialogFragment#onCreateView
|
{@link android.support.v4.app.DialogFragment#onCreateView
|
||||||
onCreateView()}.</p>
|
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>
|
dialog maupun fragmen yang bisa ditanamkan (menggunakan layout bernama <code>purchase_items.xml</code>):</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment {
|
|||||||
// Inflate the layout to use as dialog or embedded fragment
|
// Inflate the layout to use as dialog or embedded fragment
|
||||||
return inflater.inflate(R.layout.purchase_items, container, false);
|
return inflater.inflate(R.layout.purchase_items, container, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The system calls this only when creating the layout in a dialog. */
|
/** The system calls this only when creating the layout in a dialog. */
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
@@ -678,7 +678,7 @@ atau UI layar penuh, berdasarkan ukuran layar:</p>
|
|||||||
public void showDialog() {
|
public void showDialog() {
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||||
CustomDialogFragment newFragment = new CustomDialogFragment();
|
CustomDialogFragment newFragment = new CustomDialogFragment();
|
||||||
|
|
||||||
if (mIsLargeLayout) {
|
if (mIsLargeLayout) {
|
||||||
// The device is using a large layout, so show the fragment as a dialog
|
// The device is using a large layout, so show the fragment as a dialog
|
||||||
newFragment.show(fragmentManager, "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>
|
android.support.v4.app.DialogFragment} Anda.</p>
|
||||||
|
|
||||||
<p>Anda juga bisa <em>membatalkan</em> dialog. Ini merupakan kejadian khusus yang menunjukkan bahwa pengguna
|
<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,
|
<em>Back</em>, menyentuh layar di luar area dialog,
|
||||||
atau jika Anda secara eksplisit memanggil {@link android.app.Dialog#cancel()} pada {@link
|
atau jika Anda secara eksplisit memanggil {@link android.app.Dialog#cancel()} pada {@link
|
||||||
android.app.Dialog} (seperti saat merespons tombol "Cancel" dalam dialog).</p>
|
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>
|
tindakan dan opsi lain dalam aktivitas kepada pengguna.</p>
|
||||||
|
|
||||||
<p>Mulai dengan Android 3.0 (API level 11), perangkat berbasis Android tidak perlu lagi
|
<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
|
dependensi pada panel menu 6 item biasa, dan sebagai ganti menyediakan action-bar untuk menyajikan
|
||||||
berbagai tindakan pengguna yang lazim.</p>
|
berbagai tindakan pengguna yang lazim.</p>
|
||||||
|
|
||||||
@@ -83,9 +83,9 @@ tidak memilikinya), sehingga Anda harus bermigrasi ke penggunaan action-bar untu
|
|||||||
opsi lainnya.</p>
|
opsi lainnya.</p>
|
||||||
<p>Lihat bagian tentang <a href="#options-menu">Membuat Menu Opsi</a>.</p>
|
<p>Lihat bagian tentang <a href="#options-menu">Membuat Menu Opsi</a>.</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><strong>Menu konteks dan mode tindakan kontekstual</strong></dt>
|
<dt><strong>Menu konteks dan mode tindakan kontekstual</strong></dt>
|
||||||
|
|
||||||
<dd>Menu konteks adalah <a href="#FloatingContextMenu">menu mengambang</a> yang muncul saat
|
<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
|
pengguna mengklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi konten atau
|
||||||
bingkai konteks yang dipilih.
|
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>
|
memilih beberapa item sekaligus.</p>
|
||||||
<p>Lihat bagian tentang <a href="#context-menu">Membuat Menu Kontekstual</a>.</p>
|
<p>Lihat bagian tentang <a href="#context-menu">Membuat Menu Kontekstual</a>.</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><strong>Menu popup</strong></dt>
|
<dt><strong>Menu popup</strong></dt>
|
||||||
<dd>Menu popup menampilkan daftar item secara vertikal yang dipasang pada tampilan yang
|
<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
|
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>
|
proyek dan buat menu dengan elemen-elemen berikut:</p>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code><menu></code></dt>
|
<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><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>
|
<code><item></code> dan <code><group></code>.</dd>
|
||||||
|
|
||||||
<dt><code><item></code></dt>
|
<dt><code><item></code></dt>
|
||||||
<dd>Membuat {@link android.view.MenuItem}, yang mewakili satu item menu. Elemen ini
|
<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>
|
bisa berisi elemen <code><menu></code> tersarang guna untuk membuat submenu.</dd>
|
||||||
|
|
||||||
<dt><code><group></code></dt>
|
<dt><code><group></code></dt>
|
||||||
<dd>Kontainer opsional tak terlihat untuk elemen-elemen {@code <item>}. Kontainer ini memungkinkan Anda
|
<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
|
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>
|
dalam setiap {@code <item>} yang perlu Anda pindahkan.</p>
|
||||||
|
|
||||||
<p>Untuk menetapkan menu opsi suatu aktivitas, kesampingkan {@link
|
<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
|
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
|
, 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>
|
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
|
<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
|
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
|
sistem akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} saat
|
||||||
memulai aktivitas, untuk menampilkan item menu pada action-bar.</p>
|
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)
|
sistem akan memanggil metode {@link android.app.Activity#onOptionsItemSelected(MenuItem)
|
||||||
onOptionsItemSelected()} aktivitas Anda. Metode ini meneruskan {@link android.view.MenuItem} yang dipilih. Anda
|
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
|
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
|
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>
|
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>
|
{@code true} atau semua fragmen telah dipanggil.</p>
|
||||||
|
|
||||||
<p class="note"><strong>Tip:</strong> Android 3.0 menambahkan kemampuan mendefinisikan perilaku on-click
|
<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 berupa nama metode yang didefinisikan aktivitas dengan menggunakan menu. Metode
|
||||||
harus bersifat publik dan menerima satu parameter {@link android.view.MenuItem}—bila sistem
|
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>
|
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
|
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} hanya untuk membuat
|
||||||
status menu awal dan tidak untuk membuat perubahan selama daur hidup aktivitas.</p>
|
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
|
kejadian yang terjadi selama daur hidup aktivitas, Anda bisa melakukannya dalam metode
|
||||||
{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Metode ini
|
{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Metode ini
|
||||||
meneruskan objek {@link android.view.Menu} sebagaimana adanya saat ini sehingga Anda bisa mengubahnya,
|
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
|
memanggil {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} untuk meminta
|
||||||
sistem memanggil {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p>
|
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
|
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
|
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
|
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>
|
||||||
|
|
||||||
<li>Implementasikan metode {@link
|
<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.
|
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
|
<p>Bila tampilan yang terdaftar menerima kejadian klik-lama, sistem akan memanggil metode {@link
|
||||||
android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
|
android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
|
||||||
@@ -445,7 +445,7 @@ dimekarkan.</p>
|
|||||||
|
|
||||||
<li>Implementasikan {@link android.app.Activity#onContextItemSelected(MenuItem)
|
<li>Implementasikan {@link android.app.Activity#onContextItemSelected(MenuItem)
|
||||||
onContextItemSelected()}.
|
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>
|
tindakan yang sesuai. Misalnya:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -609,7 +609,7 @@ someView.setOnLongClickListener(new View.OnLongClickListener() {
|
|||||||
|
|
||||||
<p>Bila Anda memanggil {@link android.app.Activity#startActionMode startActionMode()}, sistem akan mengembalikan
|
<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
|
{@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}
|
{@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
|
tidak dibuat kembali jika sudah aktif, dengan memeriksa apakah anggota bernilai nol sebelum memulai
|
||||||
mode tindakan.</p>
|
mode tindakan.</p>
|
||||||
@@ -742,8 +742,8 @@ yang menampilkan menu popup:</p>
|
|||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/ic_overflow_holo_dark"
|
android:src="@drawable/ic_overflow_holo_dark"
|
||||||
android:contentDescription="@string/descr_overflow_button"
|
android:contentDescription="@string/descr_overflow_button"
|
||||||
android:onClick="showPopup" />
|
android:onClick="showPopup" />
|
||||||
@@ -1010,7 +1010,7 @@ pertama.</p>
|
|||||||
<p>Anda juga bisa menawarkan layanan aktivitas Anda pada aplikasi lainnya, sehingga
|
<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>
|
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}
|
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
|
dan/atau {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} untuk
|
||||||
kategori filter intent. Misalnya:</p>
|
kategori filter intent. Misalnya:</p>
|
||||||
@@ -1026,6 +1026,6 @@ kategori filter intent. Misalnya:</p>
|
|||||||
<p>Baca selengkapnya tentang penulisan filter intent dalam dokumen
|
<p>Baca selengkapnya tentang penulisan filter intent dalam dokumen
|
||||||
<a href="/guide/components/intents-filters.html">Intent dan Filter Intent</a>.</p>
|
<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
|
<a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note
|
||||||
Pad</a>.</p>
|
Pad</a>.</p>
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Dalam {@link android.app.Notification}, tindakan itu sendiri didefinisikan oleh
|
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.content.Intent} yang memulai
|
||||||
{@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan
|
{@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan
|
||||||
{@link android.app.PendingIntent} dengan gestur, panggil metode
|
{@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
|
android.support.v4.app.NotificationCompat}. Ada
|
||||||
lima level prioritas, mulai dari {@link
|
lima level prioritas, mulai dari {@link
|
||||||
android.support.v4.app.NotificationCompat#PRIORITY_MIN} (-2) hingga {@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
|
prioritas default akan ditetapkan {@link
|
||||||
android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0).
|
android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0).
|
||||||
</p>
|
</p>
|
||||||
<p> Untuk informasi tentang mengatur level prioritas, lihat "Mengatur
|
<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>.
|
Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.
|
||||||
</p>
|
</p>
|
||||||
<!-- ------------------------------------------------------------------------------------------ -->
|
<!-- ------------------------------------------------------------------------------------------ -->
|
||||||
@@ -310,7 +310,7 @@ mBuilder.setStyle(inBoxStyle);
|
|||||||
<!-- ------------------------------------------------------------------------------------------ -->
|
<!-- ------------------------------------------------------------------------------------------ -->
|
||||||
<h2 id="Managing">Mengelola Pemberitahuan</h2>
|
<h2 id="Managing">Mengelola Pemberitahuan</h2>
|
||||||
<p>
|
<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
|
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.
|
pemberitahuan sebelumnya, baik dengan mengubah sebagian nilainya atau dengan menambahkan nilai, atau keduanya.
|
||||||
</p>
|
</p>
|
||||||
@@ -506,7 +506,7 @@ numMessages = 0;
|
|||||||
TaskStackBuilder.create()}.
|
TaskStackBuilder.create()}.
|
||||||
</li>
|
</li>
|
||||||
<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()}.
|
{@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}.
|
||||||
Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam
|
Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam
|
||||||
manifes, back-stack berisi objek {@link android.content.Intent} yang
|
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.
|
tampilan normal dibatasi hingga 64 dp, dan layout tampilan yang diperluas dibatasi hingga 256 dp.
|
||||||
</p>
|
</p>
|
||||||
<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,
|
objek {@link android.widget.RemoteViews} yang memekarkan file layout XML. Kemudian,
|
||||||
sebagai ganti memanggil metode seperti
|
sebagai ganti memanggil metode seperti
|
||||||
{@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()},
|
{@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()},
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ dan elemen <code><LinearLayout></code> membuat kelompok tampilan {@link an
|
|||||||
<pre>
|
<pre>
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<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:layout_height="fill_parent"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
<TextView android:id="@+id/text"
|
<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
|
<p>Untuk mendapatkan panduan lengkap mengenai pembuatan layout UI, lihat <a href="declaring-layout.html">Layout
|
||||||
XML</a>.
|
XML</a>.
|
||||||
|
|
||||||
|
|
||||||
<h2 id="UIComponents">Komponen Antarmuka Pengguna</h2>
|
<h2 id="UIComponents">Komponen Antarmuka Pengguna</h2>
|
||||||
|
|
||||||
<p>Anda tidak harus membuat semua UI menggunakan objek {@link android.view.View} dan {link
|
<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" />
|
<img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" />
|
||||||
<p class="img-caption"><strong>Gambar 1.</strong> Cuplikan layar dari pengaturan
|
<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>
|
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>
|
java.lang.String}.</dd>
|
||||||
</dl>
|
</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>
|
propertinya.</p>
|
||||||
|
|
||||||
<p>Tentu saja, kelas bawaan tidak mengakomodasi setiap kebutuhan dan aplikasi Anda mungkin memerlukan
|
<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>
|
<dt>{@code android:key}</dt>
|
||||||
<dd>Atribut ini diperlukan untuk preferensi yang mempertahankan nilai data. Ini menetapkan kunci
|
<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
|
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
|
<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
|
{@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
|
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>
|
<pre>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_sms_storage_title"
|
android:title="@string/pref_sms_storage_title"
|
||||||
android:key="pref_key_storage_settings">
|
android:key="pref_key_storage_settings">
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
@@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p>
|
|||||||
android:summary="@string/pref_summary_auto_delete"
|
android:summary="@string/pref_summary_auto_delete"
|
||||||
android:title="@string/pref_title_auto_delete"
|
android:title="@string/pref_title_auto_delete"
|
||||||
android:defaultValue="false"... />
|
android:defaultValue="false"... />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="pref_key_sms_delete_limit"
|
android:key="pref_key_sms_delete_limit"
|
||||||
android:dependency="pref_key_auto_delete"
|
android:dependency="pref_key_auto_delete"
|
||||||
android:summary="@string/pref_summary_delete_limit"
|
android:summary="@string/pref_summary_delete_limit"
|
||||||
android:title="@string/pref_title_sms_delete"... />
|
android:title="@string/pref_title_sms_delete"... />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="pref_key_mms_delete_limit"
|
android:key="pref_key_mms_delete_limit"
|
||||||
android:dependency="pref_key_auto_delete"
|
android:dependency="pref_key_auto_delete"
|
||||||
android:summary="@string/pref_summary_delete_limit"
|
android:summary="@string/pref_summary_delete_limit"
|
||||||
@@ -370,12 +370,12 @@ sebagai anak dari elemen {@code <Preference>} yang bersangkutan.</p>
|
|||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt>{@code android:action}</dt>
|
<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>
|
{@link android.content.Intent#setAction setAction()}.</dd>
|
||||||
<dt>{@code android:data}</dt>
|
<dt>{@code android:data}</dt>
|
||||||
<dd>Data yang akan ditetapkan, sesuai metode {@link android.content.Intent#setData setData()}.</dd>
|
<dd>Data yang akan ditetapkan, sesuai metode {@link android.content.Intent#setData setData()}.</dd>
|
||||||
<dt>{@code android:mimeType}</dt>
|
<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>
|
{@link android.content.Intent#setType setType()}.</dd>
|
||||||
<dt>{@code android:targetClass}</dt>
|
<dt>{@code android:targetClass}</dt>
|
||||||
<dd>Bagian kelas dari nama komponen, sesuai metode {@link android.content.Intent#setComponent
|
<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>
|
<pre>
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<header
|
<header
|
||||||
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"
|
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"
|
||||||
android:title="@string/prefs_category_one"
|
android:title="@string/prefs_category_one"
|
||||||
android:summary="@string/prefs_summ_category_one" />
|
android:summary="@string/prefs_summ_category_one" />
|
||||||
<header
|
<header
|
||||||
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"
|
android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"
|
||||||
android:title="@string/prefs_category_two"
|
android:title="@string/prefs_category_two"
|
||||||
android:summary="@string/prefs_summ_category_two" >
|
android:summary="@string/prefs_summ_category_two" >
|
||||||
@@ -672,15 +672,15 @@ android.preference.Preference <Preference>} mengirimkan {@link android.con
|
|||||||
akan dimuat.</p>
|
akan dimuat.</p>
|
||||||
|
|
||||||
<p>Misalnya, ini adalah file XML untuk header preferensi yang menggunakan Android 3.0
|
<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>
|
<pre>
|
||||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<header
|
<header
|
||||||
android:fragment="com.example.prefs.SettingsFragmentOne"
|
android:fragment="com.example.prefs.SettingsFragmentOne"
|
||||||
android:title="@string/prefs_category_one"
|
android:title="@string/prefs_category_one"
|
||||||
android:summary="@string/prefs_summ_category_one" />
|
android:summary="@string/prefs_summ_category_one" />
|
||||||
<header
|
<header
|
||||||
android:fragment="com.example.prefs.SettingsFragmentTwo"
|
android:fragment="com.example.prefs.SettingsFragmentTwo"
|
||||||
android:title="@string/prefs_category_two"
|
android:title="@string/prefs_category_two"
|
||||||
android:summary="@string/prefs_summ_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>
|
<pre>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<Preference
|
<Preference
|
||||||
android:title="@string/prefs_category_one"
|
android:title="@string/prefs_category_one"
|
||||||
android:summary="@string/prefs_summ_category_one" >
|
android:summary="@string/prefs_summ_category_one" >
|
||||||
<intent
|
<intent
|
||||||
android:targetPackage="com.example.prefs"
|
android:targetPackage="com.example.prefs"
|
||||||
android:targetClass="com.example.prefs.SettingsActivity"
|
android:targetClass="com.example.prefs.SettingsActivity"
|
||||||
android:action="com.example.prefs.PREFS_ONE" />
|
android:action="com.example.prefs.PREFS_ONE" />
|
||||||
</Preference>
|
</Preference>
|
||||||
<Preference
|
<Preference
|
||||||
android:title="@string/prefs_category_two"
|
android:title="@string/prefs_category_two"
|
||||||
android:summary="@string/prefs_summ_category_two" >
|
android:summary="@string/prefs_summ_category_two" >
|
||||||
<intent
|
<intent
|
||||||
android:targetPackage="com.example.prefs"
|
android:targetPackage="com.example.prefs"
|
||||||
android:targetClass="com.example.prefs.SettingsActivity"
|
android:targetClass="com.example.prefs.SettingsActivity"
|
||||||
android:action="com.example.prefs.PREFS_TWO" />
|
android:action="com.example.prefs.PREFS_TWO" />
|
||||||
@@ -879,7 +879,7 @@ prefs.registerOnSharedPreferenceChangeListener(
|
|||||||
});
|
});
|
||||||
</pre>
|
</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>
|
objek yang akan ada selama listener dibutuhkan:</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -975,11 +975,11 @@ negatif dan positif default:</p>
|
|||||||
public class NumberPickerPreference extends DialogPreference {
|
public class NumberPickerPreference extends DialogPreference {
|
||||||
public NumberPickerPreference(Context context, AttributeSet attrs) {
|
public NumberPickerPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
|
||||||
setDialogLayoutResource(R.layout.numberpicker_dialog);
|
setDialogLayoutResource(R.layout.numberpicker_dialog);
|
||||||
setPositiveButtonText(android.R.string.ok);
|
setPositiveButtonText(android.R.string.ok);
|
||||||
setNegativeButtonText(android.R.string.cancel);
|
setNegativeButtonText(android.R.string.cancel);
|
||||||
|
|
||||||
setDialogIcon(null);
|
setDialogIcon(null);
|
||||||
}
|
}
|
||||||
...
|
...
|
||||||
@@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) {
|
|||||||
// Cast state to custom BaseSavedState and pass to superclass
|
// Cast state to custom BaseSavedState and pass to superclass
|
||||||
SavedState myState = (SavedState) state;
|
SavedState myState = (SavedState) state;
|
||||||
super.onRestoreInstanceState(myState.getSuperState());
|
super.onRestoreInstanceState(myState.getSuperState());
|
||||||
|
|
||||||
// Set this Preference's widget to reflect the restored state
|
// Set this Preference's widget to reflect the restored state
|
||||||
mNumberPicker.setValue(myState.value);
|
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
|
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
|
kelas dan mengesampingkan metode itu. Akan tetapi, memperluas setiap objek View
|
||||||
untuk menangani kejadian seperti itu tidaklah praktis. Karena itulah kelas View juga berisi
|
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>
|
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,
|
<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}
|
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
|
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>
|
kelas <a href="#EventHandlers">event handler</a>.</p>
|
||||||
@@ -46,28 +46,28 @@ telah didaftarkan dengan listener dipicu oleh interaksi pengguna dengan item dal
|
|||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>onClick()</code></dt>
|
<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
|
Ini dipanggil baik saat pengguna menyentuh item
|
||||||
(bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
|
(bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
|
||||||
menekan tombol "enter" yang sesuai atau menekan trackball.</dd>
|
menekan tombol "enter" yang sesuai atau menekan trackball.</dd>
|
||||||
<dt><code>onLongClick()</code></dt>
|
<dt><code>onLongClick()</code></dt>
|
||||||
<dd>Dari {@link android.view.View.OnLongClickListener}.
|
<dd>Dari {@link android.view.View.OnLongClickListener}.
|
||||||
Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh),
|
Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh),
|
||||||
maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
|
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>
|
menekan serta menahan tombol "enter" yang sesuai atau menekan dan menahan trackball (selama satu detik).</dd>
|
||||||
<dt><code>onFocusChange()</code></dt>
|
<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>
|
Ini dipanggil saat pengguna menyusuri ke atau dari item, dengan menggunakan tombol navigasi atau trackball.</dd>
|
||||||
<dt><code>onKey()</code></dt>
|
<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>
|
Ini dipanggil saat pengguna memfokuskan pada item dan menekan atau melepas tombol fisik pada perangkat.</dd>
|
||||||
<dt><code>onTouch()</code></dt>
|
<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,
|
Ini dipanggil saat pengguna melakukan tindakan yang digolongkan sebagai kejadian sentuh, termasuk penekanan, pelepasan,
|
||||||
atau gerak perpindahan pada layar (dalam batasan item itu).</dd>
|
atau gerak perpindahan pada layar (dalam batasan item itu).</dd>
|
||||||
<dt><code>onCreateContextMenu()</code></dt>
|
<dt><code>onCreateContextMenu()</code></dt>
|
||||||
<dd>Dari {@link android.view.View.OnCreateContextMenuListener}.
|
<dd>Dari {@link android.view.View.OnCreateContextMenuListener}.
|
||||||
Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi
|
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>.
|
tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menu</a>.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</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
|
<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.
|
dan menangani kejadian Anda, implementasikan antarmuka tersarang dalam Aktivitas Anda atau definisikan sebagai kelas anonim.
|
||||||
Kemudian, teruskan satu
|
Kemudian, teruskan satu
|
||||||
instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil
|
instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil
|
||||||
<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>
|
<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>
|
||||||
dan teruskan implementasi {@link android.view.View.OnClickListener OnClickListener} Anda.)</p>
|
dan teruskan implementasi {@link android.view.View.OnClickListener OnClickListener} Anda.)</p>
|
||||||
|
|
||||||
<p>Contoh di bawah menunjukkan cara mendaftarkan on-click listener untuk Button. </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
|
nilai hasil, namun beberapa metode event listener lainnya harus mengembalikan boolean. Sebabnya
|
||||||
bergantung pada kejadian. Untuk sebagian yang mengembalikan boolean, ini sebabnya:</p>
|
bergantung pada kejadian. Untuk sebagian yang mengembalikan boolean, ini sebabnya:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> -
|
<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.
|
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
|
mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
|
||||||
on-click listener lainnya.</li>
|
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.
|
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
|
mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
|
||||||
on-key listener lainnya.</li>
|
on-key listener lainnya.</li>
|
||||||
<li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> -
|
<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
|
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 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
|
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
|
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>
|
lainnya dalam kejadian, seperti gerakan jari, atau kejadian tindakan naik yang akan terjadi.</li>
|
||||||
</ul>
|
</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
|
<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)
|
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)
|
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>
|
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>
|
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
|
<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
|
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
|
<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
|
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>
|
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
|
<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
|
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
|
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>
|
event handler default di View. Pastikan bahwa Anda ingin mengakhiri kejadian saat mengembalikan <em>true</em>.</p>
|
||||||
|
|
||||||
|
|
||||||
<h2 id="EventHandlers">Event Handler</h2>
|
<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.
|
metode callback sebagai event handler default.
|
||||||
Dalam dokumen tentang <a href="{@docRoot}guide/topics/ui/custom-components.html">Komponen
|
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,
|
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#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>
|
<li><code>{@link android.view.View#onFocusChanged}</code> - Dipanggil bila View memperoleh atau kehilangan fokus.</li>
|
||||||
</ul>
|
</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
|
namun bisa berdampak langsung pada kemampuan Anda menangani kejadian. Jadi, saat mengelola kejadian yang lebih kompleks dalam
|
||||||
layout, pertimbangkanlah metode-metode lain ini:</p>
|
layout, pertimbangkanlah metode-metode lain ini:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent)
|
<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>
|
android.app.Activity} Anda mencegat semua kejadian sentuh sebelum dikirim ke jendela.</li>
|
||||||
<li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)
|
<li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)
|
||||||
ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
|
ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
|
||||||
android.view.ViewGroup} memantau kejadian saat dikirim ke View anak.</li>
|
android.view.ViewGroup} memantau kejadian saat dikirim ke View anak.</li>
|
||||||
<li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean)
|
<li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean)
|
||||||
ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Panggil ini
|
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>
|
android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li>
|
||||||
</ul>
|
</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
|
yang akan menerima input. Akan tetapi jika perangkat memiliki kemampuan sentuh, dan pengguna
|
||||||
mulai berinteraksi dengan antarmuka dengan menyentuhnya, maka Anda tidak perlu lagi
|
mulai berinteraksi dengan antarmuka dengan menyentuhnya, maka Anda tidak perlu lagi
|
||||||
menyorot item, atau memfokuskan pada View tertentu. Karena itu, ada mode
|
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>
|
||||||
<p>
|
<p>
|
||||||
Untuk perangkat berkemampuan sentuh, setelah pengguna menyentuh layar, perangkat
|
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.
|
{@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
|
View lain yang dapat disentuh, seperti tombol, tidak akan difokus bila disentuh; View ini akan
|
||||||
langsung memicu on-click listener bila ditekan.
|
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.
|
dengan antarmuka pengguna tanpa menyentuh layar.
|
||||||
</p>
|
</p>
|
||||||
<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
|
Untuk query status saat ini, Anda bisa memanggil
|
||||||
{@link android.view.View#isInTouchMode} untuk mengetahui apakah perangkat saat ini sedang dalam mode sentuh.
|
{@link android.view.View#isInTouchMode} untuk mengetahui apakah perangkat saat ini sedang dalam mode sentuh.
|
||||||
</p>
|
</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
|
mendefinisikan Button bawah sebagai <var>nextFocusUp</var> (dan sebaliknya), fokus navigasi akan
|
||||||
silih berganti dari atas ke bawah dan bawah ke atas.</p>
|
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.
|
tambahkan atribut XML <code>android:focusable</code> ke View, dalam deklarasi layout Anda.
|
||||||
Atur nilai <var>true</var>. Anda juga bisa mendeklarasikan View
|
Atur nilai <var>true</var>. Anda juga bisa mendeklarasikan View
|
||||||
sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTouchMode</code>.</p>
|
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
|
the framework will take care of measuring, laying out, and drawing the tree
|
||||||
as appropriate.</li>
|
as appropriate.</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on
|
<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.
|
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
|
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
|
sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
|
||||||
oleh aplikasi.</p>
|
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
|
<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
|
||||||
Directory Access</a>.</p>
|
Directory Access</a>.</p>
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ page.image=images/cards/card-n-changes_2x.png
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Bersama fitur dan kemampuan baru, Android N
|
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
|
menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan
|
||||||
dalam aplikasi Anda.
|
dalam aplikasi Anda.
|
||||||
</p>
|
</p>
|
||||||
@@ -482,7 +482,7 @@ JavaVM::AttachCurrentThread from <jni.h>.
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat
|
<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
|
secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
|
||||||
tidak terkelola. Selain itu, <code>CreateUser()</code> dan
|
tidak terkelola. Selain itu, <code>CreateUser()</code> dan
|
||||||
<code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
|
<code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ public static void scheduleJob(Context context) {
|
|||||||
<dd>
|
<dd>
|
||||||
Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code
|
Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code
|
||||||
null} jika tidak ada URI yang memicu pekerjaan (misalnya, pekerjaan
|
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.
|
URI yang berubah lebih dari 50.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ page.image=images/cards/card-nyc_2x.jpg
|
|||||||
<p>
|
<p>
|
||||||
N Developer Preview memperluas {@link android.net.ConnectivityManager}
|
N Developer Preview memperluas {@link android.net.ConnectivityManager}
|
||||||
API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver
|
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
|
preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah
|
||||||
pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
|
pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
|
||||||
data latar belakang.
|
data latar belakang.
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ android:supportsPictureInPicture=["true" | "false"]
|
|||||||
<p class="note">
|
<p class="note">
|
||||||
<strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
|
<strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
|
||||||
mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code>
|
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.
|
mengembalikan nilai true.
|
||||||
</p>
|
</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
|||||||
@@ -739,7 +739,7 @@ Sumber sertifikat CA, bisa salah satu dari
|
|||||||
</dt>
|
</dt>
|
||||||
|
|
||||||
<dd>
|
<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.
|
{@code "SHA-256"} yang didukung.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ memasang Android N Preview SDK, lihat <a href="{@docRoot}preview/setup-sdk.html"
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<p>
|
<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
|
<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
|
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
|
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>
|
<p>
|
||||||
<strong>Tiga tahapan pencapaian pratinjau pertama</strong> memberikan <strong>ujian
|
<strong>Tiga tahapan pencapaian pratinjau pertama</strong> memberikan <strong>ujian
|
||||||
pertama dan lingkungan pengembangan</strong> yang membantu Anda mengidentifikasi
|
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
|
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
|
memberi kami masukan dari Anda tentang fitur dan API serta masalah kompatibilitas file
|
||||||
— untuk semua ini, gunakan <a href="{@docRoot}preview/bug">Issue
|
— untuk semua ini, gunakan <a href="{@docRoot}preview/bug">Issue
|
||||||
@@ -314,8 +314,8 @@ page.tags="preview", "developer", "android"
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk
|
<li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk
|
||||||
Android N</a> memiliki
|
Android N</a> memiliki
|
||||||
petunjuk langkah demi langkah untuk memulai.</li>
|
petunjuk langkah demi langkah untuk memulai.</li>
|
||||||
<li> <a href="{@docRoot}preview/behavior-changes.html">Perubahan
|
<li> <a href="{@docRoot}preview/behavior-changes.html">Perubahan
|
||||||
Perilaku</a> akan menunjukkan kepada Anda bidang-bidang utama untuk diuji.</li>
|
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>
|
<a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
|
||||||
<td width="100%">
|
<td width="100%">
|
||||||
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
|
||||||
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<table>
|
<table>
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ Tracker</a>.</p>
|
|||||||
versi aplikasi multi-APK yang didesain untuk mendukung Vulkan yang lebih rendah pada
|
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
|
perangkat dengan dukungan versi yang lebih tinggi. Saat ini, Google Play Store tidak
|
||||||
menerima unggahan aplikasi yang menggunakan penargetan versi Vulkan. Dukungan ini
|
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
|
Google Play Services versi berikutnya (akan disertakan dalam rilis Developer Preview
|
||||||
mendatang). Perangkat N yang menggunakan Google Play Services 9.0.83 akan
|
mendatang). Perangkat N yang menggunakan Google Play Services 9.0.83 akan
|
||||||
tetap menerima versi Aplikasi yang menargetkan dukungan Vulkan dasar.
|
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
|
<p>Anda bisa mengambil warna mencolok dari gambar dengan metode getter di kelas
|
||||||
<code>Palette</code>, misalnya <code>Palette.getVibrantColor</code>.</p>
|
<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
|
<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> berikut ke
|
||||||
modul aplikasi Anda:</p>
|
modul aplikasi Anda:</p>
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ android.support.v7.widget.RecyclerView.LayoutManager RecyclerView.LayoutManager}
|
|||||||
<h3>Animasi</h3>
|
<h3>Animasi</h3>
|
||||||
|
|
||||||
<p>Animasi untuk menambahkan dan menghapus item diaktifkan secara default di {@link
|
<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
|
{@link android.support.v7.widget.RecyclerView.ItemAnimator RecyclerView.ItemAnimator}dan gunakan
|
||||||
metode {@link android.support.v7.widget.RecyclerView#setItemAnimator RecyclerView.setItemAnimator()}.
|
metode {@link android.support.v7.widget.RecyclerView#setItemAnimator RecyclerView.setItemAnimator()}.
|
||||||
</p>
|
</p>
|
||||||
@@ -253,7 +253,7 @@ dalam layout:</p>
|
|||||||
|
|
||||||
<p>Widget {@link android.support.v7.widget.RecyclerView} dan {@link android.support.v7.widget.CardView}
|
<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
|
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
|
<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> ini ke
|
||||||
modul aplikasi Anda:</p>
|
modul aplikasi Anda:</p>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg
|
|||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<div id="qv">
|
<div id="qv">
|
||||||
<h2>Google Play について</h2>
|
<h2>Google Play について</h2>
|
||||||
<ol style="list-style-type:none;">
|
<ol style="list-style-type:none;">
|
||||||
|
|||||||
@@ -160,4 +160,4 @@ page.metaDescription=アプリとコンテンツを Android Auto に配布しま
|
|||||||
data-query="collection:autolanding"
|
data-query="collection:autolanding"
|
||||||
data-cardSizes="9x6, 6x3x2"
|
data-cardSizes="9x6, 6x3x2"
|
||||||
data-maxResults="6">
|
data-maxResults="6">
|
||||||
</div>
|
</div>
|
||||||
@@ -5,7 +5,7 @@ Xnonavpage=true
|
|||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<div id="qv">
|
<div id="qv">
|
||||||
<h2>公開機能</h2>
|
<h2>公開機能</h2>
|
||||||
<ol>
|
<ol>
|
||||||
|
|||||||
@@ -36,4 +36,4 @@ page.tags="families"
|
|||||||
|
|
||||||
<div class="paging-links" style="padding-top:.75em;">
|
<div class="paging-links" style="padding-top:.75em;">
|
||||||
<a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">次のトピック:オプトイン</a>
|
<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;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div id="qv-wrapper">
|
<div id="qv-wrapper">
|
||||||
<ol id="qv">
|
<ol id="qv">
|
||||||
<h2>本書の内容</h2>
|
<h2>本書の内容</h2>
|
||||||
@@ -106,7 +106,7 @@ page.metaDescription=Designed for Families に関する質問と回答
|
|||||||
</dt>
|
</dt>
|
||||||
|
|
||||||
<dd>
|
<dd>
|
||||||
Designed for Families プログラムにオプトインすると、Google Play はアプリを審査し、ファミリー層に適切かどうか確認します。アプリがすべてのプログラム要件に準拠している場合、公開までの時間は通常よりも長くかかることはないはずです。ただし、Designed for Families 審査で却下された場合、アプリの公開が遅れる可能性があります。
|
Designed for Families プログラムにオプトインすると、Google Play はアプリを審査し、ファミリー層に適切かどうか確認します。アプリがすべてのプログラム要件に準拠している場合、公開までの時間は通常よりも長くかかることはないはずです。ただし、Designed for Families 審査で却下された場合、アプリの公開が遅れる可能性があります。
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>
|
<dt>
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ page.metaDescription=ほんの数ステップで Designed for Families に参加
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="note">
|
<p class="note">
|
||||||
<strong>注:</strong> Designed for Families プログラムで公開されたアプリは Google Play ですべてのユーザーも利用できます。
|
<strong>注:</strong> Designed for Families プログラムで公開されたアプリは Google Play ですべてのユーザーも利用できます。
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -67,4 +67,4 @@ page.metaDescription=ほんの数ステップで Designed for Families に参加
|
|||||||
|
|
||||||
<div class="paging-links" style="padding-top:.75em;">
|
<div class="paging-links" style="padding-top:.75em;">
|
||||||
<a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">次のトピック:よくある質問</a>
|
<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-query="collection:play_dev_guide"
|
||||||
data-cardSizes="9x6"
|
data-cardSizes="9x6"
|
||||||
data-maxResults="1">
|
data-maxResults="1">
|
||||||
</div>
|
</div>
|
||||||
@@ -431,4 +431,4 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
|
|
||||||
<p class="caution">
|
<p class="caution">
|
||||||
<strong>重要: </strong>この制限のため、Auto サポートのプロトタイプの作成に、実働 APK を使用してはなりません。
|
<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>
|
<li><a href="#listing">Google Play</a></li>
|
||||||
|
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h2>テスト</h2>
|
<h2>テスト</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="#test-environment">テスト環境の設定</a></li>
|
<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/quality/tablets.html">タブレットのアプリ品質</a></li>
|
||||||
<li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
|
<li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -70,7 +70,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg
|
|||||||
<th style="width:54px;">
|
<th style="width:54px;">
|
||||||
ID
|
ID
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
|
|
||||||
<th>
|
<th>
|
||||||
説明
|
説明
|
||||||
@@ -1011,4 +1011,4 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
{@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()} を使用して<code>ThreadPolicy</code> に対するポリシー違反の<strong>視覚通知</strong>を有効にします。
|
{@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>
|
<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>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -395,4 +395,4 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
はい。上記の要件は、アプリが Google Play で Android Wear アプリとして識別され、Android Wear ユーザーが発見しやすくなるかどうかのみを判断するものです。アプリが Wear アプリとして承認されなくても、電話やタブレットなどの他のデバイス タイプで利用可能です。ウェアラブル端末へのインストールも可能です。
|
はい。上記の要件は、アプリが 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-query="collection:distribute/googleplay/gettingstarted"
|
||||||
data-sortOrder="-timestamp"
|
data-sortOrder="-timestamp"
|
||||||
data-cardSizes="9x3"
|
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>
|
<h3 id="track_review">5.審査と承認をトラッキングする</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
アプリが上述の Android TV 向けの技術上の基準と品質基準に適合すると、ユーザーはそのアプリを Android TV で活用できるようになります。アプリが基準を満たしていない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
|
アプリが上述の Android TV 向けの技術上の基準と品質基準に適合すると、ユーザーはそのアプリを Android TV で活用できるようになります。アプリが基準を満たしていない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -190,7 +190,7 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<em>承認</em> — アプリが審査され、承認されました。アプリは Android TV ユーザーが直接利用できるようになります。
|
<em>承認</em> — アプリが審査され、承認されました。アプリは Android TV ユーザーが直接利用できるようになります。
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
@@ -207,4 +207,4 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に
|
|||||||
data-query="collection:tvlanding"
|
data-query="collection:tvlanding"
|
||||||
data-cardSizes="9x6, 6x3x2"
|
data-cardSizes="9x6, 6x3x2"
|
||||||
data-maxResults="6">
|
data-maxResults="6">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -196,4 +196,4 @@ page.metaDescription=アプリ、ゲーム、コンテンツを Android Wear に
|
|||||||
data-query="collection:wearlanding"
|
data-query="collection:wearlanding"
|
||||||
data-cardSizes="6x2"
|
data-cardSizes="6x2"
|
||||||
data-maxResults="3">
|
data-maxResults="3">
|
||||||
</div>
|
</div>
|
||||||
@@ -789,4 +789,4 @@ data-maxresults="6">
|
|||||||
data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
|
data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
|
||||||
data-sortOrder="-timestamp"
|
data-sortOrder="-timestamp"
|
||||||
data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
|
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 から提供される世界中のユーザーを活用します。このチェックリストを読んで、お客様の製品を世界中のマーケットに提供する方法の概要を把握してください。
|
page.metaDescription=Android と Google Play から提供される世界中のユーザーを活用します。このチェックリストを読んで、お客様の製品を世界中のマーケットに提供する方法の概要を把握してください。
|
||||||
meta.tags="localizing, publishing, disttools"
|
meta.tags="localizing, publishing, disttools"
|
||||||
page.tags="local, l10n, translation, language"
|
page.tags="local, l10n, translation, language"
|
||||||
page.image=/distribute/images/localization-checklist.jpg
|
page.image=/distribute/images/localization-checklist.jpg
|
||||||
|
|
||||||
@jd:body
|
@jd:body
|
||||||
|
|
||||||
@@ -713,4 +713,4 @@ data-maxresults="6">
|
|||||||
data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
|
data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
|
||||||
data-sortOrder="-timestamp"
|
data-sortOrder="-timestamp"
|
||||||
data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
|
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 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> 通常、アプリケーションは複数のアクティビティで構成されており、各アプリケーションはそれぞれ緩やかにつながっています。
|
<p> 通常、アプリケーションは複数のアクティビティで構成されており、各アプリケーションはそれぞれ緩やかにつながっています。
|
||||||
一般的には、アプリケーションの 1 つのアクティビティが「メイン」アクティビティとして指定され、ユーザーが初めてアプリケーションを起動したときに表示されるのがこのアクティビティになります。
|
一般的には、アプリケーションの 1 つのアクティビティが「メイン」アクティビティとして指定され、ユーザーが初めてアプリケーションを起動したときに表示されるのがこのアクティビティになります。
|
||||||
その後、各アクティビティで別のアクティビティを開始して別の操作を実行できます。
|
その後、各アクティビティで別のアクティビティを開始して別の操作を実行できます。
|
||||||
新しいアクティビティの開始時には、前のアクティビティは停止しますが、そのアクティビティはシステムによってスタック(「バックスタック」)に維持されます
|
新しいアクティビティの開始時には、前のアクティビティは停止しますが、そのアクティビティはシステムによってスタック(「バックスタック」)に維持されます
|
||||||
|
|
||||||
新しいアクティビティが開始すると、それがバックスタックに入ってユーザーに表示されます。
|
新しいアクティビティが開始すると、それがバックスタックに入ってユーザーに表示されます。
|
||||||
バックスタックは「後入れ先出し」の基本的なスタック メカニズムを順守するため、ユーザーが現在のアクティビティを完了して [<em>戻る</em>] ボタンを押すと、そのアクティビティはスタックから消え(破棄され)、前のアクティビティが再開します。
|
バックスタックは「後入れ先出し」の基本的なスタック メカニズムを順守するため、ユーザーが現在のアクティビティを完了して [<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