diff options
1138 files changed, 18841 insertions, 13668 deletions
diff --git a/Android.mk b/Android.mk index 8c39d19a322f..fb08395dce6c 100644 --- a/Android.mk +++ b/Android.mk @@ -903,7 +903,7 @@ framework_docs_SDK_REL_ID:=1 framework_docs_LOCAL_DROIDDOC_OPTIONS += \ -hdf sdk.codename N \ - -hdf sdk.preview.version 2 \ + -hdf sdk.preview.version 5 \ -hdf sdk.version $(framework_docs_SDK_VERSION) \ -hdf sdk.rel.id $(framework_docs_SDK_REL_ID) \ -hdf sdk.preview 1 diff --git a/api/current.txt b/api/current.txt index d3ee682370b9..5263c26258df 100644 --- a/api/current.txt +++ b/api/current.txt @@ -10066,6 +10066,7 @@ package android.content.pm { method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); method public android.content.Intent getIntent(); + method public android.content.Intent getIntents(); method public long getLastChangedTimestamp(); method public java.lang.CharSequence getLongLabel(); method public java.lang.String getPackage(); @@ -10092,6 +10093,7 @@ package android.content.pm { method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); method public android.content.pm.ShortcutInfo.Builder setIntent(android.content.Intent); + method public android.content.pm.ShortcutInfo.Builder setIntents(android.content.Intent[]); method public android.content.pm.ShortcutInfo.Builder setLongLabel(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setRank(int); method public android.content.pm.ShortcutInfo.Builder setShortLabel(java.lang.CharSequence); @@ -10108,6 +10110,7 @@ package android.content.pm { method public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts(); method public int getMaxShortcutCountPerActivity(); method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts(); + method public boolean isRateLimitingActive(); method public void removeAllDynamicShortcuts(); method public void removeDynamicShortcuts(java.util.List<java.lang.String>); method public void reportShortcutUsed(java.lang.String); @@ -10321,7 +10324,7 @@ package android.content.res { } public class Resources { - ctor public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); + ctor public deprecated Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); method public final void finishPreloading(); method public final void flushLayoutCache(); method public android.content.res.XmlResourceParser getAnimation(int) throws android.content.res.Resources.NotFoundException; @@ -10372,7 +10375,7 @@ package android.content.res { method public android.content.res.AssetFileDescriptor openRawResourceFd(int) throws android.content.res.Resources.NotFoundException; method public void parseBundleExtra(java.lang.String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException; method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; - method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); + method public deprecated void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); } public static class Resources.NotFoundException extends java.lang.RuntimeException { diff --git a/api/system-current.txt b/api/system-current.txt index 13ad2d666dcb..07a88252d942 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -10491,6 +10491,7 @@ package android.content.pm { method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); method public android.content.Intent getIntent(); + method public android.content.Intent getIntents(); method public long getLastChangedTimestamp(); method public java.lang.CharSequence getLongLabel(); method public java.lang.String getPackage(); @@ -10517,6 +10518,7 @@ package android.content.pm { method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); method public android.content.pm.ShortcutInfo.Builder setIntent(android.content.Intent); + method public android.content.pm.ShortcutInfo.Builder setIntents(android.content.Intent[]); method public android.content.pm.ShortcutInfo.Builder setLongLabel(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setRank(int); method public android.content.pm.ShortcutInfo.Builder setShortLabel(java.lang.CharSequence); @@ -10533,6 +10535,7 @@ package android.content.pm { method public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts(); method public int getMaxShortcutCountPerActivity(); method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts(); + method public boolean isRateLimitingActive(); method public void removeAllDynamicShortcuts(); method public void removeDynamicShortcuts(java.util.List<java.lang.String>); method public void reportShortcutUsed(java.lang.String); @@ -10760,7 +10763,7 @@ package android.content.res { } public class Resources { - ctor public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); + ctor public deprecated Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); method public final void finishPreloading(); method public final void flushLayoutCache(); method public android.content.res.XmlResourceParser getAnimation(int) throws android.content.res.Resources.NotFoundException; @@ -10811,7 +10814,7 @@ package android.content.res { method public android.content.res.AssetFileDescriptor openRawResourceFd(int) throws android.content.res.Resources.NotFoundException; method public void parseBundleExtra(java.lang.String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException; method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; - method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); + method public deprecated void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); } public static class Resources.NotFoundException extends java.lang.RuntimeException { diff --git a/api/test-current.txt b/api/test-current.txt index c6359dd4d1e9..9256ba431e09 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -10079,6 +10079,7 @@ package android.content.pm { method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); method public android.content.Intent getIntent(); + method public android.content.Intent getIntents(); method public long getLastChangedTimestamp(); method public java.lang.CharSequence getLongLabel(); method public java.lang.String getPackage(); @@ -10105,6 +10106,7 @@ package android.content.pm { method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); method public android.content.pm.ShortcutInfo.Builder setIntent(android.content.Intent); + method public android.content.pm.ShortcutInfo.Builder setIntents(android.content.Intent[]); method public android.content.pm.ShortcutInfo.Builder setLongLabel(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setRank(int); method public android.content.pm.ShortcutInfo.Builder setShortLabel(java.lang.CharSequence); @@ -10122,6 +10124,7 @@ package android.content.pm { method public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts(); method public int getMaxShortcutCountPerActivity(); method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts(); + method public boolean isRateLimitingActive(); method public void removeAllDynamicShortcuts(); method public void removeDynamicShortcuts(java.util.List<java.lang.String>); method public void reportShortcutUsed(java.lang.String); @@ -10335,7 +10338,7 @@ package android.content.res { } public class Resources { - ctor public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); + ctor public deprecated Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); method public final void finishPreloading(); method public final void flushLayoutCache(); method public android.content.res.XmlResourceParser getAnimation(int) throws android.content.res.Resources.NotFoundException; @@ -10386,7 +10389,7 @@ package android.content.res { method public android.content.res.AssetFileDescriptor openRawResourceFd(int) throws android.content.res.Resources.NotFoundException; method public void parseBundleExtra(java.lang.String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException; method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; - method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); + method public deprecated void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); } public static class Resources.NotFoundException extends java.lang.RuntimeException { diff --git a/cmds/bootanimation/audioplay.cpp b/cmds/bootanimation/audioplay.cpp index 8a5c2c6d229c..dbb76dcd27cd 100644 --- a/cmds/bootanimation/audioplay.cpp +++ b/cmds/bootanimation/audioplay.cpp @@ -158,16 +158,32 @@ bool createBufferQueueAudioPlayer(const ChunkFormat* chunkFormat) { SLDataSink audioSnk = {&loc_outmix, NULL}; // create audio player - const SLInterfaceID ids[2] = {SL_IID_BUFFERQUEUE, SL_IID_VOLUME}; - const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; + const SLInterfaceID ids[3] = {SL_IID_BUFFERQUEUE, SL_IID_VOLUME, SL_IID_ANDROIDCONFIGURATION}; + const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk, - 2, ids, req); + 3, ids, req); if (result != SL_RESULT_SUCCESS) { ALOGE("sl CreateAudioPlayer failed with result %d", result); return false; } (void)result; + // Use the System stream for boot sound playback. + SLAndroidConfigurationItf playerConfig; + result = (*bqPlayerObject)->GetInterface(bqPlayerObject, + SL_IID_ANDROIDCONFIGURATION, &playerConfig); + if (result != SL_RESULT_SUCCESS) { + ALOGE("config GetInterface failed with result %d", result); + return false; + } + SLint32 streamType = SL_ANDROID_STREAM_SYSTEM; + result = (*playerConfig)->SetConfiguration(playerConfig, + SL_ANDROID_KEY_STREAM_TYPE, &streamType, sizeof(SLint32)); + if (result != SL_RESULT_SUCCESS) { + ALOGE("SetConfiguration failed with result %d", result); + return false; + } + // realize the player result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE); if (result != SL_RESULT_SUCCESS) { diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl index 9cd70e6d8366..db7d54bd40cf 100644 --- a/core/java/android/app/IWallpaperManager.aidl +++ b/core/java/android/app/IWallpaperManager.aidl @@ -49,7 +49,7 @@ interface IWallpaperManager { /** * Set the live wallpaper. This only affects the system wallpaper. */ - void setWallpaperComponentChecked(in ComponentName name, in String callingPackage); + void setWallpaperComponentChecked(in ComponentName name, in String callingPackage, int userId); /** * Set the live wallpaper. This only affects the system wallpaper. diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 2e37db2fef24..b12ab75a5809 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -3474,6 +3474,8 @@ public class Notification implements Parcelable mN.mSmallIcon = Icon.createWithResource(mContext, mN.icon); } contentView.setImageViewIcon(R.id.icon, mN.mSmallIcon); + contentView.setDrawableParameters(R.id.icon, false /* targetBackground */, + -1 /* alpha */, -1 /* colorFilter */, null /* mode */, mN.iconLevel); processSmallIconColor(mN.mSmallIcon, contentView); } diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 53da4e32eb8a..20cbde176368 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -417,8 +417,14 @@ public class WallpaperManager { * This is returned as an * abstract Drawable that you can install in a View to display whatever * wallpaper the user has currently set. - * - * @return Returns a Drawable object that will draw the wallpaper. + * <p> + * This method can return null if there is no system wallpaper available, if + * wallpapers are not supported in the current user, or if the calling app is not + * permitted to access the system wallpaper. + * + * @return Returns a Drawable object that will draw the system wallpaper, + * or {@code null} if no system wallpaper exists or if the calling application + * is not able to access the wallpaper. */ public Drawable getDrawable() { Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM); @@ -1404,12 +1410,26 @@ public class WallpaperManager { */ @SystemApi public boolean setWallpaperComponent(ComponentName name) { + return setWallpaperComponent(name, UserHandle.myUserId()); + } + + /** + * Set the live wallpaper. + * + * This can only be called by packages with android.permission.SET_WALLPAPER_COMPONENT + * permission. The caller must hold the INTERACT_ACROSS_USERS_FULL permission to change + * another user's wallpaper. + * + * @hide + */ + public boolean setWallpaperComponent(ComponentName name, int userId) { if (sGlobals.mService == null) { Log.w(TAG, "WallpaperService not running"); throw new RuntimeException(new DeadSystemException()); } try { - sGlobals.mService.setWallpaperComponentChecked(name, mContext.getOpPackageName()); + sGlobals.mService.setWallpaperComponentChecked(name, mContext.getOpPackageName(), + userId); return true; } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index c365e9ee9549..d9816a64db3a 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -191,6 +191,14 @@ public class ClipData implements Parcelable { final Intent mIntent; Uri mUri; + /** @hide */ + public Item(Item other) { + mText = other.mText; + mHtmlText = other.mHtmlText; + mIntent = other.mIntent; + mUri = other.mUri; + } + /** * Create an Item consisting of a single block of (possibly styled) text. */ @@ -816,6 +824,11 @@ public class ClipData implements Parcelable { return mItems.get(index); } + /** @hide */ + public void setItemAt(int index, Item item) { + mItems.set(index, item); + } + /** * Prepare this {@link ClipData} to leave an app process. * diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index c140f1bd5ba4..4d9db98587ce 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -2219,6 +2219,22 @@ public class Intent implements Parcelable, Cloneable { "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"; /** + * Broadcast Action: preferred activities have changed *explicitly*. + * + * <p>Note there are cases where a preferred activity is invalidated *implicitly*, e.g. + * when an app is installed or uninstalled, but in such cases this broadcast will *not* + * be sent. + * + * {@link #EXTRA_USER_HANDLE} contains the user ID in question. + * + * @hide + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_PREFERRED_ACTIVITY_CHANGED = + "android.intent.action.ACTION_PREFERRED_ACTIVITY_CHANGED"; + + + /** * Broadcast Action: The current system wallpaper has changed. See * {@link android.app.WallpaperManager} for retrieving the new wallpaper. * This should <em>only</em> be used to determine when the wallpaper diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index 8ea77d6428a8..54f1b7672c31 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -19,6 +19,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; +import android.app.TaskStackBuilder; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -652,7 +653,7 @@ public final class ShortcutInfo implements Parcelable { /** @hide */ public static IllegalArgumentException getInvalidIconException() { return new IllegalArgumentException("Unsupported icon type:" - +" only bitmap, resource and content URI are supported"); + +" only the bitmap and resource types are supported"); } /** @@ -920,6 +921,19 @@ public final class ShortcutInfo implements Parcelable { } /** + * Sets multiple intents instead of a single intent. + * + * @see Builder#setIntent(Intent) + * @see ShortcutInfo#getIntents() + * @see Context#startActivities(Intent[]) + * @see TaskStackBuilder + */ + @NonNull + public Builder setIntents(@NonNull Intent[] intents) { + throw new RuntimeException("NOT SUPPORTED YET"); + } + + /** * "Rank" of a shortcut, which is a non-negative value that's used by the launcher app * to sort shortcuts. * @@ -1084,7 +1098,7 @@ public final class ShortcutInfo implements Parcelable { } /** - * Return the intent. + * Return the intent. (Or the last intent set with {@link Builder#setIntents(Intent[])}. * * <p>Launcher applications <b>cannot</b> see the intent. If a {@link ShortcutInfo} is * obtained via {@link LauncherApps}, then this method will always return null. @@ -1104,6 +1118,20 @@ public final class ShortcutInfo implements Parcelable { } /** + * Return the intent set with {@link Builder#setIntents(Intent[])}. + * + * <p>Launcher applications <b>cannot</b> see the intents. If a {@link ShortcutInfo} is + * obtained via {@link LauncherApps}, then this method will always return null. + * Launchers can only start a shortcut intent with {@link LauncherApps#startShortcut}. + * + * @see Builder#setIntents(Intent[]) + */ + @Nullable + public Intent getIntents() { + throw new RuntimeException("NOT SUPPORTED YET"); + } + + /** * Return "raw" intent, which is the original intent without the extras. * @hide */ diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java index f6c0be07db84..cfd3442cc07b 100644 --- a/core/java/android/content/pm/ShortcutManager.java +++ b/core/java/android/content/pm/ShortcutManager.java @@ -614,6 +614,20 @@ public class ShortcutManager { } /** + * Return {@code true} when rate-limiting is active for the caller application. + * + * <p>See the class level javadoc for details. + */ + public boolean isRateLimitingActive() { + try { + return mService.getRemainingCallCount(mContext.getPackageName(), injectMyUserId()) + == 0; + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Return the max width for icons, in pixels. */ public int getIconMaxWidth() { diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 8d3940c99e0d..ad113075c96b 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -201,12 +201,16 @@ public class Resources { * Create a new Resources object on top of an existing set of assets in an * AssetManager. * + * @deprecated Resources should not be constructed by apps. + * See {@link android.content.Context#createConfigurationContext(Configuration)}. + * * @param assets Previously created AssetManager. * @param metrics Current display metrics to consider when * selecting/computing resource values. * @param config Desired device configuration to consider when * selecting/computing resource values (optional). */ + @Deprecated public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) { this(null); mResourcesImpl = new ResourcesImpl(assets, metrics, config, new DisplayAdjustments()); @@ -1762,7 +1766,10 @@ public class Resources { /** * Store the newly updated configuration. + * + * @deprecated See {@link android.content.Context#createConfigurationContext(Configuration)}. */ + @Deprecated public void updateConfiguration(Configuration config, DisplayMetrics metrics) { updateConfiguration(config, metrics, null); } diff --git a/core/java/android/hardware/location/ContextHubService.java b/core/java/android/hardware/location/ContextHubService.java index fcbc962f0743..062c9580c1e4 100644 --- a/core/java/android/hardware/location/ContextHubService.java +++ b/core/java/android/hardware/location/ContextHubService.java @@ -166,9 +166,12 @@ public class ContextHubService extends IContextHubService.Stub { msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF); msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF); - if (nativeSendMessage(msgHeader, app.getAppBinary()) != 0) { + int errVal = nativeSendMessage(msgHeader, app.getAppBinary()); + if (errVal != 0) { + Log.e(TAG, "Send Message returns error" + contextHubHandle); return -1; } + // Do not add an entry to mNanoAppInstance Hash yet. The HAL may reject the app return 0; } diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java index 847d82bbd76d..4501f7b089b9 100644 --- a/core/java/android/net/NetworkRequest.java +++ b/core/java/android/net/NetworkRequest.java @@ -284,6 +284,15 @@ public class NetworkRequest implements Parcelable { }; /** + * Returns true iff. the contained NetworkRequest is of type LISTEN. + * + * @hide + */ + public boolean isListen() { + return type == Type.LISTEN; + } + + /** * Returns true iff. the contained NetworkRequest is one that: * * - should be associated with at most one satisfying network diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 4acb729b6a76..1b9e2aa3896a 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -546,6 +546,20 @@ public abstract class BatteryStats implements Parcelable { */ public abstract long getTimeAtCpuSpeed(int cluster, int step, int which); + /** + * Returns the number of times this UID woke up the Application Processor to + * process a mobile radio packet. + * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. + */ + public abstract long getMobileRadioApWakeupCount(int which); + + /** + * Returns the number of times this UID woke up the Application Processor to + * process a WiFi packet. + * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. + */ + public abstract long getWifiRadioApWakeupCount(int which); + public static abstract class Sensor { /* * FIXME: it's not correct to use this magic value because it @@ -1285,9 +1299,12 @@ public abstract class BatteryStats implements Parcelable { public static final int EVENT_TEMP_WHITELIST = 0x0011; // Event for the screen waking up. public static final int EVENT_SCREEN_WAKE_UP = 0x0012; + // Event for the UID that woke up the application processor. + // Used for wakeups coming from WiFi, modem, etc. + public static final int EVENT_WAKEUP_AP = 0x0013; // Number of event types. - public static final int EVENT_COUNT = 0x0013; + public static final int EVENT_COUNT = 0x0014; // Mask to extract out only the type part of the event. public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH); @@ -1979,13 +1996,13 @@ public abstract class BatteryStats implements Parcelable { public static final String[] HISTORY_EVENT_NAMES = new String[] { "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn", "active", "pkginst", "pkgunin", "alarm", "stats", "inactive", "active", "tmpwhitelist", - "screenwake", + "screenwake", "wakeupap" }; public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] { "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn", "Eac", "Epi", "Epu", "Eal", "Est", "Eai", "Eaa", "Etw", - "Esw", + "Esw", "Ewa" }; /** @@ -3105,20 +3122,22 @@ public abstract class BatteryStats implements Parcelable { final long mobilePacketsTx = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which); final long mobileActiveTime = u.getMobileRadioActiveTime(which); final int mobileActiveCount = u.getMobileRadioActiveCount(which); + final long mobileWakeup = u.getMobileRadioApWakeupCount(which); final long wifiPacketsRx = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which); final long wifiPacketsTx = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which); + final long wifiWakeup = u.getWifiRadioApWakeupCount(which); final long btBytesRx = u.getNetworkActivityBytes(NETWORK_BT_RX_DATA, which); final long btBytesTx = u.getNetworkActivityBytes(NETWORK_BT_TX_DATA, which); if (mobileBytesRx > 0 || mobileBytesTx > 0 || wifiBytesRx > 0 || wifiBytesTx > 0 || mobilePacketsRx > 0 || mobilePacketsTx > 0 || wifiPacketsRx > 0 || wifiPacketsTx > 0 || mobileActiveTime > 0 || mobileActiveCount > 0 - || btBytesRx > 0 || btBytesTx > 0) { + || btBytesRx > 0 || btBytesTx > 0 || mobileWakeup > 0 || wifiWakeup > 0) { dumpLine(pw, uid, category, NETWORK_DATA, mobileBytesRx, mobileBytesTx, wifiBytesRx, wifiBytesTx, mobilePacketsRx, mobilePacketsTx, wifiPacketsRx, wifiPacketsTx, mobileActiveTime, mobileActiveCount, - btBytesRx, btBytesTx); + btBytesRx, btBytesTx, mobileWakeup, wifiWakeup); } // Dump modem controller data, per UID. @@ -4125,6 +4144,9 @@ public abstract class BatteryStats implements Parcelable { final int wifiScanCount = u.getWifiScanCount(which); final long uidWifiRunningTime = u.getWifiRunningTime(rawRealtime, which); + final long mobileWakeup = u.getMobileRadioApWakeupCount(which); + final long wifiWakeup = u.getWifiRadioApWakeupCount(which); + if (mobileRxBytes > 0 || mobileTxBytes > 0 || mobileRxPackets > 0 || mobileTxPackets > 0) { pw.print(prefix); pw.print(" Mobile network: "); @@ -4150,6 +4172,14 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } + if (mobileWakeup > 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" Mobile radio AP wakeups: "); + sb.append(mobileWakeup); + pw.println(sb.toString()); + } + printControllerActivityIfInteresting(pw, sb, prefix + " ", "Modem", u.getModemControllerActivity(), which); @@ -4181,6 +4211,14 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } + if (wifiWakeup > 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" WiFi AP wakeups: "); + sb.append(wifiWakeup); + pw.println(sb.toString()); + } + printControllerActivityIfInteresting(pw, sb, prefix + " ", "WiFi", u.getWifiControllerActivity(), which); diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 84d2c98ba93d..57b40e559ccd 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -1263,6 +1263,7 @@ public class Process { * @hide */ public static final boolean isThreadInProcess(int tid, int pid) { + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); try { if (Os.access("/proc/" + tid + "/task/" + pid, OsConstants.F_OK)) { return true; @@ -1271,6 +1272,9 @@ public class Process { } } catch (Exception e) { return false; + } finally { + StrictMode.setThreadPolicy(oldPolicy); } + } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 765a3a8cd9d4..72420434ec7f 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -6173,44 +6173,6 @@ public final class Settings { public static final String NIGHT_DISPLAY_CUSTOM_END_TIME = "night_display_custom_end_time"; /** - * Behavior of twilight on the device. - * One of {@link #TWILIGHT_MODE_LOCKED_OFF}, {@link #TWILIGHT_MODE_LOCKED_ON} - * or {@link #TWILIGHT_MODE_AUTO}. - * @hide - */ - public static final String TWILIGHT_MODE = "twilight_mode"; - - /** - * Twilight mode always off. - * @hide - */ - public static final int TWILIGHT_MODE_LOCKED_OFF = 0; - - /** - * Twilight mode always on. - * @hide - */ - public static final int TWILIGHT_MODE_LOCKED_ON = 1; - - /** - * Twilight mode auto. - * @hide - */ - public static final int TWILIGHT_MODE_AUTO = 2; - - /** - * Twilight mode auto, temporarily overriden to on. - * @hide - */ - public static final int TWILIGHT_MODE_AUTO_OVERRIDE_OFF = 3; - - /** - * Twilight mode auto, temporarily overriden to off. - * @hide - */ - public static final int TWILIGHT_MODE_AUTO_OVERRIDE_ON = 4; - - /** * Whether brightness should automatically adjust based on twilight state. * @hide */ @@ -6380,7 +6342,11 @@ public final class Settings { PREFERRED_TTY_MODE, ENHANCED_VOICE_PRIVACY_ENABLED, TTY_MODE_ENABLED, - INCALL_POWER_BUTTON_BEHAVIOR + INCALL_POWER_BUTTON_BEHAVIOR, + NIGHT_DISPLAY_CUSTOM_START_TIME, + NIGHT_DISPLAY_CUSTOM_END_TIME, + NIGHT_DISPLAY_AUTO_MODE, + NIGHT_DISPLAY_ACTIVATED }; /** diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index 2a40aeb9111e..2b25b3fef9cc 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -618,7 +618,7 @@ public class AlertController { } } - private void setupTitle(ViewGroup topPanel) { + protected void setupTitle(ViewGroup topPanel) { if (mCustomTitleView != null && mShowTitle) { // Add the custom title view directly to the topPanel layout final LayoutParams lp = new LayoutParams( @@ -701,7 +701,7 @@ public class AlertController { } } - private void setupButtons(ViewGroup buttonPanel) { + protected void setupButtons(ViewGroup buttonPanel) { int BIT_BUTTON_POSITIVE = 1; int BIT_BUTTON_NEGATIVE = 2; int BIT_BUTTON_NEUTRAL = 4; diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 216a4f1c9a44..ca69746784dd 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -118,7 +118,7 @@ interface IBatteryStats { void noteWifiBatchedScanStoppedFromSource(in WorkSource ws); void noteWifiMulticastEnabledFromSource(in WorkSource ws); void noteWifiMulticastDisabledFromSource(in WorkSource ws); - void noteWifiRadioPowerState(int powerState, long timestampNs); + void noteWifiRadioPowerState(int powerState, long timestampNs, int uid); void noteNetworkInterfaceType(String iface, int type); void noteNetworkStatsEnabled(); void noteDeviceIdleMode(int mode, String activeReason, int activeUid); diff --git a/core/java/com/android/internal/app/MicroAlertController.java b/core/java/com/android/internal/app/MicroAlertController.java index 085b2265dfee..00fcd6f42a53 100644 --- a/core/java/com/android/internal/app/MicroAlertController.java +++ b/core/java/com/android/internal/app/MicroAlertController.java @@ -82,4 +82,20 @@ public class MicroAlertController extends AlertController { } } } + + @Override + protected void setupTitle(ViewGroup topPanel) { + super.setupTitle(topPanel); + if (topPanel.getVisibility() == View.GONE) { + topPanel.setVisibility(View.INVISIBLE); + } + } + + @Override + protected void setupButtons(ViewGroup buttonPanel) { + super.setupButtons(buttonPanel); + if (buttonPanel.getVisibility() == View.GONE) { + buttonPanel.setVisibility(View.INVISIBLE); + } + } } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index a1df8c186982..11c1de19bb96 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -108,7 +108,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - private static final int VERSION = 147 + (USE_OLD_HISTORY ? 1000 : 0); + private static final int VERSION = 148 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; @@ -3554,6 +3554,14 @@ public class BatteryStatsImpl extends BatteryStats { mNumConnectivityChange++; } + private void noteMobileRadioApWakeupLocked(final long elapsedRealtimeMillis, + final long uptimeMillis, int uid) { + uid = mapUid(uid); + addHistoryEventLocked(elapsedRealtimeMillis, uptimeMillis, HistoryItem.EVENT_WAKEUP_AP, "", + uid); + getUidStatsLocked(uid).noteMobileRadioApWakeupLocked(); + } + public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) { final long elapsedRealtime = mClocks.elapsedRealtime(); final long uptime = mClocks.uptimeMillis(); @@ -3563,6 +3571,10 @@ public class BatteryStatsImpl extends BatteryStats { powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM || powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH; if (active) { + if (uid > 0) { + noteMobileRadioApWakeupLocked(elapsedRealtime, uptime, uid); + } + mMobileRadioActiveStartTime = realElapsedRealtimeMs = timestampNs / (1000 * 1000); mHistoryCur.states |= HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG; } else { @@ -4239,7 +4251,15 @@ public class BatteryStatsImpl extends BatteryStats { } } - public void noteWifiRadioPowerState(int powerState, long timestampNs) { + private void noteWifiRadioApWakeupLocked(final long elapsedRealtimeMillis, + final long uptimeMillis, int uid) { + uid = mapUid(uid); + addHistoryEventLocked(elapsedRealtimeMillis, uptimeMillis, HistoryItem.EVENT_WAKEUP_AP, "", + uid); + getUidStatsLocked(uid).noteWifiRadioApWakeupLocked(); + } + + public void noteWifiRadioPowerState(int powerState, long timestampNs, int uid) { final long elapsedRealtime = mClocks.elapsedRealtime(); final long uptime = mClocks.uptimeMillis(); if (mWifiRadioPowerState != powerState) { @@ -4247,6 +4267,9 @@ public class BatteryStatsImpl extends BatteryStats { powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM || powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH; if (active) { + if (uid > 0) { + noteWifiRadioApWakeupLocked(elapsedRealtime, uptime, uid); + } mHistoryCur.states |= HistoryItem.STATE_WIFI_RADIO_ACTIVE_FLAG; } else { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_RADIO_ACTIVE_FLAG; @@ -4874,6 +4897,33 @@ public class BatteryStatsImpl extends BatteryStats { return mUidStats; } + private static void detachTimerIfNotNull(BatteryStatsImpl.Timer timer) { + if (timer != null) { + timer.detach(); + } + } + + private static boolean resetTimerIfNotNull(BatteryStatsImpl.Timer timer, + boolean detachIfReset) { + if (timer != null) { + return timer.reset(detachIfReset); + } + return true; + } + + private static void detachLongCounterIfNotNull(LongSamplingCounter counter) { + if (counter != null) { + counter.detach(); + } + } + + private static void resetLongCounterIfNotNull(LongSamplingCounter counter, + boolean detachIfReset) { + if (counter != null) { + counter.reset(detachIfReset); + } + } + /** * The statistics associated with a particular uid. */ @@ -4921,6 +4971,16 @@ public class BatteryStatsImpl extends BatteryStats { LongSamplingCounter mMobileRadioActiveCount; /** + * How many times this UID woke up the Application Processor due to a Mobile radio packet. + */ + private LongSamplingCounter mMobileRadioApWakeupCount; + + /** + * How many times this UID woke up the Application Processor due to a Wifi packet. + */ + private LongSamplingCounter mWifiRadioApWakeupCount; + + /** * The amount of time this uid has kept the WiFi controller in idle, tx, and rx mode. * Can be null if the UID has had no such activity. */ @@ -5629,6 +5689,36 @@ public class BatteryStatsImpl extends BatteryStats { return 0; } + public void noteMobileRadioApWakeupLocked() { + if (mMobileRadioApWakeupCount == null) { + mMobileRadioApWakeupCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + } + mMobileRadioApWakeupCount.addCountLocked(1); + } + + @Override + public long getMobileRadioApWakeupCount(int which) { + if (mMobileRadioApWakeupCount != null) { + return mMobileRadioApWakeupCount.getCountLocked(which); + } + return 0; + } + + public void noteWifiRadioApWakeupLocked() { + if (mWifiRadioApWakeupCount == null) { + mWifiRadioApWakeupCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + } + mWifiRadioApWakeupCount.addCountLocked(1); + } + + @Override + public long getWifiRadioApWakeupCount(int which) { + if (mWifiRadioApWakeupCount != null) { + return mWifiRadioApWakeupCount.getCountLocked(which); + } + return 0; + } + void initNetworkActivityLocked() { mNetworkByteActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES]; mNetworkPacketActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES]; @@ -5671,24 +5761,14 @@ public class BatteryStatsImpl extends BatteryStats { active |= !mWifiMulticastTimer.reset(false); active |= mWifiMulticastEnabled; } - if (mAudioTurnedOnTimer != null) { - active |= !mAudioTurnedOnTimer.reset(false); - } - if (mVideoTurnedOnTimer != null) { - active |= !mVideoTurnedOnTimer.reset(false); - } - if (mFlashlightTurnedOnTimer != null) { - active |= !mFlashlightTurnedOnTimer.reset(false); - } - if (mCameraTurnedOnTimer != null) { - active |= !mCameraTurnedOnTimer.reset(false); - } - if (mForegroundActivityTimer != null) { - active |= !mForegroundActivityTimer.reset(false); - } - if (mBluetoothScanTimer != null) { - active |= !mBluetoothScanTimer.reset(false); - } + + active |= !resetTimerIfNotNull(mAudioTurnedOnTimer, false); + active |= !resetTimerIfNotNull(mVideoTurnedOnTimer, false); + active |= !resetTimerIfNotNull(mFlashlightTurnedOnTimer, false); + active |= !resetTimerIfNotNull(mCameraTurnedOnTimer, false); + active |= !resetTimerIfNotNull(mForegroundActivityTimer, false); + active |= !resetTimerIfNotNull(mBluetoothScanTimer, false); + if (mProcessStateTimer != null) { for (int i = 0; i < NUM_PROCESS_STATE; i++) { if (mProcessStateTimer[i] != null) { @@ -5749,6 +5829,9 @@ public class BatteryStatsImpl extends BatteryStats { } } + resetLongCounterIfNotNull(mMobileRadioApWakeupCount, false); + resetLongCounterIfNotNull(mWifiRadioApWakeupCount, false); + final ArrayMap<String, Wakelock> wakeStats = mWakelockStats.getMap(); for (int iw=wakeStats.size()-1; iw>=0; iw--) { Wakelock wl = wakeStats.valueAt(iw); @@ -5908,6 +5991,9 @@ public class BatteryStatsImpl extends BatteryStats { } } } + + detachLongCounterIfNotNull(mMobileRadioApWakeupCount); + detachLongCounterIfNotNull(mWifiRadioApWakeupCount); } return !active; @@ -6114,6 +6200,20 @@ public class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } + + if (mMobileRadioApWakeupCount != null) { + out.writeInt(1); + mMobileRadioApWakeupCount.writeToParcel(out); + } else { + out.writeInt(0); + } + + if (mWifiRadioApWakeupCount != null) { + out.writeInt(1); + mWifiRadioApWakeupCount.writeToParcel(out); + } else { + out.writeInt(0); + } } void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) { @@ -6338,6 +6438,18 @@ public class BatteryStatsImpl extends BatteryStats { } else { mCpuClusterSpeed = null; } + + if (in.readInt() != 0) { + mMobileRadioApWakeupCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); + } else { + mMobileRadioApWakeupCount = null; + } + + if (in.readInt() != 0) { + mWifiRadioApWakeupCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); + } else { + mWifiRadioApWakeupCount = null; + } } /** @@ -10348,6 +10460,20 @@ public class BatteryStatsImpl extends BatteryStats { u.mCpuClusterSpeed = null; } + if (in.readInt() != 0) { + u.mMobileRadioApWakeupCount = new LongSamplingCounter(mOnBatteryTimeBase); + u.mMobileRadioApWakeupCount.readSummaryFromParcelLocked(in); + } else { + u.mMobileRadioApWakeupCount = null; + } + + if (in.readInt() != 0) { + u.mWifiRadioApWakeupCount = new LongSamplingCounter(mOnBatteryTimeBase); + u.mWifiRadioApWakeupCount.readSummaryFromParcelLocked(in); + } else { + u.mWifiRadioApWakeupCount = null; + } + int NW = in.readInt(); if (NW > 100) { throw new ParcelFormatException("File corrupt: too many wake locks " + NW); @@ -10708,6 +10834,20 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(0); } + if (u.mMobileRadioApWakeupCount != null) { + out.writeInt(1); + u.mMobileRadioApWakeupCount.writeSummaryFromParcelLocked(out); + } else { + out.writeInt(0); + } + + if (u.mWifiRadioApWakeupCount != null) { + out.writeInt(1); + u.mWifiRadioApWakeupCount.writeSummaryFromParcelLocked(out); + } else { + out.writeInt(0); + } + final ArrayMap<String, Uid.Wakelock> wakeStats = u.mWakelockStats.getMap(); int NW = wakeStats.size(); out.writeInt(NW); diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java index 31ab26fe4eaf..831c64698453 100644 --- a/core/java/com/android/internal/view/FloatingActionMode.java +++ b/core/java/com/android/internal/view/FloatingActionMode.java @@ -26,6 +26,7 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewParent; +import android.util.DisplayMetrics; import com.android.internal.R; import com.android.internal.util.Preconditions; @@ -209,11 +210,9 @@ public class FloatingActionMode extends ActionMode { } private boolean isContentRectWithinBounds() { - mScreenRect.set( - 0, - 0, - mContext.getResources().getDisplayMetrics().widthPixels, - mContext.getResources().getDisplayMetrics().heightPixels); + DisplayMetrics metrics = mContext.getApplicationContext() + .getResources().getDisplayMetrics(); + mScreenRect.set(0, 0, metrics.widthPixels, metrics.heightPixels); return intersectsClosed(mContentRectOnScreen, mScreenRect) && intersectsClosed(mContentRectOnScreen, mViewRectOnScreen); diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java index 594581af8837..66042086e925 100644 --- a/core/java/com/android/internal/widget/FloatingToolbar.java +++ b/core/java/com/android/internal/widget/FloatingToolbar.java @@ -737,7 +737,7 @@ public final class FloatingToolbar { protected void applyTransformation(float interpolatedTime, Transformation t) { int deltaWidth = (int) (interpolatedTime * (targetWidth - startWidth)); setWidth(mContentContainer, startWidth + deltaWidth); - if (isRTL()) { + if (isInRTLMode()) { mContentContainer.setX(left); // Lock the panels in place. @@ -766,7 +766,7 @@ public final class FloatingToolbar { } }; final float overflowButtonStartX = mOverflowButton.getX(); - final float overflowButtonTargetX = isRTL() ? + final float overflowButtonTargetX = isInRTLMode() ? overflowButtonStartX + targetWidth - mOverflowButton.getWidth() : overflowButtonStartX - targetWidth + mOverflowButton.getWidth(); Animation overflowButtonAnimation = new Animation() { @@ -774,7 +774,7 @@ public final class FloatingToolbar { protected void applyTransformation(float interpolatedTime, Transformation t) { float overflowButtonX = overflowButtonStartX + interpolatedTime * (overflowButtonTargetX - overflowButtonStartX); - float deltaContainerWidth = isRTL() ? + float deltaContainerWidth = isInRTLMode() ? 0 : mContentContainer.getWidth() - startWidth; float actualOverflowButtonX = overflowButtonX + deltaContainerWidth; @@ -812,7 +812,7 @@ public final class FloatingToolbar { protected void applyTransformation(float interpolatedTime, Transformation t) { int deltaWidth = (int) (interpolatedTime * (targetWidth - startWidth)); setWidth(mContentContainer, startWidth + deltaWidth); - if (isRTL()) { + if (isInRTLMode()) { mContentContainer.setX(left); // Lock the panels in place. @@ -843,7 +843,7 @@ public final class FloatingToolbar { } }; final float overflowButtonStartX = mOverflowButton.getX(); - final float overflowButtonTargetX = isRTL() ? + final float overflowButtonTargetX = isInRTLMode() ? overflowButtonStartX - startWidth + mOverflowButton.getWidth() : overflowButtonStartX + startWidth - mOverflowButton.getWidth(); Animation overflowButtonAnimation = new Animation() { @@ -851,7 +851,7 @@ public final class FloatingToolbar { protected void applyTransformation(float interpolatedTime, Transformation t) { float overflowButtonX = overflowButtonStartX + interpolatedTime * (overflowButtonTargetX - overflowButtonStartX); - float deltaContainerWidth = isRTL() ? + float deltaContainerWidth = isInRTLMode() ? 0 : mContentContainer.getWidth() - startWidth; float actualOverflowButtonX = overflowButtonX + deltaContainerWidth; @@ -903,7 +903,7 @@ public final class FloatingToolbar { R.string.floating_toolbar_close_overflow_description)); // Update x-coordinates depending on RTL state. - if (isRTL()) { + if (isInRTLMode()) { mContentContainer.setX(mMarginHorizontal); // align left mMainPanel.setX(0); // align left mOverflowButton.setX( // align right @@ -947,7 +947,7 @@ public final class FloatingToolbar { if (hasOverflow()) { // Update x-coordinates depending on RTL state. - if (isRTL()) { + if (isInRTLMode()) { mContentContainer.setX(mMarginHorizontal); // align left mMainPanel.setX(0); // align left mOverflowButton.setX(0); // align left @@ -1087,9 +1087,10 @@ public final class FloatingToolbar { viewTreeObserver.addOnComputeInternalInsetsListener(mInsetsComputer); } - private boolean isRTL() { - return mContext.getResources().getConfiguration().getLayoutDirection() - == View.LAYOUT_DIRECTION_RTL; + private boolean isInRTLMode() { + return mContext.getApplicationInfo().hasRtlSupport() + && mContext.getResources().getConfiguration().getLayoutDirection() + == View.LAYOUT_DIRECTION_RTL; } private boolean hasOverflow() { @@ -1203,7 +1204,7 @@ public final class FloatingToolbar { // The positioning of contents in RTL is wrong when the view is first rendered. // Hide the view and post a runnable to recalculate positions and render the view. // TODO: Investigate why this happens and fix. - if (isRTL()) { + if (isInRTLMode()) { mContentContainer.setAlpha(0); mContentContainer.post(mPreparePopupContentRTLHelper); } diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 0059d4df79f7..d3792ade9965 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -371,7 +371,7 @@ public class LockPatternUtils { return false; } } catch (RemoteException re) { - return true; + return false; } } @@ -464,7 +464,7 @@ public class LockPatternUtils { return false; } } catch (RemoteException re) { - return true; + return false; } } diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java index 8b9d5034b0c2..e84cc279b403 100644 --- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java +++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java @@ -245,7 +245,7 @@ public class ResolverDrawerLayout extends ViewGroup { final float y = ev.getY(); mInitialTouchX = x; mInitialTouchY = mLastTouchY = y; - mOpenOnClick = isListChildUnderClipped(x, y) && mCollapsibleHeight > 0; + mOpenOnClick = isListChildUnderClipped(x, y) && mCollapseOffset > 0; } break; diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index f37fd78f6bdd..48f6b49a14d7 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -787,109 +787,16 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN // exception thrown by ScopedUtfChars return 0; } - size_t keyLength = strlen(key); - ALOGV("%s (key = '%s')", __FUNCTION__, key); - sp<VendorTagDescriptor> vTags = VendorTagDescriptor::getGlobalVendorTagDescriptor(); - - SortedVector<String8> vendorSections; - size_t vendorSectionCount = 0; - - if (vTags != NULL) { - vendorSections = vTags->getAllSectionNames(); - vendorSectionCount = vendorSections.size(); - } - - // First, find the section by the longest string match - const char *section = NULL; - size_t sectionIndex = 0; - size_t sectionLength = 0; - size_t totalSectionCount = ANDROID_SECTION_COUNT + vendorSectionCount; - for (size_t i = 0; i < totalSectionCount; ++i) { - - const char *str = (i < ANDROID_SECTION_COUNT) ? camera_metadata_section_names[i] : - vendorSections[i - ANDROID_SECTION_COUNT].string(); - if (kIsDebug) { - ALOGV("%s: Trying to match against section '%s'", __FUNCTION__, str); - } - if (strstr(key, str) == key) { // key begins with the section name - size_t strLength = strlen(str); - - if (kIsDebug) { - ALOGV("%s: Key begins with section name", __FUNCTION__); - } - - // section name is the longest we've found so far - if (section == NULL || sectionLength < strLength) { - section = str; - sectionIndex = i; - sectionLength = strLength; - - if (kIsDebug) { - ALOGV("%s: Found new best section (%s)", __FUNCTION__, section); - } - } - } - } - - // TODO: Make above get_camera_metadata_section_from_name ? - - if (section == NULL) { - jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", - "Could not find section name for key '%s')", key); - return 0; - } else { - ALOGV("%s: Found matched section '%s' (%zu)", - __FUNCTION__, section, sectionIndex); - } - - // Get the tag name component of the key - const char *keyTagName = key + sectionLength + 1; // x.y.z -> z - if (sectionLength + 1 >= keyLength) { - jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", - "Key length too short for key '%s')", key); - return 0; - } - - // Match rest of name against the tag names in that section only uint32_t tag = 0; - if (sectionIndex < ANDROID_SECTION_COUNT) { - // Match built-in tags (typically android.*) - uint32_t tagBegin, tagEnd; // [tagBegin, tagEnd) - tagBegin = camera_metadata_section_bounds[sectionIndex][0]; - tagEnd = camera_metadata_section_bounds[sectionIndex][1]; - - for (tag = tagBegin; tag < tagEnd; ++tag) { - const char *tagName = get_camera_metadata_tag_name(tag); - - if (strcmp(keyTagName, tagName) == 0) { - ALOGV("%s: Found matched tag '%s' (%d)", - __FUNCTION__, tagName, tag); - break; - } - } - - if (tag == tagEnd) { - jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", - "Could not find tag name for key '%s')", key); - return 0; - } - } else if (vTags != NULL) { - // Match vendor tags (typically com.*) - const String8 sectionName(section); - const String8 tagName(keyTagName); - - status_t res = OK; - if ((res = vTags->lookupTag(tagName, sectionName, &tag)) != OK) { - jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", - "%s: No vendor tag matches key '%s'", __FUNCTION__, key); - return 0; - } + sp<VendorTagDescriptor> vTags = + VendorTagDescriptor::getGlobalVendorTagDescriptor(); + status_t res = CameraMetadata::getTagFromName(key, vTags.get(), &tag); + if (res != OK) { + jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "Could not find tag for key '%s')", key); } - - // TODO: Make above get_camera_metadata_tag_from_name ? - return tag; } diff --git a/core/jni/android_hardware_location_ContextHubService.cpp b/core/jni/android_hardware_location_ContextHubService.cpp index 46f76de87a2f..9515a0e336aa 100644 --- a/core/jni/android_hardware_location_ContextHubService.cpp +++ b/core/jni/android_hardware_location_ContextHubService.cpp @@ -423,7 +423,7 @@ static int startLoadAppTxn(uint64_t appId, int hubHandle) { txnInfo->appInfo.num_mem_ranges = 0; txnInfo->appInfo.version = -1; // Awaited - if (!addTxn(CONTEXT_HUB_LOAD_APP, txnInfo)) { + if (addTxn(CONTEXT_HUB_LOAD_APP, txnInfo) != 0) { return_id(instanceId); free(txnInfo); return -1; @@ -726,6 +726,7 @@ static int handle_os_message(uint32_t msgType, uint32_t hubHandle, if (isValidOsStatus(msg, msgLen, &rsp)) { rsp.result = 0; ALOGW("Context Hub handle %d restarted", hubHandle); + closeTxn(); passOnOsResponse(hubHandle, msgType, &rsp, nullptr, 0); invalidateNanoApps(hubHandle); query_hub_for_apps(ALL_APPS, hubHandle); @@ -1012,10 +1013,12 @@ static jint nativeSendMessage(JNIEnv *env, jobject instance, jintArray header_, if (msgType == CONTEXT_HUB_LOAD_APP) { if (startLoadAppTxn(appId, hubHandle) != 0) { + ALOGW("Cannot Start Load Transaction"); return -1; } } else if (msgType == CONTEXT_HUB_UNLOAD_APP) { if (startUnloadAppTxn(appInstanceHandle) != 0) { + ALOGW("Cannot Start UnLoad Transaction"); return -1; } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 8388f05fd131..4b66f70dfd20 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -49,6 +49,7 @@ <protected-broadcast android:name="android.intent.action.PACKAGE_VERIFIED" /> <protected-broadcast android:name="android.intent.action.PACKAGES_SUSPENDED" /> <protected-broadcast android:name="android.intent.action.PACKAGES_UNSUSPENDED" /> + <protected-broadcast android:name="android.intent.action.ACTION_PREFERRED_ACTIVITY_CHANGED" /> <protected-broadcast android:name="android.intent.action.UID_REMOVED" /> <protected-broadcast android:name="android.intent.action.QUERY_PACKAGE_RESTART" /> <protected-broadcast android:name="android.intent.action.CONFIGURATION_CHANGED" /> diff --git a/core/res/res/layout-watch/alert_dialog_material.xml b/core/res/res/layout-watch/alert_dialog_material.xml index e627d42b5fb4..a8bb204a51ff 100644 --- a/core/res/res/layout-watch/alert_dialog_material.xml +++ b/core/res/res/layout-watch/alert_dialog_material.xml @@ -21,6 +21,7 @@ android:layout_height="match_parent"> <ScrollView android:id="@+id/scrollView" + android:fillViewport="true" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout @@ -33,7 +34,8 @@ android:paddingRight="?dialogPreferredPadding" android:layout_width="match_parent" android:layout_height="wrap_content" - android:id="@+id/topPanel"> + android:id="@+id/topPanel" + android:minHeight="@dimen/dialog_list_padding_top_no_title"> <include android:id="@+id/title_template" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -68,41 +70,33 @@ <!-- Button Panel --> <FrameLayout android:id="@+id/buttonPanel" + android:minHeight="@dimen/dialog_list_padding_bottom_no_buttons" + android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:divider="?android:attr/dividerHorizontal" - android:showDividers="beginning" - android:dividerPadding="0dip" android:orientation="vertical" android:minHeight="@dimen/alert_dialog_button_bar_height" android:paddingBottom="?dialogPreferredPadding" style="?android:attr/buttonBarStyle" - android:layoutDirection="locale" android:measureWithLargestChild="true"> <Button android:id="@+id/button1" android:layout_gravity="start" android:layout_weight="1" - android:layout_marginLeft="?dialogPreferredPadding" - android:layout_marginRight="?dialogPreferredPadding" style="?android:attr/buttonBarButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button3" android:layout_gravity="start" android:layout_weight="1" - android:layout_marginLeft="?dialogPreferredPadding" - android:layout_marginRight="?dialogPreferredPadding" style="?android:attr/buttonBarButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button2" android:layout_gravity="start" android:layout_weight="1" - android:layout_marginLeft="?dialogPreferredPadding" - android:layout_marginRight="?dialogPreferredPadding" style="?android:attr/buttonBarButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index d5c1dd89c71e..923dea192ef2 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimeer tans berging."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android gradeer tans op"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Sommige programme sal dalk nie behoorlik werk voordat die opgradering voltooi is nie"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> gradeer tans op …"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimeer program <xliff:g id="NUMBER_0">%1$d</xliff:g> van <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Berei tans <xliff:g id="APPNAME">%1$s</xliff:g> voor."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Begin programme."</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index a90d0564a692..aca5cc5fa276 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ማከማቻን በማመቻቸት ላá‹á¢"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android በማላቅ ላዠáŠá‹"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"አንዳንድ መተáŒá‰ ሪያዎች ማላበእስኪጠናቀቅ ድረስ በአáŒá‰£á‰¡ ላá‹áˆ°áˆ© á‹á‰½áˆ‹áˆ‰"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> በማላቅ ላá‹â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"መተáŒá‰ ሪያዎች በአáŒá‰£á‰¡ በመጠቀሠላዠ<xliff:g id="NUMBER_0">%1$d</xliff:g> ከ <xliff:g id="NUMBER_1">%2$d</xliff:g> á¡á¡"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g>ን ማዘጋጀትá¢"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"መተáŒá‰ ሪያዎችን በማስጀመሠላá‹á¡á¡"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 10cb7c5fa75d..2d8221f3eafe 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -1116,8 +1116,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Ø¬Ø§Ø±Ù ØªØØ³ÙŠÙ† السعة التخزينية."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"â€Ø¬Ø§Ø±Ù ترقية Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"قد لا تعمل بعض التطبيقات بشكل مناسب إلا بعد انتهاء الترقية"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"جار٠ترقية <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ø¬Ø§Ø±Ù ØªØØ³ÙŠÙ† التطبيق <xliff:g id="NUMBER_0">%1$d</xliff:g> من <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Ø¬Ø§Ø±Ù ØªØØ¶ÙŠØ± <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"بدء التطبيقات."</string> diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml index 53a238b54280..f922c7fca438 100644 --- a/core/res/res/values-az-rAZ/strings.xml +++ b/core/res/res/values-az-rAZ/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"YaddaÅŸ optimallaÅŸdırılır."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android tÉ™kmilləşdirilir"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"GüncÉ™llÉ™nmÉ™ tamamlanana kimi bÉ™zi tÉ™tbiqlÉ™r düzgün iÅŸlÉ™mÉ™yÉ™ bilÉ™r"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> tÉ™kmilləşdirilir…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> É™ddÉ™dÉ™n <xliff:g id="NUMBER_0">%1$d</xliff:g> tÉ™tbiq optimallaşır."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> proqramının hazırlanması."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"TÉ™tbiqlÉ™r baÅŸladılır."</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 54c471004209..d80032016862 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Хранилището Ñе оптимизира."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android Ñе надÑтройва"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ÐÑкои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да не работÑÑ‚ правилно, докато надÑтройването не завърши"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Ñе надÑтройва…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Оптимизира Ñе приложение <xliff:g id="NUMBER_0">%1$d</xliff:g> от <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> Ñе подготвÑ."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ПриложениÑта Ñе Ñтартират."</string> diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml index 292fefd42e44..79ea5864ef05 100644 --- a/core/res/res/values-bn-rBD/strings.xml +++ b/core/res/res/values-bn-rBD/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"সঞà§à¦šà¦¯à¦¼à¦¸à§à¦¥à¦¾à¦¨ অপà§à¦Ÿà¦¿à¦®à¦¾à¦‡à¦œ করা হচà§à¦›à§‡à§·"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android আপগà§à¦°à§‡à¦¡ করা হচà§à¦›à§‡"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"আপগà§à¦°à§‡à¦¡ সমà§à¦ªà¦¨à§à¦¨ না হওয়া পরà§à¦¯à¦¨à§à¦¤ কিছৠঅà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশান সঠিকà¦à¦¾à¦¬à§‡ কাজ নাও করতে পারে"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> আপগà§à¦°à§‡à¦¡ করা হচà§à¦›à§‡â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g>টির মধà§à¦¯à§‡ <xliff:g id="NUMBER_0">%1$d</xliff:g>টি অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশান অপà§à¦Ÿà¦¿à¦®à¦¾à¦‡à¦œ করা হচà§à¦›à§‡à§·"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> পà§à¦°à¦¸à§à¦¤à§à¦¤ করা হচà§à¦›à§‡à§·"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশানগà§à¦²à¦¿ শà§à¦°à§ করা হচà§à¦›à§‡à§·"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 789006818a31..fffcc747d51a 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"S\'està optimitzant l\'emmagatzematge."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android s\'està actualitzant"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Pot ser que algunes aplicacions no funcionin correctament fins que no es completi l\'actualització"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"S\'està actualitzant <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"S\'està optimitzant l\'aplicació <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"S\'està preparant <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"S\'estan iniciant les aplicacions."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index f5e74ce47e7b..e7a7b60f269e 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ProbÃhá optimalizace úložiÅ¡tÄ›."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android se upgraduje"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"PÅ™ed dokonÄenÃm upgradu nemusà nÄ›které aplikace fungovat správnÄ›"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> se upgraduje…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimalizovánà aplikace <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"PÅ™Ãprava aplikace <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"SpouÅ¡tÄ›nà aplikacÃ."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 446c950cb66b..faa11be8ae13 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Lageret optimeres."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android opgraderes"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Nogle apps fungerer muligvis ikke korrekt, før opgraderingen er gennemført"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> opgraderer…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimerer app <xliff:g id="NUMBER_0">%1$d</xliff:g> ud af <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Forbereder <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Ã…bner dine apps."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 25f3912a2087..e98eda737838 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Speicher wird optimiert"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android wird aktualisiert"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Einige Apps funktionieren unter Umständen nicht richtig, bis das Upgrade abgeschlossen ist"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Für <xliff:g id="APPLICATION">%1$s</xliff:g> wird gerade ein Upgrade ausgeführt…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> von <xliff:g id="NUMBER_1">%2$d</xliff:g> wird optimiert..."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> wird vorbereitet"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Apps werden gestartet..."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 3e220da2df44..2ceaa7a5bd77 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Βελτιστοποίηση Î±Ï€Î¿Î¸Î·ÎºÎµÏ…Ï„Î¹ÎºÎ¿Ï Ï‡ÏŽÏου."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Το Android αναβαθμίζεται"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ΟÏισμÎνες εφαÏμογÎÏ‚ ενδÎχεται να μην λειτουÏγοÏν σωστά μÎχÏι την ολοκλήÏωση της αναβάθμισης"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Η εφαÏμογή <xliff:g id="APPLICATION">%1$s</xliff:g> αναβαθμίζεται…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Βελτιστοποίηση της εφαÏμογής <xliff:g id="NUMBER_0">%1$d</xliff:g> από <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Î Ïοετοιμασία <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ΈναÏξη εφαÏμογών."</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 60e9e86c576a..3cf327bacd7a 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimising storage."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android is upgrading"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Some apps may not work properly until the upgrade finishes"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> is upgrading…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimising app <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparing <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Starting apps."</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 60e9e86c576a..3cf327bacd7a 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimising storage."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android is upgrading"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Some apps may not work properly until the upgrade finishes"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> is upgrading…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimising app <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparing <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Starting apps."</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 60e9e86c576a..3cf327bacd7a 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimising storage."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android is upgrading"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Some apps may not work properly until the upgrade finishes"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> is upgrading…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimising app <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparing <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Starting apps."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index c5dc2109a161..0e59e050d04c 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimizando almacenamiento"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android se está actualizando"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Es posible que algunas apps no funcionen correctamente hasta que termine la actualización"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Se está actualizando <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimizando la aplicación <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparando <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Iniciando aplicaciones"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 9e1859bc4df8..946a23a668b9 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimizando almacenamiento."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Actualizando Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Es posible que algunas aplicaciones no funcionen correctamente hasta que finalice la actualización"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> se está actualizando…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimizando aplicación <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>..."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparando <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Iniciando aplicaciones"</string> diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml index 70ee2833719c..cf3cdf7810ec 100644 --- a/core/res/res/values-eu-rES/strings.xml +++ b/core/res/res/values-eu-rES/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Memoria optimizatzen."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android bertsioa berritzen ari gara"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Aplikazio batzuek agian ez dute behar bezala funtzionatuko bertsioa berritzen amaitu arte"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> bertsio-berritzen ari da…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g> aplikazio optimizatzen."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> prestatzen."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Aplikazioak abiarazten."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index aa9c1484b4b2..638b49e0d4e7 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"بهینه‌سازی ÙØ¶Ø§ÛŒ ذخیره‌سازی."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"â€Android Ø¯Ø±ØØ§Ù„ ارتقا است"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"تا پایان ارتقا، ممکن است برخی از برنامه‌ها به‌درستی کار نکنند."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Ø¯Ø±ØØ§Ù„ ارتقا است...."</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"در ØØ§Ù„ بهینه‌سازی برنامهٔ <xliff:g id="NUMBER_0">%1$d</xliff:g> از <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"آماده‌سازی <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"در ØØ§Ù„ آغاز برنامه‌ها."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 1aca741afdc4..75d44f5d3bc2 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimoidaan tallennustilaa."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Androidia päivitetään"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Kaikki sovellukset eivät ehkä toimi oikein, ennen kuin päivitys on valmis."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> päivittyy…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimoidaan sovellusta <xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Valmistellaan: <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Käynnistetään sovelluksia."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 7b194a09ead6..5d4210ac2f7b 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimisation du stockage."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Installation de la m. à niveau d\'Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Il se peut que certaines applications ne fonctionnent pas correctement jusqu\'à ce que la mise à niveau soit terminée"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Mise à niveau de <xliff:g id="APPLICATION">%1$s</xliff:g> en cours…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimisation de l\'application <xliff:g id="NUMBER_0">%1$d</xliff:g> sur <xliff:g id="NUMBER_1">%2$d</xliff:g>…"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Préparation de <xliff:g id="APPNAME">%1$s</xliff:g> en cours…"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Lancement des applications…"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index ff0876e24b76..bbe2223f418e 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimisation du stockage en cours…"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Mise à jour d\'Android…"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Certaines applications peuvent ne pas fonctionner correctement jusqu\'à ce que la mise à jour soit terminée."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Mise à jour de l\'application <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimisation de l\'application <xliff:g id="NUMBER_0">%1$d</xliff:g> sur <xliff:g id="NUMBER_1">%2$d</xliff:g>…"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Préparation de <xliff:g id="APPNAME">%1$s</xliff:g> en cours…"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Lancement des applications…"</string> diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml index abe09ded063d..96fb37c9b7a7 100644 --- a/core/res/res/values-gl-rES/strings.xml +++ b/core/res/res/values-gl-rES/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimizando almacenamento."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Estase actualizando Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"É posible que algunhas aplicacións non funcionen correctamente ata que finalice o proceso de actualización"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Actualizando <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimizando aplicación <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparando <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Iniciando aplicacións."</string> diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml index 1589426d4412..2982c857402d 100644 --- a/core/res/res/values-gu-rIN/strings.xml +++ b/core/res/res/values-gu-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"સંગà«àª°àª¹ ઓપà«àªŸàª¿àª®àª¾àª‡àª કરી રહà«àª¯à«àª‚ છે."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android અપગà«àª°à«‡àª¡ થઈ રહà«àª¯à«àª‚ છે"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"અપગà«àª°à«‡àª¡ સમાપà«àª¤ ન થાય તà«àª¯àª¾àª‚ સà«àª§à«€ કેટલીક àªàªªà«àª²àª¿àª•ેશનો કદાચ યોગà«àª¯ રીતે કામ ન કરે"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> અપગà«àª°à«‡àª¡ થઈ રહી છે…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> માંથી <xliff:g id="NUMBER_0">%1$d</xliff:g> àªàªªà«àª²àª¿àª•ેશન ઓપà«àªŸàª¿àª®àª¾àª‡àª કરી રહà«àª¯à«àª‚ છે."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> તૈયાર કરી રહà«àª¯à«àª‚ છે."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"àªàªªà«àª²àª¿àª•ેશનો શરૂ કરી રહà«àª¯àª¾àª‚ છે."</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 7a81b476863f..722788042ae0 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"मेमोरी ऑपà¥â€à¤Ÿà¤¿à¤®à¤¾à¤‡à¤œà¤¼ हो रही है."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android अपगà¥à¤°à¥‡à¤¡ हो रहा है"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"जब तक अपगà¥à¤°à¥‡à¤¡ पूरा नहीं हो जाता, तब तक संà¤à¤µ है कि कà¥à¤› à¤à¤ªà¥à¤²à¤¿à¤•ेशन ठीक से कारà¥à¤¯ ना करें"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> अपगà¥à¤°à¥‡à¤¡ हो रहा है…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> में से <xliff:g id="NUMBER_0">%1$d</xliff:g> à¤à¤ªà¥à¤¸ अनà¥à¤•ूलित हो रहा है."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> तैयार हो रहा है."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"à¤à¤ªà¥à¤¸ पà¥à¤°à¤¾à¤°à¤‚ठहोने वाले हैं"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 9ff8363156c9..71337e23b6df 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -1047,8 +1047,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimiziranje pohrane."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android se nadograÄ‘uje"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Neke aplikacije možda neće funkcionirati pravilno dok nadogradnja ne zavrÅ¡i"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Nadogradnja aplikacije <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimiziranje aplikacije <xliff:g id="NUMBER_0">%1$d</xliff:g> od <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Pripremanje aplikacije <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Pokretanje aplikacija."</string> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index 76bc42e8c405..94cbd8002675 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ÕŠÕ¡Õ°Õ¥Õ½Õ¿Õ« Ö…ÕºÕ¿Õ«Õ´Õ¡Õ¬Õ¡ÖÕ¸Ö‚Õ´:"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android-Õ¨ Õ¶Õ¸Ö€Õ¡ÖÕ¾Õ¸Ö‚Õ´ Õ§"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Õ€Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ§Õ Õ¸Ö€Õ¸Õ· Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¶Õ¥Ö€ Õ´Õ«Õ¶Õ¹Ö‡ Õ¶Õ¸Ö€Õ¡ÖÕ´Õ¡Õ¶ Õ¡Õ¾Õ¡Ö€Õ¿Õ¨ Õ³Õ«Õ·Õ¿ Õ¹Õ¡Õ·ÕÕ¡Õ¿Õ¥Õ¶"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¨ Õ¶Õ¸Ö€Õ¡ÖÕ¾Õ¸Ö‚Õ´ է…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Õ•ÕºÕ¿Õ«Õ´Õ¡Õ¬Õ¡ÖÕ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ® <xliff:g id="NUMBER_0">%1$d</xliff:g>-Õ¨ <xliff:g id="NUMBER_1">%2$d</xliff:g>-Õ«Ö:"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¨ ÕºÕ¡Õ¿Ö€Õ¡Õ½Õ¿Õ¾Õ¸Ö‚Õ´ Õ§:"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Õ€Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¶Õ¥Ö€Õ¨ Õ´Õ¥Õ¯Õ¶Õ¡Ö€Õ¯Õ¸Ö‚Õ´ Õ¥Õ¶:"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index d780b8c66232..3686cb14b573 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Mengoptimalkan penyimpanan."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android sedang meningkatkan versi"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Beberapa aplikasi mungkin tidak berfungsi dengan baik jika peningkatan versi belum selesai"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Versi <xliff:g id="APPLICATION">%1$s</xliff:g> sedang ditingkatkan…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Mengoptimalkan aplikasi <xliff:g id="NUMBER_0">%1$d</xliff:g> dari <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Menyiapkan <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Memulai aplikasi."</string> diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml index 33b47832be3e..20a5b170bb7c 100644 --- a/core/res/res/values-is-rIS/strings.xml +++ b/core/res/res/values-is-rIS/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"FÃnstillir geymslu."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android er að uppfæra"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Hugsanlega virka sum forrit ekki fyrr en uppfærslunni lýkur"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> uppfærir…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"FÃnstillir forrit <xliff:g id="NUMBER_0">%1$d</xliff:g> af <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Undirbýr <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Ræsir forrit."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index d03b91d69a41..d89bf1b81733 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Ottimizzazione archiviazione."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Aggiornamento di Android in corso"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Alcune app potrebbero non funzionare correttamente fino al completamento dell\'upgrade"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Upgrade dell\'app <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ottimizzazione applicazione <xliff:g id="NUMBER_0">%1$d</xliff:g> di <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> in preparazione."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Avvio applicazioni."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 6df7a0fc3505..69077736c296 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"מתבצעת ×ופטימיזציה של ×”×חסון."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"â€Android מבצע שדרוג"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ייתכן ש×פליקציות מסוימות ×œ× ×™×¤×¢×œ×• כר×וי עד ×¡×™×•× ×”×©×“×¨×•×’"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> מבצעת שדרוג…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"מבצע ×ופטימיזציה של ×פליקציה <xliff:g id="NUMBER_0">%1$d</xliff:g> מתוך <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"מכין ×ת <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"מפעיל ×פליקציות."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index e08520e803be..2327c7222dfb 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ストレージを最é©åŒ–ã—ã¦ã„ã¾ã™ã€‚"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android ã®ã‚¢ãƒƒãƒ—グレードä¸"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"アップグレードãŒå®Œäº†ã™ã‚‹ã¾ã§ä¸€éƒ¨ã®ã‚¢ãƒ—ãƒªãŒæ£å¸¸ã«å‹•作ã—ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"「<xliff:g id="APPLICATION">%1$s</xliff:g>ã€ã‚’アップグレードã—ã¦ã„ã¾ã™â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g>個ä¸<xliff:g id="NUMBER_0">%1$d</xliff:g>個ã®ã‚¢ãƒ—リを最é©åŒ–ã—ã¦ã„ã¾ã™ã€‚"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g>をペアè¨å®šã—ã¦ã„ã¾ã™ã€‚"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"アプリを起動ã—ã¦ã„ã¾ã™ã€‚"</string> diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml index 9ab0f2b20a0d..e22602a2d64e 100644 --- a/core/res/res/values-ka-rGE/strings.xml +++ b/core/res/res/values-ka-rGE/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"მეხსიერების áƒáƒžáƒ¢áƒ˜áƒ›áƒ˜áƒ–ირებáƒ."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android áƒáƒ®áƒáƒš ვერსიáƒáƒ–ე გáƒáƒ“áƒáƒ“ის"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"áƒáƒ®áƒáƒš ვერსიáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•ლის დáƒáƒ¡áƒ ულებáƒáƒ›áƒ“ე, ზáƒáƒ’იერთმრáƒáƒžáƒ›áƒ შეიძლებრáƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒáƒ“ იმუშáƒáƒáƒ¡"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> áƒáƒ®áƒáƒš ვერსიáƒáƒ–ე გáƒáƒ“áƒáƒ“ის…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"მიმდინáƒáƒ ეáƒáƒ‘ს áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ”ბის áƒáƒžáƒ¢áƒ˜áƒ›áƒ˜áƒ–áƒáƒªáƒ˜áƒ. დáƒáƒ¡áƒ ულებულირ<xliff:g id="NUMBER_0">%1$d</xliff:g>, სულ <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"ემზáƒáƒ“ებრ<xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"áƒáƒžáƒ”ბის ჩáƒáƒ თვáƒ"</string> diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml index 49d713919643..88c1136485b3 100644 --- a/core/res/res/values-kk-rKZ/strings.xml +++ b/core/res/res/values-kk-rKZ/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Қойманы оңтайландыру."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android жаңартылуда"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Жаңарту аÑқталғанға дейін кейбір қолданбалар Ð´Ò±Ñ€Ñ‹Ñ Ð¶Ò±Ð¼Ñ‹Ñ Ñ–Ñтемеуі мүмкін"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> жаңартылуда…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> ішінен <xliff:g id="NUMBER_0">%1$d</xliff:g> қолданба оңтайландырылуда."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> дайындалуда."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Қолданбалар Ñ–Ñке қоÑылуда."</string> diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml index 3ffa5612eebb..1bf6ae528e64 100644 --- a/core/res/res/values-km-rKH/strings.xml +++ b/core/res/res/values-km-rKH/strings.xml @@ -1026,8 +1026,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"កំពុងធ្វើឲ្យឧបករណáŸáž•្ទុកមានប្រសិទ្ធភាព។"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android កំពុងអាប់គ្រáŸáž..."</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"កម្មវិធីមួយចំនួនអាចនឹងមិនដំណើរការប្រក្រážáž¸áž“ោះទ០រហូážážŠáž›áŸ‹áž€áž¶ážšáž¢áž¶áž”់គ្រáŸážáž”ញ្ចប់"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> អាប់គ្រáŸážâ€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"ធ្វើ​ឲ្យ​កម្មវិធី​ប្រសើរ​ឡើង <xliff:g id="NUMBER_0">%1$d</xliff:g> នៃ <xliff:g id="NUMBER_1">%2$d</xliff:g> ។"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"កំពុងរៀបចំ <xliff:g id="APPNAME">%1$s</xliff:g>។"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ចាប់ផ្ដើម​កម្មវិធី។"</string> diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml index 7960cbab7a09..99739727bee9 100644 --- a/core/res/res/values-kn-rIN/strings.xml +++ b/core/res/res/values-kn-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ಸಂಗà³à²°à²¹à²£à³†à²¯à²¨à³à²¨à³ ಆಪà³à²Ÿà²¿à²®à³ˆà²¸à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android ಅಪà³â€Œà²—à³à²°à³‡à²¡à³â€Œ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ಅಪà³â€Œà²—à³à²°à³‡à²¡à³ ಮà³à²—ಿಯà³à²µ ತನಕ ಕೆಲವೠಅಪà³à²²à²¿à²•ೇಶನà³â€Œà²—ಳೠಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡದಿರಬಹà³à²¦à³"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> ಅಪà³â€Œà²—à³à²°à³‡à²¡à³ ಆಗà³à²¤à³à²¤à²¿à²¦à³†..."</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> ರಲà³à²²à²¿ <xliff:g id="NUMBER_0">%1$d</xliff:g> ಅಪà³à²²à²¿à²•ೇಶನà³â€Œ ಆಪà³à²Ÿà²¿à²®à³ˆà²¸à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> ಸಿದà³à²§à²ªà²¡à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ಅಪà³à²²à²¿à²•ೇಶನà³â€Œà²—ಳನà³à²¨à³ ಪà³à²°à²¾à²°à²‚à²à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†."</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 2e58e82d899a..8392b8de458e 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ì €ìž¥ì†Œ 최ì í™” 중"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android ì—…ê·¸ë ˆì´ë“œ 중"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"íŠ¹ì • ì•±ì€ ì—…ê·¸ë ˆì´ë“œê°€ 완료ë 때까지 ì œëŒ€ë¡œ ìž‘ë™í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> ì—…ê·¸ë ˆì´ë“œ 중…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"앱 <xliff:g id="NUMBER_1">%2$d</xliff:g>ê°œ 중 <xliff:g id="NUMBER_0">%1$d</xliff:g>ê°œ 최ì í™” 중"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> 준비 중..."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ì•±ì„ ì‹œìž‘í•˜ëŠ” 중입니다."</string> diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml index 5ba942726ba8..367652282208 100644 --- a/core/res/res/values-ky-rKG/strings.xml +++ b/core/res/res/values-ky-rKG/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Сактагыч ыңгайлаштырылууда."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android жаңыртылууда"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Жаңыртуу аÑгына чыкмайынча айрым колдонмолор талаптагыдай иштебей калышы мүмкүн"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> жаңыртылууда..."</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> ичинен <xliff:g id="NUMBER_0">%1$d</xliff:g> колдонмо ыңгайлаштырылууда."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> даÑрдалууда."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Колдонмолорду иштетип баштоо"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index c8e35329ff4b..8d67b18b6b04 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimizuojama saugykla."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"„Android“ naujovinama"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Kai kurios programos gali tinkamai neveikti, kol naujovinimo procesas nebus baigtas"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"„<xliff:g id="APPLICATION">%1$s</xliff:g>“ naujovinama..."</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimizuojama <xliff:g id="NUMBER_0">%1$d</xliff:g> progr. iÅ¡ <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"RuoÅ¡iama „<xliff:g id="APPNAME">%1$s</xliff:g>“."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Paleidžiamos programos."</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index e48261810dcf..d18a59b79ab7 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -1047,8 +1047,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Notiek krÄtuves optimizēšana."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Notiek Android jauninÄÅ¡ana..."</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"KamÄ“r jauninÄÅ¡ana nebÅ«s pabeigta, dažas lietotnes, iespÄ“jams, nedarbosies pareizi."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Notiek lietotnes <xliff:g id="APPLICATION">%1$s</xliff:g> jauninÄÅ¡ana…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Tiek optimizÄ“ta <xliff:g id="NUMBER_0">%1$d</xliff:g>. lietotne no <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Notiek lietotnes <xliff:g id="APPNAME">%1$s</xliff:g> sagatavoÅ¡ana."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Notiek lietotņu palaiÅ¡ana."</string> diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml index 4ebd66bb1ebb..913099045810 100644 --- a/core/res/res/values-mk-rMK/strings.xml +++ b/core/res/res/values-mk-rMK/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Оптимизирање на Ñкладирањето."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android Ñе ажурира"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Ðекои апликации може да не работат правилно додека не Ñе заврши надградбата"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Ñе надградува…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Се оптимизира апликација <xliff:g id="NUMBER_0">%1$d</xliff:g> од <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Се подготвува <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Се Ñтартуваат апликациите."</string> diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml index ac9018cf9559..33764f577625 100644 --- a/core/res/res/values-ml-rIN/strings.xml +++ b/core/res/res/values-ml-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ à´’à´ªàµâ€Œà´±àµà´±à´¿à´®àµˆà´¸àµ ചെയàµà´¯àµà´¨àµà´¨àµ."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android à´…à´ªàµà´—àµà´°àµ‡à´¡àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨àµ"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"à´…à´ªàµâ€Œà´—àµà´°àµ‡à´¡àµ പൂർതàµà´¤à´¿à´¯à´¾à´•àµà´¨àµà´¨à´¤àµ വരെ à´šà´¿à´² ആപàµâ€Œà´¸àµ ശരിയായി à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´šàµà´šàµ‡à´•àµà´•à´¿à´²àµà´²"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> à´…à´ªàµà´—àµà´°àµ‡à´¡àµ ചെയàµà´¯àµà´¨àµà´¨àµâ€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g> / <xliff:g id="NUMBER_1">%2$d</xliff:g> à´…à´ªàµà´²à´¿à´•àµà´•േഷൻ à´“à´ªàµà´±àµà´±à´¿à´®àµˆà´¸àµ ചെയàµà´¯àµà´¨àµà´¨àµ."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨àµ."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"à´…à´ªàµà´²à´¿à´•àµà´•േഷനàµà´•ൾ ആരംà´à´¿à´•àµà´•àµà´¨àµà´¨àµ."</string> diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml index 0b55a7a73ff1..543f4cca8d1b 100644 --- a/core/res/res/values-mn-rMN/strings.xml +++ b/core/res/res/values-mn-rMN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Хадгалалтыг Ñайжруулж байна."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Ðндройдыг дÑвшүүлж байна"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ШинÑчилж дууÑтал зарим апп Ñ…Ñвийн Ð±ÑƒÑ Ð°Ð¶Ð¸Ð»Ð»Ð°Ð¶ болзошгүй"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g>-г Ñайжруулж байна…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g>-н <xliff:g id="NUMBER_0">%1$d</xliff:g> апп-г тохируулж байна."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"БÑлдÑж байна <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Ðпп-г Ñхлүүлж байна."</string> diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml index a1269e19301f..90bbc6b3b427 100644 --- a/core/res/res/values-mr-rIN/strings.xml +++ b/core/res/res/values-mr-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"संचयन ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤ करत आहे."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android शà¥à¤°à¥‡à¤£à¥€à¤¸à¥à¤§à¤¾à¤°à¤¿à¤¤ होत आहे"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"शà¥à¤°à¥‡à¤£à¥€à¤¸à¥à¤§à¤¾à¤°à¤£à¤¾ पूरà¥à¤£ होईपरà¥à¤¯à¤‚त काही अॅपà¥à¤¸ योगà¥à¤¯à¤°à¤¿à¤¤à¥à¤¯à¤¾ कारà¥à¤¯ करणार नाहीत"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> शà¥à¤°à¥‡à¤£à¥€à¤¸à¥à¤§à¤¾à¤°à¤¿à¤¤ करीत आहे…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> पैकी <xliff:g id="NUMBER_0">%1$d</xliff:g> अॅप ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤ करत आहे."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> तयार करीत आहे."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"अॅपà¥à¤¸ पà¥à¤°à¤¾à¤°à¤‚ठकरत आहे."</string> diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml index 3f9e156ff3f0..98f00ccdd802 100644 --- a/core/res/res/values-ms-rMY/strings.xml +++ b/core/res/res/values-ms-rMY/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Mengoptimumkan storan."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android sedang ditingkatkan"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Sesetengah apl mungkin tidak berfungsi dengan betul sehingga peningkatan selesai"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> sedang ditingkatkan…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Mengoptimumkan apl <xliff:g id="NUMBER_0">%1$d</xliff:g> daripada <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Menyediakan <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Memulakan apl."</string> diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml index d7d59021ad44..e95906576c89 100644 --- a/core/res/res/values-my-rMM/strings.xml +++ b/core/res/res/values-my-rMM/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"သá€á€¯á€œá€¾á€±á€¬á€„်မှုအား ပြုပြင်á€á€¼á€„်းá‹"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android ကá€á€¯á€¡á€†á€„့်မြှင့်á€á€„်နေပါသည်"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"အဆင့်မြှင့်á€á€„်á€á€¼á€„်း မပြီးဆုံးသေးသá အá€á€»á€á€¯á€·á€¡á€€á€ºá€•်များကá€á€¯ ကောင်းမွန်စွာအသုံးပြုနá€á€¯á€„်ဦးမည် မဟုá€á€ºá€•ါ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> ကá€á€¯ အဆင့်မြှင့်á€á€„်နေပါသည်…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g> ထဲက အက်ပ်<xliff:g id="NUMBER_1">%2$d</xliff:g>ကá€á€¯ ဆီလျော်အောင် လုပ်နေ"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> အားပြင်ဆင်နေသည်á‹"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"အက်ပ်များကá€á€¯ စá€á€„်နေ"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index d2e4d7162da4..f45d26dfc6c6 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimaliser lagring."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android oppgraderes"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Noen apper fungerer kanskje ikke skikkelig før oppgraderingen er fullført"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> oppgraderes …"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimaliserer app <xliff:g id="NUMBER_0">%1$d</xliff:g> av <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Forbereder <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Starter apper."</string> diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml index b3de0aaec8c4..d657459276e4 100644 --- a/core/res/res/values-ne-rNP/strings.xml +++ b/core/res/res/values-ne-rNP/strings.xml @@ -1030,8 +1030,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"à¤à¤£à¥à¤¡à¤¾à¤°à¤£ अनà¥à¤•ूलन गरà¥à¤¦à¥ˆà¥¤"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android को सà¥à¤¤à¤°à¤µà¥ƒà¤¦à¥à¤§à¤¿ हà¥à¤à¤¦à¥ˆà¤›"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"सà¥à¤¤à¤°à¤µà¥ƒà¤¦à¥à¤§à¤¿ समà¥à¤ªà¤¨à¥à¤¨ नà¤à¤à¤¸à¤®à¥à¤® केही अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—हरू रामà¥à¤°à¤°à¥€ काम नगरà¥à¤¨ सकà¥à¤›à¤¨à¥"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> को सà¥à¤¤à¤°à¤µà¥ƒà¤¦à¥à¤§à¤¿ हà¥à¤à¤¦à¥ˆà¤›â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— अनà¥à¤•à¥à¤² हà¥à¤à¤¦à¥ˆ <xliff:g id="NUMBER_0">%1$d</xliff:g> को <xliff:g id="NUMBER_1">%2$d</xliff:g>।"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> तयारी गरà¥à¤¦à¥ˆà¥¤"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"सà¥à¤°à¥à¤µà¤¾à¤¤ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—हरू।"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index f23d046595dc..b4d9f6e9b6e7 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Opslagruimte wordt geoptimaliseerd."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android wordt geüpgraded"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Sommige apps werken mogelijk pas correct nadat de upgrade is voltooid"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> upgraden…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> van <xliff:g id="NUMBER_1">%2$d</xliff:g> optimaliseren."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> voorbereiden."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Apps starten."</string> diff --git a/core/res/res/values-notround-watch/dimens_material.xml b/core/res/res/values-notround-watch/dimens_material.xml index b02437b5eb6f..9cacb117cf7b 100644 --- a/core/res/res/values-notround-watch/dimens_material.xml +++ b/core/res/res/values-notround-watch/dimens_material.xml @@ -20,4 +20,7 @@ <dimen name="list_item_padding_horizontal_material">16dp</dimen> <dimen name="list_item_padding_start_material">16dp</dimen> <dimen name="list_item_padding_end_material">16dp</dimen> + + <dimen name="dialog_list_padding_top_no_title">8dp</dimen> + <dimen name="dialog_list_padding_bottom_no_buttons">8dp</dimen> </resources> diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml index d96b89eb725e..c84aff7b5ca5 100644 --- a/core/res/res/values-pa-rIN/strings.xml +++ b/core/res/res/values-pa-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ਸਟੋਰੇਜ ਅਨà©à¨•ੂਲ ਕਰ ਰਿਹਾ ਹੈ।"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android ਅੱਪਗà©à¨°à©‡à¨¡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਕà©à¨ à¨à¨ªà¨¾à¨‚ ਅੱਪਗà©à¨°à©‡à¨¡ ਦੇ ਪੂਰੀ ਹੋਣ ਤੱਕ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰਨ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ ਅੱਪਗà©à¨°à©‡à¨¡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g> <xliff:g id="NUMBER_1">%2$d</xliff:g> ਦਾ à¨à¨ª ਅਨà©à¨•ੂਲ ਕਰ ਰਿਹਾ ਹੈ।"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ।"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"à¨à¨ªà¨¸ ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ।"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index dcbf9d042b89..8d0f70793b19 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optymalizacja pamiÄ™ci."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android jest uaktualniany"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Niektóre aplikacje mogÄ… nie dziaÅ‚ać prawidÅ‚owo, dopóki nie zakoÅ„czy siÄ™ aktualizacja."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Uaktualniam aplikacjÄ™ <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optymalizowanie aplikacji <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"PrzygotowujÄ™ aplikacjÄ™ <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Uruchamianie aplikacji."</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 6998871d0d14..dcacac642fc2 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Otimizando o armazenamento."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"O Android está sendo atualizado"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Alguns apps podem não funcionar corretamente até que a atualização seja concluÃda"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> está fazendo upgrade…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Otimizando app <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparando <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Iniciando apps."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 1e96a4d28bca..3acdc91fd171 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"A otimizar o armazenamento."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"O Android está a ser atualizado"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Algumas aplicações podem não funcionar corretamente enquanto a atualização não for concluÃda"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"O <xliff:g id="APPLICATION">%1$s</xliff:g> está a ser atualizado…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"A otimizar a aplicação <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"A preparar o <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"A iniciar aplicações"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 6998871d0d14..dcacac642fc2 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Otimizando o armazenamento."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"O Android está sendo atualizado"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Alguns apps podem não funcionar corretamente até que a atualização seja concluÃda"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> está fazendo upgrade…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Otimizando app <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Preparando <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Iniciando apps."</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 0058858484b8..fa5a188ccf79 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1047,8 +1047,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Se optimizează stocarea."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android face upgrade"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Este posibil ca unele aplicaÈ›ii să nu funcÈ›ioneze corespunzător până când nu se finalizează upgrade-ul"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Se face upgrade pentru <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Se optimizează aplicaÈ›ia <xliff:g id="NUMBER_0">%1$d</xliff:g> din <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Se pregăteÈ™te <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Se pornesc aplicaÈ›iile."</string> diff --git a/core/res/res/values-round-watch/dimens_material.xml b/core/res/res/values-round-watch/dimens_material.xml index db1f1f34638b..f2de4e013a78 100644 --- a/core/res/res/values-round-watch/dimens_material.xml +++ b/core/res/res/values-round-watch/dimens_material.xml @@ -20,4 +20,7 @@ <dimen name="list_item_padding_horizontal_material">@dimen/screen_percentage_15</dimen> <dimen name="list_item_padding_start_material">@dimen/screen_percentage_15</dimen> <dimen name="list_item_padding_end_material">@dimen/screen_percentage_10</dimen> + + <dimen name="dialog_list_padding_top_no_title">@dimen/screen_percentage_15</dimen> + <dimen name="dialog_list_padding_bottom_no_buttons">@dimen/screen_percentage_15</dimen> </resources> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index e202854e5972..67cb5192590b 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð°â€¦"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Обновление Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹ неполадки в работе приложений."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Обновление Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ \"<xliff:g id="APPLICATION">%1$s</xliff:g>\"…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <xliff:g id="NUMBER_0">%1$d</xliff:g> из <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Подготовка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ \"<xliff:g id="APPNAME">%1$s</xliff:g>\"..."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ЗапуÑк приложений."</string> diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml index 9240212eadcc..e68b2a712f4a 100644 --- a/core/res/res/values-si-rLK/strings.xml +++ b/core/res/res/values-si-rLK/strings.xml @@ -1026,8 +1026,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ආචයනය à¶´à·Šâ€à¶»à·à·ƒà·Šà¶à·’කරණය කිරීම."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android à¶‹à¶à·Šà·à·Šâ€à¶»à·šà¶«à·’ කරමින්"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"à¶‹à¶à·Šà·à·Šâ€à¶»à·šà¶«à·’ කිරීම අවසන් වන à¶à·™à¶šà·Š සමහර යෙදුම් නිසි ලෙස à¶šà·Šâ€à¶»à·’ය෠නොකළ à·„à·à¶šà·’ය"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> à¶‹à¶à·Šà·à·Šâ€à¶»à·šà¶«à·’ කරමින්…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> කින් <xliff:g id="NUMBER_0">%1$d</xliff:g> à·€à·à¶±à·’ යෙදුම à¶´à·Šâ€à¶»à·à·ƒà·Šà¶ කරමින්."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> සූදà·à¶±à¶¸à·Š කරමින්."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"යෙදුම් ආරම්භ කරමින්."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index e077075b0258..09401e37ccc6 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimalizuje sa úložisko"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Prebieha inovácia systému Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Niektoré aplikácie môžu správne fungovaÅ¥ až po dokonÄenà inovácie"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> sa inovuje…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Prebieha optimalizácia aplikácie <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Pripravuje sa aplikácia <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Prebieha spúšťanie aplikáciÃ."</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index e1eea815a692..e64ecbde8087 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimiziranje shrambe."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Poteka nadgradnja Androida."</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Nekatere aplikacije morda ne bodo delovale pravilno, dokler ne bo dokonÄana nadgradnja."</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> se nadgrajuje …"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimiranje aplikacije <xliff:g id="NUMBER_0">%1$d</xliff:g> od <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Pripravljanje aplikacije <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Zagon aplikacij."</string> diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml index 5ad7ba4e6561..f7433a488ea3 100644 --- a/core/res/res/values-sq-rAL/strings.xml +++ b/core/res/res/values-sq-rAL/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Po përshtat ruajtjen."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android po përmirësohet"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Disa aplikacione mund të mos funksionojnë si duhet deri sa të përfundojë përmirësimi"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> po përmirësohet…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Po përshtat aplikacionin <xliff:g id="NUMBER_0">%1$d</xliff:g> nga gjithsej <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Po përgatit <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Aplikacionet e fillimit."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 7bfc3ddaf3cb..b68869246682 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -1047,8 +1047,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Меморија Ñе оптимизује."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android Ñе надограђује…"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Ðеке апликације можда неће иÑправно функциониÑати док Ñе надоградња не доврши"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Ñе надограђује…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Оптимизовање апликације <xliff:g id="NUMBER_0">%1$d</xliff:g> од <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Припрема Ñе <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Покретање апликација."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 86733605a083..0fd61b7ec66a 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Lagringsutrymmet optimeras."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android uppgraderas"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"En del appar kanske inte fungerar som de ska innan uppgraderingen har slutförts"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> uppgraderas …"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimerar app <xliff:g id="NUMBER_0">%1$d</xliff:g> av <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> förbereds."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Appar startas."</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 71d9bf75e707..2bde55db4737 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1022,8 +1022,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Inaboresha hifadhi."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Tunasasisha Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Huenda baadhi ya programu zisifanye kazi vizuri hadi itakapomaliza kusasisha"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> inapata toleo jipya…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Inaboresha programu <xliff:g id="NUMBER_0">%1$d</xliff:g> kutoka <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Inaandaa <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Programu zinaanza"</string> diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml index 823286cab455..c73e299d20f8 100644 --- a/core/res/res/values-ta-rIN/strings.xml +++ b/core/res/res/values-ta-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"சேமிபà¯à®ªà®•தà¯à®¤à¯ˆ உகநà¯à®¤à®¤à®¾à®•à¯à®•à¯à®•ிறதà¯."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®•ிறதà¯"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯ வரை, சில பயனà¯à®ªà®¾à®Ÿà¯à®•ள௠சரியாக வேலைசெயà¯à®¯à®¾à®®à®²à¯ போககà¯à®•ூடà¯à®®à¯"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g>஠மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•ிறதà¯â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g> / <xliff:g id="NUMBER_1">%2$d</xliff:g> பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ à®’à®°à¯à®™à¯à®•ிணைகà¯à®•ிறதà¯."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g>à®à®¤à¯ தயாரà¯à®šà¯†à®¯à¯à®•ிறதà¯."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"பயனà¯à®ªà®¾à®Ÿà¯à®•ள௠தொடஙà¯à®•பà¯à®ªà®Ÿà¯à®•ினà¯à®±à®©."</string> diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml index 6218cdfeef0a..d00403216a7c 100644 --- a/core/res/res/values-te-rIN/strings.xml +++ b/core/res/res/values-te-rIN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"నిలà±à°µà°¨à± à°…à°¨à±à°•ూలపరà±à°¸à±à°¤à±‹à°‚ది."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android à°…à°ªà±â€Œà°—à±à°°à±‡à°¡à± à°…à°µà±à°¤à±‹à°‚ది"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"à°…à°ªà±â€Œà°—à±à°°à±‡à°¡à± పూరà±à°¤à°¯à±à°¯à±‡ వరకౠకొనà±à°¨à°¿ à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°²à± సరిగà±à°—à°¾ పని చేయకపోవచà±à°šà±"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g>ని à°…à°ªà±â€Œà°—à±à°°à±‡à°¡à± చేసà±à°¤à±‹à°‚ది…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g>లో <xliff:g id="NUMBER_0">%1$d</xliff:g> à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ à°…à°¨à±à°•ూలీకరిసà±à°¤à±‹à°‚ది."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g>ని సిదà±à°§à°‚ చేసà±à°¤à±‹à°‚ది."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°²à°¨à± à°ªà±à°°à°¾à°°à°‚à°à°¿à°¸à±à°¤à±‹à°‚ది."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 2dfd2e7b1e59..458fc7214315 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพพื้นที่จัดเà¸à¹‡à¸šà¸‚้à¸à¸¡à¸¹à¸¥"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android à¸à¸³à¸¥à¸±à¸‡à¸à¸±à¸›à¹€à¸à¸£à¸”"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"à¹à¸à¸›à¸šà¸²à¸‡à¹à¸à¸›à¸à¸²à¸ˆà¸—ำงานไม่ถูà¸à¸•้à¸à¸‡à¸ˆà¸™à¸à¸§à¹ˆà¸²à¸ˆà¸°à¸à¸±à¸›à¹€à¸à¸£à¸”เสร็จ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"à¸à¸³à¸¥à¸±à¸‡à¸à¸±à¸›à¹€à¸à¸£à¸” <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพà¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชัน <xliff:g id="NUMBER_0">%1$d</xliff:g> จาภ<xliff:g id="NUMBER_1">%2$d</xliff:g> รายà¸à¸²à¸£"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"à¸à¸³à¸¥à¸±à¸‡à¹€à¸•รียม <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•้นà¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชัน"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 855399280406..fbf1f491578f 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Ino-optimize ang storage."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Nag-a-upgrade ang Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Maaaring hindi gumana nang maayos ang ilang app hangga\'t hindi pa natatapos ang pag-upgrade"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Nag-a-upgrade ang <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ino-optimize ang app <xliff:g id="NUMBER_0">%1$d</xliff:g> ng <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Ihinahanda ang <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Sinisimulan ang apps."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 1033e11d4610..119cd6d2e690 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Depolama optimize ediliyor."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android yeni sürüme geçiriliyor"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Yeni sürüme geçiÅŸ iÅŸlemi tamamlanana kadar bazı uygulamalar düzgün çalışmayabilir"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> yeni sürüme geçiriliyor…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g> uygulama optimize ediliyor."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> hazırlanıyor."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Uygulamalar baÅŸlatılıyor"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 21c1e3f0f1ca..f1a7a19b0d63 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1070,8 +1070,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ð°Ð¼â€™Ñті."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android оновлюєтьÑÑ"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"ДеÑкі додатки можуть не працювати належним чином, доки не завершитьÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"Додаток <xliff:g id="APPLICATION">%1$s</xliff:g> оновлюєтьÑÑ…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ <xliff:g id="NUMBER_0">%1$d</xliff:g> з <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Підготовка додатка <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ЗапуÑк програм."</string> diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml index ff99fb00c491..9bf9a016fa7a 100644 --- a/core/res/res/values-ur-rPK/strings.xml +++ b/core/res/res/values-ur-rPK/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"اسٹوریج Ú©Ùˆ Ø¨ÛØªØ±ÛŒÙ† بنایا جا Ø±ÛØ§ ÛÛ’Û”"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"â€Android اپ گریڈ ÛÙˆ Ø±ÛØ§ ÛÛ’"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"اپ گریڈ ختم Ûونے تک شاید Ú©Ú†Ú¾ ایپس ٹھیک Ø·Ø±Ø Ø³Û’ کام Ù†Û Ú©Ø±ÛŒÚº"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> اپ گریڈ ÛÙˆ رÛÛŒ Ûے…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"ایپ <xliff:g id="NUMBER_0">%1$d</xliff:g> از <xliff:g id="NUMBER_1">%2$d</xliff:g> Ú©Ùˆ Ø¨ÛØªØ± بنایا جا Ø±ÛØ§ ÛÛ’Û”"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> تیار ÛÙˆ رÛÛŒ ÛÛ’Û”"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ایپس شروع ÛÙˆ رÛÛŒ Ûیں۔"</string> diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml index 194b506ace46..f4684c799490 100644 --- a/core/res/res/values-uz-rUZ/strings.xml +++ b/core/res/res/values-uz-rUZ/strings.xml @@ -44,7 +44,7 @@ <string name="unknownName" msgid="6867811765370350269">"Noma’lum"</string> <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Ovozli pochta"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> - <string name="mmiError" msgid="5154499457739052907">"Ulanishda xato yoki noto‘g‘ri MMI kodi."</string> + <string name="mmiError" msgid="5154499457739052907">"Tarmoqda xato yoki MMI kod noto‘g‘ri."</string> <string name="mmiFdnError" msgid="5224398216385316471">"Bu amal faqat ruxsat etilgan raqamlar uchun mavjud."</string> <string name="serviceEnabled" msgid="8147278346414714315">"Xizmat yoqildi."</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"Xizmat quyidagi uchun yoqildi:"</string> @@ -143,7 +143,7 @@ <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yo‘naltirilmadi"</string> <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: yo‘naltirilmadi"</string> <string name="fcComplete" msgid="3118848230966886575">"Maxsus kod bajarildi."</string> - <string name="fcError" msgid="3327560126588500777">"Ulanishda muammo yoki maxsus kod xato."</string> + <string name="fcError" msgid="3327560126588500777">"Tarmoqda xato yoki maxsus kod noto‘g‘ri."</string> <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string> <string name="httpError" msgid="7956392511146698522">"Tarmoqda xato yuz berdi."</string> <string name="httpErrorLookup" msgid="4711687456111963163">"URL topilmadi."</string> @@ -985,7 +985,7 @@ <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"%1$s yordamida suratga oling"</string> <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"Suratga olish"</string> <string name="alwaysUse" msgid="4583018368000610438">"Ushbu amaldan standart sifatida foydalanish"</string> - <string name="use_a_different_app" msgid="8134926230585710243">"Boshqa ilovadan foydalanish"</string> + <string name="use_a_different_app" msgid="8134926230585710243">"Boshqa ilova"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Birlamchi sozlamalarni Tizim sozlamalari > Ilovalar > Yuklab olingan menyusidan tozalang."</string> <string name="chooseActivity" msgid="7486876147751803333">"Amalni tanlash"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"USB qurilma uchun ilovani tanlang"</string> @@ -998,16 +998,16 @@ <string name="aerr_report" msgid="5371800241488400617">"Fikr-mulohaza yuborish"</string> <string name="aerr_close" msgid="2991640326563991340">"Yopish"</string> <string name="aerr_mute" msgid="1974781923723235953">"Qurilma o‘chib yonguncha e’tiborsiz qoldirish"</string> - <string name="aerr_wait" msgid="3199956902437040261">"Kuting"</string> + <string name="aerr_wait" msgid="3199956902437040261">"Kutish"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Ilovani yopish"</string> <string name="anr_title" msgid="4351948481459135709"></string> - <string name="anr_activity_application" msgid="8493290105678066167">"<xliff:g id="APPLICATION">%2$s</xliff:g> javob bermayapti"</string> - <string name="anr_activity_process" msgid="1622382268908620314">"<xliff:g id="ACTIVITY">%1$s</xliff:g> javob bermayapti"</string> - <string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> javob bermayapti"</string> + <string name="anr_activity_application" msgid="8493290105678066167">"<xliff:g id="APPLICATION">%2$s</xliff:g> ilovasi javob bermayapti"</string> + <string name="anr_activity_process" msgid="1622382268908620314">"<xliff:g id="ACTIVITY">%1$s</xliff:g> harakati javob bermayapti"</string> + <string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi javob bermayapti"</string> <string name="anr_process" msgid="6156880875555921105">"<xliff:g id="PROCESS">%1$s</xliff:g> ilovasi javob bermayapti"</string> <string name="force_close" msgid="8346072094521265605">"OK"</string> <string name="report" msgid="4060218260984795706">"Xabar berish"</string> - <string name="wait" msgid="7147118217226317732">"Kuting"</string> + <string name="wait" msgid="7147118217226317732">"Kutish"</string> <string name="webpage_unresponsive" msgid="3272758351138122503">"Sahifa javob bermayapti.\n\nUni yopishni xohlaysizmi?"</string> <string name="launch_warning_title" msgid="1547997780506713581">"Ilova qayta yo‘naltirildi"</string> <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> hozirda ishlamoqda"</string> @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Xotira optimallashtirilmoqda."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android yangilanmoqda"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Yangilanish vaqtida ba’zi ilovalar to‘g‘ri ishlamasligi mumkin"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi yangilanmoqda…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ilovalar optimallashtirilmoqda (<xliff:g id="NUMBER_0">%1$d</xliff:g> / <xliff:g id="NUMBER_1">%2$d</xliff:g>)."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> tayyorlanmoqda."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Ilovalar ishga tushirilmoqda."</string> @@ -1317,7 +1316,7 @@ <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB xotira qurilmasi"</string> <string name="storage_usb" msgid="3017954059538517278">"USB xotira"</string> <string name="extract_edit_menu_button" msgid="8940478730496610137">"Tahrirlash"</string> - <string name="data_usage_warning_title" msgid="1955638862122232342">"Ma’lumotlardan foydalanish ogohlantirilishi"</string> + <string name="data_usage_warning_title" msgid="1955638862122232342">"Trafik kam qoldi"</string> <string name="data_usage_warning_body" msgid="6660692274311972007">"Trafik sarfi va sozlamalarni ko‘rish uchun bosing."</string> <string name="data_usage_3g_limit_title" msgid="4361523876818447683">"2G-3G trafik chekloviga yetdi"</string> <string name="data_usage_4g_limit_title" msgid="4609566827219442376">"4G trafik chekloviga yetdi"</string> @@ -1352,7 +1351,7 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer ishga tushirilsinmi?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Qo‘ng‘iroqni qabul qilasizmi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Har doim"</string> - <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bir marta"</string> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Faqat hozir"</string> <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"“%1$s†ishchi profilni qo‘llab-quvvatlamaydi"</string> <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Planshet"</string> <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 4ce86cf5c15b..6d5805450269 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Tối ưu hóa lưu trữ."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android Ä‘ang nâng cấp"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Má»™t số ứng dụng có thể không hoạt động bình thưá»ng cho đến khi nâng cấp xong"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> Ä‘ang nâng cấp…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Äang tối ưu hóa ứng dụng <xliff:g id="NUMBER_0">%1$d</xliff:g> trong tổng số <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Äang chuẩn bị <xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Khởi động ứng dụng."</string> diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml index daeeca2b050d..5c4c632ed5b5 100644 --- a/core/res/res/values-watch/styles_material.xml +++ b/core/res/res/values-watch/styles_material.xml @@ -61,8 +61,13 @@ please see styles_device_defaults.xml. <item name="breakStrategy">balanced</item> </style> + <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar" /> + <!-- Alert dialog button bar button --> <style name="Widget.Material.Button.ButtonBar.AlertDialog" parent="Widget.Material.Button.Borderless.Small"> + <item name="paddingStart">@dimen/list_item_padding_start_material</item> + <item name="paddingEnd">@dimen/list_item_padding_end_material</item> + <item name="drawablePadding">8dp</item> <item name="gravity">center_vertical|left</item> <item name="minWidth">64dp</item> <item name="minHeight">@dimen/alert_dialog_button_bar_height</item> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 3b2abe78a544..69c3f7eff3bc 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"æ£åœ¨ä¼˜åŒ–å˜å‚¨ç©ºé—´ã€‚"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"Android æ£åœ¨å‡çº§"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"在å‡çº§å®Œæˆä¹‹å‰ï¼Œéƒ¨åˆ†åº”用å¯èƒ½æ— 法æ£å¸¸è¿è¡Œ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"æ£åœ¨å‡çº§<xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"æ£åœ¨ä¼˜åŒ–第<xliff:g id="NUMBER_0">%1$d</xliff:g>个应用(共<xliff:g id="NUMBER_1">%2$d</xliff:g>个)。"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"æ£åœ¨å‡†å¤‡å‡çº§<xliff:g id="APPNAME">%1$s</xliff:g>。"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"æ£åœ¨å¯åŠ¨åº”ç”¨ã€‚"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 5aa4648bd048..eb9e2fbc39a0 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"æ£åœ¨å„ªåŒ–儲å˜ç©ºé–“。"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"æ£åœ¨å‡ç´š Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"部分應用程å¼éœ€è¦å®Œæˆå‡ç´šæ–¹å¯æ£å¸¸é‹ä½œ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"「<xliff:g id="APPLICATION">%1$s</xliff:g>ã€æ£åœ¨å‡ç´šâ€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"æ£åœ¨å„ªåŒ–第 <xliff:g id="NUMBER_0">%1$d</xliff:g> å€‹æ‡‰ç”¨ç¨‹å¼ (å…± <xliff:g id="NUMBER_1">%2$d</xliff:g> 個)。"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"æ£åœ¨æº–å‚™ <xliff:g id="APPNAME">%1$s</xliff:g>。"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"æ£åœ¨å•Ÿå‹•應用程å¼ã€‚"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index cd3ee3ab23e5..9bd200215e7d 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"æ£åœ¨å°å„²å˜ç©ºé–“進行最佳化處ç†ã€‚"</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"æ£åœ¨å‡ç´š Android"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"å‡ç´šå®Œæˆå‰ï¼Œéƒ¨åˆ†æ‡‰ç”¨ç¨‹å¼å¯èƒ½ç„¡æ³•æ£å¸¸é‹ä½œ"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"æ£åœ¨å‡ç´šã€Œ<xliff:g id="APPLICATION">%1$s</xliff:g>ã€â€¦"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"æ£åœ¨æœ€ä½³åŒ–第 <xliff:g id="NUMBER_0">%1$d</xliff:g> å€‹æ‡‰ç”¨ç¨‹å¼ (å…± <xliff:g id="NUMBER_1">%2$d</xliff:g> 個)。"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"æ£åœ¨æº–å‚™å‡ç´šã€Œ<xliff:g id="APPNAME">%1$s</xliff:g>ã€ã€‚"</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"æ£åœ¨å•Ÿå‹•應用程å¼ã€‚"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index b00b74584737..cdd071d48b2f 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -1024,8 +1024,7 @@ <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Ikhulisa isitoreji."</string> <string name="android_upgrading_notification_title" msgid="1619393112444671028">"I-Android iyathuthukiswa"</string> <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Ezinye izinhlelo zokusebenza kungenzeka zingasebenzi kahle kuze kuqedwe ukuthuthukiswa"</string> - <!-- no translation found for app_upgrading_toast (3008139776215597053) --> - <skip /> + <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> iyathuthukisa…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ukubeka ezingeni eliphezulu <xliff:g id="NUMBER_0">%1$d</xliff:g> uhlelo lokusebenza <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string> <string name="android_preparing_apk" msgid="8162599310274079154">"Ukulungisela i-<xliff:g id="APPNAME">%1$s</xliff:g>."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Qalisa izinhlelo zokusebenza."</string> diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml index fad3488d2915..1aae02bdeb76 100644 --- a/core/res/res/values/styles_material.xml +++ b/core/res/res/values/styles_material.xml @@ -543,7 +543,11 @@ please see styles_device_defaults.xml. <item name="textOff">@string/capital_off</item> </style> - <style name="Widget.Material.ButtonBar"> + <style name="Widget.Material.BaseButtonBar"> + <item name="background">?attr/colorBackgroundFloating</item> + </style> + + <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar"> <item name="background">@null</item> </style> diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml index 50e588dfff7b..0e98adea434a 100644 --- a/core/res/res/values/themes_device_defaults.xml +++ b/core/res/res/values/themes_device_defaults.xml @@ -724,6 +724,12 @@ easier. <item name="colorAccent">@color/accent_device_default_light</item> </style> + <style name="Theme.DeviceDefault.Light.Voice" parent="Theme.Material.Light.Voice"> + <!-- Color palette --> + <item name="colorPrimary">@color/primary_device_default_light</item> + <item name="colorPrimaryDark">@color/primary_dark_device_default_light</item> + <item name="colorAccent">@color/accent_device_default_light</item> + </style> <!-- DeviceDefault theme for a window that should look like the Settings app. --> <style name="Theme.DeviceDefault.Settings" parent="Theme.Material.Settings"> diff --git a/docs/docs-preview-index.html b/docs/docs-preview-index.html index e26b57c6c1eb..8d5422b79d91 100644 --- a/docs/docs-preview-index.html +++ b/docs/docs-preview-index.html @@ -79,19 +79,16 @@ href="http://fonts.googleapis.com/css?family=Roboto+Condensed"> <h2>Get Started</h2> <ul> - <li>View the <a href="reference/packages.html">API Reference</a></li> + <li>View the <a href="reference/packages.html">offline API Reference</a></li> <li>Read Diff Reports:</a> <ul> - <li><a href="sdk/api_diff/n-preview-1/changes.html" - >API 23 --> Preview 1</a></li> + <li><a href="https://developer.android.com/sdk/api_diff/24/changes.html" + >API 23 --> API 24</a></li> </ul> </li> - <li>Downloads and additional documentation are available at the + <li>For more information, visit the <a href="http://developer.android.com/preview/index.html"> Android N Developer Preview site</a></li> - <li>For information about Developer Preview 1, visit the - <a href="http://developer.android.com/preview/support.html">Support</a> - page.</li> </ul> diff --git a/docs/html-intl/intl/es/about/versions/android-5.0.jd b/docs/html-intl/intl/es/about/versions/android-5.0.jd index c94a140c22d4..4d50584ac24d 100644 --- a/docs/html-intl/intl/es/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/es/about/versions/android-5.0.jd @@ -428,7 +428,7 @@ sdk.platform.apiLevel=21 <p>Cuando el sistema detecta una red adecuada, se conecta a la red e invoca la devolución de llamada {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()}. Puedes usar el objeto {@link android.net.Network} de la devolución de llamada para obtener información adicional acerca de la red o para indicar que el tráfico use la red seleccionada.</p> <h3 id="BluetoothBroadcasting">Bluetooth de baja energÃa</h3> -<p>Android 4.3 introdujo compatibilidad de plataforma para <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth de baja energÃa</a> (<em>Bluetooth LE</em>) en el rol central. En Android 5.0, un dispositivo Android ahora puede actuar como un <em>dispositivo periférico</em> Bluetooth LE. Las aplicaciones pueden utilizar esta capacidad para que otros dispositivos cercanos detecten su presencia. Por ejemplo, puedes crear aplicaciones que permiten que un dispositivo funcione como un podómetro o un monitor de estado, y comunique sus datos a otro dispositivo Bluetooth LE.</p> +<p>Android 4.3 introdujo compatibilidad de plataforma para <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth de baja energÃa</a> (<em>Bluetooth LE</em>) en el rol central. En Android 5.0, un dispositivo Android ahora puede actuar como un <em>dispositivo periférico</em> Bluetooth LE. Las aplicaciones pueden utilizar esta capacidad para que otros dispositivos cercanos detecten su presencia. Por ejemplo, puedes crear aplicaciones que permiten que un dispositivo funcione como un podómetro o un monitor de estado, y comunique sus datos a otro dispositivo Bluetooth LE.</p> <p>Las nuevas API {@link android.bluetooth.le} permiten a sus aplicaciones transmitir anuncios, buscar respuestas y establecer conexiones con dispositivos Bluetooth LE cercanos. Para utilizar las nuevas funciones de anuncio y búsqueda, agrega el permiso {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} en el manifiesto. Cuando los usuarios actualizan o descargan tu aplicación desde Play Store, se les pide que concedan el siguiente permiso a tu aplicación: "Información de conexión Bluetooth: Permite que la aplicación controle Bluetooth, incluida la transmisión de información a dispositivos Bluetooth cercanos o la obtención de información sobre ellos".</p> <p>Para comenzar el anuncio de Bluetooth LE a fin de que otros dispositivos puedan detectar tu aplicación, llama a {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} y envÃa una implementación de la clase {@link android.bluetooth.le.AdvertiseCallback}. El objeto de devolución de llamada recibe un informe del éxito o fracaso de la operación de anuncio.</p> diff --git a/docs/html-intl/intl/es/design/patterns/navigation.jd b/docs/html-intl/intl/es/design/patterns/navigation.jd index e7d73fd72fc2..4b0523973d06 100644 --- a/docs/html-intl/intl/es/design/patterns/navigation.jd +++ b/docs/html-intl/intl/es/design/patterns/navigation.jd @@ -137,7 +137,7 @@ evento. En la pantalla de detalles del evento, es posible navegar con los botone <h4>Notificaciones emergentes</h4> -<p><em>Las notificaciones emergentes</em> omiten el panel lateral de notificaciones y aparecen directamente +<p><em>Las notificaciones emergentes</em> omiten el panel lateral de notificaciones y aparecen directamente frente al usuario. Estas casi nunca se utilizan, y se <strong>deben reservar para ocasiones en las que es necesario proporcionar una respuesta oportuna y es necesario realizar una interrupción en el contexto del usuario</strong>. Por ejemplo, en Talk se utiliza este estilo para alertar al usuario sobre una invitación de un amigo para participar en una videocharla, ya que esta diff --git a/docs/html-intl/intl/es/design/patterns/notifications.jd b/docs/html-intl/intl/es/design/patterns/notifications.jd index bdbc77b71f46..5499e8b3d4e1 100644 --- a/docs/html-intl/intl/es/design/patterns/notifications.jd +++ b/docs/html-intl/intl/es/design/patterns/notifications.jd @@ -56,7 +56,7 @@ Android, esta se omitirá </ul> <p class="note"><strong>Nota:</strong> El diseño de las notificaciones de esta versión de -Android se diferencia +Android se diferencia de manera significativa del diseño de las versiones anteriores. Para obtener información sobre el diseño de las notificaciones en versiones anteriores, consulte <a href="./notifications_k.html">Notificaciones en Android 4.4 y versiones anteriores</a>.</p> @@ -189,7 +189,7 @@ que aparece en la parte superior de una a los usuarios durante un perÃodo breve, con un diseño expandido que expone las posibles acciones.</p> <p> Luego de este perÃodo, la notificación se retira hacia el -panel de notificaciones. Si la <a href="#correctly_set_and_manage_notification_priority">prioridad</a> de una notificación +panel de notificaciones. Si la <a href="#correctly_set_and_manage_notification_priority">prioridad</a> de una notificación se marca como Alta, Máxima o Pantalla completa, se obtiene una notificación emergente.</p> <p><b>Buenos ejemplos de notificaciones emergentes</b></p> @@ -291,8 +291,8 @@ Las notificaciones de alta prioridad activan la pantalla de notificaciones emerg <p>UtilÃcelo para las notificaciones que desea que el usuario reciba, pero que son menos urgentes. Las notificaciones de baja prioridad tienden a aparecer en la parte inferior de la lista, por lo que son ideales para -eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen -estas +eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen +estas actualizaciones, pero estas notificaciones nunca tendrán prioridad sobre las comunicaciones urgentes o directas.</p> </td> @@ -545,7 +545,7 @@ iconos de notificaciones para <p><strong>Lo que debe hacer</strong></p> <p>Utilizar el <a href="/design/style/iconography.html#notification">estilo de icono de notificación</a> - adecuado para los iconos pequeños y el + adecuado para los iconos pequeños y el <a href="/design/style/iconography.html#action-bar">estilo de icono de barra de acción</a> del diseño Material Light para los iconos de acciones.</p> @@ -571,7 +571,7 @@ deben ser una imagen sobre un fondo blanco o transparente.</p> <h3 id="pulse_the_notification_led_appropriately">Pulsación adecuada del LED de notificaciones</h3> -<p>Muchos dispositivos con Android incluyen un LED de notificaciones, que se utiliza para mantener al +<p>Muchos dispositivos con Android incluyen un LED de notificaciones, que se utiliza para mantener al usuario informado sobre los eventos cuando la pantalla está apagada. Las notificaciones con un nivel de prioridad <code>MAX</code>, <code>HIGH</code> o <code>DEFAULT</code> deben @@ -701,7 +701,7 @@ comentarios sobre tareas más extensas, como descargar un archivo o codificar un eliminar las notificaciones constantes del panel lateral de notificaciones.</p> <h3 id="ongoing_notifications">Reproducción de medios</h3> -<p>En Android 5.0, la pantalla de bloqueo no muestra los controles de transporte para la clase +<p>En Android 5.0, la pantalla de bloqueo no muestra los controles de transporte para la clase {@link android.media.RemoteControlClient} obsoleta. Sin embargo, <em>sÃ</em> muestra las notificaciones, de modo que las notificaciones de reproducción de cada aplicación ahora son la forma principal en la que los usuarios controlan la reproducción desde el estado bloqueado. A través de este comportamiento, se le otorga más control @@ -771,7 +771,7 @@ para cualquier persona que agarre el dispositivo y encienda la pantalla.</p> <ul> <li> En el caso de los dispositivos que posean una pantalla de bloqueo segura (PIN, patrón o contraseña), la interface está formada por partes públicas y privadas. La interfaz pública se puede mostrar en una pantalla de bloqueo segura y, - por ende, cualquier persona puede verla. La interfaz privada es el mundo detrás de esa pantalla de bloqueo y + por ende, cualquier persona puede verla. La interfaz privada es el mundo detrás de esa pantalla de bloqueo y solo se revela cuando el usuario se registra en el dispositivo.</li> </ul> @@ -799,7 +799,7 @@ Se muestra todo el contenido de la notificación. Esta es la opción predeterminada del sistema si no se especificó el grado de visibilidad.</li> <li><code><a href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>. -En la pantalla de bloqueo se muestra la información básica sobre la existencia de esta notificación, incluido +En la pantalla de bloqueo se muestra la información básica sobre la existencia de esta notificación, incluido el icono y el nombre de la aplicación a través de la cual se publicó. No se muestra el resto de los detalles de la notificación. A continuación, especificamos algunos puntos que se deben tener en cuenta: <ul> diff --git a/docs/html-intl/intl/es/distribute/googleplay/about.jd b/docs/html-intl/intl/es/distribute/googleplay/about.jd index 96faf492a334..987b43be8f2a 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body - <div id="qv-wrapper"> + <div id="qv-wrapper"> <div id="qv"> <h2>Acerca de Google Play</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/es/distribute/googleplay/auto.jd b/docs/html-intl/intl/es/distribute/googleplay/auto.jd index a2a29434e8e0..d9928b5ab843 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/auto.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/auto.jd @@ -158,7 +158,7 @@ page.metaDescription=Distribuye tus aplicaciones y contenido para Android Auto. </p> <p> - Ten en cuenta que la revisión afecta la disponibilidad de tu aplicación para otros dispositivos en la + Ten en cuenta que la revisión afecta la disponibilidad de tu aplicación para otros dispositivos en la Play Store de Google; por ejemplo, para teléfonos y tablets. Si tienes una aplicación actual que incluya actualizaciones para el componente de teléfono/tablet, el componente de Android Auto debe pasar la revisión antes de que la aplicación actualizada diff --git a/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd index fcf5e44d1b54..73cd63ea3700 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd @@ -4,8 +4,8 @@ page.image=/distribute/images/developer-console.jpg Xnonavpage=true @jd:body - - <div id="qv-wrapper"> + + <div id="qv-wrapper"> <div id="qv"> <h2>CaracterÃsticas de la publicación</h2> <ol> @@ -303,7 +303,7 @@ Xnonavpage=true <p> En la mayorÃa de los casos, todo lo que necesitas es un solo paquete de aplicaciones (APK), y generalmente es la manera más sencilla de administrar y mantener la aplicación. Sin embargo, si necesitas - proporcionar un APK distinto para diferentes dispositivos, Google Play te + proporcionar un APK distinto para diferentes dispositivos, Google Play te permite hacerlo. </p> diff --git a/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd index ecad47ca20fe..44da2258d3f6 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>En este documento:</h2> @@ -141,7 +141,7 @@ page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias confirmar que es apta para familias. Suponiendo que tu aplicación cumple con todos los requisitos del programa, prevemos que el tiempo de publicación no deberÃa prolongarse más allá de lo habitual; no obstante, puede haber una demora en la publicación de la aplicación si se - rechaza durante la revisión para la inclusión en Diseñado para familias. + rechaza durante la revisión para la inclusión en Diseñado para familias. </dd> <dt> diff --git a/docs/html-intl/intl/es/distribute/googleplay/families/start.jd b/docs/html-intl/intl/es/distribute/googleplay/families/start.jd index 3ed1eb39a9ae..d6d6126b2d98 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/families/start.jd @@ -78,7 +78,7 @@ page.metaDescription=Únete a Diseñado para familias en pocos pasos sencillos. <p class="note"> <strong>Nota</strong>: Las aplicaciones publicadas en el programa Diseñado para familias - también están disponibles para todos los usuarios en Google Play. + también están disponibles para todos los usuarios en Google Play. </p> <p> diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd index c7cb65dc4066..2b1f40382c69 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd @@ -477,7 +477,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> No. Cuando Google inicie el proceso de aprobación, tu aplicación para Auto se someterá a una revisión de seguridad del conductor y no estará disponible para distribución hasta que se apruebe. Dado que es el mismo APK que el - que utilizas para teléfonos y tablets, tus actualizaciones en la Play Store para esos dispositivos no estará disponible hasta que + que utilizas para teléfonos y tablets, tus actualizaciones en la Play Store para esos dispositivos no estará disponible hasta que finalice el proceso de aprobación para Auto. </p> diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd index 8588c6b80f79..b972949362b3 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd @@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>Prueba</h2> <ol> <li><a href="#test-environment">Configuración de un entorno de prueba</a></li> @@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Calidad de las aplicaciones para tablets</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimiza tu aplicación</a></li> </ol> - + </div> </div> @@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> Descripción diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd index 62c6f8738a8a..e0049232b969 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd @@ -56,7 +56,7 @@ Xnonavpage=true <p>El primer paso en la provisión de una excelente experiencia con la aplicación en tablets es asegurarte de que la aplicación cumpla con los <em>criterios de calidad de la aplicación principal</em> en todos los dispositivos - y formatos a los que apunte. Para obtener información completa, consulta las <a href="{@docRoot}distribute/essentials/quality/core.html">Pautas de calidad de la aplicación principal</a>. + y formatos a los que apunte. Para obtener información completa, consulta las <a href="{@docRoot}distribute/essentials/quality/core.html">Pautas de calidad de la aplicación principal</a>. </p> <p> @@ -119,7 +119,7 @@ style="font-weight:500;">DespÃdete de tu IU "estirada"</span>: En las tablets, <li>Proporciona diseños personalizados, según sea necesario, para las pantallas <code>large</code> y <code>xlarge</code>. También puedes proporcionar diseños que se cargarán en función de la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">dimensión - más corta</a> de la pantalla o la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">altura y el ancho + más corta</a> de la pantalla o la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">altura y el ancho mÃnimos disponibles</a>. </li> @@ -208,7 +208,7 @@ android.app.Fragment}. Esto te permite maximizar la reutilización de códigos entre diferentes factores y pantallas que compartan contenido.</li> <li>Decide en qué tamaños de pantalla usarás una IU multipanel y luego proporciona los - diferentes diseños en los depósitos para el tamaño de pantalla correspondiente (como + diferentes diseños en los depósitos para el tamaño de pantalla correspondiente (como <code>large</code>/<code>xlarge</code>) o anchos mÃnimos de pantalla (como <code>sw600dp</code>/<code>sw720</code>).</li> </ul> @@ -492,7 +492,7 @@ o simplemente centrando el icono dentro del botón transparente.</li> <pre><uses-feature android:name="android.hardware.telephony" android:required="false" /></pre></li> -<li>En forma similar, revisa el manifiesto para detectar elementos <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> que +<li>En forma similar, revisa el manifiesto para detectar elementos <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> que <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">impliquen requisitos de caracterÃsticas de hardware</a> que no sean adecuadas para tablets. Si encuentras esos permisos, asegúrate de declarar explÃcitamente un elemento @@ -735,7 +735,7 @@ o simplemente centrando el icono dentro del botón transparente.</li> distribución. </p> <p>Si la página de Sugerencias para la optimización indica problemas "Pendientes" que crees que no - corresponden a tu aplicación o afectan la calidad de la aplicación en las tablets, + corresponden a tu aplicación o afectan la calidad de la aplicación en las tablets, usa el <a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">Formulario de contacto de Diseñado para tablets»</a> para comunicárnoslo. Revisaremos tu aplicación y actualizaremos tu página de Sugerencias para la optimización según corresponda.</p> diff --git a/docs/html-intl/intl/es/distribute/googleplay/tv.jd b/docs/html-intl/intl/es/distribute/googleplay/tv.jd index e3a95bc2929d..e9deacbcfb6f 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/tv.jd @@ -132,7 +132,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi <ul> <li>Cumple las pautas de Calidad de la aplicación principal <ul> - <li>Sigue las <a href="{@docRoot}design/index.html">pautas de + <li>Sigue las <a href="{@docRoot}design/index.html">pautas de Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material Design</a> en tu aplicación. </li> @@ -261,7 +261,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi los criterios, recibirás una <strong>notificación por correo electrónico enviada a tu cuenta de desarrollador</strong> con un resumen de las áreas que debes abordar. Una vez que realices los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para - desarrolladores. + desarrolladores. </p> <p> @@ -282,7 +282,7 @@ page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Androi <li> <em>Aprobada</em>: se revisó tu aplicación y se aprobó. La aplicación - estará disponible de forma directa para los usuarios de Android TV. + estará disponible de forma directa para los usuarios de Android TV. </li> <li> diff --git a/docs/html-intl/intl/es/distribute/googleplay/wear.jd b/docs/html-intl/intl/es/distribute/googleplay/wear.jd index f23315d86495..2c8a804e90d5 100644 --- a/docs/html-intl/intl/es/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/es/distribute/googleplay/wear.jd @@ -127,7 +127,7 @@ Una vez que hayas leÃdo las pautas, el paso siguientes es desarrollar tu aplica <ul> <li>Cumple las pautas de Calidad de la aplicación principal. <ul> - <li>Sigue las <a href="{@docRoot}design/index.html">pautas de + <li>Sigue las <a href="{@docRoot}design/index.html">pautas de Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material Design</a> en tu aplicación. </li> @@ -152,7 +152,7 @@ desarrollo de aplicaciones para Wear</a>.</li> <p> Una vez que hayas creado tu APK listo para el lanzamiento y lo hayas probado para asegurarte de que cumple todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>, cárgalo a la Consola para desarrolladores. Actualiza el directorio de tu tienda con capturas de pantalla de tu aplicación para Wear y configura opciones - de distribución, según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play, consulta la + de distribución, según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play, consulta la <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación para el lanzamiento.</a> </p> diff --git a/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd index ad42663a6f92..be23c863ae5f 100644 --- a/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd @@ -870,7 +870,7 @@ data-maxresults="6"> <li> <p> "Dispositivos compatibles" indica que tus aplicaciones están llegando a los dispositivos - a los que pretendÃas llegar. De lo contrario, deberás verificar con tu equipo de desarrollo + a los que pretendÃas llegar. De lo contrario, deberás verificar con tu equipo de desarrollo los requisitos y las reglas de filtrado de las aplicaciones. </p> </li> diff --git a/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd index 7cb3ccb54b39..c06849013fa7 100644 --- a/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd @@ -903,7 +903,7 @@ data-maxresults="6"> Responde las reseñas, si fuera posible. Te recomendamos que interactúes con los usuarios internacionales en sus idiomas o en un idioma común, si fuera posible. Si no lo es, puedes intentar utilizar herramientas de traducción, aunque es posible que no puedas - prever los resultados. Si tu aplicación se vuelve muy popular en un idioma, considera + prever los resultados. Si tu aplicación se vuelve muy popular en un idioma, considera la posibilidad de obtener ayuda por parte de hablantes nativos para brindar soporte. </p> </li> diff --git a/docs/html-intl/intl/es/google/play/filters.jd b/docs/html-intl/intl/es/google/play/filters.jd index 03565b9b175d..07238ee32751 100644 --- a/docs/html-intl/intl/es/google/play/filters.jd +++ b/docs/html-intl/intl/es/google/play/filters.jd @@ -81,7 +81,7 @@ Por ejemplo, si una aplicación requiere una cámara, Google Play no mostrará l solicite especÃficamente la aplicación al hacer clic en un vÃnculo profundo que apunte directamente a la ID de la aplicación en Google Play.</p> -<p>Puedes usar cualquier combinación de los filtros disponibles para tu aplicación. Por ejemplo, puedes establecer un requisito +<p>Puedes usar cualquier combinación de los filtros disponibles para tu aplicación. Por ejemplo, puedes establecer un requisito <code>minSdkVersion</code> de <code>"4"</code> y configurar <code>smallScreens="false"</code> en la aplicación; luego, al cargar la aplicación a Google Play, podrÃas apuntar a paÃses (operadores) europeos únicamente. De este modo, los filtros de Google Play evitarán que la aplicación esté disponible en un dispositivo @@ -102,7 +102,7 @@ Play</a>, pueden ver todas las aplicaciones publicadas. No obstante, el sitio we <h2 id="manifest-filters">Filtrado en función del manifiesto de la aplicación</h2> -<p>La mayorÃa de los filtros son activados por elementos del archivo de manifiesto de una +<p>La mayorÃa de los filtros son activados por elementos del archivo de manifiesto de una aplicación, <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> (aunque no todo lo que se encuentra en el archivo de manifiesto puede desencadenar el filtrado). La tabla 1 contiene los elementos del manifiesto que debes usar para desencadenar el diff --git a/docs/html-intl/intl/es/preview/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd index f84bede97a70..7cee010dc5a7 100644 --- a/docs/html-intl/intl/es/preview/api-overview.jd +++ b/docs/html-intl/intl/es/preview/api-overview.jd @@ -62,7 +62,7 @@ las nuevas funciones para desarrolladores. </p> <h2 id="multi-window_support">Compatibilidad con ventanas múltiples</h2> -<p>En Android N, presentamos una nueva y muy solicitada función multitarea +<p>En Android N, presentamos una nueva y muy solicitada función multitarea en la plataforma: la compatibilidad con ventanas múltiples. </p> <p>Los usuarios ahora pueden abrir dos aplicaciones al mismo tiempo en la pantalla. </p> @@ -815,7 +815,7 @@ externo. Cuando se usan las nuevas API, el sistema emplea una IU de permisos simple en la que se detallan claramente los directorios a los cuales la aplicación solicita acceso.</p> -<p>Para obtener más información, consulta la documentación +<p>Para obtener más información, consulta la documentación <a href="{@docRoot}preview/features/scoped-folder-access.html">Acceso a directorios determinados</a> para desarrolladores.</p> @@ -846,7 +846,7 @@ de aplicaciones que crean aplicaciones de alto rendimiento y ejecución prolonga </p> <p> -Android N incluye compatibilidad opcional para un +Android N incluye compatibilidad opcional para un <em>modo de rendimiento sostenido</em>, que permite que los fabricantes de equipo original (OEM) arrojen datos sobre las capacidades de rendimiento del dispositivo para las aplicaciones de ejecución prolongada. Los desarrolladores de aplicaciones pueden usar estos datos para perfeccionar sus aplicaciones y alcanzar un nivel @@ -854,7 +854,7 @@ uniforme y predecible de rendimiento en el dispositivo durante perÃodos prolong </p> <p> -Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con +Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con Nexus 6P. Para usar esta función, establece el indicador de rendimiento sostenido de la ventana que deseas ejecutar en el modo de rendimiento sostenido. Establece este indicador con el método @@ -888,7 +888,7 @@ consulta <a href="https://developers.google.com/vr/android/">Google VR SDK para </p> <ul> - <li>Puedes establecer un Ãcono desde el id. de un recurso llamando a + <li>Puedes establecer un Ãcono desde el id. de un recurso llamando a <code>PrinterInfo.Builder.setResourceIconId()</code>. </li> diff --git a/docs/html-intl/intl/es/preview/behavior-changes.jd b/docs/html-intl/intl/es/preview/behavior-changes.jd index 5eb4966b8c34..112c1c985b1a 100644 --- a/docs/html-intl/intl/es/preview/behavior-changes.jd +++ b/docs/html-intl/intl/es/preview/behavior-changes.jd @@ -88,7 +88,7 @@ determinadas intents implÃcitas. determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el - resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock}, + resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock}, alarmas de {@link android.app.AlarmManager}, GPS y análisis de Wi-Fi. Independientemente de que se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen @@ -199,7 +199,7 @@ determinadas intents implÃcitas. Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados, y un intento de hacerlo utilizando {@link android.content.Context#MODE_WORLD_READABLE} o - {@link android.content.Context#MODE_WORLD_WRITEABLE} activará una + {@link android.content.Context#MODE_WORLD_WRITEABLE} activará una {@link java.lang.SecurityException}. <p class="note"> <strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente. @@ -211,7 +211,7 @@ determinadas intents implÃcitas. <li> Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al receptor una ruta de acceso inaccesible. Por lo tanto, los intentos de pasar un - URI <code>file://</code> activan una + URI <code>file://</code> activan una <code>FileUriExposedException</code>. La manera recomendada para compartir el contenido de un archivo privado consiste en utilizar el {@link android.support.v4.content.FileProvider}. @@ -221,8 +221,8 @@ determinadas intents implÃcitas. almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una ruta de acceso inaccesible cuando acceden a {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a - Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando - intentan acceder a + Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando + intentan acceder a {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública usando @@ -573,7 +573,7 @@ Muchas API de la plataforma han comenzado a controlar en busca del envÃo de car a través de transacciones {@link android.os.Binder}. Además, el sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions} como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un -ejemplo común es almacenar demasiados datos en +ejemplo común es almacenar demasiados datos en {@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()}, lo que hace que {@code ActivityThread.StopInfo} emita una {@code RuntimeException} cuando la aplicación se orienta a Android N. @@ -585,7 +585,7 @@ la {@link android.view.View} no está anexada a una ventana, el sistema pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}. La tarea {@link java.lang.Runnable} no se ejecuta hasta que la -{@link android.view.View} esté anexada +{@link android.view.View} esté anexada a una ventana. Este comportamiento soluciona los siguientes errores: <ul> <li>Si una aplicación publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU @@ -600,7 +600,7 @@ a una ventana. Este comportamiento soluciona los siguientes errores: Si una aplicación en Android N con el permiso {@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} intentaba borrar un paquete instalado por otra aplicación, -el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debÃan esperar recibir el estado +el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debÃan esperar recibir el estado {@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION} al invocar {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}. diff --git a/docs/html-intl/intl/es/preview/download-ota.jd b/docs/html-intl/intl/es/preview/download-ota.jd index d3e8be92f7eb..2b2bcbfbedf6 100644 --- a/docs/html-intl/intl/es/preview/download-ota.jd +++ b/docs/html-intl/intl/es/preview/download-ota.jd @@ -178,7 +178,7 @@ Uso de las API de Google <ol> <li>Descargar una imagen de dispositivo inalámbrico de la tabla que verás a continuación.</li> <li>Reinicia el dispositivo en modo Recuperación. Para leer más información sobre cómo - aplicar este modo en dispositivos Nexus, visita la sección + aplicar este modo en dispositivos Nexus, visita la sección <a href="https://support.google.com/nexus/answer/4596836">Reset your Nexus device to factory settings</a>. </li> @@ -202,65 +202,73 @@ Uso de las API de Google <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5: 15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1: 5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5: 3fac09fef759dde26e57cb80b20b6477<br> - SHA-1: 27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5: 58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5: 92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5: 1461622ad53ea842b2722fa7b49b8172<br> - SHA-1: 409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1: 87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1: 6f33742290eb46f2561891f38ca2e754b4e50c6a + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/es/preview/download.jd b/docs/html-intl/intl/es/preview/download.jd index d4890744e766..6fa9a6ae0ab1 100644 --- a/docs/html-intl/intl/es/preview/download.jd +++ b/docs/html-intl/intl/es/preview/download.jd @@ -209,7 +209,7 @@ Uso de las API de Google <h2 id="device-preview">Configurar un dispositivo de hardware</h2> <p> - En N Developer Preview se ofrecen actualizaciones del sistema para una variedad de dispositivos de hardware + En N Developer Preview se ofrecen actualizaciones del sistema para una variedad de dispositivos de hardware que puedes usar para realizarle pruebas a tu aplicación, desde teléfonos hasta tablets y TV. </p> @@ -300,72 +300,73 @@ que puedes usar para realizarle pruebas a tu aplicación, desde teléfonos hasta <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1: 5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1: 81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5: 565be87ebb2d5937e2abe1a42645864b<br> - SHA-1: 2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1: 2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1: 1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5: 7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1: 5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 and D6653)</td> - <td>Descarga: <a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - Para más información, visita la sección <a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Prueba la Android N Developer Preview en Xperia Z3</a>. + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> @@ -377,7 +378,7 @@ que puedes usar para realizarle pruebas a tu aplicación, desde teléfonos hasta Si quieres desinstalar la muestra desde un dispositivo, puedes hacerlo de las siguientes maneras: </p> <ul> - <li><strong>Obtener una imagen de sistema con las especificaciones de fábrica</strong> y luego actualÃzala de manera manual + <li><strong>Obtener una imagen de sistema con las especificaciones de fábrica</strong> y luego actualÃzala de manera manual para el dispositivo. <ul> <li>Para <strong>los dispositivos Nexus y Pixel C</strong>, consulta @@ -466,8 +467,8 @@ para la Android N Preview). <p> A fin de garantizar la mejor experiencia en el emulador de Android, verifica que estás utilizando -Android Studio 2.1 o una versión superior, compatible con el <a href="http://tools.android.com/tech-docs/emulator">emulador de Android 2.0</a>, -cuyo rendimiento es mayor si se lo compara con el emulador utilizado en +Android Studio 2.1 o una versión superior, compatible con el <a href="http://tools.android.com/tech-docs/emulator">emulador de Android 2.0</a>, +cuyo rendimiento es mayor si se lo compara con el emulador utilizado en Android Studio 1.5.</p> <p>Para obtener más información sobre la creación de dispositivos virtuales, consulta <a href="{@docRoot}tools/devices/index.html">Administración de dispositivos virtuales</a>. diff --git a/docs/html-intl/intl/es/preview/features/afw.jd b/docs/html-intl/intl/es/preview/features/afw.jd index 32e57c83a3d5..5e550a6d597c 100644 --- a/docs/html-intl/intl/es/preview/features/afw.jd +++ b/docs/html-intl/intl/es/preview/features/afw.jd @@ -35,7 +35,7 @@ page.keywords="android for work", "android N", "enterprise", "QR code" <li><a href="#process-logging">Registros de procesos empresariales </a></li> - <li><a href="#bug-reports">Informes de errores remotos + <li><a href="#bug-reports">Informes de errores remotos </a></li> <li><a href="#remove-cert">Quitar un certificado de cliente @@ -109,7 +109,7 @@ Android N.</p> Si el propietario de un perfil envÃa una intent {@link android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD}, el sistema le pide al usuario que configure una comprobación de seguridad. El propietario del perfil también puede - enviar una intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> + enviar una intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> para que el usuario establezca un bloqueo de dispositivo. </p> @@ -133,7 +133,7 @@ Android N.</p> </p> <p> - Para obtener detalles sobre los nuevos métodos y constantes, consulta la página de referencia de + Para obtener detalles sobre los nuevos métodos y constantes, consulta la página de referencia de <code>DevicePolicyManager</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK</a>. </p> @@ -156,7 +156,7 @@ Android N.</p> <p> Los lanzadores deben aplicar una IU distintiva para las aplicaciones suspendidas a fin de mostrar que las aplicaciones no están actualmente disponibles; por ejemplo, el Ãcono de la aplicación puede aparecer en color - gris. Los lanzadores pueden averiguar si una aplicación está suspendida llamando al nuevo método + gris. Los lanzadores pueden averiguar si una aplicación está suspendida llamando al nuevo método <code>DevicePolicyManager.getPackageSuspended()</code>. </p> @@ -181,9 +181,9 @@ Android N.</p> </p> <p> - Los propietarios pueden requerir el uso de una VPN llamando al nuevo método + Los propietarios pueden requerir el uso de una VPN llamando al nuevo método <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code>. Para averiguar - si el propietario ha establecido un requisito de VPN, llama al nuevo método + si el propietario ha establecido un requisito de VPN, llama al nuevo método <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>. </p> @@ -255,7 +255,7 @@ Android N.</p> <p> Los propietarios pueden reiniciar sus dispositivos de forma remota. En algunos casos, no se puede acceder al botón de encendido de los dispositivos implementados en lugares públicos dentro de recintos. Si se debe - reiniciar un dispositivo, los administradores pueden hacerlo utilizando el nuevo método + reiniciar un dispositivo, los administradores pueden hacerlo utilizando el nuevo método <code>DevicePolicyManager.reboot()</code>. </p> @@ -271,7 +271,7 @@ Android N.</p> <p> Los propietarios de dispositivos pueden identificar actividades sospechosas mediante un rastreo remoto de la actividad del dispositivo, incluidos inicios de aplicaciones, actividad adb y desbloqueos de pantalla. Los registros de - procesos no requieren del consentimiento del usuario. Para recuperar registros, los propietarios de dispositivos habilitan + procesos no requieren del consentimiento del usuario. Para recuperar registros, los propietarios de dispositivos habilitan los registros de dispositivos mediante <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>. </p> @@ -402,10 +402,10 @@ Android N.</p> <p> El propietario del dispositivo o perfil puede habilitar otra aplicación para que administre las restricciones de - aplicaciones mediante el nuevo método + aplicaciones mediante el nuevo método <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code> . La aplicación nominada puede controlar si se otorgó este permiso - llamando a + llamando a <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>. </p> @@ -461,8 +461,8 @@ Android N.</p> <p> Los propietarios de perfiles y dispositivos pueden configurar múltiples certificados de CA para una configuración de Wi-Fi determinada. Cuando las redes de Wi-Fi corporativas tienen CA independientes para - diferentes puntos de acceso con el mismo SSID, los administradores de TI pueden incluir todas las - CA relevantes en la configuración Wi-Fi utilizando el nuevo método + diferentes puntos de acceso con el mismo SSID, los administradores de TI pueden incluir todas las + CA relevantes en la configuración Wi-Fi utilizando el nuevo método <code>setCaCertificates()</code>. </p> @@ -511,7 +511,7 @@ Android N.</p> </p> <p> - El teléfono debe controlar el nuevo marcador + El teléfono debe controlar el nuevo marcador <code>android.telecom.Call.PROPERTY_WORK_CALL</code> para determinar si una llamada es de tipo laboral. Si se trata de una llamada laboral, el teléfono debe indicarlo , por ejemplo, mediante el agregado de una insignia de trabajo. @@ -524,7 +524,7 @@ Android N.</p> usuario modifique el fondo de pantalla. Los propietarios de dispositivos o perfiles aún pueden modificar el fondo de pantalla. Sin embargo, solo pueden hacerlo para el usuario o perfil que controlan. Por ejemplo, el propietario de un perfil no puede modificar el - fondo de pantalla del usuario primario, + fondo de pantalla del usuario primario, pero sà pueden hacerlo el propietario de un dispositivo o el propietario de un perfil en el perfil principal. El propietario de un dispositivo o perfil que desea modificar el fondo de pantalla debe controlar si el usuario o perfil que administra posee un fondo de pantalla ({@link android.app.WallpaperManager#isWallpaperSupported @@ -544,7 +544,7 @@ Android N.</p> <h2 id="health-monitoring">Control del estado del dispositivo</h2> <p> - El propietario de un perfil o dispositivo puede usar la nueva interfaz + El propietario de un perfil o dispositivo puede usar la nueva interfaz <code>HardwarePropertiesManager</code> para recuperar información sobre el estado del dispositivo, como por ejemplo, las temperaturas de CPU o GPU y el uso de la CPU. La nueva interfaz de control es especialmente útil para controlar dispositivos sin supervisión diff --git a/docs/html-intl/intl/es/preview/features/background-optimization.jd b/docs/html-intl/intl/es/preview/features/background-optimization.jd index fbae9b503fe6..c061a093bb29 100644 --- a/docs/html-intl/intl/es/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/es/preview/features/background-optimization.jd @@ -274,7 +274,7 @@ public static void scheduleJob(Context context) { </pre> <p> Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación - recibe un callback y se pasa un objeto {@link android.app.job.JobParameters} + recibe un callback y se pasa un objeto {@link android.app.job.JobParameters} al método {@link android.app.job.JobService#onStartJob onStartJob()} en {@code MediaContentJob.class}. </p> diff --git a/docs/html-intl/intl/es/preview/features/direct-boot.jd b/docs/html-intl/intl/es/preview/features/direct-boot.jd index a9cfcf099692..e1d99e9d2b0e 100644 --- a/docs/html-intl/intl/es/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/es/preview/features/direct-boot.jd @@ -58,7 +58,7 @@ el almacenamiento encriptado por credencial.</p> <p>Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como -<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo +<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo <code>android:directBootAware</code> como verdadero en el manifiesto.<p> <p>Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión diff --git a/docs/html-intl/intl/es/preview/features/multi-window.jd b/docs/html-intl/intl/es/preview/features/multi-window.jd index 89bc3194c577..441e06af361a 100644 --- a/docs/html-intl/intl/es/preview/features/multi-window.jd +++ b/docs/html-intl/intl/es/preview/features/multi-window.jd @@ -158,7 +158,7 @@ page.keywords="multi-window", "android N", "split screen", "free-form" si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer atributos en tu manifiesto para controlar el tamaño y el diseño. La configuración de atributos de una actividad raÃz se aplica a todas las actividades - de su pila de tareas. Por ejemplo, si + de su pila de tareas. Por ejemplo, si <code>android:resizeableActivity</code> está configurado en true para la actividad raÃz, se puede modificar el tamaño de todas las actividades de la pila de tareas. </p> @@ -474,7 +474,7 @@ android:supportsPictureInPicture=["true" | "false"] <p> Ya sea que actualices o no tu aplicación para Android N, debes - verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla + verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla en modo de ventanas múltiples en un dispositivo con Android N. </p> @@ -526,7 +526,7 @@ android:supportsPictureInPicture=["true" | "false"] </li> <li>Cambia el tamaño de tu aplicación en modo de pantalla dividida al arrastrar la lÃnea divisoria. - Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos + Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos necesarios de la IU. </li> diff --git a/docs/html-intl/intl/es/preview/features/notification-updates.jd b/docs/html-intl/intl/es/preview/features/notification-updates.jd index 380efcea0325..ff0635ebe10c 100644 --- a/docs/html-intl/intl/es/preview/features/notification-updates.jd +++ b/docs/html-intl/intl/es/preview/features/notification-updates.jd @@ -194,7 +194,7 @@ notificationManager.notify(notificationId, repliedNotification); </ol> <p> - En el caso de las aplicaciones interactivas, como los chats, podrÃa ser útil incluir + En el caso de las aplicaciones interactivas, como los chats, podrÃa ser útil incluir contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podrÃan mostrar múltiples lÃneas de historial de chat. Cuando el usuario responde a través de {@link android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas diff --git a/docs/html-intl/intl/es/preview/features/picture-in-picture.jd b/docs/html-intl/intl/es/preview/features/picture-in-picture.jd index 0d9313aae1fe..36c0c5771912 100644 --- a/docs/html-intl/intl/es/preview/features/picture-in-picture.jd +++ b/docs/html-intl/intl/es/preview/features/picture-in-picture.jd @@ -181,7 +181,7 @@ video en la actividad de reproducción actual en modo de pantalla completa, en l iniciar una nueva actividad que podrÃa confundir al usuario.</p> <p>A fin de garantizar que se utilice una única actividad para las solicitudes de reproducción de video y que esta - ingrese en el modo PIP o salga de este cuando sea necesario, configura el + ingrese en el modo PIP o salga de este cuando sea necesario, configura el <code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto: </p> @@ -209,5 +209,5 @@ esquina de la pantalla, debes evitar mostrar información importante en la panta en cualquier área que pueda quedar oculta detrás de la ventana de PIP.</p> <p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para -recibir eventos de entradas durante este modo, usa +recibir eventos de entradas durante este modo, usa <code>MediaSession.setMediaButtonReceiver()</code>.</p> diff --git a/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd index e83ca5318e35..e423e6ae3d81 100644 --- a/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd +++ b/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd @@ -41,17 +41,17 @@ directorio externo.</li> <code>StorageVolume</code> correcta. Luego, crea una intent llamando al método <code>StorageVolume.createAccessIntent()</code> de esa instancia. Usa esta intención para acceder a directorios de almacenamiento externo. Para obtener una lista de -todos los volúmenes disponibles, incluidos los volúmenes de medios extraÃbles, usa +todos los volúmenes disponibles, incluidos los volúmenes de medios extraÃbles, usa <code>StorageManager.getVolumesList()</code>.</p> -<p>Si tienes información sobre un archivo especÃfico, usa -<code>StorageManager.getStorageVolume(File)</code> para obtener el -<code>StorageVolume</code> que contiene el archivo. Llama a -<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al +<p>Si tienes información sobre un archivo especÃfico, usa +<code>StorageManager.getStorageVolume(File)</code> para obtener el +<code>StorageVolume</code> que contiene el archivo. Llama a +<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al directorio de almacenamiento externo del archivo.</p> <p> -En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a +En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a <code>StorageVolume.createAccessIntent()</code> para solicitar acceso al volumen completo, en lugar de un directorio especÃfico. <code>StorageVolume.createAccessIntent()</code> regresa un valor nulo si pasas un @@ -140,7 +140,7 @@ de usuario. Si el usuario deniega una solicitud y la aplicación solicita acceso <img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x, {@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" /> -<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una +<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una segunda solicitud para obtener acceso a medios extraÃbles.</p> <p>Si el usuario selecciona <b>Don't ask again</b> y deniega la solicitud, todas las diff --git a/docs/html-intl/intl/es/preview/features/security-config.jd b/docs/html-intl/intl/es/preview/features/security-config.jd index 39d95c8fb31e..8c3db641c577 100644 --- a/docs/html-intl/intl/es/preview/features/security-config.jd +++ b/docs/html-intl/intl/es/preview/features/security-config.jd @@ -171,7 +171,7 @@ page.image=images/cards/card-nyc_2x.jpg <p> Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}. Ten en cuenta que, si usas el formato PEM, el archivo debe incluir <em>solo</em> datos PEM - y ningún texto adicional. También puedes brindar elementos + y ningún texto adicional. También puedes brindar elementos <a href="#certificates"><code><certificates></code></a> múltiples en lugar de solo uno. </p> @@ -338,7 +338,7 @@ base-config}, si no están anidados. Los valores no establecidos en la {@code ba example.com} deben usar un conjunto personalizado de CA. Además, el tráfico de Cleartext a estos dominios se permite <em>excepto</em> con las conexiones a {@code secure.example.com}. Anidando la configuración para {@code -secure.example.com} dentro de la configuración para {@code example.com}, +secure.example.com} dentro de la configuración para {@code example.com}, {@code trust-anchors} no necesita duplicación. </p> diff --git a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd index 58379753cb4d..855db8d5fffe 100644 --- a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd +++ b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd @@ -33,13 +33,13 @@ durante la grabación y gestionar las sesiones grabadas.</p> <p class="note"><strong>Nota:</strong> La aplicación Live Channels todavÃa no permite que los usuarios creen grabaciones ni accedan a estas. Hasta que se realicen - cambios en la aplicación Live Channels, es posible que sea difÃcil probar completamente la + cambios en la aplicación Live Channels, es posible que sea difÃcil probar completamente la experiencia de grabación para tu servicio de entrada de TV.</p> <h2 id="supporting">Indicar la compatibilidad para la grabación</h2> -<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el -atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio +<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el +atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio en <code>true</code>: </p> @@ -49,7 +49,7 @@ en <code>true</code>: android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" /> </pre> -<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta +<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta <a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar el servicio de entrada de TV en el manifiesto</a>. </p> @@ -123,7 +123,7 @@ las aplicaciones de canal con funcionalidad de grabación en la tabla de proveed <code>RecordedPrograms.Uri</code>. Usa API de proveedor de contenido para leer, agregar y borrar entradas de esta tabla.</p> -<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta +<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> Conceptos básicos sobre el proveedor de contenido</a>.</p> diff --git a/docs/html-intl/intl/es/preview/guide.jd b/docs/html-intl/intl/es/preview/guide.jd index 9fe555ccc289..9d12b57e2b2b 100644 --- a/docs/html-intl/intl/es/preview/guide.jd +++ b/docs/html-intl/intl/es/preview/guide.jd @@ -18,7 +18,7 @@ page.tags="preview", "developer preview" <p> Android N te brinda la oportunidad de garantizar que tus aplicaciones funcionen con la próxima versión de la plataforma. - Esta versión preliminar incluye diversas API y cambios en los comportamientos que pueden + Esta versión preliminar incluye diversas API y cambios en los comportamientos que pueden tener impactos en tu aplicación, como se describe en las secciones <a href="{@docRoot}preview/api-overview.html">Información general de la API</a> y <a href="{@docRoot}preview/behavior-changes.html">Cambios en los comportamientos</a>. Al probar tu aplicación con la versión preliminar, te debes centrar en algunos cambios especÃficos del sistema para garantizar que los usuarios disfruten de una buena experiencia. diff --git a/docs/html-intl/intl/es/preview/overview.jd b/docs/html-intl/intl/es/preview/overview.jd index 279a53649bd0..dc42175c5ba6 100644 --- a/docs/html-intl/intl/es/preview/overview.jd +++ b/docs/html-intl/intl/es/preview/overview.jd @@ -321,7 +321,7 @@ page.tags="preview", "developer", "android" comportamientos</a> se indican áreas clave que debes probar.</li> <li> Documentación de nuevas API, entre la que se incluye <a href="{@docRoot}preview/api-overview.html">Información general de API</a>, una <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de API</a> descargable - y guÃas exhaustivas para desarrolladores que muestran, por ejemplo, soporte + y guÃas exhaustivas para desarrolladores que muestran, por ejemplo, soporte de múltiples ventanas, notificaciones integradas, soporte de múltiples configuraciones regionales y mucho más. <li> <a href="{@docRoot}preview/samples.html">Ejemplo de código</a>, en el que se demuestra la manera de admitir permisos y otras funciones nuevas. diff --git a/docs/html-intl/intl/es/preview/setup-sdk.jd b/docs/html-intl/intl/es/preview/setup-sdk.jd index 2f8c4fa6e251..51260bb68f8b 100644 --- a/docs/html-intl/intl/es/preview/setup-sdk.jd +++ b/docs/html-intl/intl/es/preview/setup-sdk.jd @@ -92,7 +92,7 @@ Android N Preview SDK en Android Studio de la siguiente manera:</p> <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> diff --git a/docs/html-intl/intl/es/preview/support.jd b/docs/html-intl/intl/es/preview/support.jd index f74bae96c272..517429d61432 100644 --- a/docs/html-intl/intl/es/preview/support.jd +++ b/docs/html-intl/intl/es/preview/support.jd @@ -85,7 +85,7 @@ page.image=images/cards/card-n-support_2x.png <li>Developer Preview 3 está <strong>disponible en todos los dispositivos compatibles:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel - C, General Mobile 4G (Android One) y Sony Xperia Z3 (modelos D6603 y + C, General Mobile 4G (Android One) y Sony Xperia Z3 (modelos D6603 y D6653). </li> @@ -123,7 +123,7 @@ page.image=images/cards/card-n-support_2x.png <h4>Multiprocess WebView</h4> <p> - Desde la versión 51 de Android N, WebView ejecutará contenido web en + Desde la versión 51 de Android N, WebView ejecutará contenido web en procesos individuales de espacio aislado cuando se haya habilitado la opción "Multiprocess WebView". El equipo de WebView espera recibir comentarios sobre compatibilidad y rendimiento de tiempo de ejecución en N antes de habilitar Multiprocess WebView en @@ -154,7 +154,7 @@ page.image=images/cards/card-n-support_2x.png que permite que una aplicación monitoree su rendimiento de representación de IU mediante la exposición de una transmisión de API Pub/Sub para transferir información sobre el intervalo de los fotogramas para la ventana actual de la aplicación. Puedes usar <code>FrameMetricsListener</code> para medir - el rendimiento de la IU del nivel de interacción en producción con una granularidad mayor y + el rendimiento de la IU del nivel de interacción en producción con una granularidad mayor y sin la necesidad de contar con conexión USB. </p> @@ -223,7 +223,7 @@ page.image=images/cards/card-n-support_2x.png <dd> Ahora, el sistema utiliza metadatos de la actividad para definir el modo de mosaico. (Antes, el valor de devolución de - <code>TileService.onTileAdded()</code> determinaba el modo de mosaico). Para obtener más información, consulta + <code>TileService.onTileAdded()</code> determinaba el modo de mosaico). Para obtener más información, consulta <code>TileService.META_DATA_ACTIVE_TILE</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a> descargable. </dd> </dl> @@ -686,9 +686,9 @@ seguimiento de problemas</a>.</p> <h4>OEM unlock</h4> <ul> - <li>En algunos dispositivos, <strong>Enable OEM unlock</strong> aparecerá inhabilitado en + <li>En algunos dispositivos, <strong>Enable OEM unlock</strong> aparecerá inhabilitado en "Developer Options" al ejecutar DP2.<br> - <strong>Método alternativo:</strong> Apúntate para + <strong>Método alternativo:</strong> Apúntate para el Programa Android Beta (si aún no lo has hecho) en <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>. Luego, date de baja y acepta el paso a una versión anterior (OTA). Darse de baja hará que el dispositivo pase a la versión Android 6.0. Ahora deberÃas @@ -764,7 +764,7 @@ seguimiento de problemas</a>.</p> <li>En la muestra multithreadCmdBuffer, {@code vkCmdClearColorImage()} falla cuando se ejecuta con el controlador N-DP2.</li> <li>Los valores de devolución de {@code vkGetPhysicalDeviceFormatProperties()} no configuran un valor - para {@code VkFormatProperties::linearTilingFeatures} que, como resultado, + para {@code VkFormatProperties::linearTilingFeatures} que, como resultado, toma el valor de 0.</li> <li>Los anexos del búfer de fotogramas de punto flotante de Vulkan no se manejan de forma correcta.</li> </ul> @@ -892,7 +892,7 @@ seguimiento de problemas</a>.</p> <h4 id="dialer">Teléfono</h4> <ul> - <li>La aplicación Teléfono no es compatible con el inicio directo. Este tema se abordará más adelante en + <li>La aplicación Teléfono no es compatible con el inicio directo. Este tema se abordará más adelante en N Developer Preview. </li> @@ -1021,7 +1021,7 @@ seguimiento de problemas</a>.</p> </li> <li>El primer registro en un perfil de trabajo tarda varios minutos en - completarse. Esto puede hacer que el dispositivo tarde más de lo normal en volverse + completarse. Esto puede hacer que el dispositivo tarde más de lo normal en volverse visible en la API Play EMM. </li> diff --git a/docs/html-intl/intl/es/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/intl/es/training/monitoring-device-state/battery-monitoring.jd index 08a42dd1f7f4..cfccdab0f628 100644 --- a/docs/html-intl/intl/es/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html-intl/intl/es/training/monitoring-device-state/battery-monitoring.jd @@ -7,8 +7,8 @@ next.title=Cómo determinar y controlar el tipo de conector y el estado de la co next.link=docking-monitoring.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>En esta sección puedes aprender:</h2> @@ -24,9 +24,9 @@ next.link=docking-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a> </ul> -</div> </div> - +</div> + <p>Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duración de la baterÃa, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la baterÃa.</p> <p>El impacto derivado de actualizar aplicaciones en la duración de la baterÃa varÃa en función del nivel de baterÃa y del estado de carga del dispositivo, mientras que es insignificante cuando este está conectado a la corriente. Por ello, en la mayorÃa de los casos, puedes maximizar la frecuencia de actualización cuando el dispositivo esté conectado a un cargador. Por el contrario, si el dispositivo está en proceso de descarga, disminuir la frecuencia de actualización te permitirá aumentar la duración de la baterÃa.</p> @@ -34,8 +34,8 @@ next.link=docking-monitoring.html <p>Del mismo modo, puedes comprobar el nivel de carga de la baterÃa y reducir la frecuencia de las actualizaciones o incluso detenerlas cuando la baterÃa esté a punto de agotarse.</p> -<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2> - +<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2> + <p>En primer lugar, te recomendamos que determines el estado de carga actual. {@link android.os.BatteryManager} envÃa los detalles de carga y de la baterÃa en un {@link android.content.Intent} persistente que incluye el estado de carga.</p> <p>Se trata de un intento persistente, por lo que no es necesario registrar un {@link android.content.BroadcastReceiver}. Para ello, solo tienes que ejecutar {@code registerReceiver} transmitiendo {@code null} como el receptor (como se muestra en el siguiente fragmento). A continuación, se devuelve el intento de estado actual de la baterÃa. Puedes transmitir un objeto {@link android.content.BroadcastReceiver} real, pero hablaremos sobre las actualizaciones en otra sección, por lo que no es necesario ahora.</p> @@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <p>Normalmente, debes maximizar la frecuencia de las actualizaciones en segundo plano si el dispositivo está conectado a un cargador de corriente alterna, disminuir esa frecuencia si se utiliza un cargador USB y reducirla aún más si la baterÃa se está descargando.</p> -<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2> +<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2> <p>Modificar el estado de carga es tan fácil como conectar el dispositivo a un enchufe o USB. Por ello, es importante que supervises el estado de carga por si se producen cambios y modifiques la frecuencia de actualización según corresponda.</p> @@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <pre>public class PowerConnectionReceiver extends BroadcastReceiver { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; - + int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; @@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> }</pre> -<h2 id="CurrentLevel">Cómo determinar el nivel de baterÃa actual</h2> +<h2 id="CurrentLevel">Cómo determinar el nivel de baterÃa actual</h2> <p>En algunos casos, también es útil determinar el nivel de baterÃa actual. Puedes disminuir la frecuencia de las actualizaciones en segundo plano si el nivel de carga de la baterÃa es inferior a un valor determinado.</p> @@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> -<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de baterÃa</h2> +<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de baterÃa</h2> <p>No puedes controlar el estado de la baterÃa de forma continua fácilmente, pero tampoco es necesario.</p> diff --git a/docs/html-intl/intl/es/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/intl/es/training/monitoring-device-state/connectivity-monitoring.jd index 2a5ff120e23d..b76b812340a7 100644 --- a/docs/html-intl/intl/es/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html-intl/intl/es/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>En esta sección puedes aprender:</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a> </ul> -</div> +</div> </div> <p>Algunos de los usos más comunes para las alarmas con repetición y los servicios en segundo plano es programar actualizaciones regulares de los datos de aplicaciones a partir de recursos de Internet, almacenar datos en la memoria caché o ejecutar descargas a largo plazo. Sin embargo, si no estás conectado a Internet o la conexión es demasiado débil para completar la descarga, ¿para qué activar el dispositivo y programar la actualización?</p> @@ -35,18 +35,18 @@ next.link=manifest-receivers.html <p>Puedes utilizar {@link android.net.ConnectivityManager} para comprobar si estás conectado a Internet y, en ese caso, el tipo de conexión que estás utilizando.</p> -<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2> - +<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2> + <p>No es necesario programar una actualización basada en un recurso de Internet si no estás conectado. En el fragmento que aparece a continuación, se muestra cómo utilizar {@link android.net.ConnectivityManager} para consultar la red activa y determinar si hay conexión a Internet.</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2> +<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2> <p>También puedes determinar el tipo de conexión a Internet que hay disponible.</p> @@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> <p>Cuando hayas inhabilitado las actualizaciones, es importante que detectes si se hay cambios en la conectividad para poder reanudarlas cuando se haya establecido una conexión a Internet.</p> -<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2> +<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2> <p>{@link android.net.ConnectivityManager} emite la acción {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) cuando se han modificado los detalles de la conectividad. Puedes registrar un receptor de emisión en el archivo de manifiesto para detectar estos cambios y reanudar (o cancelar) las actualizaciones en segundo plano según corresponda.</p> diff --git a/docs/html-intl/intl/es/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/intl/es/training/monitoring-device-state/docking-monitoring.jd index d6122811e422..bede4e2ba31f 100644 --- a/docs/html-intl/intl/es/training/monitoring-device-state/docking-monitoring.jd +++ b/docs/html-intl/intl/es/training/monitoring-device-state/docking-monitoring.jd @@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>En esta sección puedes aprender:</h2> @@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a> </ul> -</div> +</div> </div> <p>Los dispositivos Android se pueden conectar a distintos tipos de conectores. Por ejemplo, se puede utilizar conectores para coche o domésticos y tanto digitales como analógicos. Normalmente, el estado del conector está vinculado al estado de carga, ya que muchos conectores cargan el dispositivo mientras está conectado.</p> @@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html <p>El estado del conector se emite también como un {@link android.content.Intent} persistente, lo que te permite consultar si el dispositivo está conectado o no y, si lo está, determinar el tipo de conector.</p> -<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2> - +<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2> + <p>La información sobre el estado del conector se incluye como información adicional en una emisión persistente de la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Por ello, no es necesario registrar un {@link android.content.BroadcastReceiver}. Solo tienes que ejecutar {@link android.content.Context#registerReceiver registerReceiver()} transmitiendo {@code null} como el receptor de emisión, como se muestra en el fragmento de código que aparece a continuación.</p> <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); @@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre> boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> -<h2 id="DockType">Cómo determinar el tipo de conector actual</h2> +<h2 id="DockType">Cómo determinar el tipo de conector actual</h2> -<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores: +<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores: <ul><li>coche,</li> <li>escritorio,</li> <li>escritorio de gama baja (analógico),</li> @@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> <p>Ten en cuenta que las últimas dos opciones se introdujeron en Android únicamente en el nivel 11 del API. Por ello, te recomendamos que compruebes las tres opciones solo cuando te interese más el tipo de conector que si se trata de un conector digital o analógico:</p> <pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; -boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || +boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;</pre> -<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2> +<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2> <p>Cuando el dispositivo está conectado a un conector o desconectado del mismo, se emite la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Para controlar los cambios que se produzcan en el estado del conector del dispositivo, solo tienes que registrar un receptor de emisión en el archivo de manifiesto de la aplicación, como se muestra en el fragmento que aparece a continuación:</p> diff --git a/docs/html-intl/intl/es/training/monitoring-device-state/index.jd b/docs/html-intl/intl/es/training/monitoring-device-state/index.jd index bf6b1c1e7091..12fcae7a6a2b 100644 --- a/docs/html-intl/intl/es/training/monitoring-device-state/index.jd +++ b/docs/html-intl/intl/es/training/monitoring-device-state/index.jd @@ -7,10 +7,10 @@ next.link=battery-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>Dependencias y requisitos previos</h2> +<h2>Dependencias y requisitos previos</h2> <ul> <li>Android 2.0 (nivel 5 del API) o superior</li> <li>Experiencia con <a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a></li> @@ -21,19 +21,19 @@ next.link=battery-monitoring.html <li><a href="{@docRoot}guide/components/services.html">Servicios</a> </ul> -</div> +</div> </div> <p>Uno de los objetivos de tu aplicación debe ser limitar su impacto en la duración de la baterÃa del dispositivo en el que esté instalada. Después de leer estas secciones, podrás desarrollar aplicaciones que optimizarán el uso de la baterÃa en función del estado del dispositivo en el que estén instaladas.</p> <p>Al tomar medidas como inhabilitar las actualizaciones de servicios en segundo plano o disminuir la frecuencia de dichas actualizaciones cuando el nivel de baterÃa sea bajo, puedes garantizar que se minimice el impacto de tu aplicación en la duración de la baterÃa sin afectar a la experiencia del usuario.</p> -<h2>Secciones</h2> - +<h2>Secciones</h2> + <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="battery-monitoring.html">Cómo controlar el nivel de baterÃa y el estado de carga</a></b></dt> <dd>Obtén más información sobre cómo determinar y controlar el nivel de baterÃa actual y los cambios en el estado de carga para modificar la frecuencia de actualizaciones en segundo plano de tu aplicación.</dd> @@ -46,4 +46,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="manifest-receivers.html">Cómo manipular los receptores de emisión bajo demanda</a></b></dt> <dd>Los receptores de emisión que declaras en el archivo de manifiesto se pueden alternar durante la ejecución para inhabilitar los que no son necesarios debido al estado actual del dispositivo. Obtén más información sobre cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento y cómo posponer acciones hasta que el dispositivo se encuentre en un estado concreto.</dd> -</dl>
\ No newline at end of file +</dl>
\ No newline at end of file diff --git a/docs/html-intl/intl/es/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/intl/es/training/monitoring-device-state/manifest-receivers.jd index a90468e37336..0be198cb48d7 100644 --- a/docs/html-intl/intl/es/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html-intl/intl/es/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>En esta sección puedes aprender:</h2> @@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a> </ul> -</div> +</div> </div> <p>La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un {@link android.content.BroadcastReceiver} para cada estado que vayas a controlar y registrar cada uno de ellos en el archivo de manifiesto de tu aplicación. A continuación, en cada uno de esos receptores solo tienes que volver a programar las alarmas recurrentes en función del estado actual del dispositivo.</p> @@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html <p>Un efecto secundario de este método es que tu aplicación activará el dispositivo siempre que uno de los receptores se active (probablemente, con más frecuencia de la necesaria).</p> <p>Te recomendamos que inhabilites o habilites los receptores de emisión en el momento de la ejecución. De este modo, puedes utilizar los receptores que hayas declarado en el archivo de manifiesto como alarmas pasivas que se activan mediante los eventos del sistema solo cuando es necesario.</p> - -<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2> - + +<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2> + <p>Se puede utilizar el {@link android.content.pm.PackageManager} para alternar el estado habilitado en cualquier componente definido en el archivo de manifiesto, incluidos los receptores de emisión que quieras habilitar o inhabilitar, como se muestra en el fragmento que aparece a continuación:</p> <pre>ComponentName receiver = new ComponentName(context, myReceiver.class); diff --git a/docs/html-intl/intl/es/training/multiscreen/adaptui.jd b/docs/html-intl/intl/es/training/multiscreen/adaptui.jd index 61f0735bc409..7982ce16dac7 100644 --- a/docs/html-intl/intl/es/training/multiscreen/adaptui.jd +++ b/docs/html-intl/intl/es/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>En esta sección puedes aprender:</h2> <ol> @@ -27,17 +27,17 @@ previous.link=screendensities.html <ul> <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li> </ul> - + <h2>¡Pruébalo!</h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>En función del diseño actual de tu aplicación, la interfaz puede variar. Por ejemplo, si tu aplicación está en modo de panel dual, haz clic en un elemento del panel izquierdo para que aparezca en el panel de la derecha. Asimismo, si está en modo de panel único, el contenido deberÃa aparecer por sà mismo (en otra actividad).</p> @@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment { public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html-intl/intl/es/training/multiscreen/index.jd b/docs/html-intl/intl/es/training/multiscreen/index.jd index d836f962cc70..b9b591631bec 100644 --- a/docs/html-intl/intl/es/training/multiscreen/index.jd +++ b/docs/html-intl/intl/es/training/multiscreen/index.jd @@ -6,10 +6,10 @@ next.link=screensizes.html @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>Dependencias y requisitos previos</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>Dependencias y requisitos previos</h2> <ul> <li>Android 1.6 o superior (Android 2.1 o superior para la aplicación de ejemplo)</li> @@ -26,17 +26,17 @@ href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</ <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li> </ul> - -<h2>¡Pruébalo!</h2> - -<div class="download-box"> + +<h2>¡Pruébalo!</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Android se utiliza en cientos de dispositivos con diferentes tamaños de pantalla, desde pequeños teléfonos hasta enormes televisores. Por ello, es importante que diseñes tu aplicación para que sea compatible con todos los tamaños de pantalla y esté disponible para el mayor número de usuarios posible.</p> <p>Sin embargo, no es suficiente con que tu aplicación sea compatible con diferentes dispositivos. Cada tamaño de pantalla ofrece diferentes posibilidades y retos para la interacción del usuario. Por ello, para satisfacer completamente a tus usuarios e impresionarlos, tu aplicación debe ir más allá de simplemente <em>admitir</em> varias pantallas: debe <em>optimizar</em> la experiencia de usuario para cada configuración de pantalla.</p> @@ -47,17 +47,17 @@ href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</ <p class="note"><strong>Nota:</strong> en esta sección y en el ejemplo correspondiente, se utiliza la <a href="{@docRoot}tools/support-library/index.html">biblioteca de compatibilidad</a> para poder usar las API de <PH>{@link android.app.Fragment}</PH> en versiones anteriores a Android 3.0. Debes descargar y la biblioteca y añadirla a tu aplicación para poder utilizar todas las API que se indican en esta sección.</p> - - -<h2>Secciones</h2> - -<dl> - <dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt> - <dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd> - - <dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt> - <dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de pÃxeles (mediante pÃxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd> - - <dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt> - <dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd> -</dl> + + +<h2>Secciones</h2> + +<dl> + <dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt> + <dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd> + + <dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt> + <dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de pÃxeles (mediante pÃxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd> + + <dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt> + <dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd> +</dl> diff --git a/docs/html-intl/intl/es/training/multiscreen/screendensities.jd b/docs/html-intl/intl/es/training/multiscreen/screendensities.jd index 0edb89fd4707..a91f5a045041 100644 --- a/docs/html-intl/intl/es/training/multiscreen/screendensities.jd +++ b/docs/html-intl/intl/es/training/multiscreen/screendensities.jd @@ -12,8 +12,8 @@ next.link=adaptui.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>En esta sección puedes aprender:</h2> <ol> @@ -29,15 +29,15 @@ next.link=adaptui.html </ul> <h2>¡Pruébalo!</h2> - -<div class="download-box"> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>En esta sección se explica cómo proporcionar diferentes recursos y utilizar unidades de medida de resolución independiente para admitir diferentes densidades de pantalla.</p> @@ -48,8 +48,8 @@ next.link=adaptui.html <p>Por ejemplo, al especificar un espacio entre dos vistas, debes utilizar <code>dp</code> en lugar de <code>px</code>:</p> <pre> -<Button android:layout_width="wrap_content" - android:layout_height="wrap_content" +<Button android:layout_width="wrap_content" + android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> @@ -57,8 +57,8 @@ next.link=adaptui.html <p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p> <pre> -<TextView android:layout_width="match_parent" - android:layout_height="wrap_content" +<TextView android:layout_width="match_parent" + android:layout_height="wrap_content" android:textSize="20sp" /> </pre> diff --git a/docs/html-intl/intl/es/training/multiscreen/screensizes.jd b/docs/html-intl/intl/es/training/multiscreen/screensizes.jd index 9a971d1c000c..9af109c62ad3 100644 --- a/docs/html-intl/intl/es/training/multiscreen/screensizes.jd +++ b/docs/html-intl/intl/es/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>En esta sección puedes aprender:</h2> <ol> @@ -30,26 +30,26 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li> </ul> -<h2>¡Pruébalo!</h2> - -<div class="download-box"> +<h2>¡Pruébalo!</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p> -<ul> - <li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li> - <li>Configura la pantalla con el diseño de interfaz adecuado.</li> +<ul> + <li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li> + <li>Configura la pantalla con el diseño de interfaz adecuado.</li> <li>Asegúrate de aplicar el diseño adecuado a la pantalla correspondiente.</li> - <li>Utiliza el mapa de bits con la escala adecuada.</li> -</ul> + <li>Utiliza el mapa de bits con la escala adecuada.</li> +</ul> -<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2> +<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2> <p>Para garantizar que el diseño es flexible y que se adapta a varios tamaños de pantalla, debes utilizar los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para la altura y el ancho de algunos componentes de la vista. Si utilizas <code>"wrap_content"</code>, el ancho o la altura de la vista se establece en el tamaño mÃnimo necesario para adaptar el contenido a esta vista, mientras que <code>"match_parent"</code> (también conocido como <code>"fill_parent"</code> antes del nivel 8 del API) provoca que el componente se amplÃe hasta coincidir con el tamaño de la vista principal.</p> @@ -65,7 +65,7 @@ next.link=screendensities.html <p class="img-caption"><strong>Figura 1.</strong> La aplicación de ejemplo News Reader en modo vertical (izquierda) y horizontal (derecha)</p> -<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2> +<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2> <p>Puedes crear diseños de un cierto nivel de complejidad con instancias anidadas de <PH>{@link android.widget.LinearLayout}</PH> y combinaciones de los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code>. Sin embargo, <PH>{@link android.widget.LinearLayout}</PH> no te permite controlar con precisión las relaciones espaciales de las vistas secundarias; las vistas de <PH>{@link android.widget.LinearLayout}</PH> simplemente se alinean en paralelo. Si quieres orientar las vistas secundarias de una forma que no sea una lÃnea recta, a menudo la mejor solución es utilizar <PH>{@link android.widget.RelativeLayout}</PH>que te permite especificar el diseño según las relaciones espaciales entre los componentes. Por ejemplo, puedes alinear una vista secundaria en el lateral izquierdo y otra vista en el lateral derecho de la pantalla.</p> @@ -115,8 +115,8 @@ next.link=screendensities.html <p>Ten en cuenta que aunque el tamaño de los componentes es diferente, las relaciones espaciales se mantienen según se ha especificado con <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p> - -<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2> + +<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2> <p>Hay mucha diferencia entre un diseño flexible y un diseño relativo como el que se ha utilizado en las secciones anteriores. Aunque ambos diseños se adaptan a diferentes pantalla estirando el espacio dentro de los componentes y alrededor de los mismos, puede que no ofrezcan la mejor experiencia de usuario para cada tamaño de pantalla. Por tanto, tu aplicación no solo debe implementar los diseños flexibles, sino que también debe ofrecer varios diseños alternativos para diferentes configuraciones de pantalla. Para ello, se utilizan <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">calificadores de configuración</a>, que permiten que el tiempo de ejecución seleccione el recurso adecuado en función de la configuración actual del dispositivo (por ejemplo, un diseño diferente para diferentes tamaños de pantalla).</p> @@ -158,7 +158,7 @@ next.link=screendensities.html <p>No obstante, esto no funcionará en los dispositivos anteriores a Android 3.2 porque no reconocen <code>sw600dp</code> como calificador de tamaño, por lo que también tendrás que seguir utilizando el calificador <code>large</code>. Por tanto, debes tener un archivo con el nombre <code>res/layout-large/main.xml</code> idéntico a <code>res/layout-sw600dp/main.xml</code>. En la siguiente sección, obtendrás información sobre una técnica que te permite evitar que se dupliquen los archivos de diseños.</p> -<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2> +<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2> <p>El calificador de ancho mÃnimo solo está disponible en Android 3.2 o superior. Por tanto, tendrás que seguir utilizando los contenedores de tamaño abstractos (pequeño, normal, grande y extragrande) para que sean compatibles con versiones anteriores. Por ejemplo, si quieres que tu interfaz de usuario sea de panel único en teléfonos pero multipanel en tablets de 7", televisiones y otros dispositivos grandes, tendrás que utilizar los siguientes archivos:</p> @@ -202,7 +202,7 @@ next.link=screendensities.html <PH>{@code large}</PH>y las televisiones y los tablets posteriores a la versión 3.2 utilizarán <code>sw600dp</code>).</p> -<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2> +<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2> <p>Aunque algunos diseños se pueden utilizar tanto en modo horizontal como vertical, la mayorÃa de ellos pueden beneficiarse de los ajustes. A continuación, se indica cómo se comporta el diseño según cada tamaño y orientación de la pantalla en la aplicación de ejemplo News Reader:</p> diff --git a/docs/html-intl/intl/in/design/get-started/principles.jd b/docs/html-intl/intl/in/design/get-started/principles.jd index 9aed08e289d6..2a1d194b0616 100644 --- a/docs/html-intl/intl/in/design/get-started/principles.jd +++ b/docs/html-intl/intl/in/design/get-started/principles.jd @@ -277,7 +277,7 @@ meskipun hanya sesuatu yang sederhana.</p> <div class="col-7"> <h4 id="do-heavy-lifting-for-me">Lakukan pekerjaan yang sulit untuk saya</h4> -<p>Buatlah pemula merasa seperti ahli dengan memungkinkan mereka untuk melakukan hal-hal yang mereka pikir tidak akan bisa. +<p>Buatlah pemula merasa seperti ahli dengan memungkinkan mereka untuk melakukan hal-hal yang mereka pikir tidak akan bisa. Misalnya, pintasan yang menggabungkan beberapa efek foto dapat membuat foto amatir terlihat mengagumkan hanya dalam beberapa langkah.</p> diff --git a/docs/html-intl/intl/in/design/patterns/navigation.jd b/docs/html-intl/intl/in/design/patterns/navigation.jd index a8afaaa794e0..491570030b53 100644 --- a/docs/html-intl/intl/in/design/patterns/navigation.jd +++ b/docs/html-intl/intl/in/design/patterns/navigation.jd @@ -121,7 +121,7 @@ pemberitahuan tunggal yang mengarahkan pengguna ke layar antara. Layar ini meran kejadian tersebut, dan menyediakan path bagi pengguna untuk menjelajah ke dalam aplikasi. Pemberitahuan dengan gaya seperti ini disebut <em>pemberitahuan tidak langsung</em>.</p> -<p>Berbeda dengan pemberitahuan standar (langsung), menekan tombol Back dari +<p>Berbeda dengan pemberitahuan standar (langsung), menekan tombol Back dari layar antara pada pemberitahuan tidak langsung akan mengembalikan pengguna ke titik pemicu pemberitahuan tersebut—tidak ada layar tambahan yang disisipkan ke dalam back-stack. Setelah pengguna melanjutkan ke dalam aplikasi dari layar antara, tombol Up dan Back akan berperilaku seperti pada pemberitahuan standar, sebagaimana dijelaskan di atas: @@ -168,7 +168,7 @@ yang akan dibahas di bawah ini.</p> informasi dan semua tindakan terkait yang dapat dilakukan pengguna. Aplikasi Anda adalah kumpulan aktivitas, yang terdiri dari aktivitas yang Anda buat dan aktivitas yang Anda gunakan ulang dari aplikasi lain.</p> -<p><strong>Tugas</strong> adalah urutan aktivitas yang diikuti pengguna untuk mencapai tujuan. +<p><strong>Tugas</strong> adalah urutan aktivitas yang diikuti pengguna untuk mencapai tujuan. Tugas tunggal dapat memanfaatkan aktivitas dari satu aplikasi saja, atau dapat memanfaatkan aktivitas dari sejumlah aplikasi berbeda.</p> diff --git a/docs/html-intl/intl/in/guide/components/activities.jd b/docs/html-intl/intl/in/guide/components/activities.jd index 6cac69638f49..bbc061cdc8cb 100644 --- a/docs/html-intl/intl/in/guide/components/activities.jd +++ b/docs/html-intl/intl/in/guide/components/activities.jd @@ -53,7 +53,7 @@ jendela lain.</p> <p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap -aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali +aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas dalam sebuah tumpukan ("back-stack"). Bila sebuah aktivitas baru dimulai, aktivitas itu akan didorong ke atas back-stack dan mengambil fokus pengguna. Back-stack mematuhi mekanisme dasar tumpukan "masuk terakhir, keluar pertama", @@ -67,7 +67,7 @@ melalui metode callback daur hidupnya. Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam statusnya—apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya—dan masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang -sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas +sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas objek besar, seperti koneksi jaringan atau database. Bila aktivitas dilanjutkan, Anda bisa memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini semuanya bagian dari daur hidup aktivitas.</p> @@ -89,7 +89,7 @@ terpenting adalah:</p> <dl> <dt>{@link android.app.Activity#onCreate onCreate()}</dt> <dd>Anda harus mengimplementasikan metode ini. Sistem memanggilnya saat membuat - aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial + aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial aktivitas. Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView setContentView()} untuk mendefinisikan layout untuk antarmuka pengguna aktivitas.</dd> @@ -115,7 +115,7 @@ dalam jendela aktivitas dan bisa merespons interaksi pengguna. Misalnya, sebuah tombol yang mengawali suatu tindakan bila pengguna menyentuhnya.</p> <p>Android menyediakan sejumlah tampilan siap-dibuat yang bisa Anda gunakan untuk mendesain dan mengatur -layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar, +layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar, misalnya tombol, bidang teks, kotak cek, atau sekadar sebuah gambar. "Layout" adalah tampilan yang diturunkan dari {@link android.view.ViewGroup} yang memberikan sebuah model layout unik untuk tampilan anaknya, misalnya layout linier, layout grid, atau layout relatif. Anda juga bisa mensubkelaskan kelas-kelas {@link android.view.View} dan @@ -124,7 +124,7 @@ layout Anda sendiri dan menerapkannya ke layout aktivitas Anda.</p> <p>Cara paling umum untuk mendefinisikan layout dengan menggunakan tampilan adalah dengan file layout XML yang disimpan dalam sumber daya aplikasi Anda. Dengan cara ini, Anda bisa memelihara desain antarmuka pengguna Anda secara terpisah dari -kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI +kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI aktivitas Anda dengan {@link android.app.Activity#setContentView(int) setContentView()}, dengan meneruskan ID sumber daya untuk layout itu. Akan tetapi, Anda juga bisa membuat {@link android.view.View} baru dalam kode aktivitas dan membuat hierarki tampilan dengan menyisipkan {@link @@ -169,7 +169,7 @@ untuk informasi selengkapnya tentang cara mendeklarasikan aktivitas Anda dalam m <p>Elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> juga bisa menetapkan berbagai filter intent—dengan menggunakan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code -<intent-filter>}</a> —untuk mendeklarasikan cara komponen aplikasi lain +<intent-filter>}</a> —untuk mendeklarasikan cara komponen aplikasi lain mengaktifkannya.</p> <p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub @@ -251,7 +251,7 @@ startActivity(intent); <p>Ekstra {@link android.content.Intent#EXTRA_EMAIL} yang ditambahkan ke intent adalah sebuah larik string alamat email yang menjadi tujuan pengiriman email. Bila aplikasi email merespons intent ini, - aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to" + aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to" pada formulir penulisan email. Dalam situasi ini, aktivitas aplikasi email dimulai dan bila pengguna selesai, aktivitas Anda akan dilanjutkan.</p> @@ -297,7 +297,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { </pre> <p>Contoh ini menunjukkan logika dasar yang harus Anda gunakan dalam metode {@link -android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani +android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani hasil aktivitas. Syarat pertama memeriksa apakah permintaan berhasil—jika ya, maka {@code resultCode} akan berupa {@link android.app.Activity#RESULT_OK}—dan apakah permintaan yang direspons hasil ini dikenal—dalam hal ini, {@code requestCode} cocok dengan @@ -602,19 +602,19 @@ tidak berubah. Sebagai gantinya, sistem harus membuat ulang objek {@link android menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin mengharapkan aktivitas untuk sama persis dengan sebelumnya. Dalam situasi ini, Anda bisa memastikan bahwa -informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan +informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p> <p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini -sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan +sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link android.os.Bundle#putString putString()} dan {@link android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda dan pengguna menyusuri kembali ke aktivitas tersebut, sistem akan membuat kembali aktivitas dan meneruskan {@link android.os.Bundle} ke {@link android.app.Activity#onCreate onCreate()} maupun {@link -android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu metode ini, Anda bisa mengekstrak status tersimpan dari {@link android.os.Bundle} dan memulihkan status aktivitas. Jika tidak ada informasi status untuk dipulihkan, maka {@link android.os.Bundle} yang diteruskan kepada adalah Anda null (yang akan terjadi bila aktivitas dibuat untuk @@ -639,7 +639,7 @@ onPause()}.</p> <p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas akan dipulihkan oleh implementasi default {@link -android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya, +android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya, implementasi default akan memanggil metode {@link android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@link android.view.View} dalam layout, yang memungkinkan setiap tampilan untuk memberi informasi tentang dirinya @@ -696,7 +696,7 @@ menggunakan aplikasi.</p> , dan bahasa). Bila terjadi perubahan demikian, Android akan membuat kembali aktivitas yang berjalan (sistem akan memanggil {@link android.app.Activity#onDestroy}, kemudian segera memanggil {@link android.app.Activity#onCreate onCreate()}). Perilaku ini -didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang +didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk layar orientasi dan ukuran yang berbeda).</p> @@ -722,7 +722,7 @@ Perubahan Runtime</a>.</p> akan berhenti sementara dan berhenti sama sekali (walau tidak akan berhenti jika masih terlihat di latar belakang), saat aktivitas lain dibuat. Jika aktivitas-aktivitas ini berbagi data yang disimpan ke disk atau di tempat lain, Anda perlu memahami bahwa aktivitas pertama tidak dihentikan sepenuhnya sebelum aktivitas kedua dibuat. -Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian +Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian aktivitas pertama.</p> <p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam diff --git a/docs/html-intl/intl/in/guide/components/bound-services.jd b/docs/html-intl/intl/in/guide/components/bound-services.jd index 5d1f65ed7c8e..6e5e65a167e8 100644 --- a/docs/html-intl/intl/in/guide/components/bound-services.jd +++ b/docs/html-intl/intl/in/guide/components/bound-services.jd @@ -137,7 +137,7 @@ mendefinisikan {@link android.os.Handler} yang akan merespons aneka tipe objek { android.os.Message}. {@link android.os.Handler} ini adalah dasar bagi {@link android.os.Messenger} yang nanti bisa berbagi {@link android.os.IBinder} dengan klien, sehingga memungkinkan klien mengirim perintah ke layanan dengan menggunakan objek {@link -android.os.Message}. Selain itu, klien bisa mendefinisikan sendiri {@link android.os.Messenger} +android.os.Message}. Selain itu, klien bisa mendefinisikan sendiri {@link android.os.Messenger} sehingga layanan bisa mengirim balik pesan. <p>Inilah cara termudah melakukan komunikasi antarproses (IPC), karena {@link android.os.Messenger} akan mengantre semua permintaan ke dalam satu thread sehingga Anda tidak perlu mendesain @@ -539,7 +539,7 @@ selengkapnya di bawah ini.)</p> </ol> <p>Misalnya, cuplikan berikut menghubungkan klien ke layanan yang dibuat di atas dengan -<a href="#Binder">memperluas kelas Binder</a>, sehingga tinggal mengkonversi +<a href="#Binder">memperluas kelas Binder</a>, sehingga tinggal mengkonversi {@link android.os.IBinder} yang dihasilkan ke kelas {@code LocalService} dan meminta instance {@code LocalService}:</p> @@ -573,7 +573,7 @@ bindService(intent, mConnection, Context.BIND_AUTO_CREATE); </pre> <ul> - <li>Parameter pertama {@link android.content.Context#bindService bindService()} adalah sebuah + <li>Parameter pertama {@link android.content.Context#bindService bindService()} adalah sebuah {@link android.content.Intent} yang secara eksplisit menyebutkan layanan yang akan diikat (walaupun intent boleh implisit).</li> <li>Parameter kedua adalah objek {@link android.content.ServiceConnection}.</li> diff --git a/docs/html-intl/intl/in/guide/components/fragments.jd b/docs/html-intl/intl/in/guide/components/fragments.jd index 14d4ef3eccbf..9f7199cd8a0b 100644 --- a/docs/html-intl/intl/in/guide/components/fragments.jd +++ b/docs/html-intl/intl/in/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>Lihat juga</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Membangun UI Dinamis dengan Fragmen</a></li> @@ -47,32 +47,32 @@ dan Handset</a></li> </div> <p>{@link android.app.Fragment} mewakili perilaku atau bagian dari antarmuka pengguna dalam -{@link android.app.Activity}. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas untuk membangun UI -multipanel dan menggunakan kembali sebuah fragmen dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian -modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian input sendiri, dan -yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang +{@link android.app.Activity}. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas untuk membangun UI +multipanel dan menggunakan kembali sebuah fragmen dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian +modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian input sendiri, dan +yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang bisa digunakan kembali dalam aktivitas berbeda).</p> -<p>Fragmen harus selalu tertanam dalam aktivitas dan daur hidup fragmen secara langsung +<p>Fragmen harus selalu tertanam dalam aktivitas dan daur hidup fragmen secara langsung dipengaruhi oleh daur hidup aktivitas host-nya. Misalnya, saat aktivitas dihentikan sementara, semua fragmen di dalamnya juga dihentikan sementara, dan bila aktivitas dimusnahkan, semua fragmen juga demikian. Akan tetapi, saat -aktivitas berjalan (dalam <a href="{@docRoot}guide/components/activities.html#Lifecycle">status daur hidup</a> <em>dilanjutkan</em>, Anda bisa -memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi +aktivitas berjalan (dalam <a href="{@docRoot}guide/components/activities.html#Lifecycle">status daur hidup</a> <em>dilanjutkan</em>, Anda bisa +memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi fragmen, Anda juga bisa menambahkannya ke back-stack yang dikelola oleh aktivitas -—setiap entri back-stack merupakan record transaksi fragmen yang +—setiap entri back-stack merupakan record transaksi fragmen yang terjadi. Dengan back-stack pengguna dapat membalikkan transaksi fragmen (mengarah mundur), dengan menekan tombol <em>Back</em>.</p> <p>Bila Anda menambahkan fragmen sebagai bagian dari layout aktivitas, fragmen itu berada dalam {@link -android.view.ViewGroup} di hierarki tampilan aktivitas tersebut dan fragmen mendefinisikan +android.view.ViewGroup} di hierarki tampilan aktivitas tersebut dan fragmen mendefinisikan layout tampilannya sendiri. Anda bisa menyisipkan fragmen ke dalam layout aktivitas dengan mendeklarasikan fragmen dalam file layout aktivitas , sebagai elemen {@code <fragment>}, atau dari kode aplikasi dengan menambahkannya ke - {@link android.view.ViewGroup} yang ada. Akan tetapi, fragmen tidak harus menjadi bagian dari -layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk + {@link android.view.ViewGroup} yang ada. Akan tetapi, fragmen tidak harus menjadi bagian dari +layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk aktivitas tersebut.</p> -<p>Dokumen ini menjelaskan cara membangun aplikasi menggunakan fragmen, termasuk +<p>Dokumen ini menjelaskan cara membangun aplikasi menggunakan fragmen, termasuk cara fragmen mempertahankan statusnya bila ditambahkan ke back-stack aktivitas, berbagi kejadian dengan aktivitas, dan fragmen lain dalam aktivitas, berkontribusi pada action-bar aktivitas, dan lainnya.</p> @@ -80,45 +80,45 @@ aktivitas, dan lainnya.</p> <h2 id="Design">Filosofi Desain</h2> -<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih -dinamis dan fleksibel pada layar besar, seperti tablet. Karena -layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan -bertukar komponen UI. Fragmen memungkinkan desain seperti itu tanpa perlu mengelola perubahan -kompleks pada hierarki tampilan. Dengan membagi layout aktivitas menjadi beberapa fragmen, Anda bisa -mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack +<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih +dinamis dan fleksibel pada layar besar, seperti tablet. Karena +layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan +bertukar komponen UI. Fragmen memungkinkan desain seperti itu tanpa perlu mengelola perubahan +kompleks pada hierarki tampilan. Dengan membagi layout aktivitas menjadi beberapa fragmen, Anda bisa +mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack yang dikelola oleh aktivitas.</p> -<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di -sebelah kiri dan fragmen lainnya untuk menampilkan artikel di sebelah kanan—kedua fragmen ini muncul di satu -aktivitas, berdampingan, dan masing-masing fragmen memiliki serangkaian metode callback daur hidup dan menangani kejadian input +<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di +sebelah kiri dan fragmen lainnya untuk menampilkan artikel di sebelah kanan—kedua fragmen ini muncul di satu +aktivitas, berdampingan, dan masing-masing fragmen memiliki serangkaian metode callback daur hidup dan menangani kejadian input penggunanya sendiri. Sehingga, sebagai ganti menggunakan satu aktivitas untuk memilih -artikel dan aktivitas lainnya untuk membaca artikel, pengguna bisa memilih artikel dan membaca semuanya dalam +artikel dan aktivitas lainnya untuk membaca artikel, pengguna bisa memilih artikel dan membaca semuanya dalam aktivitas yang sama, sebagaimana diilustrasikan dalam layout tablet pada gambar 1.</p> -<p>Anda harus mendesain masing-masing fragmen sebagai komponen aktivitas modular dan bisa digunakan kembali. Yakni, karena -setiap fragmen mendefinisikan layoutnya dan perilakunya dengan callback daur hidupnya sendiri, Anda bisa memasukkan +<p>Anda harus mendesain masing-masing fragmen sebagai komponen aktivitas modular dan bisa digunakan kembali. Yakni, karena +setiap fragmen mendefinisikan layoutnya dan perilakunya dengan callback daur hidupnya sendiri, Anda bisa memasukkan satu fragmen dalam banyak aktivitas, sehingga Anda harus mendesainnya untuk digunakan kembali dan mencegah -memanipulasi satu fragmen dari fragmen lain secara langsung. Ini terutama penting karena dengan -fragmen modular Anda bisa mengubah kombinasi fragmen untuk ukuran layar berbeda. Saat mendesain aplikasi -untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam +memanipulasi satu fragmen dari fragmen lain secara langsung. Ini terutama penting karena dengan +fragmen modular Anda bisa mengubah kombinasi fragmen untuk ukuran layar berbeda. Saat mendesain aplikasi +untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam konfigurasi layout berbeda untuk mengoptimalkan pengalaman pengguna berdasarkan ruang layar yang tersedia. Misalnya -, pada handset, fragmen mungkin perlu dipisahkan untuk menyediakan UI panel tunggal +, pada handset, fragmen mungkin perlu dipisahkan untuk menyediakan UI panel tunggal bila lebih dari satu yang tidak cocok dalam aktivitas yang sama.</p> <img src="{@docRoot}images/fundamentals/fragments.png" alt="" /> <p class="img-caption"><strong>Gambar 1.</strong> Contoh cara dua modul UI yang didefinisikan oleh - fragmen bisa digabungkan ke dalam satu aktivitas untuk desain tablet, namun dipisahkan untuk + fragmen bisa digabungkan ke dalam satu aktivitas untuk desain tablet, namun dipisahkan untuk desain handset.</p> <p>Misalnya—untuk melanjutkan contoh aplikasi berita— aplikasi bisa menanamkan dua fragmen dalam <em>Aktivitas A</em>, saat berjalan pada perangkat berukuran tablet. Akan tetapi, pada -layar berukuran handset, ruang untuk kedua fragmen tidak cukup, sehingga <em>Aktivitas A</em> hanya -menyertakan fragmen untuk daftar artikel, dan saat pengguna memilih artikel, -<em>Aktivitas B</em> akan dimulai, termasuk fragmen kedua untuk membaca artikel. Sehingga, aplikasi mendukung +layar berukuran handset, ruang untuk kedua fragmen tidak cukup, sehingga <em>Aktivitas A</em> hanya +menyertakan fragmen untuk daftar artikel, dan saat pengguna memilih artikel, +<em>Aktivitas B</em> akan dimulai, termasuk fragmen kedua untuk membaca artikel. Sehingga, aplikasi mendukung tablet dan handset dengan menggunakan kembali fragmen dalam kombinasi berbeda, seperti diilustrasikan dalam gambar 1.</p> -<p>Untuk informasi selengkapnya tentang mendesain aplikasi menggunakan kombinasi fragmen berbeda +<p>Untuk informasi selengkapnya tentang mendesain aplikasi menggunakan kombinasi fragmen berbeda untuk konfigurasi layar berbeda, lihat panduan untuk <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Mendukung Tablet dan Handset</a>.</p> @@ -131,26 +131,26 @@ untuk konfigurasi layar berbeda, lihat panduan untuk <a href="{@docRoot}guide/pr aktivitasnya berjalan).</p> </div> -<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau -subkelasnya yang ada). Kelas {@link android.app.Fragment} memiliki kode yang mirip seperti +<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau +subkelasnya yang ada). Kelas {@link android.app.Fragment} memiliki kode yang mirip seperti {@link android.app.Activity}. Kelas ini memiliki metode callback yang serupa dengan aktivitas, seperti {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()}, {@link android.app.Fragment#onPause onPause()}, dan {@link android.app.Fragment#onStop onStop()}. Sebenarnya , jika Anda mengkonversi aplikasi Android saat ini untuk menggunakan fragmen, Anda mungkin cukup memindahkan -kode dari metode callback aktivitas ke masing-masing metode callback +kode dari metode callback aktivitas ke masing-masing metode callback fragmen.</p> <p>Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:</p> <dl> <dt>{@link android.app.Fragment#onCreate onCreate()}</dt> - <dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus -menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen + <dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus +menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen dihentikan sementara atau dihentikan, kemudian dilanjutkan.</dd> <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt> - <dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya -untuk yang pertama kali. Untuk menggambar UI fragmen, Anda harus mengembalikan {@link android.view.View} dari metode -ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika + <dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya +untuk yang pertama kali. Untuk menggambar UI fragmen, Anda harus mengembalikan {@link android.view.View} dari metode +ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika fragmen tidak menyediakan UI.</dd> <dt>{@link android.app.Activity#onPause onPause()}</dt> <dd>Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang meninggalkan @@ -161,7 +161,7 @@ pengguna mungkin tidak kembali).</dd> <p>Kebanyakan aplikasi harus mengimplementasikan setidaknya tiga metode ini untuk setiap fragmen, namun ada beberapa metode callback lain yang juga harus Anda gunakan untuk menangani berbagai tahap -daur hidup fragmen. Semua metode callback daur hidup akan dibahas secara lebih detail, di bagian +daur hidup fragmen. Semua metode callback daur hidup akan dibahas secara lebih detail, di bagian tentang <a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>.</p> @@ -171,15 +171,15 @@ android.app.Fragment}:</p> <dl> <dt>{@link android.app.DialogFragment}</dt> <dd>Menampilkan dialog mengambang. Penggunaan kelas ini untuk membuat dialog merupakan alternatif yang baik dari -penggunaan metode helper dialog di kelas {@link android.app.Activity}, karena Anda bisa -menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas, +penggunaan metode helper dialog di kelas {@link android.app.Activity}, karena Anda bisa +menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas, sehingga pengguna bisa kembali ke fragmen yang ditinggalkan.</dd> <dt>{@link android.app.ListFragment}</dt> <dd>Menampilkan daftar item yang dikelola oleh adaptor (seperti {@link android.widget.SimpleCursorAdapter}), serupa dengan {@link android.app.ListActivity}. Menampilkan beberapa metode pengelolaan daftar tampilan seperti callback {@link -android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} untuk +android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} untuk menangani kejadian klik.</dd> <dt>{@link android.preference.PreferenceFragment}</dt> @@ -196,7 +196,7 @@ layoutnya sendiri ke aktivitas.</p> <p>Untuk menyediakan layout fragmen, Anda harus mengimplementasikan metode callback {@link android.app.Fragment#onCreateView onCreateView()}, yang dipanggil sistem Android -bila tiba saatnya fragmen menggambar layoutnya. Implementasi Anda atas metode ini harus mengembalikan +bila tiba saatnya fragmen menggambar layoutnya. Implementasi Anda atas metode ini harus mengembalikan {@link android.view.View} yang menjadi akar layout fragmen.</p> <p class="note"><strong>Catatan:</strong> Jika fragmen adalah subkelas {@link @@ -205,7 +205,7 @@ android.app.ListFragment}, implementasi default akan mengembalikan {@link androi <p>Untuk mengembalikan layout dari {@link android.app.Fragment#onCreateView onCreateView()}, Anda bisa memekarkannya dari <a href="{@docRoot}guide/topics/resources/layout-resource.html">sumber daya layout</a> yang didefinisikan di XML. Untuk -membantu melakukannya, {@link android.app.Fragment#onCreateView onCreateView()} menyediakan objek +membantu melakukannya, {@link android.app.Fragment#onCreateView onCreateView()} menyediakan objek {@link android.view.LayoutInflater}.</p> <p>Misalnya, ini adalah subkelas {@link android.app.Fragment} yang memuat layout dari file @@ -227,7 +227,7 @@ public static class ExampleFragment extends Fragment { <h3>Membuat layout</h3> <p>Dalam contoh di atas, {@code R.layout.example_fragment} merupakan acuan ke sumber daya layout bernama {@code example_fragment.xml} yang tersimpan dalam sumber daya aplikasi. Untuk informasi tentang cara -membuat layout di XML, lihat dokumentasi +membuat layout di XML, lihat dokumentasi <a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p> </div> </div> @@ -235,12 +235,12 @@ membuat layout di XML, lihat dokumentasi <p>Parameter {@code container} yang diteruskan ke {@link android.app.Fragment#onCreateView onCreateView()} adalah induk {@link android.view.ViewGroup} (dari layout aktivitas) tempat layout fragmen -akan disisipkan. Parameter {@code savedInstanceState} adalah {@link android.os.Bundle} yang +akan disisipkan. Parameter {@code savedInstanceState} adalah {@link android.os.Bundle} yang menyediakan data tentang instance fragmen sebelumnya, jika fragmen dilanjutkan (status pemulihan dibahas selengkapnya di bagian tentang <a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>).</p> -<p>Metode {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} membutuhkan +<p>Metode {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} membutuhkan tiga argumen:</p> <ul> <li>ID sumber daya layout yang ingin dimekarkan.</li> @@ -260,7 +260,7 @@ fragmen ke aktivitas.</p> <h3 id="Adding">Menambahkan fragmen ke aktivitas</h3> -<p>Biasanya, fragmen berkontribusi pada sebagian UI ke aktivitas host, yang ditanamkan sebagai +<p>Biasanya, fragmen berkontribusi pada sebagian UI ke aktivitas host, yang ditanamkan sebagai bagian dari hierarki tampilan keseluruhan aktivitas. Ada dua cara untuk menambahkan fragmen ke layout aktivitas:</p> @@ -297,13 +297,13 @@ untuk mengambil setiap fragmen. Sistem akan menyisipkan {@link android.view.View <div class="note"> <p><strong>Catatan:</strong> Setiap fragmen memerlukan identifier -unik yang bisa digunakan sistem untuk memulihkan fragmen jika aktivitas dimulai kembali (dan identifier yang bisa digunakan menangkap +unik yang bisa digunakan sistem untuk memulihkan fragmen jika aktivitas dimulai kembali (dan identifier yang bisa digunakan menangkap fragmen untuk melakukan transaksi, seperti menghapusnya). Ada tiga cara untuk memberikan ID bagi fragmen:</p> <ul> <li>Memberikan atribut {@code android:id} bersama ID unik.</li> <li>Memberikan atribut {@code android:tag} bersama string unik.</li> - <li>Jika Anda tidak memberikan dua hal tersebut, sistem akan menggunakan ID + <li>Jika Anda tidak memberikan dua hal tersebut, sistem akan menggunakan ID tampilan kontainer.</li> </ul> </div> @@ -354,15 +354,15 @@ android.app.FragmentTransaction#add(Fragment,String)} (dengan menyediakan string dalam layout aktivitas, ini tidak akan menerima panggilan ke {@link android.app.Fragment#onCreateView onCreateView()}. Jadi Anda tidak perlu mengimplementasikan metode itu.</p> -<p>Menyediakan tag string untuk fragmen tidak hanya untuk fragmen non-UI—Anda juga bisa +<p>Menyediakan tag string untuk fragmen tidak hanya untuk fragmen non-UI—Anda juga bisa menyediakan tag string untuk fragmen yang memiliki UI—namun jika fragmen tidak memiliki UI -, maka tag string adalah satu-satunya cara untuk mengidentifikasinya. Jika Anda ingin mendapatkan fragmen dari +, maka tag string adalah satu-satunya cara untuk mengidentifikasinya. Jika Anda ingin mendapatkan fragmen dari aktivitas nantinya, Anda perlu menggunakan {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}.</p> <p>Untuk contoh aktivitas yang menggunakan fragmen sebagai pekerja latar belakang, tanpa UI, lihat sampel {@code -FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui -Android SDK Manager) dan terletak di sistem Anda sebagai +FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui +Android SDK Manager) dan terletak di sistem Anda sebagai <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p> @@ -378,7 +378,7 @@ mendapatkannya, panggil {@link android.app.Activity#getFragmentManager()} dari a <li>Dapatkan fragmen yang ada di aktivitas dengan {@link android.app.FragmentManager#findFragmentById findFragmentById()} (untuk fragmen yang menyediakan UI dalam layout aktivitas) atau {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()} (untuk fragmen yang menyediakan atau tidak menyediakan UI).</li> +findFragmentByTag()} (untuk fragmen yang menyediakan atau tidak menyediakan UI).</li> <li>Tarik fragmen dari back-stack, dengan {@link android.app.FragmentManager#popBackStack()} (mensimulasikan perintah <em>Back</em> oleh pengguna).</li> <li>Daftarkan listener untuk perubahan pada back-stack, dengan {@link @@ -395,7 +395,7 @@ menambah dan menghapus fragmen.</p> <h2 id="Transactions">Melakukan Transaksi Fragmen</h2> -<p>Fitur menarik terkait penggunaan fragmen di aktivitas adalah kemampuan menambah, menghapus, mengganti, +<p>Fitur menarik terkait penggunaan fragmen di aktivitas adalah kemampuan menambah, menghapus, mengganti, dan melakukan tindakan lain dengannya, sebagai respons atas interaksi pengguna. Setiap set perubahan yang Anda lakukan untuk aktivitas disebut transaksi dan Anda bisa melakukan transaksi menggunakan API di {@link android.app.FragmentTransaction}. Anda juga bisa menyimpan setiap transaksi ke back-stack yang dikelola @@ -423,7 +423,7 @@ android.app.FragmentTransaction#addToBackStack addToBackStack()}, untuk menambah ke back-stack dari transaksi fragmen. Back-stack ini dikelola oleh aktivitas dan memungkinkan pengguna kembali ke status fragmen sebelumnya, dengan menekan tombol <em>Back</em>.</p> -<p>Misalnya, berikut ini cara mengganti satu fragmen dengan yang fragmen yang lain, dan mempertahankan +<p>Misalnya, berikut ini cara mengganti satu fragmen dengan yang fragmen yang lain, dan mempertahankan status sebelumnya di back-stack:</p> <pre> @@ -442,18 +442,18 @@ transaction.commit(); <p>Dalam contoh ini, {@code newFragment} menggantikan fragmen apa saja (jika ada) yang saat ini berada dalam kontainer layout yang diidentifikasi oleh ID {@code R.id.fragment_container}. Dengan memanggil @link -android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti -disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen +android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti +disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen sebelumnya dengan menekan tombol <em>Back</em>.</p> <p>Jika Anda menambahkan beberapa perubahan pada transaksi (seperti {@link android.app.FragmentTransaction#add add()} atau {@link android.app.FragmentTransaction#remove remove()}) dan panggil {@link -android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan -sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke +android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan +sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke back-stack sebagai satu transaksi dan tombol <em>Back</em> akan membalikannya semua.</p> -<p>Urutan menambahkan perubahan pada {@link android.app.FragmentTransaction} tidak berpengaruh, +<p>Urutan menambahkan perubahan pada {@link android.app.FragmentTransaction} tidak berpengaruh, kecuali:</p> <ul> <li>Anda harus memanggil {@link android.app.FragmentTransaction#commit()} paling akhir</li> @@ -462,9 +462,9 @@ urutan penambahannya akan menentukan urutan munculnya dalam hierarki tampilan</l </ul> <p>Jika Anda tidak memanggil {@link android.app.FragmentTransaction#addToBackStack(String) -addToBackStack()} saat melakukan transaksi yang menghapus fragmen, maka fragmen itu +addToBackStack()} saat melakukan transaksi yang menghapus fragmen, maka fragmen itu akan dimusnahkan bila transaksi diikat dan pengguna tidak bisa mengarah kembali ke sana. Sedangkan, jika -Anda memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} saat +Anda memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} saat menghapus fragmen, maka fragmen itu akan <em>dihentikan</em> dan akan dilanjutkan jika pengguna mengarah kembali.</p> @@ -473,9 +473,9 @@ transisi, dengan memanggil {@link android.app.FragmentTransaction#setTransition mengikatnya.</p> <p>Memanggil {@link android.app.FragmentTransaction#commit()} tidak akan langsung menjalankan -transaksi. Namun sebuah jadwal akan dibuat untuk dijalankan pada thread UI aktivitas (thread "utama") +transaksi. Namun sebuah jadwal akan dibuat untuk dijalankan pada thread UI aktivitas (thread "utama") begitu thread bisa melakukannya. Akan tetapi, jika perlu Anda bisa memanggil {@link -android.app.FragmentManager#executePendingTransactions()} dari thread UI untuk segera +android.app.FragmentManager#executePendingTransactions()} dari thread UI untuk segera mengeksekusi transaksi yang diserahkan oleh {@link android.app.FragmentTransaction#commit()}. Hal itu biasanya tidak perlu kecuali jika transaksi merupakan dependensi bagi pekerjaan dalam thread lain.</p> @@ -503,7 +503,7 @@ android.app.Fragment#getActivity()} dan dengan mudah melakukan tugas-tugas seper View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list); </pre> -<p>Demikian pula, aktivitas Anda bisa memanggil metode di fragmen dengan meminta acuan ke +<p>Demikian pula, aktivitas Anda bisa memanggil metode di fragmen dengan meminta acuan ke {@link android.app.Fragment} dari {@link android.app.FragmentManager}, menggunakan {@link android.app.FragmentManager#findFragmentById findFragmentById()} atau {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Misalnya:</p> @@ -537,7 +537,7 @@ public static class FragmentA extends ListFragment { </pre> <p>Selanjutnya aktivitas yang menjadi host fragmen akan mengimplementasikan antarmuka {@code OnArticleSelectedListener} - dan + dan mengesampingkan {@code onArticleSelected()} untuk memberi tahu fragmen B mengenai kejadian dari fragmen A. Untuk memastikan bahwa aktivitas host mengimplementasikan antarmuka ini, metode callback fragmen A {@link android.app.Fragment#onAttach onAttach()} (yang dipanggil sistem saat menambahkan @@ -564,7 +564,7 @@ public static class FragmentA extends ListFragment { <p>Jika aktivitas belum mengimplementasikan antarmuka, maka fragmen akan melontarkan {@link java.lang.ClassCastException}. -Jika berhasil, anggota {@code mListener} yang menyimpan acuan ke implementasi aktivitas +Jika berhasil, anggota {@code mListener} yang menyimpan acuan ke implementasi aktivitas {@code OnArticleSelectedListener}, sehingga fragmen A bisa berbagi kejadian dengan aktivitas, dengan memanggil metode yang didefinisikan oleh antarmuka {@code OnArticleSelectedListener}. Misalnya, jika fragmen A adalah ekstensi dari {@link android.app.ListFragment}, maka setiap kali @@ -654,7 +654,7 @@ seluruh layar).</dd> <dt><i>Dihentikan</i></dt> <dd>Fragmen tidak terlihat. Aktivitas host telah dihentikan atau fragmen telah dihapus dari aktivitas namun ditambahkan ke back-stack. Fragmen yang dihentikan -masih hidup (semua status dan informasi anggota masih disimpan oleh sistem). Akan tetapi, fragmen +masih hidup (semua status dan informasi anggota masih disimpan oleh sistem). Akan tetapi, fragmen tidak terlihat lagi oleh pengguna dan akan dimatikan jika aktivitas dimatikan.</dd> </dl> @@ -668,10 +668,10 @@ android.app.Fragment#onActivityCreated onActivityCreated()}. Untuk informasi sel status, lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a> .</p> -<p>Perbedaan paling signifikan dalam daur hidup antara aktivitas dan fragmen ada +<p>Perbedaan paling signifikan dalam daur hidup antara aktivitas dan fragmen ada pada cara penyimpanannya dalam back-stack masing-masing. Aktivitas ditempatkan ke back-stack aktivitas yang dikelola oleh sistem saat dihentikan, secara default (sehingga pengguna bisa mengarah kembali -ke aktivitas dengan tombol <em>Back</em>, seperti yang dibahas dalam <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan Back-Stack</a>). +ke aktivitas dengan tombol <em>Back</em>, seperti yang dibahas dalam <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan Back-Stack</a>). Akan tetapi, fragmen yang ditempatkan ke back-stack dikelola oleh aktivitas host hanya saat Anda secara eksplisit meminta agar instance disimpan dengan memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} selama transaksi yang @@ -736,7 +736,7 @@ melalui daur hidupnya oleh aktivitas.</p> <p>Untuk merangkum semua yang telah dibahas dalam dokumen ini, berikut ini contoh aktivitas yang menggunakan dua fragmen untuk membuat layout dua panel. Aktivitas di bawah ini menyertakan satu fragmen untuk menampilkan daftar putar Shakespeare dan fragmen lainnya menampilkan rangkuman pemutaran bila dipilih dari -daftar. Aktivitas ini juga menunjukkan cara menyediakan konfigurasi fragmen berbeda, +daftar. Aktivitas ini juga menunjukkan cara menyediakan konfigurasi fragmen berbeda, berdasarkan konfigurasi layar.</p> <p class="note"><strong>Catatan:</strong> Kode sumber lengkap untuk aktivitas ini tersedia di @@ -752,7 +752,7 @@ android.app.Activity#onCreate onCreate()}:</p> {@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout} -<p>Dengan layout ini, sistem akan membuat instance {@code TitlesFragment} (yang mencantumkan +<p>Dengan layout ini, sistem akan membuat instance {@code TitlesFragment} (yang mencantumkan judul) segera setelah aktivitas memuat layout, sementara {@link android.widget.FrameLayout} (lokasi penempatan fragmen untuk menampilkan rangkuman pemutaran) menempati ruang di sisi kanan layar, namun pada awalnya masih kosong. Seperti yang akan Anda lihat di bawah ini, sampai pengguna memilih item @@ -769,14 +769,14 @@ tersimpan di {@code res/layout/fragment_layout.xml}:</p> <p>Layout ini hanya menyertakan {@code TitlesFragment}. Ini artinya saat perangkat berada dalam orientasi tegak, hanya judul daftar putar yang terlihat. Jadi, saat pengguna mengklik item -daftar dalam konfigurasi ini, aplikasi akan memulai aktivitas baru untuk menampilkan rangkuman, +daftar dalam konfigurasi ini, aplikasi akan memulai aktivitas baru untuk menampilkan rangkuman, sebagai ganti pemuatan fragmen kedua.</p> <p>Berikutnya, Anda bisa melihat bagaimana hal ini dilakukan dalam kelas fragmen. Pertama adalah {@code TitlesFragment}, yang menampilkan judul daftar putar Shakespeare. Fragmen ini membuat ekstensi {@link android.app.ListFragment} dan mengandalkannya itu untuk menangani sebagian besar pekerjaan tampilan daftar.</p> -<p>Saat Anda memeriksa kode ini, perhatikan bahwa ada dua kemungkinan perilaku saat pengguna mengklik +<p>Saat Anda memeriksa kode ini, perhatikan bahwa ada dua kemungkinan perilaku saat pengguna mengklik item daftar: bergantung pada layout mana yang aktif, bisa membuat dan menampilkan fragmen baru untuk menampilkan detail dalam aktivitas yang sama (menambahkan fragmen ke {@link android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditampilkan).</p> @@ -785,11 +785,11 @@ android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditamp <p>Fragmen kedua, {@code DetailsFragment} menampilkan rangkuman pemutaran untuk item yang dipilih dari daftar dari {@code TitlesFragment}:</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>Ingatlah dari kelas {@code TitlesFragment}, bahwa, jika pengguna mengklik item daftar dan -layout saat ini <em>tidak</em> menyertakan tampilan {@code R.id.details} (yaitu tempat +layout saat ini <em>tidak</em> menyertakan tampilan {@code R.id.details} (yaitu tempat {@code DetailsFragment} berada), maka aplikasi memulai aktivitas {@code DetailsActivity} untuk menampilkan konten item.</p> @@ -798,14 +798,14 @@ yang dipilih saat layar dalam orientasi tegak:</p> {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>Perhatikan bahwa aktivitas ini selesai sendiri jika konfigurasi mendatar, sehingga aktivitas utama bisa mengambil alih dan menampilkan {@code DetailsFragment} bersama {@code TitlesFragment}. Ini bisa terjadi jika pengguna memulai {@code DetailsActivity} saat dalam orientasi tegak, namun kemudian memutarnya menjadi mendatar (yang akan memulai lagi aktivitas saat ini).</p> -<p>Untuk contoh lainnya mengenai penggunaan fragmen (dan file sumber lengkap untuk contoh ini), +<p>Untuk contoh lainnya mengenai penggunaan fragmen (dan file sumber lengkap untuk contoh ini), lihat aplikasi contoh Demo API yang tersedia di <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment"> ApiDemos</a> (bisa diunduh dari <a href="{@docRoot}resources/samples/get.html">Komponen contoh SDK</a>).</p> diff --git a/docs/html-intl/intl/in/guide/components/fundamentals.jd b/docs/html-intl/intl/in/guide/components/fundamentals.jd index bd9a500f77a5..2c925e98edb0 100644 --- a/docs/html-intl/intl/in/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/in/guide/components/fundamentals.jd @@ -22,44 +22,44 @@ page.title=Dasar-Dasar Aplikasi </div> </div> -<p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi +<p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi kode Anda—bersama data dan file sumber daya —ke dalam APK: <i>Paket Android</i>, -yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten +yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten aplikasi Android dan merupakan file yang digunakan perangkat berbasis Android untuk menginstal aplikasi.</p> <p>Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri: </p> <ul> - <li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap + <li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap aplikasi adalah pengguna berbeda.</li> <li>Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya digunakan oleh sistem dan tidak diketahui aplikasi). Sistem menetapkan izin bagi semua file dalam aplikasi sehingga hanya ID pengguna yang diizinkan yang bisa mengaksesnya. </li> -<li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari +<li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari aplikasi lainnya.</li> -<li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses +<li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses bila ada komponen aplikasi yang perlu dijalankan, kemudian mematikan proses bila tidak lagi diperlukan atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.</li> </ul> -<p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti, +<p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti, secara default aplikasi hanya memiliki akses ke komponen yang diperlukannya untuk melakukan pekerjaannya dan -tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian +tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian sistem bila tidak diberi izin.</p> <p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi untuk mengakses layanan sistem:</p> <ul> - <li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama, + <li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama, dalam hal ini keduanya bisa saling mengakses file masing-masing. Untuk menghemat sumber daya sistem, aplikasi dengan ID pengguna yang sama juga bisa diatur agar berjalan dalam proses Linux yang sama dan menggunakan VM yang sama ( aplikasi juga harus ditandatangani dengan sertifikat yang sama).</li> - <li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak -pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua + <li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak +pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua izin aplikasi harus diberikan oleh pengguna saat menginstal.</li> </ul> @@ -69,7 +69,7 @@ selanjutnya memperkenalkan Anda pada:</p> <li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li> <li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat untuk aplikasi.</li> - <li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan + <li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li> </ul> @@ -78,8 +78,8 @@ aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li> <h2 id="Components">Komponen Aplikasi</h2> <p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android. -Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen -merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia +Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen +merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia sebagai kesatuan sendiri dan memainkan peran tertentu—masing-masing merupakan blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.</p> @@ -93,7 +93,7 @@ dan daur hidupnya sendiri yang mendefinisikan cara komponen dibuat dan dimusnahk <dt><b>Aktivitas</b></dt> <dd>Sebuah <i>aktivitas</i> mewakili satu layar dengan antarmuka pengguna. Misalnya, -aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email +aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email baru, aktivitas lain untuk menulis email, dan aktivitas satunya lagi untuk membaca email. Walaupun semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email, masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai @@ -110,7 +110,7 @@ tentang hal ini dalam panduan pengembang <a href="{@docRoot}guide/components/act <dd>Sebuah <i>layanan</i> adalah komponen yang berjalan di latar belakang untuk melakukan operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses jarak jauh. Layanan -tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara +tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya. @@ -125,7 +125,7 @@ pengembang <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p> <dd>Sebuah <i>penyedia konten</i> mengelola seperangkat data-bersama aplikasi. Anda bisa menyimpan data dalam sistem file, database SQLite, di web, atau lokasi penyimpanan permanen lainnya -yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan +yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link @@ -137,7 +137,7 @@ penyedia konten untuk menyimpan catatan.</p> <p>Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider} dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi -lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang +lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p> </dd> @@ -163,7 +163,7 @@ lihat kelas {@link android.content.BroadcastReceiver}.</p> -<p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai +<p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk mengambil foto. Anda tidak @@ -175,7 +175,7 @@ kamera seakan menjadi bagian dari aplikasi Anda.</p> <p>Saat sistem memulai komponen, sistem akan memulai proses untuk aplikasi itu (jika belum berjalan) dan membuat instance kelas yang diperlukan untuk komponen. Misalnya, jika aplikasi Anda memulai aktivitas dalam aplikasi kamera yang mengambil foto, aktivitas itu akan -berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda. +berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda. Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik masuk tunggal (misalnya tidak ada fungsi {@code main()}).</p> @@ -198,13 +198,13 @@ atau milik aplikasi lain.</p> mengaktifkan komponen tertentu atau komponen <em>tipe</em> komponen tertentu—masing-masing intent bisa eksplisit atau implisit.</p> -<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau -"mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui -oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu +<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau +"mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui +oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu aktivitas untuk menampilkan gambar atau membuka halaman web. Dalam beberapa kasus, Anda bisa memulai -aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil +aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil dalam {@link android.content.Intent} (misalnya Anda bisa mengeluarkan intent agar -pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang +pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang menunjuk ke kontak yang dipilih).</p> <p>Untuk penerima siaran, intent hanya mendefinisikan @@ -213,18 +213,18 @@ hanya menyertakan string tindakan yang menunjukkan "baterai hampir habis").</p> <p>Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver -konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan +konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia konten dan komponen yang meminta informasi (demi keamanan).</p> <p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p> <ul> - <li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan + <li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan meneruskan {@link android.content.Intent} ke {@link android.content.Context#startActivity startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()} (bila Anda ingin aktivitas mengembalikan hasil).</li> - <li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan + <li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan meneruskan {@link android.content.Intent} ke {@link android.content.Context#startService startService()}. Atau Anda bisa mengikat ke layanan dengan meneruskan {@link android.content.Intent} ke {@link android.content.Context#bindService bindService()}.</li> @@ -237,7 +237,7 @@ android.content.ContentProvider#query query()} pada {@link android.content.Conte </ul> <p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter - Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen + Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen tertentu juga tersedia dalam dokumen berikut: <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>, <a href="{@docRoot}guide/components/services.html">Layanan</a>, {@link android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p> @@ -245,7 +245,7 @@ android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers <h2 id="Manifest">File Manifes</h2> <p>Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui -keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file +keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file "manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar dari direktori proyek aplikasi.</p> @@ -258,8 +258,8 @@ akses-baca ke kontak pengguna.</li> minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.</li> <li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera, layanan Bluetooth, atau layar multisentuh.</li> - <li>Pustaka API aplikasi perlu ditautkan (selain -API kerangka kerja Android), seperti pustaka + <li>Pustaka API aplikasi perlu ditautkan (selain +API kerangka kerja Android), seperti pustaka <a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li> <li>Dan lainnya</li> </ul> @@ -287,7 +287,7 @@ href="{@docRoot}guide/topics/manifest/application-element.html"><application& aplikasi.</p> <p>Dalam elemen <code><a -href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, +href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, atribut {@code android:name} menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas {@link android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.</p> @@ -310,12 +310,12 @@ penyedia konten</li> <p>Aktivitas, layanan, dan penyedia konten yang Anda sertakan dalam kode sumber, namun tidak dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan. Akan tetapi, -penerima siaran -bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek +penerima siaran +bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek {@link android.content.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil {@link android.content.Context#registerReceiver registerReceiver()}.</p> -<p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda, +<p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda, lihat dokumentasi <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">File AndroidManifest.xml</a>. </p> @@ -379,7 +379,7 @@ membacanya, namun layanan eksternal seperti Google Play akan membacanya untuk me penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p> <p>Misalnya, jika aplikasi memerlukan kamera dan menggunakan API yang disediakan dalam Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7) -, Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p> +, Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p> <pre> <manifest ... > @@ -390,10 +390,10 @@ penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p> </manifest> </pre> -<p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan +<p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan Android versi <em>lebih rendah</em> dari 2.1 tidak bisa menginstal aplikasi Anda dari Google Play.</p> -<p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak +<p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak <em>mengharuskannya</em>. Dalam hal itu, aplikasi Anda harus mengatur atribut <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a> ke {@code "false"} dan memeriksa saat runtime apakah perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.</p> @@ -455,11 +455,11 @@ membuat sumber daya alternatif untuk konfigurasi perangkat berbeda, bacalah <a h mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi untuk digunakan oleh aplikasi lain.</dd> <dt><a href="{@docRoot}guide/components/activities.html">Aktivitas</a></dt> - <dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity}, + <dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity}, yang menyediakan layar tersendiri dalam aplikasi bersama antarmuka pengguna.</dd> <dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a></dt> <dd>Informasi tentang cara aplikasi Android disusun untuk memisahkan sumber daya aplikasi dari -kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk +kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk konfigurasi perangkat tertentu. </dd> </dl> @@ -468,11 +468,11 @@ konfigurasi perangkat tertentu. <h2 class="norule">Anda juga mungkin tertarik dengan:</h2> <dl> <dt><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a></dt> - <dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan + <dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk perangkat berbeda.</dd> <dt><a href="{@docRoot}guide/topics/security/permissions.html">Izin Sistem</a></dt> - <dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin + <dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.</dd> </dl> </div> diff --git a/docs/html-intl/intl/in/guide/components/index.jd b/docs/html-intl/intl/in/guide/components/index.jd index a8dd5f8820fc..de40b22d875e 100644 --- a/docs/html-intl/intl/in/guide/components/index.jd +++ b/docs/html-intl/intl/in/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=Komponen Aplikasi page.landing=true -page.landing.intro=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent. -page.metaDescription=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent. +page.landing.intro=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent. +page.metaDescription=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Artikel Blog</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>Menggunakan DialogFragments</h4> <p>Dalam posting ini, saya akan menunjukkan cara menggunakan DialogFragments dengan pustaka dukungan v4 (untuk kompatibilitas mundur pada perangkat sebelum Honeycomb) untuk menunjukkan dialog edit sederhana dan mengembalikan hasil ke Aktivitas pemanggil menggunakan antarmuka.</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>Fragmen Untuk Semua</h4> <p>Hari ini kami telah merilis pustaka statis yang memperlihatkan API Fragment yang sama (serta LoaderManager baru dan beberapa kelas lain) agar aplikasi yang kompatibel dengan Android 1.6 atau yang lebih baru bisa menggunakan fragmen untuk membuat antarmuka pengguna yang kompatibel dengan tablet. </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>Multithreading untuk Kinerja</h4> <p>Praktik yang baik dalam membuat aplikasi yang responsif adalah memastikan thread UI utama Anda @@ -32,7 +32,7 @@ ditangani di thread berbeda.</p> <div class="col-6"> <h3>Pelatihan</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>Mengelola Daur Hidup Aktivitas</h4> <p>Bagian ini menjelaskan pentingnya metode callback daur hidup yang diterima setiap instance Aktivitas diff --git a/docs/html-intl/intl/in/guide/components/loaders.jd b/docs/html-intl/intl/in/guide/components/loaders.jd index cd0379bf1cd9..88093cc258a4 100644 --- a/docs/html-intl/intl/in/guide/components/loaders.jd +++ b/docs/html-intl/intl/in/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>Kelas-kelas utama</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>Contoh-contoh terkait</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ konten berubah.</li> dibuat kembali setelah perubahan konfigurasi. Karena itu, loader tidak perlu melakukan query ulang datanya.</li> </ul> - + <h2 id="summary">Rangkuman Loader API</h2> <p>Ada beberapa kelas dan antarmuka yang mungkin dilibatkan dalam menggunakan @@ -64,11 +64,11 @@ loader pada aplikasi. Semuanya dirangkum dalam tabel ini:</p> </tr> <tr> <td>{@link android.app.LoaderManager}</td> - <td>Kelas abstrak yang dikaitkan dengan {@link android.app.Activity} atau + <td>Kelas abstrak yang dikaitkan dengan {@link android.app.Activity} atau {@link android.app.Fragment} untuk mengelola satu atau beberapa instance {@link android.content.Loader}. Ini membantu aplikasi mengelola operasi berjalan lebih lama bersamaan dengan daur hidup {@link android.app.Activity} -atau {@link android.app.Fragment}; penggunaan paling umumnya adalah dengan +atau {@link android.app.Fragment}; penggunaan paling umumnya adalah dengan {@link android.content.CursorLoader}, akan tetapi aplikasi bebas menulis loader-nya sendiri untuk memuat tipe data lainnya. <br /> @@ -97,7 +97,7 @@ baru bila konten berubah. </td> </tr> <tr> <td>{@link android.content.CursorLoader}</td> - <td>Subkelas {@link android.content.AsyncTaskLoader} yang meng-query + <td>Subkelas {@link android.content.AsyncTaskLoader} yang meng-query {@link android.content.ContentResolver} dan mengembalikan {@link android.database.Cursor}. Kelas ini mengimplementasikan protokol {@link android.content.Loader} dengan cara standar untuk query kursor, @@ -124,15 +124,15 @@ yang menggunakan loader biasanya berisi yang berikut ini:</p> <li>{@link android.app.Activity} atau {@link android.app.Fragment}.</li> <li>Instance {@link android.app.LoaderManager}.</li> <li>{@link android.content.CursorLoader} akan memuat data yang didukung oleh {@link -android.content.ContentProvider}. Atau, Anda dapat mengimplementasikan subkelas sendiri +android.content.ContentProvider}. Atau, Anda dapat mengimplementasikan subkelas sendiri dari {@link android.content.Loader} atau {@link android.content.AsyncTaskLoader} untuk memuat data dari beberapa sumber lain.</li> <li>Implementasi untuk {@link android.app.LoaderManager.LoaderCallbacks}. Di sinilah Anda membuat loader baru dan mengelola acuan bagi loader -yang ada.</li> +yang ada.</li> <li>Cara menampilkan data loader, seperti {@link android.widget.SimpleCursorAdapter}.</li> - <li>Sumber data, seperti {@link android.content.ContentProvider}, saat menggunakan + <li>Sumber data, seperti {@link android.content.ContentProvider}, saat menggunakan {@link android.content.CursorLoader}.</li> </ul> <h3 id="starting">Memulai Loader</h3> @@ -140,11 +140,11 @@ android.widget.SimpleCursorAdapter}.</li> <p>{@link android.app.LoaderManager} mengelola satu atau beberapa instance {@link android.content.Loader} dalam {@link android.app.Activity} atau {@link android.app.Fragment}. Hanya ada satu {@link -android.app.LoaderManager} per aktivitas atau fragmen.</p> +android.app.LoaderManager} per aktivitas atau fragmen.</p> <p>Anda biasanya memulai {@link android.content.Loader} dalam metode {@link -android.app.Activity#onCreate onCreate()} aktivitas, atau dalam metode +android.app.Activity#onCreate onCreate()} aktivitas, atau dalam metode {@link android.app.Fragment#onActivityCreated onActivityCreated()} fragmen. Anda melakukannya dengan cara berikut ini:</p> @@ -157,13 +157,13 @@ parameter berikut:</p> <ul> <li>ID unik yang mengidentifikasi loader. Dalam contoh ini, ID-nya adalah 0.</li> <li>Argumen opsional untuk dipasok ke loader -pada saat pembuatan (dalam contoh ini <code>null</code>).</li> +pada saat pembuatan (dalam contoh ini <code>null</code>).</li> <li>Implementasi {@link android.app.LoaderManager.LoaderCallbacks}, yang akan dipanggil {@link android.app.LoaderManager} untuk melaporkan kejadian loader. Dalam contoh ini, kelas lokal mengimplementasikan antarmuka {@link android.app.LoaderManager.LoaderCallbacks}, sehingga meneruskan acuan -ke dirinya sendiri, {@code this}.</li> +ke dirinya sendiri, {@code this}.</li> </ul> <p>Panggilan {@link android.app.LoaderManager#initLoader initLoader()} memastikan bahwa loader telah dimulai dan aktif. Ia memiliki dua kemungkinan hasil:</p> @@ -193,7 +193,7 @@ masa hidup loader secara otomatis. {@link android.app.LoaderManager} memulai dan menghentikan pemuatan jika perlu, dan menjaga status loader dan konten terkaitnya. Seperti yang tersirat di sini, Anda akan jarang berinteraksi dengan loader secara langsung (meskipun misalnya menggunakan metode loader untuk menyempurnakan perilaku -loader, lihat contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). +loader, lihat contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). Anda paling sering akan menggunakan metode {@link android.app.LoaderManager.LoaderCallbacks} untuk mengintervensi proses pemuatan saat terjadi kejadian tertentu. Untuk diskusi selengkapnya mengenai topik ini, lihat <a href="#callback">Menggunakan Callback LoaderManager</a>.</p> @@ -245,7 +245,7 @@ Membuat instance dan mengembalikan {@link android.content.Loader} baru untuk ID — Dipanggil bila loader yang dibuat sebelumnya selesai dimuat. </li></ul> <ul> - <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} + <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} — Dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya tidak tersedia. </li> @@ -322,7 +322,7 @@ data tersebut karena loader memilikinya dan akan menanganinya.</p> <p>Loader akan melepas data setelah mengetahui bahwa aplikasi tidak lagi menggunakannya. Misalnya, jika data adalah kursor dari {@link android.content.CursorLoader}, Anda tidak boleh memanggil {@link -android.database.Cursor#close close()} sendiri. Jika kursor ditempatkan +android.database.Cursor#close close()} sendiri. Jika kursor ditempatkan dalam {@link android.widget.CursorAdapter}, Anda harus menggunakan metode {@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} agar {@link android.database.Cursor} lama tidak ditutup. Misalnya:</p> @@ -343,7 +343,7 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <p>Metode ini dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya tidak tersedia. Callback ini memungkinkan Anda mengetahui kapan data akan dilepas sehingga dapat menghapus acuannya ke callback.  </p> -<p>Implementasi ini memanggil +<p>Implementasi ini memanggil {@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} dengan nilai <code>null</code>:</p> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} yang menampilkan {@link android.widget.ListView} berisi hasil query terhadap penyedia konten kontak. Ia menggunakan {@link android.content.CursorLoader} untuk mengelola query pada penyedia.</p> - + <p>Agar aplikasi dapat mengakses kontak pengguna, seperti yang ditampilkan dalam contoh ini, manifesnya harus menyertakan izin {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p> diff --git a/docs/html-intl/intl/in/guide/components/processes-and-threads.jd b/docs/html-intl/intl/in/guide/components/processes-and-threads.jd index 44051bf492e0..cdab715bbca8 100644 --- a/docs/html-intl/intl/in/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/in/guide/components/processes-and-threads.jd @@ -25,13 +25,13 @@ page.tags=daur hidup,latar belakang </div> </div> -<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang -berjalan, sistem Android akan memulai proses Linux baru untuk aplikasi dengan satu thread -eksekusi. Secara default, semua komponen aplikasi yang sama berjalan dalam proses dan -thread yang sama (disebut thread "utama"). Jika komponen aplikasi dimulai dan sudah ada -proses untuk aplikasi itu (karena komponen lain dari aplikasi itu sudah ada), maka komponen -akan dimulai dalam proses itu dan menggunakan thread eksekusi yang sama. Akan tetapi, Anda bisa -mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk +<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang +berjalan, sistem Android akan memulai proses Linux baru untuk aplikasi dengan satu thread +eksekusi. Secara default, semua komponen aplikasi yang sama berjalan dalam proses dan +thread yang sama (disebut thread "utama"). Jika komponen aplikasi dimulai dan sudah ada +proses untuk aplikasi itu (karena komponen lain dari aplikasi itu sudah ada), maka komponen +akan dimulai dalam proses itu dan menggunakan thread eksekusi yang sama. Akan tetapi, Anda bisa +mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk setiap proses.</p> <p>Dokumen ini membahas cara kerja proses dan thread di aplikasi Android.</p> @@ -39,7 +39,7 @@ setiap proses.</p> <h2 id="Processes">Proses</h2> -<p>Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan +<p>Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan aplikasi tidak boleh mengubah ini. Akan tetapi, jika Anda merasa perlu mengontrol proses milik komponen tertentu, Anda dapat melakukannya dalam file manifes.</p> @@ -47,54 +47,54 @@ komponen tertentu, Anda dapat melakukannya dalam file manifes.</p> <activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code <receiver>}</a>, dan <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code -<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan -dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen +<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan +dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen berjalan dalam prosesnya sendiri atau agar beberapa komponen menggunakan proses yang sama sementara yang lainnya tidak. Anda juga bisa mengatur {@code android:process} agar komponen aplikasi yang berbeda berjalan dalam proses yang sama -—sepanjang aplikasi menggunakan ID Linux yang sama dan ditandatangani +—sepanjang aplikasi menggunakan ID Linux yang sama dan ditandatangani dengan sertifikat yang sama.</p> <p>Elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code -<application>}</a> juga mendukung atribut {@code android:process}, untuk mengatur +<application>}</a> juga mendukung atribut {@code android:process}, untuk mengatur nilai default yang berlaku bagi semua komponen.</p> -<p>Android bisa memutuskan untuk mematikan proses pada waktu tertentu, bila memori tinggal sedikit dan diperlukan oleh +<p>Android bisa memutuskan untuk mematikan proses pada waktu tertentu, bila memori tinggal sedikit dan diperlukan oleh proses lain yang lebih mendesak untuk melayani pengguna. Komponen -aplikasi yang berjalan dalam proses yang dimatikan maka sebagai konsekuensinya juga akan dimusnahkan. Proses dimulai +aplikasi yang berjalan dalam proses yang dimatikan maka sebagai konsekuensinya juga akan dimusnahkan. Proses dimulai kembali untuk komponen itu bila ada lagi pekerjaan untuk mereka lakukan.</p> <p>Saat memutuskan proses yang akan dimatikan, sistem Android akan mempertimbangkan kepentingan relatifnya bagi pengguna. Misalnya, sistem lebih mudah menghentikan proses yang menjadi host aktivitas yang tidak - lagi terlihat di layar, dibandingkan dengan proses yang menjadi host aktivitas yang terlihat. Karena itu, keputusan + lagi terlihat di layar, dibandingkan dengan proses yang menjadi host aktivitas yang terlihat. Karena itu, keputusan untuk menghentikan proses bergantung pada keadaan komponen yang berjalan dalam proses tersebut. Aturan yang digunakan untuk menentukan proses yang akan dihentikan dibahas di bawah ini. </p> <h3 id="Lifecycle">Daur hidup proses</h3> -<p>Sistem Android mencoba mempertahankan proses aplikasi selama mungkin, namun +<p>Sistem Android mencoba mempertahankan proses aplikasi selama mungkin, namun pada akhirnya perlu menghapus proses lama untuk mengambil kembali memori bagi proses baru atau yang lebih penting. Untuk menentukan proses yang akan -dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan -komponen yang berjalan dalam proses dan status komponen tersebut. Proses yang memiliki +dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan +komponen yang berjalan dalam proses dan status komponen tersebut. Proses yang memiliki prioritas terendah akan dimatikan terlebih dahulu, kemudian yang terendah berikutnya, dan seterusnya, jika perlu untuk memulihkan sumber daya sistem.</p> -<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa -tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan +<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa +tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan <em>dimatikan terakhir</em>):</p> <ol> <li><b>Proses latar depan</b> - <p>Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses + <p>Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses dianggap berada di latar depan jika salah satu kondisi berikut terpenuhi:</p> <ul> <li>Proses menjadi host {@link android.app.Activity} yang berinteraksi dengan pengguna dengan metode ({@link -android.app.Activity}{@link android.app.Activity#onResume onResume()} telah +android.app.Activity}{@link android.app.Activity#onResume onResume()} telah dipanggil).</li> - <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang sedang berinteraksi dengan + <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang sedang berinteraksi dengan pengguna.</li> <li>Proses menjadi host {@link android.app.Service} yang berjalan "di latar depan"— @@ -108,23 +108,23 @@ onStart()}, atau {@link android.app.Service#onDestroy onDestroy()}).</li> android.content.BroadcastReceiver#onReceive onReceive()}-nya.</li> </ul> - <p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai -upaya terakhir— jika memori hampir habis sehingga semuanya tidak bisa terus berjalan. Pada umumnya, pada -titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan + <p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai +upaya terakhir— jika memori hampir habis sehingga semuanya tidak bisa terus berjalan. Pada umumnya, pada +titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan diperlukan agar antarmuka pengguna tetap responsif.</p></li> <li><b>Proses yang terlihat</b> - <p>Proses yang tidak memiliki komponen latar depan, namun masih bisa -memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi + <p>Proses yang tidak memiliki komponen latar depan, namun masih bisa +memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi berikut terpenuhi:</p> <ul> <li>Proses ini menjadi host {@link android.app.Activity} yang tidak berada di latar depan, namun masih -terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil). -Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga +terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil). +Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga aktivitas sebelumnya terlihat berada di belakangnya.</li> - <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang terlihat (atau latar + <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang terlihat (atau latar depan)</li> </ul> @@ -134,53 +134,53 @@ diperlukan agar semua proses latar depan tetap berjalan. </p> <li><b>Proses layanan</b> <p>Proses yang menjalankan layanan yang telah dimulai dengan metode {@link -android.content.Context#startService startService()} dan tidak termasuk dalam salah satu dari dua kategori -yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini -umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang -atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk +android.content.Context#startService startService()} dan tidak termasuk dalam salah satu dari dua kategori +yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini +umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang +atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk mempertahankannya bersama semua proses latar depan dan proses yang terlihat. </p> </li> <li><b>Proses latar belakang</b> - <p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode -{@link android.app.Activity#onStop onStop()} aktivitas telah dipanggil). Proses ini tidak memiliki dampak -langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi -proses latar depan, proses yang terlihat, -atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan -dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru + <p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode +{@link android.app.Activity#onStop onStop()} aktivitas telah dipanggil). Proses ini tidak memiliki dampak +langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi +proses latar depan, proses yang terlihat, +atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan +dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru terlihat oleh pengguna sebagai yang terakhir untuk dimatikan. Jika aktivitas mengimplementasikan metode - daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek -yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan + daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek +yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan semua statusnya yang terlihat. Lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a> untuk mendapatkan informasi tentang menyimpan dan memulihkan status.</p> </li> <li><b>Proses kosong</b> - <p>Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses + <p>Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses seperti ini tetap hidup adalah untuk keperluan caching, meningkatkan waktu mulai (startup) bila -nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber +nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber daya sistem secara keseluruhan antara proses cache dan cache kernel yang mendasarinya.</p> </li> </ol> <p>Android sebisa mungkin memeringkat proses setinggi -mungkin, berdasarkan prioritas komponen yang sedang aktif dalam proses. Misalnya, jika suatu proses menjadi host sebuah layanan dan +mungkin, berdasarkan prioritas komponen yang sedang aktif dalam proses. Misalnya, jika suatu proses menjadi host sebuah layanan dan aktivitas yang terlihat, proses akan diperingkat sebagai proses yang terlihat, bukan sebagai proses layanan.</p> <p>Selain itu, peringkat proses dapat meningkat karena adanya proses lain yang bergantung padanya -—proses yang melayani proses lain tidak bisa diperingkat lebih rendah daripada proses yang -sedang dilayaninya. Misalnya, jika penyedia konten dalam proses A melayani klien dalam proses B, atau -jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah +—proses yang melayani proses lain tidak bisa diperingkat lebih rendah daripada proses yang +sedang dilayaninya. Misalnya, jika penyedia konten dalam proses A melayani klien dalam proses B, atau +jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah prioritasnya dibandingkan dengan proses B.</p> - <p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang, -aktivitas yang memulai operasi yang berjalan lama mungkin lebih baik memulai <a href="{@docRoot}guide/components/services.html">layanan</a> untuk operasi itu, daripada hanya + <p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang, +aktivitas yang memulai operasi yang berjalan lama mungkin lebih baik memulai <a href="{@docRoot}guide/components/services.html">layanan</a> untuk operasi itu, daripada hanya membuat thread pekerja—khususnya jika operasi mungkin akan berlangsung lebih lama daripada aktivitas. - Misalnya, aktivitas yang mengunggah gambar ke situs web harus memulai layanan + Misalnya, aktivitas yang mengunggah gambar ke situs web harus memulai layanan untuk mengunggah sehingga unggahan bisa terus berjalan di latar belakang meskipun pengguna meninggalkan aktivitas tersebut. -Menggunakan layanan akan memastikan operasi paling tidak memiliki prioritas "proses layanan", -apa pun yang terjadi pada aktivitas. Ini menjadi alasan yang sama yang membuat penerima siaran harus +Menggunakan layanan akan memastikan operasi paling tidak memiliki prioritas "proses layanan", +apa pun yang terjadi pada aktivitas. Ini menjadi alasan yang sama yang membuat penerima siaran harus menjalankan layanan daripada hanya menempatkan operasi yang menghabiskan waktu di thread.</p> @@ -188,35 +188,35 @@ menjalankan layanan daripada hanya menempatkan operasi yang menghabiskan waktu d <h2 id="Threads">Thread</h2> -<p>Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama, +<p>Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama, "main". Thread ini sangat penting karena bertugas mengirim kejadian ke widget antarmuka pengguna yang sesuai, termasuk kejadian menggambar. Ini juga merupakan thread yang membuat aplikasi berinteraksi dengan komponen dari Android UI toolkit (komponen dari paket {@link -android.widget} dan {@link android.view}). Karena itu, thread 'main' juga terkadang +android.widget} dan {@link android.view}). Karena itu, thread 'main' juga terkadang disebut thread UI.</p> -<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua -komponen yang berjalan di proses yang sama akan dibuat instance-nya dalam thread UI, dan sistem akan memanggil +<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua +komponen yang berjalan di proses yang sama akan dibuat instance-nya dalam thread UI, dan sistem akan memanggil setiap komponen yang dikirim dari thread itu. Akibatnya, metode yang merespons callback sistem (seperti {@link android.view.View#onKeyDown onKeyDown()} untuk melaporkan tindakan pengguna atau metode callback daur hidup) selalu berjalan di thread UI proses.</p> -<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian -sentuh ke widget, yang selanjutnya menetapkan status ditekan dan mengirim permintaan yang tidak divalidasi ke +<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian +sentuh ke widget, yang selanjutnya menetapkan status ditekan dan mengirim permintaan yang tidak divalidasi ke antrean kejadian. Thread UI akan menghapus antrean permintaan dan memberi tahu widget bahwa widget harus menggambar dirinya sendiri.</p> -<p>Saat aplikasi melakukan pekerjaan intensif sebagai respons terhadap interaksi pengguna, model +<p>Saat aplikasi melakukan pekerjaan intensif sebagai respons terhadap interaksi pengguna, model thread tunggal ini bisa menghasilkan kinerja yang buruk kecuali jika Anda mengimplementasikan aplikasi dengan benar. Khususnya jika semua terjadi di thread UI, melakukan operasi yang panjang seperti akses ke jaringan atau query database akan memblokir seluruh UI. Bila thread diblokir, tidak ada kejadian yang bisa dikirim, -termasuk kejadian menggambar. Dari sudut pandang pengguna, aplikasi +termasuk kejadian menggambar. Dari sudut pandang pengguna, aplikasi tampak mogok (hang). Lebih buruk lagi, jika thread UI diblokir selama lebih dari beberapa detik (saat ini sekitar 5 detik) pengguna akan ditampilkan dialog "<a href="http://developer.android.com/guide/practices/responsiveness.html">aplikasi tidak -merespons</a>" (ANR) yang populer karena reputasi buruknya. Pengguna nanti bisa memutuskan untuk keluar dari aplikasi dan menghapus aplikasi +merespons</a>" (ANR) yang populer karena reputasi buruknya. Pengguna nanti bisa memutuskan untuk keluar dari aplikasi dan menghapus aplikasi jika mereka tidak suka.</p> -<p>Selain itu, toolkit Android UI <em>bukan</em> thread-safe. Jadi, Anda tidak harus memanipulasi +<p>Selain itu, toolkit Android UI <em>bukan</em> thread-safe. Jadi, Anda tidak harus memanipulasi UI dari thread pekerja—Anda harus melakukan semua manipulasi pada antarmuka pengguna dari thread UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:</p> @@ -227,12 +227,12 @@ UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:</p> <h3 id="WorkerThreads">Thread pekerja</h3> -<p>Karena model thread tunggal yang dijelaskan di atas, Anda dilarang memblokir thread +<p>Karena model thread tunggal yang dijelaskan di atas, Anda dilarang memblokir thread UI demi daya respons UI aplikasi. Jika memiliki operasi untuk dijalankan yang tidak seketika, Anda harus memastikan untuk melakukannya di thread terpisah (thread "latar belakang" atau thread "pekerja").</p> -<p>Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari +<p>Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari thread terpisah dan menampilkannya dalam {@link android.widget.ImageView}:</p> <pre> @@ -246,13 +246,13 @@ public void onClick(View v) { } </pre> -<p>Awalnya hal ini tampak bekerja dengan baik, karena menciptakan thread baru untuk menangani +<p>Awalnya hal ini tampak bekerja dengan baik, karena menciptakan thread baru untuk menangani operasi jaringan. Akan tetapi, hal tersebut melanggar aturan kedua model thread tunggal: <em>jangan mengakses toolkit Android UI dari luar thread UI</em>—sampel ini memodifikasi {@link android.widget.ImageView} dari thread pekerja sebagai ganti thread UI. Ini bisa mengakibatkan perilaku yang tidak terdefinisi dan tidak diharapkan, yang bisa menyulitkan dan menghabiskan waktu untuk melacaknya.</p> -<p>Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari +<p>Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari thread lainnya. Berikut ini daftar metode yang bisa membantu:</p> <ul> @@ -284,10 +284,10 @@ public void onClick(View v) { <p>Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread sementara {@link android.widget.ImageView} dimanipulasi dari thread UI.</p> -<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit -dan sulit dipertahankan. Untuk menangani interaksi yang lebih kompleks dengan thread pekerja, Anda bisa mempertimbangkan +<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit +dan sulit dipertahankan. Untuk menangani interaksi yang lebih kompleks dengan thread pekerja, Anda bisa mempertimbangkan penggunaan {@link android.os.Handler}di thread pekerja, untuk memproses pesan yang dikirim dari - thread UI. Mungkin solusi terbaiknya adalah memperpanjang kelas {@link android.os.AsyncTask}, + thread UI. Mungkin solusi terbaiknya adalah memperpanjang kelas {@link android.os.AsyncTask}, yang akan menyederhanakan eksekusi tugas-tugas thread pekerja yang perlu berinteraksi dengan UI.</p> @@ -298,10 +298,10 @@ pengguna. AsyncTask memblokir operasi di thread pekerja kemudian mempublikasikan di thread UI, tanpa mengharuskan Anda untuk menangani sendiri thread dan/atau handler sendiri.</p> <p>Untuk menggunakannya, Anda harus menempatkan {@link android.os.AsyncTask} sebagai subkelas dan mengimplementasikan metode callback {@link -android.os.AsyncTask#doInBackground doInBackground()} yang berjalan di kumpulan +android.os.AsyncTask#doInBackground doInBackground()} yang berjalan di kumpulan thread latar belakang. Untuk memperbarui UI, Anda harus mengimplementasikan {@link android.os.AsyncTask#onPostExecute onPostExecute()}, yang memberikan hasil dari {@link -android.os.AsyncTask#doInBackground doInBackground()} dan berjalan di thread UI, jadi Anda bisa +android.os.AsyncTask#doInBackground doInBackground()} dan berjalan di thread UI, jadi Anda bisa memperbarui UI dengan aman. Selanjutnya Anda bisa menjalankan tugas dengan memanggil {@link android.os.AsyncTask#execute execute()} dari thread UI.</p> @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { @@ -328,16 +328,16 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { } </pre> -<p>Kini UI aman dan kode jadi lebih sederhana, karena memisahkan pekerjaan ke +<p>Kini UI aman dan kode jadi lebih sederhana, karena memisahkan pekerjaan ke dalam bagian-bagian yang harus dilakukan pada thread pekerja dan thread UI.</p> -<p>Anda harus membaca acuan {@link android.os.AsyncTask} untuk memahami sepenuhnya +<p>Anda harus membaca acuan {@link android.os.AsyncTask} untuk memahami sepenuhnya cara menggunakan kelas ini, namun berikut ini ikhtisar singkat cara kerjanya:</p> <ul> <li>Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai akhir tugas, dengan menggunakan generik</li> -<li>Metode {@link android.os.AsyncTask#doInBackground doInBackground()} berjalan secara otomatis pada +<li>Metode {@link android.os.AsyncTask#doInBackground doInBackground()} berjalan secara otomatis pada thread pekerja</li> <li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link android.os.AsyncTask#onPostExecute onPostExecute()}, dan {@link @@ -352,23 +352,23 @@ android.os.AsyncTask#onProgressUpdate onProgressUpdate()} pada thread UI</li> <p class="caution"><strong>Perhatian:</strong> Masalah lain yang mungkin Anda temui saat menggunakan thread pekerja adalah restart tak terduga dalam aktivitas karena <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan konfigurasi runtime</a> - (seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk -melihat cara mempertahankan tugas selama restart ini dan cara membatalkan + (seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk +melihat cara mempertahankan tugas selama restart ini dan cara membatalkan tugas dengan benar saat aktivitas dimusnahkan, lihat kode sumber untuk aplikasi sampel <a href="http://code.google.com/p/shelves/">Shelves</a>.</p> <h3 id="ThreadSafe">Metode thread-safe</h3> -<p> Dalam beberapa situasi, metode yang Anda implementasikan bisa dipanggil dari lebih dari satu thread, +<p> Dalam beberapa situasi, metode yang Anda implementasikan bisa dipanggil dari lebih dari satu thread, dan karena itu harus ditulis agar menjadi thread-safe. </p> -<p>Ini terutama terjadi untuk metode yang bisa dipanggil dari jauh —seperti metode dalam <a href="{@docRoot}guide/components/bound-services.html">layanan terikat</a>. Bila sebuah panggilan pada -metode yang dijalankan dalam {@link android.os.IBinder} berasal dari proses yang sama di mana +<p>Ini terutama terjadi untuk metode yang bisa dipanggil dari jauh —seperti metode dalam <a href="{@docRoot}guide/components/bound-services.html">layanan terikat</a>. Bila sebuah panggilan pada +metode yang dijalankan dalam {@link android.os.IBinder} berasal dari proses yang sama di mana {@link android.os.IBinder IBinder} berjalan, metode ini akan dieksekusi di thread pemanggil. Akan tetapi, bila panggilan berasal proses lain, metode akan dieksekusi dalam thread yang dipilih dari kumpulan (pool) thread yang dipertahankan sistem dalam proses yang sama seperti{@link android.os.IBinder -IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode -{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI +IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode +{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI proses layanan, metode yang diimplementasikan dalam objek yang dikembalikan {@link android.app.Service#onBind onBind()} (misalnya, subkelas yang mengimplementasikan metode RPC) akan dipanggil dari thread di pool. Karena layanan bisa memiliki lebih dari satu klien, maka lebih dari satu pool thread bisa melibatkan @@ -382,19 +382,19 @@ android.content.ContentProvider} yang merespons permintaan itu—metode {@li android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert insert()}, {@link android.content.ContentProvider#delete delete()}, {@link android.content.ContentProvider#update update()}, dan {@link android.content.ContentProvider#getType -getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI -untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun +getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI +untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun sekaligus, metode-metode ini juga harus diimplementasikan sebagai thread-safe. </p> <h2 id="IPC">Komunikasi Antarproses</h2> <p>Android menawarkan mekanisme komunikasi antarproses (IPC) menggunakan panggilan prosedur jauh - (RPC), yang mana metode ini dipanggil oleh aktivitas atau komponen aplikasi lain, namun dieksekusi dari + (RPC), yang mana metode ini dipanggil oleh aktivitas atau komponen aplikasi lain, namun dieksekusi dari jauh (di proses lain), bersama hasil yang dikembalikan ke -pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa -dipahami sistem operasi, mentransmisikannya dari proses lokal dan ruang alamat untuk proses jauh -dan ruang proses, kemudian merakit kembali dan menetapkannya kembali di sana. Nilai-nilai yang dikembalikan +pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa +dipahami sistem operasi, mentransmisikannya dari proses lokal dan ruang alamat untuk proses jauh +dan ruang proses, kemudian merakit kembali dan menetapkannya kembali di sana. Nilai-nilai yang dikembalikan akan ditransmisikan dalam arah berlawanan. Android menyediakan semua kode untuk melakukan transaksi IPC ini, sehingga Anda bisa fokus pada pendefinisian dan implementasi antarmuka pemrograman RPC. </p> diff --git a/docs/html-intl/intl/in/guide/components/recents.jd b/docs/html-intl/intl/in/guide/components/recents.jd index dcfcda7a7d5f..286fdc12732e 100644 --- a/docs/html-intl/intl/in/guide/components/recents.jd +++ b/docs/html-intl/intl/in/guide/components/recents.jd @@ -60,23 +60,23 @@ layar ikhtisar. Selain itu, atribut <code><a href="{@docRoot}guide/topics/manife <h2 id="adding">Menambahkan Tugas ke Layar Ikhtisar</h2> <p>Penggunaan flag kelas {@link android.content.Intent} untuk menambahkan tugas memberi kontrol lebih besar -atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ikhtisar. Bila menggunakan atribut +atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ikhtisar. Bila menggunakan atribut <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas +, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas yang ada untuk dokumen tersebut.</p> <h3 id="flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</h3> -<p>Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode +<p>Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()} - dari kelas {@link android.app.ActivityManager.AppTask}, dengan meneruskannya ke intent yang + dari kelas {@link android.app.ActivityManager.AppTask}, dengan meneruskannya ke intent yang menjalankan aktivitas tersebut. Untuk menyisipkan jeda logis agar sistem memperlakukan aktivitas Anda sebagai tugas -baru di layar ikhtisar, teruskan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} +baru di layar ikhtisar, teruskan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} dalam metode {@link android.content.Intent#addFlags(int) addFlags()} dari {@link android.content.Intent} yang memulai aktivitas itu.</p> <p class="note"><strong>Catatan:</strong> Flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} -menggantikan flag {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET}, +menggantikan flag {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET}, yang tidak digunakan lagi pada Android 5.0 (API level 21).</p> <p>Jika Anda menetapkan flag {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} saat membuat @@ -169,18 +169,18 @@ bila pengguna membuka dokumen dengan aplikasi:</p> <dt>"{@code noneâ€}"</dt> <dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Layar ikhtisar memperlakukan - aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang + aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.</dd> <dt>"{@code never}"</dt> <dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Mengatur nilai ini akan mengesampingkan perilaku flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} - dan {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, jika salah satunya ditetapkan di + dan {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, jika salah satunya ditetapkan di intent, dan layar ikhtisar menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.</dd> </dl> -<p class="note"><strong>Catatan:</strong> Untuk nilai selain {@code none} dan {@code never}, +<p class="note"><strong>Catatan:</strong> Untuk nilai selain {@code none} dan {@code never}, aktivitas harus didefinisikan dengan {@code launchMode="standard"}. Jika atribut ini tidak ditetapkan, maka {@code documentLaunchMode="none"} akan digunakan.</p> @@ -219,8 +219,8 @@ public void onRemoveFromRecents(View view) { </pre> <p class="note"><strong>Catatan:</strong> Penggunaan metode -{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} -akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti +{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} +akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti dibahas di bawah ini.</p> <h3 id="#retain-finished">Mempertahankan tugas yang telah selesai</h3> diff --git a/docs/html-intl/intl/in/guide/components/services.jd b/docs/html-intl/intl/in/guide/components/services.jd index 7ecd8cd38db9..b36e5656b0ea 100644 --- a/docs/html-intl/intl/in/guide/components/services.jd +++ b/docs/html-intl/intl/in/guide/components/services.jd @@ -186,7 +186,7 @@ dari komponen aplikasi lain.</p> aplikasi Anda.</p> <p>Untuk mendeklarasikan layanan Anda, tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> -sebagai anak +sebagai anak elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>. Misalnya:</p> <pre> @@ -539,7 +539,7 @@ layanan tersebut harus berhenti sendiri dengan memanggil {@link android.app.Serv komponen lain bisa menghentikannya dengan memanggil {@link android.content.Context#stopService stopService()}.</p> <p>Setelah diminta untuk berhenti dengan {@link android.app.Service#stopSelf stopSelf()} atau {@link -android.content.Context#stopService stopService()}, sistem akan menghapus layanan +android.content.Context#stopService stopService()}, sistem akan menghapus layanan secepatnya.</p> <p>Akan tetapi, bila layanan Anda menangani beberapa permintaan ke {@link diff --git a/docs/html-intl/intl/in/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/in/guide/components/tasks-and-back-stack.jd index 279442f2ab38..4c344ae126ae 100644 --- a/docs/html-intl/intl/in/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/in/guide/components/tasks-and-back-stack.jd @@ -29,7 +29,7 @@ parent.link=activities.html <ol> <li><a href="{@docRoot}design/patterns/navigation.html">Desain Android: Navigasi</a></li> - <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemen manifes + <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemen manifes {@code <activity>}</a></li> <li><a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a></li> </ol> @@ -52,7 +52,7 @@ dikirim, aktivitas Anda akan dilanjutkan dan seolah-olah aktivitas email adalah aktivitas mungkin dari aplikasi yang berbeda, Android akan tetap mempertahankan pengalaman pengguna yang mulus dengan menjalankan kedua aktivitas dalam <em>tugas</em> yang sama.</p> -<p>Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna +<p>Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna saat melakukan pekerjaan tertentu. Aktivitas tersebut diatur dalam tumpukan (<em>back-stack</em>), dalam urutan membuka setiap aktivitas.</p> @@ -93,7 +93,7 @@ tidak pernah disusun ulang, hanya didorong dan dikeluarkan dari back-stack&mdash aktivitas saat ini dan dikeluarkan bila pengguna meninggalkannya menggunakan tombol <em>Back</em>. Dengan demikian, back-stack beroperasi sebagai struktur objek "masuk terakhir, keluar pertama". Gambar 1 melukiskan perilaku -ini dengan jangka waktu yang menunjukkan kemajuan antar aktivitas beserta +ini dengan jangka waktu yang menunjukkan kemajuan antar aktivitas beserta back-stack pada setiap waktu.</p> <img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" /> @@ -148,7 +148,7 @@ pengguna untuk memulai aktivitas tertentu dari lebih dari satu aktivitas, instan aktivitas tersebut akan dibuat dan didorong ke back-stack (bukannya memunculkan instance sebelumnya dari aktivitas ke atas). Dengan demikian, satu aktivitas pada aplikasi Anda mungkin dibuat beberapa kali (bahkan dari beberapa tugas), seperti yang ditampilkan dalam gambar 3. Dengan demikian, jika pengguna mengarahkan mundur -menggunakan tombol <em>Back</em>, setiap instance aktivitas ini akan ditampilkan dalam urutan saat +menggunakan tombol <em>Back</em>, setiap instance aktivitas ini akan ditampilkan dalam urutan saat dibuka (masing-masing dengan status UI sendiri). Akan tetapi, Anda bisa memodifikasi perilaku ini jika tidak ingin aktivitas dibuat instance-nya lebih dari sekali. Caranya dibahas di bagian selanjutnya tentang <a href="#ManagingTasks">Mengelola Tugas</a>.</p> @@ -347,7 +347,7 @@ aktivitas apa pun yang dimulai dengan ini akan dibuka di tugas yang terpisah.</d selalu dibuka dalam tugasnya sendiri—dengan menetapkan mode pembuka {@code singleTask} dalam elemen<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>. Ini berarti bahwa jika aplikasi Anda mengeluarkan intent untuk membuka Browser Android, aktivitasnya <em>tidak</em> akan ditempatkan dalam tugas -yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser +yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser sudah memiliki tugas yang berjalan di latar belakang, tugas tersebut akan dimajukan untuk menangani intent baru.</p> @@ -387,13 +387,13 @@ adalah:</p> <dd>Memulai aktivitas dalam tugas baru. Jika tugas sudah dijalankan untuk aktivitas yang sekarang Anda mulai, tugas tersebut akan dibawa ke latar depan dengan status terakhir yang dipulihkan dan aktivitas akan menerima intent baru dalam {@link android.app.Activity#onNewIntent onNewIntent()}. - <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> + <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> yang dibahas di bagian sebelumnya.</p></dd> <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt> <dd>Jika aktivitas yang dimulai adalah aktivitas saat ini (di bagian teratas back-stack), maka instance yang ada akan menerima panggilan ke {@link android.app.Activity#onNewIntent onNewIntent()} sebagai ganti membuat instance baru aktivitas. - <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> + <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> yang dibahas di bagian sebelumnya.</p></dd> <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt> <dd>Jika aktivitas yang dimulai sudah berjalan dalam tugas saat ini, maka sebagai @@ -427,8 +427,8 @@ afinitas default untuk suatu aktivitas. Aktivitas yang didefinisikan dalam aplikasi yang berbeda bisa berbagi afinitas, atau aktivitas yang didefinisikan dalam aplikasi yang sama bisa diberi afinitas tugas yang berbeda.</p> -<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan -dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> +<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan +dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p> <p>Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> @@ -444,7 +444,7 @@ tugas default untuk aplikasi.</p> {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} . -<p>Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas +<p>Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas yang disebut {@link android.app.Activity#startActivity startActivity()}. Ini didorong ke back-stack yang sama seperti caller. Akan tetapi, jika intent yang diteruskan ke {@link android.app.Activity#startActivity startActivity()} @@ -473,7 +473,7 @@ dimilikinya, bila tugas tersebut di bawa ke latar depan.</p> yang didefinisikan sebagai bagian dari aplikasi perjalanan. Aktivitas memiliki afinitas yang sama dengan aktivitas lain dalam aplikasi yang sama (afinitas aplikasi default) dan aktivitas ini memungkinkan re-parenting dengan atribut ini. Bila salah satu aktivitas Anda memulai aktivitas laporan cuaca, awalnya aktivitas ini dimiliki oleh tugas -yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan, +yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan, aktivitas laporan cuaca akan ditetapkan kembali ke tugas itu dan ditampilkan di dalamnya.</p> </li> </ul> @@ -497,7 +497,7 @@ apa yang mereka kerjakan sebelum dan kembali ke tugas itu untuk memulai sesuatu <dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code> </dt> -<dd>Jika atribut ini ditetapkan ke {@code "true"} dalam aktivitas akar tugas, +<dd>Jika atribut ini ditetapkan ke {@code "true"} dalam aktivitas akar tugas, perilaku default yang baru dijelaskan tidak akan terjadi. Tugas akan mempertahankan semua aktivitas dalam back-stack bahkan setelah sekian lama.</dd> @@ -516,7 +516,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask <dd>Atribut ini seperti <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>, namun beroperasi pada satu aktivitas, bukan pada seluruh tugas. Hal ini juga bisa menyebabkan aktivitas -hilang, termasuk aktivitas akar. Bila ini diatur ke {@code "true"}, +hilang, termasuk aktivitas akar. Bila ini diatur ke {@code "true"}, aktivitas akan tetap menjadi bagian dari tugas hanya untuk sesi saat ini. Jika pengguna keluar dan kemudian kembali ke tugas tersebut, tugas tidak akan ada lagi.</dd> </dl> @@ -552,14 +552,14 @@ pembuka</a> yang menandai aktivitas selalu memulai tugas, {@code "singleTask"} d {@code "singleInstance"}, hanya boleh digunakan bila aktivitas memiliki filter {@link android.content.Intent#ACTION_MAIN} dan {@link android.content.Intent#CATEGORY_LAUNCHER}. Bayangkan, misalnya, apa yang akan -terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai -tugas yang baru, dan pengguna menghabiskan lebih banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol +terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai +tugas yang baru, dan pengguna menghabiskan lebih banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol <em>Home</em>. Tugas kini dikirim ke latar belakang dan tidak terlihat. Sekarang pengguna tidak memiliki cara untuk kembali ke tugas tersebut, karena tidak dinyatakan dalam launcher aplikasi.</p> -<p>Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, atur dalam +<p>Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, atur dalam <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> - pada + pada <a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a> elemen ke {@code "true"} (lihat <a href="#Clearing">Menghapus back-stack</a>).</p> diff --git a/docs/html-intl/intl/in/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/in/guide/topics/manifest/manifest-intro.jd index 6d6a3ad252db..050abf47da02 100644 --- a/docs/html-intl/intl/in/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/in/guide/topics/manifest/manifest-intro.jd @@ -23,7 +23,7 @@ page.title=Manifes Aplikasi Setiap aplikasi harus memiliki file AndroidManifest.xml (bernama persis seperti ini) di direktori akar. <span itemprop="description">File manifes menyediakan informasi penting tentang aplikasi ke sistem Android, - informasi yang harus dimiliki sistem agar bisa menjalankan setiap kode + informasi yang harus dimiliki sistem agar bisa menjalankan setiap kode aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini: </p> @@ -32,26 +32,26 @@ aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini: Nama paket berfungsi sebagai identifier unik untuk aplikasi.</li> <li>Menjelaskan berbagai komponen aplikasi—aktivitas, - layanan, penerima siaran, dan penyedia konten -yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan -mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent -Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai + layanan, penerima siaran, dan penyedia konten +yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan +mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent +Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai komponennya dan dalam kondisi apa bisa diluncurkan.</li> -<li>Menentukan proses yang akan menjadi host komponen aplikasi.</li> +<li>Menentukan proses yang akan menjadi host komponen aplikasi.</li> -<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk -mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li> +<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk +mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li> -<li>Juga mendeklarasikan izin lain yang harus dimiliki untuk +<li>Juga mendeklarasikan izin lain yang harus dimiliki untuk untuk berinteraksi dengan komponen aplikasi.</li> -<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan -profil dan informasi lain saat aplikasi berjalan. Deklarasi ini +<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan +profil dan informasi lain saat aplikasi berjalan. Deklarasi ini hanya ada di manifes saat aplikasi dibuat dan diuji; deklarasi dihapus sebelum aplikasi dipublikasikan.</li> -<li>Mendeklarasikan tingkat minimum API Android yang diperlukan +<li>Mendeklarasikan tingkat minimum API Android yang diperlukan aplikasi.</li> <li>Mencantumkan daftar pustaka yang harus ditautkan aplikasi.</li> @@ -61,12 +61,12 @@ aplikasi.</li> <h2 id="filestruct">Struktur File Manifes</h2> <p> -Diagram di bawah ini menampilkan struktur umum file manifes dan setiap -elemen yang bisa ditampungnya. Setiap elemen, bersama -atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat -informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram, -dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama -elemen lainnya. +Diagram di bawah ini menampilkan struktur umum file manifes dan setiap +elemen yang bisa ditampungnya. Setiap elemen, bersama +atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat +informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram, +dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama +elemen lainnya. </p> <pre> @@ -126,9 +126,9 @@ elemen lainnya. </pre> <p> -Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini -dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa -menambahkan elemen atau atribut sendiri. +Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini +dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa +menambahkan elemen atau atribut sendiri. </p> <p style="margin-left: 2em"> @@ -158,74 +158,74 @@ menambahkan elemen atau atribut sendiri. </p> - + <h2 id="filec">Konvensi File</h2> <p> -Sebagian konvensi dan aturan berlaku secara umum untuk semua elemen +Sebagian konvensi dan aturan berlaku secara umum untuk semua elemen dan atribut di manifes: </p> <dl> <dt><b>Elemen</b></dt> -<dd>Hanya elemen +<dd>Hanya elemen <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> dan -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali. -Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun -setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali. +Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun +setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang berarti. <p> -Jika elemen tidak berisi apa pun, berarti elemen itu berisi elemen lain. +Jika elemen tidak berisi apa pun, berarti elemen itu berisi elemen lain. Semua nilai diatur melalui atribut, bukan sebagai data karakter dalam elemen. </p> <p> -Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, elemen -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, -<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, dan -<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> -bisa dicampur dalam urutan apa pun. (Elemen +Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, elemen +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, +<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, dan +<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> +bisa dicampur dalam urutan apa pun. (Elemen <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> - merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> + merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> ini aliasnya.) </p></dd> <dt><b>Atribut</b></dt> -<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian -yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan -dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan +<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian +yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan +dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan nilai default atau menyatakan apa yang terjadi jika tidak ada spesifikasi. -<p>Selain untuk beberapa atribut elemen akar +<p>Selain untuk beberapa atribut elemen akar <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>, - semua nama atribut dimulai dengan awalan {@code android:} — -misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut + semua nama atribut dimulai dengan awalan {@code android:} — +misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut dengan nama. </p></dd> <dt><b>Mendeklarasikan nama kelas</b></dt> -<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen -aplikasi itu sendiri (elemen -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -) dan aktivitas komponen — utamanya -(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), -layanan -(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), -penerima siaran -(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>), -dan penyedia konten -(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). +<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen +aplikasi itu sendiri (elemen +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +) dan aktivitas komponen — utamanya +(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), +layanan +(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), +penerima siaran +(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>), +dan penyedia konten +(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). <p> -Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen -({@link android.app.Activity}, {@link android.app.Service}, -{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}), -subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan -paket lengkap. +Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen +({@link android.app.Activity}, {@link android.app.Service}, +{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}), +subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan +paket lengkap. Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai berikut: </p> @@ -239,12 +239,12 @@ Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai be </manifest></pre> <p> -Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik, -string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> - melalui atribut +Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik, +string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> + melalui atribut <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> -). Penetapan berikut sama dengan di atas: +). Penetapan berikut sama dengan di atas: </p> <pre><manifest package="com.example.project" . . . > @@ -257,13 +257,13 @@ string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam el </manifest></pre> <p> -Saat memulai komponen, Android akan membuat instance subkelas yang diberi nama. +Saat memulai komponen, Android akan membuat instance subkelas yang diberi nama. Jika subkelas tidak ditetapkan, maka akak dibuat instance kelas dasar. </p></dd> <dt><b>Banyak nilai</b></dt> -<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu -diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen. +<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu +diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen. Misalnya, filter intent dapat mencantumkan beberapa tindakan: <pre><intent-filter . . . > @@ -275,23 +275,23 @@ Misalnya, filter intent dapat mencantumkan beberapa tindakan: <dt><b>Nilai sumber daya</b></dt> <dd>Beberapa atribut memiliki nilai yang bisa ditampilkan kepada pengguna — misalnya -, label dan ikon aktivitas. Nilai atribut ini -harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber +, label dan ikon aktivitas. Nilai atribut ini +harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber daya dinyatakan dalam format berikut,</p> <p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p> <p> -dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan -dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau -"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu. +dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan +dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau +"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu. Misalnya: </p> <pre><activity android:icon="@drawable/smallPic" . . . ></pre> <p> -Nilai tema diekspresikan dengan cara yang sama, namun dengan awal '{@code ?}' +Nilai tema diekspresikan dengan cara yang sama, namun dengan awal '{@code ?}' dan bukan '{@code @}': </p> @@ -299,8 +299,8 @@ dan bukan '{@code @}': </p></dd> <dt><b>Nilai-nilai string</b></dt> -<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}') -harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk +<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}') +harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd> </dl> @@ -308,7 +308,7 @@ baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd> <h2 id="filef">Fitur File</h2> <p> -Bagian berikut menjelaskan cara menerapkan sebagian fitur Android +Bagian berikut menjelaskan cara menerapkan sebagian fitur Android dalam file manifest. </p> @@ -316,37 +316,37 @@ dalam file manifest. <h3 id="ifs">Filter Intent</h3> <p> -Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima -siaran) diaktifkan oleh <i>intent</i>. Intent adalah -sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan -tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori -komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya. -Android mencari komponen yang sesuai untuk merespons intent, meluncurkan -instance komponen baru jika diperlukan, dan meneruskannya ke +Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima +siaran) diaktifkan oleh <i>intent</i>. Intent adalah +sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan +tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori +komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya. +Android mencari komponen yang sesuai untuk merespons intent, meluncurkan +instance komponen baru jika diperlukan, dan meneruskannya ke objek Intent. </p> <p> -Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya - — melalui <i>filter intent</i>. Karena sistem Android -harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen, -filter intent ditetapkan dalam manifes sebagai elemen +Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya + — melalui <i>filter intent</i>. Karena sistem Android +harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen, +filter intent ditetapkan dalam manifes sebagai elemen <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -. Sebuah komponen dapat memiliki filter dalam jumlah berapa saja, masing-masing menjelaskan +. Sebuah komponen dapat memiliki filter dalam jumlah berapa saja, masing-masing menjelaskan kemampuan yang berbeda. </p> <p> Intent yang secara eksplisit menamai komponen target akan mengaktifkan komponen itu; -filter tidak berperan. Namun intent yang tidak menetapkan target -dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter +filter tidak berperan. Namun intent yang tidak menetapkan target +dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter komponen. </p> <p> -Untuk informasi tentang cara objek Intent diuji terhadap filter intent, -lihat dokumen terpisah, -<a href="{@docRoot}guide/components/intents-filters.html">Intent +Untuk informasi tentang cara objek Intent diuji terhadap filter intent, +lihat dokumen terpisah, +<a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>. </p> @@ -354,42 +354,42 @@ dan Filter Intent</a>. <h3 id="iconlabel">Ikon dan Label</h3> <p> -Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk -ikon kecil dan label teks yang bisa ditampilkan kepada pengguna. Sebagian ada juga yang memiliki atribut -{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa -ditampilkan pada layar. Misalnya, elemen +Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk +ikon kecil dan label teks yang bisa ditampilkan kepada pengguna. Sebagian ada juga yang memiliki atribut +{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa +ditampilkan pada layar. Misalnya, elemen <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> - memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan -memberi izin bagi aplikasi yang memintanya, ikon yang mewakili -izin, nama izin, dan keterangan yang + memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan +memberi izin bagi aplikasi yang memintanya, ikon yang mewakili +izin, nama izin, dan keterangan yang mengikutinya bisa ditampilkan kepada pengguna. </p> <p> -Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi -{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini. -Karena itu, ikon dan label yang ditetapkan dalam elemen -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -adalah ikon dan label default untuk setiap komponen aplikasi. -Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -— adalah pengaturan default untuk setiap elemen komponen +Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi +{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini. +Karena itu, ikon dan label yang ditetapkan dalam elemen +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +adalah ikon dan label default untuk setiap komponen aplikasi. +Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +— adalah pengaturan default untuk setiap elemen komponen <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -. Jika elemen -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label, -maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan +. Jika elemen +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label, +maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan filter intent. </p> <p> -Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen -kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang -diiklankan oleh filter. Misalnya, filter dengan pengaturan -"{@code android.intent.action.MAIN}" dan -"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas -sebagai aktivitas yang memulai aplikasi—, yaitu -sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang +Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen +kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang +diiklankan oleh filter. Misalnya, filter dengan pengaturan +"{@code android.intent.action.MAIN}" dan +"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas +sebagai aktivitas yang memulai aplikasi—, yaitu +sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launcher. </p> @@ -397,14 +397,14 @@ diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launc <h3 id="perms">Izin</h3> <p> -Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian -kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode -penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna. +Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian +kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode +penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna. </p> <p> -Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan -tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan +Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan +tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan oleh Android: </p> @@ -418,25 +418,25 @@ Sebuah fitur bisa dilindungi paling banyak oleh satu izin. </p> <p> -Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin, -aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen +Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin, +aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> - dalam manifes. Kemudian, bila aplikasi telah diinstal pada -perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak -dengan memeriksa otoritas yang menandatangani -sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna. -Jika izin diberikan, aplikasi tersebut bisa menggunakan -fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal -tanpa ada pemberitahuan apa pun kepada pengguna. + dalam manifes. Kemudian, bila aplikasi telah diinstal pada +perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak +dengan memeriksa otoritas yang menandatangani +sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna. +Jika izin diberikan, aplikasi tersebut bisa menggunakan +fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal +tanpa ada pemberitahuan apa pun kepada pengguna. </p> <p> -Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan, -penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan -izin mana pun yang didefinisikan oleh Android (tercantum dalam -{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan -oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan -dengan elemen +Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan, +penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan +izin mana pun yang didefinisikan oleh Android (tercantum dalam +{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan +oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan +dengan elemen <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> . Misalnya, aktivitas dapat dilindungi sebagai berikut: </p> @@ -457,43 +457,43 @@ dengan elemen </pre> <p> -Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya -dideklarasikan dengan elemen +Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya +dideklarasikan dengan elemen <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, penggunaannya juga diminta dengan elemen +, penggunaannya juga diminta dengan elemen <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -. Penggunaannya harus diminta agar komponen -aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu -diberlakukan oleh aplikasi itu sendiri. +. Penggunaannya harus diminta agar komponen +aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu +diberlakukan oleh aplikasi itu sendiri. </p> <p> -Dalam contoh yang sama, jika atribut {@code permission} ditetapkan -untuk izin yang dideklarasikan di tempat lain -lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut -tidak perlu mendeklarasikannya lagi dengan elemen +Dalam contoh yang sama, jika atribut {@code permission} ditetapkan +untuk izin yang dideklarasikan di tempat lain +lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut +tidak perlu mendeklarasikannya lagi dengan elemen <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -. Akan tetapi, penggunaannya masih perlu dengan -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. +. Akan tetapi, penggunaannya masih perlu dengan +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. </p> <p> -Elemen -<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> -mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam -kode. Dan +Elemen +<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> +mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam +kode. Dan <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -mendefinisikan label untuk seperangkat izin (yang sama-sama dideklarasikan dalam manifes dengan elemen -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin -dikelompokkan saat ditampilkan kepada pengguna. Elemen +mendefinisikan label untuk seperangkat izin (yang sama-sama dideklarasikan dalam manifes dengan elemen +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin +dikelompokkan saat ditampilkan kepada pengguna. Elemen <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> - tidak menetapkan izin mana dimiliki grup; + tidak menetapkan izin mana dimiliki grup; elemen hanya memberi nama grup. Izin ditempatkan dalam grup -dengan memberikan nama grup ke elemen -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> - melalui atribut -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> +dengan memberikan nama grup ke elemen +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> + melalui atribut +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> . </p> @@ -501,17 +501,17 @@ dengan memberikan nama grup ke elemen <h3 id="libs">Pustaka</h3> <p> -Setiap aplikasi ditautkan dengan pustaka default Android, yang -menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum -seperti Activity, Service, Intent, View, Button, Application, ContentProvider, +Setiap aplikasi ditautkan dengan pustaka default Android, yang +menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum +seperti Activity, Service, Intent, View, Button, Application, ContentProvider, dan sebagainya). </p> <p> -Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda -menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan -paket tersebut. Manifes harus berisi elemen -<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang -terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan +Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda +menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan +paket tersebut. Manifes harus berisi elemen +<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang +terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan dalam dokumentasi paket.) </p> diff --git a/docs/html-intl/intl/in/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/in/guide/topics/providers/calendar-provider.jd index 76bc9915cbd7..305881536858 100644 --- a/docs/html-intl/intl/in/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/in/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=Penyedia Kalender <li><a href="#intent-view">Menggunakan intent untuk menampilkan data kalender</a></li> </ol> </li> - + <li><a href="#sync-adapter">Adaptor Sinkronisasi</a></li> </ol> @@ -63,8 +63,8 @@ pada kalender, kejadian, peserta, pengingat, dan seterusnya.</p> <p>API Penyedia Kalender bisa digunakan oleh aplikasi dan adaptor sinkronisasi. Aturannya bervariasi menurut tipe program yang membuat panggilan. Dokumen ini -terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk -pembahasan ragam adaptor sinkronisasi, lihat +terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk +pembahasan ragam adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p> @@ -89,7 +89,7 @@ data kalender seorang pengguna.</p> <p>Setiap penyedia konten membuka sebuah URI publik (yang dibungkus sebagai objek {@link android.net.Uri} ) yang mengidentifikasikan set datanya secara unik. Penyedia konten yang mengontrol - beberapa set data (beberapa tabel) mengekspos URI terpisah untuk tiap set. Semua + beberapa set data (beberapa tabel) mengekspos URI terpisah untuk tiap set. Semua URI untuk penyedia diawali dengan string "content://". String ini mengidentifikasi data sebagai dikontrol oleh penyedia konten. Penyedia Kalender mendefinisikan konstanta untuk URI masing-masing kelas (tabel). URI ini @@ -113,26 +113,26 @@ tabel dan bidang utama yang saling berkaitan.</p> </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - - <td>Tabel ini menyimpan + + <td>Tabel ini menyimpan informasi khusus kalender. Tiap baris dalam tabel ini berisi data untuk satu kalender, seperti nama, warna, informasi sinkronisasi, dan seterusnya.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>Tabel ini menyimpan informasi khusus kejadian. Tiap baris dalam tabel ini berisi informasi untuk satu kejadian—misalnya, judul kejadian, lokasi, waktu mulai, waktu selesai, dan seterusnya. Kejadian bisa terjadi satu kali atau bisa berulang beberapa kali. Peserta, -pengingat, dan properti perluasan disimpan dalam tabel terpisah. -Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +pengingat, dan properti perluasan disimpan dalam tabel terpisah. +Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang mengacu {@link android.provider.BaseColumns#_ID} dalam tabel Events.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>Tabel ini menyimpan waktu mulai dan waktu selesai setiap bentuk kejadian. Tiap baris dalam tabel ini mewakili satu bentuk kejadian. Untuk kejadian satu kali ada pemetaan 1:1 @@ -141,7 +141,7 @@ secara otomatis yang sesuai dengan beberapa kejadian itu.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>Tabel ini menyimpan informasi peserta (tamu) kejadian. Tiap baris mewakili satu tamu kejadian. Ini menetapkan tipe tamu dan respons kehadiran tamu @@ -149,17 +149,17 @@ untuk kejadian.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>Tabel ini menyimpan data peringatan/pemberitahuan. Tiap baris mewakili satu peringatan untuk sebuah kejadian. Sebuah kejadian bisa memiliki beberapa pengingat. Jumlah maksimum pengingat per kejadian -ditetapkan dalam -{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, +ditetapkan dalam +{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, yang diatur oleh adaptor sinkronisasi yang memiliki kalender yang diberikan. Pengingat ditetapkan dalam menit sebelum kejadian dan memiliki metode yang menentukan cara pengguna akan diperingatkan.</td> </tr> - + </table> <p>API Penyedia Kalender didesain agar luwes dan tangguh. Sementara itu @@ -178,9 +178,9 @@ Kalender</a>.</p> <li><strong>Adaptor sinkronisasi.</strong> Adaptor sinkronisasi menyinkronkan data kalender -pada perangkat pengguna dengan server atau sumber data lain. Dalam tabel +pada perangkat pengguna dengan server atau sumber data lain. Dalam tabel {@link android.provider.CalendarContract.Calendars} dan -{@link android.provider.CalendarContract.Events}, +{@link android.provider.CalendarContract.Events}, ada kolom yang dicadangkan untuk digunakan adaptor sinkronisasi. Penyedia dan aplikasi tidak boleh memodifikasinya. Sebenarnya, tabel-tabel itu tidak terlihat kecuali jika diakses sebagai adaptor sinkronisasi. Untuk informasi selengkapnya tentang @@ -211,7 +211,7 @@ untuk menghapus, menyisipkan, atau memperbarui data kalender:</p> <p>Tabel {@link android.provider.CalendarContract.Calendars} berisi data untuk tiap kalender. Kolom-kolom -berikut ini bisa ditulisi oleh aplikasi maupun <a href="#sync-adapter">adaptor sinkronisasi</a>. +berikut ini bisa ditulisi oleh aplikasi maupun <a href="#sync-adapter">adaptor sinkronisasi</a>. Untuk mengetahui daftar lengkap bidang-bidang yang didukung, lihat acuan {@link android.provider.CalendarContract.Calendars}.</p> <table> @@ -229,7 +229,7 @@ acuan {@link android.provider.CalendarContract.Calendars}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>Sebuah boolean yang menunjukkan apakah kalender dipilih untuk ditampilkan. Nilai 0 menunjukkan bahwa kejadian yang terkait dengan kalender ini tidak boleh ditampilkan. Nilai 1 menunjukkan bahwa kejadian yang terkait dengan kalender ini harus @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances}.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>Sebuah boolean yang menunjukkan apakah kalender harus disinkronkan dan apakah kejadiannya harus disimpan pada perangkat. Nilai 0 berarti jangan menyinkronkan kalender ini atau simpan kejadiannya pada perangkat. Nilai 1 berarti menyinkronkan kejadian untuk kalender ini @@ -253,8 +253,8 @@ dan simpan kejadiannya pada perangkat.</td> <p>Berikut ini adalah contoh yang menampilkan cara mendapatkan kalender yang dimiliki oleh pengguna tertentu. Untuk memudahkan, dalam contoh ini, operasi query ditampilkan dalam thread antarmuka pengguna ("thread utama"). Dalam praktiknya, hal ini harus dilakukan dalam -thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat -<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar +thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat +<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar membaca data melainkan memodifikasinya, lihat {@link android.content.AsyncQueryHandler}. </p> @@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Mengapa Anda harus menyertakan ACCOUNT_TYPE?</h3> <p>Jika Anda membuat query pada {@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME -Calendars.ACCOUNT_NAME}, Anda juga harus menyertakan +Calendars.ACCOUNT_NAME}, Anda juga harus menyertakan {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE} dalam pemilihan. Itu karena akun yang bersangkutan hanya dianggap unik mengingat <code>ACCOUNT_NAME</code> dan @@ -289,7 +289,7 @@ autentikator akun yang digunakan bila akun didaftarkan dengan android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} untuk kalender yang tidak terkait dengan akun perangkat. Akun {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} tidak -disinkronkan.</p> </div> </div> +disinkronkan.</p> </div> </div> <p> Di bagian berikutnya pada contoh ini, Anda akan membuat query. Pemilihan @@ -301,59 +301,59 @@ kalender yang memiliki <code>ACCOUNT_NAME</code> telah ditampilkan pengguna, bukan hanya kalender yang dimiliki pengguna, hilangkan <code>OWNER_ACCOUNT</code>. Query tersebut akan menghasilkan objek {@link android.database.Cursor} yang bisa Anda gunakan untuk menyusuri set hasil yang dikembalikan oleh -query database. Untuk diskusi selengkapnya tentang penggunaan query dalam penyedia konten, +query database. Untuk diskusi selengkapnya tentang penggunaan query dalam penyedia konten, lihat <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Kalender</a>.</p> <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>Bagian berikutnya ini menggunakan kursor untuk merunut set hasil. Bagian ini menggunakan konstanta yang disiapkan pada awal contoh ini untuk menghasilkan nilai-nilai bagi tiap bidang.</p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">Memodifikasi kalender</h3> <p>Untuk melakukan pembaruan kalender, Anda bisa menyediakan {@link android.provider.BaseColumns#_ID} kalender itu baik sebagai ID yang ditambahkan ke -URI +URI -({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) atau sebagai item pemilihan pertama. Pemilihan harus diawali dengan <code>"_id=?"</code>, dan <code>selectionArg</code> pertama harus berupa {@link -android.provider.BaseColumns#_ID} kalender. +android.provider.BaseColumns#_ID} kalender. Anda juga bisa melakukan pembaruan dengan menuliskan kode ID dalam URI. Contoh ini mengubah -nama tampilan kalender dengan pendekatan -({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +nama tampilan kalender dengan pendekatan +({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) :</p> <pre>private static final String DEBUG_TAG = "MyActivity"; @@ -375,7 +375,7 @@ perlu membuat sebuah kalender lokal, aplikasi bisa melakukannya dengan melakukan penyisipan kalender sebagai adaptor sinkronisasi, menggunakan {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} dari {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. -{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} +{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} adalah sebuah tipe akun khusus untuk kalender yang tidak terkait dengan akun perangkat. Kalender tipe ini tidak disinkronkan dengan server. Untuk diskusi tentang adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p> @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>Durasi kejadian dalam format <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a>. Misalnya, nilai <code>"PT1H"</code> menyatakan bahwa kejadian akan berlangsung satu jam, dan nilai <code>"P2W"</code> menunjukkan @@ -444,39 +444,39 @@ durasi 2 minggu. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>Nilai 1 menunjukkan kejadian ini memakan waktu sehari penuh, seperti yang didefinisikan oleh zona waktu lokal. Nilai 0 menunjukkan kejadian adalah kejadian biasa yang mungkin dimulai dan selesai pada sembarang waktu selama suatu hari.</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>Aturan perulangan untuk format kejadian. Misalnya, <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Anda bisa menemukan contoh selengkapnya <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">di sini</a>.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>Tanggal perulangan kejadian. - Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE} - bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE} + <td>Tanggal perulangan kejadian. + Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE} + bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE} untuk mendefinisikan satu set agregat kejadian berulang. Untuk diskusi selengkapnya, lihat <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">Spesifikasi RFC5545</a>.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - - <td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa + + <td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa dijadwalkan. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}. Perhatikan bahwa aturan ini tidak berlaku Anda menyisipkan kejadian melalui Intent {@link android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam skenario itu, sebuah zona waktu default akan diberikan.</li> - + <li>Untuk kejadian tidak-berulang, Anda harus menyertakan {@link android.provider.CalendarContract.EventsColumns#DTEND}. </li> - - + + <li>Untuk kejadian berulang, Anda harus menyertakan sebuah {@link android.provider.CalendarContract.EventsColumns#DURATION} selain {@link android.provider.CalendarContract.EventsColumns#RRULE} atau {@link @@ -526,9 +526,9 @@ android.provider.CalendarContract.EventsColumns#RDATE}. Perhatikan bahwa aturan Anda menyisipkan kejadian melalui Intent {@link android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam skenario itu, Anda bisa menggunakan {@link -android.provider.CalendarContract.EventsColumns#RRULE} bersama {@link android.provider.CalendarContract.EventsColumns#DTSTART} dan {@link android.provider.CalendarContract.EventsColumns#DTEND}, dan aplikasi Calendar +android.provider.CalendarContract.EventsColumns#RRULE} bersama {@link android.provider.CalendarContract.EventsColumns#DTSTART} dan {@link android.provider.CalendarContract.EventsColumns#DTEND}, dan aplikasi Calendar akan mengubahnya menjadi durasi secara otomatis.</li> - + </ul> <p>Berikut ini adalah contoh penyisipan kejadian. Penyisipan ini dilakukan dalam thread UI @@ -539,8 +539,8 @@ informasi selengkapnya, lihat {@link android.content.AsyncQueryHandler}.</p> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -578,14 +578,14 @@ peserta atau pengingat ke kejadian.</p> gunakan Intent {@link android.content.Intent#ACTION_EDIT EDIT}, seperti dijelaskan dalam <a href="#intent-edit">Menggunakan intent untuk mengedit kejadian</a>. Akan tetapi, jika perlu, Anda bisa mengedit kejadian secara langsung. Untuk melakukan pembaruan -suatu kejadian, Anda bisa memberikan <code>_ID</code> +suatu kejadian, Anda bisa memberikan <code>_ID</code> kejadian itu sebagai ID yang ditambahkan ke URI ({@link -android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) -atau sebagai item pemilihan pertama. +android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +atau sebagai item pemilihan pertama. Pemilihan harus dimulai dengan <code>"_id=?"</code>, dan <code>selectionArg</code> yang pertama harus berupa <code>_ID</code> kejadian. Anda juga bisa melakukan pembaruan dengan menggunakan pemilihan tanpa ID. Berikut ini adalah contoh pembaruan -kejadian. Contoh ini mengubah judul kejadian dengan pendekatan +kejadian. Contoh ini mengubah judul kejadian dengan pendekatan {@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()} :</p> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,22 +625,22 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Tabel Peserta</h2> <p>Tiap baris tabel {@link android.provider.CalendarContract.Attendees} -mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil -{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} +mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil +{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} akan menghasilkan daftar peserta untuk -kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan. -{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini +kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan. +{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini harus cocok dengan {@link -android.provider.BaseColumns#_ID} kejadian tertentu.</p> +android.provider.BaseColumns#_ID} kejadian tertentu.</p> <p>Tabel berikut mencantumkan -bidang-bidang yang bisa ditulis. Saat menyisipkan peserta baru, Anda harus menyertakan semuanya +bidang-bidang yang bisa ditulis. Saat menyisipkan peserta baru, Anda harus menyertakan semuanya kecuali <code>ATTENDEE_NAME</code>. </p> @@ -698,7 +698,7 @@ kecuali <code>ATTENDEE_NAME</code>. <h3 id="add-attendees">Menambahkan Peserta</h3> <p>Berikut ini adalah contoh yang menambahkan satu peserta ke kejadian. Perhatikan bahwa -{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} diperlukan:</p> <pre> @@ -718,17 +718,17 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">Tabel Pengingat</h2> <p>Tiap baris tabel {@link android.provider.CalendarContract.Reminders} -mewakili satu pengingat untuk sebuah kejadian. Memanggil +mewakili satu pengingat untuk sebuah kejadian. Memanggil {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} akan menghasilkan daftar pengingat untuk -kejadian dengan +kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.</p> <p>Tabel berikut mencantumkan bidang-bidang yang bisa ditulis untuk pengingat. Semua bidang harus disertakan saat menyisipkan pengingat baru. Perhatikan bahwa adaptor sinkronisasi menetapkan tipe pengingat yang didukungnya dalam tabel {@link -android.provider.CalendarContract.Calendars}. Lihat -{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} +android.provider.CalendarContract.Calendars}. Lihat +{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} untuk detailnya.</p> @@ -773,16 +773,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <h2 id="instances">Tabel Instances</h2> -<p>Tabel +<p>Tabel {@link android.provider.CalendarContract.Instances} menyimpan waktu mulai dan waktu selesai kejadian. Tiap baris dalam tabel ini mewakili satu bentuk kejadian. Tabel instance tidak bisa ditulis dan hanya menyediakan sebuah cara untuk membuat query kejadian. </p> -<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan -bahwa zona waktu didefinisikan oleh -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -dan +<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan +bahwa zona waktu didefinisikan oleh +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} +dan {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p> @@ -801,18 +801,18 @@ dan </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>Hari selesai Julian dari instance, relatif terhadap -zona waktu Kalender. - +zona waktu Kalender. + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>Menit selesai dari instance yang diukur dari tengah malam di zona waktu Kalender.</td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ Kalender.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>Hari mulai Julian dari instance, relatif terhadap zona waktu Kalender. + <td>Hari mulai Julian dari instance, relatif terhadap zona waktu Kalender. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>Menit mulai dari instance yang diukur dari tengah malam, relatif terhadap -zona waktu Kalender. +zona waktu Kalender. </td> - + </tr> </table> @@ -840,7 +840,7 @@ zona waktu Kalender. dalam URI. Dalam contoh ini, {@link android.provider.CalendarContract.Instances} mendapatkan akses ke bidang {@link android.provider.CalendarContract.EventsColumns#TITLE} melalui -implementasi antarmuka {@link android.provider.CalendarContract.EventsColumns}-nya. +implementasi antarmuka {@link android.provider.CalendarContract.EventsColumns}-nya. Dengan kata lain, {@link android.provider.CalendarContract.EventsColumns#TITLE} dihasilkan melalui tampilan database, bukan melalui query terhadap tabel {@link @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -922,9 +922,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - Anda juga bisa mengacu ke URI dengan -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. -Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>. + Anda juga bisa mengacu ke URI dengan +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. +Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>. </td> <td>Membuka kalender pada waktu yang ditetapkan oleh <code><ms_since_epoch></code>.</td> @@ -935,11 +935,11 @@ Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/ </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - Anda juga bisa mengacu ke URI dengan -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Anda juga bisa mengacu ke URI dengan +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>. - + </td> <td>Menampilkan kejadian yang ditetapkan oleh <code><event_id></code>.</td> @@ -952,12 +952,12 @@ Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/ <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - Anda juga bisa mengacu ke URI dengan -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Anda juga bisa mengacu ke URI dengan +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Menggunakan intent untuk mengedit kejadian</a>. - - + + </td> <td>Mengedit kejadian yang ditetapkan oleh <code><event_id></code>.</td> @@ -972,11 +972,11 @@ Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/provid <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - Anda juga bisa mengacu ke URI dengan -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Anda juga bisa mengacu ke URI dengan +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>. - + </td> <td>Membuat sebuah kejadian.</td> @@ -996,7 +996,7 @@ Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/provid <td>Nama kejadian.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>Waktu mulai kejadian dalam milidetik sejak waktu patokan.</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>Waktu selesai kejadian dalam milidetik sejak waktu patokan.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>Sebuah boolean yang menunjukkan bahwa kejadian sehari penuh. Nilai bisa <code>true</code> atau <code>false</code>.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>Lokasi kejadian.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>Keterangan kejadian.</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>Apakah kejadian bersifat privat atau publik.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa dijadwalkan.</td> - -</table> + +</table> <p>Bagian berikut menjelaskan cara menggunakan semua intent ini.</p> @@ -1059,23 +1059,23 @@ akan memungkinkan aplikasi Anda menyerahkan tugas penyisipan kejadian ke Kalende Dengan pendekatan ini, aplikasi Anda bahkan tidak perlu menyertakan izin {@link android.Manifest.permission#WRITE_CALENDAR} dalam <a href="#manifest">file manifesnya</a>.</p> - + <p>Bila pengguna menjalankan aplikasi yang menggunakan pendekatan ini, aplikasi akan mengirim izin ke Kalender untuk menyelesaikan penambahan kejadian. Intent {@link android.content.Intent#ACTION_INSERT INSERT} menggunakan bidang-bidang ekstra untuk mengisi formulir lebih dahulu dengan detail kejadian dalam Kalender. Pengguna nanti bisa membatalkan kejadian, mengedit formulir sebagaimana diperlukan, atau menyimpan kejadian ke kalender mereka.</p> - + <p>Berikut ini adalah cuplikan kode yang menjadwalkan kejadian pada tanggal 19 Januari 2012, yang berjalan dari 7:30 pagi hingga 8:30 pagi Perhatikan hal-hal berikut tentang cuplikan kode ini:</p> <ul> - <li>Cuplikan kode ini menetapkan {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} + <li>Cuplikan kode ini menetapkan {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} sebagai URI-nya.</li> - + <li>Cuplikan kode ini menggunakan bidang-bidang ekstra {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} dan {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} untuk mengisi dahulu formulir dengan waktu kejadian. Nilai-nilai untuk waktu ini harus dalam milidetik UTC sejak waktu patokan.</li> - + <li>Cuplikan kode ini menggunakan bidang ekstra {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} untuk memberikan daftar undangan yang dipisah koma, yang ditetapkan melalui alamat email.</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,18 +1158,18 @@ mengakses Penyedia Kalender:</p> <ul> <li>Adaptor sinkronisasi perlu menetapkan bahwa dirinya sebuah adaptor sinkronisasi dengan mengatur {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} ke <code>true</code>.</li> - - + + <li>Adaptor sinkronisasi perlu memberikan {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} dan {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} sebagai parameter query dalam URI. </li> - + <li>Adaptor sinkronisasi memiliki akses tulis ke lebih banyak kolom daripada aplikasi atau widget. - Misalnya, aplikasi hanya bisa mengubah sedikit karakteristik kalender, + Misalnya, aplikasi hanya bisa mengubah sedikit karakteristik kalender, misalnya nama, nama tampilan, pengaturan visibilitas, dan apakah kalender disinkronkan atau tidak. Sebagai perbandingan, adaptor sinkronisasi bisa mengakses bukan hanya kolom-kolom itu, namun banyak kolom lainnya, misalnya warna kalender, zona waktu, tingkat akses, lokasi, dan seterusnya. -Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan +Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan <code>ACCOUNT_TYPE</code> yang ditetapkannya.</li> </ul> <p>Berikut ini adalah metode pembantu yang bisa Anda gunakan untuk menghasilkan URI bagi penggunaan dengan adaptor sinkronisasi:</p> @@ -1180,5 +1180,5 @@ Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>Untuk contoh implementasi adaptor sinkronisasi (yang tidak terkait secara khusus dengan Kalender), lihat +<p>Untuk contoh implementasi adaptor sinkronisasi (yang tidak terkait secara khusus dengan Kalender), lihat <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>. diff --git a/docs/html-intl/intl/in/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/in/guide/topics/providers/content-provider-basics.jd index c4003caba88f..4af92771f7e1 100644 --- a/docs/html-intl/intl/in/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/in/guide/topics/providers/content-provider-basics.jd @@ -236,7 +236,7 @@ page.title=Dasar-Dasar Penyedia Konten Misalnya, untuk mendapatkan daftar kata dan lokalnya dari Penyedia Kamus Pengguna, Anda memanggil {@link android.content.ContentResolver#query ContentResolver.query()}. Metode {@link android.content.ContentResolver#query query()} memanggil - metode {@link android.content.ContentProvider#query ContentProvider.query()} yang didefinisikan oleh + metode {@link android.content.ContentProvider#query ContentProvider.query()} yang didefinisikan oleh Penyedia Kamus Pengguna. Baris-baris kode berikut menunjukkan sebuah panggilan {@link android.content.ContentResolver#query ContentResolver.query()}: <p> @@ -251,7 +251,7 @@ mCursor = getContentResolver().query( </pre> <p> Tabel 2 menampilkan cara argumen untuk - {@link android.content.ContentResolver#query + {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} cocok dengan sebuah pernyataan SELECT di SQL: </p> <p class="table-caption"> @@ -310,7 +310,7 @@ mCursor = getContentResolver().query( {@link android.provider.UserDictionary.Words#CONTENT_URI} mengandung URI konten dari tabel "words" kamus pengguna. Objek {@link android.content.ContentResolver} akan mengurai otoritas URI, dan menggunakannya untuk "mengetahui" penyedia dengan - membandingkan otoritas tersebut dengan sebuah tabel sistem berisi penyedia yang dikenal. + membandingkan otoritas tersebut dengan sebuah tabel sistem berisi penyedia yang dikenal. {@link android.content.ContentResolver} kemudian bisa mengirim argumen query ke penyedia yang benar. </p> @@ -343,8 +343,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); salah satunya. </p> <p class="note"> - <strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder} - berisi metode praktis untuk membangun objek dari string URI yang tersusun dengan baik. + <strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder} + berisi metode praktis untuk membangun objek dari string URI yang tersusun dengan baik. {@link android.content.ContentUris} berisi metode praktis untuk menambahkan nilai ID ke URI. Cuplikan kode sebelumnya menggunakan {@link android.content.ContentUris#withAppendedId withAppendedId()} untuk menambahkan id ke URI konten User Dictionary. @@ -359,8 +359,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </p> <p class="note"> Demi kejelasan, cuplikan kode di bagian ini memanggil - {@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam - kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya + {@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam + kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya adalah menggunakan kelas {@link android.content.CursorLoader}, yang dijelaskan lebih detail dalam panduan <a href="{@docRoot}guide/components/loaders.html"> Loader</a>. Juga, baris-baris kode tersebut hanyalah cuplikan; tidak menunjukkan sebuah aplikasi @@ -428,7 +428,7 @@ String[] mSelectionArgs = {""}; <p> Cuplikan berikutnya menampilkan cara menggunakan {@link android.content.ContentResolver#query ContentResolver.query()}, dengan menggunakan Penyedia Kamus Pengguna - sebagai contoh. Query klien penyedia serupa dengan query SQL, dan berisi satu + sebagai contoh. Query klien penyedia serupa dengan query SQL, dan berisi satu set kolom yang akan dihasilkan, satu set kriteria pemilihan, dan urutan sortir. </p> <p> @@ -438,8 +438,8 @@ String[] mSelectionArgs = {""}; <p> Ekspresi yang menetapkan baris yang harus diambil dipecah menjadi klausa pemilihan dan argumen pemilihan. Klausa pemilihan adalah kombinasi ekspresi logis dan boolean, - nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan - parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai + nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan + parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai dari larik argumen pemilihan (variabel <code>mSelectionArgs</code>). </p> <p> @@ -558,21 +558,21 @@ String[] selectionArgs = {""}; selectionArgs[0] = mUserInput; </pre> <p> - Sebuah klausa pemilihan yang menggunakan <code>?</code> sebagai parameter yang bisa diganti dan sebuah larik + Sebuah klausa pemilihan yang menggunakan <code>?</code> sebagai parameter yang bisa diganti dan sebuah larik argumen pemilihan adalah cara yang lebih disukai untuk menyebutkan pemilihan, sekalipun penyedia tidak dibuat berdasarkan database SQL. </p> <!-- Displaying the results --> <h3 id="DisplayResults">Menampilkan hasil query</h3> <p> - Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu - menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh + Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu + menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh proyeksi query untuk baris yang cocok dengan kriteria pemilihan query. Objek - {@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang - dimuatnya. Dengan metode {@link android.database.Cursor}, Anda bisa mengulang baris-baris dalam + {@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang + dimuatnya. Dengan metode {@link android.database.Cursor}, Anda bisa mengulang baris-baris dalam hasil, menentukan tipe data tiap kolom, mengambil data dari kolom, dan memeriksa - properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor} - akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat + properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor} + akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat bila {@link android.database.Cursor} berubah, atau keduanya. </p> <p class="note"> @@ -703,14 +703,14 @@ if (mCursor != null) { <p> Untuk mendapatkan izin yang diperlukan untuk mengakses penyedia, aplikasi memintanya dengan elemen <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> - dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna - harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya, + dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna + harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya, Package Manager akan melanjutkan instalasi; jika pengguna tidak menyetujui, Package Manager akan membatalkan instalasi. </p> <p> Elemen -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> berikut meminta akses baca ke Penyedia Kamus Pengguna: </p> <pre> @@ -793,8 +793,8 @@ content://user_dictionary/words/<id_value> Untuk memperbarui sebuah baris, gunakan objek {@link android.content.ContentValues} dengan nilai-nilai yang diperbarui, persis seperti yang Anda lakukan pada penyisipan, dan kriteria pemilihan persis seperti yang Anda lakukan pada query. Metode klien yang Anda gunakan adalah - {@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan - nilai-nilai ke objek {@link android.content.ContentValues} untuk kolom yang sedang Anda perbarui. Jika Anda + {@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan + nilai-nilai ke objek {@link android.content.ContentValues} untuk kolom yang sedang Anda perbarui. Jika Anda ingin membersihkan konten kolom, aturlah nilai ke <code>null</code>. </p> <p> @@ -828,7 +828,7 @@ mRowsUpdated = getContentResolver().update( </pre> <p> Anda juga harus membersihkan input pengguna bila memanggil - {@link android.content.ContentResolver#update ContentResolver.update()}. Untuk mengetahui selengkapnya tentang + {@link android.content.ContentResolver#update ContentResolver.update()}. Untuk mengetahui selengkapnya tentang hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>. </p> <h3 id="Deleting">Menghapus data</h3> @@ -858,7 +858,7 @@ mRowsDeleted = getContentResolver().delete( </pre> <p> Anda juga harus membersihkan input pengguna bila memanggil - {@link android.content.ContentResolver#delete ContentResolver.delete()}. Untuk mengetahui selengkapnya tentang + {@link android.content.ContentResolver#delete ContentResolver.delete()}. Untuk mengetahui selengkapnya tentang hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>. </p> <!-- Provider Data Types --> @@ -883,7 +883,7 @@ mRowsDeleted = getContentResolver().delete( </ul> <p> Tipe data lain yang sering digunakan penyedia adalah Binary Large OBject (BLOB) yang diimplementasikan sebagai - larik byte 64 KB. Anda bisa melihat tipe data yang tersedia dengan memperhatikan metode "get" + larik byte 64 KB. Anda bisa melihat tipe data yang tersedia dengan memperhatikan metode "get" kelas {@link android.database.Cursor}. </p> <p> @@ -905,7 +905,7 @@ mRowsDeleted = getContentResolver().delete( {@link android.content.ContentResolver#getType ContentResolver.getType()}. </p> <p> - Bagian <a href="#MIMETypeReference">Acuan Tipe MIME</a> menerangkan + Bagian <a href="#MIMETypeReference">Acuan Tipe MIME</a> menerangkan sintaks tipe MIME baik yang standar maupun custom. </p> @@ -946,9 +946,9 @@ mRowsDeleted = getContentResolver().delete( Untuk mengakses penyedia dalam "mode batch", buat satu larik objek {@link android.content.ContentProviderOperation}, kemudian kirim larik itu ke penyedia konten dengan - {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan - <em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu. - Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja + {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan + <em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu. + Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja terhadap tabel yang berbeda. Panggilan ke {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()} menghasilkan satu larik hasil. </p> @@ -1011,7 +1011,7 @@ mRowsDeleted = getContentResolver().delete( <p> Penyedia mendefinisikan izin URI untuk URI konten dalam manifesnya, dengan menggunakan atribut <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">android:grantUriPermission</a></code> - dari elemen + dari elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> , serta elemen anak <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> @@ -1184,7 +1184,7 @@ content://com.example.trains/Line2/5 vnd.android.cursor.<strong>item</strong>/vnd.example.line2 </pre> <p> - Kebanyakan penyedia konten mendefinisikan konstanta kelas kontrak untuk tipe MIME yang digunakannya. Kelas kontrak + Kebanyakan penyedia konten mendefinisikan konstanta kelas kontrak untuk tipe MIME yang digunakannya. Kelas kontrak {@link android.provider.ContactsContract.RawContacts} pada Penyedia Kontak misalnya, mendefinisikan konstanta {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} untuk tipe MIME diff --git a/docs/html-intl/intl/in/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/in/guide/topics/providers/content-provider-creating.jd index fefce703c2c8..7fbc613ff79c 100644 --- a/docs/html-intl/intl/in/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/in/guide/topics/providers/content-provider-creating.jd @@ -1171,7 +1171,7 @@ metadata lain yang melekat ke penyedia. Kelas <li> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label"> android:label</a></code>: Label informatif yang menjelaskan penyedia atau - datanya, atau keduanya. Label ini muncul dalam daftar aplikasi di + datanya, atau keduanya. Label ini muncul dalam daftar aplikasi di <em>Settings</em> > <em>Apps</em> > <em>All</em>. </li> </ul> @@ -1189,7 +1189,7 @@ metadata lain yang melekat ke penyedia. Kelas Aplikasi bisa mengakses penyedia konten secara tidak langsung dengan sebuah {@link android.content.Intent}. Aplikasi tidak memanggil satu pun dari metode-metode {@link android.content.ContentResolver} atau {@link android.content.ContentProvider}. Sebagai gantinya, aplikasi mengirim intent yang memulai aktivitas, - yang sering kali merupakan bagian dari aplikasi penyedia sendiri. Aktivitas tujuan bertugas + yang sering kali merupakan bagian dari aplikasi penyedia sendiri. Aktivitas tujuan bertugas mengambil dan menampilkan data dalam UI-nya. Bergantung pada tindakan dalam intent, aktivitas tujuan juga bisa meminta pengguna untuk membuat modifikasi pada data penyedia. Intent juga bisa berisi data "ekstra" yang menampilkan aktivitas tujuan diff --git a/docs/html-intl/intl/in/guide/topics/providers/content-providers.jd b/docs/html-intl/intl/in/guide/topics/providers/content-providers.jd index fc6f12b6f569..2dcd55e8fc29 100644 --- a/docs/html-intl/intl/in/guide/topics/providers/content-providers.jd +++ b/docs/html-intl/intl/in/guide/topics/providers/content-providers.jd @@ -69,7 +69,7 @@ menempelkan data atau file yang kompleks dari aplikasi Anda ke aplikasi lain. <p> Android sendiri berisi penyedia konten yang mengelola data seperti informasi audio, video, gambar, dan kontak pribadi. Anda bisa melihat sebagian informasi ini tercantum dalam dokumentasi - acuan untuk paket + acuan untuk paket <code><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a> </code>. Dengan beberapa batasan, semua penyedia ini bisa diakses oleh aplikasi Android apa saja. diff --git a/docs/html-intl/intl/in/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/in/guide/topics/providers/document-provider.jd index c066e85b283d..f85746753c01 100644 --- a/docs/html-intl/intl/in/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/in/guide/topics/providers/document-provider.jd @@ -96,7 +96,7 @@ walaupun cara penyedia dokumen Anda secara fisik menyimpan data adalah terserah Platform Android terdiri dari beberapa penyedia dokumen bawaan, seperti Downloads, Images, dan Videos.</li> -<li><strong>Aplikasi klien</strong>—Aplikasi custom yang memanggil intent +<li><strong>Aplikasi klien</strong>—Aplikasi custom yang memanggil intent {@link android.content.Intent#ACTION_OPEN_DOCUMENT} dan/atau {@link android.content.Intent#ACTION_CREATE_DOCUMENT} dan menerima file yang dihasilkan penyedia dokumen.</li> @@ -446,7 +446,7 @@ bisa terus menulis ke dokumen itu.</p> <h3 id="delete">Menghapus dokumen</h3> -<p>Jika Anda memiliki URI dokumen dan +<p>Jika Anda memiliki URI dokumen dan {@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS} dokumen berisi {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE}, diff --git a/docs/html-intl/intl/in/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/in/guide/topics/resources/accessing-resources.jd index e4a0bea1e36a..6774557b9e62 100644 --- a/docs/html-intl/intl/in/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/in/guide/topics/resources/accessing-resources.jd @@ -60,7 +60,7 @@ melihat ke sana untuk menemukan ID sumber daya. ID sumber daya selalu terdiri da string}, {@code drawable}, dan {@code layout}. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat <a href="available-resources.html">Tipe Sumber Daya</a>. </li> <li><em>Nama sumber daya</em>, bisa berupa: nama file, -tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika +tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika sumber daya itu sebuah nilai sederhana (misalnya sebuah string).</li> </ul> @@ -259,8 +259,8 @@ mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya:</p> android:text="@string/hello" /> </pre> -<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang -waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain. +<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang +waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain. Untuk informasi tentang cara menciptakan sumber daya alternatif (seperti string lokal), lihat <a href="providing-resources.html#AlternativeResources">Menyediakan Sumber Daya Alternatif </a>. Untuk panduan lengkap melokalkan aplikasi Anda ke bahasa lain, @@ -332,6 +332,6 @@ android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple <p>Dalam contoh ini, {@link android.R.layout#simple_list_item_1} adalah sumber daya layout yang didefinisikan oleh platform untuk item di {@link android.widget.ListView}. Anda bisa menggunakannya sebagai ganti menciptakan -layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang +layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang <a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>.</p> diff --git a/docs/html-intl/intl/in/guide/topics/resources/overview.jd b/docs/html-intl/intl/in/guide/topics/resources/overview.jd index 966800cf7daa..def4932f4af4 100644 --- a/docs/html-intl/intl/in/guide/topics/resources/overview.jd +++ b/docs/html-intl/intl/in/guide/topics/resources/overview.jd @@ -24,7 +24,7 @@ aplikasi, agar Anda bisa memeliharanya secara independen. Mengeksternalkan sumber daya juga membuat Anda dapat menyediakan sumber daya alternatif yang mendukung konfigurasi perangkat tertentu seperti bahasa atau ukuran layar yang berbeda, yang semakin penting seiring semakin banyak tersedianya perangkat berbasis Android dengan konfigurasi berbeda. Untuk -memberikan kompatibilitas dengan konfigurasi berbeda, Anda harus menata sumber daya dalam +memberikan kompatibilitas dengan konfigurasi berbeda, Anda harus menata sumber daya dalam direktori {@code res/} proyek Anda, menggunakan berbagai subdirektori yang mengelompokkan sumber daya menurut tipe dan konfigurasinya.</p> @@ -46,7 +46,7 @@ ukuran layar berbeda.</p> <em>alternatif</em> untuk aplikasi Anda:</p> <ul> <li>Sumber daya default adalah sumber daya yang harus digunakan apa pun -konfigurasi perangkatnya atau jika tidak ada sumber daya alternatif yang sesuai +konfigurasi perangkatnya atau jika tidak ada sumber daya alternatif yang sesuai dengan konfigurasi saat ini.</li> <li>Sumber daya alternatif adalah sumber daya yang Anda desain untuk digunakan dengan konfigurasi tertentu. Untuk menetapkan bahwa satu kelompok sumber daya ditujukan bagi konfigurasi tertentu, diff --git a/docs/html-intl/intl/in/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/in/guide/topics/resources/providing-resources.jd index d6bbfc58d911..9bccd24e643a 100644 --- a/docs/html-intl/intl/in/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/in/guide/topics/resources/providing-resources.jd @@ -176,7 +176,7 @@ string</a>.</li> <li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li> </ul> <p>Lihat <a href="string-resource.html">Sumber Daya String</a>, - <a href="style-resource.html">Sumber Daya Gaya</a>, dan + <a href="style-resource.html">Sumber Daya Gaya</a>, dan <a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p> </td> </tr> @@ -289,7 +289,7 @@ qualifier konfigurasi.</p> dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja, <code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk Orange.</p> - <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal + <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal dari kartu SIM.</p> <p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal spesifik untuk negara itu di aplikasi Anda). Jika Anda perlu menetapkan hanya berdasarkan bahasa, maka gunakan qualifier @@ -312,7 +312,7 @@ dan kode jaringan seluler.</p> dll. </td> <td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO -639-1</a>, bisa juga diikuti dengan kode wilayah +639-1</a>, bisa juga diikuti dengan kode wilayah dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}"). </p><p> @@ -428,8 +428,8 @@ berubah antara lanskap dan potret agar cocok dengan lebar sebenarnya saat ini.</ <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi) lebar layar perangkat saat ini. Nilai -di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa -elemen UI persisten di tepi kiri atau kanan, layar +di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa +elemen UI persisten di tepi kiri atau kanan, layar menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p> <p><em>Ditambahkan dalam API level 13.</em></p> @@ -455,14 +455,14 @@ sumber daya —bersama nilai yang didefinisikan oleh <code><N></code>. berubah antara lanskap dan potret agar cocok dengan tinggi sebenarnya saat ini.</p> <p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi) - tinggi layar perangkat saat ini. Nilai + tinggi layar perangkat saat ini. Nilai di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa elemen UI persisten di tepi atas atau bawah, layar akan menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan -elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi -layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa -disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula -dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan +elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi +layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa +disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula +dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan. <p><em>Ditambahkan dalam API level 13.</em></p> <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp} @@ -482,35 +482,35 @@ Multi Layar</a>.</p> </td> <td> <ul class="nolist"> - <li>{@code small}: Layar yang berukuran serupa dengan -layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil -adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah + <li>{@code small}: Layar yang berukuran serupa dengan +layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil +adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah dan VGA densitas tinggi.</li> - <li>{@code normal}: Layar yang berukuran serupa dengan + <li>{@code normal}: Layar yang berukuran serupa dengan layar HVGA densitas sedang. Ukuran layout minimum untuk -layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah +layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah WQVGA densitas rendah, HVGA densitas sedang, WVGA densitas tinggi.</li> - <li>{@code large}: Layar yang berukuran serupa dengan + <li>{@code large}: Layar yang berukuran serupa dengan layar VGA densitas sedang. Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp. Misalnya layar VGA dan WVGA densitas sedang.</li> - <li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA -densitas sedang tradisional. Ukuran layout minimum untuk -layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar + <li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA +densitas sedang tradisional. Ukuran layout minimum untuk +layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li> </ul> - <p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa + <p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya mana saja yang <a href="#BestMatch">paling cocok</a>.</p> - <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan -qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi + <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan +qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code xlarge}, namun perangkat memiliki ukuran layar normal).</p> <p><em>Ditambahkan dalam API level 4.</em></p> - + <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa Layar</a> untuk informasi selengkapnya.</p> <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout}, @@ -552,7 +552,7 @@ tidak ada kaitannya dengan orientasi layar.</p> <p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> - <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation}, + <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation}, yang menunjukkan orientasi perangkat saat ini.</p> </td> </tr> @@ -569,19 +569,19 @@ yang menunjukkan orientasi perangkat saat ini.</p> <ul class="nolist"> <li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li> <li>{@code desk}: Perangkat sedang menampilkan di dudukan perangkat di meja</li> - <li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan + <li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna, -terutama diorientasikan seputar DPAD atau +terutama diorientasikan seputar DPAD atau interaksi non-pointer lainnya</li> - <li>{@code appliance}: Perangkat berlaku sebagai + <li>{@code appliance}: Perangkat berlaku sebagai alat, tanpa tampilan</li> <li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li> </ul> <p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p> - <p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan + <p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan dan Memantau Kondisi dan Tipe Dudukan</a>.</p> - <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di + <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> @@ -601,7 +601,7 @@ informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p <p><em>Ditambahkan dalam API level 8.</em></p> <p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari. Anda dapat mengaktifkan -atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi +atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> </td> </tr> @@ -627,8 +627,8 @@ aplikasi Anda selama runtime.</p> Level 8.</em></li> <li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API Level 16.</em></li> - <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher, -lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a> + <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher, +lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a> dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API Level 18.</em></li> <li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda @@ -696,7 +696,7 @@ fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untu hal ini memengaruhi aplikasi Anda selama runtime.</p> <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#hardKeyboardHidden} dan {@link -android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas +android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p> </td> </tr> @@ -716,7 +716,7 @@ pengguna <li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak pada pengguna.</li> </ul> - <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard}, + <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard}, yang menunjukkan metode utama input teks yang tersedia.</p> </td> </tr> @@ -810,7 +810,7 @@ Sumber Daya</a>.</p> <li>Anda bisa menetapkan beberapa qualifier untuk satu set sumber daya, yang dipisahkan dengan tanda hubung. Misalnya, <code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi lanskap.</li> - <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>. + <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>. Misalnya: <ul> <li>Salah: <code>drawable-hdpi-port/</code></li> @@ -947,7 +947,7 @@ layout-land/} untuk lanskap dan {@code layout-port/} untuk potret, biarkan salah {@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p> <p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada -konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan +konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru, namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi @@ -1058,7 +1058,7 @@ Layar</a>.</p> </li> <li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi -layar adalah qualifier berikutnya yang memiliki kecocokan. +layar adalah qualifier berikutnya yang memiliki kecocokan. Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus: <pre class="classic no-pretty-print"> <strike>drawable-en/</strike> diff --git a/docs/html-intl/intl/in/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/in/guide/topics/resources/runtime-changes.jd index c9a5ead63c77..09ad60c369ff 100644 --- a/docs/html-intl/intl/in/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/in/guide/topics/resources/runtime-changes.jd @@ -82,12 +82,12 @@ aktivitas untuk mempertahankan objek stateful.</p> <p>Untuk mempertahankan objek stateful dalam fragmen selama perubahan konfigurasi runtime:</p> <ol> - <li>Perluas kelas {@link android.app.Fragment} dan deklarasikan referensi ke objek stateful + <li>Perluas kelas {@link android.app.Fragment} dan deklarasikan referensi ke objek stateful Anda.</li> <li>Panggil {@link android.app.Fragment#setRetainInstance(boolean)} saat fragmen dibuat. </li> <li>Tambahkan fragmen ke aktivitas.</li> - <li>Gunakan {@link android.app.FragmentManager} untuk mengambil fragmen saat aktivitas + <li>Gunakan {@link android.app.FragmentManager} untuk mengambil fragmen saat aktivitas di-restart.</li> </ol> @@ -125,8 +125,8 @@ membocorkan semua tampilan dan sumber daya instance aktivitas semula. (Sumber da berarti bahwa aplikasi Anda tetap menyimpannya dan tidak bisa dijadikan kumpulan sampah, sehingga bisa banyak memori yang hilang.)</p> -<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas. -Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan +<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas. +Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan konfigurasi runtime. Misalnya, definisikan aktivitas Anda sebagai berikut:</p> <pre> diff --git a/docs/html-intl/intl/in/guide/topics/ui/controls.jd b/docs/html-intl/intl/in/guide/topics/ui/controls.jd index 7ee2957980a8..3ebf48b5c9d4 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ semacam kontrol input tertentu, Anda bisa membangun <a href="{@docRoot}guide/top <tr> <td><a href="controls/radiobutton.html">Tombol radio</a></td> <td>Mirip dengan kotak cek, hanya saja cuma satu opsi yang bisa dipilih dalam kumpulan tersebut.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/in/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/in/guide/topics/ui/declaring-layout.jd index 83ff7461e7ac..1c8a0d6eccaa 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/declaring-layout.jd @@ -74,7 +74,7 @@ tertarik dalam membuat instance objek View saat runtime, lihat referensi kelas { <code>EditText.setText()</code>. </p> <p class="note"><strong>Tip:</strong> Ketahui selengkapnya berbagai tipe layout dalam <a href="{@docRoot}guide/topics/ui/layout-objects.html">Objek -Layout Umum</a>. Ada juga sekumpulan tutorial tentang cara membangun berbagai layout dalam panduan tutorial +Layout Umum</a>. Ada juga sekumpulan tutorial tentang cara membangun berbagai layout dalam panduan tutorial <a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>.</p> <h2 id="write">Tulis XML</h2> @@ -107,7 +107,7 @@ dalam direktori <code>res/layout/</code> proyek Android, sehingga nanti bisa dik <h2 id="load">Muat Sumber Daya XML</h2> -<p>Saat mengompilasi aplikasi, masing-masing file layout XML akan dikompilasi dalam sebuah sumber daya +<p>Saat mengompilasi aplikasi, masing-masing file layout XML akan dikompilasi dalam sebuah sumber daya {@link android.view.View}. Anda harus memuat sumber daya layout dari kode aplikasi, dalam implementasi callback {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}. Lakukan dengan memanggil <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>, @@ -367,8 +367,8 @@ kiri anak B) atau terhadap induk (disejajarkan dengan atas induknya).</p> <h2 id="AdapterViews" style="clear:left">Membangun Layout dengan Adaptor</h2> -<p>Bila isi layout bersifat dinamis atau tidak dipastikan sebelumnya, Anda bisa menggunakan layout yang menjadi -subkelas {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime. +<p>Bila isi layout bersifat dinamis atau tidak dipastikan sebelumnya, Anda bisa menggunakan layout yang menjadi +subkelas {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime. Subkelas dari kelas {@link android.widget.AdapterView} menggunakan {@link android.widget.Adapter} untuk mengikat data ke layoutnya. {@link android.widget.Adapter} berfungsi sebagai penghubung antara sumber data dan layout{@link android.widget.AdapterView}—{@link android.widget.Adapter} @@ -445,7 +445,7 @@ harus memasukkan tampilan layout. Misalnya, jika Anda ingin untuk membuat daftar nama orang dan nomor telepon, Anda bisa melakukan query yang menghasilkan {@link android.database.Cursor} yang berisi satu baris untuk tiap orang dan kolom-kolom untuk nama dan nomor. Selanjutnya Anda membuat larik string yang menentukan kolom dari {@link -android.database.Cursor} yang Anda inginkan dalam layout untuk setiap hasil dan larik integer yang menentukan +android.database.Cursor} yang Anda inginkan dalam layout untuk setiap hasil dan larik integer yang menentukan tampilan yang sesuai untuk menempatkan masing-masing kolom:</p> <pre> String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, diff --git a/docs/html-intl/intl/in/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/in/guide/topics/ui/dialogs.jd index 65714a9e4c4d..06a25ac5bcd3 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>Lihat juga</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">Panduan desain dialog</a></li> @@ -89,7 +89,7 @@ pada layar besar dan kecil).</p> <p>Bagian-bagian berikutnya dalam panduan ini akan menjelaskan cara menggunakan {@link android.support.v4.app.DialogFragment} yang dikombinasikan dengan objek {@link android.app.AlertDialog} -. Jika Anda ingin membuat picker tanggal atau waktu, Anda harus membaca panduan +. Jika Anda ingin membuat picker tanggal atau waktu, Anda harus membaca panduan <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Picker</a>.</p> <p class="note"><strong>Catatan:</strong> @@ -235,8 +235,8 @@ AlertDialog dialog = builder.create(); </pre> <p>Metode <code>set...Button()</code> mengharuskan adanya judul bagi tombol (disediakan -oleh suatu <a href="{@docRoot}guide/topics/resources/string-resource.html">sumber daya string</a>) dan -{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil +oleh suatu <a href="{@docRoot}guide/topics/resources/string-resource.html">sumber daya string</a>) dan +{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil bila pengguna menekan tombol.</p> <p>Ada tiga macam tombol tindakan yang Anda bisa tambahkan:</p> @@ -247,8 +247,8 @@ bila pengguna menekan tombol.</p> <dd>Anda harus menggunakan tipe ini untuk membatalkan tindakan.</dd> <dt>Netral</dt> <dd>Anda harus menggunakan tipe ini bila pengguna mungkin tidak ingin melanjutkan tindakan, - namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan -tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd> + namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan +tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd> </dl> <p>Anda hanya bisa menambahkan salah satu tipe tombol ke {@link @@ -271,7 +271,7 @@ Dialog dengan satu judul dan daftar.</p> <li>Daftar pilihan ganda persisten (kotak cek)</li> </ul> -<p>Untuk membuat daftar pilihan tunggal seperti dalam gambar 3, +<p>Untuk membuat daftar pilihan tunggal seperti dalam gambar 3, gunakan metode {@link android.app.AlertDialog.Builder#setItems setItems()}:</p> <pre style="clear:right"> @@ -291,7 +291,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Karena daftar muncul dalam area konten dialog, dialog tidak bisa menampilkan pesan dan daftar sekaligus dan Anda harus menetapkan judul untuk -dialog dengan {@link android.app.AlertDialog.Builder#setTitle setTitle()}. +dialog dengan {@link android.app.AlertDialog.Builder#setTitle setTitle()}. Untuk menentukan item daftar, panggil {@link android.app.AlertDialog.Builder#setItems setItems()}, dengan meneruskan larik. Atau, Anda bisa menetapkan daftar menggunakan {@link @@ -300,7 +300,7 @@ dengan data dinamis (seperti dari database) dengan menggunakan {@link android.wi <p>Jika Anda memilih untuk mendukung daftar dengan {@link android.widget.ListAdapter}, selalu gunakan sebuah {@link android.support.v4.content.Loader} agar konten dimuat -secara asinkron. Hal ini dijelaskan lebih jauh dalam panduan +secara asinkron. Hal ini dijelaskan lebih jauh dalam panduan <a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">Membuat Layout dengan Adaptor</a> dan <a href="{@docRoot}guide/components/loaders.html">Loader</a> .</p> @@ -317,11 +317,11 @@ Daftar item pilihan ganda.</p> <h4 id="Checkboxes">Menambahkan daftar pilihan ganda atau pilihan tunggal persisten</h4> -<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau -item pilihan tunggal (tombol radio), gunakan masing-masing metode +<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau +item pilihan tunggal (tombol radio), gunakan masing-masing metode {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()}.</p> <p>Misalnya, berikut ini cara membuat daftar pilihan ganda seperti @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Walaupun daftar tradisional maupun daftar dengan tombol radio menyediakan tindakan "pilihan tunggal", Anda harus menggunakan {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} jika ingin mempertahankan pilihan pengguna. Yakni, jika nanti membuka dialog lagi untuk menunjukkan pilihan pengguna, maka Anda perlu membuat daftar dengan tombol radio.</p> @@ -442,7 +442,7 @@ Anda harus mengubah keluarga font ke {@code "sans-serif"} sehingga kedua bidang gaya font yang cocok.</p> <p>Untuk memekarkan layout dalam {@link android.support.v4.app.DialogFragment} Anda, -ambillah {@link android.view.LayoutInflater} dengan +ambillah {@link android.view.LayoutInflater} dengan {@link android.app.Activity#getLayoutInflater()} dan panggil {@link android.view.LayoutInflater#inflate inflate()}, dengan parameter pertama adalah ID sumber daya layout dan parameter kedua adalah tampilan induk untuk layout. @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ antarmuka yang akan digunakan untuk mengirim kembali suatu kejadian ke aktivitas <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ melalui implementasi antarmuka {@code NoticeDialogListener}:</p> public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -638,12 +638,12 @@ android.support.v4.app.Fragment} yang bisa ditanamkan.</p> <p>Akan tetapi, dalam hal ini Anda tidak bisa menggunakan {@link android.app.AlertDialog.Builder AlertDialog.Builder} atau objek {@link android.app.Dialog} lain untuk membangun dialog. Jika -Anda ingin {@link android.support.v4.app.DialogFragment} +Anda ingin {@link android.support.v4.app.DialogFragment} bisa ditanamkan, Anda harus mendefinisikan dialog UI dalam layout, lalu memuat layout itu dalam metode callback {@link android.support.v4.app.DialogFragment#onCreateView onCreateView()}.</p> -<p>Berikut ini adalah contoh {@link android.support.v4.app.DialogFragment} yang bisa muncul sebagai +<p>Berikut ini adalah contoh {@link android.support.v4.app.DialogFragment} yang bisa muncul sebagai dialog maupun fragmen yang bisa ditanamkan (menggunakan layout bernama <code>purchase_items.xml</code>):</p> <pre> @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ atau UI layar penuh, berdasarkan ukuran layar:</p> public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -776,7 +776,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} dalam {@link android.support.v4.app.DialogFragment} Anda.</p> <p>Anda juga bisa <em>membatalkan</em> dialog. Ini merupakan kejadian khusus yang menunjukkan bahwa pengguna -secara eksplisit meninggalkan dialog tanpa menyelesaikan tugas. Hal ini terjadi jika pengguna menekan tombol +secara eksplisit meninggalkan dialog tanpa menyelesaikan tugas. Hal ini terjadi jika pengguna menekan tombol <em>Back</em>, menyentuh layar di luar area dialog, atau jika Anda secara eksplisit memanggil {@link android.app.Dialog#cancel()} pada {@link android.app.Dialog} (seperti saat merespons tombol "Cancel" dalam dialog).</p> diff --git a/docs/html-intl/intl/in/guide/topics/ui/menus.jd b/docs/html-intl/intl/in/guide/topics/ui/menus.jd index 2cd3e6a33aa5..1ee0244c1a9a 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/menus.jd @@ -60,7 +60,7 @@ dan konsisten, Anda harus menggunakan API {@link android.view.Menu} untuk menyaj tindakan dan opsi lain dalam aktivitas kepada pengguna.</p> <p>Mulai dengan Android 3.0 (API level 11), perangkat berbasis Android tidak perlu lagi -menyediakan tombol <em>Menu</em> tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari +menyediakan tombol <em>Menu</em> tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari dependensi pada panel menu 6 item biasa, dan sebagai ganti menyediakan action-bar untuk menyajikan berbagai tindakan pengguna yang lazim.</p> @@ -83,9 +83,9 @@ tidak memilikinya), sehingga Anda harus bermigrasi ke penggunaan action-bar untu opsi lainnya.</p> <p>Lihat bagian tentang <a href="#options-menu">Membuat Menu Opsi</a>.</p> </dd> - + <dt><strong>Menu konteks dan mode tindakan kontekstual</strong></dt> - + <dd>Menu konteks adalah <a href="#FloatingContextMenu">menu mengambang</a> yang muncul saat pengguna mengklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi konten atau bingkai konteks yang dipilih. @@ -94,7 +94,7 @@ item tindakan yang memengaruhi konten yang dipilih dalam baris di bagian atas la memilih beberapa item sekaligus.</p> <p>Lihat bagian tentang <a href="#context-menu">Membuat Menu Kontekstual</a>.</p> </dd> - + <dt><strong>Menu popup</strong></dt> <dd>Menu popup menampilkan daftar item secara vertikal yang dipasang pada tampilan yang memanggil menu. Ini cocok untuk menyediakan kelebihan tindakan yang terkait dengan konten tertentu atau @@ -128,14 +128,14 @@ ukuran layar, dan konfigurasi lainnya dengan memanfaatkan kerangka kerja <a href proyek dan buat menu dengan elemen-elemen berikut:</p> <dl> <dt><code><menu></code></dt> - <dd>Mendefinisikan {@link android.view.Menu}, yang merupakan sebuah kontainer untuk item menu. Elemen + <dd>Mendefinisikan {@link android.view.Menu}, yang merupakan sebuah kontainer untuk item menu. Elemen <code><menu></code> harus menjadi simpul akar untuk file dan bisa menampung salah satu atau beberapa dari elemen <code><item></code> dan <code><group></code>.</dd> <dt><code><item></code></dt> <dd>Membuat {@link android.view.MenuItem}, yang mewakili satu item menu. Elemen ini bisa berisi elemen <code><menu></code> tersarang guna untuk membuat submenu.</dd> - + <dt><code><group></code></dt> <dd>Kontainer opsional tak terlihat untuk elemen-elemen {@code <item>}. Kontainer ini memungkinkan Anda mengelompokkan item menu untuk berbagi properti seperti status aktif dan visibilitas. Untuk informasi @@ -253,7 +253,7 @@ aktivitas. Jika perlu, Anda bisa menyusun ulang item menu dengan atribut {@code dalam setiap {@code <item>} yang perlu Anda pindahkan.</p> <p>Untuk menetapkan menu opsi suatu aktivitas, kesampingkan {@link -android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragmen-fragmen menyediakan +android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragmen-fragmen menyediakan callback {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()} sendiri). Dalam metode ini , Anda bisa memekarkan sumber daya menu (<a href="#xml">yang didefinisikan dalam XML</a>) menjadi {@link android.view.Menu} yang disediakan dalam callback. Misalnya:</p> @@ -273,7 +273,7 @@ dengan API {@link android.view.MenuItem}.</p> <p>Jika Anda mengembangkan aplikasi untuk Android 2.3.x dan yang lebih rendah, sistem akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} untuk membuat menu opsi -bila pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi, +bila pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi, sistem akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} saat memulai aktivitas, untuk menampilkan item menu pada action-bar.</p> @@ -285,7 +285,7 @@ memulai aktivitas, untuk menampilkan item menu pada action-bar.</p> sistem akan memanggil metode {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} aktivitas Anda. Metode ini meneruskan {@link android.view.MenuItem} yang dipilih. Anda bisa mengidentifikasi item dengan memanggil {@link android.view.MenuItem#getItemId()}, yang menghasilkan -ID unik untuk item menu itu (yang didefinisikan oleh atribut {@code android:id} dalam sumber daya menu atau dengan +ID unik untuk item menu itu (yang didefinisikan oleh atribut {@code android:id} dalam sumber daya menu atau dengan integer yang diberikan ke metode {@link android.view.Menu#add(int,int,int,int) add()}). Anda bisa mencocokkan ID ini dengan item menu yang diketahui untuk melakukan tindakan yang sesuai. Misalnya:</p> @@ -317,7 +317,7 @@ untuk setiap fragmen (sesuai dengan urutan penambahan fragmen) hingga satu fragm {@code true} atau semua fragmen telah dipanggil.</p> <p class="note"><strong>Tip:</strong> Android 3.0 menambahkan kemampuan mendefinisikan perilaku on-click -untuk item menu dalam XML, dengan menggunakan atribut {@code android:onClick}. Nilai atribut +untuk item menu dalam XML, dengan menggunakan atribut {@code android:onClick}. Nilai atribut harus berupa nama metode yang didefinisikan aktivitas dengan menggunakan menu. Metode harus bersifat publik dan menerima satu parameter {@link android.view.MenuItem}—bila sistem memanggilnya, metode ini akan meneruskan item menu yang dipilih. Untuk informasi selengkapnya dan contoh, lihat dokumen <a href="{@docRoot}guide/topics/resources/menu-resource.html">Sumber Daya Menu</a>.</p> @@ -346,7 +346,7 @@ lagi kecuali menu diinvalidkan karena suatu alasan. Akan tetapi, Anda harus meng android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} hanya untuk membuat status menu awal dan tidak untuk membuat perubahan selama daur hidup aktivitas.</p> -<p>Jika Anda ingin mengubah menu opsi berdasarkan +<p>Jika Anda ingin mengubah menu opsi berdasarkan kejadian yang terjadi selama daur hidup aktivitas, Anda bisa melakukannya dalam metode {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Metode ini meneruskan objek {@link android.view.Menu} sebagaimana adanya saat ini sehingga Anda bisa mengubahnya, @@ -363,7 +363,7 @@ ditampilkan pada action-bar. Bila ada kejadian dan Anda ingin melakukan pembarua memanggil {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} untuk meminta sistem memanggil {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p> -<p class="note"><strong>Catatan:</strong> +<p class="note"><strong>Catatan:</strong> Anda tidak boleh mengubah item dalam menu opsi berdasarkan {@link android.view.View} yang saat ini difokus. Saat dalam mode sentuh (bila pengguna tidak sedang menggunakan trackball atau d-pad), tampilan tidak bisa mengambil fokus, sehingga Anda tidak boleh menggunakan fokus sebagai dasar untuk mengubah @@ -419,7 +419,7 @@ android.app.Activity#registerForContextMenu(View) registerForContextMenu()}.</p> </li> <li>Implementasikan metode {@link -android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} +android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} dalam {@link android.app.Activity} atau {@link android.app.Fragment} Anda. <p>Bila tampilan yang terdaftar menerima kejadian klik-lama, sistem akan memanggil metode {@link android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} @@ -445,7 +445,7 @@ dimekarkan.</p> <li>Implementasikan {@link android.app.Activity#onContextItemSelected(MenuItem) onContextItemSelected()}. - <p>Bila pengguna memilih item menu, sistem akan memanggil metode ini sehingga Anda bisa melakukan + <p>Bila pengguna memilih item menu, sistem akan memanggil metode ini sehingga Anda bisa melakukan tindakan yang sesuai. Misalnya:</p> <pre> @@ -609,7 +609,7 @@ someView.setOnLongClickListener(new View.OnLongClickListener() { <p>Bila Anda memanggil {@link android.app.Activity#startActionMode startActionMode()}, sistem akan mengembalikan {@link android.view.ActionMode} yang dibuat. Dengan menyimpannya dalam variabel anggota, Anda bisa -membuat perubahan ke action-bar kontekstual sebagai respons terhadap kejadian lainnya. Dalam contoh di atas, +membuat perubahan ke action-bar kontekstual sebagai respons terhadap kejadian lainnya. Dalam contoh di atas, {@link android.view.ActionMode} digunakan untuk memastikan bahwa instance {@link android.view.ActionMode} tidak dibuat kembali jika sudah aktif, dengan memeriksa apakah anggota bernilai nol sebelum memulai mode tindakan.</p> @@ -742,8 +742,8 @@ yang menampilkan menu popup:</p> <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -1010,7 +1010,7 @@ pertama.</p> <p>Anda juga bisa menawarkan layanan aktivitas Anda pada aplikasi lainnya, sehingga aplikasi Anda bisa disertakan dalam menu aplikasi lain (membalik peran yang dijelaskan di atas).</p> -<p>Agar bisa dimasukkan dalam menu aplikasi lain, Anda perlu mendefinisikan +<p>Agar bisa dimasukkan dalam menu aplikasi lain, Anda perlu mendefinisikan filter intent seperti biasa, tetapi pastikan menyertakan nilai-nilai {@link android.content.Intent#CATEGORY_ALTERNATIVE} dan/atau {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} untuk kategori filter intent. Misalnya:</p> @@ -1026,6 +1026,6 @@ kategori filter intent. Misalnya:</p> <p>Baca selengkapnya tentang penulisan filter intent dalam dokumen <a href="/guide/components/intents-filters.html">Intent dan Filter Intent</a>.</p> -<p>Untuk contoh aplikasi yang menggunakan teknik ini, lihat contoh kode +<p>Untuk contoh aplikasi yang menggunakan teknik ini, lihat contoh kode <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note Pad</a>.</p> diff --git a/docs/html-intl/intl/in/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/in/guide/topics/ui/notifiers/notifications.jd index 9033b9f744f3..bb48b80a0bcc 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/notifiers/notifications.jd @@ -147,7 +147,7 @@ pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem </p> <p> Dalam {@link android.app.Notification}, tindakan itu sendiri didefinisikan oleh - {@link android.app.PendingIntent} berisi + {@link android.app.PendingIntent} berisi {@link android.content.Intent} yang memulai {@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan {@link android.app.PendingIntent} dengan gestur, panggil metode @@ -174,12 +174,12 @@ pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem android.support.v4.app.NotificationCompat}. Ada lima level prioritas, mulai dari {@link android.support.v4.app.NotificationCompat#PRIORITY_MIN} (-2) hingga {@link - android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur, + android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur, prioritas default akan ditetapkan {@link android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0). </p> <p> Untuk informasi tentang mengatur level prioritas, lihat "Mengatur - dan mengelola prioritas pemberitahuan dengan benar" dalam panduan + dan mengelola prioritas pemberitahuan dengan benar" dalam panduan Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>. </p> <!-- ------------------------------------------------------------------------------------------ --> @@ -310,7 +310,7 @@ mBuilder.setStyle(inBoxStyle); <!-- ------------------------------------------------------------------------------------------ --> <h2 id="Managing">Mengelola Pemberitahuan</h2> <p> - Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama, + Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama, hindari membuat pemberitahuan yang sama sekali baru. Sebagai gantinya, Anda harus mempertimbangkan untuk memperbarui pemberitahuan sebelumnya, baik dengan mengubah sebagian nilainya atau dengan menambahkan nilai, atau keduanya. </p> @@ -506,7 +506,7 @@ numMessages = 0; TaskStackBuilder.create()}. </li> <li> - Tambahkan back-stack ke stack-builder dengan memanggil + Tambahkan back-stack ke stack-builder dengan memanggil {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}. Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam manifes, back-stack berisi objek {@link android.content.Intent} yang @@ -933,7 +933,7 @@ untuk informasi selengkapnya tentang API baru untuk mengelola sesi media dan men tampilan normal dibatasi hingga 64 dp, dan layout tampilan yang diperluas dibatasi hingga 256 dp. </p> <p> - Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance + Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance objek {@link android.widget.RemoteViews} yang memekarkan file layout XML. Kemudian, sebagai ganti memanggil metode seperti {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}, diff --git a/docs/html-intl/intl/in/guide/topics/ui/overview.jd b/docs/html-intl/intl/in/guide/topics/ui/overview.jd index a0b2b0645a90..ca8b42085ac2 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ dan elemen <code><LinearLayout></code> membuat kelompok tampilan {@link an <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ layout.</p> <p>Untuk mendapatkan panduan lengkap mengenai pembuatan layout UI, lihat <a href="declaring-layout.html">Layout XML</a>. - + <h2 id="UIComponents">Komponen Antarmuka Pengguna</h2> <p>Anda tidak harus membuat semua UI menggunakan objek {@link android.view.View} dan {link diff --git a/docs/html-intl/intl/in/guide/topics/ui/settings.jd b/docs/html-intl/intl/in/guide/topics/ui/settings.jd index 5ac61f928c19..89be52fc2a73 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/settings.jd @@ -82,7 +82,7 @@ cara membangun pengaturan aplikasi Anda menggunakan API {@link android.preferenc <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> <p class="img-caption"><strong>Gambar 1.</strong> Cuplikan layar dari pengaturan -aplikasi Messaging Android. Memilih item yang didefinisikan oleh {@link android.preference.Preference} +aplikasi Messaging Android. Memilih item yang didefinisikan oleh {@link android.preference.Preference} akan membuka antarmuka untuk mengubah pengaturan.</p> @@ -163,7 +163,7 @@ tersimpan bisa berupa tipe nilai apa pun yang didukung (tercantum di atas).</dd> java.lang.String}.</dd> </dl> -<p>Lihat kelas {@link android.preference.Preference} untuk mengetahui daftar subkelas lain dan +<p>Lihat kelas {@link android.preference.Preference} untuk mengetahui daftar subkelas lain dan propertinya.</p> <p>Tentu saja, kelas bawaan tidak mengakomodasi setiap kebutuhan dan aplikasi Anda mungkin memerlukan @@ -226,7 +226,7 @@ android.preference.ListPreference}. Kedua item tersebut menyertakan tiga atribut <dt>{@code android:key}</dt> <dd>Atribut ini diperlukan untuk preferensi yang mempertahankan nilai data. Ini menetapkan kunci unik (string) yang digunakan sistem saat menyimpan nilai pengaturan ini dalam {@link -android.content.SharedPreferences}. +android.content.SharedPreferences}. <p>Instance satu-satunya di mana atribut ini <em>tidak diperlukan</em> adalah bila preferensi berupa {@link android.preference.PreferenceCategory} atau {@link android.preference.PreferenceScreen}, atau preferensi menetapkan {@link android.content.Intent} untuk dipanggil (dengan elemen <a href="#Intents">{@code <intent>}</a>) atau {@link android.app.Fragment} untuk ditampilkan (dengan atribut <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code @@ -285,7 +285,7 @@ android.preference.PreferenceCategory}.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -370,12 +370,12 @@ sebagai anak dari elemen {@code <Preference>} yang bersangkutan.</p> <dl> <dt>{@code android:action}</dt> - <dd>Tindakan yang akan ditetapkan, sesuai metode + <dd>Tindakan yang akan ditetapkan, sesuai metode {@link android.content.Intent#setAction setAction()}.</dd> <dt>{@code android:data}</dt> <dd>Data yang akan ditetapkan, sesuai metode {@link android.content.Intent#setData setData()}.</dd> <dt>{@code android:mimeType}</dt> - <dd>Tipe MIME yang akan ditetapkan, sesuai metode + <dd>Tipe MIME yang akan ditetapkan, sesuai metode {@link android.content.Intent#setType setType()}.</dd> <dt>{@code android:targetClass}</dt> <dd>Bagian kelas dari nama komponen, sesuai metode {@link android.content.Intent#setComponent @@ -588,11 +588,11 @@ tunggal dalam elemen {@code <preference-headers>} akar. Misalnya:</p> <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -672,15 +672,15 @@ android.preference.Preference <Preference>} mengirimkan {@link android.con akan dimuat.</p> <p>Misalnya, ini adalah file XML untuk header preferensi yang menggunakan Android 3.0 -dan yang lebih tinggi ({@code res/xml/preference_headers.xml}):</p> +dan yang lebih tinggi ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -879,7 +879,7 @@ prefs.registerOnSharedPreferenceChangeListener( }); </pre> -<p>Sebagai gantinya, simpan referensi ke listener dalam bidang data instance +<p>Sebagai gantinya, simpan referensi ke listener dalam bidang data instance objek yang akan ada selama listener dibutuhkan:</p> <pre> @@ -975,11 +975,11 @@ negatif dan positif default:</p> public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/in/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/in/guide/topics/ui/ui-events.jd index 5068176fccae..0307b34a85c1 100644 --- a/docs/html-intl/intl/in/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/in/guide/topics/ui/ui-events.jd @@ -26,11 +26,11 @@ tindakan terjadi pada objek itu. Misalnya, bila View (seperti Button/Tombol) dis metode <code>onTouchEvent()</code> akan dipanggil pada objek itu. Akan tetapi, untuk mencegatnya, Anda harus memperluas kelas dan mengesampingkan metode itu. Akan tetapi, memperluas setiap objek View untuk menangani kejadian seperti itu tidaklah praktis. Karena itulah kelas View juga berisi -sekumpulan antarmuka tersarang dengan callback yang jauh lebih mudah didefinisikan. Antarmuka ini, +sekumpulan antarmuka tersarang dengan callback yang jauh lebih mudah didefinisikan. Antarmuka ini, yang disebut <a href="#EventListeners">event listener</a>, merupakan tiket Anda untuk menangkap interaksi pengguna dengan UI.</p> <p>Walaupun Anda akan lebih sering menggunakan event listener ini untuk interaksi pengguna, -mungkin ada saatnya Anda ingin memperluas kelas View, untuk membuat komponen custom. +mungkin ada saatnya Anda ingin memperluas kelas View, untuk membuat komponen custom. Mungkin Anda ingin memperluas kelas {@link android.widget.Button} untuk membuat sesuatu yang lebih menarik. Dalam hal ini, Anda akan dapat mendefinisikan perilaku kejadian default untuk kelas Anda dengan menggunakan kelas <a href="#EventHandlers">event handler</a>.</p> @@ -46,28 +46,28 @@ telah didaftarkan dengan listener dipicu oleh interaksi pengguna dengan item dal <dl> <dt><code>onClick()</code></dt> - <dd>Dari {@link android.view.View.OnClickListener}. + <dd>Dari {@link android.view.View.OnClickListener}. Ini dipanggil baik saat pengguna menyentuh item (bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan menekan tombol "enter" yang sesuai atau menekan trackball.</dd> <dt><code>onLongClick()</code></dt> - <dd>Dari {@link android.view.View.OnLongClickListener}. - Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh), + <dd>Dari {@link android.view.View.OnLongClickListener}. + Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan menekan serta menahan tombol "enter" yang sesuai atau menekan dan menahan trackball (selama satu detik).</dd> <dt><code>onFocusChange()</code></dt> - <dd>Dari {@link android.view.View.OnFocusChangeListener}. + <dd>Dari {@link android.view.View.OnFocusChangeListener}. Ini dipanggil saat pengguna menyusuri ke atau dari item, dengan menggunakan tombol navigasi atau trackball.</dd> <dt><code>onKey()</code></dt> - <dd>Dari {@link android.view.View.OnKeyListener}. + <dd>Dari {@link android.view.View.OnKeyListener}. Ini dipanggil saat pengguna memfokuskan pada item dan menekan atau melepas tombol fisik pada perangkat.</dd> <dt><code>onTouch()</code></dt> - <dd>Dari {@link android.view.View.OnTouchListener}. + <dd>Dari {@link android.view.View.OnTouchListener}. Ini dipanggil saat pengguna melakukan tindakan yang digolongkan sebagai kejadian sentuh, termasuk penekanan, pelepasan, atau gerak perpindahan pada layar (dalam batasan item itu).</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>Dari {@link android.view.View.OnCreateContextMenuListener}. - Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi + <dd>Dari {@link android.view.View.OnCreateContextMenuListener}. + Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menu</a>. </dd> </dl> @@ -75,8 +75,8 @@ tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/me <p>Metode ini satu-satunya yang menempati antarmukanya masing-masing. Untuk mendefinisikan salah satu metode ini dan menangani kejadian Anda, implementasikan antarmuka tersarang dalam Aktivitas Anda atau definisikan sebagai kelas anonim. Kemudian, teruskan satu -instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> +instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> dan teruskan implementasi {@link android.view.View.OnClickListener OnClickListener} Anda.)</p> <p>Contoh di bawah menunjukkan cara mendaftarkan on-click listener untuk Button. </p> @@ -121,20 +121,20 @@ public class ExampleActivity extends Activity implements OnClickListener { nilai hasil, namun beberapa metode event listener lainnya harus mengembalikan boolean. Sebabnya bergantung pada kejadian. Untuk sebagian yang mengembalikan boolean, ini sebabnya:</p> <ul> - <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - - Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh. - Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini; + <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - + Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh. + Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini; mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke on-click listener lainnya.</li> - <li><code>{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent) onKey()}</code> - + <li><code>{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent) onKey()}</code> - Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh. - Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini; + Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini; mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke on-key listener lainnya.</li> - <li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> - - Ini mengembalikan boolean untuk menunjukkan apakah listener Anda telah menggunakan kejadian ini. Yang penting adalah -kejadian ini bisa memiliki beberapa tindakan yang saling mengikuti. Jadi, jika Anda mengembalikan <em>salah</em>saat -kejadian tindakan turun diterima, itu menunjukkan bahwa Anda belum menggunakan kejadian itu dan juga + <li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> - + Ini mengembalikan boolean untuk menunjukkan apakah listener Anda telah menggunakan kejadian ini. Yang penting adalah +kejadian ini bisa memiliki beberapa tindakan yang saling mengikuti. Jadi, jika Anda mengembalikan <em>salah</em>saat +kejadian tindakan turun diterima, itu menunjukkan bahwa Anda belum menggunakan kejadian itu dan juga tidak tertarik dengan tindakan berikutnya dari kejadian ini. Karena itu, Anda tidak akan diminta untuk melakukan tindakan lainnya dalam kejadian, seperti gerakan jari, atau kejadian tindakan naik yang akan terjadi.</li> </ul> @@ -142,12 +142,12 @@ tidak tertarik dengan tindakan berikutnya dari kejadian ini. Karena itu, Anda ti <p>Ingatlah bahwa kejadian tombol fisik selalu disampaikan ke View yang sedang difokus. Kejadian ini dikirim mulai dari atas hierarki View, kemudian turun hingga tujuan yang sesuai. Jika View Anda (atau anak View Anda) saat ini sedang fokus, maka Anda dapat melihat kejadian berpindah melalui metode.<code>{@link android.view.View#dispatchKeyEvent(KeyEvent) -dispatchKeyEvent()}</code> Sebagai pengganti untuk menangkap kejadian penting melalui View, Anda juga dapat menerima +dispatchKeyEvent()}</code> Sebagai pengganti untuk menangkap kejadian penting melalui View, Anda juga dapat menerima semua kejadian dalam Aktivitas Anda dengan <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code> dan <code>{@link android.app.Activity#onKeyUp(int,KeyEvent) onKeyUp()}</code>.</p> <p>Selain itu, saat memikirkan tentang input teks aplikasi Anda, ingatlah bahwa banyak perangkat yang hanya memiliki -metode input perangkat lunak. Metode seperti itu tidak harus berbasis tombol; sebagian mungkin menggunakan input suara, tulisan tangan, dan seterusnya. Meskipun +metode input perangkat lunak. Metode seperti itu tidak harus berbasis tombol; sebagian mungkin menggunakan input suara, tulisan tangan, dan seterusnya. Meskipun metode input menyajikan antarmuka seperti keyboard, itu umumnya <strong>tidak</strong> memicu keluarga kejadian <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>. Anda sama sekali tidak boleh membangun UI yang mengharuskan penekanan tombol tertentu dikontrol kecuali jika Anda ingin membatasi aplikasi Anda pada perangkat yang memiliki @@ -157,14 +157,14 @@ metode input mengenai reaksi yang diharapkan aplikasi Anda, sehingga bisa mengub tentang bagaimana metode input perangkat lunak seharusnya bekerja dan percayalah bahwa metode akan menyediakan teks yang sudah diformat bagi aplikasi Anda.</p> <p class="note"><strong>Catatan:</strong> Android akan memanggil event handler terlebih dahulu kemudian handler -default yang sesuai dari definisi kelas. Karena itu, mengembalikan <em>benar</em> dari event listener ini akan menghentikan -penyebaran kejadian ke event listener lain dan juga akan memblokir callback ke +default yang sesuai dari definisi kelas. Karena itu, mengembalikan <em>benar</em> dari event listener ini akan menghentikan +penyebaran kejadian ke event listener lain dan juga akan memblokir callback ke event handler default di View. Pastikan bahwa Anda ingin mengakhiri kejadian saat mengembalikan <em>true</em>.</p> <h2 id="EventHandlers">Event Handler</h2> -<p>Jika Anda membuat komponen custom dari View, maka Anda dapat mendefinisikan penggunaan beberapa +<p>Jika Anda membuat komponen custom dari View, maka Anda dapat mendefinisikan penggunaan beberapa metode callback sebagai event handler default. Dalam dokumen tentang <a href="{@docRoot}guide/topics/ui/custom-components.html">Komponen Custom</a>, Anda akan melihat penggunaan beberapa callback umum untuk penanganan kejadian, @@ -176,19 +176,19 @@ termasuk:</p> <li><code>{@link android.view.View#onTouchEvent}</code> - Dipanggil bila terjadi kejadian gerakan layar sentuh.</li> <li><code>{@link android.view.View#onFocusChanged}</code> - Dipanggil bila View memperoleh atau kehilangan fokus.</li> </ul> -<p>Ada beberapa metode lain yang harus Anda ketahui, yang bukan bagian dari kelas View, +<p>Ada beberapa metode lain yang harus Anda ketahui, yang bukan bagian dari kelas View, namun bisa berdampak langsung pada kemampuan Anda menangani kejadian. Jadi, saat mengelola kejadian yang lebih kompleks dalam layout, pertimbangkanlah metode-metode lain ini:</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link android.app.Activity} Anda mencegat semua kejadian sentuh sebelum dikirim ke jendela.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link android.view.ViewGroup} memantau kejadian saat dikirim ke View anak.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Panggil ini - pada View induk untuk menunjukan larangan mencegat kejadian sentuh dengan <code>{@link + pada View induk untuk menunjukan larangan mencegat kejadian sentuh dengan <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li> </ul> @@ -199,11 +199,11 @@ perlu memberikan fokus pada item tindakan (seperti tombol) agar pengguna bisa me yang akan menerima input. Akan tetapi jika perangkat memiliki kemampuan sentuh, dan pengguna mulai berinteraksi dengan antarmuka dengan menyentuhnya, maka Anda tidak perlu lagi menyorot item, atau memfokuskan pada View tertentu. Karena itu, ada mode -untuk interaksi yang bernama "mode sentuh". +untuk interaksi yang bernama "mode sentuh". </p> <p> Untuk perangkat berkemampuan sentuh, setelah pengguna menyentuh layar, perangkat -akan masuk ke mode sentuh. Dari sini dan selanjutnya, hanya View dengan +akan masuk ke mode sentuh. Dari sini dan selanjutnya, hanya View dengan {@link android.view.View#isFocusableInTouchMode} benar yang akan dapat difokus, seperti widget pengedit teks. View lain yang dapat disentuh, seperti tombol, tidak akan difokus bila disentuh; View ini akan langsung memicu on-click listener bila ditekan. @@ -214,7 +214,7 @@ keluar dari mode sentuh, dan mencari tampilan untuk difokuskan. Kini pengguna bi dengan antarmuka pengguna tanpa menyentuh layar. </p> <p> -Status mode sentuh dipertahankan di seluruh sistem (semua jendela dan aktivitas). +Status mode sentuh dipertahankan di seluruh sistem (semua jendela dan aktivitas). Untuk query status saat ini, Anda bisa memanggil {@link android.view.View#isInTouchMode} untuk mengetahui apakah perangkat saat ini sedang dalam mode sentuh. </p> @@ -257,7 +257,7 @@ mana pun, tidak pula akan menyusuri ke bawah dari Button kedua. Karena sekarang mendefinisikan Button bawah sebagai <var>nextFocusUp</var> (dan sebaliknya), fokus navigasi akan silih berganti dari atas ke bawah dan bawah ke atas.</p> -<p>Jika Anda ingin mendeklarasikan View sebagai dapat difokus dalam UI (bila biasanya tidak dapat difokus), +<p>Jika Anda ingin mendeklarasikan View sebagai dapat difokus dalam UI (bila biasanya tidak dapat difokus), tambahkan atribut XML <code>android:focusable</code> ke View, dalam deklarasi layout Anda. Atur nilai <var>true</var>. Anda juga bisa mendeklarasikan View sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTouchMode</code>.</p> @@ -282,7 +282,7 @@ sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTou the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/in/preview/api-overview.jd b/docs/html-intl/intl/in/preview/api-overview.jd index b0a0317ca9ad..b652dd91bb27 100644 --- a/docs/html-intl/intl/in/preview/api-overview.jd +++ b/docs/html-intl/intl/in/preview/api-overview.jd @@ -815,7 +815,7 @@ penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem a sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta oleh aplikasi.</p> -<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang +<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang <a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped Directory Access</a>.</p> diff --git a/docs/html-intl/intl/in/preview/behavior-changes.jd b/docs/html-intl/intl/in/preview/behavior-changes.jd index 6e6ebae9d87a..521312eb2e90 100644 --- a/docs/html-intl/intl/in/preview/behavior-changes.jd +++ b/docs/html-intl/intl/in/preview/behavior-changes.jd @@ -45,7 +45,7 @@ page.image=images/cards/card-n-changes_2x.png <p> Bersama fitur dan kemampuan baru, Android N - menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini + menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan dalam aplikasi Anda. </p> @@ -482,7 +482,7 @@ JavaVM::AttachCurrentThread from <jni.h>. </li> <li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat - berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code> + berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code> secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang tidak terkelola. Selain itu, <code>CreateUser()</code> dan <code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode diff --git a/docs/html-intl/intl/in/preview/download-ota.jd b/docs/html-intl/intl/in/preview/download-ota.jd index 1efe9b72815c..4adf9bbb83a4 100644 --- a/docs/html-intl/intl/in/preview/download-ota.jd +++ b/docs/html-intl/intl/in/preview/download-ota.jd @@ -202,65 +202,73 @@ Ini adalah Perjanjian Lisensi Android SDK Preview ("Perjanjian Lisensi"). <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5: 15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1: 5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5: 3fac09fef759dde26e57cb80b20b6477<br> - SHA-1: 27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5: 58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5: 92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5: 1461622ad53ea842b2722fa7b49b8172<br> - SHA-1: 409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1: 87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1: 6f33742290eb46f2561891f38ca2e754b4e50c6a + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/in/preview/download.jd b/docs/html-intl/intl/in/preview/download.jd index a759a11c007f..e6714bbae1ed 100644 --- a/docs/html-intl/intl/in/preview/download.jd +++ b/docs/html-intl/intl/in/preview/download.jd @@ -300,72 +300,73 @@ Ini adalah Perjanjian Lisensi Android SDK Preview ("Perjanjian Lisensi"). <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1: 5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1: 81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5: 565be87ebb2d5937e2abe1a42645864b<br> - SHA-1: 2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1: 2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1: 1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5: 7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1: 5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 dan D6653)</td> - <td>Unduh: <a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - Untuk informasi selengkapnya, lihat<a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Coba Android N Developer Preview untuk Xperia Z3</a>. + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> @@ -458,7 +459,7 @@ dapat menjalankan citra sistem x86_64 untuk Android N.</p> <strong>x86</strong> ABI), kemudian klik <strong>Next</strong>. (Hanya citra sistem x86 yang saat ini didukung dengan Android Emulator untuk Android N Preview.) - <li>Selesaikan konfigurasi AVD selanjutnya dan klik + <li>Selesaikan konfigurasi AVD selanjutnya dan klik <strong>Finish</strong>.</li> </ol> diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd index 5712ab671059..c6bf1759393b 100644 --- a/docs/html-intl/intl/in/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/in/preview/features/background-optimization.jd @@ -297,7 +297,7 @@ public static void scheduleJob(Context context) { <dd> Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code null} jika tidak ada URI yang memicu pekerjaan (misalnya, pekerjaan - dipicu karena batas waktu atau alasan lainnya), atau jumlah + dipicu karena batas waktu atau alasan lainnya), atau jumlah URI yang berubah lebih dari 50. </dd> diff --git a/docs/html-intl/intl/in/preview/features/data-saver.jd b/docs/html-intl/intl/in/preview/features/data-saver.jd index f64609bedf66..6cd64d29ddcb 100644 --- a/docs/html-intl/intl/in/preview/features/data-saver.jd +++ b/docs/html-intl/intl/in/preview/features/data-saver.jd @@ -50,7 +50,7 @@ page.image=images/cards/card-nyc_2x.jpg <p> N Developer Preview memperluas {@link android.net.ConnectivityManager} API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver - pengguna</a> dan <a href="#monitor-changes">memantau perubahan + pengguna</a> dan <a href="#monitor-changes">memantau perubahan preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan data latar belakang. diff --git a/docs/html-intl/intl/in/preview/features/multi-window.jd b/docs/html-intl/intl/in/preview/features/multi-window.jd index 33399e9961c3..3f75def734a6 100644 --- a/docs/html-intl/intl/in/preview/features/multi-window.jd +++ b/docs/html-intl/intl/in/preview/features/multi-window.jd @@ -325,7 +325,7 @@ android:supportsPictureInPicture=["true" | "false"] <p class="note"> <strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code> - mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga + mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga mengembalikan nilai true. </p> </dd> diff --git a/docs/html-intl/intl/in/preview/features/security-config.jd b/docs/html-intl/intl/in/preview/features/security-config.jd index 53f5576ec94d..7a0303e59fd7 100644 --- a/docs/html-intl/intl/in/preview/features/security-config.jd +++ b/docs/html-intl/intl/in/preview/features/security-config.jd @@ -739,7 +739,7 @@ Sumber sertifikat CA, bisa salah satu dari </dt> <dd> - Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya + Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya {@code "SHA-256"} yang didukung. </dd> </dl> diff --git a/docs/html-intl/intl/in/preview/j8-jack.jd b/docs/html-intl/intl/in/preview/j8-jack.jd index bbb16703d2bd..438918445902 100644 --- a/docs/html-intl/intl/in/preview/j8-jack.jd +++ b/docs/html-intl/intl/in/preview/j8-jack.jd @@ -126,7 +126,7 @@ memasang Android N Preview SDK, lihat <a href="{@docRoot}preview/setup-sdk.html" </h2> <p> - Agar dapat menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan + Agar dapat menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan <a class="external-link" href="https://source.android.com/source/jack.html">Jack toolchain</a> yang baru. Toolchain Android yang baru ini mengompilasi sumber bahasa Java menjadi dex bytecode yang bisa dibaca Android, memiliki format pustaka {@code .jack} sendiri, dan menyediakan sebagian besar fitur toolchain diff --git a/docs/html-intl/intl/in/preview/overview.jd b/docs/html-intl/intl/in/preview/overview.jd index c1fc0b5dabe4..c38a5796cd90 100644 --- a/docs/html-intl/intl/in/preview/overview.jd +++ b/docs/html-intl/intl/in/preview/overview.jd @@ -167,7 +167,7 @@ page.tags="preview", "developer", "android" <p> <strong>Tiga tahapan pencapaian pratinjau pertama</strong> memberikan <strong>ujian pertama dan lingkungan pengembangan</strong> yang membantu Anda mengidentifikasi - masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan + masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan yang diperlukan untuk menargetkan platform baru. Ini adalah periode prioritas yang akan memberi kami masukan dari Anda tentang fitur dan API serta masalah kompatibilitas file — untuk semua ini, gunakan <a href="{@docRoot}preview/bug">Issue @@ -314,8 +314,8 @@ page.tags="preview", "developer", "android" </p> <ul> - <li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk -Android N</a> memiliki + <li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk +Android N</a> memiliki petunjuk langkah demi langkah untuk memulai.</li> <li> <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> akan menunjukkan kepada Anda bidang-bidang utama untuk diuji.</li> diff --git a/docs/html-intl/intl/in/preview/setup-sdk.jd b/docs/html-intl/intl/in/preview/setup-sdk.jd index 999970563db3..c03f388b676c 100644 --- a/docs/html-intl/intl/in/preview/setup-sdk.jd +++ b/docs/html-intl/intl/in/preview/setup-sdk.jd @@ -92,7 +92,7 @@ kotak centang <strong>Android N Preview</strong>.</li> <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> diff --git a/docs/html-intl/intl/in/preview/support.jd b/docs/html-intl/intl/in/preview/support.jd index 5571b11610f6..885e7c717368 100644 --- a/docs/html-intl/intl/in/preview/support.jd +++ b/docs/html-intl/intl/in/preview/support.jd @@ -457,7 +457,7 @@ Tracker</a>.</p> versi aplikasi multi-APK yang didesain untuk mendukung Vulkan yang lebih rendah pada perangkat dengan dukungan versi yang lebih tinggi. Saat ini, Google Play Store tidak menerima unggahan aplikasi yang menggunakan penargetan versi Vulkan. Dukungan ini - akan ditambahkan pada Google Play Store di masa mendatang dan diperbaiki dalam + akan ditambahkan pada Google Play Store di masa mendatang dan diperbaiki dalam Google Play Services versi berikutnya (akan disertakan dalam rilis Developer Preview mendatang). Perangkat N yang menggunakan Google Play Services 9.0.83 akan tetap menerima versi Aplikasi yang menargetkan dukungan Vulkan dasar. diff --git a/docs/html-intl/intl/in/training/material/drawables.jd b/docs/html-intl/intl/in/training/material/drawables.jd index 56fd17fc684b..493abd46bebd 100644 --- a/docs/html-intl/intl/in/training/material/drawables.jd +++ b/docs/html-intl/intl/in/training/material/drawables.jd @@ -66,7 +66,7 @@ sediakan listener sebagai gantinya.</p> <p>Anda bisa mengambil warna mencolok dari gambar dengan metode getter di kelas <code>Palette</code>, misalnya <code>Palette.getVibrantColor</code>.</p> -<p>Untuk menggunakan kelas {@link android.support.v7.graphics.Palette} dalam proyek Anda, tambahkan +<p>Untuk menggunakan kelas {@link android.support.v7.graphics.Palette} dalam proyek Anda, tambahkan <a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> berikut ke modul aplikasi Anda:</p> diff --git a/docs/html-intl/intl/in/training/material/lists-cards.jd b/docs/html-intl/intl/in/training/material/lists-cards.jd index 358f1d17d9e2..46dd19afc4e1 100644 --- a/docs/html-intl/intl/in/training/material/lists-cards.jd +++ b/docs/html-intl/intl/in/training/material/lists-cards.jd @@ -83,7 +83,7 @@ android.support.v7.widget.RecyclerView.LayoutManager RecyclerView.LayoutManager} <h3>Animasi</h3> <p>Animasi untuk menambahkan dan menghapus item diaktifkan secara default di {@link -android.support.v7.widget.RecyclerView}. Untuk menyesuaikan animasi ini, perluas kelas +android.support.v7.widget.RecyclerView}. Untuk menyesuaikan animasi ini, perluas kelas {@link android.support.v7.widget.RecyclerView.ItemAnimator RecyclerView.ItemAnimator}dan gunakan metode {@link android.support.v7.widget.RecyclerView#setItemAnimator RecyclerView.setItemAnimator()}. </p> @@ -253,7 +253,7 @@ dalam layout:</p> <p>Widget {@link android.support.v7.widget.RecyclerView} dan {@link android.support.v7.widget.CardView} adalah bagian dari <a href="{@docRoot}tools/support-library/features.html#v7">v7 Support -Library</a>. Untuk menggunakan widget dalam proyek Anda, tambahkan +Library</a>. Untuk menggunakan widget dalam proyek Anda, tambahkan <a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> ini ke modul aplikasi Anda:</p> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/about.jd b/docs/html-intl/intl/ja/distribute/googleplay/about.jd index 56eaf2c6d0a7..6a58cf60e6b6 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body -<div id="qv-wrapper"> +<div id="qv-wrapper"> <div id="qv"> <h2>Google Play ã«ã¤ã„ã¦</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/auto.jd b/docs/html-intl/intl/ja/distribute/googleplay/auto.jd index 0cbf8b131072..bc5a01f8d0da 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/auto.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/auto.jd @@ -160,4 +160,4 @@ page.metaDescription=アプリã¨ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Android Auto ã«é…布ã—ã¾ data-query="collection:autolanding" data-cardSizes="9x6, 6x3x2" data-maxResults="6"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd index 8dd562d79a16..29e4145a7d37 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd @@ -5,7 +5,7 @@ Xnonavpage=true @jd:body -<div id="qv-wrapper"> +<div id="qv-wrapper"> <div id="qv"> <h2>公開機能</h2> <ol> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd index 53258de6419c..54c4f34da34b 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd @@ -36,4 +36,4 @@ page.tags="families" <div class="paging-links" style="padding-top:.75em;"> <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">次ã®ãƒˆãƒ”ック:オプトイン</a> -</div>
\ No newline at end of file +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd index 206429c65442..da877f9a2191 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=Designed for Families ã«é–¢ã™ã‚‹è³ªå•ã¨å›žç” font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>本書ã®å†…容</h2> @@ -106,7 +106,7 @@ page.metaDescription=Designed for Families ã«é–¢ã™ã‚‹è³ªå•ã¨å›žç” </dt> <dd> - Designed for Families プãƒã‚°ãƒ©ãƒ ã«ã‚ªãƒ—トインã™ã‚‹ã¨ã€Google Play ã¯ã‚¢ãƒ—リを審査ã—ã€ãƒ•ァミリー層ã«é©åˆ‡ã‹ã©ã†ã‹ç¢ºèªã—ã¾ã™ã€‚アプリãŒã™ã¹ã¦ã®ãƒ—ãƒã‚°ãƒ©ãƒ è¦ä»¶ã«æº–æ‹ ã—ã¦ã„ã‚‹å ´åˆã€å…¬é–‹ã¾ã§ã®æ™‚é–“ã¯é€šå¸¸ã‚ˆã‚Šã‚‚é•·ãã‹ã‹ã‚‹ã“ã¨ã¯ãªã„ã¯ãšã§ã™ã€‚ãŸã ã—ã€Designed for Families 審査ã§å´ä¸‹ã•れãŸå ´åˆã€ã‚¢ãƒ—リã®å…¬é–‹ãŒé…れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ + Designed for Families プãƒã‚°ãƒ©ãƒ ã«ã‚ªãƒ—トインã™ã‚‹ã¨ã€Google Play ã¯ã‚¢ãƒ—リを審査ã—ã€ãƒ•ァミリー層ã«é©åˆ‡ã‹ã©ã†ã‹ç¢ºèªã—ã¾ã™ã€‚アプリãŒã™ã¹ã¦ã®ãƒ—ãƒã‚°ãƒ©ãƒ è¦ä»¶ã«æº–æ‹ ã—ã¦ã„ã‚‹å ´åˆã€å…¬é–‹ã¾ã§ã®æ™‚é–“ã¯é€šå¸¸ã‚ˆã‚Šã‚‚é•·ãã‹ã‹ã‚‹ã“ã¨ã¯ãªã„ã¯ãšã§ã™ã€‚ãŸã ã—ã€Designed for Families 審査ã§å´ä¸‹ã•れãŸå ´åˆã€ã‚¢ãƒ—リã®å…¬é–‹ãŒé…れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ </dd> <dt> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd index e8e9ee59af41..023e2c17e06d 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd @@ -51,7 +51,7 @@ page.metaDescription=ã»ã‚“ã®æ•°ã‚¹ãƒ†ãƒƒãƒ—ã§ Designed for Families ã«å‚åŠ </p> <p class="note"> - <strong>注:</strong> Designed for Families プãƒã‚°ãƒ©ãƒ ã§å…¬é–‹ã•れãŸã‚¢ãƒ—リ㯠Google Play ã§ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚利用ã§ãã¾ã™ã€‚ + <strong>注:</strong> Designed for Families プãƒã‚°ãƒ©ãƒ ã§å…¬é–‹ã•れãŸã‚¢ãƒ—リ㯠Google Play ã§ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚利用ã§ãã¾ã™ã€‚ </p> <p> @@ -67,4 +67,4 @@ page.metaDescription=ã»ã‚“ã®æ•°ã‚¹ãƒ†ãƒƒãƒ—ã§ Designed for Families ã«å‚åŠ <div class="paging-links" style="padding-top:.75em;"> <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">次ã®ãƒˆãƒ”ック:よãã‚る質å•</a> -</div>
\ No newline at end of file +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/guide.jd b/docs/html-intl/intl/ja/distribute/googleplay/guide.jd index 137c63f6cbe4..1655017efa03 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/guide.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/guide.jd @@ -54,4 +54,4 @@ page.image=distribute/images/play_dev_guide.png data-query="collection:play_dev_guide" data-cardSizes="9x6" data-maxResults="1"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd index eda7297741cc..2870153fe2d9 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd @@ -431,4 +431,4 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> <p class="caution"> <strong>é‡è¦: </strong>ã“ã®åˆ¶é™ã®ãŸã‚ã€Auto サãƒãƒ¼ãƒˆã®ãƒ—ãƒãƒˆã‚¿ã‚¤ãƒ—ã®ä½œæˆã«ã€å®Ÿåƒ APK を使用ã—ã¦ã¯ãªã‚Šã¾ã›ã‚“。 -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd index 5229aa7c829f..ddf41155b082 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd @@ -13,7 +13,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>テスト</h2> <ol> <li><a href="#test-environment">テスト環境ã®è¨å®š</a></li> @@ -25,7 +25,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">タブレットã®ã‚¢ãƒ—リå“質</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最é©åŒ–ã™ã‚‹</a></li> </ol> - + </div> </div> @@ -70,7 +70,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> 説明 @@ -1011,4 +1011,4 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6"> <p> {@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()} を使用ã—ã¦<code>ThreadPolicy</code> ã«å¯¾ã™ã‚‹ãƒãƒªã‚·ãƒ¼é•åã®<strong>視覚通知</strong>を有効ã«ã—ã¾ã™ã€‚ -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd index f0cc133c8bda..dbdabc21d57e 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd @@ -46,7 +46,7 @@ Xnonavpage=true <div class="headerLine"><h2 id="core-app-quality">1.タブレット アプリã®åŸºæœ¬çš„ãªå“質テスト</h2></div> -<p>タブレット アプリã®å„ªã‚ŒãŸã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã™ã‚‹æœ€åˆã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€ã‚¢ãƒ—リãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã¨ãƒ•ォームファクタã«å¯¾ã—ã¦ã€<em>アプリã®ä¸æ ¸å“質基準</em>ã«é©åˆã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ã§ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}distribute/essentials/quality/core.html">アプリã®ä¸æ ¸å“質ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³</a>ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 +<p>タブレット アプリã®å„ªã‚ŒãŸã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã™ã‚‹æœ€åˆã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€ã‚¢ãƒ—リãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã¨ãƒ•ォームファクタã«å¯¾ã—ã¦ã€<em>アプリã®ä¸æ ¸å“質基準</em>ã«é©åˆã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ã§ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}distribute/essentials/quality/core.html">アプリã®ä¸æ ¸å“質ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³</a>ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 </p> <p> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd index 9fa443990011..1d92d8c4050b 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd @@ -395,4 +395,4 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> </p> <p> ã¯ã„。上記ã®è¦ä»¶ã¯ã€ã‚¢ãƒ—リ㌠Google Play ã§ Android Wear アプリã¨ã—ã¦è˜åˆ¥ã•れã€Android Wear ユーザーãŒç™ºè¦‹ã—ã‚„ã™ããªã‚‹ã‹ã©ã†ã‹ã®ã¿ã‚’判æ–ã™ã‚‹ã‚‚ã®ã§ã™ã€‚アプリ㌠Wear アプリã¨ã—ã¦æ‰¿èªã•れãªãã¦ã‚‚ã€é›»è©±ã‚„タブレットãªã©ã®ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ タイプã§åˆ©ç”¨å¯èƒ½ã§ã™ã€‚ウェアラブル端末ã¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚‚å¯èƒ½ã§ã™ã€‚ -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/start.jd b/docs/html-intl/intl/ja/distribute/googleplay/start.jd index 3c5e548624ae..93aee136da05 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/start.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/start.jd @@ -134,4 +134,4 @@ href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=e data-query="collection:distribute/googleplay/gettingstarted" data-sortOrder="-timestamp" data-cardSizes="9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/googleplay/tv.jd b/docs/html-intl/intl/ja/distribute/googleplay/tv.jd index 1a7558de28ab..9532bf4277e3 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/tv.jd @@ -173,7 +173,7 @@ page.metaDescription=アプリã€ã‚²ãƒ¼ãƒ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Android TV ã«é… <h3 id="track_review">5.å¯©æŸ»ã¨æ‰¿èªã‚’トラッã‚ングã™ã‚‹</h3> <p> - アプリãŒä¸Šè¿°ã® Android TV å‘ã‘ã®æŠ€è¡“ä¸Šã®åŸºæº–ã¨å“質基準ã«é©åˆã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãã®ã‚¢ãƒ—リを Android TV ã§æ´»ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚アプリãŒåŸºæº–を満ãŸã—ã¦ã„ãªã„å ´åˆã€<strong>デベãƒãƒƒãƒ‘ー アカウント アドレスã«é€ã‚‰ã‚ŒãŸé€šçŸ¥ãƒ¡ãƒ¼ãƒ«</strong>ã‚’å—ã‘å–りã¾ã™ã€‚ã“ã®ãƒ¡ãƒ¼ãƒ«ã«ã¯å¯¾å‡¦ãŒå¿…è¦ãªé ˜åŸŸã®è¦ç´„ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚å¿…è¦ãªèª¿æ•´ã‚’行ã£ãŸã‚‰ã€ãƒ‡ãƒ™ãƒãƒƒãƒ‘ー コンソールã«ã‚¢ãƒ—ãƒªã®æ–°è¦ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップãƒãƒ¼ãƒ‰ã§ãã¾ã™ã€‚ + アプリãŒä¸Šè¿°ã® Android TV å‘ã‘ã®æŠ€è¡“ä¸Šã®åŸºæº–ã¨å“質基準ã«é©åˆã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãã®ã‚¢ãƒ—リを Android TV ã§æ´»ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚アプリãŒåŸºæº–を満ãŸã—ã¦ã„ãªã„å ´åˆã€<strong>デベãƒãƒƒãƒ‘ー アカウント アドレスã«é€ã‚‰ã‚ŒãŸé€šçŸ¥ãƒ¡ãƒ¼ãƒ«</strong>ã‚’å—ã‘å–りã¾ã™ã€‚ã“ã®ãƒ¡ãƒ¼ãƒ«ã«ã¯å¯¾å‡¦ãŒå¿…è¦ãªé ˜åŸŸã®è¦ç´„ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚å¿…è¦ãªèª¿æ•´ã‚’行ã£ãŸã‚‰ã€ãƒ‡ãƒ™ãƒãƒƒãƒ‘ー コンソールã«ã‚¢ãƒ—ãƒªã®æ–°è¦ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップãƒãƒ¼ãƒ‰ã§ãã¾ã™ã€‚ </p> <p> @@ -190,7 +190,7 @@ page.metaDescription=アプリã€ã‚²ãƒ¼ãƒ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Android TV ã«é… </li> <li> - <em>承èª</em> — アプリãŒå¯©æŸ»ã•ã‚Œã€æ‰¿èªã•れã¾ã—ãŸã€‚アプリ㯠Android TV ユーザーãŒç›´æŽ¥åˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ + <em>承èª</em> — アプリãŒå¯©æŸ»ã•ã‚Œã€æ‰¿èªã•れã¾ã—ãŸã€‚アプリ㯠Android TV ユーザーãŒç›´æŽ¥åˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ </li> <li> @@ -207,4 +207,4 @@ page.metaDescription=アプリã€ã‚²ãƒ¼ãƒ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Android TV ã«é… data-query="collection:tvlanding" data-cardSizes="9x6, 6x3x2" data-maxResults="6"> - </div> + </div> diff --git a/docs/html-intl/intl/ja/distribute/googleplay/wear.jd b/docs/html-intl/intl/ja/distribute/googleplay/wear.jd index 4e0196e8a805..85cffca6d97f 100644 --- a/docs/html-intl/intl/ja/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/ja/distribute/googleplay/wear.jd @@ -196,4 +196,4 @@ page.metaDescription=アプリã€ã‚²ãƒ¼ãƒ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Android Wear ã« data-query="collection:wearlanding" data-cardSizes="6x2" data-maxResults="3"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd index b1394f8c950e..a6f1a7f8b6f2 100644 --- a/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd @@ -789,4 +789,4 @@ data-maxresults="6"> data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch" data-sortOrder="-timestamp" data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd index b2c797b437ab..5bb9fe0359a6 100644 --- a/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd @@ -2,7 +2,7 @@ page.title=ãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã®ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ page.metaDescription=Android 㨠Google Play ã‹ã‚‰æä¾›ã•れる世界ä¸ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’活用ã—ã¾ã™ã€‚ã“ã®ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆã‚’èªã‚“ã§ã€ãŠå®¢æ§˜ã®è£½å“を世界ä¸ã®ãƒžãƒ¼ã‚±ãƒƒãƒˆã«æä¾›ã™ã‚‹æ–¹æ³•ã®æ¦‚è¦ã‚’把æ¡ã—ã¦ãã ã•ã„。 meta.tags="localizing, publishing, disttools" page.tags="local, l10n, translation, language" -page.image=/distribute/images/localization-checklist.jpg +page.image=/distribute/images/localization-checklist.jpg @jd:body @@ -713,4 +713,4 @@ data-maxresults="6"> data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch" data-sortOrder="-timestamp" data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/google/play/filters.jd b/docs/html-intl/intl/ja/google/play/filters.jd index 5ab6336eac65..eed069f74b97 100644 --- a/docs/html-intl/intl/ja/google/play/filters.jd +++ b/docs/html-intl/intl/ja/google/play/filters.jd @@ -263,4 +263,4 @@ href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-featur <p class="caution"><strong>è¦å‘Š:</strong> åŒã˜ã‚¢ãƒ—リã«è¤‡æ•°ã® APK を公開ã™ã‚‹ã“ã¨ã¯æ‹¡å¼µæ©Ÿèƒ½ã¨ã¿ãªã•れã¾ã™ã€‚<strong>大部分ã®ã‚¢ãƒ—リã¯ã€åºƒç¯„囲ã®ãƒ‡ãƒã‚¤ã‚¹è¨å®šã‚’サãƒãƒ¼ãƒˆã™ã‚‹ APK ã‚’ 1 ã¤ã ã‘公開ã™ã¹ãã§ã™</strong>。複数㮠APK を公開ã™ã‚‹å ´åˆã€ãƒ•ィルタ固有ã®ãƒ«ãƒ¼ãƒ«ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€è¨å®šã”ã¨ã«é©åˆ‡ãªã‚¢ãƒƒãƒ—デート パスを確ä¿ã™ã‚‹ãŸã‚ã€å„ APK ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ コードã«ç‰¹åˆ¥ãªæ³¨æ„を払ã†å¿…è¦ãŒã‚りã¾ã™ã€‚</p> -<p>Google Play ã§è¤‡æ•°ã® APK を公開ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦è©³ã—ãã¯ã€<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数㮠APK サãƒãƒ¼ãƒˆï¼ˆMultiple APK Support)</a>ã‚’ã”覧ãã ã•ã„。</p>
\ No newline at end of file +<p>Google Play ã§è¤‡æ•°ã® APK を公開ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦è©³ã—ãã¯ã€<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数㮠APK サãƒãƒ¼ãƒˆï¼ˆMultiple APK Support)</a>ã‚’ã”覧ãã ã•ã„。</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/guide/components/activities.jd b/docs/html-intl/intl/ja/guide/components/activities.jd index 9b06d2c838bb..227f7f4b4083 100644 --- a/docs/html-intl/intl/ja/guide/components/activities.jd +++ b/docs/html-intl/intl/ja/guide/components/activities.jd @@ -53,7 +53,7 @@ page.tags=activity,intent <p> 通常ã€ã‚¢ãƒ—リケーションã¯è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã•れã¦ãŠã‚Šã€å„アプリケーションã¯ãれãžã‚Œç·©ã‚„ã‹ã«ã¤ãªãŒã£ã¦ã„ã¾ã™ã€‚ 一般的ã«ã¯ã€ã‚¢ãƒ—リケーション㮠1 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã€Œãƒ¡ã‚¤ãƒ³ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦æŒ‡å®šã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåˆã‚ã¦ã‚¢ãƒ—リケーションを起動ã—ãŸã¨ãã«è¡¨ç¤ºã•れるã®ãŒã“ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ãªã‚Šã¾ã™ã€‚ ãã®å¾Œã€å„アクティビティã§åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¦åˆ¥ã®æ“作を実行ã§ãã¾ã™ã€‚ -æ–°ã—ã„アクティビティã®é–‹å§‹æ™‚ã«ã¯ã€å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯åœæ¢ã—ã¾ã™ãŒã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦ã‚¹ã‚¿ãƒƒã‚¯ï¼ˆã€Œãƒãƒƒã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã€ï¼‰ã«ç¶æŒã•れã¾ã™ +æ–°ã—ã„アクティビティã®é–‹å§‹æ™‚ã«ã¯ã€å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯åœæ¢ã—ã¾ã™ãŒã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦ã‚¹ã‚¿ãƒƒã‚¯ï¼ˆã€Œãƒãƒƒã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã€ï¼‰ã«ç¶æŒã•れã¾ã™ æ–°ã—ã„アクティビティãŒé–‹å§‹ã™ã‚‹ã¨ã€ãれãŒãƒãƒƒã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã«å…¥ã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れã¾ã™ã€‚ ãƒãƒƒã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã¯ã€Œå¾Œå…¥ã‚Œå…ˆå‡ºã—ã€ã®åŸºæœ¬çš„ãªã‚¹ã‚¿ãƒƒã‚¯ ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’é †å®ˆã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを完了ã—㦠[<em>戻る</em>] ボタンを押ã™ã¨ã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚¹ã‚¿ãƒƒã‚¯ã‹ã‚‰æ¶ˆãˆï¼ˆç ´æ£„ã•れ)ã€å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå†é–‹ã—ã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/components/fragments.jd b/docs/html-intl/intl/ja/guide/components/fragments.jd index 31fb7f5020b2..7f9096393eda 100644 --- a/docs/html-intl/intl/ja/guide/components/fragments.jd +++ b/docs/html-intl/intl/ja/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>関連ドã‚ュメント</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Building a Dynamic UI with Fragments</a></li> @@ -332,7 +332,7 @@ fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); </pre> - <p>{@link android.app.FragmentTransaction#add(int,Fragment) add()} ã«æ¸¡ã•れる最åˆã®å¼•æ•°ã¯ãƒ•ラグメントをé…ç½®ã™ã‚‹ {@link android.view.ViewGroup} ã§ãƒªã‚½ãƒ¼ã‚¹ ID ã§æŒ‡å®šã•れã¦ãŠã‚Šã€2 ã¤ç›®ã®ãƒ‘ラメータã¯è¿½åŠ ã™ã‚‹ãƒ•ラグメントã§ã™ã€‚ + <p>{@link android.app.FragmentTransaction#add(int,Fragment) add()} ã«æ¸¡ã•れる最åˆã®å¼•æ•°ã¯ãƒ•ラグメントをé…ç½®ã™ã‚‹ {@link android.view.ViewGroup} ã§ãƒªã‚½ãƒ¼ã‚¹ ID ã§æŒ‡å®šã•れã¦ãŠã‚Šã€2 ã¤ç›®ã®ãƒ‘ラメータã¯è¿½åŠ ã™ã‚‹ãƒ•ラグメントã§ã™ã€‚ </p> <p>{@link android.app.FragmentTransaction} ã§å¤‰æ›´ã‚’åŠ ãˆãŸã‚‰ã€{@link android.app.FragmentTransaction#commit} を呼ã³å‡ºã—ã¦å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ @@ -378,7 +378,7 @@ FragmentRetainInstance.java} ã®ã‚µãƒ³ãƒ—ルã§ã‚·ã‚¹ãƒ†ãƒ ã« <code><sdk_roo <li>{@link android.app.FragmentManager#findFragmentById findFragmentById()}(アクティビティ レイアウト㧠UI ã‚’æä¾›ã™ã‚‹ãƒ•ラグメントã®å ´åˆï¼‰ã‚„ {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}(UI ã‚’æä¾›ã—ãªã„フラグメントã®å ´åˆï¼‰ã‚’使用ã—ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ã‚るフラグメントをå–å¾—ã™ã‚‹ã€‚ -</li> +</li> <li>{@link android.app.FragmentManager#popBackStack()} を使用ã—ã¦ãƒ•ラグメントをãƒãƒƒã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã‹ã‚‰å–り出ã™ï¼ˆãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã‚‹ [<em>戻る</em>] コマンドをシミュレートã™ã‚‹ï¼‰ã€‚</li> <li>{@link @@ -785,7 +785,7 @@ android.widget.FrameLayout} ã«ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã‚’è¿½åŠ ã™ã‚‹ï¼‰ã€æ–°ã—ã„ã <p>2 ã¤ç›®ã®ãƒ•ラグメントã§ã‚ã‚‹ {@code DetailsFragment} ã¯ã€{@code TitlesFragment} ã®ãƒªã‚¹ãƒˆã§é¸æŠžã•れãŸåЇã®ã‚らã™ã˜ã‚’表示ã—ã¾ã™ã€‚ </p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>{@code TitlesFragment} クラスã§èª¬æ˜Žã—ãŸã‚ˆã†ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒªã‚¹ãƒˆã‚¢ã‚¤ãƒ†ãƒ をクリックã—ãŸã¨ãã«ã€ç¾åœ¨ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«{@code R.id.details} ビュー({@code DetailsFragment} ãŒå±žã™ã‚‹å ´æ‰€ï¼‰ãŒ<em>å«ã¾ã‚Œã¦ã„ãªã„</em>å ´åˆã€ã‚¢ãƒ—リケーション㯠{@code DetailsActivity} ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¦ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を表示ã—ã¾ã™ã€‚ @@ -798,7 +798,7 @@ android.widget.FrameLayout} ã«ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã‚’è¿½åŠ ã™ã‚‹ï¼‰ã€æ–°ã—ã„ã {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>æ§‹æˆãŒæ¨ªæ–¹å‘ã®å ´åˆã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯è‡ªã‚‰çµ‚了ã™ã‚‹ãŸã‚ã€ãƒ¡ã‚¤ãƒ³ アクティビティãŒå¼•ãç¶™ã„ã§ {@code DetailsFragment} ã‚’ {@code TitlesFragment} ã®æ¨ªã«è¡¨ç¤ºã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç¸¦æ–¹å‘ã®ã¨ãã« {@code DetailsActivity} ã‚’é–‹å§‹ã—ã€ãã®å¾Œæ¨ªæ–¹å‘ã«å›žè»¢ã—ãŸï¼ˆã“ã“ã§ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå†é–‹ã•れる)ã¨ãã«èµ·ã“ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/components/fundamentals.jd b/docs/html-intl/intl/ja/guide/components/fundamentals.jd index 46e98689a3ec..e1a26cd9c577 100644 --- a/docs/html-intl/intl/ja/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/ja/guide/components/fundamentals.jd @@ -379,7 +379,7 @@ startActivity()} ã«æ¸¡ã™å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ¡ãƒ¼ãƒ«ã‚’下書ãã—ã¦é€ </p> <p>ãŸã¨ãˆã°ã€ã‚¢ãƒ—リã§ã‚«ãƒ¡ãƒ©ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã€Android 2.1 ã§æŽ¡ç”¨ã•れ㟠API(<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API レベル</a> 7)を使用ã™ã‚‹å ´åˆã€æ¬¡ã®ã‚ˆã†ã«ãƒžãƒ‹ãƒ•ェスト ファイルã§ãれをè¦ä»¶ã¨ã—ã¦å®£è¨€ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -</p> +</p> <pre> <manifest ... > diff --git a/docs/html-intl/intl/ja/guide/components/index.jd b/docs/html-intl/intl/ja/guide/components/index.jd index 803f99b2ebd2..f4801c945970 100644 --- a/docs/html-intl/intl/ja/guide/components/index.jd +++ b/docs/html-intl/intl/ja/guide/components/index.jd @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>ブãƒã‚°ã®è¨˜äº‹</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>DialogFragments ã®ä½¿ç”¨</h4> <p>ã“ã®æŠ•ç¨¿ã§ã¯ã€DialogFragments ã‚’ v4 サãƒãƒ¼ãƒˆ ライブラリã§ä½¿ç”¨ã—ã¦ï¼ˆHoneycomb 以å‰ã®ç«¯æœ«ã§ã®ä¸‹æ–¹äº’æ›æ€§ã®ãŸã‚)ダイアãƒã‚°ã‚’編集ã—ãŸã‚Šã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使用ã—ã¦å‘¼ã³å‡ºã—元㮠Activity ã«çµæžœã‚’è¿”ã—ãŸã‚Šã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>ã™ã¹ã¦ã« Fragments ã‚’</h4> <p>本日ã€åŒã˜ Fragments API を利用ã§ãã‚‹é™çš„ãªãƒ©ã‚¤ãƒ–ラリãŒå…¬é–‹ã•れã€Android 1.6 以é™ã§ã‚‚フラグメントを使用ã—ã¦ã‚¿ãƒ–レット対応ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを作æˆã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>マルãƒã‚¹ãƒ¬ãƒƒãƒ‰ã§ãƒ‘フォーマンスå‘上</h4> <p>応ç”ã®é€Ÿã„アプリケーションを作æˆã™ã‚‹ä¸Šã§é‡è¦ãªã®ã¯ã€ãƒ¡ã‚¤ãƒ³ UI ã‚¹ãƒ¬ãƒƒãƒ‰ãŒæœ€å°é™ã®ä½œæ¥ã‚’行ã†ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã§ã™ã€‚ @@ -32,7 +32,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>トレーニング</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>アクティビティã®ãƒ©ã‚¤ãƒ•サイクルã®ç®¡ç†</h4> <p>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€å„ Activity インスタンスãŒå—ã‘å–ã‚‹é‡è¦ãªãƒ©ã‚¤ãƒ•サイクル コールãƒãƒƒã‚¯ メソッドã«ã¤ã„ã¦ã€ãれらを使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®äºˆæœŸã™ã‚‹å†…容ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを動作ã•ã›ã‚‹æ–¹æ³•ã¨ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒãれらを必è¦ã¨ã—ãªã„ã¨ãã«ã€ã‚·ã‚¹ãƒ†ãƒ ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’消費ã—ãªã„よã†ã«ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/components/loaders.jd b/docs/html-intl/intl/ja/guide/components/loaders.jd index bc936774f721..6034717933ef 100644 --- a/docs/html-intl/intl/ja/guide/components/loaders.jd +++ b/docs/html-intl/intl/ja/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>ã‚ークラス</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>関連サンプル</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ android.app.Fragment} ã§ä½¿ç”¨ã§ãる。</li> å†åº¦ãƒ‡ãƒ¼ã‚¿ã‚’å•ã„åˆã‚ã›ã‚‹å¿…è¦ãŒãªã„。 </li> </ul> - + <h2 id="summary">Loader API ã®æ¦‚è¦</h2> <p>アプリケーションã§ãƒãƒ¼ãƒ€ã‚’使用ã™ã‚‹ã®ã«å¿…è¦ã«ãªã‚Šãã†ãªã‚¯ãƒ©ã‚¹ã‚„インターフェースã¯è¤‡æ•°ã‚りã¾ã™ã€‚ @@ -129,7 +129,7 @@ android.content.ContentProvider} ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„るデータをãƒãƒ </li> <li>{@link android.app.LoaderManager.LoaderCallbacks} ã®å®Ÿè£…。ã“ã“ã§ã€æ–°ã—ã„ãƒãƒ¼ãƒ€ã‚’作æˆã—ã¦æ—¢å˜ã®ãƒãƒ¼ãƒ€ã¸ã®å‚照を管ç†ã—ã¾ã™ã€‚ -</li> +</li> <li>{@link android.widget.SimpleCursorAdapter} ãªã©ã®ãƒãƒ¼ãƒ€ã®ãƒ‡ãƒ¼ã‚¿ã‚’表示ã™ã‚‹æ–¹æ³•。</li> <li>{@link android.content.CursorLoader} を使用ã™ã‚‹ã¨ãã®ã€{@link android.content.ContentProvider} ãªã©ã®ãƒ‡ãƒ¼ã‚¿ ソース。 @@ -140,7 +140,7 @@ android.widget.SimpleCursorAdapter} ãªã©ã®ãƒãƒ¼ãƒ€ã®ãƒ‡ãƒ¼ã‚¿ã‚’表示ã™ã‚ <p>{@link android.app.LoaderManager} 㯠1 ã¤ä»¥ä¸Šã® {@link android.content.Loader} インスタンスを {@link android.app.Activity} ã‚„ {@link android.app.Fragment} 内ã§ç®¡ç†ã—ã¾ã™ã€‚ 1 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティやフラグメントã”ã¨ã«ã€{@link -android.app.LoaderManager} 㯠1 ã¤ã ã‘å˜åœ¨ã—ã¾ã™ã€‚</p> +android.app.LoaderManager} 㯠1 ã¤ã ã‘å˜åœ¨ã—ã¾ã™ã€‚</p> <p>通常ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠{@link android.app.Activity#onCreate onCreate()} メソッドã‹ã€ãƒ•ラグメント㮠{@link android.app.Fragment#onActivityCreated onActivityCreated()} メソッド内㧠{@link android.content.Loader} ã‚’åˆæœŸåŒ–ã—ã¾ã™ã€‚ @@ -157,13 +157,13 @@ getLoaderManager().initLoader(0, null, this);</pre> <ul> <li>ãƒãƒ¼ãƒ€ã‚’è˜åˆ¥ã™ã‚‹ä¸€æ„ã® ID。ã“ã®ä¾‹ã§ã¯ã€ID 㯠0 ã§ã™ã€‚</li> <li>ãƒãƒ¼ãƒ€ã®æ§‹ç¯‰æ™‚ã«æä¾›ã™ã‚‹ä»»æ„ã®å¼•数(ã“ã®ä¾‹ã§ã¯ <code>null</code>)。 -</li> +</li> <li>{@link android.app.LoaderManager} ãŒãƒãƒ¼ãƒ€ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’å ±å‘Šã™ã‚‹éš›ã«å‘¼ã³å‡ºã™ {@link android.app.LoaderManager.LoaderCallbacks} ã®å®Ÿè£…。 ã“ã®ä¾‹ã§ã¯ã€ãƒãƒ¼ã‚«ãƒ«ã‚¯ãƒ©ã‚¹ãŒ {@link android.app.LoaderManager.LoaderCallbacks} インターフェースを実装ã™ã‚‹ãŸã‚ã€è‡ªèº«ã® {@code this} ã«å‚照を渡ã—ã¾ã™ã€‚ -</li> +</li> </ul> <p>{@link android.app.LoaderManager#initLoader initLoader()} ã®å‘¼ã³å‡ºã—ã«ã‚ˆã£ã¦ã€ãƒãƒ¼ãƒ€ãŒåˆæœŸåŒ–ã•れã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚ çµæžœã«ã¯æ¬¡ã® 2 ã¤ã®å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚</p> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} ã®å®Œå…¨ãªå®Ÿè£…ã®ä¾‹ã§ã™ã€‚ {@link android.content.CursorLoader} を使用ã—ã¦ãƒ—ãƒãƒã‚¤ãƒ€ã¸ã®ã‚¯ã‚¨ãƒªã‚’管ç†ã—ã¦ã„ã¾ã™ã€‚</p> - + <p>ã“ã®ä¾‹ã«ã‚るよã†ã«ã€ã‚¢ãƒ—リケーションãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã®é€£çµ¡å…ˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒžãƒ‹ãƒ•ェスト㫠{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS} ã®è¨±å¯ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ </p> diff --git a/docs/html-intl/intl/ja/guide/components/processes-and-threads.jd b/docs/html-intl/intl/ja/guide/components/processes-and-threads.jd index 691a5f471880..ae364113e1e6 100644 --- a/docs/html-intl/intl/ja/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/ja/guide/components/processes-and-threads.jd @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/ja/guide/publishing/app-signing.jd b/docs/html-intl/intl/ja/guide/publishing/app-signing.jd index 2d2acfa2f8c3..efe66f453c9f 100644 --- a/docs/html-intl/intl/ja/guide/publishing/app-signing.jd +++ b/docs/html-intl/intl/ja/guide/publishing/app-signing.jd @@ -53,7 +53,7 @@ page.title=アプリケーションã¸ã®ç½²å <ul> <li>ã™ã¹ã¦ã®ã‚¢ãƒ—リケーションã¯<em>ç½²åã•れる必è¦ãŒã‚りã¾ã™</em>。署åã•れã¦ã„ãªã„アプリケーションã¯ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“。</li> <li>アプリケーションã®ç½²åã«ã€è‡ªå·±ç½²å証明書を使用ã§ãã¾ã™ã€‚èªè¨¼æ©Ÿé–¢ã¯ä¸è¦ã§ã™ã€‚</li> - <li>アプリケーションをエンド ユーザーã«ãƒªãƒªãƒ¼ã‚¹ã™ã‚‹æº–å‚™ãŒã§ããŸã‚‰ã€é©åˆ‡ãªç§˜å¯†éµã‚’使用ã—ã¦ã‚¢ãƒ—リケーションã«ç½²åã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚SDK ツールã§ç”Ÿæˆã•れãŸãƒ‡ãƒãƒƒã‚° ã‚ーã§ç½²åã•れãŸã‚¢ãƒ—リケーションã¯ã€å…¬é–‹ã§ãã¾ã›ã‚“。 + <li>アプリケーションをエンド ユーザーã«ãƒªãƒªãƒ¼ã‚¹ã™ã‚‹æº–å‚™ãŒã§ããŸã‚‰ã€é©åˆ‡ãªç§˜å¯†éµã‚’使用ã—ã¦ã‚¢ãƒ—リケーションã«ç½²åã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚SDK ツールã§ç”Ÿæˆã•れãŸãƒ‡ãƒãƒƒã‚° ã‚ーã§ç½²åã•れãŸã‚¢ãƒ—リケーションã¯ã€å…¬é–‹ã§ãã¾ã›ã‚“。 </li> <li>システムãŒç½²åè¨¼æ˜Žæ›¸ã®æœ‰åŠ¹æœŸé™ã‚’確èªã™ã‚‹ã®ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿ã§ã™ã€‚アプリケーションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«ç½²åè€…è¨¼æ˜Žæ›¸ãŒæœŸé™åˆ‡ã‚Œã«ãªã£ãŸå ´åˆã€ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ£å¸¸ãªå‹•作を継続ã—ã¾ã™ã€‚</li> <li>標準ツールã§ã‚ã‚‹ Keytool 㨠Jarsigner を使用ã—ã¦ã‚ーを生æˆã—ã€ã‚¢ãƒ—リケーション㮠.apk ファイルã«ç½²åã§ãã¾ã™ã€‚</li> @@ -61,7 +61,7 @@ page.title=アプリケーションã¸ã®ç½²å <p>Android システムã¯ã€é©åˆ‡ã«ç½²åã•れã¦ã„ãªã„アプリケーションをインストールã›ãšã€å®Ÿè¡Œã‚‚ã—ã¾ã›ã‚“。ã“ã®è¦å‰‡ã¯ã€å®Ÿéš›ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã‚‚エミュレータã§ã‚‚ã€Android システムãŒå®Ÿè¡Œã•れるã™ã¹ã¦ã®çжæ³ã§é©ç”¨ã•れã¾ã™ã€‚ã“ã®ãŸã‚ã€ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§å®Ÿè¡Œã¾ãŸã¯ãƒ‡ãƒãƒƒã‚°ã™ã‚‹å‰ã«ã€ã‚¢ãƒ—リケーションã®ç½²åã‚’è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚</p> -<p>Android SDK ツールã¯ã€ãƒ‡ãƒãƒƒã‚°æ™‚ã®ã‚¢ãƒ—リケーション署åを支æ´ã—ã¾ã™ã€‚「ADT Plugin for Eclipseã€ã¨ã€ŒAnt ビルド ツールã€ã§ã¯ä¸¡æ–¹ã¨ã‚‚ã€<em>デãƒãƒƒã‚° モード</em>ã¨<em>リリース モード</em>ã® 2 種類ã®ç½²åモードを利用ã§ãã¾ã™ã€‚ +<p>Android SDK ツールã¯ã€ãƒ‡ãƒãƒƒã‚°æ™‚ã®ã‚¢ãƒ—リケーション署åを支æ´ã—ã¾ã™ã€‚「ADT Plugin for Eclipseã€ã¨ã€ŒAnt ビルド ツールã€ã§ã¯ä¸¡æ–¹ã¨ã‚‚ã€<em>デãƒãƒƒã‚° モード</em>ã¨<em>リリース モード</em>ã® 2 種類ã®ç½²åモードを利用ã§ãã¾ã™ã€‚ <ul> <li>開発ãŠã‚ˆã³ãƒ†ã‚¹ãƒˆä¸ã¯ã€ãƒ‡ãƒãƒƒã‚° モードã§ã‚³ãƒ³ãƒ‘イルã§ãã¾ã™ã€‚デãƒãƒƒã‚° モードã§ã¯ã€ãƒ“ルド ツール㯠JDK ã«ä»˜å±žã® Keytool ユーティリティを使用ã—ã¦ã€ã‚ーストアã¨ã‚ーを既知ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ãƒ‘スワードã§ä½œæˆã—ã¾ã™ã€‚コンパイルã®ãŸã³ã«ã€ãƒ„ールã¯ãƒ‡ãƒãƒƒã‚° ã‚ーを使用ã—ã¦ã‚¢ãƒ—リケーション㮠.apk ファイルã«ç½²åã—ã¾ã™ã€‚ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¯æ—¢çŸ¥ã®ã‚‚ã®ãªã®ã§ã€ã‚³ãƒ³ãƒ‘イルã®ãŸã³ã«ãƒ„ールã«ã‚ーストア/ã‚ー パスワードを入力ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。</li> @@ -198,8 +198,8 @@ page.title=アプリケーションã¸ã®ç½²å <ul> <li>è‡ªåˆ†ãŒæ‰€æœ‰ã—ã¦ã„る。</li> <li>アプリケーションã§è˜åˆ¥ã•れるã€å€‹äººã€æ³•人ã€ã¾ãŸã¯çµ„ç¹”ã®å®Ÿä½“を表ã™ã€‚</li> -<li>アプリケーションã¾ãŸã¯ã‚¢ãƒ—リケーション スイートã®äºˆæœŸã•れる使用期間を超ãˆã‚‹æœ‰åŠ¹æœŸé–“ã‚’æŒã£ã¦ã„る。有効期間ã¨ã—ã¦ã€25 年以上を推奨ã—ã¾ã™ã€‚ -<p>アプリケーションを Android マーケットã«å…¬é–‹ã™ã‚‹äºˆå®šã®å ´åˆã€2033 å¹´ 10 月 22 æ—¥ã¾ã§ã®æœ‰åŠ¹æœŸé–“ãŒå¿…è¦ã§ã™ã€‚有効期間ãŒã“ã®æ—¥ä»˜ä»¥å‰ã«æœŸé™åˆ‡ã‚Œã«ãªã‚‹ã‚ーã§ç½²åã•れãŸã‚¢ãƒ—リケーションã¯ã€ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 +<li>アプリケーションã¾ãŸã¯ã‚¢ãƒ—リケーション スイートã®äºˆæœŸã•れる使用期間を超ãˆã‚‹æœ‰åŠ¹æœŸé–“ã‚’æŒã£ã¦ã„る。有効期間ã¨ã—ã¦ã€25 年以上を推奨ã—ã¾ã™ã€‚ +<p>アプリケーションを Android マーケットã«å…¬é–‹ã™ã‚‹äºˆå®šã®å ´åˆã€2033 å¹´ 10 月 22 æ—¥ã¾ã§ã®æœ‰åŠ¹æœŸé–“ãŒå¿…è¦ã§ã™ã€‚有効期間ãŒã“ã®æ—¥ä»˜ä»¥å‰ã«æœŸé™åˆ‡ã‚Œã«ãªã‚‹ã‚ーã§ç½²åã•れãŸã‚¢ãƒ—リケーションã¯ã€ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 </p></li> <li>Android SDK ツールã§ç”Ÿæˆã•れãŸãƒ‡ãƒãƒƒã‚° ã‚ーã§ã¯ãªã„。 </li> </ul> @@ -248,7 +248,7 @@ page.title=アプリケーションã¸ã®ç½²å <p>秘密éµã‚’生æˆã™ã‚‹ Keytool コマンドã®ä¾‹ã‚’示ã—ã¾ã™ã€‚</p> -<pre>$ keytool -genkey -v -keystore my-release-key.keystore +<pre>$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 10000</pre> <p>上記ã®ã‚³ãƒžãƒ³ãƒ‰ä¾‹ã‚’実行ã™ã‚‹ã¨ã€Keytool ã‹ã‚‰ã‚ーストアã¨ã‚ーã®ãƒ‘スワードã¨ã€ã‚ーã®è˜åˆ¥åãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®æŒ‡å®šãŒæ±‚ã‚られã¾ã™ã€‚ã‚ーストア㌠<code>my-release-key.keystore</code> ã¨ã„ã†ãƒ•ァイルã¨ã—ã¦ç”Ÿæˆã•れã¾ã™ã€‚ã‚ーストアã¨ã‚ーã¯ã€å…¥åŠ›ã—ãŸãƒ‘スワードã§ä¿è·ã•れã¾ã™ã€‚ã‚ーストアã«ã¯ 1 ã¤ã®ã‚ーãŒå«ã¾ã‚Œã€10000 日間有効ã§ã™ã€‚エイリアスã¯ã€å¾Œã§ä½¿ç”¨ã™ã‚‹åå‰ã§ã€ã‚¢ãƒ—リケーションã«ç½²åã™ã‚‹ã¨ãã«ã“ã®ã‚ーストアをå‚ç…§ã™ã‚‹åå‰ã§ã™ã€‚ </p> @@ -282,10 +282,10 @@ href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security">http://java.sun.co </tr> </table> -<p>Jarsigner を使用ã—㦠<code>my_application.apk</code> ã¨ã„ã†ã‚¢ãƒ—リケーション パッケージã«ç½²åã™ã‚‹ä¾‹ã‚’ã€ä¸Šè¨˜ã§ä½œæˆã—ãŸã‚ーストアを使用ã—ã¦ç¤ºã—ã¾ã™ã€‚ +<p>Jarsigner を使用ã—㦠<code>my_application.apk</code> ã¨ã„ã†ã‚¢ãƒ—リケーション パッケージã«ç½²åã™ã‚‹ä¾‹ã‚’ã€ä¸Šè¨˜ã§ä½œæˆã—ãŸã‚ーストアを使用ã—ã¦ç¤ºã—ã¾ã™ã€‚ </p> -<pre>$ jarsigner -verbose -keystore my-release-key.keystore +<pre>$ jarsigner -verbose -keystore my-release-key.keystore my_application.apk alias_name</pre> <p>上記ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨ã€Jarsigner ã‹ã‚‰ã‚ーストアã¨ã‚ーã®ãƒ‘スワードã®å…¥åŠ›ãŒæ±‚ã‚られã¾ã™ã€‚.apk ãŒãã®å ´ã§å¤‰æ›´ã•れã€.apk ã¯ç½²åã•れã¾ã™ã€‚.apk ã«åˆ¥ã®ã‚ーã§è¤‡æ•°å›žç½²åã§ãã¾ã™ã€‚</p> diff --git a/docs/html-intl/intl/ja/guide/publishing/preparing.jd b/docs/html-intl/intl/ja/guide/publishing/preparing.jd index c7a29509aeea..a86f70ceb19c 100644 --- a/docs/html-intl/intl/ja/guide/publishing/preparing.jd +++ b/docs/html-intl/intl/ja/guide/publishing/preparing.jd @@ -68,7 +68,7 @@ href="{@docRoot}tools/publishing/publishing.html#market">Android マーケット <h3 id="eula">2. アプリケーションã¸ã®ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ ライセンス契約ã®è¿½åŠ ã‚’æ¤œè¨Žã™ã‚‹</h3> -<p>個人ã€çµ„ç¹”ã€çŸ¥çš„財産をä¿è·ã™ã‚‹ãŸã‚ã€ã‚¢ãƒ—リケーションã®ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ ライセンス契約(EULAï¼‰ã‚’ä»˜åŠ ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚ +<p>個人ã€çµ„ç¹”ã€çŸ¥çš„財産をä¿è·ã™ã‚‹ãŸã‚ã€ã‚¢ãƒ—リケーションã®ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ ライセンス契約(EULAï¼‰ã‚’ä»˜åŠ ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚ <h3 id="iconlabel">3. アプリケーションã®ãƒžãƒ‹ãƒ•ェストã«ã‚¢ã‚¤ã‚³ãƒ³ã¨ãƒ©ãƒ™ãƒ«ã‚’指定ã™ã‚‹</h3> diff --git a/docs/html-intl/intl/ja/guide/publishing/versioning.jd b/docs/html-intl/intl/ja/guide/publishing/versioning.jd index 192861053499..4da05bfa41e7 100644 --- a/docs/html-intl/intl/ja/guide/publishing/versioning.jd +++ b/docs/html-intl/intl/ja/guide/publishing/versioning.jd @@ -48,13 +48,13 @@ page.title=アプリケーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚° <p>アプリケーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’å®šç¾©ã™ã‚‹ã«ã¯ã€ã‚¢ãƒ—リケーションã®ãƒžãƒ‹ãƒ•ェスト ファイルã§å±žæ€§ã‚’è¨å®šã—ã¾ã™ã€‚2 ã¤ã®å±žæ€§ã‚’使用ã§ãã€å¸¸ã«ã“ã®ä¸¡æ–¹ã«å€¤ã‚’定義ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¦ã„ã¾ã™: </p> <ul> -<li><code>android:versionCode</code> - アプリケーション コードã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ä»–ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ç›¸å¯¾çš„ã«ç¤ºã™æ•´æ•°å€¤ã€‚ +<li><code>android:versionCode</code> - アプリケーション コードã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ä»–ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ç›¸å¯¾çš„ã«ç¤ºã™æ•´æ•°å€¤ã€‚ <p>ã“ã®å€¤ã¯æ•´æ•°ãªã®ã§ã€ãã®ä»–ã®ã‚¢ãƒ—リケーションã¯ãƒ—ãƒã‚°ãƒ©ãƒ ã§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å€¤ã‚’評価ã—ã¦é–¢ä¿‚を確èªã§ãã¾ã™ï¼ˆãŸã¨ãˆã°ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¢ãƒƒãƒ—グレードã‹ãƒ€ã‚¦ãƒ³ã‚°ãƒ¬ãƒ¼ãƒ‰ãªã®ã‹ã€ãªã©ï¼‰ã€‚ä»»æ„ã®æ•´æ•°å€¤ã‚’è¨å®šã§ãã¾ã™ãŒã€ã‚¢ãƒ—リケーションã®å¾Œç¶šã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€ç¾åœ¨ã‚ˆã‚Šå¤§ããªå€¤ã‚’使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。システムã§ã¯ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã®åŸºæº–を強制ã—ã¾ã›ã‚“ãŒã€å¾Œç¶™ãƒªãƒªãƒ¼ã‚¹ã®å€¤ã‚’å¢—åŠ ã•ã›ã‚‹ã“ã¨ã¯æ¨™æº–çš„ã§ã™ã€‚ </p> <p>通常ã€ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æœ€åˆã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® versionCode ã‚’ 1 ã«è¨å®šã—ã¦ãƒªãƒªãƒ¼ã‚¹ã—ã€ãã®å¾Œã¯å„リリースã«ã¤ã„ã¦ã€ãƒªãƒªãƒ¼ã‚¹ãŒãƒ¡ã‚¸ãƒ£ãƒ¼ リリースã§ã‚ã£ã¦ã‚‚マイナー リリースã§ã‚ã£ã¦ã‚‚ã€å€¤ã‚’å˜èª¿å¢—åŠ ã•ã›ã¾ã™ã€‚ã“れã¯ã€<code>android:versionCode</code> ã®å€¤ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れるアプリケーション リリース ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨é¡žä¼¼ã—ã¦ã„ã‚‹å¿…è¦æ€§ã¯ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚以下㮠<code>android:versionName</code> ã‚’ã”覧ãã ã•ã„。アプリケーションã¨å…¬é–‹ã‚µãƒ¼ãƒ“スã§ã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å€¤ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。</p> </li> -<li><code>android:versionName</code> - アプリケーション コードã®ãƒªãƒªãƒ¼ã‚¹ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¡¨ã™æ–‡å—列値ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れる値ã§ã™ã€‚ +<li><code>android:versionName</code> - アプリケーション コードã®ãƒªãƒªãƒ¼ã‚¹ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¡¨ã™æ–‡å—列値ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れる値ã§ã™ã€‚ <p>å€¤ã¯æ–‡å—列ãªã®ã§ã€ã‚¢ãƒ—リケーション ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’「<major>.<minor>.<point>ã€ã¨ã„ã£ãŸæ–‡å—列やã€ãã®ä»–ã®ã‚¿ã‚¤ãƒ—ã®çµ¶å¯¾çš„ã¾ãŸã¯ç›¸å¯¾çš„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ ID ã¨ã—ã¦è¨˜è¿°ã§ãã¾ã™ã€‚ </p> <p><code>android:versionCode</code> ã®å ´åˆã¨åŒæ§˜ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã“ã®å€¤ã‚’アプリケーションã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã™ã‚‹ä»¥å¤–ã®ç›®çš„ã§å†…部的ã«åˆ©ç”¨ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。公開サービスã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã™ã‚‹ãŸã‚ã« <code>android:versionName</code> 値をå–り出ã™å¯èƒ½æ€§ã‚‚ã‚りã¾ã™ã€‚</p> @@ -79,7 +79,7 @@ page.title=アプリケーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚° <p>ã“ã®ä¾‹ã§ã¯ã€<code>android:versionCode</code> 値ã¯ç¾åœ¨ã® .apk ãŒã“ã®ã‚¢ãƒ—リケーション コード㮠2 番目ã®ãƒªãƒªãƒ¼ã‚¹ã‚’å«ã‚“ã§ã„ã‚‹ã“ã¨ã‚’表ã—ã€ã“れ㯠<code>android:codeName</code> æ–‡å—列ãŒç¤ºã™ã‚ˆã†ã«ãƒžã‚¤ãƒŠãƒ¼å¾Œç¶™ãƒªãƒªãƒ¼ã‚¹ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ </p> -<p>Android フレームワークã«ã¯ã€ã‚¢ãƒ—リケーションãŒã‚·ã‚¹ãƒ†ãƒ ã«åˆ¥ã®ã‚¢ãƒ—リケーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’å•ã„åˆã‚ã›ã‚‹ API ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’å–å¾—ã™ã‚‹ãŸã‚ã€ã‚¢ãƒ—リケーション㯠{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)} +<p>Android フレームワークã«ã¯ã€ã‚¢ãƒ—リケーションãŒã‚·ã‚¹ãƒ†ãƒ ã«åˆ¥ã®ã‚¢ãƒ—リケーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’å•ã„åˆã‚ã›ã‚‹ API ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’å–å¾—ã™ã‚‹ãŸã‚ã€ã‚¢ãƒ—リケーション㯠{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)} method of {@link android.content.pm.PackageManager PackageManager}. </p> を使用ã—ã¾ã™ã€‚ <h2 id="minsdkversion">最å°ã‚·ã‚¹ãƒ†ãƒ API ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æŒ‡å®š</h2> @@ -89,7 +89,7 @@ method of {@link android.content.pm.PackageManager PackageManager}. </p> を使ç <p>最å°ã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒžãƒ‹ãƒ•ã‚§ã‚¹ãƒˆã«æŒ‡å®šã™ã‚‹ã«ã¯ã€æ¬¡ã®å±žæ€§ã‚’使用ã—ã¾ã™: </p> <ul> -<li><code>android:minSdkVersion</code> - Android プラットフォームã®ã‚³ãƒ¼ãƒ‰ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾å¿œã™ã‚‹æ•´æ•°å€¤ã€‚ +<li><code>android:minSdkVersion</code> - Android プラットフォームã®ã‚³ãƒ¼ãƒ‰ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾å¿œã™ã‚‹æ•´æ•°å€¤ã€‚ <p>アプリケーションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’準備ã™ã‚‹éš›ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã“ã®å±žæ€§ã®å€¤ã‚’確èªã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨æ¯”較ã—ã¾ã™ã€‚<code>android:minSdkVersion</code> 値ãŒã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚大ãã„å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã‚¢ãƒ—リケーションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’䏿¢ã—ã¾ã™ã€‚ </p> <p>ã“ã®å±žæ€§ã‚’ãƒžãƒ‹ãƒ•ã‚§ã‚¹ãƒˆã«æŒ‡å®šã—ãªã„å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã‚¢ãƒ—リケーションãŒã™ã¹ã¦ã®ãƒ—ラットフォームãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨äº’æ›æ€§ãŒã‚ã‚‹ã¨ä»®å®šã—ã¾ã™ã€‚</p></li> diff --git a/docs/html-intl/intl/ja/guide/topics/fundamentals.jd b/docs/html-intl/intl/ja/guide/topics/fundamentals.jd index d76c92e22ed1..2517073d96c7 100644 --- a/docs/html-intl/intl/ja/guide/topics/fundamentals.jd +++ b/docs/html-intl/intl/ja/guide/topics/fundamentals.jd @@ -80,10 +80,10 @@ Android ã®å¤§ããªç‰¹é•·ã® 1 ã¤ã¯ã€è¨±å¯ã•れã¦ã„れã°ã€ã‚るアプ <dl> <dt><b>アクティビティ</b></dt> -<dd>アクティビティã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ 1 ã¤ã®æ“作を集ä¸çš„ã«è¡Œã†ãŸã‚ã®è¦–覚的ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを表ã—ã¾ã™ã€‚<i></i>ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒé¸æŠžã§ãるメニュー アイテムã®ä¸€è¦§ã‚’表示ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティやã€å†™çœŸã‚’ã‚ャプション付ãã§è¡¨ç¤ºã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãªã©ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚SMS アプリケーションãªã‚‰ã€ã‚るアクティビティã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã™ã‚‹é€£çµ¡å…ˆã®ä¸€è¦§ã‚’表示ã—ã€åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§é¸æŠžã—ãŸé€£çµ¡å…ˆã¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’入力ã—ã€ãã®ä»–ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§å¤ã„メッセージをå‚ç…§ã—ãŸã‚Šè¨å®šã‚’変更ã—ãŸã‚Šã§ãã¾ã™ã€‚ã“れらã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを組ã¿åˆã‚ã›ã¦å…¨ä½“ã¨ã—ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを形æˆã—ã¾ã™ãŒã€ãれãžã‚Œã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ç›¸äº’ã«ç‹¬ç«‹ã—ã¦ã„ã¾ã™ã€‚å„アクティビティã¯ã€{@link android.app.Activity} 基本クラスã®ã‚µãƒ–クラスã¨ã—ã¦å®Ÿè£…ã•れã¾ã™ã€‚ +<dd>アクティビティã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ 1 ã¤ã®æ“作を集ä¸çš„ã«è¡Œã†ãŸã‚ã®è¦–覚的ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを表ã—ã¾ã™ã€‚<i></i>ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒé¸æŠžã§ãるメニュー アイテムã®ä¸€è¦§ã‚’表示ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティやã€å†™çœŸã‚’ã‚ャプション付ãã§è¡¨ç¤ºã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãªã©ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚SMS アプリケーションãªã‚‰ã€ã‚るアクティビティã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã™ã‚‹é€£çµ¡å…ˆã®ä¸€è¦§ã‚’表示ã—ã€åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§é¸æŠžã—ãŸé€£çµ¡å…ˆã¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’入力ã—ã€ãã®ä»–ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§å¤ã„メッセージをå‚ç…§ã—ãŸã‚Šè¨å®šã‚’変更ã—ãŸã‚Šã§ãã¾ã™ã€‚ã“れらã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを組ã¿åˆã‚ã›ã¦å…¨ä½“ã¨ã—ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを形æˆã—ã¾ã™ãŒã€ãれãžã‚Œã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ç›¸äº’ã«ç‹¬ç«‹ã—ã¦ã„ã¾ã™ã€‚å„アクティビティã¯ã€{@link android.app.Activity} 基本クラスã®ã‚µãƒ–クラスã¨ã—ã¦å®Ÿè£…ã•れã¾ã™ã€‚ <p> -アプリケーションã¯ã€1 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã™ã‚‹ã“ã¨ã‚‚ã€ä¸Šè¨˜ã®SMS アプリケーションã®ã‚ˆã†ã«è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã©ã®ã‚ˆã†ãªã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã„ãã¤å¿…è¦ã«ãªã‚‹ã‹ã¯ã€ã‚¢ãƒ—リケーションやãã®è¨è¨ˆã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚通常ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã†ã¡ã®ã„ãšã‚Œã‹ã‚’最åˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦æŒ‡å®šã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リケーションを起動ã—ãŸã¨ãã«è¡¨ç¤ºã—ã¾ã™ã€‚ã‚るアクティビティã‹ã‚‰åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ç§»å‹•ã™ã‚‹ã«ã¯ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¾ã™ã€‚ +アプリケーションã¯ã€1 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã™ã‚‹ã“ã¨ã‚‚ã€ä¸Šè¨˜ã®SMS アプリケーションã®ã‚ˆã†ã«è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã©ã®ã‚ˆã†ãªã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã„ãã¤å¿…è¦ã«ãªã‚‹ã‹ã¯ã€ã‚¢ãƒ—リケーションやãã®è¨è¨ˆã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚通常ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã†ã¡ã®ã„ãšã‚Œã‹ã‚’最åˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦æŒ‡å®šã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リケーションを起動ã—ãŸã¨ãã«è¡¨ç¤ºã—ã¾ã™ã€‚ã‚るアクティビティã‹ã‚‰åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ç§»å‹•ã™ã‚‹ã«ã¯ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¾ã™ã€‚ </p> <p> @@ -105,7 +105,7 @@ Android ã®å¤§ããªç‰¹é•·ã® 1 ã¤ã¯ã€è¨±å¯ã•れã¦ã„れã°ã€ã‚るアプ 典型的ãªä¾‹ã¨ã—ã¦ã¯ã€ãƒ—ãƒ¬ã‚¤ãƒªã‚¹ãƒˆã®æ›²ã‚’å†ç”Ÿã™ã‚‹ãƒ¡ãƒ‡ã‚£ã‚¢ ãƒ—ãƒ¬ãƒ¼ãƒ¤ãƒ¼ãŒæŒ™ã’られã¾ã™ã€‚プレーヤー アプリケーションã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ›²ã‚’é¸ã‚“ã§å†ç”Ÿã™ã‚‹ãŸã‚ã® 1 ã¤ä»¥ä¸Šã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒäºˆæƒ³ã•れã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒ—レーヤーを離れã¦åˆ¥ã®æ“作ã«ç§»ã£ãŸå¾Œã‚‚曲をèžã„ã¦ã„ãŸã„ã¨è€ƒãˆã‚‰ã‚Œã‚‹ã“ã¨ã‹ã‚‰ã€æ›²ã®å†ç”Ÿè‡ªä½“をアクティビティã§å‡¦ç†ã™ã‚‹ã‚ã‘ã«ã¯ã„ãã¾ã›ã‚“。音楽ã®å†ç”Ÿã‚’ç¶šã‘ã‚‹ã«ã¯ã€ãƒ¡ãƒ‡ã‚£ã‚¢ プレーヤー アクティビティã‹ã‚‰ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã‚µãƒ¼ãƒ“スを開始ã—ã¾ã™ã€‚音楽å†ç”Ÿã‚µãƒ¼ãƒ“スã¯ã€ãれを開始ã—ãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç”»é¢ä¸Šã«è¦‹ãˆãªããªã£ãŸå¾Œã‚‚ãã®ã¾ã¾å®Ÿè¡Œã•れã¾ã™ã€‚ </p> -<p> +<p> ã¾ãŸã€å®Ÿè¡Œä¸ã®ã‚µãƒ¼ãƒ“ã‚¹ã«æŽ¥ç¶šï¼ˆãƒã‚¤ãƒ³ãƒ‰ï¼‰ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼ˆå®Ÿè¡Œã•れã¦ã„ãªã„å ´åˆã¯ãã®ã‚µãƒ¼ãƒ“スを開始ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ï¼‰ã€‚接続ä¸ã¯ã€ã‚µãƒ¼ãƒ“スãŒå…¬é–‹ã—ã¦ã„るインターフェースを使ã£ã¦ã‚µãƒ¼ãƒ“スã¨å¯¾è©±ã§ãã¾ã™ã€‚音楽å†ç”Ÿã‚µãƒ¼ãƒ“スã§ã‚れã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使ã£ã¦ä¸€æ™‚åœæ¢ã€å·»ã戻ã—ã€åœæ¢ã€å†ç”Ÿã®å†é–‹ãªã©ã®æ“作を実行ã§ãるよã†ã«ã—ã¾ã™ã€‚ </p> @@ -121,11 +121,11 @@ Android ã®å¤§ããªç‰¹é•·ã® 1 ã¤ã¯ã€è¨±å¯ã•れã¦ã„れã°ã€ã‚るアプ </p> <p> -ブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを表示ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ãŸã ã—ã€å—ä¿¡ã—ãŸæƒ…å ±ã¸ã®å¿œç”ã¨ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ãŸã‚Šã€{@link android.app.NotificationManager} を使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¢ãƒ©ãƒ¼ãƒˆã‚’é€ä¿¡ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã‚りã¾ã™ã€‚通知ã®éš›ã«ã¯ã€ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã‚’点滅ã•ã›ã‚‹ã€ãƒã‚¤ãƒ–レーションを起動ã™ã‚‹ã€éŸ³ã‚’鳴らã™ãªã©ã€ã•ã¾ã–ã¾ãªæ–¹æ³•ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ³¨æ„ã‚’å–šèµ·ã§ãã¾ã™ã€‚通常ã¯ã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ ãƒãƒ¼ã«æ°¸ç¶šã‚¢ã‚¤ã‚³ãƒ³ã‚’表示ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“れを開ã„ã¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å–å¾—ã§ãるよã†ã«ã—ã¾ã™ã€‚ +ブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを表示ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ãŸã ã—ã€å—ä¿¡ã—ãŸæƒ…å ±ã¸ã®å¿œç”ã¨ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ãŸã‚Šã€{@link android.app.NotificationManager} を使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¢ãƒ©ãƒ¼ãƒˆã‚’é€ä¿¡ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã‚りã¾ã™ã€‚通知ã®éš›ã«ã¯ã€ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã‚’点滅ã•ã›ã‚‹ã€ãƒã‚¤ãƒ–レーションを起動ã™ã‚‹ã€éŸ³ã‚’鳴らã™ãªã©ã€ã•ã¾ã–ã¾ãªæ–¹æ³•ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ³¨æ„ã‚’å–šèµ·ã§ãã¾ã™ã€‚通常ã¯ã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ ãƒãƒ¼ã«æ°¸ç¶šã‚¢ã‚¤ã‚³ãƒ³ã‚’表示ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“れを開ã„ã¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å–å¾—ã§ãるよã†ã«ã—ã¾ã™ã€‚ </p></dd> <dt><b>コンテンツ プãƒãƒã‚¤ãƒ€</b></dt> -<dd>コンテンツ プãƒãƒã‚¤ãƒ€ã¯ã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ¼ã‚¿ã‚’ä»–ã®ã‚¢ãƒ—リケーションã§ã‚‚利用ã§ãるよã†ã«ã—ã¾ã™ã€‚<i></i>データã¯ã€ãƒ•ァイル システムや SQLite データベースãªã©ã€ä¸€èˆ¬ã«åˆ©ç”¨ã§ãã‚‹æ–¹æ³•ã§æ ¼ç´ã•れã¦ã„れã°ä½¿ç”¨ã§ãã¾ã™ã€‚コンテンツ プãƒãƒã‚¤ãƒ€ã¯ã€{@link android.content.ContentProvider} åŸºæœ¬ã‚¯ãƒ©ã‚¹ã®æ‹¡å¼µã§ã™ã€‚プãƒãƒã‚¤ãƒ€ãŒåˆ¶å¾¡ã™ã‚‹åž‹ã®ãƒ‡ãƒ¼ã‚¿ã‚’ã€ä»–ã®ã‚¢ãƒ—リケーションã‹ã‚‰å–å¾—ãŠã‚ˆã³æ ¼ç´ã™ã‚‹ãŸã‚ã®æ¨™æº–メソッド セットを実装ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’アプリケーションã‹ã‚‰ç›´æŽ¥å‘¼ã³å‡ºã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。代ã‚りã«ã€{@link android.content.ContentResolver} オブジェクトã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ã¾ã™ã€‚ContentResolver ã¯ã€ã™ã¹ã¦ã®ãƒ—ãƒãƒã‚¤ãƒ€ã¨é€šä¿¡ã§ãã€ãƒ—ãƒãƒã‚¤ãƒ€ã¨é€£æºã—ã¦é–¢ä¿‚ã®ã‚ã‚‹ã™ã¹ã¦ã®ãƒ—ãƒã‚»ã‚¹é–“通信を管ç†ã—ã¾ã™ã€‚ +<dd>コンテンツ プãƒãƒã‚¤ãƒ€ã¯ã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ¼ã‚¿ã‚’ä»–ã®ã‚¢ãƒ—リケーションã§ã‚‚利用ã§ãるよã†ã«ã—ã¾ã™ã€‚<i></i>データã¯ã€ãƒ•ァイル システムや SQLite データベースãªã©ã€ä¸€èˆ¬ã«åˆ©ç”¨ã§ãã‚‹æ–¹æ³•ã§æ ¼ç´ã•れã¦ã„れã°ä½¿ç”¨ã§ãã¾ã™ã€‚コンテンツ プãƒãƒã‚¤ãƒ€ã¯ã€{@link android.content.ContentProvider} åŸºæœ¬ã‚¯ãƒ©ã‚¹ã®æ‹¡å¼µã§ã™ã€‚プãƒãƒã‚¤ãƒ€ãŒåˆ¶å¾¡ã™ã‚‹åž‹ã®ãƒ‡ãƒ¼ã‚¿ã‚’ã€ä»–ã®ã‚¢ãƒ—リケーションã‹ã‚‰å–å¾—ãŠã‚ˆã³æ ¼ç´ã™ã‚‹ãŸã‚ã®æ¨™æº–メソッド セットを実装ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’アプリケーションã‹ã‚‰ç›´æŽ¥å‘¼ã³å‡ºã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。代ã‚りã«ã€{@link android.content.ContentResolver} オブジェクトã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ã¾ã™ã€‚ContentResolver ã¯ã€ã™ã¹ã¦ã®ãƒ—ãƒãƒã‚¤ãƒ€ã¨é€šä¿¡ã§ãã€ãƒ—ãƒãƒã‚¤ãƒ€ã¨é€£æºã—ã¦é–¢ä¿‚ã®ã‚ã‚‹ã™ã¹ã¦ã®ãƒ—ãƒã‚»ã‚¹é–“通信を管ç†ã—ã¾ã™ã€‚ <p> コンテンツ プãƒãƒã‚¤ãƒ€ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦è©³ã—ãã¯ã€<a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>ã®ãƒ‰ã‚ュメントをã”覧ãã ã•ã„。 @@ -134,40 +134,40 @@ Android ã®å¤§ããªç‰¹é•·ã® 1 ã¤ã¯ã€è¨±å¯ã•れã¦ã„れã°ã€ã‚るアプ </dl> <p> -Android ã§ã¯ã€ç‰¹å®šã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§å‡¦ç†ã™ã¹ãリクエストãŒã‚ã‚‹ã¨ã€ãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¢ãƒ—リケーション プãƒã‚»ã‚¹ãŒå®Ÿè¡Œä¸ã‹ã©ã†ã‹ã‚’確èªï¼ˆå¿…è¦ã«å¿œã˜ã¦ãƒ—ãƒã‚»ã‚¹ã‚’開始)ã—ã€ãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®é©åˆ‡ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåˆ©ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’確èªï¼ˆå¿…è¦ã«å¿œã˜ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆï¼‰ã—ã¾ã™ã€‚ +Android ã§ã¯ã€ç‰¹å®šã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§å‡¦ç†ã™ã¹ãリクエストãŒã‚ã‚‹ã¨ã€ãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¢ãƒ—リケーション プãƒã‚»ã‚¹ãŒå®Ÿè¡Œä¸ã‹ã©ã†ã‹ã‚’確èªï¼ˆå¿…è¦ã«å¿œã˜ã¦ãƒ—ãƒã‚»ã‚¹ã‚’開始)ã—ã€ãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®é©åˆ‡ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåˆ©ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’確èªï¼ˆå¿…è¦ã«å¿œã˜ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆï¼‰ã—ã¾ã™ã€‚ </p> -<h3 id="actcomp">コンãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化: インテント</h3> +<h3 id="actcomp">コンãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化: インテント</h3> <p> コンテンツ プãƒãƒã‚¤ãƒ€ã¯ã€ContentResolver ã‹ã‚‰ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å¯¾è±¡ã«ãªã‚‹ã¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化ã•れã¾ã™ã€‚ãれ以外㮠3 ã¤ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆï¼ˆã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã€ã‚µãƒ¼ãƒ“スã€ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒï¼‰ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã¨å‘¼ã°ã‚Œã‚‹éžåŒæœŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã‚ˆã£ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化ã•れã¾ã™ã€‚<i></i>インテントã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ä¿æŒã™ã‚‹ {@link android.content.Intent} オブジェクトã§ã™ã€‚アクティビティやサービスã®å ´åˆã® Intent オブジェクトã®ä¸»ãªå½¹å‰²ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã•れã¦ã„るアクションを指åã—ã€ãã®å¯¾è±¡ã¨ãªã‚‹ãƒ‡ãƒ¼ã‚¿ã® URI を指定ã™ã‚‹ã“ã¨ã§ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç”»åƒã‚’表示ã™ã‚‹ãŸã‚ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚„ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒ†ã‚ストを編集ã•ã›ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’アクティビティã«ä¼é”ã§ãã¾ã™ã€‚ブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã®å ´åˆã¯ã€Intent オブジェクトãŒã“れã‹ã‚‰é€šçŸ¥ã‚’行ã†ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’指åã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚«ãƒ¡ãƒ©ã®ãƒœã‚¿ãƒ³ãŒæŠ¼ã•れãŸã“ã¨ã‚’ã€é–¢ä¿‚ã®ã‚るブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã«é€šçŸ¥ã§ãã¾ã™ã€‚ </p> <p> -以下ã«ç¤ºã™ã‚ˆã†ã«ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¿ã‚¤ãƒ—ã”ã¨ã«åˆ¥ã€…ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化メソッドãŒç”¨æ„ã•れã¦ã„ã¾ã™: +以下ã«ç¤ºã™ã‚ˆã†ã«ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¿ã‚¤ãƒ—ã”ã¨ã«åˆ¥ã€…ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化メソッドãŒç”¨æ„ã•れã¦ã„ã¾ã™: </p> <ul> -<li>アクティビティを起動ã™ã‚‹ï¼ˆã¾ãŸã¯ä½•ã‹æ–°ã—ã„処ç†ã‚’実行ã•ã›ã‚‹ï¼‰ã«ã¯ã€Intent オブジェクトを <code>{@link android.content.Context#startActivity -Context.startActivity()}</code> ã¾ãŸã¯ <code>{@link -android.app.Activity#startActivityForResult -Activity.startActivityForResult()}</code> ã«æ¸¡ã—ã¾ã™ã€‚応ç”アクティビティ㧠<code>{@link android.app.Activity#getIntent getIntent()}</code> メソッドを呼ã³å‡ºã™ã¨ã€æœ€åˆã«ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒèµ·å‹•ã•れãŸã¨ãã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®å†…容を確èªã§ãã¾ã™ã€‚Android ã«ã‚ˆã£ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>{@link +<li>アクティビティを起動ã™ã‚‹ï¼ˆã¾ãŸã¯ä½•ã‹æ–°ã—ã„処ç†ã‚’実行ã•ã›ã‚‹ï¼‰ã«ã¯ã€Intent オブジェクトを <code>{@link android.content.Context#startActivity +Context.startActivity()}</code> ã¾ãŸã¯ <code>{@link +android.app.Activity#startActivityForResult +Activity.startActivityForResult()}</code> ã«æ¸¡ã—ã¾ã™ã€‚応ç”アクティビティ㧠<code>{@link android.app.Activity#getIntent getIntent()}</code> メソッドを呼ã³å‡ºã™ã¨ã€æœ€åˆã«ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒèµ·å‹•ã•れãŸã¨ãã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®å†…容を確èªã§ãã¾ã™ã€‚Android ã«ã‚ˆã£ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>{@link android.app.Activity#onNewIntent onNewIntent()}</code> メソッドãŒå‘¼ã³å‡ºã•れã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå¾Œç¶šã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«æ¸¡ã•れã¾ã™ã€‚ <p> -多ãã®å ´åˆã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¾ã™ã€‚é–‹å§‹ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰çµæžœãŒè¿”ã•ã‚Œã‚‹å ´åˆã¯ã€{@code startActivity()} ã§ã¯ãªã {@code startActivityForResult()} を呼ã³å‡ºã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å†™çœŸã‚’é¸æŠžã•ã›ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦é¸æŠžã•れãŸå†™çœŸãŒè¿”ã•れるã‹ã‚‚ã—れã¾ã›ã‚“ã€‚çµæžœã¯ã€å‘¼ã³å‡ºã—å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>{@link android.app.Activity#onActivityResult +多ãã®å ´åˆã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ã¾ã™ã€‚é–‹å§‹ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰çµæžœãŒè¿”ã•ã‚Œã‚‹å ´åˆã¯ã€{@code startActivity()} ã§ã¯ãªã {@code startActivityForResult()} を呼ã³å‡ºã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å†™çœŸã‚’é¸æŠžã•ã›ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦é¸æŠžã•れãŸå†™çœŸãŒè¿”ã•れるã‹ã‚‚ã—れã¾ã›ã‚“ã€‚çµæžœã¯ã€å‘¼ã³å‡ºã—å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>{@link android.app.Activity#onActivityResult onActivityResult()}</code> ãƒ¡ã‚½ãƒƒãƒ‰ã«æ¸¡ã—㟠Intent オブジェクトã§è¿”ã•れã¾ã™ã€‚ </p> </li> -<li><p>サービスを開始ã™ã‚‹ï¼ˆã¾ãŸã¯å®Ÿè¡Œä¸ã®ã‚µãƒ¼ãƒ“ã‚¹ã«æ–°ã—ã„æŒ‡ç¤ºã‚’与ãˆã‚‹ï¼‰ã«ã¯ã€<code>{@link -android.content.Context#startService Context.startService()}</code> ã« Intent オブジェクトを渡ã—ã¾ã™ã€‚Android ã«ã‚ˆã‚Šã€ã‚µãƒ¼ãƒ“ス㮠<code>{@link android.app.Service#onStart +<li><p>サービスを開始ã™ã‚‹ï¼ˆã¾ãŸã¯å®Ÿè¡Œä¸ã®ã‚µãƒ¼ãƒ“ã‚¹ã«æ–°ã—ã„æŒ‡ç¤ºã‚’与ãˆã‚‹ï¼‰ã«ã¯ã€<code>{@link +android.content.Context#startService Context.startService()}</code> ã« Intent オブジェクトを渡ã—ã¾ã™ã€‚Android ã«ã‚ˆã‚Šã€ã‚µãƒ¼ãƒ“ス㮠<code>{@link android.app.Service#onStart onStart()}</code> メソッドãŒå‘¼ã³å‡ºã•れ㦠Intent ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¸¡ã•れã¾ã™ã€‚</p> <p> -åŒæ§˜ã«ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’ <code>{@link +åŒæ§˜ã«ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’ <code>{@link android.content.Context#bindService Context.bindService()}</code> ã«æ¸¡ã™ã¨ã€å‘¼ã³å‡ºã—å´ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¨å¯¾è±¡ã¨ãªã‚‹ã‚µãƒ¼ãƒ“スã®é–“ã®ç¶™ç¶šä¸ã®æŽ¥ç¶šã‚’確立ã§ãã¾ã™ã€‚サービスã¯ã€<code>{@link android.app.Service#onBind onBind()}</code> 呼ã³å‡ºã—ã§ Intent オブジェクトをå—ã‘å–りã¾ã™ï¼ˆã‚µãƒ¼ãƒ“スãŒã¾ã é–‹å§‹ã•れã¦ã„ãªã„å ´åˆã¯ã€å¿…è¦ã«å¿œã˜ã¦ {@code bindService()} ã§é–‹å§‹ã§ãã¾ã™ï¼‰ã€‚ãŸã¨ãˆã°ã€ä¸Šã§ä¾‹ã«æŒ™ã’ãŸéŸ³æ¥½å†ç”Ÿã‚µãƒ¼ãƒ“スã¨ã®æŽ¥ç¶šã‚’確立ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを使用ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå†ç”Ÿã‚’æ“作ã™ã‚‹ãŸã‚ã®æ‰‹æ®µï¼ˆãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェース)をæä¾›ã§ãã¾ã™ã€‚アクティビティ㧠{@code bindService()} を呼ã³å‡ºã—ã¦æŽ¥ç¶šã‚’ç¢ºç«‹ã—ã¦ã‹ã‚‰ã€ã‚µãƒ¼ãƒ“スã«å®šç¾©ã•れã¦ã„るメソッドを呼ã³å‡ºã—ã¦å†ç”Ÿã‚’æ“作ã—ã¾ã™ã€‚ </p> @@ -176,10 +176,10 @@ android.content.Context#bindService Context.bindService()}</code> ã«æ¸¡ã™ã¨ã€ </p> </li> -<li><p>アプリケーションã§ãƒ–ãƒãƒ¼ãƒ‰ã‚ャストを開始ã™ã‚‹ã«ã¯ã€<code>{@link -android.content.Context#sendBroadcast(Intent) Context.sendBroadcast()}</code>ã€<code>{@link android.content.Context#sendOrderedBroadcast(Intent, String) -Context.sendOrderedBroadcast()}</code>ã€<code>{@link -android.content.Context#sendStickyBroadcast Context.sendStickyBroadcast()}</code> ãªã©ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ã„ãšã‚Œã‹ã®ãƒãƒªã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã« Intent オブジェクトを渡ã—ã¾ã™ã€‚Android ã«ã‚ˆã£ã¦ <code>{@link +<li><p>アプリケーションã§ãƒ–ãƒãƒ¼ãƒ‰ã‚ャストを開始ã™ã‚‹ã«ã¯ã€<code>{@link +android.content.Context#sendBroadcast(Intent) Context.sendBroadcast()}</code>ã€<code>{@link android.content.Context#sendOrderedBroadcast(Intent, String) +Context.sendOrderedBroadcast()}</code>ã€<code>{@link +android.content.Context#sendStickyBroadcast Context.sendStickyBroadcast()}</code> ãªã©ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ã„ãšã‚Œã‹ã®ãƒãƒªã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã« Intent オブジェクトを渡ã—ã¾ã™ã€‚Android ã«ã‚ˆã£ã¦ <code>{@link android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドãŒå‘¼ã³å‡ºã•れã€é–¢ä¿‚ã®ã‚ã‚‹ã™ã¹ã¦ã®ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã«ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆãŒé…ä¿¡ã•れã¾ã™ã€‚</p></li> </ul> @@ -213,7 +213,7 @@ android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドãŒå <h3 id="manfile">マニフェスト ファイル</h3> <p> -アプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€Android ãŒãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®å˜åœ¨ã‚’èªè˜ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚アプリケーションã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€ãƒžãƒ‹ãƒ•ェスト ファイルã§å®£è¨€ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã‚¢ãƒ—リケーションã®ã‚³ãƒ¼ãƒ‰ã€ãƒ•ァイルã€ãƒªã‚½ãƒ¼ã‚¹ãªã©ã¨ã¨ã‚‚ã« Android パッケージ({@code .apk} ファイル)ã«ãƒãƒ³ãƒ‰ãƒ«ã•れã¾ã™ã€‚ +アプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€Android ãŒãã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®å˜åœ¨ã‚’èªè˜ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚アプリケーションã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€ãƒžãƒ‹ãƒ•ェスト ファイルã§å®£è¨€ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã‚¢ãƒ—リケーションã®ã‚³ãƒ¼ãƒ‰ã€ãƒ•ァイルã€ãƒªã‚½ãƒ¼ã‚¹ãªã©ã¨ã¨ã‚‚ã« Android パッケージ({@code .apk} ファイル)ã«ãƒãƒ³ãƒ‰ãƒ«ã•れã¾ã™ã€‚ </p> <p> @@ -229,7 +229,7 @@ android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドãŒå <application . . . > <activity android:name="com.example.project.FreneticActivity" android:icon="@drawable/small_pic.png" - android:label="@string/freneticLabel" + android:label="@string/freneticLabel" . . . > </activity> . . . @@ -260,7 +260,7 @@ Intent オブジェクトã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’明示ç <application . . . > <activity android:name="com.example.project.FreneticActivity" android:icon="@drawable/small_pic.png" - android:label="@string/freneticLabel" + android:label="@string/freneticLabel" . . . > <intent-filter . . . > <action android:name="android.intent.action.MAIN" /> @@ -304,7 +304,7 @@ Intent オブジェクトã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’明示ç </p> <p> -ã“ã®å ´åˆã€ãƒžãƒƒãƒ— ビューアã¯åˆ¥ã®ã‚¢ãƒ—リケーションã§å®šç¾©ã•れã¦ãŠã‚Šã€ãã®ã‚¢ãƒ—リケーションã®ãƒ—ãƒã‚»ã‚¹ã§å®Ÿè¡Œã•れã¦ã„ã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦ã¯ãƒžãƒƒãƒ— ビューアãŒå…ƒã®ã‚¢ãƒ—リケーションã®ä¸€éƒ¨ã§ã‚ã‚‹ã‹ã®ã‚ˆã†ã«æ„Ÿã˜ã‚‰ã‚Œã¾ã™ã€‚Android ã§ã¯ã€ä¸¡æ–¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをåŒã˜ã‚¿ã‚¹ã‚¯ã«çµ„ã¿è¾¼ã‚€ã“ã¨ã§ã€ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスを実ç¾ã§ãã¾ã™ã€‚<i></i>ç°¡å˜ã«è¨€ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ 1 ã¤ã®ã€Œã‚¢ãƒ—リケーションã€ã¨æ„Ÿã˜ã‚‹ã‚‚ã®ãŒã‚¿ã‚¹ã‚¯ã§ã™ã€‚関連ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをスタックã«ã¾ã¨ã‚ãŸã‚‚ã®ãŒã‚¿ã‚¹ã‚¯ã§ã™ã€‚スタック内ã®ãƒ«ãƒ¼ãƒˆ アクティビティã¯ã€ã‚¿ã‚¹ã‚¯ã‚’é–‹å§‹ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã™ã€‚通常ã§ã‚れã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リケーション ランãƒãƒ£ã§é¸æŠžã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã“れã«ç›¸å½“ã—ã¾ã™ã€‚ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã«ã‚るアクティビティã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ç„¦ç‚¹ã¨ãªã£ã¦ã„る実行ä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã™ã€‚ã‚るアクティビティã‹ã‚‰åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹ã¨ã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ãŒæ–°ãŸã«ã‚¹ã‚¿ãƒƒã‚¯ã«ãƒ—ッシュã•れã¦å®Ÿè¡Œä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ãªã‚Šã¾ã™ã€‚1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚¹ã‚¿ãƒƒã‚¯å†…ã«æ®‹ã•れã¦ã„ã¾ã™ã€‚ユーザー㌠[[]戻る] ã‚ーを押ã™ã¨ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã‚¹ã‚¿ãƒƒã‚¯ã‹ã‚‰ãƒãƒƒãƒ—ã•れã€1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®Ÿè¡Œä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦å†é–‹ã•れã¾ã™ã€‚ +ã“ã®å ´åˆã€ãƒžãƒƒãƒ— ビューアã¯åˆ¥ã®ã‚¢ãƒ—リケーションã§å®šç¾©ã•れã¦ãŠã‚Šã€ãã®ã‚¢ãƒ—リケーションã®ãƒ—ãƒã‚»ã‚¹ã§å®Ÿè¡Œã•れã¦ã„ã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦ã¯ãƒžãƒƒãƒ— ビューアãŒå…ƒã®ã‚¢ãƒ—リケーションã®ä¸€éƒ¨ã§ã‚ã‚‹ã‹ã®ã‚ˆã†ã«æ„Ÿã˜ã‚‰ã‚Œã¾ã™ã€‚Android ã§ã¯ã€ä¸¡æ–¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをåŒã˜ã‚¿ã‚¹ã‚¯ã«çµ„ã¿è¾¼ã‚€ã“ã¨ã§ã€ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスを実ç¾ã§ãã¾ã™ã€‚<i></i>ç°¡å˜ã«è¨€ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ 1 ã¤ã®ã€Œã‚¢ãƒ—リケーションã€ã¨æ„Ÿã˜ã‚‹ã‚‚ã®ãŒã‚¿ã‚¹ã‚¯ã§ã™ã€‚関連ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをスタックã«ã¾ã¨ã‚ãŸã‚‚ã®ãŒã‚¿ã‚¹ã‚¯ã§ã™ã€‚スタック内ã®ãƒ«ãƒ¼ãƒˆ アクティビティã¯ã€ã‚¿ã‚¹ã‚¯ã‚’é–‹å§‹ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã™ã€‚通常ã§ã‚れã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リケーション ランãƒãƒ£ã§é¸æŠžã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã“れã«ç›¸å½“ã—ã¾ã™ã€‚ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã«ã‚るアクティビティã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ç„¦ç‚¹ã¨ãªã£ã¦ã„る実行ä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã™ã€‚ã‚るアクティビティã‹ã‚‰åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹ã¨ã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ãŒæ–°ãŸã«ã‚¹ã‚¿ãƒƒã‚¯ã«ãƒ—ッシュã•れã¦å®Ÿè¡Œä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ãªã‚Šã¾ã™ã€‚1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚¹ã‚¿ãƒƒã‚¯å†…ã«æ®‹ã•れã¦ã„ã¾ã™ã€‚ユーザー㌠[[]戻る] ã‚ーを押ã™ã¨ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã‚¹ã‚¿ãƒƒã‚¯ã‹ã‚‰ãƒãƒƒãƒ—ã•れã€1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®Ÿè¡Œä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦å†é–‹ã•れã¾ã™ã€‚ </p> <p> @@ -316,7 +316,7 @@ Intent オブジェクトã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’明示ç </p> <p> -タスク内ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã€1 ã¤ã®ãƒ¦ãƒ‹ãƒƒãƒˆã¨ã—ã¦ä¸€ç·’ã«ç§»å‹•ã—ã¾ã™ã€‚タスク全体(アクティビティ スタック全体)をフォアグラウンドã«ç§»å‹•ã—ãŸã‚Šã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã«ç§»å‹•ã—ãŸã‚Šã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã¯ 4 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰ãªã‚‹ã‚¹ã‚¿ãƒƒã‚¯ã§ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ä¸‹ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㌠3 ã¤ã‚ã‚‹ã¨ã—ã¾ã™ã€‚ã“ã“ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ [ホーム] ã‚ーを押ã—ã¦ã‚¢ãƒ—リケーション ランãƒãƒ£ã«ç§»å‹•ã—ã€æ–°ã—ã„アプリケーション(実際ã«ã¯æ–°ã—ã„ã‚¿ã‚¹ã‚¯ï¼‰ã‚’é¸æŠžã—ãŸã¨ã—ã¾ã™ã€‚<i></i>ã™ã‚‹ã¨ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã«ç§»å‹•ã—ã€æ–°ã—ã„タスクã®ãƒ«ãƒ¼ãƒˆ アクティビティãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã—ã°ã‚‰ãã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ›ãƒ¼ãƒ ç”»é¢ã«æˆ»ã‚Š 1 ã¤å‰ã®ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼ˆã‚¿ã‚¹ã‚¯ï¼‰ã‚’é¸æŠžã™ã‚‹ã¨ã€ãã®ã‚¿ã‚¹ã‚¯ãŒã‚¹ã‚¿ãƒƒã‚¯å†…ã® 4 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã¨ã‚‚ã«ãƒ•ォアグラウンドã«ç§»å‹•ã—ã¾ã™ã€‚ã“ã“ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ [戻る] ã‚ーを押ã—ã¦ã‚‚ã€ä¸æ–ã—ãŸã°ã‹ã‚Šã®ã‚¢ãƒ—リケーション(1 ã¤å‰ã®ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆ アクティビティ)ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。代ã‚りã«ã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒãƒãƒƒãƒ—ã•れã€åŒã˜ã‚¿ã‚¹ã‚¯ã® 1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒè¡¨ç¤ºã•れã¾ã™ã€‚ +タスク内ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã€1 ã¤ã®ãƒ¦ãƒ‹ãƒƒãƒˆã¨ã—ã¦ä¸€ç·’ã«ç§»å‹•ã—ã¾ã™ã€‚タスク全体(アクティビティ スタック全体)をフォアグラウンドã«ç§»å‹•ã—ãŸã‚Šã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã«ç§»å‹•ã—ãŸã‚Šã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã¯ 4 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã‹ã‚‰ãªã‚‹ã‚¹ã‚¿ãƒƒã‚¯ã§ã€ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ä¸‹ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㌠3 ã¤ã‚ã‚‹ã¨ã—ã¾ã™ã€‚ã“ã“ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ [ホーム] ã‚ーを押ã—ã¦ã‚¢ãƒ—リケーション ランãƒãƒ£ã«ç§»å‹•ã—ã€æ–°ã—ã„アプリケーション(実際ã«ã¯æ–°ã—ã„ã‚¿ã‚¹ã‚¯ï¼‰ã‚’é¸æŠžã—ãŸã¨ã—ã¾ã™ã€‚<i></i>ã™ã‚‹ã¨ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã«ç§»å‹•ã—ã€æ–°ã—ã„タスクã®ãƒ«ãƒ¼ãƒˆ アクティビティãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã—ã°ã‚‰ãã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ›ãƒ¼ãƒ ç”»é¢ã«æˆ»ã‚Š 1 ã¤å‰ã®ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼ˆã‚¿ã‚¹ã‚¯ï¼‰ã‚’é¸æŠžã™ã‚‹ã¨ã€ãã®ã‚¿ã‚¹ã‚¯ãŒã‚¹ã‚¿ãƒƒã‚¯å†…ã® 4 ã¤ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã¨ã‚‚ã«ãƒ•ォアグラウンドã«ç§»å‹•ã—ã¾ã™ã€‚ã“ã“ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ [戻る] ã‚ーを押ã—ã¦ã‚‚ã€ä¸æ–ã—ãŸã°ã‹ã‚Šã®ã‚¢ãƒ—リケーション(1 ã¤å‰ã®ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆ アクティビティ)ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。代ã‚りã«ã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒãƒãƒƒãƒ—ã•れã€åŒã˜ã‚¿ã‚¹ã‚¯ã® 1 ã¤å‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒè¡¨ç¤ºã•れã¾ã™ã€‚ </p> <p> @@ -330,7 +330,7 @@ Intent オブジェクトã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’明示ç <p> ã¾ãŸã€ä¸»ã«ä½¿ç”¨ã™ã‚‹ {@code <activity>} 属性ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™: - + <p style="margin-left: 2em">{@code taskAffinity} <br/>{@code launchMode} <br/>{@code allowTaskReparenting} <br/>{@code clearTaskOnLaunch} <br/>{@code alwaysRetainTaskState} <br/>{@code finishOnTaskLaunch}</p> <p> @@ -348,7 +348,7 @@ Intent オブジェクトã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’明示ç <dt><code>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</code> フラグ</dt> <dd>æ—¢ã«èª¬æ˜Žã—ãŸã¨ãŠã‚Šã€æ–°ã—ã„アクティビティã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ {@code startActivity()} を呼ã³å‡ºã—ãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦èµ·å‹•ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€å‘¼ã³å‡ºã—å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨åŒã˜ã‚¹ã‚¿ãƒƒã‚¯ã«ãƒ—ッシュã•れるã¨ã„ã†ã“ã¨ã§ã™ã€‚ã—ã‹ã—ã€{@code startActivity()} ã«æ¸¡ã•れ㟠Intent オブジェクト㫠{@code FLAG_ACTIVITY_NEW_TASK} フラグãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãã®æ–°ã—ã„アクティビティを別ã®ã‚¿ã‚¹ã‚¯ã«åŽå®¹ã—よã†ã¨ã—ã¾ã™ã€‚フラグã®åå‰ã‹ã‚‰ã‚‚判æ–ã§ãã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã¯æ–°ã—ã„タスクãŒé–‹å§‹ã•れã¾ã™ã€‚ãŸã ã—常ã«ãã†ãªã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“。既å˜ã®ã‚¿ã‚¹ã‚¯ã«æ–°ã—ã„アクティビティã¨åŒã˜è¦ªå’Œæ€§ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹å ´åˆã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ãã®ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦èµ·å‹•ã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã«ã¯ã€æ–°ã—ã„タスクãŒé–‹å§‹ã•れã¾ã™ã€‚</dd> -<dt><code><a +<dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">allowTaskReparenting</a></code> 属性</dt> <dd>{@code allowTaskReparenting} 属性㌠"{@code true}" ã«è¨å®šã•れã¦ã„るアクティビティã¯ã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨è¦ªå’Œæ€§ã®ã‚るタスクãŒãƒ•ォアグラウンドã«ç§»ã£ãŸã¨ãã«ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ãŸã‚¿ã‚¹ã‚¯ã‹ã‚‰è¦ªå’Œæ€§ã®ã‚るタスクã«ç§»å‹•ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€æ—…行アプリケーションã®ä¸€éƒ¨ã¨ã—ã¦ã€é¸æŠžã•れãŸéƒ½å¸‚ã®å¤©æ°—äºˆå ±ã‚’è¡¨ç¤ºã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®šç¾©ã•れã¦ã„ã‚‹ã¨ã—ã¾ã™ã€‚ã“ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ã¯ã€åŒã˜ã‚¢ãƒ—リケーション内ã®ä»–ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨åŒã˜è¦ªå’Œæ€§ï¼ˆãƒ‡ãƒ•ォルトã®è¦ªå’Œæ€§ï¼‰ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ãŒã€ãã®è¦ªã®å‰²ã‚Šå½“ã¦ã‚’変更ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã‚るアクティビティãŒå¤©æ°—äºˆå ±ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’é–‹å§‹ã™ã‚‹ã¨ã€ãã®æ™‚点ã§ã¯é–‹å§‹å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨åŒã˜ã‚¿ã‚¹ã‚¯ã«å±žã—ãŸçŠ¶æ…‹ã«ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€æ¬¡ã«æ—…行アプリケーションãŒãƒ•ォアグラウンドã«ç§»ã‚‹ã¨ã€å¤©æ°—äºˆå ±ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã®å‰²ã‚Šå½“ã¦ãŒå¤‰æ›´ã•ã‚Œã€æ—…行アプリケーションã®ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚</dd> </dl> @@ -372,29 +372,29 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">allowTaskR <ul> -<li><b>インテントã«å¿œç”ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをã©ã®ã‚¿ã‚¹ã‚¯ã«ä¿æŒã™ã‚‹ã‹</b>。"{@code standard}" ãŠã‚ˆã³ "{@code singleTop}" モードã®å ´åˆã¯ã€ãã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’é–‹å§‹ã—ãŸï¼ˆã¤ã¾ã‚Š <code>{@link android.content.Context#startActivity startActivity()}</code> を呼ã³å‡ºã—ãŸï¼‰ã‚¿ã‚¹ã‚¯ã«ä¿æŒã•れã¾ã™ã€‚ãŸã ã—ã€Intent オブジェクト㫠<code>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</code> フラグãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³<a href="#afftask">è¦ªå’Œæ€§ã¨æ–°ã—ã„タスク</a>ã§èª¬æ˜Žã—ãŸã¨ãŠã‚Šã€åˆ¥ã®ã‚¿ã‚¹ã‚¯ãŒé¸æŠžã•れã¾ã™ã€‚ +<li><b>インテントã«å¿œç”ã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをã©ã®ã‚¿ã‚¹ã‚¯ã«ä¿æŒã™ã‚‹ã‹</b>。"{@code standard}" ãŠã‚ˆã³ "{@code singleTop}" モードã®å ´åˆã¯ã€ãã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’é–‹å§‹ã—ãŸï¼ˆã¤ã¾ã‚Š <code>{@link android.content.Context#startActivity startActivity()}</code> を呼ã³å‡ºã—ãŸï¼‰ã‚¿ã‚¹ã‚¯ã«ä¿æŒã•れã¾ã™ã€‚ãŸã ã—ã€Intent オブジェクト㫠<code>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</code> フラグãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³<a href="#afftask">è¦ªå’Œæ€§ã¨æ–°ã—ã„タスク</a>ã§èª¬æ˜Žã—ãŸã¨ãŠã‚Šã€åˆ¥ã®ã‚¿ã‚¹ã‚¯ãŒé¸æŠžã•れã¾ã™ã€‚ <p> 一方ã€"{@code singleTask}" ãŠã‚ˆã³ "{@code singleInstance}" モードã®å ´åˆã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå¸¸ã«ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆ アクティビティã«ãªã‚Šã¾ã™ã€‚タスクã¯å®šç¾©ã•れã¦ãŠã‚Šã€ä»–ã®ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦èµ·å‹•ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。 -</p> +</p> <li><p><b>アクティビティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’複数生æˆã§ãã‚‹ã‹</b>。"{@code standard}" ã¾ãŸã¯ "{@code singleTop}" アクティビティã¯è¤‡æ•°å›žã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã§ãã¾ã™ã€‚ãれらã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’複数ã®ã‚¿ã‚¹ã‚¯ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã‚‚ã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã«åŒã˜ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®è¤‡æ•°ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’割り当ã¦ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ -</p> +</p> <p> 一方ã€"{@code singleTask}" ãŠã‚ˆã³ "{@code singleInstance}" アクティビティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ 1 ã¤ã«åˆ¶é™ã•れã¾ã™ã€‚ã“れらã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆã«å½“ãŸã‚Šã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã“れらã®ã‚¿ã‚¹ã‚¯ã®è¤‡æ•°ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒãƒ‡ãƒã‚¤ã‚¹ä¸Šã«åŒæ™‚ã«å˜åœ¨ã™ã‚‹ã“ã¨ã¯ãªã„ã¨ã„ã†ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ -</p> +</p> <li><p><b>インスタンスã®ã‚¿ã‚¹ã‚¯ã«ä»–ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをå«ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹</b>。"{@code singleInstance}" アクティビティã¯ã€ãã®ã‚¿ã‚¹ã‚¯å†…ã®å”¯ä¸€ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¨ã—ã¦å˜ç‹¬ã§å‹•作ã—ã¾ã™ã€‚ã“ã“ã‹ã‚‰åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—ãŸå ´åˆã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯èµ·å‹•モードã«é–¢ä¿‚ãªãã€ã‚ãŸã‹ã‚‚インテント㫠{@code FLAG_ACTIVITY_NEW_TASK} フラグãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã®ã‚ˆã†ã«åˆ¥ã®ã‚¿ã‚¹ã‚¯ã§èµ·å‹•ã—ã¾ã™ã€‚"{@code singleInstance}" モード㨠"{@code singleTask}" モードã¯ã€ã“れ以外ã®ç‚¹ã§ã¯ã¾ã£ãŸãåŒã˜ã§ã™ã€‚</p> <p> -ä»–ã® 3 ã¤ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã«è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを割り当ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"{@code singleTask}" アクティビティã¯ã€å¸¸ã«ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆ アクティビティã«ãªã‚Šã¾ã™ãŒã€åŒã˜ã‚¿ã‚¹ã‚¯ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã«ãªã‚‹åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"{@code standard}" ãŠã‚ˆã³ "{@code singleTop}" アクティビティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ã€ã‚¹ã‚¿ãƒƒã‚¯å†…ã®ã©ã®ä½ç½®ã«ã§ã‚‚é…ç½®ã§ãã¾ã™ã€‚ +ä»–ã® 3 ã¤ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã«è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを割り当ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"{@code singleTask}" アクティビティã¯ã€å¸¸ã«ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒˆ アクティビティã«ãªã‚Šã¾ã™ãŒã€åŒã˜ã‚¿ã‚¹ã‚¯ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã«ãªã‚‹åˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"{@code standard}" ãŠã‚ˆã³ "{@code singleTop}" アクティビティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ã€ã‚¹ã‚¿ãƒƒã‚¯å†…ã®ã©ã®ä½ç½®ã«ã§ã‚‚é…ç½®ã§ãã¾ã™ã€‚ </p></li> <li><b>ã‚¯ãƒ©ã‚¹ã®æ–°ã—ã„インスタンスを起動ã—ã¦æ–°ã—ã„インテントを処ç†ã™ã‚‹ã‹ã©ã†ã‹</b>。デフォルト㮠"{@code standard}" モードã®å ´åˆã¯ã€æ–°ã—ã„インテントã«å¿œç”ã™ã‚‹ã¨ãã«ã¯å¿…ãšæ–°ã—ã„インスタンスãŒä½œæˆã•れã¾ã™ã€‚ãれãžã‚Œã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§å‡¦ç†ã™ã‚‹ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã¯ 1 ã¤ã®ã¿ã§ã™ã€‚"{@code singleTop}" モードã®å ´åˆã¯ã€ã‚¯ãƒ©ã‚¹ã®æ—¢å˜ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒå¯¾è±¡ã‚¿ã‚¹ã‚¯ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã«ã‚れã°ã€ãれをå†åˆ©ç”¨ã—ã¦æ–°ã—ã„インテントを処ç†ã—ã¾ã™ã€‚ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã«ãªã„å ´åˆã¯å†åˆ©ç”¨ã•れã¾ã›ã‚“。代ã‚りã«ã€æ–°ã—ã„インスタンスãŒä½œæˆã•れã¦ã‚¹ã‚¿ãƒƒã‚¯ã«ãƒ—ッシュã•ã‚Œã€æ–°ã—ã„インテントã®å‡¦ç†ã«ä½¿ç”¨ã•れã¾ã™ã€‚ <p> -ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ スタックã«ã€ãƒ«ãƒ¼ãƒˆ アクティビティ A ã¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ Bã€Cã€D ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¨ã—ã¾ã™ã€‚スタック内ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®é †åºã¯ A-B-C-D ã§ D ãŒæœ€ä¸Šä½ã§ã™ã€‚ã“ã“ã«ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚¿ã‚¤ãƒ—㌠D ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆãŒå±Šãã¾ã™ã€‚D ã®èµ·å‹•モードãŒãƒ‡ãƒ•ォルト㮠"{@code standard}" ã§ã‚ã‚‹å ´åˆã¯ã€ãã®ã‚¯ãƒ©ã‚¹ã®æ–°ã—ã„インスタンスãŒèµ·å‹•ã—ã€ã‚¹ã‚¿ãƒƒã‚¯ã¯ A-B-C-D-D ã¨ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€D ã®èµ·å‹•モード㌠"{@code singleTop}" ã§ã‚れã°ã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã¯ D ãªã®ã§ã€æ–°ã—ã„ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã¯æ—¢å˜ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã‚ˆã£ã¦å‡¦ç†ã•れるã¯ãšã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚¹ã‚¿ãƒƒã‚¯ã¯ A-B-C-D ã®ã¾ã¾ã¨ãªã‚Šã¾ã™ã€‚ +ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ スタックã«ã€ãƒ«ãƒ¼ãƒˆ アクティビティ A ã¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ Bã€Cã€D ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¨ã—ã¾ã™ã€‚スタック内ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®é †åºã¯ A-B-C-D ã§ D ãŒæœ€ä¸Šä½ã§ã™ã€‚ã“ã“ã«ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚¿ã‚¤ãƒ—㌠D ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆãŒå±Šãã¾ã™ã€‚D ã®èµ·å‹•モードãŒãƒ‡ãƒ•ォルト㮠"{@code standard}" ã§ã‚ã‚‹å ´åˆã¯ã€ãã®ã‚¯ãƒ©ã‚¹ã®æ–°ã—ã„インスタンスãŒèµ·å‹•ã—ã€ã‚¹ã‚¿ãƒƒã‚¯ã¯ A-B-C-D-D ã¨ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€D ã®èµ·å‹•モード㌠"{@code singleTop}" ã§ã‚れã°ã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã¯ D ãªã®ã§ã€æ–°ã—ã„ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã¯æ—¢å˜ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã‚ˆã£ã¦å‡¦ç†ã•れるã¯ãšã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚¹ã‚¿ãƒƒã‚¯ã¯ A-B-C-D ã®ã¾ã¾ã¨ãªã‚Šã¾ã™ã€‚ </p> <p> @@ -417,7 +417,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">allowTaskR </p> <p> -起動モードã«ã¤ã„ã¦è©³ã—ãã¯ã€<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> è¦ç´ ã®èª¬æ˜Žã‚’ã”覧ãã ã•ã„。 </p> @@ -432,26 +432,26 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">allowTaskR </p> <dl> -<dt><code><a +<dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code> 属性</dt> <dd>タスクã®ãƒ«ãƒ¼ãƒˆ アクティビティã§ã“ã®å±žæ€§ã‚’ "{@code true}" ã«è¨å®šã™ã‚‹ã¨ã€ä¸Šã§èª¬æ˜Žã—ãŸãƒ‡ãƒ•ォルトã®å‹•作ã¯ç™ºç”Ÿã—ã¾ã›ã‚“。長時間経éŽã—ã¦ã‚‚ã€ã‚¿ã‚¹ã‚¯å†…ã®ã™ã¹ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ãã®ã¾ã¾æ®‹ã•れã¾ã™ã€‚</dd> -<dt><code><a +<dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code> 属性</dt> <dd>タスクã®ãƒ«ãƒ¼ãƒˆ アクティビティã§ã“ã®å±žæ€§ã‚’ "{@code true}" ã«è¨å®šã—ãŸå ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã„ã£ãŸã‚“タスクを離れるã¨ã€æˆ»ã£ãŸã¨ãã«ã¯ãƒ«ãƒ¼ãƒˆã‚’å«ã‚€ã™ã¹ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã‚¯ãƒªã‚¢ã•れã¦ã„ã¾ã™ã€‚ã¤ã¾ã‚Šã€{@code alwaysRetainTaskState} ã®æ£å対ã®å‹•作ã«ãªã‚Šã¾ã™ã€‚ユーザーãŒä¸€çž¬ã§ã‚‚タスクを離れるã¨ã€æœ€åˆã®çŠ¶æ…‹ã‹ã‚‰ã‚„り直ã™ã“ã¨ã«ãªã‚Šã¾ã™ã€‚</dd> -<dt><code><a +<dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code> 属性</dt> <dd>ã“ã®å±žæ€§ã¯ {@code clearTaskOnLaunch} ã«ä¼¼ã¦ã„ã¾ã™ãŒã€ã‚¿ã‚¹ã‚¯å…¨ä½“ã§ã¯ãªãå˜ä¸€ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ä½œç”¨ã—ã¾ã™ã€‚ã¾ãŸã€ãƒ«ãƒ¼ãƒˆ アクティビティをå«ã‚€ã©ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティもクリアã®å¯¾è±¡ã¨ãªã‚Šãˆã¾ã™ã€‚ã“ã®å±žæ€§ãŒ "{@code true}" ã«è¨å®šã•れãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã€ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®é–“ã®ã¿ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã‚’å½¢æˆã—ã¾ã™ã€‚ユーザーãŒã„ã£ãŸã‚“ãã®ã‚¿ã‚¹ã‚¯ã‹ã‚‰é›¢ã‚Œã¦ã‹ã‚‰ã€å†åº¦ã‚¿ã‚¹ã‚¯ã«æˆ»ã‚‹ã¨ã€ã“ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã‚¯ãƒªã‚¢ã•れã¦ã„ã¾ã™</dd> </dl> <p> -アクティビティをスタックã‹ã‚‰å‰Šé™¤ã™ã‚‹æ–¹æ³•ã¯ä»–ã«ã‚‚ã‚りã¾ã™ã€‚Intent オブジェクト㫠<code>{@link +アクティビティをスタックã‹ã‚‰å‰Šé™¤ã™ã‚‹æ–¹æ³•ã¯ä»–ã«ã‚‚ã‚りã¾ã™ã€‚Intent オブジェクト㫠<code>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_CLEAR_TOP}</code> フラグãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’処ç†ã™ã¹ãタイプã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒå¯¾è±¡ã‚¿ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒƒã‚¯å†…ã«å˜åœ¨ã™ã‚‹å ´åˆã¯ã€ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸Šä½ã«ãªã£ã¦ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å¿œç”ã§ãるよã†ã€ãれより上ä½ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã™ã¹ã¦ã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚指定ã•れãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®èµ·å‹•モード㌠"{@code standard}" ã§ã‚ã‚‹å ´åˆã¯ã€ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティもスタックã‹ã‚‰å‰Šé™¤ã•ã‚Œã€æ–°ã—ã„インスタンスãŒèµ·å‹•ã—ã¦ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’処ç†ã—ã¾ã™ã€‚起動モード "{@code standard}" ã§ã¯ã€æ–°ã—ã„インテントを処ç†ã™ã‚‹éš›ã€å¸¸ã«æ–°ã—ã„インスタンスãŒä½œæˆã•れるãŸã‚ã§ã™ã€‚ </p> <p> -{@code FLAG_ACTIVITY_CLEAR_TOP} ã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆ {@code FLAG_ACTIVITY_NEW_TASK} ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ã“れらã®ãƒ•ラグを組ã¿åˆã‚ã›ã‚‹ã¨ã€åˆ¥ã®ã‚¿ã‚¹ã‚¯ã«æ—¢ã«å˜åœ¨ã—ã¦ã„るアクティビティを探ã—ã€ãれをインテントã«å¿œç”ã§ãã‚‹ä½ç½®ã«é…ç½®ã§ãã¾ã™ã€‚ +{@code FLAG_ACTIVITY_CLEAR_TOP} ã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆ {@code FLAG_ACTIVITY_NEW_TASK} ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ã“れらã®ãƒ•ラグを組ã¿åˆã‚ã›ã‚‹ã¨ã€åˆ¥ã®ã‚¿ã‚¹ã‚¯ã«æ—¢ã«å˜åœ¨ã—ã¦ã„るアクティビティを探ã—ã€ãれをインテントã«å¿œç”ã§ãã‚‹ä½ç½®ã«é…ç½®ã§ãã¾ã™ã€‚ </p> @@ -467,7 +467,7 @@ android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_CLEAR_TOP}</code> ã <p> {@code FLAG_ACTIVITY_NEW_TASK} フラグã«ã‚‚ã€ã“れã¨åŒã˜ã‚ˆã†ãªé›£ã—ã•ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ラグを指定ã—ãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã¯ã€æ–°ã—ã„タスクを開始ã—ãŸå¾Œã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ [ホーム] ã‚ーを押ã—ã¦ãã®ã‚¿ã‚¹ã‚¯ã‚’離れãŸå ´åˆã«å‚™ãˆã€ã‚¿ã‚¹ã‚¯ã«æˆ»ã‚‹ãŸã‚ã®æ‰‹æ®µã‚’用æ„ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚一部ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ï¼ˆãŸã¨ãˆã°é€šçŸ¥ãƒžãƒãƒ¼ã‚¸ãƒ£ï¼‰ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを常ã«å¤–部タスクã¨ã—ã¦é–‹å§‹ã—ã¾ã™ã€‚エンティティã®ä¸€éƒ¨ã¨ã—ã¦é–‹å§‹ã™ã‚‹ã“ã¨ã¯ãªã„ãŸã‚ã€{@code startActivity()} ã«æ¸¡ã™ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«ã¯å¿…ãš {@code FLAG_ACTIVITY_NEW_TASK} を指定ã—ã¾ã™ã€‚外部エンティティã‹ã‚‰å‘¼ã³å‡ºã™ã“ã¨ã®ã§ãるアクティビティã§ã“ã®ãƒ•ラグãŒä½¿ç”¨ã•れã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã¯ã€é–‹å§‹ã•れãŸã‚¿ã‚¹ã‚¯ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæˆ»ã‚‹ãŸã‚ã®æ‰‹æ®µã‚’別途æä¾›ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 -</p> +</p> <p> ユーザーãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã«æˆ»ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã—ãªã„å ´åˆã¯ã€{@code <activity>} è¦ç´ ã® {@code finishOnTaskLaunch} ã‚’ "{@code true}" ã«è¨å®šã—ã¾ã™ã€‚詳ã—ãã¯ã€<a href="#clearstack">スタックã®ã‚¯ãƒªã‚¢</a>ã‚’ã”覧ãã ã•ã„。 @@ -497,7 +497,7 @@ Android ã§ã¯ã€æœ€åˆã®ã‚¢ãƒ—リケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’å®Ÿè¡ <p> 状æ³ã«ã‚ˆã£ã¦ã¯ã€Android ãŒãƒ—ãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹ã¹ãã¨åˆ¤æ–ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¡ãƒ¢ãƒªãŒä¸è¶³ã—ã¦ããŸå ´åˆã‚„ã€ä»–ã®ãƒ—ãƒã‚»ã‚¹ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã™ã°ã‚„ã応ç”ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã§ã™ã€‚プãƒã‚»ã‚¹ãŒçµ‚了ã™ã‚‹ã¨ã€ãã®ãƒ—ãƒã‚»ã‚¹å†…ã§å®Ÿè¡Œã•れã¦ã„るアプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã¯ç ´æ£„ã•れã¾ã™ã€‚ãれらã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§å‡¦ç†ã™ã‚‹ä½œæ¥ãŒã‚‚ã†ä¸€åº¦ç™ºç”Ÿã™ã‚‹ã¨ã€ãã®ãŸã‚ã®ãƒ—ãƒã‚»ã‚¹ãŒå†ã³é–‹å§‹ã•れã¾ã™ã€‚ -</p> +</p> <p> Android ã§ã¯ã€ã©ã®ãƒ—ãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹ã‹ã‚’判æ–ã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦ã®ç›¸å¯¾çš„ãªé‡è¦åº¦ã‚’é‡ã¿ä»˜ã‘ã—ã¦ç®¡ç†ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã¾ã ç”»é¢ã«è¡¨ç¤ºã•れã¦ã„るプãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹ã‚ˆã‚Šã‚‚ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç”»é¢ã«è¡¨ç¤ºã•れã¦ã„ãªã„プãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹æ–¹ãŒåˆç†çš„ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ãƒ—ãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹ã‹ã©ã†ã‹ã¯ã€ãã®ãƒ—ãƒã‚»ã‚¹ã§å®Ÿè¡Œã•れã¦ã„るコンãƒãƒ¼ãƒãƒ³ãƒˆã®çŠ¶æ…‹ã«å¿œã˜ã¦åˆ¤æ–ã•れるã¨ã„ã†ã“ã¨ã§ã™ã€‚コンãƒãƒ¼ãƒãƒ³ãƒˆã®çŠ¶æ…‹ã«ã¤ã„ã¦ã¯ã€å¾Œã»ã©<a href="#lcycles">コンãƒãƒ¼ãƒãƒ³ãƒˆã®ãƒ©ã‚¤ãƒ•サイクル</a>ã§è©³ã—ã説明ã—ã¾ã™ã€‚ @@ -507,7 +507,7 @@ Android ã§ã¯ã€ã©ã®ãƒ—ãƒã‚»ã‚¹ã‚’終了ã•ã›ã‚‹ã‹ã‚’判æ–ã™ã‚‹ãŸã‚〠<h3 id="threads">スレッド</h3> <p> -アプリケーションをå˜ä¸€ã®ãƒ—ãƒã‚»ã‚¹ã«é™å®šã—ãŸã¨ã—ã¦ã‚‚ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã®å‡¦ç†ã«ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚ˆãã‚りã¾ã™ã€‚ユーザー インターフェースã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«å¯¾ã—ã¦å¸¸ã«ã™ã°ã‚„ã応ç”ã§ããªã‘れã°ãªã‚‰ãªã„ãŸã‚ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをホストã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ダウンãƒãƒ¼ãƒ‰ã®ã‚ˆã†ãªæ™‚é–“ã®ã‹ã‹ã‚‹å‡¦ç†ã‚’一緒ã«ãƒ›ã‚¹ãƒˆã—ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ãã«å®Œäº†ã—ãªã„å¯èƒ½æ€§ã®ã‚ã‚‹ã™ã¹ã¦ã®å‡¦ç†ã¯ã€åˆ¥ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å‰²ã‚Šå½“ã¦ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 +アプリケーションをå˜ä¸€ã®ãƒ—ãƒã‚»ã‚¹ã«é™å®šã—ãŸã¨ã—ã¦ã‚‚ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã®å‡¦ç†ã«ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚ˆãã‚りã¾ã™ã€‚ユーザー インターフェースã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«å¯¾ã—ã¦å¸¸ã«ã™ã°ã‚„ã応ç”ã§ããªã‘れã°ãªã‚‰ãªã„ãŸã‚ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティをホストã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ダウンãƒãƒ¼ãƒ‰ã®ã‚ˆã†ãªæ™‚é–“ã®ã‹ã‹ã‚‹å‡¦ç†ã‚’一緒ã«ãƒ›ã‚¹ãƒˆã—ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ãã«å®Œäº†ã—ãªã„å¯èƒ½æ€§ã®ã‚ã‚‹ã™ã¹ã¦ã®å‡¦ç†ã¯ã€åˆ¥ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å‰²ã‚Šå½“ã¦ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 </p> <p> @@ -549,19 +549,19 @@ RPC インターフェースã«å«ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã¯ãƒ¡ã‚½ãƒƒãƒ‰ã®ã <li>サービスã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼ˆãƒãƒ¼ã‚«ãƒ«å´ï¼‰ã«ã¯ <code>{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}</code> ãŠã‚ˆã³<code>{@link android.content.ServiceConnection#onServiceDisconnected onServiceDisconnected()}</code> メソッドãŒå®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒªãƒ¢ãƒ¼ãƒˆ サービスã¨ã®æŽ¥ç¶šãŒç¢ºç«‹ã•れãŸã¨ãや切æ–ã•れãŸã¨ãã«ã¯é€šçŸ¥ã‚’å—ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚通知ãŒã‚り次第ã€<code>{@link android.content.Context#bindService bindService()}</code> を呼ã³å‡ºã—ã¦æŽ¥ç¶šã‚’è¨å®šã—ã¾ã™ã€‚ -</li> +</li> -<li> +<li> サービス㮠<code>{@link android.app.Service#onBind onBind()}</code> メソッドã¯ã€å—ã‘å–ã£ãŸã‚¤ãƒ³ãƒ†ãƒ³ãƒˆï¼ˆ{@code bindService()} ã«æ¸¡ã•れãŸã‚¤ãƒ³ãƒ†ãƒ³ãƒˆï¼‰ã«å¿œã˜ã¦ã€æŽ¥ç¶šã‚’承èªã¾ãŸã¯æ‹’å¦ã™ã‚‹ãŸã‚ã«å®Ÿè£…ã—ã¾ã™ã€‚æŽ¥ç¶šãŒæ‰¿èªã•れるã¨ã€æŽ¥ç¶šã‚’承èªã™ã‚‹ã®ã§ã‚れã°ã€ã‚¹ã‚¿ãƒ– サブクラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’è¿”ã—ã¾ã™ã€‚ </li> -<li>ã‚µãƒ¼ãƒ“ã‚¹ãŒæŽ¥ç¶šã‚’æ‰¿èªã™ã‚‹ã¨ã€Android ãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã® {@code onServiceConnected()} メソッドを呼ã³å‡ºã—ã€IBinder オブジェクト(サービスãŒç®¡ç†ã™ã‚‹ã‚¹ã‚¿ãƒ– サブクラスã®ãƒ—ãƒã‚シ)を渡ã—ã¾ã™ã€‚クライアントã¯ã€ã“ã®ãƒ—ãƒã‚シを介ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒ“スを呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ +<li>ã‚µãƒ¼ãƒ“ã‚¹ãŒæŽ¥ç¶šã‚’æ‰¿èªã™ã‚‹ã¨ã€Android ãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã® {@code onServiceConnected()} メソッドを呼ã³å‡ºã—ã€IBinder オブジェクト(サービスãŒç®¡ç†ã™ã‚‹ã‚¹ã‚¿ãƒ– サブクラスã®ãƒ—ãƒã‚シ)を渡ã—ã¾ã™ã€‚クライアントã¯ã€ã“ã®ãƒ—ãƒã‚シを介ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒ“スを呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ </li> </ul> <p> ã“ã“ã§ã¯ã€èª¬æ˜Žã‚’ç°¡å˜ã«ã™ã‚‹ãŸã‚ã€RPC メカニズムã®ç´°ã‹ã„点ã¯çœç•¥ã—ã¦ã„ã¾ã™ã€‚詳ã—ãã¯ã€<a href="{@docRoot}guide/components/aidl.html">Designing a Remote Interface Using AIDL</a>ã€ãŠã‚ˆã³ {@link android.os.IBinder IBinder} クラスã®èª¬æ˜Žã‚’ã”覧ãã ã•ã„。 -</p> +</p> <h3 id="tsafe">スレッドセーフãªãƒ¡ã‚½ãƒƒãƒ‰</h3> @@ -572,18 +572,18 @@ onServiceDisconnected()}</code> メソッドãŒå®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒª <p> å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—㟠RPC ã®ã‚ˆã†ã«ãƒ¡ã‚½ãƒƒãƒ‰ã‚’リモートã§å‘¼ã³å‡ºã™ã“ã¨ãŒã§ãã‚‹å ´åˆã¯ã€ã“ã®ã‚ˆã†ãªçжæ³ãŒç‰¹ã«ç™ºç”Ÿã—ã‚„ã™ããªã‚Šã¾ã™ã€‚IBinder オブジェクトã«å®Ÿè£…ã•れã¦ã„るメソッドを IBinder ã¨åŒã˜ãƒ—ãƒã‚»ã‚¹ã‹ã‚‰å‘¼ã³å‡ºã™ã¨ã€ãã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å‘¼ã³å‡ºã—å´ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§å®Ÿè¡Œã•れã¾ã™ã€‚一方ã€åˆ¥ã®ãƒ—ãƒã‚»ã‚¹ã‹ã‚‰ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ãŸå ´åˆã¯ã€ãƒ—ãƒã‚»ã‚¹ã®ãƒ¡ã‚¤ãƒ³ スレッドã§ã¯ãªãã€IBinder ã¨åŒã˜ãƒ—ãƒã‚»ã‚¹å†…ã«ä¿æŒã•れã¦ã„るスレッドã®ãƒ—ールã‹ã‚‰é¸æŠžã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã§å®Ÿè¡Œã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚µãƒ¼ãƒ“ス㮠{@code onBind()} メソッドã¯ãã®ã‚µãƒ¼ãƒ“スã®ãƒ—ãƒã‚»ã‚¹ã®ãƒ¡ã‚¤ãƒ³ スレッドã‹ã‚‰å‘¼ã³å‡ºã•れるã®ã«å¯¾ã—ã€{@code onBind()} ã‹ã‚‰è¿”ã•れãŸã‚ªãƒ–ジェクトã«å®Ÿè£…ã•れã¦ã„るメソッド(ãŸã¨ãˆã° RPC メソッドを実装ã™ã‚‹ã‚¹ã‚¿ãƒ– サブクラス)ã¯ãƒ—ール内ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‹ã‚‰å‘¼ã³å‡ºã•れã¾ã™ã€‚サービスã«ã¯è¤‡æ•°ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’割り当ã¦ã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€è¤‡æ•°ã®ãƒ—ール スレッドをåŒã˜ IBinder ã«åŒæ™‚ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€IBinder メソッドã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã‚»ãƒ¼ãƒ•ã«ãªã‚‹ã‚ˆã†ã«å®Ÿè£…ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -</p> +</p> <p> åŒæ§˜ã«ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ プãƒãƒã‚¤ãƒ€ã‚‚別ã®ãƒ—ãƒã‚»ã‚¹ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ リクエストをå—ã‘å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ContentResolver ãŠã‚ˆã³ ContentProvider クラスã¯ãƒ—ãƒã‚»ã‚¹é–“通信ã®ç®¡ç†ã®è©³ç´°ã‚’éš è”½ã—ã¾ã™ãŒã€ãれらã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç”ã™ã‚‹ ContentProvider メソッド(<code>{@link android.content.ContentProvider#query query()}</code>ã€<code>{@link android.content.ContentProvider#insert insert()}</code>ã€<code>{@link android.content.ContentProvider#delete delete()}</code>ã€<code>{@link android.content.ContentProvider#update update()}</code>ã€ãŠã‚ˆã³ <code>{@link android.content.ContentProvider#getType getType()}</code> メソッド)ã¯ã€ãƒ—ãƒã‚»ã‚¹ã®ãƒ¡ã‚¤ãƒ³ スレッドã§ã¯ãªãã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ プãƒãƒã‚¤ãƒ€ã®ãƒ—ãƒã‚»ã‚¹å†…ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®ãƒ—ールã‹ã‚‰å‘¼ã³å‡ºã•れã¾ã™ã€‚ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’åŒæ™‚ã«å‘¼ã³å‡ºã™ã“ã¨ã®ã§ãã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã®æ•°ã«åˆ¶é™ã¯ã‚りã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚スレッドセーフã«ãªã‚‹ã‚ˆã†ã«å®Ÿè£…ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -</p> +</p> <h2 id="lcycles">コンãƒãƒ¼ãƒãƒ³ãƒˆã®ãƒ©ã‚¤ãƒ•サイクル</h2> <p> アプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã«ã¯ãƒ©ã‚¤ãƒ•サイクルãŒã‚りã¾ã™ã€‚ライフサイクルã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã¸å¿œç”ã™ã‚‹ã“ã¨ã§ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã§å§‹ã¾ã‚Šã€ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ç ´æ£„ã§çµ‚ã‚りã¾ã™ã€‚ã“ã®é–“ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã¨ãã¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ãªã„ã¨ããŒã‚りã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã‚れã°ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰è¦‹ãˆã‚‹ã¨ãã¨è¦‹ãˆãªã„ã¨ããŒã‚りã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã€ã‚µãƒ¼ãƒ“スã€ãŠã‚ˆã³ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã®ãƒ©ã‚¤ãƒ•サイクルã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚具体的ã«ã¯ã€ãれãžã‚ŒãŒãƒ©ã‚¤ãƒ•タイムã®é–“ã«å–ã‚‹ã“ã¨ã®ã§ãる状態ã€çŠ¶æ…‹ã®é·ç§»ã‚’通知ã™ã‚‹æ–¹æ³•ã€ãŠã‚ˆã³ãれらã®çŠ¶æ…‹ãŒã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’実行ã—ã¦ã„るプãƒã‚»ã‚¹ãŒçµ‚了ã•ã›ã‚‰ã‚ŒãŸã‚Šã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒç ´æ£„ã•れãŸã‚Šã™ã‚‹å¯èƒ½æ€§ã¸ã®å½±éŸ¿ãªã©ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ -</p> +</p> <h3 id="actlife">アクティビティã®ãƒ©ã‚¤ãƒ•サイクル</h3> @@ -624,12 +624,12 @@ onServiceDisconnected()}</code> メソッドãŒå®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒª . . . }</pre> </div> -</div> +</div> <p> -ã“れら 7 ã¤ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ©ã‚¤ãƒ•サイクル全体を定義ã§ãã¾ã™ã€‚ã“れらを実装ã™ã‚‹ã“ã¨ã§ã€ãƒã‚¹ãƒˆã•れ㟠3 ã¤ã®ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãªã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ©ã‚¤ãƒ•サイクルを監視ã§ãã¾ã™: -</p> +ã“れら 7 ã¤ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ©ã‚¤ãƒ•サイクル全体を定義ã§ãã¾ã™ã€‚ã“れらを実装ã™ã‚‹ã“ã¨ã§ã€ãƒã‚¹ãƒˆã•れ㟠3 ã¤ã®ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãªã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ©ã‚¤ãƒ•サイクルを監視ã§ãã¾ã™: +</p> <ul> <li>アクティビティã®<b>ライフタイム全体</b>ã¯ã€<code>{@link android.app.Activity#onCreate onCreate()}</code> ãŒåˆã‚ã¦å‘¼ã³å‡ºã•れãŸã¨ãã«å§‹ã¾ã‚Šã€æœ€å¾Œã« <code>{@link android.app.Activity#onDestroy}</code> ãŒå‘¼ã³å‡ºã•れãŸã¨ãã«çµ‚了ã—ã¾ã™ã€‚アクティビティã¯ã€{@code onCreate()} ã§ã€Œå…¨ä½“çš„ã€ãªçŠ¶æ…‹ã®ã™ã¹ã¦ã®åˆæœŸè¨å®šã‚’行ã„ã€{@code onDestroy()} 残ã£ã¦ã„ãŸãƒªã‚½ãƒ¼ã‚¹ã‚’ã™ã¹ã¦è§£æ”¾ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€{@code onCreate()} ã§ä½œæˆã•れã€{@code onDestroy()} ã§åœæ¢ã—ã¾ã™ã€‚</li> @@ -644,8 +644,8 @@ onServiceDisconnected()}</code> メソッドãŒå®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒª <p> <p style="margin-left: 2em"><img src="{@docRoot}images/activity_lifecycle.png" -alt="Android ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ ライフサイクルã®çŠ¶æ…‹é·ç§»å›³" /></p> - +alt="Android ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ ライフサイクルã®çŠ¶æ…‹é·ç§»å›³" /></p> + <p> 次ã®è¡¨ã§ã¯ã€å„メソッドã«ã¤ã„ã¦è©³ã—ã説明ã—ã€ãƒ©ã‚¤ãƒ•サイクル全体ã«ãŠã‘ã‚‹ä½ç½®ä»˜ã‘を示ã—ã¾ã™: </p> @@ -671,7 +671,7 @@ alt="Android ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ ライフサイクルã®çŠ¶æ…‹é·ç§»å›³" <tr> <td rowspan="5" style="border-left: none; border-right: none;"> </td> - <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart + <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart onRestart()}</code></td> <td>アクティビティãŒåœæ¢ã—ãŸå¾Œã€ãれをもã†ä¸€åº¦é–‹å§‹ã™ã‚‹ç›´å‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ <p>ã“ã®å¾Œã«ã¯ã€å¿…ãš {@code onStart()} ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚</p></td> @@ -706,16 +706,16 @@ onRestart()}</code></td> <tr> <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td> - <td>アクティビティãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰è¦‹ãˆãªããªã£ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚見ãˆãªããªã‚‹çжæ³ã¨ã—ã¦ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç ´æ£„ã•れãŸå ´åˆã‚„ã€å†é–‹ã•れãŸåˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ(既å˜ã‹æ–°è¦ã‹ã‚’å•ã‚ãšï¼‰ã«ã‚ˆã£ã¦éš ã•れãŸå ´åˆãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ + <td>アクティビティãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰è¦‹ãˆãªããªã£ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚見ãˆãªããªã‚‹çжæ³ã¨ã—ã¦ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç ´æ£„ã•れãŸå ´åˆã‚„ã€å†é–‹ã•れãŸåˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ(既å˜ã‹æ–°è¦ã‹ã‚’å•ã‚ãšï¼‰ã«ã‚ˆã£ã¦éš ã•れãŸå ´åˆãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ <p>ãã®å¾Œã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã®å¯¾è©±ã«æˆ»ã£ãŸå ´åˆã¯ {@code onRestart()} ãŒã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®Œå…¨ã«çµ‚了ã™ã‚‹å ´åˆã¯ {@code onDestroy()} ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚</p></td> <td align="center"><strong style="color:#800000">å¯èƒ½</strong></td> <td align="center">{@code onRestart()} <br/>ã¾ãŸã¯<br/>{@code onDestroy()}</td> </tr> <tr> - <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy + <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy onDestroy()}</code></td> - <td>アクティビティãŒç ´æ£„ã•れるå‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ã“れãŒã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå—ã‘å–る最後ã®å‘¼ã³å‡ºã—ã¨ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れる状æ³ã¨ã—ã¦ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®Œäº†ã™ã‚‹å ´åˆï¼ˆ<code>{@link android.app.Activity#finish + <td>アクティビティãŒç ´æ£„ã•れるå‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ã“れãŒã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå—ã‘å–る最後ã®å‘¼ã³å‡ºã—ã¨ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れる状æ³ã¨ã—ã¦ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå®Œäº†ã™ã‚‹å ´åˆï¼ˆ<code>{@link android.app.Activity#finish finish()}</code> ãŒå‘¼ã³å‡ºã•れãŸã¨ã)やã€ã‚·ã‚¹ãƒ†ãƒ ãŒé ˜åŸŸã‚’確ä¿ã™ã‚‹ãŸã‚ã«ä¸€æ™‚çš„ã«ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ç ´æ£„ã™ã‚‹å ´åˆãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ã“れら㮠2 ã¤ã®çжæ³ã¯ã€<code>{@link android.app.Activity#isFinishing isFinishing()}</code> メソッドを使用ã—ã¦è˜åˆ¥ã§ãã¾ã™ã€‚</td> <td align="center"><strong style="color:#800000">å¯èƒ½</strong></td> @@ -744,8 +744,8 @@ onDestroy()}</code></td> </p> <p> -アクティビティãŒå¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚Œã‚‹å‰ã®çŠ¶æ…‹ã‚’ä¿å˜ã—ã¦ãŠããŸã„å ´åˆã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㫠<code>{@link android.app.Activity#onSaveInstanceState -onSaveInstanceState()}</code> メソッドを実装ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç ´æ£„ã•れやã™ã„状態ã«ãªã‚‹å‰ï¼ˆã¤ã¾ã‚Š {@code onPause()} ãŒå‘¼ã³å‡ºã•れるå‰ï¼‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ãã®éš›ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®å‹•çš„ãªçŠ¶æ…‹ã‚’åå‰/値ペアã¨ã—ã¦è¨˜éŒ²ã§ãã‚‹ {@link android.os.Bundle} ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¸¡ã•れã¾ã™ã€‚アクティビティãŒã‚‚ã†ä¸€åº¦é–‹å§‹ã•れるã¨ã€Bundle 㯠{@code onCreate()} ã ã‘ã§ãªãã€{@code onStart()} ã®å¾Œã«å‘¼ã³å‡ºã•れる <code>{@link +アクティビティãŒå¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚Œã‚‹å‰ã®çŠ¶æ…‹ã‚’ä¿å˜ã—ã¦ãŠããŸã„å ´åˆã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㫠<code>{@link android.app.Activity#onSaveInstanceState +onSaveInstanceState()}</code> メソッドを実装ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒç ´æ£„ã•れやã™ã„状態ã«ãªã‚‹å‰ï¼ˆã¤ã¾ã‚Š {@code onPause()} ãŒå‘¼ã³å‡ºã•れるå‰ï¼‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ãã®éš›ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®å‹•çš„ãªçŠ¶æ…‹ã‚’åå‰/値ペアã¨ã—ã¦è¨˜éŒ²ã§ãã‚‹ {@link android.os.Bundle} ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¸¡ã•れã¾ã™ã€‚アクティビティãŒã‚‚ã†ä¸€åº¦é–‹å§‹ã•れるã¨ã€Bundle 㯠{@code onCreate()} ã ã‘ã§ãªãã€{@code onStart()} ã®å¾Œã«å‘¼ã³å‡ºã•れる <code>{@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}</code> メソッドã«ã‚‚渡ã•れã€ä¿å˜ã•れã¦ã„る状態をãã®ã©ã¡ã‚‰ã‹ã¾ãŸã¯ä¸¡æ–¹ã§å¾©å…ƒã§ãã¾ã™ã€‚ </p> @@ -871,15 +871,15 @@ alt="サービス コールãƒãƒƒã‚¯ã®çŠ¶æ…‹é·ç§»å›³" /></p> <li><b>フォアグラウンド プãƒã‚»ã‚¹</b>ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãã®æ™‚点ã§è¡Œã£ã¦ã„る作æ¥ã«å¿…è¦ãªãƒ—ãƒã‚»ã‚¹ã§ã™ã€‚以下ã®ã„ãšã‚Œã‹ã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„るプãƒã‚»ã‚¹ã¯ã€ãƒ•ォアグラウンド プãƒã‚»ã‚¹ã¨è¦‹ãªã•れã¾ã™: <ul> -<li>ユーザーã¨å¯¾è©±ä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを実行ã—ã¦ã„る(Activity オブジェクト㮠<code>{@link android.app.Activity#onResume +<li>ユーザーã¨å¯¾è©±ä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを実行ã—ã¦ã„る(Activity オブジェクト㮠<code>{@link android.app.Activity#onResume onResume()}</code> メソッドãŒå‘¼ã³å‡ºã•れã¦ã„る)。</li> <li><p>ユーザーã¨å¯¾è©±ä¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ãƒã‚¤ãƒ³ãƒ‰ã•れã¦ã„るサービスを実行ã—ã¦ã„る。</p></li> -<li><p>ã„ãšã‚Œã‹ã®ãƒ©ã‚¤ãƒ•サイクル コールãƒãƒƒã‚¯ï¼ˆ<code>{@link android.app.Service#onCreate +<li><p>ã„ãšã‚Œã‹ã®ãƒ©ã‚¤ãƒ•サイクル コールãƒãƒƒã‚¯ï¼ˆ<code>{@link android.app.Service#onCreate onCreate()}</code>ã€<code>{@link android.app.Service#onStart onStart()}</code>ã€ã¾ãŸã¯ <code>{@link android.app.Service#onDestroy onDestroy()}</code>)を実行ã—ã¦ã„ã‚‹ {@link android.app.Service} ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ä¿æŒã—ã¦ã„る。</p></li> -<li><p><code>{@link android.content.BroadcastReceiver#onReceive +<li><p><code>{@link android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドを実行ã—ã¦ã„ã‚‹ {@link android.content.BroadcastReceiver} ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ä¿æŒã—ã¦ã„る。</p></li> </ul> @@ -899,10 +899,10 @@ onReceive()}</code> メソッドを実行ã—ã¦ã„ã‚‹ {@link android.content.Bro å¯è¦–プãƒã‚»ã‚¹ã¯ã€éžå¸¸ã«é‡è¦ãªãƒ—ãƒã‚»ã‚¹ã¨è¦‹ãªã•れã€ã™ã¹ã¦ã®ãƒ•ォアグラウンド プãƒã‚»ã‚¹ã®å®Ÿè¡Œã‚’ç¶æŒã™ã‚‹ãŸã‚ã«å¿…è¦ã§ãªã„é™ã‚Šã€å¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。 </p></li> -<li><p><b>サービス プãƒã‚»ã‚¹</b>ã¯ã€<code>{@link android.content.Context#startService startService()}</code> メソッドã§é–‹å§‹ã•れãŸã‚µãƒ¼ãƒ“スを実行ã—ã¦ã„るプãƒã‚»ã‚¹ã®ã†ã¡ã€ã‚ˆã‚Šé‡è¦åº¦ã®é«˜ã„ 2 ã¤ã®ãƒ¬ãƒ™ãƒ«ã®ã©ã¡ã‚‰ã«ã‚‚該当ã—ãªã„プãƒã‚»ã‚¹ã§ã™ã€‚サービス プãƒã‚»ã‚¹ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¦‹ãˆã‚‹ã‚‚ã®ã¨ã®ç›´æŽ¥çš„ãªé–¢ä¿‚ã¯ã‚りã¾ã›ã‚“ãŒã€ãŸã¨ãˆã°ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã® MP3 ã®å†ç”Ÿã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ãªã©ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ°—ã«ã‹ã‘ã¦ã„る処ç†ã§ã‚ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ã™ã¹ã¦ã®ãƒ•ォアグラウンド プãƒã‚»ã‚¹ã¨å¯è¦–プãƒã‚»ã‚¹ã«åŠ ãˆã€ã“れらã®ã‚µãƒ¼ãƒ“ス プãƒã‚»ã‚¹ã®å®Ÿè¡Œã‚’ç¶æŒã™ã‚‹ã ã‘ã®ãƒ¡ãƒ¢ãƒªãŒç¢ºä¿ã§ãã‚‹é™ã‚Šã€å¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。 +<li><p><b>サービス プãƒã‚»ã‚¹</b>ã¯ã€<code>{@link android.content.Context#startService startService()}</code> メソッドã§é–‹å§‹ã•れãŸã‚µãƒ¼ãƒ“スを実行ã—ã¦ã„るプãƒã‚»ã‚¹ã®ã†ã¡ã€ã‚ˆã‚Šé‡è¦åº¦ã®é«˜ã„ 2 ã¤ã®ãƒ¬ãƒ™ãƒ«ã®ã©ã¡ã‚‰ã«ã‚‚該当ã—ãªã„プãƒã‚»ã‚¹ã§ã™ã€‚サービス プãƒã‚»ã‚¹ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¦‹ãˆã‚‹ã‚‚ã®ã¨ã®ç›´æŽ¥çš„ãªé–¢ä¿‚ã¯ã‚りã¾ã›ã‚“ãŒã€ãŸã¨ãˆã°ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã® MP3 ã®å†ç”Ÿã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ãªã©ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ°—ã«ã‹ã‘ã¦ã„る処ç†ã§ã‚ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ã™ã¹ã¦ã®ãƒ•ォアグラウンド プãƒã‚»ã‚¹ã¨å¯è¦–プãƒã‚»ã‚¹ã«åŠ ãˆã€ã“れらã®ã‚µãƒ¼ãƒ“ス プãƒã‚»ã‚¹ã®å®Ÿè¡Œã‚’ç¶æŒã™ã‚‹ã ã‘ã®ãƒ¡ãƒ¢ãƒªãŒç¢ºä¿ã§ãã‚‹é™ã‚Šã€å¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。 </p></li> -<li><p><b>ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ プãƒã‚»ã‚¹</b>ã¯ã€ãã®æ™‚点ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰è¦‹ãˆãªã„ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ä¿æŒã—ã¦ã„る(Activity オブジェクト㮠<code>{@link android.app.Activity#onStop onStop()}</code> メソッドãŒå‘¼ã³å‡ºã•れã¦ã„る)プãƒã‚»ã‚¹ã§ã™ã€‚ã“れらã®ãƒ—ãƒã‚»ã‚¹ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスã«ç›´æŽ¥çš„ã«ã¯å½±éŸ¿ã—ã¦ãŠã‚‰ãšã€ãƒ•ォアグラウンドã€å¯è¦–ã€ã‚µãƒ¼ãƒ“ス プãƒã‚»ã‚¹ã‹ã‚‰ãƒ¡ãƒ¢ãƒªãŒè¦æ±‚ã•れãŸå ´åˆã¯ã„ã¤ã§ã‚‚強制終了ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚é€šå¸¸ã¯æ•°å¤šãã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ プãƒã‚»ã‚¹ãŒå®Ÿè¡Œã•れã¦ã„ã‚‹ãŸã‚ã€ãれらを LRU(least recently used)リストã«ç™»éŒ²ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä¸€ç•ªæœ€è¿‘見ãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ—ãƒã‚»ã‚¹ãŒæœ€å¾Œã«å¼·åˆ¶çµ‚了ã™ã‚‹ã‚ˆã†ãªä»•組ã¿ã«ãªã£ã¦ã„ã¾ã™ã€‚アクティビティã«ãƒ©ã‚¤ãƒ•サイクル ãƒ¡ã‚½ãƒƒãƒ‰ãŒæ£ã—ã実装ã•れã¦ãŠã‚Šã€ç¾åœ¨ã®çŠ¶æ…‹ãŒæ£ã—ãä¿å˜ã•れã¦ã„れã°ã€ãƒ—ãƒã‚»ã‚¹ã‚’強制終了ã—ã¦ã‚‚ユーザー ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã«æ‚ªå½±éŸ¿ãŒåŠã¶ã“ã¨ã¯ã‚りã¾ã›ã‚“。 +<li><p><b>ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ プãƒã‚»ã‚¹</b>ã¯ã€ãã®æ™‚点ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰è¦‹ãˆãªã„ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ä¿æŒã—ã¦ã„る(Activity オブジェクト㮠<code>{@link android.app.Activity#onStop onStop()}</code> メソッドãŒå‘¼ã³å‡ºã•れã¦ã„る)プãƒã‚»ã‚¹ã§ã™ã€‚ã“れらã®ãƒ—ãƒã‚»ã‚¹ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスã«ç›´æŽ¥çš„ã«ã¯å½±éŸ¿ã—ã¦ãŠã‚‰ãšã€ãƒ•ォアグラウンドã€å¯è¦–ã€ã‚µãƒ¼ãƒ“ス プãƒã‚»ã‚¹ã‹ã‚‰ãƒ¡ãƒ¢ãƒªãŒè¦æ±‚ã•れãŸå ´åˆã¯ã„ã¤ã§ã‚‚強制終了ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚é€šå¸¸ã¯æ•°å¤šãã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ プãƒã‚»ã‚¹ãŒå®Ÿè¡Œã•れã¦ã„ã‚‹ãŸã‚ã€ãれらを LRU(least recently used)リストã«ç™»éŒ²ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä¸€ç•ªæœ€è¿‘見ãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ—ãƒã‚»ã‚¹ãŒæœ€å¾Œã«å¼·åˆ¶çµ‚了ã™ã‚‹ã‚ˆã†ãªä»•組ã¿ã«ãªã£ã¦ã„ã¾ã™ã€‚アクティビティã«ãƒ©ã‚¤ãƒ•サイクル ãƒ¡ã‚½ãƒƒãƒ‰ãŒæ£ã—ã実装ã•れã¦ãŠã‚Šã€ç¾åœ¨ã®çŠ¶æ…‹ãŒæ£ã—ãä¿å˜ã•れã¦ã„れã°ã€ãƒ—ãƒã‚»ã‚¹ã‚’強制終了ã—ã¦ã‚‚ユーザー ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã«æ‚ªå½±éŸ¿ãŒåŠã¶ã“ã¨ã¯ã‚りã¾ã›ã‚“。 </p></li> <li><p><b>空ã®ãƒ—ãƒã‚»ã‚¹</b>ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚¢ãƒ—リケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’ä¿æŒã—ã¦ã„ãªã„プãƒã‚»ã‚¹ã§ã™ã€‚ã“ã®ã‚ˆã†ãªãƒ—ãƒã‚»ã‚¹ã‚’ç¶æŒã—ã¦ãŠã唯一ã®ç†ç”±ã¯ã€ã“れをã‚ャッシュã¨ã—ã¦ä½¿ç”¨ã—ã€æ¬¡å›žã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’実行ã™ã‚‹ã¨ãã®èµ·å‹•時間をçŸãã™ã‚‹ãŸã‚ã§ã™ã€‚多ãã®å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã“れらã®ãƒ—ãƒã‚»ã‚¹ã‚’強制終了ã•ã›ã¦ã€ãƒ—ãƒã‚»ã‚¹ ã‚ャッシュã¨ãã®åŸºç¤Žã¨ãªã‚‹ã‚«ãƒ¼ãƒãƒ« ã‚ャッシュã®é–“ã§ã‚·ã‚¹ãƒ†ãƒ リソース全体ã®ãƒãƒ©ãƒ³ã‚¹ã‚’å–りã¾ã™ã€‚</p></li> @@ -915,7 +915,7 @@ onReceive()}</code> メソッドを実行ã—ã¦ã„ã‚‹ {@link android.content.Bro <p> ã¾ãŸã€ã‚るプãƒã‚»ã‚¹ã«ä»–ã®ãƒ—ãƒã‚»ã‚¹ãŒä¾å˜ã—ã¦ã„ã‚‹ãŸã‚ã«ã€ãã®ãƒ—ãƒã‚»ã‚¹ã®ãƒ©ãƒ³ã‚¯ãŒå¼•ã上ã’られるå¯èƒ½æ€§ã‚‚ã‚りã¾ã™ã€‚ä»–ã®ãƒ—ãƒã‚»ã‚¹ã‹ã‚‰ä¾å˜ã•れã¦ã„るプãƒã‚»ã‚¹ãŒã€ä¾å˜ã—ã¦ã„るプãƒã‚»ã‚¹ã‚ˆã‚Šã‚‚低ã„レベルã«ãƒ©ãƒ³ã‚¯ä»˜ã‘ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€ãƒ—ãƒã‚»ã‚¹ A 内ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ プãƒãƒã‚¤ãƒ€ã«ãƒ—ãƒã‚»ã‚¹ B 内ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒä¾å˜ã—ã¦ã„ã‚‹å ´åˆã‚„ã€ãƒ—ãƒã‚»ã‚¹ A 内ã®ã‚µãƒ¼ãƒ“スãŒãƒ—ãƒã‚»ã‚¹ B 内ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«ãƒã‚¤ãƒ³ãƒ‰ã•れã¦ã„ã‚‹å ´åˆã€ãƒ—ãƒã‚»ã‚¹ A ã¯å¸¸ã«ãƒ—ãƒã‚»ã‚¹ B よりã¯é‡è¦åº¦ãŒé«˜ã„ã¨è¦‹ãªã•れã¾ã™ã€‚ -</p> +</p> <p> サービスを実行ã—ã¦ã„るプãƒã‚»ã‚¹ã¯ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ アクティビティを実行ã—ã¦ã„るプãƒã‚»ã‚¹ã‚ˆã‚Šã‚‚高ãランク付ã‘ã•れã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€æ™‚é–“ã®ã‹ã‹ã‚‹å‡¦ç†ã‚’実行ã™ã‚‹å ´åˆã€ç‰¹ã«ãã®å‡¦ç†ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティよりも長ãç¶šãよã†ãªå ´åˆã¯ã€å˜ã«ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’生æˆã™ã‚‹ã®ã§ã¯ãªãã€ãã®å‡¦ç†ç”¨ã®ã‚µãƒ¼ãƒ“スを開始ã™ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§éŸ³æ¥½ã‚’å†ç”Ÿã™ã‚‹å ´åˆã‚„ã€ã‚«ãƒ¡ãƒ©ã§æ’®å½±ã—ãŸå†™çœŸã‚’ Web サイトã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã™ã‚‹å ´åˆãªã©ã¯ã“れã«å½“ãŸã‚Šã¾ã™ã€‚サービスを使用ã™ã‚‹ã“ã¨ã§ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã©ã®ã‚ˆã†ãªçжæ³ã«ã‚ã£ã¦ã‚‚ã€å‡¦ç†ã®é‡è¦åº¦ã¨ã—ã¦ã€Œã‚µãƒ¼ãƒ“ス プãƒã‚»ã‚¹ã€ãƒ¬ãƒ™ãƒ«ä»¥ä¸Šã‚’ç¶æŒã§ãã¾ã™ã€‚<a href="#broadlife">ブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã®ãƒ©ã‚¤ãƒ•サイクル</a>ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã‚‚説明ã—ã¾ã—ãŸãŒã€ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã«ãŠã„ã¦ã‚‚ã“れã¨åŒã˜ç†ç”±ã§ã€å‡¦ç†ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã¯ãªãサービスを使用ã™ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/ja/guide/topics/manifest/manifest-intro.jd index 7d9e8ac588f8..a0041de2d06a 100644 --- a/docs/html-intl/intl/ja/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/ja/guide/topics/manifest/manifest-intro.jd @@ -38,10 +38,10 @@ page.title=アプリ マニフェスト ã“れらã®å®£è¨€ã«ã‚ˆã£ã¦ã€Android システムã¯ã€ã©ã‚“ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã‚りã€ãれらã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã©ã®ã‚ˆã†ãªæ¡ä»¶ã§èµ·å‹•ã•れるã®ã‹ã‚’把æ¡ã§ãã¾ã™ã€‚ </li> -<li>アプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’ホストã™ã‚‹ãƒ—ãƒã‚»ã‚¹ã‚’決定ã—ã¾ã™ã€‚</li> +<li>アプリケーション コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’ホストã™ã‚‹ãƒ—ãƒã‚»ã‚¹ã‚’決定ã—ã¾ã™ã€‚</li> <li>アプリケーション㌠API ã®ä¿è·ã•れãŸéƒ¨åˆ†ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã‚Šä»–ã®ã‚¢ãƒ—リケーションã¨ã‚„りå–りã—ãŸã‚Šã™ã‚‹éš›ã«å¿…è¦ã¨ãªã‚‹ãƒ‘ーミッションを宣言ã—ã¾ã™ã€‚ -</li> +</li> <li>ä»–ã®ã‚¢ãƒ—リケーションãŒã‚¢ãƒ—リケーションã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¨ã‚„りå–りã™ã‚‹ãŸã‚ã«å¿…è¦ãªãƒ‘ーミッションを宣言ã—ã¾ã™ã€‚ </li> @@ -66,7 +66,7 @@ page.title=アプリ マニフェスト エレメントã®è©³ç´°ã‚’見るã«ã¯ã€å›³ä¸ã€å›³ã®ä¸‹ã«ã‚ã‚‹ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆé †ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆä¸€è¦§ã€ã¾ãŸã¯ãã®ä»–ã®èª¬æ˜Žæ–‡ã«è¡¨ç¤ºã•れã¦ã„るエレメントåをクリックã—ã¦ãã ã•ã„。 - + </p> <pre> @@ -128,7 +128,7 @@ page.title=アプリ マニフェスト <p> 以下ã¯ã€ãƒžãƒ‹ãƒ•ェスト ファイルã«å«ã‚€ã“ã¨ãŒã§ãã‚‹ã™ã¹ã¦ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆé †ã«ä¸¦ã¹ãŸã‚‚ã®ã§ã™ã€‚ 使用ãŒè¨±å¯ã•れã¦ã„ã‚‹ã®ã¯ã“れらã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã®ã¿ã§ã™ã€‚独自ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚„属性ã¯è¿½åŠ ã§ãã¾ã›ã‚“。 - + </p> <p style="margin-left: 2em"> @@ -158,7 +158,7 @@ page.title=アプリ マニフェスト </p> - + <h2 id="filec">ファイルã®è¦å‰‡</h2> @@ -218,7 +218,7 @@ page.title=アプリ マニフェスト - + <p> サブクラスを定義ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ クラス({@link android.app.Activity}ã€{@link android.app.Service}ã€{@link android.content.BroadcastReceiver}ã€{@link android.content.ContentProvider})ã§ã„ã¤ã‚‚行ã†ã‚ˆã†ã«ã€ã‚µãƒ–クラス㯠{@code name} 属性ã§å®£è¨€ã•れã¾ã™ã€‚ @@ -244,7 +244,7 @@ page.title=アプリ マニフェスト -以下ã¯ã€ä¸Šè¨˜ã®ã‚‚ã®ã¨åŒã˜å†…容ã§ã™ã€‚ +以下ã¯ã€ä¸Šè¨˜ã®ã‚‚ã®ã¨åŒã˜å†…容ã§ã™ã€‚ </p> <pre><manifest package="com.example.project" . . . > @@ -399,7 +399,7 @@ Android ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å¯¾å¿œã™ã‚‹é©åˆ‡ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’æœ <p> パーミッションã¯ã€ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã‚„端末上ã®ãƒ‡ãƒ¼ã‚¿ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚<i></i> 誤用や悪用ã«ã‚ˆã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åˆ©ç”¨ã‚’妨ã’ãŸã‚Šæœ‰å®³ãªä½œç”¨ã‚’ã‚‚ãŸã‚‰ã™æã‚Œã®ã‚ã‚‹é‡è¦ãªãƒ‡ãƒ¼ã‚¿ã‚„コードをä¿è·ã—ãŸã‚Šã™ã‚‹ãŸã‚ã®åˆ¶é™ã‚’è¨å®šã—ã¾ã™ã€‚ - + </p> <p> @@ -421,13 +421,13 @@ Android ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å¯¾å¿œã™ã‚‹é©åˆ‡ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’æœ ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãŒãƒ‘ーミッションã«ã‚ˆã‚Šä¿è·ã•れã¦ã„る機能ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¿…è¦ã¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> エレメントをマニフェスト ファイルã«è¨˜è¿°ã—ã€ãã®ãƒ‘ーミッションãŒå¿…è¦ã§ã‚ã‚‹ã“ã¨ã‚’宣言ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -ã“れã«ã‚ˆã£ã¦ã€ã‚¢ãƒ—リケーションãŒç«¯æœ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸéš›ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€ã‚¢ãƒ—リケーションã®è¨¼æ˜Žæ›¸ã«ç½²åã—ãŸé–¢ä¿‚機関を確èªã—ã€å ´åˆã«ã‚ˆã£ã¦ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å°‹ãã‚‹ã“ã¨ã§ã€è¦æ±‚ã•れãŸãƒ‘ーミッションを付与ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚ - - +ã“れã«ã‚ˆã£ã¦ã€ã‚¢ãƒ—リケーションãŒç«¯æœ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸéš›ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€ã‚¢ãƒ—リケーションã®è¨¼æ˜Žæ›¸ã«ç½²åã—ãŸé–¢ä¿‚機関を確èªã—ã€å ´åˆã«ã‚ˆã£ã¦ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å°‹ãã‚‹ã“ã¨ã§ã€è¦æ±‚ã•れãŸãƒ‘ーミッションを付与ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚ + + パーミッションãŒä»˜ä¸Žã•れるã¨ã€ã‚¢ãƒ—リケーションã¯ä¿è·ã•ã‚ŒãŸæ©Ÿèƒ½ã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ パーミッションãŒä»˜ä¸Žã•れãªã‹ã£ãŸå ´åˆã¯ã€ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããšã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€šçŸ¥ãŒè¡¨ç¤ºã•れるã“ã¨ã‚‚ã‚りã¾ã›ã‚“。 - + </p> <p> @@ -464,7 +464,7 @@ Android ã«ã‚ˆã‚Šå®šç¾©ã•れã¦ã„るパーミッション({@link android.Man アプリケーション自身ã«ã‚ˆã£ã¦ä¿è·ãŒè¨å®šã•れã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ã‚¢ãƒ—リケーションã®ä»–ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒä¿è·ã•れãŸã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを起動ã™ã‚‹ãŸã‚ã«ã€ãã®ä½¿ç”¨ã‚’è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - + </p> <p> @@ -474,7 +474,7 @@ Android ã«ã‚ˆã‚Šå®šç¾©ã•れã¦ã„るパーミッション({@link android.Man ãã®å ´åˆã‚‚ <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> ã§ãã®ä½¿ç”¨ã‚’è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - + </p> <p> diff --git a/docs/html-intl/intl/ja/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/ja/guide/topics/providers/calendar-provider.jd index 7b97c3083341..46409f9ff34e 100644 --- a/docs/html-intl/intl/ja/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/ja/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=カレンダー プãƒãƒã‚¤ãƒ€ <li><a href="#intent-view">インテントを使用ã—ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ データã®å‚ç…§</a></li> </ol> </li> - + <li><a href="#sync-adapter">åŒæœŸã‚¢ãƒ€ãƒ—ã‚¿</a></li> </ol> @@ -113,14 +113,14 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>ã“ã®ãƒ†ãƒ¼ãƒ–ルã¯ã€è©²å½“ã™ã‚‹ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼å›ºæœ‰ã®æƒ…å ±ã‚’ä¿æŒã—ã¾ã™ã€‚ å„行ã«ã¯ã€åå‰ã€è‰²ã€åŒæœŸæƒ…å ±ãªã©ã€1 ã¤ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°ãŒæ ¼ç´ã•れã¾ã™ã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>ã“ã®ãƒ†ãƒ¼ãƒ–ルã¯ã€è©²å½“ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆå›ºæœ‰ã®æƒ…å ±ã‚’ä¿æŒã—ã¾ã™ã€‚ å„行ã«ã¯ã€1 ã¤ã®ã‚¤ãƒ™ãƒ³ãƒˆã«é–¢ã™ã‚‹æƒ…å ±ãŒæ ¼ç´ã•れã¾ã™—イベントã®ã‚¿ã‚¤ãƒˆãƒ«ã€å ´æ‰€ã€é–‹å§‹æ™‚刻ã€çµ‚了時刻ãªã©ãŒè©²å½“ã—ã¾ã™ã€‚ @@ -132,7 +132,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>ã“ã®ãƒ†ãƒ¼ãƒ–ルã¯ã€ã‚るイベントã®ç™ºç”Ÿã”ã¨ã®é–‹å§‹æ™‚刻ã¨çµ‚äº†æ™‚åˆ»ã‚’ä¿æŒã—ã¾ã™ã€‚ å„行ã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆã®ç™ºç”Ÿ 1 回を表ã—ã¾ã™ã€‚ å˜ç™ºã‚¤ãƒ™ãƒ³ãƒˆã«ã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 1 対 1 ã§å¯¾å¿œã—ã¾ã™ã€‚ @@ -141,7 +141,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>ã“ã®ãƒ†ãƒ¼ãƒ–ルã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆã®å‚åŠ è€…ï¼ˆã‚²ã‚¹ãƒˆï¼‰ã®æƒ…å ±ã‚’ä¿æŒã—ã¾ã™ã€‚ å„行ã¯ã€1 回ã®ã‚¤ãƒ™ãƒ³ãƒˆã® 1 人ã®ã‚²ã‚¹ãƒˆã‚’表ã—ã¾ã™ã€‚ ゲストã®ã‚¿ã‚¤ãƒ—ã¨ã€ã‚²ã‚¹ãƒˆã®ã‚¤ãƒ™ãƒ³ãƒˆã¸ã®å‡ºæ¬ ã®å›žç”を指定ã—ã¾ã™ã€‚ @@ -149,7 +149,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>ã“ã®ãƒ†ãƒ¼ãƒ–ルã¯ã€ã‚¢ãƒ©ãƒ¼ãƒˆã‚„通知ã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿æŒã—ã¾ã™ã€‚ å„行ã¯ã€1 回ã®ã‚¤ãƒ™ãƒ³ãƒˆã® 1 ã¤ã®ã‚¢ãƒ©ãƒ¼ãƒˆã‚’表ã—ã¾ã™ã€‚1 ã¤ã®ã‚¤ãƒ™ãƒ³ãƒˆãŒè¤‡æ•°ã®ãƒªãƒžã‚¤ãƒ³ãƒ€ãƒ¼ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚ 1 イベントã‚ãŸã‚Šã®æœ€å¤§ãƒªãƒžã‚¤ãƒ³ãƒ€ãƒ¼æ•°ã¯ {@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS} ã§æŒ‡å®šã•ã‚Œã€æŒ‡å®šã•れãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’所有ã™ã‚‹åŒæœŸã‚¢ãƒ€ãƒ—ã‚¿ã«ã‚ˆã£ã¦è¨å®šã•れã¾ã™ã€‚ @@ -159,7 +159,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ リマインダーã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆé–‹å§‹å‰ã®åˆ†å˜ä½ã§æŒ‡å®šã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æ³¨æ„å–šèµ·ã™ã‚‹æ‰‹æ®µã‚’ç¤ºã™æƒ…å ±ã‚’ä¿æŒã—ã¾ã™ã€‚ </td> </tr> - + </table> <p>カレンダー プãƒãƒã‚¤ãƒ€ API ã¯ã€æŸ”軟ã§åŠ¹æžœçš„ãªè¨è¨ˆã«ãªã£ã¦ã„ã¾ã™ã€‚ã§ã™ãŒåŒæ™‚ã«ã€ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦ä½¿ã„ã‚„ã™ãã™ã‚‹ã“ã¨ã‚„ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¨ãã®ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ã‚’ä¿è·ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚ @@ -229,7 +229,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>カレンダーãŒè¡¨ç¤ºå¯¾è±¡ã¨ã—ã¦é¸æŠžã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。値 0 ã¯ã€ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«é–¢é€£ä»˜ã‘られã¦ã„るイベントを表示ã—ãªã„ã“ã¨ã‚’示ã—ã¾ã™ã€‚ 値 1 ã¯ã€ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«é–¢é€£ä»˜ã‘られã¦ã„るイベントを表示ã™ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ @@ -240,7 +240,7 @@ URI ã®å½¢å¼ã¯ <code><em><class></em>.CONTENT_URI</code> ã§ã™ã€‚ </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’åŒæœŸã—ã¦ãã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’ç«¯æœ«ã«æ ¼ç´ã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。 値 0 ã¯ã€ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’åŒæœŸã›ãšã€ã‚¤ãƒ™ãƒ³ãƒˆã‚’ç«¯æœ«ã«æ ¼ç´ã—ãªã„ã“ã¨ã‚’指定ã—ã¾ã™ã€‚ 値 1 ã¯ã€ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’åŒæœŸã—ã€ã‚¤ãƒ™ãƒ³ãƒˆã‚’ç«¯æœ«ã«æ ¼ç´ã™ã‚‹ã“ã¨ã‚’指定ã—ã¾ã™ã€‚ @@ -268,13 +268,13 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>ACCOUNT_TYPE ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ç†ç”± </h3> <p>{@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME Calendars.ACCOUNT_NAME} ã«ã‚¯ã‚¨ãƒªã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã« {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE} ã‚‚å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ @@ -289,7 +289,7 @@ private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> -</p> </div> </div> +</p> </div> </div> <p> ã“ã®ä¾‹ã®æ¬¡ã®éƒ¨åˆ†ã§ã¯ã€ã‚¯ã‚¨ãƒªã‚’作æˆã—ã¾ã™ã€‚ã‚¯ã‚¨ãƒªã®æ¡ä»¶ã¯ selection ã«æŒ‡å®šã—ã¦ã„ã¾ã™ã€‚ @@ -308,38 +308,38 @@ private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã‚«ãƒ¼ã‚½ãƒ«ã‚’使用ã—ã¦çµæžœã‚»ãƒƒãƒˆã‚’ステップå˜ä½ã§ç§»å‹•ã—ã¾ã™ã€‚例ã®å†’é ã§è¨å®šã—ãŸå®šæ•°ã‚’使用ã—ã¦å„フィールドã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚ </p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">カレンダーã®å¤‰æ›´</h3> <p>カレンダーã®ã‚¢ãƒƒãƒ—デートを実行ã™ã‚‹å ´åˆã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã® {@link android.provider.BaseColumns#_ID} ã‚’ã€URI({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}ï¼‰ã®æœ«å°¾ã«è¿½åŠ ã•れ㟠ID ã¨ã—ã¦ã€ã¾ãŸã¯æœ€åˆã® selection é …ç›®ã¨ã—ã¦æŒ‡å®šã§ãã¾ã™ã€‚ @@ -434,7 +434,7 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td><a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a> å½¢å¼ã§ã®ã‚¤ãƒ™ãƒ³ãƒˆã®æœŸé–“。ãŸã¨ãˆã°ã€<code>"PT1H"</code> ã¨ã„ã†å€¤ã¯ã‚¤ãƒ™ãƒ³ãƒˆãŒ 1 時間ã§ã‚ã‚‹ã“ã¨ã€<code>"P2W"</code> ã¨ã„ã†å€¤ã¯æœŸé–“㌠2 週間ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ @@ -444,24 +444,24 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>値 1 ã¯ã€ãã®ã‚¤ãƒ™ãƒ³ãƒˆãŒãƒãƒ¼ã‚«ãƒ«ã®ã‚¿ã‚¤ãƒ ゾーンã§å®šç¾©ã•れãŸçµ‚日をå ã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ 値 0 ã¯ã€1 æ—¥ã®ã©ã“ã‹ã§å§‹ã¾ã£ã¦çµ‚ã‚る定例ã®ã‚¤ãƒ™ãƒ³ãƒˆã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ </td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>イベント形å¼ã®ç¹°ã‚Šè¿”ã—発生ルール。ãŸã¨ãˆã°ã€<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code> ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ãã®ä»–ã®ä¾‹ã«ã¤ã„ã¦ã¯ã€<a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">ã“ã¡ã‚‰</a>ã‚’ã”覧ãã ã•ã„。 </td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> <td>イベントã®ç¹°ã‚Šè¿”ã—発生日。通常ã€{@link android.provider.CalendarContract.EventsColumns#RDATE} 㯠{@link android.provider.CalendarContract.EventsColumns#RRULE} ã¨çµ„ã¿åˆã‚ã›ã¦ã€ç¹°ã‚Šè¿”ã—発生全体を定義ã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚ @@ -470,13 +470,13 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> 詳細ã«ã¤ã„ã¦ã¯ã€<a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 ã®ä»•様</a>ã‚’ã”覧ãã ã•ã„。</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>ã“ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’埋ã¾ã£ã¦ã„ã‚‹æ™‚é–“ã«æ•°ãˆã‚‹ã‹ã€ãれã¨ã‚‚スケジュールã®ã‚„り直ã—ãŒåˆ©ãç©ºãæ™‚é–“ã¨ã¿ãªã™ã‹ã€‚ </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> </li> - + <li>繰り返ã•れãªã„イベントã«ã¯ã€{@link android.provider.CalendarContract.EventsColumns#DTEND} ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ </li> - - + + <li>繰り返ã•れるイベントã«ã¯ã€{@link android.provider.CalendarContract.EventsColumns#RRULE} 㨠{@link android.provider.CalendarContract.EventsColumns#RDATE} ã«åŠ ãˆã¦ {@link android.provider.CalendarContract.EventsColumns#DURATION} ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ @@ -528,7 +528,7 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> </li> - + </ul> <p>ã‚¤ãƒ™ãƒ³ãƒˆã®æŒ¿å…¥ã®ä¾‹ã‚’次ã«ç¤ºã—ã¾ã™ã€‚ç°¡æ½”ã«ã™ã‚‹ãŸã‚ã€ã“ã®ä¾‹ã¯ UI スレッドã§å®Ÿè¡Œã•れã¦ã„ã¾ã™ã€‚ @@ -539,8 +539,8 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,7 +625,7 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Attendees テーブル</h2> @@ -637,7 +637,7 @@ Log.i(DEBUG_TAG, "Rows deleted: " + rows); ã“ã® {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ã¯ç‰¹å®šã®ã‚¤ãƒ™ãƒ³ãƒˆã® {@link android.provider.BaseColumns#_ID} ã¨ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -</p> +</p> <p>次ã®è¡¨ã«ã€æ›¸ãè¾¼ã¿å¯èƒ½ãªãƒ•ィールドを示ã—ã¾ã™ã€‚ æ–°ã—ã„å‚åŠ è€…ã‚’æŒ¿å…¥ã™ã‚‹éš›ã«ã¯ã€<code>ATTENDEE_NAME</code> を除ãã™ã¹ã¦ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ @@ -801,18 +801,18 @@ Instances ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。イベントã®ç™ºç”Ÿã‚’ã </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>インスタンスã®ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ ゾーンã«ãŠã‘るユリウス暦ã§ã®çµ‚了日。 - - + + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>カレンダーã®ã‚¿ã‚¤ãƒ ゾーンã«ãŠã‘ã‚‹åˆå‰é›¶æ™‚を基準ã«ã—ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®çµ‚了分。 </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ Instances ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。イベントã®ç™ºç”Ÿã‚’ã </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>インスタンスã®ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ ゾーンã«ãŠã‘るユリウス暦ã§ã®é–‹å§‹æ—¥ã€‚ + <td>インスタンスã®ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ ゾーンã«ãŠã‘るユリウス暦ã§ã®é–‹å§‹æ—¥ã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>カレンダーã®ã‚¿ã‚¤ãƒ ゾーンã«ãŠã‘ã‚‹åˆå‰é›¶æ™‚を基準ã«ã—ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®é–‹å§‹åˆ†ã€‚ - + </td> - + </tr> </table> @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -924,7 +924,7 @@ while (cur.moveToNext()) { <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> URI ã¯ã€{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI} を使用ã—ã¦ã‚‚å‚ç…§ã§ãã¾ã™ã€‚ ã“ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">インテントを使用ã—ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ データã®å‚ç…§</a>ã‚’ã”覧ãã ã•ã„。 - + </td> <td><code><ms_since_epoch></code> ã«æŒ‡å®šã•ã‚ŒãŸæ™‚刻ã§ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’é–‹ãã¾ã™ã€‚</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + URI ã¯ã€{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} を使用ã—ã¦ã‚‚å‚ç…§ã§ãã¾ã™ã€‚ ã“ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">インテントを使用ã—ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ データã®å‚ç…§</a>ã‚’ã”覧ãã ã•ã„。 - + </td> <td><code><event_id></code> ã§æŒ‡å®šã•れãŸã‚¤ãƒ™ãƒ³ãƒˆã‚’å‚ç…§ã—ã¾ã™ã€‚</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + URI ã¯ã€{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} を使用ã—ã¦ã‚‚å‚ç…§ã§ãã¾ã™ã€‚ ã“ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">インテントを使用ã—ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ データã®ç·¨é›†</a>ã‚’ã”覧ãã ã•ã„。 - - + + </td> <td><code><event_id></code> ã§æŒ‡å®šã•れãŸã‚¤ãƒ™ãƒ³ãƒˆã‚’編集ã—ã¾ã™ã€‚</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - + URI ã¯ã€{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} を使用ã—ã¦ã‚‚å‚ç…§ã§ãã¾ã™ã€‚ ã“ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">インテントを使用ã—ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ ãƒ‡ãƒ¼ã‚¿ã®æŒ¿å…¥</a>ã‚’ã”覧ãã ã•ã„。 - + </td> <td>イベントを作æˆã—ã¾ã™ã€‚</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>イベントã®åå‰ã€‚</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} </td> <td>イベントã®é–‹å§‹æ™‚刻(エãƒãƒƒã‚¯ã‹ã‚‰ã®ãƒŸãƒªç§’å˜ä½ï¼‰ã€‚</td> @@ -1004,25 +1004,25 @@ while (cur.moveToNext()) { <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} </td> - + <td>イベントã®çµ‚了時刻(エãƒãƒƒã‚¯ã‹ã‚‰ã®ãƒŸãƒªç§’å˜ä½ï¼‰ã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY} </td> - + <td>イベントãŒçµ‚æ—¥ã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。使用ã§ãる値㯠<code>true</code> ã¾ãŸã¯ <code>false</code> ã§ã™ã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION} </td> - + <td>イベントã®å ´æ‰€ã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION} </td> - + <td>イベントã®èª¬æ˜Žã€‚</td> </tr> <tr> @@ -1039,16 +1039,16 @@ while (cur.moveToNext()) { <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL} </td> - + <td>イベントãŒå…¬é–‹ã‹éžå…¬é–‹ã‹ã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY} </td> - + <td>ã“ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’埋ã¾ã£ã¦ã„ã‚‹æ™‚é–“ã«æ•°ãˆã‚‹ã‹ã€ãれã¨ã‚‚スケジュールã®ã‚„り直ã—ãŒåˆ©ãç©ºãæ™‚é–“ã¨ã¿ãªã™ã‹ã€‚</td> - -</table> + +</table> <p>次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã“れらã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆä½¿ç”¨æ–¹æ³•を説明ã—ã¾ã™ã€‚</p> @@ -1059,14 +1059,14 @@ while (cur.moveToNext()) { </p> - + <p>ã“ã®ã‚¢ãƒ—ãƒãƒ¼ãƒã®ã‚¢ãƒ—リケーションをユーザーãŒå®Ÿè¡Œã™ã‚‹ã¨ã€ã‚¢ãƒ—リケーションã«ã‚ˆã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«èª˜å°Žã•ã‚Œã‚¤ãƒ™ãƒ³ãƒˆã‚’è¿½åŠ ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ {@link android.content.Intent#ACTION_INSERT INSERT} インテントã¯ã€è¿½åŠ ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’ä½¿ç”¨ã—ã¦ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«æ ¼ç´ã•れã¦ã„ã‚‹è©³ç´°æƒ…å ±ã‚’ãƒ•ã‚©ãƒ¼ãƒ ã«è‡ªå‹•入力ã—ã¾ã™ã€‚ ãれã«å¯¾ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¤ãƒ™ãƒ³ãƒˆã®ã‚ャンセルã€å¿…è¦ã«å¿œã˜ãŸã‚¤ãƒ™ãƒ³ãƒˆã®ç·¨é›†ã€ã‚¤ãƒ™ãƒ³ãƒˆã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¸ã®ä¿å˜ãŒã§ãã¾ã™ã€‚ </p> - + <p>次ã«ç¤ºã™ã®ã¯ã€2012 å¹´ 1 月 19 æ—¥ã®åˆå‰ 7:30 ã‹ã‚‰ åˆå‰ 8:30 ã¾ã§ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’スケジュールã™ã‚‹ã‚³ãƒ¼ãƒ‰ スニペットã§ã™ã€‚ @@ -1075,7 +1075,7 @@ while (cur.moveToNext()) { <ul> <li>URI ã¨ã—㦠{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} を指定ã—ã¦ã„ã¾ã™ã€‚ </li> - + <li>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} 㨠{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} ã®å„エクストラ フィールドを使用ã—ã¦ã€ã‚¤ãƒ™ãƒ³ãƒˆã®æ™‚間をフォームã«è‡ªå‹•入力ã—ã¦ã„ã¾ã™ã€‚ @@ -1083,10 +1083,10 @@ while (cur.moveToNext()) { ã“れらã®å€¤ã¯ã€ã‚¨ãƒãƒƒã‚¯ã‹ã‚‰ã® UTC ミリ秒å˜ä½ã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ </li> - + <li>{@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} エクストラ フィールドを使用ã—ã¦ã€å‚åŠ è€…ã‚’ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ç¤ºã—ãŸã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã‚’指定ã—ã¦ã„ã¾ã™ã€‚ </li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,12 +1158,12 @@ startActivity(intent); <ul> <li>åŒæœŸã‚¢ãƒ€ãƒ—ã‚¿ã¯ã€{@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} ã‚’ <code>true</code> ã«è¨å®šã—ã¦ã€ãれãŒåŒæœŸã‚¢ãƒ€ãƒ—ã‚¿ã§ã‚ã‚‹ã“ã¨ã‚’示ã™å¿…è¦ãŒã‚りã¾ã™ã€‚</li> - - + + <li>åŒæœŸã‚¢ãƒ€ãƒ—ã‚¿ã¯ã€{@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} 㨠{@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} をクエリ パラメータã¨ã—㦠URI ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ </li> - + <li>åŒæœŸã‚¢ãƒ€ãƒ—ã‚¿ã¯ã€ã‚¢ãƒ—リケーションやウィジェットより多ãã®åˆ—ã«æ›¸ãè¾¼ã¿ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ ãŸã¨ãˆã°ã€ã‚¢ãƒ—リケーションã§å¤‰æ›´ã§ãã‚‹ã®ã¯ã€åå‰ã€è¡¨ç¤ºåã€å¯è¦–性ã®è¨å®šã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ãŒåŒæœŸå¯¾è±¡ã‹ã©ã†ã‹ãªã©ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ç‰¹æ€§ã®ä¸€éƒ¨ã®ã¿ã§ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/ja/guide/topics/providers/contacts-provider.jd index e12b62f222c5..09bc249543db 100644 --- a/docs/html-intl/intl/ja/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/ja/guide/topics/providers/contacts-provider.jd @@ -2146,19 +2146,19 @@ startActivity(insertIntent); viewStreamItemPhotoActivity="<em>viewphotostream_activity_name</em>"> </pre> <p> - <strong>å«ã¾ã‚Œã¦ã„るファイル:</strong> + <strong>å«ã¾ã‚Œã¦ã„るファイル:</strong> </p> <p> <code>res/xml/contacts.xml</code> </p> <p> - <strong>å«ã‚ã‚‹ã“ã¨ã®ã§ãã‚‹è¦ç´ :</strong> + <strong>å«ã‚ã‚‹ã“ã¨ã®ã§ãã‚‹è¦ç´ :</strong> </p> <p> <strong><code><ContactsDataKind></code></strong> </p> <p> - <strong>説明:</strong> + <strong>説明:</strong> </p> <p> ユーザーãŒé€£çµ¡å…ˆã® 1 人をソーシャル ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚ãƒ³ã‚°ã«æ‹›å¾…ã§ãるよã†ã«ã—ãŸã‚Šã€ã‚½ãƒ¼ã‚·ãƒ£ãƒ« ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚ング ストリームã®ã©ã‚Œã‹ãŒã‚¢ãƒƒãƒ—デートã•れãŸã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€šçŸ¥ã—ãŸã‚Šã™ã‚‹ãŸã‚ã®ã€Android コンãƒãƒ¼ãƒãƒ³ãƒˆã‚„ UI ラベルを宣言ã—ã¾ã™ã€‚ @@ -2170,7 +2170,7 @@ startActivity(insertIntent); </p> <p> - <strong>属性:</strong> + <strong>属性:</strong> </p> <dl> <dt>{@code inviteContactActivity}</dt> @@ -2248,11 +2248,11 @@ Google+ サークルã®ã©ã‚Œã‹ã‚’クリックã™ã‚‹ã¨ã€ãã®ã‚µãƒ¼ã‚¯ãƒ«ã« android:detailColumn="<em>column_name</em>"> </pre> <p> - <strong>å«ã¾ã‚Œã¦ã„るファイル:</strong> + <strong>å«ã¾ã‚Œã¦ã„るファイル:</strong> </p> <code><ContactsAccountType></code> <p> - <strong>説明:</strong> + <strong>説明:</strong> </p> <p> ã“ã®è¦ç´ ã¯ã€ã‚«ã‚¹ã‚¿ãƒ データ行ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æœªåŠ å·¥é€£çµ¡å…ˆã®è©³ç´°ã®ä¸€éƒ¨ã¨ã—ã¦é€£çµ¡å…ˆã‚¢ãƒ—リケーションã«è¡¨ç¤ºã•ã›ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚ @@ -2263,7 +2263,7 @@ Google+ サークルã®ã©ã‚Œã‹ã‚’クリックã™ã‚‹ã¨ã€ãã®ã‚µãƒ¼ã‚¯ãƒ«ã« </p> <p> - <strong>属性:</strong> + <strong>属性:</strong> </p> <dl> <dt>{@code android:mimeType}</dt> diff --git a/docs/html-intl/intl/ja/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/ja/guide/topics/providers/content-provider-creating.jd index af2181482d33..b14174fa37c4 100644 --- a/docs/html-intl/intl/ja/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/ja/guide/topics/providers/content-provider-creating.jd @@ -377,7 +377,7 @@ BLOB 列内ã®ãƒ‡ãƒ¼ã‚¿ã®å†…容ã¯ã€MIME タイプ列ã®å€¤ã«ã‚ˆã£ã¦ç¤ºã•ã プãƒãƒã‚¤ãƒ€ã®ä»»æ„ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ URI ã«ä¸€è‡´ã—ã¾ã™ã€‚ </dd> <dt> - <code>content://com.example.app.provider/table2/*</code>: + <code>content://com.example.app.provider/table2/*</code>: </dt> <dd> テーブル <code>dataset1</code> 㨠<code>dataset2</code> ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ URI ã«ä¸€è‡´ã—ã¾ã™ãŒã€<code>table1</code> ã‚„ <code>table3</code> ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ URI ã«ã¯ä¸€è‡´ã—ã¾ã›ã‚“。 @@ -791,7 +791,7 @@ protected static final class MainDatabaseHelper extends SQLiteOpenHelper { タイプ部分: <code>vnd</code> </li> <li> - サブタイプ部分: + サブタイプ部分: <ul> <li> URI パターン㌠1 ã¤ã®è¡Œã®å ´åˆ: <code>android.cursor.<strong>item</strong>/</code> diff --git a/docs/html-intl/intl/ja/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/ja/guide/topics/resources/providing-resources.jd index 6729e8b6ee8a..2024d5d0bdae 100644 --- a/docs/html-intl/intl/ja/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/ja/guide/topics/resources/providing-resources.jd @@ -110,7 +110,7 @@ MyProject/ <tr> <td><code>drawable/</code></td> - <td><p>ビットマップ ファイル({@code .png}ã€{@code .9.png}ã€{@code .jpg}ã€{@code .gif})ã¾ãŸã¯æ¬¡ã®ãƒ‰ãƒãƒ¼ã‚¢ãƒ–ル リソース サブタイプã«ã‚³ãƒ³ãƒ‘イルã•れる XML ファイル: + <td><p>ビットマップ ファイル({@code .png}ã€{@code .9.png}ã€{@code .jpg}ã€{@code .gif})ã¾ãŸã¯æ¬¡ã®ãƒ‰ãƒãƒ¼ã‚¢ãƒ–ル リソース サブタイプã«ã‚³ãƒ³ãƒ‘イルã•れる XML ファイル: </p> <ul> <li>ビットマップ ファイル</li> @@ -510,7 +510,7 @@ xlarge} è˜åˆ¥åã®ã‚¿ã‚°ãŒä»˜ã„ã¦ã„ã‚‹ãŒã€ç«¯æœ«ã¯é€šå¸¸ã‚µã‚¤ã‚ºã®ç”» </p> <p>API レベル 4 ã§è¿½åŠ ã€‚<em></em></p> - + <p>詳細ã«ã¤ã„ã¦ã¯ã€ã€Œ<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>ã€ã‚’ã”覧ãã ã•ã„。 </p> <p>ã•らã«ã€{@link android.content.res.Configuration#screenLayout} è¨å®šãƒ•ィールドもã”覧ãã ã•ã„。ã“れã¯ã€ç”»é¢ã®ã‚µã‚¤ã‚ºãŒå°ã€ä¸ã€å¤§ã®ã„ãšã‚Œã‹ã§ã‚ã‚‹ã‹ã‚’表ã—ã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/guide/topics/ui/controls.jd b/docs/html-intl/intl/ja/guide/topics/ui/controls.jd index 0bc2063764bb..c76771fc00bc 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ parent.link=index.html <tr> <td><a href="controls/radiobutton.html">ラジオボタン</a></td> <td>グループã§é¸æŠžã§ãるオプション㯠1 ã¤ã®ã¿ã§ã‚ã‚‹ã“ã¨ã‚’除ãã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¨åŒæ§˜ã§ã™ã€‚</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/ja/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/ja/guide/topics/ui/dialogs.jd index 358fc304f60a..006dc9996296 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>関連ドã‚ュメント</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">ダイアãƒã‚° デザインã®ã‚¬ã‚¤ãƒ‰</a></li> @@ -142,7 +142,7 @@ public class FireMissilesDialogFragment extends DialogFragment { <div class="figure" style="width:290px;margin:0 0 0 20px"> <img src="{@docRoot}images/ui/dialog_buttons.png" alt="" /> -<p class="img-caption"><strong>図 1</strong> +<p class="img-caption"><strong>図 1</strong> メッセージ㨠2 ã¤ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ ボタンをå«ã‚€ãƒ€ã‚¤ã‚¢ãƒã‚°</p> </div> @@ -248,7 +248,7 @@ AlertDialog dialog = builder.create(); <dt>Neutral</dt> <dd>ユーザーãŒã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ç¶šã‘ãŸããªã„å¯èƒ½æ€§ãŒã‚りã€ã‚ャンセルã—ãŸã„ã¨ã¯é™ã‚‰ãªã„å ´åˆã«ä½¿ã„ã¾ã™ã€‚ ãƒã‚¸ãƒ†ã‚£ãƒ– ボタンã¨ãƒã‚¬ãƒ†ã‚£ãƒ– ボタンã®é–“ã«è¡¨ç¤ºã•れã¾ã™ã€‚ -ãŸã¨ãˆã°ã€ã€Œå¾Œã§é€šçŸ¥ã™ã‚‹ã€ã®ã‚ˆã†ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å ´åˆã§ã™ã€‚</dd> +ãŸã¨ãˆã°ã€ã€Œå¾Œã§é€šçŸ¥ã™ã‚‹ã€ã®ã‚ˆã†ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å ´åˆã§ã™ã€‚</dd> </dl> <p>å„ボタンタイプã®ã„ãšã‚Œã‹ 1 ã¤ã®ã¿ã‚’ {@link @@ -258,7 +258,7 @@ android.app.AlertDialog} ã«è¿½åŠ ã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€2 ã¤ä»¥ä¸Šã®ã€Œãƒ <div class="figure" style="width:290px;margin:0 0 0 40px"> <img src="{@docRoot}images/ui/dialog_list.png" alt="" /> -<p class="img-caption"><strong>図 3</strong> +<p class="img-caption"><strong>図 3</strong> タイトルã¨ãƒªã‚¹ãƒˆã‚’å«ã‚€ãƒ€ã‚¤ã‚¢ãƒã‚°</p> </div> @@ -318,7 +318,7 @@ android.app.AlertDialog.Builder#setAdapter setAdapter()} を使ã£ã¦ãƒªã‚¹ãƒˆã‚ <h4 id="Checkboxes">固定ã®è¤‡æ•°é¸æŠžã¾ãŸã¯æŽ’ä»–çš„é¸æŠžãƒªã‚¹ãƒˆã‚’è¿½åŠ ã™ã‚‹</h4> <p>è¤‡æ•°é¸æŠžã‚¢ã‚¤ãƒ†ãƒ ï¼ˆãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ï¼‰ã¾ãŸã¯æŽ’ä»–çš„é¸æŠžã‚¢ã‚¤ãƒ†ãƒ ï¼ˆãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ï¼‰ã®ãƒªã‚¹ãƒˆã‚’è¿½åŠ ã™ã‚‹ã«ã¯ã€{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ã¾ãŸã¯ {@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ã¾ãŸã¯ {@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} メソッドをãれãžã‚Œä½¿ç”¨ã—ã¾ã™ã€‚ @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -372,7 +372,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { </pre> <p>従æ¥ã®ãƒªã‚¹ãƒˆã¨ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚’å«ã‚€ãƒªã‚¹ãƒˆã§ã¯ã€ã€ŒæŽ’ä»–çš„é¸æŠžã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒæä¾›ã•れã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®é¸æŠžã‚’固定ã•ã›ãŸã„å ´åˆã¯ã€{@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} を使用ã—ã¦ãã ã•ã„。ã¤ã¾ã‚Šã€ãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’後ã§ã‚‚ã†ä¸€åº¦é–‹ãå ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç¾åœ¨ã®é¸æŠžã‚’表示ã—ã€ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚’å«ã‚€ãƒªã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚ @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ public class NoticeDialogFragment extends DialogFragment { public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ public class CustomDialogFragment extends DialogFragment { public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); diff --git a/docs/html-intl/intl/ja/guide/topics/ui/menus.jd b/docs/html-intl/intl/ja/guide/topics/ui/menus.jd index 7d8090e7a0ad..53142a1b3e58 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/menus.jd @@ -83,9 +83,9 @@ Android 3.0 ã‹ã‚‰ã¯ã€<em>Menu</em> ボタンãŒå»ƒæ¢ã•れãŸãŸã‚(一部 </p> <p><a href="#options-menu">オプション メニューã®ä½œæˆ</a>ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã”覧ãã ã•ã„。</p> </dd> - + <dt><strong>コンテã‚スト メニューã¨ã‚³ãƒ³ãƒ†ã‚スト アクション モード</strong></dt> - + <dd>コンテã‚スト メニューã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦ç´ を長押ã—クリックã™ã‚‹ã¨ãã«è¡¨ç¤ºã•れる<a href="#FloatingContextMenu">フãƒãƒ¼ãƒ†ã‚£ãƒ³ã‚° メニュー</a>ã§ã™ã€‚ ã“ã“ã§ã¯ã€é¸æŠžã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„やコンテã‚スト フレームã«å½±éŸ¿ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒæä¾›ã•れã¾ã™ã€‚ @@ -94,7 +94,7 @@ Android 3.0 ã‹ã‚‰ã¯ã€<em>Menu</em> ボタンãŒå»ƒæ¢ã•れãŸãŸã‚(一部 </p> <p><a href="#context-menu">コンテã‚スト メニューã®ä½œæˆ</a>ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã”覧ãã ã•ã„。</p> </dd> - + <dt><strong>ãƒãƒƒãƒ—アップ メニュー</strong></dt> <dd>ãƒãƒƒãƒ—アップ メニューã§ã¯ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’呼ã³å‡ºã™ãƒ“ューã«å›ºå®šã•れãŸç¸¦æ–¹å‘ã®ãƒªã‚¹ãƒˆã§ã‚¢ã‚¤ãƒ†ãƒ ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ 特定ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«é–¢é€£ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®æ¦‚è¦ã‚’表示ã—ãŸã‚Šã€ã‚³ãƒžãƒ³ãƒ‰ã® 2 番目ã®éƒ¨åˆ†ã®ã‚ªãƒ—ションを表示ã—ãŸã‚Šã™ã‚‹å ´åˆã«é©ã—ã¦ã„ã¾ã™ã€‚ @@ -135,7 +135,7 @@ Android 3.0 ã‹ã‚‰ã¯ã€<em>Menu</em> ボタンãŒå»ƒæ¢ã•れãŸãŸã‚(一部 <dt><code><item></code></dt> <dd>メニュー㧠1 ã¤ã®ã‚¢ã‚¤ãƒ†ãƒ を表示ã™ã‚‹ {@link android.view.MenuItem} を作æˆã—ã¾ã™ã€‚ã“ã®è¦ç´ ã«ã¯ã€ã‚µãƒ–メニューを作æˆã™ã‚‹ãŸã‚ã«ã€ãƒã‚¹ãƒˆã•れ㟠<code><menu></code> è¦ç´ ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ </dd> - + <dt><code><group></code></dt> <dd>çœç•¥å¯èƒ½ãª {@code <item>} è¦ç´ ã®éžè¡¨ç¤ºã‚³ãƒ³ãƒ†ãƒŠã€‚メニュー アイテムã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–状態やå¯è¦–性ã®ã‚ˆã†ãªãƒ—ãƒãƒ‘ティを共有ã§ãるよã†ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ アイテムを分類ã§ãã¾ã™ã€‚ 詳細ã«ã¤ã„ã¦ã¯ã€<a href="#groups">メニュー グループã®ä½œæˆ</a>ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã”覧ãã ã•ã„。 @@ -742,8 +742,8 @@ android.view.Menu} オブジェクトã«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ リソースをインフレ <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> diff --git a/docs/html-intl/intl/ja/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/ja/guide/topics/ui/notifiers/notifications.jd index f341256a3225..d0f1f72f626a 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/notifiers/notifications.jd @@ -531,7 +531,7 @@ numMessages = 0; <li> å¿…è¦ã«å¿œã˜ã¦ã€{@link android.support.v4.app.TaskStackBuilder#editIntentAt TaskStackBuilder.editIntentAt()} を呼ã³å‡ºã—ã€ã‚¹ã‚¿ãƒƒã‚¯ä¸Šã® {@link android.content.Intent} オブジェクトã«å¼•æ•°ã‚’è¿½åŠ ã—ã¾ã™ã€‚ -ã“れã¯ã€å ´åˆã«ã‚ˆã£ã¦ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {@link android.app.Activity} ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ +ã“れã¯ã€å ´åˆã«ã‚ˆã£ã¦ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {@link android.app.Activity} ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ <i>[戻る]</i> を使ã£ã¦ç§»å‹•ã—ãŸã¨ãã«ã€é©åˆ‡ãªãƒ‡ãƒ¼ã‚¿ãŒè¡¨ç¤ºã•れるよã†ã«ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚ </li> diff --git a/docs/html-intl/intl/ja/guide/topics/ui/overview.jd b/docs/html-intl/intl/ja/guide/topics/ui/overview.jd index 08d93560cb4e..7bc49f4f12fc 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ android.view.View} 㨠{@link android.view.ViewGroup} オブジェクトã®éšŽå± <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ android.view.View} 㨠{@link android.view.ViewGroup} オブジェクトã®éšŽå± <p>UI レイアウト作æˆã®ã‚¬ã‚¤ãƒ‰ã«ã¤ã„ã¦ã¯ã€<a href="declaring-layout.html">XML レイアウト</a>ã‚’ã”覧ãã ã•ã„。 - + <h2 id="UIComponents">ユーザー インターフェース コンãƒãƒ¼ãƒãƒ³ãƒˆ</h2> <p>{@link android.view.View} 㨠{@link android.view.ViewGroup} オブジェクトを使用ã—ã¦ã™ã¹ã¦ã® UI をビルドã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。 diff --git a/docs/html-intl/intl/ja/guide/topics/ui/settings.jd b/docs/html-intl/intl/ja/guide/topics/ui/settings.jd index 9e6bb9d04169..c36a01c898fe 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/settings.jd @@ -226,7 +226,7 @@ XML ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ãŒå®¹æ˜“ãªç°¡å˜ã«èªã‚€ã“ã¨ãŒã§ãã‚‹æ§‹é€ ã‚’æ <dt>{@code android:key}</dt> <dd>ã“ã®å±žæ€§ã¯ã€ãƒ‡ãƒ¼ã‚¿å€¤ã‚’ä¿æŒã™ã‚‹ãƒ—リファレンスã§å¿…è¦ã§ã™ã€‚è¨å®šã®å€¤ã‚’ {@link android.content.SharedPreferences} ã«ä¿å˜ã™ã‚‹ã¨ãã«ã‚·ã‚¹ãƒ†ãƒ ãŒä½¿ç”¨ã™ã‚‹ä¸€æ„ã®ã‚ー(文å—列)を指定ã—ã¾ã™ã€‚ - + <p>プリファレンス㌠{@link android.preference.PreferenceCategory} ã¾ãŸã¯{@link android.preference.PreferenceScreen} ã®å ´åˆã€ã¾ãŸã¯ãƒ—リファレンス㌠{@link android.content.Intent} ã®å‘¼ã³å‡ºã—を指定ã—ã¦ã„ã‚‹å ´åˆï¼ˆ<a href="#Intents">{@code <intent>}</a> è¦ç´ を使用)ã€ã¾ãŸã¯ {@link android.app.Fragment} ã®è¡¨ç¤ºã‚’指定ã—ã¦ã„ã‚‹å ´åˆï¼ˆ<a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code android:fragment}</a> 属性を使用)ã®ã¿ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ã“ã®å±žæ€§ã¯<em>å¿…è¦ã‚りã¾ã›ã‚“</em>。 @@ -285,7 +285,7 @@ XML ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ãŒå®¹æ˜“ãªç°¡å˜ã«èªã‚€ã“ã¨ãŒã§ãã‚‹æ§‹é€ ã‚’æ <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ XML ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ãŒå®¹æ˜“ãªç°¡å˜ã«èªã‚€ã“ã¨ãŒã§ãã‚‹æ§‹é€ ã‚’æ android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -588,11 +588,11 @@ PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false); <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -672,15 +672,15 @@ public class SettingsActivity extends PreferenceActivity { </p> <p>ãŸã¨ãˆã°ã€ä»¥ä¸‹ã¯ Android 3.0 以é™ã§ä½¿ç”¨ã•れるプリファレンス ヘッダー㮠XML ファイル({@code res/xml/preference_headers.xml})ã§ã™ã€‚ -</p> +</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ public class SettingsActivity extends PreferenceActivity { <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -975,11 +975,11 @@ prefs.registerOnSharedPreferenceChangeListener(listener); public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/ja/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/ja/guide/topics/ui/ui-events.jd index 1cff3f62d022..b4b3766e768a 100644 --- a/docs/html-intl/intl/ja/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/ja/guide/topics/ui/ui-events.jd @@ -187,7 +187,7 @@ dispatchKeyEvent()}</code> メソッドを介ã—ã¦ä¼ã‚ã£ã¦ã„ã‚‹ã¨åˆ¤æ–ã ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - {@link android.view.ViewGroup} ãŒã€ã‚¤ãƒ™ãƒ³ãƒˆãŒåビューã«ãƒ‡ã‚£ã‚¹ãƒ‘ッãƒã•れãŸã¨ãã«ã‚¤ãƒ™ãƒ³ãƒˆã‚’監視ã§ãるよã†ã«ã—ã¾ã™ã€‚ </li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) - ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’親ビュー上ã§å‘¼ã³å‡ºã™ã“ã¨ã§ã€<code>{@link + ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’親ビュー上ã§å‘¼ã³å‡ºã™ã“ã¨ã§ã€<code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code> ã«ã‚ˆã‚‹è¦ªãƒ“ューã®ã‚¿ãƒƒãƒ—イベントã®ã‚¤ãƒ³ã‚¿ãƒ¼ã‚»ãƒ—トを許å¯ã—ãªã„ã“ã¨ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ </li> </ul> @@ -199,7 +199,7 @@ dispatchKeyEvent()}</code> メソッドを介ã—ã¦ä¼ã‚ã£ã¦ã„ã‚‹ã¨åˆ¤æ–ã ãŸã ã—ã€ç«¯æœ«ã«ã‚¿ãƒƒãƒæ©Ÿèƒ½ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¿ãƒƒãƒ—ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®æ“作を開始ã™ã‚‹ãŸã‚ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚’ãƒã‚¤ãƒ©ã‚¤ãƒˆã™ã‚‹ã“ã¨ã‚„ã€ç‰¹å®šã®ãƒ“ューã«ãƒ•ォーカスを与ãˆã‚‹ã“ã¨ã¯å¿…è¦ã§ã¯ãªããªã‚Šã¾ã—ãŸã€‚ ãã®ãŸã‚ã€ã€Œã‚¿ãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã€ã¨å付ã‘ã‚‰ã‚ŒãŸæ“作モードãŒå˜åœ¨ã—ã¾ã™ã€‚ - + </p> <p> タッãƒå¯èƒ½ãªç«¯æœ«ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç”»é¢ã‚’タップã™ã‚‹ã¨ã€ç«¯æœ«ãŒã‚¿ãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã™ã€‚ @@ -233,7 +233,7 @@ dispatchKeyEvent()}</code> メソッドを介ã—ã¦ä¼ã‚ã£ã¦ã„ã‚‹ã¨åˆ¤æ–ã <p>フォーカスã®ç§»å‹•ã¯ã€æ‰€å®šã®æ–¹å‘ã§æœ€ã‚‚è¿‘ãã«ã‚るアイテムを見ã¤ã‘るアルゴリズムã«åŸºã¥ãã¾ã™ãŒã€ ã¾ã‚Œã«ã€ãƒ‡ãƒ•ォルトã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒé–‹ç™ºè€…ã®æ„図ã™ã‚‹å‹•作ã¨ä¸€è‡´ã—ãªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ -ã“ã®å ´åˆã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ ファイル㮠+ã“ã®å ´åˆã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ ファイル㮠<var>nextFocusDown</var>〠<var>nextFocusLeft</var>〠<var>nextFocusRight</var>〠<var>nextFocusUp</var> ã®å„ XML 属性を明示的ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚ã“れらã®å±žæ€§ã®ã„ãšã‚Œã‹ã‚’ã€ãƒ•ォーカスã®ç§»å‹•<em>å…ƒ</em>ã®ãƒ“ューã«è¿½åŠ ã—ã¾ã™ã€‚ @@ -253,11 +253,11 @@ dispatchKeyEvent()}</code> メソッドを介ã—ã¦ä¼ã‚ã£ã¦ã„ã‚‹ã¨åˆ¤æ–ã </pre> <p>本æ¥ã€ä¸Šè¨˜ã®ç¸¦æ–¹å‘ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã§ã¯ã€1 番上ã®ãƒœã‚¿ãƒ³ã‹ã‚‰ä¸Šã«ç§»å‹•ã—よã†ã¨ã—ã¦ã‚‚ã€2 番目ã®ãƒœã‚¿ãƒ³ã‹ã‚‰ä¸‹ã«ç§»å‹•ã—よã†ã—ã¦ã‚‚ã€ã©ã“ã«ã‚‚フォーカスãŒç§»å‹•ã—ãªã„ã¯ãšã§ã—ãŸãŒã€ä¸Šè¨˜ã®å‡¦ç†ã«ã‚ˆã‚Šã€ -1 番上ã®ãƒœã‚¿ãƒ³ã«ã‚ˆã£ã¦ 1 番下ã®ãƒœã‚¿ãƒ³ãŒ +1 番上ã®ãƒœã‚¿ãƒ³ã«ã‚ˆã£ã¦ 1 番下ã®ãƒœã‚¿ãƒ³ãŒ <var>nextFocusUp</var> ã¨ã—ã¦å®šç¾©ã•れ(逆ã®å ´åˆã‚‚åŒæ§˜ï¼‰ã€ãƒ•ォーカスãŒã€ä¸Šã‹ã‚‰ä¸‹ã¨ä¸‹ã‹ã‚‰ä¸Šã«é †ç•ªã«ç§»å‹•ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ </p> -<p>UI ã§ãƒ“ューをフォーカスå¯èƒ½ã«ã™ã‚‹å ´åˆã¯ï¼ˆå¾“æ¥ã¯ã€ãƒ“ューã¯ãƒ•ォーカスå¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“)ã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å®£è¨€ã§ <code>android:focusable</code> XML 属性をビューã«è¿½åŠ ã—ã€å€¤ã‚’ +<p>UI ã§ãƒ“ューをフォーカスå¯èƒ½ã«ã™ã‚‹å ´åˆã¯ï¼ˆå¾“æ¥ã¯ã€ãƒ“ューã¯ãƒ•ォーカスå¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“)ã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å®£è¨€ã§ <code>android:focusable</code> XML 属性をビューã«è¿½åŠ ã—ã€å€¤ã‚’ <var>true</var> ã«è¨å®šã—ã¾ã™ã€‚ã¾ãŸã€<code>android:focusableInTouchMode</code> を使用ã—ã¦ã€ã‚¿ãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã®ã¨ãã«ãƒ“ューをフォーカスå¯èƒ½ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ </p> @@ -282,7 +282,7 @@ dispatchKeyEvent()}</code> メソッドを介ã—ã¦ä¼ã‚ã£ã¦ã„ã‚‹ã¨åˆ¤æ–ã the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/ja/preview/download-ota.jd b/docs/html-intl/intl/ja/preview/download-ota.jd index 1107baf4249e..835597bf23c5 100644 --- a/docs/html-intl/intl/ja/preview/download-ota.jd +++ b/docs/html-intl/intl/ja/preview/download-ota.jd @@ -202,65 +202,73 @@ page.title=端末㮠OTA イメージã®é©ç”¨ <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5:15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1:5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5:3fac09fef759dde26e57cb80b20b6477<br> - SHA-1:27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5:58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5:92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5:1461622ad53ea842b2722fa7b49b8172<br> - SHA-1:409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1:87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> - <td>General Mobile 4G(Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1:6f33742290eb46f2561891f38ca2e754b4e50c6a + <td>General Mobile 4G (Android One) <br>"seed"</td> + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/ja/preview/download.jd b/docs/html-intl/intl/ja/preview/download.jd index 52c3c6c3a49d..52f7ae4dd5fb 100644 --- a/docs/html-intl/intl/ja/preview/download.jd +++ b/docs/html-intl/intl/ja/preview/download.jd @@ -300,72 +300,73 @@ page.image=images/cards/card-n-downloads_2x.png <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1:5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1:81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5:565be87ebb2d5937e2abe1a42645864b<br> - SHA-1:2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1:2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1:1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> - <td>General Mobile 4G(Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5:7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1:5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 ãŠã‚ˆã³ D6653)</td> - <td>ダウンãƒãƒ¼ãƒ‰:<a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - 詳細ã«ã¤ã„ã¦ã¯ã€<a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Xperia Z3 ã« Android N Developer Preview を試ã™</a>ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + <td>General Mobile 4G (Android One) <br>"seed"</td> + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html-intl/intl/ja/preview/features/background-optimization.jd b/docs/html-intl/intl/ja/preview/features/background-optimization.jd index 1ea9f2eb4765..04921c79b798 100644 --- a/docs/html-intl/intl/ja/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/ja/preview/features/background-optimization.jd @@ -248,7 +248,7 @@ Android N ã§ã¯ã€{@link android.app.job.JobInfo} 㨠{@link setPeriodic()} ã¾ãŸã¯ {@link android.app.job.JobInfo.Builder#setPersisted setPersisted()} ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。 コンテンツã®å¤‰æ›´ã‚’継続的ã«ç›£è¦–ã™ã‚‹ã«ã¯ã€ã‚¢ãƒ—リ㮠{@link - android.app.job.JobService} ãŒæœ€æ–°ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®å‡¦ç†ã‚’完了ã™ã‚‹å‰ã«ã€æ–°ã—ã„ + android.app.job.JobService} ãŒæœ€æ–°ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®å‡¦ç†ã‚’完了ã™ã‚‹å‰ã«ã€æ–°ã—ã„ {@link android.app.job.JobInfo} をスケジュールã—ã¾ã™ã€‚ </p> diff --git a/docs/html-intl/intl/ja/preview/features/direct-boot.jd b/docs/html-intl/intl/ja/preview/features/direct-boot.jd index 6ba185242860..933e682c062b 100644 --- a/docs/html-intl/intl/ja/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/ja/preview/features/direct-boot.jd @@ -58,16 +58,16 @@ page.image=images/cards/card-nyc_2x.jpg <p>ダイレクト ブート モードä¸ã«ã‚¢ãƒ—リを実行ã—ãŸã‚Šã€ç«¯æœ«æš—å·åŒ–ストレージã«ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã‚Šã™ã‚‹ã«ã¯ã€ã‚¢ãƒ—リ コンãƒãƒ¼ãƒãƒ³ãƒˆã®ç™»éŒ²ãŒå¿…è¦ã§ã™ã€‚ アプリをシステムã«ç™»éŒ²ã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒ -<i>æš—å·åŒ–対応ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¾ã™ã€‚</i>コンãƒãƒ¼ãƒãƒ³ãƒˆãŒæš—å·åŒ–対応ã™ã‚‹ã‚ˆã†æŒ‡å®šã™ã‚‹ã«ã¯ã€ãƒžãƒ‹ãƒ•ェスト内㧠+<i>æš—å·åŒ–対応ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¾ã™ã€‚</i>コンãƒãƒ¼ãƒãƒ³ãƒˆãŒæš—å·åŒ–対応ã™ã‚‹ã‚ˆã†æŒ‡å®šã™ã‚‹ã«ã¯ã€ãƒžãƒ‹ãƒ•ェスト内㧠<code>android:directBootAware</code> 属性を true ã«è¨å®šã—ã¾ã™ã€‚<p> -<p>æš—å·åŒ–対応コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’登録ã—ã¦ãŠãã¨ã€ç«¯æœ«ã‚’å†èµ·å‹•ã—ãŸã¨ãã«ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ +<p>æš—å·åŒ–対応コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’登録ã—ã¦ãŠãã¨ã€ç«¯æœ«ã‚’å†èµ·å‹•ã—ãŸã¨ãã«ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ <code>LOCKED_BOOT_COMPLETED</code> ブãƒãƒ¼ãƒ‰ã‚ャスト メッセージをå—ä¿¡ã§ãã¾ã™ã€‚ ã“ã®æ™‚点ã§ç«¯æœ«æš—å·åŒ–ストレージãŒä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã€ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ ブート モードä¸ã«ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒå®Ÿè¡Œã—ãªã‘れã°ãªã‚‰ãªã„タスクを実行ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã—ãŸã‚¢ãƒ©ãƒ¼ãƒ ã®ãƒˆãƒªã‚¬ãƒ¼ãªã©ãŒè©²å½“ã—ã¾ã™ã€‚ </p> -<p>次ã®ã‚³ãƒ¼ãƒ‰ スニペットã¯ã€ã‚¢ãƒ—リã®ãƒžãƒ‹ãƒ•ェスト内㧠+<p>次ã®ã‚³ãƒ¼ãƒ‰ スニペットã¯ã€ã‚¢ãƒ—リã®ãƒžãƒ‹ãƒ•ェスト内㧠{@link android.content.BroadcastReceiver} ã‚’æš—å·åŒ–対応ã¨ã—ã¦ç™»éŒ²ã—ã€<code>LOCKED_BOOT_COMPLETED</code> ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ ãƒ•ã‚£ãƒ«ã‚¿ã‚’è¿½åŠ ã™ã‚‹æ–¹æ³•ã®ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚ </p> @@ -126,7 +126,7 @@ ACTION_BOOT_COMPLETED} メッセージをå—ä¿¡ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ <p>ユーザーãŒç«¯æœ«ã‚’アップデートã—ã¦ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ ブート モードを使用ã§ãるよã†ã«ãªã‚‹ã¨ã€æ—¢å˜ã®ãƒ‡ãƒ¼ã‚¿ã‚’端末暗å·åŒ–ストレージã«ç§»è¡Œã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ -<code>Context.moveSharedPreferencesFrom()</code> ãŠã‚ˆã³ +<code>Context.moveSharedPreferencesFrom()</code> ãŠã‚ˆã³ <code>Context.moveDatabaseFrom()</code> を使用ã™ã‚‹ã¨ã€è¨å®šãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‡ãƒ¼ã‚¿ã‚’èªè¨¼æƒ…å ±æš—å·åŒ–ストレージã¨ç«¯æœ«æš—å·åŒ–ストレージ間ã§ç§»è¡Œã§ãã¾ã™ã€‚ </p> diff --git a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd index cf2063f8cf8e..6a25cec0e556 100644 --- a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd +++ b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd @@ -49,7 +49,7 @@ Android N ã§ã¯ã€ã‚¢ãƒ—リã®ãƒ‡ãƒ™ãƒãƒƒãƒ‘ーå‘ã‘ã® Android フレームã <h2 id="relation">ICU4J ã¨ã®é–¢ä¿‚</h2> <p> - Android N ã§ã¯ã€<code>com.ibm.icu</code> ã§ã¯ãªã + Android N ã§ã¯ã€<code>com.ibm.icu</code> ã§ã¯ãªã <code>android.icu</code> パッケージを介ã—㦠ICU4J API ã®ã‚µãƒ–セットを公開ã—ã¦ã„ã¾ã™ã€‚Android フレームワークã§ã¯ã€ã•ã¾ã–ã¾ãªç†ç”±ã«ã‚ˆã‚Š ICU4J API を公開ã—ãªã„ã¨ã„ã†é¸æŠžã‚‚考ãˆã‚‰ã‚Œã¾ã™ã€‚ãŸã¨ãˆã°ã€Android N ã§å»ƒæ¢ã•れ㟠API を公開ã—ãªã„ãŸã‚ã€ã¾ãŸã¯ ICU ãƒãƒ¼ãƒ ã‹ã‚‰ã¾ã 安定版ã®ç™ºè¡¨ãŒãªã„ãŸã‚ã€ãªã©ã®ç†ç”±ãŒã‚りã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/preview/features/multi-window.jd b/docs/html-intl/intl/ja/preview/features/multi-window.jd index 4ad3d940f38c..dba58be00799 100644 --- a/docs/html-intl/intl/ja/preview/features/multi-window.jd +++ b/docs/html-intl/intl/ja/preview/features/multi-window.jd @@ -146,7 +146,7 @@ TV 端末ã§ã€ã‚¢ãƒ—リãŒãƒ”クãƒãƒ£ イン ピクãƒãƒ£ モードã§å‹•画゠ユーザーãŒã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚µã‚¤ã‚ºã‚’変更ã—ã¦ã€é«˜ã•や幅を拡大ã—ãŸå ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼æ“作ã«ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚µã‚¤ã‚ºãŒå¤‰æ›´ã•れã€å¿…è¦ã«å¿œã˜ã¦ã€<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時ã®å¤‰æ›´</a>ãŒç™ºè¡Œã•れã¾ã™ã€‚ ã‚¢ãƒ—ãƒªã§æ–°ã—ã表示ã•れãŸé ˜åŸŸã‚’æç”»ã™ã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆã€{@link - android.R.attr#windowBackground windowBackground} 属性ã¾ãŸã¯ãƒ‡ãƒ•ォルト㮠+ android.R.attr#windowBackground windowBackground} 属性ã¾ãŸã¯ãƒ‡ãƒ•ォルト㮠<code>windowBackgroundFallback</code> システム属性ã«ã‚ˆã£ã¦æŒ‡å®šã•れãŸè‰²ã§ã“れらã®é ˜åŸŸãŒä¸€æ™‚çš„ã«å¡—りã¤ã¶ã•れã¾ã™ã€‚ </p> @@ -158,7 +158,7 @@ TV 端末ã§ã€ã‚¢ãƒ—リãŒãƒ”クãƒãƒ£ イン ピクãƒãƒ£ モードã§å‹•画゠サイズã¨ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’制御ã™ã‚‹ãŸã‚ã®å±žæ€§ã‚’マニフェストã«è¨å®šã§ãã¾ã™ã€‚ ルート アクティビティ属性ã®è¨å®šã¯ã€ã‚¿ã‚¹ã‚¯ã‚¹ã‚¿ãƒƒã‚¯å†…ã®ã™ã¹ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«é©ç”¨ã•れã¾ã™ã€‚ -ãŸã¨ãˆã°ã€ãƒ«ãƒ¼ãƒˆ アクティビティã«ã‚ˆã‚Š +ãŸã¨ãˆã°ã€ãƒ«ãƒ¼ãƒˆ アクティビティã«ã‚ˆã‚Š <code>android:resizeableActivity</code> ㌠true ã«è¨å®šã•れるã¨ã€ã‚¿ã‚¹ã‚¯ スタック内ã®ã™ã¹ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ã‚µã‚¤ã‚ºã‚’変更ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ </p> @@ -175,7 +175,7 @@ TV 端末ã§ã€ã‚¢ãƒ—リãŒãƒ”クãƒãƒ£ イン ピクãƒãƒ£ モードã§å‹•画゠<h4 id="resizeableActivity">android:resizeableActivity</h4> <p> - マルムウィンドウ ディスプレイを有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹ã«ã¯ã€ã“ã®å±žæ€§ã‚’マニフェスト㮠<code><activity></code> ノードã¾ãŸã¯ + マルムウィンドウ ディスプレイを有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹ã«ã¯ã€ã“ã®å±žæ€§ã‚’マニフェスト㮠<code><activity></code> ノードã¾ãŸã¯ <code><application></code> ノードã«è¨å®šã—ã¾ã™ã€‚ </p> @@ -361,7 +361,7 @@ android:supportsPictureInPicture=["true" | "false"] <h3 id="entering-pip">ピクãƒãƒ£ イン ピクãƒãƒ£ モードã«ã™ã‚‹</h3> <p> - アクティビティをピクãƒãƒ£ イン ピクãƒãƒ£ モードã«ã™ã‚‹ã«ã¯ã€æ–°ã—ã„メソッド + アクティビティをピクãƒãƒ£ イン ピクãƒãƒ£ モードã«ã™ã‚‹ã«ã¯ã€æ–°ã—ã„メソッド <code>Activity.enterPictureInPictureMode()</code> を呼ã³å‡ºã—ã¾ã™ã€‚端末ãŒãƒ”クãƒãƒ£ イン ピクãƒãƒ£ モードをサãƒãƒ¼ãƒˆã—ãªã„å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®åŠ¹æžœã¯ã‚りã¾ã›ã‚“。 詳細ã«ã¤ã„ã¦ã¯ã€<a href="picture-in-picture.html">ピクãƒãƒ£ イン ピクãƒãƒ£</a>ã«é–¢ã™ã‚‹ãƒ‰ã‚ュメントをã”覧ãã ã•ã„。 @@ -371,7 +371,7 @@ android:supportsPictureInPicture=["true" | "false"] <p> æ–°ã—ã„アクティビティを起動ã™ã‚‹ã¨ãã«ã€å¯èƒ½ã§ã‚れã°ã€æ–°ã—ã„アクティビティをç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®éš£ã«è¡¨ç¤ºã™ã‚‹å¿…用ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’システムã«ç¤ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ -ãã†ã™ã‚‹ã«ã¯ã€ãƒ•ラグ +ãã†ã™ã‚‹ã«ã¯ã€ãƒ•ラグ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code> を使用ã—ã¾ã™ã€‚ ã“ã®ãƒ•ラグを渡ã™ã¨ã€æ¬¡ã®å‹•作ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã•れã¾ã™ã€‚ @@ -434,10 +434,10 @@ android:supportsPictureInPicture=["true" | "false"] </dt> <dd> - {@link android.view.View#startDrag View.startDrag()} ã®æ–°ã—ã„エイリアスã§ã™ã€‚ç•°ãªã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ間ã®ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒãƒƒãƒ—を有効ã«ã™ã‚‹ã«ã¯ã€æ–°ã—ã„フラグ + {@link android.view.View#startDrag View.startDrag()} ã®æ–°ã—ã„エイリアスã§ã™ã€‚ç•°ãªã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ間ã®ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒãƒƒãƒ—を有効ã«ã™ã‚‹ã«ã¯ã€æ–°ã—ã„フラグ <code>View.DRAG_FLAG_GLOBAL</code> を渡ã—ã¾ã™ã€‚ -URI パーミッションをå—ã‘å–ã‚‹å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ä»˜ä¸Žã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€å¿…è¦ã«å¿œã˜ã¦ã€æ–°ã—ã„フラグ -<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> ã¾ãŸã¯ +URI パーミッションをå—ã‘å–ã‚‹å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ä»˜ä¸Žã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€å¿…è¦ã«å¿œã˜ã¦ã€æ–°ã—ã„フラグ +<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> ã¾ãŸã¯ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code> を渡ã—ã¾ã™ã€‚ </dd> @@ -581,7 +581,7 @@ URI パーミッションをå—ã‘å–ã‚‹å´ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«ä»˜ä¸Žã™ã <h3 id="test-disabled-mw">マルムウィンドウã®ã‚µãƒãƒ¼ãƒˆã‚’無効ã«ã—ã¦ã„ã‚‹å ´åˆ</h3> <p> - + <code>android:resizableActivity="false"</code> ã‚’è¨å®šã—ã¦ã€ãƒžãƒ«ãƒ ウィンドウã®ã‚µãƒãƒ¼ãƒˆã‚’無効ã«ã—ãŸå ´åˆã¯ã€Android N を実行ã—ã¦ã„る端末ã§ã‚¢ãƒ—リを起動ã—ã€ã‚¢ãƒ—リをフリーフォームモードãŠã‚ˆã³åˆ†å‰²ç”»é¢ãƒ¢ãƒ¼ãƒ‰ã«ã™ã‚‹ã“ã¨ã‚’試ã¿ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ アプリをマルムウィンドウ モードã«ã™ã‚‹ã“ã¨ã‚’試ã¿ãŸã¨ãã€ã‚¢ãƒ—リãŒå…¨ç”»é¢ãƒ¢ãƒ¼ãƒ‰ã®ã¾ã¾ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 diff --git a/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd index faf63ea19f34..0bb4a75d211c 100644 --- a/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd +++ b/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd @@ -72,8 +72,8 @@ PIP をアプリã«è¿½åŠ ã™ã‚‹ã«ã¯ã€PIP をサãƒãƒ¼ãƒˆã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ <h2 id="declaring">アクティビティãŒãƒ”クãƒãƒ£ イン ピクãƒãƒ£ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã“ã¨ã‚’宣言ã™ã‚‹</h2> -<p>デフォルトã§ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã‚¢ãƒ—リ㮠PIP を自動的ã«ã‚µãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。アプリ㧠PIP をサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã€ãƒžãƒ‹ãƒ•ェスト㧠-<code>android:supportsPictureInPicture</code> ãŠã‚ˆã³ +<p>デフォルトã§ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã‚¢ãƒ—リ㮠PIP を自動的ã«ã‚µãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。アプリ㧠PIP をサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã€ãƒžãƒ‹ãƒ•ェスト㧠+<code>android:supportsPictureInPicture</code> ãŠã‚ˆã³ <code>android:resizeableActivity</code> ã‚’ <code>true</code> ã«è¨å®šã—ã¦ã€å‹•画アクティビティを登録ã—ã¾ã™ã€‚ ã¾ãŸã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®è¨å®šå¤‰æ›´ã‚’処ç†ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¦ã€PIP モードã®é·ç§»ä¸ã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆå¤‰æ›´ãŒç™ºç”Ÿã—ã¦ã‚‚ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒå†é–‹ã—ãªã„よã†ã«ã—ã¾ã™ã€‚ @@ -120,14 +120,14 @@ public void onActionClicked(Action action) { <p class="img-caption"><strong>図 1.</strong> メディア コントãƒãƒ¼ãƒ« ãƒãƒ¼ä¸Šã® [Picture-in-picture] ボタン </p> -<p>Android N ã«ã¯ã€æ–°ã—ã„ +<p>Android N ã«ã¯ã€æ–°ã—ã„ <code>PlaybackControlsRow.PictureInPictureAction</code> クラスãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ« ãƒãƒ¼ã® PIP アクション㨠PIP アイコンã®ä½¿ç”¨æ–¹æ³•を定義ã—ã¾ã™ã€‚ </p> <h2 id="handling_ui">ピクãƒãƒ£ イン ピクãƒãƒ£ã®å®Ÿè¡Œä¸ã« UI を処ç†ã™ã‚‹</h2> <p>アクティビティ㌠PIP モードを開始ã—ãŸã‚‰ã€å‹•ç”»ã®å†ç”Ÿã®ã¿ã‚’表示ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -アクティビティ㌠PIP ã‚’é–‹å§‹ã™ã‚‹å‰ã« UI è¦ç´ を削除ã—ã¦ã€å†ã³å…¨ç”»é¢è¡¨ç¤ºã«æˆ»ã£ãŸã‚‰ã€å‰Šé™¤ã—ãŸè¦ç´ を復元ã—ã¾ã™ã€‚<code>Activity.onPictureInPictureModeChanged()</code> ã¾ãŸã¯ +アクティビティ㌠PIP ã‚’é–‹å§‹ã™ã‚‹å‰ã« UI è¦ç´ を削除ã—ã¦ã€å†ã³å…¨ç”»é¢è¡¨ç¤ºã«æˆ»ã£ãŸã‚‰ã€å‰Šé™¤ã—ãŸè¦ç´ を復元ã—ã¾ã™ã€‚<code>Activity.onPictureInPictureModeChanged()</code> ã¾ãŸã¯ <code>Fragment.onPictureInPictureModeChanged()</code> をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã€å¿…è¦ã«å¿œã˜ã¦ UI è¦ç´ を有効ã¾ãŸã¯ç„¡åйã«ã—ã¾ã™ã€‚次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚ @@ -152,7 +152,7 @@ public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { <p>アクティビティを PIP ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ä¸€æ™‚åœæ¢çŠ¶æ…‹ã¨è¦‹ãªã—ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>onPause()</code> メソッドを呼ã³å‡ºã—ã¾ã™ã€‚ PIP モードã«ã‚ˆã£ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒä¸€æ™‚åœæ¢ã«ãªã£ã¦ã‚‚ã€å‹•ç”»ã®å†ç”Ÿã¯ä¸€æ™‚åœæ¢ã›ãšã€å†ç”Ÿã‚’ç¶šã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -アクティビティ㮠+アクティビティ㮠<code>onPause()</code> メソッド㧠PIP を確èªã—ã€é©åˆ‡ã«å†ç”Ÿã‚’処ç†ã—ã¦ãã ã•ã„。次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚ </p> @@ -180,7 +180,7 @@ public void onPause() { </p> -<p>å‹•ç”»å†ç”Ÿãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã—ã¦å˜ä¸€ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒä½¿ç”¨ã•れるよã†ã«ã—ã€å¿…è¦ã«å¿œã˜ã¦ PIP モードã®åˆ‡ã‚Šæ›¿ãˆãŒè¡Œã‚れるよã†ã«ã™ã‚‹ã«ã¯ã€ãƒžãƒ‹ãƒ•ェストã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠+<p>å‹•ç”»å†ç”Ÿãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã—ã¦å˜ä¸€ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒä½¿ç”¨ã•れるよã†ã«ã—ã€å¿…è¦ã«å¿œã˜ã¦ PIP モードã®åˆ‡ã‚Šæ›¿ãˆãŒè¡Œã‚れるよã†ã«ã™ã‚‹ã«ã¯ã€ãƒžãƒ‹ãƒ•ェストã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㮠<code>android:launchMode</code> ã‚’ <code>singleTask</code> ã«è¨å®šã—ã¾ã™ã€‚ </p> diff --git a/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd index e77e4811c404..e4f9ae21769d 100644 --- a/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd +++ b/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd @@ -37,16 +37,16 @@ page.tags=androidn <h2 id="accessing">外部ストレージã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¸ã®ã‚¢ã‚¯ã‚»ã‚¹</h2> -<p><code>StorageManager</code> クラスを使用ã—ã¦ã€é©åˆ‡ãª -<code>StorageVolume</code> インスタンスをå–å¾—ã—ã¾ã™ã€‚次ã«ã€ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã® +<p><code>StorageManager</code> クラスを使用ã—ã¦ã€é©åˆ‡ãª +<code>StorageVolume</code> インスタンスをå–å¾—ã—ã¾ã™ã€‚次ã«ã€ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã® <code>StorageVolume.createAccessIntent()</code> メソッドを呼ã³å‡ºã—ã¦ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’作æˆã—ã¾ã™ã€‚ã“ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’使用ã—ã¦ã€å¤–部ストレージã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚ リムーãƒãƒ–ル メディア ボリュームãªã©ã€ä½¿ç”¨ã§ãã‚‹ã™ã¹ã¦ã®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€<code>StorageManager.getVolumesList()</code> を使用ã—ã¾ã™ã€‚ </p> <p>特定ã®ãƒ•ァイルã«é–¢ã™ã‚‹æƒ…å ±ãŒã‚ã‚‹å ´åˆã¯ã€ -<code>StorageManager.getStorageVolume(File)</code> を使用ã—ã¦ã€ãã®ãƒ•ァイルをå«ã‚€ -<code>StorageVolume</code> ã‚’å–å¾—ã—ã¾ã™ã€‚ã“ã® <code>StorageVolume</code> ã§ +<code>StorageManager.getStorageVolume(File)</code> を使用ã—ã¦ã€ãã®ãƒ•ァイルをå«ã‚€ +<code>StorageVolume</code> ã‚’å–å¾—ã—ã¾ã™ã€‚ã“ã® <code>StorageVolume</code> ã§ <code>createAccessIntent()</code> を呼ã³å‡ºã—ã€ã“ã®ãƒ•ァイルã®å¤–部ストレージ ディレクトリã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚ </p> @@ -58,7 +58,7 @@ page.tags=androidn </p> -<p>次ã®ã‚³ãƒ¼ãƒ‰ スニペットã¯ã€ãƒ—ライマリ共有ストレージ㮠+<p>次ã®ã‚³ãƒ¼ãƒ‰ スニペットã¯ã€ãƒ—ライマリ共有ストレージ㮠<code>Pictures</code> ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ãæ–¹æ³•ã®ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚</p> <pre> @@ -109,7 +109,7 @@ startActivityForResult(intent, request_code); </receiver> </pre> -<p>ユーザー㌠SD カードãªã©ã®ãƒªãƒ ーãƒãƒ–ル メディアをマウントã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ 㯠+<p>ユーザー㌠SD カードãªã©ã®ãƒªãƒ ーãƒãƒ–ル メディアをマウントã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ 㯠{@link android.os.Environment#MEDIA_MOUNTED} 通知をé€ä¿¡ã—ã¾ã™ã€‚ã“ã®é€šçŸ¥ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ データ内㮠<code>StorageVolume</code> オブジェクトをæä¾›ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ–ジェクトを使用ã—ã¦ã€ãƒªãƒ ーãƒãƒ–ル メディア上ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ 次ã®ä¾‹ã§ã¯ã€ãƒªãƒ ーãƒãƒ–ル メディア上㮠<code>Pictures</code> ディレクトリã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚ @@ -127,7 +127,7 @@ startActivityForResult(intent, request_code); <h2 id="best">ベスト プラクティス</h2> <p>外部ディレクトリã®ã‚¢ã‚¯ã‚»ã‚¹ URI ã¯ã§ãã‚‹é™ã‚Šä¿æŒã—ã¦ãã ã•ã„。ãã†ã™ã‚Œã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä½•åº¦ã‚‚ã‚¢ã‚¯ã‚»ã‚¹è¦æ±‚ã‚’ã™ã‚‹å¿…è¦ãŒãªããªã‚Šã¾ã™ã€‚ -ユーザーãŒã‚¢ã‚¯ã‚»ã‚¹ã‚’付与ã—ãŸã‚‰ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ã‚¢ã‚¯ã‚»ã‚¹ URI を指定ã—㦠+ユーザーãŒã‚¢ã‚¯ã‚»ã‚¹ã‚’付与ã—ãŸã‚‰ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ã‚¢ã‚¯ã‚»ã‚¹ URI を指定ã—㦠<code>getContentResolver().takePersistableUriPermssion()</code> を呼ã³å‡ºã—ã¾ã™ã€‚ システム㌠URI ã‚’ä¿æŒã—ã€ä»¥é™ã®ã‚¢ã‚¯ã‚»ã‚¹è¦æ±‚ã§ã¯ <code>RESULT_OK</code> ã‚’è¿”ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç¢ºèªã® UI を表示ã—ã¾ã›ã‚“。 diff --git a/docs/html-intl/intl/ja/preview/setup-sdk.jd b/docs/html-intl/intl/ja/preview/setup-sdk.jd index 37fa08677d25..06b24ca74a26 100644 --- a/docs/html-intl/intl/ja/preview/setup-sdk.jd +++ b/docs/html-intl/intl/ja/preview/setup-sdk.jd @@ -92,7 +92,7 @@ page.image=images/cards/card-n-sdk_2x.png <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5:19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd index 837fc2bf5189..3fd3f475ed8e 100644 --- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd @@ -55,7 +55,7 @@ android.app.Activity} インスタンスãŒå—ã‘å–ã‚‹é‡è¦ãªãƒ©ã‚¤ãƒ•サイã </p> <h2>レッスン</h2> - + <dl> <dt><b><a href="starting.html">アクティビティを開始ã™ã‚‹</a></b></dt> <dd>アクティビティã®ãƒ©ã‚¤ãƒ•サイクルã«é–¢ã™ã‚‹åŸºæœ¬ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リを起動ã™ã‚‹æ–¹æ³•ã€åŸºæœ¬çš„ãªã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ作æˆã®æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚ @@ -68,5 +68,5 @@ android.app.Activity} インスタンスãŒå—ã‘å–ã‚‹é‡è¦ãªãƒ©ã‚¤ãƒ•サイã <dt><b><a href="recreating.html">アクティビティをå†ä½œæˆã™ã‚‹</a></b></dt> <dd>アクティビティãŒç ´æ£„ã•れるã¨ãã®å‹•作ã¨ã€å¿…è¦ã«å¿œã˜ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®çŠ¶æ…‹ã‚’å†æ§‹ç¯‰ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚ </dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd index b837a0099592..fd21ef0714b9 100644 --- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> <li><a href="#Pause">ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ä¸€æ™‚åœæ¢ã™ã‚‹</a></li> <li><a href="#Resume">アクティビティをå†é–‹ã™ã‚‹</a></li> </ol> - + <h2>関連ドã‚ュメント</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a> @@ -59,7 +59,7 @@ android.app.Activity#onPause()} ã®å‘¼ã³å‡ºã—ã‚’å—ä¿¡ã—ãŸå ´åˆã¯ã€ã‚¢ã‚¯ <h2 id="Pause">ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ä¸€æ™‚åœæ¢ã™ã‚‹</h2> - + <p>システムãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«å¯¾ã—㦠{@link android.app.Activity#onPause()} を呼ã³å‡ºã—ãŸå ´åˆã€æŠ€è¡“çš„ã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã¾ã 部分的ã«è¡¨ç¤ºã•れã¦ã„ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを離れã¦ã„ã¦ã€ã»ã©ãªãåœæ¢çŠ¶æ…‹ã«ãªã‚‹å¾´å€™ã‚’示ã—ã¦ã„ã¾ã™ã€‚ 通常ã€ä»¥ä¸‹ã‚’行ã†å ´åˆã«ã¯ã€{@link android.app.Activity#onPause()} コールãƒãƒƒã‚¯ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd index 864737566621..5753f13ed10f 100644 --- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> <li><a href="#SaveState">自分ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ状態をä¿å˜ã™ã‚‹</a></li> <li><a href="#RestoreState">自分ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ状態をリストアã™ã‚‹</a></li> </ol> - + <h2>関連ドã‚ュメント</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">ç•°ãªã‚‹ç”»é¢ã®ã‚µãƒãƒ¼ãƒˆ @@ -73,7 +73,7 @@ onRestoreInstanceState()} 㨠{@link android.app.Activity#onCreate onCreate()} <img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" /> <p class="img-caption"><strong>図 2.</strong> システムãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’åœæ¢ã—å§‹ã‚ã‚‹ã¨ã€ -{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1)ãŒå‘¼ã³å‡ºã•れるãŸã‚ã€{@link android.app.Activity} インスタンスã®å†ä½œæˆã®å¿…è¦ãŒã‚ã‚‹å ´åˆã«å‚™ãˆã¦ã€ä¿å˜ã™ã‚‹è¿½åŠ ã®çŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’æŒ‡å®šã§ãã¾ã™ã€‚アクティビティãŒç ´æ£„ã•れã€åŒã˜ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å†ä½œæˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã¯ï¼ˆ1)ã§å®šç¾©ã•れãŸçŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’ {@link android.app.Activity#onCreate onCreate()} メソッド(2)㨠+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1)ãŒå‘¼ã³å‡ºã•れるãŸã‚ã€{@link android.app.Activity} インスタンスã®å†ä½œæˆã®å¿…è¦ãŒã‚ã‚‹å ´åˆã«å‚™ãˆã¦ã€ä¿å˜ã™ã‚‹è¿½åŠ ã®çŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’æŒ‡å®šã§ãã¾ã™ã€‚アクティビティãŒç ´æ£„ã•れã€åŒã˜ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å†ä½œæˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã¯ï¼ˆ1)ã§å®šç¾©ã•れãŸçŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’ {@link android.app.Activity#onCreate onCreate()} メソッド(2)㨠{@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} メソッド(3)ã®ä¸¡æ–¹ã«æ¸¡ã—ã¾ã™ã€‚ @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()} ã§ã€ã„ãã¤ã‹ã®çŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’å¾©å…ƒã™ã‚‹æ–¹æ³•ã«ã¤ã„ã @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} ã®å®Ÿè£…ã 復元対象ã®ä¿å˜æ¸ˆã¿ã®çŠ¶æ…‹ãŒã‚ã‚‹å ´åˆã®ã¿ {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} ãŒå‘¼ã³å‡ºã•れるãŸã‚〠{@link android.os.Bundle} ㌠null ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd index 124c323b76b2..06fcf80b13c5 100644 --- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> <li><a href="#lifecycle-states">ライフサイクル コールãƒãƒƒã‚¯ã‚’ç†è§£ã™ã‚‹</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">æ–°ã—ã„インスタンスを作æˆã™ã‚‹</a></li> <li><a href="#Destroy">ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’ç ´æ£„ã™ã‚‹</a></li> </ol> - + <h2>関連ドã‚ュメント</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a></li> @@ -83,7 +83,7 @@ trainingnavtop=true </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -138,7 +138,7 @@ android.app.Activity#onResume()} ãŒç¶šãã¾ã™ã€‚</p> -<h2 id="launching-activity">アプリã®ãƒ©ãƒ³ãƒãƒ£ãƒ¼ アクティビティを指定ã™ã‚‹</h2> +<h2 id="launching-activity">アプリã®ãƒ©ãƒ³ãƒãƒ£ãƒ¼ アクティビティを指定ã™ã‚‹</h2> <p>ユーザーãŒãƒ›ãƒ¼ãƒ ç”»é¢ã‹ã‚‰ã‚¢ãƒ—リã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã‚¢ãƒ—リ内ã§ã€Œãƒ©ãƒ³ãƒãƒ£ãƒ¼ã€ï¼ˆã¾ãŸã¯ã€Œãƒ¡ã‚¤ãƒ³ã€ï¼‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã§ã‚ã‚‹ã¨å®£è¨€ã•れ㟠{@link android.app.Activity} ã«å¯¾ã—㦠{@link android.app.Activity#onCreate onCreate()} メソッドを呼ã³å‡ºã—ã¾ã™ã€‚ @@ -151,7 +151,7 @@ android.app.Activity#onCreate onCreate()} メソッドを呼ã³å‡ºã—ã¾ã™ã€‚ <p>アプリã®ãƒ¡ã‚¤ãƒ³ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã¯ã€{@link android.content.Intent#ACTION_MAIN MAIN} アクション㨠{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} カテゴリをå«ã‚€ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> を使用ã—ã¦ãƒžãƒ‹ãƒ•ェストã§å®£è¨€ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚</p> +次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -180,7 +180,7 @@ android.app.Activity#onCreate onCreate()} を呼ã³å‡ºã™ã“ã¨ã«ã‚ˆã‚Šã€{@lin </p> -<p>アクティビティã®å˜ç¶šæœŸé–“ã™ã¹ã¦ã«ã‚ãŸã‚Šã€ä¸€åº¦ã®ã¿ç™ºç”Ÿã™ã¹ã基本的ãªã‚¢ãƒ—リã®èµ·å‹•ãƒã‚¸ãƒƒã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã® +<p>アクティビティã®å˜ç¶šæœŸé–“ã™ã¹ã¦ã«ã‚ãŸã‚Šã€ä¸€åº¦ã®ã¿ç™ºç”Ÿã™ã¹ã基本的ãªã‚¢ãƒ—リã®èµ·å‹•ãƒã‚¸ãƒƒã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã® {@link android.app.Activity#onCreate onCreate()} メソッドを実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ {@link android.app.Activity#onCreate onCreate()} ã®å®Ÿè£…ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ インターフェースを定義ã—ã€å ´åˆã«ã‚ˆã£ã¦ã¯ã„ãã¤ã‹ã®ã‚¯ãƒ©ã‚¹ã‚¹ã‚³ãƒ¼ãƒ—ã®å¤‰æ•°ã‚’インスタンス化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ </p> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -268,7 +268,7 @@ android.app.Activity#onDestroy} ã®é–“ã«ãã‚Œã‚‰ã‚’ç ´æ£„ã™ã‚‹å¿…è¦ãŒã‚り @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd index 0007fe6e74e4..b267cc814514 100644 --- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> <li><a href="#Stop">ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ãƒ†ã‚£ã‚’åœæ¢ã™ã‚‹</a></li> <li><a href="#Start">アクティビティを開始/å†èµ·å‹•ã™ã‚‹</a></li> </ol> - + <h2>関連ドã‚ュメント</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a> @@ -78,7 +78,7 @@ android.app.Activity#onStop onStop()} を呼ã³å‡ºã™å‰ã«ã€å¸¸ã« {@link andr {@link android.app.Activity#onStop()} を使用ã—ã¦ãƒ¡ãƒ¢ãƒªã®ãƒªãƒ¼ã‚¯ã‚’引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚るリソースを解放ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚ </p> -<p>{@link android.app.Activity#onPause onPause()} メソッド㌠+<p>{@link android.app.Activity#onPause onPause()} メソッド㌠{@link android.app.Activity#onStop()} ã®å‰ã«å‘¼ã³å‡ºã•れã¾ã™ãŒã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æƒ…å ±ã‚’æ›¸ã込むよã†ãªã€è¦æ¨¡ãŒå¤§ãã CPU ã«è² è·ãŒã‹ã‹ã‚‹ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³æ“作を実行ã™ã‚‹ãŸã‚ã«ã¯ {@link android.app.Activity#onStop onStop()}を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ </p> @@ -152,13 +152,13 @@ android.app.Activity#onStart()} を呼ã³å‡ºã™ã‹ã‚‰ã§ã™ã€‚ @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html-intl/intl/ja/training/basics/intents/filters.jd b/docs/html-intl/intl/ja/training/basics/intents/filters.jd index 1bcb26695329..3cf614d15336 100644 --- a/docs/html-intl/intl/ja/training/basics/intents/filters.jd +++ b/docs/html-intl/intl/ja/training/basics/intents/filters.jd @@ -152,7 +152,7 @@ android.app.Activity#startActivityForResult startActivityForResult()} メソッã <p>アクティビティã§å®Ÿè¡Œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’決定ã™ã‚‹ãŸã‚ã«ã€èµ·å‹•時ã«ä½¿ç”¨ã•れ㟠{@link android.content.Intent} ã‚’èªã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<p>アクティビティãŒé–‹å§‹ã•れãŸã‚‰ã€{@link android.app.Activity#getIntent()} を呼ã³å‡ºã—ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—㟠+<p>アクティビティãŒé–‹å§‹ã•れãŸã‚‰ã€{@link android.app.Activity#getIntent()} を呼ã³å‡ºã—ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを開始ã—㟠{@link android.content.Intent} ã‚’å–å¾—ã—ã¾ã™ã€‚アクティビティã®ãƒ©ã‚¤ãƒ•サイクルä¸ã¯ã„ã¤ã§ã‚‚ã“れを行ã†ã“ã¨ãŒã§ãã¾ã™ãŒã€é€šå¸¸ã¯ã€ {@link android.app.Activity#onCreate onCreate()} ã‚„ {@link android.app.Activity#onStart()} ãªã©ã®æ—©ã„段階ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®é–“ã«è¡Œã†å¿…è¦ãŒã‚りã¾ã™ã€‚ </p> diff --git a/docs/html-intl/intl/ja/training/basics/intents/sending.jd b/docs/html-intl/intl/ja/training/basics/intents/sending.jd index 586bc1547a5c..d2a24f8e5331 100644 --- a/docs/html-intl/intl/ja/training/basics/intents/sending.jd +++ b/docs/html-intl/intl/ja/training/basics/intents/sending.jd @@ -93,7 +93,7 @@ Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage); ã•ã¾ã–ã¾ãª {@link android.content.Intent#putExtra(String,String) putExtra()} メソッドを使用ã—ã¦ã€ç‰¹åˆ¥ãƒ‡ãƒ¼ã‚¿ã‚’ 1 ã¤ä»¥ä¸Šè¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<p>デフォルトã§ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å«ã¾ã‚Œã‚‹ +<p>デフォルトã§ã¯ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å«ã¾ã‚Œã‚‹ {@link android.net.Uri} データã«åŸºã¥ã„ã¦ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«å¿…è¦ãªé©åˆ‡ãª MIME ã‚¿ã‚¤ãƒ—ã‚’ã‚·ã‚¹ãƒ†ãƒ ãŒæ±ºå®šã—ã¾ã™ã€‚インテント㫠{@link android.net.Uri} ãŒå«ã¾ã‚Œã¦ã„ãªã„å ´åˆã¯ã€é€šå¸¸ã¯ {@link android.content.Intent#setType setType()} を使用ã—ã¦ã€ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã«é–¢é€£ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã®ã‚¿ã‚¤ãƒ—を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ MIME タイプã®è©³ç´°ãªæŒ‡å®šã«ã‚ˆã‚Šã€ã©ã®ç¨®é¡žã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒã‚¤ãƒ³ãƒ†ãƒ³ãƒˆã‚’å—ã‘å–ã‚‹ã‹ãŒæŒ‡å®šã•れã¾ã™ã€‚ diff --git a/docs/html-intl/intl/ja/training/material/animations.jd b/docs/html-intl/intl/ja/training/material/animations.jd index 460147cb6260..06a3a56e1bfe 100644 --- a/docs/html-intl/intl/ja/training/material/animations.jd +++ b/docs/html-intl/intl/ja/training/material/animations.jd @@ -173,7 +173,7 @@ Enter 㨠Exit ã®é·ç§»ã‚„ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ間ã§ã® Shared elements é· </ul> <p>{@link android.transition.Visibility} クラスを拡張ã™ã‚‹ Transition ã¯ã™ã¹ã¦ã€EnterTransition ã¾ãŸã¯ ExitTransition ã¨ã—ã¦ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚ -詳細ã«ã¤ã„ã¦ã¯ã€API リファレンス㮠+詳細ã«ã¤ã„ã¦ã¯ã€API リファレンス㮠{@link android.transition.Transition} クラスをã”覧ãã ã•ã„。</p> <p>Android 5.0(API レベル 21)ã§ã¯ã€æ¬¡ã®å…±æœ‰è¦ç´ é·ç§»ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚</p> @@ -226,7 +226,7 @@ Enter 㨠Exit ã®é·ç§»ã‚„ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ間ã§ã® Shared elements é· </transitionSet> </pre> -<p><code>changeImageTransform</code> è¦ç´ 㯠+<p><code>changeImageTransform</code> è¦ç´ 㯠{@link android.transition.ChangeImageTransform} クラスã«å¯¾å¿œã—ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€API リファレンス㮠{@link android.transition.Transition} ã‚’ã”覧ãã ã•ã„。 </p> @@ -263,7 +263,7 @@ setSharedElementEnterTransition()} メソッドã¯ã€å‘¼ã³å‡ºã—å…ˆã®ã‚¢ã‚¯ãƒ† 有効ã«ã—ã¦ã„ãªã„ã¨ã€å‘¼ã³å‡ºã—å…ƒã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㌠Exit é·ç§»ã‚’é–‹å§‹ã—ãŸã‚ã¨ã€window é·ç§»ï¼ˆã‚¹ã‚±ãƒ¼ãƒ«ã‚„フェードãªã©ï¼‰ãŒèµ·ãã¾ã™ã€‚ </p> -<p>Enter é·ç§»ã‚’ã§ãã‚‹ã ã‘æ—©ãé–‹å§‹ã™ã‚‹ã«ã¯ã€å‘¼ã³å‡ºã—å…ˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㧠+<p>Enter é·ç§»ã‚’ã§ãã‚‹ã ã‘æ—©ãé–‹å§‹ã™ã‚‹ã«ã¯ã€å‘¼ã³å‡ºã—å…ˆã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ㧠{@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()} メソッドを使用ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã•らã«å°è±¡çš„㪠Enter é·ç§»ã«ãªã‚Šã¾ã™ã€‚</p> @@ -321,7 +321,7 @@ imgContainerView.setOnClickListener(new View.OnClickListener() { {@link android.view.View#setTransitionName View.setTransitionName()} メソッドを使用ã—ã¦ä¸¡æ–¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã«å…±é€šã®è¦ç´ åを指定ã—ã¾ã™ã€‚ </p> -<p>2 ã¤ç›®ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒçµ‚了ã—ãŸã¨ãã«ã‚·ãƒ¼ãƒ³ã®åˆ‡ã‚Šæ›¿ãˆã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’逆回転ã•ã›ã‚‹ã«ã¯ã€{@link android.app.Activity#finish Activity.finish()} ã®ä»£ã‚り㫠+<p>2 ã¤ç›®ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティãŒçµ‚了ã—ãŸã¨ãã«ã‚·ãƒ¼ãƒ³ã®åˆ‡ã‚Šæ›¿ãˆã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’逆回転ã•ã›ã‚‹ã«ã¯ã€{@link android.app.Activity#finish Activity.finish()} ã®ä»£ã‚り㫠{@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()} メソッドを呼ã³å‡ºã—ã¾ã™ã€‚</p> diff --git a/docs/html-intl/intl/ja/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/intl/ja/training/monitoring-device-state/battery-monitoring.jd index c4aafe4ccf90..0b7d60250fe4 100644 --- a/docs/html-intl/intl/ja/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html-intl/intl/ja/training/monitoring-device-state/battery-monitoring.jd @@ -7,8 +7,8 @@ next.title=ホルダーã®è£…ç€çŠ¶æ…‹ã¨ã‚¿ã‚¤ãƒ—ã®ç‰¹å®šã¨ç›£è¦– next.link=docking-monitoring.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã®å†…容</h2> @@ -24,9 +24,9 @@ next.link=docking-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">インテントã¨ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ フィルタ</a> </ul> -</div> </div> - +</div> + <p>ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰æ›´æ–°ãŒé›»æ± 消費é‡ã«åŠã¼ã™å½±éŸ¿ã‚’抑ãˆã‚‹ãŸã‚ã«æ›´æ–°ã®é »åº¦ã‚’変更ã™ã‚‹ã«ã¯ã€åˆã‚ã«ç¾åœ¨ã®é›»æ± 残é‡ã¨å……電状態を調ã¹ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚</p> <p>ã‚¢ãƒ—ãƒªã®æ›´æ–°ãŒé›»æ± 消費é‡ã«åŠã¼ã™å½±éŸ¿ã®åº¦åˆã„ã¯ã€ç«¯æœ«ã®é›»æ± 残é‡ã¨å……電状態ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚AC é›»æºã‹ã‚‰ç«¯æœ«ã‚’å……é›»ã—ã¦ã„ã‚‹ã¨ãã¯ã€æ›´æ–°ã®å®Ÿè¡Œã«ã‚ˆã‚‹å½±éŸ¿ã¯ã”ãã‚ãšã‹ãªã®ã§ã€ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ç«¯æœ«ãŒ AC é›»æºã«æŽ¥ç¶šã•れã¦ã„ã‚‹é™ã‚Šã€æ›´æ–°é »åº¦ã‚’最大ã«ã—ã¦å·®ã—支ãˆã‚りã¾ã›ã‚“。逆ã«ã€ç«¯æœ«ãŒé›»æ± ã§é§†å‹•ã—ã¦ã„ã‚‹ã¨ãã¯ã€æ›´æ–°é »åº¦ã‚’下ã’ã‚‹ã¨é›»æ± 消費é‡ã‚’抑ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> @@ -34,8 +34,8 @@ next.link=docking-monitoring.html <p>åŒæ§˜ã«ã€é›»æ± 残é‡ã‚’調ã¹ã‚‹ã¨ã€æ®‹é‡ãŒã”ãã‚ãšã‹ã§ã‚ã‚‹ã¨ãã«æ›´æ–°é »åº¦ã‚’下ã’ãŸã‚Šã€å ´åˆã«ã‚ˆã£ã¦ã¯åœæ¢ã•ã›ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<h2 id="DetermineChargeState">ç¾åœ¨ã®å……電状態を特定ã™ã‚‹</h2> - +<h2 id="DetermineChargeState">ç¾åœ¨ã®å……電状態を特定ã™ã‚‹</h2> + <p>åˆã‚ã«ã€ç¾åœ¨ã®å……電状態を特定ã—ã¾ã™ã€‚{@link android.os.BatteryManager} ã«ã‚ˆã£ã¦é›»æ± ã¨å……電状態ã«é–¢ã™ã‚‹ã™ã¹ã¦ã®è©³ç´°æƒ…å ±ãŒ sticky {@link android.content.Intent} ã¨ã—ã¦ãƒ–ãƒãƒ¼ãƒ‰ã‚ャストã•れã¾ã™ãŒã€ã“ã®ä¸ã«å……é›»çŠ¶æ…‹ãŒæ ¼ç´ã•れã¦ã„ã¾ã™ã€‚</p> <p>ã“れ㯠sticky インテントã§ã‚ã‚‹ãŸã‚ã€{@link android.content.BroadcastReceiver} を登録ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。{@code registerReceiver} を呼ã³å‡ºã—ã€{@code null} をレシーãƒã¨ã—ã¦æ¸¡ã™ã ã‘ã§ï¼ˆæ¬¡ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã‚’å‚照)ã€ç¾åœ¨ã®é›»æ± 状態ã®ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆãŒè¿”ã•れã¾ã™ã€‚ã“ã“ã§å®Ÿéš›ã® {@link android.content.BroadcastReceiver} オブジェクトを渡ã™ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯å¾Œã§æ›´æ–°ã«ã¤ã„ã¦ã®å‡¦ç†ã‚’行ã†ã®ã§ã€ã“れã¯å¿…è¦ã‚りã¾ã›ã‚“。</p> @@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <p>一般的ã«ã¯ã€ç«¯æœ«ãŒ AC å……é›»å™¨ã«æŽ¥ç¶šã•れã¦ã„ã‚‹ã¨ãã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰æ›´æ–°ã®é »åº¦ã‚’最大ã«ã—ã€USB 経由ã§å……é›»ä¸ã®ã¨ãã¯é »åº¦ã‚’下ã’ã€é›»æ± ã§é§†å‹•ä¸ã®ã¨ãã¯ã•らã«é »åº¦ã‚’下ã’ã¾ã™ã€‚</p> -<h2 id="MonitorChargeState">充電状態ã®å¤‰åŒ–を監視ã™ã‚‹</h2> +<h2 id="MonitorChargeState">充電状態ã®å¤‰åŒ–を監視ã™ã‚‹</h2> <p>充電状態ã¯ã€ç«¯æœ«ãŒå……é›»å™¨ã«æŽ¥ç¶šã•れãŸã¨ãã«ã™ãã«å¤‰åŒ–ã™ã‚‹ã®ã§ã€å……電状態ã®å¤‰åŒ–を監視ã—ã€ãã®å¤‰åŒ–ã«å¿œã˜ã¦æ›´æ–°ã®é »åº¦ã‚’変更ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚</p> @@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <pre>public class PowerConnectionReceiver extends BroadcastReceiver { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; - + int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; @@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> }</pre> -<h2 id="CurrentLevel">ç¾åœ¨ã®é›»æ± 残é‡ã‚’特定ã™ã‚‹</h2> +<h2 id="CurrentLevel">ç¾åœ¨ã®é›»æ± 残é‡ã‚’特定ã™ã‚‹</h2> <p>状æ³ã«ã‚ˆã£ã¦ã¯ã€ç¾åœ¨ã®é›»æ± 残é‡ãŒã‚ã‹ã‚‹ã¨ä¾¿åˆ©ãªã“ã¨ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€é›»æ± 残é‡ãŒæ‰€å®šã®ãƒ¬ãƒ™ãƒ«ã‚’下回ã£ãŸå ´åˆã«ã‚¢ãƒ—リã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰æ›´æ–°ã®é »åº¦ã‚’下ã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> @@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> -<h2 id="MonitorLevel">é›»æ± æ®‹é‡ã®å¤§ããªå¤‰åŒ–を監視ã™ã‚‹</h2> +<h2 id="MonitorLevel">é›»æ± æ®‹é‡ã®å¤§ããªå¤‰åŒ–を監視ã™ã‚‹</h2> <p>é›»æ± çŠ¶æ…‹ã‚’ç¶™ç¶šçš„ã«ç›£è¦–ã™ã‚‹ã“ã¨ã¯ç°¡å˜ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãã®å¿…è¦ã‚‚ã‚りã¾ã›ã‚“。</p> diff --git a/docs/html-intl/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd index 82b0c6b01acb..6cead0500039 100644 --- a/docs/html-intl/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html-intl/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã®å†…容</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">インテントã¨ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ フィルタ</a> </ul> -</div> +</div> </div> <p>å復アラームã¨ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ サービスã®ç”¨é€”ã®ã†ã¡ä»£è¡¨çš„ãªã‚‚ã®ã¨ã—ã¦ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆ リソースã‹ã‚‰ã‚¢ãƒ—リã®ãƒ‡ãƒ¼ã‚¿ã‚’å®šæœŸçš„ã«æ›´æ–°ã™ã‚‹ãŸã‚ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è¨å®šã‚„ã€ãƒ‡ãƒ¼ã‚¿ã®ã‚ャッシュã¸ã®æ ¼ç´ã€é•·æ™‚é–“ã«åŠã¶ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã®å®Ÿè¡Œãªã©ãŒã‚りã¾ã™ã€‚ã—ã‹ã—ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã•れã¦ã„ãªã„ã¨ãã‚„ã€é€Ÿåº¦ãŒä½Žã™ãŽã‚‹ãŸã‚ã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã‚’完了ã§ããªã„å ´åˆã«ã¾ã§ã€æ›´æ–°ã‚’スケジューリングã™ã‚‹ãŸã‚ã«ç«¯æœ«ã‚’スリープ状態ã‹ã‚‰å¾©å¸°ã•ã›ã‚‹å¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã‹ã€‚</p> @@ -35,18 +35,18 @@ next.link=manifest-receivers.html <p>{@link android.net.ConnectivityManager} を使用ã™ã‚‹ã¨ã€ç«¯æœ«ãŒå®Ÿéš›ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã¨ã€æŽ¥ç¶šã•れã¦ã„ã‚‹å ´åˆã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—を調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<h2 id="DetermineConnection">インターãƒãƒƒãƒˆæŽ¥ç¶šã®æœ‰ç„¡ã‚’特定ã™ã‚‹</h2> - +<h2 id="DetermineConnection">インターãƒãƒƒãƒˆæŽ¥ç¶šã®æœ‰ç„¡ã‚’特定ã™ã‚‹</h2> + <p>端末ãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã•れã¦ã„ãªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆ リソースã«åŸºã¥ã更新をスケジューリングã™ã‚‹å¿…è¦æ€§ã¯ã‚りã¾ã›ã‚“。次ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ã€{@link android.net.ConnectivityManager} を使用ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’å•ã„åˆã‚ã›ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’特定ã™ã‚‹æ–¹æ³•を示ã™ã‚‚ã®ã§ã™ã€‚</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">インターãƒãƒƒãƒˆæŽ¥ç¶šã®ã‚¿ã‚¤ãƒ—を特定ã™ã‚‹</h2> +<h2 id="DetermineType">インターãƒãƒƒãƒˆæŽ¥ç¶šã®ã‚¿ã‚¤ãƒ—を特定ã™ã‚‹</h2> <p>ç¾åœ¨ä½¿ç”¨å¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã®ã‚¿ã‚¤ãƒ—も調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> @@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> <p>æ›´æ–°ã‚’åœæ¢ã—ãŸå ´åˆã¯ã€æŽ¥ç¶šçŠ¶æ…‹ã®å¤‰åŒ–ã‚’å—ä¿¡ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚インターãƒãƒƒãƒˆæŽ¥ç¶šãŒç¢ºç«‹ã•れãŸã‚‰æ›´æ–°ã‚’å†é–‹ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã§ã™ã€‚</p> -<h2 id="MonitorChanges">接続状態ã®å¤‰åŒ–を監視ã™ã‚‹</h2> +<h2 id="MonitorChanges">接続状態ã®å¤‰åŒ–を監視ã™ã‚‹</h2> <p>接続状態ã®è©³ç´°ãŒå¤‰åŒ–ã™ã‚‹ã¨ã€{@link android.net.ConnectivityManager} ã«ã‚ˆã£ã¦ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}({@code "android.net.conn.CONNECTIVITY_CHANGE"})アクションãŒãƒ–ãƒãƒ¼ãƒ‰ã‚ャストã•れã¾ã™ã€‚アプリã®ãƒžãƒ‹ãƒ•ェスト内ã§ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã‚’登録ã—ã€ã“ã®ã‚ˆã†ãªå¤‰åŒ–を検出ã™ã‚‹ã“ã¨ã§ã€ãれã«å¿œã˜ã¦ã‚¢ãƒ—リã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰æ›´æ–°ã‚’å†é–‹ï¼ˆã¾ãŸã¯åœæ¢ï¼‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> diff --git a/docs/html-intl/intl/ja/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/intl/ja/training/monitoring-device-state/docking-monitoring.jd index 9c0e05435cd4..7d227dfc38b0 100644 --- a/docs/html-intl/intl/ja/training/monitoring-device-state/docking-monitoring.jd +++ b/docs/html-intl/intl/ja/training/monitoring-device-state/docking-monitoring.jd @@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã®å†…容</h2> @@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">インテントã¨ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ フィルタ</a> </ul> -</div> +</div> </div> <p>Android æè¼‰ç«¯æœ«ã‚’装ç€ã§ãるホルダーã®ç¨®é¡žã«ã¯ã€ã•ã¾ã–ã¾ãªã‚‚ã®ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€è»Šè¼‰ç”¨ã‚„å®¶åºç”¨ã®ãƒ›ãƒ«ãƒ€ãƒ¼ãŒã‚りã€ãƒ‡ã‚¸ã‚¿ãƒ«ã‹ã‚¢ãƒŠãƒã‚°ã‹ã¨ã„ã†åŒºåˆ¥ã‚‚ã‚りã¾ã™ã€‚ホルダー装ç€çŠ¶æ…‹ã¯ä¸€èˆ¬çš„ã«ã€å……電状態ã¨å¯†æŽ¥ã«ãƒªãƒ³ã‚¯ã—ã¦ã„ã¾ã™ã€‚多ãã®ãƒ›ãƒ«ãƒ€ãƒ¼ã¯ã€è£…ç€ã•れã¦ã„る端末ã«é›»åŠ›ã‚’ä¾›çµ¦ã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚</p> @@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html <p>ホルダー装ç€çŠ¶æ…‹ã‚‚ sticky {@link android.content.Intent} ã¨ã—ã¦ãƒ–ãƒãƒ¼ãƒ‰ã‚ャストã•れるã®ã§ã€ç«¯æœ«ãŒãƒ›ãƒ«ãƒ€ãƒ¼ã«è£…ç€ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã¨ã€è£…ç€ã•れã¦ã„ã‚‹å ´åˆã®ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—ã‚’å•ã„åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<h2 id="CurrentDockState">ç¾åœ¨ã®ãƒ›ãƒ«ãƒ€ãƒ¼è£…ç€çŠ¶æ…‹ã‚’ç‰¹å®šã™ã‚‹</h2> - +<h2 id="CurrentDockState">ç¾åœ¨ã®ãƒ›ãƒ«ãƒ€ãƒ¼è£…ç€çŠ¶æ…‹ã‚’ç‰¹å®šã™ã‚‹</h2> + <p>ホルダー装ç€çŠ¶æ…‹ã®è©³ç´°ã¯ã€{@link android.content.Intent#ACTION_DOCK_EVENT} アクション㮠sticky ブãƒãƒ¼ãƒ‰ã‚ャストã«ã‚¨ã‚¯ã‚¹ãƒˆãƒ©ã¨ã—ã¦å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れ㯠sticky ã§ã‚ã‚‹ãŸã‚ã€{@link android.content.BroadcastReceiver} を登録ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。次ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã«ç¤ºã™ã‚ˆã†ã«ã€{@link android.content.Context#registerReceiver registerReceiver()} を呼ã³å‡ºã—ã€{@code null} をブãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã¨ã—ã¦æ¸¡ã—ã¾ã™ã€‚</p> <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); @@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre> boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> -<h2 id="DockType">ç¾åœ¨ã®ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—を特定ã™ã‚‹</h2> +<h2 id="DockType">ç¾åœ¨ã®ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—を特定ã™ã‚‹</h2> -<p>端末ãŒãƒ›ãƒ«ãƒ€ãƒ¼ã«è£…ç€ã•れã¦ã„ã‚‹å ´åˆã®ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—ã¯ã€æ¬¡ã® 4 ã¤ã®ã„ãšã‚Œã‹ã§ã™ã€‚ +<p>端末ãŒãƒ›ãƒ«ãƒ€ãƒ¼ã«è£…ç€ã•れã¦ã„ã‚‹å ´åˆã®ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—ã¯ã€æ¬¡ã® 4 ã¤ã®ã„ãšã‚Œã‹ã§ã™ã€‚ <ul><li>カー</li> <li>å“上</li> <li>ãƒãƒ¼ã‚¨ãƒ³ãƒ‰ï¼ˆã‚¢ãƒŠãƒã‚°ï¼‰å“上</li> @@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> <p>最後㮠2 ã¤ã¯ã€Android API レベル 11 ã§è¿½åŠ ã•れãŸã‚‚ã®ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ãƒ›ãƒ«ãƒ€ãƒ¼ã®ã‚¿ã‚¤ãƒ—ã ã‘ãŒã‚ã‹ã‚Œã°ã‚ˆãã€ãƒ‡ã‚¸ã‚¿ãƒ«ã¨ã‚¢ãƒŠãƒã‚°ã®åŒºåˆ¥ã¯å•ã‚ãªã„ã¨ã„ã†å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã« 3 ã¤ã™ã¹ã¦ã«ã¤ã„ã¦èª¿ã¹ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚</p> <pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; -boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || +boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;</pre> -<h2 id="MonitorDockState">ホルダーã®è£…ç€çŠ¶æ…‹ã¾ãŸã¯ã‚¿ã‚¤ãƒ—ã®å¤‰åŒ–を監視ã™ã‚‹</h2> +<h2 id="MonitorDockState">ホルダーã®è£…ç€çŠ¶æ…‹ã¾ãŸã¯ã‚¿ã‚¤ãƒ—ã®å¤‰åŒ–を監視ã™ã‚‹</h2> <p>端末ãŒãƒ›ãƒ«ãƒ€ãƒ¼ã«è£…ç€ã•れãŸã‚Šã€è£…ç€ãŒè§£é™¤ã•れãŸã‚Šã™ã‚‹ãŸã³ã«ã€{@link android.content.Intent#ACTION_DOCK_EVENT} アクションãŒãƒ–ãƒãƒ¼ãƒ‰ã‚ャストã•れã¾ã™ã€‚端末ã®ãƒ›ãƒ«ãƒ€ãƒ¼è£…ç€çŠ¶æ…‹ã®å¤‰åŒ–を監視ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã«ç¤ºã™ã‚ˆã†ã«ã€ã‚¢ãƒ—リã®ãƒžãƒ‹ãƒ•ェスト内ã§ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã‚’登録ã—ã¾ã™ã€‚</p> diff --git a/docs/html-intl/intl/ja/training/monitoring-device-state/index.jd b/docs/html-intl/intl/ja/training/monitoring-device-state/index.jd index 07897b1f0280..9a983e9a0438 100644 --- a/docs/html-intl/intl/ja/training/monitoring-device-state/index.jd +++ b/docs/html-intl/intl/ja/training/monitoring-device-state/index.jd @@ -7,10 +7,10 @@ next.link=battery-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>ä¾å˜é–¢ä¿‚ã¨å‰ææ¡ä»¶</h2> +<h2>ä¾å˜é–¢ä¿‚ã¨å‰ææ¡ä»¶</h2> <ul> <li>Android 2.0(API レベル 5)以上</li> <li>「<a href="{@docRoot}guide/components/intents-filters.html">インテントã¨ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ フィルタ</a>ã€ã‚’èªã¿çµ‚ãˆã¦ã„ã‚‹ã“ã¨</li> @@ -21,19 +21,19 @@ next.link=battery-monitoring.html <li><a href="{@docRoot}guide/components/services.html">サービス</a> </ul> -</div> +</div> </div> <p>アプリを開発ã™ã‚‹ã¨ãã¯ã€ãƒ›ã‚¹ãƒˆç«¯æœ«ã®é›»æ± 消費é‡ã¸ã®å½±éŸ¿ã‚’抑ãˆã‚‹ã‚ˆã†å¿ƒãŒã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã‚’修了ã™ã‚‹ã¨ã€é–‹ç™ºã™ã‚‹ã‚¢ãƒ—リã®ä¸ã§ãƒ›ã‚¹ãƒˆç«¯æœ«ã®çŠ¶æ…‹ã‚’ç›£è¦–ã—ã€ãれã«åŸºã¥ã„ã¦æ©Ÿèƒ½ã‚„動作を変更ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚</p> <p>接続ãŒå¤±ã‚れãŸã¨ãã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ ã‚µãƒ¼ãƒ“ã‚¹ã®æ›´æ–°ã‚’åœæ¢ã™ã‚‹ã€é›»æ± 残é‡ãŒä½Žä¸‹ã—ãŸã¨ãã¯æ›´æ–°ã®é »åº¦ã‚’下ã’ã‚‹ã¨ã„ã£ãŸå¯¾ç–を講ã˜ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスをæãªã†ã“ã¨ãªãã€ã‚¢ãƒ—リãŒé›»æ± 消費é‡ã«åŠã¼ã™å½±éŸ¿ã‚’最å°é™ã«æŠ‘ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<h2>レッスン</h2> - +<h2>レッスン</h2> + <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="battery-monitoring.html">é›»æ± æ®‹é‡ã¨å……電状態ã®ç›£è¦–</a></b></dt> <dd>ã‚¢ãƒ—ãƒªã®æ›´æ–°é »åº¦ã‚’変更ã™ã‚‹ãŸã‚ã«ç¾åœ¨ã®é›»æ± 残é‡ã‚„充電状態ã®å¤‰åŒ–を特定ãŠã‚ˆã³ç›£è¦–ã™ã‚‹æ–¹æ³•ã‚’å¦ç¿’ã—ã¾ã™ã€‚</dd> @@ -46,4 +46,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="manifest-receivers.html">オンデマンドã§ã®ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト ãƒ¬ã‚·ãƒ¼ãƒæ“作</a></b></dt> <dd>マニフェスト内ã§å®£è¨€ã—ãŸãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã®ã‚ªãƒ³ã¨ã‚ªãƒ•を実行時ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚端末ã®çŠ¶æ…‹ã«å¿œã˜ã¦ã€ä¸è¦ãªãƒ¬ã‚·ãƒ¼ãƒã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚効率を上ã’ã‚‹ãŸã‚ã«ã€çŠ¶æ…‹å¤‰åŒ–ãƒ¬ã‚·ãƒ¼ãƒã®ã‚ªãƒ³ã¨ã‚ªãƒ•を切り替ãˆã‚‹æ–¹æ³•ã‚„ã€ç«¯æœ«ãŒç‰¹å®šã®çŠ¶æ…‹ã«ãªã‚‹ã¾ã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’延期ã™ã‚‹æ–¹æ³•ã‚’å¦ç¿’ã—ã¾ã™ã€‚</dd> -</dl>
\ No newline at end of file +</dl>
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/intl/ja/training/monitoring-device-state/manifest-receivers.jd index 7635d9f87c02..eff1221514dc 100644 --- a/docs/html-intl/intl/ja/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html-intl/intl/ja/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã®å†…容</h2> @@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">インテントã¨ã‚¤ãƒ³ãƒ†ãƒ³ãƒˆ フィルタ</a> </ul> -</div> +</div> </div> <p>端末ã®çŠ¶æ…‹å¤‰åŒ–ã‚’ç›£è¦–ã™ã‚‹æœ€ã‚‚å˜ç´”ãªæ–¹æ³•ã¯ã€ç›£è¦–対象ã¨ã™ã‚‹çŠ¶æ…‹ã”ã¨ã« {@link android.content.BroadcastReceiver} を作æˆã—ã€ãれãžã‚Œã‚’アプリã®ãƒžãƒ‹ãƒ•ェスト内ã§ç™»éŒ²ã™ã‚‹ã¨ã„ã†ã‚‚ã®ã§ã™ã€‚ã“れらã®å„レシーãƒå†…ã§ã€ç«¯æœ«ã®ç¾åœ¨ã®çŠ¶æ…‹ã«åŸºã¥ã„ã¦å復アラームã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å†è¨å®šã—ã¾ã™ã€‚</p> @@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html <p>ã“ã®æ–¹æ³•ã®ãƒ‡ãƒ¡ãƒªãƒƒãƒˆã¯ã€ã“れらã®ãƒ¬ã‚·ãƒ¼ãƒã®ã„ãšã‚Œã‹ãŒãƒˆãƒªã‚¬ã•れるãŸã³ã«ç«¯æœ«ãŒã‚¹ãƒªãƒ¼ãƒ—ã‹ã‚‰å¾©å¸°ã™ã‚‹ã“ã¨ã§ã™ãŒã€ã“ã®ã“ã¨ã¯å¿…è¦ä»¥ä¸Šã«é »ç¹ã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚</p> <p>ã“ã‚Œã‚ˆã‚Šã‚‚è‰¯ã„æ–¹æ³•ã¯ã€å®Ÿè¡Œæ™‚ã«ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã‚’オンã¾ãŸã¯ã‚ªãƒ•ã«ã™ã‚‹ã¨ã„ã†ã‚‚ã®ã§ã™ã€‚ã“ã®ã‚ˆã†ã«ã™ã‚Œã°ã€ãƒžãƒ‹ãƒ•ェスト内ã§å®£è¨€ã—ãŸãƒ¬ã‚·ãƒ¼ãƒã‚’å—動的アラームã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ã“ã®ã‚¢ãƒ©ãƒ¼ãƒ ã¯ã€å¿…è¦ãªã¨ãã«ã ã‘システムイベントã«ã‚ˆã£ã¦å‘¼ã³å‡ºã•れã¾ã™ã€‚</p> - -<h2 id="ToggleReceivers">効率を上ã’ã‚‹ãŸã‚ã«çŠ¶æ…‹å¤‰åŒ–ãƒ¬ã‚·ãƒ¼ãƒã®ã‚ªãƒ³ã¨ã‚ªãƒ•を切り替ãˆã‚‹ </h2> - + +<h2 id="ToggleReceivers">効率を上ã’ã‚‹ãŸã‚ã«çŠ¶æ…‹å¤‰åŒ–ãƒ¬ã‚·ãƒ¼ãƒã®ã‚ªãƒ³ã¨ã‚ªãƒ•を切り替ãˆã‚‹ </h2> + <p>{@link android.content.pm.PackageManager} を使用ã™ã‚‹ã¨ã€ãƒžãƒ‹ãƒ•ェスト内ã§å®šç¾©ã•れã¦ã„るコンãƒãƒ¼ãƒãƒ³ãƒˆã®æœ‰åŠ¹åŒ–çŠ¶æ…‹ã‚’åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«ã¯ãƒ–ãƒãƒ¼ãƒ‰ã‚ャスト レシーãƒã‚‚該当ã™ã‚‹ã®ã§ã€æ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã‚ªãƒ³ã¨ã‚ªãƒ•を切り替ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> <pre>ComponentName receiver = new ComponentName(context, myReceiver.class); diff --git a/docs/html-intl/intl/ja/training/multiscreen/adaptui.jd b/docs/html-intl/intl/ja/training/multiscreen/adaptui.jd index 8b1e6acdee05..c738d3955dd8 100644 --- a/docs/html-intl/intl/ja/training/multiscreen/adaptui.jd +++ b/docs/html-intl/intl/ja/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> @@ -27,17 +27,17 @@ previous.link=screendensities.html <ul> <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">ã‚¿ãƒ–ãƒ¬ãƒƒãƒˆã¨æºå¸¯ç«¯æœ«ã®ã‚µãƒãƒ¼ãƒˆ</a></li> </ul> - + <h2>試ã—ã¦ã¿ã‚‹</h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>アプリãŒç¾åœ¨è¡¨ç¤ºã—ã¦ã„るレイアウトã«ã‚ˆã£ã¦ã€UI フãƒãƒ¼ãŒç•°ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¢ãƒ—リãŒãƒ‡ãƒ¥ã‚¢ãƒ«ãƒšã‚¤ãƒ³ モードã§ã‚れã°ã€å·¦ãƒšã‚¤ãƒ³ã®ã‚¢ã‚¤ãƒ†ãƒ をクリックã™ã‚‹ã¨ã€å˜ã«å³ãƒšã‚¤ãƒ³ã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¡¨ç¤ºã•れるã ã‘ã§ã™ãŒã€ã‚·ãƒ³ã‚°ãƒ«ãƒšã‚¤ãƒ³ モードã§ã‚れã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ï¼ˆåˆ¥ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティ内ã®ï¼‰ã‚³ãƒ³ãƒ†ãƒ³ãƒ„専用ã®ãƒšã‚¤ãƒ³ã«è¡¨ç¤ºã•れる必è¦ãŒã‚りã¾ã™ã€‚</p> @@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment { public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html-intl/intl/ja/training/multiscreen/index.jd b/docs/html-intl/intl/ja/training/multiscreen/index.jd index 9e0158401d45..f1ee24aefbe3 100644 --- a/docs/html-intl/intl/ja/training/multiscreen/index.jd +++ b/docs/html-intl/intl/ja/training/multiscreen/index.jd @@ -7,10 +7,10 @@ next.link=screensizes.html @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>å¿…è¦ãªçŸ¥è˜ã¨å‰ææ¡ä»¶</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>å¿…è¦ãªçŸ¥è˜ã¨å‰ææ¡ä»¶</h2> <ul> <li>Android 1.6 以上(サンプル アプリを使用ã™ã‚‹ã«ã¯ 2.1 以上)</li> @@ -27,17 +27,17 @@ href="{@docRoot}tools/support-library/index.html">サãƒãƒ¼ãƒˆ ライブラリ</ <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">複数画é¢ã®ã‚µãƒãƒ¼ãƒˆ</a></li> </ul> - -<h2>試ã—ã¦ã¿ã‚‹</h2> - -<div class="download-box"> + +<h2>試ã—ã¦ã¿ã‚‹</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Android ã¯ã€å°ã•ãªæºå¸¯é›»è©±ã‹ã‚‰å¤§ããªãƒ†ãƒ¬ãƒ“ã¾ã§ã€ç”»é¢ã‚µã‚¤ã‚ºã‚‚種類もã•ã¾ã–ã¾ãªãƒ‡ãƒã‚¤ã‚¹ã«æè¼‰ã§ãã¾ã™ã€‚ãã®ãŸã‚ã€ã§ãã‚‹é™ã‚Šå¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä½¿ç”¨ã§ãるよã†ã«ã€ã™ã¹ã¦ã®ç”»é¢ã‚µã‚¤ã‚ºã«å¯¾å¿œã§ãるよã†ã‚¢ãƒ—リをè¨è¨ˆã™ã‚‹ã“ã¨ãŒé‡è¦ã«ãªã‚Šã¾ã™ã€‚</p> <p>ã—ã‹ã—ã€ã•ã¾ã–ã¾ãªç¨®é¡žã®ãƒ‡ãƒã‚¤ã‚¹ã«å¯¾å¿œã§ãã‚‹ã ã‘ã§ã¯å分ã§ã¯ã‚りã¾ã›ã‚“。画é¢ã‚µã‚¤ã‚ºã«ã‚ˆã£ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ“作ã§ãã‚‹ã“ã¨ãŒæ±ºã¾ã£ã¦ãã‚‹ãŸã‚ã€æœ¬å½“ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’満足ã•ã›ã¦ã‚ˆã„å°è±¡ã‚’æŒã£ã¦ã‚‚らã†ãŸã‚ã«ã¯ã€ã‚¢ãƒ—リãŒå˜ã«è¤‡æ•°ã®ç”»é¢ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã ã‘ã§ã¯ä¸å分ã§ã™: ç”»é¢è¨å®šã”ã¨ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスを最é©åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚<em></em><em></em></p> @@ -48,17 +48,17 @@ href="{@docRoot}tools/support-library/index.html">サãƒãƒ¼ãƒˆ ライブラリ</ <p class="note"><strong>注:</strong> ã“ã®ã‚¯ãƒ©ã‚¹ã¨é–¢é€£ã‚µãƒ³ãƒ—ルã§ã¯ã€<a href="{@docRoot}tools/support-library/index.html">サãƒãƒ¼ãƒˆ ライブラリ</a>を使用ã—ã¾ã™ã€‚ç†ç”±ã¯ã€Android 3.0 未満ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ <PH>{@link android.app.Fragment}</PH> API を使用ã™ã‚‹ãŸã‚ã§ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã®ã™ã¹ã¦ã® API を使用ã™ã‚‹ã«ã¯ã€ãƒ©ã‚¤ãƒ–ラリをダウンãƒãƒ¼ãƒ‰ã—ã¦ã€ã‚¢ãƒ—リã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚</p> - - -<h2>レッスン</h2> - -<dl> - <dt><b><a href="screensizes.html">ã•ã¾ã–ã¾ãªç”»é¢ã‚µã‚¤ã‚ºã®ã‚µãƒãƒ¼ãƒˆ</a></b></dt> - <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ã•ã¾ã–ã¾ãªç”»é¢ã‚µã‚¤ã‚ºã«é©ã—ãŸãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’(柔軟ãªãƒ“ュー サイズ〠<PH>{@link android.widget.RelativeLayout}</PH>ã€ç”»é¢ã‚µã‚¤ã‚ºã¨ç”»é¢ã®å‘ãã®ä¿®é£¾åã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ フィルタã€ãƒŠã‚¤ãƒ³ãƒ‘ッムビットマップを使用ã—ã¦ï¼‰è¨è¨ˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> - - <dt><b><a href="screendensities.html">ã•ã¾ã–ã¾ãªç”»é¢å¯†åº¦ã®ã‚µãƒãƒ¼ãƒˆ</a></b></dt> - <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ï¼ˆå¯†åº¦éžä¾å˜ãƒ”クセルを使用ã—ã€å„密度ã«é©ã—ãŸãƒ“ットマップをæä¾›ã—ã¦ï¼‰ãƒ”クセル密度ãŒç•°ãªã‚‹ç”»é¢ã‚’サãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> - - <dt><b><a href="adaptui.html">é †å¿œæ€§ã®ã‚ã‚‹ UI フãƒãƒ¼ã®å®Ÿè£…</a></b></dt> - <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ã„ãã¤ã‹ã®ç”»é¢ã‚µã‚¤ã‚º/密度ã®çµ„ã¿åˆã‚ã›ã«é©ã—ãŸæ–¹æ³•(実行時ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’検出ã™ã‚‹æ–¹æ³•ã€ç¾åœ¨ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«åˆã‚ã›ã¦å¿œç”ã™ã‚‹æ–¹æ³•ã€ç”»é¢è¨å®šã®å¤‰æ›´ã‚’処ç†ã™ã‚‹æ–¹æ³•)㧠UI を実装ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> -</dl> + + +<h2>レッスン</h2> + +<dl> + <dt><b><a href="screensizes.html">ã•ã¾ã–ã¾ãªç”»é¢ã‚µã‚¤ã‚ºã®ã‚µãƒãƒ¼ãƒˆ</a></b></dt> + <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ã•ã¾ã–ã¾ãªç”»é¢ã‚µã‚¤ã‚ºã«é©ã—ãŸãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’(柔軟ãªãƒ“ュー サイズ〠<PH>{@link android.widget.RelativeLayout}</PH>ã€ç”»é¢ã‚µã‚¤ã‚ºã¨ç”»é¢ã®å‘ãã®ä¿®é£¾åã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ フィルタã€ãƒŠã‚¤ãƒ³ãƒ‘ッムビットマップを使用ã—ã¦ï¼‰è¨è¨ˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> + + <dt><b><a href="screendensities.html">ã•ã¾ã–ã¾ãªç”»é¢å¯†åº¦ã®ã‚µãƒãƒ¼ãƒˆ</a></b></dt> + <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ï¼ˆå¯†åº¦éžä¾å˜ãƒ”クセルを使用ã—ã€å„密度ã«é©ã—ãŸãƒ“ットマップをæä¾›ã—ã¦ï¼‰ãƒ”クセル密度ãŒç•°ãªã‚‹ç”»é¢ã‚’サãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> + + <dt><b><a href="adaptui.html">é †å¿œæ€§ã®ã‚ã‚‹ UI フãƒãƒ¼ã®å®Ÿè£…</a></b></dt> + <dd>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ã„ãã¤ã‹ã®ç”»é¢ã‚µã‚¤ã‚º/密度ã®çµ„ã¿åˆã‚ã›ã«é©ã—ãŸæ–¹æ³•(実行時ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’検出ã™ã‚‹æ–¹æ³•ã€ç¾åœ¨ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«åˆã‚ã›ã¦å¿œç”ã™ã‚‹æ–¹æ³•ã€ç”»é¢è¨å®šã®å¤‰æ›´ã‚’処ç†ã™ã‚‹æ–¹æ³•)㧠UI を実装ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</dd> +</dl> diff --git a/docs/html-intl/intl/ja/training/multiscreen/screendensities.jd b/docs/html-intl/intl/ja/training/multiscreen/screendensities.jd index 3482d5c5117e..6f9136cc6124 100644 --- a/docs/html-intl/intl/ja/training/multiscreen/screendensities.jd +++ b/docs/html-intl/intl/ja/training/multiscreen/screendensities.jd @@ -12,8 +12,8 @@ next.link=adaptui.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> @@ -29,15 +29,15 @@ next.link=adaptui.html </ul> <h2>試ã—ã¦ã¿ã‚‹</h2> - -<div class="download-box"> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ç•°ãªã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’生æˆã—ã€ã‹ã¤è§£åƒåº¦éžä¾å˜å˜ä½ã‚’使用ã—ã¦ã€ç•°ãªã‚‹ç”»é¢å¯†åº¦ã‚’サãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</p> @@ -48,8 +48,8 @@ next.link=adaptui.html <p>ãŸã¨ãˆã°ã€2 ã¤ã®ãƒ“ューã®é–“ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’挿入ã™ã‚‹å ´åˆã¯ã€<code>px</code> ã§ã¯ãªã㦠<code>dp</code> を使用ã—ã¾ã™:</p> <pre> -<Button android:layout_width="wrap_content" - android:layout_height="wrap_content" +<Button android:layout_width="wrap_content" + android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> @@ -57,8 +57,8 @@ next.link=adaptui.html <p>テã‚スト サイズを指定ã™ã‚‹å ´åˆã¯ã€å¸¸ã« <code>sp</code> を使用ã—ã¾ã™:</p> <pre> -<TextView android:layout_width="match_parent" - android:layout_height="wrap_content" +<TextView android:layout_width="match_parent" + android:layout_height="wrap_content" android:textSize="20sp" /> </pre> diff --git a/docs/html-intl/intl/ja/training/multiscreen/screensizes.jd b/docs/html-intl/intl/ja/training/multiscreen/screensizes.jd index 3655a33be2b9..49c179361c3e 100644 --- a/docs/html-intl/intl/ja/training/multiscreen/screensizes.jd +++ b/docs/html-intl/intl/ja/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã®å¦ç¿’内容</h2> <ol> @@ -30,26 +30,26 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">複数画é¢ã®ã‚µãƒãƒ¼ãƒˆ</a></li> </ul> -<h2>試ã—ã¦ã¿ã‚‹</h2> - -<div class="download-box"> +<h2>試ã—ã¦ã¿ã‚‹</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã§ã¯ã€ç•°ãªã‚‹ç”»é¢ã‚µã‚¤ã‚ºã‚’以下ã®ã‚ˆã†ãªæ–¹æ³•ã§ã‚µãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™:</p> -<ul> - <li>ç”»é¢ã«åŽã¾ã‚‹ã‚ˆã†ã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ サイズをé©åˆ‡ã«å¤‰æ›´ã™ã‚‹</li> - <li>ç”»é¢è¨å®šã«åŸºã¥ã„ã¦é©åˆ‡ãª UI レイアウトを表示ã™ã‚‹</li> +<ul> + <li>ç”»é¢ã«åŽã¾ã‚‹ã‚ˆã†ã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ サイズをé©åˆ‡ã«å¤‰æ›´ã™ã‚‹</li> + <li>ç”»é¢è¨å®šã«åŸºã¥ã„ã¦é©åˆ‡ãª UI レイアウトを表示ã™ã‚‹</li> <li>é©åˆ‡ãªç”»é¢ã«é©åˆ‡ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é©ç”¨ã™ã‚‹</li> - <li>é©åˆ‡ã«ã‚µã‚¤ã‚ºèª¿æ•´ã—ãŸãƒ“ットマップを表示ã™ã‚‹</li> -</ul> + <li>é©åˆ‡ã«ã‚µã‚¤ã‚ºèª¿æ•´ã—ãŸãƒ“ットマップを表示ã™ã‚‹</li> +</ul> -<h2 id="TaskUseWrapMatchPar">「wrap_contentã€ã¨ã€Œmatch_parentã€ã‚’使用ã™ã‚‹</h2> +<h2 id="TaskUseWrapMatchPar">「wrap_contentã€ã¨ã€Œmatch_parentã€ã‚’使用ã™ã‚‹</h2> <p>レイアウトをã•ã¾ã–ã¾ãªç”»é¢ã‚µã‚¤ã‚ºã«æŸ”軟ã«å¯¾å¿œã•ã›ã‚‹ã«ã¯ã€ä¸€éƒ¨ã®ãƒ“ュー コンãƒãƒ¼ãƒãƒ³ãƒˆã®å¹…ã¨é«˜ã•ã« <code>"wrap_content"</code> 㨠<code>"match_parent"</code> を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚<code>"wrap_content"</code> を使用ã™ã‚‹ã¨ã€ãƒ“ューã®å¹…や高ã•ãŒãã®ãƒ“ュー内ã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒåŽã¾ã‚‹ã®ã«å¿…è¦ãªæœ€å°ã‚µã‚¤ã‚ºã«è¨å®šã•れã¾ã™ã€‚一方ã€<code>"match_parent"</code>(API レベル 8 よりå‰ã®å称㯠<code>"fill_parent"</code>)を使用ã™ã‚‹ã¨ã€ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒãã®è¦ªãƒ“ューã®ã‚µã‚¤ã‚ºã«ä¸€è‡´ã™ã‚‹ã¾ã§æ‹¡å¤§ã•れã¾ã™ã€‚</p> @@ -65,7 +65,7 @@ next.link=screendensities.html <p class="img-caption"><strong>図 1.</strong> News Reader サンプル アプリã®ç¸¦è¡¨ç¤ºï¼ˆå·¦ï¼‰ã¨æ¨ªè¡¨ç¤ºï¼ˆå³ï¼‰</p> -<h2 id="TaskUseRelativeLayout">RelativeLayout を使用ã™ã‚‹</h2> +<h2 id="TaskUseRelativeLayout">RelativeLayout を使用ã™ã‚‹</h2> <p>ãƒã‚¹ãƒˆã•れ㟠<PH>{@link android.widget.LinearLayout} インスタンスやã€</PH> <code>"wrap_content"</code> 㨠<code>"match_parent"</code> ã®ã‚µã‚¤ã‚ºã®çµ„ã¿åˆã‚ã›ã‚’使用ã™ã‚‹ã¨ã€ã‹ãªã‚Šè¤‡é›‘ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’作æˆã§ãã¾ã™ã€‚ã—ã‹ã—〠<PH>{@link android.widget.LinearLayout}</PH> ã§ã¯ã€åビューã®ç©ºé–“çš„ãªä½ç½®é–¢ä¿‚ã‚’æ£ç¢ºã«åˆ¶å¾¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 <PH>{@link android.widget.LinearLayout} ã®ãƒ“ューã¯ã€</PH> å˜ã«ä¸€åˆ—ã«ä¸¦ã¶ã ã‘ã§ã™ã€‚åビューã«å¯¾ã—ã¦ç›´ç·šä»¥å¤–ã®ã•ã¾ã–ã¾ãªé…置を実ç¾ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ <PH>{@link android.widget.RelativeLayout}</PH>を使用ã™ã‚‹ã“ã¨ã§ã†ã¾ãã„ãã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€1 ã¤ã®åビューを画é¢ã®å·¦å´ã«é…ç½®ã—ã€ã‚‚ㆠ1 ã¤ã®åビューをå³å´ã«é…ç½®ã§ãã¾ã™ã€‚</p> @@ -115,8 +115,8 @@ next.link=screendensities.html <p>コンãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚µã‚¤ã‚ºãŒå¤‰æ›´ã•れã¦ã‚‚〠<PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>ã§æŒ‡å®šã•れãŸã¨ãŠã‚Šã«ç©ºé–“çš„ãªä½ç½®é–¢ä¿‚ãŒç¶æŒã•れã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚</p> - -<h2 id="TaskUseSizeQuali">サイズ修飾åを使用ã™ã‚‹</h2> + +<h2 id="TaskUseSizeQuali">サイズ修飾åを使用ã™ã‚‹</h2> <p>柔軟ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚„相対的ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‹ã‚‰å¾—ã‚‰ã‚Œã‚‹æ©æµã¯ã€å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ãŸã“ã¨ãらã„ã§ã™ã€‚ã“れらã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¯ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®å†…部や周囲ã®ã‚¹ãƒšãƒ¼ã‚¹ã‚’引ãå»¶ã°ã™ã“ã¨ã§ã•ã¾ã–ã¾ãªç”»é¢ã«å¯¾å¿œã—ã¾ã™ãŒã€ãれãžã‚Œã®ç”»é¢ã‚µã‚¤ã‚ºã«åˆã£ãŸæœ€é«˜ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスを実ç¾ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚¢ãƒ—リã§ã¯ã€æŸ”軟ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å®Ÿè£…ã ã‘ã§ã¯ãªãã€ã•ã¾ã–ã¾ãªç”»é¢è¨å®šã«åˆã‚ã›ãŸè¤‡æ•°ã®ä»£æ›¿ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚‚å¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">è¨å®šä¿®é£¾å</a>を使用ã™ã‚‹ã“ã¨ã§å®Ÿç¾å¯èƒ½ã§ã™ã€‚è¨å®šä¿®é£¾åã«ã‚ˆã‚Šã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãŒç¾åœ¨ã®ãƒ‡ãƒã‚¤ã‚¹ã®è¨å®šã«åŸºã¥ã„ã¦é©åˆ‡ãªãƒªã‚½ãƒ¼ã‚¹ï¼ˆç”»é¢ã‚µã‚¤ã‚ºåˆ¥ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ デザインãªã©ï¼‰ã‚’自動的ã«é¸æŠžã§ãã¾ã™ã€‚</p> @@ -158,7 +158,7 @@ next.link=screendensities.html <p>ãŸã ã—ã€Android 3.2 未満ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã¯ã“ã®ä¿®é£¾åã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。ã“れ㯠<code>sw600dp</code> をサイズ修飾åã¨ã—ã¦èªè˜ã§ããªã„ãŸã‚ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€å¼•ãç¶šã <code>large</code> 修飾åも使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã“ã§ã€<code>res/layout-sw600dp/main.xml</code> ã¨åŒã˜å†…容㮠<code>res/layout-large/main.xml</code> ã¨ã„ã†åå‰ã®ãƒ•ァイルも必è¦ã«ãªã‚Šã¾ã™ã€‚次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã“ã®ã‚ˆã†ã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ ファイルã®é‡è¤‡ã‚’é¿ã‘ã‚‹ãŸã‚ã®ãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã«ã¤ã„ã¦å¦ç¿’ã—ã¾ã™ã€‚</p> -<h2 id="TaskUseAliasFilters">レイアウト エイリアスを使用ã™ã‚‹</h2> +<h2 id="TaskUseAliasFilters">レイアウト エイリアスを使用ã™ã‚‹</h2> <p>最å°å¹…修飾åã¯ã€Android 3.2 以上ã§ã—ã‹åˆ©ç”¨ã§ãã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã®äº’æ›æ€§ã‚’ç¶æŒã™ã‚‹ãŸã‚ã«ã€ã‚ã„ã¾ã„ãªã‚µã‚¤ã‚ºåˆ†é¡žï¼ˆsmallã€normalã€largeã€xlarge)も併用ã™ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ãŸã¨ãˆã°ã€æºå¸¯ç«¯æœ«ã§ã¯ã‚·ãƒ³ã‚°ãƒ«ãƒšã‚¤ãƒ³ UIã€7 インムタブレットやテレビãªã©ã®å¤§ããªãƒ‡ãƒã‚¤ã‚¹ã§ã¯ãƒžãƒ«ãƒãƒšã‚¤ãƒ³ UI を表示ã™ã‚‹ã‚ˆã† UI ã‚’è¨è¨ˆã™ã‚‹å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ•ァイルãŒå¿…è¦ã«ãªã‚Šã¾ã™:</p> @@ -202,7 +202,7 @@ next.link=screendensities.html <PH>Android 3.2 未満ã®ã‚¿ãƒ–レット/テレビ㯠{@code large} ã«ä¸€è‡´ã—ã€</PH>Android 3.2 以上ã®ã‚¿ãƒ–レット/テレビ㯠<code>sw600dp</code> ã«ä¸€è‡´ã—ã¾ã™ï¼‰ã‚¿ãƒ–レット/テレビã«é©ç”¨ã•れã¾ã™ã€‚</p> -<h2 id="TaskUseOriQuali">ç”»é¢ã®å‘ãã®ä¿®é£¾åを使用ã™ã‚‹</h2> +<h2 id="TaskUseOriQuali">ç”»é¢ã®å‘ãã®ä¿®é£¾åを使用ã™ã‚‹</h2> <p>横表示ã¨ç¸¦è¡¨ç¤ºãŒä¸¡æ–¹ã¨ã‚‚æ£ã—ã表示ã•れるレイアウトもã‚りã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¯èª¿æ•´ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚以下ã«ã€News Reader サンプル アプリã®å„ç”»é¢ã®ã‚µã‚¤ã‚ºã¨å‘ãã§ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒã©ã®ã‚ˆã†ã«è¡¨ç¤ºã•れるã‹ã‚’示ã—ã¾ã™:</p> diff --git a/docs/html-intl/intl/ko/about/versions/android-5.0.jd b/docs/html-intl/intl/ko/about/versions/android-5.0.jd index 48d542ef5f64..b4217c6dde80 100644 --- a/docs/html-intl/intl/ko/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/ko/about/versions/android-5.0.jd @@ -381,7 +381,7 @@ sdk.platform.apiLevel=21 <h3 id="AudioPlayback">오디오 재ìƒ</h3> <p>ì´ ì¶œì‹œ ë²„ì „ì—는 다ìŒê³¼ ê°™ì€ {@link android.media.AudioTrack}ì— ëŒ€í•œ 변경사í•ì´ í¬í•¨ë˜ì–´ 있습니다.</p> <ul> - <li>ì´ì œ 앱ì—서 ë¶€ë™ ì†Œìˆ˜ì 형ì‹({@link android.media.AudioFormat#ENCODING_PCM_FLOAT ENCODING_PCM_FLOAT})으로 오디오 ë°ì´í„°ë¥¼ ì œê³µí• ìˆ˜ 있습니다. ì´ë¥¼ 통해 ë” í° ìŒëŸ‰ë¹„, ë” ì¼ê´€ëœ ì •ë°€ë„ ë° ë” í° í—¤ë“œë£¸ì´ ê°€ëŠ¥í•´ì¡ŒìŠµë‹ˆë‹¤. ë¶€ë™ ì†Œìˆ˜ì ì—°ì‚°ì€ ì¤‘ê°„ ê³¼ì • ê³„ì‚°ì— íŠ¹ížˆ ìœ ìš©í•©ë‹ˆë‹¤. ìž¬ìƒ ì—”ë“œí¬ì¸íŠ¸ëŠ” 오디오 ë°ì´í„°ì— ë‚®ì€ ë¹„íŠ¸ 심ë„로 ì •ìˆ˜ 형ì‹ì„ 사용합니다 (Android 5.0ì—서 ì¼ë¶€ ë‚´ë¶€ 파ì´í”„ë¼ì¸ì€ ì•„ì§ ë¶€ë™ ì†Œìˆ˜ì ì´ ì•„ë‹˜). + <li>ì´ì œ 앱ì—서 ë¶€ë™ ì†Œìˆ˜ì 형ì‹({@link android.media.AudioFormat#ENCODING_PCM_FLOAT ENCODING_PCM_FLOAT})으로 오디오 ë°ì´í„°ë¥¼ ì œê³µí• ìˆ˜ 있습니다. ì´ë¥¼ 통해 ë” í° ìŒëŸ‰ë¹„, ë” ì¼ê´€ëœ ì •ë°€ë„ ë° ë” í° í—¤ë“œë£¸ì´ ê°€ëŠ¥í•´ì¡ŒìŠµë‹ˆë‹¤. ë¶€ë™ ì†Œìˆ˜ì ì—°ì‚°ì€ ì¤‘ê°„ ê³¼ì • ê³„ì‚°ì— íŠ¹ížˆ ìœ ìš©í•©ë‹ˆë‹¤. ìž¬ìƒ ì—”ë“œí¬ì¸íŠ¸ëŠ” 오디오 ë°ì´í„°ì— ë‚®ì€ ë¹„íŠ¸ 심ë„로 ì •ìˆ˜ 형ì‹ì„ 사용합니다 (Android 5.0ì—서 ì¼ë¶€ ë‚´ë¶€ 파ì´í”„ë¼ì¸ì€ ì•„ì§ ë¶€ë™ ì†Œìˆ˜ì ì´ ì•„ë‹˜). <li>ì´ì œ 앱ì—서 오디오 ë°ì´í„°ë¥¼ {@link android.media.MediaCodec}ì—서 ì œê³µí•˜ëŠ” 것과 ê°™ì€ í˜•ì‹ì¸ {@link java.nio.ByteBuffer}로 ì œê³µí• ìˆ˜ 있습니다. <li>{@link android.media.AudioTrack#WRITE_NON_BLOCKING WRITE_NON_BLOCKING} ì˜µì…˜ì€ ì¼ë¶€ 앱ì—서 버í¼ë§ ë° ë©€í‹°ìŠ¤ë ˆë”©ì„ ë‹¨ìˆœí™”í• ìˆ˜ 있습니다. </ul> @@ -429,7 +429,7 @@ sdk.platform.apiLevel=21 <p>시스템ì—서 ì ì ˆí•œ 네트워í¬ë¥¼ ê°ì§€í•˜ë©´ ê°ì§€í•œ 네트워í¬ì— ì—°ê²°í•˜ê³ {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()} ì½œë°±ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì½œë°±ì˜ {@link android.net.Network} 개체를 사용하여 네트워í¬ì— 대한 추가 ì •ë³´ë¥¼ ê°€ì ¸ì˜¤ê±°ë‚˜, íŠ¸ëž˜í”½ì´ ì„ íƒí•œ 네트워í¬ë¥¼ 사용하ë„ë¡ ìœ ë„합니다.</p> <h3 id="BluetoothBroadcasting">ì €ì „ë ¥ 블루투스</h3> -<p>Android 4.3ì—서는 <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">ì €ì „ë ¥ 블루투스</a>(<em>블루투스 LE</em>)ì— ëŒ€í•œ í”Œëž«í¼ ì§€ì›ì´ ë„ìž…ë˜ì—ˆìŠµë‹ˆë‹¤. Android 5.0ì—서는 Android 기기가 블루투스 LE <em>주변기기</em>로 ìž‘ë™í• 수 있습니다. 앱ì—서 ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì—¬ 주변 ê¸°ê¸°ì— ë¸”ë£¨íˆ¬ìŠ¤ë¡œ ì—°ê²°í• ìˆ˜ 있ìŒì„ 알릴 수 있습니다. 예를 들어 기기가 만보계나 ê±´ê°• ëª¨ë‹ˆí„°ë§ ê¸°ê¸°ë¡œ ìž‘ë™í•˜ë©´ì„œ 다른 블루투스 LE 기기와 ë°ì´í„°ë¥¼ í†µì‹ í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” ì•±ì„ ì œìž‘í• ìˆ˜ 있습니다.</p> +<p>Android 4.3ì—서는 <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">ì €ì „ë ¥ 블루투스</a>(<em>블루투스 LE</em>)ì— ëŒ€í•œ í”Œëž«í¼ ì§€ì›ì´ ë„ìž…ë˜ì—ˆìŠµë‹ˆë‹¤. Android 5.0ì—서는 Android 기기가 블루투스 LE <em>주변기기</em>로 ìž‘ë™í• 수 있습니다. 앱ì—서 ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì—¬ 주변 ê¸°ê¸°ì— ë¸”ë£¨íˆ¬ìŠ¤ë¡œ ì—°ê²°í• ìˆ˜ 있ìŒì„ 알릴 수 있습니다. 예를 들어 기기가 만보계나 ê±´ê°• ëª¨ë‹ˆí„°ë§ ê¸°ê¸°ë¡œ ìž‘ë™í•˜ë©´ì„œ 다른 블루투스 LE 기기와 ë°ì´í„°ë¥¼ í†µì‹ í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” ì•±ì„ ì œìž‘í• ìˆ˜ 있습니다.</p> <p>새 {@link android.bluetooth.le} API를 사용하면 앱ì—서 ê´‘ê³ ë¥¼ 브로드ìºìŠ¤íŒ…í•˜ê³ , ì‘ë‹µì„ ìŠ¤ìº”í•˜ë©°, ì£¼ë³€ì˜ ë¸”ë£¨íˆ¬ìŠ¤ LE 기기와 ì—°ê²°ì„ ì„¤ì •í•˜ë„ë¡ í• ìˆ˜ 있습니다. 새 ê´‘ê³ ë° ìŠ¤ìº” ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} ê¶Œí•œì„ ì¶”ê°€í•©ë‹ˆë‹¤. 사용ìžê°€ Play ìŠ¤í† ì–´ì—서 ì•±ì„ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ë‹¤ìš´ë¡œë“œí• ë•Œ 사용ìžì—게 ì•±ì— ê¶Œí•œì„ ë¶€ì—¬í• ê²ƒì¸ì§€ 묻는 메시지('블루투스 ì—°ê²° ì •ë³´: ì£¼ë³€ì˜ ë¸”ë£¨íˆ¬ìŠ¤ ê¸°ê¸°ì— ë¸Œë¡œë“œìºìŠ¤íŒ…í•˜ê±°ë‚˜ ì´ëŸ¬í•œ ê¸°ê¸°ì— ëŒ€í•œ ì •ë³´ 수집하는 등 앱ì—서 블루투스를 ì œì–´í•˜ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤.')ê°€ 표시ë©ë‹ˆë‹¤.</p> <p>다른 앱ì—서 ë‚´ ì•±ì„ ì°¾ì„ ìˆ˜ 있ë„ë¡ ë¸”ë£¨íˆ¬ìŠ¤ LE ê´‘ê³ ë¥¼ ì‹œìž‘í•˜ë ¤ë©´ {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()}ì„ í˜¸ì¶œí•˜ê³ ì´ë¥¼ {@link android.bluetooth.le.AdvertiseCallback} í´ëž˜ìФ êµ¬í˜„ì— ì „ë‹¬í•©ë‹ˆë‹¤. 콜백 개체는 ê´‘ê³ ìž‘ì—…ì˜ ì„±ê³µ ë˜ëŠ” ì‹¤íŒ¨ì— ëŒ€í•œ ë³´ê³ ì„œë¥¼ ìˆ˜ì‹ í•©ë‹ˆë‹¤.</p> diff --git a/docs/html-intl/intl/ko/design/patterns/navigation.jd b/docs/html-intl/intl/ko/design/patterns/navigation.jd index 5f335d55408f..91d1dcc4769c 100644 --- a/docs/html-intl/intl/ko/design/patterns/navigation.jd +++ b/docs/html-intl/intl/ko/design/patterns/navigation.jd @@ -152,7 +152,7 @@ Talk는 친구가 í™”ìƒ ì±„íŒ…ì— ì°¸ì—¬í•˜ë„ë¡ ë³´ë‚¸ <h2 id="between-apps">앱 ê°„ íƒìƒ‰</h2> -<p>Android ì‹œìŠ¤í…œì˜ ë³¸ì§ˆì ì¸ ê°•ì 중 하나는 ì•±ì´ +<p>Android ì‹œìŠ¤í…œì˜ ë³¸ì§ˆì ì¸ ê°•ì 중 하나는 ì•±ì´ ë‹¤ë¥¸ ì•±ì„ ì‹¤í–‰í• ìˆ˜ 있다는 ì ì´ë©°, ì´ë¡œ ì¸í•´ 사용ìžëŠ” 한 앱ì—서 다른 앱으로 ì§ì ‘ ì´ë™í• 수 있습니다. 예를 들어, ì‚¬ì§„ì„ ìº¡ì²˜í•´ì•¼ 하는 ì•±ì€ ì¹´ë©”ë¼ ì•±ì„ ìž‘ë™ì‹œí‚¬ 수 있으며, ì¹´ë©”ë¼ ì•±ì€ ì‚¬ì§„ì„ í•´ë‹¹ 앱으로 ëŒë ¤ì¤ë‹ˆë‹¤. ì´ëŸ¬í•œ ê¸°ëŠ¥ì€ ê°œë°œìžì™€ ì‚¬ìš©ìž ëª¨ë‘ì—게 매우 ìœ ìš©í•©ë‹ˆë‹¤. diff --git a/docs/html-intl/intl/ko/distribute/googleplay/about.jd b/docs/html-intl/intl/ko/distribute/googleplay/about.jd index 57b5226cf293..2968ed4989f1 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body - <div id="qv-wrapper"> + <div id="qv-wrapper"> <div id="qv"> <h2>Google Play ì •ë³´</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/auto.jd b/docs/html-intl/intl/ko/distribute/googleplay/auto.jd index 6536f1a562c2..5b93b6b27262 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/auto.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/auto.jd @@ -32,7 +32,7 @@ page.metaDescription=Android Autoì— ì•± ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹¤. <p> ì‹œìž‘í•˜ë ¤ë©´ ì´ ë¬¸ì„œë¥¼ 참조하여 Google Play를 통해 사용ìžì—게 Auto ì•±ì„ ë°°í¬í•˜ëŠ” ë°©ë²•ì„ ë°°ìš°ì‹ì‹œì˜¤. - ì•±ì´ ì¶©ì¡±í•´ì•¼ 하는 ìœ ìš©ì„±, 품질 ë° ì•ˆì „ ê´€ë ¨ ê°€ì´ë“œë¼ì¸ì— 대한 ë‚´ìš©ì€ + ì•±ì´ ì¶©ì¡±í•´ì•¼ 하는 ìœ ìš©ì„±, 품질 ë° ì•ˆì „ ê´€ë ¨ ê°€ì´ë“œë¼ì¸ì— 대한 ë‚´ìš©ì€ <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì•±ì´ ì¤€ë¹„ë˜ë©´ ê°œë°œìž ì½˜ì†”ì˜ ì•½ê´€ì— ë™ì˜í•˜ê³ ê²€í† ìš© APK를 ì—…ë¡œë“œí• ìˆ˜ 있습니다. @@ -98,7 +98,7 @@ page.metaDescription=Android Autoì— ì•± ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹¤. Auto ì•±ì€ ìž˜ ìž‘ë™í•˜ê³ ì°¨ 안ì—서 멋있게 ë³´ì´ê³ ìµœê³ ì˜ ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ë„ë¡ ë””ìžì¸í•´ì•¼ 합니다. Google Play는 사용ìžê°€ Google Playì—서 쉽게 ê²€ìƒ‰í• ìˆ˜ 있ë„ë¡ ì„ ì •ëœ ê³ í’ˆì§ˆ Auto ì•±ì„ ì†Œê°œí•©ë‹ˆë‹¤. 다ìŒê³¼ ê°™ì€ ë°©ë²•ìœ¼ë¡œ 참여하여 사용ìžì—게 ë©‹ì§„ Android Auto ì•±ì„ ì œê³µí• ìˆ˜ 있습니다. - + </p> <ul> @@ -127,7 +127,7 @@ page.metaDescription=Android Autoì— ì•± ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹¤. <p> ì•½ê´€ì— ë™ì˜í•œ 후ì—ë§Œ Auto ì•±ì„ ì—…ë¡œë“œí• ìˆ˜ 있습니다. 다ìŒì€ Auto ì•±ì„ ì§€ì •í•˜ëŠ” ê¸°ì¤€ì— ëŒ€í•œ 설명입니다. - + </p> <ul> @@ -159,10 +159,10 @@ page.metaDescription=Android Autoì— ì•± ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹¤. <p> ê²€í† ëŠ” 휴대í°ì´ë‚˜ 태블릿 등 Google Play ìŠ¤í† ì–´ì˜ ë‹¤ë¥¸ 장치ì—서 ì•±ì˜ ì‚¬ìš© ê°€ëŠ¥ì„±ì„ ê²°ì •í•©ë‹ˆë‹¤. - + 휴대í°/태블릿 구성요소 ì—…ë°ì´íŠ¸ë¥¼ í¬í•¨í•œ 기존 ì•±ì´ ìžˆëŠ” 경우, Android Auto 구성요소가 ê²€í† ë¥¼ 통과해야 Google Play ìŠ¤í† ì–´ì—서 ì—…ë°ì´íŠ¸ëœ ì•±ì„ ì‚¬ìš©í• ìˆ˜ 있습니다. - + </p> <p> @@ -209,7 +209,7 @@ page.metaDescription=Android Autoì— ì•± ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹¤. <p>ì•±ì´ ìŠ¹ì¸ë˜ì§€ 않으면 개발ìžëŠ” 해결해야 í• ë¬¸ì œì— ëŒ€í•œ ìš”ì•½ì´ í¬í•¨ëœ <strong>알림 ì´ë©”ì¼ì„ ê°œë°œìž ê³„ì • 주소</strong>로 받게 ë©ë‹ˆë‹¤. 필요한 ì¡°ì •ì„ ê±°ì¹œ í›„ì— ìƒˆë¡œìš´ 앱 ë²„ì „ì„ ê°œë°œìž ì½˜ì†”ì— ì—…ë¡œë“œí• ìˆ˜ 있습니다. - + </p> <p> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd index b2dc6d56297a..fca59e89a46b 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd @@ -4,8 +4,8 @@ page.image=/distribute/images/developer-console.jpg Xnonavpage=true @jd:body - - <div id="qv-wrapper"> + + <div id="qv-wrapper"> <div id="qv"> <h2>게시 기능</h2> <ol> @@ -420,7 +420,7 @@ Xnonavpage=true <li>ê°€ê²©ì„ ì±…ì •í•©ë‹ˆë‹¤. </li> - <li>ì•±ì„ í¬í•¨í•œ ì œí’ˆì„ ê²Œì‹œí•˜ê±°ë‚˜, 사용하지 않는 ì œí’ˆì„ íšŒìˆ˜í•©ë‹ˆë‹¤. + <li>ì•±ì„ í¬í•¨í•œ ì œí’ˆì„ ê²Œì‹œí•˜ê±°ë‚˜, 사용하지 않는 ì œí’ˆì„ íšŒìˆ˜í•©ë‹ˆë‹¤. </li> </ul> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd index 92dbcf0b9724..8bf330d61424 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>ì´ ë¬¸ì„œì˜ ë‚´ìš©</h2> @@ -141,7 +141,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 ì•±ì´ ëª¨ë“ í”„ë¡œê·¸ëž¨ 요구사í•ì„ ì¤€ìˆ˜í• ê²½ìš° 게시 ì‹œê°„ì´ í‰ì†Œë³´ë‹¤ 오래 걸리지 않습니다. 하지만 Designed for Families ê²€í† ì¤‘ì— ì•±ì´ ê±°ë¶€ë˜ë©´ 게시가 지연ë 수 있습니다. - + </dd> <dt> @@ -163,7 +163,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 <dt> ì•±ì„ ê²Œì‹œí•œ í›„ì— Designed for Families 프로그램 요구사í•ì„ ì¤€ìˆ˜í•˜ì§€ 않는 것으로 확ì¸ë˜ë©´ 어떻게 ë©ë‹ˆê¹Œ? - + </dt> <dd> @@ -185,7 +185,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 <dt> Designed for Families 프로그램ì—서 승ì¸ëœ ì•±ì„ ì—…ë°ì´íŠ¸í•˜ë©´ 어떻게 ë©ë‹ˆê¹Œ? - + </dt> <dd> @@ -265,7 +265,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 ì¸ì•± ê´‘ê³ ë¥¼ í¬í•¨í•œ ì „ë°˜ì ì¸ ì‚¬ìš©ìž ê²½í—˜ì´ <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 프로그램 요구사í•</a>ì„ ì¶©ì¡±í•˜ë„ë¡ ë³´ìž¥í•˜ëŠ” ê²ƒì€ ê°œë°œìžì˜ 책임입니다. - + </dd> <dt> @@ -297,7 +297,7 @@ Designed for Familiesì— ëŒ€í•œ 질문과page.metaDescription= 대답 </dt> <dd> - 당사는 부모와 보호ìžê°€ Google Play ìŠ¤í† ì–´ì—서 ì‹ ë¢°í• ìˆ˜ 있는 브랜드와 개발ìžê°€ ì œìž‘í•œ 우수한 ì•„ë™ ë° ê°€ì¡±ìš© ì•±ì„ ì°¾ì„ ìˆ˜ 있ë„ë¡ í•˜ëŠ” ê²ƒì„ ëª©í‘œë¡œ 합니다. + 당사는 부모와 보호ìžê°€ Google Play ìŠ¤í† ì–´ì—서 ì‹ ë¢°í• ìˆ˜ 있는 브랜드와 개발ìžê°€ ì œìž‘í•œ 우수한 ì•„ë™ ë° ê°€ì¡±ìš© ì•±ì„ ì°¾ì„ ìˆ˜ 있ë„ë¡ í•˜ëŠ” ê²ƒì„ ëª©í‘œë¡œ 합니다. </dd> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd index 06f76b5c4589..4a93b564ec2e 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd @@ -78,7 +78,7 @@ page.metaDescription=간단한 몇 단계로 Designed for Familiesì— ê°€ìž…í•©ë <p class="note"> <strong>ì°¸ê³ :</strong> Designed for Families í”„ë¡œê·¸ëž¨ì— ê²Œì‹œëœ ì•±ì€ Google Playì˜ ëª¨ë“ ì‚¬ìš©ìžë„ ì‚¬ìš©í• ìˆ˜ 있습니다. - + </p> <p> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/guide.jd b/docs/html-intl/intl/ko/distribute/googleplay/guide.jd index e8d25ff2a3d6..2a622b728cd4 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/guide.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/guide.jd @@ -34,7 +34,7 @@ page.image=distribute/images/play_dev_guide.png <li> <strong>ì‚¬ìš©ìž í™•ë³´ ë° ìœ ì§€</strong> — ì•±ì„ ì„¤ì¹˜í•œ ì‚¬ëžŒì„ ì‹¤ì œ 사용ìžë¡œ í™•ë³´í•˜ê³ í•´ë‹¹ 사용ìžë¥¼ 효율ì 으로 ìœ ì§€í•˜ëŠ” ë°©ë²•ì„ ì•ˆë‚´í•©ë‹ˆë‹¤. - + </li> <li> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd index c914aab02de1..cec3dc6730bc 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd @@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>테스트</h2> <ol> <li><a href="#test-environment">테스트 환경 ì„¤ì •</a></li> @@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">태블릿 앱 품질</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">앱 최ì í™”</a></li> </ol> - + </div> </div> @@ -59,7 +59,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg - + </p> <div class="headerLine"> @@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> 설명 @@ -166,7 +166,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg </td> <td> ì–´ë””ì„œë“ ì§€ 홈 ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ìž¥ì¹˜ì˜ í™ˆ 화면으로 ì´ë™í•©ë‹ˆë‹¤. - + </td> <td> <a href="#core">CR-1</a> @@ -292,7 +292,7 @@ data-maxresults="6"> ì•±ì´ í•µì‹¬ 기능과 ê´€ë ¨ë˜ì§€ ì•Šì€ ê²½ìš° 사용ìžê°€ ë¹„ìš©ì„ ì§€ë¶ˆí• ìˆ˜ 있는 서비스(예: ì „í™” 걸기 ë˜ëŠ” SMS) ë˜ëŠ” 민ê°í•œ ë°ì´í„°(예: ì—°ë½ì²˜ ë˜ëŠ” 시스템 로그)ì— ëŒ€í•œ 액세스 ê¶Œí•œì„ ìš”ì²í•˜ì§€ 않습니다. - + </p> </td> </tr> @@ -594,7 +594,7 @@ data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6"> </td> <td> ì •ìƒì ì¸ ì•± 사용 ë° ë¡œë“œ 시 ìŒì•… ë° ë™ì˜ìƒ 재ìƒì´ 매ë„ëŸ½ê³ ìž”ê¸ˆ, 버벅거림 ë˜ëŠ” 기타 아티팩트가 없습니다. - + </td> <td> <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd index 6cf38c3371a1..23ddbcb128b9 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd @@ -56,7 +56,7 @@ Xnonavpage=true <p>뛰어난 태블릿 앱 ê²½í—˜ì„ ì œê³µí•˜ëŠ” 첫 번째 단계는 ì•±ì´ ëŒ€ìƒìœ¼ë¡œ ì‚¼ì€ ëª¨ë“ ìž¥ì¹˜ ë° í¼ íŒ©í„°ì— ëŒ€í•œ <em>핵심 앱 품질 기준</em>ì„ ì¶©ì¡±í•˜ëŠ”ì§€ 확ì¸í•˜ëŠ” 것입니다. - ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질 ê°€ì´ë“œë¼ì¸</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질 ê°€ì´ë“œë¼ì¸</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </p> <p> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd index 7ab936731b02..e35e566f267d 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd @@ -331,7 +331,7 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> </td> <td> <p style="margin-bottom:.5em;"> - ì•±ì´ í•„ìš”í•œ 경우 í™•ì¸ ì• ë‹ˆë©”ì´ì…˜ì„ 표시합니다. + ì•±ì´ í•„ìš”í•œ 경우 í™•ì¸ ì• ë‹ˆë©”ì´ì…˜ì„ 표시합니다. (<a href="{@docRoot}design/wear/patterns.html#Countdown">방법 알아보기</a>) </p> </td> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/start.jd b/docs/html-intl/intl/ko/distribute/googleplay/start.jd index f5dd1b3fd510..495df80c513f 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/start.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/start.jd @@ -75,7 +75,7 @@ page.image=/distribute/images/getting-started.jpg <li>해당 êµê°€ ë˜ëŠ” ì§€ì—ì˜ <strong>ê°œë°œìž ë°°í¬ ê³„ì•½</strong>ì„ ì½ê³ ë™ì˜í•©ë‹ˆë‹¤. Google Playì— ê²Œì‹œí•˜ëŠ” 앱 ë° ìŠ¤í† ì–´ 목ë¡ì€ ê°œë°œìž í”„ë¡œê·¸ëž¨ ì •ì±… ë° ë¯¸êµ ìˆ˜ì¶œ 법규를 준수해야 합니다. - + </li> <li>Google Walletì„ ì‚¬ìš©í•˜ì—¬ <strong>ë“±ë¡ ìˆ˜ìˆ˜ë£Œë¡œ 미화 25달러</strong>를 지불합니다. Google Wallet ê³„ì •ì´ ì—†ëŠ” 경우 프로세스 ì§„í–‰ ì¤‘ì— ê³„ì •ì„ ì„¤ì •í• ìˆ˜ 있습니다. diff --git a/docs/html-intl/intl/ko/distribute/googleplay/tv.jd b/docs/html-intl/intl/ko/distribute/googleplay/tv.jd index 58f4c2e01ee4..3efa93bdbaf1 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/tv.jd @@ -261,7 +261,7 @@ page.metaDescription=앱, 게임 ë° ì½˜í…ì¸ ë¥¼ Android TVì— ë°°í¬í•©ë‹ˆë‹¤. 필요한 ì¡°ì •ì„ ê±°ì¹œ í›„ì— ìƒˆë¡œìš´ 앱 ë²„ì „ì„ ê°œë°œìž ì½˜ì†”ì— ì—…ë¡œë“œí• ìˆ˜ 있습니다. - + </p> <p> @@ -282,7 +282,7 @@ page.metaDescription=앱, 게임 ë° ì½˜í…ì¸ ë¥¼ Android TVì— ë°°í¬í•©ë‹ˆë‹¤. <li> <em>승ì¸ë¨</em> — ì•±ì´ ê²€í† í›„ì— ìŠ¹ì¸ë˜ì—ˆìŠµë‹ˆë‹¤. Android TV 사용ìžê°€ ì•±ì„ ë°”ë¡œ ì‚¬ìš©í• ìˆ˜ 있습니다. - + </li> <li> diff --git a/docs/html-intl/intl/ko/distribute/googleplay/wear.jd b/docs/html-intl/intl/ko/distribute/googleplay/wear.jd index 864f668ecd3d..1f916c2f08a9 100644 --- a/docs/html-intl/intl/ko/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/ko/distribute/googleplay/wear.jd @@ -121,7 +121,7 @@ page.metaDescription=Android Wearì— ì•±, 게임 ë° ì½˜í…ì¸ ë¥¼ ë°°í¬í•©ë‹ˆë‹ Wear ì•±ì€ ìž˜ ìž‘ë™í•˜ê³ Android Wearì—서 멋있게 ë³´ì´ê³ ìµœê³ ì˜ ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ë„ë¡ ë””ìžì¸í•´ì•¼ 합니다. Google Play는 사용ìžê°€ 쉽게 ê²€ìƒ‰í• ìˆ˜ 있ë„ë¡ ì„ ì •ëœ ê³ í’ˆì§ˆ Wear ì•±ì„ ì†Œê°œí•©ë‹ˆë‹¤. 다ìŒê³¼ ê°™ì€ ë°©ë²•ìœ¼ë¡œ 참여하여 사용ìžì—게 ë©‹ì§„ Android Wear ì•±ì„ ì œê³µí• ìˆ˜ 있습니다. - + </p> <ul> diff --git a/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd index a8a2dcdc0bd6..623c129fcba8 100644 --- a/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd @@ -197,7 +197,7 @@ data-maxresults="6"> <p> Android 장치ì—서 Android 사용ìžëŠ” ê²€ìƒ‰ì— ì‚¬ìš©í• ì™„ì„±ë„를 ì„¤ì •í• ìˆ˜ 있습니다. Google Play는 ì„¤ì •ì— ë”°ë¼ ì•±ì„ í•„í„°ë§í•˜ë¯€ë¡œ ì„ íƒí•œ 콘í…ì¸ ë“±ê¸‰ì€ ì‚¬ìš©ìžì—게 ì•±ì„ ë°°í¬í•˜ëŠ” ë° ì˜í–¥ì„ 줄 수 있습니다. - 앱 ë°”ì´ë„ˆë¦¬ë¥¼ ë³€ê²½í• í•„ìš” ì—†ì´ ê°œë°œìž ì½˜ì†”ì—서 ì•±ì˜ ì½˜í…ì¸ ë“±ê¸‰ì„ í• ë‹¹(ë˜ëŠ” 변경)í• ìˆ˜ 있습니다. + 앱 ë°”ì´ë„ˆë¦¬ë¥¼ ë³€ê²½í• í•„ìš” ì—†ì´ ê°œë°œìž ì½˜ì†”ì—서 ì•±ì˜ ì½˜í…ì¸ ë“±ê¸‰ì„ í• ë‹¹(ë˜ëŠ” 변경)í• ìˆ˜ 있습니다. </p> @@ -764,7 +764,7 @@ See how you can facilitate testing with Google Play.</td> <p> ê°œë°œìž ì½˜ì†”ì—서 ì•±ì˜ ëŒ€ìƒ ì§€ì—ì„ ì„¤ì •í•œ í›„ì— ì§€ì›í•˜ëŠ” ëª¨ë“ ì–¸ì–´ì— ëŒ€í•´ í˜„ì§€í™”ëœ ìŠ¤í† ì–´ 목ë¡, í™ë³´ 그래픽 ë“±ì„ ì¶”ê°€í•˜ì‹ì‹œì˜¤. - + </p> diff --git a/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd index cf4648183a6f..4cc973542117 100644 --- a/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd @@ -187,7 +187,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6"> - + </p> <p> diff --git a/docs/html-intl/intl/ko/guide/components/activities.jd b/docs/html-intl/intl/ko/guide/components/activities.jd index 001982f6f63c..255a11119e96 100644 --- a/docs/html-intl/intl/ko/guide/components/activities.jd +++ b/docs/html-intl/intl/ko/guide/components/activities.jd @@ -44,31 +44,31 @@ page.tags=activity,intent -<p>{@link android.app.Activity}는 ì¼ì¢…ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소로서, -사용ìžì™€ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 있는 í™”ë©´ì„ ì œê³µí•˜ì—¬ ì „í™” 걸기, 사진 ì°ê¸°, ì´ë©”ì¼ ë³´ë‚´ê¸° ë˜ëŠ” ì§€ë„ ë³´ê¸° ë“±ì˜ ì¼ì„ í• ìˆ˜ -있습니다. 액티비티마다 ì°½ì´ í•˜ë‚˜ì”© ì£¼ì–´ì ¸ ì´ê³³ì— ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ëŒì–´ì˜¬ 수 있습니다. ì´ ì°½ì€ -ì¼ë°˜ì 으로 í™”ë©´ì„ ê°€ë“ ì±„ìš°ì§€ë§Œ, ìž‘ì€ ì°½ìœ¼ë¡œ 만들어 다른 ì°½ ìœ„ì— ë„울 ìˆ˜ë„ +<p>{@link android.app.Activity}는 ì¼ì¢…ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소로서, +사용ìžì™€ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 있는 í™”ë©´ì„ ì œê³µí•˜ì—¬ ì „í™” 걸기, 사진 ì°ê¸°, ì´ë©”ì¼ ë³´ë‚´ê¸° ë˜ëŠ” ì§€ë„ ë³´ê¸° ë“±ì˜ ì¼ì„ í• ìˆ˜ +있습니다. 액티비티마다 ì°½ì´ í•˜ë‚˜ì”© ì£¼ì–´ì ¸ ì´ê³³ì— ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ëŒì–´ì˜¬ 수 있습니다. ì´ ì°½ì€ +ì¼ë°˜ì 으로 í™”ë©´ì„ ê°€ë“ ì±„ìš°ì§€ë§Œ, ìž‘ì€ ì°½ìœ¼ë¡œ 만들어 다른 ì°½ ìœ„ì— ë„울 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p> í•˜ë‚˜ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 보통 여러 ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ ëŠìŠ¨í•˜ê²Œ 서로 묶여 있는 형태로 -구성ë©ë‹ˆë‹¤. í†µìƒ í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ê°€ "주요" 액티비티로 ì§€ì •ë˜ë©°, -사용ìžê°€ ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì²˜ìŒ ì‹¤í–‰í• ë•Œ ì´ ì•¡í‹°ë¹„í‹°ê°€ 사용ìžì—게 표시ë©ë‹ˆë‹¤. 그런 후 +<p> í•˜ë‚˜ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 보통 여러 ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ ëŠìŠ¨í•˜ê²Œ 서로 묶여 있는 형태로 +구성ë©ë‹ˆë‹¤. í†µìƒ í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ê°€ "주요" 액티비티로 ì§€ì •ë˜ë©°, +사용ìžê°€ ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì²˜ìŒ ì‹¤í–‰í• ë•Œ ì´ ì•¡í‹°ë¹„í‹°ê°€ 사용ìžì—게 표시ë©ë‹ˆë‹¤. 그런 후 ê°ê°ì˜ 액티비티는 여러 가지 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê¸° 위해 ë˜ ë‹¤ë¥¸ 액티비티를 ì‹œìž‘í• ìˆ˜ 있습니다. 새로운 액티비티가 시작ë 때마다 ì´ì „ 액티비티는 중단ë˜ì§€ë§Œ ì‹œìŠ¤í…œì€ í•´ë‹¹ 액티비티를 -스íƒ("ë°± 스íƒ")ì— ë³´ì¡´í•©ë‹ˆë‹¤. 새로운 액티비티가 시작ë˜ë©´, ì´ê²ƒì´ ë°± ìŠ¤íƒ ìœ„ë¡œ ë°€ë ¤ì™€ 사용ìžì˜ -ì‹œì„ ì„ ë•니다. ë°± 스íƒì€ 기본ì ì¸ "í›„ìž…ì„ ì¶œ" ë°©ì‹ì„ 지키므로, -사용ìžê°€ 현재 액티비티를 ëë‚´ê³ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 해당 액티비티가 +스íƒ("ë°± 스íƒ")ì— ë³´ì¡´í•©ë‹ˆë‹¤. 새로운 액티비티가 시작ë˜ë©´, ì´ê²ƒì´ ë°± ìŠ¤íƒ ìœ„ë¡œ ë°€ë ¤ì™€ 사용ìžì˜ +ì‹œì„ ì„ ë•니다. ë°± 스íƒì€ 기본ì ì¸ "í›„ìž…ì„ ì¶œ" ë°©ì‹ì„ 지키므로, +사용ìžê°€ 현재 액티비티를 ëë‚´ê³ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 해당 액티비티가 스íƒì—서 튀어나와(소멸ë˜ê³ ) ì´ì „ 액티비티를 재개합니다 (ë°± 스íƒì€ <a href="{@docRoot}guide/components/tasks-and-back-stack.html">작업 ë° ë°± 스íƒ</a> 문서ì—서 ìƒì„¸í•˜ê²Œ ë…¼ì˜í•©ë‹ˆë‹¤).</p> <p>한 액티비티가 새로운 ì•¡í‹°ë¹„í‹°ì˜ ì‹œìž‘ìœ¼ë¡œ ì¸í•´ ì¤‘ë‹¨ëœ ê²½ìš°, ì´ ìƒíƒœ ë³€ê²½ì€ -ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기 콜백 메서드를 통해 ì•Œë ¤ì§‘ë‹ˆë‹¤. +ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기 콜백 메서드를 통해 ì•Œë ¤ì§‘ë‹ˆë‹¤. 액티비티가 시스템 액티비티를 ìƒì„±, 중단, 재시작, ì œê±°í•˜ëŠ” ë“±ì˜ ìƒíƒœ 변화로 ì¸í•´ ë°›ì„ ìˆ˜ 있는 콜백 메서드는 여러 가지가 있습니다. ê° ì½œë°±ì€ ìƒíƒœ ë³€í™”ì— ì•Œë§žì€ íŠ¹ì • ìž‘ì—…ì„ ìˆ˜í–‰í• ê¸°íšŒë¥¼ ì œê³µí•©ë‹ˆë‹¤. - 예를 들어 액티비티가 중단ë˜ë©´ ë„¤íŠ¸ì›Œí¬ ë˜ëŠ” ë°ì´í„°ë² ì´ìФ ì—°ê²°ê³¼ ê°™ì´ -í° ê°œì²´ëŠ” ëª¨ë‘ í•´ì œí•´ì•¼ 합니다. 액티비티가 재개ë˜ë©´, 필요한 리소스를 + 예를 들어 액티비티가 중단ë˜ë©´ ë„¤íŠ¸ì›Œí¬ ë˜ëŠ” ë°ì´í„°ë² ì´ìФ ì—°ê²°ê³¼ ê°™ì´ +í° ê°œì²´ëŠ” ëª¨ë‘ í•´ì œí•´ì•¼ 합니다. 액티비티가 재개ë˜ë©´, 필요한 리소스를 다시 íšë“하여 ì¤‘ë‹¨ëœ ìž‘ì—…ì„ ìž¬ê°œí• ìˆ˜ 있습니다. ì´ëŸ¬í•œ ìƒíƒœ ì „í™˜ì€ ëª¨ë‘ ì•¡í‹°ë¹„í‹° 수명 ì£¼ê¸°ì˜ ì¼ë¶€ìž…니다.</p> @@ -83,52 +83,52 @@ page.tags=activity,intent <p>액티비티를 ìƒì„±í•˜ë ¤ë©´ {@link android.app.Activity}ì˜ í•˜ìœ„ í´ëž˜ìФ(ë˜ëŠ” ì´ì˜ 기존 하위 í´ëž˜ìФ)를 ìƒì„±í•´ì•¼ 합니다. 하위 í´ëž˜ìФì—서는 액티비티 ìƒì„±, 중단, 재개, 소멸 시기 등과 ê°™ì€ -수명 ì£¼ê¸°ì˜ ë‹¤ì–‘í•œ ìƒíƒœ ê°„ 액티비티가 ì „í™˜ë 때 ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 콜백 메서드를 구현해야 합니다. 가장 중요한 ë‘ ê°€ì§€ 콜백 메서드는 +수명 ì£¼ê¸°ì˜ ë‹¤ì–‘í•œ ìƒíƒœ ê°„ 액티비티가 ì „í™˜ë 때 ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 콜백 메서드를 구현해야 합니다. 가장 중요한 ë‘ ê°€ì§€ 콜백 메서드는 다ìŒê³¼ 같습니다.</p> <dl> <dt>{@link android.app.Activity#onCreate onCreate()}</dt> <dd>ì´ ë©”ì„œë“œëŠ” 반드시 구현해야 합니다. ì‹œìŠ¤í…œì€ ì•¡í‹°ë¹„í‹°ë¥¼ ìƒì„±í• 때 ì´ê²ƒì„ 호출합니다. - 구현하는 ì¤‘ì— ì•¡í‹°ë¹„í‹°ì˜ í•„ìˆ˜ 구성 요소를 초기화해야 + 구현하는 ì¤‘ì— ì•¡í‹°ë¹„í‹°ì˜ í•„ìˆ˜ 구성 요소를 초기화해야 합니다. ë¬´ì—‡ë³´ë‹¤ë„ ì¤‘ìš”í•œ ì ì€, 바로 여기서 {@link android.app.Activity#setContentView setContentView()}를 호출해야 ì•¡í‹°ë¹„í‹°ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë ˆì´ì•„ì›ƒì„ ì •ì˜í• 수 있다는 ì 입니다.</dd> <dt>{@link android.app.Activity#onPause onPause()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì‚¬ìš©ìžê°€ 액티비티를 ë– ë‚œë‹¤ëŠ” -첫 번째 ì‹ í˜¸ìž…ë‹ˆë‹¤(다만 ì´ê²ƒì´ í•ìƒ ì•¡í‹°ë¹„í‹°ê°€ 소멸 중ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤). 현재 ì‚¬ìš©ìž ì„¸ì…˜ì„ ë„˜ì–´ì„œ -ì§€ì†ë˜ì–´ì•¼ 하는 변경 사í•ì„ ì»¤ë°‹í•˜ë ¤ë©´ 보통 ì´ê³³ì—서 í•´ì•„ 합니다(사용ìžê°€ + <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì‚¬ìš©ìžê°€ 액티비티를 ë– ë‚œë‹¤ëŠ” +첫 번째 ì‹ í˜¸ìž…ë‹ˆë‹¤(다만 ì´ê²ƒì´ í•ìƒ ì•¡í‹°ë¹„í‹°ê°€ 소멸 중ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤). 현재 ì‚¬ìš©ìž ì„¸ì…˜ì„ ë„˜ì–´ì„œ +ì§€ì†ë˜ì–´ì•¼ 하는 변경 사í•ì„ ì»¤ë°‹í•˜ë ¤ë©´ 보통 ì´ê³³ì—서 í•´ì•„ 합니다(사용ìžê°€ ëŒì•„오지 ì•Šì„ ìˆ˜ 있기 때문입니다).</dd> </dl> -<p>여러 액티비티 사ì´ì—서 ì›í™œí•œ ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ê³ , 액티비티 중단ì´ë‚˜ 심지어 -ì†Œë©¸ì„ ì´ˆëž˜í• ìˆ˜ë„ ìžˆëŠ” 예ìƒì¹˜ 못한 ê°„ì„ì„ ì²˜ë¦¬í•˜ê¸° 위해 사용해야 하는 다른 수명 주기 -콜백 ë©”ì„œë“œë„ ì—¬ëŸ¬ 가지 있습니다. ëª¨ë“ ìˆ˜ëª… 주기 콜백 메서드는 ë‚˜ì¤‘ì— +<p>여러 액티비티 사ì´ì—서 ì›í™œí•œ ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ê³ , 액티비티 중단ì´ë‚˜ 심지어 +ì†Œë©¸ì„ ì´ˆëž˜í• ìˆ˜ë„ ìžˆëŠ” 예ìƒì¹˜ 못한 ê°„ì„ì„ ì²˜ë¦¬í•˜ê¸° 위해 사용해야 하는 다른 수명 주기 +콜백 ë©”ì„œë“œë„ ì—¬ëŸ¬ 가지 있습니다. ëª¨ë“ ìˆ˜ëª… 주기 콜백 메서드는 ë‚˜ì¤‘ì— <a href="#Lifecycle">액티비티 수명 주기 관리</a> 섹션ì—서 ìžì„¸ížˆ ë…¼ì˜í• 것입니다.</p> <h3 id="UI">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ 구현하기</h3> -<p> 한 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 보기 계층—즉, +<p> 한 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 보기 계층—즉, {@link android.view.View} í´ëž˜ìФì—서 파ìƒëœ 개체가 ì œê³µí•©ë‹ˆë‹¤. ê° ë³´ê¸°ëŠ” 액티비티 ì°½ ì•ˆì˜ íŠ¹ì •í•œ ì§ì‚¬ê°í˜• ê³µê°„ì„ - ì œì–´í•˜ë©° ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì— ëŒ€ì‘í• ìˆ˜ 있습니다. 예를 들어, ì–´ë–¤ 보기는 사용ìžê°€ 터치하면 + ì œì–´í•˜ë©° ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì— ëŒ€ì‘í• ìˆ˜ 있습니다. 예를 들어, ì–´ë–¤ 보기는 사용ìžê°€ 터치하면 ìž‘ì—…ì„ ì‹œìž‘í•˜ëŠ” ë²„íŠ¼ì¼ ìˆ˜ 있습니다.</p> -<p>Android는 ë ˆì´ì•„ì›ƒì„ ë””ìžì¸í•˜ê³ ì •ë¦¬í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ì—¬ëŸ¬ 가지 보기를 미리 만들어 -ì œê³µí•©ë‹ˆë‹¤. "ìœ„ì ¯"ì´ëž€ í™”ë©´ì— ì‹œê°ì (ì´ìž 대화형) 요소를 ì œê³µí•˜ëŠ” 보기입니다. 예를 들어 +<p>Android는 ë ˆì´ì•„ì›ƒì„ ë””ìžì¸í•˜ê³ ì •ë¦¬í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ì—¬ëŸ¬ 가지 보기를 미리 만들어 +ì œê³µí•©ë‹ˆë‹¤. "ìœ„ì ¯"ì´ëž€ í™”ë©´ì— ì‹œê°ì (ì´ìž 대화형) 요소를 ì œê³µí•˜ëŠ” 보기입니다. 예를 들어 버튼, í…스트 필드, 확ì¸ëž€ì´ë‚˜ ê·¸ì € í•˜ë‚˜ì˜ ì´ë¯¸ì§€ì¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. "ë ˆì´ì•„웃"ì€ ì„ í˜• ë ˆì´ì•„웃, 격ìží˜• ë ˆì´ì•„웃, ìƒëŒ€ì ë ˆì´ì•„웃과 ê°™ì´ í•˜ìœ„ ë ˆì´ì•„ì›ƒì— ëŒ€í•´ ë…특한 ë ˆì´ì•„웃 모ë¸ì„ ì œê³µí•˜ëŠ” {@link android.view.ViewGroup}ì—서 파ìƒëœ 보기입니다. ë˜í•œ, {@link android.view.View}와 {@link android.view.ViewGroup} í´ëž˜ìФ(ë˜ëŠ” 기존 하위 í´ëž˜ìФ)ì˜ ì•„ëž˜ë¡œ ë‚´ë ¤ê°€ì„œ ìœ„ì ¯ê³¼ ë ˆì´ì•„ì›ƒì„ ìƒì„±í•˜ê³ ì´ë¥¼ 액티비티 ë ˆì´ì•„ì›ƒì— ì ìš©í• ìˆ˜ 있습니다.</p> -<p>보기를 사용하여 ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ëŠ” 가장 보편ì ì¸ ë°©ì‹ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë¦¬ì†ŒìŠ¤ì— ì €ìž¥ëœ +<p>보기를 사용하여 ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ëŠ” 가장 보편ì ì¸ ë°©ì‹ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë¦¬ì†ŒìŠ¤ì— ì €ìž¥ëœ XML ë ˆì´ì•„웃 파ì¼ì„ 사용하는 것입니다. ì´ë ‡ê²Œ 하면 ì•¡í‹°ë¹„í‹°ì˜ ë™ìž‘ì„ ì •ì˜í•˜ëŠ” -소스 코드와 별개로 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë””ìžì¸ì„ ìœ ì§€í• ìˆ˜ 있습니다. +소스 코드와 별개로 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë””ìžì¸ì„ ìœ ì§€í• ìˆ˜ 있습니다. {@link android.app.Activity#setContentView(int) setContentView()}로 ì•¡í‹°ë¹„í‹°ì˜ UI로서 ë ˆì´ì•„ì›ƒì„ ì„¤ì •í•˜ê³ , 해당 ë ˆì´ì•„ì›ƒì˜ ë¦¬ì†ŒìŠ¤ ID를 ì „ë‹¬í• ìˆ˜ 있습니다. 그러나 액티비티 ì½”ë“œì— ìƒˆë¡œìš´ {@link android.view.View}를 ìƒì„±í•˜ê³ 새로운 {@link -android.view.View}를 {@link android.view.ViewGroup}ì— ì‚½ìž…í•˜ì—¬ 보기 ê³„ì¸µì„ êµ¬ì¶•í•œ ë’¤ 루트 +android.view.View}를 {@link android.view.ViewGroup}ì— ì‚½ìž…í•˜ì—¬ 보기 ê³„ì¸µì„ êµ¬ì¶•í•œ ë’¤ 루트 {@link android.view.ViewGroup}ì„ {@link android.app.Activity#setContentView(View) setContentView()}ì— ì „ë‹¬í•´ë„ í•´ë‹¹ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> @@ -138,7 +138,7 @@ setContentView()}ì— ì „ë‹¬í•´ë„ í•´ë‹¹ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니 <h3 id="Declaring">매니페스트ì—서 액티비티 ì„ ì–¸í•˜ê¸°</h3> -<p>시스템ì—서 ì•¡í‹°ë¹„í‹°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•˜ë ¤ë©´ ì´ë¥¼ 매니페스트 파ì¼ì—서 +<p>시스템ì—서 ì•¡í‹°ë¹„í‹°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•˜ë ¤ë©´ ì´ë¥¼ 매니페스트 파ì¼ì—서 ì„ ì–¸í•´ì•¼ë§Œ 합니다. 액티비티를 ì„ ì–¸í•˜ë ¤ë©´ 매니페스트 파ì¼ì„ ì—´ê³ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 요소를 <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> ìš”ì†Œì˜ í•˜ìœ„ í•목으로 추가합니다. 예:</p> @@ -169,12 +169,12 @@ setContentView()}ì— ì „ë‹¬í•´ë„ í•´ë‹¹ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니 <p><a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 요소 ë˜í•œ 여러 가지 ì¸í…트 필터를 ì§€ì •í• ìˆ˜ 있습니다. 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 ì´ë¥¼ 활성화하는 ë°©ë²•ì„ ì„ ì–¸í•˜ê¸° 위해 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code -<intent-filter>}</a>를 사용하는 +<intent-filter>}</a>를 사용하는 것입니다.</p> -<p>Android SDK ë„구를 사용하여 새 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìƒì„±í•˜ëŠ” 경우, 개발ìžë¥¼ 위해 -ìƒì„±ë˜ì–´ 있는 ìŠ¤í… ì•¡í‹°ë¹„í‹°ì— ìžë™ìœ¼ë¡œ ì¸í…트 í•„í„°ê°€ í¬í•¨ë˜ì–´ 있어 "주요" ë™ìž‘ì— -ì‘답하는 액티비티를 ì„ ì–¸í•˜ë©°, ì´ëŠ” "시작 관리ìž" ë²”ì£¼ì— ë°°ì¹˜í•´ì•¼ 합니다. ì¸í…트 필터는 다ìŒê³¼ +<p>Android SDK ë„구를 사용하여 새 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìƒì„±í•˜ëŠ” 경우, 개발ìžë¥¼ 위해 +ìƒì„±ë˜ì–´ 있는 ìŠ¤í… ì•¡í‹°ë¹„í‹°ì— ìžë™ìœ¼ë¡œ ì¸í…트 í•„í„°ê°€ í¬í•¨ë˜ì–´ 있어 "주요" ë™ìž‘ì— +ì‘답하는 액티비티를 ì„ ì–¸í•˜ë©°, ì´ëŠ” "시작 관리ìž" ë²”ì£¼ì— ë°°ì¹˜í•´ì•¼ 합니다. ì¸í…트 필터는 다ìŒê³¼ ê°™ì€ í˜•íƒœë¥¼ ë±ë‹ˆë‹¤.</p> <pre> @@ -188,23 +188,23 @@ setContentView()}ì— ì „ë‹¬í•´ë„ í•´ë‹¹ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니 <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 요소는 ì´ê²ƒì´ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 가는 "주요" ì§„ìž… ì§€ì ì´ë¼ëŠ” ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code -<category>}</a> 요소는 ì´ ì•¡í‹°ë¹„í‹°ê°€ ì‹œìŠ¤í…œì˜ +<category>}</a> 요소는 ì´ ì•¡í‹°ë¹„í‹°ê°€ ì‹œìŠ¤í…œì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 목ë¡ìœ¼ë¡œ 나열ë˜ì–´ì•¼ 한다는 ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤(사용ìžê°€ ì´ ì•¡í‹°ë¹„í‹°ë¥¼ ì‹œìž‘í• ìˆ˜ 있ë„ë¡ í•´ì¤Œ).</p> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ìžì²´ í¬í•¨ ë°©ì‹ì´ê¸°ë¥¼ ì›í•˜ê³ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티를 활성화하ë„ë¡ í—ˆìš©í•˜ì§€ ì•Šê³ ìž í•˜ë©´, 달리 ì¸í…트 í•„í„°ê°€ ë” í•„ìš”í•˜ì§€ 않습니다. "주요" ë™ìž‘ê³¼ "시작 관리ìž" 범주가 있는 -액티비티는 하나ë¿ì´ì–´ì•¼ 합니다(ì´ì „ 예시 참조). 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 -ì‚¬ìš©í• ìˆ˜ 없게 í•˜ê³ ìž í•˜ëŠ” 액티비티ì—는 ì¸í…트 í•„í„°ê°€ 있으면 안 ë©ë‹ˆë‹¤. +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ìžì²´ í¬í•¨ ë°©ì‹ì´ê¸°ë¥¼ ì›í•˜ê³ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티를 활성화하ë„ë¡ í—ˆìš©í•˜ì§€ ì•Šê³ ìž í•˜ë©´, 달리 ì¸í…트 í•„í„°ê°€ ë” í•„ìš”í•˜ì§€ 않습니다. "주요" ë™ìž‘ê³¼ "시작 관리ìž" 범주가 있는 +액티비티는 하나ë¿ì´ì–´ì•¼ 합니다(ì´ì „ 예시 참조). 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 +ì‚¬ìš©í• ìˆ˜ 없게 í•˜ê³ ìž í•˜ëŠ” 액티비티ì—는 ì¸í…트 í•„í„°ê°€ 있으면 안 ë©ë‹ˆë‹¤. ì´ëŸ¬í•œ 액티비티는 명시ì ì¸ ì¸í…트를 사용해 ì§ì ‘ ì‹œìž‘í• ìˆ˜ 있습니다(ì´ ë‚´ìš©ì€ ë‹¤ìŒ ì„¹ì…˜ì—서 ë…¼ì˜).</p> -<p>그러나, 액티비티가 다른 ì• í”Œë¦¬ì¼€ì´ì…˜(ë° ë³¸ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜)ì—서 -ì „ë‹¬ëœ ì•”ì‹œì ì¸í…íŠ¸ì— ì‘답하ë„ë¡ í•˜ë ¤ë©´ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€ë¡œ ì¸í…트 필터를 ì •ì˜í•´ì•¼ë§Œ -합니다. ì‘답하게 í•˜ê³ ìž í•˜ëŠ” ê° ì¸í…트 ìœ í˜•ë³„ë¡œ +<p>그러나, 액티비티가 다른 ì• í”Œë¦¬ì¼€ì´ì…˜(ë° ë³¸ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜)ì—서 +ì „ë‹¬ëœ ì•”ì‹œì ì¸í…íŠ¸ì— ì‘답하ë„ë¡ í•˜ë ¤ë©´ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€ë¡œ ì¸í…트 필터를 ì •ì˜í•´ì•¼ë§Œ +합니다. ì‘답하게 í•˜ê³ ìž í•˜ëŠ” ê° ì¸í…트 ìœ í˜•ë³„ë¡œ <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 요소를 í¬í•¨í•˜ëŠ” <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>를 하나씩 í¬í•¨ì‹œì¼œì•¼ 하며, ì„ íƒ ì‚¬í•으로 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 요소 ë°/ë˜ëŠ” <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code -<data>}</a> 요소를 í¬í•¨ì‹œí‚¬ 수 있습니다. ì´ì™€ ê°™ì€ ìš”ì†ŒëŠ” 액티비티가 ì‘ë‹µí• ìˆ˜ 있는 ì¸í…íŠ¸ì˜ ìœ í˜•ì„ +<data>}</a> 요소를 í¬í•¨ì‹œí‚¬ 수 있습니다. ì´ì™€ ê°™ì€ ìš”ì†ŒëŠ” 액티비티가 ì‘ë‹µí• ìˆ˜ 있는 ì¸í…íŠ¸ì˜ ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</p> <p>액티비티가 ì¸í…íŠ¸ì— ì‘답하는 ë°©ì‹ì— 관한 ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> @@ -215,15 +215,15 @@ setContentView()}ì— ì „ë‹¬í•´ë„ í•´ë‹¹ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니 <h2 id="StartingAnActivity">액티비티 시작하기</h2> <p>다른 액티비티를 ì‹œìž‘í•˜ë ¤ë©´ {@link android.app.Activity#startActivity - startActivity()}를 호출한 ë‹¤ìŒ ì´ì— ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 설명하는 {@link android.content.Intent}를 -ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. ì¸í…트는 ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 ì •í™•ížˆ 나타내거나, ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ìž‘ì—…ì˜ -ìœ í˜•ì„ ì„¤ëª…í•˜ëŠ” 것입니다(ì‹œìŠ¤í…œì´ ì ì ˆí•œ 액티비티를 ì„ íƒí•˜ë©°, + startActivity()}를 호출한 ë‹¤ìŒ ì´ì— ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 설명하는 {@link android.content.Intent}를 +ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. ì¸í…트는 ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 ì •í™•ížˆ 나타내거나, ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ìž‘ì—…ì˜ +ìœ í˜•ì„ ì„¤ëª…í•˜ëŠ” 것입니다(ì‹œìŠ¤í…œì´ ì ì ˆí•œ 액티비티를 ì„ íƒí•˜ë©°, ì´ëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê°€ì ¸ì˜¨ ê²ƒì¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤). ì¸í…트는 ì†ŒëŸ‰ì˜ ë°ì´í„°ë¥¼ 운반하여 ì‹œìž‘ëœ ì•¡í‹°ë¹„í‹°ì—서 ì‚¬ìš©í• ìˆ˜ 있습니다.</p> <p>본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 작업하는 경우ì—는, ì•Œë ¤ì§„ 액티비티를 시작하기만 하면 ë˜ëŠ” 경우가 잦습니다. - ì´ë ‡ê²Œ í•˜ë ¤ë©´ ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 명시ì 으로 ì •ì˜í•˜ëŠ” ì¸í…트를 í´ëž˜ìФ ì´ë¦„ì„ + ì´ë ‡ê²Œ í•˜ë ¤ë©´ ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” 액티비티를 명시ì 으로 ì •ì˜í•˜ëŠ” ì¸í…트를 í´ëž˜ìФ ì´ë¦„ì„ ì‚¬ìš©í•˜ì—¬ ìƒì„±í•˜ë©´ ë©ë‹ˆë‹¤. 예를 들어, 다ìŒì€ 한 액티비티가 {@code SignInActivity}ë¼ëŠ” ì´ë¦„ì˜ ë‹¤ë¥¸ 액티비티를 시작하는 방법입니다.</p> @@ -232,15 +232,15 @@ Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); </pre> -<p>그러나, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다른 몇 가지 ë™ìž‘ì„ ìˆ˜í–‰í•˜ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ì´ë©”ì¼ ë³´ë‚´ê¸°, ë¬¸ìž -메시지 보내기 ë˜ëŠ” ìƒíƒœ ì—…ë°ì´íЏ ë“±ì„ ì•¡í‹°ë¹„í‹°ì˜ ë°ì´í„°ë¥¼ 사용하여 수행하는 것입니다. ì´ ê²½ìš°, 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— -그러한 ë™ìž‘ì„ ìˆ˜í–‰í• ìžì²´ 액티비티가 ì—†ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ ê¸°ê¸°ì— ìžˆëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -ì œê³µí•˜ëŠ” 액티비티를 ëŒ€ì‹ í™œìš©í•˜ì—¬ ë™ìž‘ì„ ìˆ˜í–‰í•˜ë„ë¡ í• ìˆ˜ 있습니다. 바로 ì´ ë¶€ë¶„ì—서 -ì¸í…íŠ¸ì˜ ì§„ê°€ê°€ 발휘ë©ë‹ˆë‹¤. ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ë™ìž‘ì„ ì„¤ëª…í•˜ëŠ” ì¸í…트를 ìƒì„±í•˜ë©´ +<p>그러나, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다른 몇 가지 ë™ìž‘ì„ ìˆ˜í–‰í•˜ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ì´ë©”ì¼ ë³´ë‚´ê¸°, ë¬¸ìž +메시지 보내기 ë˜ëŠ” ìƒíƒœ ì—…ë°ì´íЏ ë“±ì„ ì•¡í‹°ë¹„í‹°ì˜ ë°ì´í„°ë¥¼ 사용하여 수행하는 것입니다. ì´ ê²½ìš°, 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— +그러한 ë™ìž‘ì„ ìˆ˜í–‰í• ìžì²´ 액티비티가 ì—†ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ ê¸°ê¸°ì— ìžˆëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +ì œê³µí•˜ëŠ” 액티비티를 ëŒ€ì‹ í™œìš©í•˜ì—¬ ë™ìž‘ì„ ìˆ˜í–‰í•˜ë„ë¡ í• ìˆ˜ 있습니다. 바로 ì´ ë¶€ë¶„ì—서 +ì¸í…íŠ¸ì˜ ì§„ê°€ê°€ 발휘ë©ë‹ˆë‹¤. ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ë™ìž‘ì„ ì„¤ëª…í•˜ëŠ” ì¸í…트를 ìƒì„±í•˜ë©´ ì‹œìŠ¤í…œì´ ì ì ˆí•œ 액티비티를 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 시작하는 것입니다. 해당 ì¸í…트를 ì²˜ë¦¬í• ìˆ˜ 있는 액티비티가 여러 ê°œ 있는 경우, 사용ìžê°€ ì–´ëŠ ê²ƒì„ ì‚¬ìš©í• ì§€ ì„ íƒí•©ë‹ˆë‹¤. 예를 - 들어 사용ìžê°€ ì´ë©”ì¼ ë©”ì‹œì§€ë¥¼ 보낼 수 있게 í•˜ë ¤ë©´, 다ìŒê³¼ ê°™ì€ ì¸í…트를 + 들어 사용ìžê°€ ì´ë©”ì¼ ë©”ì‹œì§€ë¥¼ 보낼 수 있게 í•˜ë ¤ë©´, 다ìŒê³¼ ê°™ì€ ì¸í…트를 ìƒì„±í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> @@ -250,7 +250,7 @@ startActivity(intent); </pre> <p>ì¸í…íŠ¸ì— ì¶”ê°€ëœ {@link android.content.Intent#EXTRA_EMAIL} 추가 사í•ì€ ì´ë©”ì¼ì´ ì „ì†¡ë˜ì–´ì•¼ í• ì´ë©”ì¼ ì£¼ì†Œì˜ - 문ìžì—´ 배열입니다. ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ ì¸í…íŠ¸ì— + 문ìžì—´ 배열입니다. ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ ì¸í…íŠ¸ì— ì‘답하면, ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 추가 사í•ì´ ì œê³µí•œ 문ìžì—´ ë°°ì—´ì„ ì½ì–´ë‚¸ ë‹¤ìŒ ì´ë¥¼ ì´ë©”ì¼ ìž‘ì„± ì–‘ì‹ì˜ "ìˆ˜ì‹ " í•„ë“œì— ë°°ì¹˜í•©ë‹ˆë‹¤. ì´ ìƒí™©ì—서 ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티가 시작ë˜ê³ 사용ìžê°€ ìž‘ì—…ì„ ëë‚´ë©´ 본ì¸ì˜ 액티비티가 재개ë˜ëŠ” 것입니다.</p> @@ -263,14 +263,14 @@ startActivity(intent); <p>때로는 시작한 액티비티ì—서 결과를 ë°›ê³ ì‹¶ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 그런 경우, ({@link android.app.Activity#startActivity startActivity()} ëŒ€ì‹ ) {@link android.app.Activity#startActivityForResult - startActivityForResult()}를 호출해서 액티비티를 시작합니다. 그런 ë‹¤ìŒ í›„ì† ì•¡í‹°ë¹„í‹°ì—서 결과를 + startActivityForResult()}를 호출해서 액티비티를 시작합니다. 그런 ë‹¤ìŒ í›„ì† ì•¡í‹°ë¹„í‹°ì—서 결과를 ë°›ìœ¼ë ¤ë©´, {@link android.app.Activity#onActivityResult onActivityResult()} 콜백 메서드를 구현합니다. 해당 í›„ì† ì•¡í‹°ë¹„í‹°ê°€ 완료ë˜ë©´, ì´ê²ƒì´ {@link android.content.Intent} 형ì‹ìœ¼ë¡œ 결과를 {@link android.app.Activity#onActivityResult onActivityResult()} ë©”ì„œë“œì— ë°˜í™˜í•©ë‹ˆë‹¤.</p> -<p>예를 들어 사용ìžê°€ ì—°ë½ì²˜ 중ì—서 하나를 ê³ ë¥¼ 수 있ë„ë¡ í•˜ê³ ì‹¶ì„ ìˆ˜ 있습니다. -즉 ì—¬ëŸ¬ë¶„ì˜ ì•¡í‹°ë¹„í‹°ê°€ 해당 ì—°ë½ì²˜ì˜ ì •ë³´ë¡œ 무언가 í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” 것입니다. 그와 ê°™ì€ ì¸í…트를 ìƒì„±í•˜ê³ 결과를 ì²˜ë¦¬í•˜ë ¤ë©´ +<p>예를 들어 사용ìžê°€ ì—°ë½ì²˜ 중ì—서 하나를 ê³ ë¥¼ 수 있ë„ë¡ í•˜ê³ ì‹¶ì„ ìˆ˜ 있습니다. +즉 ì—¬ëŸ¬ë¶„ì˜ ì•¡í‹°ë¹„í‹°ê°€ 해당 ì—°ë½ì²˜ì˜ ì •ë³´ë¡œ 무언가 í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” 것입니다. 그와 ê°™ì€ ì¸í…트를 ìƒì„±í•˜ê³ 결과를 ì²˜ë¦¬í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> @@ -299,7 +299,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { <p>ì´ ì˜ˆì‹œëŠ” 액티비티 결과를 처리하기 위해 {@link android.app.Activity#onActivityResult onActivityResult()} 메서드ì—서 사용해야 í• ê¸°ë³¸ 논리를 나타낸 것입니다. 첫 번째 ì¡°ê±´ì€ ìš”ì²ì´ 성공ì ì¸ì§€ 확ì¸í•©ë‹ˆë‹¤. ìš”ì²ì— 성공했다면 -{@code resultCode}ê°€ {@link android.app.Activity#RESULT_OK}ê°€ ë©ë‹ˆë‹¤. ë˜í•œ, ì´ ê²°ê³¼ê°€ ì‘답하는 ìš”ì²ì´ +{@code resultCode}ê°€ {@link android.app.Activity#RESULT_OK}ê°€ ë©ë‹ˆë‹¤. ë˜í•œ, ì´ ê²°ê³¼ê°€ ì‘답하는 ìš”ì²ì´ ì•Œë ¤ì ¸ ìžˆëŠ”ì§€ë„ í™•ì¸í•©ë‹ˆë‹¤. ì´ ê²½ìš°ì—는 {@code requestCode}ê°€ {@link android.app.Activity#startActivityForResult startActivityForResult()}와 함께 ì „ì†¡ëœ ë‘ ë²ˆì§¸ 매개변수와 ì¼ì¹˜í•©ë‹ˆë‹¤. 여기서부터 코드가 @@ -317,58 +317,58 @@ android.content.ContentResolver}ê°€ 콘í…ì¸ ì œê³µìžì— 대한 쿼리를 수í <h2 id="ShuttingDown">액티비티 종료하기</h2> <p>액티비티를 ì¢…ë£Œí•˜ë ¤ë©´ 해당 ì•¡í‹°ë¹„í‹°ì˜ {@link android.app.Activity#finish -finish()} 메서드를 호출하면 ë©ë‹ˆë‹¤. +finish()} 메서드를 호출하면 ë©ë‹ˆë‹¤. {@link android.app.Activity#finishActivity finishActivity()}를 호출하여 ì´ì „ì— ì‹œìž‘í•œ 별ë„ì˜ ì•¡í‹°ë¹„í‹°ë¥¼ ì¢…ë£Œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 사용하여 액티비티를 명시ì 으로 -종료해서는 안 ë©ë‹ˆë‹¤. ë‹¤ìŒ ì„¹ì…˜ì—서 액티비티 수명 ì£¼ê¸°ì— ê´€í•´ ë…¼ì˜í•œ 바와 ê°™ì´, -Android ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª…ì„ ëŒ€ì‹ ê´€ë¦¬í•´ì£¼ë¯€ë¡œ ì§ì ‘ 액티비티를 종료하지 -ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 호출하면 예ìƒë˜ëŠ” ì‚¬ìš©ìž -í™˜ê²½ì— ë¶€ì •ì ì¸ ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있으며, ë”°ë¼ì„œ 사용ìžê°€ ì•¡í‹°ë¹„í‹°ì˜ ì´ ì¸ìŠ¤í„´ìŠ¤ì— ëŒì•„오는 ê²ƒì„ ì ˆëŒ€ ë°”ë¼ì§€ 않는 경우ì—ë§Œ +<p class="note"><strong>ì°¸ê³ :</strong> ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 사용하여 액티비티를 명시ì 으로 +종료해서는 안 ë©ë‹ˆë‹¤. ë‹¤ìŒ ì„¹ì…˜ì—서 액티비티 수명 ì£¼ê¸°ì— ê´€í•´ ë…¼ì˜í•œ 바와 ê°™ì´, +Android ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª…ì„ ëŒ€ì‹ ê´€ë¦¬í•´ì£¼ë¯€ë¡œ ì§ì ‘ 액티비티를 종료하지 +ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 호출하면 예ìƒë˜ëŠ” ì‚¬ìš©ìž +í™˜ê²½ì— ë¶€ì •ì ì¸ ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있으며, ë”°ë¼ì„œ 사용ìžê°€ ì•¡í‹°ë¹„í‹°ì˜ ì´ ì¸ìŠ¤í„´ìŠ¤ì— ëŒì•„오는 ê²ƒì„ ì ˆëŒ€ ë°”ë¼ì§€ 않는 경우ì—ë§Œ 사용해야 합니다.</p> <h2 id="Lifecycle">액티비티 수명 주기 관리하기</h2> -<p>콜백 메서드를 구현하여 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 ê²ƒì€ -ê°•ë ¥í•˜ê³ ìœ ì—°í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ ê°œë°œì— -대단히 중요한 ì—í• ì„ í•©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기는 다른 ì•¡í‹°ë¹„í‹°ì™€ì˜ ê´€ê³„, +<p>콜백 메서드를 구현하여 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 ê²ƒì€ +ê°•ë ¥í•˜ê³ ìœ ì—°í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ ê°œë°œì— +대단히 중요한 ì—í• ì„ í•©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기는 다른 ì•¡í‹°ë¹„í‹°ì™€ì˜ ê´€ê³„, ì•¡í‹°ë¹„í‹°ì˜ ìž‘ì—…ê³¼ ë°± ìŠ¤íƒ ë“±ì— ì§ì ‘ì 으로 ì˜í–¥ì„ 받습니다.</p> <p>액티비티는 기본ì 으로 세 가지 ìƒíƒœë¡œ ì¡´ìž¬í• ìˆ˜ 있습니다.</p> <dl> <dt><i>재개ë¨</i></dt> - <dd>액티비티가 화면 ì „ê²½ì— ìžˆìœ¼ë©° 사용ìžì˜ ì´ˆì ì´ ë§žì¶°ì ¸ 있습니다 (ì´ ìƒíƒœë¥¼ 때로는 + <dd>액티비티가 화면 ì „ê²½ì— ìžˆìœ¼ë©° 사용ìžì˜ ì´ˆì ì´ ë§žì¶°ì ¸ 있습니다 (ì´ ìƒíƒœë¥¼ 때로는 "실행 중"ì´ë¼ê³ ì¼ì»«ê¸°ë„ 합니다).</dd> <dt><i>ì¼ì‹œì •ì§€ë¨</i></dt> <dd>다른 액티비티가 ì „ê²½ì— ë‚˜ì™€ ìžˆê³ ì‚¬ìš©ìžì˜ ì‹œì„ ì„ ì§‘ì¤‘ì‹œí‚¤ê³ ìžˆì§€ë§Œ, ì´ ì•¡í‹°ë¹„í‹°ë„ ì—¬ì „ížˆ 표시ë˜ì–´ 있습니다. 다시 ë§í•´, -다른 액티비티가 ì´ ì•¡í‹°ë¹„í‹° ìœ„ì— í‘œì‹œë˜ì–´ 있으며 해당 액티비티는 부분ì 으로 투명하거나 +다른 액티비티가 ì´ ì•¡í‹°ë¹„í‹° ìœ„ì— í‘œì‹œë˜ì–´ 있으며 해당 액티비티는 부분ì 으로 투명하거나 ì „ì²´ í™”ë©´ì„ ë®ì§€ 않는 ìƒíƒœë¼ëŠ” 뜻입니다. ì¼ì‹œì •ì§€ëœ ì•¡í‹°ë¹„í‹°ëŠ” ì™„ì „ížˆ 살아있지만({@link android.app.Activity} -개체가 ë©”ëª¨ë¦¬ì— ë³´ê´€ë˜ì–´ ìžˆê³ , ëª¨ë“ ìƒíƒœ ë° êµ¬ì„±ì› ì •ë³´ë¥¼ ìœ ì§€í•˜ë©°, +개체가 ë©”ëª¨ë¦¬ì— ë³´ê´€ë˜ì–´ ìžˆê³ , ëª¨ë“ ìƒíƒœ ë° êµ¬ì„±ì› ì •ë³´ë¥¼ ìœ ì§€í•˜ë©°, ì°½ 관리ìžì— 붙어 있는 ìƒíƒœë¡œ ìœ ì§€ë¨), 메모리가 극히 부족한 경우 ì‹œìŠ¤í…œì´ ì¤‘ë‹¨ì‹œí‚¬ 수 있습니다.</dd> <dt><i>ì •ì§€ë¨</i></dt> - <dd>ì´ ì•¡í‹°ë¹„í‹°ê°€ 다른 ì•¡í‹°ë¹„í‹°ì— ì™„ì „ížˆ ê°€ë ¤ì§„ ìƒíƒœìž…니다(액티비티가 ì´ì œ + <dd>ì´ ì•¡í‹°ë¹„í‹°ê°€ 다른 ì•¡í‹°ë¹„í‹°ì— ì™„ì „ížˆ ê°€ë ¤ì§„ ìƒíƒœìž…니다(액티비티가 ì´ì œ "ë°°ê²½"ì— ìœ„ì¹˜í•¨). ì¤‘ë‹¨ëœ ì•¡í‹°ë¹„í‹°ë„ ì—¬ì „ížˆ ì‚´ì•„ 있기는 마찬가지입니다({@link android.app.Activity} 개체가 ë©”ëª¨ë¦¬ì— ë³´ê´€ë˜ì–´ ìžˆê³ , ëª¨ë“ ìƒíƒœì™€ êµ¬ì„±ì› ì •ë³´ë¥¼ ìœ ì§€í•˜ì‹œë§Œ ì°½ 관리ìžì— 붙어 있지 <em>않ìŒ</em> -). 그러나, ì´ëŠ” ë” ì´ìƒ 사용ìžì—게 표시ë˜ì§€ 않으며 +). 그러나, ì´ëŠ” ë” ì´ìƒ 사용ìžì—게 표시ë˜ì§€ 않으며 다른 ê³³ì— ë©”ëª¨ë¦¬ê°€ 필요하면 ì‹œìŠ¤í…œì´ ì¢…ë£Œì‹œí‚¬ 수 있습니다.</dd> </dl> -<p>액티비티가 ì¼ì‹œì •ì§€ ë˜ëŠ” ì¤‘ë‹¨ëœ ìƒíƒœì´ë©´, ì‹œìŠ¤í…œì´ ì´ë¥¼ 메모리ì—서 ì‚ì œí• ìˆ˜ 있습니다. ì´ëŸ¬ê¸° 위해서는 -종료를 ìš”ì²í•˜ê±°ë‚˜({@link android.app.Activity#finish finish()} 메서드를 호출) 단순히 ì´ ì•¡í‹°ë¹„í‹°ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 중단시키면 -ë©ë‹ˆë‹¤. 액티비티가 다시 열릴 때ì—는(종료 ë˜ëŠ” ì¤‘ë‹¨ëœ í›„ì—) 처ìŒë¶€í„° 다시 ìƒì„±í•´ì•¼ +<p>액티비티가 ì¼ì‹œì •ì§€ ë˜ëŠ” ì¤‘ë‹¨ëœ ìƒíƒœì´ë©´, ì‹œìŠ¤í…œì´ ì´ë¥¼ 메모리ì—서 ì‚ì œí• ìˆ˜ 있습니다. ì´ëŸ¬ê¸° 위해서는 +종료를 ìš”ì²í•˜ê±°ë‚˜({@link android.app.Activity#finish finish()} 메서드를 호출) 단순히 ì´ ì•¡í‹°ë¹„í‹°ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 중단시키면 +ë©ë‹ˆë‹¤. 액티비티가 다시 열릴 때ì—는(종료 ë˜ëŠ” ì¤‘ë‹¨ëœ í›„ì—) 처ìŒë¶€í„° 다시 ìƒì„±í•´ì•¼ 합니다.</p> <h3 id="ImplementingLifecycleCallbacks">수명 주기 콜백 구현하기</h3> -<p>위ì—서 설명한 바와 ê°™ì´ ì•¡í‹°ë¹„í‹°ê°€ 여러 가지 ìƒíƒœë¥¼ 오가며 ì „í™˜ë˜ë©´, ì´ì™€ ê°™ì€ ë‚´ìš©ì´ -여러 가지 콜백 메서드를 통해 통지ë©ë‹ˆë‹¤. 콜백 메서드는 ëª¨ë‘ í›„í¬ë¡œì„œ, -액티비티 ìƒíƒœê°€ 변경ë 때 ì ì ˆí•œ ìž‘ì—…ì„ í•˜ê¸° 위해 ì´ë¥¼ ìž¬ì •ì˜í• 수 있습니다. 다ìŒì˜ 골격 +<p>위ì—서 설명한 바와 ê°™ì´ ì•¡í‹°ë¹„í‹°ê°€ 여러 가지 ìƒíƒœë¥¼ 오가며 ì „í™˜ë˜ë©´, ì´ì™€ ê°™ì€ ë‚´ìš©ì´ +여러 가지 콜백 메서드를 통해 통지ë©ë‹ˆë‹¤. 콜백 메서드는 ëª¨ë‘ í›„í¬ë¡œì„œ, +액티비티 ìƒíƒœê°€ 변경ë 때 ì ì ˆí•œ ìž‘ì—…ì„ í•˜ê¸° 위해 ì´ë¥¼ ìž¬ì •ì˜í• 수 있습니다. 다ìŒì˜ 골격 액티비티ì—는 기본 수명 주기 메서드가 ê°ê° 하나씩 í¬í•¨ë˜ì–´ 있습니다.</p> @@ -410,51 +410,51 @@ public class ExampleActivity extends Activity { <p class="note"><strong>ì°¸ê³ :</strong> ì´ì™€ ê°™ì€ ìˆ˜ëª… 주기 메서드를 êµ¬í˜„í•˜ë ¤ë©´, í•ìƒ ìŠˆí¼í´ëž˜ìФ êµ¬í˜„ì„ í˜¸ì¶œí•œ 다ìŒì—ë§Œ 다른 ìž‘ì—…ì„ ì‹œìž‘í• ìˆ˜ 있습니다(ìœ„ì˜ ì˜ˆì‹œ 참조).</p> -<p>ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ ëª¨ë‘ í•©ì³ í•œ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기 ì „ì²´ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ 메서드를 êµ¬í˜„í•¨ìœ¼ë¡œì¨ +<p>ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ ëª¨ë‘ í•©ì³ í•œ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기 ì „ì²´ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ 메서드를 êµ¬í˜„í•¨ìœ¼ë¡œì¨ ì•¡í‹°ë¹„í‹° 수명 주기 ë‚´ì˜ ì„¸ 가지 ì¤‘ì²©ëœ ë£¨í”„ë¥¼ 모니터ë§í• 수 있습니다. </p> <ul> <li>한 ì•¡í‹°ë¹„í‹°ì˜ <b>ì „ì²´ 수명</b>ì€ {@link android.app.Activity#onCreate onCreate()} 호출과 {@link -android.app.Activity#onDestroy} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. 액티비티는 {@link android.app.Activity#onCreate onCreate()}ì—서 -"ì „ì²´" ìƒíƒœ(ë ˆì´ì•„웃 ì •ì˜ ë“±)ì˜ ì„¤ì •ì„ ìˆ˜í–‰í•œ ë‹¤ìŒ ë‚˜ë¨¸ì§€ 리소스를 -ëª¨ë‘ {@link android.app.Activity#onDestroy}ì— í•´ì œí•´ì•¼ 합니다. 예를 들어, -ì•¡í‹°ë¹„í‹°ì— ë„¤íŠ¸ì›Œí¬ì—서 ë°ì´í„°ë¥¼ 다운로드하기 위해 ë°°ê²½ì—서 실행 ì¤‘ì¸ ìŠ¤ë ˆë“œê°€ 있는 경우, ì´ëŠ” +android.app.Activity#onDestroy} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. 액티비티는 {@link android.app.Activity#onCreate onCreate()}ì—서 +"ì „ì²´" ìƒíƒœ(ë ˆì´ì•„웃 ì •ì˜ ë“±)ì˜ ì„¤ì •ì„ ìˆ˜í–‰í•œ ë‹¤ìŒ ë‚˜ë¨¸ì§€ 리소스를 +ëª¨ë‘ {@link android.app.Activity#onDestroy}ì— í•´ì œí•´ì•¼ 합니다. 예를 들어, +ì•¡í‹°ë¹„í‹°ì— ë„¤íŠ¸ì›Œí¬ì—서 ë°ì´í„°ë¥¼ 다운로드하기 위해 ë°°ê²½ì—서 실행 ì¤‘ì¸ ìŠ¤ë ˆë“œê°€ 있는 경우, ì´ëŠ” 해당 ìŠ¤ë ˆë“œë¥¼ {@link android.app.Activity#onCreate onCreate()}ì—서 ìƒì„±í•œ ë‹¤ìŒ {@link android.app.Activity#onDestroy}ì—서 ê·¸ ìŠ¤ë ˆë“œë¥¼ ì¤‘ë‹¨í• ìˆ˜ 있습니다.</li> <li><p>ì•¡í‹°ë¹„í‹°ì˜ <b>가시ì 수명</b>ì€ {@link android.app.Activity#onStart onStart()} 호출ì—서 {@link -android.app.Activity#onStop onStop()} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. ì´ ê¸°ê°„ 중ì—는 사용ìžê°€ 액티비티를 화면ì—서 ë³´ê³ ì´ì™€ +android.app.Activity#onStop onStop()} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. ì´ ê¸°ê°„ 중ì—는 사용ìžê°€ 액티비티를 화면ì—서 ë³´ê³ ì´ì™€ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 있습니다. 예컨대 {@link android.app.Activity#onStop onStop()}ì´ í˜¸ì¶œë˜ì–´ - 새 액티비티가 시작ë˜ë©´ ì´ ì•¡í‹°ë¹„í‹°ëŠ” ë” ì´ìƒ 표시ë˜ì§€ 않게 ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 메서드 중ì—서 + 새 액티비티가 시작ë˜ë©´ ì´ ì•¡í‹°ë¹„í‹°ëŠ” ë” ì´ìƒ 표시ë˜ì§€ 않게 ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 메서드 중ì—서 사용ìžì—게 액티비티를 표시하는 ë° í•„ìš”í•œ 리소스를 ìœ ì§€í•˜ë©´ ë©ë‹ˆë‹¤. 예를 들어, {@link android.app.Activity#onStart onStart()}ì—서 {@link android.content.BroadcastReceiver}를 등ë¡í•˜ê³ UIì— ì˜í–¥ì„ 미치는 변화를 모니터ë§í•˜ê³ -{@link android.app.Activity#onStop onStop()}ì—서 등ë¡ì„ í•´ì œí•˜ë©´ 사용ìžëŠ” ì—¬ëŸ¬ë¶„ì´ ë¬´ì—‡ì„ í‘œì‹œí•˜ê³ ìžˆëŠ”ì§€ ë” ì´ìƒ ë³¼ 수 +{@link android.app.Activity#onStop onStop()}ì—서 등ë¡ì„ í•´ì œí•˜ë©´ 사용ìžëŠ” ì—¬ëŸ¬ë¶„ì´ ë¬´ì—‡ì„ í‘œì‹œí•˜ê³ ìžˆëŠ”ì§€ ë” ì´ìƒ ë³¼ 수 없게 ë©ë‹ˆë‹¤. ì‹œìŠ¤í…œì€ ì•¡í‹°ë¹„í‹°ì˜ ì „ì²´ 수명 ë‚´ë‚´ {@link android.app.Activity#onStart onStart()} ë° {@link -android.app.Activity#onStop onStop()}ì„ ì—¬ëŸ¬ 번 í˜¸ì¶œí• ìˆ˜ 있으며, ì´ë•Œ +android.app.Activity#onStop onStop()}ì„ ì—¬ëŸ¬ 번 í˜¸ì¶œí• ìˆ˜ 있으며, ì´ë•Œ 액티비티는 사용ìžì—게 표시ë˜ì—ˆë‹¤ 숨겨지는 ìƒíƒœë¥¼ 오가게 ë©ë‹ˆë‹¤.</p></li> <li><p>ì•¡í‹°ë¹„í‹°ì˜ <b>ì „ê²½ 수명</b>ì€ {@link android.app.Activity#onResume onResume()} 호출ì—서 {@link android.app.Activity#onPause -onPause()} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. ì´ ê¸°ê°„ 중ì—는 ì´ ì•¡í‹°ë¹„í‹°ê°€ 화면ì—서 다른 ëª¨ë“ ì•¡í‹°ë¹„í‹° ì•žì— í‘œì‹œë˜ë©° ì‚¬ìš©ìž ìž…ë ¥ë„ +onPause()} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. ì´ ê¸°ê°„ 중ì—는 ì´ ì•¡í‹°ë¹„í‹°ê°€ 화면ì—서 다른 ëª¨ë“ ì•¡í‹°ë¹„í‹° ì•žì— í‘œì‹œë˜ë©° ì‚¬ìš©ìž ìž…ë ¥ë„ ì—¬ê¸°ì— ì§‘ì¤‘ë©ë‹ˆë‹¤. 액티비티는 ì „ê²½ì— ë‚˜íƒ€ë‚¬ë‹¤ 숨겨지는 ì „í™˜ì„ ìžì£¼ ë°˜ë³µí• ìˆ˜ 있습니다. 예를 들어 -, 기기가 ì ˆì „ ëª¨ë“œì— ë“¤ì–´ê°€ê±°ë‚˜ 대화 ìƒìžê°€ -나타나면 {@link android.app.Activity#onPause onPause()}ê°€ 호출ë©ë‹ˆë‹¤. ì´ ìƒíƒœëŠ” ìžì£¼ ì „í™˜ë 수 있으므로, ì´ ë‘ ê°€ì§€ ë©”ì„œë“œì˜ ì½”ë“œëŠ” +, 기기가 ì ˆì „ ëª¨ë“œì— ë“¤ì–´ê°€ê±°ë‚˜ 대화 ìƒìžê°€ +나타나면 {@link android.app.Activity#onPause onPause()}ê°€ 호출ë©ë‹ˆë‹¤. ì´ ìƒíƒœëŠ” ìžì£¼ ì „í™˜ë 수 있으므로, ì´ ë‘ ê°€ì§€ ë©”ì„œë“œì˜ ì½”ë“œëŠ” ìƒë‹¹ížˆ 가벼워야 합니다. 그래야 ì „í™˜ì´ ëŠë ¤ 사용ìžë¥¼ 기다리게 하는 ì¼ì„ í”¼í• ìˆ˜ 있습니다.</p></li> </ul> <p>그림 1ì€ ì•¡í‹°ë¹„í‹°ê°€ ìƒíƒœ 사ì´ì—서 ì·¨í• ìˆ˜ 있는 ì´ì™€ ê°™ì€ ë£¨í”„ì™€ 경로를 나타낸 것입니다. -ì§ì‚¬ê°í˜•ì´ ì•¡í‹°ë¹„í‹°ê°€ 여러 ìƒíƒœ 사ì´ë¥¼ ì „í™˜í• ë•Œ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ +ì§ì‚¬ê°í˜•ì´ ì•¡í‹°ë¹„í‹°ê°€ 여러 ìƒíƒœ 사ì´ë¥¼ ì „í™˜í• ë•Œ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ êµ¬í˜„í• ìˆ˜ 있는 콜백 메서드를 나타냅니다. <p> <img src="{@docRoot}images/activity_lifecycle.png" alt="" /> <p class="img-caption"><strong>그림 1.</strong> 액티비티 수명 주기입니다.</p> -<p>ê°™ì€ ìˆ˜ëª… 주기 콜백 메서드가 표 1ì— ë‚˜ì—´ë˜ì–´ 있으며, ì´ í‘œëŠ” ê° ì½œë°± -메서드를 ë”ìš± ìƒì„¸í•˜ê²Œ 설명하며 ì•¡í‹°ë¹„í‹°ì˜ ì „ë°˜ì ì¸ -수명 주기 ë‚´ì—서 ê° ë©”ì„œë“œì˜ ìœ„ì¹˜ë¥¼ ë‚˜íƒ€ë‚´ê¸°ë„ í•©ë‹ˆë‹¤. 여기ì—는 콜백 메서드가 ì™„ë£Œëœ ë‹¤ìŒ +<p>ê°™ì€ ìˆ˜ëª… 주기 콜백 메서드가 표 1ì— ë‚˜ì—´ë˜ì–´ 있으며, ì´ í‘œëŠ” ê° ì½œë°± +메서드를 ë”ìš± ìƒì„¸í•˜ê²Œ 설명하며 ì•¡í‹°ë¹„í‹°ì˜ ì „ë°˜ì ì¸ +수명 주기 ë‚´ì—서 ê° ë©”ì„œë“œì˜ ìœ„ì¹˜ë¥¼ ë‚˜íƒ€ë‚´ê¸°ë„ í•©ë‹ˆë‹¤. 여기ì—는 콜백 메서드가 ì™„ë£Œëœ ë‹¤ìŒ ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 중단시킬 수 있는지 ì—¬ë¶€ë„ í¬í•¨ë˜ì–´ 있습니다.</p> <p class="table-caption"><strong>표 1.</strong> 액티비티 수명 주기 @@ -474,9 +474,9 @@ onPause()} 호출 사ì´ë¥¼ ë§í•©ë‹ˆë‹¤. ì´ ê¸°ê°„ 중ì—는 ì´ ì•¡í‹°ë¹„í‹°ê <tr> <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td> <td>액티비티가 ì²˜ìŒ ìƒì„±ë˜ì—ˆì„ 때 호출ë©ë‹ˆë‹¤. - ì´ê³³ì—서 ì¼ë°˜ì ì¸ ì •ì ì„¤ì •ì„ ëª¨ë‘ ìˆ˜í–‰í•´ì•¼ 합니다. -즉 보기 ìƒì„±, 목ë¡ì— ë°ì´í„° ë°”ì¸ë”©í•˜ê¸° ë“±ì„ ë§í•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œì—는 -ì•¡í‹°ë¹„í‹°ì˜ ì´ì „ ìƒíƒœê°€ ìº¡ì²˜ëœ ê²½ìš° 해당 ìƒíƒœë¥¼ í¬í•¨í•œ + ì´ê³³ì—서 ì¼ë°˜ì ì¸ ì •ì ì„¤ì •ì„ ëª¨ë‘ ìˆ˜í–‰í•´ì•¼ 합니다. +즉 보기 ìƒì„±, 목ë¡ì— ë°ì´í„° ë°”ì¸ë”©í•˜ê¸° ë“±ì„ ë§í•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œì—는 +ì•¡í‹°ë¹„í‹°ì˜ ì´ì „ ìƒíƒœê°€ ìº¡ì²˜ëœ ê²½ìš° 해당 ìƒíƒœë¥¼ í¬í•¨í•œ 번들 개체가 ì „ë‹¬ë©ë‹ˆë‹¤(ì´ ë¬¸ì„œ ë‚˜ì¤‘ì— ë‚˜ì˜¤ëŠ” <a href="#actstate">액티비티 ìƒíƒœ ì €ìž¥í•˜ê¸°</a>를 참조하ì‹ì‹œì˜¤ ). <p>ì´ ë’¤ì—는 í•ìƒ {@code onStart()}ê°€ ë”°ë¼ì˜µë‹ˆë‹¤.</p></td> @@ -508,7 +508,7 @@ onRestart()}</code></td> <td rowspan="2" style="border-left: none;"> </td> <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td> <td>액티비티가 시작ë˜ê³ 사용ìžì™€ ìƒí˜¸ 작용하기 ì§ì „ì— -호출ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 액티비티는 액티비티 +호출ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 액티비티는 액티비티 스íƒì˜ 맨 ìœ„ì— ìžˆìœ¼ë©°, ì‚¬ìš©ìž ìž…ë ¥ì´ ìž…ë ¥ë˜ê³ 있습니다. <p>ì´ ë’¤ì—는 í•ìƒ {@code onPause()}ê°€ ë”°ë¼ì˜µë‹ˆë‹¤.</p></td> <td align="center">아니요</td> @@ -517,10 +517,10 @@ onRestart()}</code></td> <tr> <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td> - <td>ì‹œìŠ¤í…œì´ ë‹¤ë¥¸ 액티비티를 재개하기 ì§ì „ì— -호출ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” ì¼ë°˜ì 으로 ë°ì´í„°ë¥¼ ìœ ì§€í•˜ê¸° 위해 ì €ìž¥ë˜ì§€ ì•Šì€ ë³€ê²½ 사í•ì„ -커밋하는 ë°, ì• ë‹ˆë©”ì´ì…˜ì„ 비롯하여 CPU를 소모하는 기타 ìž‘ì—…ì„ ì¤‘ë‹¨í•˜ëŠ” 등 -여러 가지 ìš©ë„ì— ì‚¬ìš©ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 무슨 ì¼ì„ í•˜ë“ ë§¤ìš° 빨리 ë내야 합니다. + <td>ì‹œìŠ¤í…œì´ ë‹¤ë¥¸ 액티비티를 재개하기 ì§ì „ì— +호출ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” ì¼ë°˜ì 으로 ë°ì´í„°ë¥¼ ìœ ì§€í•˜ê¸° 위해 ì €ìž¥ë˜ì§€ ì•Šì€ ë³€ê²½ 사í•ì„ +커밋하는 ë°, ì• ë‹ˆë©”ì´ì…˜ì„ 비롯하여 CPU를 소모하는 기타 ìž‘ì—…ì„ ì¤‘ë‹¨í•˜ëŠ” 등 +여러 가지 ìš©ë„ì— ì‚¬ìš©ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 무슨 ì¼ì„ í•˜ë“ ë§¤ìš° 빨리 ë내야 합니다. ì´ê²ƒì´ 반환ë 때까지 ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ê°€ 재개ë˜ì§€ 않기 때문입니다. <p>액티비티가 다시 ì „ê²½ìœ¼ë¡œ ëŒì•„오면 {@code onResume()}ì´ ë’¤ì— ë”°ë¼ì˜¤ê³ 액티비티가 사용ìžì—게 ë³´ì´ì§€ 않게 ë˜ë©´{@code onStop()}ì´ ë’¤ì— ë”°ë¼ì˜µë‹ˆë‹¤. @@ -544,11 +544,11 @@ onRestart()}</code></td> <tr> <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy onDestroy()}</code></td> - <td>액티비티가 소멸ë˜ê¸° ì „ì— í˜¸ì¶œë©ë‹ˆë‹¤. ì´ê²ƒì´ 액티비티가 받는 -마지막 호출입니다. ì´ê²ƒì´ 호출ë 수 있는 경우는 액티비티가 + <td>액티비티가 소멸ë˜ê¸° ì „ì— í˜¸ì¶œë©ë‹ˆë‹¤. ì´ê²ƒì´ 액티비티가 받는 +마지막 호출입니다. ì´ê²ƒì´ 호출ë 수 있는 경우는 액티비티가 완료ë˜ëŠ” 중ì´ë¼ì„œ(누군가가 ì—¬ê¸°ì— <code>{@link android.app.Activity#finish - finish()}</code>를 호출해서)ì¼ ìˆ˜ë„ ìžˆê³ , ì‹œìŠ¤í…œì´ ê³µê°„ì„ ì ˆì•½í•˜ê¸° 위해 ì•¡í‹°ë¹„í‹°ì˜ ì´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì¼ì‹œì 으로 소멸시키는 -중ì´ê¸° ë•Œë¬¸ì¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ì™€ ê°™ì€ + finish()}</code>를 호출해서)ì¼ ìˆ˜ë„ ìžˆê³ , ì‹œìŠ¤í…œì´ ê³µê°„ì„ ì ˆì•½í•˜ê¸° 위해 ì•¡í‹°ë¹„í‹°ì˜ ì´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì¼ì‹œì 으로 소멸시키는 +중ì´ê¸° ë•Œë¬¸ì¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 시나리오는 <code>{@link android.app.Activity#isFinishing isFinishing()}</code> 메서드로 êµ¬ë¶„í• ìˆ˜ 있습니다.</td> <td align="center"><strong style="color:#800000">예</strong></td> @@ -558,49 +558,49 @@ onDestroy()}</code></td> </table> <p>"완료 후 중단 가능?"ì´ë¼ëŠ” ë ˆì´ë¸”ì´ ë¶™ì€ ì—´ì€ - ì‹œìŠ¤í…œì´ <em>메서드가 ë°˜í™˜ëœ í›„</em> 액티비티 ì½”ë“œì˜ ë‹¤ë¥¸ ì¤„ì„ ì‹¤í–‰í•˜ì§€ ì•Šê³ ë„ + ì‹œìŠ¤í…œì´ <em>메서드가 ë°˜í™˜ëœ í›„</em> 액티비티 ì½”ë“œì˜ ë‹¤ë¥¸ ì¤„ì„ ì‹¤í–‰í•˜ì§€ ì•Šê³ ë„ ì–¸ì œë“ ì´ ì•¡í‹°ë¹„í‹°ë¥¼ 호스팅하는 프로세스를 중단시킬 수 있는지 여부를 나타냅니다. ë‹¤ìŒ ì„¸ 가지 메서드가 "예"로 표시ë˜ì–´ 있습니다({@link android.app.Activity#onPause onPause()}, {@link android.app.Activity#onStop onStop()} ë° {@link android.app.Activity#onDestroy onDestroy()}). {@link android.app.Activity#onPause onPause()}ê°€ 세 가지 메서드 중ì—서 첫 번째ì´ë¯€ë¡œ, 액티비티가 ìƒì„±ë˜ë©´ {@link android.app.Activity#onPause onPause()}는 프로세스가 <em>지워지기 ì „ì—</em> -반드시 호출ë˜ëŠ” 마지막 메서드입니다. +반드시 호출ë˜ëŠ” 마지막 메서드입니다. ì‹œìŠ¤í…œì´ ë¹„ìƒ ì‹œì— ë©”ëª¨ë¦¬ë¥¼ 복구해야 í• ê²½ìš°, {@link android.app.Activity#onStop onStop()}와 {@link android.app.Activity#onDestroy onDestroy()}는 -호출ë˜ì§€ ì•Šì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, 중요한 ì˜êµ¬ì ë°ì´í„°(ì‚¬ìš©ìž íŽ¸ì§‘ 등)를 보관하기 위해 작성하는 경우ì—는 {@link android.app.Activity#onPause onPause()}를 사용해야 -합니다. 그러나, {@link android.app.Activity#onPause onPause()} ì¤‘ì— -ì–´ëŠ ì •ë³´ë¥¼ ìœ ì§€í•´ì•¼ í• ì§€ëŠ” 조심해서 ì„ íƒí•´ì•¼ 합니다. ì´ ë©”ì„œë“œì— ì°¨ë‹¨ ì ˆì°¨ê°€ 있으면 -ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ë¡œì˜ ì „í™˜ì„ ì°¨ë‹¨í•˜ê³ ì‚¬ìš©ìž ê²½í—˜ì„ ëŠë ¤ì§€ê²Œ í• ìˆ˜ 있기 +호출ë˜ì§€ ì•Šì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, 중요한 ì˜êµ¬ì ë°ì´í„°(ì‚¬ìš©ìž íŽ¸ì§‘ 등)를 보관하기 위해 작성하는 경우ì—는 {@link android.app.Activity#onPause onPause()}를 사용해야 +합니다. 그러나, {@link android.app.Activity#onPause onPause()} ì¤‘ì— +ì–´ëŠ ì •ë³´ë¥¼ ìœ ì§€í•´ì•¼ í• ì§€ëŠ” 조심해서 ì„ íƒí•´ì•¼ 합니다. ì´ ë©”ì„œë“œì— ì°¨ë‹¨ ì ˆì°¨ê°€ 있으면 +ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ë¡œì˜ ì „í™˜ì„ ì°¨ë‹¨í•˜ê³ ì‚¬ìš©ìž ê²½í—˜ì„ ëŠë ¤ì§€ê²Œ í• ìˆ˜ 있기 때문입니다.</p> -<p> <b>중단 가능한</b> ì—´ì— "아니요"로 í‘œì‹œëœ ë©”ì„œë“œëŠ” 액티비티를 호스팅하는 프로세스를 -보호하여 í˜¸ì¶œëœ ì¦‰ì‹œ 중단ë˜ì§€ 않ë„ë¡ ë°©ì§€í•©ë‹ˆë‹¤. ë”°ë¼ì„œ 액티비티는 -{@link android.app.Activity#onPause onPause()}ê°€ 반환ë˜ëŠ” 시기부터 -{@link android.app.Activity#onResume onResume()}ì´ í˜¸ì¶œë˜ëŠ” 시기 사ì´ì— 중단시킬 수 있습니다. 다시 중단시킬 수 있는 ìƒíƒœê°€ ë˜ë ¤ë©´ +<p> <b>중단 가능한</b> ì—´ì— "아니요"로 í‘œì‹œëœ ë©”ì„œë“œëŠ” 액티비티를 호스팅하는 프로세스를 +보호하여 í˜¸ì¶œëœ ì¦‰ì‹œ 중단ë˜ì§€ 않ë„ë¡ ë°©ì§€í•©ë‹ˆë‹¤. ë”°ë¼ì„œ 액티비티는 +{@link android.app.Activity#onPause onPause()}ê°€ 반환ë˜ëŠ” 시기부터 +{@link android.app.Activity#onResume onResume()}ì´ í˜¸ì¶œë˜ëŠ” 시기 사ì´ì— 중단시킬 수 있습니다. 다시 중단시킬 수 있는 ìƒíƒœê°€ ë˜ë ¤ë©´ {@link android.app.Activity#onPause onPause()}ê°€ 다시 호출ë˜ì–´ 반환ë˜ì–´ì•¼ 합니다. </p> -<p class="note"><strong>ì°¸ê³ :</strong> 표 1ì— ë‚˜íƒ€ë‚œ ì´ëŸ° ì •ì˜ì— -따르면 엄밀히 ë§í•´ "중단 가능한" ê²ƒì´ ì•„ë‹Œ 액티비티ë¼ë„ ì‹œìŠ¤í…œì´ ì¤‘ë‹¨ì‹œí‚¬ 수는 있습니다. 다만 ì´ê²ƒì€ 다른 리소스가 없는 -극단ì ì¸ ìƒí™©ì—서만 ë°œìƒí•©ë‹ˆë‹¤. 액티비티가 중단ë 수 있는 시기가 +<p class="note"><strong>ì°¸ê³ :</strong> 표 1ì— ë‚˜íƒ€ë‚œ ì´ëŸ° ì •ì˜ì— +따르면 엄밀히 ë§í•´ "중단 가능한" ê²ƒì´ ì•„ë‹Œ 액티비티ë¼ë„ ì‹œìŠ¤í…œì´ ì¤‘ë‹¨ì‹œí‚¬ 수는 있습니다. 다만 ì´ê²ƒì€ 다른 리소스가 없는 +극단ì ì¸ ìƒí™©ì—서만 ë°œìƒí•©ë‹ˆë‹¤. 액티비티가 중단ë 수 있는 시기가 ì–¸ì œì¸ì§€ëŠ” <a href="{@docRoot}guide/components/processes-and-threads.html">프로세스 ë° ìŠ¤ë ˆë”©</a> 문서ì—서 보다 ìžì„¸ížˆ ë…¼ì˜í•©ë‹ˆë‹¤.</p> <h3 id="SavingActivityState">액티비티 ìƒíƒœ ì €ìž¥í•˜ê¸°</h3> -<p><a href="#Lifecycle">액티비티 수명 주기 관리하기</a> ë„ìž…ë¶€ì—서는 액티비티가 -ì¼ì‹œì¤‘ì§€ë˜ê±°ë‚˜ -중단ë˜ì—ˆë”ë¼ë„ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœëŠ” 그대로 ìœ ì§€ëœë‹¤ê³ ìž ì‹œ 언급한 ë°” 있습니다. ì´ê²ƒì€ -{@link android.app.Activity} 개체가 ì¼ì‹œì¤‘ì§€ë˜ê±°ë‚˜ ì¤‘ë‹¨ëœ ê²½ìš°ì—ë„ -메모리 ì•ˆì— ê·¸ëŒ€ë¡œ ë³´ê´€ë˜ì—ˆê¸° ë•Œë¬¸ì— ê°€ëŠ¥í•©ë‹ˆë‹¤. 즉 ì´ ì•¡í‹°ë¹„í‹°ì˜ êµ¬ì„±ì›ê³¼ 현재 ìƒíƒœì— 대한 ëª¨ë“ ì •ë³´ê°€ ì•„ì§ ì‚´ì•„ 있다는 뜻입니다. ë”°ë¼ì„œ, 사용ìžê°€ -액티비티 ë‚´ì—서 변경한 ëª¨ë“ ë‚´ìš©ë„ ê·¸ëŒ€ë¡œ ìœ ì§€ë˜ì–´ 액티비티가 ì „ê²½ìœ¼ë¡œ +<p><a href="#Lifecycle">액티비티 수명 주기 관리하기</a> ë„ìž…ë¶€ì—서는 액티비티가 +ì¼ì‹œì¤‘ì§€ë˜ê±°ë‚˜ +중단ë˜ì—ˆë”ë¼ë„ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœëŠ” 그대로 ìœ ì§€ëœë‹¤ê³ ìž ì‹œ 언급한 ë°” 있습니다. ì´ê²ƒì€ +{@link android.app.Activity} 개체가 ì¼ì‹œì¤‘ì§€ë˜ê±°ë‚˜ ì¤‘ë‹¨ëœ ê²½ìš°ì—ë„ +메모리 ì•ˆì— ê·¸ëŒ€ë¡œ ë³´ê´€ë˜ì—ˆê¸° ë•Œë¬¸ì— ê°€ëŠ¥í•©ë‹ˆë‹¤. 즉 ì´ ì•¡í‹°ë¹„í‹°ì˜ êµ¬ì„±ì›ê³¼ 현재 ìƒíƒœì— 대한 ëª¨ë“ ì •ë³´ê°€ ì•„ì§ ì‚´ì•„ 있다는 뜻입니다. ë”°ë¼ì„œ, 사용ìžê°€ +액티비티 ë‚´ì—서 변경한 ëª¨ë“ ë‚´ìš©ë„ ê·¸ëŒ€ë¡œ ìœ ì§€ë˜ì–´ 액티비티가 ì „ê²½ìœ¼ë¡œ ëŒì•„ê°ˆ 때("재개"ë 때) 그와 ê°™ì€ ë³€ê²½ 사í•ë„ ê·¸ëŒ€ë¡œ 존재하게 ë©ë‹ˆë‹¤.</p> <p>그러나 ì‹œìŠ¤í…œì´ ë©”ëª¨ë¦¬ë¥¼ 복구하기 위해 액티비티를 소멸시키는 경우ì—는 {@link -android.app.Activity} 개체가 소멸ë˜ë¯€ë¡œ ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ ì˜¨ì „ížˆ ìœ ì§€í•œ 채로 간단하게 ìž¬ê°œí• ìˆ˜ 없게 -ë©ë‹ˆë‹¤. ëŒ€ì‹ , 사용ìžê°€ 다시 ì´ ì•¡í‹°ë¹„í‹°ë¡œ ì´ë™í•´ 오면 ì‹œìŠ¤í…œì´ {@link android.app.Activity} 개체를 -다시 ìƒì„±í•´ì•¼ 합니다. 하지만, 사용ìžëŠ” ì‹œìŠ¤í…œì´ -해당 액티비티를 소멸시켰다가 다시 ìƒì„±í–ˆë‹¤ëŠ” ê²ƒì„ ëª¨ë¦…ë‹ˆë‹¤. +android.app.Activity} 개체가 소멸ë˜ë¯€ë¡œ ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ ì˜¨ì „ížˆ ìœ ì§€í•œ 채로 간단하게 ìž¬ê°œí• ìˆ˜ 없게 +ë©ë‹ˆë‹¤. ëŒ€ì‹ , 사용ìžê°€ 다시 ì´ ì•¡í‹°ë¹„í‹°ë¡œ ì´ë™í•´ 오면 ì‹œìŠ¤í…œì´ {@link android.app.Activity} 개체를 +다시 ìƒì„±í•´ì•¼ 합니다. 하지만, 사용ìžëŠ” ì‹œìŠ¤í…œì´ +해당 액티비티를 소멸시켰다가 다시 ìƒì„±í–ˆë‹¤ëŠ” ê²ƒì„ ëª¨ë¦…ë‹ˆë‹¤. ë”°ë¼ì„œ 액티비티가 ì˜ˆì „ê³¼ ë˜‘ê°™ì„ ê²ƒì´ë¼ê³ 예ìƒí• 것입니다. ì´ëŸ° ìƒí™©ì—서는 액티비티 ìƒíƒœì— 관한 ì •ë³´ë¥¼ ì €ìž¥í• ìˆ˜ 있는 추가 콜백 메서드 {@link @@ -617,19 +617,19 @@ android.os.Bundle#putInt putInt()} ê°™ì€ ë©”ì„œë“œë¥¼ 사용하여, ì´ ë©”ì„œë android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}ì—게 ì „ë‹¬í•©ë‹ˆë‹¤. ì´ë“¤ 메서드 중 하나를 사용하여 {@link android.os.Bundle}ì—서 ì €ìž¥ëœ ìƒíƒœë¥¼ ì¶”ì¶œí•˜ê³ ì•¡í‹°ë¹„í‹° ìƒíƒœ 를 ë³µì›í• 수 있습니다. ë³µêµ¬í• ìƒíƒœ ì •ë³´ê°€ 없는 경우, 여러분ì—게 ì „ë‹¬ë˜ëŠ” {@link -android.os.Bundle}ì€ null입니다(액티비티가 ì²˜ìŒ ìƒì„±ë˜ì—ˆì„ 때 ì´ëŸ° 경우가 +android.os.Bundle}ì€ null입니다(액티비티가 ì²˜ìŒ ìƒì„±ë˜ì—ˆì„ 때 ì´ëŸ° 경우가 ë°œìƒí•©ë‹ˆë‹¤).</p> <img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" /> -<p class="img-caption"><strong>그림 2.</strong> ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœê°€ ì˜¨ì „í•œ 채로 사용ìžì˜ -ì´ˆì ì— ë‹¤ì‹œ ëŒì•„오는 ë°ì—는 ë‘ ê°€ì§€ ë°©ì‹ì´ 있습니다. 하나는 액티비티가 소멸ë˜ì—ˆë‹¤ê°€ 다시 ìƒì„±ë˜ì–´ 액티비티가 -ì´ì „ì— ì €ìž¥ëœ ìƒíƒœë¥¼ 복구해야 하는 경우, 다른 하나는 액티비티가 중단ë˜ì—ˆë‹¤ê°€ 재개ë˜ì—ˆìœ¼ë©° +<p class="img-caption"><strong>그림 2.</strong> ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœê°€ ì˜¨ì „í•œ 채로 사용ìžì˜ +ì´ˆì ì— ë‹¤ì‹œ ëŒì•„오는 ë°ì—는 ë‘ ê°€ì§€ ë°©ì‹ì´ 있습니다. 하나는 액티비티가 소멸ë˜ì—ˆë‹¤ê°€ 다시 ìƒì„±ë˜ì–´ 액티비티가 +ì´ì „ì— ì €ìž¥ëœ ìƒíƒœë¥¼ 복구해야 하는 경우, 다른 하나는 액티비티가 중단ë˜ì—ˆë‹¤ê°€ 재개ë˜ì—ˆìœ¼ë©° 액티비티 ìƒíƒœê°€ ì˜¨ì „ížˆ ìœ ì§€ëœ ê²½ìš°ìž…ë‹ˆë‹¤.</p> <p class="note"><strong>ì°¸ê³ :</strong> ìƒíƒœë¥¼ ì €ìž¥í• í•„ìš”ê°€ 없는 ê²½ìš°ë„ ìžˆìœ¼ë¯€ë¡œ 액티비티가 소멸ë˜ê¸° ì „ì— {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}ê°€ 호출ëœë‹¤ëŠ” ë³´ìž¥ì€ ì—†ìŠµë‹ˆë‹¤ -(예컨대 사용ìžê°€ +(예컨대 사용ìžê°€ 명시ì 으로 액티비티를 닫기 위해 <em>뒤로</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ì„œ 액티비티를 ë– ë‚ ë•Œê°€ ì´ì— 해당합니다). ì‹œìŠ¤í…œì´ {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}를 호출하는 경우, {@link @@ -642,9 +642,9 @@ android.app.Activity#onSaveInstanceState onSaveInstanceState()}를 구현하지 android.app.Activity#onSaveInstanceState onSaveInstanceState()}ê°€ ì¼ë¶€ 액티비티 ìƒíƒœë¥¼ 복구합니다. 특히, 기본 êµ¬í˜„ì€ ë ˆì´ì•„웃ì—서 {@link android.view.View}ê°€ 나올 때마다 해당하는 {@link -android.view.View#onSaveInstanceState onSaveInstanceState()} 메서드를 í˜¸ì¶œí•˜ê³ , ì´ ë•Œë¬¸ì— ê° ë³´ê¸°ê°€ ì €ìž¥í•´ì•¼ 하는 ìžì²´ ê´€ë ¨ ì •ë³´ë¥¼ ì œê³µí• ìˆ˜ -있게 í•´ì¤ë‹ˆë‹¤. Android í”„ë ˆìž„ì›Œí¬ë¥¼ 사용하는 ìœ„ì ¯ì€ ê±°ì˜ ëŒ€ë¶€ë¶„ ì´ ë©”ì„œë“œë¥¼ -í•„ìš”ì— ë”°ë¼ êµ¬í˜„í•˜ë¯€ë¡œ, UIì— ëˆˆì— ë³´ì´ëŠ” ë³€ê²½ì´ ìžˆìœ¼ë©´ ëª¨ë‘ ìžë™ìœ¼ë¡œ ì €ìž¥ë˜ë©° 액티비티를 다시 +android.view.View#onSaveInstanceState onSaveInstanceState()} 메서드를 í˜¸ì¶œí•˜ê³ , ì´ ë•Œë¬¸ì— ê° ë³´ê¸°ê°€ ì €ìž¥í•´ì•¼ 하는 ìžì²´ ê´€ë ¨ ì •ë³´ë¥¼ ì œê³µí• ìˆ˜ +있게 í•´ì¤ë‹ˆë‹¤. Android í”„ë ˆìž„ì›Œí¬ë¥¼ 사용하는 ìœ„ì ¯ì€ ê±°ì˜ ëŒ€ë¶€ë¶„ ì´ ë©”ì„œë“œë¥¼ +í•„ìš”ì— ë”°ë¼ êµ¬í˜„í•˜ë¯€ë¡œ, UIì— ëˆˆì— ë³´ì´ëŠ” ë³€ê²½ì´ ìžˆìœ¼ë©´ ëª¨ë‘ ìžë™ìœ¼ë¡œ ì €ìž¥ë˜ë©° 액티비티를 다시 ìƒì„±í•˜ë©´ 복구ë©ë‹ˆë‹¤. 예를 들어, {@link android.widget.EditText} ìœ„ì ¯ì€ ì‚¬ìš©ìžê°€ ìž…ë ¥í•œ ëª¨ë“ í…스트 를 ì €ìž¥í•˜ê³ {@link android.widget.CheckBox} ìœ„ì ¯ì€ í™•ì¸ ì—¬ë¶€ë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. ì—¬ëŸ¬ë¶„ì´ í•´ì•¼ í• ìœ ì¼í•œ ìž‘ì—…ì€ ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ìž í•˜ëŠ” ê° ìœ„ì ¯ì— ê³ ìœ ID(<a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a> @@ -653,9 +653,9 @@ android.view.View#onSaveInstanceState onSaveInstanceState()} 메서드를 호출 <div class="sidebox-wrapper"> <div class="sidebox"> -<p>ë˜í•œ, -{@link android.R.attr#saveEnabled android:saveEnabled} ì†ì„±ì„ {@code "false"}로 ì„¤ì •í•˜ê±°ë‚˜ -{@link android.view.View#setSaveEnabled setSaveEnabled()} 메서드를 호출해서 ë ˆì´ì•„ì›ƒì˜ ë³´ê¸°ê°€ ìƒíƒœë¥¼ ì €ìž¥í•˜ì§€ 못하ë„ë¡ ëª…ì‹œì 으로 ë§‰ì„ ìˆ˜ 있습니다. ë³´í†µì€ ì´ê²ƒì„ 비활성화해서는 +<p>ë˜í•œ, +{@link android.R.attr#saveEnabled android:saveEnabled} ì†ì„±ì„ {@code "false"}로 ì„¤ì •í•˜ê±°ë‚˜ +{@link android.view.View#setSaveEnabled setSaveEnabled()} 메서드를 호출해서 ë ˆì´ì•„ì›ƒì˜ ë³´ê¸°ê°€ ìƒíƒœë¥¼ ì €ìž¥í•˜ì§€ 못하ë„ë¡ ëª…ì‹œì 으로 ë§‰ì„ ìˆ˜ 있습니다. ë³´í†µì€ ì´ê²ƒì„ 비활성화해서는 안 ë˜ì§€ë§Œ, 액티비티 UIì˜ ìƒíƒœë¥¼ 다르게 ë³µêµ¬í•˜ê³ ìž í•˜ëŠ” 경우 ê·¸ë ‡ê²Œ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> </div> </div> @@ -668,25 +668,25 @@ UIì—서 ë³µêµ¬ëœ ê°’ê³¼ ìƒê´€ê´€ê³„ê°€ ìžˆì„ ìˆ˜ 있지만 ì´ëŸ° UI ê°’ì„ ).</p> <p>{@link -android.app.Activity#onSaveInstanceState onSaveInstanceState()}ì˜ ê¸°ë³¸ êµ¬í˜„ì´ UI ìƒíƒœë¥¼ ì €ìž¥í•˜ëŠ” ë° ë„ì›€ì´ ë˜ê¸° 때문ì—, -추가 ìƒíƒœ ì •ë³´ë¥¼ ì €ìž¥í•˜ê¸° 위해 ì´ ë©”ì„œë“œë¥¼ ìž¬ì •ì˜í•˜ë ¤ë©´ +android.app.Activity#onSaveInstanceState onSaveInstanceState()}ì˜ ê¸°ë³¸ êµ¬í˜„ì´ UI ìƒíƒœë¥¼ ì €ìž¥í•˜ëŠ” ë° ë„ì›€ì´ ë˜ê¸° 때문ì—, +추가 ìƒíƒœ ì •ë³´ë¥¼ ì €ìž¥í•˜ê¸° 위해 ì´ ë©”ì„œë“œë¥¼ ìž¬ì •ì˜í•˜ë ¤ë©´ ìž‘ì—…ì„ í•˜ê¸° ì „ì— í•ìƒ{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}ì˜ ìŠˆí¼í´ëž˜ìФ 구현 ì„ í˜¸ì¶œí•´ì•¼ 합니다. ì´ì™€ 마찬가지로 {@link -android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 ìž¬ì •ì˜í•˜ëŠ” 경우, ì´ê²ƒì˜ 슈í¼í´ëž˜ìФ êµ¬í˜„ì„ í˜¸ì¶œí•´ì•¼ í•˜ê¸°ë„ í•©ë‹ˆë‹¤. +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 ìž¬ì •ì˜í•˜ëŠ” 경우, ì´ê²ƒì˜ 슈í¼í´ëž˜ìФ êµ¬í˜„ì„ í˜¸ì¶œí•´ì•¼ í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 해야 기본 êµ¬í˜„ì´ ë³´ê¸° ìƒíƒœë¥¼ ë³µêµ¬í• ìˆ˜ 있습니다.</p> <p class="note"><strong>ì°¸ê³ :</strong> {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}ì˜ í˜¸ì¶œì´ ë³´ìž¥ë˜ì§€ 않으므로 ì´ê²ƒì€ ì•¡í‹°ë¹„í‹°ì˜ ì¼ì‹œì ìƒíƒœ(UIì˜ ìƒíƒœ -)를 기ë¡í•˜ëŠ” ë°ì—ë§Œ ì‚¬ìš©í•˜ê³ , ì˜êµ¬ ë°ì´í„°ë¥¼ 보관하는 ë° ì‚¬ìš©í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , 사용ìžê°€ 액티비티를 ë– ë‚ ë•Œ ì˜êµ¬ì ì¸ ë°ì´í„°(ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ë˜ì–´ì•¼ +)를 기ë¡í•˜ëŠ” ë°ì—ë§Œ ì‚¬ìš©í•˜ê³ , ì˜êµ¬ ë°ì´í„°ë¥¼ 보관하는 ë° ì‚¬ìš©í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , 사용ìžê°€ 액티비티를 ë– ë‚ ë•Œ ì˜êµ¬ì ì¸ ë°ì´í„°(ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ë˜ì–´ì•¼ 하는 ë°ì´í„° 등)를 ì €ìž¥í•˜ë ¤ë©´ {@link android.app.Activity#onPause onPause()}를 사용해야 합니다.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìƒíƒœ ì €ìž¥ ê¸°ëŠ¥ì„ ì‹œí—˜í•˜ëŠ” ì¢‹ì€ ë°©ë²•ì€ ê¸°ê¸°ë¥¼ íšŒì „í•´ë³´ê³ í™”ë©´ ë°©í–¥ì´ -바뀌는지 확ì¸í•˜ëŠ” 것입니다. 화면 ë°©í–¥ì´ ë°”ë€Œë©´ ì‹œìŠ¤í…œì€ ì•¡í‹°ë¹„í‹°ë¥¼ -소멸시켰다가 다시 ìƒì„±í•˜ì—¬ 새 화면 구성ì—서 ì´ìš©í• 수 있ì„ì§€ 모르는 대체 -리소스를 ì 용합니다. ì´ ì´ìœ í•˜ë‚˜ë§Œìœ¼ë¡œë„ ì•¡í‹°ë¹„í‹°ê°€ 다시 ìƒì„±ë˜ì—ˆì„ 때 ìƒíƒœë¥¼ -ì™„ì „ížˆ ë³µêµ¬í• ìˆ˜ 있어야 한다는 ì ì´ ëŒ€ë‹¨ížˆ 중요합니다. 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 사용하면서 í™”ë©´ì„ +바뀌는지 확ì¸í•˜ëŠ” 것입니다. 화면 ë°©í–¥ì´ ë°”ë€Œë©´ ì‹œìŠ¤í…œì€ ì•¡í‹°ë¹„í‹°ë¥¼ +소멸시켰다가 다시 ìƒì„±í•˜ì—¬ 새 화면 구성ì—서 ì´ìš©í• 수 있ì„ì§€ 모르는 대체 +리소스를 ì 용합니다. ì´ ì´ìœ í•˜ë‚˜ë§Œìœ¼ë¡œë„ ì•¡í‹°ë¹„í‹°ê°€ 다시 ìƒì„±ë˜ì—ˆì„ 때 ìƒíƒœë¥¼ +ì™„ì „ížˆ ë³µêµ¬í• ìˆ˜ 있어야 한다는 ì ì´ ëŒ€ë‹¨ížˆ 중요합니다. 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 사용하면서 í™”ë©´ì„ ìžì£¼ ëŒë¦¬ê¸° 때문입니다.</p> @@ -700,8 +700,8 @@ android.app.Activity#onCreate onCreate()}를 호출합니다). ì´ëŸ° ë™ìž‘ì€ ì„¤ê³„ë˜ì—ˆìŠµë‹ˆë‹¤ (예: 다양한 화면 방향과 í¬ê¸°ì— 대한 다양한 ë ˆì´ì•„웃).</p> -<p>액티비티를 ì ì ˆížˆ 설계하여 화면 ë°©í–¥ 변경으로 ì¸í•œ ìž¬ì‹œìž‘ì„ ê°ë‹¹í• 수 있으며 -ìœ„ì— ì„¤ëª…í•œ 것처럼 액티비티 ìƒíƒœë¥¼ ë³µêµ¬í• ìˆ˜ 있ë„ë¡ í•˜ë©´, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 액티비티 수명 주기ì—서 +<p>액티비티를 ì ì ˆížˆ 설계하여 화면 ë°©í–¥ 변경으로 ì¸í•œ ìž¬ì‹œìž‘ì„ ê°ë‹¹í• 수 있으며 +ìœ„ì— ì„¤ëª…í•œ 것처럼 액티비티 ìƒíƒœë¥¼ ë³µêµ¬í• ìˆ˜ 있ë„ë¡ í•˜ë©´, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 액티비티 수명 주기ì—서 예기치 못한 ì´ë²¤íŠ¸ê°€ ì¼ì–´ë‚˜ë„ ë”ìš± íƒ„ë ¥ì 으로 복구ë 수 있습니다.</p> <p>ì´ëŸ¬í•œ ìž¬ì‹œìž‘ì„ ì²˜ë¦¬í•˜ëŠ” 가장 ì¢‹ì€ ë°©ë²•ì€ ì´ì „ 섹션ì—서 ë…¼ì˜í•œ 바와 ê°™ì´ @@ -710,22 +710,22 @@ android.app.Activity#onCreate onCreate()}를 호출합니다). ì´ëŸ° ë™ìž‘ì€ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}(ë˜ëŠ” {@link android.app.Activity#onCreate onCreate()})를 사용하여 액티비티 ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ë³µêµ¬í•˜ëŠ” 것입니다.</p> -<p>ëŸ°íƒ€ìž„ì— ë°œìƒí•˜ëŠ” 구성 변경과 ê·¸ 처리 ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” -<a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 +<p>ëŸ°íƒ€ìž„ì— ë°œìƒí•˜ëŠ” 구성 변경과 ê·¸ 처리 ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +<a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리하기</a>ì— ëŒ€í•œ ê°€ì´ë“œë¥¼ ì½ì–´ë³´ì‹ì‹œì˜¤.</p> <h3 id="CoordinatingActivities">액티비티 ì¡°ì •í•˜ê¸°</h3> - <p>한 액티비티가 다른 액티비티를 시작하면, 둘 ëª¨ë‘ ìˆ˜ëª… 주기 ì „í™˜ì„ ê²ªìŠµë‹ˆë‹¤. 첫 번째 액티비티는 -ì¼ì‹œì¤‘ì§€í•˜ê³ ì¤‘ë‹¨ë˜ëŠ” 반면(ë°°ê²½ì—서 ê³„ì† ë³´ì´ëŠ” 경우ì—는 중단ë˜ì§€ 않습니다만), 다른 액티비티는 -ìƒì„±ë˜ëŠ” 것입니다. ì´ì™€ ê°™ì€ ì•¡í‹°ë¹„í‹°ê°€ ë””ìŠ¤í¬ ë˜ëŠ” 다른 ì†ì— ì €ìž¥ëœ ë°ì´í„°ë¥¼ ê³µìœ í•˜ëŠ” 경우, -첫 번째 액티비티는 ë‘ ë²ˆì§¸ 액티비티가 ìƒì„±ë˜ê¸° ì „ì— ì™„ì „ížˆ 중단ë˜ì§€ 않는다는 ì ì„ ì´í•´í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. + <p>한 액티비티가 다른 액티비티를 시작하면, 둘 ëª¨ë‘ ìˆ˜ëª… 주기 ì „í™˜ì„ ê²ªìŠµë‹ˆë‹¤. 첫 번째 액티비티는 +ì¼ì‹œì¤‘ì§€í•˜ê³ ì¤‘ë‹¨ë˜ëŠ” 반면(ë°°ê²½ì—서 ê³„ì† ë³´ì´ëŠ” 경우ì—는 중단ë˜ì§€ 않습니다만), 다른 액티비티는 +ìƒì„±ë˜ëŠ” 것입니다. ì´ì™€ ê°™ì€ ì•¡í‹°ë¹„í‹°ê°€ ë””ìŠ¤í¬ ë˜ëŠ” 다른 ì†ì— ì €ìž¥ëœ ë°ì´í„°ë¥¼ ê³µìœ í•˜ëŠ” 경우, +첫 번째 액티비티는 ë‘ ë²ˆì§¸ 액티비티가 ìƒì„±ë˜ê¸° ì „ì— ì™„ì „ížˆ 중단ë˜ì§€ 않는다는 ì ì„ ì´í•´í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. ê·¸ë ‡ë‹¤ê¸°ë³´ë‹¤ëŠ”, ë‘ ë²ˆì§¸ ì•¡í‹°ë¹„í‹°ì˜ ì‹œìž‘ ê³¼ì •ì´ ì²« 번째 액티비티 중단 ê³¼ì •ê³¼ ê²¹ì³ ì¼ì–´ë‚©ë‹ˆë‹¤. </p> -<p>수명 주기 ì½œë°±ì€ ë¶„ëª…ížˆ ì •ì˜ëœ 순서가 있으며 특히 ë‘ ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ +<p>수명 주기 ì½œë°±ì€ ë¶„ëª…ížˆ ì •ì˜ëœ 순서가 있으며 특히 ë‘ ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ ê°™ì€ í”„ë¡œì„¸ìŠ¤ ì•ˆì— ìžˆìœ¼ë©´ì„œ 하나가 다른 하나를 시작하는 경우 순서가 ë”ìš± 확실합니다. 다ìŒì€ 액티비티 Aê°€ 액티비티 B를 ì‹œìž‘í• ë•Œ ë°œìƒí•˜ëŠ” 작업 순서입니다. </p> @@ -741,8 +741,8 @@ android.app.Activity#onStop onStop()} 메서드가 실행ë©ë‹ˆë‹¤.</li> </ol> <p>ì´ì²˜ëŸ¼ 수명 주기 ì½œë°±ì˜ ìˆœì„œë¥¼ ì˜ˆì¸¡í• ìˆ˜ 있기 ë•Œë¬¸ì— í•œ 액티비티ì—서 다른 액티비티로 ì „í™˜ë˜ëŠ” - ì •ë³´ë¥¼ ê´€ë¦¬í• ìˆ˜ 있습니다. 예를 들어 첫 번째 액티비티가 중단ë 때 ë°ì´í„°ë² ì´ìŠ¤ì— -ë‚´ìš©ì„ ìž‘ì„±í•´ì„œ ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ê°€ ê·¸ ë‚´ìš©ì„ ì½ì„ 수 있ë„ë¡ í•˜ë ¤ë©´, ë°ì´í„°ë² ì´ìФì—는 + ì •ë³´ë¥¼ ê´€ë¦¬í• ìˆ˜ 있습니다. 예를 들어 첫 번째 액티비티가 중단ë 때 ë°ì´í„°ë² ì´ìŠ¤ì— +ë‚´ìš©ì„ ìž‘ì„±í•´ì„œ ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ê°€ ê·¸ ë‚´ìš©ì„ ì½ì„ 수 있ë„ë¡ í•˜ë ¤ë©´, ë°ì´í„°ë² ì´ìФì—는 {@link android.app.Activity#onPause onPause()} 중ì—({@link android.app.Activity#onStop onStop()} ì¤‘ì´ ì•„ë‹ˆë¼) 쓰기 ìž‘ì—…ì„ í•´ì•¼ 합니다.</p> diff --git a/docs/html-intl/intl/ko/guide/components/bound-services.jd b/docs/html-intl/intl/ko/guide/components/bound-services.jd index bf97b260a7da..276ff24111bb 100644 --- a/docs/html-intl/intl/ko/guide/components/bound-services.jd +++ b/docs/html-intl/intl/ko/guide/components/bound-services.jd @@ -41,22 +41,22 @@ parent.link=services.html </div> -<p>ë°”ì¸ë”©ëœ 서비스란 í´ë¼ì´ì–¸íЏ 서버 ì¸í„°íŽ˜ì´ìФ ì•ˆì˜ ì„œë²„ë¥¼ ë§í•©ë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스를 사용하면 구성 요소(í™œë™ ë“±)를 -ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ê²Œ 하거나, ìš”ì²ì„ ë³´ë‚´ê³ ì‘ë‹µì„ ìˆ˜ì‹ í•˜ë©° 심지어는 +<p>ë°”ì¸ë”©ëœ 서비스란 í´ë¼ì´ì–¸íЏ 서버 ì¸í„°íŽ˜ì´ìФ ì•ˆì˜ ì„œë²„ë¥¼ ë§í•©ë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스를 사용하면 구성 요소(í™œë™ ë“±)를 +ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ê²Œ 하거나, ìš”ì²ì„ ë³´ë‚´ê³ ì‘ë‹µì„ ìˆ˜ì‹ í•˜ë©° 심지어는 프로세스간 í†µì‹ (IPC)까지 ìˆ˜í–‰í• ìˆ˜ 있게 ë©ë‹ˆë‹¤. ì¼ë°˜ì 으로 ë°”ì¸ë”©ëœ 서비스는 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소를 ë„울 때까지만 ì‚´ê³ ë°°ê²½ì—서 무한히 실행ë˜ì§€ 않습니다.</p> <p>ì´ ë¬¸ì„œëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 ìš”ì†Œì˜ -ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ë°©ë²•ì„ í¬í•¨í•˜ì—¬ ë°”ì¸ë”©ëœ 서비스를 만드는 ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 하지만 ì¼ë°˜ì ì¸ ì„œë¹„ìŠ¤ì— ê´€í•œ ì •ë³´ë„ ì•Œì•„ë‘는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. -서비스ì—서 ì•Œë¦¼ì„ ì „ë‹¬í•˜ëŠ” 방법ì´ë‚˜ 서비스를 ì „ê²½ì—서 실행ë˜ë„ë¡ ì„¤ì •í•˜ëŠ” 방법 등 여러 가지 +ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ë°©ë²•ì„ í¬í•¨í•˜ì—¬ ë°”ì¸ë”©ëœ 서비스를 만드는 ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 하지만 ì¼ë°˜ì ì¸ ì„œë¹„ìŠ¤ì— ê´€í•œ ì •ë³´ë„ ì•Œì•„ë‘는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. +서비스ì—서 ì•Œë¦¼ì„ ì „ë‹¬í•˜ëŠ” 방법ì´ë‚˜ 서비스를 ì „ê²½ì—서 실행ë˜ë„ë¡ ì„¤ì •í•˜ëŠ” 방법 등 여러 가지 추가 ì •ë³´ë¥¼ ì•Œì•„ë³´ë ¤ë©´ <a href="{@docRoot}guide/components/services.html">서비스</a> 문서를 참조하ì‹ì‹œì˜¤.</p> <h2 id="Basics">기본 ì •ë³´</h2> -<p>ë°”ì¸ë”©ëœ 서비스란 ì¼ì¢…ì˜ {@link android.app.Service} í´ëž˜ìФ 구현으로, -ì´ë¥¼ 통해 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ì—¬ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” 것입니다. 한 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ë°”ì¸ë”©ì„ ì œê³µí•˜ë ¤ë©´, -{@link android.app.Service#onBind onBind()} 콜백 메서드를 구현해야 합니다. +<p>ë°”ì¸ë”©ëœ 서비스란 ì¼ì¢…ì˜ {@link android.app.Service} í´ëž˜ìФ 구현으로, +ì´ë¥¼ 통해 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ì—¬ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” 것입니다. 한 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ë°”ì¸ë”©ì„ ì œê³µí•˜ë ¤ë©´, +{@link android.app.Service#onBind onBind()} 콜백 메서드를 구현해야 합니다. ì´ ë©”ì„œë“œëŠ” í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 ìƒí˜¸ 작용하는 ë° ì‚¬ìš©í•˜ëŠ” í”„ë¡œê·¸ëž˜ë° ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” {@link android.os.IBinder} 개체를 반환합니다.</p> @@ -65,24 +65,24 @@ parent.link=services.html <h3>ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©</h3> <p><a href="{@docRoot}guide/components/services.html">서비스</a> -문서ì—서 ë…¼ì˜ëœ 바와 ê°™ì´, 시작ë˜ì—ˆìœ¼ë©´ì„œë„ ë°”ì¸ë”©ëœ 서비스를 만들 수 있습니다. 다시 ë§í•´, -{@link android.content.Context#startService startService()}를 호출하여 서비스를 ì‹œìž‘í• ìˆ˜ 있으며 +문서ì—서 ë…¼ì˜ëœ 바와 ê°™ì´, 시작ë˜ì—ˆìœ¼ë©´ì„œë„ ë°”ì¸ë”©ëœ 서비스를 만들 수 있습니다. 다시 ë§í•´, +{@link android.content.Context#startService startService()}를 호출하여 서비스를 ì‹œìž‘í• ìˆ˜ 있으며 ì´ë¥¼ 통해 서비스가 무한히 실행ë˜ë„ë¡ í• ìˆ˜ 있으며, {@link android.content.Context#bindService bindService()}를 호출하면 í´ë¼ì´ì–¸íŠ¸ê°€ 해당 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ë„ë¡ í• ìˆ˜ 있다는 것입니다. - <p>서비스를 시작ë˜ê³ ë°”ì¸ë”©ë˜ë„ë¡ í—ˆìš©í•œ ë‹¤ìŒ ì„œë¹„ìŠ¤ê°€ 시작ë˜ë©´ -ì‹œìŠ¤í…œì€ í´ë¼ì´ì–¸íŠ¸ê°€ ëª¨ë‘ ë°”ì¸ë”©ì„ í•´ì œí•´ë„ ì„œë¹„ìŠ¤ë¥¼ 소멸시키지 <em>않습니다</em>. ëŒ€ì‹ , + <p>서비스를 시작ë˜ê³ ë°”ì¸ë”©ë˜ë„ë¡ í—ˆìš©í•œ ë‹¤ìŒ ì„œë¹„ìŠ¤ê°€ 시작ë˜ë©´ +ì‹œìŠ¤í…œì€ í´ë¼ì´ì–¸íŠ¸ê°€ ëª¨ë‘ ë°”ì¸ë”©ì„ í•´ì œí•´ë„ ì„œë¹„ìŠ¤ë¥¼ 소멸시키지 <em>않습니다</em>. ëŒ€ì‹ , ì§ì ‘ 서비스를 확실히 중단시켜야 합니다. ê·¸ëŸ¬ë ¤ë©´ {@link android.app.Service#stopSelf stopSelf()} ë˜ëŠ” {@link android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤.</p> <p>ë³´í†µì€ {@link android.app.Service#onBind onBind()} <em>ë˜ëŠ”</em> {@link android.app.Service#onStartCommand onStartCommand()} -중 한 가지만 구현하지만, 둘 ëª¨ë‘ êµ¬í˜„í•´ì•¼ í• ë•Œë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, ìŒì•… í”Œë ˆì´ì–´ì˜ 경우 서비스를 무한히 실행하면서 -ë°”ì¸ë”©ë„ ì œê³µí•˜ë„ë¡ í—ˆìš©í•˜ëŠ” ê²ƒì´ ìœ ìš©í•˜ë‹¤ëŠ” ê²°ë¡ ì„ ë‚´ë¦´ 수 있습니다. ì´ë ‡ê²Œ 하면, 한 액티비티가 서비스로 하여금 ìŒì•…ì„ ìž¬ìƒí•˜ë„ë¡ -시작한 ë‹¤ìŒ ì‚¬ìš©ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚˜ë”ë¼ë„ ìŒì•…ì„ ê³„ì† ìž¬ìƒí•˜ë„ë¡ í• ìˆ˜ 있습니다. 그런 다ìŒ, 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ +중 한 가지만 구현하지만, 둘 ëª¨ë‘ êµ¬í˜„í•´ì•¼ í• ë•Œë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, ìŒì•… í”Œë ˆì´ì–´ì˜ 경우 서비스를 무한히 실행하면서 +ë°”ì¸ë”©ë„ ì œê³µí•˜ë„ë¡ í—ˆìš©í•˜ëŠ” ê²ƒì´ ìœ ìš©í•˜ë‹¤ëŠ” ê²°ë¡ ì„ ë‚´ë¦´ 수 있습니다. ì´ë ‡ê²Œ 하면, 한 액티비티가 서비스로 하여금 ìŒì•…ì„ ìž¬ìƒí•˜ë„ë¡ +시작한 ë‹¤ìŒ ì‚¬ìš©ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚˜ë”ë¼ë„ ìŒì•…ì„ ê³„ì† ìž¬ìƒí•˜ë„ë¡ í• ìˆ˜ 있습니다. 그런 다ìŒ, 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 다시 ëŒì•„오면 ì´ ì•¡í‹°ë¹„í‹°ê°€ 서비스를 ë°”ì¸ë”©í•˜ì—¬ ìž¬ìƒ ì œì–´ê¶Œì„ ë‹¤ì‹œ íšë“í• ìˆ˜ 있습니다.</p> <p><a href="#Lifecycle">ë°”ì¸ë”©ëœ 서비스 수명 주기 관리 -</a> ê´€ë ¨ ì„¹ì…˜ì„ ê¼ ì½ì–´ë³´ì‹ì‹œì˜¤. ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ì„ +</a> ê´€ë ¨ ì„¹ì…˜ì„ ê¼ ì½ì–´ë³´ì‹ì‹œì˜¤. ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ì„ ì¶”ê°€í• ë•Œ 서비스 수명 ì£¼ê¸°ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ë¥¼ ì–»ì„ ìˆ˜ 있습니다.</p> </div> </div> @@ -90,23 +90,23 @@ android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤.</p <p>í´ë¼ì´ì–¸íŠ¸ê°€ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ë ¤ë©´ {@link android.content.Context#bindService bindService()}를 호출하면 ë©ë‹ˆë‹¤. ì´ ë•Œ, 반드시 {@link android.content.ServiceConnection}ì˜ êµ¬í˜„ì„ ì œê³µí•´ì•¼ 하며 ì´ê²ƒì´ ì„œë¹„ìŠ¤ì™€ì˜ ì—°ê²°ì„ ëª¨ë‹ˆí„°ë§í•©ë‹ˆë‹¤. {@link -android.content.Context#bindService bindService()} 메서드는 ê°’ ì—†ì´ ì¦‰ì‹œ 반환ë©ë‹ˆë‹¤. -그러나 Android ì‹œìŠ¤í…œì´ í´ë¼ì´ì–¸íŠ¸ì™€ 서비스 사ì´ì˜ +android.content.Context#bindService bindService()} 메서드는 ê°’ ì—†ì´ ì¦‰ì‹œ 반환ë©ë‹ˆë‹¤. +그러나 Android ì‹œìŠ¤í…œì´ í´ë¼ì´ì–¸íŠ¸ì™€ 서비스 사ì´ì˜ ì—°ê²°ì„ ë§Œë“œëŠ” 경우, ì‹œìŠ¤í…œì€ {@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}를 {@link -android.content.ServiceConnection}ì—서 호출하여 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 í†µì‹ í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ {@link android.os.IBinder}를 +android.content.ServiceConnection}ì—서 호출하여 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 í†µì‹ í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ {@link android.os.IBinder}를 ì „ë‹¬í•˜ê²Œ ë©ë‹ˆë‹¤.</p> -<p>여러 í´ë¼ì´ì–¸íŠ¸ê°€ 한 ë²ˆì— ì„œë¹„ìŠ¤ì— ì—°ê²°ë 수 있습니다. 그러나, ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ì˜ -{@link android.app.Service#onBind onBind()} 메서드를 호출하여 {@link android.os.IBinder}를 검색하는 경우는 첫 번째 í´ë¼ì´ì–¸íŠ¸ê°€ -ë°”ì¸ë”©ë˜ëŠ” 경우ë¿ìž…니다. ì‹œìŠ¤í…œì€ ê·¸ 후 ê°™ì€ {@link android.os.IBinder}를 ë°”ì¸ë”©ë˜ëŠ” 추가 +<p>여러 í´ë¼ì´ì–¸íŠ¸ê°€ 한 ë²ˆì— ì„œë¹„ìŠ¤ì— ì—°ê²°ë 수 있습니다. 그러나, ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ì˜ +{@link android.app.Service#onBind onBind()} 메서드를 호출하여 {@link android.os.IBinder}를 검색하는 경우는 첫 번째 í´ë¼ì´ì–¸íŠ¸ê°€ +ë°”ì¸ë”©ë˜ëŠ” 경우ë¿ìž…니다. ì‹œìŠ¤í…œì€ ê·¸ 후 ê°™ì€ {@link android.os.IBinder}를 ë°”ì¸ë”©ë˜ëŠ” 추가 í´ë¼ì´ì–¸íЏ 모ë‘ì— ì „ë‹¬í•˜ë©° ì´ë•ŒëŠ” {@link android.app.Service#onBind onBind()}를 다시 호출하지 않습니다.</p> <p>마지막 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스ì—서 ë°”ì¸ë”©ì„ í•´ì œí•˜ë©´ ì‹œìŠ¤í…œì€ ì„œë¹„ìŠ¤ë¥¼ 소멸시킵니다( {@link android.content.Context#startService startService()}ê°€ 서비스를 ì‹œìž‘í–ˆì„ ê²½ìš° ì œì™¸).</p> <p>ë°”ì¸ë”©ëœ 서비스를 êµ¬í˜„í• ë•Œ 가장 중요한 ë¶€ë¶„ì€ -{@link android.app.Service#onBind onBind()} 콜백 메서드가 반환하는 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 것입니다. +{@link android.app.Service#onBind onBind()} 콜백 메서드가 반환하는 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 것입니다. ì„œë¹„ìŠ¤ì˜ {@link android.os.IBinder} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 방법ì—는 몇 가지가 ìžˆê³ , ë‹¤ìŒ ì„¹ì…˜ì—서는 ê° ê¸°ë²•ì— ê´€í•´ ë…¼ì˜í•©ë‹ˆë‹¤.</p> @@ -115,42 +115,42 @@ android.content.ServiceConnection}ì—서 호출하여 í´ë¼ì´ì–¸íŠ¸ê°€ 서비ì <h2 id="Creating">ë°”ì¸ë”©ëœ 서비스 ìƒì„±</h2> <p>ë°”ì¸ë”©ì„ ì œê³µí•˜ëŠ” 서비스를 ìƒì„±í• 때는 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 ìƒí˜¸ 작용하는 ë° ì‚¬ìš©í• ìˆ˜ 있는 í”„ë¡œê·¸ëž˜ë° ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” {@link android.os.IBinder} -를 ì œê³µí•´ì•¼ 합니다. +를 ì œê³µí•´ì•¼ 합니다. ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” ë°©ë²•ì€ ì„¸ 가지가 있습니다.</p> <dl> <dt><a href="#Binder">ë°”ì¸ë” í´ëž˜ìФ 확장</a></dt> - <dd>서비스가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ì „ìš©ì´ë©° í´ë¼ì´ì–¸íŠ¸ì™€ ê°™ì€ ê³¼ì •ìœ¼ë¡œ 실행ë˜ëŠ” + <dd>서비스가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ì „ìš©ì´ë©° í´ë¼ì´ì–¸íŠ¸ì™€ ê°™ì€ ê³¼ì •ìœ¼ë¡œ 실행ë˜ëŠ” 경우(ì´ëŸ° 경우가 í”함), ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í• 때 {@link android.os.Binder} í´ëž˜ìŠ¤ë¥¼ - í™•ìž¥í•˜ê³ ê·¸ ì¸ìŠ¤í„´ìŠ¤ë¥¼ -{@link android.app.Service#onBind onBind()}ì—서 반환하는 ë°©ì‹ì„ 사용해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.os.Binder}를 받으며, -ì´ë¥¼ 사용하여 {@link android.os.Binder} 구현 ë˜ëŠ” 심지어 {@link android.app.Service}ì—서 + í™•ìž¥í•˜ê³ ê·¸ ì¸ìŠ¤í„´ìŠ¤ë¥¼ +{@link android.app.Service#onBind onBind()}ì—서 반환하는 ë°©ì‹ì„ 사용해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.os.Binder}를 받으며, +ì´ë¥¼ 사용하여 {@link android.os.Binder} 구현 ë˜ëŠ” 심지어 {@link android.app.Service}ì—서 ì‚¬ìš©í• ìˆ˜ 있는 공개 ë©”ì„œë“œì— ì§ì ‘ ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. - <p>ì´ê²ƒì€ 서비스가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 위해 단순히 ë°°ê²½ì—서 ìž‘ë™í•˜ëŠ” ìš”ì†Œì— ê·¸ì¹˜ëŠ” 경우 -ì„ í˜¸ë˜ëŠ” 기법입니다. ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í• 때 ì´ ë°©ì‹ì„ 사용하지 않는 ìœ ì¼í•œ ì´ìœ 는 + <p>ì´ê²ƒì€ 서비스가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 위해 단순히 ë°°ê²½ì—서 ìž‘ë™í•˜ëŠ” ìš”ì†Œì— ê·¸ì¹˜ëŠ” 경우 +ì„ í˜¸ë˜ëŠ” 기법입니다. ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í• 때 ì´ ë°©ì‹ì„ 사용하지 않는 ìœ ì¼í•œ ì´ìœ 는 서비스를 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서나 별ë„ì˜ í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ì‚¬ìš©í•˜ê³ ìžˆëŠ” 경우ë¿ìž…니다.</dd> <dt><a href="#Messenger">ë©”ì‹ ì € 사용</a></dt> - <dd>ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 여러 í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ì ìš©ë˜ë„ë¡ í•´ì•¼ 하는 경우, ì„œë¹„ìŠ¤ì— ëŒ€í•œ -ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ {@link android.os.Messenger}로 ìƒì„±í• 수 있습니다. + <dd>ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 여러 í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ì ìš©ë˜ë„ë¡ í•´ì•¼ 하는 경우, ì„œë¹„ìŠ¤ì— ëŒ€í•œ +ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ {@link android.os.Messenger}로 ìƒì„±í• 수 있습니다. ì´ ë°©ì‹ì„ 사용하면 서비스가 여러 가지 ìœ í˜•ì˜ {@link android.os.Message} ê°œì²´ì— ì‘답하는 {@link android.os.Handler}를 ì •ì˜í•©ë‹ˆë‹¤. ì´ {@link android.os.Handler} ê°€ {@link android.os.Messenger}ì˜ ê¸°ì´ˆì´ë©°, ì´ë¥¼ 통해 í´ë¼ì´ì–¸íŠ¸ì™€ 함께 {@link android.os.IBinder} 를 ê³µìœ í• ìˆ˜ 있게 ë˜ì–´ í´ë¼ì´ì–¸íŠ¸ê°€ {@link -android.os.Message} 개체를 사용해 ì„œë¹„ìŠ¤ì— ëª…ë ¹ì„ ë³´ë‚¼ 수 있게 í•´ì¤ë‹ˆë‹¤. ì´ì™¸ì—ë„, í´ë¼ì´ì–¸íŠ¸ê°€ ìžì²´ì 으로 {@link android.os.Messenger}를 +android.os.Message} 개체를 사용해 ì„œë¹„ìŠ¤ì— ëª…ë ¹ì„ ë³´ë‚¼ 수 있게 í•´ì¤ë‹ˆë‹¤. ì´ì™¸ì—ë„, í´ë¼ì´ì–¸íŠ¸ê°€ ìžì²´ì 으로 {@link android.os.Messenger}를 ì •ì˜í•˜ì—¬ 서비스가 메시지를 ëŒë ¤ë³´ë‚¼ 수 있ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. <p>ì´ê²ƒì´ 프로세스간 í†µì‹ (IPC)ì„ ìˆ˜í–‰í•˜ëŠ” 가장 간단한 방법입니다. {@link -android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ 해서, 서비스를 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ê²Œ +android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ 해서, 서비스를 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ê²Œ 설계하지 ì•Šì•„ë„ ë˜ê¸° 때문입니다.</p> </dd> <dt>AIDL 사용하기</dt> - <dd>AIDL(Android Interface Definition Language)ì€ ê°œì²´ë¥¼ ìš´ì˜ ì²´ì œê°€ ì´í•´í• 수 있는 -ì›ì‹œ ë°ì´í„°ë¡œ 구성 í•´ì œí•œ ë‹¤ìŒ ì—¬ëŸ¬ í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ì§‘ê²°í•˜ì—¬ IPC를 수행하기 위해 -필요한 ëª¨ë“ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. ì´ì „ ê¸°ë²•ì€ {@link android.os.Messenger}를 사용했는ë°, + <dd>AIDL(Android Interface Definition Language)ì€ ê°œì²´ë¥¼ ìš´ì˜ ì²´ì œê°€ ì´í•´í• 수 있는 +ì›ì‹œ ë°ì´í„°ë¡œ 구성 í•´ì œí•œ ë‹¤ìŒ ì—¬ëŸ¬ í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ì§‘ê²°í•˜ì—¬ IPC를 수행하기 위해 +필요한 ëª¨ë“ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. ì´ì „ ê¸°ë²•ì€ {@link android.os.Messenger}를 사용했는ë°, 사실 ê·¸ 기본 구조가 AIDLì„ ê¸°ë°˜ìœ¼ë¡œ í•˜ê³ ìžˆëŠ” 것입니다. 위ì—서 언급한 바와 ê°™ì´ {@link android.os.Messenger}는 ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëª¨ë“ í´ë¼ì´ì–¸íЏ ìš”ì² -ëŒ€ê¸°ì—´ì„ ìƒì„±í•˜ë¯€ë¡œ 서비스는 한 ë²ˆì— ìš”ì²ì„ 하나씩 ìˆ˜ì‹ í•©ë‹ˆë‹¤. 그러나, -서비스가 ë™ì‹œì— 여러 ìš”ì²ì„ 처리하ë„ë¡ í•˜ê³ ì‹¶ì€ ê²½ìš°ì—는 AIDLì„ ì§ì ‘ ì‚¬ìš©í•´ë„ +ëŒ€ê¸°ì—´ì„ ìƒì„±í•˜ë¯€ë¡œ 서비스는 한 ë²ˆì— ìš”ì²ì„ 하나씩 ìˆ˜ì‹ í•©ë‹ˆë‹¤. 그러나, +서비스가 ë™ì‹œì— 여러 ìš”ì²ì„ 처리하ë„ë¡ í•˜ê³ ì‹¶ì€ ê²½ìš°ì—는 AIDLì„ ì§ì ‘ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. ì´ ê²½ìš°, 서비스가 다중 ìŠ¤ë ˆë”©ì„ í• ìˆ˜ 있어야 하며 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ê²Œ 구축ë˜ì—ˆì–´ì•¼ 합니다. <p>AIDLì„ ì§ì ‘ ì‚¬ìš©í•˜ë ¤ë©´ í”„ë¡œê·¸ëž˜ë° ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” {@code .aidl} 파ì¼ì„ ìƒì„±í•´ì•¼ 합니다. Android SDK ë„구는 @@ -159,10 +159,10 @@ android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ í•´ì„ </dd> </dl> - <p class="note"><strong>ì°¸ê³ :</strong> ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 경우, -ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•˜ê¸° 위해 AIDL를 사용해서는 <strong>안 ë©ë‹ˆë‹¤</strong>. -ê·¸ëŸ¬ë ¤ë©´ 다중 ìŠ¤ë ˆë”© ê¸°ëŠ¥ì´ í•„ìš”í• ìˆ˜ ìžˆê³ , ë”°ë¼ì„œ ë” ë³µìž¡í•œ êµ¬í˜„ì„ ì´ˆëž˜í• ìˆ˜ 있기 때문입니다. ë”°ë¼ì„œ AIDLì€ -ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì 합하지 않으므로 ì´ ë¬¸ì„œì—서는 ì—¬ëŸ¬ë¶„ì˜ ì„œë¹„ìŠ¤ì— ì´ë¥¼ ì´ìš©í•˜ëŠ” ë°©ë²•ì— ëŒ€í•´ 다루지 않습니다. AIDLì„ ì§ì ‘ 사용해야 한다는 í™•ì‹ ì´ ë“œëŠ” 경우, + <p class="note"><strong>ì°¸ê³ :</strong> ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 경우, +ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•˜ê¸° 위해 AIDL를 사용해서는 <strong>안 ë©ë‹ˆë‹¤</strong>. +ê·¸ëŸ¬ë ¤ë©´ 다중 ìŠ¤ë ˆë”© ê¸°ëŠ¥ì´ í•„ìš”í• ìˆ˜ ìžˆê³ , ë”°ë¼ì„œ ë” ë³µìž¡í•œ êµ¬í˜„ì„ ì´ˆëž˜í• ìˆ˜ 있기 때문입니다. ë”°ë¼ì„œ AIDLì€ +ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì 합하지 않으므로 ì´ ë¬¸ì„œì—서는 ì—¬ëŸ¬ë¶„ì˜ ì„œë¹„ìŠ¤ì— ì´ë¥¼ ì´ìš©í•˜ëŠ” ë°©ë²•ì— ëŒ€í•´ 다루지 않습니다. AIDLì„ ì§ì ‘ 사용해야 한다는 í™•ì‹ ì´ ë“œëŠ” 경우, <a href="{@docRoot}guide/components/aidl.html">AIDL</a> 문서를 참조하ì‹ì‹œì˜¤. </p> @@ -172,12 +172,12 @@ android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ í•´ì„ <h3 id="Binder">ë°”ì¸ë” í´ëž˜ìФ 확장</h3> <p>서비스를 사용하는 ê²ƒì´ ë¡œì»¬ ì• í”Œë¦¬ì¼€ì´ì…˜ë¿ì´ê³ 여러 í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ìž‘ë™í• 필요가 없는 경우, -ë‚˜ë¦„ì˜ {@link android.os.Binder} í´ëž˜ìŠ¤ë¥¼ 구현하여 +ë‚˜ë¦„ì˜ {@link android.os.Binder} í´ëž˜ìŠ¤ë¥¼ 구현하여 í´ë¼ì´ì–¸íŠ¸ë¡œ 하여금 서비스 ë‚´ì˜ ê³µê°œ ë©”ì„œë“œì— ì§ì ‘ ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì´ê²ƒì€ í´ë¼ì´ì–¸íŠ¸ì™€ 서비스가 -ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë° í”„ë¡œì„¸ìŠ¤ì— ìžˆëŠ” 경우ì—ë§Œ 통하며, ì´ ê²½ìš°ê°€ 가장 보편ì 입니다. ì´ ë°©ì‹ì´ 잘 통하는 경우를 예로 들면, -ìŒì•… ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ìžì²´ ì„œë¹„ìŠ¤ì— ì•¡í‹°ë¹„í‹°ë¥¼ ë°”ì¸ë”©í•˜ì—¬ ë°°ê²½ì—서 ìŒì•…ì„ ìž¬ìƒí•˜ë„ë¡ í•´ì•¼ 하는 +<p class="note"><strong>ì°¸ê³ :</strong> ì´ê²ƒì€ í´ë¼ì´ì–¸íŠ¸ì™€ 서비스가 +ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë° í”„ë¡œì„¸ìŠ¤ì— ìžˆëŠ” 경우ì—ë§Œ 통하며, ì´ ê²½ìš°ê°€ 가장 보편ì 입니다. ì´ ë°©ì‹ì´ 잘 통하는 경우를 예로 들면, +ìŒì•… ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ìžì²´ ì„œë¹„ìŠ¤ì— ì•¡í‹°ë¹„í‹°ë¥¼ ë°”ì¸ë”©í•˜ì—¬ ë°°ê²½ì—서 ìŒì•…ì„ ìž¬ìƒí•˜ë„ë¡ í•´ì•¼ 하는 경우가 있습니다.</p> <p>ì´ë ‡ê²Œ ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ ë‹¤ìŒê³¼ 같습니다.</p> @@ -185,7 +185,7 @@ android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ í•´ì„ <li>서비스ì—서 ë‹¤ìŒ ì¤‘ 한 ê°€ì§€ì— í•´ë‹¹í•˜ëŠ” {@link android.os.Binder}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. <ul> <li>í´ë¼ì´ì–¸íŠ¸ê°€ í˜¸ì¶œí• ìˆ˜ 있는 공개 메서드 í¬í•¨</li> - <li>í´ë¼ì´ì–¸íŠ¸ê°€ í˜¸ì¶œí• ìˆ˜ 있는 공개 메서드가 있는 현재{@link android.app.Service} + <li>í´ë¼ì´ì–¸íŠ¸ê°€ í˜¸ì¶œí• ìˆ˜ 있는 공개 메서드가 있는 현재{@link android.app.Service} ì¸ìŠ¤í„´ìŠ¤ë¥¼ 반환</li> <li>í´ë¼ì´ì–¸íŠ¸ê°€ í˜¸ì¶œí• ìˆ˜ 있는 공개 메서드가 í¬í•¨ëœ 서비스가 호스팅하는 다른 í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 반환 </li> @@ -193,16 +193,16 @@ android.os.Messenger}ê°€ ëª¨ë“ ìš”ì²ì„ ë‹¨ì¼ ìŠ¤ë ˆë“œì— ëŒ€ê¸°í•˜ê²Œ í•´ì„ <li>{@link android.app.Service#onBind onBind()} 콜백 메서드ì—서 ì´ {@link android.os.Binder}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 반환합니다.</li> <li>í´ë¼ì´ì–¸íŠ¸ì˜ ê²½ìš°, {@link android.os.Binder}를 {@link -android.content.ServiceConnection#onServiceConnected onServiceConnected()} +android.content.ServiceConnection#onServiceConnected onServiceConnected()} 콜백 메서드ì—서 받아 ì œê³µëœ ë©”ì„œë“œë¥¼ 사용해 서비스를 ë°”ì¸ë”©í•˜ê¸° 위해 호출합니다.</li> </ol> -<p class="note"><strong>ì°¸ê³ :</strong> 서비스와 í´ë¼ì´ì–¸íŠ¸ê°€ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— -있어야 하는 ê²ƒì€ ê·¸ëž˜ì•¼ë§Œ í´ë¼ì´ì–¸íŠ¸ê°€ ë°˜í™˜ëœ ê°œì²´ë¥¼ ìºìŠ¤íŒ…í•˜ì—¬ 해당 API를 ì ì ˆí•˜ê²Œ í˜¸ì¶œí• ìˆ˜ 있기 때문입니다. ë˜í•œ -서비스와 í´ë¼ì´ì–¸íŠ¸ëŠ” ê°™ì€ í”„ë¡œì„¸ìŠ¤ì— ìžˆì–´ì•¼ í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ ê¸°ë²•ì—서는 +<p class="note"><strong>ì°¸ê³ :</strong> 서비스와 í´ë¼ì´ì–¸íŠ¸ê°€ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— +있어야 하는 ê²ƒì€ ê·¸ëž˜ì•¼ë§Œ í´ë¼ì´ì–¸íŠ¸ê°€ ë°˜í™˜ëœ ê°œì²´ë¥¼ ìºìŠ¤íŒ…í•˜ì—¬ 해당 API를 ì ì ˆí•˜ê²Œ í˜¸ì¶œí• ìˆ˜ 있기 때문입니다. ë˜í•œ +서비스와 í´ë¼ì´ì–¸íŠ¸ëŠ” ê°™ì€ í”„ë¡œì„¸ìŠ¤ì— ìžˆì–´ì•¼ í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ ê¸°ë²•ì—서는 여러 í”„ë¡œì„¸ìŠ¤ì— ê±¸ì¹œ ì§‘ê²° ìž‘ì—…ì„ ì „í˜€ 수행하지 않기 때문입니다.</p> -<p>예컨대, ì–´ë–¤ 서비스가 í´ë¼ì´ì–¸íЏì—게 {@link android.os.Binder} êµ¬í˜„ì„ í†µí•´ 서비스 ë‚´ì˜ +<p>예컨대, ì–´ë–¤ 서비스가 í´ë¼ì´ì–¸íЏì—게 {@link android.os.Binder} êµ¬í˜„ì„ í†µí•´ 서비스 ë‚´ì˜ ë©”ì„œë“œì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•œë‹¤ê³ í•©ì‹œë‹¤.</p> <pre> @@ -303,12 +303,12 @@ public class BindingActivity extends Activity { } </pre> -<p>위 예시는 í´ë¼ì´ì–¸íŠ¸ê°€ +<p>위 예시는 í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.content.ServiceConnection} 구현과 {@link -android.content.ServiceConnection#onServiceConnected onServiceConnected()} ì½œë°±ì„ ì‚¬ìš©í•˜ì—¬ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. ë‹¤ìŒ +android.content.ServiceConnection#onServiceConnected onServiceConnected()} ì½œë°±ì„ ì‚¬ìš©í•˜ì—¬ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. ë‹¤ìŒ ì„¹ì…˜ì—서는 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ì´ëŸ¬í•œ ê³¼ì •ì— ëŒ€í•´ 좀 ë” ìžì„¸í•œ ì •ë³´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 위 예시ì—서는 서비스ì—서 분명히 ë°”ì¸ë”©ì„ í•´ì œí•˜ì§€ëŠ” 않습니다. +<p class="note"><strong>ì°¸ê³ :</strong> 위 예시ì—서는 서비스ì—서 분명히 ë°”ì¸ë”©ì„ í•´ì œí•˜ì§€ëŠ” 않습니다. 그러나 ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ëŠ” ì ì ˆí•œ 시ì ì— ë°”ì¸ë”©ì„ í•´ì œí•´ì•¼ 합니다(액티비티가 ì¼ì‹œ 중지ë 때 등).</p> <p>ë” ë§Žì€ ìƒ˜í”Œ 코드를 ë³´ë ¤ë©´ <a href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>ì—서 <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code @@ -326,26 +326,26 @@ LocalServiceActivities.java}</a> í´ëž˜ìŠ¤ë¥¼ 참조하ì‹ì‹œì˜¤.</p> <h4>AIDLê³¼ 비êµ</h4> <p>IPC를 수행해야 í• ê²½ìš°, ì¸í„°íŽ˜ì´ìŠ¤ì— ëŒ€í•´ {@link android.os.Messenger}를 사용하는 ê²ƒì´ AIDL로 구현하는 것보다 간단합니다. 왜ëƒí•˜ë©´ {@link android.os.Messenger}는 -ëª¨ë“ í˜¸ì¶œì„ ì„œë¹„ìŠ¤ì— ëŒ€ê¸°ì‹œí‚¤ì§€ë§Œ 순수한 AIDL ì¸í„°íŽ˜ì´ìŠ¤ëŠ” +ëª¨ë“ í˜¸ì¶œì„ ì„œë¹„ìŠ¤ì— ëŒ€ê¸°ì‹œí‚¤ì§€ë§Œ 순수한 AIDL ì¸í„°íŽ˜ì´ìŠ¤ëŠ” ì„œë¹„ìŠ¤ì— ë™ì‹œì— ìš”ì²ì„ ì „ì†¡í•˜ì—¬ 다중 ìŠ¤ë ˆë”©ì„ ì²˜ë¦¬í•´ì•¼ 하기 때문입니다.</p> <p>ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì´ì…˜ì—서는 서비스가 다중 ìŠ¤ë ˆë”©ì„ ìˆ˜í–‰í• í•„ìš”ê°€ 없으므로 {@link -android.os.Messenger}를 사용하면 í˜¸ì¶œì„ í•œ ë²ˆì— í•˜ë‚˜ì”© ì²˜ë¦¬í• ìˆ˜ 있습니다. 서비스가 +android.os.Messenger}를 사용하면 í˜¸ì¶œì„ í•œ ë²ˆì— í•˜ë‚˜ì”© ì²˜ë¦¬í• ìˆ˜ 있습니다. 서비스가 다중 ìŠ¤ë ˆë”©ë˜ëŠ” ê²ƒì´ ì¤‘ìš”í•œ 경우, ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” ë° <a href="{@docRoot}guide/components/aidl.html">AIDL</a>ì„ ì‚¬ìš©í•´ì•¼ 합니다.</p> </div> </div> -<p>서비스가 ì›ê²© 프로세스와 í†µì‹ í•´ì•¼ 한다면 ì„œë¹„ìŠ¤ì— ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” ë° -{@link android.os.Messenger}를 사용하면 ë©ë‹ˆë‹¤. ì´ ê¸°ë²•ì„ ì‚¬ìš©í•˜ë©´ +<p>서비스가 ì›ê²© 프로세스와 í†µì‹ í•´ì•¼ 한다면 ì„œë¹„ìŠ¤ì— ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” ë° +{@link android.os.Messenger}를 사용하면 ë©ë‹ˆë‹¤. ì´ ê¸°ë²•ì„ ì‚¬ìš©í•˜ë©´ AIDLì„ ì“°ì§€ ì•Šê³ ë„ í”„ë¡œì„¸ìŠ¤ê°„ í†µì‹ (IPC)ì„ ìˆ˜í–‰í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</p> <p>다ìŒì€ {@link android.os.Messenger} 사용 ë°©ë²•ì„ ê°„ëžµí•˜ê²Œ 요약한 것입니다.</p> <ul> - <li>서비스가 í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ê° í˜¸ì¶œì— ëŒ€í•´ ì½œë°±ì„ ë°›ëŠ” {@link android.os.Handler}를 + <li>서비스가 í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ê° í˜¸ì¶œì— ëŒ€í•´ ì½œë°±ì„ ë°›ëŠ” {@link android.os.Handler}를 구현합니다.</li> <li>{@link android.os.Handler}를 사용하여 {@link android.os.Messenger} 개체를 ìƒì„±í•©ë‹ˆë‹¤ (ì´ê²ƒì€ {@link android.os.Handler}ì— ëŒ€í•œ 참조입니다).</li> - <li>{@link android.os.Messenger}ê°€ {@link android.os.IBinder}를 ìƒì„±í•˜ì—¬ 서비스가 + <li>{@link android.os.Messenger}ê°€ {@link android.os.IBinder}를 ìƒì„±í•˜ì—¬ 서비스가 {@link android.app.Service#onBind onBind()}로부터 í´ë¼ì´ì–¸íЏì—게 반환하ë„ë¡ í•©ë‹ˆë‹¤.</li> <li>í´ë¼ì´ì–¸íŠ¸ëŠ” {@link android.os.IBinder}를 사용하여 {@link android.os.Messenger} (ì„œë¹„ìŠ¤ì˜ {@link android.os.Handler}를 참조)를 ì¸ìŠ¤í„´íŠ¸í™”í•˜ê³ , ì´ë¥¼ ì´ìš©í•˜ì—¬ @@ -356,8 +356,8 @@ handleMessage()} 메서드를 사용합니다.</li> </ul> -<p>ì´ë ‡ê²Œ 하면, í´ë¼ì´ì–¸íŠ¸ê°€ 서비스ì—서 í˜¸ì¶œí• "메서드"ê°€ 없습니다. ëŒ€ì‹ í´ë¼ì´ì–¸íŠ¸ëŠ” -"메시지"({@link android.os.Message} 개체)를 ì „ë‹¬í•˜ì—¬ 서비스가 +<p>ì´ë ‡ê²Œ 하면, í´ë¼ì´ì–¸íŠ¸ê°€ 서비스ì—서 í˜¸ì¶œí• "메서드"ê°€ 없습니다. ëŒ€ì‹ í´ë¼ì´ì–¸íŠ¸ëŠ” +"메시지"({@link android.os.Message} 개체)를 ì „ë‹¬í•˜ì—¬ 서비스가 {@link android.os.Handler}로 ë°›ì„ ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.</p> <p>다ìŒì€ {@link android.os.Messenger} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용하는 간단한 예시 서비스입니다.</p> @@ -406,7 +406,7 @@ public class MessengerService extends Service { <p>í´ë¼ì´ì–¸íŠ¸ëŠ” 서비스가 반환한 {@link android.os.IBinder}ì— ê¸°ì´ˆí•˜ì—¬ {@link android.os.Messenger}를 ìƒì„±í•˜ê³ {@link -android.os.Messenger#send send()}로 메시지를 ì „ì†¡í•˜ê¸°ë§Œ 하면 ë©ë‹ˆë‹¤. 예를 들어, 다ìŒì€ +android.os.Messenger#send send()}로 메시지를 ì „ì†¡í•˜ê¸°ë§Œ 하면 ë©ë‹ˆë‹¤. 예를 들어, 다ìŒì€ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ì—¬ {@code MSG_SAY_HELLO} 메시지를 ì„œë¹„ìŠ¤ì— ì „ë‹¬í•˜ëŠ” 간단한 액티비티입니다.</p> <pre> @@ -477,7 +477,7 @@ public class ActivityMessenger extends Activity { </pre> <p>ì´ ì˜ˆì‹œì—는 서비스가 í´ë¼ì´ì–¸íŠ¸ì— ì‘답하는 ë°©ì‹ì´ 나타나 있지 않다는 ê²ƒì„ ìœ ë…하ì‹ì‹œì˜¤. 서비스가 ì‘답하게 í•˜ë ¤ë©´ - í´ë¼ì´ì–¸íЏì—ë„ {@link android.os.Messenger}를 ìƒì„±í•´ì•¼ 합니다. + í´ë¼ì´ì–¸íЏì—ë„ {@link android.os.Messenger}를 ìƒì„±í•´ì•¼ 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.content.ServiceConnection#onServiceConnected onServiceConnected()} ì½œë°±ì„ ë°›ìœ¼ë©´ {@link android.os.Messenger#send send()}ë©”ì„œë“œì˜ {@link android.os.Message#replyTo} 매개변수ì—서 í´ë¼ì´ì–¸íŠ¸ì˜ {@link android.os.Messenger}를 í¬í•¨í•˜ëŠ” {@link android.os.Message}를 ì„œë¹„ìŠ¤ì— ì „ì†¡í•©ë‹ˆë‹¤. @@ -493,7 +493,7 @@ MessengerServiceActivities.java}</a>(í´ë¼ì´ì–¸íЏ) 예시를 참조하ì‹ì‹œì <h2 id="Binding">ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©</h2> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소(í´ë¼ì´ì–¸íЏ)를 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ë ¤ë©´ +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소(í´ë¼ì´ì–¸íЏ)를 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ë ¤ë©´ {@link android.content.Context#bindService bindService()}를 호출하면 ë©ë‹ˆë‹¤. 그러면 Android systemì´ ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onBind onBind()} 메서드를 í˜¸ì¶œí•˜ê³ , ì´ëŠ” ì„œë¹„ìŠ¤ì™€ì˜ ìƒí˜¸ ìž‘ìš©ì„ ìœ„í•´ {@link android.os.IBinder}를 반환합니다.</p> @@ -505,7 +505,7 @@ android.content.ServiceConnection}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ì—¬ ì´ë¥¼ {@link bindService()}ì— ì „ë‹¬í•´ì•¼ 합니다. {@link android.content.ServiceConnection}ì—는 {@link android.os.IBinder}를 ì „ë‹¬í•˜ê¸° 위해 ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 콜백 메서드가 í¬í•¨ë©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 수 있는 ê²ƒì€ ì•¡í‹°ë¹„í‹°, 서비스 ë° +<p class="note"><strong>ì°¸ê³ :</strong> ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 수 있는 ê²ƒì€ ì•¡í‹°ë¹„í‹°, 서비스 ë° ì½˜í…ì¸ ì œê³µìžë¿ìž…니다. 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ìžë¡œë¶€í„°ëŠ” ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 수 <strong>없습니다</strong>.</p> <p>ë”°ë¼ì„œ, í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•´ì•¼ 합니다. </p> @@ -514,12 +514,12 @@ bindService()}ì— ì „ë‹¬í•´ì•¼ 합니다. {@link android.content.ServiceConnecti <p>ì´ êµ¬í˜„ìœ¼ë¡œ ë‘ ê°€ì§€ 콜백 메서드를 ìž¬ì •ì˜í•´ì•¼ 합니다.</p> <dl> <dt>{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ê²ƒì„ 호출하여 ì„œë¹„ìŠ¤ì˜ + <dd>ì‹œìŠ¤í…œì´ ì´ê²ƒì„ 호출하여 ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onBind onBind()} 메서드가 반환한 {@link android.os.IBinder}를 ì „ë‹¬í•©ë‹ˆë‹¤.</dd> <dt>{@link android.content.ServiceConnection#onServiceDisconnected onServiceDisconnected()}</dt> - <dd>Android ì‹œìŠ¤í…œì´ ì´ê²ƒì„ 호출하는 경우는 ì„œë¹„ìŠ¤ë¡œì˜ ì—°ê²°ì´ -예기치 못하게 ëŠì–´ì¡Œì„ 때, 즉 서비스가 ì¶©ëŒí–ˆê±°ë‚˜ 중단ë˜ì—ˆì„ 때 등입니다. + <dd>Android ì‹œìŠ¤í…œì´ ì´ê²ƒì„ 호출하는 경우는 ì„œë¹„ìŠ¤ë¡œì˜ ì—°ê²°ì´ +예기치 못하게 ëŠì–´ì¡Œì„ 때, 즉 서비스가 ì¶©ëŒí–ˆê±°ë‚˜ 중단ë˜ì—ˆì„ 때 등입니다. í´ë¼ì´ì–¸íŠ¸ê°€ ë°”ì¸ë”©ì„ í•´ì œí•œë‹¤ê³ ì´ê²ƒì´ 호출ë˜ì§€ëŠ” <em>않습니다</em>.</dd> </dl> </li> @@ -527,19 +527,19 @@ onServiceDisconnected()}</dt> android.content.Context#bindService bindService()}를 í˜¸ì¶œí•˜ê³ {@link android.content.ServiceConnection} êµ¬í˜„ì„ ì „ë‹¬í•©ë‹ˆë‹¤. </li> <li>ì‹œìŠ¤í…œì´ {@link android.content.ServiceConnection#onServiceConnected -onServiceConnected()} 콜백 메서드를 호출하면, ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì •ì˜í•œ 메서드를 사용하여 +onServiceConnected()} 콜백 메서드를 호출하면, ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì •ì˜í•œ 메서드를 사용하여 ì„œë¹„ìŠ¤ì— í˜¸ì¶œì„ ì‹œìž‘í•´ë„ ë©ë‹ˆë‹¤.</li> <li>서비스로부터 ì—°ê²°ì„ í•´ì œí•˜ë ¤ë©´ {@link android.content.Context#unbindService unbindService()}를 호출합니다. - <p>í´ë¼ì´ì–¸íŠ¸ê°€ 소멸ë˜ë©´ ì´ëŠ” 서비스ì—서 ë°”ì¸ë”©ì„ í•´ì œí•˜ê²Œ ë˜ì§€ë§Œ, -서비스와 ìƒí˜¸ ìž‘ìš©ì„ ë§ˆì³¤ì„ ë•Œ ë˜ëŠ” 액티비티가 ì¼ì‹œ 중지ë˜ì—ˆì„ 때ì—는 í•ìƒ ë°”ì¸ë”©ì„ í•´ì œí•´ì•¼ 합니다. -ì´ë ‡ê²Œ 해야 서비스가 사용 ì¤‘ì´ ì•„ë‹ ë•Œì—는 ì¤‘ì§€í• ìˆ˜ 있습니다 + <p>í´ë¼ì´ì–¸íŠ¸ê°€ 소멸ë˜ë©´ ì´ëŠ” 서비스ì—서 ë°”ì¸ë”©ì„ í•´ì œí•˜ê²Œ ë˜ì§€ë§Œ, +서비스와 ìƒí˜¸ ìž‘ìš©ì„ ë§ˆì³¤ì„ ë•Œ ë˜ëŠ” 액티비티가 ì¼ì‹œ 중지ë˜ì—ˆì„ 때ì—는 í•ìƒ ë°”ì¸ë”©ì„ í•´ì œí•´ì•¼ 합니다. +ì´ë ‡ê²Œ 해야 서비스가 사용 ì¤‘ì´ ì•„ë‹ ë•Œì—는 ì¤‘ì§€í• ìˆ˜ 있습니다 (ë°”ì¸ë”©ê³¼ ë°”ì¸ë”© í•´ì œì˜ ì ì ˆí•œ 시기는 아래ì—서 좀 ë” ë…¼ì˜í•©ë‹ˆë‹¤).</p> </li> </ol> -<p>예를 들어, ë‹¤ìŒ ì½”ë“œ ì¡°ê°ì€ 위와 ê°™ì´ -<a href="#Binder">ë°”ì¸ë” í´ëž˜ìŠ¤ë¥¼ 확장해서</a> ìƒì„±í•œ 서비스와 í´ë¼ì´ì–¸íŠ¸ë¥¼ 연결합니다. 그러므로 ì´ê²ƒì´ 해야 하는 ì¼ì€ ë°˜í™˜ëœ +<p>예를 들어, ë‹¤ìŒ ì½”ë“œ ì¡°ê°ì€ 위와 ê°™ì´ +<a href="#Binder">ë°”ì¸ë” í´ëž˜ìŠ¤ë¥¼ 확장해서</a> ìƒì„±í•œ 서비스와 í´ë¼ì´ì–¸íŠ¸ë¥¼ 연결합니다. 그러므로 ì´ê²ƒì´ 해야 하는 ì¼ì€ ë°˜í™˜ëœ {@link android.os.IBinder}를 {@code LocalService} í´ëž˜ìŠ¤ì— ìºìŠ¤íŒ…í•˜ê³ {@code LocalService} ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìš”ì²í•˜ëŠ” 것ë¿ìž…니다.</p> @@ -564,7 +564,7 @@ private ServiceConnection mConnection = new ServiceConnection() { }; </pre> -<p>ì´ {@link android.content.ServiceConnection}ì´ ìžˆìœ¼ë©´ í´ë¼ì´ì–¸íŠ¸ëŠ” +<p>ì´ {@link android.content.ServiceConnection}ì´ ìžˆìœ¼ë©´ í´ë¼ì´ì–¸íŠ¸ëŠ” ì´ê²ƒì„ {@link android.content.Context#bindService bindService()}ì— ì „ë‹¬í•˜ì—¬ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 수 있습니다. 예:</p> <pre> @@ -573,12 +573,12 @@ bindService(intent, mConnection, Context.BIND_AUTO_CREATE); </pre> <ul> - <li>{@link android.content.Context#bindService bindService()}ì˜ ì²« 번째 매개변수는 ë°”ì¸ë”©í• 서비스를 명시ì 으로 명명하는 -{@link android.content.Intent}입니다(ì¸í…트는 + <li>{@link android.content.Context#bindService bindService()}ì˜ ì²« 번째 매개변수는 ë°”ì¸ë”©í• 서비스를 명시ì 으로 명명하는 +{@link android.content.Intent}입니다(ì¸í…트는 암시ì ì¼ ìˆ˜ 있ìŒ).</li> <li>ë‘ ë²ˆì§¸ 매개변수는 {@link android.content.ServiceConnection} 개체입니다.</li> <li>세 번째 매개변수는 ë°”ì¸ë”© ì˜µì…˜ì„ ë‚˜íƒ€ë‚´ëŠ” 플래그입니다. 서비스를 ìƒì„±í•˜ê¸° 위해 ë³´í†µì€ {@link -android.content.Context#BIND_AUTO_CREATE}를 사용합니다(ì´ë¯¸ ì‚´ì•„ 있는 ìƒíƒœê°€ 아닌 경우). +android.content.Context#BIND_AUTO_CREATE}를 사용합니다(ì´ë¯¸ ì‚´ì•„ 있는 ìƒíƒœê°€ 아닌 경우). 가능한 기타 ê°’ì€ {@link android.content.Context#BIND_DEBUG_UNBIND} ë° {@link android.content.Context#BIND_NOT_FOREGROUND}, ë˜ëŠ” ê°’ì´ ì—†ëŠ” 경우 {@code 0}입니다.</li> </ul> @@ -588,27 +588,27 @@ android.content.Context#BIND_AUTO_CREATE}를 사용합니다(ì´ë¯¸ ì‚´ì•„ ìžˆëŠ <p>다ìŒì€ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ëŠ” ë° ê´€í•œ 몇 가지 중요한 ì°¸ê³ ì‚¬í•입니다.</p> <ul> - <li>í•ìƒ {@link android.os.DeadObjectException} 예외를 트래핑해야 합니다. + <li>í•ìƒ {@link android.os.DeadObjectException} 예외를 트래핑해야 합니다. ì´ê²ƒì€ ì—°ê²°ì´ ëŠì–´ì§€ë©´ ë°œìƒí•©ë‹ˆë‹¤. ì›ê²© ë©”ì„œë“œì— ì˜í•´ ë°œìƒí•˜ëŠ” 예외는 ì´ê²ƒë¿ìž…니다.</li> <li>개체는 여러 í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ ê°ì•ˆëœ 참조입니다. </li> <li>ì¼ë°˜ì 으로, í´ë¼ì´ì–¸íŠ¸ì˜ ìˆ˜ëª… 주기를 ê²°í•©í•˜ê³ ë¶„í•´í•˜ëŠ” ìˆœê°„ì„ ì¼ì¹˜ì‹œí‚¤ë©´ì„œ ë°”ì¸ë”©ê³¼ ë°”ì¸ë”© í•´ì œë¥¼ 페어ë§í•´ì•¼ 합니다. 예: <ul> - <li>액티비티가 ëˆˆì— ë³´ì´ëŠ” ë™ì•ˆì—ë§Œ 서비스와 ìƒí˜¸ 작용해야 한다면 + <li>액티비티가 ëˆˆì— ë³´ì´ëŠ” ë™ì•ˆì—ë§Œ 서비스와 ìƒí˜¸ 작용해야 한다면 {@link android.app.Activity#onStart onStart()}ì—는 ë°”ì¸ë”©í•˜ê³ {@link android.app.Activity#onStop onStop()}ì—는 ë°”ì¸ë”©ì„ í•´ì œí•´ì•¼ 합니다.</li> <li> ë°°ê²½ì—서 중단ë˜ì—ˆì„ ë•Œë„ ì•¡í‹°ë¹„í‹°ê°€ ì‘ë‹µì„ ë°›ê²Œ í•˜ê³ ì‹¶ë‹¤ë©´ {@link android.app.Activity#onCreate onCreate()}ì—는 ë°”ì¸ë”©í•˜ê³ -{@link android.app.Activity#onDestroy onDestroy()} 중ì—는 ë°”ì¸ë”©ì„ í•´ì œí•©ë‹ˆë‹¤. -ì´ë•Œ, 사용ìžì˜ 액티비티가 서비스가 실행ë˜ëŠ” 시간 ì „ì²´ì—서(ë°°ê²½ì—서ë¼ë„) 서비스를 사용한다는 ê²ƒì„ ìœ ë…해야 합니다. +{@link android.app.Activity#onDestroy onDestroy()} 중ì—는 ë°”ì¸ë”©ì„ í•´ì œí•©ë‹ˆë‹¤. +ì´ë•Œ, 사용ìžì˜ 액티비티가 서비스가 실행ë˜ëŠ” 시간 ì „ì²´ì—서(ë°°ê²½ì—서ë¼ë„) 서비스를 사용한다는 ê²ƒì„ ìœ ë…해야 합니다. 서비스가 다른 í”„ë¡œì„¸ìŠ¤ì— ìžˆì„ ê²½ìš°, 사용ìžê°€ í”„ë¡œì„¸ìŠ¤ì˜ ê°€ì¤‘ì¹˜ë¥¼ 높ì´ë©´ ì‹œìŠ¤í…œì´ ì´ë¥¼ ì¤‘ë‹¨í• ê°€ëŠ¥ì„±ì´ ë†’ì•„ì§‘ë‹ˆë‹¤.</li> </ul> <p class="note"><strong>ì°¸ê³ :</strong> ì¼ë°˜ì 으로는, ì•¡í‹°ë¹„í‹°ì˜ {@link android.app.Activity#onResume onResume()}와 {@link android.app.Activity#onPause onPause()}ì—는 ë°”ì¸ë”©í•˜ê±°ë‚˜ ë°”ì¸ë”©ì„ í•´ì œí•˜ì§€ <strong>ë§ì•„야</strong> 합니다. ì´ëŸ¬í•œ ì½œë°±ì€ ëª¨ë“ ìˆ˜ëª… 주기 ì „í™˜ì—서 ë°œìƒí•˜ê³ ì´ëŸ° ì „í™˜ì—서 ë°œìƒí•˜ëŠ” 처리는 -최소한으로 ìœ ì§€í•´ì•¼ 하기 때문입니다. ë˜í•œ, -ì‚¬ìš©ìž ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 여러 액티비티가 ë™ì¼í•œ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ì—ˆê³ +최소한으로 ìœ ì§€í•´ì•¼ 하기 때문입니다. ë˜í•œ, +ì‚¬ìš©ìž ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 여러 액티비티가 ë™ì¼í•œ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ì—ˆê³ ë‘ ì•¡í‹°ë¹„í‹° 사ì´ì— ì „í™˜ì´ ìžˆì„ ê²½ìš°, 현재 ì•¡í‹°ë¹„í‹°ì˜ ë°”ì¸ë”©ì´ í•´ì œëœ í›„(ì¼ì‹œì¤‘ì§€ 중) ë‹¤ìŒ ì•¡í‹°ë¹„í‹°ê°€ ë°”ì¸ë”©í•˜ê¸° ì „(재개 중)ì— ì„œë¹„ìŠ¤ê°€ ì œê±°ë˜ì—ˆë‹¤ê°€ 다시 ìƒì„±ë 수 있습니다 (수명 주기를 ì¡°ì ˆí•˜ê¸° 위한 ì´ëŸ¬í•œ 액티비티 ì „í™˜ì€ <a href="{@docRoot}guide/components/activities.html#CoordinatingActivities">액티비티</a> @@ -624,8 +624,8 @@ RemoteService.java}</a> í´ëž˜ìŠ¤ë¥¼ 참조하ì‹ì‹œì˜¤.</p> <h2 id="Lifecycle">ë°”ì¸ë”©ëœ 서비스 수명 주기 관리</h2> -<p>서비스가 ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ë°”ì¸ë”© í•´ì œë˜ë©´, Android ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다(다만 -{@link android.app.Service#onStartCommand onStartCommand()}ì™€ë„ í•¨ê»˜ ì‹œìž‘ëœ ê²½ìš°ëŠ” 예외). +<p>서비스가 ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ë°”ì¸ë”© í•´ì œë˜ë©´, Android ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다(다만 +{@link android.app.Service#onStartCommand onStartCommand()}ì™€ë„ í•¨ê»˜ ì‹œìž‘ëœ ê²½ìš°ëŠ” 예외). ë”°ë¼ì„œ, 서비스가 ìˆœì „ížˆ ë°”ì¸ë”©ëœ ì„œë¹„ìŠ¤ì¼ ê²½ìš°ì—는 해당 ì„œë¹„ìŠ¤ì˜ ìˆ˜ëª… 주기를 관리하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. í´ë¼ì´ì–¸íŠ¸ì— ë°”ì¸ë”©ë˜ì—ˆëŠ”ì§€ë¥¼ 근거로 Android ì‹œìŠ¤í…œì´ ëŒ€ì‹ ê´€ë¦¬í•´ì£¼ê¸° 때문입니다.</p> diff --git a/docs/html-intl/intl/ko/guide/components/fragments.jd b/docs/html-intl/intl/ko/guide/components/fragments.jd index a41250c38d9f..96bf7a197649 100644 --- a/docs/html-intl/intl/ko/guide/components/fragments.jd +++ b/docs/html-intl/intl/ko/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>ì°¸ê³ í•목</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">프래그먼트로 ë™ì UI 구축하기</a></li> @@ -46,79 +46,79 @@ parent.link=activities.html </div> </div> -<p>{@link android.app.Fragment}는 ë™ìž‘ ë˜ëŠ” -{@link android.app.Activity} ë‚´ì—서 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ì¼ë¶€ë¥¼ 나타냅니다. 여러 ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ì— -조합하여 ì°½ì´ ì—¬ëŸ¬ ê°œì¸ UI를 êµ¬ì¶•í• ìˆ˜ 있으며, í•˜ë‚˜ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 여러 액티비티ì—서 ìž¬ì‚¬ìš©í• ìˆ˜ 있습니다. 프래그먼트는 ìžì²´ 수명 주기를 ê°€ì§€ê³ , ìžì²´ ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ 받으며, -액티비티 실행 ì¤‘ì— ì¶”ê°€ ë° ì œê±°ê°€ 가능한 ì•¡í‹°ë¹„í‹°ì˜ ëª¨ë“ˆì‹ ì„¹ì…˜ì´ë¼ê³ -ìƒê°í•˜ë©´ ë©ë‹ˆë‹¤(다른 ì•¡í‹°ë¹„í‹°ì— +<p>{@link android.app.Fragment}는 ë™ìž‘ ë˜ëŠ” +{@link android.app.Activity} ë‚´ì—서 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ì¼ë¶€ë¥¼ 나타냅니다. 여러 ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ì— +조합하여 ì°½ì´ ì—¬ëŸ¬ ê°œì¸ UI를 êµ¬ì¶•í• ìˆ˜ 있으며, í•˜ë‚˜ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 여러 액티비티ì—서 ìž¬ì‚¬ìš©í• ìˆ˜ 있습니다. 프래그먼트는 ìžì²´ 수명 주기를 ê°€ì§€ê³ , ìžì²´ ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ 받으며, +액티비티 실행 ì¤‘ì— ì¶”ê°€ ë° ì œê±°ê°€ 가능한 ì•¡í‹°ë¹„í‹°ì˜ ëª¨ë“ˆì‹ ì„¹ì…˜ì´ë¼ê³ +ìƒê°í•˜ë©´ ë©ë‹ˆë‹¤(다른 ì•¡í‹°ë¹„í‹°ì— ìž¬ì‚¬ìš©í• ìˆ˜ 있는 "하위 액티비티"와 ê°™ì€ ê°œë…).</p> -<p>프래그먼트는 í•ìƒ ì•¡í‹°ë¹„í‹° ë‚´ì— í¬í•¨ë˜ì–´ 있어야 하며 해당 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기는 -호스트 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… ì£¼ê¸°ì— ì§ì ‘ì 으로 ì˜í–¥ì„ 받습니다. 예를 들어 액티비티가 ì¼ì‹œì •ì§€ë˜ëŠ” 경우, ê·¸ ì•ˆì˜ ëª¨ë“ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ -ì¼ì‹œì •ì§€ë˜ë©° 액티비티가 소멸ë˜ë©´ ëª¨ë“ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ ë§ˆì°¬ê°€ì§€ë¡œ 소멸ë©ë‹ˆë‹¤. 그러나 액티비티가 실행 ì¤‘ì¸ -ë™ì•ˆì—는(<em>재개ë¨</em> <a href="{@docRoot}guide/components/activities.html#Lifecycle">수명 주기 ìƒíƒœ</a>ì— ìžˆì„ ë•Œë¥¼ ë§í•©ë‹ˆë‹¤) -ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 추가 ë˜ëŠ” ì œê±°í•˜ëŠ” 등 개별ì 으로 ì¡°ìž‘í• ìˆ˜ 있습니다. 그와 ê°™ì€ í”„ëž˜ê·¸ë¨¼íŠ¸ 트랜ìžì…˜ì„ -ìˆ˜í–‰í• ë•Œì—는 ì´ë¥¼ 액티비티가 관리하는 ë°± 스íƒì—ë„ -ì¶”ê°€í• ìˆ˜ 있습니다. ê° ë°± ìŠ¤íƒ í•ëª©ì´ ë°œìƒí•œ 프래그먼트 트랜ìžì…˜ì˜ +<p>프래그먼트는 í•ìƒ ì•¡í‹°ë¹„í‹° ë‚´ì— í¬í•¨ë˜ì–´ 있어야 하며 해당 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기는 +호스트 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… ì£¼ê¸°ì— ì§ì ‘ì 으로 ì˜í–¥ì„ 받습니다. 예를 들어 액티비티가 ì¼ì‹œì •ì§€ë˜ëŠ” 경우, ê·¸ ì•ˆì˜ ëª¨ë“ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ +ì¼ì‹œì •ì§€ë˜ë©° 액티비티가 소멸ë˜ë©´ ëª¨ë“ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ ë§ˆì°¬ê°€ì§€ë¡œ 소멸ë©ë‹ˆë‹¤. 그러나 액티비티가 실행 ì¤‘ì¸ +ë™ì•ˆì—는(<em>재개ë¨</em> <a href="{@docRoot}guide/components/activities.html#Lifecycle">수명 주기 ìƒíƒœ</a>ì— ìžˆì„ ë•Œë¥¼ ë§í•©ë‹ˆë‹¤) +ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 추가 ë˜ëŠ” ì œê±°í•˜ëŠ” 등 개별ì 으로 ì¡°ìž‘í• ìˆ˜ 있습니다. 그와 ê°™ì€ í”„ëž˜ê·¸ë¨¼íŠ¸ 트랜ìžì…˜ì„ +ìˆ˜í–‰í• ë•Œì—는 ì´ë¥¼ 액티비티가 관리하는 ë°± 스íƒì—ë„ +ì¶”ê°€í• ìˆ˜ 있습니다. ê° ë°± ìŠ¤íƒ í•ëª©ì´ ë°œìƒí•œ 프래그먼트 트랜ìžì…˜ì˜ 기ë¡ì´ ë©ë‹ˆë‹¤. ì´ ë°± 스íƒì„ 사용하면 사용ìžê°€ 프래그먼트 트랜ìžì…˜ì„ 거꾸로 ëŒë¦´ 수 있습니다(뒤로 ì´ë™). ì´ë•Œ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ë©ë‹ˆë‹¤.</p> <p>프래그먼트를 액티비티 ë ˆì´ì•„ì›ƒì˜ ì¼ë¶€ë¡œ 추가하는 경우, ì´ëŠ” ì•¡í‹°ë¹„í‹°ì˜ ë³´ê¸° 계층 ë‚´ë¶€ì˜ {@link -android.view.ViewGroup} ì•ˆì— ì‚´ë©°, 해당 프래그먼트가 ìžì‹ ì˜ ë³´ê¸° +android.view.ViewGroup} ì•ˆì— ì‚´ë©°, 해당 프래그먼트가 ìžì‹ ì˜ ë³´ê¸° ë ˆì´ì•„ì›ƒì„ ì •ì˜í•©ë‹ˆë‹¤. -프래그먼트를 액티비티 ë ˆì´ì•„ì›ƒì— ì‚½ìž…í•˜ë ¤ë©´ 해당 프래그먼트를 -ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„웃 파ì¼ì—서 {@code <fragment>} 요소로 ì„ ì–¸í•˜ê±°ë‚˜, ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 ì´ë¥¼ -ê¸°ì¡´ì˜ {@link android.view.ViewGroup}ì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. 그러나 프래그먼트가 -액티비티 ë ˆì´ì•„ì›ƒì˜ ì¼ë¶€ë¶„ì´ì–´ì•¼ë§Œ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ë‚˜ë¦„ì˜ UIê°€ 없는 í”„ëž˜ê·¸ë¨¼íŠ¸ë„ ì•¡í‹°ë¹„í‹°ë¥¼ 위한 +프래그먼트를 액티비티 ë ˆì´ì•„ì›ƒì— ì‚½ìž…í•˜ë ¤ë©´ 해당 프래그먼트를 +ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„웃 파ì¼ì—서 {@code <fragment>} 요소로 ì„ ì–¸í•˜ê±°ë‚˜, ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 ì´ë¥¼ +ê¸°ì¡´ì˜ {@link android.view.ViewGroup}ì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. 그러나 프래그먼트가 +액티비티 ë ˆì´ì•„ì›ƒì˜ ì¼ë¶€ë¶„ì´ì–´ì•¼ë§Œ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ë‚˜ë¦„ì˜ UIê°€ 없는 í”„ëž˜ê·¸ë¨¼íŠ¸ë„ ì•¡í‹°ë¹„í‹°ë¥¼ 위한 ë³´ì´ì§€ 않는 작업ìžë¡œ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> -<p>ì´ ë¬¸ì„œì—서는 프래그먼트를 사용하ë„ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 구축하는 ë²•ì„ -설명합니다. 그중ì—는 프래그먼트를 ì•¡í‹°ë¹„í‹°ì˜ ë°± 스íƒì— ì¶”ê°€í–ˆì„ ë•Œ 프래그먼트가 ìžì‹ ì˜ ìƒíƒœë¥¼ ìœ ì§€í•˜ëŠ” 방법, -액티비티 ë° ì•¡í‹°ë¹„í‹° ë‚´ì˜ ë‹¤ë¥¸ 프래그먼트와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í•˜ëŠ” 방법과 ì•¡í‹°ë¹„í‹°ì˜ +<p>ì´ ë¬¸ì„œì—서는 프래그먼트를 사용하ë„ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 구축하는 ë²•ì„ +설명합니다. 그중ì—는 프래그먼트를 ì•¡í‹°ë¹„í‹°ì˜ ë°± 스íƒì— ì¶”ê°€í–ˆì„ ë•Œ 프래그먼트가 ìžì‹ ì˜ ìƒíƒœë¥¼ ìœ ì§€í•˜ëŠ” 방법, +액티비티 ë° ì•¡í‹°ë¹„í‹° ë‚´ì˜ ë‹¤ë¥¸ 프래그먼트와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í•˜ëŠ” 방법과 ì•¡í‹°ë¹„í‹°ì˜ ìž‘ì—… 모ìŒì— 참가하는 법 등등 여러 가지가 í¬í•¨ë©ë‹ˆë‹¤.</p> <h2 id="Design">ë””ìžì¸ ì² í•™</h2> -<p>Androidê°€ 프래그먼트를 ì²˜ìŒ ë„입한 ê²ƒì€ Android 3.0(API ë ˆë²¨ 11)부터입니다. 기본ì 으로 -태블릿과 ê°™ì€ í° í™”ë©´ì—서 보다 ì—ë™ì ì´ê³ ìœ ì—°í•œ UI ë””ìžì¸ì„ ì§€ì›í•˜ëŠ” ê²ƒì´ ëª©ì ì´ì—ˆìŠµë‹ˆë‹¤. íƒœë¸”ë¦¿ì˜ í™”ë©´ì€ -핸드셋 화면보다 훨씬 í¬ê¸° ë•Œë¬¸ì— UI 구성 요소를 ì¡°í•©í•˜ê³ ìƒí˜¸ êµí™˜í• ê³µê°„ì´ -ë” ë§ŽìŠµë‹ˆë‹¤. 프래그먼트는 개발ìžê°€ 보기 ê³„ì¸µì— ë³µìž¡í•œ 변경 ë‚´ìš©ì„ ê´€ë¦¬í•˜ì§€ ì•Šì•„ë„ -그러한 ë””ìžì¸ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” 것입니다. 한 ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„ì›ƒì„ ì—¬ëŸ¬ 프래그먼트로 나누면 -ëŸ°íƒ€ìž„ì— ì•¡í‹°ë¹„í‹°ì˜ ì™¸ê´€ì„ ìˆ˜ì •í• ìˆ˜ë„ ìžˆê³ ê·¸ëŸ¬í•œ 변경 ë‚´ìš©ì„ í•´ë‹¹ 액티비티가 관리하는 +<p>Androidê°€ 프래그먼트를 ì²˜ìŒ ë„입한 ê²ƒì€ Android 3.0(API ë ˆë²¨ 11)부터입니다. 기본ì 으로 +태블릿과 ê°™ì€ í° í™”ë©´ì—서 보다 ì—ë™ì ì´ê³ ìœ ì—°í•œ UI ë””ìžì¸ì„ ì§€ì›í•˜ëŠ” ê²ƒì´ ëª©ì ì´ì—ˆìŠµë‹ˆë‹¤. íƒœë¸”ë¦¿ì˜ í™”ë©´ì€ +핸드셋 화면보다 훨씬 í¬ê¸° ë•Œë¬¸ì— UI 구성 요소를 ì¡°í•©í•˜ê³ ìƒí˜¸ êµí™˜í• ê³µê°„ì´ +ë” ë§ŽìŠµë‹ˆë‹¤. 프래그먼트는 개발ìžê°€ 보기 ê³„ì¸µì— ë³µìž¡í•œ 변경 ë‚´ìš©ì„ ê´€ë¦¬í•˜ì§€ ì•Šì•„ë„ +그러한 ë””ìžì¸ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” 것입니다. 한 ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„ì›ƒì„ ì—¬ëŸ¬ 프래그먼트로 나누면 +ëŸ°íƒ€ìž„ì— ì•¡í‹°ë¹„í‹°ì˜ ì™¸ê´€ì„ ìˆ˜ì •í• ìˆ˜ë„ ìžˆê³ ê·¸ëŸ¬í•œ 변경 ë‚´ìš©ì„ í•´ë‹¹ 액티비티가 관리하는 ë°± 스íƒì— ë³´ì¡´í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p>예를 들어 뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ë¼ë©´ í•˜ë‚˜ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하여 -ì™¼ìª½ì— ê¸°ì‚¬ 목ë¡ì„ 표시하ë„ë¡ í•˜ê³ ë˜ ë‹¤ë¥¸ 프래그먼트로 ì˜¤ë¥¸ìª½ì— ê¸°ì‚¬ ë‚´ìš©ì„ í‘œì‹œí•˜ë„ë¡ í• ìˆ˜ 있습니다. ë‘ í”„ëž˜ê·¸ë¨¼íŠ¸ ëª¨ë‘ -한 액티비티ì—서 양쪽으로 나란히 나타나며, ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ë‚˜ë¦„ì˜ ìˆ˜ëª… 주기 콜백 메서드가 ìžˆê³ -ê°ìž ì‚¬ìš©ìž ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ 따로 처리하게 ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 사용ìžëŠ” 기사를 ì„ íƒí•˜ëŠ” ë° í•œ 액티비티를 ì“°ê³ -기사를 ì½ëŠ” ë° ë˜ ë‹¤ë¥¸ 액티비티를 ì„ íƒí•˜ëŠ” ëŒ€ì‹ ì— ê°™ì€ ì•¡í‹°ë¹„í‹° 안ì—서 기사를 ì„ íƒí•˜ê³ ì½ëŠ” ê³¼ì •ì„ +<p>예를 들어 뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ë¼ë©´ í•˜ë‚˜ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하여 +ì™¼ìª½ì— ê¸°ì‚¬ 목ë¡ì„ 표시하ë„ë¡ í•˜ê³ ë˜ ë‹¤ë¥¸ 프래그먼트로 ì˜¤ë¥¸ìª½ì— ê¸°ì‚¬ ë‚´ìš©ì„ í‘œì‹œí•˜ë„ë¡ í• ìˆ˜ 있습니다. ë‘ í”„ëž˜ê·¸ë¨¼íŠ¸ ëª¨ë‘ +한 액티비티ì—서 양쪽으로 나란히 나타나며, ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ë‚˜ë¦„ì˜ ìˆ˜ëª… 주기 콜백 메서드가 ìžˆê³ +ê°ìž ì‚¬ìš©ìž ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ 따로 처리하게 ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 사용ìžëŠ” 기사를 ì„ íƒí•˜ëŠ” ë° í•œ 액티비티를 ì“°ê³ +기사를 ì½ëŠ” ë° ë˜ ë‹¤ë¥¸ 액티비티를 ì„ íƒí•˜ëŠ” ëŒ€ì‹ ì— ê°™ì€ ì•¡í‹°ë¹„í‹° 안ì—서 기사를 ì„ íƒí•˜ê³ ì½ëŠ” ê³¼ì •ì„ ëª¨ë‘ ë낼 수 있는 것입니다. ì´ê²ƒì€ 그림 1ì— ë‚˜íƒ€ë‚¸ 태블릿 ë ˆì´ì•„웃과 같습니다.</p> -<p>프래그먼트를 ë””ìžì¸í• 때ì—는 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 모듈ì‹ì´ë©° 재사용 가능한 액티비티 구성 요소로 만들어야 합니다. -다시 ë§í•´, ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ë‚˜ë¦„ì˜ ë ˆì´ì•„ì›ƒì„ ë”°ë¡œ ì •ì˜í•˜ê³ ìžê¸°ë§Œì˜ 수명 주기 콜백으로 ìžê¸° ë‚˜ë¦„ì˜ ë™ìž‘ì„ ì •ì˜í•˜ê¸° ë•Œë¬¸ì— -한 프래그먼트를 여러 ì•¡í‹°ë¹„í‹°ì— í¬í•¨ì‹œí‚¬ 수 있습니다. 그러므로 ìž¬ì‚¬ìš©ì„ ì—¼ë‘ì— ë‘ê³ ë””ìžì¸í•˜ë©° -한 프래그먼트를 ë˜ ë‹¤ë¥¸ 프래그먼트로부터 ì§ì ‘ 조작하는 ê²ƒì€ ì‚¼ê°€ì•¼ 합니다. ì´ê²ƒì€ 특히 ëª¨ë“ˆì‹ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하면 -프래그먼트 ì¡°í•©ì„ ì—¬ëŸ¬ 가지 화면 í¬ê¸°ì— ë§žì¶° ë³€ê²½í• ìˆ˜ 있ë„ë¡ í•´ì£¼ê¸° ë•Œë¬¸ì— ì¤‘ìš”í•œ ìš”ì 입니다. 태블릿과 í•¸ë“œì…‹ì„ ëª¨ë‘ ì§€ì›í•˜ëŠ” -ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë””ìžì¸í•˜ëŠ” 경우, 사용 가능한 화면 ê³µê°„ì„ í† ëŒ€ë¡œ ì‚¬ìš©ìž ê²½í—˜ì„ ìµœì 화하ë„ë¡ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ -여러 ë ˆì´ì•„웃 êµ¬ì„±ì— ìž¬ì‚¬ìš©í• ìˆ˜ 있습니다. 예를 들어 핸드셋ì—ì„œì˜ ê²½ìš° -프래그먼트를 분리해서 ë‹¨ì¼ ì°½ UI를 ì œê³µí•˜ë„ë¡ í•´ì•¼í• ìˆ˜ 있습니다. ê°™ì€ ì•¡í‹°ë¹„í‹° ì•ˆì— í•˜ë‚˜ ì´ìƒì´ 들어가지 ì•Šì„ ìˆ˜ +<p>프래그먼트를 ë””ìžì¸í• 때ì—는 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 모듈ì‹ì´ë©° 재사용 가능한 액티비티 구성 요소로 만들어야 합니다. +다시 ë§í•´, ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ë‚˜ë¦„ì˜ ë ˆì´ì•„ì›ƒì„ ë”°ë¡œ ì •ì˜í•˜ê³ ìžê¸°ë§Œì˜ 수명 주기 콜백으로 ìžê¸° ë‚˜ë¦„ì˜ ë™ìž‘ì„ ì •ì˜í•˜ê¸° ë•Œë¬¸ì— +한 프래그먼트를 여러 ì•¡í‹°ë¹„í‹°ì— í¬í•¨ì‹œí‚¬ 수 있습니다. 그러므로 ìž¬ì‚¬ìš©ì„ ì—¼ë‘ì— ë‘ê³ ë””ìžì¸í•˜ë©° +한 프래그먼트를 ë˜ ë‹¤ë¥¸ 프래그먼트로부터 ì§ì ‘ 조작하는 ê²ƒì€ ì‚¼ê°€ì•¼ 합니다. ì´ê²ƒì€ 특히 ëª¨ë“ˆì‹ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하면 +프래그먼트 ì¡°í•©ì„ ì—¬ëŸ¬ 가지 화면 í¬ê¸°ì— ë§žì¶° ë³€ê²½í• ìˆ˜ 있ë„ë¡ í•´ì£¼ê¸° ë•Œë¬¸ì— ì¤‘ìš”í•œ ìš”ì 입니다. 태블릿과 í•¸ë“œì…‹ì„ ëª¨ë‘ ì§€ì›í•˜ëŠ” +ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë””ìžì¸í•˜ëŠ” 경우, 사용 가능한 화면 ê³µê°„ì„ í† ëŒ€ë¡œ ì‚¬ìš©ìž ê²½í—˜ì„ ìµœì 화하ë„ë¡ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ +여러 ë ˆì´ì•„웃 êµ¬ì„±ì— ìž¬ì‚¬ìš©í• ìˆ˜ 있습니다. 예를 들어 핸드셋ì—ì„œì˜ ê²½ìš° +프래그먼트를 분리해서 ë‹¨ì¼ ì°½ UI를 ì œê³µí•˜ë„ë¡ í•´ì•¼í• ìˆ˜ 있습니다. ê°™ì€ ì•¡í‹°ë¹„í‹° ì•ˆì— í•˜ë‚˜ ì´ìƒì´ 들어가지 ì•Šì„ ìˆ˜ 있기 때문입니다.</p> <img src="{@docRoot}images/fundamentals/fragments.png" alt="" /> -<p class="img-caption"><strong>그림 1.</strong> 프래그먼트가 ì •ì˜í•œ ë‘ ê°€ì§€ UI ëª¨ë“ˆì´ -태블릿 ë””ìžì¸ì—서는 í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ë¡œ ì¡°í•©ë 수 있는 반면 핸드셋 ë””ìžì¸ì—서는 분리ë 수 있다는 ê²ƒì„ +<p class="img-caption"><strong>그림 1.</strong> 프래그먼트가 ì •ì˜í•œ ë‘ ê°€ì§€ UI ëª¨ë“ˆì´ +태블릿 ë””ìžì¸ì—서는 í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ë¡œ ì¡°í•©ë 수 있는 반면 핸드셋 ë””ìžì¸ì—서는 분리ë 수 있다는 ê²ƒì„ ì˜ˆì‹œë¡œ 나타낸 것입니다.</p> -<p>예를 들어—뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ 예시를 ê³„ì† ì‚¬ìš©í•˜ê² ìŠµë‹ˆë‹¤—ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 태블릿 í¬ê¸°ì˜ 기기ì—서 실행하는 경우, -ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ <em>액티비티 A</em> ì•ˆì— ë‘ ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ í¬í•¨ì‹œí‚¬ 수 있습니다. 그러나 -핸드셋 í¬ê¸°ì˜ 화면ì—서ë¼ë©´ ë‘ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ëª¨ë‘ ì“¸ ë§Œí¼ ê³µê°„ì´ ì¶©ë¶„ì¹˜ 않습니다. -ë”°ë¼ì„œ <em>액티비티 A</em>ì—는 기사 목ë¡ì— 해당ë˜ëŠ” 프래그먼트만 í¬í•¨í•˜ê³ , 사용ìžê°€ 기사를 하나 ì„ íƒí•˜ë©´ ì´ê²ƒì´ -<em>액티비티 B</em>를 시작합니다. ì—¬ê¸°ì— ê¸°ì‚¬ë¥¼ ì½ì„ ë‘ ë²ˆì§¸ 프래그먼트가 í¬í•¨ë˜ì–´ 있습니다. ë”°ë¼ì„œ ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ -서로 다른 조합으로 프래그먼트를 ìž¬ì‚¬ìš©í•¨ìœ¼ë¡œì¨ íƒœë¸”ë¦¿ê³¼ í•¸ë“œì…‹ì„ ë‘˜ 다 ì§€ì›í•˜ëŠ” +<p>예를 들어—뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ 예시를 ê³„ì† ì‚¬ìš©í•˜ê² ìŠµë‹ˆë‹¤—ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 태블릿 í¬ê¸°ì˜ 기기ì—서 실행하는 경우, +ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ <em>액티비티 A</em> ì•ˆì— ë‘ ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ í¬í•¨ì‹œí‚¬ 수 있습니다. 그러나 +핸드셋 í¬ê¸°ì˜ 화면ì—서ë¼ë©´ ë‘ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ëª¨ë‘ ì“¸ ë§Œí¼ ê³µê°„ì´ ì¶©ë¶„ì¹˜ 않습니다. +ë”°ë¼ì„œ <em>액티비티 A</em>ì—는 기사 목ë¡ì— 해당ë˜ëŠ” 프래그먼트만 í¬í•¨í•˜ê³ , 사용ìžê°€ 기사를 하나 ì„ íƒí•˜ë©´ ì´ê²ƒì´ +<em>액티비티 B</em>를 시작합니다. ì—¬ê¸°ì— ê¸°ì‚¬ë¥¼ ì½ì„ ë‘ ë²ˆì§¸ 프래그먼트가 í¬í•¨ë˜ì–´ 있습니다. ë”°ë¼ì„œ ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +서로 다른 조합으로 프래그먼트를 ìž¬ì‚¬ìš©í•¨ìœ¼ë¡œì¨ íƒœë¸”ë¦¿ê³¼ í•¸ë“œì…‹ì„ ë‘˜ 다 ì§€ì›í•˜ëŠ” 것입니다(그림 1 참조).</p> -<p>여러 가지 화면 êµ¬ì„±ì— ë§žê²Œ 여러 가지 프래그먼트 조합으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë””ìžì¸í•˜ëŠ” ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +<p>여러 가지 화면 êµ¬ì„±ì— ë§žê²Œ 여러 가지 프래그먼트 조합으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë””ìžì¸í•˜ëŠ” ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 ë° í•¸ë“œì…‹ ì§€ì›</a>ì— ëŒ€í•œ ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> @@ -132,36 +132,36 @@ android.view.ViewGroup} ì•ˆì— ì‚´ë©°, 해당 프래그먼트가 ìžì‹ ì˜ ë³´ê¸ </div> <p>프래그먼트를 ìƒì„±í•˜ë ¤ë©´ {@link android.app.Fragment}ì˜ í•˜ìœ„ í´ëž˜ìФ(ë˜ëŠ” ì´ì˜ 기존 -하위 í´ëž˜ìФ)를 ìƒì„±í•´ì•¼ 합니다. {@link android.app.Fragment} í´ëž˜ìФì—는 -{@link android.app.Activity}와 아주 ìœ ì‚¬í•´ ë³´ì´ëŠ” 코드가 있습니다. 여기ì—는 액티비티와 비슷한 콜백 메서드가 들어 있습니다. +하위 í´ëž˜ìФ)를 ìƒì„±í•´ì•¼ 합니다. {@link android.app.Fragment} í´ëž˜ìФì—는 +{@link android.app.Activity}와 아주 ìœ ì‚¬í•´ ë³´ì´ëŠ” 코드가 있습니다. 여기ì—는 액티비티와 비슷한 콜백 메서드가 들어 있습니다. 예를 들어 {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()}, -{@link android.app.Fragment#onPause onPause()} ë° {@link android.app.Fragment#onStop onStop()} 등입니다. 사실, -기존 Android ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 변환하여 프래그먼트를 사용하ë„ë¡ í•˜ë ¤ë©´ ê·¸ì € -ì•¡í‹°ë¹„í‹°ì˜ ì½œë°± 메서드ì—서 í”„ëž˜ê·¸ë¨¼íŠ¸ì— í•´ë‹¹ë˜ëŠ” 콜백 메서드로 코드를 옮기기만 하면 +{@link android.app.Fragment#onPause onPause()} ë° {@link android.app.Fragment#onStop onStop()} 등입니다. 사실, +기존 Android ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 변환하여 프래그먼트를 사용하ë„ë¡ í•˜ë ¤ë©´ ê·¸ì € +ì•¡í‹°ë¹„í‹°ì˜ ì½œë°± 메서드ì—서 í”„ëž˜ê·¸ë¨¼íŠ¸ì— í•´ë‹¹ë˜ëŠ” 콜백 메서드로 코드를 옮기기만 하면 ë ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> <p>ë³´í†µì€ ìµœì†Œí•œ 다ìŒê³¼ ê°™ì€ ìˆ˜ëª… 주기 메서드를 구현해야 합니다.</p> <dl> <dt>{@link android.app.Fragment#onCreate onCreate()}</dt> - <dd>ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ìƒì„±í• 때 ì´ê²ƒì„ 호출합니다. 구현 ë‚´ì—서 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê¸°ë³¸ 구성 요소 중 -프래그먼트가 ì¼ì‹œì •ì§€ë˜ê±°ë‚˜ 중단ë˜ì—ˆë‹¤ê°€ 재개ë˜ì—ˆì„ 때 ìœ ì§€í•˜ê³ ìž í•˜ëŠ” ê²ƒì„ + <dd>ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ìƒì„±í• 때 ì´ê²ƒì„ 호출합니다. 구현 ë‚´ì—서 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê¸°ë³¸ 구성 요소 중 +프래그먼트가 ì¼ì‹œì •ì§€ë˜ê±°ë‚˜ 중단ë˜ì—ˆë‹¤ê°€ 재개ë˜ì—ˆì„ 때 ìœ ì§€í•˜ê³ ìž í•˜ëŠ” ê²ƒì„ ì´ˆê¸°í™”í•´ì•¼ 합니다.</dd> <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt> - <dd>ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ìžì‹ ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 처ìŒìœ¼ë¡œ 그릴 ì‹œê°„ì´ ë˜ë©´ -ì´ê²ƒì„ 호출합니다. í”„ëž˜ê·¸ë¨¼íŠ¸ì— ë§žëŠ” UI를 ê·¸ë¦¬ë ¤ë©´ 메서드ì—서 {@link android.view.View}를 반환해야 합니다. -ì´ ë©”ì„œë“œëŠ” 프래그먼트 ë ˆì´ì•„ì›ƒì˜ ë£¨íŠ¸ìž…ë‹ˆë‹¤. 프래그먼트가 UI를 ì œê³µí•˜ì§€ 않는 경우 nullì„ ë°˜í™˜í•˜ë©´ + <dd>ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ìžì‹ ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 처ìŒìœ¼ë¡œ 그릴 ì‹œê°„ì´ ë˜ë©´ +ì´ê²ƒì„ 호출합니다. í”„ëž˜ê·¸ë¨¼íŠ¸ì— ë§žëŠ” UI를 ê·¸ë¦¬ë ¤ë©´ 메서드ì—서 {@link android.view.View}를 반환해야 합니다. +ì´ ë©”ì„œë“œëŠ” 프래그먼트 ë ˆì´ì•„ì›ƒì˜ ë£¨íŠ¸ìž…ë‹ˆë‹¤. 프래그먼트가 UI를 ì œê³µí•˜ì§€ 않는 경우 nullì„ ë°˜í™˜í•˜ë©´ ë©ë‹ˆë‹¤.</dd> <dt>{@link android.app.Activity#onPause onPause()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì‚¬ìš©ìžê°€ 프래그먼트를 ë– ë‚œë‹¤ëŠ” -첫 번째 ì‹ í˜¸ìž…ë‹ˆë‹¤(다만 ì´ê²ƒì´ í•ìƒ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 소멸 중ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤). 현재 ì‚¬ìš©ìž ì„¸ì…˜ì„ ë„˜ì–´ì„œ -ì§€ì†ë˜ì–´ì•¼ 하는 변경 사í•ì„ ì»¤ë°‹í•˜ë ¤ë©´ 보통 ì´ê³³ì—서 í•´ì•„ 합니다(사용ìžê°€ + <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì‚¬ìš©ìžê°€ 프래그먼트를 ë– ë‚œë‹¤ëŠ” +첫 번째 ì‹ í˜¸ìž…ë‹ˆë‹¤(다만 ì´ê²ƒì´ í•ìƒ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 소멸 중ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤). 현재 ì‚¬ìš©ìž ì„¸ì…˜ì„ ë„˜ì–´ì„œ +ì§€ì†ë˜ì–´ì•¼ 하는 변경 사í•ì„ ì»¤ë°‹í•˜ë ¤ë©´ 보통 ì´ê³³ì—서 í•´ì•„ 합니다(사용ìžê°€ ëŒì•„오지 ì•Šì„ ìˆ˜ 있기 때문입니다).</dd> </dl> -<p>ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ê°ê°ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 최소한 세 개씩 -구현해야 하지만, 프래그먼트 수명 ì£¼ê¸°ì˜ ì—¬ëŸ¬ 단계를 ì²˜ë¦¬í•˜ë ¤ë©´ 사용해야 하는 다른 콜백 ë©”ì„œë“œë„ -ë§Žì´ ìžˆìŠµë‹ˆë‹¤. ëª¨ë“ ìˆ˜ëª… 주기 콜백 메서드는 ë‚˜ì¤‘ì— +<p>ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ê°ê°ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 최소한 세 개씩 +구현해야 하지만, 프래그먼트 수명 ì£¼ê¸°ì˜ ì—¬ëŸ¬ 단계를 ì²˜ë¦¬í•˜ë ¤ë©´ 사용해야 하는 다른 콜백 ë©”ì„œë“œë„ +ë§Žì´ ìžˆìŠµë‹ˆë‹¤. ëª¨ë“ ìˆ˜ëª… 주기 콜백 메서드는 ë‚˜ì¤‘ì— <a href="#Lifecycle">프래그먼트 수명 주기 처리</a> 섹션ì—서 ë”ìš± ìƒì„¸ížˆ ë…¼ì˜í• 것입니다.</p> @@ -170,45 +170,45 @@ android.app.Fragment} í´ëž˜ìФ ëŒ€ì‹ í™•ìž¥í•˜ê³ ìž í•˜ëŠ” 하위 í´ëž˜ìФë <dl> <dt>{@link android.app.DialogFragment}</dt> - <dd>ë¶€ë™ ëŒ€í™” ì°½ì„ í‘œì‹œí•©ë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ 사용하여 대화를 ìƒì„±í•˜ë©´ -{@link android.app.Activity} í´ëž˜ìŠ¤ì˜ ëŒ€í™” ë„우미 메서드를 사용하는 ê²ƒì˜ -ì¢‹ì€ ëŒ€ì•ˆì±…ì´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 프래그먼트 대화를 액티비티가 관리하는 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ë°± 스íƒì— 통합시킬 수 있어, + <dd>ë¶€ë™ ëŒ€í™” ì°½ì„ í‘œì‹œí•©ë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ 사용하여 대화를 ìƒì„±í•˜ë©´ +{@link android.app.Activity} í´ëž˜ìŠ¤ì˜ ëŒ€í™” ë„우미 메서드를 사용하는 ê²ƒì˜ +ì¢‹ì€ ëŒ€ì•ˆì±…ì´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 프래그먼트 대화를 액티비티가 관리하는 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ë°± 스íƒì— 통합시킬 수 있어, 사용ìžê°€ ë¬´ì‹œëœ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ë°˜í™˜í• ìˆ˜ 있ë„ë¡ í•´ì£¼ê¸° 때문입니다.</dd> <dt>{@link android.app.ListFragment}</dt> <dd>어댑터가 관리하는 í•ëª©ì˜ ëª©ë¡(예: {@link -android.widget.SimpleCursorAdapter})ì„ í‘œì‹œí•˜ë©°, {@link android.app.ListActivity}와 비슷합니다. +android.widget.SimpleCursorAdapter})ì„ í‘œì‹œí•˜ë©°, {@link android.app.ListActivity}와 비슷합니다. ì´ê²ƒì€ ëª©ë¡ ë³´ê¸°ë¥¼ 관리하는 ë° ì“°ëŠ” 몇 가지 메서드를 ì œê³µí•©ë‹ˆë‹¤. 예를 들어 {@link -android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} ì½œë°±ì„ +android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} ì½œë°±ì„ ì œê³µí•˜ì—¬ í´ë¦ ì´ë²¤íŠ¸ë¥¼ 처리하는 것 등입니다.</dd> <dt>{@link android.preference.PreferenceFragment}</dt> - <dd>{@link android.preference.Preference} ê°ì²´ì˜ ê³„ì¸µì„ ëª©ë¡ìœ¼ë¡œ 표시하며, -{@link android.preference.PreferenceActivity}와 비슷합니다. ì´ê²ƒì€ + <dd>{@link android.preference.Preference} ê°ì²´ì˜ ê³„ì¸µì„ ëª©ë¡ìœ¼ë¡œ 표시하며, +{@link android.preference.PreferenceActivity}와 비슷합니다. ì´ê²ƒì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 "ì„¤ì •" 액티비티를 ìƒì„±í• 때 ìœ ìš©í•©ë‹ˆë‹¤.</dd> </dl> <h3 id="UI">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ 추가하기</h3> -<p>프래그먼트는 ì¼ë°˜ì 으로 ì•¡í‹°ë¹„í‹°ì— ì†í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ì¼ë¶€ë¶„으로 사용ë˜ë©° +<p>프래그먼트는 ì¼ë°˜ì 으로 ì•¡í‹°ë¹„í‹°ì— ì†í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ì¼ë¶€ë¶„으로 사용ë˜ë©° ìžê¸° ë‚˜ë¦„ì˜ ë ˆì´ì•„웃으로 ì•¡í‹°ë¹„í‹°ì— ì°¸ê°€í•©ë‹ˆë‹¤.</p> <p>í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ë ¤ë©´ 반드시 {@link -android.app.Fragment#onCreateView onCreateView()} 콜백 메서드를 구현해야 합니다. -ì´ê²ƒì€ 프래그먼트가 ìžì‹ ì˜ ë ˆì´ì•„ì›ƒì„ ê·¸ë¦´ 때가 ë˜ë©´ Android ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 것입니다. ì´ ë©”ì„œë“œì˜ êµ¬í˜„ì€ ë°˜ë“œì‹œ +android.app.Fragment#onCreateView onCreateView()} 콜백 메서드를 구현해야 합니다. +ì´ê²ƒì€ 프래그먼트가 ìžì‹ ì˜ ë ˆì´ì•„ì›ƒì„ ê·¸ë¦´ 때가 ë˜ë©´ Android ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 것입니다. ì´ ë©”ì„œë“œì˜ êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.view.View}를 반환해야 합니다. ì´ê²ƒì€ 프래그먼트 ë ˆì´ì•„ì›ƒì˜ ë£¨íŠ¸ìž…ë‹ˆë‹¤.</p> <p class="note"><strong>ì°¸ê³ :</strong> 프래그먼트가 {@link -android.app.ListFragment}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ì¸ ê²½ìš°, 기본 êµ¬í˜„ì´ +android.app.ListFragment}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ì¸ ê²½ìš°, 기본 êµ¬í˜„ì´ {@link android.app.Fragment#onCreateView onCreateView()}로부터 {@link android.widget.ListView}를 반환하므로 ì´ë¥¼ 구현하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤.</p> <p>{@link -android.app.Fragment#onCreateView onCreateView()}로부터 ë ˆì´ì•„ì›ƒì„ ë°˜í™˜í•˜ë ¤ë©´ ì´ë¥¼ XMLì—서 ì •ì˜ëœ <a href="{@docRoot}guide/topics/resources/layout-resource.html">ë ˆì´ì•„웃 리소스</a>로부터 팽창시키면 ë©ë‹ˆë‹¤. ì´ë¥¼ ë•기 위해 -{@link android.app.Fragment#onCreateView onCreateView()}ê°€ +android.app.Fragment#onCreateView onCreateView()}로부터 ë ˆì´ì•„ì›ƒì„ ë°˜í™˜í•˜ë ¤ë©´ ì´ë¥¼ XMLì—서 ì •ì˜ëœ <a href="{@docRoot}guide/topics/resources/layout-resource.html">ë ˆì´ì•„웃 리소스</a>로부터 팽창시키면 ë©ë‹ˆë‹¤. ì´ë¥¼ ë•기 위해 +{@link android.app.Fragment#onCreateView onCreateView()}ê°€ {@link android.view.LayoutInflater} ê°ì²´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>예를 들어 다ìŒì€ {@link android.app.Fragment}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ê²ƒì´ +<p>예를 들어 다ìŒì€ {@link android.app.Fragment}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ê²ƒì´ {@code example_fragment.xml} 파ì¼ë¡œë¶€í„° ë ˆì´ì•„ì›ƒì„ ë¡œë”©í•©ë‹ˆë‹¤.</p> <pre> @@ -225,49 +225,49 @@ public static class ExampleFragment extends Fragment { <div class="sidebox-wrapper"> <div class="sidebox"> <h3>ë ˆì´ì•„웃 ìƒì„±</h3> - <p>ìœ„ì˜ ìƒ˜í”Œì—서 {@code R.layout.example_fragment}는 -ì• í”Œë¦¬ì¼€ì´ì…˜ ë¦¬ì†ŒìŠ¤ì— ì €ìž¥ëœ {@code example_fragment.xml}ì´ë¼ëŠ” ë ˆì´ì•„웃 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ 참조입니다. ë ˆì´ì•„ì›ƒì„ + <p>ìœ„ì˜ ìƒ˜í”Œì—서 {@code R.layout.example_fragment}는 +ì• í”Œë¦¬ì¼€ì´ì…˜ ë¦¬ì†ŒìŠ¤ì— ì €ìž¥ëœ {@code example_fragment.xml}ì´ë¼ëŠ” ë ˆì´ì•„웃 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ 참조입니다. ë ˆì´ì•„ì›ƒì„ XML로 ìƒì„±í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/index.html">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ</a> 문서를 참조하ì‹ì‹œì˜¤.</p> </div> </div> <p>{@link android.app.Fragment#onCreateView -onCreateView()}로 ì „ë‹¬ëœ {@code container} 매개변수가 ìƒìœ„ {@link android.view.ViewGroup}ì´ë©°(ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„웃으로부터), +onCreateView()}로 ì „ë‹¬ëœ {@code container} 매개변수가 ìƒìœ„ {@link android.view.ViewGroup}ì´ë©°(ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„웃으로부터), ì´ ì•ˆì— í”„ëž˜ê·¸ë¨¼íŠ¸ ë ˆì´ì•„ì›ƒì´ ì‚½ìž…ë©ë‹ˆë‹¤. - {@code savedInstanceState} 매개변수는 ì¼ì¢…ì˜ {@link android.os.Bundle}로, -ì´ê²ƒì€ 프래그먼트가 재개ë˜ëŠ” ì¤‘ì¸ ê²½ìš° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ì´ì „ ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•œ ë°ì´í„°ë¥¼ -ì œê³µí•©ë‹ˆë‹¤(ìƒíƒœë¥¼ ë³µì›í•˜ëŠ” ê²ƒì€ <a href="#Lifecycle">프래그먼트 수명 주기 + {@code savedInstanceState} 매개변수는 ì¼ì¢…ì˜ {@link android.os.Bundle}로, +ì´ê²ƒì€ 프래그먼트가 재개ë˜ëŠ” ì¤‘ì¸ ê²½ìš° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ì´ì „ ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•œ ë°ì´í„°ë¥¼ +ì œê³µí•©ë‹ˆë‹¤(ìƒíƒœë¥¼ ë³µì›í•˜ëŠ” ê²ƒì€ <a href="#Lifecycle">프래그먼트 수명 주기 처리</a>ì—서 좀 ë” ë…¼ì˜í•©ë‹ˆë‹¤).</p> -<p>{@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} 메서드는 +<p>{@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} 메서드는 다ìŒê³¼ ê°™ì€ ì„¸ ê°œì˜ ì¸ìˆ˜ë¥¼ 취합니다.</p> <ul> <li>íŒ½ì°½ì‹œí‚¤ê³ ìž í•˜ëŠ” ë ˆì´ì•„ì›ƒì˜ ë¦¬ì†ŒìŠ¤ ID.</li> <li>íŒ½ì°½ëœ ë ˆì´ì•„ì›ƒì˜ ìƒìœ„ê°€ ë {@link android.view.ViewGroup}. {@code -container}를 ì „ë‹¬í•´ì•¼ ì‹œìŠ¤í…œì´ ë ˆì´ì•„웃 매개변수를 íŒ½ì°½ëœ ë ˆì´ì•„ì›ƒì˜ ë£¨íŠ¸ ë³´ê¸°ì— ì‹¤í–‰ ì¤‘ì¸ ìƒìœ„ 보기ì—서 ì§€ì •í•œ 것과 ê°™ì´ +container}를 ì „ë‹¬í•´ì•¼ ì‹œìŠ¤í…œì´ ë ˆì´ì•„웃 매개변수를 íŒ½ì°½ëœ ë ˆì´ì•„ì›ƒì˜ ë£¨íŠ¸ ë³´ê¸°ì— ì‹¤í–‰ ì¤‘ì¸ ìƒìœ„ 보기ì—서 ì§€ì •í•œ 것과 ê°™ì´ ì ìš©í• ìˆ˜ 있으므로 ì´ëŠ” 중요한 부분입니다.</li> <li>íŒ½ì°½ëœ ë ˆì´ì•„ì›ƒì´ íŒ½ì°½ ì¤‘ì— {@link -android.view.ViewGroup}(ë‘ ë²ˆì§¸ 매개변수)ì— ì²¨ë¶€ë˜ì–´ì•¼ 하는지를 나타내는 부울 ê°’ (ì´ ê²½ìš°, +android.view.ViewGroup}(ë‘ ë²ˆì§¸ 매개변수)ì— ì²¨ë¶€ë˜ì–´ì•¼ 하는지를 나타내는 부울 ê°’ (ì´ ê²½ìš°, ì´ê²ƒì€ 거짓입니다. ì‹œìŠ¤í…œì´ ì´ë¯¸ íŒ½ì°½ëœ ë ˆì´ì•„ì›ƒì„ {@code container} ì•ˆì— ì‚½ìž…í•˜ê³ ìžˆê¸° 때문입니다. ì°¸ì„ ì „ë‹¬í•˜ë©´ 최종 ë ˆì´ì•„ì›ƒì— ì¤‘ë³µëœ ë³´ê¸° ê·¸ë£¹ì„ ìƒì„±í•˜ê²Œ ë©ë‹ˆë‹¤).</li> </ul> -<p>ì´ì œ ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ëŠ” 프래그먼트 ìƒì„±í•˜ëŠ” ë²•ì„ ì•Œê²Œ ë˜ì…¨ìŠµë‹ˆë‹¤. 다ìŒì€ 프래그먼트를 +<p>ì´ì œ ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ëŠ” 프래그먼트 ìƒì„±í•˜ëŠ” ë²•ì„ ì•Œê²Œ ë˜ì…¨ìŠµë‹ˆë‹¤. 다ìŒì€ 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•´ì•¼ 합니다.</p> <h3 id="Adding">ì•¡í‹°ë¹„í‹°ì— í”„ëž˜ê·¸ë¨¼íŠ¸ 추가</h3> -<p>프래그먼트는 보통 UIì˜ ì¼ë¶€ë¶„으로 호스트 ì•¡í‹°ë¹„í‹°ì— ì°¸ê°€í•©ë‹ˆë‹¤. ì´ëŠ” 해당 ì•¡í‹°ë¹„í‹°ì˜ -ì „ë°˜ì ì¸ ë³´ê¸° ê³„ì¸µì˜ ì¼ë¶€ë¶„으로 í¬í•¨ë˜ê²Œ ë©ë‹ˆë‹¤. 프래그먼트를 액티비티 ë ˆì´ì•„ì›ƒì— ì¶”ê°€í•˜ëŠ” ë°ì—는 ë‘ ê°€ì§€ ë°©ë²•ì´ +<p>프래그먼트는 보통 UIì˜ ì¼ë¶€ë¶„으로 호스트 ì•¡í‹°ë¹„í‹°ì— ì°¸ê°€í•©ë‹ˆë‹¤. ì´ëŠ” 해당 ì•¡í‹°ë¹„í‹°ì˜ +ì „ë°˜ì ì¸ ë³´ê¸° ê³„ì¸µì˜ ì¼ë¶€ë¶„으로 í¬í•¨ë˜ê²Œ ë©ë‹ˆë‹¤. 프래그먼트를 액티비티 ë ˆì´ì•„ì›ƒì— ì¶”ê°€í•˜ëŠ” ë°ì—는 ë‘ ê°€ì§€ ë°©ë²•ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ul> <li><b>프래그먼트를 ì•¡í‹°ë¹„í‹°ì˜ ë ˆì´ì•„웃 íŒŒì¼ ì•ˆì—서 ì„ ì–¸í•©ë‹ˆë‹¤.</b> -<p>ì´ ê²½ìš°, í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ ë ˆì´ì•„웃 ì†ì„±ì„ 마치 -ë³´ê¸°ì¸ ê²ƒì²˜ëŸ¼ 나타낼 수 있습니다. 예를 들어 다ìŒì€ 프래그먼트가 ë‘ ê°œ 있는 +<p>ì´ ê²½ìš°, í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ ë ˆì´ì•„웃 ì†ì„±ì„ 마치 +ë³´ê¸°ì¸ ê²ƒì²˜ëŸ¼ 나타낼 수 있습니다. 예를 들어 다ìŒì€ 프래그먼트가 ë‘ ê°œ 있는 한 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ë ˆì´ì•„웃 파ì¼ì„ 나타낸 것입니다.</p> <pre> <?xml version="1.0" encoding="utf-8"?> @@ -290,31 +290,31 @@ container} ì•ˆì— ì‚½ìž…í•˜ê³ ìžˆê¸° 때문입니다. ì°¸ì„ ì „ë‹¬í•˜ë©´ ìµœì¢ <p>{@code <fragment>} ì•ˆì˜ {@code android:name} ì†ì„±ì´ ë ˆì´ì•„웃 안ì—서 ì¸ìŠ¤í„´íŠ¸í™”í• {@link android.app.Fragment} í´ëž˜ìŠ¤ë¥¼ 나타냅니다.</p> -<p>ì‹œìŠ¤í…œì€ ì´ ì•¡í‹°ë¹„í‹° ë ˆì´ì•„ì›ƒì„ ìƒì„±í• 때 ë ˆì´ì•„웃ì—서 ì§€ì •ëœ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ë©° ê°ê°ì— 대해 -{@link android.app.Fragment#onCreateView onCreateView()} 메서드를 -호출하여 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ë ˆì´ì•„ì›ƒì„ ê²€ìƒ‰í•©ë‹ˆë‹¤. ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 반환한 {@link android.view.View}를 +<p>ì‹œìŠ¤í…œì€ ì´ ì•¡í‹°ë¹„í‹° ë ˆì´ì•„ì›ƒì„ ìƒì„±í• 때 ë ˆì´ì•„웃ì—서 ì§€ì •ëœ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ë©° ê°ê°ì— 대해 +{@link android.app.Fragment#onCreateView onCreateView()} 메서드를 +호출하여 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ë ˆì´ì•„ì›ƒì„ ê²€ìƒ‰í•©ë‹ˆë‹¤. ì‹œìŠ¤í…œì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 반환한 {@link android.view.View}를 {@code <fragment>} 요소 ìžë¦¬ì— 곧바로 삽입합니다.</p> <div class="note"> - <p><strong>ì°¸ê³ :</strong> ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì—는 액티비티가 재시작ë˜ëŠ” 경우 -프래그먼트를 복구하기 위해 ì‹œìŠ¤í…œì´ ì‚¬ìš©í• ìˆ˜ 있는 ê³ ìœ í•œ ì‹ë³„ìžê°€ 필요합니다(ê·¸ë¦¬ê³ , 개발ìžëŠ” ì´ê²ƒì„ 사용하여 프래그먼트를 캡처해 -ì´ë¥¼ ì œê±°í•˜ëŠ” 등 여러 가지 트랜ìžì…˜ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다). í”„ëž˜ê·¸ë¨¼íŠ¸ì— ID를 ì œê³µí•˜ëŠ” ë°ì—는 + <p><strong>ì°¸ê³ :</strong> ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì—는 액티비티가 재시작ë˜ëŠ” 경우 +프래그먼트를 복구하기 위해 ì‹œìŠ¤í…œì´ ì‚¬ìš©í• ìˆ˜ 있는 ê³ ìœ í•œ ì‹ë³„ìžê°€ 필요합니다(ê·¸ë¦¬ê³ , 개발ìžëŠ” ì´ê²ƒì„ 사용하여 프래그먼트를 캡처해 +ì´ë¥¼ ì œê±°í•˜ëŠ” 등 여러 가지 트랜ìžì…˜ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다). í”„ëž˜ê·¸ë¨¼íŠ¸ì— ID를 ì œê³µí•˜ëŠ” ë°ì—는 다ìŒê³¼ ê°™ì€ ì„¸ 가지 ë°©ë²•ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ul> <li>ê³ ìœ í•œ ID와 함께 {@code android:id} ì†ì„±ì„ ì œê³µí•©ë‹ˆë‹¤.</li> <li>ê³ ìœ í•œ 문ìžì—´ê³¼ 함께 {@code android:tag} ì†ì„±ì„ ì œê³µí•©ë‹ˆë‹¤.</li> - <li>ìœ„ì˜ ë‘ ê°€ì§€ 중 ì–´ëŠ ê²ƒë„ ì œê³µí•˜ì§€ 않으면, ì‹œìŠ¤í…œì€ ì»¨í…Œì´ë„ˆ ë³´ê¸°ì˜ ID를 + <li>ìœ„ì˜ ë‘ ê°€ì§€ 중 ì–´ëŠ ê²ƒë„ ì œê³µí•˜ì§€ 않으면, ì‹œìŠ¤í…œì€ ì»¨í…Œì´ë„ˆ ë³´ê¸°ì˜ ID를 사용합니다.</li> </ul> </div> </li> <li><b>ë˜ëŠ”, í”„ë¡œê·¸ëž˜ë° ë°©ì‹ìœ¼ë¡œ 프래그먼트를 ê¸°ì¡´ì˜ {@link android.view.ViewGroup}ì— ì¶”ê°€í•©ë‹ˆë‹¤.</b> -<p>액티비티가 실행 ì¤‘ì¸ ë™ì•ˆì—는 ì–¸ì œë“ ì•¡í‹°ë¹„í‹° ë ˆì´ì•„ì›ƒì— í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ê·¸ì € 프래그먼트를 ë°°ì¹˜í• +<p>액티비티가 실행 ì¤‘ì¸ ë™ì•ˆì—는 ì–¸ì œë“ ì•¡í‹°ë¹„í‹° ë ˆì´ì•„ì›ƒì— í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ê·¸ì € 프래그먼트를 ë°°ì¹˜í• {@link android.view.ViewGroup}를 ì§€ì •í•˜ê¸°ë§Œ 하면 ë©ë‹ˆë‹¤.</p> - <p>액티비티 ë‚´ì—서 프래그먼트 트랜ìžì…˜ì„ ìˆ˜í–‰í•˜ë ¤ë©´(프래그먼트 추가, ì œê±° ë˜ëŠ” -êµì²´ 등), {@link android.app.FragmentTransaction}ì—서 ê°€ì ¸ì˜¨ API를 사용해야 합니다. + <p>액티비티 ë‚´ì—서 프래그먼트 트랜ìžì…˜ì„ ìˆ˜í–‰í•˜ë ¤ë©´(프래그먼트 추가, ì œê±° ë˜ëŠ” +êµì²´ 등), {@link android.app.FragmentTransaction}ì—서 ê°€ì ¸ì˜¨ API를 사용해야 합니다. {@link android.app.FragmentTransaction}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ {@link android.app.Activity}ì—서 ê°€ì ¸ì˜¤ëŠ” ë°©ë²•ì€ ë‹¤ìŒê³¼ 같습니다.</p> <pre> @@ -323,7 +323,7 @@ FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.Fra </pre> <p>그런 ë‹¤ìŒ {@link -android.app.FragmentTransaction#add(int,Fragment) add()} 메서드를 사용하여 프래그먼트를 ì¶”ê°€í•˜ê³ , ì¶”ê°€í• í”„ëž˜ê·¸ë¨¼íŠ¸ì™€ ì´ë¥¼ ì‚½ìž…í• +android.app.FragmentTransaction#add(int,Fragment) add()} 메서드를 사용하여 프래그먼트를 ì¶”ê°€í•˜ê³ , ì¶”ê°€í• í”„ëž˜ê·¸ë¨¼íŠ¸ì™€ ì´ë¥¼ ì‚½ìž…í• ë³´ê¸°ë¥¼ ì§€ì •í•˜ë©´ ë©ë‹ˆë‹¤. 예:</p> <pre> @@ -332,11 +332,11 @@ fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); </pre> - <p>{@link android.app.FragmentTransaction#add(int,Fragment) add()}ì— -ì „ë‹¬ë˜ëŠ” 첫 ì¸ìˆ˜ê°€ {@link android.view.ViewGroup}입니다. + <p>{@link android.app.FragmentTransaction#add(int,Fragment) add()}ì— +ì „ë‹¬ë˜ëŠ” 첫 ì¸ìˆ˜ê°€ {@link android.view.ViewGroup}입니다. ì—¬ê¸°ì— í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 리소스 IDê°€ ì§€ì •í•œ 바와 ê°™ì´ ë°°ì¹˜ë˜ì–´ì•¼ 하며, ë‘ ë²ˆì§¸ 매개변수는 ì¶”ê°€í• í”„ëž˜ê·¸ë¨¼íŠ¸ìž…ë‹ˆë‹¤.</p> <p> -{@link android.app.FragmentTransaction}ì„ ë³€ê²½í•˜ê³ ë‚˜ë©´, 반드시 +{@link android.app.FragmentTransaction}ì„ ë³€ê²½í•˜ê³ ë‚˜ë©´, 반드시 {@link android.app.FragmentTransaction#commit}ì„ í˜¸ì¶œí•´ì•¼ 변경 ë‚´ìš©ì´ ì ìš©ë©ë‹ˆë‹¤.</p> </li> </ul> @@ -344,41 +344,41 @@ fragmentTransaction.commit(); <h4 id="AddingWithoutUI">UI ì—†ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ 추가</h4> -<p>ìœ„ì˜ ì˜ˆì‹œì—서는 UI를 ì œê³µí•˜ê¸° 위해 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ë“œë ¸ìŠµë‹ˆë‹¤. 하지만 -추가로 UI를 ì œì‹œí•˜ì§€ ì•Šê³ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ë°°ê²½ ë™ìž‘ì„ ì œê³µí•˜ëŠ” ë°ì—ë„ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì‚¬ìš©í• ìˆ˜ +<p>ìœ„ì˜ ì˜ˆì‹œì—서는 UI를 ì œê³µí•˜ê¸° 위해 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ë“œë ¸ìŠµë‹ˆë‹¤. 하지만 +추가로 UI를 ì œì‹œí•˜ì§€ ì•Šê³ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ë°°ê²½ ë™ìž‘ì„ ì œê³µí•˜ëŠ” ë°ì—ë„ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> <p>UI ì—†ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì¶”ê°€í•˜ë ¤ë©´ 액티비티로부터 ê°€ì ¸ì˜¨ 프래그먼트를 {@link -android.app.FragmentTransaction#add(Fragment,String)}ì„ ì‚¬ìš©í•˜ì—¬ 추가합니다(ì´ë•Œ, í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ -보기 ID보다는 ê³ ìœ í•œ 문ìžì—´ "태그"를 ì œê³µí•©ë‹ˆë‹¤). ì´ë ‡ê²Œ 하면 프래그먼트가 추가ë˜ì§€ë§Œ, +android.app.FragmentTransaction#add(Fragment,String)}ì„ ì‚¬ìš©í•˜ì—¬ 추가합니다(ì´ë•Œ, í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ +보기 ID보다는 ê³ ìœ í•œ 문ìžì—´ "태그"를 ì œê³µí•©ë‹ˆë‹¤). ì´ë ‡ê²Œ 하면 프래그먼트가 추가ë˜ì§€ë§Œ, ì´ê²ƒì€ 액티비티 ë ˆì´ì•„웃 ì•ˆì— ìžˆëŠ” 보기와 ì—°ê´€ë˜ì–´ 있지 않기 ë•Œë¬¸ì— {@link android.app.Fragment#onCreateView onCreateView()}ë¡œì˜ í˜¸ì¶œì€ ë°›ì§€ 않습니다. ë”°ë¼ì„œ ê·¸ 메서드는 구현하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤.</p> -<p>í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ 문ìžì—´ 태그를 ì œê³µí•˜ëŠ” ê²ƒì€ ì—„ë°€ížˆ ë§í•´ 비 UI 프래그먼트ì—ë§Œ 해당ë˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. UIê°€ 있는 -프래그먼트ì—ë„ ë¬¸ìžì—´ 태그를 ì œê³µí• ìˆ˜ 있습니다. 하지만 í”„ëž˜ê·¸ë¨¼íŠ¸ì— -UIê°€ 없는 경우ë¼ë©´ ì´ë¥¼ ì‹ë³„í• ë°©ë²•ì€ ë¬¸ìžì—´ 태그ë¿ìž…니다. 액티비티ì—서 ë‚˜ì¤‘ì— +<p>í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ 문ìžì—´ 태그를 ì œê³µí•˜ëŠ” ê²ƒì€ ì—„ë°€ížˆ ë§í•´ 비 UI 프래그먼트ì—ë§Œ 해당ë˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. UIê°€ 있는 +프래그먼트ì—ë„ ë¬¸ìžì—´ 태그를 ì œê³µí• ìˆ˜ 있습니다. 하지만 í”„ëž˜ê·¸ë¨¼íŠ¸ì— +UIê°€ 없는 경우ë¼ë©´ ì´ë¥¼ ì‹ë³„í• ë°©ë²•ì€ ë¬¸ìžì—´ 태그ë¿ìž…니다. 액티비티ì—서 ë‚˜ì¤‘ì— í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ê°€ì ¸ì˜¤ê³ ìž í•˜ëŠ” 경우, {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}를 사용해야 합니다.</p> <p>예를 들어 ì–´ë–¤ 액티비티ì—서 UI ì—†ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ë°°ê²½ 작업ìžë¡œ ì‚¬ìš©í•œë‹¤ê³ ê°€ì •í•´ë´…ì‹œë‹¤. ì´ê²ƒì˜ 예로 {@code -FragmentRetainInstance.java} ìƒ˜í”Œì„ ë“¤ 수 있으며 -ì´ëŠ” SDK ìƒ˜í”Œì— í¬í•¨ë˜ì–´ ìžˆê³ (Android SDK Manager를 통해 ì´ìš© 가능), 시스템ì—는 +FragmentRetainInstance.java} ìƒ˜í”Œì„ ë“¤ 수 있으며 +ì´ëŠ” SDK ìƒ˜í”Œì— í¬í•¨ë˜ì–´ ìžˆê³ (Android SDK Manager를 통해 ì´ìš© 가능), 시스템ì—는 <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>로 ì°¾ì„ ìˆ˜ 있습니다.</p> <h2 id="Managing">프래그먼트 관리</h2> -<p>액티비티 ë‚´ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ê´€ë¦¬í•˜ë ¤ë©´ {@link android.app.FragmentManager}를 사용해야 합니다. ì´ê²ƒì„ +<p>액티비티 ë‚´ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ê´€ë¦¬í•˜ë ¤ë©´ {@link android.app.FragmentManager}를 사용해야 합니다. ì´ê²ƒì„ ê°€ì ¸ì˜¤ë ¤ë©´ 액티비티ì—서 {@link android.app.Activity#getFragmentManager()}를 호출하ì‹ì‹œì˜¤.</p> <p>{@link android.app.FragmentManager}를 ê°€ì§€ê³ í• ìˆ˜ 있는 여러 가지 ì¼ ì¤‘ì— ì˜ˆë¥¼ 들면 다ìŒê³¼ 같습니다.</p> <ul> <li>액티비티 ë‚´ì— ì¡´ìž¬í•˜ëŠ” 프래그먼트를 {@link -android.app.FragmentManager#findFragmentById findFragmentById()}로 ê°€ì ¸ì˜¤ê¸°(액티비티 ë ˆì´ì•„웃 ë‚´ì—서 +android.app.FragmentManager#findFragmentById findFragmentById()}로 ê°€ì ¸ì˜¤ê¸°(액티비티 ë ˆì´ì•„웃 ë‚´ì—서 UI를 ì œê³µí•˜ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê²½ìš°) ë˜ëŠ” {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()}로 ê°€ì ¸ì˜¤ê¸°(UI를 ì œê³µí•˜ê±°ë‚˜ 하지 않는 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê²½ìš°).</li> +findFragmentByTag()}로 ê°€ì ¸ì˜¤ê¸°(UI를 ì œê³µí•˜ê±°ë‚˜ 하지 않는 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê²½ìš°).</li> <li>ë°± 스íƒì—서 프래그먼트를 {@link android.app.FragmentManager#popBackStack()}ì„ ì‚¬ìš©í•˜ì—¬ 튀어나오게 하기(사용ìžê°€ 내린 <em>뒤로</em> ëª…ë ¹ì„ ì‹œë®¬ë ˆì´íŠ¸í•¨).</li> <li>ë°± 스íƒì— 변경 ë‚´ìš©ì´ ìžˆëŠ”ì§€ 알아보기 위해 {@link @@ -388,18 +388,18 @@ android.app.FragmentManager#addOnBackStackChangedListener addOnBackStackChangedL <p>ì´ì™€ ê°™ì€ ë©”ì„œë“œì™€ ê·¸ 외 다른 ë©”ì„œë“œì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” {@link android.app.FragmentManager} í´ëž˜ìФ ê´€ë ¨ 문서를 참조하ì‹ì‹œì˜¤.</p> -<p>ì´ì „ 섹션ì—서 설명한 바와 ê°™ì´ {@link android.app.FragmentManager}를 +<p>ì´ì „ 섹션ì—서 설명한 바와 ê°™ì´ {@link android.app.FragmentManager}를 ì‚¬ìš©í•´ì„œë„ {@link android.app.FragmentTransaction} ì„ ì—´ 수 있습니다. ì´ë ‡ê²Œ 하면 프래그먼트 추가 ë° ì œê±° 등 트랜ìžì…˜ì„ ìˆ˜í–‰í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</p> <h2 id="Transactions">프래그먼트 트랜ìžì…˜ 수행</h2> -<p>액티비티ì—서 프래그먼트를 사용하는 경우 특히 ìœ ìš©í•œ ì ì€ ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì— ì‘답하여 추가, -ì œê±°, êµì²´ ë° ë‹¤ë¥¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있다는 것입니다. ì•¡í‹°ë¹„í‹°ì— ì 용한 +<p>액티비티ì—서 프래그먼트를 사용하는 경우 특히 ìœ ìš©í•œ ì ì€ ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì— ì‘답하여 추가, +ì œê±°, êµì²´ ë° ë‹¤ë¥¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있다는 것입니다. ì•¡í‹°ë¹„í‹°ì— ì 용한 변경 ë‚´ìš©ì˜ ì§‘í•©ì„ í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ì´ë¼ ì¹í•©ë‹ˆë‹¤. ì´ê²ƒì„ ìˆ˜í–‰í•˜ë ¤ë©´ {@link -android.app.FragmentTransaction} ë‚´ì˜ API를 사용하면 ë©ë‹ˆë‹¤. 해당 액티비티가 관리하는 ë°± 스íƒì— 행해진 ê° íŠ¸ëžœìžì…˜ì„ -ì €ìž¥í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 사용ìžê°€ 프래그먼트 변경 ë‚´ì—ì„ ê±°ì³ ë’¤ë¡œ íƒìƒ‰í• 수 있습니다(액티비티를 통과해 +android.app.FragmentTransaction} ë‚´ì˜ API를 사용하면 ë©ë‹ˆë‹¤. 해당 액티비티가 관리하는 ë°± 스íƒì— 행해진 ê° íŠ¸ëžœìžì…˜ì„ +ì €ìž¥í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 사용ìžê°€ 프래그먼트 변경 ë‚´ì—ì„ ê±°ì³ ë’¤ë¡œ íƒìƒ‰í• 수 있습니다(액티비티를 통과해 뒤로 íƒìƒ‰í•˜ëŠ” 것과 비슷합니다).</p> <p>{@link android.app.FragmentTransaction}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ {@link @@ -410,20 +410,20 @@ FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()}; </pre> -<p>ê° íŠ¸ëžœìžì…˜ì€ ë™ì‹œì— ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” 여러 ë³€ê²½ì„ ì§‘í•©ì 으로 ì¼ì»«ëŠ” ë§ìž…니다. 주어진 +<p>ê° íŠ¸ëžœìžì…˜ì€ ë™ì‹œì— ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” 여러 ë³€ê²½ì„ ì§‘í•©ì 으로 ì¼ì»«ëŠ” ë§ìž…니다. 주어진 트랜ìžì…˜ì— 대해 ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ëª¨ë“ ë³€ê²½ 사í•ì„ ì„¤ì •í•˜ë ¤ë©´ {@link android.app.FragmentTransaction#add add()}, {@link android.app.FragmentTransaction#remove remove()}, -ë° {@link android.app.FragmentTransaction#replace replace()}와 ê°™ì€ ë©”ì„œë“œë¥¼ 사용하면 ë©ë‹ˆë‹¤. 그런 다ìŒ, +ë° {@link android.app.FragmentTransaction#replace replace()}와 ê°™ì€ ë©”ì„œë“œë¥¼ 사용하면 ë©ë‹ˆë‹¤. 그런 다ìŒ, 트랜ìžì…˜ì„ ì•¡í‹°ë¹„í‹°ì— ì ìš©í•˜ë ¤ë©´ 반드시 {@link android.app.FragmentTransaction#commit()}ì„ í˜¸ì¶œí•´ì•¼ 합니다.</p> </dl> <p>하지만 {@link android.app.FragmentTransaction#commit()}ì„ í˜¸ì¶œí•˜ê¸° ì „ì— ë¨¼ì € 호출해야 í• ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. 바로 {@link -android.app.FragmentTransaction#addToBackStack addToBackStack()}입니다. -ì´ë ‡ê²Œ 해야 트랜ìžì…˜ì„ 프래그먼트 트랜ìžì…˜ì˜ ë°± 스íƒì— ì¶”ê°€í• ìˆ˜ 있습니다. ì´ ë°± 스íƒì„ 액티비티가 관리하며, +android.app.FragmentTransaction#addToBackStack addToBackStack()}입니다. +ì´ë ‡ê²Œ 해야 트랜ìžì…˜ì„ 프래그먼트 트랜ìžì…˜ì˜ ë°± 스íƒì— ì¶”ê°€í• ìˆ˜ 있습니다. ì´ ë°± 스íƒì„ 액티비티가 관리하며, ì´ë¥¼ 통해 사용ìžê°€ ì´ì „ 프래그먼트 ìƒíƒœë¡œ ë˜ëŒì•„ê°ˆ 수 있습니다. ì´ë•Œ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ë©ë‹ˆë‹¤.</p> -<p>예를 들어 다ìŒì€ 한 프래그먼트를 다른 것으로 êµì²´í•˜ê³ ì´ì „ ìƒíƒœë¥¼ ë°± 스íƒì— 보존하는 ë²•ì„ +<p>예를 들어 다ìŒì€ 한 프래그먼트를 다른 것으로 êµì²´í•˜ê³ ì´ì „ ìƒíƒœë¥¼ ë°± 스íƒì— 보존하는 ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> <pre> @@ -440,49 +440,49 @@ transaction.addToBackStack(null); transaction.commit(); </pre> -<p>ì´ ì˜ˆì‹œì—서 {@code newFragment}ê°€ 현재 ë ˆì´ì•„웃 컨테ì´ë„ˆì— 있는 +<p>ì´ ì˜ˆì‹œì—서 {@code newFragment}ê°€ 현재 ë ˆì´ì•„웃 컨테ì´ë„ˆì— 있는 프래그먼트(있는 경우)를 êµì²´í•©ë‹ˆë‹¤. ì´ëŠ” {@code R.id.fragment_container} ID로 ì‹ë³„í• ìˆ˜ 있습니다. {@link -android.app.FragmentTransaction#addToBackStack addToBackStack()}를 호출하면 êµì²´ 트랜ìžì…˜ì´ -ë°± 스íƒì— ì €ìž¥ë˜ê³ , ë”°ë¼ì„œ 사용ìžê°€ 트랜ìžì…˜ì„ 거꾸로 수행하여 +android.app.FragmentTransaction#addToBackStack addToBackStack()}를 호출하면 êµì²´ 트랜ìžì…˜ì´ +ë°± 스íƒì— ì €ìž¥ë˜ê³ , ë”°ë¼ì„œ 사용ìžê°€ 트랜ìžì…˜ì„ 거꾸로 수행하여 ì´ì „ 프래그먼트를 ë„로 ê°€ì ¸ì˜¬ 수 있습니다. <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤.</p> <p>트랜ìžì…˜ì— 여러 ê°œì˜ ë³€ê²½ì„ ì¶”ê°€í•˜ê³ (예를 들어 ë˜ ë‹¤ë¥¸ {@link android.app.FragmentTransaction#add add()} ë˜ëŠ” {@link android.app.FragmentTransaction#remove remove()}) {@link -android.app.FragmentTransaction#addToBackStack addToBackStack()}ì„ í˜¸ì¶œí•˜ë©´, {@link android.app.FragmentTransaction#commit commit()}ì„ í˜¸ì¶œí•˜ê¸° ì „ì— ì ìš©ëœ ëª¨ë“ ë³€ê²½ ë‚´ìš©ì´ -ë°± 스íƒì— í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 추가ë˜ë©°, <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ +android.app.FragmentTransaction#addToBackStack addToBackStack()}ì„ í˜¸ì¶œí•˜ë©´, {@link android.app.FragmentTransaction#commit commit()}ì„ í˜¸ì¶œí•˜ê¸° ì „ì— ì ìš©ëœ ëª¨ë“ ë³€ê²½ ë‚´ìš©ì´ +ë°± 스íƒì— í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 추가ë˜ë©°, <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ëª¨ë‘ í•œêº¼ë²ˆì— ì—행하게 ë©ë‹ˆë‹¤.</p> -<p>{@link android.app.FragmentTransaction}ì— ë³€ê²½ ë‚´ìš©ì„ ì¶”ê°€í•˜ëŠ” 순서는 중요하지 않습니다. +<p>{@link android.app.FragmentTransaction}ì— ë³€ê²½ ë‚´ìš©ì„ ì¶”ê°€í•˜ëŠ” 순서는 중요하지 않습니다. 다만 다ìŒê³¼ ê°™ì€ ì˜ˆì™¸ê°€ 있습니다.</p> <ul> <li>{@link android.app.FragmentTransaction#commit()}ì„ ë§ˆì§€ë§‰ìœ¼ë¡œ 호출해야만 합니다.</li> - <li>ê°™ì€ ì»¨í…Œì´ë„ˆì— 여러 ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 추가하는 경우, ì´ë¥¼ 추가하는 순서가 ì´ë“¤ì´ + <li>ê°™ì€ ì»¨í…Œì´ë„ˆì— 여러 ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 추가하는 경우, ì´ë¥¼ 추가하는 순서가 ì´ë“¤ì´ 보기 ê³„ì¸µì— ë‚˜íƒ€ë‚˜ëŠ” 순서를 ê²°ì • 짓습니다.</li> </ul> <p>프래그먼트를 ì œê±°í•˜ëŠ” 트랜ìžì…˜ì„ 수행하면서 {@link android.app.FragmentTransaction#addToBackStack(String) -addToBackStack()}ì„ í˜¸ì¶œí•˜ì§€ 않는 경우, -해당 프래그먼트는 트랜ìžì…˜ì´ ì ìš©ë˜ë©´ 소멸ë˜ê³ 사용ìžê°€ ì´ë¥¼ ë˜ì§šì–´ íƒìƒ‰í• 수 없게 ë©ë‹ˆë‹¤. ë°˜ë©´ì— -프래그먼트를 ì œê±°í•˜ë©´ì„œ {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()}ì„ í˜¸ì¶œí•˜ë©´, -해당 프래그먼트는 <em>중단</em>ë˜ê³ 사용ìžê°€ 뒤로 íƒìƒ‰í•˜ë©´ +addToBackStack()}ì„ í˜¸ì¶œí•˜ì§€ 않는 경우, +해당 프래그먼트는 트랜ìžì…˜ì´ ì ìš©ë˜ë©´ 소멸ë˜ê³ 사용ìžê°€ ì´ë¥¼ ë˜ì§šì–´ íƒìƒ‰í• 수 없게 ë©ë‹ˆë‹¤. ë°˜ë©´ì— +프래그먼트를 ì œê±°í•˜ë©´ì„œ {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()}ì„ í˜¸ì¶œí•˜ë©´, +해당 프래그먼트는 <em>중단</em>ë˜ê³ 사용ìžê°€ 뒤로 íƒìƒ‰í•˜ë©´ 재개ë©ë‹ˆë‹¤.</p> -<p class="note"><strong>íŒ:</strong> ê° í”„ëž˜ê·¸ë¨¼íŠ¸ 트랜ìžì…˜ì— 대해 ì „í™˜ ì• ë‹ˆë©”ì´ì…˜ì„ ì ìš©í•˜ë ¤ë©´ -커밋하기 ì „ì— {@link android.app.FragmentTransaction#setTransition setTransition()}ì„ +<p class="note"><strong>íŒ:</strong> ê° í”„ëž˜ê·¸ë¨¼íŠ¸ 트랜ìžì…˜ì— 대해 ì „í™˜ ì• ë‹ˆë©”ì´ì…˜ì„ ì ìš©í•˜ë ¤ë©´ +커밋하기 ì „ì— {@link android.app.FragmentTransaction#setTransition setTransition()}ì„ í˜¸ì¶œí•˜ë©´ ë©ë‹ˆë‹¤.</p> -<p>{@link android.app.FragmentTransaction#commit()}ì„ í˜¸ì¶œí•´ë„ ê·¸ 즉시 트랜ìžì…˜ì„ 수행하지는 -않습니다. 그보다는, ì•¡í‹°ë¹„í‹°ì˜ UI ìŠ¤ë ˆë“œ("주요" ìŠ¤ë ˆë“œ)를 ìŠ¤ë ˆë“œê°€ í• ìˆ˜ 있는 한 빨리 +<p>{@link android.app.FragmentTransaction#commit()}ì„ í˜¸ì¶œí•´ë„ ê·¸ 즉시 트랜ìžì…˜ì„ 수행하지는 +않습니다. 그보다는, ì•¡í‹°ë¹„í‹°ì˜ UI ìŠ¤ë ˆë“œ("주요" ìŠ¤ë ˆë“œ)를 ìŠ¤ë ˆë“œê°€ í• ìˆ˜ 있는 한 빨리 ì´ íŠ¸ëžœìžì…˜ì„ 수행하ë„ë¡ ì¼ì •ì„ ì˜ˆì•½í•˜ëŠ” ê²ƒì— ê°€ê¹ìŠµë‹ˆë‹¤. 하지만 필요한 경우 UI ìŠ¤ë ˆë“œë¡œë¶€í„° {@link -android.app.FragmentManager#executePendingTransactions()}를 호출하면 -{@link android.app.FragmentTransaction#commit()}ì´ ì œì¶œí•œ 트랜ìžì…˜ì„ 즉시 ì‹¤í–‰í• ìˆ˜ 있습니다. 트랜ìžì…˜ì´ +android.app.FragmentManager#executePendingTransactions()}를 호출하면 +{@link android.app.FragmentTransaction#commit()}ì´ ì œì¶œí•œ 트랜ìžì…˜ì„ 즉시 ì‹¤í–‰í• ìˆ˜ 있습니다. 트랜ìžì…˜ì´ 다른 ìŠ¤ë ˆë“œì˜ ìž‘ì—…ì— ëŒ€í•œ 종ì†ì„±ì´ 아니ë¼ë©´ êµ³ì´ ì´ë ‡ê²Œ 해야만 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤.</p> <p class="caution"><strong>주ì˜:</strong> 트랜ìžì…˜ì„ ì ìš©í• ë•Œ {@link -android.app.FragmentTransaction#commit commit()}ì„ ì‚¬ìš©í•´ë„ ë˜ëŠ” ê²ƒì€ ì•¡í‹°ë¹„í‹°ê°€ <a href="{@docRoot}guide/components/activities.html#SavingActivityState">ê·¸ ìƒíƒœë¥¼ -ì €ìž¥</a>하기 ì „ë¿ìž…니다(사용ìžê°€ 액티비티를 ë– ë‚ ë•Œ). ê·¸ 시ì ì´í›„ì— ì ìš©í•˜ë ¤ê³ í•˜ë©´ 예외가 -ë°œìƒí•©ë‹ˆë‹¤. ì´ê²ƒì€ 액티비티를 ë³µì›í•´ì•¼ 하는 경우 ì ìš© ì´í›„ì˜ ìƒíƒœê°€ ì†ì‹¤ë 수 +android.app.FragmentTransaction#commit commit()}ì„ ì‚¬ìš©í•´ë„ ë˜ëŠ” ê²ƒì€ ì•¡í‹°ë¹„í‹°ê°€ <a href="{@docRoot}guide/components/activities.html#SavingActivityState">ê·¸ ìƒíƒœë¥¼ +ì €ìž¥</a>하기 ì „ë¿ìž…니다(사용ìžê°€ 액티비티를 ë– ë‚ ë•Œ). ê·¸ 시ì ì´í›„ì— ì ìš©í•˜ë ¤ê³ í•˜ë©´ 예외가 +ë°œìƒí•©ë‹ˆë‹¤. ì´ê²ƒì€ 액티비티를 ë³µì›í•´ì•¼ 하는 경우 ì ìš© ì´í›„ì˜ ìƒíƒœê°€ ì†ì‹¤ë 수 있기 때문입니다. ì ìš©ì´ ì†ì‹¤ë˜ì–´ë„ ê´œì°®ì€ ìƒí™©ì´ë¼ë©´, {@link android.app.FragmentTransaction#commitAllowingStateLoss()}를 사용하ì‹ì‹œì˜¤.</p> @@ -491,19 +491,19 @@ android.app.FragmentTransaction#commitAllowingStateLoss()}를 사용하ì‹ì‹œì˜¤ <h2 id="CommunicatingWithActivity">액티비티와 í†µì‹ </h2> -<p>{@link android.app.Fragment}는 -{@link android.app.Activity}로부터 ë…립ì ì¸ ê°ì²´ë¡œ 구현ë˜ì—ˆê³ 여러 ê°œì˜ ì•¡í‹°ë¹„í‹° 안ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ê²ƒì´ ì‚¬ì‹¤ì´ì§€ë§Œ, +<p>{@link android.app.Fragment}는 +{@link android.app.Activity}로부터 ë…립ì ì¸ ê°ì²´ë¡œ 구현ë˜ì—ˆê³ 여러 ê°œì˜ ì•¡í‹°ë¹„í‹° 안ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ê²ƒì´ ì‚¬ì‹¤ì´ì§€ë§Œ, í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ì£¼ì–´ì§„ ì¸ìŠ¤í„´ìŠ¤ëŠ” ê·¸ê²ƒì„ í¬í•¨í•˜ê³ 있는 ì•¡í‹°ë¹„í‹°ì— ì§ì ‘ì 으로 ì—°ê²°ë˜ì–´ 있습니다.</p> <p>구체ì 으로 ë§í•˜ë©´, ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ëŠ” {@link -android.app.Fragment#getActivity()}를 사용하여 {@link android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ì—¬ +android.app.Fragment#getActivity()}를 사용하여 {@link android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ì—¬ 액티비티 ë ˆì´ì•„웃ì—서 보기를 찾는 것과 ê°™ì€ ìž‘ì—…ì„ ì†ì‰½ê²Œ ìˆ˜í–‰í• ìˆ˜ 있습니다.</p> <pre> View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list); </pre> -<p>ì´ì™€ 마찬가지로, ì•¡í‹°ë¹„í‹°ë„ í”„ëž˜ê·¸ë¨¼íŠ¸ ì•ˆì˜ ë©”ì„œë“œë¥¼ í˜¸ì¶œí• ìˆ˜ 있습니다. ê·¸ëŸ¬ë ¤ë©´ {@link android.app.FragmentManager}ë¡œë¶€í„°ì˜ +<p>ì´ì™€ 마찬가지로, ì•¡í‹°ë¹„í‹°ë„ í”„ëž˜ê·¸ë¨¼íŠ¸ ì•ˆì˜ ë©”ì„œë“œë¥¼ í˜¸ì¶œí• ìˆ˜ 있습니다. ê·¸ëŸ¬ë ¤ë©´ {@link android.app.FragmentManager}ë¡œë¶€í„°ì˜ {@link android.app.Fragment}ì— ëŒ€í•œ 참조를 ê°€ì ¸ì™€ì•¼ 하며, ì´ë•Œ {@link android.app.FragmentManager#findFragmentById findFragmentById()} ë˜ëŠ” {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}를 사용합니다. 예:</p> @@ -515,14 +515,14 @@ ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentBy <h3 id="EventCallbacks">ì•¡í‹°ë¹„í‹°ë¡œì˜ ì´ë²¤íЏ 콜백 ìƒì„±</h3> -<p>ì–´ë–¤ 경우ì—는 프래그먼트로 하여금 액티비티와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í•˜ê²Œ 해야 í• ìˆ˜ 있습니다. ì´ë ‡ê²Œ 하기 위한 -한 가지 ì¢‹ì€ ë°©ë²•ì€ í”„ëž˜ê·¸ë¨¼íŠ¸ ë‚´ë¶€ì˜ ì½œë°± ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•œ ë‹¤ìŒ í•´ë‹¹ 호스트 액티비티가 ì´ë¥¼ 구현하ë„ë¡ -하는 것입니다. 액티비티가 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 ì½œë°±ì„ ìˆ˜ì‹ í•˜ë©´, í•„ìš”ì— ë”°ë¼ ê·¸ ì •ë³´ë¥¼ ë ˆì´ì•„웃 ë‚´ì˜ +<p>ì–´ë–¤ 경우ì—는 프래그먼트로 하여금 액티비티와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í•˜ê²Œ 해야 í• ìˆ˜ 있습니다. ì´ë ‡ê²Œ 하기 위한 +한 가지 ì¢‹ì€ ë°©ë²•ì€ í”„ëž˜ê·¸ë¨¼íŠ¸ ë‚´ë¶€ì˜ ì½œë°± ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•œ ë‹¤ìŒ í•´ë‹¹ 호스트 액티비티가 ì´ë¥¼ 구현하ë„ë¡ +하는 것입니다. 액티비티가 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 ì½œë°±ì„ ìˆ˜ì‹ í•˜ë©´, í•„ìš”ì— ë”°ë¼ ê·¸ ì •ë³´ë¥¼ ë ˆì´ì•„웃 ë‚´ì˜ ë‹¤ë¥¸ 프래그먼트와 ê³µìœ í• ìˆ˜ 있습니다.</p> -<p>예를 들어 ì–´ë–¤ 뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 액티비티 í•˜ë‚˜ì— í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ë‘ ê°œ 있습니다. - 하나는 기사 목ë¡ì„ 표시(프래그먼트 A)í•˜ê³ ë‹¤ë¥¸ 하나는 기사 하나를 표시(프래그먼트 B)하는 경우 ëª©ë¡ í•ëª©ì´ ì„ íƒë˜ë©´ -프래그먼트 Aê°€ ì•¡í‹°ë¹„í‹°ì— ì•Œë ¤ì•¼ 프래그먼트 Bì— í•´ë‹¹ 기사를 표시하ë¼ê³ 알릴 수 있습니다. ì´ ê²½ìš°, +<p>예를 들어 ì–´ë–¤ 뉴스 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 액티비티 í•˜ë‚˜ì— í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ë‘ ê°œ 있습니다. + 하나는 기사 목ë¡ì„ 표시(프래그먼트 A)í•˜ê³ ë‹¤ë¥¸ 하나는 기사 하나를 표시(프래그먼트 B)하는 경우 ëª©ë¡ í•ëª©ì´ ì„ íƒë˜ë©´ +프래그먼트 Aê°€ ì•¡í‹°ë¹„í‹°ì— ì•Œë ¤ì•¼ 프래그먼트 Bì— í•´ë‹¹ 기사를 표시하ë¼ê³ 알릴 수 있습니다. ì´ ê²½ìš°, {@code OnArticleSelectedListener} ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 프래그먼트 A ë‚´ë¶€ì— ì„ ì–¸ë©ë‹ˆë‹¤.</p> <pre> @@ -537,12 +537,12 @@ public static class FragmentA extends ListFragment { </pre> <p>그러면 프래그먼트를 호스팅하는 액티비티가 {@code OnArticleSelectedListener} - ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ -êµ¬í˜„í•˜ê³ {@code onArticleSelected()}를 ìž¬ì •ì˜í•˜ì—¬ 프래그먼트 A로부터 ì¼ì–´ë‚œ ì´ë²¤íŠ¸ë¥¼ -프래그먼트 Bì— ì•Œë¦½ë‹ˆë‹¤. 호스트 액티비티가 ì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하ë„ë¡ + ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ +êµ¬í˜„í•˜ê³ {@code onArticleSelected()}를 ìž¬ì •ì˜í•˜ì—¬ 프래그먼트 A로부터 ì¼ì–´ë‚œ ì´ë²¤íŠ¸ë¥¼ +프래그먼트 Bì— ì•Œë¦½ë‹ˆë‹¤. 호스트 액티비티가 ì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하ë„ë¡ í™•ì‹¤ížˆ í•˜ë ¤ë©´ 프래그먼트 Aì˜ {@link android.app.Fragment#onAttach onAttach()} 콜백 메서드(프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í• ë•Œ ì‹œìŠ¤í…œì´ í˜¸ì¶œí•˜ëŠ” 것)ê°€ {@code OnArticleSelectedListener}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•´ì•¼ 합니다. ì´ë•Œ {@link android.app.Fragment#onAttach -onAttach()} 안으로 ì „ë‹¬ëœ {@link android.app.Activity}를 +onAttach()} 안으로 ì „ë‹¬ëœ {@link android.app.Activity}를 ìºìŠ¤íŒ…í•˜ëŠ” ë°©ë²•ì„ ì”니다.</p> <pre> @@ -562,14 +562,14 @@ public static class FragmentA extends ListFragment { } </pre> -<p>액티비티가 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하지 ì•Šì€ ê²½ìš°, 프래그먼트가 -{@link java.lang.ClassCastException}ì„ ë°œìƒì‹œí‚µë‹ˆë‹¤. -성공 시, {@code mListener} 구성ì›ì´ ì•¡í‹°ë¹„í‹°ì˜ -{@code OnArticleSelectedListener} êµ¬í˜„ì— ëŒ€í•œ 참조를 ë³´ìœ í•˜ë¯€ë¡œ, 프래그먼트 Aê°€ 액티비티와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í• ìˆ˜ 있습니다. -ì´ë•Œ {@code OnArticleSelectedListener} ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì •ì˜í•œ 메서드를 호출하는 ë°©ë²•ì„ ì”니다. 예를 들어 프래그먼트 Aê°€ -{@link android.app.ListFragment}ì˜ í™•ìž¥ì¸ ê²½ìš°, +<p>액티비티가 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하지 ì•Šì€ ê²½ìš°, 프래그먼트가 +{@link java.lang.ClassCastException}ì„ ë°œìƒì‹œí‚µë‹ˆë‹¤. +성공 시, {@code mListener} 구성ì›ì´ ì•¡í‹°ë¹„í‹°ì˜ +{@code OnArticleSelectedListener} êµ¬í˜„ì— ëŒ€í•œ 참조를 ë³´ìœ í•˜ë¯€ë¡œ, 프래그먼트 Aê°€ 액티비티와 ì´ë²¤íŠ¸ë¥¼ ê³µìœ í• ìˆ˜ 있습니다. +ì´ë•Œ {@code OnArticleSelectedListener} ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì •ì˜í•œ 메서드를 호출하는 ë°©ë²•ì„ ì”니다. 예를 들어 프래그먼트 Aê°€ +{@link android.app.ListFragment}ì˜ í™•ìž¥ì¸ ê²½ìš°, 사용ìžê°€ ëª©ë¡ í•ëª©ì„ í´ë¦í• 때마다 ì‹œìŠ¤í…œì´ í”„ëž˜ê·¸ë¨¼íŠ¸ ì•ˆì˜ {@link android.app.ListFragment#onListItemClick -onListItemClick()}ì„ í˜¸ì¶œí•˜ê³ , 그러면 ì´ê²ƒì´ {@code onArticleSelected()}를 호출하여 +onListItemClick()}ì„ í˜¸ì¶œí•˜ê³ , 그러면 ì´ê²ƒì´ {@code onArticleSelected()}를 호출하여 해당 ì´ë²¤íŠ¸ë¥¼ 액티비티와 ê³µìœ í•˜ëŠ” 것입니다.</p> <pre> @@ -588,42 +588,42 @@ public static class FragmentA extends ListFragment { </pre> <p>{@link -android.app.ListFragment#onListItemClick onListItemClick()}ì— ì „ë‹¬ëœ {@code id} 매개변수가 í´ë¦í•œ í•ëª©ì˜ í–‰ IDì´ë©°, +android.app.ListFragment#onListItemClick onListItemClick()}ì— ì „ë‹¬ëœ {@code id} 매개변수가 í´ë¦í•œ í•ëª©ì˜ í–‰ IDì´ë©°, 액티비티(ë˜ëŠ” 다른 프래그먼트)ê°€ ì´ê²ƒì„ 사용해 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.content.ContentProvider}ì—서 기사를 ê°€ì ¸ì˜µë‹ˆë‹¤.</p> <p><!--To see a complete implementation of this kind of callback interface, see the <a -href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->콘í…ì¸ ì œê³µìž ì‚¬ìš©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->콘í…ì¸ ì œê³µìž ì‚¬ìš©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a> 문서ì—서 ì´ìš©í•˜ì‹¤ 수 있습니다.</p> <h3 id="ActionBar">작업 모ìŒì— í•목 추가</h3> -<p>프래그먼트는 ì•¡í‹°ë¹„í‹°ì˜ <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">옵션 메뉴</a>ì—(ê²°ê³¼ì 으로 <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>ì—ë„) 메뉴 í•목으로 ì°¸ê°€í• ìˆ˜ 있습니다. ì´ë•Œ -{@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}를 구현하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œê°€ +<p>프래그먼트는 ì•¡í‹°ë¹„í‹°ì˜ <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">옵션 메뉴</a>ì—(ê²°ê³¼ì 으로 <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>ì—ë„) 메뉴 í•목으로 ì°¸ê°€í• ìˆ˜ 있습니다. ì´ë•Œ +{@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}를 구현하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œê°€ í˜¸ì¶œì„ ìˆ˜ì‹ í•˜ë„ë¡ í•˜ë ¤ë©´, {@link android.app.Fragment#onCreate(Bundle) onCreate()} ì¤‘ì— {@link -android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()}를 호출하여 프래그먼트가 -옵션 ë©”ë‰´ì— í•ëª©ì„ ì¶”ê°€í•˜ê³ ìž í•œë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ì•¼ 합니다(ê·¸ë ‡ì§€ 않으면 해당 프래그먼트가 +android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()}를 호출하여 프래그먼트가 +옵션 ë©”ë‰´ì— í•ëª©ì„ ì¶”ê°€í•˜ê³ ìž í•œë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ì•¼ 합니다(ê·¸ë ‡ì§€ 않으면 해당 프래그먼트가 {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}ë¡œì˜ í˜¸ì¶œì„ ë°›ì§€ 못하게 ë©ë‹ˆë‹¤).</p> -<p>그런 ë‹¤ìŒ í”„ëž˜ê·¸ë¨¼íŠ¸ë¡œë¶€í„° 옵션 ë©”ë‰´ì— ì¶”ê°€í•˜ëŠ” ëª¨ë“ í•ëª©ì€ ê¸°ì¡´ì˜ ë©”ë‰´ í•ëª©ì— +<p>그런 ë‹¤ìŒ í”„ëž˜ê·¸ë¨¼íŠ¸ë¡œë¶€í„° 옵션 ë©”ë‰´ì— ì¶”ê°€í•˜ëŠ” ëª¨ë“ í•ëª©ì€ ê¸°ì¡´ì˜ ë©”ë‰´ í•ëª©ì— ì¶”ê°€ë©ë‹ˆë‹¤. 해당 프래그먼트는 메뉴 í•ëª©ì„ ì„ íƒí•˜ë©´ {@link -android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}ë¡œì˜ ì½œë°±ë„ +android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}ë¡œì˜ ì½œë°±ë„ ìˆ˜ì‹ í•˜ê²Œ ë©ë‹ˆë‹¤.</p> <p>ë˜í•œ 프래그먼트 ë ˆì´ì•„ì›ƒì— ë³´ê¸°ë¥¼ 등ë¡í•˜ì—¬ 컨í…스트 메뉴를 ì œê³µí•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë•Œ {@link -android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}를 호출하면 ë©ë‹ˆë‹¤. 사용ìžê°€ 컨í…스트 메뉴를 ì—´ë©´, +android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}를 호출하면 ë©ë‹ˆë‹¤. 사용ìžê°€ 컨í…스트 메뉴를 ì—´ë©´, 해당 프래그먼트가 {@link android.app.Fragment#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo) onCreateContextMenu()}ë¡œì˜ í˜¸ì¶œì„ ë°›ìŠµë‹ˆë‹¤. 사용ìžê°€ í•ëª©ì„ í•˜ë‚˜ ì„ íƒí•˜ë©´, 해당 프래그먼트는 {@link android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}ë¡œì˜ í˜¸ì¶œì„ ë°›ìŠµë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 프래그먼트는 추가한 ê° ë©”ë‰´ í•ëª©ì— ëŒ€í•´ 'í•목 ì„ íƒë¨' ì½œë°±ì„ -하나씩 받게 ë˜ì§€ë§Œ, 사용ìžê°€ 메뉴 í•ëª©ì„ ì„ íƒí• 때 ê·¸ì— ìƒì‘하는 ì½œë°±ì„ ê°€ìž¥ ì²˜ìŒ ë°›ëŠ” ê²ƒì€ -액티비티입니다. 액티비티가 구현한 'í•목 ì„ íƒë¨' ì½œë°±ì´ ì„ íƒëœ í•ëª©ì„ ë‹¤ë£¨ì§€ 않는 경우, -해당 ì´ë²¤íŠ¸ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ì½œë°±ìœ¼ë¡œ ì „ë‹¬ë©ë‹ˆë‹¤. ì´ê²ƒì€ +<p class="note"><strong>ì°¸ê³ :</strong> 프래그먼트는 추가한 ê° ë©”ë‰´ í•ëª©ì— ëŒ€í•´ 'í•목 ì„ íƒë¨' ì½œë°±ì„ +하나씩 받게 ë˜ì§€ë§Œ, 사용ìžê°€ 메뉴 í•ëª©ì„ ì„ íƒí• 때 ê·¸ì— ìƒì‘하는 ì½œë°±ì„ ê°€ìž¥ ì²˜ìŒ ë°›ëŠ” ê²ƒì€ +액티비티입니다. 액티비티가 구현한 'í•목 ì„ íƒë¨' ì½œë°±ì´ ì„ íƒëœ í•ëª©ì„ ë‹¤ë£¨ì§€ 않는 경우, +해당 ì´ë²¤íŠ¸ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ì½œë°±ìœ¼ë¡œ ì „ë‹¬ë©ë‹ˆë‹¤. ì´ê²ƒì€ 옵션 메뉴와 컨í…스트 ë©”ë‰´ì— ëª¨ë‘ ì°¸ìž…ë‹ˆë‹¤.</p> <p>ë©”ë‰´ì— ëŒ€í•œ ë” ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/menus.html">메뉴</a> ë° <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> @@ -635,11 +635,11 @@ android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}로 <div class="figure" style="width:350px"> <img src="{@docRoot}images/activity_fragment_lifecycle.png" alt="" /> -<p class="img-caption"><strong>그림 3.</strong> 액티비티 수명 주기가 프래그먼트 수명 ì£¼ê¸°ì— ë¯¸ì¹˜ëŠ” +<p class="img-caption"><strong>그림 3.</strong> 액티비티 수명 주기가 프래그먼트 수명 ì£¼ê¸°ì— ë¯¸ì¹˜ëŠ” ì˜í–¥ìž…니다.</p> </div> -<p>í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기를 관리하는 ê²ƒì€ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 것과 매우 비슷합니다. 액티비티와 마찬가지로 +<p>í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기를 관리하는 ê²ƒì€ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 것과 매우 비슷합니다. 액티비티와 마찬가지로 프래그먼트는 세 가지 ìƒíƒœë¡œ ì¡´ìž¬í• ìˆ˜ 있습니다.</p> <dl> @@ -647,57 +647,57 @@ android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}로 <dd>프래그먼트가 실행 ì¤‘ì¸ ì•¡í‹°ë¹„í‹°ì— í‘œì‹œë©ë‹ˆë‹¤.</dd> <dt><i>ì¼ì‹œì •ì§€ë¨</i></dt> - <dd>ë˜ ë‹¤ë¥¸ 액티비티가 ì „ê²½ì— ë‚˜ì™€ ìžˆê³ ì‚¬ìš©ìžê°€ ì´ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆì§€ë§Œ, -ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 있는 ì•¡í‹°ë¹„í‹°ë„ ì—¬ì „ížˆ 표시ë˜ì–´ 있습니다(ì „ê²½ì˜ ì•¡í‹°ë¹„í‹°ê°€ 부분ì 으로 투명하거나 + <dd>ë˜ ë‹¤ë¥¸ 액티비티가 ì „ê²½ì— ë‚˜ì™€ ìžˆê³ ì‚¬ìš©ìžê°€ ì´ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆì§€ë§Œ, +ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 있는 ì•¡í‹°ë¹„í‹°ë„ ì—¬ì „ížˆ 표시ë˜ì–´ 있습니다(ì „ê²½ì˜ ì•¡í‹°ë¹„í‹°ê°€ 부분ì 으로 투명하거나 ì „ì²´ í™”ë©´ì„ ë’¤ë®ì§€ 않습니다).</dd> <dt><i>ì •ì§€ë¨</i></dt> - <dd>프래그먼트가 표시ë˜ì§€ 않습니다. 호스트 액티비티가 ì •ì§€ë˜ì—ˆê±°ë‚˜ -프래그먼트가 액티비티ì—서 ì œê±°ë˜ì—ˆì§€ë§Œ ë°± 스íƒì— 추가ë˜ì—ˆìŠµë‹ˆë‹¤. ì •ì§€ëœ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ -ì—¬ì „ížˆ 표시는 ë©ë‹ˆë‹¤(ëª¨ë“ ìƒíƒœ ë° êµ¬ì„±ì› ì •ë³´ë¥¼ ì‹œìŠ¤í…œì´ ë³´ì¡´í•©ë‹ˆë‹¤). 하지만, 사용ìžì—게는 + <dd>프래그먼트가 표시ë˜ì§€ 않습니다. 호스트 액티비티가 ì •ì§€ë˜ì—ˆê±°ë‚˜ +프래그먼트가 액티비티ì—서 ì œê±°ë˜ì—ˆì§€ë§Œ ë°± 스íƒì— 추가ë˜ì—ˆìŠµë‹ˆë‹¤. ì •ì§€ëœ í”„ëž˜ê·¸ë¨¼íŠ¸ë„ +ì—¬ì „ížˆ 표시는 ë©ë‹ˆë‹¤(ëª¨ë“ ìƒíƒœ ë° êµ¬ì„±ì› ì •ë³´ë¥¼ ì‹œìŠ¤í…œì´ ë³´ì¡´í•©ë‹ˆë‹¤). 하지만, 사용ìžì—게는 ë” ì´ìƒ 표시ë˜ì§€ 않으며 액티비티를 종료하면 ì´ê²ƒë„ 종료ë©ë‹ˆë‹¤.</dd> </dl> <p>ì´ë²ˆì—ë„ ì•¡í‹°ë¹„í‹°ì™€ 마찬가지로, í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìƒíƒœë¥¼ ë³´ì¡´í•˜ë ¤ë©´ {@link -android.os.Bundle}ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŠ” 혹시나 ì•¡í‹°ë¹„í‹°ì˜ í”„ë¡œì„¸ìŠ¤ê°€ 종료ë˜ê³ 액티비티를 +android.os.Bundle}ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŠ” 혹시나 ì•¡í‹°ë¹„í‹°ì˜ í”„ë¡œì„¸ìŠ¤ê°€ 종료ë˜ê³ 액티비티를 다시 만들 때 해당 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìƒíƒœë¥¼ 복구해야 í• í•„ìš”ê°€ ìžˆì„ ë•Œë¥¼ 대비하는 것입니다. ìƒíƒœë¥¼ ì €ìž¥í•˜ë ¤ë©´ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ {@link -android.app.Fragment#onSaveInstanceState onSaveInstanceState()} 콜백 ì¤‘ì— ì €ìž¥í• ìˆ˜ ìžˆê³ , 복구는 +android.app.Fragment#onSaveInstanceState onSaveInstanceState()} 콜백 ì¤‘ì— ì €ìž¥í• ìˆ˜ ìžˆê³ , 복구는 {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onCreateView onCreateView()} ë˜ëŠ” {@link -android.app.Fragment#onActivityCreated onActivityCreated()} 중 한 가지가 ì§„í–‰ë˜ëŠ” ë™ì•ˆ í• ìˆ˜ 있습니다. ìƒíƒœ ì €ìž¥ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +android.app.Fragment#onActivityCreated onActivityCreated()} 중 한 가지가 ì§„í–‰ë˜ëŠ” ë™ì•ˆ í• ìˆ˜ 있습니다. ìƒíƒœ ì €ìž¥ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/activities.html#SavingActivityState">액티비티</a> 문서를 참조하ì‹ì‹œì˜¤.</p> -<p>액티비티와 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기ì—서 가장 중대한 ì°¨ì´ì ì€ -해당ë˜ëŠ” ë°± 스íƒì— ì €ìž¥ë˜ëŠ” 방법입니다. 액티비티는 중단ë˜ì—ˆì„ 때 ì‹œìŠ¤í…œì´ ê´€ë¦¬í•˜ëŠ” -액티비티 ë°± ìŠ¤íƒ ì•ˆì— ë°°ì¹˜ë˜ëŠ” ê²ƒì´ ê¸°ë³¸ìž…ë‹ˆë‹¤(ë”°ë¼ì„œ 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ 다시 ì´ ì•¡í‹°ë¹„í‹°ë¡œ -뒤로 íƒìƒ‰í• 수 있습니다. ì´ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/tasks-and-back-stack.html">작업 ë° ë°± 스íƒ</a>ì—서 설명하였습니다). -하지만, 프래그먼트가 호스트 액티비티가 관리하는 ë°± ìŠ¤íƒ ì•ˆì— ë°°ì¹˜ë˜ëŠ” ê²ƒì€ í•´ë‹¹ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì €ìž¥í•˜ë¼ê³ 명시ì 으로 ìš”ì²í•˜ëŠ” 경우ë¿ìž…니다. +<p>액티비티와 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기ì—서 가장 중대한 ì°¨ì´ì ì€ +해당ë˜ëŠ” ë°± 스íƒì— ì €ìž¥ë˜ëŠ” 방법입니다. 액티비티는 중단ë˜ì—ˆì„ 때 ì‹œìŠ¤í…œì´ ê´€ë¦¬í•˜ëŠ” +액티비티 ë°± ìŠ¤íƒ ì•ˆì— ë°°ì¹˜ë˜ëŠ” ê²ƒì´ ê¸°ë³¸ìž…ë‹ˆë‹¤(ë”°ë¼ì„œ 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ 다시 ì´ ì•¡í‹°ë¹„í‹°ë¡œ +뒤로 íƒìƒ‰í• 수 있습니다. ì´ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/tasks-and-back-stack.html">작업 ë° ë°± 스íƒ</a>ì—서 설명하였습니다). +하지만, 프래그먼트가 호스트 액티비티가 관리하는 ë°± ìŠ¤íƒ ì•ˆì— ë°°ì¹˜ë˜ëŠ” ê²ƒì€ í•´ë‹¹ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì €ìž¥í•˜ë¼ê³ 명시ì 으로 ìš”ì²í•˜ëŠ” 경우ë¿ìž…니다. ì´ë•Œ 프래그먼트를 ì œê±°í•˜ëŠ” 트랜ìžì…˜ 중 {@link -android.app.FragmentTransaction#addToBackStack(String) addToBackStack()}ì„ +android.app.FragmentTransaction#addToBackStack(String) addToBackStack()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤.</p> -<p>ì´ê²ƒë§Œ ì œì™¸í•˜ë©´, 프래그먼트 수명 주기를 관리하는 ê²ƒì€ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 것과 -아주 비슷합니다. ë”°ë¼ì„œ, <a href="{@docRoot}guide/components/activities.html#Lifecycle">액티비티 -수명 주기 관리</a>ì— ì“°ì´ëŠ” 실례가 프래그먼트ì—ë„ ë˜‘ê°™ì´ ì ìš©ë˜ëŠ” 것입니다. 하지만 ë˜ í•œ 가지 ì´í•´í•´ë‘어야 하는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. 즉, +<p>ì´ê²ƒë§Œ ì œì™¸í•˜ë©´, 프래그먼트 수명 주기를 관리하는 ê²ƒì€ ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기를 관리하는 것과 +아주 비슷합니다. ë”°ë¼ì„œ, <a href="{@docRoot}guide/components/activities.html#Lifecycle">액티비티 +수명 주기 관리</a>ì— ì“°ì´ëŠ” 실례가 프래그먼트ì—ë„ ë˜‘ê°™ì´ ì ìš©ë˜ëŠ” 것입니다. 하지만 ë˜ í•œ 가지 ì´í•´í•´ë‘어야 하는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. 즉, ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª…ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª…ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지를 알아ë‘어야 합니다.</p> -<p class="caution"><strong>주ì˜:</strong> {@link android.app.Fragment} ë‚´ì—서 {@link android.content.Context} -ê°ì²´ê°€ 필요한 경우, {@link android.app.Fragment#getActivity()}를 호출하면 ë©ë‹ˆë‹¤. +<p class="caution"><strong>주ì˜:</strong> {@link android.app.Fragment} ë‚´ì—서 {@link android.content.Context} +ê°ì²´ê°€ 필요한 경우, {@link android.app.Fragment#getActivity()}를 호출하면 ë©ë‹ˆë‹¤. 그러나 {@link android.app.Fragment#getActivity()}를 호출하는 ê²ƒì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì•¡í‹°ë¹„í‹°ì— - 첨부ë˜ì–´ 있는 경우ë¿ì´ë‹ˆ ìœ ì˜í•˜ì‹ì‹œì˜¤. 프래그먼트가 ì•„ì§ ì²¨ë¶€ë˜ì§€ 않았거나 수명 주기가 ëë‚ ë¬´ë µ ë¶„ë¦¬ëœ ê²½ìš°, + 첨부ë˜ì–´ 있는 경우ë¿ì´ë‹ˆ ìœ ì˜í•˜ì‹ì‹œì˜¤. 프래그먼트가 ì•„ì§ ì²¨ë¶€ë˜ì§€ 않았거나 수명 주기가 ëë‚ ë¬´ë µ ë¶„ë¦¬ëœ ê²½ìš°, {@link android.app.Fragment#getActivity()}ê°€ nullì„ ë°˜í™˜í•©ë‹ˆë‹¤.</p> <h3 id="CoordinatingWithActivity">액티비티 수명 주기와 ì¡°í™”</h3> -<p>프래그먼트가 있는 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기는 해당 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… ì£¼ê¸°ì— ì§ì ‘ì ì¸ -ì˜í–¥ì„ 미칩니다. ë”°ë¼ì„œ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ê° ìˆ˜ëª… 주기 ì½œë°±ì´ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ 비슷한 ì½œë°±ì„ -ìœ ë°œí•©ë‹ˆë‹¤. 예를 들어 액티비티가 {@link android.app.Activity#onPause}를 받으면, +<p>프래그먼트가 있는 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기는 해당 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… ì£¼ê¸°ì— ì§ì ‘ì ì¸ +ì˜í–¥ì„ 미칩니다. ë”°ë¼ì„œ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ê° ìˆ˜ëª… 주기 ì½œë°±ì´ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ 비슷한 ì½œë°±ì„ +ìœ ë°œí•©ë‹ˆë‹¤. 예를 들어 액티비티가 {@link android.app.Activity#onPause}를 받으면, 해당 액티비티 ë‚´ì˜ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ {@link android.app.Fragment#onPause}를 받습니다.</p> -<p>하지만 프래그먼트ì—는 몇 가지 수명 주기 ì½œë°±ì´ ë” ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ ì•¡í‹°ë¹„í‹°ì™€ì˜ -ê³ ìœ í•œ ìƒí˜¸ ìž‘ìš©ì„ ë‹¤ë£¨ì–´ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ UI를 êµ¬ì¶•í•˜ê³ ì†Œë©¸ì‹œí‚¤ëŠ” 것과 ê°™ì€ +<p>하지만 프래그먼트ì—는 몇 가지 수명 주기 ì½œë°±ì´ ë” ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ ì•¡í‹°ë¹„í‹°ì™€ì˜ +ê³ ìœ í•œ ìƒí˜¸ ìž‘ìš©ì„ ë‹¤ë£¨ì–´ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ UI를 êµ¬ì¶•í•˜ê³ ì†Œë©¸ì‹œí‚¤ëŠ” 것과 ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ 추가ì ì¸ ì½œë°± 메서드를 예로 들면 다ìŒê³¼ 같습니다.</p> <dl> @@ -715,17 +715,17 @@ onCreate()} 메서드가 반환ë˜ë©´ 호출ë©ë‹ˆë‹¤.</dd> <dd>프래그먼트가 액티비티와 ì—°ê²°ì´ ëŠì–´ì§€ëŠ” ì¤‘ì¼ ë•Œ 호출ë©ë‹ˆë‹¤.</dd> </dl> -<p>호스트 ì•¡í‹°ë¹„í‹°ì˜ ì˜í–¥ì„ ë°›ì„ í”„ëž˜ê·¸ë¨¼íŠ¸ 수명 ì£¼ê¸°ì˜ íë¦„ì€ ê·¸ë¦¼ 3ì—서 -확ì¸í•˜ì‹ì‹œì˜¤. ì´ ê·¸ë¦¼ì„ ë³´ë©´ ì•¡í‹°ë¹„í‹°ì˜ ê° ì—°ì†ëœ ìƒíƒœê°€ 프래그먼트가 ì–´ëŠ +<p>호스트 ì•¡í‹°ë¹„í‹°ì˜ ì˜í–¥ì„ ë°›ì„ í”„ëž˜ê·¸ë¨¼íŠ¸ 수명 ì£¼ê¸°ì˜ íë¦„ì€ ê·¸ë¦¼ 3ì—서 +확ì¸í•˜ì‹ì‹œì˜¤. ì´ ê·¸ë¦¼ì„ ë³´ë©´ ì•¡í‹°ë¹„í‹°ì˜ ê° ì—°ì†ëœ ìƒíƒœê°€ 프래그먼트가 ì–´ëŠ ì½œë°± 메서드를 받게 ë˜ëŠ”ì§€ ê²°ì • 짓는다는 ê²ƒì„ ë³¼ 수 있습니다. 예를 들어 액티비티가 ìžì‹ ì˜ {@link -android.app.Activity#onCreate onCreate()} ì½œë°±ì„ ë°›ì€ ê²½ìš°, 해당 액티비티 ì•ˆì— ìžˆëŠ” 프래그먼트는 +android.app.Activity#onCreate onCreate()} ì½œë°±ì„ ë°›ì€ ê²½ìš°, 해당 액티비티 ì•ˆì— ìžˆëŠ” 프래그먼트는 {@link android.app.Fragment#onActivityCreated onActivityCreated()} ì½œë°±ì„ ë°›ì„ ë¿ìž…니다.</p> -<p>액티비티가 ìž¬ê°œëœ ìƒíƒœì— ë„달하면 ìžìœ ìžìž¬ë¡œ 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ê±°ë‚˜ 액티비티ì—서 -ì œê±°í•´ë„ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 액티비티가 ìž¬ê°œëœ ìƒíƒœì— 있는 ë™ì•ˆì—ë§Œ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기를 +<p>액티비티가 ìž¬ê°œëœ ìƒíƒœì— ë„달하면 ìžìœ ìžìž¬ë¡œ 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ê±°ë‚˜ 액티비티ì—서 +ì œê±°í•´ë„ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 액티비티가 ìž¬ê°œëœ ìƒíƒœì— 있는 ë™ì•ˆì—ë§Œ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìˆ˜ëª… 주기를 ë…립ì 으로 ë³€ê²½í• ìˆ˜ 있는 것입니다.</p> -<p>그러나 액티비티가 ìž¬ê°œëœ ìƒíƒœë¥¼ ë– ë‚˜ë©´ 액티비티는 다시 프래그먼트를 ê·¸ 수명 주기 안으로 +<p>그러나 액티비티가 ìž¬ê°œëœ ìƒíƒœë¥¼ ë– ë‚˜ë©´ 액티비티는 다시 프래그먼트를 ê·¸ 수명 주기 안으로 밀어넣습니다.</p> @@ -733,13 +733,13 @@ android.app.Activity#onCreate onCreate()} ì½œë°±ì„ ë°›ì€ ê²½ìš°, 해당 ì•¡í‹° <h2 id="Example">예</h2> -<p>ì´ ë¬¸ì„œì—서 ë…¼ì˜í•œ ëª¨ë“ ê²ƒì„ í•œ ë²ˆì— ëª¨ì•„ 보기 위해, 다ìŒì€ ë‘ ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하여 -ì°½ì´ ë‘ ê°œì¸ ë ˆì´ì•„ì›ƒì„ ìƒì„±í•˜ëŠ” 액티비티를 예시로 나타낸 것입니다. ì•„ëž˜ì˜ ì•¡í‹°ë¹„í‹°ì— í¬í•¨ëœ -한 프래그먼트는 ì…°ìµìŠ¤í”¼ì–´ í¬ê³¡ ì œëª© 목ë¡ì„ í‘œì‹œí•˜ê³ , ë˜ ë‹¤ë¥¸ 하나는 목ë¡ì—서 ì„ íƒí–ˆì„ 때 -해당 í¬ê³¡ì˜ ìš”ì•½ì„ í‘œì‹œí•©ë‹ˆë‹¤. ë˜í•œ 화면 êµ¬ì„±ì„ ê·¼ê±°ë¡œ 프래그먼트를 여러 가지로 구성하여 ì œê³µí•˜ëŠ” ë°©ë²•ë„ +<p>ì´ ë¬¸ì„œì—서 ë…¼ì˜í•œ ëª¨ë“ ê²ƒì„ í•œ ë²ˆì— ëª¨ì•„ 보기 위해, 다ìŒì€ ë‘ ê°œì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ 사용하여 +ì°½ì´ ë‘ ê°œì¸ ë ˆì´ì•„ì›ƒì„ ìƒì„±í•˜ëŠ” 액티비티를 예시로 나타낸 것입니다. ì•„ëž˜ì˜ ì•¡í‹°ë¹„í‹°ì— í¬í•¨ëœ +한 프래그먼트는 ì…°ìµìŠ¤í”¼ì–´ í¬ê³¡ ì œëª© 목ë¡ì„ í‘œì‹œí•˜ê³ , ë˜ ë‹¤ë¥¸ 하나는 목ë¡ì—서 ì„ íƒí–ˆì„ 때 +해당 í¬ê³¡ì˜ ìš”ì•½ì„ í‘œì‹œí•©ë‹ˆë‹¤. ë˜í•œ 화면 êµ¬ì„±ì„ ê·¼ê±°ë¡œ 프래그먼트를 여러 가지로 구성하여 ì œê³µí•˜ëŠ” ë°©ë²•ë„ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì´ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì™„ì „í•œ 소스 코드는 +<p class="note"><strong>ì°¸ê³ :</strong> ì´ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì™„ì „í•œ 소스 코드는 <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code FragmentLayout.java}</a>ì—서 ì´ìš©í•˜ì‹¤ 수 있습니다.</p> @@ -752,44 +752,44 @@ android.app.Activity#onCreate onCreate()} ì¤‘ì— ì¼ë°˜ì ì¸ ë°©ì‹ìœ¼ë¡œ ë ˆì {@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout} -<p>ì‹œìŠ¤í…œì€ ì´ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ì—¬ 액티비티가 ë ˆì´ì•„ì›ƒì„ ë¡œë”©í•˜ìžë§ˆìž {@code TitlesFragment}를 초기화합니다(ì´ê²ƒì´ í¬ê³¡ ì œëª©ì„ +<p>ì‹œìŠ¤í…œì€ ì´ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ì—¬ 액티비티가 ë ˆì´ì•„ì›ƒì„ ë¡œë”©í•˜ìžë§ˆìž {@code TitlesFragment}를 초기화합니다(ì´ê²ƒì´ í¬ê³¡ ì œëª©ì„ ëª©ë¡ìœ¼ë¡œ 나열합니다). 반면 {@link android.widget.FrameLayout} -(í¬ê³¡ ìš”ì•½ì„ í‘œì‹œí•˜ëŠ” 프래그먼트가 배치ë ê³³)ì€ í™”ë©´ ì˜¤ë¥¸ìª½ì— ìžˆëŠ” -ê³µê°„ì„ ì°¨ì§€í•˜ê¸°ëŠ” 하지만 처ìŒì—는 í…… 빈 ìƒíƒœë¡œ ìœ ì§€ë©ë‹ˆë‹¤. 아래ì—서 ë³¼ 수 있듯ì´, 사용ìžê°€ 해당 목ë¡ì—서 +(í¬ê³¡ ìš”ì•½ì„ í‘œì‹œí•˜ëŠ” 프래그먼트가 배치ë ê³³)ì€ í™”ë©´ ì˜¤ë¥¸ìª½ì— ìžˆëŠ” +ê³µê°„ì„ ì°¨ì§€í•˜ê¸°ëŠ” 하지만 처ìŒì—는 í…… 빈 ìƒíƒœë¡œ ìœ ì§€ë©ë‹ˆë‹¤. 아래ì—서 ë³¼ 수 있듯ì´, 사용ìžê°€ 해당 목ë¡ì—서 í•ëª©ì„ í•˜ë‚˜ ì„ íƒí•´ì•¼ë§Œ 프래그먼트가 {@link android.widget.FrameLayout} ì•ˆì— ë°°ì¹˜ë©ë‹ˆë‹¤.</p> -<p>그러나 í¬ê³¡ 목ë¡ê³¼ ìš”ì•½ì„ ë‘˜ 다 나란히 í‘œì‹œí• ë§Œí¼ ë„ˆë¹„ê°€ ë„“ì§€ ì•Šì€ -화면 êµ¬ì„±ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ ìœ„ì˜ ë ˆì´ì•„ì›ƒì€ ê°€ë¡œ ë°©í–¥ 화면 구성ì—ë§Œ 사용ë˜ë©°, +<p>그러나 í¬ê³¡ 목ë¡ê³¼ ìš”ì•½ì„ ë‘˜ 다 나란히 í‘œì‹œí• ë§Œí¼ ë„ˆë¹„ê°€ ë„“ì§€ ì•Šì€ +화면 êµ¬ì„±ë„ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ ìœ„ì˜ ë ˆì´ì•„ì›ƒì€ ê°€ë¡œ ë°©í–¥ 화면 구성ì—ë§Œ 사용ë˜ë©°, ì´ë¥¼ {@code res/layout-land/fragment_layout.xml}ì— ì €ìž¥í•˜ì—¬ ì”니다.</p> -<p>그러므로 í™”ë©´ì´ ì„¸ë¡œ 방향으로 êµ¬ì„±ëœ ê²½ìš°, ì‹œìŠ¤í…œì€ ë‹¤ìŒ ë ˆì´ì•„ì›ƒì„ ì 용합니다. ì´ê²ƒì€ +<p>그러므로 í™”ë©´ì´ ì„¸ë¡œ 방향으로 êµ¬ì„±ëœ ê²½ìš°, ì‹œìŠ¤í…œì€ ë‹¤ìŒ ë ˆì´ì•„ì›ƒì„ ì 용합니다. ì´ê²ƒì€ {@code res/layout/fragment_layout.xml}ì— ì €ìž¥ë˜ì–´ 있습니다.</p> {@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout} -<p>ì´ ë ˆì´ì•„웃ì—는 {@code TitlesFragment}ë§Œ í¬í•¨ë˜ì–´ 있습니다. ì´ëŠ” 다시 ë§í•´ 기기가 세로 ë°©í–¥ì¸ ê²½ìš°ì—는 -í¬ê³¡ ì œëª© 목ë¡ë§Œ 표시ëœë‹¤ëŠ” 뜻입니다. ë”°ë¼ì„œ 사용ìžê°€ ì´ êµ¬ì„±ì—서 ëª©ë¡ í•ëª©ì„ í•˜ë‚˜ í´ë¦í•˜ë©´, -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë‘ ë²ˆì§¸ 프래그먼트를 로딩하는 ëŒ€ì‹ ìƒˆ 액티비티를 시작하여 ìš”ì•½ì„ +<p>ì´ ë ˆì´ì•„웃ì—는 {@code TitlesFragment}ë§Œ í¬í•¨ë˜ì–´ 있습니다. ì´ëŠ” 다시 ë§í•´ 기기가 세로 ë°©í–¥ì¸ ê²½ìš°ì—는 +í¬ê³¡ ì œëª© 목ë¡ë§Œ 표시ëœë‹¤ëŠ” 뜻입니다. ë”°ë¼ì„œ 사용ìžê°€ ì´ êµ¬ì„±ì—서 ëª©ë¡ í•ëª©ì„ í•˜ë‚˜ í´ë¦í•˜ë©´, +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë‘ ë²ˆì§¸ 프래그먼트를 로딩하는 ëŒ€ì‹ ìƒˆ 액티비티를 시작하여 ìš”ì•½ì„ í‘œì‹œí•˜ê²Œ ë©ë‹ˆë‹¤.</p> <p>다ìŒìœ¼ë¡œ, 프래그먼트 í´ëž˜ìФì—서 ì´ê²ƒì„ 달성하는 ë°©ë²•ì„ ë³´ì‹œê² ìŠµë‹ˆë‹¤. 첫 번째가 {@code TitlesFragment}로, ì…°ìµìŠ¤í”¼ì–´ í¬ê³¡ ì œëª© 목ë¡ì„ 표시하는 것입니다. ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ëŠ” {@link android.app.ListFragment}를 확장하며 ëª©ë¡ ë³´ê¸° ìž‘ì—…ì˜ ëŒ€ë¶€ë¶„ì„ ì²˜ë¦¬í•˜ê¸° 위해 ì—¬ê¸°ì— ì˜ì¡´í•©ë‹ˆë‹¤.</p> -<p>ì´ ì½”ë“œë¥¼ 살펴보면서 사용ìžê°€ ëª©ë¡ í•ëª©ì„ í´ë¦í•˜ë©´ ì¼ì–´ë‚ 수 있는 ë‘ ê°€ì§€ ë™ìž‘ì´ -있다는 ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ë‘ ë ˆì´ì•„웃 중 ì–´ëŠ ê²ƒì´ í™œì„±í™” ìƒíƒœì¸ì§€ì— ë”°ë¼ +<p>ì´ ì½”ë“œë¥¼ 살펴보면서 사용ìžê°€ ëª©ë¡ í•ëª©ì„ í´ë¦í•˜ë©´ ì¼ì–´ë‚ 수 있는 ë‘ ê°€ì§€ ë™ìž‘ì´ +있다는 ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ë‘ ë ˆì´ì•„웃 중 ì–´ëŠ ê²ƒì´ í™œì„±í™” ìƒíƒœì¸ì§€ì— ë”°ë¼ ê°™ì€ ì•¡í‹°ë¹„í‹° ë‚´ì—서 세부 사í•ì„ í‘œì‹œí•˜ê¸° 위해 새 프래그먼트를 ìƒì„±í•˜ê±°ë‚˜ í‘œì‹œí• ìˆ˜ë„ ìžˆê³ (프래그먼트를 {@link android.widget.FrameLayout}ì— ì¶”ê°€í•¨ìœ¼ë¡œì¨), 새 액티비티를 ì‹œìž‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(프래그먼트를 í‘œì‹œí• ìˆ˜ 있는 ê³³).</p> {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java titles} -<p>ë‘ ë²ˆì§¸ í”„ëž˜ê·¸ë¨¼íŠ¸ì¸ {@code DetailsFragment}는 {@code TitlesFragment}ì—서 ê°€ì ¸ì˜¨ 목ë¡ì—서 ì„ íƒí•œ í•ëª©ì— ëŒ€í•œ í¬ê³¡ ìš”ì•½ì„ +<p>ë‘ ë²ˆì§¸ í”„ëž˜ê·¸ë¨¼íŠ¸ì¸ {@code DetailsFragment}는 {@code TitlesFragment}ì—서 ê°€ì ¸ì˜¨ 목ë¡ì—서 ì„ íƒí•œ í•ëª©ì— ëŒ€í•œ í¬ê³¡ ìš”ì•½ì„ í‘œì‹œí•˜ëŠ” 것입니다.</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} -<p>{@code TitlesFragment} í´ëž˜ìФì—서 다룬 ê²ƒì„ ë˜ì‚´ë ¤ ë³´ë©´, 사용ìžê°€ ëª©ë¡ í•ëª©ì„ í´ë¦í•˜ê³ -현재 ë ˆì´ì•„ì›ƒì´ {@code R.id.details} 보기를 í¬í•¨í•˜ì§€ <em>않는</em> 경우(ì´ ë³´ê¸°ê°€ +<p>{@code TitlesFragment} í´ëž˜ìФì—서 다룬 ê²ƒì„ ë˜ì‚´ë ¤ ë³´ë©´, 사용ìžê°€ ëª©ë¡ í•ëª©ì„ í´ë¦í•˜ê³ +현재 ë ˆì´ì•„ì›ƒì´ {@code R.id.details} 보기를 í¬í•¨í•˜ì§€ <em>않는</em> 경우(ì´ ë³´ê¸°ê°€ {@code DetailsFragment}ê°€ ì†í•˜ëŠ” 곳임), ì• í”Œë¦¬ì¼€ì´ì…˜ì€ í•ëª©ì˜ ë‚´ìš©ì„ í‘œì‹œí•˜ê¸° 위해 {@code DetailsActivity} 액티비티를 시작하게 ë©ë‹ˆë‹¤.</p> @@ -798,14 +798,14 @@ android.widget.FrameLayout}ì— ì¶”ê°€í•¨ìœ¼ë¡œì¨), 새 액티비티를 ì‹œìž‘í• {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - -<p>ì´ ì•¡í‹°ë¹„í‹°ëŠ” êµ¬ì„±ì´ ê°€ë¡œ ë°©í–¥ì¸ ê²½ìš° 알아서 종료한다는 ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ë”°ë¼ì„œ + +<p>ì´ ì•¡í‹°ë¹„í‹°ëŠ” êµ¬ì„±ì´ ê°€ë¡œ ë°©í–¥ì¸ ê²½ìš° 알아서 종료한다는 ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ë”°ë¼ì„œ 주요 액티비티가 ìž‘ì—…ì„ ì¸ê³„ 받아 {@code DetailsFragment}를 {@code TitlesFragment}와 함께 í‘œì‹œí• ìˆ˜ 있는 것입니다. -ì´ê²ƒì€ 사용ìžê°€ 세로 ë°©í–¥ 구성ì—서 {@code DetailsActivity}를 시작했지만 +ì´ê²ƒì€ 사용ìžê°€ 세로 ë°©í–¥ 구성ì—서 {@code DetailsActivity}를 시작했지만 그런 ë‹¤ìŒ ê°€ë¡œ 방향으로 ëŒë¦¬ëŠ” 경우(현재 액티비티를 다시 시작함) ì¼ì–´ë‚ 수 있습니다.</p> -<p>프래그먼트 ì‚¬ìš©ì— ëŒ€í•œ ë” ë§Žì€ ìƒ˜í”Œ(ë° ì´ ì˜ˆì‹œì— ëŒ€í•œ ì™„ì „í•œ 소스 파ì¼)ì„ ë³´ì‹œë ¤ë©´ +<p>프래그먼트 ì‚¬ìš©ì— ëŒ€í•œ ë” ë§Žì€ ìƒ˜í”Œ(ë° ì´ ì˜ˆì‹œì— ëŒ€í•œ ì™„ì „í•œ 소스 파ì¼)ì„ ë³´ì‹œë ¤ë©´ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment"> ApiDemos</a>ì—서 ì´ìš©í• 수 있는 API Demos 샘플 ì•±ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤(<a href="{@docRoot}resources/samples/get.html">샘플 SDK 구성 요소</a>ì—서 ë‹¤ìš´ë¡œë“œí• ìˆ˜ 있습니다).</p> diff --git a/docs/html-intl/intl/ko/guide/components/fundamentals.jd b/docs/html-intl/intl/ko/guide/components/fundamentals.jd index 608b5a2cba1b..6bb5a9f7ba55 100644 --- a/docs/html-intl/intl/ko/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/ko/guide/components/fundamentals.jd @@ -22,54 +22,54 @@ page.title=ì• í”Œë¦¬ì¼€ì´ì…˜ 기본 í•목 </div> </div> -<p>Android ì•±ì€ Java í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ë¡œ 작성ë©ë‹ˆë‹¤. Android SDK ë„구는 +<p>Android ì•±ì€ Java í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ë¡œ 작성ë©ë‹ˆë‹¤. Android SDK ë„구는 코드를 컴파ì¼ë§í•˜ì—¬ ëª¨ë“ ë°ì´í„° ë° ë¦¬ì†ŒìŠ¤ 파ì¼ê³¼ 함께 í•˜ë‚˜ì˜ APK로 ë§Œë“니다. ì´ê²ƒì€ 즉, <i>Android 패키지</i> -를 뜻하며, ì´ëŠ” ì¼ì¢…ì˜ {@code .apk} ì ‘ë¯¸ì‚¬ê°€ 있는 ì•„ì¹´ì´ë¸Œ 파ì¼ìž…니다. 한 ê°œì˜ APK 파ì¼ì—는 +를 뜻하며, ì´ëŠ” ì¼ì¢…ì˜ {@code .apk} ì ‘ë¯¸ì‚¬ê°€ 있는 ì•„ì¹´ì´ë¸Œ 파ì¼ìž…니다. 한 ê°œì˜ APK 파ì¼ì—는 Android ì•±ì˜ ëª¨ë“ ì½˜í…ì¸ ê°€ 들어 있으며 ì´ íŒŒì¼ì´ 바로 Android로 구ë™í•˜ëŠ” 기기가 ì•±ì„ ì„¤ì¹˜í• ë•Œ 사용하는 파ì¼ìž…니다.</p> <p>Android ì•±ì€ ì¼ë‹¨ ê¸°ê¸°ì— ì„¤ì¹˜ë˜ê³ 나면 ê°ìž ë‚˜ë¦„ì˜ ë³´ì•ˆ 샌드박스 ì•ˆì— ì‚´ê²Œ ë©ë‹ˆë‹¤. </p> <ul> - <li>Android ìš´ì˜ ì²´ì œëŠ” 멀티 ì‚¬ìš©ìž Linux 시스템으로, 여기서 ê° ì•±ì€ ê°ê¸° 다른 사용ìžì™€ + <li>Android ìš´ì˜ ì²´ì œëŠ” 멀티 ì‚¬ìš©ìž Linux 시스템으로, 여기서 ê° ì•±ì€ ê°ê¸° 다른 사용ìžì™€ 같습니다.</li> -<li>기본ì 으로 ì‹œìŠ¤í…œì´ ê° ì•±ì— ê³ ìœ í•œ Linux ID를 í• ë‹¹í•©ë‹ˆë‹¤(ì´ ID는 시스템만 -ì‚¬ìš©í• ìˆ˜ 있으며 ì•±ì€ ì´ê²ƒì„ 알지 못합니다). ì‹œìŠ¤í…œì€ ì•± ì•ˆì˜ ëª¨ë“ íŒŒì¼ì— 대해 ê¶Œí•œì„ ì„¤ì •í•˜ì—¬ +<li>기본ì 으로 ì‹œìŠ¤í…œì´ ê° ì•±ì— ê³ ìœ í•œ Linux ID를 í• ë‹¹í•©ë‹ˆë‹¤(ì´ ID는 시스템만 +ì‚¬ìš©í• ìˆ˜ 있으며 ì•±ì€ ì´ê²ƒì„ 알지 못합니다). ì‹œìŠ¤í…œì€ ì•± ì•ˆì˜ ëª¨ë“ íŒŒì¼ì— 대해 ê¶Œí•œì„ ì„¤ì •í•˜ì—¬ 해당 ì•±ì— í• ë‹¹ëœ ì‚¬ìš©ìž IDë§Œ ì´ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤. </li> -<li>ê° í”„ë¡œì„¸ìŠ¤ì—는 ë‚˜ë¦„ì˜ ê°€ìƒ ë¨¸ì‹ (VM)ì´ ìžˆê³ , ê·¸ë ‡ê¸° ë•Œë¬¸ì— í•œ ì•±ì˜ ì½”ë“œê°€ 다른 여러 앱과는 ê²©ë¦¬ëœ ìƒíƒœë¡œ +<li>ê° í”„ë¡œì„¸ìŠ¤ì—는 ë‚˜ë¦„ì˜ ê°€ìƒ ë¨¸ì‹ (VM)ì´ ìžˆê³ , ê·¸ë ‡ê¸° ë•Œë¬¸ì— í•œ ì•±ì˜ ì½”ë“œê°€ 다른 여러 앱과는 ê²©ë¦¬ëœ ìƒíƒœë¡œ 실행ë©ë‹ˆë‹¤.</li> -<li>기본ì 으로 ëª¨ë“ ì•±ì´ ë‚˜ë¦„ì˜ Linux 프로세스ì—서 실행ë©ë‹ˆë‹¤. Android는 ì•±ì˜ êµ¬ì„± 요소 중 -ì–´ëŠ ê²ƒì´ë¼ë„ 실행해야 하는 경우 프로세스를 ì‹œìž‘í•˜ê³ , ì´ê²ƒì´ ë” ì´ìƒ í•„ìš” 없어지거나 ì‹œìŠ¤í…œì´ ë‹¤ë¥¸ ì•±ì„ ìœ„í•´ +<li>기본ì 으로 ëª¨ë“ ì•±ì´ ë‚˜ë¦„ì˜ Linux 프로세스ì—서 실행ë©ë‹ˆë‹¤. Android는 ì•±ì˜ êµ¬ì„± 요소 중 +ì–´ëŠ ê²ƒì´ë¼ë„ 실행해야 하는 경우 프로세스를 ì‹œìž‘í•˜ê³ , ì´ê²ƒì´ ë” ì´ìƒ í•„ìš” 없어지거나 ì‹œìŠ¤í…œì´ ë‹¤ë¥¸ ì•±ì„ ìœ„í•´ 메모리를 회복해야 하는 경우 해당 프로세스를 종료합니다.</li> </ul> -<p>Android ì‹œìŠ¤í…œì€ ì´ëŸ° ë°©ì‹ìœ¼ë¡œ <em>최소 íŠ¹ê¶Œì˜ ì›ë¦¬</em>를 구현하는 것입니다. 다시 ë§í•´, -ê° ì•±ì€ ê¸°ë³¸ì 으로 ìžì‹ ì˜ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê¸° 위해 필요한 구성 요소ì—ë§Œ 액세스 ê¶Œí•œì„ ê°€ì§€ê³ -ê·¸ ì´ìƒì€ 허용ë˜ì§€ 않습니다. ì´ë ‡ê²Œ 하면 대단히 ì•ˆì „í•œ í™˜ê²½ì´ ë§Œë“¤ì–´ì ¸ ì•±ì´ ì‹œìŠ¤í…œì—서 +<p>Android ì‹œìŠ¤í…œì€ ì´ëŸ° ë°©ì‹ìœ¼ë¡œ <em>최소 íŠ¹ê¶Œì˜ ì›ë¦¬</em>를 구현하는 것입니다. 다시 ë§í•´, +ê° ì•±ì€ ê¸°ë³¸ì 으로 ìžì‹ ì˜ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê¸° 위해 필요한 구성 요소ì—ë§Œ 액세스 ê¶Œí•œì„ ê°€ì§€ê³ +ê·¸ ì´ìƒì€ 허용ë˜ì§€ 않습니다. ì´ë ‡ê²Œ 하면 대단히 ì•ˆì „í•œ í™˜ê²½ì´ ë§Œë“¤ì–´ì ¸ ì•±ì´ ì‹œìŠ¤í…œì—서 ìžì‹ ì´ ê¶Œí•œì„ ë¶€ì—¬ 받지 못한 부분ì—는 ì•¡ì„¸ìŠ¤í• ìˆ˜ 없게 ë©ë‹ˆë‹¤.</p> -<p>그러나, ì•±ì´ ë‹¤ë¥¸ 여러 앱과 ë°ì´í„°ë¥¼ ê³µìœ í•˜ëŠ” 것과 ì•±ì´ ì‹œìŠ¤í…œ ì„œë¹„ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë°ì—는 +<p>그러나, ì•±ì´ ë‹¤ë¥¸ 여러 앱과 ë°ì´í„°ë¥¼ ê³µìœ í•˜ëŠ” 것과 ì•±ì´ ì‹œìŠ¤í…œ ì„œë¹„ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë°ì—는 여러 가지 ë°©ë²•ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ul> - <li>ë‘ ê°œì˜ ì•±ì´ ê°™ì€ Linux ì‚¬ìš©ìž ID를 ê³µìœ í•˜ë„ë¡ ì„¤ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° -ë‘ ì•±ì€ ì„œë¡œì˜ íŒŒì¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 ë©ë‹ˆë‹¤. 시스템 리소스를 ì ˆì•½í•˜ë ¤ë©´, ê°™ì€ ì‚¬ìš©ìž ID를 가진 ì•±ì´ -ê°™ì€ Linux 프로세스ì—서 실행ë˜ë„ë¡ ì„¤ì •í•˜ê³ ê°™ì€ VMì„ ê³µìœ í•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ì´ë“¤ ì•±ì€ ê°™ì€ ì¸ì¦ì„œë¡œ + <li>ë‘ ê°œì˜ ì•±ì´ ê°™ì€ Linux ì‚¬ìš©ìž ID를 ê³µìœ í•˜ë„ë¡ ì„¤ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° +ë‘ ì•±ì€ ì„œë¡œì˜ íŒŒì¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 ë©ë‹ˆë‹¤. 시스템 리소스를 ì ˆì•½í•˜ë ¤ë©´, ê°™ì€ ì‚¬ìš©ìž ID를 가진 ì•±ì´ +ê°™ì€ Linux 프로세스ì—서 실행ë˜ë„ë¡ ì„¤ì •í•˜ê³ ê°™ì€ VMì„ ê³µìœ í•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ì´ë“¤ ì•±ì€ ê°™ì€ ì¸ì¦ì„œë¡œ 서명해야 합니다).</li> - <li>ì•±ì€ ì‚¬ìš©ìžì˜ ì—°ë½ì²˜, SMS 메시지, 마운트 가능한 ì €ìž¥ì†Œ(SD 카드), -ì¹´ë©”ë¼, Bluetooth를 비롯하여 ì´ì™¸ì—ë„ ì—¬ëŸ¬ 가지 기기 ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ê¶Œí•œì„ ìš”ì²í• 수 있습니다. ëª¨ë“ + <li>ì•±ì€ ì‚¬ìš©ìžì˜ ì—°ë½ì²˜, SMS 메시지, 마운트 가능한 ì €ìž¥ì†Œ(SD 카드), +ì¹´ë©”ë¼, Bluetooth를 비롯하여 ì´ì™¸ì—ë„ ì—¬ëŸ¬ 가지 기기 ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ê¶Œí•œì„ ìš”ì²í• 수 있습니다. ëª¨ë“ ì•± ê¶Œí•œì€ ì„¤ì¹˜ 시ì ì— ì‚¬ìš©ìžê°€ 허용해야 합니다.</li> </ul> -<p>ì´ë ‡ê²Œ 해서 Android ì•±ì´ ì‹œìŠ¤í…œ ë‚´ì— ì–´ë–¤ ì‹ìœ¼ë¡œ 존재하는지 기본 ì •ë³´ë¥¼ 알아보았습니다. ì´ ë¬¸ì„œì˜ +<p>ì´ë ‡ê²Œ 해서 Android ì•±ì´ ì‹œìŠ¤í…œ ë‚´ì— ì–´ë–¤ ì‹ìœ¼ë¡œ 존재하는지 기본 ì •ë³´ë¥¼ 알아보았습니다. ì´ ë¬¸ì„œì˜ ë‚˜ë¨¸ì§€ 부분ì—서 소개ë ë‚´ìš©ì€ ë‹¤ìŒê³¼ 같습니다.</p> <ul> <li>ì•±ì„ ì •ì˜í•˜ëŠ” 핵심 í”„ë ˆìž„ì›Œí¬ êµ¬ì„± 요소.</li> - <li>구성 요소를 ì„ ì–¸í•˜ê³ ì•±ì— ë§žëŠ” 필수 기기 íŠ¹ì§•ì„ ì„ ì–¸í• ìˆ˜ 있는 매니페스트 + <li>구성 요소를 ì„ ì–¸í•˜ê³ ì•±ì— ë§žëŠ” 필수 기기 íŠ¹ì§•ì„ ì„ ì–¸í• ìˆ˜ 있는 매니페스트 파ì¼.</li> - <li>앱 코드로부터 별ë„로 분리ë˜ì–´ 있으며 ì•±ì´ ë‹¤ì–‘í•œ 기기 êµ¬ì„±ì— ë§žê²Œ ìžì‹ ì˜ í–‰ë™ì„ + <li>앱 코드로부터 별ë„로 분리ë˜ì–´ 있으며 ì•±ì´ ë‹¤ì–‘í•œ 기기 êµ¬ì„±ì— ë§žê²Œ ìžì‹ ì˜ í–‰ë™ì„ ì•ˆì •ì 으로 최ì í™”í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” 리소스.</li> </ul> @@ -77,13 +77,13 @@ Android ì•±ì˜ ëª¨ë“ ì½˜í…ì¸ ê°€ 들어 있으며 ì´ íŒŒì¼ì´ 바로 Android <h2 id="Components">앱 구성 요소</h2> -<p>앱 구성 요소는 Android ì•±ì„ ì´ë£¨ëŠ” 가장 기본ì ì¸ êµ¬ì„± 단위입니다. ê° -구성 요소는 ì‹œìŠ¤í…œì´ ì•±ìœ¼ë¡œ 들어올 수 있는 ê°ê¸° 다른 통과 ì§€ì ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 구성 요소 중ì—는 -ì‹¤ì œ 사용ìžê°€ 쓸 수 있는 ì§„ìž… ì§€ì ì´ ì•„ë‹Œ ê²ƒë„ ìžˆê³ , ì¼ë¶€ëŠ” 서로ì—게 ì˜ì¡´í•˜ì§€ë§Œ, -ê°ê°ì˜ 구성 요소는 따로 떨어진 엔티티로서 존재하며 ê°ê¸° íŠ¹ì •í•œ ì—í• ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. 즉 하나하나가 +<p>앱 구성 요소는 Android ì•±ì„ ì´ë£¨ëŠ” 가장 기본ì ì¸ êµ¬ì„± 단위입니다. ê° +구성 요소는 ì‹œìŠ¤í…œì´ ì•±ìœ¼ë¡œ 들어올 수 있는 ê°ê¸° 다른 통과 ì§€ì ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 구성 요소 중ì—는 +ì‹¤ì œ 사용ìžê°€ 쓸 수 있는 ì§„ìž… ì§€ì ì´ ì•„ë‹Œ ê²ƒë„ ìžˆê³ , ì¼ë¶€ëŠ” 서로ì—게 ì˜ì¡´í•˜ì§€ë§Œ, +ê°ê°ì˜ 구성 요소는 따로 떨어진 엔티티로서 존재하며 ê°ê¸° íŠ¹ì •í•œ ì—í• ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. 즉 하나하나가 ì•±ì˜ ì „ë°˜ì ì¸ í–‰ë™ì„ ì •ì˜í•˜ëŠ” ë° ìœ ìš©í•œ ê³ ìœ í•œ 구성 ë‹¨ìœ„ì¸ ê²ƒìž…ë‹ˆë‹¤.</p> -<p>앱 구성 요소ì—는 네 가지 서로 다른 ìœ í˜•ì´ ìžˆìŠµë‹ˆë‹¤. ê° ìœ í˜•ì´ ëšœë ·í•œ 목ì ì„ ê°€ì§€ê³ ìžˆìœ¼ë©° +<p>앱 구성 요소ì—는 네 가지 서로 다른 ìœ í˜•ì´ ìžˆìŠµë‹ˆë‹¤. ê° ìœ í˜•ì´ ëšœë ·í•œ 목ì ì„ ê°€ì§€ê³ ìžˆìœ¼ë©° ê°ìž ë‚˜ë¦„ì˜ ìˆ˜ëª… 주기가 있어 구성 ìš”ì†Œì˜ ìƒì„± ë° ì†Œë©¸ ë°©ì‹ì„ ì •ì˜í•©ë‹ˆë‹¤.</p> <p>다ìŒì€ 네 가지 ìœ í˜•ì˜ ì•± 구성 요소를 나타낸 것입니다.</p> @@ -92,15 +92,15 @@ Android ì•±ì˜ ëª¨ë“ ì½˜í…ì¸ ê°€ 들어 있으며 ì´ íŒŒì¼ì´ 바로 Android <dt><b>액티비티</b></dt> -<dd>í†µìƒ <i>액티비티</i> ë¼ê³ 하면, ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ê°€ 있는 화면 하나를 나타냅니다. 예를 들어 -ì´ë©”ì¼ ì•±ì´ë¼ë©´ 새 ì´ë©”ì¼ ëª©ë¡ì„ 표시하는 액티비티가 하나 ìžˆê³ , -ì´ë©”ì¼ì„ 작성하는 액티비티가 ë˜ í•˜ë‚˜, ê·¸ë¦¬ê³ ì´ë©”ì¼ì„ ì½ëŠ” ë° ì“°ëŠ” 액티비티가 ë˜ í•˜ë‚˜ ìžˆì„ ìˆ˜ 있습니다. 여러 -액티비티가 함께 ìž‘ë™í•˜ì—¬ 해당 ì´ë©”ì¼ ì•±ì—서 짜임새 있는 ì‚¬ìš©ìž í™˜ê²½ì„ í˜•ì„±í•˜ëŠ” ê²ƒì€ ì‚¬ì‹¤ì´ì§€ë§Œ, ê°ìž 서로와는 -ë…립ì ì¸ í˜•íƒœìž…ë‹ˆë‹¤. ë”°ë¼ì„œ, 다른 ì•±ì´ ì´ì™€ ê°™ì€ ì•¡í‹°ë¹„í‹° 중 ì–´ëŠ ê²ƒì´ë¼ë„ 하나만 -ì‹œìž‘í• ìˆ˜ 있습니다(ì´ë©”ì¼ ì•±ì´ ê·¸ë ‡ê²Œ 하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우). 예를 들어, ì¹´ë©”ë¼ ì•±ì´ë¼ë©´ ì´ë©”ì¼ ì•± ì•ˆì˜ +<dd>í†µìƒ <i>액티비티</i> ë¼ê³ 하면, ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ê°€ 있는 화면 하나를 나타냅니다. 예를 들어 +ì´ë©”ì¼ ì•±ì´ë¼ë©´ 새 ì´ë©”ì¼ ëª©ë¡ì„ 표시하는 액티비티가 하나 ìžˆê³ , +ì´ë©”ì¼ì„ 작성하는 액티비티가 ë˜ í•˜ë‚˜, ê·¸ë¦¬ê³ ì´ë©”ì¼ì„ ì½ëŠ” ë° ì“°ëŠ” 액티비티가 ë˜ í•˜ë‚˜ ìžˆì„ ìˆ˜ 있습니다. 여러 +액티비티가 함께 ìž‘ë™í•˜ì—¬ 해당 ì´ë©”ì¼ ì•±ì—서 짜임새 있는 ì‚¬ìš©ìž í™˜ê²½ì„ í˜•ì„±í•˜ëŠ” ê²ƒì€ ì‚¬ì‹¤ì´ì§€ë§Œ, ê°ìž 서로와는 +ë…립ì ì¸ í˜•íƒœìž…ë‹ˆë‹¤. ë”°ë¼ì„œ, 다른 ì•±ì´ ì´ì™€ ê°™ì€ ì•¡í‹°ë¹„í‹° 중 ì–´ëŠ ê²ƒì´ë¼ë„ 하나만 +ì‹œìž‘í• ìˆ˜ 있습니다(ì´ë©”ì¼ ì•±ì´ ê·¸ë ‡ê²Œ 하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우). 예를 들어, ì¹´ë©”ë¼ ì•±ì´ë¼ë©´ ì´ë©”ì¼ ì•± ì•ˆì˜ ì•¡í‹°ë¹„í‹°ë¥¼ 시작하여 새 ë©”ì¼ì„ 작성하ë„ë¡ í•´ì„œ 사용ìžê°€ ì‚¬ì§„ì„ ê³µìœ í•˜ë„ë¡ í• ìˆ˜ 있습니다. -<p>액티비티는 {@link android.app.Activity}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ì´ì— 대한 ë” ìžì„¸í•œ ë‚´ìš©ì€ +<p>액티비티는 {@link android.app.Activity}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ì´ì— 대한 ë” ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/activities.html">액티비티</a> ê°œë°œìž ê°€ì´ë“œì—서 확ì¸í•˜ì‹¤ 수 있습니다.</p> </dd> @@ -108,14 +108,14 @@ Android ì•±ì˜ ëª¨ë“ ì½˜í…ì¸ ê°€ 들어 있으며 ì´ íŒŒì¼ì´ 바로 Android <dt><b>서비스</b></dt> -<dd>í†µìƒ <i>서비스</i> ë¼ê³ 하면 ë°°ê²½ì—서 실행ë˜ëŠ” 구성 요소로, 오랫ë™ì•ˆ 실행ë˜ëŠ” -ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê±°ë‚˜ ì›ê²© 프로세스를 위한 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 것입니다. 서비스는 -ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. 예를 들어 서비스는 사용ìžê°€ 다른 ì•±ì— ìžˆëŠ” ë™ì•ˆì— ë°°ê²½ì—서 ìŒì•…ì„ ìž¬ìƒí• ìˆ˜ë„ ìžˆê³ , -아니면 사용ìžì™€ 액티비티 사ì´ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì°¨ë‹¨í•˜ì§€ ì•Šê³ ë„¤íŠ¸ì›Œí¬ë¥¼ 가로질러 -ë°ì´í„°ë¥¼ ê°€ì ¸ì˜¬ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë˜ ë‹¤ë¥¸ 구성 요소(예: 액티비티)ê°€ 서비스를 시작한 ë‹¤ìŒ +<dd>í†µìƒ <i>서비스</i> ë¼ê³ 하면 ë°°ê²½ì—서 실행ë˜ëŠ” 구성 요소로, 오랫ë™ì•ˆ 실행ë˜ëŠ” +ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê±°ë‚˜ ì›ê²© 프로세스를 위한 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 것입니다. 서비스는 +ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. 예를 들어 서비스는 사용ìžê°€ 다른 ì•±ì— ìžˆëŠ” ë™ì•ˆì— ë°°ê²½ì—서 ìŒì•…ì„ ìž¬ìƒí• ìˆ˜ë„ ìžˆê³ , +아니면 사용ìžì™€ 액티비티 사ì´ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì°¨ë‹¨í•˜ì§€ ì•Šê³ ë„¤íŠ¸ì›Œí¬ë¥¼ 가로질러 +ë°ì´í„°ë¥¼ ê°€ì ¸ì˜¬ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë˜ ë‹¤ë¥¸ 구성 요소(예: 액티비티)ê°€ 서비스를 시작한 ë‹¤ìŒ ì‹¤í–‰ë˜ë„ë¡ ë‘거나 ìžì‹ ì—게 ë°”ì¸ë”©í•˜ì—¬ ìƒí˜¸ 작용하ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -<p>서비스는 {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ì´ì— 대한 ë” ìžì„¸í•œ ë‚´ìš©ì€ +<p>서비스는 {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ì´ì— 대한 ë” ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/services.html">서비스</a> ê°œë°œìž ê°€ì´ë“œì—서 확ì¸í•˜ì‹¤ 수 있습니다.</p> </dd> @@ -123,20 +123,20 @@ Android ì•±ì˜ ëª¨ë“ ì½˜í…ì¸ ê°€ 들어 있으며 ì´ íŒŒì¼ì´ 바로 Android <dt><b>콘í…ì¸ ì œê³µìž</b></dt> -<dd>í†µìƒ <i>콘í…ì¸ ì œê³µìž</i> 는 ê³µìœ ëœ ì•± ë°ì´í„° ì§‘í•©ì„ ê´€ë¦¬í•©ë‹ˆë‹¤. ë°ì´í„°ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì´ë‚˜ SQLite ë°ì´í„°ë² ì´ìФ, -ë˜ëŠ” 웹ì´ë‚˜ 기타 ì˜êµ¬ì ì¸ ì €ìž¥ì†Œ 위치 중 ì•±ì´ ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ê³³ì´ë¼ë©´ ì–´ë””ì—ë“ ì €ìž¥í• ìˆ˜ -있습니다. 다른 여러 ì•±ì€ ì½˜í…ì¸ ì œê³µìžë¥¼ 통해 해당 ë°ì´í„°ë¥¼ 쿼리하거나, 심지어는 ìˆ˜ì •í• ìˆ˜ë„ -있습니다(콘í…ì¸ ì œê³µìžê°€ ê·¸ë ‡ê²Œ 하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우). 예를 들어, Android ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžì˜ ì—°ë½ì²˜ ì •ë³´ë¥¼ -관리하는 콘í…ì¸ ì œê³µìžë¥¼ ì œê³µí•©ë‹ˆë‹¤. ë”°ë¼ì„œ, ì ì ˆí•œ ê¶Œí•œì„ ê°€ì§„ 앱ì´ë¼ë©´ +<dd>í†µìƒ <i>콘í…ì¸ ì œê³µìž</i> 는 ê³µìœ ëœ ì•± ë°ì´í„° ì§‘í•©ì„ ê´€ë¦¬í•©ë‹ˆë‹¤. ë°ì´í„°ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì´ë‚˜ SQLite ë°ì´í„°ë² ì´ìФ, +ë˜ëŠ” 웹ì´ë‚˜ 기타 ì˜êµ¬ì ì¸ ì €ìž¥ì†Œ 위치 중 ì•±ì´ ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ê³³ì´ë¼ë©´ ì–´ë””ì—ë“ ì €ìž¥í• ìˆ˜ +있습니다. 다른 여러 ì•±ì€ ì½˜í…ì¸ ì œê³µìžë¥¼ 통해 해당 ë°ì´í„°ë¥¼ 쿼리하거나, 심지어는 ìˆ˜ì •í• ìˆ˜ë„ +있습니다(콘í…ì¸ ì œê³µìžê°€ ê·¸ë ‡ê²Œ 하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우). 예를 들어, Android ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžì˜ ì—°ë½ì²˜ ì •ë³´ë¥¼ +관리하는 콘í…ì¸ ì œê³µìžë¥¼ ì œê³µí•©ë‹ˆë‹¤. ë”°ë¼ì„œ, ì ì ˆí•œ ê¶Œí•œì„ ê°€ì§„ 앱ì´ë¼ë©´ ì–´ë–¤ 것ì´ë“ 해당 콘í…ì¸ ì œê³µìžì˜ ì¼ë¶€ë¥¼ 쿼리하여(예를 들어 {@link android.provider.ContactsContract.Data} 등) íŠ¹ì •í•œ ì‚¬ëžŒì— ëŒ€í•œ ì •ë³´ë¥¼ ì½ê³ 쓸 수 있습니다. -<p>콘í…ì¸ ì œê³µìžëŠ” 앱ì—서 비공개ì´ë©° ê³µìœ ë˜ì§€ 않는 ë°ì´í„°ë¥¼ ì½ê³ 쓰는 ë°ì—ë„ -ìœ ìš©í•©ë‹ˆë‹¤. 예를 들어 <a href="{@docRoot}resources/samples/NotePad/index.html">메모장</a> 샘플 ì•±ì€ ë©”ëª¨í•œ ë‚´ìš©ì„ ì €ìž¥í•˜ëŠ” ë° +<p>콘í…ì¸ ì œê³µìžëŠ” 앱ì—서 비공개ì´ë©° ê³µìœ ë˜ì§€ 않는 ë°ì´í„°ë¥¼ ì½ê³ 쓰는 ë°ì—ë„ +ìœ ìš©í•©ë‹ˆë‹¤. 예를 들어 <a href="{@docRoot}resources/samples/NotePad/index.html">메모장</a> 샘플 ì•±ì€ ë©”ëª¨í•œ ë‚´ìš©ì„ ì €ìž¥í•˜ëŠ” ë° ì½˜í…ì¸ ì œê³µìžë¥¼ 사용합니다.</p> <p>콘í…ì¸ ì œê³µìžëŠ” {@link android.content.ContentProvider}ì˜ -하위 í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©°, 다른 ì•±ì´ íŠ¸ëžœìžì…˜ì„ ìˆ˜í–‰í• ìˆ˜ 있ë„ë¡ í™œì„±í™”í•˜ëŠ” 표준 API ì§‘í•©ì„ +하위 í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©°, 다른 ì•±ì´ íŠ¸ëžœìžì…˜ì„ ìˆ˜í–‰í• ìˆ˜ 있ë„ë¡ í™œì„±í™”í•˜ëŠ” 표준 API ì§‘í•©ì„ êµ¬í˜„í•´ì•¼ 합니다. ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> </dd> @@ -144,18 +144,18 @@ android.provider.ContactsContract.Data} 등) íŠ¹ì •í•œ ì‚¬ëžŒì— ëŒ€í•œ ì •ë³´ë¥ <dt><b>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°</b></dt> -<dd>í†µìƒ <i>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°</i> 는 시스템 ì „ì²´ì— ëŒ€í•œ 브로드ìºìŠ¤íŠ¸ ê³µì§€ì— ì‘답하는 구성 요소를 -ë§í•©ë‹ˆë‹¤. ëŒ€ë‹¤ìˆ˜ì˜ ë¸Œë¡œë“œìºìŠ¤íŠ¸ëŠ” 시스템ì—서 시작합니다. 예를 들어, í™”ë©´ì´ êº¼ì¡Œë‹¤ê±°ë‚˜ +<dd>í†µìƒ <i>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°</i> 는 시스템 ì „ì²´ì— ëŒ€í•œ 브로드ìºìŠ¤íŠ¸ ê³µì§€ì— ì‘답하는 구성 요소를 +ë§í•©ë‹ˆë‹¤. ëŒ€ë‹¤ìˆ˜ì˜ ë¸Œë¡œë“œìºìŠ¤íŠ¸ëŠ” 시스템ì—서 시작합니다. 예를 들어, í™”ë©´ì´ êº¼ì¡Œë‹¤ê±°ë‚˜ 배터리 ìž”ëŸ‰ì´ ë¶€ì¡±í•˜ë‹¤ê±°ë‚˜, ì‚¬ì§„ì„ ìº¡ì²˜í–ˆë‹¤ëŠ” ê²ƒì„ ì•Œë¦¬ëŠ” 브로드ìºìŠ¤íŠ¸ê°€ 있습니다. -ì•±ë„ ë¸Œë¡œë“œìºìŠ¤íŠ¸ë¥¼ 시작합니다. 예를 들어, ê¸°ê¸°ì— ëª‡ 가지 ë°ì´í„°ë¥¼ 다운로드하여 다른 ì•±ë„ ì‚¬ìš©í• ìˆ˜ 있다는 -ì‚¬ì‹¤ì„ ë‹¤ë¥¸ 여러 앱ì—게 알리는 것입니다. 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 표시하지 않지만, -<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 ì•Œë¦¼ì„ ìƒì„±</a>하여 -사용ìžì—게 브로드ìºìŠ¤íŠ¸ ì´ë²¤íŠ¸ê°€ ë°œìƒí–ˆë‹¤ê³ 알릴 수 있습니다. 다만 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” -ê·¸ì € 다른 구성 ìš”ì†Œë¡œì˜ "게ì´íŠ¸ì›¨ì´"ì¸ ê²½ìš°ê°€ ë” ë³´íŽ¸ì ì´ê³ , ê·¹ì†ŒëŸ‰ì˜ ìž‘ì—…ë§Œ 수행하ë„ë¡ ë§Œë“¤ì–´ì§„ 경우가 많습니다. 예컨대 +ì•±ë„ ë¸Œë¡œë“œìºìŠ¤íŠ¸ë¥¼ 시작합니다. 예를 들어, ê¸°ê¸°ì— ëª‡ 가지 ë°ì´í„°ë¥¼ 다운로드하여 다른 ì•±ë„ ì‚¬ìš©í• ìˆ˜ 있다는 +ì‚¬ì‹¤ì„ ë‹¤ë¥¸ 여러 앱ì—게 알리는 것입니다. 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 표시하지 않지만, +<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 ì•Œë¦¼ì„ ìƒì„±</a>하여 +사용ìžì—게 브로드ìºìŠ¤íŠ¸ ì´ë²¤íŠ¸ê°€ ë°œìƒí–ˆë‹¤ê³ 알릴 수 있습니다. 다만 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” +ê·¸ì € 다른 구성 ìš”ì†Œë¡œì˜ "게ì´íŠ¸ì›¨ì´"ì¸ ê²½ìš°ê°€ ë” ë³´íŽ¸ì ì´ê³ , ê·¹ì†ŒëŸ‰ì˜ ìž‘ì—…ë§Œ 수행하ë„ë¡ ë§Œë“¤ì–´ì§„ 경우가 많습니다. 예컨대 서비스를 시작하여 ì´ë²¤íŠ¸ë¥¼ 근거로 한 ì–´ë–¤ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í• ìˆ˜ 있습니다. -<p>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” {@link android.content.BroadcastReceiver}ì˜ -하위 í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ê° ë¸Œë¡œë“œìºìŠ¤íŠ¸ëŠ” {@link android.content.Intent} ê°ì²´ë¡œ ì „ë‹¬ë©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” +<p>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” {@link android.content.BroadcastReceiver}ì˜ +하위 í´ëž˜ìŠ¤ë¡œ 구현ë˜ë©° ê° ë¸Œë¡œë“œìºìŠ¤íŠ¸ëŠ” {@link android.content.Intent} ê°ì²´ë¡œ ì „ë‹¬ë©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” {@link android.content.BroadcastReceiver} í´ëž˜ìŠ¤ë¥¼ 참조하ì‹ì‹œì˜¤.</p> </dd> @@ -163,72 +163,72 @@ android.provider.ContactsContract.Data} 등) íŠ¹ì •í•œ ì‚¬ëžŒì— ëŒ€í•œ ì •ë³´ë¥ -<p>Android 시스템 ë””ìžì¸ì˜ ë…특한 ì 으로 ì–´ë–¤ 앱ì´ë“ 다른 ì•±ì˜ êµ¬ì„± 요소를 ì‹œìž‘í• ìˆ˜ 있다는 ì ì„ -들 수 있습니다. 예를 들어 사용ìžê°€ 기기 ì¹´ë©”ë¼ë¡œ ì‚¬ì§„ì„ ìº¡ì²˜í•˜ê¸°ë¥¼ ë°”ë¼ëŠ” 경우, -그런 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ë˜ ë‹¤ë¥¸ ì•±ì´ ìžˆì„ ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. 그러면 ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” 액티비티를 ì§ì ‘ 개발하는 ëŒ€ì‹ -ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ê·¸ ì•±ì„ ì‚¬ìš©í•˜ë„ë¡ í•˜ë©´ ë©ë‹ˆë‹¤. ì¹´ë©”ë¼ ì•±ì— +<p>Android 시스템 ë””ìžì¸ì˜ ë…특한 ì 으로 ì–´ë–¤ 앱ì´ë“ 다른 ì•±ì˜ êµ¬ì„± 요소를 ì‹œìž‘í• ìˆ˜ 있다는 ì ì„ +들 수 있습니다. 예를 들어 사용ìžê°€ 기기 ì¹´ë©”ë¼ë¡œ ì‚¬ì§„ì„ ìº¡ì²˜í•˜ê¸°ë¥¼ ë°”ë¼ëŠ” 경우, +그런 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ë˜ ë‹¤ë¥¸ ì•±ì´ ìžˆì„ ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. 그러면 ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” 액티비티를 ì§ì ‘ 개발하는 ëŒ€ì‹ +ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ê·¸ ì•±ì„ ì‚¬ìš©í•˜ë„ë¡ í•˜ë©´ ë©ë‹ˆë‹¤. ì¹´ë©”ë¼ ì•±ì— í†µí•©í•˜ê¸°ëŠ”ì»¤ë…• ì¹´ë©”ë¼ ì•±ì˜ ì½”ë“œì— ì—°ê²°ì‹œí‚¬ í•„ìš”ì¡°ì°¨ë„ ì—†ìŠµë‹ˆë‹¤. -ê·¸ ëŒ€ì‹ , ê·¸ì € ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” ì¹´ë©”ë¼ ì•± ì•ˆì˜ í•´ë‹¹ 액티비티를 시작하기만 하면 -ë©ë‹ˆë‹¤. ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ ì‚¬ì§„ì´ ì•±ìœ¼ë¡œ 반환ë˜ê¸°ê¹Œì§€ 하여 바로 ì‚¬ìš©í• ìˆ˜ 있습니다. 사용ìžì—게는, +ê·¸ ëŒ€ì‹ , ê·¸ì € ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” ì¹´ë©”ë¼ ì•± ì•ˆì˜ í•´ë‹¹ 액티비티를 시작하기만 하면 +ë©ë‹ˆë‹¤. ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ ì‚¬ì§„ì´ ì•±ìœ¼ë¡œ 반환ë˜ê¸°ê¹Œì§€ 하여 바로 ì‚¬ìš©í• ìˆ˜ 있습니다. 사용ìžì—게는, 마치 ì¹´ë©”ë¼ê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì˜ ì¼ë¶€ë¶„ì¸ ê²ƒì²˜ëŸ¼ 보입니다.</p> -<p>ì‹œìŠ¤í…œì´ êµ¬ì„± 요소를 시작하는 경우, ê·¸ ì•±ì— ëŒ€í•œ 프로세스를 시작하는 것ì´ë©°(ì´ë¯¸ -실행 중ì´ì§€ ì•Šì€ ê²½ìš°), 해당 구성 ìš”ì†Œì— í•„ìš”í•œ í´ëž˜ìŠ¤ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 것입니다. 예를 들어 ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ -ì¹´ë©”ë¼ ì•± ë‚´ì—서 ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” 액티비티를 ì‹œìž‘í•œë‹¤ê³ í•˜ë©´, 해당 액티비티는 -여러분 ì•±ì˜ í”„ë¡œì„¸ìŠ¤ê°€ ì•„ë‹ˆë¼ ì¹´ë©”ë¼ ì•±ì— ì†í•œ 프로세스ì—서 실행ë©ë‹ˆë‹¤. -ë”°ë¼ì„œ ëŒ€ë¶€ë¶„ì˜ ë‹¤ë¥¸ 시스템ì—서와는 달리 Android 앱ì—는 단ì¼í•œ ì§„ìž… +<p>ì‹œìŠ¤í…œì´ êµ¬ì„± 요소를 시작하는 경우, ê·¸ ì•±ì— ëŒ€í•œ 프로세스를 시작하는 것ì´ë©°(ì´ë¯¸ +실행 중ì´ì§€ ì•Šì€ ê²½ìš°), 해당 구성 ìš”ì†Œì— í•„ìš”í•œ í´ëž˜ìŠ¤ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 것입니다. 예를 들어 ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ +ì¹´ë©”ë¼ ì•± ë‚´ì—서 ì‚¬ì§„ì„ ìº¡ì²˜í•˜ëŠ” 액티비티를 ì‹œìž‘í•œë‹¤ê³ í•˜ë©´, 해당 액티비티는 +여러분 ì•±ì˜ í”„ë¡œì„¸ìŠ¤ê°€ ì•„ë‹ˆë¼ ì¹´ë©”ë¼ ì•±ì— ì†í•œ 프로세스ì—서 실행ë©ë‹ˆë‹¤. +ë”°ë¼ì„œ ëŒ€ë¶€ë¶„ì˜ ë‹¤ë¥¸ 시스템ì—서와는 달리 Android 앱ì—는 단ì¼í•œ ì§„ìž… ì§€ì ì´ ì—†ìŠµë‹ˆë‹¤(예를 들어 {@code main()} ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤).</p> -<p>ì‹œìŠ¤í…œì´ ê° ì•±ì„ ë³„ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행하며 다른 ì•±ì— ëŒ€í•œ 액세스를 ì œí•œí•˜ëŠ” -íŒŒì¼ ê¶Œí•œì„ ê°€ì§€ê³ ì‹¤í–‰í•˜ê¸° ë•Œë¬¸ì— ì—¬ëŸ¬ë¶„ì˜ ì•±ì€ ë˜ ë‹¤ë¥¸ 앱ì—서 곧바로 구성 요소를 -í™œì„±í™”í• ìˆ˜ëŠ” 없습니다. 하지만 Android ì‹œìŠ¤í…œì€ í• ìˆ˜ 있습니다. 그래서 ë˜ ë‹¤ë¥¸ ì•±ì— ìžˆëŠ” -구성 요소를 í™œì„±í™”í•˜ë ¤ë©´ ì‹œìŠ¤í…œì— ë©”ì‹œì§€ë¥¼ ì „ë‹¬í•˜ì—¬ íŠ¹ì • 구성 요소를 ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” <em>ì¸í…트</em>를 +<p>ì‹œìŠ¤í…œì´ ê° ì•±ì„ ë³„ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행하며 다른 ì•±ì— ëŒ€í•œ 액세스를 ì œí•œí•˜ëŠ” +íŒŒì¼ ê¶Œí•œì„ ê°€ì§€ê³ ì‹¤í–‰í•˜ê¸° ë•Œë¬¸ì— ì—¬ëŸ¬ë¶„ì˜ ì•±ì€ ë˜ ë‹¤ë¥¸ 앱ì—서 곧바로 구성 요소를 +í™œì„±í™”í• ìˆ˜ëŠ” 없습니다. 하지만 Android ì‹œìŠ¤í…œì€ í• ìˆ˜ 있습니다. 그래서 ë˜ ë‹¤ë¥¸ ì•±ì— ìžˆëŠ” +구성 요소를 í™œì„±í™”í•˜ë ¤ë©´ ì‹œìŠ¤í…œì— ë©”ì‹œì§€ë¥¼ ì „ë‹¬í•˜ì—¬ íŠ¹ì • 구성 요소를 ì‹œìž‘í•˜ê³ ìž í•˜ëŠ” <em>ì¸í…트</em>를 ë°í˜€ì•¼ 합니다. 그러면 ì‹œìŠ¤í…œì´ ëŒ€ì‹ í•´ë‹¹ 구성 요소를 활성화해ì¤ë‹ˆë‹¤.</p> <h3 id="ActivatingComponents">구성 요소 활성화</h3> -<p>네 가지 구성 요소 중 세 가지—액티비티, 서비스 ë° +<p>네 가지 구성 요소 중 세 가지—액티비티, 서비스 ë° ë¸Œë¡œë“œìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°—는 ì¼ëª… <em>ì¸í…트</em>ë¼ê³ 하는 비ë™ê¸°ì‹ 메시지가 활성화합니다. -ì¸í…트는 ê°ê°ì˜ 구성 요소를 ëŸ°íƒ€ìž„ì— ì„œë¡œ ë°”ì¸ë”©í•˜ë©°(다른 구성 요소로부터 ìž‘ì—…ì„ ìš”ì²í•˜ëŠ” -ì¼ì¢…ì˜ ë©”ì‹ ì €ë¡œ ìƒê°í•˜ë©´ ë©ë‹ˆë‹¤), ì´ëŠ” 구성 요소가 ì—¬ëŸ¬ë¶„ì˜ ì•±ì— ì†í•˜ë“ ì•„ë‹ˆë“ +ì¸í…트는 ê°ê°ì˜ 구성 요소를 ëŸ°íƒ€ìž„ì— ì„œë¡œ ë°”ì¸ë”©í•˜ë©°(다른 구성 요소로부터 ìž‘ì—…ì„ ìš”ì²í•˜ëŠ” +ì¼ì¢…ì˜ ë©”ì‹ ì €ë¡œ ìƒê°í•˜ë©´ ë©ë‹ˆë‹¤), ì´ëŠ” 구성 요소가 ì—¬ëŸ¬ë¶„ì˜ ì•±ì— ì†í•˜ë“ ì•„ë‹ˆë“ ë¬´ê´€í•©ë‹ˆë‹¤.</p> -<p>ì¸í…트는 {@link android.content.Intent} ê°ì²´ë¡œ ìƒì„±ë˜ë©°, ì´ê²ƒì´ -íŠ¹ì • 구성 요소를 í™œì„±í™”í• ì§€ 아니면 구성 ìš”ì†Œì˜ íŠ¹ì • <em>ìœ í˜•</em>ì„ í™œì„±í™”í• ì§€ë¥¼ 나타내는 메시지를 ì •ì˜í•©ë‹ˆë‹¤. ì¸í…트는 +<p>ì¸í…트는 {@link android.content.Intent} ê°ì²´ë¡œ ìƒì„±ë˜ë©°, ì´ê²ƒì´ +íŠ¹ì • 구성 요소를 í™œì„±í™”í• ì§€ 아니면 구성 ìš”ì†Œì˜ íŠ¹ì • <em>ìœ í˜•</em>ì„ í™œì„±í™”í• ì§€ë¥¼ 나타내는 메시지를 ì •ì˜í•©ë‹ˆë‹¤. ì¸í…트는 ê°ê° 명시ì ì´ê±°ë‚˜ 암시ì ì¼ ìˆ˜ 있습니다.</p> -<p>액티비티와 ì„œë¹„ìŠ¤ì˜ ê²½ìš°, ì¸í…트는 ìˆ˜í–‰í• ìž‘ì—…ì„ ì •ì˜í•˜ë©°(예를 들어 무언가를 '보기" ë˜ëŠ” -"보내기"), ìž‘ì—…ì„ ìˆ˜í–‰í• ë°ì´í„°ì˜ URI를 나타낼 수 있습니다(시작ë˜ëŠ” 구성 요소가 알아야 í• ê²ƒì€ -ì´ì™¸ì—ë„ ë§Žì´ ìžˆìŠµë‹ˆë‹¤). 예를 들어, ì¸í…트는 ì•¡í‹°ë¹„í‹°ì— ì´ë¯¸ì§€ë¥¼ 표시하거나 웹 페ì´ì§€ë¥¼ ì—´ë¼ëŠ” ìš”ì²ì„ -ì „ë‹¬í• ìˆ˜ 있습니다. ì–´ë–¤ 경우ì—는 액티비티를 시작하여 -결과를 받아오ë„ë¡ í• ìˆ˜ 있습니다. ì´ëŸ° 경우 ì´ ì•¡í‹°ë¹„í‹°ëŠ” -{@link android.content.Intent}로 결과를 ë°˜í™˜í•˜ê¸°ë„ í•©ë‹ˆë‹¤(예를 들어, 사용ìžê°€ -ê°œì¸ì ì¸ ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ë„ë¡ í•œ ë‹¤ìŒ ê·¸ê²ƒì„ ë°˜í™˜í•˜ë„ë¡ í•˜ëŠ” ì¸í…트를 ë°œí–‰í• ìˆ˜ 있습니다—반환 ì¸í…íŠ¸ì— +<p>액티비티와 ì„œë¹„ìŠ¤ì˜ ê²½ìš°, ì¸í…트는 ìˆ˜í–‰í• ìž‘ì—…ì„ ì •ì˜í•˜ë©°(예를 들어 무언가를 '보기" ë˜ëŠ” +"보내기"), ìž‘ì—…ì„ ìˆ˜í–‰í• ë°ì´í„°ì˜ URI를 나타낼 수 있습니다(시작ë˜ëŠ” 구성 요소가 알아야 í• ê²ƒì€ +ì´ì™¸ì—ë„ ë§Žì´ ìžˆìŠµë‹ˆë‹¤). 예를 들어, ì¸í…트는 ì•¡í‹°ë¹„í‹°ì— ì´ë¯¸ì§€ë¥¼ 표시하거나 웹 페ì´ì§€ë¥¼ ì—´ë¼ëŠ” ìš”ì²ì„ +ì „ë‹¬í• ìˆ˜ 있습니다. ì–´ë–¤ 경우ì—는 액티비티를 시작하여 +결과를 받아오ë„ë¡ í• ìˆ˜ 있습니다. ì´ëŸ° 경우 ì´ ì•¡í‹°ë¹„í‹°ëŠ” +{@link android.content.Intent}로 결과를 ë°˜í™˜í•˜ê¸°ë„ í•©ë‹ˆë‹¤(예를 들어, 사용ìžê°€ +ê°œì¸ì ì¸ ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ë„ë¡ í•œ ë‹¤ìŒ ê·¸ê²ƒì„ ë°˜í™˜í•˜ë„ë¡ í•˜ëŠ” ì¸í…트를 ë°œí–‰í• ìˆ˜ 있습니다—반환 ì¸í…íŠ¸ì— ì„ íƒí•œ ì—°ë½ì²˜ë¥¼ 가리키는 URIê°€ í¬í•¨ë©ë‹ˆë‹¤).</p> -<p>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ì˜ ê²½ìš°, ì¸í…트는 단순히 브로드ìºìŠ¤íŠ¸ë ì•Œë¦¼ì„ -ì •ì˜í• ë¿ìž…니다(예를 들어, 기기 배터리 ìž”ëŸ‰ì´ ë‚®ë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ëŠ” 브로드ìºìŠ¤íŠ¸ì—는 +<p>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ì˜ ê²½ìš°, ì¸í…트는 단순히 브로드ìºìŠ¤íŠ¸ë ì•Œë¦¼ì„ +ì •ì˜í• ë¿ìž…니다(예를 들어, 기기 배터리 ìž”ëŸ‰ì´ ë‚®ë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ëŠ” 브로드ìºìŠ¤íŠ¸ì—는 "배터리 부족"ì„ ë‚˜íƒ€ë‚´ëŠ” ì•Œë ¤ì§„ 작업 문ìžì—´ë§Œ í¬í•¨ë©ë‹ˆë‹¤).</p> -<p>ë‚¨ì€ í•˜ë‚˜ì˜ êµ¬ì„± 요소 ìœ í˜•, 즉 콘í…ì¸ ì œê³µìžëŠ” ì¸í…트가 활성화하지 않습니다. 그보다는 -{@link android.content.ContentResolver}ë¡œë¶€í„°ì˜ ìš”ì²ìœ¼ë¡œ ì§€ì •ë˜ë©´ 활성화ë©ë‹ˆë‹¤. 콘í…ì¸ -확ì¸ìžëŠ” 콘í…ì¸ ì œê³µìžì™€ì˜ ëª¨ë“ ì§ì ‘ì ì¸ íŠ¸ëžœìžì…˜ì„ 처리하여 +<p>ë‚¨ì€ í•˜ë‚˜ì˜ êµ¬ì„± 요소 ìœ í˜•, 즉 콘í…ì¸ ì œê³µìžëŠ” ì¸í…트가 활성화하지 않습니다. 그보다는 +{@link android.content.ContentResolver}ë¡œë¶€í„°ì˜ ìš”ì²ìœ¼ë¡œ ì§€ì •ë˜ë©´ 활성화ë©ë‹ˆë‹¤. 콘í…ì¸ +확ì¸ìžëŠ” 콘í…ì¸ ì œê³µìžì™€ì˜ ëª¨ë“ ì§ì ‘ì ì¸ íŠ¸ëžœìžì…˜ì„ 처리하여 ì œê³µìžì™€ì˜ 트랜ìžì…˜ì„ 수행하는 구성 요소가 그런 ì¼ì„ 하지 ì•Šì•„ë„ ë˜ê²Œ í•˜ê³ , ê·¸ ëŒ€ì‹ {@link -android.content.ContentResolver} ê°ì²´ì—서 메서드를 호출합니다. ì´ë ‡ê²Œ ë˜ë©´ 콘í…ì¸ ì œê³µìžì™€ +android.content.ContentResolver} ê°ì²´ì—서 메서드를 호출합니다. ì´ë ‡ê²Œ ë˜ë©´ 콘í…ì¸ ì œê³µìžì™€ ì •ë³´ë¥¼ ìš”ì²í•˜ëŠ” 구성 요소 사ì´ì— ì¶”ìƒí™” ê³„ì¸µì´ í•˜ë‚˜ 남습니다(보안 목ì ).</p> <p>ê° ìœ í˜•ì˜ êµ¬ì„± 요소를 활성화하는 ë°ì—는 ê°ê¸° 별ë„ì˜ ë©”ì„œë“œê°€ 있습니다.</p> <ul> - <li>액티비티를 ì‹œìž‘í•˜ë ¤ë©´(아니면 무언가 새로운 í• ì¼ì„ ì£¼ë ¤ë©´) + <li>액티비티를 ì‹œìž‘í•˜ë ¤ë©´(아니면 무언가 새로운 í• ì¼ì„ ì£¼ë ¤ë©´) {@link android.content.Intent}를 {@link android.content.Context#startActivity -startActivity()} ë˜ëŠ” {@link android.app.Activity#startActivityForResult startActivityForResult()}ì— +startActivity()} ë˜ëŠ” {@link android.app.Activity#startActivityForResult startActivityForResult()}ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤(액티비티가 결과를 반환하기를 ì›í•˜ëŠ” 경우).</li> - <li>서비스를 ì‹œìž‘í•˜ë ¤ë©´(ë˜ëŠ” ì§„í–‰ ì¤‘ì¸ ì„œë¹„ìŠ¤ì— ìƒˆë¡œìš´ ì§€ì¹¨ì„ ì£¼ë ¤ë©´) + <li>서비스를 ì‹œìž‘í•˜ë ¤ë©´(ë˜ëŠ” ì§„í–‰ ì¤‘ì¸ ì„œë¹„ìŠ¤ì— ìƒˆë¡œìš´ ì§€ì¹¨ì„ ì£¼ë ¤ë©´) {@link android.content.Intent}를 {@link android.content.Context#startService -startService()}ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. 아니면 {@link android.content.Intent}를 +startService()}ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. 아니면 {@link android.content.Intent}를 {@link android.content.Context#bindService bindService()}ì— ì „ë‹¬í•˜ì—¬ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</li> - <li>브로드ìºìŠ¤íŠ¸ë¥¼ ì‹œìž‘í•˜ë ¤ë©´ {@link android.content.Intent}를 + <li>브로드ìºìŠ¤íŠ¸ë¥¼ ì‹œìž‘í•˜ë ¤ë©´ {@link android.content.Intent}를 {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()} ë˜ëŠ” {@link android.content.Context#sendStickyBroadcast sendStickyBroadcast()}와 ê°™ì€ ë©”ì„œë“œì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤.</li> @@ -236,29 +236,29 @@ android.content.Context#sendStickyBroadcast sendStickyBroadcast()}와 ê°™ì€ ë©” android.content.ContentProvider#query query()}를 호출하면 ë©ë‹ˆë‹¤.</li> </ul> -<p>ì¸í…트 ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° -ì¸í…트 í•„í„°</a>문서를 참조하ì‹ì‹œì˜¤. íŠ¹ì • 구성 요소를 활성화하는 ë° ê´€í•œ ìžì„¸í•œ ì •ë³´ ë˜í•œ ë‹¤ìŒ ë¬¸ì„œì— +<p>ì¸í…트 ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° +ì¸í…트 í•„í„°</a>문서를 참조하ì‹ì‹œì˜¤. íŠ¹ì • 구성 요소를 활성화하는 ë° ê´€í•œ ìžì„¸í•œ ì •ë³´ ë˜í•œ ë‹¤ìŒ ë¬¸ì„œì— ì œê³µë˜ì–´ 있습니다. <a href="{@docRoot}guide/components/activities.html">액티비티</a>, <a href="{@docRoot}guide/components/services.html">서비스</a>, {@link android.content.BroadcastReceiver} ë° <a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a>.</p> <h2 id="Manifest">매니페스트 파ì¼</h2> -<p>Android ì‹œìŠ¤í…œì´ ì•± 구성 요소를 ì‹œìž‘í•˜ë ¤ë©´ ì‹œìŠ¤í…œì€ ìš°ì„ í•´ë‹¹ 구성 요소가 +<p>Android ì‹œìŠ¤í…œì´ ì•± 구성 요소를 ì‹œìž‘í•˜ë ¤ë©´ ì‹œìŠ¤í…œì€ ìš°ì„ í•´ë‹¹ 구성 요소가 존재하는지 알아야 합니다. 그러기 위해 ì•±ì˜ {@code AndroidManifest.xml} 파ì¼ì„ ì½ìŠµë‹ˆë‹¤(즉 "매니페스트" -파ì¼). ì•±ì€ ì´ íŒŒì¼ ì•ˆì— ëª¨ë“ êµ¬ì„± 요소를 ì„ ì–¸í•´ì•¼ 하며, ì´ íŒŒì¼ì€ 앱 프로ì 트 ë””ë ‰í„°ë¦¬ì˜ ë£¨íŠ¸ì— +파ì¼). ì•±ì€ ì´ íŒŒì¼ ì•ˆì— ëª¨ë“ êµ¬ì„± 요소를 ì„ ì–¸í•´ì•¼ 하며, ì´ íŒŒì¼ì€ 앱 프로ì 트 ë””ë ‰í„°ë¦¬ì˜ ë£¨íŠ¸ì— ìžˆì–´ì•¼ 합니다.</p> <p>매니페스트는 ì•±ì˜ êµ¬ì„± 요소를 ì„ ì–¸í•˜ëŠ” 것 ì´ì™¸ì—ë„ ìˆ˜ë§Žì€ ì—í• ì„ í•©ë‹ˆë‹¤. 예를 들면 다ìŒê³¼ 같습니다.</p> <ul> - <li>ì•±ì´ ìš”êµ¬í•˜ëŠ” ëª¨ë“ ì‚¬ìš©ìž ê¶Œí•œ ì‹ë³„(예: ì¸í„°ë„· 액세스 ë˜ëŠ” 사용ìžì˜ ì—°ë½ì²˜ë¡œì˜ + <li>ì•±ì´ ìš”êµ¬í•˜ëŠ” ëª¨ë“ ì‚¬ìš©ìž ê¶Œí•œ ì‹ë³„(예: ì¸í„°ë„· 액세스 ë˜ëŠ” 사용ìžì˜ ì—°ë½ì²˜ë¡œì˜ ì½ê¸° 액세스)</li> <li>ì•±ì´ ì–´ëŠ API를 사용하는지를 근거로 하여 앱ì—서 요구하는 최소 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API ë ˆë²¨</a> ì„ ì–¸</li> - <li>앱ì—서 사용하거나 필요로 하는 하드웨어 ë° ì†Œí”„íŠ¸ì›¨ì–´ 기능 ì„ ì–¸(예: ì¹´ë©”ë¼, + <li>앱ì—서 사용하거나 필요로 하는 하드웨어 ë° ì†Œí”„íŠ¸ì›¨ì–´ 기능 ì„ ì–¸(예: ì¹´ë©”ë¼, 블루투스 서비스 ë˜ëŠ” 멀티터치 화면 등)</li> - <li>ì•±ì´ ë§í¬ë˜ì–´ì•¼ 하는 API ë¼ì´ë¸ŒëŸ¬ë¦¬(Android í”„ë ˆìž„ì›Œí¬ + <li>ì•±ì´ ë§í¬ë˜ì–´ì•¼ 하는 API ë¼ì´ë¸ŒëŸ¬ë¦¬(Android í”„ë ˆìž„ì›Œí¬ API ì œì™¸)(예: <a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps ë¼ì´ë¸ŒëŸ¬ë¦¬</a>)</li> <li>ê·¸ 외 기타 등등</li> @@ -267,7 +267,7 @@ API ì œì™¸)(예: <a href="http://code.google.com/android/add-ons/google-apis/map <h3 id="DeclaringComponents">구성 요소 ì„ ì–¸</h3> -<p>ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ ì£¼ìš” ìž‘ì—…ì€ ì‹œìŠ¤í…œì— ì•±ì˜ êµ¬ì„± ìš”ì†Œì— ëŒ€í•´ 알리는 것입니다. 예를 들어 +<p>ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ ì£¼ìš” ìž‘ì—…ì€ ì‹œìŠ¤í…œì— ì•±ì˜ êµ¬ì„± ìš”ì†Œì— ëŒ€í•´ 알리는 것입니다. 예를 들어 매니페스트 파ì¼ì€ 액티비티를 다ìŒê³¼ ê°™ì´ ì„ ì–¸í• ìˆ˜ 있습니다. </p> <pre> @@ -283,36 +283,36 @@ API ì œì™¸)(예: <a href="http://code.google.com/android/add-ons/google-apis/map <p><code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -요소ì—서 {@code android:icon} ì†ì„±ì€ ì•±ì„ ì‹ë³„하는 ì•„ì´ì½˜ì— 대한 리소스를 +요소ì—서 {@code android:icon} ì†ì„±ì€ ì•±ì„ ì‹ë³„하는 ì•„ì´ì½˜ì— 대한 리소스를 가리킵니다.</p> <p><code><a -href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 요소ì—서는, +href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 요소ì—서는, {@code android:name} ì†ì„±ì´ {@link -android.app.Activity} 하위 í´ëž˜ìŠ¤ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ë©° {@code android:label} ì†ì„±ì€ ì•¡í‹°ë¹„í‹°ì˜ +android.app.Activity} 하위 í´ëž˜ìŠ¤ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ë©° {@code android:label} ì†ì„±ì€ ì•¡í‹°ë¹„í‹°ì˜ ì‚¬ìš©ìžì—게 표시ë˜ëŠ” ë ˆì´ë¸”로 ì‚¬ìš©í• ë¬¸ìžì—´ì„ 나타냅니다.</p> <p>ëª¨ë“ ì•± 구성 요소를 ì´ë ‡ê²Œ ì„ ì–¸í•´ì•¼ 합니다.</p> <ul> - <li>액티비티는 + <li>액티비티는 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 요소</li> - <li>서비스는 + <li>서비스는 <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> 요소</li> - <li>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” + <li>브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” <code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> 요소</li> - <li>콘í…ì¸ ì œê³µìžëŠ” + <li>콘í…ì¸ ì œê³µìžëŠ” <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> 요소</li> </ul> -<p>액티비티, 서비스를 비롯하여 소스ì—는 í¬í•¨ì‹œí‚¤ì§€ë§Œ 매니페스트ì—서는 ì„ ì–¸í•˜ì§€ 않는 -콘í…ì¸ ì œê³µìžëŠ” ì‹œìŠ¤í…œì— í‘œì‹œë˜ì§€ 않으며, ë”°ë¼ì„œ 실행ë 수 없습니다. 그러나 +<p>액티비티, 서비스를 비롯하여 소스ì—는 í¬í•¨ì‹œí‚¤ì§€ë§Œ 매니페스트ì—서는 ì„ ì–¸í•˜ì§€ 않는 +콘í…ì¸ ì œê³µìžëŠ” ì‹œìŠ¤í…œì— í‘œì‹œë˜ì§€ 않으며, ë”°ë¼ì„œ 실행ë 수 없습니다. 그러나 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ëŠ” 매니페스트ì—서 ì„ ì–¸í•´ë„ ë˜ê³ 코드를 사용해( -{@link android.content.BroadcastReceiver} ê°ì²´ë¡œ) ë™ì 으로 ìƒì„±í•œ ë‹¤ìŒ ì‹œìŠ¤í…œì— ë“±ë¡í•´ë„ ë©ë‹ˆë‹¤. ì´ë•Œ +{@link android.content.BroadcastReceiver} ê°ì²´ë¡œ) ë™ì 으로 ìƒì„±í•œ ë‹¤ìŒ ì‹œìŠ¤í…œì— ë“±ë¡í•´ë„ ë©ë‹ˆë‹¤. ì´ë•Œ {@link android.content.Context#registerReceiver registerReceiver()}를 호출하는 ë°©ë²•ì„ ì”니다.</p> <p>ì•±ì— ë§žëŠ” 매니페스트 파ì¼ì„ 구성하는 ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml 파ì¼</a>ì„ @@ -322,26 +322,26 @@ href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a <h3 id="DeclaringComponentCapabilities">구성 요소 기능 ì„ ì–¸</h3> -<p>위ì—서 논한 바와 ê°™ì´, <a href="#ActivatingComponents">활성화 ìƒíƒœì˜ 구성 요소</a>ì—서는 -{@link android.content.Intent}를 사용하여 액티비티, 서비스 ë° ë¸Œë¡œë“œìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ë¥¼ ì‹œìž‘í• ìˆ˜ 있습니다. ê·¸ë ‡ê²Œ í•˜ë ¤ë©´ -ëŒ€ìƒ êµ¬ì„± 요소를 ì¸í…트 ë‚´ì—서 명시ì 으로 명명하면 ë©ë‹ˆë‹¤(구성 요소 í´ëž˜ìФ ì´ë¦„ì„ ì‚¬ìš©). 그러나, -ì¸í…íŠ¸ì˜ ì§„ì •í•œ íž˜ì€ <em>암시ì ì¸í…트</em>ì˜ ê°œë…ì—서 발휘ë©ë‹ˆë‹¤. 암시ì ì¸í…트는 -ê·¸ì € ìˆ˜í–‰í• ìž‘ì—…ì˜ ìœ í˜•ì„ ì„¤ëª…í• ë¿ì´ë©°(ë˜í•œ, ì„ íƒ ì‚¬í•으로, 해당 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” -ë°ì´í„° 위치ë„) ì‹œìŠ¤í…œì— ê¸°ê¸°ì—서 ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있는 구성 요소를 찾아 -시작하ë„ë¡ í•´ì¤ë‹ˆë‹¤. ì¸í…트가 설명한 ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있는 구성 요소가 여러 ê°œì¸ ê²½ìš°, +<p>위ì—서 논한 바와 ê°™ì´, <a href="#ActivatingComponents">활성화 ìƒíƒœì˜ 구성 요소</a>ì—서는 +{@link android.content.Intent}를 사용하여 액티비티, 서비스 ë° ë¸Œë¡œë“œìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ë¥¼ ì‹œìž‘í• ìˆ˜ 있습니다. ê·¸ë ‡ê²Œ í•˜ë ¤ë©´ +ëŒ€ìƒ êµ¬ì„± 요소를 ì¸í…트 ë‚´ì—서 명시ì 으로 명명하면 ë©ë‹ˆë‹¤(구성 요소 í´ëž˜ìФ ì´ë¦„ì„ ì‚¬ìš©). 그러나, +ì¸í…íŠ¸ì˜ ì§„ì •í•œ íž˜ì€ <em>암시ì ì¸í…트</em>ì˜ ê°œë…ì—서 발휘ë©ë‹ˆë‹¤. 암시ì ì¸í…트는 +ê·¸ì € ìˆ˜í–‰í• ìž‘ì—…ì˜ ìœ í˜•ì„ ì„¤ëª…í• ë¿ì´ë©°(ë˜í•œ, ì„ íƒ ì‚¬í•으로, 해당 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” +ë°ì´í„° 위치ë„) ì‹œìŠ¤í…œì— ê¸°ê¸°ì—서 ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있는 구성 요소를 찾아 +시작하ë„ë¡ í•´ì¤ë‹ˆë‹¤. ì¸í…트가 설명한 ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있는 구성 요소가 여러 ê°œì¸ ê²½ìš°, ì–´ëŠ ê²ƒì„ ì‚¬ìš©í• ì§€ 사용ìžê°€ ì„ íƒí•©ë‹ˆë‹¤.</p> -<p>ì‹œìŠ¤í…œì´ ì¸í…íŠ¸ì— ì‘ë‹µí• ìˆ˜ 있는 구성 요소를 ì‹ë³„하는 ë°©ë²•ì€ ìˆ˜ì‹ í•œ ì¸í…트를 - <i>ì¸í…트 í•„í„°</i> 와 비êµí•˜ëŠ” 것입니다. ì´ ì¸í…트 필터는 ê¸°ê¸°ì˜ ë‹¤ë¥¸ 여러 ì•±ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ +<p>ì‹œìŠ¤í…œì´ ì¸í…íŠ¸ì— ì‘ë‹µí• ìˆ˜ 있는 구성 요소를 ì‹ë³„하는 ë°©ë²•ì€ ìˆ˜ì‹ í•œ ì¸í…트를 + <i>ì¸í…트 í•„í„°</i> 와 비êµí•˜ëŠ” 것입니다. ì´ ì¸í…트 필터는 ê¸°ê¸°ì˜ ë‹¤ë¥¸ 여러 ì•±ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì´ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>ì•±ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, ì„ íƒ ì‚¬í•으로 -해당 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ëŠ¥ì„ ì„ ì–¸í•˜ëŠ” ì¸í…트 필터를 í¬í•¨ì‹œì¼œì„œ 다른 ì•±ìœ¼ë¡œë¶€í„°ì˜ ì¸í…íŠ¸ì— -ì‘ë‹µí• ìˆ˜ 있ë„ë¡ í• ìˆ˜ 있습니다. 구성 ìš”ì†Œì— ëŒ€í•œ ì¸í…트 필터를 ì„ ì–¸í•˜ë ¤ë©´ +<p>ì•±ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, ì„ íƒ ì‚¬í•으로 +해당 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ëŠ¥ì„ ì„ ì–¸í•˜ëŠ” ì¸í…트 필터를 í¬í•¨ì‹œì¼œì„œ 다른 ì•±ìœ¼ë¡œë¶€í„°ì˜ ì¸í…íŠ¸ì— +ì‘ë‹µí• ìˆ˜ 있ë„ë¡ í• ìˆ˜ 있습니다. 구성 ìš”ì†Œì— ëŒ€í•œ ì¸í…트 필터를 ì„ ì–¸í•˜ë ¤ë©´ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 요소를 해당 구성 ìš”ì†Œì˜ ì„ ì–¸ 요소 하위로 추가하면 ë©ë‹ˆë‹¤.</p> -<p>예를 들어, 새 ì´ë©”ì¼ì„ 작성하는 ë° ì“°ëŠ” 액티비티가 있는 ì´ë©”ì¼ ì•±ì„ êµ¬ì¶•í–ˆë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. ì´ë•Œ "ì „ì†¡" ì¸í…íŠ¸ì— +<p>예를 들어, 새 ì´ë©”ì¼ì„ 작성하는 ë° ì“°ëŠ” 액티비티가 있는 ì´ë©”ì¼ ì•±ì„ êµ¬ì¶•í–ˆë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. ì´ë•Œ "ì „ì†¡" ì¸í…íŠ¸ì— ì‘답하는 ì¸í…트 필터를 ì„ ì–¸í•˜ë ¤ë©´(새 ì´ë©”ì¼ì„ ì „ì†¡í•˜ê¸° 위해) 다ìŒê³¼ ê°™ì´ í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> <manifest ... > @@ -360,7 +360,7 @@ href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a <p>그런 다ìŒ, 다른 ì•±ì´ {@link android.content.Intent#ACTION_SEND} ìž‘ì—…ì„ ê°€ì§„ ì¸í…트를 ìƒì„±í•˜ì—¬ ê·¸ê²ƒì„ {@link android.app.Activity#startActivity -startActivity()}로 ì „ë‹¬í•˜ë©´ ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ë¶„ì˜ ì•¡í‹°ë¹„í‹°ë¥¼ 시작하여 사용ìžê°€ ì´ë©”ì¼ì„ 임시 ë³´ê´€í•˜ê³ ì „ì†¡í• ìˆ˜ +startActivity()}로 ì „ë‹¬í•˜ë©´ ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ë¶„ì˜ ì•¡í‹°ë¹„í‹°ë¥¼ 시작하여 사용ìžê°€ ì´ë©”ì¼ì„ 임시 ë³´ê´€í•˜ê³ ì „ì†¡í• ìˆ˜ 있습니다.</p> <p>ì¸í…트 í•„í„° ìƒì„±ì— 관한 ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> 문서를 참조하ì‹ì‹œì˜¤. @@ -370,16 +370,16 @@ startActivity()}로 ì „ë‹¬í•˜ë©´ ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ë¶„ì˜ ì•¡í‹°ë¹„í‹°ë¥¼ ì‹œìž <h3 id="DeclaringRequirements">앱 요구 ì‚¬í• ì„ ì–¸</h3> -<p>Android로 구ë™ë˜ëŠ” 기기는 ìˆ˜ì—†ì´ ë§Žì§€ë§Œ ëª¨ë‘ ë˜‘ê°™ì€ íŠ¹ì§•ì„ ê°–ê³ ê°™ì€ -ê¸°ëŠ¥ì„ ì œê³µí•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ì•±ì´ í•„ìš”ë¡œ 하는 ê¸°ëŠ¥ì´ ë¶€ì¡±í•œ ê¸°ê¸°ì— ì•±ì„ ì„¤ì¹˜í•˜ê²Œ ë˜ëŠ” 불ìƒì‚¬ë¥¼ ë°©ì§€í•˜ë ¤ë©´, -ì•±ì´ ì§€ì›í•˜ëŠ” 기기 ìœ í˜•ì— ëŒ€í•œ í”„ë¡œí•„ì„ ëª…í™•í•˜ê²Œ ì •ì˜í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. -ê·¸ëŸ¬ë ¤ë©´ 매니페스트 파ì¼ì— 기기와 소프트웨어 요구 사í•ì„ -ì„ ì–¸í•˜ë©´ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì„ ì–¸ì€ ëŒ€ë¶€ë¶„ ì •ë³´ì„±ì¼ ë¿ì´ë©° ì‹œìŠ¤í…œì€ ì´ë¥¼ ì½ì§€ 않는 ê²ƒì´ ì¼ë°˜ì ì´ì§€ë§Œ, -Google Play와 ê°™ì€ ì™¸ë¶€ 서비스는 사용ìžê°€ 본ì¸ì˜ 기기ì—서 ì•±ì„ ê²€ìƒ‰í• ë•Œ í•„í„°ë§ì„ ì œê³µí•˜ê¸° 위해 +<p>Android로 구ë™ë˜ëŠ” 기기는 ìˆ˜ì—†ì´ ë§Žì§€ë§Œ ëª¨ë‘ ë˜‘ê°™ì€ íŠ¹ì§•ì„ ê°–ê³ ê°™ì€ +ê¸°ëŠ¥ì„ ì œê³µí•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ì•±ì´ í•„ìš”ë¡œ 하는 ê¸°ëŠ¥ì´ ë¶€ì¡±í•œ ê¸°ê¸°ì— ì•±ì„ ì„¤ì¹˜í•˜ê²Œ ë˜ëŠ” 불ìƒì‚¬ë¥¼ ë°©ì§€í•˜ë ¤ë©´, +ì•±ì´ ì§€ì›í•˜ëŠ” 기기 ìœ í˜•ì— ëŒ€í•œ í”„ë¡œí•„ì„ ëª…í™•í•˜ê²Œ ì •ì˜í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. +ê·¸ëŸ¬ë ¤ë©´ 매니페스트 파ì¼ì— 기기와 소프트웨어 요구 사í•ì„ +ì„ ì–¸í•˜ë©´ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì„ ì–¸ì€ ëŒ€ë¶€ë¶„ ì •ë³´ì„±ì¼ ë¿ì´ë©° ì‹œìŠ¤í…œì€ ì´ë¥¼ ì½ì§€ 않는 ê²ƒì´ ì¼ë°˜ì ì´ì§€ë§Œ, +Google Play와 ê°™ì€ ì™¸ë¶€ 서비스는 사용ìžê°€ 본ì¸ì˜ 기기ì—서 ì•±ì„ ê²€ìƒ‰í• ë•Œ í•„í„°ë§ì„ ì œê³µí•˜ê¸° 위해 ì´ì™€ ê°™ì€ ì„ ì–¸ë„ ì½ìŠµë‹ˆë‹¤.</p> -<p>예를 들어, ì•±ì— ì¹´ë©”ë¼ê°€ í•„ìš”í•˜ê³ Android 2.1부터 ë„ìž…ëœ API를 사용하는 경우(<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API ë ˆë²¨</a> 7) -ì´ê³¼ ê°™ì€ ë‚´ìš©ì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— 요구 사í•으로 ì„ ì–¸í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> +<p>예를 들어, ì•±ì— ì¹´ë©”ë¼ê°€ í•„ìš”í•˜ê³ Android 2.1부터 ë„ìž…ëœ API를 사용하는 경우(<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API ë ˆë²¨</a> 7) +ì´ê³¼ ê°™ì€ ë‚´ìš©ì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— 요구 사í•으로 ì„ ì–¸í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> <pre> <manifest ... > @@ -390,15 +390,15 @@ Google Play와 ê°™ì€ ì™¸ë¶€ 서비스는 사용ìžê°€ 본ì¸ì˜ 기기ì—서 ì• </manifest> </pre> -<p>ì´ì œ ì¹´ë©”ë¼ê°€ <em>ì—†ê³ </em> Android ë²„ì „ì´ 2.1 <em>ì´í•˜</em>ì¸ ê¸°ê¸°ëŠ” +<p>ì´ì œ ì¹´ë©”ë¼ê°€ <em>ì—†ê³ </em> Android ë²„ì „ì´ 2.1 <em>ì´í•˜</em>ì¸ ê¸°ê¸°ëŠ” Google Playì—서 ì—¬ëŸ¬ë¶„ì˜ ì•±ì„ ì„¤ì¹˜í• ìˆ˜ 없습니다.</p> -<p>그러나, ì•±ì´ ì¹´ë©”ë¼ë¥¼ 사용하기는 하지만 ê¼ +<p>그러나, ì•±ì´ ì¹´ë©”ë¼ë¥¼ 사용하기는 하지만 ê¼ <em>필요한</em> ê²ƒì€ ì•„ë‹ˆë¼ê³ ì„ ì–¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš°ì—는, ì•±ì´ <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a> - ì†ì„±ì„ {@code "false"}ì— ì„¤ì •í•˜ê³ ëŸ°íƒ€ìž„ì„ í™•ì¸í•˜ì—¬ + ì†ì„±ì„ {@code "false"}ì— ì„¤ì •í•˜ê³ ëŸ°íƒ€ìž„ì„ í™•ì¸í•˜ì—¬ 해당 ê¸°ê¸°ì— ì¹´ë©”ë¼ê°€ 있는지, ê²½ìš°ì— ë”°ë¼ ëª¨ë“ ì¹´ë©”ë¼ ê¸°ëŠ¥ì„ ë¹„í™œì„±í™”í• ìˆ˜ 있는지 알아봅니다.</p> -<p>여러 가지 기기와 ì•±ì˜ í˜¸í™˜ì„±ì„ ê´€ë¦¬í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +<p>여러 가지 기기와 ì•±ì˜ í˜¸í™˜ì„±ì„ ê´€ë¦¬í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/compatibility.html">기기 호환성</a> 문서를 참조하ì‹ì‹œì˜¤.</p> @@ -407,40 +407,40 @@ Google Playì—서 ì—¬ëŸ¬ë¶„ì˜ ì•±ì„ ì„¤ì¹˜í• ìˆ˜ 없습니다.</p> <h2 id="Resources">앱 리소스</h2> <p>Android ì•±ì„ ì´ë£¨ëŠ” ê²ƒì€ ì½”ë“œë§Œì´ ì•„ë‹™ë‹ˆë‹¤. 소스 코드와는 ë³„ê°œì¸ ì—¬ëŸ¬ 리소스가 필요합니다. -예를 들어 ì´ë¯¸ì§€, 오디오 파ì¼ê³¼ ì•±ì„ ì‹œê°ì 으로 표현하는 것과 ê´€ë ¨ëœ ëª¨ë“ ê²ƒë“¤ì´ ìžˆìŠµë‹ˆë‹¤. -예컨대 ì• ë‹ˆë©”ì´ì…˜, 메뉴, 스타ì¼, 색ìƒê³¼ 액티비티 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ë ˆì´ì•„ì›ƒì„ XML 파ì¼ë¡œ -ì •ì˜í•´ì•¼ 합니다. 앱 리소스를 사용하면 ì•±ì˜ ë‹¤ì–‘í•œ íŠ¹ì„±ì„ -쉽게 ì—…ë°ì´íŠ¸í• ìˆ˜ 있으며 코드를 ìˆ˜ì •í•˜ì§€ ì•Šì•„ë„ ë˜ê³ ì¼ë ¨ì˜ 대체 리소스를 -ì œê³µí•¨ìœ¼ë¡œì¨ ë‹¤ì–‘í•œ 기기 êµ¬ì„±ì— ë§žê²Œ ì•±ì„ +예를 들어 ì´ë¯¸ì§€, 오디오 파ì¼ê³¼ ì•±ì„ ì‹œê°ì 으로 표현하는 것과 ê´€ë ¨ëœ ëª¨ë“ ê²ƒë“¤ì´ ìžˆìŠµë‹ˆë‹¤. +예컨대 ì• ë‹ˆë©”ì´ì…˜, 메뉴, 스타ì¼, 색ìƒê³¼ 액티비티 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ë ˆì´ì•„ì›ƒì„ XML 파ì¼ë¡œ +ì •ì˜í•´ì•¼ 합니다. 앱 리소스를 사용하면 ì•±ì˜ ë‹¤ì–‘í•œ íŠ¹ì„±ì„ +쉽게 ì—…ë°ì´íŠ¸í• ìˆ˜ 있으며 코드를 ìˆ˜ì •í•˜ì§€ ì•Šì•„ë„ ë˜ê³ ì¼ë ¨ì˜ 대체 리소스를 +ì œê³µí•¨ìœ¼ë¡œì¨ ë‹¤ì–‘í•œ 기기 êµ¬ì„±ì— ë§žê²Œ ì•±ì„ ìµœì í™”í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예: 여러 가지 언어 ë° í™”ë©´ í¬ê¸°).</p> -<p>Android 프로ì íŠ¸ì— í¬í•¨ì‹œí‚¤ëŠ” 리소스마다 SDK 빌드 ë„구가 ê³ ìœ í•œ -ì •ìˆ˜ ID를 ì •ì˜í•˜ë¯€ë¡œ, ì´ë¥¼ 사용하여 앱 코드ì—ì„œì˜ ë¦¬ì†ŒìŠ¤ë‚˜ XML로 ì •ì˜ëœ +<p>Android 프로ì íŠ¸ì— í¬í•¨ì‹œí‚¤ëŠ” 리소스마다 SDK 빌드 ë„구가 ê³ ìœ í•œ +ì •ìˆ˜ ID를 ì •ì˜í•˜ë¯€ë¡œ, ì´ë¥¼ 사용하여 앱 코드ì—ì„œì˜ ë¦¬ì†ŒìŠ¤ë‚˜ XML로 ì •ì˜ëœ 다른 리소스ì—서 ì°¸ì¡°í• ìˆ˜ 있습니다. 예를 들어 ì•±ì— {@code -logo.png}ë¼ëŠ” ì´ë¦„ì˜ ì´ë¯¸ì§€ 파ì¼ì´ 들어 ìžˆë‹¤ê³ í•˜ë©´({@code res/drawable/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë¨) SDK ë„구가 -{@code R.drawable.logo}ë¼ëŠ” 리소스 ID를 ìƒì„±í•©ë‹ˆë‹¤. ì´ê²ƒì„ 사용하여 ì´ë¯¸ì§€ë¥¼ ì°¸ì¡°í•˜ê³ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— +logo.png}ë¼ëŠ” ì´ë¦„ì˜ ì´ë¯¸ì§€ 파ì¼ì´ 들어 ìžˆë‹¤ê³ í•˜ë©´({@code res/drawable/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë¨) SDK ë„구가 +{@code R.drawable.logo}ë¼ëŠ” 리소스 ID를 ìƒì„±í•©ë‹ˆë‹¤. ì´ê²ƒì„ 사용하여 ì´ë¯¸ì§€ë¥¼ ì°¸ì¡°í•˜ê³ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— ì‚½ìž…í• ìˆ˜ 있습니다.</p> -<p>소스 코드와는 별개로 리소스를 ì œê³µí•˜ëŠ” ê²ƒì˜ ê°€ìž¥ 중요한 측면 중 하나는 -여러 가지 기기 êµ¬ì„±ì— ë§žê²Œ 대체 리소스를 ì œê³µí• ëŠ¥ë ¥ì„ ê°–ì¶”ê²Œ -ë©ë‹ˆë‹¤. 예를 들어 UI 문ìžì—´ì„ XML로 ì •ì˜í•˜ë©´ ì´ëŸ¬í•œ 문ìžì—´ì„ 다른 언어로 변환한 ë’¤ +<p>소스 코드와는 별개로 리소스를 ì œê³µí•˜ëŠ” ê²ƒì˜ ê°€ìž¥ 중요한 측면 중 하나는 +여러 가지 기기 êµ¬ì„±ì— ë§žê²Œ 대체 리소스를 ì œê³µí• ëŠ¥ë ¥ì„ ê°–ì¶”ê²Œ +ë©ë‹ˆë‹¤. 예를 들어 UI 문ìžì—´ì„ XML로 ì •ì˜í•˜ë©´ ì´ëŸ¬í•œ 문ìžì—´ì„ 다른 언어로 변환한 ë’¤ 그러한 문ìžì—´ì„ ë³„ê°œì˜ íŒŒì¼ì— ì €ìž¥í• ìˆ˜ 있습니다. 그런 다ìŒ, 리소스 ë””ë ‰í„°ë¦¬ ì´ë¦„ì— ì¶”ê°€í•œ 언어 <em>í•œì •ìž</em> -(예를 들어 프랑스어 문ìžì—´ ê°’ì˜ ê²½ìš° {@code res/values-fr/}) ë° -사용ìžì˜ 언어 ì„¤ì •ì„ ê·¼ê±°ë¡œ 하여 Android ì‹œìŠ¤í…œì´ ì ì ˆí•œ 언어 문ìžì—´ì„ UIì— +(예를 들어 프랑스어 문ìžì—´ ê°’ì˜ ê²½ìš° {@code res/values-fr/}) ë° +사용ìžì˜ 언어 ì„¤ì •ì„ ê·¼ê±°ë¡œ 하여 Android ì‹œìŠ¤í…œì´ ì ì ˆí•œ 언어 문ìžì—´ì„ UIì— ì 용하는 것입니다.</p> <p>Android는 대체 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 다양한 <em>í•œì •ìž</em>를 ì§€ì›í•©ë‹ˆë‹¤. í•œì •ìžëž€ - 리소스 ë””ë ‰í„°ë¦¬ì˜ ì´ë¦„ì— í¬í•¨ì‹œí‚¤ëŠ” ì§§ì€ ë¬¸ìžì—´ë¡œ, ì´ë¥¼ 사용해 해당 리소스를 ì‚¬ìš©í• ê¸°ê¸° êµ¬ì„±ì„ -ì •ì˜í•©ë‹ˆë‹¤. ë˜ ë‹¤ë¥¸ 예를 들ìžë©´, -ê¸°ê¸°ì˜ í™”ë©´ 방향과 í¬ê¸°ì— ë”°ë¼ ì•¡í‹°ë¹„í‹°ì— ì—¬ëŸ¬ 가지 ë ˆì´ì•„ì›ƒì„ ìƒì„±í•´ì•¼ í• ë•Œê°€ -많습니다. 예를 들어 기기 í™”ë©´ì´ ì„¸ë¡œ -ë°©í–¥(키가 í¼)ì¸ ê²½ìš°, ë²„íŠ¼ì´ ì„¸ë¡œ 방향으로 ë˜ì–´ 있는 ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ì¢‹ì§€ë§Œ í™”ë©´ì´ -가로 ë°©í–¥(íì´ ë„“ìŒ)ì¸ ê²½ìš°, ë²„íŠ¼ì´ ê°€ë¡œ 방향으로 ì •ë ¬ë˜ì–´ì•¼ 합니다. ë°©í–¥ì— ë”°ë¼ ë ˆì´ì•„ì›ƒì„ ë³€ê²½í•˜ë ¤ë©´, -서로 다른 ë‘ ê°€ì§€ ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ì—¬ ì ì ˆí•œ í•œì •ìžë¥¼ ê°ê°ì˜ ë ˆì´ì•„ì›ƒì˜ ë””ë ‰í„°ë¦¬ ì´ë¦„ì— -ì 용하면 ë©ë‹ˆë‹¤. 그러면 ì‹œìŠ¤í…œì´ í˜„ìž¬ 기기 ë°©í–¥ì— ë”°ë¼ ì ì ˆí•œ ë ˆì´ì•„ì›ƒì„ + 리소스 ë””ë ‰í„°ë¦¬ì˜ ì´ë¦„ì— í¬í•¨ì‹œí‚¤ëŠ” ì§§ì€ ë¬¸ìžì—´ë¡œ, ì´ë¥¼ 사용해 해당 리소스를 ì‚¬ìš©í• ê¸°ê¸° êµ¬ì„±ì„ +ì •ì˜í•©ë‹ˆë‹¤. ë˜ ë‹¤ë¥¸ 예를 들ìžë©´, +ê¸°ê¸°ì˜ í™”ë©´ 방향과 í¬ê¸°ì— ë”°ë¼ ì•¡í‹°ë¹„í‹°ì— ì—¬ëŸ¬ 가지 ë ˆì´ì•„ì›ƒì„ ìƒì„±í•´ì•¼ í• ë•Œê°€ +많습니다. 예를 들어 기기 í™”ë©´ì´ ì„¸ë¡œ +ë°©í–¥(키가 í¼)ì¸ ê²½ìš°, ë²„íŠ¼ì´ ì„¸ë¡œ 방향으로 ë˜ì–´ 있는 ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ì¢‹ì§€ë§Œ í™”ë©´ì´ +가로 ë°©í–¥(íì´ ë„“ìŒ)ì¸ ê²½ìš°, ë²„íŠ¼ì´ ê°€ë¡œ 방향으로 ì •ë ¬ë˜ì–´ì•¼ 합니다. ë°©í–¥ì— ë”°ë¼ ë ˆì´ì•„ì›ƒì„ ë³€ê²½í•˜ë ¤ë©´, +서로 다른 ë‘ ê°€ì§€ ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ì—¬ ì ì ˆí•œ í•œì •ìžë¥¼ ê°ê°ì˜ ë ˆì´ì•„ì›ƒì˜ ë””ë ‰í„°ë¦¬ ì´ë¦„ì— +ì 용하면 ë©ë‹ˆë‹¤. 그러면 ì‹œìŠ¤í…œì´ í˜„ìž¬ 기기 ë°©í–¥ì— ë”°ë¼ ì ì ˆí•œ ë ˆì´ì•„ì›ƒì„ ìžë™ìœ¼ë¡œ ì 용합니다.</p> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì— í¬í•¨í• 수 있는 여러 가지 ì¢…ë¥˜ì˜ ë¦¬ì†ŒìŠ¤ì™€, ê°ê¸° 다른 기기 êµ¬ì„±ì— ë”°ë¼ +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì— í¬í•¨í• 수 있는 여러 가지 ì¢…ë¥˜ì˜ ë¦¬ì†ŒìŠ¤ì™€, ê°ê¸° 다른 기기 êµ¬ì„±ì— ë”°ë¼ ëŒ€ì²´ 리소스를 ìƒì„±í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/resources/providing-resources.html">리소스 ì œê³µ</a>ì„ ì½ì–´ë³´ì‹ì‹œì˜¤.</p> @@ -451,15 +451,15 @@ logo.png}ë¼ëŠ” ì´ë¦„ì˜ ì´ë¯¸ì§€ 파ì¼ì´ 들어 ìžˆë‹¤ê³ í•˜ë©´({@code res <dl> <dt><a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> </dt> - <dd>{@link android.content.Intent} API를 사용하여 -앱 구성 요소(예: 액티비티 ë° ì„œë¹„ìŠ¤ 등)를 활성화하는 방법, 앱 구성 요소를 다른 여러 ì•±ì´ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” 방법 + <dd>{@link android.content.Intent} API를 사용하여 +앱 구성 요소(예: 액티비티 ë° ì„œë¹„ìŠ¤ 등)를 활성화하는 방법, 앱 구성 요소를 다른 여러 ì•±ì´ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” 방법 ë“±ì— ê´€í•œ ì •ë³´ìž…ë‹ˆë‹¤.</dd> <dt><a href="{@docRoot}guide/components/activities.html">액티비티</a></dt> - <dd>{@link android.app.Activity} í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ë°©ë²•ì— ê´€í•œ ì •ë³´ë¡œ, + <dd>{@link android.app.Activity} í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ë°©ë²•ì— ê´€í•œ ì •ë³´ë¡œ, ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ê°€ 있는 ë…특한 í™”ë©´ì„ ì œê³µí•©ë‹ˆë‹¤.</dd> <dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">리소스 ì œê³µ</a></dt> - <dd>Android ì•±ì´ ì•± 코드와는 ë³„ê°œì˜ ì•± ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ êµ¬ì¡°í™”ëœ ë°©ì‹ì— 관한 ì •ë³´ë¡œ, -íŠ¹ì • 기기 êµ¬ì„±ì— ë§žê²Œ 대체 리소스를 ì œê³µí•˜ëŠ” ë°©ë²•ë„ í¬í•¨ë˜ì–´ + <dd>Android ì•±ì´ ì•± 코드와는 ë³„ê°œì˜ ì•± ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ êµ¬ì¡°í™”ëœ ë°©ì‹ì— 관한 ì •ë³´ë¡œ, +íŠ¹ì • 기기 êµ¬ì„±ì— ë§žê²Œ 대체 리소스를 ì œê³µí•˜ëŠ” ë°©ë²•ë„ í¬í•¨ë˜ì–´ 있습니다. </dd> </dl> @@ -468,11 +468,11 @@ logo.png}ë¼ëŠ” ì´ë¦„ì˜ ì´ë¯¸ì§€ 파ì¼ì´ 들어 ìžˆë‹¤ê³ í•˜ë©´({@code res <h2 class="norule">혹시 다ìŒê³¼ ê°™ì€ ë‚´ìš©ì—ë„ í¥ë¯¸ê°€ ìžˆìœ¼ì‹ ê°€ìš”?</h2> <dl> <dt><a href="{@docRoot}guide/practices/compatibility.html">기기 호환성</a></dt> - <dd>여러 가지 ìœ í˜•ì˜ ê¸°ê¸°ì—서 Androidì˜ ìž‘ë™ ë°©ì‹ê³¼ ì•±ì„ ê° ê¸°ê¸°ì— ë§žì¶° 최ì 화하는 방법 -ë˜ëŠ” 여러 가지 ê¸°ê¸°ì— ëŒ€í•´ ì•±ì˜ ê°€ìš©ì„±ì„ ì œí•œí•˜ëŠ” 방법 ë“±ì— ê´€í•œ + <dd>여러 가지 ìœ í˜•ì˜ ê¸°ê¸°ì—서 Androidì˜ ìž‘ë™ ë°©ì‹ê³¼ ì•±ì„ ê° ê¸°ê¸°ì— ë§žì¶° 최ì 화하는 방법 +ë˜ëŠ” 여러 가지 ê¸°ê¸°ì— ëŒ€í•´ ì•±ì˜ ê°€ìš©ì„±ì„ ì œí•œí•˜ëŠ” 방법 ë“±ì— ê´€í•œ ì •ë³´ìž…ë‹ˆë‹¤.</dd> <dt><a href="{@docRoot}guide/topics/security/permissions.html">시스템 권한</a></dt> - <dd>Androidê°€ íŠ¹ì • APIì— ëŒ€í•œ ì•±ì˜ ì•¡ì„¸ìŠ¤ë¥¼ ì œí•œí•˜ê¸° 위해 권한 ì‹œìŠ¤í…œì„ + <dd>Androidê°€ íŠ¹ì • APIì— ëŒ€í•œ ì•±ì˜ ì•¡ì„¸ìŠ¤ë¥¼ ì œí•œí•˜ê¸° 위해 권한 ì‹œìŠ¤í…œì„ ì‚¬ìš©í•˜ëŠ” 방법으로, 그러한 API를 ì‚¬ìš©í•˜ë ¤ë©´ ì•±ì— ëŒ€í•´ 사용ìžì˜ 승ì¸ì´ 필요합니다.</dd> </dl> </div> diff --git a/docs/html-intl/intl/ko/guide/components/index.jd b/docs/html-intl/intl/ko/guide/components/index.jd index 36626324e817..a860c0f5349f 100644 --- a/docs/html-intl/intl/ko/guide/components/index.jd +++ b/docs/html-intl/intl/ko/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=앱 구성 요소 page.landing=true -page.landing.intro=Androidì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ëŠ” ì¼ë ¨ì˜ 재사용 가능한 구성 요소를 사용하여 í’ì„±í•˜ê³ í˜ì‹ ì ì¸ ì•±ì„ ìƒì„±í• 수 있습니다. ì´ ì„¹ì…˜ì—서는 ì•±ì˜ êµ¬ì„± 단위를 ì •ì˜ ë‚´ë¦¬ëŠ” 구성 요소를 구축하는 방법과 ì¸í…트를 사용하여 ì´ì™€ ê°™ì€ êµ¬ì„± 요소를 연결시키는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. -page.metaDescription=Androidì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ëŠ” ì¼ë ¨ì˜ 재사용 가능한 구성 요소를 사용하여 í’ì„±í•˜ê³ í˜ì‹ ì ì¸ ì•±ì„ ìƒì„±í• 수 있습니다. ì´ ì„¹ì…˜ì—서는 ì•±ì˜ êµ¬ì„± 단위를 ì •ì˜ ë‚´ë¦¬ëŠ” 구성 요소를 구축하는 방법과 ì¸í…트를 사용하여 ì´ì™€ ê°™ì€ êµ¬ì„± 요소를 연결시키는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. +page.landing.intro=Androidì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ëŠ” ì¼ë ¨ì˜ 재사용 가능한 구성 요소를 사용하여 í’ì„±í•˜ê³ í˜ì‹ ì ì¸ ì•±ì„ ìƒì„±í• 수 있습니다. ì´ ì„¹ì…˜ì—서는 ì•±ì˜ êµ¬ì„± 단위를 ì •ì˜ ë‚´ë¦¬ëŠ” 구성 요소를 구축하는 방법과 ì¸í…트를 사용하여 ì´ì™€ ê°™ì€ êµ¬ì„± 요소를 연결시키는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. +page.metaDescription=Androidì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ëŠ” ì¼ë ¨ì˜ 재사용 가능한 구성 요소를 사용하여 í’ì„±í•˜ê³ í˜ì‹ ì ì¸ ì•±ì„ ìƒì„±í• 수 있습니다. ì´ ì„¹ì…˜ì—서는 ì•±ì˜ êµ¬ì„± 단위를 ì •ì˜ ë‚´ë¦¬ëŠ” 구성 요소를 구축하는 방법과 ì¸í…트를 사용하여 ì´ì™€ ê°™ì€ êµ¬ì„± 요소를 연결시키는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>블로그 문서</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>DialogFragment 사용하기</h4> <p>ì´ í¬ìŠ¤íŠ¸ì—서는 v4 ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ì™€ 함께 DialogFragment를 사용하여(Honeycomb ì´ì „ 기기ì—서 ì´ì „ ë²„ì „ê³¼ì˜ í˜¸í™˜ì„±ì„ ìœ„í•´) 간단한 편집 대화를 í‘œì‹œí•˜ê³ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용하여 호출 ì¤‘ì¸ ì•¡í‹°ë¹„í‹°ì— ê²°ê³¼ë¥¼ 반환하는 ë²•ì„ ë³´ì—¬ë“œë¦½ë‹ˆë‹¤.</p> @@ -21,35 +21,35 @@ page.image=images/develop/app_components.png <h4>모ë‘를 위한 프래그먼트</h4> <p>Googleì—서는 오늘 ê°™ì€ í”„ëž˜ê·¸ë¨¼íŠ¸ API를 노출하는 ì •ì ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 출시했습니다(새로운 LoaderManager와 몇 가지 다른 í´ëž˜ìŠ¤ë„ í¬í•¨). ì´ ë•ë¶„ì— Android 1.6 ì´í›„ ë²„ì „ê³¼ 호환ë˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 프래그먼트를 사용하여 태블릿과 호환ë˜ëŠ” ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í• 수 있게 ë˜ì—ˆìŠµë‹ˆë‹¤. </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>ì„±ëŠ¥ì„ ìœ„í•œ 다중 ìŠ¤ë ˆë”©</h4> - <p>ë°˜ì‘형 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìƒì„±í• 때ì—는 주요 UI ìŠ¤ë ˆë“œê°€ ìµœì†Œí•œì˜ ìž‘ì—…ë§Œ -하ë„ë¡ í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 중단시킬 수 있는, + <p>ë°˜ì‘형 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìƒì„±í• 때ì—는 주요 UI ìŠ¤ë ˆë“œê°€ ìµœì†Œí•œì˜ ìž‘ì—…ë§Œ +하ë„ë¡ í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 중단시킬 수 있는, 길어질 수 있는 ìž‘ì—…ì€ ëª¨ë‘ ë‹¤ë¥¸ ìŠ¤ë ˆë“œì—서 처리해야 합니다.</p> </a> </div> <div class="col-6"> <h3>êµìœ¡</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>액티비티 수명 주기 관리하기</h4> - <p>ì´ í´ëž˜ìФì—서는 ê°ê°ì˜ 액티비티 -ì¸ìŠ¤í„´ìŠ¤ê°€ ìˆ˜ì‹ í•˜ëŠ” 중요한 수명 주기 콜백 메서드를 설명합니다. ë˜í•œ ì´ëŸ¬í•œ 콜백 메서드를 사용하여 액티비티가 + <p>ì´ í´ëž˜ìФì—서는 ê°ê°ì˜ 액티비티 +ì¸ìŠ¤í„´ìŠ¤ê°€ ìˆ˜ì‹ í•˜ëŠ” 중요한 수명 주기 콜백 메서드를 설명합니다. ë˜í•œ ì´ëŸ¬í•œ 콜백 메서드를 사용하여 액티비티가 사용ìžê°€ ì›í•˜ëŠ” ìž‘ì—…ì„ í•˜ê³ , 액티비티가 필요로 하지 ì•Šì„ ë•Œ 시스템 리소스 ì‚¬ìš©ì„ ë°©ì§€í•˜ëŠ” ë°©ë²•ì— ëŒ€í•´ì„œë„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> </a> <a href="http://developer.android.com/training/basics/fragments/index.html"> <h4>프래그먼트로 ë™ì UI 구축하기</h4> - <p>ì´ í´ëž˜ìФì—서는 Android 1.6ë§Œí¼ ì˜¤ëž˜ëœ ë²„ì „ì„ ì‹¤í–‰í•˜ëŠ” ê¸°ê¸°ë„ -ê³„ì† ì§€ì›í•˜ë©´ì„œ 프래그먼트로 ë™ì ì‚¬ìš©ìž ê²½í—˜ì„ ìƒì„±í•˜ê³ , ê¸°ê¸°ì˜ í™”ë©´ í¬ê¸°ì— ë”°ë¼ ì•±ì˜ ì‚¬ìš©ìž í™˜ê²½ì„ + <p>ì´ í´ëž˜ìФì—서는 Android 1.6ë§Œí¼ ì˜¤ëž˜ëœ ë²„ì „ì„ ì‹¤í–‰í•˜ëŠ” ê¸°ê¸°ë„ +ê³„ì† ì§€ì›í•˜ë©´ì„œ 프래그먼트로 ë™ì ì‚¬ìš©ìž ê²½í—˜ì„ ìƒì„±í•˜ê³ , ê¸°ê¸°ì˜ í™”ë©´ í¬ê¸°ì— ë”°ë¼ ì•±ì˜ ì‚¬ìš©ìž í™˜ê²½ì„ ìµœì í™”í• ìˆ˜ 있는 ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> </a> <a href="http://developer.android.com/training/sharing/index.html"> <h4>콘í…ì¸ ê³µìœ í•˜ê¸°</h4> - <p>ì´ í´ëž˜ìŠ¤ëŠ” ì¸í…트 API와 ActionProvider ê°ì²´ë¥¼ 사용하여 여러 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì—서 + <p>ì´ í´ëž˜ìŠ¤ëŠ” ì¸í…트 API와 ActionProvider ê°ì²´ë¥¼ 사용하여 여러 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì—서 콘í…ì¸ ë¥¼ ì „ì†¡í•˜ê³ ìˆ˜ì‹ í•˜ëŠ” 몇 가지 보편ì ì¸ ë°©ë²•ì„ ë‹¤ë£¹ë‹ˆë‹¤.</p> </a> </div> diff --git a/docs/html-intl/intl/ko/guide/components/loaders.jd b/docs/html-intl/intl/ko/guide/components/loaders.jd index cfbbb9133ed4..dd02e117f7c7 100644 --- a/docs/html-intl/intl/ko/guide/components/loaders.jd +++ b/docs/html-intl/intl/ko/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>Key í´ëž˜ìФ</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>ê´€ë ¨ 샘플</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -39,22 +39,22 @@ LoaderThrottle</a></li> </div> </div> -<p>로ë”는 Android 3.0부터 ë„ìž…ëœ ê²ƒìœ¼ë¡œ, 액티비티 ë˜ëŠ” 프래그먼트ì—서 비ë™ê¸°ì‹ìœ¼ë¡œ ë°ì´í„°ë¥¼ 쉽게 +<p>로ë”는 Android 3.0부터 ë„ìž…ëœ ê²ƒìœ¼ë¡œ, 액티비티 ë˜ëŠ” 프래그먼트ì—서 비ë™ê¸°ì‹ìœ¼ë¡œ ë°ì´í„°ë¥¼ 쉽게 ë¡œë”©í• ìˆ˜ 있게 합니다. 로ë”ì˜ íŠ¹ì„±ì€ ë‹¤ìŒê³¼ 같습니다.</p> <ul> <li>ëª¨ë“ {@link android.app.Activity}와 {@link android.app.Fragment}ì— ì‚¬ìš©í• ìˆ˜ 있습니다.</li> <li>ë°ì´í„°ì˜ 비ë™ê¸°ì‹ ë¡œë”©ì„ ì œê³µí•©ë‹ˆë‹¤.</li> - <li>ë°ì´í„°ì˜ 출처를 모니터ë§í•˜ì—¬ ê·¸ 콘í…ì¸ ê°€ 변경ë˜ë©´ 새 결과를 + <li>ë°ì´í„°ì˜ 출처를 모니터ë§í•˜ì—¬ ê·¸ 콘í…ì¸ ê°€ 변경ë˜ë©´ 새 결과를 ì „ë‹¬í•©ë‹ˆë‹¤.</li> - <li>구성 변경 í›„ì— ìž¬ìƒì„±ëœ 경우, 마지막 로ë”ì˜ ì»¤ì„œë¡œ ìžë™ìœ¼ë¡œ -다시 ì—°ê²°ë©ë‹ˆë‹¤. ë”°ë¼ì„œ ë°ì´í„°ë¥¼ 다시 쿼리하지 ì•Šì•„ë„ + <li>구성 변경 í›„ì— ìž¬ìƒì„±ëœ 경우, 마지막 로ë”ì˜ ì»¤ì„œë¡œ ìžë™ìœ¼ë¡œ +다시 ì—°ê²°ë©ë‹ˆë‹¤. ë”°ë¼ì„œ ë°ì´í„°ë¥¼ 다시 쿼리하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤.</li> </ul> - + <h2 id="summary">ë¡œë” API 요약</h2> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 로ë”를 사용하는 ë° ê´€ë ¨ëœ í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ëŠ” +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 로ë”를 사용하는 ë° ê´€ë ¨ëœ í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 여러 가지가 있습니다. ë‹¤ìŒ í‘œì—서 요약ë˜ì–´ 있습니다.</p> <table> @@ -64,16 +64,16 @@ android.app.Fragment}ì— ì‚¬ìš©í• ìˆ˜ 있습니다.</li> </tr> <tr> <td>{@link android.app.LoaderManager}</td> - <td>{@link android.app.Activity} ë˜ëŠ” + <td>{@link android.app.Activity} ë˜ëŠ” {@link android.app.Fragment}와 ì—°ê´€ëœ ì¶”ìƒ í´ëž˜ìŠ¤ë¡œ, 하나 ì´ìƒì˜ {@link -android.content.Loader} ì¸ìŠ¤í„´ìŠ¤ë¥¼ 관리하는 ë° ì“°ìž…ë‹ˆë‹¤. ì´ê²ƒì„ 사용하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +android.content.Loader} ì¸ìŠ¤í„´ìŠ¤ë¥¼ 관리하는 ë° ì“°ìž…ë‹ˆë‹¤. ì´ê²ƒì„ 사용하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ {@link android.app.Activity} - ë˜ëŠ” {@link android.app.Fragment} 수명 주기와 함께 실행 ì‹œê°„ì´ ê¸´ ìž‘ì—…ì„ ê´€ë¦¬í•˜ëŠ” ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. ì´ê²ƒì˜ 가장 보편ì ì¸ ìš©ë²•ì€ -{@link android.content.CursorLoader}와 함께 사용하는 것ì´ì§€ë§Œ, + ë˜ëŠ” {@link android.app.Fragment} 수명 주기와 함께 실행 ì‹œê°„ì´ ê¸´ ìž‘ì—…ì„ ê´€ë¦¬í•˜ëŠ” ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. ì´ê²ƒì˜ 가장 보편ì ì¸ ìš©ë²•ì€ +{@link android.content.CursorLoader}와 함께 사용하는 것ì´ì§€ë§Œ, 다른 ìœ í˜•ì˜ ë°ì´í„°ë¥¼ 로드하기 위해 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ìžì²´ 로ë”를 작성하는 ê²ƒë„ ì–¼ë§ˆë“ ì§€ 가능합니다. <br /> <br /> - 액티비티 ë˜ëŠ” 프래그먼트당 {@link android.app.LoaderManager}는 í•˜ë‚˜ì”©ë°–ì— ì—†ìŠµë‹ˆë‹¤. 하지만 {@link android.app.LoaderManager}ì—는 로ë”ê°€ 여러 ê°œ ìžˆì–´ë„ + 액티비티 ë˜ëŠ” 프래그먼트당 {@link android.app.LoaderManager}는 í•˜ë‚˜ì”©ë°–ì— ì—†ìŠµë‹ˆë‹¤. 하지만 {@link android.app.LoaderManager}ì—는 로ë”ê°€ 여러 ê°œ ìžˆì–´ë„ ë©ë‹ˆë‹¤.</td> </tr> <tr> @@ -85,10 +85,10 @@ android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()} </tr> <tr> <td>{@link android.content.Loader}</td> - <td>ë°ì´í„°ì˜ 비ë™ê¸°ì‹ ë¡œë”©ì„ ìˆ˜í–‰í•˜ëŠ” ì¶”ìƒ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ê²ƒì´ 로ë”ì˜ ê¸°ë³¸ + <td>ë°ì´í„°ì˜ 비ë™ê¸°ì‹ ë¡œë”©ì„ ìˆ˜í–‰í•˜ëŠ” ì¶”ìƒ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ê²ƒì´ 로ë”ì˜ ê¸°ë³¸ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ë³´í†µì€ {@link -android.content.CursorLoader}를 사용하기 ë§ˆë ¨ì´ì§€ë§Œ, ìžì‹ ë§Œì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ êµ¬í˜„í•´ë„ ë©ë‹ˆë‹¤. 로ë”ê°€ 활성 ìƒíƒœì¸ ë™ì•ˆì—는 -ì†Œì† ë°ì´í„°ì˜ 출처를 모니터ë§í•˜ê³ 콘í…ì¸ ê°€ 변경ë˜ë©´ 새 결과를 +android.content.CursorLoader}를 사용하기 ë§ˆë ¨ì´ì§€ë§Œ, ìžì‹ ë§Œì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ êµ¬í˜„í•´ë„ ë©ë‹ˆë‹¤. 로ë”ê°€ 활성 ìƒíƒœì¸ ë™ì•ˆì—는 +ì†Œì† ë°ì´í„°ì˜ 출처를 모니터ë§í•˜ê³ 콘í…ì¸ ê°€ 변경ë˜ë©´ 새 결과를 ì „ë‹¬í•˜ëŠ” ê²ƒì´ ì •ìƒìž…니다. </td> </tr> <tr> @@ -97,118 +97,118 @@ android.content.CursorLoader}를 사용하기 ë§ˆë ¨ì´ì§€ë§Œ, ìžì‹ ë§Œì˜ í•˜ì </tr> <tr> <td>{@link android.content.CursorLoader}</td> - <td>{@link android.content.AsyncTaskLoader}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ, ì´ê²ƒì´ + <td>{@link android.content.AsyncTaskLoader}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ, ì´ê²ƒì´ {@link android.content.ContentResolver}를 ì¿¼ë¦¬í•˜ê³ {@link android.database.Cursor}를 반환합니다. ì´ í´ëž˜ìŠ¤ëŠ” 커서 ì¿¼ë¦¬ì— ëŒ€í•œ 표준 ë°©ì‹ìœ¼ë¡œ {@link -android.content.Loader} í”„ë¡œí† ì½œì„ êµ¬í˜„í•˜ë©°, -{@link android.content.AsyncTaskLoader}ì— êµ¬ì¶•ë˜ì–´ -ë°°ê²½ ìŠ¤ë ˆë“œì—서 커서 쿼리를 수행하므로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ UI를 차단하지 않습니다. +android.content.Loader} í”„ë¡œí† ì½œì„ êµ¬í˜„í•˜ë©°, +{@link android.content.AsyncTaskLoader}ì— êµ¬ì¶•ë˜ì–´ +ë°°ê²½ ìŠ¤ë ˆë“œì—서 커서 쿼리를 수행하므로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ UI를 차단하지 않습니다. ì´ ë¡œë”를 사용하는 ê²ƒì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë‚˜ ì•¡í‹°ë¹„í‹°ì˜ API를 통해 ê´€ë¦¬ëœ ì¿¼ë¦¬ë¥¼ 수행하는 ëŒ€ì‹ {@link -android.content.ContentProvider}ì—서 +android.content.ContentProvider}ì—서 비ë™ê¸°ì‹ìœ¼ë¡œ ë°ì´í„°ë¥¼ 로딩하는 ìµœì„ ì˜ ë°©ë²•ìž…ë‹ˆë‹¤.</td> </tr> </table> -<p>ìœ„ì˜ í‘œì— ë‚˜ì—´ëœ í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 로ë”를 구현하는 ë° -ì‚¬ìš©í• ê¸°ë³¸ì ì¸ êµ¬ì„± 요소입니다. ìƒì„±í•˜ëŠ” 로ë”마다 +<p>ìœ„ì˜ í‘œì— ë‚˜ì—´ëœ í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 로ë”를 구현하는 ë° +ì‚¬ìš©í• ê¸°ë³¸ì ì¸ êµ¬ì„± 요소입니다. ìƒì„±í•˜ëŠ” 로ë”마다 ì´ ëª¨ë“ ê²ƒì´ ë‹¤ 필요한 ê²ƒì€ ì•„ë‹ˆì§€ë§Œ, 로ë”를 ì´ˆê¸°í™”í•˜ë ¤ë©´ í•ìƒ {@link android.app.LoaderManager}를 참조해야 í•˜ê³ {@link -android.content.CursorLoader}와 ê°™ì€ {@link android.content.Loader} -í´ëž˜ìŠ¤ë„ êµ¬í˜„í•´ì•¼ 합니다. ë‹¤ìŒ ëª‡ 섹션ì—서는 ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 ì´ì™€ ê°™ì€ +android.content.CursorLoader}와 ê°™ì€ {@link android.content.Loader} +í´ëž˜ìŠ¤ë„ êµ¬í˜„í•´ì•¼ 합니다. ë‹¤ìŒ ëª‡ 섹션ì—서는 ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 ì´ì™€ ê°™ì€ í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용하는 ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> <h2 id ="app">ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서 ë¡œë” ì‚¬ìš©í•˜ê¸°</h2> -<p>ì´ ì„¹ì…˜ì—서는 Android ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 로ë”를 사용하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. 로ë”를 +<p>ì´ ì„¹ì…˜ì—서는 Android ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—서 로ë”를 사용하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. 로ë”를 사용하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 보통 다ìŒì´ í¬í•¨ë˜ì–´ 있습니다.</p> <ul> <li>{@link android.app.Activity} ë˜ëŠ” {@link android.app.Fragment}.</li> <li>{@link android.app.LoaderManager}ì˜ ì¸ìŠ¤í„´ìŠ¤.</li> <li>{@link -android.content.ContentProvider}ê°€ ì§€ì›í•˜ëŠ” ë°ì´í„°ë¥¼ ë¡œë”©í• {@link android.content.CursorLoader}. 아니면, ê°œë°œìž ë‚˜ë¦„ì˜ -{@link android.content.Loader} ë˜ëŠ” {@link android.content.AsyncTaskLoader} 하위 í´ëž˜ìŠ¤ë¥¼ 구현하여 +android.content.ContentProvider}ê°€ ì§€ì›í•˜ëŠ” ë°ì´í„°ë¥¼ ë¡œë”©í• {@link android.content.CursorLoader}. 아니면, ê°œë°œìž ë‚˜ë¦„ì˜ +{@link android.content.Loader} ë˜ëŠ” {@link android.content.AsyncTaskLoader} 하위 í´ëž˜ìŠ¤ë¥¼ 구현하여 다른 출처ì—서 ë°ì´í„°ë¥¼ ë¡œë”©í•´ë„ ë©ë‹ˆë‹¤.</li> <li>{@link android.app.LoaderManager.LoaderCallbacks}ì˜ êµ¬í˜„. -여기ì—서 새 로ë”를 ìƒì„±í•˜ê³ 기존 로ë”ì— ëŒ€í•œ 참조를 -관리합니다.</li> +여기ì—서 새 로ë”를 ìƒì„±í•˜ê³ 기존 로ë”ì— ëŒ€í•œ 참조를 +관리합니다.</li> <li>로ë”ì˜ ë°ì´í„°ë¥¼ 표시하는 방법(예: {@link android.widget.SimpleCursorAdapter})</li> - <li>{@link android.content.ContentProvider}와 ê°™ì€ ë°ì´í„° 출처로, + <li>{@link android.content.ContentProvider}와 ê°™ì€ ë°ì´í„° 출처로, {@link android.content.CursorLoader}를 사용하는 ê²½ìš°ì— í•´ë‹¹.</li> </ul> <h3 id="starting">ë¡œë” ì‹œìž‘</h3> -<p>{@link android.app.LoaderManager}는 {@link android.app.Activity} ë˜ëŠ” +<p>{@link android.app.LoaderManager}는 {@link android.app.Activity} ë˜ëŠ” {@link android.app.Fragment} ë‚´ì—서 하나 ì´ìƒì˜ {@link android.content.Loader} ì¸ìŠ¤í„´ìŠ¤ë¥¼ 관리합니다. 액티비티 ë˜ëŠ” 프래그먼트당 {@link -android.app.LoaderManager}는 í•˜ë‚˜ì”©ë°–ì— ì—†ìŠµë‹ˆë‹¤.</p> +android.app.LoaderManager}는 í•˜ë‚˜ì”©ë°–ì— ì—†ìŠµë‹ˆë‹¤.</p> -<p>ë³´í†µì€ +<p>ë³´í†µì€ ì•¡í‹°ë¹„í‹°ì˜ {@link -android.app.Activity#onCreate onCreate()} 메서드 ë‚´ì—서, ë˜ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ -{@link android.app.Fragment#onActivityCreated onActivityCreated()} 메서드 ë‚´ì—서 {@link android.content.Loader}를 초기화합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´ +android.app.Activity#onCreate onCreate()} 메서드 ë‚´ì—서, ë˜ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ +{@link android.app.Fragment#onActivityCreated onActivityCreated()} 메서드 ë‚´ì—서 {@link android.content.Loader}를 초기화합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì€ ë°©ë²•ì„ ë”°ë¦…ë‹ˆë‹¤.</p> <pre>// Prepare the loader. Either re-connect with an existing one, // or start a new one. getLoaderManager().initLoader(0, null, this);</pre> -<p>{@link android.app.LoaderManager#initLoader initLoader()} 메서드는 +<p>{@link android.app.LoaderManager#initLoader initLoader()} 메서드는 다ìŒê³¼ ê°™ì€ ì¸ìˆ˜ë¥¼ 취합니다.</p> <ul> <li>로ë”를 ì‹ë³„하는 ê³ ìœ í•œ ID. ì´ ì˜ˆì‹œì—서 ID는 0입니다.</li> <li>ìƒì„± 시 로ë”ì— ì œê³µí• ì„ íƒì ì¸ìˆ˜ -(ì´ ì˜ˆì‹œì—서는 <code>null</code>).</li> +(ì´ ì˜ˆì‹œì—서는 <code>null</code>).</li> -<li>{@link android.app.LoaderManager.LoaderCallbacks} 구현. ë¡œë” ì´ë²¤íŠ¸ë¥¼ ë³´ê³ í•˜ê¸° 위해 +<li>{@link android.app.LoaderManager.LoaderCallbacks} 구현. ë¡œë” ì´ë²¤íŠ¸ë¥¼ ë³´ê³ í•˜ê¸° 위해 {@link android.app.LoaderManager}ê°€ ì´ê²ƒì„ 호출합니다. ì´ ì˜ˆì‹œì—서는 로컬 í´ëž˜ìŠ¤ê°€ {@link -android.app.LoaderManager.LoaderCallbacks} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하여 ìžì‹ ì— ëŒ€í•œ ì°¸ì¡°ì¸ -{@code this}를 통과합니다.</li> +android.app.LoaderManager.LoaderCallbacks} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하여 ìžì‹ ì— ëŒ€í•œ ì°¸ì¡°ì¸ +{@code this}를 통과합니다.</li> </ul> -<p>{@link android.app.LoaderManager#initLoader initLoader()} 호출로 로ë”ê°€ 초기화ë˜ì—ˆê³ 활성 ìƒíƒœì´ë„ë¡ +<p>{@link android.app.LoaderManager#initLoader initLoader()} 호출로 로ë”ê°€ 초기화ë˜ì—ˆê³ 활성 ìƒíƒœì´ë„ë¡ í™•ì‹¤ížˆ 합니다. ì´ë¡œì¨ ë°œìƒí• 수 있는 결과가 ë‘ ê°€ì§€ 있습니다.</p> <ul> - <li>IDê°€ ì§€ì •í•œ 로ë”ê°€ ì´ë¯¸ 존재하는 경우, 마지막으로 ìƒì„±ëœ 로ë”를 + <li>IDê°€ ì§€ì •í•œ 로ë”ê°€ ì´ë¯¸ 존재하는 경우, 마지막으로 ìƒì„±ëœ 로ë”를 재사용합니다.</li> - <li>IDê°€ ì§€ì •í•œ 로ë”ê°€ 존재하지 <em>않는</em> 경우, -{@link android.app.LoaderManager#initLoader initLoader()}ê°€ -{@link android.app.LoaderManager.LoaderCallbacks} 메서드 {@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}를 ë°œìƒì‹œí‚µë‹ˆë‹¤. + <li>IDê°€ ì§€ì •í•œ 로ë”ê°€ 존재하지 <em>않는</em> 경우, +{@link android.app.LoaderManager#initLoader initLoader()}ê°€ +{@link android.app.LoaderManager.LoaderCallbacks} 메서드 {@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}를 ë°œìƒì‹œí‚µë‹ˆë‹¤. 여기ì—서 ì¸ìŠ¤í„´íŠ¸í™”í• ì½”ë“œë¥¼ êµ¬í˜„í•˜ê³ ìƒˆ 로ë”를 반환합니다. ìžì„¸í•œ ë…¼ì˜ëŠ” <a href="#onCreateLoader">onCreateLoader</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</li> </ul> <p>ì–´ë–¤ 경우ì—ë“ ì£¼ì–´ì§„ {@link android.app.LoaderManager.LoaderCallbacks} -êµ¬í˜„ì€ í•´ë‹¹ 로ë”와 ì—°ê´€ë˜ì–´ 있으며, ë¡œë” ìƒíƒœê°€ 변경ë˜ë©´ -ì´ê²ƒì´ 호출ë©ë‹ˆë‹¤. ì´ í˜¸ì¶œì˜ ê·¸ëŸ¬í•œ 시ì ì—서 ë°œì‹ ìžê°€ -ì‹œìž‘ëœ ìƒíƒœì— 있으며 ìš”ì²í•œ 로ë”ê°€ ì´ë¯¸ ì¡´ìž¬í•˜ê³ ìžì‹ ì˜ ë°ì´í„°ë¥¼ +êµ¬í˜„ì€ í•´ë‹¹ 로ë”와 ì—°ê´€ë˜ì–´ 있으며, ë¡œë” ìƒíƒœê°€ 변경ë˜ë©´ +ì´ê²ƒì´ 호출ë©ë‹ˆë‹¤. ì´ í˜¸ì¶œì˜ ê·¸ëŸ¬í•œ 시ì ì—서 ë°œì‹ ìžê°€ +ì‹œìž‘ëœ ìƒíƒœì— 있으며 ìš”ì²í•œ 로ë”ê°€ ì´ë¯¸ ì¡´ìž¬í•˜ê³ ìžì‹ ì˜ ë°ì´í„°ë¥¼ ìƒì„±í•´ ë†“ì€ ê²½ìš°, ì‹œìŠ¤í…œì€ ì¦‰ì‹œ {@link -android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}를 -호출합니다({@link android.app.LoaderManager#initLoader initLoader()} ë„중). +android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}를 +호출합니다({@link android.app.LoaderManager#initLoader initLoader()} ë„중). ë”°ë¼ì„œ ì´ëŸ° ì¼ì´ ë°œìƒí• ê²ƒì— ëŒ€ë¹„í•´ë‘어야만 합니다. ì´ ì½œë°±ì— ëŒ€í•œ ìžì„¸í•œ ë…¼ì˜ëŠ” <a href="#onLoadFinished"> onLoadFinished</a>를 참조하ì‹ì‹œì˜¤.</p> <p>{@link android.app.LoaderManager#initLoader initLoader()} -메서드는 ìƒì„±ëœ {@link android.content.Loader}를 반환하지만, ì´ì— 대한 참조를 캡처하지 ì•Šì•„ë„ ëœë‹¤ëŠ” ì ì„ -ìœ ì˜í•˜ì‹ì‹œì˜¤. {@link android.app.LoaderManager}는 로ë”ì˜ ìˆ˜ëª…ì„ -ìžë™ìœ¼ë¡œ 관리합니다. {@link android.app.LoaderManager}는 -í•„ìš”ì— ë”°ë¼ ë¡œë”©ì„ ì‹œìž‘í•˜ê³ ì¤‘ë‹¨í•˜ë©°, 로ë”와 ê·¸ì— ì—°ê´€ëœ ì½˜í…ì¸ ì˜ ìƒíƒœë¥¼ -ìœ ì§€ê´€ë¦¬í•©ë‹ˆë‹¤. ì´ê²ƒì´ 시사하는 바와 ê°™ì´, 로ë”와 ì§ì ‘ì 으로 -ìƒí˜¸ 작용하는 경우는 극히 드ë…니다(다만, 로ë”ì˜ í–‰ë™ì„ 미세하게 ì¡°ì •í•˜ê¸° 위해 ë¡œë” ë©”ì„œë“œë¥¼ 사용하는 사례를 ì•Œì•„ë³´ë ¤ë©´ -<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> ìƒ˜í”Œì„ ì°¸ì¡°í•˜ë©´ 좋습니다). +메서드는 ìƒì„±ëœ {@link android.content.Loader}를 반환하지만, ì´ì— 대한 참조를 캡처하지 ì•Šì•„ë„ ëœë‹¤ëŠ” ì ì„ +ìœ ì˜í•˜ì‹ì‹œì˜¤. {@link android.app.LoaderManager}는 로ë”ì˜ ìˆ˜ëª…ì„ +ìžë™ìœ¼ë¡œ 관리합니다. {@link android.app.LoaderManager}는 +í•„ìš”ì— ë”°ë¼ ë¡œë”©ì„ ì‹œìž‘í•˜ê³ ì¤‘ë‹¨í•˜ë©°, 로ë”와 ê·¸ì— ì—°ê´€ëœ ì½˜í…ì¸ ì˜ ìƒíƒœë¥¼ +ìœ ì§€ê´€ë¦¬í•©ë‹ˆë‹¤. ì´ê²ƒì´ 시사하는 바와 ê°™ì´, 로ë”와 ì§ì ‘ì 으로 +ìƒí˜¸ 작용하는 경우는 극히 드ë…니다(다만, 로ë”ì˜ í–‰ë™ì„ 미세하게 ì¡°ì •í•˜ê¸° 위해 ë¡œë” ë©”ì„œë“œë¥¼ 사용하는 사례를 ì•Œì•„ë³´ë ¤ë©´ +<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> ìƒ˜í”Œì„ ì°¸ì¡°í•˜ë©´ 좋습니다). 가장 보편ì 으로 사용ë˜ëŠ” 메서드는 {@link -android.app.LoaderManager.LoaderCallbacks}로, ì´ë¥¼ 사용해 íŠ¹ì •í•œ ì´ë²¤íŠ¸ê°€ ì¼ì–´ë‚¬ì„ 때 +android.app.LoaderManager.LoaderCallbacks}로, ì´ë¥¼ 사용해 íŠ¹ì •í•œ ì´ë²¤íŠ¸ê°€ ì¼ì–´ë‚¬ì„ 때 로딩 í”„ë¡œì„¸ìŠ¤ì— ê°œìž…í•˜ê²Œ ë©ë‹ˆë‹¤. ì´ ì£¼ì œì— ëŒ€í•œ ìžì„¸í•œ ë…¼ì˜ëŠ” <a href="#callback">LoaderManager 콜백 사용하기</a>를 참조하ì‹ì‹œì˜¤.</p> <h3 id="restarting">ë¡œë” ë‹¤ì‹œ 시작</h3> -<p>위ì—서 나타난 것과 ê°™ì´ {@link android.app.LoaderManager#initLoader initLoader()}를 사용하는 경우, -ì´ê²ƒì€ ì§€ì •ëœ IDì— í•´ë‹¹ë˜ëŠ” 기존 로ë”ê°€ 있으면 ê·¸ê²ƒì„ ì‚¬ìš©í•©ë‹ˆë‹¤. -없으면, 하나 ìƒì„±í•©ë‹ˆë‹¤. 하지만 때로는 ì˜¤ëž˜ëœ ë°ì´í„°ë¥¼ íê¸°í•˜ê³ ìƒˆë¡œ ì‹œìž‘í•˜ê³ ì‹¶ì„ ë•Œê°€ +<p>위ì—서 나타난 것과 ê°™ì´ {@link android.app.LoaderManager#initLoader initLoader()}를 사용하는 경우, +ì´ê²ƒì€ ì§€ì •ëœ IDì— í•´ë‹¹ë˜ëŠ” 기존 로ë”ê°€ 있으면 ê·¸ê²ƒì„ ì‚¬ìš©í•©ë‹ˆë‹¤. +없으면, 하나 ìƒì„±í•©ë‹ˆë‹¤. 하지만 때로는 ì˜¤ëž˜ëœ ë°ì´í„°ë¥¼ íê¸°í•˜ê³ ìƒˆë¡œ ì‹œìž‘í•˜ê³ ì‹¶ì„ ë•Œê°€ 있습니다.</p> <p>ì˜¤ëž˜ëœ ë°ì´í„°ë¥¼ íê¸°í•˜ë ¤ë©´ {@link -android.app.LoaderManager#restartLoader restartLoader()}를 사용합니다. 예를 들어, 다ìŒì˜ -{@link android.widget.SearchView.OnQueryTextListener} êµ¬í˜„ì€ -사용ìžì˜ 쿼리가 변경ë˜ë©´ 로ë”를 다시 시작합니다. 로ë”를 다시 시작해야 ìˆ˜ì •ëœ ê²€ìƒ‰ 필터를 사용하여 +android.app.LoaderManager#restartLoader restartLoader()}를 사용합니다. 예를 들어, 다ìŒì˜ +{@link android.widget.SearchView.OnQueryTextListener} êµ¬í˜„ì€ +사용ìžì˜ 쿼리가 변경ë˜ë©´ 로ë”를 다시 시작합니다. 로ë”를 다시 시작해야 ìˆ˜ì •ëœ ê²€ìƒ‰ 필터를 사용하여 새 쿼리를 ìˆ˜í–‰í• ìˆ˜ 있습니다.</p> <pre> @@ -223,18 +223,18 @@ public boolean onQueryTextChanged(String newText) { <h3 id="callback">LoaderManager 콜백 사용하기</h3> -<p>{@link android.app.LoaderManager.LoaderCallbacks}는 í´ë¼ì´ì–¸íŠ¸ê°€ +<p>{@link android.app.LoaderManager.LoaderCallbacks}는 í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.app.LoaderManager}와 ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있게 해주는 콜백 ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. </p> -<p>로ë”, 특히 {@link android.content.CursorLoader}는 ì¤‘ë‹¨ëœ í›„ì—ë„ -ìžì‹ ì˜ ë°ì´í„°ë¥¼ ìœ ì§€í• ê²ƒìœ¼ë¡œ 기대ë©ë‹ˆë‹¤. ì´ ë•Œë¬¸ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +<p>로ë”, 특히 {@link android.content.CursorLoader}는 ì¤‘ë‹¨ëœ í›„ì—ë„ +ìžì‹ ì˜ ë°ì´í„°ë¥¼ ìœ ì§€í• ê²ƒìœ¼ë¡œ 기대ë©ë‹ˆë‹¤. ì´ ë•Œë¬¸ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 액티비티 ë˜ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ @link android.app.Activity#onStop -onStop()} ë° {@link android.app.Activity#onStart onStart()}를 가로질러 ë°ì´í„°ë¥¼ ìœ ì§€í• ìˆ˜ ìžˆê³ , -ë”°ë¼ì„œ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë˜ëŒì•„오면 ë°ì´í„°ê°€ 다시 로딩ë˜ê¸°ë¥¼ 기다리지 -ì•Šì•„ë„ ë©ë‹ˆë‹¤. 새 로ë”를 ì–¸ì œ ìƒì„±í•´ì•¼ í• ì§€ ì•Œì•„ë³´ë ¤ë©´ {@link android.app.LoaderManager.LoaderCallbacks} -메서드를 사용합니다. ë˜í•œ 로ë”ì˜ ë°ì´í„° ì‚¬ìš©ì„ ì¤‘ë‹¨í• ë•Œê°€ ë˜ë©´ +onStop()} ë° {@link android.app.Activity#onStart onStart()}를 가로질러 ë°ì´í„°ë¥¼ ìœ ì§€í• ìˆ˜ ìžˆê³ , +ë”°ë¼ì„œ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë˜ëŒì•„오면 ë°ì´í„°ê°€ 다시 로딩ë˜ê¸°ë¥¼ 기다리지 +ì•Šì•„ë„ ë©ë‹ˆë‹¤. 새 로ë”를 ì–¸ì œ ìƒì„±í•´ì•¼ í• ì§€ ì•Œì•„ë³´ë ¤ë©´ {@link android.app.LoaderManager.LoaderCallbacks} +메서드를 사용합니다. ë˜í•œ 로ë”ì˜ ë°ì´í„° ì‚¬ìš©ì„ ì¤‘ë‹¨í• ë•Œê°€ ë˜ë©´ ì´ë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 알리는 ë°ì—ë„ ì´ê²ƒì„ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> -<p>{@link android.app.LoaderManager.LoaderCallbacks}ì—는 다ìŒê³¼ ê°™ì€ ë©”ì„œë“œê°€ +<p>{@link android.app.LoaderManager.LoaderCallbacks}ì—는 다ìŒê³¼ ê°™ì€ ë©”ì„œë“œê°€ í¬í•¨ë©ë‹ˆë‹¤.</p> <ul> <li>{@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()} - @@ -246,7 +246,7 @@ onStop()} ë° {@link android.app.Activity#onStart onStart()}를 가로질러 ë° </li></ul> <ul> <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} -- ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ íœ´ì‹ ì¤‘ì´ë¼ì„œ 해당ë˜ëŠ” ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ ì—†ì„ ê²½ìš° +- ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ íœ´ì‹ ì¤‘ì´ë¼ì„œ 해당ë˜ëŠ” ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ ì—†ì„ ê²½ìš° 호출ë©ë‹ˆë‹¤. </li> </ul> @@ -255,32 +255,32 @@ onStop()} ë° {@link android.app.Activity#onStart onStart()}를 가로질러 ë° <h4 id ="onCreateLoader">onCreateLoader</h4> <p>로ë”ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ 시ë„하는 경우(예를 들어 {@link -android.app.LoaderManager#initLoader initLoader()}를 통해), 로ë”는 해당 IDê°€ ì§€ì •í•˜ëŠ” 로ë”ê°€ 존재하는지 +android.app.LoaderManager#initLoader initLoader()}를 통해), 로ë”는 해당 IDê°€ ì§€ì •í•˜ëŠ” 로ë”ê°€ 존재하는지 여부를 확ì¸í•©ë‹ˆë‹¤. 그런 로ë”ê°€ 없으면, {@link android.app.LoaderManager.LoaderCallbacks} 메서드 {@link -android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}를 ë°œìƒì‹œí‚µë‹ˆë‹¤. 여기ì—서 +android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}를 ë°œìƒì‹œí‚µë‹ˆë‹¤. 여기ì—서 새 로ë”를 ìƒì„±í•©ë‹ˆë‹¤. ì´ê²ƒì€ 보통 {@link android.content.CursorLoader}ì´ì§€ë§Œ, ê°œë°œìž ë‚˜ë¦„ëŒ€ë¡œ {@link android.content.Loader} 하위 í´ëž˜ìŠ¤ë¥¼ êµ¬í˜„í•´ë„ ë©ë‹ˆë‹¤. </p> <p>ì´ ì˜ˆì‹œì—서는, {@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()} - 콜백 메서드가 {@link android.content.CursorLoader}를 ìƒì„±í•©ë‹ˆë‹¤. -{@link android.content.CursorLoader}를 ìžì²´ ìƒì„±ìž 메서드를 사용하여 구축해야 합니다. ì´ê²ƒì€ + 콜백 메서드가 {@link android.content.CursorLoader}를 ìƒì„±í•©ë‹ˆë‹¤. +{@link android.content.CursorLoader}를 ìžì²´ ìƒì„±ìž 메서드를 사용하여 구축해야 합니다. ì´ê²ƒì€ {@link android.content.ContentProvider}로 쿼리를 수행하기 위해 필요한 ëª¨ë“ ì •ë³´ ì§‘í•©ì„ í•„ìš”ë¡œ 합니다. 구체ì 으로 필요한 ê²ƒì€ ë‹¤ìŒê³¼ 같습니다.</p> <ul> <li><em>uri</em> — ê²€ìƒ‰í• ì½˜í…ì¸ ì˜ URI입니다. </li> - <li><em>예측</em> — ë°˜í™˜í• ì—´ 목ë¡ìž…니다. + <li><em>예측</em> — ë°˜í™˜í• ì—´ 목ë¡ìž…니다. <code>null</code>ì„ ì „ë‹¬í•˜ë©´ ëª¨ë“ ì—´ì„ ë°˜í™˜í•˜ë©°, ì´ëŠ” 비효율ì 입니다. </li> - <li><em>ì„ íƒ</em> — ë°˜í™˜í• í–‰ì„ ì„ ì–¸í•˜ëŠ” 필터로, -SQL WHERE ì ˆë¡œ 형ì‹ì´ ì„¤ì •ë©ë‹ˆë‹¤(WHERE ìžì²´ëŠ” ì œì™¸). + <li><em>ì„ íƒ</em> — ë°˜í™˜í• í–‰ì„ ì„ ì–¸í•˜ëŠ” 필터로, +SQL WHERE ì ˆë¡œ 형ì‹ì´ ì„¤ì •ë©ë‹ˆë‹¤(WHERE ìžì²´ëŠ” ì œì™¸). <code>null</code>ì„ ë°˜í™˜í•˜ë©´ 주어진 URIì— ëŒ€í•œ ëª¨ë“ í–‰ì„ ë°˜í™˜í•©ë‹ˆë‹¤. </li> - <li><em>selectionArgs</em> — ì„ íƒì— ?를 í¬í•¨í•´ë„ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 -ì´ê²ƒì´ <em>selectionArgs</em>ì—서 ê°€ì ¸ì˜¨ 값으로 êµì²´ë˜ë©°, ì´ë•Œ ì„ íƒì— 표시ë˜ëŠ” + <li><em>selectionArgs</em> — ì„ íƒì— ?를 í¬í•¨í•´ë„ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 +ì´ê²ƒì´ <em>selectionArgs</em>ì—서 ê°€ì ¸ì˜¨ 값으로 êµì²´ë˜ë©°, ì´ë•Œ ì„ íƒì— 표시ë˜ëŠ” 순서를 따릅니다. ê°’ì€ ë¬¸ìžì—´ë¡œ ë°”ì¸ë”©ë©ë‹ˆë‹¤. </li> - <li><em>sortOrder</em> — SQL ORDER BY ì ˆ 형ì‹ìœ¼ë¡œ ì„¤ì •ëœ -í–‰ì˜ ìˆœì„œ ì§€ì • 방법입니다(ORDER BY ìžì²´ëŠ” ì œì™¸). <code>null</code>ì„ + <li><em>sortOrder</em> — SQL ORDER BY ì ˆ 형ì‹ìœ¼ë¡œ ì„¤ì •ëœ +í–‰ì˜ ìˆœì„œ ì§€ì • 방법입니다(ORDER BY ìžì²´ëŠ” ì œì™¸). <code>null</code>ì„ ì „ë‹¬í•˜ë©´ 기본 ì •ë ¬ 순서를 사용하는ë°, ì´ëŠ” 순서가 없습니다.</li> </ul> <p>예:</p> @@ -312,19 +312,19 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { }</pre> <h4 id="onLoadFinished">onLoadFinished</h4> -<p>ì´ ë©”ì„œë“œëŠ” ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ ë¡œë”©ì„ ì™„ë£Œí•˜ë©´ 호출ë©ë‹ˆë‹¤. -ì´ ë¡œë”ì— ëŒ€í•´ ì œê³µëœ ë§ˆì§€ë§‰ ë°ì´í„°ê°€ 릴리스ë˜ê¸° ì „ì— í‹€ë¦¼ì—†ì´ -ì´ ë©”ì„œë“œê°€ 호출ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 ì˜¤ëž˜ëœ ë°ì´í„°ì˜ -사용 ë‚´ìš©ì„ ëª¨ë‘ ì œê±°í•´ì•¼ 하지만(ê³§ 릴리스ë 것ì´ë¯€ë¡œ), ë°ì´í„° 릴리스를 ì§ì ‘ 수행해서는 안 ë©ë‹ˆë‹¤. 해당 ë°ì´í„°ëŠ” +<p>ì´ ë©”ì„œë“œëŠ” ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ ë¡œë”©ì„ ì™„ë£Œí•˜ë©´ 호출ë©ë‹ˆë‹¤. +ì´ ë¡œë”ì— ëŒ€í•´ ì œê³µëœ ë§ˆì§€ë§‰ ë°ì´í„°ê°€ 릴리스ë˜ê¸° ì „ì— í‹€ë¦¼ì—†ì´ +ì´ ë©”ì„œë“œê°€ 호출ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 ì˜¤ëž˜ëœ ë°ì´í„°ì˜ +사용 ë‚´ìš©ì„ ëª¨ë‘ ì œê±°í•´ì•¼ 하지만(ê³§ 릴리스ë 것ì´ë¯€ë¡œ), ë°ì´í„° 릴리스를 ì§ì ‘ 수행해서는 안 ë©ë‹ˆë‹¤. 해당 ë°ì´í„°ëŠ” 로ë”ì˜ ì†Œìœ ì´ë©°, 로ë”ê°€ 알아서 ì²˜ë¦¬í• ê²ƒì´ê¸° 때문입니다.</p> -<p>로ë”는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°ì´í„°ë¥¼ ë” ì´ìƒ 사용하지 않는다는 ì‚¬ì‹¤ì„ ì•Œê²Œ ë˜ë©´ 곧바로 해당 ë°ì´í„°ë¥¼ +<p>로ë”는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°ì´í„°ë¥¼ ë” ì´ìƒ 사용하지 않는다는 ì‚¬ì‹¤ì„ ì•Œê²Œ ë˜ë©´ 곧바로 해당 ë°ì´í„°ë¥¼ ë¦´ë¦¬ìŠ¤í• ê²ƒìž…ë‹ˆë‹¤. 예를 들어 ë°ì´í„°ê°€ {@link android.content.CursorLoader}ì˜ ì»¤ì„œì¸ ê²½ìš°, 거기ì—서 ì§ì ‘ {@link -android.database.Cursor#close close()}를 호출하면 안 ë©ë‹ˆë‹¤. 커서가 +android.database.Cursor#close close()}를 호출하면 안 ë©ë‹ˆë‹¤. 커서가 {@link android.widget.CursorAdapter}ì— ë°°ì¹˜ë˜ëŠ” 경우, {@link -android.widget.SimpleCursorAdapter#swapCursor swapCursor()} 메서드를 사용해야 합니다. 그래야 +android.widget.SimpleCursorAdapter#swapCursor swapCursor()} 메서드를 사용해야 합니다. 그래야 ì˜¤ëž˜ëœ {@link android.database.Cursor}ê°€ 종료ë˜ì§€ 않습니다. 예:</p> <pre> @@ -340,11 +340,11 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <h4 id="onLoaderReset">onLoaderReset</h4> -<p>ì´ ë©”ì„œë“œëŠ” ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ íœ´ì‹ ì¤‘ì´ë¼ì„œ 해당ë˜ëŠ” ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 없는 경우 -호출ë©ë‹ˆë‹¤. ì´ ì½œë°±ì„ ì‚¬ìš©í•˜ë©´ ë°ì´í„°ê°€ ì–¸ì œ 릴리스ë ì§€ 알아낼 수 있어 +<p>ì´ ë©”ì„œë“œëŠ” ì´ì „ì— ìƒì„±ëœ 로ë”ê°€ íœ´ì‹ ì¤‘ì´ë¼ì„œ 해당ë˜ëŠ” ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 없는 경우 +호출ë©ë‹ˆë‹¤. ì´ ì½œë°±ì„ ì‚¬ìš©í•˜ë©´ ë°ì´í„°ê°€ ì–¸ì œ 릴리스ë ì§€ 알아낼 수 있어 ì´ì— 대한 참조를 ì§ì ‘ ì œê±°í• ìˆ˜ 있습니다.  </p> -<p>ì´ êµ¬í˜„ì€ -{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}를 호출하며, +<p>ì´ êµ¬í˜„ì€ +{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}를 호출하며, ì´ë•Œ ê°’ì€ <code>null</code>ì„ ì”니다.</p> <pre> @@ -363,12 +363,12 @@ public void onLoaderReset(Loader<Cursor> loader) { <h2 id="example">예</h2> <p>ì¼ë¡€ë¥¼ ì œì‹œí•˜ê¸° 위해 ì•„ëž˜ì— {@link android.widget.ListView}를 표시하는 {@link -android.app.Fragment}ì˜ ì „ì²´ êµ¬í˜„ì„ ë‚˜íƒ€ë‚´ì—ˆìŠµë‹ˆë‹¤. 여기ì—는 +android.app.Fragment}ì˜ ì „ì²´ êµ¬í˜„ì„ ë‚˜íƒ€ë‚´ì—ˆìŠµë‹ˆë‹¤. 여기ì—는 ì—°ë½ì²˜ 콘í…ì¸ ì œê³µìžì— 대한 쿼리 결과가 들어 있습니다. ì´ê²ƒì€ {@link android.content.CursorLoader}를 사용하여 ì œê³µìžì— 대한 쿼리를 관리합니다.</p> - -<p>ì´ ì˜ˆì‹œì—서 나타낸 바와 ê°™ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžì˜ ì—°ë½ì²˜ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— + +<p>ì´ ì˜ˆì‹œì—서 나타낸 바와 ê°™ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžì˜ ì—°ë½ì²˜ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다.</p> <pre> @@ -479,16 +479,16 @@ public static class CursorLoaderListFragment extends ListFragment }</pre> <h3 id="more_examples">추가 예</h3> -<p>로ë”를 사용하는 ë²•ì„ ë³´ì—¬ì£¼ëŠ” 몇 가지 다른 예가 <strong>ApiDemos</strong>ì— +<p>로ë”를 사용하는 ë²•ì„ ë³´ì—¬ì£¼ëŠ” 몇 가지 다른 예가 <strong>ApiDemos</strong>ì— ì†Œê°œë˜ì–´ 있습니다.</p> <ul> <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> -LoaderCursor</a> — ìœ„ì— í‘œì‹œëœ ì½”ë“œ ì¡°ê°ì˜ ì™„ì „í•œ +LoaderCursor</a> — ìœ„ì— í‘œì‹œëœ ì½”ë“œ ì¡°ê°ì˜ ì™„ì „í•œ ë²„ì „ìž…ë‹ˆë‹¤.</li> - <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> — ë°ì´í„°ê°€ 변경ë 때 콘í…ì¸ ì œê³µìžê°€ + <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> — ë°ì´í„°ê°€ 변경ë 때 콘í…ì¸ ì œê³µìžê°€ 수행하는 ì¿¼ë¦¬ì˜ ìˆ˜ë¥¼ 줄ì´ê¸° 위해 ì œí•œì„ ì‚¬ìš©í•˜ëŠ” ë°©ë²•ì„ ì˜ˆì‹œë¡œ 나타낸 것입니다.</li> </ul> -<p>SDK ìƒ˜í”Œì„ ë‹¤ìš´ë¡œë“œí•˜ê³ ì„¤ì¹˜í•˜ëŠ” ë° ëŒ€í•œ ì •ë³´ëŠ” <a href="http://developer.android.com/resources/samples/get.html">샘플 +<p>SDK ìƒ˜í”Œì„ ë‹¤ìš´ë¡œë“œí•˜ê³ ì„¤ì¹˜í•˜ëŠ” ë° ëŒ€í•œ ì •ë³´ëŠ” <a href="http://developer.android.com/resources/samples/get.html">샘플 ê°€ì ¸ì˜¤ê¸°</a>를 참조하ì‹ì‹œì˜¤. </p> diff --git a/docs/html-intl/intl/ko/guide/components/processes-and-threads.jd b/docs/html-intl/intl/ko/guide/components/processes-and-threads.jd index 850d55cf9c71..cad4917a8c43 100644 --- a/docs/html-intl/intl/ko/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/ko/guide/components/processes-and-threads.jd @@ -28,10 +28,10 @@ page.tags=수명 주기, ë°°ê²½ <p>ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 시작ë˜ê³ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 실행 ì¤‘ì¸ ë‹¤ë¥¸ 구성 요소가 없으면 Android ì‹œìŠ¤í…œì€ í•˜ë‚˜ì˜ ì‹¤í–‰ ìŠ¤ë ˆë“œë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ Linux 프로세스를 시작합니다. 기본ì 으로 ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ëª¨ë“ êµ¬ì„± 요소는 ê°™ì€ í”„ë¡œì„¸ìŠ¤ì™€ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤ -("기본" ìŠ¤ë ˆë“œë¼ê³ 합니다). ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 시작ë˜ê³ (ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소가 존재해서) +("기본" ìŠ¤ë ˆë“œë¼ê³ 합니다). ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 시작ë˜ê³ (ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소가 존재해서) 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 프로세스가 ì´ë¯¸ 존재하면 해당 구성 요소는 -프로세스 ë‚´ì—서 시작ë˜ê³ ê°™ì€ ì‹¤í–‰ ìŠ¤ë ˆë“œë¥¼ 사용합니다. 하지만 ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ -여러 가지 구성 요소가 ê°ìž 별ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ë„ë¡ í• ìˆ˜ë„ ìžˆê³ , ì–´ëŠ í”„ë¡œì„¸ìŠ¤ì—ë“ ì¶”ê°€ ìŠ¤ë ˆë“œë¥¼ +프로세스 ë‚´ì—서 시작ë˜ê³ ê°™ì€ ì‹¤í–‰ ìŠ¤ë ˆë“œë¥¼ 사용합니다. 하지만 ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ +여러 가지 구성 요소가 ê°ìž 별ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ë„ë¡ í• ìˆ˜ë„ ìžˆê³ , ì–´ëŠ í”„ë¡œì„¸ìŠ¤ì—ë“ ì¶”ê°€ ìŠ¤ë ˆë“œë¥¼ 만들 수 있습니다.</p> <p>ì´ ë¬¸ì„œëŠ” 프로세스와 ìŠ¤ë ˆë“œê°€ Android ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ìž‘ë™í•˜ëŠ” ë°©ì‹ì„ 설명합니다.</p> @@ -48,8 +48,8 @@ Android ì‹œìŠ¤í…œì€ í•˜ë‚˜ì˜ ì‹¤í–‰ ìŠ¤ë ˆë“œë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ Linux í <service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code <receiver>}</a> ë° <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}</a>—ì˜ ê° ìœ í˜•ì— ëŒ€í•œ 매니페스트 í•ëª©ì€ êµ¬ì„± 요소를 ì‹¤í–‰í• í”„ë¡œì„¸ìŠ¤ë¥¼ ì§€ì •í•˜ëŠ” {@code android:process} ì†ì„±ì„ ì§€ì›í•©ë‹ˆë‹¤. - ì´ëŸ¬í•œ ì†ì„±ì„ ì„¤ì •í•˜ì—¬ ê° êµ¬ì„± 요소를 ìžì²´ 프로세스ì—서 실행시키거나 -다른 구성 요소를 ì œì™¸í•œ ì¼ë¶€ 구성 요소만 프로세스를 ê³µìœ í•˜ê²Œ í• ìˆ˜ 있습니다 ë˜í•œ, + ì´ëŸ¬í•œ ì†ì„±ì„ ì„¤ì •í•˜ì—¬ ê° êµ¬ì„± 요소를 ìžì²´ 프로세스ì—서 실행시키거나 +다른 구성 요소를 ì œì™¸í•œ ì¼ë¶€ 구성 요소만 프로세스를 ê³µìœ í•˜ê²Œ í• ìˆ˜ 있습니다 ë˜í•œ, {@code android:process}를 ì„¤ì •í•˜ì—¬ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 구성 요소를 ê°™ì€ í”„ë¡œì„¸ìŠ¤ì—서 실행시킬 수 있습니다. 단, ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ê°™ì€ Linux ì‚¬ìš©ìž ID를 ê³µìœ í•˜ê³ ê°™ì€ ì¸ì¦ì„œì— 서명ë˜ì—ˆì„ ê²½ìš°ì— í•œí•©ë‹ˆë‹¤.</p> @@ -58,35 +58,35 @@ Android ì‹œìŠ¤í…œì€ í•˜ë‚˜ì˜ ì‹¤í–‰ ìŠ¤ë ˆë“œë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ Linux í <application>}</a> ìš”ì†Œë„ {@code android:process} ì†ì„±ì„ ì§€ì›í•˜ì—¬, ëª¨ë“ êµ¬ì„± ìš”ì†Œì— ì ìš©ë˜ëŠ” ê¸°ë³¸ê°’ì„ ì„¤ì •í•©ë‹ˆë‹¤.</p> -<p>Android는 ì–´ëŠ ì‹œì 엔가 프로세스를 종료하기로 ê²°ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 즉 메모리가 부족하거나, 사용ìžì—게 ë”ìš± 즉ê°ì ì¸ ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” -다른 프로세스가 ì´ í”„ë¡œì„¸ìŠ¤ì˜ ì¤‘ë‹¨ì„ í•„ìš”ë¡œ 하는 경우 등입니다. 그러면 ì¤‘ë‹¨ëœ -프로세스ì—서 실행ë˜ê³ ìžˆë˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 ìš”ì†Œë„ ë”°ë¼ì„œ 소멸ë©ë‹ˆë‹¤. 그와 ê°™ì€ êµ¬ì„± 요소가 í• ìž‘ì—…ì´ ë‹¤ì‹œ ìƒê¸°ë©´ +<p>Android는 ì–´ëŠ ì‹œì 엔가 프로세스를 종료하기로 ê²°ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 즉 메모리가 부족하거나, 사용ìžì—게 ë”ìš± 즉ê°ì ì¸ ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” +다른 프로세스가 ì´ í”„ë¡œì„¸ìŠ¤ì˜ ì¤‘ë‹¨ì„ í•„ìš”ë¡œ 하는 경우 등입니다. 그러면 ì¤‘ë‹¨ëœ +프로세스ì—서 실행ë˜ê³ ìžˆë˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 ìš”ì†Œë„ ë”°ë¼ì„œ 소멸ë©ë‹ˆë‹¤. 그와 ê°™ì€ êµ¬ì„± 요소가 í• ìž‘ì—…ì´ ë‹¤ì‹œ ìƒê¸°ë©´ ê·¸ì— ëŒ€í•œ í”„ë¡œì„¸ìŠ¤ë„ ë‹¤ì‹œ 시작ë©ë‹ˆë‹¤.</p> -<p>ì–´ëŠ í”„ë¡œì„¸ìŠ¤ë¥¼ ì‚ì œí• ì§€ ê²°ì •í• ë•Œ, Android ì‹œìŠ¤í…œì€ -사용ìžì— 대한 ì´ë“¤ì˜ ìƒëŒ€ì ì¤‘ìš”ì„±ì„ ê°€ëŠ í•©ë‹ˆë‹¤. 예를 들어, ëˆˆì— ë³´ì´ëŠ” 액티비티를 호스팅하는 프로세스와 비êµí•˜ì—¬ -í™”ë©´ì— ë³´ì´ì§€ 않는 액티비티를 호스팅하는 프로세스를 쉽게 ì¢…ë£Œí• ìˆ˜ 있습니다. 프로세스 종료 ê²°ì •ì€ -해당 프로세스ì—서 실행ë˜ëŠ” 구성 ìš”ì†Œì˜ ìƒíƒœì— ë”°ë¼ ë‹¬ë¼ì§‘니다. ì¢…ë£Œí• +<p>ì–´ëŠ í”„ë¡œì„¸ìŠ¤ë¥¼ ì‚ì œí• ì§€ ê²°ì •í• ë•Œ, Android ì‹œìŠ¤í…œì€ +사용ìžì— 대한 ì´ë“¤ì˜ ìƒëŒ€ì ì¤‘ìš”ì„±ì„ ê°€ëŠ í•©ë‹ˆë‹¤. 예를 들어, ëˆˆì— ë³´ì´ëŠ” 액티비티를 호스팅하는 프로세스와 비êµí•˜ì—¬ +í™”ë©´ì— ë³´ì´ì§€ 않는 액티비티를 호스팅하는 프로세스를 쉽게 ì¢…ë£Œí• ìˆ˜ 있습니다. 프로세스 종료 ê²°ì •ì€ +해당 프로세스ì—서 실행ë˜ëŠ” 구성 ìš”ì†Œì˜ ìƒíƒœì— ë”°ë¼ ë‹¬ë¼ì§‘니다. ì¢…ë£Œí• í”„ë¡œì„¸ìŠ¤ë¥¼ ê²°ì •í•˜ëŠ” ë° ì‚¬ìš©í•˜ëŠ” ê·œì¹™ì€ ì•„ëž˜ì— ì„¤ëª…ë˜ì–´ 있습니다. </p> <h3 id="Lifecycle">프로세스 수명 주기</h3> <p>Android ì‹œìŠ¤í…œì€ ìµœëŒ€í•œ 오래 ì• í”Œë¦¬ì¼€ì´ì…˜ 프로세스를 ìœ ì§€í•˜ë ¤ê³ ì‹œë„하지만, -ê²°êµ ì˜¤ëž˜ëœ í”„ë¡œì„¸ìŠ¤ë¥¼ ì œê±°í•˜ê³ ìƒˆ 프로세스나 ë” ì¤‘ìš”í•œ í”„ë¡œì„¸ìŠ¤ì— ì‚¬ìš©í• ë©”ëª¨ë¦¬ë¥¼ 확보해야 합니다. ìœ ì§€í• +ê²°êµ ì˜¤ëž˜ëœ í”„ë¡œì„¸ìŠ¤ë¥¼ ì œê±°í•˜ê³ ìƒˆ 프로세스나 ë” ì¤‘ìš”í•œ í”„ë¡œì„¸ìŠ¤ì— ì‚¬ìš©í• ë©”ëª¨ë¦¬ë¥¼ 확보해야 합니다. ìœ ì§€í• í”„ë¡œì„¸ìŠ¤ì™€ ì¢…ë£Œí• í”„ë¡œì„¸ìŠ¤ë¥¼ ê²°ì •í•˜ê¸° 위해 -ì‹œìŠ¤í…œì€ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ëŠ” 구성 요소와 해당 구성 ìš”ì†Œì˜ ìƒíƒœì— 기초하여 ê° í”„ë¡œì„¸ìŠ¤ì— -"중요 계층"ì„ ë¶€ì—¬í•©ë‹ˆë‹¤. 중요ë„ê°€ ë‚®ì€ +ì‹œìŠ¤í…œì€ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ëŠ” 구성 요소와 해당 구성 ìš”ì†Œì˜ ìƒíƒœì— 기초하여 ê° í”„ë¡œì„¸ìŠ¤ì— +"중요 계층"ì„ ë¶€ì—¬í•©ë‹ˆë‹¤. 중요ë„ê°€ ë‚®ì€ í”„ë¡œì„¸ìŠ¤ê°€ ë¨¼ì € ì œê±°ë˜ê³ , ê·¸ 다ìŒìœ¼ë¡œ 중요ë„ê°€ ë‚®ì€ í”„ë¡œì„¸ìŠ¤ë¥¼ ì œê±°í•˜ëŠ” ì‹ìœ¼ë¡œ í•„ìš”ì— ë”°ë¼ ì‹œìŠ¤í…œ 리소스를 회복하는 것입니다.</p> -<p>중요 계층ì—는 다섯 가지 단계가 있습니다. ë‹¤ìŒ ëª©ë¡ì€ -ì¤‘ìš”ë„ ìˆœì„œì— ë”°ë¥¸ 프로세스 ìœ í˜•ì„ ë‚˜íƒ€ë‚¸ 것입니다(첫 번째 프로세스가 <em>가장 ì¤‘ìš”í•˜ê³ </em> +<p>중요 계층ì—는 다섯 가지 단계가 있습니다. ë‹¤ìŒ ëª©ë¡ì€ +ì¤‘ìš”ë„ ìˆœì„œì— ë”°ë¥¸ 프로세스 ìœ í˜•ì„ ë‚˜íƒ€ë‚¸ 것입니다(첫 번째 프로세스가 <em>가장 ì¤‘ìš”í•˜ê³ </em> <em>마지막으로 종료ë©ë‹ˆë‹¤)</em>.</p> <ol> <li><b>ì „ê²½ 프로세스</b> - <p>사용ìžê°€ 현재 진행하는 ìž‘ì—…ì— í•„ìš”í•œ 프로세스입니다. ë‹¤ìŒ ì¡°ê±´ 중 + <p>사용ìžê°€ 현재 진행하는 ìž‘ì—…ì— í•„ìš”í•œ 프로세스입니다. ë‹¤ìŒ ì¡°ê±´ 중 하나가 ì°¸ì¼ ê²½ìš° 프로세스가 ì „ê²½ì— ìžˆëŠ” 것으로 간주합니다.</p> <ul> @@ -108,19 +108,19 @@ onStart()} ë˜ëŠ” {@link android.app.Service#onDestroy onDestroy()}).</li> android.content.BroadcastReceiver#onReceive onReceive()} 메서드를 실행하는 {@link android.content.BroadcastReceiver}를 í˜¸ìŠ¤íŒ…í• ê²½ìš°.</li> </ul> - <p>ì¼ë°˜ì 으로, 주어진 ì‹œê°„ì— ì¡´ìž¬í•˜ëŠ” ì „ê²½ 프로세스는 몇 ê°œë°–ì— ë˜ì§€ 않습니다. ì´ë“¤ì€ ìµœí›„ì˜ -수단으로서만 종료ë©ë‹ˆë‹¤. 즉, 메모리가 너무 부족해 ê³„ì† ì‹¤í–‰í• ìˆ˜ 없는 경우를 ë§í•©ë‹ˆë‹¤. ì¼ë°˜ì 으로 ê·¸ 시ì ì´ ë˜ë©´ -기기가 메모리 페ì´ì§• ìƒíƒœì— ë„달한 것ì´ë¯€ë¡œ ì „ê²½ 프로세스 몇 개를 중단해야만 + <p>ì¼ë°˜ì 으로, 주어진 ì‹œê°„ì— ì¡´ìž¬í•˜ëŠ” ì „ê²½ 프로세스는 몇 ê°œë°–ì— ë˜ì§€ 않습니다. ì´ë“¤ì€ ìµœí›„ì˜ +수단으로서만 종료ë©ë‹ˆë‹¤. 즉, 메모리가 너무 부족해 ê³„ì† ì‹¤í–‰í• ìˆ˜ 없는 경우를 ë§í•©ë‹ˆë‹¤. ì¼ë°˜ì 으로 ê·¸ 시ì ì´ ë˜ë©´ +기기가 메모리 페ì´ì§• ìƒíƒœì— ë„달한 것ì´ë¯€ë¡œ ì „ê²½ 프로세스 몇 개를 중단해야만 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ ë°˜ì‘ì„±ì„ ìœ ì§€í• ìˆ˜ 있습니다.</p></li> <li><b>가시ì 프로세스</b> - <p>ì „ê²½ 구성 요소는 없지만 -사용ìžê°€ 화면ì—서 보는 ê²ƒì— ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있는 프로세스입니다. ë‹¤ìŒ ì¡°ê±´ 중 하나가 ì°¸ì´ë©´ + <p>ì „ê²½ 구성 요소는 없지만 +사용ìžê°€ 화면ì—서 보는 ê²ƒì— ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있는 프로세스입니다. ë‹¤ìŒ ì¡°ê±´ 중 하나가 ì°¸ì´ë©´ 가시ì 프로세스로 간주합니다.</p> <ul> <li>ì „ê²½ì— ìžˆì§€ëŠ” 않지만 사용ìžì—게 ë³´ì´ëŠ” {@link android.app.Activity}를 í˜¸ìŠ¤íŒ…í• ê²½ìš° -({@link android.app.Activity#onPause onPause()} 메서드가 호출ë˜ì—ˆì„ 경우). +({@link android.app.Activity#onPause onPause()} 메서드가 호출ë˜ì—ˆì„ 경우). 예를 들어 ì´ê²ƒì€ ì „ê²½ 액티비티가 대화를 시작하여 ì´ì „ 액티비티가 ê·¸ ë’¤ì— ë³´ì¼ ê²½ìš° ë°œìƒí•©ë‹ˆë‹¤.</li> @@ -128,59 +128,59 @@ android.content.BroadcastReceiver#onReceive onReceive()} 메서드를 실행하ë </li> </ul> - <p>가시ì ì¸ í”„ë¡œì„¸ìŠ¤ëŠ” 매우 중요ë„ê°€ ë†’ì€ ê²ƒìœ¼ë¡œ ì·¨ê¸‰í•˜ê³ ëª¨ë“ ì „ê²½ 프로세스를 실행하는 ë° í•„ìš”í• ê²½ìš°ì—ë§Œ + <p>가시ì ì¸ í”„ë¡œì„¸ìŠ¤ëŠ” 매우 중요ë„ê°€ ë†’ì€ ê²ƒìœ¼ë¡œ ì·¨ê¸‰í•˜ê³ ëª¨ë“ ì „ê²½ 프로세스를 실행하는 ë° í•„ìš”í• ê²½ìš°ì—ë§Œ 종료ë©ë‹ˆë‹¤. </p> </li> <li><b>서비스 프로세스</b> <p>{@link -android.content.Context#startService startService()} 메서드로 시작ë˜ì—ˆì§€ë§Œ ë‘ ê°œì˜ ìƒìœ„ 계층 ë¶„ë¥˜ì— -들어가지 않는 서비스를 실행하는 프로세스입니다. 서비스 프로세스는 사용ìžê°€ 보는 것과 ì§ì ‘ ì—°ê²°ë˜ì–´ 있지는 않지만, -ì¼ë°˜ì 으로 사용ìžê°€ ì‹ ê²½ 쓰는 ìž‘ì—…ì„ í•˜ë¯€ë¡œ(ë°°ê²½ì—서 ìŒì•… ìž¬ìƒ ë˜ëŠ” 네트워í¬ì—서 ë°ì´í„° 다운로드) -ì‹œìŠ¤í…œì€ ëª¨ë“ ì „ê²½ ë° ê°€ì‹œì 프로세스와 함께 ì‹¤í–‰í• ë§Œí¼ ë©”ëª¨ë¦¬ê°€ 충분하지 ì•Šì„ ê²½ìš°ì—ë§Œ +android.content.Context#startService startService()} 메서드로 시작ë˜ì—ˆì§€ë§Œ ë‘ ê°œì˜ ìƒìœ„ 계층 ë¶„ë¥˜ì— +들어가지 않는 서비스를 실행하는 프로세스입니다. 서비스 프로세스는 사용ìžê°€ 보는 것과 ì§ì ‘ ì—°ê²°ë˜ì–´ 있지는 않지만, +ì¼ë°˜ì 으로 사용ìžê°€ ì‹ ê²½ 쓰는 ìž‘ì—…ì„ í•˜ë¯€ë¡œ(ë°°ê²½ì—서 ìŒì•… ìž¬ìƒ ë˜ëŠ” 네트워í¬ì—서 ë°ì´í„° 다운로드) +ì‹œìŠ¤í…œì€ ëª¨ë“ ì „ê²½ ë° ê°€ì‹œì 프로세스와 함께 ì‹¤í–‰í• ë§Œí¼ ë©”ëª¨ë¦¬ê°€ 충분하지 ì•Šì„ ê²½ìš°ì—ë§Œ 프로세스를 중단합니다. </p> </li> <li><b>ë°°ê²½ 프로세스</b> - <p>현재 사용ìžì—게 ë³´ì´ì§€ 않는 액티비티를 ë³´ìœ í•œ 프로세스입니다(ì•¡í‹°ë¹„í‹°ì˜ -{@link android.app.Activity#onStop onStop()} 메서드가 호출ë˜ì—ˆìŠµë‹ˆë‹¤). ì´ì™€ ê°™ì€ í”„ë¡œì„¸ìŠ¤ëŠ” -ì‚¬ìš©ìž í™˜ê²½ì— ì§ì ‘ì ì˜í–¥ì„ 미치지 ì•Šê³ , ì‹œìŠ¤í…œì€ ì–¸ì œë“ ì´ í”„ë¡œì„¸ìŠ¤ë¥¼ 중단시켜 + <p>현재 사용ìžì—게 ë³´ì´ì§€ 않는 액티비티를 ë³´ìœ í•œ 프로세스입니다(ì•¡í‹°ë¹„í‹°ì˜ +{@link android.app.Activity#onStop onStop()} 메서드가 호출ë˜ì—ˆìŠµë‹ˆë‹¤). ì´ì™€ ê°™ì€ í”„ë¡œì„¸ìŠ¤ëŠ” +ì‚¬ìš©ìž í™˜ê²½ì— ì§ì ‘ì ì˜í–¥ì„ 미치지 ì•Šê³ , ì‹œìŠ¤í…œì€ ì–¸ì œë“ ì´ í”„ë¡œì„¸ìŠ¤ë¥¼ 중단시켜 ì „ê²½, -가시ì ë˜ëŠ” 서비스 프로세스를 위한 메모리를 í™•ë³´í• ìˆ˜ 있습니다. 보통 í•œë²ˆì— ì‹¤í–‰ ì¤‘ì¸ ë°°ê²½ 프로세스가 ë§Žì€ íŽ¸ì´ë¯€ë¡œ ì´ë“¤ì€ -LRU(ìµœì € 사용 빈ë„) 목ë¡ì— 보관하여 사용ìžê°€ 가장 ìµœê·¼ì— ë³¸ 액티비티가 있는 -프로세스가 가장 ë§ˆì§€ë§‰ì— ì¤‘ë‹¨ë˜ë„ë¡ í•©ë‹ˆë‹¤. 액티비티가 수명 주기 메서드를 올바르게 êµ¬í˜„í•˜ê³ -ìžì‹ ì˜ í˜„ìž¬ ìƒíƒœë¥¼ ì €ìž¥í• ê²½ìš°, 사용ìžê°€ 액티비티로 다시 ì´ë™í• 때 액티비티가 ëª¨ë“ ê°€ì‹œì ìƒíƒœë¥¼ -ë³µì›í•˜ë¯€ë¡œ 프로세스를 중단시키ë”ë¼ë„ ì‚¬ìš©ìž í™˜ê²½ì—는 ëˆˆì— ë„게 ì˜í–¥ì„ 미치지 +가시ì ë˜ëŠ” 서비스 프로세스를 위한 메모리를 í™•ë³´í• ìˆ˜ 있습니다. 보통 í•œë²ˆì— ì‹¤í–‰ ì¤‘ì¸ ë°°ê²½ 프로세스가 ë§Žì€ íŽ¸ì´ë¯€ë¡œ ì´ë“¤ì€ +LRU(ìµœì € 사용 빈ë„) 목ë¡ì— 보관하여 사용ìžê°€ 가장 ìµœê·¼ì— ë³¸ 액티비티가 있는 +프로세스가 가장 ë§ˆì§€ë§‰ì— ì¤‘ë‹¨ë˜ë„ë¡ í•©ë‹ˆë‹¤. 액티비티가 수명 주기 메서드를 올바르게 êµ¬í˜„í•˜ê³ +ìžì‹ ì˜ í˜„ìž¬ ìƒíƒœë¥¼ ì €ìž¥í• ê²½ìš°, 사용ìžê°€ 액티비티로 다시 ì´ë™í• 때 액티비티가 ëª¨ë“ ê°€ì‹œì ìƒíƒœë¥¼ +ë³µì›í•˜ë¯€ë¡œ 프로세스를 중단시키ë”ë¼ë„ ì‚¬ìš©ìž í™˜ê²½ì—는 ëˆˆì— ë„게 ì˜í–¥ì„ 미치지 않습니다. ìƒíƒœ ì €ìž¥ê³¼ ë³µì›ì— 관한 ì •ë³´ëŠ” <a href="{@docRoot}guide/components/activities.html#SavingActivityState">액티비티</a> 문서를 참조하ì‹ì‹œì˜¤.</p> </li> <li><b>빈 프로세스</b> - <p>활성 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소를 ë³´ìœ í•˜ì§€ ì•Šì€ í”„ë¡œì„¸ìŠ¤ìž…ë‹ˆë‹¤. ì´ëŸ° 프로세스를 -ìœ ì§€í•˜ëŠ” ìœ ì¼í•œ ì´ìœ 는 다ìŒì— ë‚´ë¶€ 구성 요소를 ì‹¤í–‰í• ë•Œ 시작 ì‹œê°„ì„ ì ˆì•½í•˜ê¸° 위한 ìºì‹± + <p>활성 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소를 ë³´ìœ í•˜ì§€ ì•Šì€ í”„ë¡œì„¸ìŠ¤ìž…ë‹ˆë‹¤. ì´ëŸ° 프로세스를 +ìœ ì§€í•˜ëŠ” ìœ ì¼í•œ ì´ìœ 는 다ìŒì— ë‚´ë¶€ 구성 요소를 ì‹¤í–‰í• ë•Œ 시작 ì‹œê°„ì„ ì ˆì•½í•˜ê¸° 위한 ìºì‹± 때문입니다. ì‹œìŠ¤í…œì€ í”„ë¡œì„¸ìŠ¤ ìºì‹œì™€ 기본 ì»¤ë„ ìºì‹œ 사ì´ì—서 ì „ë°˜ì ì¸ ì‹œìŠ¤í…œ ë¦¬ì†ŒìŠ¤ì˜ ê· í˜•ì„ ë§žì¶”ê¸° 위해 ì´ í”„ë¡œì„¸ìŠ¤ë¥¼ 중단시키는 경우가 많습니다.</p> </li> </ol> - <p>Android는 프로세스ì—서 현재 활성 ìƒíƒœì¸ 구성 ìš”ì†Œì˜ ì¤‘ìš”ë„ì— ë”°ë¼ -í”„ë¡œì„¸ìŠ¤ì— ê°€ìž¥ ë†’ì€ ìˆ˜ì¤€ì„ ë¶€ì—¬í•©ë‹ˆë‹¤. 예를 들어, 프로세스가 서비스와 가시ì 액티비티를 í˜¸ìŠ¤íŒ…í• ê²½ìš°, + <p>Android는 프로세스ì—서 현재 활성 ìƒíƒœì¸ 구성 ìš”ì†Œì˜ ì¤‘ìš”ë„ì— ë”°ë¼ +í”„ë¡œì„¸ìŠ¤ì— ê°€ìž¥ ë†’ì€ ìˆ˜ì¤€ì„ ë¶€ì—¬í•©ë‹ˆë‹¤. 예를 들어, 프로세스가 서비스와 가시ì 액티비티를 í˜¸ìŠ¤íŒ…í• ê²½ìš°, 해당 프로세스는 서비스 프로세스가 ì•„ë‹ˆë¼ ê°€ì‹œì 프로세스 ë“±ê¸‰ì´ ë¶€ì—¬ë©ë‹ˆë‹¤.</p> <p>ë˜í•œ, í”„ë¡œì„¸ìŠ¤ì˜ ë“±ê¸‰ì€ ë‹¤ë¥¸ 프로세스가 ì´ì— ì˜ì¡´í• 경우 ìƒìŠ¹í• ìˆ˜ 있습니다. -즉, 다른 í”„ë¡œì„¸ìŠ¤ì— ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” 프로세스가 서비스 ì œê³µ ëŒ€ìƒ í”„ë¡œì„¸ìŠ¤ë³´ë‹¤ -ë“±ê¸‰ì´ ë‚®ì€ ê²½ìš°ëŠ” ìžˆì„ ìˆ˜ 없습니다. 예를 들어 프로세스 Aì˜ ì½˜í…ì¸ ì œê³µìžê°€ 프로세스 Bì˜ í´ë¼ì´ì–¸íŠ¸ì— ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ê±°ë‚˜ -프로세스 Aì˜ ì„œë¹„ìŠ¤ê°€ 프로세스 Bì˜ êµ¬ì„± ìš”ì†Œì— ë°”ì¸ë”©ë˜ì–´ ìžˆì„ ê²½ìš° 프로세스 A는 í•ìƒ ì¤‘ìš”ë„ê°€ +즉, 다른 í”„ë¡œì„¸ìŠ¤ì— ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” 프로세스가 서비스 ì œê³µ ëŒ€ìƒ í”„ë¡œì„¸ìŠ¤ë³´ë‹¤ +ë“±ê¸‰ì´ ë‚®ì€ ê²½ìš°ëŠ” ìžˆì„ ìˆ˜ 없습니다. 예를 들어 프로세스 Aì˜ ì½˜í…ì¸ ì œê³µìžê°€ 프로세스 Bì˜ í´ë¼ì´ì–¸íŠ¸ì— ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•˜ê±°ë‚˜ +프로세스 Aì˜ ì„œë¹„ìŠ¤ê°€ 프로세스 Bì˜ êµ¬ì„± ìš”ì†Œì— ë°”ì¸ë”©ë˜ì–´ ìžˆì„ ê²½ìš° 프로세스 A는 í•ìƒ ì¤‘ìš”ë„ê°€ 프로세스 B와 같거나 그보다 높습니다.</p> - <p>서비스를 실행하는 프로세스가 ë°°ê²½ 액티비티가 í¬í•¨ëœ 프로세스보다 높으므로, + <p>서비스를 실행하는 프로세스가 ë°°ê²½ 액티비티가 í¬í•¨ëœ 프로세스보다 높으므로, 장기 ìž‘ì—…ì„ ì‹œìž‘í•˜ëŠ” 액티비티는 ìž‘ì—…ìž ìŠ¤ë ˆë“œë§Œ ìƒì„±í•˜ê¸°ë³´ë‹¤ëŠ” 해당 ìž‘ì—…ì— ëŒ€í•œ <a href="{@docRoot}guide/components/services.html">서비스</a>를 시작하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. -ì´ëŠ” 특히 ìž‘ì—…ì´ í•´ë‹¹ 액티비티보다 오래 ì§€ì†ë 경우 ë”ìš± 중요합니다. -예를 들어, 웹사ì´íŠ¸ì— ì‚¬ì§„ì„ ì—…ë¡œë“œí•˜ëŠ” 액티비티가 업로드를 수행하는 서비스를 시작해야 -사용ìžê°€ 액티비티를 ë– ë‚˜ë”ë¼ë„ ë°°ê²½ì—서 업로드를 ì§€ì†í• 수 있습니다. -서비스를 사용하면 ì•¡í‹°ë¹„í‹°ì— ì–´ë–¤ ì¼ì´ ë°œìƒí•˜ë“ 해당 ìž‘ì—…ì— ë°˜ë“œì‹œ -"서비스 프로세스" ìš°ì„ ìˆœìœ„ ì´ìƒì´ 부여ë©ë‹ˆë‹¤. ì´ê²ƒì´ 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ê°€ ì‹œê°„ì´ ì˜¤ëž˜ 걸리는 ìž‘ì—…ì„ +ì´ëŠ” 특히 ìž‘ì—…ì´ í•´ë‹¹ 액티비티보다 오래 ì§€ì†ë 경우 ë”ìš± 중요합니다. +예를 들어, 웹사ì´íŠ¸ì— ì‚¬ì§„ì„ ì—…ë¡œë“œí•˜ëŠ” 액티비티가 업로드를 수행하는 서비스를 시작해야 +사용ìžê°€ 액티비티를 ë– ë‚˜ë”ë¼ë„ ë°°ê²½ì—서 업로드를 ì§€ì†í• 수 있습니다. +서비스를 사용하면 ì•¡í‹°ë¹„í‹°ì— ì–´ë–¤ ì¼ì´ ë°œìƒí•˜ë“ 해당 ìž‘ì—…ì— ë°˜ë“œì‹œ +"서비스 프로세스" ìš°ì„ ìˆœìœ„ ì´ìƒì´ 부여ë©ë‹ˆë‹¤. ì´ê²ƒì´ 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ê°€ ì‹œê°„ì´ ì˜¤ëž˜ 걸리는 ìž‘ì—…ì„ ìŠ¤ë ˆë“œì— ë„£ê¸°ë³´ë‹¤ëŠ” 서비스를 사용해야 하는 것과 ê°™ì€ ì´ìœ 입니다.</p> @@ -188,36 +188,36 @@ LRU(ìµœì € 사용 빈ë„) 목ë¡ì— 보관하여 사용ìžê°€ 가장 ìµœê·¼ì— ë <h2 id="Threads">ìŠ¤ë ˆë“œ</h2> -<p> ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작ë˜ë©´ ì‹œìŠ¤í…œì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 ì‹¤í–‰ì˜ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ë©°, ì´ë¥¼ -"기본"ì´ë¼ê³ 합니다. ì´ ìŠ¤ë ˆë“œëŠ” 드로어블 ì´ë²¤íŠ¸ë¥¼ í¬í•¨í•˜ì—¬ ì ì ˆí•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ìœ„ì ¯ì— +<p> ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작ë˜ë©´ ì‹œìŠ¤í…œì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 ì‹¤í–‰ì˜ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ë©°, ì´ë¥¼ +"기본"ì´ë¼ê³ 합니다. ì´ ìŠ¤ë ˆë“œëŠ” 드로어블 ì´ë²¤íŠ¸ë¥¼ í¬í•¨í•˜ì—¬ ì ì ˆí•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ìœ„ì ¯ì— ì´ë²¤íŠ¸ë¥¼ 발송하는 ì—í• ì„ ë§¡ê¸° ë•Œë¬¸ì— ì¤‘ìš”í•©ë‹ˆë‹¤. ì´ê²ƒì€ Android UI ë„구 í‚¤íŠ¸ì˜ êµ¬ì„± 요소({@link android.widget}ê³¼ {@link android.view} íŒ¨í‚¤ì§€ì˜ êµ¬ì„± 요소)와 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -ìƒí˜¸ 작용하는 ìŠ¤ë ˆë“œì´ê¸°ë„ 합니다. ë”°ë¼ì„œ 기본 ìŠ¤ë ˆë“œëŠ” +ìƒí˜¸ 작용하는 ìŠ¤ë ˆë“œì´ê¸°ë„ 합니다. ë”°ë¼ì„œ 기본 ìŠ¤ë ˆë“œëŠ” UI ìŠ¤ë ˆë“œë¼ê³ 불릴 ë•Œë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p>ì‹œìŠ¤í…œì€ êµ¬ì„± ìš”ì†Œì˜ ê° ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•´ 별ë„ì˜ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ì§€ <em>않습니다</em>. ê°™ì€ +<p>ì‹œìŠ¤í…œì€ êµ¬ì„± ìš”ì†Œì˜ ê° ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•´ 별ë„ì˜ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ì§€ <em>않습니다</em>. ê°™ì€ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ëŠ” ëª¨ë“ êµ¬ì„± 요소는 UI ìŠ¤ë ˆë“œì—서 시작ë˜ê³ , ê° êµ¬ì„± 요소를 호출하는 ì‹œìŠ¤í…œì´ -해당 ìŠ¤ë ˆë“œì—서 발송ë©ë‹ˆë‹¤. ë”°ë¼ì„œ -시스템 ì½œë°±ì— ì‘답하는 메서드(ì‚¬ìš©ìž ìž‘ì—…ì„ ë³´ê³ í•˜ëŠ” {@link android.view.View#onKeyDown onKeyDown()} ë˜ëŠ” +해당 ìŠ¤ë ˆë“œì—서 발송ë©ë‹ˆë‹¤. ë”°ë¼ì„œ +시스템 ì½œë°±ì— ì‘답하는 메서드(ì‚¬ìš©ìž ìž‘ì—…ì„ ë³´ê³ í•˜ëŠ” {@link android.view.View#onKeyDown onKeyDown()} ë˜ëŠ” 수명 주기 콜백 메서드)는 í•ìƒ í”„ë¡œì„¸ìŠ¤ì˜ UI ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤.</p> <p>예를 들어, 사용ìžê°€ í™”ë©´ì˜ ë²„íŠ¼ì„ í„°ì¹˜í•˜ë©´, 앱 UI ìŠ¤ë ˆë“œê°€ ìœ„ì ¯ì— í„°ì¹˜ ì´ë²¤íŠ¸ë¥¼ ë°œì†¡í•˜ê³ , -ìœ„ì ¯ì€ ëˆŒë¦° ìƒíƒœë¥¼ ì„¤ì •í•˜ê³ ì´ë²¤íЏ ëŒ€ê¸°ì—´ì— -무효화 ìš”ì²ì„ 게시합니다. UI ìŠ¤ë ˆë“œê°€ ì´ ìš”ì²ì„ 대기열ì—서 í•´ì œí•˜ê³ ìœ„ì ¯ì— ìŠ¤ìŠ¤ë¡œë¥¼ 다시 +ìœ„ì ¯ì€ ëˆŒë¦° ìƒíƒœë¥¼ ì„¤ì •í•˜ê³ ì´ë²¤íЏ ëŒ€ê¸°ì—´ì— +무효화 ìš”ì²ì„ 게시합니다. UI ìŠ¤ë ˆë“œê°€ ì´ ìš”ì²ì„ 대기열ì—서 í•´ì œí•˜ê³ ìœ„ì ¯ì— ìŠ¤ìŠ¤ë¡œë¥¼ 다시 ê·¸ë ¤ì•¼ í•œë‹¤ê³ ì•Œë¦½ë‹ˆë‹¤.</p> <p>ì•±ì´ ì‚¬ìš©ìž ìƒí˜¸ìž‘ìš©ì— ì‘답하여 집약ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ë•ŒëŠ” ì´ ë‹¨ì¼ ìŠ¤ë ˆë“œ 모ë¸ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì œëŒ€ë¡œ 구현하지 않으면 ë‚®ì€ ì„±ëŠ¥ì„ ë³´ì¼ ìˆ˜ 있습니다. 특히, -ëª¨ë“ ê²ƒì´ UI ìŠ¤ë ˆë“œì—서 ë°œìƒí•˜ê³ ë„¤íŠ¸ì›Œí¬ ì•¡ì„¸ìŠ¤ë‚˜ ë°ì´í„° ë² ì´ìФ 쿼리 ë“±ì˜ ê¸´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë©´ -UIê°€ 통째로 차단ë©ë‹ˆë‹¤. ìŠ¤ë ˆë“œê°€ 차단ë˜ë©´ 드로잉 ì´ë²¤íŠ¸ë¥¼ í¬í•¨í•˜ì—¬ -ëª¨ë“ ì´ë²¤íŠ¸ê°€ 발송ë˜ì§€ 않습니다. 사용ìžê°€ 보기ì—는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +ëª¨ë“ ê²ƒì´ UI ìŠ¤ë ˆë“œì—서 ë°œìƒí•˜ê³ ë„¤íŠ¸ì›Œí¬ ì•¡ì„¸ìŠ¤ë‚˜ ë°ì´í„° ë² ì´ìФ 쿼리 ë“±ì˜ ê¸´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë©´ +UIê°€ 통째로 차단ë©ë‹ˆë‹¤. ìŠ¤ë ˆë“œê°€ 차단ë˜ë©´ 드로잉 ì´ë²¤íŠ¸ë¥¼ í¬í•¨í•˜ì—¬ +ëª¨ë“ ì´ë²¤íŠ¸ê°€ 발송ë˜ì§€ 않습니다. 사용ìžê°€ 보기ì—는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì¤‘ë‹¨ëœ ê²ƒì²˜ëŸ¼ 보입니다. ë” ë‚˜ìœ ê²½ìš°, UI ìŠ¤ë ˆë“œê°€ 몇 ì´ˆ ì´ìƒ 차단ë˜ì–´ 있으면 -(현재 약 5ì´ˆ) 사용ìžì—게 악명 ë†’ì€ "<a href="http://developer.android.com/guide/practices/responsiveness.html">ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‘답하지 -않습니다</a>"(ANR) 대화가 표시ë©ë‹ˆë‹¤. 그러면 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 종료 í• ìˆ˜ë„ ìžˆê³ , 불만족한 경우 ì•±ì„ +(현재 약 5ì´ˆ) 사용ìžì—게 악명 ë†’ì€ "<a href="http://developer.android.com/guide/practices/responsiveness.html">ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‘답하지 +않습니다</a>"(ANR) 대화가 표시ë©ë‹ˆë‹¤. 그러면 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 종료 í• ìˆ˜ë„ ìžˆê³ , 불만족한 경우 ì•±ì„ ì œê±°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p>ë˜í•œ, Andoid UI ë„구 키트는 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ì§€ <em>않습니다</em>. ë”°ë¼ì„œ UI를 -ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 조작해서는 안 ë©ë‹ˆë‹¤. ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ì¡°ìž‘ ìž‘ì—…ì€ ëª¨ë‘ UI +<p>ë˜í•œ, Andoid UI ë„구 키트는 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ì§€ <em>않습니다</em>. ë”°ë¼ì„œ UI를 +ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 조작해서는 안 ë©ë‹ˆë‹¤. ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ì¡°ìž‘ ìž‘ì—…ì€ ëª¨ë‘ UI ìŠ¤ë ˆë“œì—서 해야만 합니다. ê²°ë¡ ì 으로, Androidì˜ ë‹¨ì¼ ìŠ¤ë ˆë“œ 모ë¸ì—는 ë‘ ê°€ì§€ 단순한 ê·œì¹™ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ol> @@ -227,12 +227,12 @@ UIê°€ 통째로 차단ë©ë‹ˆë‹¤. ìŠ¤ë ˆë“œê°€ 차단ë˜ë©´ 드로잉 ì´ë²¤íŠ¸ë¥ <h3 id="WorkerThreads">ìž‘ì—…ìž ìŠ¤ë ˆë“œ</h3> -<p>ìœ„ì— ì„¤ëª…í•œ ë‹¨ì¼ ìŠ¤ë ˆë“œ 모ë¸ë¡œ ì¸í•´, ì• í”Œë¦¬ì¼€ì´ì…˜ UIì˜ ë°˜ì‘ì„±ì„ ìœ„í•´ì„œëŠ” -UI ìŠ¤ë ˆë“œë¥¼ 차단하지 않는 ê²ƒì´ ë§¤ìš° 중요합니다. 수행해야 í• ìž‘ì—…ì´ ìžˆëŠ”ë° -ì´ë“¤ì´ 즉ê°ì ì¸ ì¡°ì¹˜ë¥¼ 요하지 않는 경우, ì´ëŸ° ìž‘ì—…ì€ ë°˜ë“œì‹œ 별ë„ì˜ ìŠ¤ë ˆë“œì—서 수행해야 합니다("ë°°ê²½" ë˜ëŠ” +<p>ìœ„ì— ì„¤ëª…í•œ ë‹¨ì¼ ìŠ¤ë ˆë“œ 모ë¸ë¡œ ì¸í•´, ì• í”Œë¦¬ì¼€ì´ì…˜ UIì˜ ë°˜ì‘ì„±ì„ ìœ„í•´ì„œëŠ” +UI ìŠ¤ë ˆë“œë¥¼ 차단하지 않는 ê²ƒì´ ë§¤ìš° 중요합니다. 수행해야 í• ìž‘ì—…ì´ ìžˆëŠ”ë° +ì´ë“¤ì´ 즉ê°ì ì¸ ì¡°ì¹˜ë¥¼ 요하지 않는 경우, ì´ëŸ° ìž‘ì—…ì€ ë°˜ë“œì‹œ 별ë„ì˜ ìŠ¤ë ˆë“œì—서 수행해야 합니다("ë°°ê²½" ë˜ëŠ” "작업ìž" ìŠ¤ë ˆë“œ).</p> -<p>예를 들어, 아래는 별ë„ì˜ ìŠ¤ë ˆë“œì—서 ì´ë¯¸ì§€ë¥¼ ë‹¤ìš´ë¡œë“œí•˜ê³ ì´ë¥¼ +<p>예를 들어, 아래는 별ë„ì˜ ìŠ¤ë ˆë“œì—서 ì´ë¯¸ì§€ë¥¼ ë‹¤ìš´ë¡œë“œí•˜ê³ ì´ë¥¼ {@link android.widget.ImageView}ì— í‘œì‹œí•˜ëŠ” í´ë¦ ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ 몇 가지 코드입니다.</p> <pre> @@ -246,10 +246,10 @@ public void onClick(View v) { } </pre> -<p>처ìŒì—는 ë„¤íŠ¸ì›Œí¬ ìž‘ì—…ì„ ì²˜ë¦¬í•˜ê¸° 위한 새 ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ë¯€ë¡œ -아무 ë¬¸ì œ ì—†ì´ ìž‘ë™í•˜ëŠ” 것처럼 보입니다. 하지만, ì´ê²ƒì€ ë‹¨ì¼ ìŠ¤ë ˆë“œëœ ëª¨ë¸ì˜ ë‘ ë²ˆì§¸ 규칙 즉, '<em>UI ìŠ¤ë ˆë“œ 외부ì—서 +<p>처ìŒì—는 ë„¤íŠ¸ì›Œí¬ ìž‘ì—…ì„ ì²˜ë¦¬í•˜ê¸° 위한 새 ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ë¯€ë¡œ +아무 ë¬¸ì œ ì—†ì´ ìž‘ë™í•˜ëŠ” 것처럼 보입니다. 하지만, ì´ê²ƒì€ ë‹¨ì¼ ìŠ¤ë ˆë“œëœ ëª¨ë¸ì˜ ë‘ ë²ˆì§¸ 규칙 즉, '<em>UI ìŠ¤ë ˆë“œ 외부ì—서 Android UI ë„구 í‚¤íŠ¸ì— ì•¡ì„¸ìŠ¤í•˜ì§€ 마세요.</em>'를 위반합니다. ì´ ìƒ˜í”Œì€ UI ìŠ¤ë ˆë“œ ëŒ€ì‹ ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 {@link -android.widget.ImageView}를 ìˆ˜ì •í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ ë˜ë©´ +android.widget.ImageView}를 ìˆ˜ì •í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ ë˜ë©´ ì •ì˜ë˜ì§€ ì•Šê³ ì˜ˆê¸°ì¹˜ 못한 ë™ìž‘ì´ ë°œìƒí•˜ëŠ” 결과를 ì´ˆëž˜í• ìˆ˜ ìžˆê³ , ì´ëŠ” ì¶”ì 하기 ì–´ë ¤ì›Œ ì‹œê°„ë„ ì˜¤ëž˜ 걸립니다.</p> <p>ì´ ë¬¸ì œë¥¼ 해결하기 위해 Android는 다른 ìŠ¤ë ˆë“œì—서 UI ìŠ¤ë ˆë“œì— ì•¡ì„¸ìŠ¤í•˜ëŠ” 여러 가지 ë°©ì‹ì„ @@ -281,28 +281,28 @@ public void onClick(View v) { } </pre> -<p>ì´ êµ¬í˜„ì€ ì´ì œ ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•©ë‹ˆë‹¤. ë„¤íŠ¸ì›Œí¬ ìž‘ì—…ì€ ë³„ë„ì˜ ìŠ¤ë ˆë“œì—서 ìˆ˜í–‰ëœ ë°˜ë©´ +<p>ì´ êµ¬í˜„ì€ ì´ì œ ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•©ë‹ˆë‹¤. ë„¤íŠ¸ì›Œí¬ ìž‘ì—…ì€ ë³„ë„ì˜ ìŠ¤ë ˆë“œì—서 ìˆ˜í–‰ëœ ë°˜ë©´ {@link android.widget.ImageView}는 UI ìŠ¤ë ˆë“œì—서 ì¡°ìž‘ë˜ì—ˆê¸° 때문입니다.</p> -<p>그러나, ìž‘ì—…ì´ ë³µìž¡í•´ì§ˆìˆ˜ë¡ ì´ëŸ° ì¢…ë¥˜ì˜ ì½”ë“œê°€ ë” ë³µìž¡í•´ì§ˆ 수 ìžˆê³ ìœ ì§€ 관리하기 -까다로워질 수 있습니다. ë” ë³µìž¡í•œ ìƒí˜¸ ìž‘ìš©ì„ ìž‘ì—…ìž ìŠ¤ë ˆë“œë¡œ ì²˜ë¦¬í•˜ë ¤ë©´, ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 -{@link android.os.Handler}를 사용하여 UI ìŠ¤ë ˆë“œì—서 ì „ë‹¬ ë°›ì€ ë©”ì‹œì§€ë¥¼ 처리하는 ë°©ì•ˆì„ -ê³ ë ¤í•´ë³´ì‹ì‹œì˜¤. 하지만 ìµœì„ ì˜ í•´ê²°ì±…ì€ {@link android.os.AsyncTask} í´ëž˜ìŠ¤ë¥¼ 확장하는 ë°©ë²•ì¼ ê²ƒìž…ë‹ˆë‹¤. +<p>그러나, ìž‘ì—…ì´ ë³µìž¡í•´ì§ˆìˆ˜ë¡ ì´ëŸ° ì¢…ë¥˜ì˜ ì½”ë“œê°€ ë” ë³µìž¡í•´ì§ˆ 수 ìžˆê³ ìœ ì§€ 관리하기 +까다로워질 수 있습니다. ë” ë³µìž¡í•œ ìƒí˜¸ ìž‘ìš©ì„ ìž‘ì—…ìž ìŠ¤ë ˆë“œë¡œ ì²˜ë¦¬í•˜ë ¤ë©´, ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 +{@link android.os.Handler}를 사용하여 UI ìŠ¤ë ˆë“œì—서 ì „ë‹¬ ë°›ì€ ë©”ì‹œì§€ë¥¼ 처리하는 ë°©ì•ˆì„ +ê³ ë ¤í•´ë³´ì‹ì‹œì˜¤. 하지만 ìµœì„ ì˜ í•´ê²°ì±…ì€ {@link android.os.AsyncTask} í´ëž˜ìŠ¤ë¥¼ 확장하는 ë°©ë²•ì¼ ê²ƒìž…ë‹ˆë‹¤. ì´ê²ƒì€ UI와 ìƒí˜¸ 작용해야 하는 ìž‘ì—…ìž ìŠ¤ë ˆë“œ ìž‘ì—…ì˜ ì‹¤í–‰ì„ ë‹¨ìˆœí™”í•©ë‹ˆë‹¤.</p> <h4 id="AsyncTask">AsyncTask 사용</h4> -<p>{@link android.os.AsyncTask}를 사용하면 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФì—서 비ë™ê¸°ì‹ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ -있게 í•´ì¤ë‹ˆë‹¤. ì´ê²ƒì€ ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 차단 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ ê·¸ëŸ° ë‹¤ìŒ ê·¸ 결과를 UI ìŠ¤ë ˆë“œì— +<p>{@link android.os.AsyncTask}를 사용하면 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФì—서 비ë™ê¸°ì‹ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ +있게 í•´ì¤ë‹ˆë‹¤. ì´ê²ƒì€ ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 차단 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ ê·¸ëŸ° ë‹¤ìŒ ê·¸ 결과를 UI ìŠ¤ë ˆë“œì— ê²Œì‹œí•˜ë©°, 개발ìžê°€ ì§ì ‘ ìŠ¤ë ˆë“œ ë°/ë˜ëŠ” 처리기를 ì²˜ë¦¬í• í•„ìš”ê°€ 없습니다.</p> <p>ì´ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ ìš°ì„ {@link android.os.AsyncTask}를 하위 í´ëž˜ìŠ¤ë¡œ 한 ë‹¤ìŒ {@link -android.os.AsyncTask#doInBackground doInBackground()} 콜백 메서드를 구현해야 합니다. ì´ê²ƒì€ 여러 가지 +android.os.AsyncTask#doInBackground doInBackground()} 콜백 메서드를 구현해야 합니다. ì´ê²ƒì€ 여러 가지 ë°°ê²½ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤. UI를 ì—…ë°ì´íŠ¸í•˜ë ¤ë©´ {@link android.os.AsyncTask#onPostExecute onPostExecute()}를 구현해야 합니다. ì´ëŠ” {@link -android.os.AsyncTask#doInBackground doInBackground()}ë¡œë¶€í„°ì˜ ê²°ê³¼ë¥¼ ì „ë‹¬í•˜ë©° UI ìŠ¤ë ˆë“œì—서 실행ë˜ë¯€ë¡œ, -ì•ˆì „í•˜ê²Œ UI를 ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. 그런 ë‹¤ìŒ UI ìŠ¤ë ˆë“œì—서 {@link android.os.AsyncTask#execute execute()}를 +android.os.AsyncTask#doInBackground doInBackground()}ë¡œë¶€í„°ì˜ ê²°ê³¼ë¥¼ ì „ë‹¬í•˜ë©° UI ìŠ¤ë ˆë“œì—서 실행ë˜ë¯€ë¡œ, +ì•ˆì „í•˜ê²Œ UI를 ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. 그런 ë‹¤ìŒ UI ìŠ¤ë ˆë“œì—서 {@link android.os.AsyncTask#execute execute()}를 호출하여 해당 ìž‘ì—…ì„ ì‹¤í–‰í•˜ë©´ ë©ë‹ˆë‹¤.</p> <p>예를 들어, ì´ëŸ° ë°©ì‹ìœ¼ë¡œ {@link android.os.AsyncTask}를 사용하여 @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { @@ -328,21 +328,21 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { } </pre> -<p>ì´ì œ UI는 ì•ˆì „í•˜ê³ ì½”ë“œëŠ” ë”ìš± 단순해졌습니다. ìž‘ì—…ì„ ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 수행ë˜ì–´ì•¼ 하는 +<p>ì´ì œ UI는 ì•ˆì „í•˜ê³ ì½”ë“œëŠ” ë”ìš± 단순해졌습니다. ìž‘ì—…ì„ ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 수행ë˜ì–´ì•¼ 하는 부분과 UI ìŠ¤ë ˆë“œì—서 수행ë˜ì–´ì•¼ 하는 부분으로 구분하기 때문입니다.</p> -<p>ì´ í´ëž˜ìŠ¤ë¥¼ 사용하는 ë²•ì„ ì™„ì „ížˆ ìˆ™ì§€í•˜ë ¤ë©´ {@link android.os.AsyncTask} 참조를 +<p>ì´ í´ëž˜ìŠ¤ë¥¼ 사용하는 ë²•ì„ ì™„ì „ížˆ ìˆ™ì§€í•˜ë ¤ë©´ {@link android.os.AsyncTask} 참조를 ì½ì–´ë³´ì‹œëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 개괄ì ì¸ ìž‘ë™ ë°©ì‹ì€ ì•„ëž˜ì— ê°„ëžµížˆ 소개해 놓았습니다.</p> <ul> -<li>매개 ë³€ìˆ˜ì˜ ìœ í˜•, ì§„í–‰ë¥ ê°’ê³¼ ìž‘ì—…ì˜ ìµœì¢… ê°’ì„ ì œë„¤ë¦ì„ 사용하여 +<li>매개 ë³€ìˆ˜ì˜ ìœ í˜•, ì§„í–‰ë¥ ê°’ê³¼ ìž‘ì—…ì˜ ìµœì¢… ê°’ì„ ì œë„¤ë¦ì„ 사용하여 ì§€ì •í• ìˆ˜ 있습니다.</li> <li>메서드 {@link android.os.AsyncTask#doInBackground doInBackground()}는 ìž‘ì—…ìž ìŠ¤ë ˆë“œì—서 ìžë™ìœ¼ë¡œ 실행ë©ë‹ˆë‹¤.</li> <li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link android.os.AsyncTask#onPostExecute onPostExecute()} ë° {@link android.os.AsyncTask#onProgressUpdate onProgressUpdate()}는 ëª¨ë‘ UI ìŠ¤ë ˆë“œì—서 호출ë©ë‹ˆë‹¤.</li> -<li>{@link android.os.AsyncTask#doInBackground doInBackground()}ê°€ 반환한 ê°’ì´ +<li>{@link android.os.AsyncTask#doInBackground doInBackground()}ê°€ 반환한 ê°’ì´ {@link android.os.AsyncTask#onPostExecute onPostExecute()}로 ì „ì†¡ë©ë‹ˆë‹¤.</li> <li>ì–¸ì œë“ {@link android.os.AsyncTask#publishProgress publishProgress()}를 {@link android.os.AsyncTask#doInBackground doInBackground()}ì—서 호출하여 UI ìŠ¤ë ˆë“œì—서 {@link @@ -350,27 +350,27 @@ android.os.AsyncTask#onProgressUpdate onProgressUpdate()}를 실행하ë„ë¡ í• <li>ëª¨ë“ ìŠ¤ë ˆë“œì—서 ì–¸ì œë“ ìž‘ì—…ì„ ì·¨ì†Œí• ìˆ˜ 있습니다.</li> </ul> -<p class="caution"><strong>주ì˜:</strong> ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ ì‚¬ìš©í• ë•Œ ë§ˆì£¼ì¹ ìˆ˜ 있는 ë˜ í•œ 가지 ë¬¸ì œëŠ” +<p class="caution"><strong>주ì˜:</strong> ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ ì‚¬ìš©í• ë•Œ ë§ˆì£¼ì¹ ìˆ˜ 있는 ë˜ í•œ 가지 ë¬¸ì œëŠ” <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 구성 변경</a>으로 ì¸í•´ 액티비티가 예기치 못하게 다시 시작ë˜ëŠ” 것입니다 -(예를 들어 사용ìžê°€ 화면 ë°©í–¥ì„ ë°”ê¾¸ëŠ” 경우). ì´ ê²½ìš° ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ 소멸시킬 수 있습니다. +(예를 들어 사용ìžê°€ 화면 ë°©í–¥ì„ ë°”ê¾¸ëŠ” 경우). ì´ ê²½ìš° ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ 소멸시킬 수 있습니다. ìŠ¤ë ˆë“œê°€ 재시작ë 때 ìž‘ì—…ì„ ì§€ì†í•˜ëŠ” 방법과 액티비티가 ì œê±°ë˜ì—ˆì„ 때 ìž‘ì—…ì„ ì ì ˆížˆ 취소하는 ë°©ë²•ì€ <a href="http://code.google.com/p/shelves/">Shelves</a> 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 소스 코드를 참조하ì‹ì‹œì˜¤.</p> <h3 id="ThreadSafe">ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•œ 메서드</h3> -<p> ì–´ë–¤ 경우ì—는 구현하는 메서드가 하나 ì´ìƒì˜ ìŠ¤ë ˆë“œì—서 호출ë˜ëŠ” ì¼ë„ 있습니다. ë”°ë¼ì„œ +<p> ì–´ë–¤ 경우ì—는 구현하는 메서드가 하나 ì´ìƒì˜ ìŠ¤ë ˆë“œì—서 호출ë˜ëŠ” ì¼ë„ 있습니다. ë”°ë¼ì„œ ì´ë¥¼ ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ê²Œ 작성해야만 합니다. </p> -<p>ì´ê²ƒì€ 주로 ì›ê²©ìœ¼ë¡œ í˜¸ì¶œí• ìˆ˜ 있는 ë©”ì„œë“œì— ëŒ€í•´ 참입니다. 예를 들어 <a href="{@docRoot}guide/components/bound-services.html">ë°”ì¸ë”©ëœ 서비스</a> ë‚´ì˜ ë©”ì„œë“œ ë“±ì´ í•´ë‹¹ë©ë‹ˆë‹¤. -{@link android.os.IBinder}ì—서 êµ¬í˜„ëœ ë©”ì„œë“œê°€ -{@link android.os.IBinder IBinder}ê°€ 실행ë˜ëŠ” 프로세스ì—서 호출ë 경우, 해당 메서드는 ë°œì‹ ìžì˜ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤. -그러나 í˜¸ì¶œì´ ë‹¤ë¥¸ 프로세스ì—서 ë°œìƒí•˜ë©´, 해당 메서드는 ì‹œìŠ¤í…œì´ +<p>ì´ê²ƒì€ 주로 ì›ê²©ìœ¼ë¡œ í˜¸ì¶œí• ìˆ˜ 있는 ë©”ì„œë“œì— ëŒ€í•´ 참입니다. 예를 들어 <a href="{@docRoot}guide/components/bound-services.html">ë°”ì¸ë”©ëœ 서비스</a> ë‚´ì˜ ë©”ì„œë“œ ë“±ì´ í•´ë‹¹ë©ë‹ˆë‹¤. +{@link android.os.IBinder}ì—서 êµ¬í˜„ëœ ë©”ì„œë“œê°€ +{@link android.os.IBinder IBinder}ê°€ 실행ë˜ëŠ” 프로세스ì—서 호출ë 경우, 해당 메서드는 ë°œì‹ ìžì˜ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤. +그러나 í˜¸ì¶œì´ ë‹¤ë¥¸ 프로세스ì—서 ë°œìƒí•˜ë©´, 해당 메서드는 ì‹œìŠ¤í…œì´ {@link android.os.IBinder -IBinder}와 ê°™ì€ í”„ë¡œì„¸ìŠ¤ì— ìœ ì§€í•˜ëŠ” ìŠ¤ë ˆë“œ í’€ì—서 ì„ íƒëœ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤(í”„ë¡œì„¸ìŠ¤ì˜ UI ìŠ¤ë ˆë“œì—서 실행ë˜ì§€ 않습니다). 예를 들어, ì–´ëŠ ì„œë¹„ìŠ¤ì˜ -{@link android.app.Service#onBind onBind()} 메서드는 해당 서비스 +IBinder}와 ê°™ì€ í”„ë¡œì„¸ìŠ¤ì— ìœ ì§€í•˜ëŠ” ìŠ¤ë ˆë“œ í’€ì—서 ì„ íƒëœ ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤(í”„ë¡œì„¸ìŠ¤ì˜ UI ìŠ¤ë ˆë“œì—서 실행ë˜ì§€ 않습니다). 예를 들어, ì–´ëŠ ì„œë¹„ìŠ¤ì˜ +{@link android.app.Service#onBind onBind()} 메서드는 해당 서비스 í”„ë¡œì„¸ìŠ¤ì˜ UI ìŠ¤ë ˆë“œì—서 호출ë˜ê³ , {@link android.app.Service#onBind -onBind()}ê°€ 반환하는 ê°ì²´ì—서 êµ¬í˜„ëœ ë©”ì„œë“œëŠ”(예: RPC 메서드를 구현하는 하위 í´ëž˜ìФ) 해당 í’€ ì•ˆì˜ ì—¬ëŸ¬ ìŠ¤ë ˆë“œì—서 +onBind()}ê°€ 반환하는 ê°ì²´ì—서 êµ¬í˜„ëœ ë©”ì„œë“œëŠ”(예: RPC 메서드를 구현하는 하위 í´ëž˜ìФ) 해당 í’€ ì•ˆì˜ ì—¬ëŸ¬ ìŠ¤ë ˆë“œì—서 호출ë˜ê²Œ ë©ë‹ˆë‹¤. ì„œë¹„ìŠ¤ì— í´ë¼ì´ì–¸íŠ¸ê°€ 하나 ì´ìƒ ìžˆì„ ìˆ˜ 있으므로, 하나 ì´ìƒì˜ í’€ì´ ë™ì‹œì— ê°™ì€ {@link android.os.IBinder IBinder} ë©”ì„œë“œì— ì°¸ì—¬í• ìˆ˜ 있습니다. 그러므로 {@link android.os.IBinder IBinder} 메서드는 ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•˜ê²Œ 구현ë˜ì–´ì•¼ 합니다.</p> @@ -389,13 +389,13 @@ getType()} 메서드—)ê°€ í”„ë¡œì„¸ìŠ¤ì˜ UI ìŠ¤ë ˆë“œê°€ ì•„ë‹ˆë¼ <h2 id="IPC">프로세스 ê°„ í†µì‹ </h2> -<p>Android는 ì›ê²© í”„ë¡œì‹œì € 호출(RPC)ì„ ì‚¬ìš©í•œ 프로세스 ê°„ í†µì‹ (IPC) ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•©ë‹ˆë‹¤. -여기서 메서드는 액티비티나 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 ìš”ì†Œì— í˜¸ì¶œë˜ì§€ë§Œ -ì›ê²©ìœ¼ë¡œ (ë˜ ë‹¤ë¥¸ 프로세스ì—서) 실행ë˜ê³ , 결과는 ëª¨ë‘ ë°œì‹ ìžì—게 ë˜ëŒë ¤ -보냅니다. 메서드 호출과 ë©”ì„œë“œì˜ ë°ì´í„°ëŠ” ìš´ì˜ ì²´ì œê°€ ì´í•´í• 수 있는 수준으로 ë¶„í•´ë˜ê³ , -로컬 프로세스와 주소 공간ì—서 ì›ê²© 프로세스와 주소 공간으로 ì „ì†¡ëœ ë‹¤ìŒ -다시 ê²°í•©ë˜ì–´ 여기서 í˜¸ì¶œì— ë‹¤ì‹œ ì‘답합니다. 그런 ë‹¤ìŒ ë°˜í™˜ ê°’ì´ -반대 방향으로 ì „ì†¡ë©ë‹ˆë‹¤. Androidê°€ ì´ì™€ ê°™ì€ IPC 트랜ìžì…˜ì„ 수행하는 ë° í•„ìš”í•œ +<p>Android는 ì›ê²© í”„ë¡œì‹œì € 호출(RPC)ì„ ì‚¬ìš©í•œ 프로세스 ê°„ í†µì‹ (IPC) ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•©ë‹ˆë‹¤. +여기서 메서드는 액티비티나 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 ìš”ì†Œì— í˜¸ì¶œë˜ì§€ë§Œ +ì›ê²©ìœ¼ë¡œ (ë˜ ë‹¤ë¥¸ 프로세스ì—서) 실행ë˜ê³ , 결과는 ëª¨ë‘ ë°œì‹ ìžì—게 ë˜ëŒë ¤ +보냅니다. 메서드 호출과 ë©”ì„œë“œì˜ ë°ì´í„°ëŠ” ìš´ì˜ ì²´ì œê°€ ì´í•´í• 수 있는 수준으로 ë¶„í•´ë˜ê³ , +로컬 프로세스와 주소 공간ì—서 ì›ê²© 프로세스와 주소 공간으로 ì „ì†¡ëœ ë‹¤ìŒ +다시 ê²°í•©ë˜ì–´ 여기서 í˜¸ì¶œì— ë‹¤ì‹œ ì‘답합니다. 그런 ë‹¤ìŒ ë°˜í™˜ ê°’ì´ +반대 방향으로 ì „ì†¡ë©ë‹ˆë‹¤. Androidê°€ ì´ì™€ ê°™ì€ IPC 트랜ìžì…˜ì„ 수행하는 ë° í•„ìš”í•œ ëª¨ë“ ì½”ë“œë¥¼ ì œê³µí•˜ë¯€ë¡œ, 개발ìžëŠ” ê·¸ì € RPC í”„ë¡œê·¸ëž˜ë° ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ê³ 구현하는 ë°ì—ë§Œ 집중하면 ë©ë‹ˆë‹¤. </p> <p>IPC를 ìˆ˜í–‰í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 반드시 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ì–´ì•¼ë§Œ 하며, ì´ë•Œ {@link diff --git a/docs/html-intl/intl/ko/guide/components/recents.jd b/docs/html-intl/intl/ko/guide/components/recents.jd index cba3c45da3da..28b3c681f5a2 100644 --- a/docs/html-intl/intl/ko/guide/components/recents.jd +++ b/docs/html-intl/intl/ko/guide/components/recents.jd @@ -38,50 +38,50 @@ page.tags="recents","overview" <p>개요 화면(다른 ë§ë¡œ 최근 사용 화면, 최근 작업 ëª©ë¡ ë˜ëŠ” 최근 앱ì´ë¼ê³ ë„ í•¨)ì€ ì‹œìŠ¤í…œ 수준 UI로, ìµœê·¼ì— ì•¡ì„¸ìŠ¤í•œ <a href="{@docRoot}guide/components/activities.html"> -액티비티</a> ë° <a href="{@docRoot}guide/components/tasks-and-back-stack.html">작업</a>ì„ ëª©ë¡ìœ¼ë¡œ 나열한 것입니다. 사용ìžëŠ” -목ë¡ì„ 가로질러 ì´ë™í•˜ë©° ìž‘ì—…ì„ ì„ íƒí•´ì„œ ìž¬ê°œí• ìˆ˜ë„ ìžˆê³ , 아니면 -목ë¡ì—서 한 ìž‘ì—…ì„ ìŠ¤ì™€ì´í”„하여 밀어내어 목ë¡ì—서 ì œê±°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Android 5.0 릴리스(API ë ˆë²¨ 21)ì˜ ê²½ìš°, ê°™ì€ ì•¡í‹°ë¹„í‹°ì˜ ì—¬ëŸ¬ ì¸ìŠ¤í„´ìŠ¤ì— -ê°ê¸° 다른 문서가 담겨 있는 경우 ì´ë“¤ì´ 개요 í™”ë©´ì— ìž‘ì—…ìœ¼ë¡œ ë‚˜íƒ€ë‚ ìˆ˜ 있습니다. 예를 들어 -Google Driveì— ì—¬ëŸ¬ ê°œì˜ Google 문서 ê°ê°ì— 대한 ìž‘ì—…ì´ ìžˆì„ ìˆ˜ 있습니다. ê° ë¬¸ì„œëŠ” 개요 í™”ë©´ì— í•˜ë‚˜ì˜ +액티비티</a> ë° <a href="{@docRoot}guide/components/tasks-and-back-stack.html">작업</a>ì„ ëª©ë¡ìœ¼ë¡œ 나열한 것입니다. 사용ìžëŠ” +목ë¡ì„ 가로질러 ì´ë™í•˜ë©° ìž‘ì—…ì„ ì„ íƒí•´ì„œ ìž¬ê°œí• ìˆ˜ë„ ìžˆê³ , 아니면 +목ë¡ì—서 한 ìž‘ì—…ì„ ìŠ¤ì™€ì´í”„하여 밀어내어 목ë¡ì—서 ì œê±°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Android 5.0 릴리스(API ë ˆë²¨ 21)ì˜ ê²½ìš°, ê°™ì€ ì•¡í‹°ë¹„í‹°ì˜ ì—¬ëŸ¬ ì¸ìŠ¤í„´ìŠ¤ì— +ê°ê¸° 다른 문서가 담겨 있는 경우 ì´ë“¤ì´ 개요 í™”ë©´ì— ìž‘ì—…ìœ¼ë¡œ ë‚˜íƒ€ë‚ ìˆ˜ 있습니다. 예를 들어 +Google Driveì— ì—¬ëŸ¬ ê°œì˜ Google 문서 ê°ê°ì— 대한 ìž‘ì—…ì´ ìžˆì„ ìˆ˜ 있습니다. ê° ë¬¸ì„œëŠ” 개요 í™”ë©´ì— í•˜ë‚˜ì˜ ìž‘ì—…ìœ¼ë¡œ 나타납니다.</p> <img src="{@docRoot}images/components/recents.png" alt="" width="284" /> -<p class="img-caption"><strong>그림 1.</strong> 세 ê°œì˜ Google Drive 문서가 ê°ê¸° 별ë„ì˜ +<p class="img-caption"><strong>그림 1.</strong> 세 ê°œì˜ Google Drive 문서가 ê°ê¸° 별ë„ì˜ ìž‘ì—…ì„ ë‚˜íƒ€ë‚´ëŠ” ëª¨ìŠµì„ í‘œì‹œí•œ 개요 화면입니다.</p> -<p>ë³´í†µì€ ê°œìš” í™”ë©´ì— ìž‘ì—…ê³¼ 액티비티가 어떻게 표현ë 지는 ì‹œìŠ¤í…œì´ -ì •ì˜í•˜ë„ë¡ ë‘어야 합니다. ì´ í–‰ë™ì„ 개발ìžê°€ ìˆ˜ì •í• í•„ìš”ë„ ì—†ìŠµë‹ˆë‹¤. -하지만, 개요 í™”ë©´ì— ì•¡í‹°ë¹„í‹°ê°€ ì–¸ì œ, 어떻게 ë‚˜íƒ€ë‚ ì§€ëŠ” ì•±ì´ ê²°ì •í• ìˆ˜ 있습니다. -{@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ë¥¼ 사용하면 ìž‘ì—…ì„ ê´€ë¦¬í• ìˆ˜ 있게 í•´ì£¼ê³ , -{@link android.content.Intent} í´ëž˜ìŠ¤ì˜ ì•¡í‹°ë¹„í‹° 플래그를 사용하면 개요 화면ì—서 액티비티가 추가ë˜ê±°ë‚˜ ì œê±°ë˜ëŠ” 시ì ì„ +<p>ë³´í†µì€ ê°œìš” í™”ë©´ì— ìž‘ì—…ê³¼ 액티비티가 어떻게 표현ë 지는 ì‹œìŠ¤í…œì´ +ì •ì˜í•˜ë„ë¡ ë‘어야 합니다. ì´ í–‰ë™ì„ 개발ìžê°€ ìˆ˜ì •í• í•„ìš”ë„ ì—†ìŠµë‹ˆë‹¤. +하지만, 개요 í™”ë©´ì— ì•¡í‹°ë¹„í‹°ê°€ ì–¸ì œ, 어떻게 ë‚˜íƒ€ë‚ ì§€ëŠ” ì•±ì´ ê²°ì •í• ìˆ˜ 있습니다. +{@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ë¥¼ 사용하면 ìž‘ì—…ì„ ê´€ë¦¬í• ìˆ˜ 있게 í•´ì£¼ê³ , +{@link android.content.Intent} í´ëž˜ìŠ¤ì˜ ì•¡í‹°ë¹„í‹° 플래그를 사용하면 개요 화면ì—서 액티비티가 추가ë˜ê±°ë‚˜ ì œê±°ë˜ëŠ” 시ì ì„ ì§€ì •í• ìˆ˜ 있습니다. ë˜í•œ, <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> <activity></a></code> íŠ¹ì„±ì„ ì‚¬ìš©í•˜ë©´ 매니페스트ì—ì„œì˜ ë™ìž‘ì„ ì„¤ì •í• ìˆ˜ 있습니다.</p> <h2 id="adding">개요 í™”ë©´ì— ìž‘ì—… 추가</h2> -<p>{@link android.content.Intent} í´ëž˜ìŠ¤ì˜ í”Œëž˜ê·¸ë¥¼ 사용하여 ìž‘ì—…ì„ ì¶”ê°€í•˜ë©´ -개요 화면ì—서 문서가 열리거나 다시 열리는 시ì ê³¼ ë°©ë²•ì„ ë³´ë‹¤ ì² ì €ížˆ í†µì œí• ìˆ˜ 있습니다. +<p>{@link android.content.Intent} í´ëž˜ìŠ¤ì˜ í”Œëž˜ê·¸ë¥¼ 사용하여 ìž‘ì—…ì„ ì¶”ê°€í•˜ë©´ +개요 화면ì—서 문서가 열리거나 다시 열리는 시ì ê³¼ ë°©ë²•ì„ ë³´ë‹¤ ì² ì €ížˆ í†µì œí• ìˆ˜ 있습니다. <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> - íŠ¹ì„±ì„ ì‚¬ìš©í•˜ëŠ” 경우, 문서를 í•ìƒ ìƒˆ 작업ì—서 여는 방법과 기존 ìž‘ì—…ì„ í•´ë‹¹ ë¬¸ì„œì— ë‹¤ì‹œ 사용하는 방법 중ì—서 + íŠ¹ì„±ì„ ì‚¬ìš©í•˜ëŠ” 경우, 문서를 í•ìƒ ìƒˆ 작업ì—서 여는 방법과 기존 ìž‘ì—…ì„ í•´ë‹¹ ë¬¸ì„œì— ë‹¤ì‹œ 사용하는 방법 중ì—서 ì„ íƒí• 수 있습니다.</p> <h3 id="flag-new-doc">작업 ì¶”ê°€ì— ì¸í…트 플래그 사용</h3> -<p>액티비티를 위해 새 문서를 ìƒì„±í•˜ëŠ” 경우, -{@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ì˜ +<p>액티비티를 위해 새 문서를 ìƒì„±í•˜ëŠ” 경우, +{@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ì˜ {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()} - 메서드를 í˜¸ì¶œí•˜ê³ , ì´ê²ƒì„ 액티비티를 시작하는 ì¸í…íŠ¸ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. 논리ì ì¸ ì¤‘ë‹¨ì„ ì‚½ìž…í•˜ì—¬ ì‹œìŠ¤í…œì´ ê°œìš” 화면ì—서 액티비티를 -새 작업으로 처리하ë„ë¡ í•˜ë ¤ë©´, {@link android.content.Intent}ì˜ -{@link android.content.Intent#addFlags(int) addFlags()} ë©”ì„œë“œì— ìžˆëŠ” {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} + 메서드를 í˜¸ì¶œí•˜ê³ , ì´ê²ƒì„ 액티비티를 시작하는 ì¸í…íŠ¸ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. 논리ì ì¸ ì¤‘ë‹¨ì„ ì‚½ìž…í•˜ì—¬ ì‹œìŠ¤í…œì´ ê°œìš” 화면ì—서 액티비티를 +새 작업으로 처리하ë„ë¡ í•˜ë ¤ë©´, {@link android.content.Intent}ì˜ +{@link android.content.Intent#addFlags(int) addFlags()} ë©”ì„œë“œì— ìžˆëŠ” {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 플래그를 ì „ë‹¬í•˜ì—¬ 액티비티를 시작하ë„ë¡ í•©ë‹ˆë‹¤.</p> <p class="note"><strong>ì°¸ê³ :</strong> {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} -플래그가 {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET} 플래그를 +플래그가 {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET} 플래그를 대체합니다. ì´ê²ƒì€ Android 5.0(API ë ˆë²¨ 21)부터 ì‚¬ìš©ì´ ì¤‘ë‹¨ë˜ì—ˆìŠµë‹ˆë‹¤.</p> -<p>새 문서를 ìƒì„±í•˜ë©´ì„œ {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 플래그를 ì„¤ì •í•˜ëŠ” 경우, -ì‹œìŠ¤í…œì€ í•ìƒ ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ë¥¼ 루트로 하여 새 ìž‘ì—…ì„ ë§Œë“니다. -ì´ë ‡ê²Œ ì„¤ì •í•˜ë©´ ê°™ì€ ë¬¸ì„œë¥¼ 하나 ì´ìƒì˜ 작업ì—서 ì—´ 수 있습니다. ë‹¤ìŒ ì½”ë“œëŠ” 기본 액티비티가 ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ë°©ë²•ì„ +<p>새 문서를 ìƒì„±í•˜ë©´ì„œ {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 플래그를 ì„¤ì •í•˜ëŠ” 경우, +ì‹œìŠ¤í…œì€ í•ìƒ ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ë¥¼ 루트로 하여 새 ìž‘ì—…ì„ ë§Œë“니다. +ì´ë ‡ê²Œ ì„¤ì •í•˜ë©´ ê°™ì€ ë¬¸ì„œë¥¼ 하나 ì´ìƒì˜ 작업ì—서 ì—´ 수 있습니다. ë‹¤ìŒ ì½”ë“œëŠ” 기본 액티비티가 ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> @@ -111,15 +111,15 @@ public void createNewDocument(View view) { </pre> <p class="note"><strong>ì°¸ê³ :</strong> {@code FLAG_ACTIVITY_NEW_DOCUMENT} - 플래그로 ì‹œìž‘ëœ ì•¡í‹°ë¹„í‹°ì˜ ê²½ìš°, 반드시 ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— {@code android:launchMode="standard"} 특성 ê°’(기본)ì´ ì„¤ì •ë˜ì–´ + 플래그로 ì‹œìž‘ëœ ì•¡í‹°ë¹„í‹°ì˜ ê²½ìš°, 반드시 ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— {@code android:launchMode="standard"} 특성 ê°’(기본)ì´ ì„¤ì •ë˜ì–´ 있어야 합니다.</p> -<p>기본 액티비티가 새 액티비티를 시작하면 ì‹œìŠ¤í…œì€ ê¸°ì¡´ì˜ ìž‘ì—…ì„ ê²€ìƒ‰í•˜ì—¬ ê·¸ 중 -해당 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì¸í…트 구성 요소 ì´ë¦„ê³¼ ì¸í…트 ë°ì´í„°ì™€ ì¼ì¹˜í•˜ëŠ” ì¸í…트를 가진 ìž‘ì—…ì„ ì°¾ìŠµë‹ˆë‹¤. 그러한 ìž‘ì—…ì„ +<p>기본 액티비티가 새 액티비티를 시작하면 ì‹œìŠ¤í…œì€ ê¸°ì¡´ì˜ ìž‘ì—…ì„ ê²€ìƒ‰í•˜ì—¬ ê·¸ 중 +해당 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì¸í…트 구성 요소 ì´ë¦„ê³¼ ì¸í…트 ë°ì´í„°ì™€ ì¼ì¹˜í•˜ëŠ” ì¸í…트를 가진 ìž‘ì—…ì„ ì°¾ìŠµë‹ˆë‹¤. 그러한 ìž‘ì—…ì„ ì°¾ì„ ìˆ˜ 없거나 {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} - í”Œëž˜ê·¸ì— ë“¤ì–´ 있는 ì¸í…트를 ì°¾ì„ ìˆ˜ 없는 경우, 해당 액티비티를 루트로 하여 새 ìž‘ì—…ì´ ìƒì„±ë©ë‹ˆë‹¤. ì›í•˜ëŠ” í•ëª©ì„ ì°¾ìœ¼ë©´, ì‹œìŠ¤í…œì€ í•´ë‹¹ ìž‘ì—…ì„ ì „ê²½ìœ¼ë¡œ ê°€ì§€ê³ ì™€ -새 ì¸í…트를 {@link android.app.Activity#onNewIntent onNewIntent()}ì— ì „ë‹¬í•©ë‹ˆë‹¤. -새 액티비티가 ì¸í…트를 받아 개요 화면ì—서 새 문서를 ìƒì„±í•˜ë©°, ì´ëŠ” ë‹¤ìŒ ì˜ˆì‹œì— ë‚˜íƒ€ë‚¸ + í”Œëž˜ê·¸ì— ë“¤ì–´ 있는 ì¸í…트를 ì°¾ì„ ìˆ˜ 없는 경우, 해당 액티비티를 루트로 하여 새 ìž‘ì—…ì´ ìƒì„±ë©ë‹ˆë‹¤. ì›í•˜ëŠ” í•ëª©ì„ ì°¾ìœ¼ë©´, ì‹œìŠ¤í…œì€ í•´ë‹¹ ìž‘ì—…ì„ ì „ê²½ìœ¼ë¡œ ê°€ì§€ê³ ì™€ +새 ì¸í…트를 {@link android.app.Activity#onNewIntent onNewIntent()}ì— ì „ë‹¬í•©ë‹ˆë‹¤. +새 액티비티가 ì¸í…트를 받아 개요 화면ì—서 새 문서를 ìƒì„±í•˜ë©°, ì´ëŠ” ë‹¤ìŒ ì˜ˆì‹œì— ë‚˜íƒ€ë‚¸ 것과 같습니다.</p> <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> @@ -149,64 +149,64 @@ protected void onNewIntent(Intent intent) { <h3 id="#attr-doclaunch">작업 ì¶”ê°€ì— ì•¡í‹°ë¹„í‹° 특성 사용</h3> -<p>액티비티는 ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ìƒˆ ìž‘ì—…ì„ ì‹œìž‘í• ë•ŒëŠ” í•ìƒ +<p>액티비티는 ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ìƒˆ ìž‘ì—…ì„ ì‹œìž‘í• ë•ŒëŠ” í•ìƒ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 특성, <a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode"> -{@code android:documentLaunchMode}</a>를 ì‚¬ìš©í•œë‹¤ê³ ë‚˜íƒ€ë‚¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ íŠ¹ì„±ì—는 네 가지 ê°’ì´ ìžˆì–´ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 문서를 ì—´ë©´ +{@code android:documentLaunchMode}</a>를 ì‚¬ìš©í•œë‹¤ê³ ë‚˜íƒ€ë‚¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ íŠ¹ì„±ì—는 네 가지 ê°’ì´ ìžˆì–´ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 문서를 ì—´ë©´ 다ìŒê³¼ ê°™ì€ íš¨ê³¼ë¥¼ ë°œìƒì‹œí‚µë‹ˆë‹¤.</p> <dl> <dt>"{@code intoExisting}"</dt> - <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ ê¸°ì¡´ì˜ ìž‘ì—…ì„ ìž¬ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ê²ƒì€ -{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 플래그를 ì„¤ì •í• ë•Œ -{@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 플래그 <em>ì—†ì´</em> ì„¤ì •í•˜ëŠ” 것과 같습니다. + <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ ê¸°ì¡´ì˜ ìž‘ì—…ì„ ìž¬ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ê²ƒì€ +{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 플래그를 ì„¤ì •í• ë•Œ +{@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 플래그 <em>ì—†ì´</em> ì„¤ì •í•˜ëŠ” 것과 같습니다. ì´ëŠ” ìœ„ì˜ <a href="#flag-new-doc">작업 ì¶”ê°€ì— ì¸í…트 플래그 사용</a>ì—서 설명한 것과 같습니다.</dd> <dt>"{@code always}"</dt> - <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ë©°, ì´ëŠ” 문서가 ì´ë¯¸ ì—´ë ¤ 있는 경우ë¼ë„ 마찬가지입니다. ì´ ê°’ì„ + <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ë©°, ì´ëŠ” 문서가 ì´ë¯¸ ì—´ë ¤ 있는 경우ë¼ë„ 마찬가지입니다. ì´ ê°’ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì€ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} ë° {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 플래그를 둘 다 ì„¤ì •í•˜ëŠ” 것과 같습니다.</dd> <dt>"{@code noneâ€}"</dt> - <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ì§€ 않습니다. 개요 í™”ë©´ì€ ì•¡í‹°ë¹„í‹°ë¥¼ 기본 ìƒíƒœì—서와 -ê°™ì´ ë‹¤ë£¹ë‹ˆë‹¤. 즉 ì•±ì— ëŒ€í•œ í•˜ë‚˜ì˜ ìž‘ì—…ì„ í‘œì‹œí•˜ë©°, ì´ë•Œ 사용ìžê°€ + <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ì§€ 않습니다. 개요 í™”ë©´ì€ ì•¡í‹°ë¹„í‹°ë¥¼ 기본 ìƒíƒœì—서와 +ê°™ì´ ë‹¤ë£¹ë‹ˆë‹¤. 즉 ì•±ì— ëŒ€í•œ í•˜ë‚˜ì˜ ìž‘ì—…ì„ í‘œì‹œí•˜ë©°, ì´ë•Œ 사용ìžê°€ 마지막으로 호출한 ìž‘ì—…ì´ ë¬´ì—‡ì´ë“ 관계 ì—†ì´ ê·¸ 작업ì—서부터 재개합니다.</dd> <dt>"{@code never}"</dt> - <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ì§€ 않습니다. ì´ ê°’ì„ ì„¤ì •í•˜ë©´ + <dd>액티비티가 ë¬¸ì„œì— ëŒ€í•´ 새 ìž‘ì—…ì„ ìƒì„±í•˜ì§€ 않습니다. ì´ ê°’ì„ ì„¤ì •í•˜ë©´ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} - ë° {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} í”Œëž˜ê·¸ì˜ í–‰ë™ì„ -ìž¬ì •ì˜í•©ë‹ˆë‹¤(ì´ë“¤ 중 하나가 ì¸í…트ì—서 ì„¤ì •ë˜ì–´ 있는 경우). 개요 í™”ë©´ì€ ì•±ì— ëŒ€í•œ í•˜ë‚˜ì˜ ìž‘ì—…ì„ í‘œì‹œí•˜ê³ , + ë° {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} í”Œëž˜ê·¸ì˜ í–‰ë™ì„ +ìž¬ì •ì˜í•©ë‹ˆë‹¤(ì´ë“¤ 중 하나가 ì¸í…트ì—서 ì„¤ì •ë˜ì–´ 있는 경우). 개요 í™”ë©´ì€ ì•±ì— ëŒ€í•œ í•˜ë‚˜ì˜ ìž‘ì—…ì„ í‘œì‹œí•˜ê³ , ì´ê²ƒì´ 사용ìžê°€ 마지막으로 호출한 액티비티가 무엇ì´ë“ 그것부터 재개합니다.</dd> </dl> -<p class="note"><strong>ì°¸ê³ :</strong> {@code none} ë° {@code never}를 ì œì™¸í•œ 다른 ê°’ì˜ ê²½ìš°, -액티비티를 {@code launchMode="standard"}로 ì •ì˜í•´ì•¼ 합니다. ì´ íŠ¹ì„±ì„ ì§€ì •í•˜ì§€ 않으면 +<p class="note"><strong>ì°¸ê³ :</strong> {@code none} ë° {@code never}를 ì œì™¸í•œ 다른 ê°’ì˜ ê²½ìš°, +액티비티를 {@code launchMode="standard"}로 ì •ì˜í•´ì•¼ 합니다. ì´ íŠ¹ì„±ì„ ì§€ì •í•˜ì§€ 않으면 {@code documentLaunchMode="none"}ì´ ì‚¬ìš©ë©ë‹ˆë‹¤.</p> <h2 id="removing">작업 ì œê±°</h2> -<p>기본ì 으로 문서 ìž‘ì—…ì€ í•´ë‹¹ë˜ëŠ” 액티비티가 완료ë˜ë©´ ìžë™ìœ¼ë¡œ 개요 화면ì—서 -ì œê±°ë©ë‹ˆë‹¤. ì´ í–‰ë™ì„ ìž¬ì •ì˜í•˜ë ¤ë©´ {@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ë¥¼ 사용합니다. ì´ë•Œ +<p>기본ì 으로 문서 ìž‘ì—…ì€ í•´ë‹¹ë˜ëŠ” 액티비티가 완료ë˜ë©´ ìžë™ìœ¼ë¡œ 개요 화면ì—서 +ì œê±°ë©ë‹ˆë‹¤. ì´ í–‰ë™ì„ ìž¬ì •ì˜í•˜ë ¤ë©´ {@link android.app.ActivityManager.AppTask} í´ëž˜ìŠ¤ë¥¼ 사용합니다. ì´ë•Œ {@link android.content.Intent} 플래그 ë˜ëŠ” <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> <activity></a></code> íŠ¹ì„±ì„ í•¨ê»˜ 사용하ì‹ì‹œì˜¤.</p> -<p>개요 화면ì—서 ìž‘ì—…ì„ ì™„ì „ížˆ ì œì™¸í•˜ë ¤ë©´ ì–¸ì œë“ +<p>개요 화면ì—서 ìž‘ì—…ì„ ì™„ì „ížˆ ì œì™¸í•˜ë ¤ë©´ ì–¸ì œë“ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 특성, <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude"> {@code android:excludeFromRecents}</a>를 {@code true}로 ì„¤ì •í•©ë‹ˆë‹¤.</p> -<p>개요 화면ì—서 ì•±ì´ í¬í•¨í• 수 있는 ìž‘ì—…ì˜ ìµœëŒ€ 개수를 ì„¤ì •í•˜ë ¤ë©´ +<p>개요 화면ì—서 ì•±ì´ í¬í•¨í• 수 있는 ìž‘ì—…ì˜ ìµœëŒ€ 개수를 ì„¤ì •í•˜ë ¤ë©´ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 특성 <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents} -</a>를 ì •ìˆ˜ 값으로 ì„¤ì •í•©ë‹ˆë‹¤. ê¸°ë³¸ì€ 16개입니다. ìž‘ì—…ì˜ ìµœëŒ€ ëŒ€ìˆ˜ì— ë„달하면 가장 ì˜ˆì „ì— ì‚¬ìš©ëœ ìž‘ì—…ì´ ê°œìš” 화면ì—서 -ì œê±°ë©ë‹ˆë‹¤. {@code android:maxRecents} ìµœëŒ€ê°’ì€ +</a>를 ì •ìˆ˜ 값으로 ì„¤ì •í•©ë‹ˆë‹¤. ê¸°ë³¸ì€ 16개입니다. ìž‘ì—…ì˜ ìµœëŒ€ ëŒ€ìˆ˜ì— ë„달하면 가장 ì˜ˆì „ì— ì‚¬ìš©ëœ ìž‘ì—…ì´ ê°œìš” 화면ì—서 +ì œê±°ë©ë‹ˆë‹¤. {@code android:maxRecents} ìµœëŒ€ê°’ì€ 50입니다(메모리 ìš©ëŸ‰ì´ ì ì€ ê¸°ê¸°ì—서는 25). 1 ë¯¸ë§Œì˜ ê°’ì€ ìœ íš¨í•˜ì§€ 않습니다.</p> <h3 id="#apptask-remove">작업 ì œê±°ì— AppTask í´ëž˜ìФ 사용</h3> -<p>개요 화면ì—서 새 ìž‘ì—…ì„ ìƒì„±í•˜ëŠ” 액티비티ì—서는 ìž‘ì—…ì„ ì–¸ì œ ì œê±°í• ê²ƒì¸ì§€ì™€ -그와 ê´€ë ¨ëœ ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ ì–¸ì œ ì™„ë£Œí• ê²ƒì¸ì§€ ì§€ì •í• ìˆ˜ 있습니다. +<p>개요 화면ì—서 새 ìž‘ì—…ì„ ìƒì„±í•˜ëŠ” 액티비티ì—서는 ìž‘ì—…ì„ ì–¸ì œ ì œê±°í• ê²ƒì¸ì§€ì™€ +그와 ê´€ë ¨ëœ ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ ì–¸ì œ ì™„ë£Œí• ê²ƒì¸ì§€ ì§€ì •í• ìˆ˜ 있습니다. {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} 메서드를 호출하면 ë©ë‹ˆë‹¤.</p> <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> @@ -218,15 +218,15 @@ public void onRemoveFromRecents(View view) { } </pre> -<p class="note"><strong>ì°¸ê³ :</strong> -{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} 메서드를 -사용하면 {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 태그 ì‚¬ìš©ì„ ìž¬ì •ì˜í•©ë‹ˆë‹¤. +<p class="note"><strong>ì°¸ê³ :</strong> +{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} 메서드를 +사용하면 {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 태그 ì‚¬ìš©ì„ ìž¬ì •ì˜í•©ë‹ˆë‹¤. ì´ ë‚´ìš©ì€ ì•„ëž˜ì—서 설명합니다.</p> <h3 id="#retain-finished">ì™„ë£Œëœ ìž‘ì—… ë³´ì¡´</h3> -<p>ìž‘ì—…ì„ ê°œìš” í™”ë©´ì— ë³´ì¡´í•˜ë ¤ë©´(액티비티가 완료ë˜ì—ˆë”ë¼ë„), -액티비티를 시작하는 ì¸í…íŠ¸ì˜ {@link android.content.Intent#addFlags(int) addFlags()} ë©”ì„œë“œì— ìžˆëŠ” +<p>ìž‘ì—…ì„ ê°œìš” í™”ë©´ì— ë³´ì¡´í•˜ë ¤ë©´(액티비티가 완료ë˜ì—ˆë”ë¼ë„), +액티비티를 시작하는 ì¸í…íŠ¸ì˜ {@link android.content.Intent#addFlags(int) addFlags()} ë©”ì„œë“œì— ìžˆëŠ” {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 플래그를 ì „ë‹¬í•©ë‹ˆë‹¤.</p> <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> @@ -241,11 +241,11 @@ private Intent newDocumentIntent() { } </pre> -<p>ê°™ì€ íš¨ê³¼ë¥¼ 얻기 위해 +<p>ê°™ì€ íš¨ê³¼ë¥¼ 얻기 위해 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 특성 <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents"> {@code android:autoRemoveFromRecents}</a>를 {@code false}로 ì„¤ì •í•´ë„ ë©ë‹ˆë‹¤. 기본 ê°’ì€ ë¬¸ì„œ ì•¡í‹°ë¹„í‹°ì˜ ê²½ìš° {@code true} -ì´ê³ , ì¼ë°˜ ì•¡í‹°ë¹„í‹°ì˜ ê²½ìš° {@code false}입니다. ì´ íŠ¹ì„±ì„ ì‚¬ìš©í•˜ë©´ ì´ì „ì— ë…¼í•œ 것과 ê°™ì´ +ì´ê³ , ì¼ë°˜ ì•¡í‹°ë¹„í‹°ì˜ ê²½ìš° {@code false}입니다. ì´ íŠ¹ì„±ì„ ì‚¬ìš©í•˜ë©´ ì´ì „ì— ë…¼í•œ 것과 ê°™ì´ {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 플래그를 ìž¬ì •ì˜í•˜ê²Œ ë©ë‹ˆë‹¤.</p> diff --git a/docs/html-intl/intl/ko/guide/components/services.jd b/docs/html-intl/intl/ko/guide/components/services.jd index fb95ea5ed0fa..71c2b50424e8 100644 --- a/docs/html-intl/intl/ko/guide/components/services.jd +++ b/docs/html-intl/intl/ko/guide/components/services.jd @@ -49,52 +49,52 @@ page.title=서비스 </div> -<p>{@link android.app.Service}는 ë°°ê²½ì—서 오래 실행ë˜ëŠ” ìž‘ì—…ì„ -ìˆ˜í–‰í• ìˆ˜ 있는 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì´ë©° ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. ë˜ ë‹¤ë¥¸ -ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 서비스를 ì‹œìž‘í• ìˆ˜ 있으며, ì´ëŠ” 사용ìžê°€ ë˜ ë‹¤ë¥¸ -ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì „í™˜í•˜ë”ë¼ë„ ë°°ê²½ì—서 계ì†í•´ì„œ 실행ë©ë‹ˆë‹¤. ì´ì™¸ì—ë„, 구성 요소를 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ì—¬ -서비스와 ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있으며, 심지어는 프로세스 ê°„ í†µì‹ (IPC)ë„ ìˆ˜í–‰í• ìˆ˜ 있습니다. 예를 들어 한 서비스는 -ë„¤íŠ¸ì›Œí¬ íŠ¸ëžœìžì…˜ì„ ì²˜ë¦¬í•˜ê³ , ìŒì•…ì„ ìž¬ìƒí•˜ê³ íŒŒì¼ I/O를 수행하거나 콘í…ì¸ ì œê³µìžì™€ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있으며 +<p>{@link android.app.Service}는 ë°°ê²½ì—서 오래 실행ë˜ëŠ” ìž‘ì—…ì„ +ìˆ˜í–‰í• ìˆ˜ 있는 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì´ë©° ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. ë˜ ë‹¤ë¥¸ +ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 서비스를 ì‹œìž‘í• ìˆ˜ 있으며, ì´ëŠ” 사용ìžê°€ ë˜ ë‹¤ë¥¸ +ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì „í™˜í•˜ë”ë¼ë„ ë°°ê²½ì—서 계ì†í•´ì„œ 실행ë©ë‹ˆë‹¤. ì´ì™¸ì—ë„, 구성 요소를 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í•˜ì—¬ +서비스와 ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있으며, 심지어는 프로세스 ê°„ í†µì‹ (IPC)ë„ ìˆ˜í–‰í• ìˆ˜ 있습니다. 예를 들어 한 서비스는 +ë„¤íŠ¸ì›Œí¬ íŠ¸ëžœìžì…˜ì„ ì²˜ë¦¬í•˜ê³ , ìŒì•…ì„ ìž¬ìƒí•˜ê³ íŒŒì¼ I/O를 수행하거나 콘í…ì¸ ì œê³µìžì™€ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있으며 ì´ ëª¨ë“ ê²ƒì„ ë°°ê²½ì—서 ìˆ˜í–‰í• ìˆ˜ 있습니다.</p> <p>서비스는 본질ì 으로 ë‘ ê°€ì§€ 형ì‹ì„ 취합니다.</p> <dl> <dt>시작ë¨</dt> - <dd>서비스가 "시작ëœ" ìƒíƒœê°€ ë˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소(예: 액티비티)ê°€ -{@link android.content.Context#startService startService()}를 호출하여 시작하면 ë©ë‹ˆë‹¤. 서비스는 한 번 시작ë˜ê³ 나면 -ë°°ê²½ì—서 무기한으로 실행ë 수 있으며, ì´ëŠ” 해당 서비스를 시작한 구성 요소가 소멸ë˜ì—ˆë”ë¼ë„ 무관합니다. 보통, + <dd>서비스가 "시작ëœ" ìƒíƒœê°€ ë˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소(예: 액티비티)ê°€ +{@link android.content.Context#startService startService()}를 호출하여 시작하면 ë©ë‹ˆë‹¤. 서비스는 한 번 시작ë˜ê³ 나면 +ë°°ê²½ì—서 무기한으로 실행ë 수 있으며, ì´ëŠ” 해당 서비스를 시작한 구성 요소가 소멸ë˜ì—ˆë”ë¼ë„ 무관합니다. 보통, ì‹œìž‘ëœ ì„œë¹„ìŠ¤ëŠ” 한 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ ê²°ê³¼ë¥¼ ë°œì‹ ìžì—게 반환하지 않습니다. -예를 들어 네트워í¬ì—서 파ì¼ì„ 다운로드하거나 ì—…ë¡œë“œí• ìˆ˜ 있습니다. ìž‘ì—…ì„ ì™„ë£Œí•˜ë©´, 해당 서비스는 +예를 들어 네트워í¬ì—서 파ì¼ì„ 다운로드하거나 ì—…ë¡œë“œí• ìˆ˜ 있습니다. ìž‘ì—…ì„ ì™„ë£Œí•˜ë©´, 해당 서비스는 알아서 중단ë˜ëŠ” ê²ƒì´ ì •ìƒìž…니다.</dd> <dt>ë°”ì¸ë”©ë¨</dt> <dd>서비스가 "ë°”ì¸ë”©ëœ" ìƒíƒœê°€ ë˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 {@link -android.content.Context#bindService bindService()}를 사용하여 해당 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ë©´ ë©ë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스는 í´ë¼ì´ì–¸íЏ-서버 -ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ 구성 요소가 서비스와 ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ë©°, 결과를 ê°€ì ¸ì˜¬ ìˆ˜ë„ ìžˆê³ ì‹¬ì§€ì–´ -ì´ì™€ ê°™ì€ ìž‘ì—…ì„ ì—¬ëŸ¬ í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ í”„ë¡œì„¸ìŠ¤ ê°„ í†µì‹ (IPC)으로 ìˆ˜í–‰í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스는 ë˜ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 -ì´ì— ë°”ì¸ë”©ë˜ì–´ 있는 경우ì—ë§Œ 실행ë©ë‹ˆë‹¤. 여러 ê°œì˜ êµ¬ì„± 요소가 ì„œë¹„ìŠ¤ì— í•œêº¼ë²ˆì— ë°”ì¸ë”©ë 수 있지만, +android.content.Context#bindService bindService()}를 사용하여 해당 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ë©´ ë©ë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스는 í´ë¼ì´ì–¸íЏ-서버 +ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ 구성 요소가 서비스와 ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있ë„ë¡ í•´ì£¼ë©°, 결과를 ê°€ì ¸ì˜¬ ìˆ˜ë„ ìžˆê³ ì‹¬ì§€ì–´ +ì´ì™€ ê°™ì€ ìž‘ì—…ì„ ì—¬ëŸ¬ í”„ë¡œì„¸ìŠ¤ì— ê±¸ì³ í”„ë¡œì„¸ìŠ¤ ê°„ í†µì‹ (IPC)으로 ìˆ˜í–‰í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ë°”ì¸ë”©ëœ 서비스는 ë˜ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 +ì´ì— ë°”ì¸ë”©ë˜ì–´ 있는 경우ì—ë§Œ 실행ë©ë‹ˆë‹¤. 여러 ê°œì˜ êµ¬ì„± 요소가 ì„œë¹„ìŠ¤ì— í•œêº¼ë²ˆì— ë°”ì¸ë”©ë 수 있지만, ì´ ëª¨ë“ ê²ƒì´ ë°”ì¸ë”©ì„ í•´ì œí•˜ë©´ 해당 서비스는 소멸ë©ë‹ˆë‹¤.</dd> </dl> -<p>ì´ ë¬¸ì„œëŠ” 주로 ì´ëŸ¬í•œ ë‘ ê°€ì§€ ìœ í˜•ì˜ ì„œë¹„ìŠ¤ë¥¼ 따로따로 논하지만, 서비스는 +<p>ì´ ë¬¸ì„œëŠ” 주로 ì´ëŸ¬í•œ ë‘ ê°€ì§€ ìœ í˜•ì˜ ì„œë¹„ìŠ¤ë¥¼ 따로따로 논하지만, 서비스는 ë‘ ê°€ì§€ ë°©ì‹ ëª¨ë‘로 ìž‘ë™í• 수 있습니다. 즉 서비스가 시작ë ìˆ˜ë„ ìžˆê³ (나아가 무기한으로 실행ë˜ê³ ) ë°”ì¸ë”©ë„ í—ˆìš©í• ìˆ˜ 있다는 뜻입니다. ì´ëŠ” ê·¸ì € ë‘ì–´ 가지 콜백 ë©”ì„œë“œì˜ êµ¬í˜„ ì—¬ë¶€ì— ë‹¬ë¦° ë¬¸ì œìž…ë‹ˆë‹¤. {@link android.app.Service#onStartCommand onStartCommand()}를 사용하면 구성 요소가 서비스를 ì‹œìž‘í• ìˆ˜ 있게 í—ˆìš©í•˜ê³ , {@link android.app.Service#onBind onBind()}를 사용하면 ë°”ì¸ë”©ì„ 허용합니다.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작ë˜ì—ˆë“ , ë°”ì¸ë”©ë˜ì—ˆë“ 아니면 양쪽 모ë‘ì´ë“ ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 -해당 서비스를 ì‚¬ìš©í• ìˆ˜ 있으며(별ë„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서ë¼ë„), ì´ëŠ” ì–´ëŠ êµ¬ì„± ìš”ì†Œë“ ì•¡í‹°ë¹„í‹°ë¥¼ -ì‚¬ìš©í• ìˆ˜ 있는 것과 같습니다. ì´ë¥¼ {@link android.content.Intent}로 시작하면 ë©ë‹ˆë‹¤. 그러나, -매니페스트ì—서 서비스를 비공개로 ì„ ì–¸í•˜ê³ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„°ì˜ 액세스를 ì°¨ë‹¨í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ -<a href="#Declaring">매니페스트ì—서 서비스 +해당 서비스를 ì‚¬ìš©í• ìˆ˜ 있으며(별ë„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서ë¼ë„), ì´ëŠ” ì–´ëŠ êµ¬ì„± ìš”ì†Œë“ ì•¡í‹°ë¹„í‹°ë¥¼ +ì‚¬ìš©í• ìˆ˜ 있는 것과 같습니다. ì´ë¥¼ {@link android.content.Intent}로 시작하면 ë©ë‹ˆë‹¤. 그러나, +매니페스트ì—서 서비스를 비공개로 ì„ ì–¸í•˜ê³ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„°ì˜ 액세스를 ì°¨ë‹¨í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ +<a href="#Declaring">매니페스트ì—서 서비스 ì„ ì–¸í•˜ê¸°</a>ì— ê´€í•œ 섹션ì—서 ë” ìžì„¸ížˆ ì´ì•¼ê¸°í•©ë‹ˆë‹¤.</p> -<p class="caution"><strong>주ì˜:</strong> 서비스는 ìžì‹ ì˜ í˜¸ìŠ¤íŒ… í”„ë¡œì„¸ìŠ¤ì˜ -기본 ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤. 서비스는 ìžì‹ ì˜ ìŠ¤ë ˆë“œë¥¼ ì§ì ‘ ìƒì„±í•˜ì§€ <strong>않으며</strong>, -별ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ì§€ë„ <strong>않습니다</strong>(별ë„로 ì§€ì •í•˜ëŠ” 경우는 예외). ì´ê²ƒì€ 즉, -서비스가 CPU 집약ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ì˜ˆì •ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ì˜ˆì •ì¸ ê²½ìš°(예를 들어 MP3 -ìž¬ìƒ ë˜ëŠ” 네트워킹 등), 서비스 ë‚´ì— ìƒˆ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ì—¬ 해당 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í•´ì•¼ 한다는 뜻입니다. 별ë„ì˜ ìŠ¤ë ˆë“œë¥¼ 사용하면 -'ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‘답하지 않습니다(ANR)' 오류가 ì¼ì–´ë‚ ìœ„í—˜ì„ ì¤„ì¼ ìˆ˜ 있으며 +<p class="caution"><strong>주ì˜:</strong> 서비스는 ìžì‹ ì˜ í˜¸ìŠ¤íŒ… í”„ë¡œì„¸ìŠ¤ì˜ +기본 ìŠ¤ë ˆë“œì—서 실행ë©ë‹ˆë‹¤. 서비스는 ìžì‹ ì˜ ìŠ¤ë ˆë“œë¥¼ ì§ì ‘ ìƒì„±í•˜ì§€ <strong>않으며</strong>, +별ë„ì˜ í”„ë¡œì„¸ìŠ¤ì—서 실행ë˜ì§€ë„ <strong>않습니다</strong>(별ë„로 ì§€ì •í•˜ëŠ” 경우는 예외). ì´ê²ƒì€ 즉, +서비스가 CPU 집약ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ì˜ˆì •ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í• ì˜ˆì •ì¸ ê²½ìš°(예를 들어 MP3 +ìž¬ìƒ ë˜ëŠ” 네트워킹 등), 서비스 ë‚´ì— ìƒˆ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ì—¬ 해당 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í•´ì•¼ 한다는 뜻입니다. 별ë„ì˜ ìŠ¤ë ˆë“œë¥¼ 사용하면 +'ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‘답하지 않습니다(ANR)' 오류가 ì¼ì–´ë‚ ìœ„í—˜ì„ ì¤„ì¼ ìˆ˜ 있으며 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œëŠ” 액티비티와 ì‚¬ìš©ìž ìƒí˜¸ 작용 ì „ìš©ìœ¼ë¡œ ìœ ì§€ë 수 있습니다.</p> @@ -103,89 +103,89 @@ android.app.Service#onBind onBind()}를 사용하면 ë°”ì¸ë”©ì„ í—ˆìš©í•©ë‹ˆë‹ <div class="sidebox-wrapper"> <div class="sidebox"> <h3>서비스와 ìŠ¤ë ˆë“œ 중 ì–´ëŠ ê²ƒì„ ì‚¬ìš©í•´ì•¼ í• ê¹Œìš”?</h3> - <p>서비스는 ê·¸ì € ë°°ê²½ì—서 실행ë 수 있는 구성 ìš”ì†Œì¼ ë¿ìž…니다. ì´ëŠ” 사용ìžê°€ -ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용하지 ì•Šì•„ë„ ê´€ê³„ ì—†ì´ í•´ë‹¹ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 서비스를 ìƒì„±í•˜ëŠ” ê²ƒì€ ê¼ ê·¸ê²ƒì´ í•„ìš”í• ë•Œë§Œìœ¼ë¡œ êµí•œë˜ì–´ì•¼ + <p>서비스는 ê·¸ì € ë°°ê²½ì—서 실행ë 수 있는 구성 ìš”ì†Œì¼ ë¿ìž…니다. ì´ëŠ” 사용ìžê°€ +ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용하지 ì•Šì•„ë„ ê´€ê³„ ì—†ì´ í•´ë‹¹ë©ë‹ˆë‹¤. ë”°ë¼ì„œ, 서비스를 ìƒì„±í•˜ëŠ” ê²ƒì€ ê¼ ê·¸ê²ƒì´ í•„ìš”í• ë•Œë§Œìœ¼ë¡œ êµí•œë˜ì–´ì•¼ 합니다.</p> - <p>기본 ìŠ¤ë ˆë“œ 외부ì—서 ìž‘ì—…ì„ ìˆ˜í–‰í•´ì•¼ 하지만 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용 ì¤‘ì¸ -ë™ì•ˆì—ë§Œ 수행하면 ë˜ëŠ” 경우ë¼ë©´, 서비스가 ì•„ë‹ˆë¼ ê·¸ ëŒ€ì‹ ìƒˆ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•´ì•¼ 합니다. 예를 들어 -액티비티가 실행ë˜ëŠ” 중ì—ë§Œ ìŒì•…ì„ ìž¬ìƒí•˜ê³ ìž í•˜ëŠ” 경우, + <p>기본 ìŠ¤ë ˆë“œ 외부ì—서 ìž‘ì—…ì„ ìˆ˜í–‰í•´ì•¼ 하지만 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용 ì¤‘ì¸ +ë™ì•ˆì—ë§Œ 수행하면 ë˜ëŠ” 경우ë¼ë©´, 서비스가 ì•„ë‹ˆë¼ ê·¸ ëŒ€ì‹ ìƒˆ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•´ì•¼ 합니다. 예를 들어 +액티비티가 실행ë˜ëŠ” 중ì—ë§Œ ìŒì•…ì„ ìž¬ìƒí•˜ê³ ìž í•˜ëŠ” 경우, {@link android.app.Activity#onCreate onCreate()} ì•ˆì— ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•˜ê³ ì´ë¥¼ {@link android.app.Activity#onStart onStart()}ì—서 실행하기 시작한 ë‹¤ìŒ {@link android.app.Activity#onStop -onStop()}ì—서 중단하면 ë©ë‹ˆë‹¤. ë˜í•œ, ê¸°ì¡´ì˜ {@link java.lang.Thread} í´ëž˜ìФ ëŒ€ì‹ -{@link android.os.AsyncTask} ë˜ëŠ” {@link android.os.HandlerThread}를 사용하는 ë°©ì•ˆë„ ê³ ë ¤í•˜ì‹ì‹œì˜¤. ìŠ¤ë ˆë“œì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/processes-and-threads.html#Threads">프로세스 ë° +onStop()}ì—서 중단하면 ë©ë‹ˆë‹¤. ë˜í•œ, ê¸°ì¡´ì˜ {@link java.lang.Thread} í´ëž˜ìФ ëŒ€ì‹ +{@link android.os.AsyncTask} ë˜ëŠ” {@link android.os.HandlerThread}를 사용하는 ë°©ì•ˆë„ ê³ ë ¤í•˜ì‹ì‹œì˜¤. ìŠ¤ë ˆë“œì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/processes-and-threads.html#Threads">프로세스 ë° ìŠ¤ë ˆë”©</a> 문서를 참조하ì‹ì‹œì˜¤.</p> - <p>서비스를 사용하는 경우 기본ì 으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œì—서 -ê³„ì† ì‹¤í–‰ë˜ë¯€ë¡œ 서비스가 집약ì ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우 ì—¬ì „ížˆ 서비스 ë‚´ì— + <p>서비스를 사용하는 경우 기본ì 으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œì—서 +ê³„ì† ì‹¤í–‰ë˜ë¯€ë¡œ 서비스가 집약ì ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우 ì—¬ì „ížˆ 서비스 ë‚´ì— ìƒˆ ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•´ì•¼ 한다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤.</p> </div> </div> -<p>서비스를 ìƒì„±í•˜ë ¤ë©´ {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ ìƒì„±í•´ì•¼ 합니다(아니면 ì´ì˜ -기존 하위 í´ëž˜ìФ 중 하나). 구현ì—서는 서비스 수명 ì£¼ê¸°ì˜ ì£¼ìš” ì¸¡ë©´ì„ ì²˜ë¦¬í•˜ëŠ” 콜백 메서드를 -몇 가지 ìž¬ì •ì˜í•´ì•¼ 하며 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 구성 ìš”ì†Œì— ëŒ€í•œ ë©”ì»¤ë‹ˆì¦˜ì„ +<p>서비스를 ìƒì„±í•˜ë ¤ë©´ {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ ìƒì„±í•´ì•¼ 합니다(아니면 ì´ì˜ +기존 하위 í´ëž˜ìФ 중 하나). 구현ì—서는 서비스 수명 ì£¼ê¸°ì˜ ì£¼ìš” ì¸¡ë©´ì„ ì²˜ë¦¬í•˜ëŠ” 콜백 메서드를 +몇 가지 ìž¬ì •ì˜í•´ì•¼ 하며 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• 구성 ìš”ì†Œì— ëŒ€í•œ ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•´ì•¼ 합니다(해당ë˜ëŠ” 경우). ìž¬ì •ì˜í•´ì•¼ 하는 가장 중요한 콜백 메서드는 다ìŒê³¼ 같습니다.</p> <dl> <dt>{@link android.app.Service#onStartCommand onStartCommand()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ë˜ ë‹¤ë¥¸ 구성 요소(예: 액티비티)ê°€ 서비스를 + <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ë˜ ë‹¤ë¥¸ 구성 요소(예: 액티비티)ê°€ 서비스를 시작하ë„ë¡ ìš”ì²í•˜ëŠ” 경우입니다. ì´ë•Œ {@link android.content.Context#startService -startService()}를 호출하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œê°€ 실행ë˜ë©´ 서비스가 시작ë˜ê³ ë°°ê²½ì—서 무기한으로 실행ë 수 -있습니다. ì´ê²ƒì„ 구성하면 ì„œë¹„ìŠ¤ì˜ ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆì„ 때 해당 서비스를 중단하는 ê²ƒì€ +startService()}를 호출하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œê°€ 실행ë˜ë©´ 서비스가 시작ë˜ê³ ë°°ê²½ì—서 무기한으로 실행ë 수 +있습니다. ì´ê²ƒì„ 구성하면 ì„œë¹„ìŠ¤ì˜ ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆì„ 때 해당 서비스를 중단하는 ê²ƒì€ ê°œë°œìž ë³¸ì¸ì˜ 책임입니다. ì´ë•Œ {@link android.app.Service#stopSelf stopSelf()} ë˜ëŠ” {@link -android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤ (ë°”ì¸ë”©ë§Œ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우, ì´ ë©”ì„œë“œë¥¼ 구현하지 +android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤ (ë°”ì¸ë”©ë§Œ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우, ì´ ë©”ì„œë“œë¥¼ 구현하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤).</dd> <dt>{@link android.app.Service#onBind onBind()}</dt> <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ë˜ ë‹¤ë¥¸ 구성 요소가 해당 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë˜ê³ ìž í•˜ëŠ” 경우 (예를 들어 RPC를 수행하기 위해)입니다. ì´ë•Œ {@link android.content.Context#bindService -bindService()}를 호출하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œë¥¼ êµ¬í˜„í• ë•Œì—는 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 í†µì‹ ì„ ì£¼ê³ ë°›ê¸° 위해 ì‚¬ìš©í• -ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•´ì•¼ 합니다. ì´ë•Œ {@link android.os.IBinder}를 반환하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” í•ìƒ +bindService()}를 호출하는 ë°©ë²•ì„ ì”니다. ì´ ë©”ì„œë“œë¥¼ êµ¬í˜„í• ë•Œì—는 í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 í†µì‹ ì„ ì£¼ê³ ë°›ê¸° 위해 ì‚¬ìš©í• +ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•´ì•¼ 합니다. ì´ë•Œ {@link android.os.IBinder}를 반환하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” í•ìƒ êµ¬í˜„í•´ì•¼ 하지만, ë°”ì¸ë”©ì„ 허용하지 ì•Šê³ ìž í•˜ë©´ nullì„ ë°˜í™˜í•´ì•¼ 합니다.</dd> <dt>{@link android.app.Service#onCreate()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì„œë¹„ìŠ¤ê°€ ì²˜ìŒ ìƒì„±ë˜ì–´ ì¼íšŒì„± ì„¤ì • -ì ˆì°¨ë¥¼ 수행하는 경우입니다({@link android.app.Service#onStartCommand onStartCommand()} ë˜ëŠ” -{@link android.app.Service#onBind onBind()}를 호출하기 ì „ì—). 서비스가 ì´ë¯¸ 실행 ì¤‘ì¸ ê²½ìš°, ì´ ë©”ì„œë“œëŠ” 호출ë˜ì§€ + <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ ì„œë¹„ìŠ¤ê°€ ì²˜ìŒ ìƒì„±ë˜ì–´ ì¼íšŒì„± ì„¤ì • +ì ˆì°¨ë¥¼ 수행하는 경우입니다({@link android.app.Service#onStartCommand onStartCommand()} ë˜ëŠ” +{@link android.app.Service#onBind onBind()}를 호출하기 ì „ì—). 서비스가 ì´ë¯¸ 실행 ì¤‘ì¸ ê²½ìš°, ì´ ë©”ì„œë“œëŠ” 호출ë˜ì§€ 않습니다.</dd> <dt>{@link android.app.Service#onDestroy()}</dt> - <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ í•´ë‹¹ 서비스를 ë” ì´ìƒ 사용하지 ì•Šê³ ì†Œë©¸ì‹œí‚¤ëŠ” 경우입니다. -ì„œë¹„ìŠ¤ì— ì´ê²ƒì„ 구현해야 ìŠ¤ë ˆë“œ, 등ë¡ëœ ê°ì¢… ìˆ˜ì‹ ê¸°(listener, receiver) 등 + <dd>ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하는 ê²ƒì€ í•´ë‹¹ 서비스를 ë” ì´ìƒ 사용하지 ì•Šê³ ì†Œë©¸ì‹œí‚¤ëŠ” 경우입니다. +ì„œë¹„ìŠ¤ì— ì´ê²ƒì„ 구현해야 ìŠ¤ë ˆë“œ, 등ë¡ëœ ê°ì¢… ìˆ˜ì‹ ê¸°(listener, receiver) 등 ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ ì •ë¦¬í• ìˆ˜ 있습니다. ì´ê²ƒì´ 서비스가 ìˆ˜ì‹ í•˜ëŠ” 마지막 호출입니다.</dd> </dl> <p>한 구성 요소가 {@link android.content.Context#startService startService()}를 호출하여 서비스를 시작하면({@link -android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ í˜¸ì¶œì„ ì´ˆëž˜í•¨), 해당 서비스는 -알아서 {@link android.app.Service#stopSelf()}로 스스로를 ì¤‘ë‹¨í• ë•Œê¹Œì§€ ë˜ëŠ” +android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ í˜¸ì¶œì„ ì´ˆëž˜í•¨), 해당 서비스는 +알아서 {@link android.app.Service#stopSelf()}로 스스로를 ì¤‘ë‹¨í• ë•Œê¹Œì§€ ë˜ëŠ” ë˜ ë‹¤ë¥¸ 구성 요소가 {@link android.content.Context#stopService stopService()}를 호출하여 서비스를 중단시킬 때까지 실행 ì¤‘ì¸ ìƒíƒœë¡œ ìœ ì§€ë©ë‹ˆë‹¤.</p> -<p>한 구성 요소가 +<p>한 구성 요소가 {@link android.content.Context#bindService bindService()}를 호출하여 서비스를 ìƒì„±í•˜ëŠ” 경우(ê·¸ë¦¬ê³ {@link -android.app.Service#onStartCommand onStartCommand()}를 호출하지 <em>않ì€</em> 경우), 해당 서비스는 -해당 구성 요소가 ë°”ì¸ë”©ë˜ì–´ 있는 경우ì—ë§Œ 실행ë©ë‹ˆë‹¤. 서비스가 ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ë°”ì¸ë”© í•´ì œë˜ë©´ ì‹œìŠ¤í…œì´ ì´ë¥¼ +android.app.Service#onStartCommand onStartCommand()}를 호출하지 <em>않ì€</em> 경우), 해당 서비스는 +해당 구성 요소가 ë°”ì¸ë”©ë˜ì–´ 있는 경우ì—ë§Œ 실행ë©ë‹ˆë‹¤. 서비스가 ëª¨ë“ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ë°”ì¸ë”© í•´ì œë˜ë©´ ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다.</p> -<p>Android ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ ê°•ì œ 중단시키는 ê²ƒì€ ë©”ëª¨ë¦¬ê°€ 부족하여 사용ìžê°€ ì´ˆì ì„ ì§‘ì¤‘í•˜ê³ ìžˆëŠ” -액티비티를 위해 시스템 리소스를 회복해야만 하는 경우로만 êµí•œë©ë‹ˆë‹¤. 해당 서비스가 사용ìžì˜ ì£¼ëª©ì„ -ëŒê³ 있는 ì•¡í‹°ë¹„í‹°ì— ë°”ì¸ë”©ë˜ì–´ 있다면 중단ë ê°€ëŠ¥ì„±ì´ ë‚®ê³ , 서비스가 <a href="#Foreground">ì „ê²½ì—서 실행</a>ëœë‹¤ê³ ì„ ì–¸ëœ ê²½ìš°(ë‚˜ì¤‘ì— ìžì„¸ížˆ 논함), ê±°ì˜ ì ˆëŒ€ 중단ë˜ì§€ 않습니다. -ê·¸ë ‡ì§€ 않으면, 서비스가 시작ë˜ì—ˆê³ 오랫ë™ì•ˆ 실행ë˜ëŠ” 경우 -ì‹œê°„ì´ ì§€ë‚˜ë©´ì„œ ì‹œìŠ¤í…œì´ ë°°ê²½ 작업 목ë¡ì—ì„œì˜ ì´ ì„œë¹„ìŠ¤ì˜ ìœ„ì¹˜ë¥¼ ì ì ë‚®ì¶”ê³ -서비스는 중단ë˜ê¸° 매우 쉬워집니다. 서비스가 시작ë˜ì—ˆë‹¤ë©´ ì´ë¥¼ ì‹œìŠ¤í…œì— ì˜í•œ ìž¬ì‹œìž‘ì„ ì •ìƒì 으로 -처리하ë„ë¡ ë””ìžì¸í•´ì•¼ 합니다. ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 중단시키는 경우, 리소스를 다시 ì‚¬ìš©í• ìˆ˜ 있게 ë˜ë©´ +<p>Android ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ ê°•ì œ 중단시키는 ê²ƒì€ ë©”ëª¨ë¦¬ê°€ 부족하여 사용ìžê°€ ì´ˆì ì„ ì§‘ì¤‘í•˜ê³ ìžˆëŠ” +액티비티를 위해 시스템 리소스를 회복해야만 하는 경우로만 êµí•œë©ë‹ˆë‹¤. 해당 서비스가 사용ìžì˜ ì£¼ëª©ì„ +ëŒê³ 있는 ì•¡í‹°ë¹„í‹°ì— ë°”ì¸ë”©ë˜ì–´ 있다면 중단ë ê°€ëŠ¥ì„±ì´ ë‚®ê³ , 서비스가 <a href="#Foreground">ì „ê²½ì—서 실행</a>ëœë‹¤ê³ ì„ ì–¸ëœ ê²½ìš°(ë‚˜ì¤‘ì— ìžì„¸ížˆ 논함), ê±°ì˜ ì ˆëŒ€ 중단ë˜ì§€ 않습니다. +ê·¸ë ‡ì§€ 않으면, 서비스가 시작ë˜ì—ˆê³ 오랫ë™ì•ˆ 실행ë˜ëŠ” 경우 +ì‹œê°„ì´ ì§€ë‚˜ë©´ì„œ ì‹œìŠ¤í…œì´ ë°°ê²½ 작업 목ë¡ì—ì„œì˜ ì´ ì„œë¹„ìŠ¤ì˜ ìœ„ì¹˜ë¥¼ ì ì ë‚®ì¶”ê³ +서비스는 중단ë˜ê¸° 매우 쉬워집니다. 서비스가 시작ë˜ì—ˆë‹¤ë©´ ì´ë¥¼ ì‹œìŠ¤í…œì— ì˜í•œ ìž¬ì‹œìž‘ì„ ì •ìƒì 으로 +처리하ë„ë¡ ë””ìžì¸í•´ì•¼ 합니다. ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 중단시키는 경우, 리소스를 다시 ì‚¬ìš©í• ìˆ˜ 있게 ë˜ë©´ ì‹œìŠ¤í…œì´ ê°€ëŠ¥í•œ 한 빨리 ì´ë¥¼ 다시 시작합니다(다만 ì´ê²ƒì€ 개발ìžê°€ {@link -android.app.Service#onStartCommand onStartCommand()}ì—서 반환하는 ê°’ì—ë„ ì¢Œìš°ë©ë‹ˆë‹¤. ì´ ë‚´ìš©ì€ ë‚˜ì¤‘ì— ë…¼í•©ë‹ˆë‹¤). ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ +android.app.Service#onStartCommand onStartCommand()}ì—서 반환하는 ê°’ì—ë„ ì¢Œìš°ë©ë‹ˆë‹¤. ì´ ë‚´ìš©ì€ ë‚˜ì¤‘ì— ë…¼í•©ë‹ˆë‹¤). ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 소멸시킬 수 있는 ê²½ìš°ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/processes-and-threads.html">프로세스 ë° ìŠ¤ë ˆë”©</a> 문서를 참조하ì‹ì‹œì˜¤.</p> -<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ê° ìœ í˜•ì˜ ì„œë¹„ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” 방법과 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì—서 +<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ê° ìœ í˜•ì˜ ì„œë¹„ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” 방법과 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì—서 ì´ë¥¼ 사용하는 ë°©ë²•ì„ ë°°ìš°ê²Œ ë©ë‹ˆë‹¤.</p> <h3 id="Declaring">매니페스트ì—서 서비스 ì„ ì–¸í•˜ê¸°</h3> -<p>액티비티(ë° ë‹¤ë¥¸ 구성 요소)와 마찬가지로, 서비스는 ëª¨ë‘ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 매니페스트 +<p>액티비티(ë° ë‹¤ë¥¸ 구성 요소)와 마찬가지로, 서비스는 ëª¨ë‘ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 매니페스트 파ì¼ì—서 ì„ ì–¸í•´ì•¼ 합니다.</p> -<p>서비스를 ì„ ì–¸í•˜ë ¤ë©´ <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> 요소를 +<p>서비스를 ì„ ì–¸í•˜ë ¤ë©´ <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> 요소를 <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> ìš”ì†Œì˜ í•˜ìœ„ë¡œ 추가하면 ë©ë‹ˆë‹¤. 예:</p> @@ -199,28 +199,28 @@ android.app.Service#onStartCommand onStartCommand()}ì—서 반환하는 ê°’ì—ë </manifest> </pre> -<p>매니페스트ì—서 서비스를 ì„ ì–¸í•˜ëŠ” ë° ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> +<p>매니페스트ì—서 서비스를 ì„ ì–¸í•˜ëŠ” ë° ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> 요소 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> -<p><a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> ìš”ì†Œì— í¬í•¨ì‹œí‚¬ 수 있는 다른 ì†ì„±ë„ 있습니다. -ì´ë¥¼ í¬í•¨ì‹œì¼œ 서비스를 시작하는 ë° í•„ìš”í•œ 권한과 서비스가 실행ë˜ì–´ì•¼ 하는 프로세스 ë“±ì˜ +<p><a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> ìš”ì†Œì— í¬í•¨ì‹œí‚¬ 수 있는 다른 ì†ì„±ë„ 있습니다. +ì´ë¥¼ í¬í•¨ì‹œì¼œ 서비스를 시작하는 ë° í•„ìš”í•œ 권한과 서비스가 실행ë˜ì–´ì•¼ 하는 프로세스 ë“±ì˜ ì†ì„±ì„ ì •ì˜í• 수 있습니다. <a href="{@docRoot}guide/topics/manifest/service-element.html#nm">{@code android:name}</a> -ì†ì„±ì´ ìœ ì¼í•œ 필수 ì†ì„±ìž…니다. ì´ê²ƒì€ ì„œë¹„ìŠ¤ì˜ í´ëž˜ìФ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ì¼ë‹¨ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ -ê²Œì‹œí•˜ê³ ë‚˜ë©´ ì´ ì´ë¦„ì„ ë³€ê²½í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ì´ë¦„ì„ ë³€ê²½í•˜ë©´ +ì†ì„±ì´ ìœ ì¼í•œ 필수 ì†ì„±ìž…니다. ì´ê²ƒì€ ì„œë¹„ìŠ¤ì˜ í´ëž˜ìФ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ì¼ë‹¨ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ +ê²Œì‹œí•˜ê³ ë‚˜ë©´ ì´ ì´ë¦„ì„ ë³€ê²½í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ì´ë¦„ì„ ë³€ê²½í•˜ë©´ 서비스를 시작하거나 ë°”ì¸ë”©í• 명시ì ì¸í…íŠ¸ì— ëŒ€í•œ 종ì†ì„±ìœ¼ë¡œ ì¸í•´ 코드를 ë‹¨ì ˆì‹œí‚¬ ìœ„í—˜ì´ ìžˆê¸° 때문입니다(블로그 ê²Œì‹œë¬¼ì˜ <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html"> 바꿀 수 없는 í•목</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤). <p>ì•±ì˜ ë³´ì•ˆì„ ë³´ìž¥í•˜ë ¤ë©´ <strong> -{@link android.app.Service}ì„ ì‹œìž‘í•˜ê±°ë‚˜ ë°”ì¸ë”©í• 때 í•ìƒ ëª…ì‹œì ì¸í…트를 ì‚¬ìš©í•˜ê³ </strong> ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì¸í…트 필터는 ì„ ì–¸í•˜ì§€ 마ì‹ì‹œì˜¤. ì–´ëŠ -서비스를 ì‹œìž‘í• ì§€ ì–´ëŠ ì •ë„ ëª¨í˜¸ì„±ì„ í—ˆìš©í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•œ 경우, ì„œë¹„ìŠ¤ì— ëŒ€í•´ +{@link android.app.Service}ì„ ì‹œìž‘í•˜ê±°ë‚˜ ë°”ì¸ë”©í• 때 í•ìƒ ëª…ì‹œì ì¸í…트를 ì‚¬ìš©í•˜ê³ </strong> ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì¸í…트 필터는 ì„ ì–¸í•˜ì§€ 마ì‹ì‹œì˜¤. ì–´ëŠ +서비스를 ì‹œìž‘í• ì§€ ì–´ëŠ ì •ë„ ëª¨í˜¸ì„±ì„ í—ˆìš©í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•œ 경우, ì„œë¹„ìŠ¤ì— ëŒ€í•´ ì¸í…트 필터를 ì œê³µí•˜ê³ êµ¬ì„± 요소 ì´ë¦„ì„ {@link android.content.Intent}ì—서 ë°°ì œí• ìˆ˜ 있지만, 그러면 해당 ì¸í…íŠ¸ì— ëŒ€í•œ 패키지를 {@link -android.content.Intent#setPackage setPackage()}로 ì„¤ì •í•˜ì—¬ ëŒ€ìƒ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 충분한 명확화를 +android.content.Intent#setPackage setPackage()}로 ì„¤ì •í•˜ì—¬ ëŒ€ìƒ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 충분한 명확화를 ì œê³µí•˜ë„ë¡ í•´ì•¼ 합니다.</p> -<p>ì´ì™¸ì—ë„ ì„œë¹„ìŠ¤ë¥¼ 본ì¸ì˜ 앱ì—ë§Œ 사용 가능하ë„ë¡ ë³´ìž¥í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +<p>ì´ì™¸ì—ë„ ì„œë¹„ìŠ¤ë¥¼ 본ì¸ì˜ 앱ì—ë§Œ 사용 가능하ë„ë¡ ë³´ìž¥í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. <a href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a> - ì†ì„±ì„ í¬í•¨ì‹œí‚¨ ë’¤ ì´ë¥¼ {@code "false"}로 ì„¤ì •í•˜ë©´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 다른 ì•±ì´ ì—¬ëŸ¬ë¶„ì˜ ì„œë¹„ìŠ¤ë¥¼ 시작하지 못하ë„ë¡ íš¨ê³¼ì 으로 방지해주며, + ì†ì„±ì„ í¬í•¨ì‹œí‚¨ ë’¤ ì´ë¥¼ {@code "false"}로 ì„¤ì •í•˜ë©´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 다른 ì•±ì´ ì—¬ëŸ¬ë¶„ì˜ ì„œë¹„ìŠ¤ë¥¼ 시작하지 못하ë„ë¡ íš¨ê³¼ì 으로 방지해주며, ì´ëŠ” 명시ì ì¸í…트를 사용하는 경우ì—ë„ ë¬¸ì œ ì—†ì´ ì ìš©ë©ë‹ˆë‹¤.</p> @@ -229,71 +229,71 @@ android.content.Intent#setPackage setPackage()}로 ì„¤ì •í•˜ì—¬ ëŒ€ìƒ ì„œë¹„ìŠ¤ <h2 id="CreatingStartedService">ì‹œìž‘ëœ ì„œë¹„ìŠ¤ ìƒì„±í•˜ê¸°</h2> <p>ì‹œìž‘ëœ ì„œë¹„ìŠ¤ëž€ 다른 구성 요소가 {@link -android.content.Context#startService startService()}를 호출하여 ì‹œìž‘í•˜ê³ , ê·¸ ê²°ê³¼ ì„œë¹„ìŠ¤ì˜ +android.content.Context#startService startService()}를 호출하여 ì‹œìž‘í•˜ê³ , ê·¸ ê²°ê³¼ ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onStartCommand onStartCommand()} 메서드를 호출하는 결과를 초래한 ê²ƒì„ ë§í•©ë‹ˆë‹¤.</p> -<p>서비스가 시작ë˜ë©´ ì´ë¥¼ 시작한 구성 요소와 ë…ë¦½ëœ ìžì‹ ë§Œì˜ -수명 주기를 가지며 해당 서비스는 ë°°ê²½ì—서 무기한으로 실행ë 수 있습니다. ì´ëŠ” 해당 서비스를 -시작한 구성 요소가 소멸ë˜ì—ˆë”ë¼ë„ 무관합니다. ë”°ë¼ì„œ, 서비스는 ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ -{@link android.app.Service#stopSelf stopSelf()}를 호출하여 스스로 알아서 중단ë˜ëŠ” ê²ƒì´ ì •ìƒì´ë©° 아니면 다른 구성 요소가 +<p>서비스가 시작ë˜ë©´ ì´ë¥¼ 시작한 구성 요소와 ë…ë¦½ëœ ìžì‹ ë§Œì˜ +수명 주기를 가지며 해당 서비스는 ë°°ê²½ì—서 무기한으로 실행ë 수 있습니다. ì´ëŠ” 해당 서비스를 +시작한 구성 요소가 소멸ë˜ì—ˆë”ë¼ë„ 무관합니다. ë”°ë¼ì„œ, 서비스는 ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ +{@link android.app.Service#stopSelf stopSelf()}를 호출하여 스스로 알아서 중단ë˜ëŠ” ê²ƒì´ ì •ìƒì´ë©° 아니면 다른 구성 요소가 {@link android.content.Context#stopService stopService()}를 호출하여 중단시킬 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소(예: 액티비티)ê°€ 서비스를 ì‹œìž‘í•˜ë ¤ë©´ {@link -android.content.Context#startService startService()}를 í˜¸ì¶œí•˜ê³ , {@link android.content.Intent}를 -ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. ì´ê²ƒì€ 서비스를 ë‚˜íƒ€ë‚´ê³ ì„œë¹„ìŠ¤ê°€ ì‚¬ìš©í• ëª¨ë“ ë°ì´í„°ë¥¼ í¬í•¨í•©ë‹ˆë‹¤. 서비스는 ì´ +android.content.Context#startService startService()}를 í˜¸ì¶œí•˜ê³ , {@link android.content.Intent}를 +ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. ì´ê²ƒì€ 서비스를 ë‚˜íƒ€ë‚´ê³ ì„œë¹„ìŠ¤ê°€ ì‚¬ìš©í• ëª¨ë“ ë°ì´í„°ë¥¼ í¬í•¨í•©ë‹ˆë‹¤. 서비스는 ì´ {@link android.content.Intent}를 {@link android.app.Service#onStartCommand onStartCommand()} 메서드ì—서 ìˆ˜ì‹ í•©ë‹ˆë‹¤.</p> -<p>예를 들어 ì–´ëŠ ì•¡í‹°ë¹„í‹°ê°€ 온ë¼ì¸ ë°ì´í„°ë² ì´ìŠ¤ì— ë°ì´í„°ë¥¼ 약간 ì €ìž¥í•´ì•¼ í•œë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. 액티비티가 +<p>예를 들어 ì–´ëŠ ì•¡í‹°ë¹„í‹°ê°€ 온ë¼ì¸ ë°ì´í„°ë² ì´ìŠ¤ì— ë°ì´í„°ë¥¼ 약간 ì €ìž¥í•´ì•¼ í•œë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. 액티비티가 ë™ë°˜ìž 서비스를 시작하여 ì €ìž¥í• ë°ì´í„°ë¥¼ ì´ì— ì „ë‹¬í• ìˆ˜ 있습니다. ì´ë•Œ ì¸í…트를 {@link android.content.Context#startService startService()}ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. 서비스는 ì´ ì¸í…트를 {@link -android.app.Service#onStartCommand onStartCommand()}ì—서 ìˆ˜ì‹ í•˜ê³ ì¸í„°ë„·ì— 연결한 ë‹¤ìŒ ë°ì´í„°ë² ì´ìФ -트랜ìžì…˜ì„ 수행합니다. ìž‘ì—…ì„ ì™„ë£Œí•˜ë©´, 해당 서비스는 알아서 스스로 중단ë˜ê³ +android.app.Service#onStartCommand onStartCommand()}ì—서 ìˆ˜ì‹ í•˜ê³ ì¸í„°ë„·ì— 연결한 ë‹¤ìŒ ë°ì´í„°ë² ì´ìФ +트랜ìžì…˜ì„ 수행합니다. ìž‘ì—…ì„ ì™„ë£Œí•˜ë©´, 해당 서비스는 알아서 스스로 중단ë˜ê³ 소멸ë©ë‹ˆë‹¤.</p> -<p class="caution"><strong>주ì˜:</strong> 서비스는 기본ì 으로 ìžì‹ ì´ ì„ ì–¸ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ê°™ì€ -프로세스ì—서 실행ë˜ê¸°ë„ í•˜ê³ í•´ë‹¹ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œì—서 실행ë˜ê¸°ë„ 합니다. ë”°ë¼ì„œ, 사용ìžê°€ -ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티와 ìƒí˜¸ 작용하는 ë™ì•ˆ 서비스가 집약ì ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우, -해당 서비스 ë•Œë¬¸ì— ì•¡í‹°ë¹„í‹° ì„±ëŠ¥ì´ ëŠë ¤ì§€ê²Œ ë©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ ì„±ëŠ¥ì— ì˜í–¥ì„ 미치는 ê²ƒì„ ë°©ì§€í•˜ë ¤ë©´, +<p class="caution"><strong>주ì˜:</strong> 서비스는 기본ì 으로 ìžì‹ ì´ ì„ ì–¸ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ê°™ì€ +프로세스ì—서 실행ë˜ê¸°ë„ í•˜ê³ í•´ë‹¹ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œì—서 실행ë˜ê¸°ë„ 합니다. ë”°ë¼ì„œ, 사용ìžê°€ +ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티와 ìƒí˜¸ 작용하는 ë™ì•ˆ 서비스가 집약ì ì´ê±°ë‚˜ 차단ì ì¸ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우, +해당 서비스 ë•Œë¬¸ì— ì•¡í‹°ë¹„í‹° ì„±ëŠ¥ì´ ëŠë ¤ì§€ê²Œ ë©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ ì„±ëŠ¥ì— ì˜í–¥ì„ 미치는 ê²ƒì„ ë°©ì§€í•˜ë ¤ë©´, 서비스 ë‚´ì—서 새 ìŠ¤ë ˆë“œë¥¼ 시작해야 합니다.</p> <p>기존ì—는 ì‹œìž‘ëœ ì„œë¹„ìŠ¤ë¥¼ ìƒì„±í•˜ê¸° 위해 í™•ìž¥í• ìˆ˜ 있는 í´ëž˜ìŠ¤ê°€ ë‘ ê°œ 있었습니다.</p> <dl> <dt>{@link android.app.Service}</dt> - <dd>ì´ê²ƒì´ ëª¨ë“ ì„œë¹„ìŠ¤ì˜ ê¸°ë³¸ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ 확장하는 경우, ì„œë¹„ìŠ¤ì˜ ëª¨ë“ ìž‘ì—…ì„ ìˆ˜í–‰í• -새 ìŠ¤ë ˆë“œë¥¼ 만드는 ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 서비스가 기본ì 으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œë¥¼ 사용하기 -때문ì¸ë°, ì´ë¡œ ì¸í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 실행 ì¤‘ì¸ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì˜ ì„±ëŠ¥ì´ + <dd>ì´ê²ƒì´ ëª¨ë“ ì„œë¹„ìŠ¤ì˜ ê¸°ë³¸ í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ 확장하는 경우, ì„œë¹„ìŠ¤ì˜ ëª¨ë“ ìž‘ì—…ì„ ìˆ˜í–‰í• +새 ìŠ¤ë ˆë“œë¥¼ 만드는 ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 서비스가 기본ì 으로 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œë¥¼ 사용하기 +때문ì¸ë°, ì´ë¡œ ì¸í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 실행 ì¤‘ì¸ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì˜ ì„±ëŠ¥ì´ ëŠë ¤ì§ˆ 수 있기 때문입니다.</dd> <dt>{@link android.app.IntentService}</dt> - <dd>ì´ê²ƒì€ {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ, ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ -사용하여 ëª¨ë“ ì‹œìž‘ ìš”ì²ì„ ì²˜ë¦¬í•˜ë˜ í•œ ë²ˆì— í•˜ë‚˜ì”© 처리합니다. 서비스가 여러 ê°œì˜ ìš”ì²ì„ + <dd>ì´ê²ƒì€ {@link android.app.Service}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ, ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ +사용하여 ëª¨ë“ ì‹œìž‘ ìš”ì²ì„ ì²˜ë¦¬í•˜ë˜ í•œ ë²ˆì— í•˜ë‚˜ì”© 처리합니다. 서비스가 여러 ê°œì˜ ìš”ì²ì„ ë™ì‹œì— 처리하지 ì•Šì•„ë„ ë˜ëŠ” 경우 ì´ê²ƒì´ ìµœì„ ì˜ ì˜µì…˜ìž…ë‹ˆë‹¤. 해야 í• ì¼ì€ {@link -android.app.IntentService#onHandleIntent onHandleIntent()}를 구현하는 것ë¿ìœ¼ë¡œ, ì´ê²ƒì´ ê° ì‹œìž‘ ìš”ì²ì— 대한 ì¸í…트를 ìˆ˜ì‹ í•˜ì—¬ +android.app.IntentService#onHandleIntent onHandleIntent()}를 구현하는 것ë¿ìœ¼ë¡œ, ì´ê²ƒì´ ê° ì‹œìž‘ ìš”ì²ì— 대한 ì¸í…트를 ìˆ˜ì‹ í•˜ì—¬ 개발ìžëŠ” ë°°ê²½ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다.</dd> </dl> -<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ì´ì™€ ê°™ì€ í´ëž˜ìФ 중 하나를 사용하여 서비스를 구현하는 ë°©ë²•ì„ +<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ì´ì™€ ê°™ì€ í´ëž˜ìФ 중 하나를 사용하여 서비스를 구현하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> <h3 id="ExtendingIntentService">IntentService í´ëž˜ìФ 확장하기</h3> <p>ëŒ€ë¶€ë¶„ì˜ ì‹œìž‘ëœ ì„œë¹„ìŠ¤ëŠ” 여러 ê°œì˜ ìš”ì²ì„ ë™ì‹œì— 처리하지 ì•Šì•„ë„ ë˜ê¸° ë•Œë¬¸ì— -(ì´ëŠ” 사실 위험한 다중 ìŠ¤ë ˆë”© ì‹œë‚˜ë¦¬ì˜¤ì¼ ìˆ˜ 있습니다), 서비스를 êµ¬í˜„í• ë•Œì—는 +(ì´ëŠ” 사실 위험한 다중 ìŠ¤ë ˆë”© ì‹œë‚˜ë¦¬ì˜¤ì¼ ìˆ˜ 있습니다), 서비스를 êµ¬í˜„í• ë•Œì—는 {@link android.app.IntentService} í´ëž˜ìŠ¤ë¥¼ 사용하는 ê²ƒì´ ìµœì„ ì˜ ë°©ì•ˆì¼ ê²ƒìž…ë‹ˆë‹¤.</p> <p>{@link android.app.IntentService}는 다ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.</p> <ul> <li>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìŠ¤ë ˆë“œì™€ëŠ” 별ë„로 {@link -android.app.Service#onStartCommand onStartCommand()}ì— ì „ë‹¬ëœ ëª¨ë“ ì¸í…트를 실행하는 기본 ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ +android.app.Service#onStartCommand onStartCommand()}ì— ì „ë‹¬ëœ ëª¨ë“ ì¸í…트를 실행하는 기본 ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•©ë‹ˆë‹¤.</li> <li>한 ë²ˆì— ì¸í…트를 하나씩 {@link -android.app.IntentService#onHandleIntent onHandleIntent()} êµ¬í˜„ì— ì „ë‹¬í•˜ëŠ” 작업 ëŒ€ê¸°ì—´ì„ ìƒì„±í•˜ë¯€ë¡œ 다중 ìŠ¤ë ˆë”©ì— ëŒ€í•´ ì—¼ë ¤í• í•„ìš”ê°€ +android.app.IntentService#onHandleIntent onHandleIntent()} êµ¬í˜„ì— ì „ë‹¬í•˜ëŠ” 작업 ëŒ€ê¸°ì—´ì„ ìƒì„±í•˜ë¯€ë¡œ 다중 ìŠ¤ë ˆë”©ì— ëŒ€í•´ ì—¼ë ¤í• í•„ìš”ê°€ ì „í˜€ 없습니다.</li> - <li>시작 ìš”ì²ì´ ëª¨ë‘ ì²˜ë¦¬ëœ í›„ 서비스를 중단하므로 개발ìžê°€ + <li>시작 ìš”ì²ì´ ëª¨ë‘ ì²˜ë¦¬ëœ í›„ 서비스를 중단하므로 개발ìžê°€ {@link android.app.Service#stopSelf}를 í˜¸ì¶œí• í•„ìš”ê°€ ì „í˜€ 없습니다.</li> - <li>{@link android.app.IntentService#onBind onBind()}ì˜ ê¸°ë³¸ êµ¬í˜„ì„ ì œê³µí•˜ì—¬ nullì„ + <li>{@link android.app.IntentService#onBind onBind()}ì˜ ê¸°ë³¸ êµ¬í˜„ì„ ì œê³µí•˜ì—¬ nullì„ ë°˜í™˜í•˜ë„ë¡ í•©ë‹ˆë‹¤.</li> <li>{@link android.app.IntentService#onStartCommand onStartCommand()}ì˜ ê¸°ë³¸ êµ¬í˜„ì„ ì œê³µí•˜ì—¬ ì¸í…트를 작업 ëŒ€ê¸°ì—´ì— ë³´ë‚´ê³ , 다ìŒìœ¼ë¡œ {@link @@ -301,7 +301,7 @@ android.app.IntentService#onHandleIntent onHandleIntent()} êµ¬í˜„ì— ë³´ë‚´ë„ë¡ </ul> <p>ì´ ëª¨ë“ ê²ƒì€ ê²°ë¡ ì 으로 개발ìžê°€ ì§ì ‘ í• ì¼ì€ í´ë¼ì´ì–¸íŠ¸ê°€ ì œê³µí•œ ìž‘ì—…ì„ ìˆ˜í–‰í• {@link -android.app.IntentService#onHandleIntent onHandleIntent()}를 구현하는 것ë¿ì´ë¼ëŠ” 사실로 +android.app.IntentService#onHandleIntent onHandleIntent()}를 구현하는 것ë¿ì´ë¼ëŠ” 사실로 ì´ì–´ì§‘니다. (다만, ì„œë¹„ìŠ¤ì— ëŒ€í•´ ìž‘ì€ ìƒì„±ìžë¥¼ ì œê³µí•´ì•¼ í•˜ê¸°ë„ í•©ë‹ˆë‹¤.)</p> <p>다ìŒì€ {@link android.app.IntentService}ì˜ êµ¬í˜„ì„ ì˜ˆì‹œë¡œ 나타낸 것입니다.</p> @@ -345,10 +345,10 @@ android.app.IntentService#onHandleIntent onHandleIntent()} 구현ë¿ì´ì£ .</p> <p>다른 콜백 ë©”ì„œë“œë„ ìž¬ì •ì˜í•˜ê¸°ë¡œ ê²°ì •í•˜ëŠ” 경우-예를 들어 {@link android.app.IntentService#onCreate onCreate()}, {@link android.app.IntentService#onStartCommand onStartCommand()} ë˜ëŠ” {@link -android.app.IntentService#onDestroy onDestroy()}-ìŠˆí¼ êµ¬í˜„ì„ ê¼ í˜¸ì¶œí•´ì•¼ 합니다. +android.app.IntentService#onDestroy onDestroy()}-ìŠˆí¼ êµ¬í˜„ì„ ê¼ í˜¸ì¶œí•´ì•¼ 합니다. 그래야 {@link android.app.IntentService}ê°€ ìž‘ì—…ìž ìŠ¤ë ˆë“œì˜ ìˆ˜ëª…ì„ ì ì ˆí•˜ê²Œ ì²˜ë¦¬í• ìˆ˜ 있습니다.</p> -<p>예를 들어 {@link android.app.IntentService#onStartCommand onStartCommand()}는 반드시 +<p>예를 들어 {@link android.app.IntentService#onStartCommand onStartCommand()}는 반드시 기본 êµ¬í˜„ì„ ë°˜í™˜í•´ì•¼ 합니다(ì´ë¡œì¨ ì¸í…트가 {@link android.app.IntentService#onHandleIntent onHandleIntent()}로 ì „ë‹¬ë˜ëŠ” 것입니다).</p> @@ -360,25 +360,25 @@ public int onStartCommand(Intent intent, int flags, int startId) { } </pre> -<p>{@link android.app.IntentService#onHandleIntent onHandleIntent()} ì™¸ì— ìŠˆí¼ í´ëž˜ìŠ¤ë¥¼ +<p>{@link android.app.IntentService#onHandleIntent onHandleIntent()} ì™¸ì— ìŠˆí¼ í´ëž˜ìŠ¤ë¥¼ 호출하지 ì•Šì•„ë„ ë˜ëŠ” ìœ ì¼í•œ 메서드는 {@link android.app.IntentService#onBind onBind()}입니다(다만 ì´ë¥¼ 구현하는 ê²ƒì€ ì„œë¹„ìŠ¤ê°€ ë°”ì¸ë”©ì„ í—ˆìš©í• ë•Œì—ë§Œ 필요합니다).</p> -<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 기본 {@link android.app.Service} -í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í• ë•Œ ê°™ì€ ì¢…ë¥˜ì˜ ì„œë¹„ìŠ¤ë¥¼ 구현하는 ë°©ë²•ì„ ë°°ìš°ê²Œ ë©ë‹ˆë‹¤. ì´ë•Œì—는 코드가 훨씬 ë§Žì´ í•„ìš”í•˜ì§€ë§Œ, +<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 기본 {@link android.app.Service} +í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í• ë•Œ ê°™ì€ ì¢…ë¥˜ì˜ ì„œë¹„ìŠ¤ë¥¼ 구현하는 ë°©ë²•ì„ ë°°ìš°ê²Œ ë©ë‹ˆë‹¤. ì´ë•Œì—는 코드가 훨씬 ë§Žì´ í•„ìš”í•˜ì§€ë§Œ, ë™ì‹œ 시작 ìš”ì²ì„ 처리해야 하는 경우 ì´ê²ƒì´ ì ì ˆí• ìˆ˜ 있습니다.</p> <h3 id="ExtendingService">서비스 í´ëž˜ìФ 확장하기</h3> -<p>ì´ì „ 섹션ì—서 본 것과 ê°™ì´ {@link android.app.IntentService}를 사용하면 -ì‹œìž‘ëœ ì„œë¹„ìŠ¤ êµ¬í˜„ì´ ë§¤ìš° 단순해집니다. 하지만 서비스가 다중 ìŠ¤ë ˆë”©ì„ -수행해야 하는 경우(작업 ëŒ€ê¸°ì—´ì„ í†µí•´ 시작 ìš”ì²ì„ 처리하는 ëŒ€ì‹ ), 그때는 +<p>ì´ì „ 섹션ì—서 본 것과 ê°™ì´ {@link android.app.IntentService}를 사용하면 +ì‹œìž‘ëœ ì„œë¹„ìŠ¤ êµ¬í˜„ì´ ë§¤ìš° 단순해집니다. 하지만 서비스가 다중 ìŠ¤ë ˆë”©ì„ +수행해야 하는 경우(작업 ëŒ€ê¸°ì—´ì„ í†µí•´ 시작 ìš”ì²ì„ 처리하는 ëŒ€ì‹ ), 그때는 {@link android.app.Service} í´ëž˜ìŠ¤ë¥¼ 확장하여 ê° ì¸í…트를 처리하게 í• ìˆ˜ 있습니다.</p> <p>비êµë¥¼ 위해 ë‹¤ìŒ ì˜ˆì‹œì˜ ì½”ë“œë¥¼ ë³´ê² ìŠµë‹ˆë‹¤. ì´ëŠ” {@link android.app.Service} í´ëž˜ìŠ¤ì˜ êµ¬í˜„ìœ¼ë¡œ, ìœ„ì˜ ì˜ˆì‹œì—서 {@link -android.app.IntentService}를 사용하여 수행한 것과 ë˜‘ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. 바꿔 ë§í•˜ë©´ ê° ì‹œìž‘ ìš”ì²ì— 대해 +android.app.IntentService}를 사용하여 수행한 것과 ë˜‘ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. 바꿔 ë§í•˜ë©´ ê° ì‹œìž‘ ìš”ì²ì— 대해 ìž‘ì—…ìž ìŠ¤ë ˆë“œë¥¼ 사용하여 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê³ í•œ ë²ˆì— ìš”ì²ì„ 하나씩만 처리한다는 뜻입니다.</p> <pre> @@ -455,46 +455,46 @@ public class HelloService extends Service { <p>보시다시피 {@link android.app.IntentService}를 ì‚¬ìš©í• ë•Œë³´ë‹¤ 훨씬 ì†ì´ ë§Žì´ ê°‘ë‹ˆë‹¤.</p> <p>그러나, ê° í˜¸ì¶œì„ {@link android.app.Service#onStartCommand -onStartCommand()}로 ì§ì ‘ ì²˜ë¦¬í• ìˆ˜ 있기 ë•Œë¬¸ì— ì—¬ëŸ¬ ê°œì˜ ìš”ì²ì„ ë™ì‹œì— ìˆ˜í–‰í• ìˆ˜ 있습니다. ì´ ì˜ˆì‹œëŠ” ê·¸ê²ƒì„ -보여주는 ê²ƒì€ ì•„ë‹ˆì§€ë§Œ, 그런 ìž‘ì—…ì„ ì›í•˜ëŠ” 경우 ê° ìš”ì²ì— 대해 새 ìŠ¤ë ˆë“œë¥¼ +onStartCommand()}로 ì§ì ‘ ì²˜ë¦¬í• ìˆ˜ 있기 ë•Œë¬¸ì— ì—¬ëŸ¬ ê°œì˜ ìš”ì²ì„ ë™ì‹œì— ìˆ˜í–‰í• ìˆ˜ 있습니다. ì´ ì˜ˆì‹œëŠ” ê·¸ê²ƒì„ +보여주는 ê²ƒì€ ì•„ë‹ˆì§€ë§Œ, 그런 ìž‘ì—…ì„ ì›í•˜ëŠ” 경우 ê° ìš”ì²ì— 대해 새 ìŠ¤ë ˆë“œë¥¼ 하나씩 ìƒì„±í•œ ë‹¤ìŒ ê³§ë°”ë¡œ 실행하면 ë©ë‹ˆë‹¤(ì´ì „ ìš”ì²ì´ ëë‚ ë•Œê¹Œì§€ 기다리는 ëŒ€ì‹ ).</p> -<p>{@link android.app.Service#onStartCommand onStartCommand()} 메서드가 반드시 -ì •ìˆ˜ë¥¼ 반환해야 한다는 ì‚¬ì‹¤ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì •ìˆ˜ëŠ” ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 중단시킨 경우 ì‹œìŠ¤í…œì´ í•´ë‹¹ 서비스를 +<p>{@link android.app.Service#onStartCommand onStartCommand()} 메서드가 반드시 +ì •ìˆ˜ë¥¼ 반환해야 한다는 ì‚¬ì‹¤ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì •ìˆ˜ëŠ” ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 중단시킨 경우 ì‹œìŠ¤í…œì´ í•´ë‹¹ 서비스를 계ì†í•˜ëŠ” ë°©ë²•ì— ëŒ€í•´ 설명하는 값입니다(위ì—서 논한 바와 ê°™ì´ {@link -android.app.IntentService}ì˜ ê¸°ë³¸ êµ¬í˜„ì´ ì´ê²ƒì„ ê°œë°œìž ëŒ€ì‹ ì²˜ë¦¬í•´ì¤ë‹ˆë‹¤. 개발ìžê°€ ì´ë¥¼ ìˆ˜ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤). -{@link android.app.Service#onStartCommand onStartCommand()}ë¡œë¶€í„°ì˜ ë°˜í™˜ ê°’ì€ ë°˜ë“œì‹œ +android.app.IntentService}ì˜ ê¸°ë³¸ êµ¬í˜„ì´ ì´ê²ƒì„ ê°œë°œìž ëŒ€ì‹ ì²˜ë¦¬í•´ì¤ë‹ˆë‹¤. 개발ìžê°€ ì´ë¥¼ ìˆ˜ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤). +{@link android.app.Service#onStartCommand onStartCommand()}ë¡œë¶€í„°ì˜ ë°˜í™˜ ê°’ì€ ë°˜ë“œì‹œ ë‹¤ìŒ ìƒìˆ˜ 중 하나여야 합니다.</p> <dl> <dt>{@link android.app.Service#START_NOT_STICKY}</dt> <dd>ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ {@link android.app.Service#onStartCommand -onStartCommand()} 반환 í›„ì— ì¤‘ë‹¨ì‹œí‚¤ë©´ 서비스를 재ìƒì„±í•˜ë©´ <em>안 ë©ë‹ˆë‹¤.</em> 다만 ì „ë‹¬í• -보류 ì¸í…트가 있는 경우는 예외입니다. ì´ê²ƒì€ 서비스가 불필요하게 실행ë˜ëŠ” ì¼ì„ í”¼í• ìˆ˜ 있는 가장 ì•ˆì „í•œ 옵션ì´ë©°, +onStartCommand()} 반환 í›„ì— ì¤‘ë‹¨ì‹œí‚¤ë©´ 서비스를 재ìƒì„±í•˜ë©´ <em>안 ë©ë‹ˆë‹¤.</em> 다만 ì „ë‹¬í• +보류 ì¸í…트가 있는 경우는 예외입니다. ì´ê²ƒì€ 서비스가 불필요하게 실행ë˜ëŠ” ì¼ì„ í”¼í• ìˆ˜ 있는 가장 ì•ˆì „í•œ 옵션ì´ë©°, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 완료ë˜ì§€ ì•Šì€ ëª¨ë“ ìž‘ì—…ì„ ë‹¨ìˆœížˆ ìž¬ì‹œìž‘í• ìˆ˜ ìžˆì„ ë•Œ 좋습니다.</dd> <dt>{@link android.app.Service#START_STICKY}</dt> <dd>ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ {@link android.app.Service#onStartCommand onStartCommand()} 반환 í›„ì— ì¤‘ë‹¨ì‹œí‚¤ëŠ” 경우, 서비스를 재ìƒì„±í•˜ê³ {@link -android.app.Service#onStartCommand onStartCommand()}를 í˜¸ì¶œí•˜ë˜ ë§ˆì§€ë§‰ ì¸í…트를 다시 ì „ë‹¬í•˜ì§€ëŠ” <em>마ì‹ì‹œì˜¤.</em> -ê·¸ ëŒ€ì‹ , ì‹œìŠ¤í…œì´ null ì¸í…트로 {@link android.app.Service#onStartCommand onStartCommand()}를 -호출합니다. 다만 서비스를 ì‹œìž‘í• ë³´ë¥˜ ì¸í…트가 있는 ê²½ìš°ë§Œì€ ì˜ˆì™¸ì´ë©°, ì´ëŸ´ 때ì—는 -그러한 ì¸í…트를 ì „ë‹¬í•©ë‹ˆë‹¤. ì´ê²ƒì€ ëª…ë ¹ì„ ì‹¤í–‰í•˜ì§€ëŠ” 않지만 무기한으로 실행 중ì´ë©° ìž‘ì—…ì„ ê¸°ë‹¤ë¦¬ê³ ìžˆëŠ” +android.app.Service#onStartCommand onStartCommand()}를 í˜¸ì¶œí•˜ë˜ ë§ˆì§€ë§‰ ì¸í…트를 다시 ì „ë‹¬í•˜ì§€ëŠ” <em>마ì‹ì‹œì˜¤.</em> +ê·¸ ëŒ€ì‹ , ì‹œìŠ¤í…œì´ null ì¸í…트로 {@link android.app.Service#onStartCommand onStartCommand()}를 +호출합니다. 다만 서비스를 ì‹œìž‘í• ë³´ë¥˜ ì¸í…트가 있는 ê²½ìš°ë§Œì€ ì˜ˆì™¸ì´ë©°, ì´ëŸ´ 때ì—는 +그러한 ì¸í…트를 ì „ë‹¬í•©ë‹ˆë‹¤. ì´ê²ƒì€ ëª…ë ¹ì„ ì‹¤í–‰í•˜ì§€ëŠ” 않지만 무기한으로 실행 중ì´ë©° ìž‘ì—…ì„ ê¸°ë‹¤ë¦¬ê³ ìžˆëŠ” 미디어 í”Œë ˆì´ì–´(ë˜ëŠ” 그와 비슷한 서비스)ì— ì 합합니다.</dd> <dt>{@link android.app.Service#START_REDELIVER_INTENT}</dt> <dd>ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ {@link android.app.Service#onStartCommand onStartCommand()} 반환 í›„ì— ì¤‘ë‹¨ì‹œí‚¤ëŠ” 경우, 서비스를 재ìƒì„±í•˜ê³ ì„œë¹„ìŠ¤ì— ì „ë‹¬ëœ ë§ˆì§€ë§‰ ì¸í…트로 {@link -android.app.Service#onStartCommand onStartCommand()}를 -호출하ì‹ì‹œì˜¤. ëª¨ë“ ë³´ë¥˜ ì¸í…트가 차례로 ì „ë‹¬ë©ë‹ˆë‹¤. ì´ê²ƒì€ 즉시 재개ë˜ì–´ì•¼ 하는 ìž‘ì—…ì„ +android.app.Service#onStartCommand onStartCommand()}를 +호출하ì‹ì‹œì˜¤. ëª¨ë“ ë³´ë¥˜ ì¸í…트가 차례로 ì „ë‹¬ë©ë‹ˆë‹¤. ì´ê²ƒì€ 즉시 재개ë˜ì–´ì•¼ 하는 ìž‘ì—…ì„ ëŠ¥ë™ì 으로 수행 ì¤‘ì¸ ì„œë¹„ìŠ¤(예를 들어 íŒŒì¼ ë‹¤ìš´ë¡œë“œ 등)ì— ì 합합니다.</dd> </dl> -<p>ì´ëŸ¬í•œ 반환 ê°’ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ ê° ìƒìˆ˜ì— 대해 ë§í¬ë¡œ ì—°ê²°ëœ ì°¸ì¡° 문서를 +<p>ì´ëŸ¬í•œ 반환 ê°’ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ ê° ìƒìˆ˜ì— 대해 ë§í¬ë¡œ ì—°ê²°ëœ ì°¸ì¡° 문서를 확ì¸í•˜ì‹ì‹œì˜¤.</p> <h3 id="StartingAService">서비스 시작</h3> -<p>액티비티나 다른 구성 요소ì—서 서비스를 ì‹œìž‘í•˜ë ¤ë©´ +<p>액티비티나 다른 구성 요소ì—서 서비스를 ì‹œìž‘í•˜ë ¤ë©´ {@link android.content.Intent}를(ì‹œìž‘í• ì„œë¹„ìŠ¤ë¥¼ 나타냄) {@link android.content.Context#startService startService()}ì— ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. Android ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onStartCommand onStartCommand()} 메서드를 호출하여 ì—¬ê¸°ì— {@link @@ -510,53 +510,53 @@ Intent intent = new Intent(this, HelloService.class); startService(intent); </pre> -<p>{@link android.content.Context#startService startService()} 메서드가 즉시 반환ë˜ë©° +<p>{@link android.content.Context#startService startService()} 메서드가 즉시 반환ë˜ë©° Android ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onStartCommand onStartCommand()} 메서드를 호출합니다. 서비스가 ì´ë¯¸ 실행 중ì´ì§€ ì•Šì€ ê²½ìš°, ì‹œìŠ¤í…œì€ ìš°ì„ {@link android.app.Service#onCreate onCreate()}를 í˜¸ì¶œí•˜ê³ , 다ìŒìœ¼ë¡œ {@link android.app.Service#onStartCommand onStartCommand()}를 호출합니다.</p> <p>서비스가 ë°”ì¸ë”©ë„ ì œê³µí•˜ì§€ 않는 경우, {@link -android.content.Context#startService startService()}와 함께 ì „ë‹¬ëœ ì¸í…트가 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소와 서비스 사ì´ì˜ -ìœ ì¼í•œ í†µì‹ ë°©ë²•ìž…ë‹ˆë‹¤. 그러나 서비스가 결과를 ëŒë ¤ë³´ë‚´ê¸°ë¥¼ ì›í•˜ëŠ” 경우, 서비스를 시작한 -í´ë¼ì´ì–¸íŠ¸ê°€ 브로드ìºìŠ¤íŠ¸ë¥¼ 위해 {@link android.app.PendingIntent}를 -만들 수 ìžˆê³ ({@link android.app.PendingIntent#getBroadcast getBroadcast()} 사용) ì´ë¥¼ 서비스를 시작한 -{@link android.content.Intent} ë‚´ì˜ ì„œë¹„ìŠ¤ì— ì „ë‹¬í• ìˆ˜ 있습니다. 그러면 서비스가 +android.content.Context#startService startService()}와 함께 ì „ë‹¬ëœ ì¸í…트가 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소와 서비스 사ì´ì˜ +ìœ ì¼í•œ í†µì‹ ë°©ë²•ìž…ë‹ˆë‹¤. 그러나 서비스가 결과를 ëŒë ¤ë³´ë‚´ê¸°ë¥¼ ì›í•˜ëŠ” 경우, 서비스를 시작한 +í´ë¼ì´ì–¸íŠ¸ê°€ 브로드ìºìŠ¤íŠ¸ë¥¼ 위해 {@link android.app.PendingIntent}를 +만들 수 ìžˆê³ ({@link android.app.PendingIntent#getBroadcast getBroadcast()} 사용) ì´ë¥¼ 서비스를 시작한 +{@link android.content.Intent} ë‚´ì˜ ì„œë¹„ìŠ¤ì— ì „ë‹¬í• ìˆ˜ 있습니다. 그러면 서비스가 ì´ ë¸Œë¡œë“œìºìŠ¤íŠ¸ë¥¼ 사용하여 결과를 ì „ë‹¬í• ìˆ˜ 있게 ë©ë‹ˆë‹¤.</p> -<p>서비스를 시작하기 위한 여러 ê°œì˜ ìš”ì²ì€ ì„œë¹„ìŠ¤ì˜ -{@link android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ ìƒì‘하는 여러 ê°œì˜ í˜¸ì¶œì´ë¼ëŠ” 결과를 낳습니다. 하지만, 서비스를 ì¤‘ë‹¨í•˜ë ¤ë©´ +<p>서비스를 시작하기 위한 여러 ê°œì˜ ìš”ì²ì€ ì„œë¹„ìŠ¤ì˜ +{@link android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ ìƒì‘하는 여러 ê°œì˜ í˜¸ì¶œì´ë¼ëŠ” 결과를 낳습니다. 하지만, 서비스를 ì¤‘ë‹¨í•˜ë ¤ë©´ ì´ë¥¼ 중단하ë¼ëŠ” ìš”ì² í•˜ë‚˜({@link android.app.Service#stopSelf stopSelf()} ë˜ëŠ” {@link android.content.Context#stopService stopService()} 사용)ë§Œ 있으면 ë©ë‹ˆë‹¤.</p> <h3 id="Stopping">서비스 중단</h3> -<p>ì‹œìž‘ëœ ì„œë¹„ìŠ¤ëŠ” ìžì‹ ë§Œì˜ ìˆ˜ëª… 주기를 ì§ì ‘ 관리해야 합니다. 다시 ë§í•´, ì‹œìŠ¤í…œì´ -서비스를 중단하거나 소멸시키지 않는다는 뜻입니다. 다만 시스템 메모리를 회복해야 í•˜ê³ ì„œë¹„ìŠ¤ê°€ -{@link android.app.Service#onStartCommand onStartCommand()} 반환 후ì—ë„ ê³„ì† ì‹¤í–‰ë˜ëŠ” 경우는 예외입니다. ë”°ë¼ì„œ, -서비스는 {@link android.app.Service#stopSelf stopSelf()}를 호출하여 스스로 중단시켜야 í•˜ê³ , 아니면 +<p>ì‹œìž‘ëœ ì„œë¹„ìŠ¤ëŠ” ìžì‹ ë§Œì˜ ìˆ˜ëª… 주기를 ì§ì ‘ 관리해야 합니다. 다시 ë§í•´, ì‹œìŠ¤í…œì´ +서비스를 중단하거나 소멸시키지 않는다는 뜻입니다. 다만 시스템 메모리를 회복해야 í•˜ê³ ì„œë¹„ìŠ¤ê°€ +{@link android.app.Service#onStartCommand onStartCommand()} 반환 후ì—ë„ ê³„ì† ì‹¤í–‰ë˜ëŠ” 경우는 예외입니다. ë”°ë¼ì„œ, +서비스는 {@link android.app.Service#stopSelf stopSelf()}를 호출하여 스스로 중단시켜야 í•˜ê³ , 아니면 다른 구성 요소가 {@link android.content.Context#stopService stopService()}를 호출하여 ì´ë¥¼ 중단시킬 수 있습니다.</p> <p>ì¼ë‹¨ {@link android.app.Service#stopSelf stopSelf()} ë˜ëŠ” {@link -android.content.Context#stopService stopService()}로 중단하기를 ìš”ì²í•˜ê³ 나면 ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 가능한 한 빨리 +android.content.Context#stopService stopService()}로 중단하기를 ìš”ì²í•˜ê³ 나면 ì‹œìŠ¤í…œì´ ì„œë¹„ìŠ¤ë¥¼ 가능한 한 빨리 소멸시킵니다.</p> <p>그러나, 서비스가 {@link -android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ ìš”ì²ì„ ë™ì‹œì— 여러 ê°œ 처리하기를 ë°”ë¼ëŠ” 경우ë¼ë©´ 시작 ìš”ì² ì²˜ë¦¬ë¥¼ 완료한 ë’¤ì—ë„ -서비스를 중단하면 안 ë©ë‹ˆë‹¤. ê·¸ ì´í›„ 새 시작 ìš”ì²ì„ ë°›ì•˜ì„ ìˆ˜ 있기 -때문입니다(첫 ìš”ì² ì¢…ë£Œ ì‹œì— ì¤‘ë‹¨í•˜ë©´ ë‘ ë²ˆì§¸ ìš”ì²ì„ 종료시킵니다). ì´ ë¬¸ì œë¥¼ -í”¼í•˜ë ¤ë©´, {@link android.app.Service#stopSelf(int)}를 사용하여 서비스를 +android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ ìš”ì²ì„ ë™ì‹œì— 여러 ê°œ 처리하기를 ë°”ë¼ëŠ” 경우ë¼ë©´ 시작 ìš”ì² ì²˜ë¦¬ë¥¼ 완료한 ë’¤ì—ë„ +서비스를 중단하면 안 ë©ë‹ˆë‹¤. ê·¸ ì´í›„ 새 시작 ìš”ì²ì„ ë°›ì•˜ì„ ìˆ˜ 있기 +때문입니다(첫 ìš”ì² ì¢…ë£Œ ì‹œì— ì¤‘ë‹¨í•˜ë©´ ë‘ ë²ˆì§¸ ìš”ì²ì„ 종료시킵니다). ì´ ë¬¸ì œë¥¼ +í”¼í•˜ë ¤ë©´, {@link android.app.Service#stopSelf(int)}를 사용하여 서비스를 중단시키ë¼ëŠ” 개발ìžì˜ ìš”ì²ì´ í•ìƒ ìµœì‹ ì‹œìž‘ ìš”ì²ì— 기반하ë„ë¡ í•´ì•¼ 합니다. 다시 ë§í•´, {@link -android.app.Service#stopSelf(int)}를 í˜¸ì¶œí• ë•Œë©´ 시작 ìš”ì²ì˜ ID({@link android.app.Service#onStartCommand onStartCommand()}ì— ì „ë‹¬ëœ -<code>startId</code>)를 ì „ë‹¬í•˜ê²Œ ë©ë‹ˆë‹¤. ì—¬ê¸°ì— ì¤‘ë‹¨ ìš”ì²ì´ +android.app.Service#stopSelf(int)}를 í˜¸ì¶œí• ë•Œë©´ 시작 ìš”ì²ì˜ ID({@link android.app.Service#onStartCommand onStartCommand()}ì— ì „ë‹¬ëœ +<code>startId</code>)를 ì „ë‹¬í•˜ê²Œ ë©ë‹ˆë‹¤. ì—¬ê¸°ì— ì¤‘ë‹¨ ìš”ì²ì´ 부합ë©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ê°œë°œìžê°€ {@link android.app.Service#stopSelf(int)}를 í˜¸ì¶œí• ìˆ˜ 있기 ì „ì— ì„œë¹„ìŠ¤ê°€ 새 시작 ìš”ì²ì„ ë°›ì€ ê²½ìš°, IDê°€ ì¼ì¹˜í•˜ì§€ 않게 ë˜ê³ 서비스는 중단ë˜ì§€ 않습니다.</p> -<p class="caution"><strong>주ì˜:</strong> 서비스가 ìž‘ì—…ì„ ì™„ë£Œí•œ ë‹¤ìŒ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -ì†Œì† ì„œë¹„ìŠ¤ë¥¼ ì¤‘ë‹¨í• ìˆ˜ 있어야 한다는 ì ì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 그래야 시스템 리소스 ë‚비를 í”¼í•˜ê³ ë°°í„°ë¦¬ ì „ë ¥ 소모를 ì¤„ì¼ ìˆ˜ 있습니다. 필요한 경우 +<p class="caution"><strong>주ì˜:</strong> 서비스가 ìž‘ì—…ì„ ì™„ë£Œí•œ ë‹¤ìŒ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +ì†Œì† ì„œë¹„ìŠ¤ë¥¼ ì¤‘ë‹¨í• ìˆ˜ 있어야 한다는 ì ì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 그래야 시스템 리소스 ë‚비를 í”¼í•˜ê³ ë°°í„°ë¦¬ ì „ë ¥ 소모를 ì¤„ì¼ ìˆ˜ 있습니다. 필요한 경우 다른 구성 ìš”ì†Œë„ ì„œë¹„ìŠ¤ë¥¼ 중단시킬 수 있습니다. {@link -android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤. ì„œë¹„ìŠ¤ì— ëŒ€í•´ ë°”ì¸ë”©ì„ 활성화하ë”ë¼ë„, +android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤. ì„œë¹„ìŠ¤ì— ëŒ€í•´ ë°”ì¸ë”©ì„ 활성화하ë”ë¼ë„, 서비스가 {@link android.app.Service#onStartCommand onStartCommand()}ë¡œì˜ í˜¸ì¶œì„ í•œ 번ì´ë¼ë„ 받았으면 í•ìƒ ì„œë¹„ìŠ¤ë¥¼ ì§ì ‘ 중단시켜야 합니다.</p> @@ -571,32 +571,32 @@ android.content.Context#bindService bindService()}를 호출하여 오래 ì§€ì† (ë˜í•œ ë³´í†µì€ êµ¬ì„± 요소가 {@link android.content.Context#startService startService()}를 호출하여 서비스를 <em>시작</em>하는 ê²ƒì„ í—ˆìš©í•˜ì§€ 않습니다).</p> -<p>액티비티와 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소ì—서 서비스와 ìƒí˜¸ 작용하기를 ì›í•˜ëŠ” 경우 -ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•´ì•¼ 합니다. 아니면 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기능 몇 가지를 프로세스 ê°„ í†µì‹ (IPC)ì„ í†µí•´ +<p>액티비티와 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소ì—서 서비스와 ìƒí˜¸ 작용하기를 ì›í•˜ëŠ” 경우 +ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•´ì•¼ 합니다. 아니면 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기능 몇 가지를 프로세스 ê°„ í†µì‹ (IPC)ì„ í†µí•´ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë…¸ì¶œí•˜ê³ ìž í•˜ëŠ” 경우ì—ë„ ì¢‹ìŠµë‹ˆë‹¤.</p> <p>ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•˜ë ¤ë©´ {@link -android.app.Service#onBind onBind()} 콜백 메서드를 구현하여 ì„œë¹„ìŠ¤ì™€ì˜ í†µì‹ ì„ ìœ„í•œ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” -{@link android.os.IBinder}를 반환하ë„ë¡ í•´ì•¼ 합니다. 그러면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 -{@link android.content.Context#bindService bindService()}를 호출하여 해당 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ê²€ìƒ‰í•˜ê³ , ì„œë¹„ìŠ¤ì— ìžˆëŠ” 메서드를 -호출하기 ì‹œìž‘í• ìˆ˜ 있습니다. 서비스는 ìžì‹ ì—게 ë°”ì¸ë”©ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì—게 ë„ì›€ì´ ë˜ê¸° 위해서만 -존재하는 것ì´ë¯€ë¡œ, ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ëœ 구성 요소가 없으면 ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다(ë°”ì¸ë”©ëœ 서비스는 ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì²˜ëŸ¼ -{@link android.app.Service#onStartCommand onStartCommand()}를 통해 +android.app.Service#onBind onBind()} 콜백 메서드를 구현하여 ì„œë¹„ìŠ¤ì™€ì˜ í†µì‹ ì„ ìœ„í•œ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” +{@link android.os.IBinder}를 반환하ë„ë¡ í•´ì•¼ 합니다. 그러면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 +{@link android.content.Context#bindService bindService()}를 호출하여 해당 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ê²€ìƒ‰í•˜ê³ , ì„œë¹„ìŠ¤ì— ìžˆëŠ” 메서드를 +호출하기 ì‹œìž‘í• ìˆ˜ 있습니다. 서비스는 ìžì‹ ì—게 ë°”ì¸ë”©ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소ì—게 ë„ì›€ì´ ë˜ê¸° 위해서만 +존재하는 것ì´ë¯€ë¡œ, ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ëœ 구성 요소가 없으면 ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다(ë°”ì¸ë”©ëœ 서비스는 ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì²˜ëŸ¼ +{@link android.app.Service#onStartCommand onStartCommand()}를 통해 중단시키지 <em>않아ë„</em> ë©ë‹ˆë‹¤).</p> -<p>ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•˜ë ¤ë©´ 가장 ë¨¼ì € 해야 í• ì¼ì€ í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 -í†µì‹ í• ìˆ˜ 있는 ë°©ë²•ì„ ë‚˜íƒ€ë‚´ëŠ” ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 것입니다. 서비스와 í´ë¼ì´ì–¸íЏ 사ì´ì—서 ì“°ì´ëŠ” ì´ ì¸í„°íŽ˜ì´ìŠ¤ëŠ” -반드시 {@link android.os.IBinder}ì˜ êµ¬í˜„ì´ì–´ì•¼ 하며 ì´ë¥¼ +<p>ë°”ì¸ë”©ëœ 서비스를 ìƒì„±í•˜ë ¤ë©´ 가장 ë¨¼ì € 해야 í• ì¼ì€ í´ë¼ì´ì–¸íŠ¸ê°€ 서비스와 +í†µì‹ í• ìˆ˜ 있는 ë°©ë²•ì„ ë‚˜íƒ€ë‚´ëŠ” ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 것입니다. 서비스와 í´ë¼ì´ì–¸íЏ 사ì´ì—서 ì“°ì´ëŠ” ì´ ì¸í„°íŽ˜ì´ìŠ¤ëŠ” +반드시 {@link android.os.IBinder}ì˜ êµ¬í˜„ì´ì–´ì•¼ 하며 ì´ë¥¼ 서비스가 {@link android.app.Service#onBind -onBind()} 콜백 메서드ì—서 반환해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.os.IBinder}를 ìˆ˜ì‹ í•˜ë©´ 해당 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 서비스와 +onBind()} 콜백 메서드ì—서 반환해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.os.IBinder}를 ìˆ˜ì‹ í•˜ë©´ 해당 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 서비스와 ìƒí˜¸ ìž‘ìš©ì„ ì‹œìž‘í• ìˆ˜ 있습니다.</p> -<p>여러 í´ë¼ì´ì–¸íŠ¸ê°€ ì„œë¹„ìŠ¤ì— í•œêº¼ë²ˆì— ë°”ì¸ë”©ë 수 있습니다. í´ë¼ì´ì–¸íŠ¸ê°€ ì„œë¹„ìŠ¤ì™€ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì™„ë£Œí•˜ë©´ ì´ëŠ” -{@link android.content.Context#unbindService unbindService()}를 호출하여 ë°”ì¸ë”©ì„ í•´ì œí•©ë‹ˆë‹¤. ì„œë¹„ìŠ¤ì— +<p>여러 í´ë¼ì´ì–¸íŠ¸ê°€ ì„œë¹„ìŠ¤ì— í•œêº¼ë²ˆì— ë°”ì¸ë”©ë 수 있습니다. í´ë¼ì´ì–¸íŠ¸ê°€ ì„œë¹„ìŠ¤ì™€ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì™„ë£Œí•˜ë©´ ì´ëŠ” +{@link android.content.Context#unbindService unbindService()}를 호출하여 ë°”ì¸ë”©ì„ í•´ì œí•©ë‹ˆë‹¤. ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ëœ í´ë¼ì´ì–¸íŠ¸ê°€ í•˜ë‚˜ë„ ì—†ìœ¼ë©´ ì‹œìŠ¤í…œì´ í•´ë‹¹ 서비스를 소멸시킵니다.</p> -<p>ë°”ì¸ë”©ëœ 서비스를 구현하는 ë°ì—는 여러 가지 ë°©ë²•ì´ ìžˆìœ¼ë©° 그러한 êµ¬í˜„ì€ ì‹œìž‘ëœ ì„œë¹„ìŠ¤ë³´ë‹¤ -훨씬 복잡합니다. ë”°ë¼ì„œ ë°”ì¸ë”©ëœ 서비스 ë…¼ì˜ëŠ” +<p>ë°”ì¸ë”©ëœ 서비스를 구현하는 ë°ì—는 여러 가지 ë°©ë²•ì´ ìžˆìœ¼ë©° 그러한 êµ¬í˜„ì€ ì‹œìž‘ëœ ì„œë¹„ìŠ¤ë³´ë‹¤ +훨씬 복잡합니다. ë”°ë¼ì„œ ë°”ì¸ë”©ëœ 서비스 ë…¼ì˜ëŠ” <a href="{@docRoot}guide/components/bound-services.html">ë°”ì¸ë”©ëœ 서비스</a>ì— ê´€í•œ 별ë„ì˜ ë¬¸ì„œì—서 다룹니다.</p> @@ -605,13 +605,13 @@ onBind()} 콜백 메서드ì—서 반환해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@li <p>서비스는 ì¼ë‹¨ 실행ë˜ê³ 나면 사용ìžì—게 <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">알림 메시지</a> ë˜ëŠ” <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 알림</a> ë“±ì„ ì‚¬ìš©í•´ ì´ë²¤íŠ¸ë¥¼ 알릴 수 있습니다.</p> -<p>알림 메시지란 현재 ì°½ì˜ í‘œë©´ì— ìž ì‹œ 나타났다가 사ë¼ì§€ëŠ” 메시지ì´ê³ , -ìƒíƒœ 표시줄 ì•Œë¦¼ì€ ìƒíƒœ í‘œì‹œì¤„ì— ë©”ì‹œì§€ê°€ 담긴 ì•„ì´ì½˜ì„ ì œê³µí•˜ì—¬ 사용ìžê°€ ì´ë¥¼ ì„ íƒí•˜ì—¬ +<p>알림 메시지란 현재 ì°½ì˜ í‘œë©´ì— ìž ì‹œ 나타났다가 사ë¼ì§€ëŠ” 메시지ì´ê³ , +ìƒíƒœ 표시줄 ì•Œë¦¼ì€ ìƒíƒœ í‘œì‹œì¤„ì— ë©”ì‹œì§€ê°€ 담긴 ì•„ì´ì½˜ì„ ì œê³µí•˜ì—¬ 사용ìžê°€ ì´ë¥¼ ì„ íƒí•˜ì—¬ 조치를 ì·¨í• ìˆ˜ 있게 하는 것입니다(예: 액티비티 시작).</p> <p>보통, ì¼ì¢…ì˜ ë°°ê²½ ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆê³ -(예: íŒŒì¼ ë‹¤ìš´ë¡œë“œ 완료) ì´ì œ 사용ìžê°€ ê·¸ì— ëŒ€í•´ 조치를 ì·¨í• ìˆ˜ 있는 경우 ìƒíƒœ 표시줄 ì•Œë¦¼ì´ -ìµœì„ ì˜ ê¸°ë²•ìž…ë‹ˆë‹¤. 사용ìžê°€ í™•ìž¥ëœ ë³´ê¸°ì—서 ì•Œë¦¼ì„ ì„ íƒí•˜ë©´, +(예: íŒŒì¼ ë‹¤ìš´ë¡œë“œ 완료) ì´ì œ 사용ìžê°€ ê·¸ì— ëŒ€í•´ 조치를 ì·¨í• ìˆ˜ 있는 경우 ìƒíƒœ 표시줄 ì•Œë¦¼ì´ +ìµœì„ ì˜ ê¸°ë²•ìž…ë‹ˆë‹¤. 사용ìžê°€ í™•ìž¥ëœ ë³´ê¸°ì—서 ì•Œë¦¼ì„ ì„ íƒí•˜ë©´, 해당 ì•Œë¦¼ì´ ì•¡í‹°ë¹„í‹°ë¥¼ ì‹œìž‘í• ìˆ˜ 있습니다(예: 다운로드한 íŒŒì¼ ë³´ê¸°).</p> <p>ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">알림 메시지</a> ë˜ëŠ” <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 알림</a> @@ -621,19 +621,19 @@ onBind()} 콜백 메서드ì—서 반환해야 합니다. í´ë¼ì´ì–¸íŠ¸ê°€ {@li <h2 id="Foreground">ì „ê²½ì—서 서비스 실행하기</h2> -<p>ì „ê²½ 서비스는 사용ìžê°€ 능ë™ì 으로 ì¸ì‹í•˜ê³ 있으므로 메모리 부족 시ì—ë„ -ì‹œìŠ¤í…œì´ ì¤‘ë‹¨í• í›„ë³´ë¡œ ê³ ë ¤ë˜ì§€ 않는 서비스를 ë§í•©ë‹ˆë‹¤. ì „ê²½ -서비스는 ìƒíƒœ í‘œì‹œì¤„ì— ëŒ€í•œ ì•Œë¦¼ì„ ì œê³µí•´ì•¼ 합니다. ì´ê²ƒì€ -"ì§„í–‰ 중" ì œëª© ì•„ëž˜ì— ë°°ì¹˜ë˜ë©°, ì´ëŠ” ê³§ 해당 ì•Œë¦¼ì€ ì„œë¹„ìŠ¤ê°€ 중단ë˜ì—ˆê±°ë‚˜ +<p>ì „ê²½ 서비스는 사용ìžê°€ 능ë™ì 으로 ì¸ì‹í•˜ê³ 있으므로 메모리 부족 시ì—ë„ +ì‹œìŠ¤í…œì´ ì¤‘ë‹¨í• í›„ë³´ë¡œ ê³ ë ¤ë˜ì§€ 않는 서비스를 ë§í•©ë‹ˆë‹¤. ì „ê²½ +서비스는 ìƒíƒœ í‘œì‹œì¤„ì— ëŒ€í•œ ì•Œë¦¼ì„ ì œê³µí•´ì•¼ 합니다. ì´ê²ƒì€ +"ì§„í–‰ 중" ì œëª© ì•„ëž˜ì— ë°°ì¹˜ë˜ë©°, ì´ëŠ” ê³§ 해당 ì•Œë¦¼ì€ ì„œë¹„ìŠ¤ê°€ 중단ë˜ì—ˆê±°ë‚˜ ì „ê²½ì—서 ì œê±°ë˜ì§€ ì•Šì€ ì´ìƒ ë¬´ì‹œí• ìˆ˜ 없다는 뜻입니다.</p> -<p>예를 들어 서비스ì—서 ìŒì•…ì„ ìž¬ìƒí•˜ëŠ” ìŒì•… í”Œë ˆì´ì–´ëŠ” ì „ê²½ì—서 -실행ë˜ë„ë¡ ì„¤ì •í•´ì•¼ 합니다. 사용ìžê°€ ì´ê²ƒì˜ ìž‘ë™ì„ 분명히 ì¸ì‹í•˜ê³ 있기 -때문입니다. ìƒíƒœ í‘œì‹œì¤„ì— ìžˆëŠ” ì•Œë¦¼ì€ í˜„ìž¬ 노래를 ë‚˜íƒ€ë‚´ê³ +<p>예를 들어 서비스ì—서 ìŒì•…ì„ ìž¬ìƒí•˜ëŠ” ìŒì•… í”Œë ˆì´ì–´ëŠ” ì „ê²½ì—서 +실행ë˜ë„ë¡ ì„¤ì •í•´ì•¼ 합니다. 사용ìžê°€ ì´ê²ƒì˜ ìž‘ë™ì„ 분명히 ì¸ì‹í•˜ê³ 있기 +때문입니다. ìƒíƒœ í‘œì‹œì¤„ì— ìžˆëŠ” ì•Œë¦¼ì€ í˜„ìž¬ 노래를 ë‚˜íƒ€ë‚´ê³ ì‚¬ìš©ìžë¡œ 하여금 ìŒì•… í”Œë ˆì´ì–´ì™€ ìƒí˜¸ ìž‘ìš©í• ì•¡í‹°ë¹„í‹°ë¥¼ 시작하게 해줄 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> <p>서비스가 ì „ê²½ì—서 실행ë˜ë„ë¡ ìš”ì²í•˜ë ¤ë©´ {@link -android.app.Service#startForeground startForeground()}를 호출하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” ë‘ ê°œì˜ ë§¤ê°œë³€ìˆ˜ë¥¼ 취합니다. +android.app.Service#startForeground startForeground()}를 호출하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” ë‘ ê°œì˜ ë§¤ê°œë³€ìˆ˜ë¥¼ 취합니다. ê·¸ 중 하나는 해당 ì•Œë¦¼ì„ ê³ ìœ í•˜ê²Œ ì‹ë³„하는 ì •ìˆ˜ì´ê³ 다른 하나는 ìƒíƒœ í‘œì‹œì¤„ì— í•´ë‹¹ë˜ëŠ” {@link android.app.Notification}입니다. 예:</p> @@ -652,48 +652,48 @@ android.app.Service#startForeground startForeground()}ì— ë¶€ì—¬í•˜ëŠ” ì •ìˆ˜ ID <p>서비스를 ì „ê²½ì—서 ì œê±°í•˜ë ¤ë©´ {@link -android.app.Service#stopForeground stopForeground()}를 호출하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 부울 ê°’ì„ ì·¨í•˜ë©°, ì´ê²ƒì´ +android.app.Service#stopForeground stopForeground()}를 호출하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 부울 ê°’ì„ ì·¨í•˜ë©°, ì´ê²ƒì´ ìƒíƒœ 표시줄 ì•Œë¦¼ë„ ì œê±°í• ì§€ 여부를 나타냅니다. ì´ ë©”ì„œë“œëŠ” 서비스를 중단시키지 <em>않습니다</em>. - 그러나, 서비스가 ì „ê²½ì—서 실행 ì¤‘ì¸ ë™ì•ˆ 서비스를 중단시키면 + 그러나, 서비스가 ì „ê²½ì—서 실행 ì¤‘ì¸ ë™ì•ˆ 서비스를 중단시키면 ì•Œë¦¼ë„ ë§ˆì°¬ê°€ì§€ë¡œ ì œê±°ë©ë‹ˆë‹¤.</p> -<p>ì•Œë¦¼ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 +<p>ì•Œë¦¼ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 표시줄 알림 ìƒì„±</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> <h2 id="Lifecycle">서비스 수명 주기 관리</h2> -<p>ì„œë¹„ìŠ¤ì˜ ìˆ˜ëª… 주기는 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기보다 훨씬 간단합니다. 하지만, 서비스를 ìƒì„±í•˜ê³ -소멸시키는 ë°©ë²•ì— íŠ¹ížˆ 주ì˜ë¥¼ 기울여야 한다는 ë©´ì—서 중요ë„는 ì´ìª½ì´ ë” ë†’ìŠµë‹ˆë‹¤. 서비스는 사용ìžê°€ 모르는 채로 +<p>ì„œë¹„ìŠ¤ì˜ ìˆ˜ëª… 주기는 ì•¡í‹°ë¹„í‹°ì˜ ìˆ˜ëª… 주기보다 훨씬 간단합니다. 하지만, 서비스를 ìƒì„±í•˜ê³ +소멸시키는 ë°©ë²•ì— íŠ¹ížˆ 주ì˜ë¥¼ 기울여야 한다는 ë©´ì—서 중요ë„는 ì´ìª½ì´ ë” ë†’ìŠµë‹ˆë‹¤. 서비스는 사용ìžê°€ 모르는 채로 ë°°ê²½ì—서 실행ë 수 있기 때문입니다.</p> -<p>서비스 수명 주기—ìƒì„±ë˜ì—ˆì„ 때부터 소멸ë 때까지—는 ë‘ ê°€ì§€ 서로 다른 경로를 +<p>서비스 수명 주기—ìƒì„±ë˜ì—ˆì„ 때부터 소멸ë 때까지—는 ë‘ ê°€ì§€ 서로 다른 경로를 따를 수 있습니다.</p> <ul> <li>ì‹œìž‘ëœ ì„œë¹„ìŠ¤ <p>서비스는 ë˜ ë‹¤ë¥¸ 구성 요소가 {@link -android.content.Context#startService startService()}를 호출하면 ìƒì„±ë©ë‹ˆë‹¤. 그러면 서비스가 무기한으로 실행ë 수 있으며 +android.content.Context#startService startService()}를 호출하면 ìƒì„±ë©ë‹ˆë‹¤. 그러면 서비스가 무기한으로 실행ë 수 있으며 스스로 알아서 중단ë˜ì–´ì•¼ 합니다. ì´ë•Œ {@link -android.app.Service#stopSelf() stopSelf()}를 호출하는 ë°©ë²•ì„ ì”니다. ë˜ ë‹¤ë¥¸ 구성 ìš”ì†Œë„ ì„œë¹„ìŠ¤ë¥¼ 중단시킬 수 +android.app.Service#stopSelf() stopSelf()}를 호출하는 ë°©ë²•ì„ ì”니다. ë˜ ë‹¤ë¥¸ 구성 ìš”ì†Œë„ ì„œë¹„ìŠ¤ë¥¼ 중단시킬 수 있습니다. {@link android.content.Context#stopService stopService()}를 호출하면 ë©ë‹ˆë‹¤. 서비스가 중단ë˜ë©´ ì‹œìŠ¤í…œì´ ì´ë¥¼ 소멸시킵니다.</p></li> <li>ë°”ì¸ë”©ëœ 서비스 <p>서비스는 ë˜ ë‹¤ë¥¸ 구성 요소(í´ë¼ì´ì–¸íЏ)ê°€ {@link -android.content.Context#bindService bindService()}를 호출하면 ìƒì„±ë©ë‹ˆë‹¤. 그러면 í´ë¼ì´ì–¸íŠ¸ê°€ -{@link android.os.IBinder} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 서비스와 í†µì‹ ì„ ì£¼ê³ ë°›ì„ ìˆ˜ 있습니다. í´ë¼ì´ì–¸íŠ¸ê°€ ì—°ê²°ì„ ì¢…ë£Œí•˜ë ¤ë©´ -{@link android.content.Context#unbindService unbindService()}를 호출하면 ë©ë‹ˆë‹¤. 여러 í´ë¼ì´ì–¸íŠ¸ê°€ ê°™ì€ ì„œë¹„ìŠ¤ì— -ë°”ì¸ë”©ë 수 있으며, ì´ ëª¨ë‘ê°€ ë°”ì¸ë”©ì„ í•´ì œí•˜ë©´ ì‹œìŠ¤í…œì´ í•´ë‹¹ 서비스를 소멸시킵니다 (서비스가 스스로를 중단시키지 +android.content.Context#bindService bindService()}를 호출하면 ìƒì„±ë©ë‹ˆë‹¤. 그러면 í´ë¼ì´ì–¸íŠ¸ê°€ +{@link android.os.IBinder} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 서비스와 í†µì‹ ì„ ì£¼ê³ ë°›ì„ ìˆ˜ 있습니다. í´ë¼ì´ì–¸íŠ¸ê°€ ì—°ê²°ì„ ì¢…ë£Œí•˜ë ¤ë©´ +{@link android.content.Context#unbindService unbindService()}를 호출하면 ë©ë‹ˆë‹¤. 여러 í´ë¼ì´ì–¸íŠ¸ê°€ ê°™ì€ ì„œë¹„ìŠ¤ì— +ë°”ì¸ë”©ë 수 있으며, ì´ ëª¨ë‘ê°€ ë°”ì¸ë”©ì„ í•´ì œí•˜ë©´ ì‹œìŠ¤í…œì´ í•´ë‹¹ 서비스를 소멸시킵니다 (서비스가 스스로를 중단시키지 <em>않아ë„</em> ë©ë‹ˆë‹¤).</p></li> </ul> -<p>ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 경로는 ì™„ì „ížˆ ë³„ê°œì˜ ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 다시 ë§í•´, ì´ë¯¸ -{@link android.content.Context#startService startService()}로 ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• ìˆ˜ë„ ìžˆë‹¤ëŠ” 뜻입니다. 예를 +<p>ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 경로는 ì™„ì „ížˆ ë³„ê°œì˜ ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 다시 ë§í•´, ì´ë¯¸ +{@link android.content.Context#startService startService()}로 ì‹œìž‘ëœ ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©í• ìˆ˜ë„ ìžˆë‹¤ëŠ” 뜻입니다. 예를 들어, ë°°ê²½ ìŒì•… 서비스를 ì‹œìž‘í•˜ë ¤ë©´ {@link android.content.Context#startService -startService()}를 í˜¸ì¶œí•˜ë˜ ìž¬ìƒí• ìŒì•…ì„ ì‹ë³„하는 {@link android.content.Intent}를 사용하면 ë©ë‹ˆë‹¤. 나중ì—, -ì•„ë§ˆë„ ì‚¬ìš©ìžê°€ í”Œë ˆì´ì–´ì— 좀 ë” ë§Žì€ í†µì œê¶Œì„ ë°œíœ˜í•˜ê³ ìž í•˜ê±°ë‚˜ +startService()}를 í˜¸ì¶œí•˜ë˜ ìž¬ìƒí• ìŒì•…ì„ ì‹ë³„하는 {@link android.content.Intent}를 사용하면 ë©ë‹ˆë‹¤. 나중ì—, +ì•„ë§ˆë„ ì‚¬ìš©ìžê°€ í”Œë ˆì´ì–´ì— 좀 ë” ë§Žì€ í†µì œê¶Œì„ ë°œíœ˜í•˜ê³ ìž í•˜ê±°ë‚˜ 현재 ë…¸ëž˜ì— ëŒ€í•œ ì •ë³´ë¥¼ ì–»ê³ ìž í• ë•Œ, 액티비티가 ì„œë¹„ìŠ¤ì— ë°”ì¸ë”©ë 수 있습니다. {@link android.content.Context#bindService bindService()}를 사용하면 ë©ë‹ˆë‹¤. ì´ëŸ° 경우ì—는 {@link android.content.Context#stopService stopService()} ë˜ëŠ” {@link android.app.Service#stopSelf @@ -702,8 +702,8 @@ stopSelf()}ë„ í´ë¼ì´ì–¸íŠ¸ê°€ ëª¨ë‘ ë°”ì¸ë”© í•´ì œë 때까지 ì‹¤ì œë¡œ <h3 id="LifecycleCallbacks">수명 주기 콜백 구현하기</h3> -<p>액티비티와 마찬가지로 서비스ì—ë„ ìˆ˜ëª… 주기 콜백 메서드가 있어 ì´ë¥¼ 구현하면 ì„œë¹„ìŠ¤ì˜ -ìƒíƒœ 변경 ë‚´ìš©ì„ ëª¨ë‹ˆí„°ë§í• 수 ìžˆê³ ì ì ˆí•œ ì‹œê¸°ì— ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다. 다ìŒì˜ 골격 +<p>액티비티와 마찬가지로 서비스ì—ë„ ìˆ˜ëª… 주기 콜백 메서드가 있어 ì´ë¥¼ 구현하면 ì„œë¹„ìŠ¤ì˜ +ìƒíƒœ 변경 ë‚´ìš©ì„ ëª¨ë‹ˆí„°ë§í• 수 ìžˆê³ ì ì ˆí•œ ì‹œê¸°ì— ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다. 다ìŒì˜ 골격 서비스는 ê° ìˆ˜ëª… 주기 메서드를 설명한 것입니다.</p> <pre> @@ -743,13 +743,13 @@ public class ExampleService extends Service { } </pre> -<p class="note"><strong>ì°¸ê³ :</strong> 액티비티 수명 주기 콜백 메서드와는 달리 ì´ì™€ ê°™ì€ ì½œë°± 메서드를 구현하는 ë°ì—는 +<p class="note"><strong>ì°¸ê³ :</strong> 액티비티 수명 주기 콜백 메서드와는 달리 ì´ì™€ ê°™ì€ ì½œë°± 메서드를 구현하는 ë°ì—는 슈í¼í´ëž˜ìФ êµ¬í˜„ì„ í˜¸ì¶œí•˜ì§€ <em>않아ë„</em> ë©ë‹ˆë‹¤.</p> <img src="{@docRoot}images/service_lifecycle.png" alt="" /> -<p class="img-caption"><strong>그림 2.</strong> 서비스 수명 주기입니다. ì™¼ìª½ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ +<p class="img-caption"><strong>그림 2.</strong> 서비스 수명 주기입니다. ì™¼ìª½ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ 서비스가 {@link android.content.Context#startService -startService()}로 ìƒì„±ëœ ê²½ìš°ì˜ ìˆ˜ëª… 주기를 나타내며 ì˜¤ë¥¸ìª½ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ 서비스가 +startService()}로 ìƒì„±ëœ ê²½ìš°ì˜ ìˆ˜ëª… 주기를 나타내며 ì˜¤ë¥¸ìª½ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ 서비스가 {@link android.content.Context#bindService bindService()}로 ìƒì„±ëœ ê²½ìš°ì˜ ìˆ˜ëª… 주기를 나타낸 것입니다.</p> <p>ì´ì™€ ê°™ì€ ë©”ì„œë“œë¥¼ 구현함으로ì¨, 서비스 수명 ì£¼ê¸°ì˜ ë‘ ê°€ì§€ ì¤‘ì²©ëœ ë£¨í”„ë¥¼ 모니터ë§í• 수 있습니다. </p> @@ -757,20 +757,20 @@ startService()}로 ìƒì„±ëœ ê²½ìš°ì˜ ìˆ˜ëª… 주기를 나타내며 오른쪽ì <ul> <li>ì„œë¹„ìŠ¤ì˜ <strong>수명 주기 ì „ì²´</strong>는 {@link android.app.Service#onCreate onCreate()}ê°€ í˜¸ì¶œëœ ì‹œì ê³¼ {@link -android.app.Service#onDestroy}ê°€ ë°˜í™˜ëœ ì‹œì 사ì´ì— ì¼ì–´ë‚©ë‹ˆë‹¤. 액티비티와 마찬가지로 서비스는 ìžì‹ ì˜ ì´ˆê¸° ì„¤ì •ì„ +android.app.Service#onDestroy}ê°€ ë°˜í™˜ëœ ì‹œì 사ì´ì— ì¼ì–´ë‚©ë‹ˆë‹¤. 액티비티와 마찬가지로 서비스는 ìžì‹ ì˜ ì´ˆê¸° ì„¤ì •ì„ {@link android.app.Service#onCreate onCreate()}ì—서 수행하며 ë‚¨ì€ ë¦¬ì†ŒìŠ¤ë¥¼ ëª¨ë‘ {@link -android.app.Service#onDestroy onDestroy()}ì— ë¦´ë¦¬ìŠ¤í•©ë‹ˆë‹¤. 예를 들어 +android.app.Service#onDestroy onDestroy()}ì— ë¦´ë¦¬ìŠ¤í•©ë‹ˆë‹¤. 예를 들어 ìŒì•… ìž¬ìƒ ì„œë¹„ìŠ¤ì˜ ê²½ìš° ìŒì•…ì´ ìž¬ìƒë ìŠ¤ë ˆë“œë¥¼ {@link android.app.Service#onCreate onCreate()}로 ìƒì„±í•˜ê³ , 그럼 ë‹¤ìŒ í•´ë‹¹ ìŠ¤ë ˆë“œë¥¼ ì¤‘ë‹¨í• ë•Œì—는 {@link android.app.Service#onDestroy onDestroy()}ì—서 í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. <p>{@link android.app.Service#onCreate onCreate()}와 {@link android.app.Service#onDestroy -onDestroy()} 메서드는 ëª¨ë“ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 호출ë©ë‹ˆë‹¤. ì´ëŠ” 서비스가 +onDestroy()} 메서드는 ëª¨ë“ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 호출ë©ë‹ˆë‹¤. ì´ëŠ” 서비스가 {@link android.content.Context#startService startService()}로 ìƒì„±ë˜ì—ˆë“ {@link android.content.Context#bindService bindService()}로 ìƒì„±ë˜ì—ˆë“ 관계 ì—†ì´ ì ìš©ë©ë‹ˆë‹¤.</p></li> <li>ì„œë¹„ìŠ¤ì˜ <strong>활성 수명 주기</strong>는 {@link -android.app.Service#onStartCommand onStartCommand()} ë˜ëŠ” {@link android.app.Service#onBind onBind()}ë¡œì˜ í˜¸ì¶œê³¼ 함께 시작ë©ë‹ˆë‹¤. +android.app.Service#onStartCommand onStartCommand()} ë˜ëŠ” {@link android.app.Service#onBind onBind()}ë¡œì˜ í˜¸ì¶œê³¼ 함께 시작ë©ë‹ˆë‹¤. ê° ë©”ì„œë“œì— {@link android.content.Intent}ê°€ ì „ë‹¬ë˜ëŠ”ë° ì´ê²ƒì€ ê°ê° {@link android.content.Context#startService startService()} ë˜ëŠ” {@link android.content.Context#bindService bindService()} 중 í•˜ë‚˜ì— ì „ë‹¬ëœ ê²ƒìž…ë‹ˆë‹¤. @@ -781,25 +781,25 @@ android.app.Service#onUnbind onUnbind()}ê°€ 반환ë˜ë©´ 종료ë©ë‹ˆë‹¤.</p> </li> </ul> -<p class="note"><strong>ì°¸ê³ :</strong> ì‹œìž‘ëœ ì„œë¹„ìŠ¤ë¥¼ ì¤‘ë‹¨í•˜ë ¤ë©´ +<p class="note"><strong>ì°¸ê³ :</strong> ì‹œìž‘ëœ ì„œë¹„ìŠ¤ë¥¼ ì¤‘ë‹¨í•˜ë ¤ë©´ {@link android.app.Service#stopSelf stopSelf()} ë˜ëŠ” {@link -android.content.Context#stopService stopService()}를 호출하면 ë˜ì§€ë§Œ, ì„œë¹„ìŠ¤ì— ëŒ€í•œ ìƒì‘하는 ì½œë°±ì€ -없습니다(즉 {@code onStop()} ì½œë°±ì´ ì—†ìŠµë‹ˆë‹¤). 그러므로, 서비스가 í´ë¼ì´ì–¸íŠ¸ì— ë°”ì¸ë”©ë˜ì–´ 있지 ì•Šì€ í•œ +android.content.Context#stopService stopService()}를 호출하면 ë˜ì§€ë§Œ, ì„œë¹„ìŠ¤ì— ëŒ€í•œ ìƒì‘하는 ì½œë°±ì€ +없습니다(즉 {@code onStop()} ì½œë°±ì´ ì—†ìŠµë‹ˆë‹¤). 그러므로, 서비스가 í´ë¼ì´ì–¸íŠ¸ì— ë°”ì¸ë”©ë˜ì–´ 있지 ì•Šì€ í•œ ì‹œìŠ¤í…œì€ ì„œë¹„ìŠ¤ê°€ 중단ë˜ë©´ ì´ë¥¼ 소멸시킵니다. ìˆ˜ì‹ ë˜ëŠ” ì½œë°±ì€ {@link android.app.Service#onDestroy onDestroy()}ê°€ ìœ ì¼í•©ë‹ˆë‹¤.</p> -<p>그림 2는 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì¼ë°˜ì ì¸ ì½œë°± 메서드를 나타낸 것입니다. ì´ ê·¸ë¦¼ì—서는 -{@link android.content.Context#startService startService()}로 ìƒì„±ëœ 서비스와 -{@link android.content.Context#bindService bindService()}로 ìƒì„±ëœ 서비스를 +<p>그림 2는 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì¼ë°˜ì ì¸ ì½œë°± 메서드를 나타낸 것입니다. ì´ ê·¸ë¦¼ì—서는 +{@link android.content.Context#startService startService()}로 ìƒì„±ëœ 서비스와 +{@link android.content.Context#bindService bindService()}로 ìƒì„±ëœ 서비스를 êµ¬ë¶„í•˜ê³ ìžˆì§€ë§Œ, ì–´ë–¤ ì‹ìœ¼ë¡œ 시작ë˜ì—ˆë“ ëª¨ë“ ì„œë¹„ìŠ¤ëŠ” í´ë¼ì´ì–¸íŠ¸ê°€ ìžì‹ ì— ë°”ì¸ë”©ë˜ë„ë¡ í—ˆìš©í• ìˆ˜ 있다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. ë§í•˜ìžë©´, {@link android.app.Service#onStartCommand -onStartCommand()}로 ì²˜ìŒ ì‹œìž‘ëœ ì„œë¹„ìŠ¤(í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.content.Context#startService startService()}를 호출해서)ë¼ê³ í•´ë„ -ì—¬ì „ížˆ {@link android.app.Service#onBind onBind()}ë¡œì˜ í˜¸ì¶œì„ ë°›ì„ ìˆ˜ 있습니다(í´ë¼ì´ì–¸íŠ¸ê°€ +onStartCommand()}로 ì²˜ìŒ ì‹œìž‘ëœ ì„œë¹„ìŠ¤(í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.content.Context#startService startService()}를 호출해서)ë¼ê³ í•´ë„ +ì—¬ì „ížˆ {@link android.app.Service#onBind onBind()}ë¡œì˜ í˜¸ì¶œì„ ë°›ì„ ìˆ˜ 있습니다(í´ë¼ì´ì–¸íŠ¸ê°€ {@link android.content.Context#bindService bindService()}를 호출하는 경우).</p> <p>ë°”ì¸ë”©ì„ ì œê³µí•˜ëŠ” 서비스 ìƒì„±ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/bound-services.html">ë°”ì¸ë”©ëœ 서비스</a> 문서를 참조하ì‹ì‹œì˜¤. ì´ ì•ˆì—는 {@link android.app.Service#onRebind onRebind()} -콜백 ë©”ì„œë“œì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ê°€ <a href="{@docRoot}guide/components/bound-services.html#Lifecycle">ë°”ì¸ë”©ëœ ì„œë¹„ìŠ¤ì˜ -수명 주기 관리</a>ì— ê´€í•œ ì„¹ì…˜ì— +콜백 ë©”ì„œë“œì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ê°€ <a href="{@docRoot}guide/components/bound-services.html#Lifecycle">ë°”ì¸ë”©ëœ ì„œë¹„ìŠ¤ì˜ +수명 주기 관리</a>ì— ê´€í•œ ì„¹ì…˜ì— ë‹´ê²¨ 있습니다.</p> diff --git a/docs/html-intl/intl/ko/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/ko/guide/components/tasks-and-back-stack.jd index 6b896f9d50ad..166cedd3a182 100644 --- a/docs/html-intl/intl/ko/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/ko/guide/components/tasks-and-back-stack.jd @@ -37,23 +37,23 @@ Androidì‹ ë©€í‹°íƒœìŠ¤í‚¹</a></li> </div> -<p>í•˜ë‚˜ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 보통 여러 ê°œì˜ <a href="{@docRoot}guide/components/activities.html">액티비티</a>ê°€ 들어있습니다. ê° ì•¡í‹°ë¹„í‹°ëŠ” -사용ìžê°€ ìˆ˜í–‰í• ìˆ˜ 있는 íŠ¹ì •í•œ ì¢…ë¥˜ì˜ ìž‘ì—…ì„ ì¤‘ì‹¬ìœ¼ë¡œ ë””ìžì¸ë˜ì–´ì•¼ 하며 다른 액티비티를 +<p>í•˜ë‚˜ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 보통 여러 ê°œì˜ <a href="{@docRoot}guide/components/activities.html">액티비티</a>ê°€ 들어있습니다. ê° ì•¡í‹°ë¹„í‹°ëŠ” +사용ìžê°€ ìˆ˜í–‰í• ìˆ˜ 있는 íŠ¹ì •í•œ ì¢…ë¥˜ì˜ ìž‘ì—…ì„ ì¤‘ì‹¬ìœ¼ë¡œ ë””ìžì¸ë˜ì–´ì•¼ 하며 다른 액티비티를 ì‹œìž‘í• ìˆ˜ 있는 ê¸°ëŠ¥ì´ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 새 메시지 목ë¡ì„ 표시하는 í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ê°€ ìžˆì„ ìˆ˜ 있습니다. 사용ìžê°€ 메시지를 하나 ì„ íƒí•˜ë©´, 새 액티비티가 ì—´ë ¤ 해당 메시지를 ë³¼ 수 있게 합니다.</p> -<p>액티비티는 기기ì—서 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 존재하는 액티비티를 ì‹œìž‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ë©”ì¼ ë©”ì‹œì§€ë¥¼ ë³´ë‚´ê³ ìž í•˜ëŠ” 경우, "ì „ì†¡" ìž‘ì—…ì„ ìˆ˜í–‰í• ì¸í…트를 -ì •ì˜í•˜ì—¬ ì´ë©”ì¼ ì£¼ì†Œì™€ 메시지 ë“±ì˜ ëª‡ 가지 ë°ì´í„°ë¥¼ í¬í•¨ì‹œí‚¤ë©´ ë©ë‹ˆë‹¤. 그러면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê°€ì ¸ì˜¨ 액티비티 중 -ì´ëŸ¬í•œ ì¢…ë¥˜ì˜ ì¸í…트를 ì²˜ë¦¬í•œë‹¤ê³ ìŠ¤ìŠ¤ë¡œ ì„ ì–¸í•œ ê²ƒì´ ì—´ë¦½ë‹ˆë‹¤. ì´ ê²½ìš°, ì´ ì¸í…트는 -ì´ë©”ì¼ì„ ì „ì†¡í•˜ê¸° 위한 것ì´ë¯€ë¡œ ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ "작성" 액티비티가 시작ë©ë‹ˆë‹¤(ê°™ì€ ì¸í…트를 -ì§€ì›í•˜ëŠ” 액티비티가 여러 ê°œ 있는 경우, ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžì—게 ì–´ëŠ ê²ƒì„ ì‚¬ìš©í• ì§€ ì„ íƒí•˜ë„ë¡ í•©ë‹ˆë‹¤). ì´ë©”ì¼ì´ ì „ì†¡ë˜ë©´ -액티비티가 재개ë˜ê³ 해당 ì´ë©”ì¼ ì•¡í‹°ë¹„í‹°ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ì˜€ë˜ 것처럼 보입니다. 액티비티는 -서로 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 온 ê²ƒì¼ ìˆ˜ 있지만, Android는 ë‘ ì•¡í‹°ë¹„í‹°ë¥¼ +<p>액티비티는 기기ì—서 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 존재하는 액티비티를 ì‹œìž‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ë©”ì¼ ë©”ì‹œì§€ë¥¼ ë³´ë‚´ê³ ìž í•˜ëŠ” 경우, "ì „ì†¡" ìž‘ì—…ì„ ìˆ˜í–‰í• ì¸í…트를 +ì •ì˜í•˜ì—¬ ì´ë©”ì¼ ì£¼ì†Œì™€ 메시지 ë“±ì˜ ëª‡ 가지 ë°ì´í„°ë¥¼ í¬í•¨ì‹œí‚¤ë©´ ë©ë‹ˆë‹¤. 그러면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê°€ì ¸ì˜¨ 액티비티 중 +ì´ëŸ¬í•œ ì¢…ë¥˜ì˜ ì¸í…트를 ì²˜ë¦¬í•œë‹¤ê³ ìŠ¤ìŠ¤ë¡œ ì„ ì–¸í•œ ê²ƒì´ ì—´ë¦½ë‹ˆë‹¤. ì´ ê²½ìš°, ì´ ì¸í…트는 +ì´ë©”ì¼ì„ ì „ì†¡í•˜ê¸° 위한 것ì´ë¯€ë¡œ ì´ë©”ì¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ "작성" 액티비티가 시작ë©ë‹ˆë‹¤(ê°™ì€ ì¸í…트를 +ì§€ì›í•˜ëŠ” 액티비티가 여러 ê°œ 있는 경우, ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžì—게 ì–´ëŠ ê²ƒì„ ì‚¬ìš©í• ì§€ ì„ íƒí•˜ë„ë¡ í•©ë‹ˆë‹¤). ì´ë©”ì¼ì´ ì „ì†¡ë˜ë©´ +액티비티가 재개ë˜ê³ 해당 ì´ë©”ì¼ ì•¡í‹°ë¹„í‹°ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ì˜€ë˜ 것처럼 보입니다. 액티비티는 +서로 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 온 ê²ƒì¼ ìˆ˜ 있지만, Android는 ë‘ ì•¡í‹°ë¹„í‹°ë¥¼ ëª¨ë‘ ê°™ì€ <em>작업</em> ì•ˆì— ìœ ì§€í•˜ì—¬ ì´ì²˜ëŸ¼ 막힘 없는 ì‚¬ìš©ìž í™˜ê²½ì„ ìœ ì§€í•©ë‹ˆë‹¤.</p> -<p>작업ì´ëž€ 액티비티 ì»¬ë ‰ì…˜ì„ ì¼ì»«ëŠ” ë§ë¡œ, 사용ìžê°€ íŠ¹ì • ìž‘ì—…ì„ ìˆ˜í–‰í• ë•Œ ì´ê²ƒê³¼ -ìƒí˜¸ 작용합니다. 액티비티는 ìŠ¤íƒ ì•ˆì— ì •ë ¬ë˜ë©°(<em>ë°± 스íƒ</em>), ì´ë•Œ +<p>작업ì´ëž€ 액티비티 ì»¬ë ‰ì…˜ì„ ì¼ì»«ëŠ” ë§ë¡œ, 사용ìžê°€ íŠ¹ì • ìž‘ì—…ì„ ìˆ˜í–‰í• ë•Œ ì´ê²ƒê³¼ +ìƒí˜¸ 작용합니다. 액티비티는 ìŠ¤íƒ ì•ˆì— ì •ë ¬ë˜ë©°(<em>ë°± 스íƒ</em>), ì´ë•Œ 순서는 ê° ì•¡í‹°ë¹„í‹°ê°€ 열린 순서와 같습니다.</p> <!-- SAVE FOR WHEN THE FRAGMENT DOC IS ADDED @@ -77,40 +77,40 @@ android.app.Fragment} class documentation.</p> </div> --> -<p>기기 ë©”ì¸ ìŠ¤í¬ë¦°ì´ 대다수 ìž‘ì—…ì˜ ì‹œìž‘ ì§€ì 입니다. 사용ìžê°€ -ì• í”Œë¦¬ì¼€ì´ì…˜ -시작 관리ìžì— 있는 ì•„ì´ì½˜(ë˜ëŠ” ë©”ì¸ ìŠ¤í¬ë¦°ì˜ 바로 가기)ì„ í„°ì¹˜í•˜ë©´ 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ 나옵니다. 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 -ìž‘ì—…ì´ ì¡´ìž¬í•˜ì§€ 않으면(ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìµœê·¼ì— ì‚¬ìš©í•œ ì ì´ ì—†ëŠ” 경우), 새 ìž‘ì—…ì´ ìƒì„±ë˜ê³ +<p>기기 ë©”ì¸ ìŠ¤í¬ë¦°ì´ 대다수 ìž‘ì—…ì˜ ì‹œìž‘ ì§€ì 입니다. 사용ìžê°€ +ì• í”Œë¦¬ì¼€ì´ì…˜ +시작 관리ìžì— 있는 ì•„ì´ì½˜(ë˜ëŠ” ë©”ì¸ ìŠ¤í¬ë¦°ì˜ 바로 가기)ì„ í„°ì¹˜í•˜ë©´ 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ 나옵니다. 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 +ìž‘ì—…ì´ ì¡´ìž¬í•˜ì§€ 않으면(ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìµœê·¼ì— ì‚¬ìš©í•œ ì ì´ ì—†ëŠ” 경우), 새 ìž‘ì—…ì´ ìƒì„±ë˜ê³ 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ "기본" 액티비티가 스íƒì— 있는 루트 액티비티로 열립니다.</p> -<p>현재 액티비티가 ë˜ ë‹¤ë¥¸ 액티비티를 시작하는 경우, 새 액티비티가 스íƒì˜ 맨 위로 ë°€ì–´ì˜¬ë ¤ì§€ê³ -사용ìžì˜ ì´ˆì ì´ ì´ì— 맞춰집니다. ì´ì „ 액티비티는 스íƒì— ìœ ì§€ë˜ì§€ë§Œ, 중단ë©ë‹ˆë‹¤. 액티비티가 중단ë˜ë©´ -ì‹œìŠ¤í…œì€ ì´ ì•¡í‹°ë¹„í‹°ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ í˜„ìž¬ ìƒíƒœë¥¼ 보존합니다. 사용ìžê°€ +<p>현재 액티비티가 ë˜ ë‹¤ë¥¸ 액티비티를 시작하는 경우, 새 액티비티가 스íƒì˜ 맨 위로 ë°€ì–´ì˜¬ë ¤ì§€ê³ +사용ìžì˜ ì´ˆì ì´ ì´ì— 맞춰집니다. ì´ì „ 액티비티는 스íƒì— ìœ ì§€ë˜ì§€ë§Œ, 중단ë©ë‹ˆë‹¤. 액티비티가 중단ë˜ë©´ +ì‹œìŠ¤í…œì€ ì´ ì•¡í‹°ë¹„í‹°ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì˜ í˜„ìž¬ ìƒíƒœë¥¼ 보존합니다. 사용ìžê°€ <em>뒤로</em> - ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 현재 액티비티가 스íƒì˜ 맨 위ì—서 íŠ€ì–´ë‚˜ì˜¤ê³ (해당 액티비티는 소멸ë©ë‹ˆë‹¤) -ì´ì „ 액티비티가 재개ë©ë‹ˆë‹¤(ì´ê²ƒì˜ UI ì´ì „ ìƒíƒœê°€ ë³µì›ë©ë‹ˆë‹¤). 스íƒì— 있는 액티비티는 -ê²°ì½” 다시 ì •ë ¬ë˜ì§€ 않습니다. 다만 스íƒì—서 ë°€ì–´ì˜¬ë ¤ì§€ê±°ë‚˜ 튀어나올 ë¿ìž…니다. 즉, 현재 ì•¡í‹°ë¹„í‹°ì— ì˜í•´ -시작ë˜ë©´ ìŠ¤íƒ ìœ„ë¡œ ë°€ì–´ì˜¬ë ¤ì§€ê³ , 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ 액티비티를 ë– ë‚˜ë©´ 튀어나와 사ë¼ì§€ëŠ” 것입니다. ë”°ë¼ì„œ, -ë°± 스íƒì€ -ì¼ì¢…ì˜ "í›„ìž…ì„ ì¶œ" ê°ì²´ 구조로서 ìž‘ë™í•œë‹¤ê³ í• ìˆ˜ 있습니다. 그림 1ì€ -ì´ í–‰ë™ì„ 시간 표시 막대와 함께 표시하여 여러 액티비티 사ì´ì˜ ì§„í–‰ë¥ ì„ ë³´ì—¬ì£¼ë©°, + ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 현재 액티비티가 스íƒì˜ 맨 위ì—서 íŠ€ì–´ë‚˜ì˜¤ê³ (해당 액티비티는 소멸ë©ë‹ˆë‹¤) +ì´ì „ 액티비티가 재개ë©ë‹ˆë‹¤(ì´ê²ƒì˜ UI ì´ì „ ìƒíƒœê°€ ë³µì›ë©ë‹ˆë‹¤). 스íƒì— 있는 액티비티는 +ê²°ì½” 다시 ì •ë ¬ë˜ì§€ 않습니다. 다만 스íƒì—서 ë°€ì–´ì˜¬ë ¤ì§€ê±°ë‚˜ 튀어나올 ë¿ìž…니다. 즉, 현재 ì•¡í‹°ë¹„í‹°ì— ì˜í•´ +시작ë˜ë©´ ìŠ¤íƒ ìœ„ë¡œ ë°€ì–´ì˜¬ë ¤ì§€ê³ , 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ 액티비티를 ë– ë‚˜ë©´ 튀어나와 사ë¼ì§€ëŠ” 것입니다. ë”°ë¼ì„œ, +ë°± 스íƒì€ +ì¼ì¢…ì˜ "í›„ìž…ì„ ì¶œ" ê°ì²´ 구조로서 ìž‘ë™í•œë‹¤ê³ í• ìˆ˜ 있습니다. 그림 1ì€ +ì´ í–‰ë™ì„ 시간 표시 막대와 함께 표시하여 여러 액티비티 사ì´ì˜ ì§„í–‰ë¥ ì„ ë³´ì—¬ì£¼ë©°, ê° ì‹œì ì—서 현재 ë°± 스íƒì˜ ëª¨ìŠµì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> <img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" /> -<p class="img-caption"><strong>그림 1.</strong> ìž‘ì—…ì— ìžˆëŠ” ê°ê°ì˜ 새 액티비티가 ë°± 스íƒì— í•ëª©ì„ ì¶”ê°€í•˜ëŠ” -ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 현재 -액티비티가 +<p class="img-caption"><strong>그림 1.</strong> ìž‘ì—…ì— ìžˆëŠ” ê°ê°ì˜ 새 액티비티가 ë°± 스íƒì— í•ëª©ì„ ì¶”ê°€í•˜ëŠ” +ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 현재 +액티비티가 소멸ë˜ê³ ì´ì „ 액티비티가 재개ë©ë‹ˆë‹¤.</p> -<p>사용ìžê°€ 계ì†í•´ì„œ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 스íƒì— 있는 ê° ì•¡í‹°ë¹„í‹°ê°€ 하나씩 튀어나가 -ì´ì „ ê²ƒì„ -ë“œëŸ¬ë‚´ê³ , 마침내는 사용ìžê°€ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ë˜ëŒì•„가게 ë©ë‹ˆë‹¤(아니면 ìž‘ì—…ì´ ì‹œìž‘ë˜ì—ˆì„ 때 +<p>사용ìžê°€ 계ì†í•´ì„œ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 스íƒì— 있는 ê° ì•¡í‹°ë¹„í‹°ê°€ 하나씩 튀어나가 +ì´ì „ ê²ƒì„ +ë“œëŸ¬ë‚´ê³ , 마침내는 사용ìžê°€ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ë˜ëŒì•„가게 ë©ë‹ˆë‹¤(아니면 ìž‘ì—…ì´ ì‹œìž‘ë˜ì—ˆì„ 때 실행 중ì´ë˜ 액티비티가 무엇ì´ë“ 그것으로 ë˜ëŒì•„갑니다). 스íƒì—서 ëª¨ë“ ì•¡í‹°ë¹„í‹°ê°€ ì œê±°ë˜ë©´ ì´ ìž‘ì—…ì€ ë” ì´ìƒ 존재하지 않게 ë©ë‹ˆë‹¤.</p> <div class="figure" style="width:287px"> <img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p -class="img-caption"><strong>그림 2.</strong> ë‘ ê°œì˜ ìž‘ì—…: 작업 Bê°€ ì „ê²½ì—서 ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ìˆ˜ì‹ í•˜ëŠ” 한편, +class="img-caption"><strong>그림 2.</strong> ë‘ ê°œì˜ ìž‘ì—…: 작업 Bê°€ ì „ê²½ì—서 ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ìˆ˜ì‹ í•˜ëŠ” 한편, 작업 A는 ë°°ê²½ì—서 재개ë˜ê¸°ë¥¼ 기다립니다.</p> </div> <div class="figure" style="width:215px"> @@ -118,39 +118,39 @@ class="img-caption"><strong>그림 2.</strong> ë‘ ê°œì˜ ìž‘ì—…: 작업 Bê°€ ì class="img-caption"><strong>그림 3.</strong> í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ê°€ 여러 번 ì¸ìŠ¤í„´íŠ¸í™”ë©ë‹ˆë‹¤.</p> </div> -<p>작업ì´ëž€ í•˜ë‚˜ì˜ ìž˜ 짜여진 단위로 사용ìžê°€ 새 ìž‘ì—…ì„ ì‹œìž‘í• ë•Œ "ë°°ê²½"으로 ì´ë™í• ìˆ˜ë„ ìžˆê³ -<em>홈</em> ë²„íŠ¼ì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ì´ë™í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ìž‘ì—…ì˜ ëª¨ë“ ì•¡í‹°ë¹„í‹°ëŠ” ë°°ê²½ì— ìžˆëŠ” ë™ì•ˆì€ +<p>작업ì´ëž€ í•˜ë‚˜ì˜ ìž˜ 짜여진 단위로 사용ìžê°€ 새 ìž‘ì—…ì„ ì‹œìž‘í• ë•Œ "ë°°ê²½"으로 ì´ë™í• ìˆ˜ë„ ìžˆê³ +<em>홈</em> ë²„íŠ¼ì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ì´ë™í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ìž‘ì—…ì˜ ëª¨ë“ ì•¡í‹°ë¹„í‹°ëŠ” ë°°ê²½ì— ìžˆëŠ” ë™ì•ˆì€ 중단ë˜ì§€ë§Œ -, 해당 ìž‘ì—…ì— ëŒ€í•œ ë°± 스íƒì€ 그대로 변함 ì—†ì´ ìœ ì§€ë©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ë˜ ë‹¤ë¥¸ ìž‘ì—…ì´ ë°œìƒí•˜ëŠ” ë™ì•ˆ -ì´ˆì ì„ ìžƒì„ ë¿ìž…니다(그림 2 참조). 그런 ë‹¤ìŒ ìž‘ì—…ì´ "ì „ê²½"으로 ë˜ëŒì•„와 사용ìžê°€ -ì´ì „ì— í•˜ë˜ ì¼ì„ 계ì†í• 수 있습니다. 예를 들어 현재 작업(작업 A)ì˜ ìŠ¤íƒì— 세 ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ ìžˆë‹¤ê³ +, 해당 ìž‘ì—…ì— ëŒ€í•œ ë°± 스íƒì€ 그대로 변함 ì—†ì´ ìœ ì§€ë©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ë˜ ë‹¤ë¥¸ ìž‘ì—…ì´ ë°œìƒí•˜ëŠ” ë™ì•ˆ +ì´ˆì ì„ ìžƒì„ ë¿ìž…니다(그림 2 참조). 그런 ë‹¤ìŒ ìž‘ì—…ì´ "ì „ê²½"으로 ë˜ëŒì•„와 사용ìžê°€ +ì´ì „ì— í•˜ë˜ ì¼ì„ 계ì†í• 수 있습니다. 예를 들어 현재 작업(작업 A)ì˜ ìŠ¤íƒì— 세 ê°œì˜ ì•¡í‹°ë¹„í‹°ê°€ ìžˆë‹¤ê³ ê°€ì •í•˜ë©´ ê·¸ 중 ë‘˜ì€ í˜„ìž¬ 액티비티 ì•„ëž˜ì— ìžˆìŠµë‹ˆë‹¤. 사용ìžê°€ <em>홈</em> - ë²„íŠ¼ì„ ëˆ„ë¥¸ ë‹¤ìŒ -ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžë¡œë¶€í„° 새 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 시작합니다. ë©”ì¸ ìŠ¤í¬ë¦°ì´ 나타나면 작업 A는 + ë²„íŠ¼ì„ ëˆ„ë¥¸ ë‹¤ìŒ +ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžë¡œë¶€í„° 새 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 시작합니다. ë©”ì¸ ìŠ¤í¬ë¦°ì´ 나타나면 작업 A는 배경으로 ì´ë™í•©ë‹ˆë‹¤. 새 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작ë˜ë©´ ì‹œìŠ¤í…œì€ í•´ë‹¹ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 ìž‘ì—…ì„ ì‹œìž‘í•˜ë©° -(작업 B) 여기ì—는 ë‚˜ë¦„ì˜ ì•¡í‹°ë¹„í‹° 스íƒì´ ë”¸ë ¤ 있습니다. 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ -ìƒí˜¸ 작용한 후, 사용ìžëŠ” 다시 홈으로 ëŒì•„와 ì›ëž˜ 작업 A를 시작한 +(작업 B) 여기ì—는 ë‚˜ë¦„ì˜ ì•¡í‹°ë¹„í‹° 스íƒì´ ë”¸ë ¤ 있습니다. 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ +ìƒí˜¸ 작용한 후, 사용ìžëŠ” 다시 홈으로 ëŒì•„와 ì›ëž˜ 작업 A를 시작한 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„ íƒí•©ë‹ˆë‹¤. ì´ì œ 작업 Aê°€ ì „ê²½ìœ¼ë¡œ 옵니다. -ì´ ìŠ¤íƒì— 있는 액티비티 세 개는 ëª¨ë‘ ë©€ì©¡í•˜ê³ , ìŠ¤íƒ ë§¨ ìœ„ì— ìžˆëŠ” 액티비티가 -재개ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 -사용ìžëŠ” 작업 B로 ë„로 ì „í™˜í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 홈으로 ì´ë™í•˜ì—¬ 해당 ìž‘ì—…ì„ -시작한 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ì„ ì„ íƒí•˜ë©´ ë©ë‹ˆë‹¤(아니면 -<a href="{@docRoot}guide/components/recents.html">개요 화면</a>ì—서 해당 ì•±ì˜ ìž‘ì—…ì„ ì„ íƒí•´ë„ ë©ë‹ˆë‹¤). +ì´ ìŠ¤íƒì— 있는 액티비티 세 개는 ëª¨ë‘ ë©€ì©¡í•˜ê³ , ìŠ¤íƒ ë§¨ ìœ„ì— ìžˆëŠ” 액티비티가 +재개ë©ë‹ˆë‹¤. ì´ ì‹œì ì—서 +사용ìžëŠ” 작업 B로 ë„로 ì „í™˜í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 홈으로 ì´ë™í•˜ì—¬ 해당 ìž‘ì—…ì„ +시작한 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ì„ ì„ íƒí•˜ë©´ ë©ë‹ˆë‹¤(아니면 +<a href="{@docRoot}guide/components/recents.html">개요 화면</a>ì—서 해당 ì•±ì˜ ìž‘ì—…ì„ ì„ íƒí•´ë„ ë©ë‹ˆë‹¤). ì´ê²ƒì´ Androidì—서 ë©€í‹°íƒœìŠ¤í‚¹ì„ í•˜ëŠ” ìž‘ì—…ì˜ ì˜ˆì‹œìž…ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 여러 ê°œì˜ ìž‘ì—…ì„ ë°°ê²½ì— í•œêº¼ë²ˆì— ëŒ€ê¸°ì‹œí‚¬ 수 있습니다. -하지만, 사용ìžê°€ ìˆ˜ë§Žì€ ë°°ê²½ ìž‘ì—…ì„ ë™ì‹œì— 실행하면 ì‹œìŠ¤í…œì´ ë©”ëª¨ë¦¬ë¥¼ ë³µì›í•˜ê¸° 위해 -ë°°ê²½ 액티비티를 소멸시키기 ì‹œìž‘í• ìˆ˜ ìžˆê³ , 그러면 액티비티 ìƒíƒœê°€ ì†ì‹¤ë©ë‹ˆë‹¤. +<p class="note"><strong>ì°¸ê³ :</strong> 여러 ê°œì˜ ìž‘ì—…ì„ ë°°ê²½ì— í•œêº¼ë²ˆì— ëŒ€ê¸°ì‹œí‚¬ 수 있습니다. +하지만, 사용ìžê°€ ìˆ˜ë§Žì€ ë°°ê²½ ìž‘ì—…ì„ ë™ì‹œì— 실행하면 ì‹œìŠ¤í…œì´ ë©”ëª¨ë¦¬ë¥¼ ë³µì›í•˜ê¸° 위해 +ë°°ê²½ 액티비티를 소멸시키기 ì‹œìž‘í• ìˆ˜ ìžˆê³ , 그러면 액티비티 ìƒíƒœê°€ ì†ì‹¤ë©ë‹ˆë‹¤. 다ìŒì˜ <a href="#ActivityState">액티비티 ìƒíƒœ</a>ì— ê´€í•œ ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> -<p>ë°± 스íƒì— 있는 액티비티는 ê²°ì½” 다시 ì •ë ¬ë˜ì§€ 않으므로, ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 -사용ìžì—게 하나 ì´ìƒì˜ 액티비티로부터 íŠ¹ì • 액티비티를 시작하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우, 해당 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ -ìƒì„±ë˜ì–´ ìŠ¤íƒ ìœ„ë¡œ ë°€ë ¤ì˜µë‹ˆë‹¤(해당 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ì¡´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ -맨 위로 ê°€ì ¸ì˜¤ëŠ” ëŒ€ì‹ ). ë”°ë¼ì„œ, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì˜ í•œ 액티비티가 여러 번 -ì¸ìŠ¤í„´íŠ¸í™”ë 수 있으며(서로 다른 ìž‘ì—…ìœ¼ë¡œë¶€í„°ë„ ê°€ëŠ¥), ì´ë¥¼ 나타낸 ê²ƒì´ ê·¸ë¦¼ 3입니다. ì´ ë•Œë¬¸ì— ì‚¬ìš©ìžê°€ +<p>ë°± 스íƒì— 있는 액티비티는 ê²°ì½” 다시 ì •ë ¬ë˜ì§€ 않으므로, ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 +사용ìžì—게 하나 ì´ìƒì˜ 액티비티로부터 íŠ¹ì • 액티비티를 시작하ë„ë¡ í—ˆìš©í•˜ëŠ” 경우, 해당 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ +ìƒì„±ë˜ì–´ ìŠ¤íƒ ìœ„ë¡œ ë°€ë ¤ì˜µë‹ˆë‹¤(해당 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ì¡´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ +맨 위로 ê°€ì ¸ì˜¤ëŠ” ëŒ€ì‹ ). ë”°ë¼ì„œ, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì˜ í•œ 액티비티가 여러 번 +ì¸ìŠ¤í„´íŠ¸í™”ë 수 있으며(서로 다른 ìž‘ì—…ìœ¼ë¡œë¶€í„°ë„ ê°€ëŠ¥), ì´ë¥¼ 나타낸 ê²ƒì´ ê·¸ë¦¼ 3입니다. ì´ ë•Œë¬¸ì— ì‚¬ìš©ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ 뒤로 ì´ë™í•˜ëŠ” 경우, ì•¡í‹°ë¹„í‹°ì˜ ê° ì¸ìŠ¤í„´ìŠ¤ê°€ 열린 순서대로 드러납니다 -(ê°ìž ë‚˜ë¦„ì˜ -UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë˜ëŠ” ê²ƒì„ ì›ì¹˜ 않으면 ì´ í–‰ë™ì€ ìˆ˜ì •í• ìˆ˜ +(ê°ìž ë‚˜ë¦„ì˜ +UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë˜ëŠ” ê²ƒì„ ì›ì¹˜ 않으면 ì´ í–‰ë™ì€ ìˆ˜ì •í• ìˆ˜ 있습니다. ê·¸ ë°©ë²•ì— ëŒ€í•´ì„œëŠ” <a href="#ManagingTasks">작업 관리하기</a>ì— ê´€í•œ ì´í›„ 섹션ì—서 ì´ì•¼ê¸°í•©ë‹ˆë‹¤.</p> @@ -159,16 +159,16 @@ UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë <ul> <li>액티비티 Aê°€ 액티비티 B를 시작하면 액티비티 A는 중단ë˜ì§€ë§Œ, ì‹œìŠ¤í…œì´ ê·¸ ìƒíƒœë¥¼ (예: 스í¬ë¡¤ 위치 ë° ì–‘ì‹ì— ìž…ë ¥ëœ í…스트 등) 보존합니다. -사용ìžê°€ 액티비티 Bì— ìžˆëŠ” ë™ì•ˆ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 액티비티 Aê°€ 재개ë˜ë©° ìƒíƒœë„ +사용ìžê°€ 액티비티 Bì— ìžˆëŠ” ë™ì•ˆ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 액티비티 Aê°€ 재개ë˜ë©° ìƒíƒœë„ ë³µì›ë©ë‹ˆë‹¤.</li> - <li>사용ìžê°€ <em>홈</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ìž‘ì—…ì„ ë– ë‚˜ë©´ 현재 액티비티가 -중단ë˜ê³ -ê·¸ ì†Œì† ìž‘ì—…ì´ ë°°ê²½ìœ¼ë¡œ 들어갑니다. ì‹œìŠ¤í…œì€ ìž‘ì—…ì— ì†í•œ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ 보존합니다. 사용ìžê°€ -ë‚˜ì¤‘ì— ìž‘ì—…ì„ ì‹œìž‘í•œ 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ ì„ íƒí•˜ì—¬ 해당 ìž‘ì—…ì„ ìž¬ê°œí•˜ë©´, ê·¸ ìž‘ì—…ì´ + <li>사용ìžê°€ <em>홈</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ìž‘ì—…ì„ ë– ë‚˜ë©´ 현재 액티비티가 +중단ë˜ê³ +ê·¸ ì†Œì† ìž‘ì—…ì´ ë°°ê²½ìœ¼ë¡œ 들어갑니다. ì‹œìŠ¤í…œì€ ìž‘ì—…ì— ì†í•œ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ 보존합니다. 사용ìžê°€ +ë‚˜ì¤‘ì— ìž‘ì—…ì„ ì‹œìž‘í•œ 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ ì„ íƒí•˜ì—¬ 해당 ìž‘ì—…ì„ ìž¬ê°œí•˜ë©´, ê·¸ ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ ë‚˜ì˜¤ê³ ìŠ¤íƒ ë§¨ 위ì—서 액티비티를 재개합니다.</li> - <li>사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 현재 액티비티가 스íƒì—서 íŠ€ì–´ë‚˜ì˜¤ê³ + <li>사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´, 현재 액티비티가 스íƒì—서 íŠ€ì–´ë‚˜ì˜¤ê³ ì†Œë©¸ë©ë‹ˆë‹¤. - 스íƒì— ìžˆë˜ ì´ì „ 액티비티가 재개ë©ë‹ˆë‹¤. 액티비티가 소멸ë˜ë©´, ì‹œìŠ¤í…œì€ ê·¸ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ + 스íƒì— ìžˆë˜ ì´ì „ 액티비티가 재개ë©ë‹ˆë‹¤. 액티비티가 소멸ë˜ë©´, ì‹œìŠ¤í…œì€ ê·¸ ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ 보존하지 <em>않습니다.</em></li> <li>액티비티는 여러 번 ì¸ìŠ¤í„´íŠ¸í™”í• ìˆ˜ 있으며, 다른 작업ì—ì„œë„ ì´ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있습니다.</li> </ul> @@ -182,20 +182,20 @@ UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë <h2 id="ActivityState">액티비티 ìƒíƒœ ì €ìž¥í•˜ê¸°</h2> -<p>위ì—서 논한 바와 ê°™ì´, ì‹œìŠ¤í…œì˜ ê¸°ë³¸ í–‰ë™ì€ 액티비티가 중단ë˜ë©´ ê·¸ ìƒíƒœë¥¼ ë³´ì¡´í•´ë‘는 -것입니다. ì´ë ‡ê²Œ 하면, 사용ìžê°€ ì´ì „ 액티비티로 ë„로 ì´ë™í–ˆì„ 때 ê·¸ì— ì†í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì´ì „ ìƒíƒœ +<p>위ì—서 논한 바와 ê°™ì´, ì‹œìŠ¤í…œì˜ ê¸°ë³¸ í–‰ë™ì€ 액티비티가 중단ë˜ë©´ ê·¸ ìƒíƒœë¥¼ ë³´ì¡´í•´ë‘는 +것입니다. ì´ë ‡ê²Œ 하면, 사용ìžê°€ ì´ì „ 액티비티로 ë„로 ì´ë™í–ˆì„ 때 ê·¸ì— ì†í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì´ì „ ìƒíƒœ 그대로 표시ë©ë‹ˆë‹¤. 그러나 ì•¡í‹°ë¹„í‹°ì˜ ìƒíƒœë¥¼ 미리 ë³´ì¡´í• ìˆ˜ë„ ìžˆìœ¼ë©° ì‚¬ì „ì— ì´ë ‡ê²Œ <strong>해야 합니다.</strong> -ì´ë•Œì—는, 액티비티가 소멸ë˜ê³ 다시 만들어야 하는 경우를 대비해 +ì´ë•Œì—는, 액티비티가 소멸ë˜ê³ 다시 만들어야 하는 경우를 대비해 콜백 메서드를 사용합니다.</p> -<p>ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹° 중 하나를 중단시키는 경우(예를 들어 새 액티비티가 시작ë˜ì—ˆì„ 때 ë˜ëŠ” ìž‘ì—…ì´ -배경으로 ì´ë™í•˜ëŠ” 경우), ì‹œìŠ¤í…œì€ ì‹œìŠ¤í…œ 메모리를 회복해야 하는 경우 액티비티를 -ì™„ì „ížˆ 소멸시켜버릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° ìƒí™©ì´ 벌어지면, 액티비티 ìƒíƒœì— 대한 ì •ë³´ëŠ” ì†ì‹¤ë©ë‹ˆë‹¤. ì´ëŸ° ì¼ì´ 벌어지ë”ë¼ë„, -ì‹œìŠ¤í…œì€ ì—¬ì „ížˆ -ë°± 스íƒì— 해당 ì•¡í‹°ë¹„í‹°ì˜ ìžë¦¬ê°€ 있다는 ê²ƒì„ ì•Œê³ ìžˆìŠµë‹ˆë‹¤. 다만 액티비티가 ìŠ¤íƒ ë§¨ 위로 올ë¼ì˜¤ë©´ -ì‹œìŠ¤í…œì´ ì´ë¥¼ (재개하는 ê²ƒì´ ì•„ë‹ˆë¼) 재ìƒì„±í•´ì•¼ë§Œ 합니다. 사용ìžì˜ 작업 ë‚´ìš©ì„ -잃어버리는 불ìƒì‚¬ë¥¼ í”¼í•˜ë ¤ë©´ ê·¸ ë‚´ìš©ì„ ë¯¸ë¦¬ ë³´ì¡´í•´ë‘어야 합니다. ì´ë•Œ ì•¡í‹°ë¹„í‹°ì˜ -{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 콜백 +<p>ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹° 중 하나를 중단시키는 경우(예를 들어 새 액티비티가 시작ë˜ì—ˆì„ 때 ë˜ëŠ” ìž‘ì—…ì´ +배경으로 ì´ë™í•˜ëŠ” 경우), ì‹œìŠ¤í…œì€ ì‹œìŠ¤í…œ 메모리를 회복해야 하는 경우 액티비티를 +ì™„ì „ížˆ 소멸시켜버릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° ìƒí™©ì´ 벌어지면, 액티비티 ìƒíƒœì— 대한 ì •ë³´ëŠ” ì†ì‹¤ë©ë‹ˆë‹¤. ì´ëŸ° ì¼ì´ 벌어지ë”ë¼ë„, +ì‹œìŠ¤í…œì€ ì—¬ì „ížˆ +ë°± 스íƒì— 해당 ì•¡í‹°ë¹„í‹°ì˜ ìžë¦¬ê°€ 있다는 ê²ƒì„ ì•Œê³ ìžˆìŠµë‹ˆë‹¤. 다만 액티비티가 ìŠ¤íƒ ë§¨ 위로 올ë¼ì˜¤ë©´ +ì‹œìŠ¤í…œì´ ì´ë¥¼ (재개하는 ê²ƒì´ ì•„ë‹ˆë¼) 재ìƒì„±í•´ì•¼ë§Œ 합니다. 사용ìžì˜ 작업 ë‚´ìš©ì„ +잃어버리는 불ìƒì‚¬ë¥¼ í”¼í•˜ë ¤ë©´ ê·¸ ë‚´ìš©ì„ ë¯¸ë¦¬ ë³´ì¡´í•´ë‘어야 합니다. ì´ë•Œ ì•¡í‹°ë¹„í‹°ì˜ +{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 콜백 메서드를 구현하는 ë°©ë²•ì„ ì”니다.</p> <p>액티비티 ìƒíƒœë¥¼ ì €ìž¥í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/activities.html#SavingActivityState">액티비티</a> @@ -205,19 +205,19 @@ UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë <h2 id="ManagingTasks">작업 관리하기</h2> -<p>Androidê°€ 작업과 ë°± 스íƒì„ 관리하는 ë°©ì‹ì€ ìœ„ì— ì„¤ëª…ëœ ë°”ì™€ ê°™ê³ —ê°™ì€ ìž‘ì—… 안ì—서 -ì—°ì´ì–´ ì‹œìž‘ëœ ëª¨ë“ ìž‘ì—…ì„ í•œê³³ì— ë°°ì¹˜í•˜ë˜ "í›„ìž…ì„ ì¶œ" 스íƒì— ë‘는 것—ì´ ë°©ì‹ì€ -ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 아주 효과ì 입니다. ì—¬ëŸ¬ë¶„ì€ ì•¡í‹°ë¹„í‹°ê°€ 작업과 ì—°ê´€ëœ ë°©ì‹ì´ë‚˜ -ë°± 스íƒì—ì„œì˜ ì¡´ìž¬ ë°©ì‹ì— 대해 ì—¼ë ¤í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. 그러나, ì •ìƒì ì¸ ë™ìž‘ì„ ì¸í„°ëŸ½íŠ¸í•˜ê¸°ë¡œ ê²°ì •í• ìˆ˜ë„ -있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티 하나가 시작ë˜ë©´ 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ë ¤ -í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(현재 작업 ë‚´ì— ë°°ì¹˜ë˜ëŠ” 것 ëŒ€ì‹ ì—). 아니면, 액티비티를 시작하면 ê·¸ê²ƒì˜ -기존 ì¸ìŠ¤í„´ìŠ¤ 하나를 앞으로 ê°€ì ¸ì˜¤ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ë°± ìŠ¤íƒ ë§¨ 위ì—서 새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ -ìƒì„±í•˜ëŠ” 것 ëŒ€ì‹ ì—). ë˜ëŠ” ë°± 스íƒì—서 사용ìžê°€ ìž‘ì—…ì„ ë– ë‚ ë•Œì˜ ë£¨íŠ¸ 액티비티를 ì œì™¸í•˜ê³ +<p>Androidê°€ 작업과 ë°± 스íƒì„ 관리하는 ë°©ì‹ì€ ìœ„ì— ì„¤ëª…ëœ ë°”ì™€ ê°™ê³ —ê°™ì€ ìž‘ì—… 안ì—서 +ì—°ì´ì–´ ì‹œìž‘ëœ ëª¨ë“ ìž‘ì—…ì„ í•œê³³ì— ë°°ì¹˜í•˜ë˜ "í›„ìž…ì„ ì¶œ" 스íƒì— ë‘는 것—ì´ ë°©ì‹ì€ +ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 아주 효과ì 입니다. ì—¬ëŸ¬ë¶„ì€ ì•¡í‹°ë¹„í‹°ê°€ 작업과 ì—°ê´€ëœ ë°©ì‹ì´ë‚˜ +ë°± 스íƒì—ì„œì˜ ì¡´ìž¬ ë°©ì‹ì— 대해 ì—¼ë ¤í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. 그러나, ì •ìƒì ì¸ ë™ìž‘ì„ ì¸í„°ëŸ½íŠ¸í•˜ê¸°ë¡œ ê²°ì •í• ìˆ˜ë„ +있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 액티비티 하나가 시작ë˜ë©´ 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ë ¤ +í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(현재 작업 ë‚´ì— ë°°ì¹˜ë˜ëŠ” 것 ëŒ€ì‹ ì—). 아니면, 액티비티를 시작하면 ê·¸ê²ƒì˜ +기존 ì¸ìŠ¤í„´ìŠ¤ 하나를 앞으로 ê°€ì ¸ì˜¤ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ë°± ìŠ¤íƒ ë§¨ 위ì—서 새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ +ìƒì„±í•˜ëŠ” 것 ëŒ€ì‹ ì—). ë˜ëŠ” ë°± 스íƒì—서 사용ìžê°€ ìž‘ì—…ì„ ë– ë‚ ë•Œì˜ ë£¨íŠ¸ 액티비티를 ì œì™¸í•˜ê³ ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ ì§€ìš°ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p>ì´ ëª¨ë“ ê²ƒê³¼ ê·¸ 외ì—ë„ ë§Žì€ ê²ƒì„ í• ìˆ˜ 있는 ê²ƒì´ ë°”ë¡œ +<p>ì´ ëª¨ë“ ê²ƒê³¼ ê·¸ 외ì—ë„ ë§Žì€ ê²ƒì„ í• ìˆ˜ 있는 ê²ƒì´ ë°”ë¡œ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> -매니페스트 요소 ì•ˆì— ìžˆëŠ” ì†ì„±ê³¼, +매니페스트 요소 ì•ˆì— ìžˆëŠ” ì†ì„±ê³¼, {@link android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…íŠ¸ì— ìžˆëŠ” 플래그입니다.</p> <p>ì´ëŸ° ë©´ì—서, ì—¬ëŸ¬ë¶„ì´ ì‚¬ìš©í• ìˆ˜ 있는 주요 <a href="{@docRoot}guide/topics/manifest/activity-element.html"> @@ -246,170 +246,170 @@ UI ìƒíƒœë¥¼ ê°€ì§€ê³ ). 다만, 액티비티가 한 번 ì´ìƒ ì¸ìŠ¤í„´íŠ¸í™”ë <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li> </ul> -<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ì´ì™€ ê°™ì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ì†ì„±ê³¼ ì¸í…트 플래그를 사용하여 +<p>ë‹¤ìŒ ì„¹ì…˜ì—서는 ì´ì™€ ê°™ì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ì†ì„±ê³¼ ì¸í…트 플래그를 사용하여 액티비티가 작업과 ì—°ê´€ë˜ëŠ” ë°©ì‹ì„ ì •ì˜í•˜ê³ ë°± 스íƒì—서 액티비티가 ë™ìž‘하는 ë°©ì‹ì„ ì •ì˜í•˜ëŠ” ë°©ë²•ì„ ë°°ìš°ê²Œ ë©ë‹ˆë‹¤.</p> -<p>ì´ì™¸ì—ë„ ë³„ë„로 작업과 액티비티를 표시하는 ë°©ë²•ì— ëŒ€í•œ ê³ ë ¤ 사í•ê³¼ -개요 화면ì—ì„œì˜ ê´€ë¦¬ ë°©ë²•ì„ ë…¼í•©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/recents.html">개요 화면</a>ì„ -참조하ì‹ì‹œì˜¤. ë³´í†µì€ ê°œìš” í™”ë©´ì— ìž‘ì—…ê³¼ 액티비티가 어떻게 표현ë 지는 +<p>ì´ì™¸ì—ë„ ë³„ë„로 작업과 액티비티를 표시하는 ë°©ë²•ì— ëŒ€í•œ ê³ ë ¤ 사í•ê³¼ +개요 화면ì—ì„œì˜ ê´€ë¦¬ ë°©ë²•ì„ ë…¼í•©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/recents.html">개요 화면</a>ì„ +참조하ì‹ì‹œì˜¤. ë³´í†µì€ ê°œìš” í™”ë©´ì— ìž‘ì—…ê³¼ 액티비티가 어떻게 표현ë 지는 ì‹œìŠ¤í…œì´ ì •ì˜í•˜ë„ë¡ ë‘어야 합니다. ì´ ë™ìž‘ì„ ê°œë°œìžê°€ ìˆ˜ì •í• í•„ìš”ë„ ì—†ìŠµë‹ˆë‹¤.</p> -<p class="caution"><strong>주ì˜:</strong> ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 액티비티와 ìž‘ì—…ì— ëŒ€í•œ -기본 ë™ìž‘ì„ ì¸í„°ëŸ½íŠ¸í•˜ì§€ 않는 ê²ƒì´ ì •ìƒìž…니다. 액티비티가 기본 ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ê²ƒì´ í•„ìš”í•˜ë‹¤ëŠ” -íŒë‹¨ì´ 서면, 시작 ê³¼ì • ì¤‘ì— ì•¡í‹°ë¹„í‹°ì˜ ìœ ìš©ì„±ì„ í…ŒìŠ¤íŠ¸í•˜ì‹ì‹œì˜¤. +<p class="caution"><strong>주ì˜:</strong> ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 액티비티와 ìž‘ì—…ì— ëŒ€í•œ +기본 ë™ìž‘ì„ ì¸í„°ëŸ½íŠ¸í•˜ì§€ 않는 ê²ƒì´ ì •ìƒìž…니다. 액티비티가 기본 ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ê²ƒì´ í•„ìš”í•˜ë‹¤ëŠ” +íŒë‹¨ì´ 서면, 시작 ê³¼ì • ì¤‘ì— ì•¡í‹°ë¹„í‹°ì˜ ìœ ìš©ì„±ì„ í…ŒìŠ¤íŠ¸í•˜ì‹ì‹œì˜¤. ë˜í•œ 다른 액티비티와 작업ì—서 <em>뒤로</em> ë²„íŠ¼ì„ ì¨ì„œ 해당 액티비티로 ëŒì•„올 때ì—ë„ ìœ ìš©ì„±ì„ í…ŒìŠ¤íŠ¸í•´ì•¼ 합니다. 사용ìžì˜ 예ìƒë˜ëŠ” ë™ìž‘ê³¼ ì¶©ëŒí• ê°€ëŠ¥ì„±ì´ ìžˆëŠ” íƒìƒ‰ ë™ìž‘ì„ ê¼ í…ŒìŠ¤íŠ¸í•˜ì‹ì‹œì˜¤.</p> <h3 id="TaskLaunchModes">시작 모드 ì •ì˜í•˜ê¸°</h3> -<p>시작 모드를 사용하면 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ 현재 작업과 ì—°ê´€ëœ ë°©ì‹ì„ ì •ì˜í• 수 있게 +<p>시작 모드를 사용하면 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ 현재 작업과 ì—°ê´€ëœ ë°©ì‹ì„ ì •ì˜í• 수 있게 í•´ì¤ë‹ˆë‹¤. 여러 가지 시작 모드를 ë‘ ê°€ì§€ ë°©ì‹ìœ¼ë¡œ ì •ì˜í• 수 있습니다.</p> <ul class="nolist"> <li><a href="#ManifestForTasks">매니페스트 íŒŒì¼ ì‚¬ìš©í•˜ê¸°</a> - <p>매니페스트 파ì¼ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, 액티비티가 시작ë 때 여러 작업과 ì–´ë–¤ ì‹ìœ¼ë¡œ + <p>매니페스트 파ì¼ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, 액티비티가 시작ë 때 여러 작업과 ì–´ë–¤ ì‹ìœ¼ë¡œ ì—°ê´€ì„ ë§ºì–´ì•¼ 하는지 ì§€ì •í• ìˆ˜ 있습니다.</li> <li><a href="#IntentFlagsForTasks">ì¸í…트 플래그 사용하기</a> - <p>{@link android.app.Activity#startActivity startActivity()}를 호출하는 경우 -{@link android.content.Intent}ì— í”Œëž˜ê·¸ë¥¼ í¬í•¨ì‹œì¼œ 새 액티비티가 현재 작업과 어떻게 ì—°ê´€ë˜ì–´ì•¼ í• ì§€(ë˜ëŠ” + <p>{@link android.app.Activity#startActivity startActivity()}를 호출하는 경우 +{@link android.content.Intent}ì— í”Œëž˜ê·¸ë¥¼ í¬í•¨ì‹œì¼œ 새 액티비티가 현재 작업과 어떻게 ì—°ê´€ë˜ì–´ì•¼ í• ì§€(ë˜ëŠ” ì• ì´ˆì— ì—°ê´€ì„ ë§ºì„ì§€ ì•„ë‹ì§€) ì„ ì–¸í•˜ë„ë¡ í• ìˆ˜ 있습니다.</p></li> </ul> -<p>ë”°ë¼ì„œ, 액티비티 Aê°€ 액티비티 B를 시작하면 액티비티 B는 ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 -현재 작업과 ì—°ê´€ì„ ë§ºëŠ” ë° ì 당한 ë°©ì‹(ì—°ê´€ì„ ë§ºì–´ì•¼ 한다면)ì„ ì •ì˜í• 수 ìžˆê³ ì•¡í‹°ë¹„í‹° A ë˜í•œ -액티비티 Bê°€ 현재 작업과 ì—°ê´€ì„ ë§ºëŠ” ë°©ì‹ì„ ìš”ì²í• 수 있습니다. ë‘ ì•¡í‹°ë¹„í‹°ê°€ ëª¨ë‘ ì•¡í‹°ë¹„í‹° Bê°€ 작업과 -ì—°ê´€ë˜ëŠ” ë°©ì‹ì„ ì •ì˜í•˜ëŠ” 경우, 액티비티 Aì˜ ìš”ì²(ì¸í…íŠ¸ì— ì •ì˜ëœ 바를 따름)ì„ ì•¡í‹°ë¹„í‹° Bì˜ +<p>ë”°ë¼ì„œ, 액티비티 Aê°€ 액티비티 B를 시작하면 액티비티 B는 ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 +현재 작업과 ì—°ê´€ì„ ë§ºëŠ” ë° ì 당한 ë°©ì‹(ì—°ê´€ì„ ë§ºì–´ì•¼ 한다면)ì„ ì •ì˜í• 수 ìžˆê³ ì•¡í‹°ë¹„í‹° A ë˜í•œ +액티비티 Bê°€ 현재 작업과 ì—°ê´€ì„ ë§ºëŠ” ë°©ì‹ì„ ìš”ì²í• 수 있습니다. ë‘ ì•¡í‹°ë¹„í‹°ê°€ ëª¨ë‘ ì•¡í‹°ë¹„í‹° Bê°€ 작업과 +ì—°ê´€ë˜ëŠ” ë°©ì‹ì„ ì •ì˜í•˜ëŠ” 경우, 액티비티 Aì˜ ìš”ì²(ì¸í…íŠ¸ì— ì •ì˜ëœ 바를 따름)ì„ ì•¡í‹°ë¹„í‹° Bì˜ ìš”ì²(ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 ì •ì˜)보다 우위로 ì¸ì‹í•©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 매니페스트 파ì¼ì— ì‚¬ìš©í• ìˆ˜ 있는 시작 모드 중ì—는 -ì¸í…íŠ¸ì˜ í”Œëž˜ê·¸ë¡œ ì‚¬ìš©í• ìˆ˜ëŠ” 없는 ê²ƒë„ ìžˆìœ¼ë©°, ì´ì™€ 마찬 가지로 ì¸í…íŠ¸ì˜ í”Œëž˜ê·¸ë¡œ ì‚¬ìš©í• ìˆ˜ 있는 시작 모드 중ì—는 +<p class="note"><strong>ì°¸ê³ :</strong> 매니페스트 파ì¼ì— ì‚¬ìš©í• ìˆ˜ 있는 시작 모드 중ì—는 +ì¸í…íŠ¸ì˜ í”Œëž˜ê·¸ë¡œ ì‚¬ìš©í• ìˆ˜ëŠ” 없는 ê²ƒë„ ìžˆìœ¼ë©°, ì´ì™€ 마찬 가지로 ì¸í…íŠ¸ì˜ í”Œëž˜ê·¸ë¡œ ì‚¬ìš©í• ìˆ˜ 있는 시작 모드 중ì—는 매니페스트ì—서 ì •ì˜í• 수 없는 ê²ƒë„ ìžˆìŠµë‹ˆë‹¤.</p> <h4 id="ManifestForTasks">매니페스트 íŒŒì¼ ì‚¬ìš©í•˜ê¸°</h4> -<p>매니페스트 파ì¼ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, 액티비티가 작업과 +<p>매니페스트 파ì¼ì—서 액티비티를 ì„ ì–¸í•˜ëŠ” 경우, 액티비티가 작업과 ì–´ë–¤ ì‹ìœ¼ë¡œ ì—°ê´€ë˜ì–´ì•¼ í• ì§€ ì§€ì •í•˜ë ¤ë©´ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> ìš”ì†Œì˜ <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ì†ì„±ì„ 사용하면 ë©ë‹ˆë‹¤.</p> <p><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code -launchMode}</a> ì†ì„±ì€ 액티비티가 작업 안으로 들어가며 시작ë˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ì§€ì¹¨ì„ -나타냅니다. +launchMode}</a> ì†ì„±ì€ 액티비티가 작업 안으로 들어가며 시작ë˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ì§€ì¹¨ì„ +나타냅니다. <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code> ì†ì„±ì— í• ë‹¹í• ìˆ˜ 있는 시작 모드는 네 가지가 있습니다.</p> <dl> <dt>{@code "standard"} (기본 모드)</dt> - <dd>기본입니다. ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ê°€ ì‹œìž‘ëœ ìž‘ì—…ì—서 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë§Œë“¤ê³ -ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ ì´ê²ƒìœ¼ë¡œ ì§€ì •í•©ë‹ˆë‹¤. 액티비티는 여러 번 ì¸ìŠ¤í„´íŠ¸í™”ë 수 ìžˆê³ , + <dd>기본입니다. ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ê°€ ì‹œìž‘ëœ ìž‘ì—…ì—서 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë§Œë“¤ê³ +ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ ì´ê²ƒìœ¼ë¡œ ì§€ì •í•©ë‹ˆë‹¤. 액티비티는 여러 번 ì¸ìŠ¤í„´íŠ¸í™”ë 수 ìžˆê³ , ê° ì¸ìŠ¤í„´ìŠ¤ëŠ” 서로 다른 ìž‘ì—…ì— ì†í• 수 있으며 한 ìž‘ì—…ì— ì—¬ëŸ¬ ê°œì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ìžˆì„ ìˆ˜ 있습니다.</dd> <dt>{@code "singleTop"}</dt> - <dd>ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ 현재 ìž‘ì—…ì˜ ë§¨ ìœ„ì— ì¡´ìž¬í•˜ëŠ” 경우, ì‹œìŠ¤í…œì€ ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ + <dd>ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ 현재 ìž‘ì—…ì˜ ë§¨ ìœ„ì— ì¡´ìž¬í•˜ëŠ” 경우, ì‹œìŠ¤í…œì€ ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ 해당 ì¸ìŠ¤í„´ìŠ¤ë¡œ ì§€ì •í•©ë‹ˆë‹¤. ì´ë•Œ ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 만들기보다는 해당 ì¸ìŠ¤í„´ìŠ¤ì˜ {@link -android.app.Activity#onNewIntent onNewIntent()} 메서드를 호출하는 ë°©ë²•ì„ -통합니다. 액티비티는 여러 번 ì¸ìŠ¤í„´íŠ¸í™”ë 수 ìžˆê³ , ê° ì¸ìŠ¤í„´ìŠ¤ëŠ” 서로 다른 ìž‘ì—…ì— -ì†í• 수 있으며 한 ìž‘ì—…ì— ì—¬ëŸ¬ ê°œì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ìžˆì„ ìˆ˜ 있습니다(다만 ë°± 스íƒì˜ 맨 ìœ„ì— ìžˆëŠ” +android.app.Activity#onNewIntent onNewIntent()} 메서드를 호출하는 ë°©ë²•ì„ +통합니다. 액티비티는 여러 번 ì¸ìŠ¤í„´íŠ¸í™”ë 수 ìžˆê³ , ê° ì¸ìŠ¤í„´ìŠ¤ëŠ” 서로 다른 ìž‘ì—…ì— +ì†í• 수 있으며 한 ìž‘ì—…ì— ì—¬ëŸ¬ ê°œì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ìžˆì„ ìˆ˜ 있습니다(다만 ë°± 스íƒì˜ 맨 ìœ„ì— ìžˆëŠ” 액티비티가 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ì¡´ ì¸ìŠ¤í„´ìŠ¤ê°€ <em>아닌</em> 경우ì—ë§Œ ì´ê²ƒì´ ì ìš©ë©ë‹ˆë‹¤). - <p>예를 들어 ì–´ëŠ ìž‘ì—…ì˜ ë°± 스íƒì´ 루트 액티비티 A와 액티비티 B, C, ê·¸ë¦¬ê³ ë§¨ ìœ„ì˜ ì•¡í‹°ë¹„í‹° D로 + <p>예를 들어 ì–´ëŠ ìž‘ì—…ì˜ ë°± 스íƒì´ 루트 액티비티 A와 액티비티 B, C, ê·¸ë¦¬ê³ ë§¨ ìœ„ì˜ ì•¡í‹°ë¹„í‹° D로 구성ë˜ì–´ ìžˆë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤(ì´ ìŠ¤íƒì€ A-B-C-D 형태를 ë ë©° Dê°€ 맨 ìœ„ì— ìžˆìŠµë‹ˆë‹¤). ìœ í˜• Dì˜ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì¸í…트가 ë„착합니다. -Dì— ê¸°ë³¸ {@code "standard"} 시작 모드가 있는 경우, í´ëž˜ìŠ¤ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ 시작ë˜ê³ ì´ ìŠ¤íƒì€ -A-B-C-D-Dê°€ ë©ë‹ˆë‹¤. 하지만, Dì˜ ì‹œìž‘ 모드가 {@code "singleTop"}ì¸ ê²½ìš°, Dì˜ +Dì— ê¸°ë³¸ {@code "standard"} 시작 모드가 있는 경우, í´ëž˜ìŠ¤ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ 시작ë˜ê³ ì´ ìŠ¤íƒì€ +A-B-C-D-Dê°€ ë©ë‹ˆë‹¤. 하지만, Dì˜ ì‹œìž‘ 모드가 {@code "singleTop"}ì¸ ê²½ìš°, Dì˜ ê¸°ì¡´ ì¸ìŠ¤í„´ìŠ¤ê°€ 해당 ì¸í…트를 {@link -android.app.Activity#onNewIntent onNewIntent()}를 통해 받게 ë©ë‹ˆë‹¤. ì´ê²ƒì´ 스íƒì˜ 맨 ìœ„ì— ìžˆê¸° 때문입니다. 스íƒì€ -ê³„ì† A-B-C-D로 ìœ ì§€ë©ë‹ˆë‹¤. 그러나 ìœ í˜• Bì˜ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì¸í…트가 ë„착하는 경우, +android.app.Activity#onNewIntent onNewIntent()}를 통해 받게 ë©ë‹ˆë‹¤. ì´ê²ƒì´ 스íƒì˜ 맨 ìœ„ì— ìžˆê¸° 때문입니다. 스íƒì€ +ê³„ì† A-B-C-D로 ìœ ì§€ë©ë‹ˆë‹¤. 그러나 ìœ í˜• Bì˜ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì¸í…트가 ë„착하는 경우, Bì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ 스íƒì— 추가ë˜ë©° ì´ëŠ” ì•¡í‹°ë¹„í‹°ì˜ ì‹œìž‘ 모드가 {@code "singleTop"}ì´ë”ë¼ë„ 무관하게 ì ìš©ë©ë‹ˆë‹¤.</p> - <p class="note"><strong>ì°¸ê³ :</strong> ì–´ëŠ ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ ìƒì„±ë˜ë©´, -사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ì´ì „ 액티비티로 ë˜ëŒì•„ê°ˆ 수 있게 ë©ë‹ˆë‹¤. 그러나 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ì¡´ -ì¸ìŠ¤í„´ìŠ¤ê°€ + <p class="note"><strong>ì°¸ê³ :</strong> ì–´ëŠ ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ ìƒì„±ë˜ë©´, +사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ì´ì „ 액티비티로 ë˜ëŒì•„ê°ˆ 수 있게 ë©ë‹ˆë‹¤. 그러나 ì•¡í‹°ë¹„í‹°ì˜ ê¸°ì¡´ +ì¸ìŠ¤í„´ìŠ¤ê°€ 새 ì¸í…트를 처리하는 경우, 사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ë„ ìƒˆ ì¸í…트가 {@link android.app.Activity#onNewIntent -onNewIntent()}ì— ë„착하기 ì „ì˜ ì•¡í‹°ë¹„í‹° -ìƒíƒœë¡œ +onNewIntent()}ì— ë„착하기 ì „ì˜ ì•¡í‹°ë¹„í‹° +ìƒíƒœë¡œ ë˜ëŒì•„ê°ˆ 수 없습니다.</p> </dd> <dt>{@code "singleTask"}</dt> <dd>ì‹œìŠ¤í…œì´ ìƒˆ ìž‘ì—…ì„ ë§Œë“¤ê³ ìƒˆ ìž‘ì—…ì˜ ë£¨íŠ¸ì— ìžˆëŠ” 액티비티를 ì¸ìŠ¤í„´íŠ¸í™”í•©ë‹ˆë‹¤. -하지만, ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ ë³„ê°œì˜ ìž‘ì—…ì— ì¡´ìž¬í•˜ëŠ” 경우, ì‹œìŠ¤í…œì€ ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ +하지만, ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ ë³„ê°œì˜ ìž‘ì—…ì— ì¡´ìž¬í•˜ëŠ” 경우, ì‹œìŠ¤í…œì€ ì¸í…íŠ¸ì˜ ê²½ë¡œë¥¼ 기존 ì¸ìŠ¤í„´ìŠ¤ë¡œ ì§€ì •í•©ë‹ˆë‹¤. ì´ë•Œ 새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 만들기보다 해당 ì¸ìŠ¤í„´ìŠ¤ì˜ {@link -android.app.Activity#onNewIntent onNewIntent()} 메서드를 호출하는 ë°©ë²•ì„ í†µí•©ë‹ˆë‹¤. 한 ë²ˆì— +android.app.Activity#onNewIntent onNewIntent()} 메서드를 호출하는 ë°©ë²•ì„ í†µí•©ë‹ˆë‹¤. 한 ë²ˆì— ì•¡í‹°ë¹„í‹° ì¸ìŠ¤í„´ìŠ¤ 한 개씩만 ì¡´ìž¬í• ìˆ˜ 있습니다. - <p class="note"><strong>ì°¸ê³ :</strong> 액티비티가 새 작업ì—서 시작ë˜ë”ë¼ë„, + <p class="note"><strong>ì°¸ê³ :</strong> 액티비티가 새 작업ì—서 시작ë˜ë”ë¼ë„, <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ì—¬ì „ížˆ 사용ìžë¥¼ ì´ì „ 액티비티로 ëŒë ¤ë³´ëƒ…니다.</p></dd> <dt>{@code "singleInstance"}.</dt> - <dd>{@code "singleTask"}와 같습니다. 다만 ì‹œìŠ¤í…œì´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë³´ìœ í•˜ê³ ìžˆëŠ” 작업 안으로 -다른 ì–´ë–¤ ì•¡í‹°ë¹„í‹°ë„ ì‹œìž‘í•˜ì§€ 않는다는 ê²ƒì€ ì˜ˆì™¸ìž…ë‹ˆë‹¤. 액티비티는 ì–¸ì œë‚˜ ìžì‹ ì˜ ìž‘ì—…ì˜ ìœ ì¼ë¬´ì´í•œ 구성ì›ìž…니다. + <dd>{@code "singleTask"}와 같습니다. 다만 ì‹œìŠ¤í…œì´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë³´ìœ í•˜ê³ ìžˆëŠ” 작업 안으로 +다른 ì–´ë–¤ ì•¡í‹°ë¹„í‹°ë„ ì‹œìž‘í•˜ì§€ 않는다는 ê²ƒì€ ì˜ˆì™¸ìž…ë‹ˆë‹¤. 액티비티는 ì–¸ì œë‚˜ ìžì‹ ì˜ ìž‘ì—…ì˜ ìœ ì¼ë¬´ì´í•œ 구성ì›ìž…니다. ì´ê²ƒìœ¼ë¡œ 시작한 액티비티는 ëª¨ë‘ ë³„ê°œì˜ ìž‘ì—…ì—서 열립니다.</dd> </dl> -<p>ë˜ ë‹¤ë¥¸ 예로 Android 브ë¼ìš°ì € ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 있습니다. ì´ê²ƒì€ 웹 브ë¼ìš°ì € 액티비티가 í•ìƒ -ìžì‹ ë§Œì˜ ìž‘ì—…ì—서 ì—´ë ¤ì•¼ í•œë‹¤ê³ ì„ ì–¸í•©ë‹ˆë‹¤. ì´ë•Œ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> ìš”ì†Œì— {@code singleTask} 시작 모드를 ì§€ì •í•˜ëŠ” ë°©ë²•ì„ ì”니다. -다시 ë§í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 브ë¼ìš°ì €ë¥¼ ì—´ë¼ëŠ” ì¸í…트를 발행하면 -브ë¼ìš°ì €ì˜ 액티비티가 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ê°™ì€ ìž‘ì—…ì— ë°°ì¹˜ë˜ì§€ <em>않는다</em>는 -뜻입니다. ê·¸ ëŒ€ì‹ , 브ë¼ìš°ì €ì— 대한 새 ìž‘ì—…ì´ ì‹œìž‘ë˜ê±°ë‚˜, 브ë¼ìš°ì €ì— ì´ë¯¸ -ë°°ê²½ì—서 실행 ì¤‘ì¸ ìž‘ì—…ì´ ìžˆëŠ” 경우 해당 ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì™€ 새 ì¸í…트를 처리하게 +<p>ë˜ ë‹¤ë¥¸ 예로 Android 브ë¼ìš°ì € ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 있습니다. ì´ê²ƒì€ 웹 브ë¼ìš°ì € 액티비티가 í•ìƒ +ìžì‹ ë§Œì˜ ìž‘ì—…ì—서 ì—´ë ¤ì•¼ í•œë‹¤ê³ ì„ ì–¸í•©ë‹ˆë‹¤. ì´ë•Œ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> ìš”ì†Œì— {@code singleTask} 시작 모드를 ì§€ì •í•˜ëŠ” ë°©ë²•ì„ ì”니다. +다시 ë§í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 브ë¼ìš°ì €ë¥¼ ì—´ë¼ëŠ” ì¸í…트를 발행하면 +브ë¼ìš°ì €ì˜ 액티비티가 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ê°™ì€ ìž‘ì—…ì— ë°°ì¹˜ë˜ì§€ <em>않는다</em>는 +뜻입니다. ê·¸ ëŒ€ì‹ , 브ë¼ìš°ì €ì— 대한 새 ìž‘ì—…ì´ ì‹œìž‘ë˜ê±°ë‚˜, 브ë¼ìš°ì €ì— ì´ë¯¸ +ë°°ê²½ì—서 실행 ì¤‘ì¸ ìž‘ì—…ì´ ìžˆëŠ” 경우 해당 ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì™€ 새 ì¸í…트를 처리하게 ë©ë‹ˆë‹¤.</p> -<p>액티비티가 새 작업ì—서 시작ë˜ì—ˆë“ 액티비티를 시작한 것과 ê°™ì€ ìž‘ì—…ì—서 시작ë˜ì—ˆë“ 관계 ì—†ì´ -<em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ë©´ ì–¸ì œë‚˜ 사용ìžë¥¼ ì´ì „ 액티비티로 ëŒë ¤ë³´ëƒ…니다. 다만, -{@code singleTask} 시작 모드를 나타내는 액티비티를 시작한 ë‹¤ìŒ í•´ë‹¹ -ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ ë°°ê²½ ìž‘ì—…ì— ì¡´ìž¬í•˜ëŠ” 경우, ê·¸ 작업 ì „ì²´ê°€ ì „ê²½ì— ë¶ˆë ¤ë‚˜ì˜µë‹ˆë‹¤. ì´ ì‹œì ì—서 -ë°± 스íƒì—는 ì´ì œ 앞으로 ê°€ì ¸ì˜¨ 작업ì—서 ê°€ì ¸ì˜¨ ëª¨ë“ ì•¡í‹°ë¹„í‹°ê°€ í¬í•¨ë˜ì–´ 있으며, ì´ëŠ” 스íƒì˜ +<p>액티비티가 새 작업ì—서 시작ë˜ì—ˆë“ 액티비티를 시작한 것과 ê°™ì€ ìž‘ì—…ì—서 시작ë˜ì—ˆë“ 관계 ì—†ì´ +<em>뒤로</em> ë²„íŠ¼ì„ ì‚¬ìš©í•˜ë©´ ì–¸ì œë‚˜ 사용ìžë¥¼ ì´ì „ 액티비티로 ëŒë ¤ë³´ëƒ…니다. 다만, +{@code singleTask} 시작 모드를 나타내는 액티비티를 시작한 ë‹¤ìŒ í•´ë‹¹ +ì•¡í‹°ë¹„í‹°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ ë°°ê²½ ìž‘ì—…ì— ì¡´ìž¬í•˜ëŠ” 경우, ê·¸ 작업 ì „ì²´ê°€ ì „ê²½ì— ë¶ˆë ¤ë‚˜ì˜µë‹ˆë‹¤. ì´ ì‹œì ì—서 +ë°± 스íƒì—는 ì´ì œ 앞으로 ê°€ì ¸ì˜¨ 작업ì—서 ê°€ì ¸ì˜¨ ëª¨ë“ ì•¡í‹°ë¹„í‹°ê°€ í¬í•¨ë˜ì–´ 있으며, ì´ëŠ” 스íƒì˜ 맨 ìœ„ì— ìœ„ì¹˜í•©ë‹ˆë‹¤. 그림 4는 ì´ì™€ ê°™ì€ ìœ í˜•ì˜ ì‹œë‚˜ë¦¬ì˜¤ë¥¼ 나타낸 것입니다.</p> <img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" /> -<p class="img-caption"><strong>그림 4.</strong> 시작 모드가 "singleTask"ì¸ ì•¡í‹°ë¹„í‹°ê°€ -ë°± 스íƒì— 추가ë˜ëŠ” ë°©ë²•ì„ í‘œí˜„í•œ 것입니다. ì´ ì•¡í‹°ë¹„í‹°ê°€ ì´ë¯¸ ìžì‹ ì˜ ë°± 스íƒì„ ê°€ì§€ê³ ìžˆëŠ” -ë°°ê²½ ìž‘ì—…ì˜ ì¼ë¶€ì¸ 경우, 해당 ë°± 스íƒë„ ëª¨ë‘ ì „ê²½ìœ¼ë¡œ +<p class="img-caption"><strong>그림 4.</strong> 시작 모드가 "singleTask"ì¸ ì•¡í‹°ë¹„í‹°ê°€ +ë°± 스íƒì— 추가ë˜ëŠ” ë°©ë²•ì„ í‘œí˜„í•œ 것입니다. ì´ ì•¡í‹°ë¹„í‹°ê°€ ì´ë¯¸ ìžì‹ ì˜ ë°± 스íƒì„ ê°€ì§€ê³ ìžˆëŠ” +ë°°ê²½ ìž‘ì—…ì˜ ì¼ë¶€ì¸ 경우, 해당 ë°± 스íƒë„ ëª¨ë‘ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì˜¤ë©°, ì´ëŠ” 현재 작업 ìœ„ì— ë°°ì¹˜ë©ë‹ˆë‹¤.</p> -<p>매니페스트 파ì¼ì—서 시작 모드를 사용하는 ê²ƒì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +<p>매니페스트 파ì¼ì—서 시작 모드를 사용하는 ê²ƒì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -요소 문서를 참조하ì‹ì‹œì˜¤. 여기ì—서 {@code launchMode} ì†ì„±ê³¼ í—ˆìš©ëœ ê°’ì„ ë” ìžì„¸ížˆ +요소 문서를 참조하ì‹ì‹œì˜¤. 여기ì—서 {@code launchMode} ì†ì„±ê³¼ í—ˆìš©ëœ ê°’ì„ ë” ìžì„¸ížˆ 논합니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì•¡í‹°ë¹„í‹°ì— ëŒ€í•˜ì—¬ <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ì†ì„±ìœ¼ë¡œ ì§€ì •í•œ ë™ìž‘ì„ -ìž¬ì •ì˜í•˜ë ¤ë©´ 액티비티를 시작한 ì¸í…íŠ¸ì— í¬í•¨ëœ 플래그를 사용하면 ë©ë‹ˆë‹¤. ì´ ë‚´ìš©ì€ +<p class="note"><strong>ì°¸ê³ :</strong> ì•¡í‹°ë¹„í‹°ì— ëŒ€í•˜ì—¬ <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ì†ì„±ìœ¼ë¡œ ì§€ì •í•œ ë™ìž‘ì„ +ìž¬ì •ì˜í•˜ë ¤ë©´ 액티비티를 시작한 ì¸í…íŠ¸ì— í¬í•¨ëœ 플래그를 사용하면 ë©ë‹ˆë‹¤. ì´ ë‚´ìš©ì€ ë‹¤ìŒ ì„¹ì…˜ì—서 논합니다.</p> <h4 id="#IntentFlagsForTasks">ì¸í…트 플래그 사용하기</h4> -<p>액티비티를 ì‹œìž‘í• ë•Œë©´, 액티비티가 ìžì‹ ì˜ ìž‘ì—…ê³¼ ì—°ê´€ë˜ëŠ” 기본 ë°©ì‹ì„ ìˆ˜ì •í• ìˆ˜ 있습니다. +<p>액티비티를 ì‹œìž‘í• ë•Œë©´, 액티비티가 ìžì‹ ì˜ ìž‘ì—…ê³¼ ì—°ê´€ë˜ëŠ” 기본 ë°©ì‹ì„ ìˆ˜ì •í• ìˆ˜ 있습니다. {@link -android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…트 ì•ˆì— ìžˆëŠ” 플래그를 í¬í•¨ì‹œí‚¤ë©´ ë©ë‹ˆë‹¤. 기본 ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있는 +android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…트 ì•ˆì— ìžˆëŠ” 플래그를 í¬í•¨ì‹œí‚¤ë©´ ë©ë‹ˆë‹¤. 기본 ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있는 플래그는 다ìŒê³¼ 같습니다.</p> <p> <dt>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</dt> - <dd>액티비티를 새 작업ì—서 시작합니다. 지금 ì‹œìž‘í•˜ê³ ìžˆëŠ” ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ì´ë¯¸ 실행 ì¤‘ì¸ ìž‘ì—…ì´ ìžˆìœ¼ë©´, -해당 ìž‘ì—…ì˜ ë§ˆì§€ë§‰ ìƒíƒœë¥¼ ë³µì›í•˜ì—¬ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì˜¤ê³ ì•¡í‹°ë¹„í‹°ëŠ” 새 ì¸í…트를 + <dd>액티비티를 새 작업ì—서 시작합니다. 지금 ì‹œìž‘í•˜ê³ ìžˆëŠ” ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ì´ë¯¸ 실행 ì¤‘ì¸ ìž‘ì—…ì´ ìžˆìœ¼ë©´, +해당 ìž‘ì—…ì˜ ë§ˆì§€ë§‰ ìƒíƒœë¥¼ ë³µì›í•˜ì—¬ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì˜¤ê³ ì•¡í‹°ë¹„í‹°ëŠ” 새 ì¸í…트를 {@link android.app.Activity#onNewIntent onNewIntent()}ì—서 ìˆ˜ì‹ í•©ë‹ˆë‹¤. - <p>ì´ë ‡ê²Œ 하면 {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ê°’ì—서와 ê°™ì€ ë™ìž‘ì„ ë°œìƒì‹œí‚¤ë©°, + <p>ì´ë ‡ê²Œ 하면 {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ê°’ì—서와 ê°™ì€ ë™ìž‘ì„ ë°œìƒì‹œí‚¤ë©°, ì´ëŠ” ì´ì „ 섹션ì—서 논한 것과 같습니다.</p></dd> <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt> - <dd>시작ë˜ê³ 있는 액티비티가 현재 ì•¡í‹°ë¹„í‹°ì¸ ê²½ìš°(ë°± ìŠ¤íƒ ë§¨ ìœ„ì— ìžˆëŠ”), 해당 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ëŒ€ì‹ ê¸°ì¡´ -ì¸ìŠ¤í„´ìŠ¤ê°€ {@link android.app.Activity#onNewIntent onNewIntent()}ì— + <dd>시작ë˜ê³ 있는 액티비티가 현재 ì•¡í‹°ë¹„í‹°ì¸ ê²½ìš°(ë°± ìŠ¤íƒ ë§¨ ìœ„ì— ìžˆëŠ”), 해당 ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ëŒ€ì‹ ê¸°ì¡´ +ì¸ìŠ¤í„´ìŠ¤ê°€ {@link android.app.Activity#onNewIntent onNewIntent()}ì— ëŒ€í•œ í˜¸ì¶œì„ ë°›ìŠµë‹ˆë‹¤. - <p>ì´ë ‡ê²Œ 하면 {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ê°’ì—서와 ê°™ì€ ë™ìž‘ì„ ë°œìƒì‹œí‚¤ë©°, + <p>ì´ë ‡ê²Œ 하면 {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ê°’ì—서와 ê°™ì€ ë™ìž‘ì„ ë°œìƒì‹œí‚¤ë©°, ì´ëŠ” ì´ì „ 섹션ì—서 논한 것과 같습니다.</p></dd> <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt> - <dd>시작ë˜ê³ 있는 액티비티가 ì´ë¯¸ 현재 작업ì—서 실행 ì¤‘ì¸ ê²½ìš°, 해당 ì•¡í‹°ë¹„í‹°ì˜ -새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 시작하는 ëŒ€ì‹ ê·¸ ìœ„ì— ìžˆëŠ” ëª¨ë“ ë‹¤ë¥¸ 액티비티가 -소멸ë˜ê³ ì´ ì¸í…트는 해당 액티비티(ì´ì œ 맨 위로 올ë¼ì˜´)ì˜ ìž¬ê°œëœ ì¸ìŠ¤í„´ìŠ¤ë¡œ, + <dd>시작ë˜ê³ 있는 액티비티가 ì´ë¯¸ 현재 작업ì—서 실행 ì¤‘ì¸ ê²½ìš°, 해당 ì•¡í‹°ë¹„í‹°ì˜ +새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 시작하는 ëŒ€ì‹ ê·¸ ìœ„ì— ìžˆëŠ” ëª¨ë“ ë‹¤ë¥¸ 액티비티가 +소멸ë˜ê³ ì´ ì¸í…트는 해당 액티비티(ì´ì œ 맨 위로 올ë¼ì˜´)ì˜ ìž¬ê°œëœ ì¸ìŠ¤í„´ìŠ¤ë¡œ, {@link android.app.Activity#onNewIntent onNewIntent()}를 통해 ì „ë‹¬ë©ë‹ˆë‹¤. <p>ì´ ë™ìž‘ì„ ë°œìƒì‹œí‚¤ëŠ” <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> ì†ì„±ì— 대한 ê°’ì€ ì—†ìŠµë‹ˆë‹¤.</p> - <p>{@code FLAG_ACTIVITY_CLEAR_TOP}는 -{@code FLAG_ACTIVITY_NEW_TASK}와 함께 ì“°ì´ëŠ” 경우가 가장 보편ì 입니다. -ì´ë“¤ 플래그를 함께 사용하면 다른 ìž‘ì—…ì— ìžˆëŠ” 기존 ì•¡í‹°ë¹„í‹°ì˜ ìœ„ì¹˜ë¥¼ + <p>{@code FLAG_ACTIVITY_CLEAR_TOP}는 +{@code FLAG_ACTIVITY_NEW_TASK}와 함께 ì“°ì´ëŠ” 경우가 가장 보편ì 입니다. +ì´ë“¤ 플래그를 함께 사용하면 다른 ìž‘ì—…ì— ìžˆëŠ” 기존 ì•¡í‹°ë¹„í‹°ì˜ ìœ„ì¹˜ë¥¼ 찾아 ì´ë¥¼ ì¸í…íŠ¸ì— ì‘ë‹µí• ìˆ˜ 있는 ìœ„ì¹˜ì— ë†“ì„ í•œ 가지 ë°©íŽ¸ì´ ë©ë‹ˆë‹¤. </p> - <p class="note"><strong>ì°¸ê³ :</strong> ì§€ì •ëœ ì•¡í‹°ë¹„í‹°ì˜ ì‹œìž‘ 모드가 -{@code "standard"}ì¸ ê²½ìš°, -ì´ê²ƒ ë˜í•œ 스íƒì—서 ì œê±°ë˜ê³ ê·¸ ìžë¦¬ì— 새 ì¸ìŠ¤í„´ìŠ¤ê°€ ëŒ€ì‹ ìƒì„±ë˜ì–´ ìˆ˜ì‹ ë˜ëŠ” ì¸í…트를 -처리하게 ë©ë‹ˆë‹¤. ì´ëŠ” 시작 모드가 + <p class="note"><strong>ì°¸ê³ :</strong> ì§€ì •ëœ ì•¡í‹°ë¹„í‹°ì˜ ì‹œìž‘ 모드가 +{@code "standard"}ì¸ ê²½ìš°, +ì´ê²ƒ ë˜í•œ 스íƒì—서 ì œê±°ë˜ê³ ê·¸ ìžë¦¬ì— 새 ì¸ìŠ¤í„´ìŠ¤ê°€ ëŒ€ì‹ ìƒì„±ë˜ì–´ ìˆ˜ì‹ ë˜ëŠ” ì¸í…트를 +처리하게 ë©ë‹ˆë‹¤. ì´ëŠ” 시작 모드가 {@code "standard"}ì¸ ê²½ìš°, 새 ì¸í…íŠ¸ì— ëŒ€í•´ì„œëŠ” í•ìƒ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ê°€ ìƒì„±ë˜ê¸° 때문입니다. </p> </dd> </dl> @@ -420,65 +420,65 @@ android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…트 ì•ˆì— <h3 id="Affinities">ìœ ì‚¬ì„± 처리하기</h3> -<p><em>ìœ ì‚¬ì„±</em>ì´ëž€ 액티비티가 ì–´ëŠ ìž‘ì—…ì— ì†Œì†ë˜ê¸°ë¥¼ ì„ í˜¸í•˜ëŠ”ì§€ë¥¼ 나타내는 것입니다. 기본ì 으로, -ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 나온 액티비티는 서로 ìœ ì‚¬ì„±ì„ ì§€ë‹ˆê³ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, 기본ì 으로 -ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì— ìžˆëŠ” ëª¨ë“ ì•¡í‹°ë¹„í‹°ëŠ” ê°™ì€ ìž‘ì—… ì•ˆì— ìžˆëŠ” ê²ƒì„ ì„ í˜¸í•©ë‹ˆë‹¤. 하지만 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 기본 ìœ ì‚¬ì„±ì€ ê°œë°œìžê°€ -ìˆ˜ì •í• ìˆ˜ 있습니다. ê°ê¸° 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì •ì˜ëœ -액티비티가 í•˜ë‚˜ì˜ ìœ ì‚¬ì„±ì„ ê³µìœ í• ìˆ˜ë„ ìžˆê³ , ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì •ì˜ëœ 여러 ì•¡í‹°ë¹„í‹°ì— +<p><em>ìœ ì‚¬ì„±</em>ì´ëž€ 액티비티가 ì–´ëŠ ìž‘ì—…ì— ì†Œì†ë˜ê¸°ë¥¼ ì„ í˜¸í•˜ëŠ”ì§€ë¥¼ 나타내는 것입니다. 기본ì 으로, +ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 나온 액티비티는 서로 ìœ ì‚¬ì„±ì„ ì§€ë‹ˆê³ ìžˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, 기본ì 으로 +ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì— ìžˆëŠ” ëª¨ë“ ì•¡í‹°ë¹„í‹°ëŠ” ê°™ì€ ìž‘ì—… ì•ˆì— ìžˆëŠ” ê²ƒì„ ì„ í˜¸í•©ë‹ˆë‹¤. 하지만 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 기본 ìœ ì‚¬ì„±ì€ ê°œë°œìžê°€ +ìˆ˜ì •í• ìˆ˜ 있습니다. ê°ê¸° 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì •ì˜ëœ +액티비티가 í•˜ë‚˜ì˜ ìœ ì‚¬ì„±ì„ ê³µìœ í• ìˆ˜ë„ ìžˆê³ , ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì •ì˜ëœ 여러 ì•¡í‹°ë¹„í‹°ì— ì„œë¡œ 다른 작업 ìœ ì‚¬ì„±ì„ í• ë‹¹í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> <p>ì–´ëŠ ì•¡í‹°ë¹„í‹°ë¼ë„ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> -ìš”ì†Œì˜ <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> ì†ì„±ì„ +ìš”ì†Œì˜ <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> ì†ì„±ì„ 사용하여 ìœ ì‚¬ì„±ì„ ìˆ˜ì •í• ìˆ˜ 있습니다.</p> <p><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> -ì†ì„±ì€ 문ìžì—´ ê°’ì„ ì·¨í•©ë‹ˆë‹¤. ì´ëŠ” +ì†ì„±ì€ 문ìžì—´ ê°’ì„ ì·¨í•©ë‹ˆë‹¤. ì´ëŠ” <a href="{@docRoot}guide/topics/manifest/manifest-element.html"> {@code <manifest>} -</a> 요소ì—서 ì„ ì–¸í•œ 기본 패키지 ì´ë¦„ê³¼ 달리 ê³ ìœ í•´ì•¼ 합니다. 왜ëƒí•˜ë©´ ì‹œìŠ¤í…œì´ ì´ ì´ë¦„ì„ ì‚¬ìš©í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 작업 ìœ ì‚¬ì„±ì„ +</a> 요소ì—서 ì„ ì–¸í•œ 기본 패키지 ì´ë¦„ê³¼ 달리 ê³ ìœ í•´ì•¼ 합니다. 왜ëƒí•˜ë©´ ì‹œìŠ¤í…œì´ ì´ ì´ë¦„ì„ ì‚¬ìš©í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 작업 ìœ ì‚¬ì„±ì„ ì‹ë³„하기 때문입니다.</p> <p>ìœ ì‚¬ì„±ì´ ì—í• ì„ ê°–ëŠ” ê²ƒì€ ë‹¤ìŒê³¼ ê°™ì€ ë‘ ê°€ì§€ ìƒí™©ì—서입니다.</p> <ul> - <li>액티비티를 시작한 ì¸í…íŠ¸ì— + <li>액티비티를 시작한 ì¸í…íŠ¸ì— {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} 플래그가 들어 있는 경우. -<p>새로운 액티비티는 기본ì 으로 -{@link android.app.Activity#startActivity startActivity()}를 호출한 ì•¡í‹°ë¹„í‹°ì˜ ìž‘ì—… 안으로 들어가며 시작ë©ë‹ˆë‹¤. ì´ê²ƒì€ ë°œì‹ ìžì™€ ê°™ì€ -ë°± ìŠ¤íƒ ìœ„ë¡œ 밀어내집니다. 하지만 -{@link android.app.Activity#startActivity startActivity()}ì— +<p>새로운 액티비티는 기본ì 으로 +{@link android.app.Activity#startActivity startActivity()}를 호출한 ì•¡í‹°ë¹„í‹°ì˜ ìž‘ì—… 안으로 들어가며 시작ë©ë‹ˆë‹¤. ì´ê²ƒì€ ë°œì‹ ìžì™€ ê°™ì€ +ë°± ìŠ¤íƒ ìœ„ë¡œ 밀어내집니다. 하지만 +{@link android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬ëœ ì¸í…íŠ¸ì— {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} 플래그가 들어있는 경우, ì‹œìŠ¤í…œì€ ìƒˆ 액티비티를 ë‹´ì„ ë‹¤ë¥¸ ìž‘ì—…ì„ ì°¾ìŠµë‹ˆë‹¤. ì´ëŠ” 새 ìž‘ì—…ì¸ ê²½ìš°ê°€ 많습니다. -ê·¸ë ‡ì§€ë§Œ ê¼ ê·¸ëž˜ì•¼ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 새 액티비티와 ê°™ì€ ìœ ì‚¬ì„±ì„ ê°€ì§„ 기존 ìž‘ì—…ì´ ì´ë¯¸ 존재하는 경우, +ê·¸ë ‡ì§€ë§Œ ê¼ ê·¸ëž˜ì•¼ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 새 액티비티와 ê°™ì€ ìœ ì‚¬ì„±ì„ ê°€ì§„ 기존 ìž‘ì—…ì´ ì´ë¯¸ 존재하는 경우, 해당 액티비티는 ê·¸ 작업 안으로 들어가며 시작ë©ë‹ˆë‹¤. ê·¸ë ‡ì§€ 않으면, 새 ìž‘ì—…ì„ ì‹œìž‘í•©ë‹ˆë‹¤.</p> -<p>ì´ í”Œëž˜ê·¸ ë•Œë¬¸ì— ì•¡í‹°ë¹„í‹°ê°€ 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ê²Œ ë˜ê³ 사용ìžê°€ <em>홈</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ì´ ì•¡í‹°ë¹„í‹°ë¥¼ -ë– ë‚˜ê³ ìž -하는 경우, 사용ìžê°€ 작업으로 ë„로 ì´ë™í• ë°©ë²•ì´ ìžˆì–´ì•¼ 합니다. 엔티티 중ì—는(예를 들어 -알림 관리ìž) 액티비티를 í•ìƒ ì™¸ë¶€ 작업으로만 ì‹œìž‘í•˜ê³ ìžì‹ ì˜ ì¼ë¶€ë¡œì„œëŠ” ì ˆëŒ€ 시작하지 않는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. -ë”°ë¼ì„œ ì´ë“¤ì€ {@code FLAG_ACTIVITY_NEW_TASK}를 -{@link android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•˜ëŠ” ì¸í…íŠ¸ì— í¬í•¨ì‹œí‚µë‹ˆë‹¤. -ì´ í”Œëž˜ê·¸ë¥¼ ì‚¬ìš©í• ìˆ˜ 있는 외부 엔티티가 -í˜¸ì¶œí• ìˆ˜ 있는 액티비티를 ê°€ì§€ê³ ìžˆëŠ” 경우, 사용ìžê°€ ì‹œìž‘ëœ ìž‘ì—…ì— ëŒì•„ê°ˆ 수 있는 -ë°©ë²•ì„ ë”°ë¡œ ê°€ì§€ê³ ìžˆì–´ì•¼ 합니다. 예를 들어 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ ì´ìš©í•œë‹¤ë“ ì§€ 하는 방법입니다(ìž‘ì—…ì˜ ë£¨íŠ¸ ì•¡í‹°ë¹„í‹°ì— +<p>ì´ í”Œëž˜ê·¸ ë•Œë¬¸ì— ì•¡í‹°ë¹„í‹°ê°€ 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ê²Œ ë˜ê³ 사용ìžê°€ <em>홈</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ ì´ ì•¡í‹°ë¹„í‹°ë¥¼ +ë– ë‚˜ê³ ìž +하는 경우, 사용ìžê°€ 작업으로 ë„로 ì´ë™í• ë°©ë²•ì´ ìžˆì–´ì•¼ 합니다. 엔티티 중ì—는(예를 들어 +알림 관리ìž) 액티비티를 í•ìƒ ì™¸ë¶€ 작업으로만 ì‹œìž‘í•˜ê³ ìžì‹ ì˜ ì¼ë¶€ë¡œì„œëŠ” ì ˆëŒ€ 시작하지 않는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. +ë”°ë¼ì„œ ì´ë“¤ì€ {@code FLAG_ACTIVITY_NEW_TASK}를 +{@link android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•˜ëŠ” ì¸í…íŠ¸ì— í¬í•¨ì‹œí‚µë‹ˆë‹¤. +ì´ í”Œëž˜ê·¸ë¥¼ ì‚¬ìš©í• ìˆ˜ 있는 외부 엔티티가 +í˜¸ì¶œí• ìˆ˜ 있는 액티비티를 ê°€ì§€ê³ ìžˆëŠ” 경우, 사용ìžê°€ ì‹œìž‘ëœ ìž‘ì—…ì— ëŒì•„ê°ˆ 수 있는 +ë°©ë²•ì„ ë”°ë¡œ ê°€ì§€ê³ ìžˆì–´ì•¼ 합니다. 예를 들어 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ ì´ìš©í•œë‹¤ë“ ì§€ 하는 방법입니다(ìž‘ì—…ì˜ ë£¨íŠ¸ ì•¡í‹°ë¹„í‹°ì— {@link android.content.Intent#CATEGORY_LAUNCHER} ì¸í…트 í•„í„°ê°€ 있습니다. ì•„ëž˜ì˜ <a href="#Starting">작업 시작하기</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤).</p> </li> <li>ì•¡í‹°ë¹„í‹°ì˜ <a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent"> {@code allowTaskReparenting}</a> ì†ì„±ì´ {@code "true"}로 ì„¤ì •ëœ ê²½ìš°. - <p>ì´ ê²½ìš°, 액티비티는 ìžì‹ ì´ ì‹œìž‘í•œ 작업ì—서 벗어나 ìœ ì‚¬ì„±ì„ ê°€ì§„ 다른 ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ + <p>ì´ ê²½ìš°, 액티비티는 ìžì‹ ì´ ì‹œìž‘í•œ 작업ì—서 벗어나 ìœ ì‚¬ì„±ì„ ê°€ì§„ 다른 ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ 나오면 ê·¸ 작업으로 ì´ë™í• 수 있습니다.</p> - <p>예를 들어 ì„ íƒí•œ 몇몇 ë„시ì—서 ê¸°ìƒ ìƒíƒœë¥¼ 예보하는 ì–´ëŠ ì•¡í‹°ë¹„í‹°ê°€ -여행 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ë¡œ ì •ì˜ë˜ì–´ ìžˆë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. ì´ê²ƒì€ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 -다른 여러 액티비티와 ê°™ì€ ìœ ì‚¬ì„±ì„ ê°€ì§€ë©°(기본 ì• í”Œë¦¬ì¼€ì´ì…˜ ìœ ì‚¬ì„±) ì´ ì†ì„±ìœ¼ë¡œ ìƒìœ„ ìž¬ì§€ì •ì„ í—ˆìš©í•˜ê¸°ë„ í•©ë‹ˆë‹¤. -액티비티 중 하나가 ì¼ê¸° 예보 액티비티를 시작하면, ì´ëŠ” 처ìŒì—는 액티비티와 ê°™ì€ ìž‘ì—…ì— -ì†í•©ë‹ˆë‹¤. 하지만 여행 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì˜¤ë©´ + <p>예를 들어 ì„ íƒí•œ 몇몇 ë„시ì—서 ê¸°ìƒ ìƒíƒœë¥¼ 예보하는 ì–´ëŠ ì•¡í‹°ë¹„í‹°ê°€ +여행 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ë¡œ ì •ì˜ë˜ì–´ ìžˆë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. ì´ê²ƒì€ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 +다른 여러 액티비티와 ê°™ì€ ìœ ì‚¬ì„±ì„ ê°€ì§€ë©°(기본 ì• í”Œë¦¬ì¼€ì´ì…˜ ìœ ì‚¬ì„±) ì´ ì†ì„±ìœ¼ë¡œ ìƒìœ„ ìž¬ì§€ì •ì„ í—ˆìš©í•˜ê¸°ë„ í•©ë‹ˆë‹¤. +액티비티 중 하나가 ì¼ê¸° 예보 액티비티를 시작하면, ì´ëŠ” 처ìŒì—는 액티비티와 ê°™ì€ ìž‘ì—…ì— +ì†í•©ë‹ˆë‹¤. 하지만 여행 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìž‘ì—…ì´ ì „ê²½ìœ¼ë¡œ ë¶ˆë ¤ë‚˜ì˜¤ë©´ ì¼ê¸° 예보 액티비티는 ê·¸ ìž‘ì—…ì— ë‹¤ì‹œ í• ë‹¹ë˜ë©° ê·¸ ì•ˆì— í‘œì‹œë©ë‹ˆë‹¤.</p> </li> </ul> -<p class="note"><strong>íŒ:</strong> {@code .apk} 파ì¼ì— ì‚¬ìš©ìž ìª½ì—서 ë³´ê¸°ì— í•˜ë‚˜ ì´ìƒì˜ "ì• í”Œë¦¬ì¼€ì´ì…˜"ì´ +<p class="note"><strong>íŒ:</strong> {@code .apk} 파ì¼ì— ì‚¬ìš©ìž ìª½ì—서 ë³´ê¸°ì— í•˜ë‚˜ ì´ìƒì˜ "ì• í”Œë¦¬ì¼€ì´ì…˜"ì´ ë“¤ì–´ìžˆëŠ” 경우, <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> ì†ì„±ì„ 사용하여 ê° "ì• í”Œë¦¬ì¼€ì´ì…˜"ê³¼ ì—°ê´€ëœ ì•¡í‹°ë¹„í‹°ì— ì„œë¡œ 다른 ìœ ì‚¬ì„±ì„ í• ë‹¹í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.</p> @@ -486,9 +486,9 @@ android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…트 ì•ˆì— <h3 id="Clearing">ë°± ìŠ¤íƒ ì§€ìš°ê¸°</h3> -<p>사용ìžê°€ ìž‘ì—…ì„ ì˜¤ëžœ 시간 ë™ì•ˆ ë– ë‚˜ 있으면, ì‹œìŠ¤í…œì´ ë£¨íŠ¸ 액티비티만 ë¹¼ê³ ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ -해당 작업ì—서 ì§€ì›ë‹ˆë‹¤. 사용ìžê°€ 다시 작업으로 ëŒì•„오면, 루트 액티비티만 ë³µì›ë©ë‹ˆë‹¤. -ì‹œìŠ¤í…œì´ ì´ëŸ° ì‹ìœ¼ë¡œ ë™ìž‘하는 ê²ƒì€ ì˜¤ëžœ ì‹œê°„ì´ ì§€ë‚œ 다ìŒì—는 사용ìžê°€ ì „ì— í•˜ë˜ ì¼ì„ ì¤‘ë‹¨í•˜ê³ +<p>사용ìžê°€ ìž‘ì—…ì„ ì˜¤ëžœ 시간 ë™ì•ˆ ë– ë‚˜ 있으면, ì‹œìŠ¤í…œì´ ë£¨íŠ¸ 액티비티만 ë¹¼ê³ ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ +해당 작업ì—서 ì§€ì›ë‹ˆë‹¤. 사용ìžê°€ 다시 작업으로 ëŒì•„오면, 루트 액티비티만 ë³µì›ë©ë‹ˆë‹¤. +ì‹œìŠ¤í…œì´ ì´ëŸ° ì‹ìœ¼ë¡œ ë™ìž‘하는 ê²ƒì€ ì˜¤ëžœ ì‹œê°„ì´ ì§€ë‚œ 다ìŒì—는 사용ìžê°€ ì „ì— í•˜ë˜ ì¼ì„ ì¤‘ë‹¨í•˜ê³ ìƒˆë¡œìš´ ì¼ì„ 시작하기 위해 ìž‘ì—…ì— ëŒì•„올 ê°€ëŠ¥ì„±ì´ í¬ê¸° 때문입니다. </p> <p>ì´ ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ë° ì‚¬ìš©í• ìˆ˜ 있는 액티비티 ì†ì„±ì´ 몇 가지 있습니다. </p> @@ -497,27 +497,27 @@ android.app.Activity#startActivity startActivity()}ì— ì „ë‹¬í•œ ì¸í…트 ì•ˆì— <dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code> </dt> -<dd>ì´ ì†ì„±ì´ ìž‘ì—…ì˜ ë£¨íŠ¸ 액티비티 안ì—서 {@code "true"}로 ì„¤ì •ë˜ì–´ 있는 경우, -방금 설명한 기본 ë™ìž‘ì´ ì¼ì–´ë‚˜ì§€ 않습니다. +<dd>ì´ ì†ì„±ì´ ìž‘ì—…ì˜ ë£¨íŠ¸ 액티비티 안ì—서 {@code "true"}로 ì„¤ì •ë˜ì–´ 있는 경우, +방금 설명한 기본 ë™ìž‘ì´ ì¼ì–´ë‚˜ì§€ 않습니다. ìž‘ì—…ì€ ì˜¤ëžœ ì‹œê°„ì´ ì§€ë‚œ ë’¤ì—ë„ ìžì‹ ì˜ ìŠ¤íƒì— 있는 ëª¨ë“ ì•¡í‹°ë¹„í‹°ë¥¼ ìœ ì§€í•©ë‹ˆë‹¤.</dd> <dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt> -<dd>ì´ ì†ì„±ì´ ìž‘ì—…ì˜ ë£¨íŠ¸ 액티비티 안ì—서 {@code "true"}로 ì„¤ì •ë˜ì–´ 있는 경우, -사용ìžê°€ ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ 다시 ëŒì•„올 때마다 스íƒì„ 루트 액티비티까지 -ì§€ì›ë‹ˆë‹¤. 바꿔 ë§í•˜ë©´, ì´ê²ƒì€ +<dd>ì´ ì†ì„±ì´ ìž‘ì—…ì˜ ë£¨íŠ¸ 액티비티 안ì—서 {@code "true"}로 ì„¤ì •ë˜ì–´ 있는 경우, +사용ìžê°€ ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ 다시 ëŒì•„올 때마다 스íƒì„ 루트 액티비티까지 +ì§€ì›ë‹ˆë‹¤. 바꿔 ë§í•˜ë©´, ì´ê²ƒì€ <a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> -{@code alwaysRetainTaskState}</a>와 ì •ë°˜ëŒ€ìž…ë‹ˆë‹¤. 사용ìžëŠ” í•ìƒ ìž‘ì—…ì˜ ì´ˆê¸° ìƒíƒœë¡œ ëŒì•„오게 ë˜ë©°, +{@code alwaysRetainTaskState}</a>와 ì •ë°˜ëŒ€ìž…ë‹ˆë‹¤. 사용ìžëŠ” í•ìƒ ìž‘ì—…ì˜ ì´ˆê¸° ìƒíƒœë¡œ ëŒì•„오게 ë˜ë©°, ì´ëŠ” 아주 ìž ê¹ ë™ì•ˆë§Œ ìž‘ì—…ì„ ë– ë‚œ 경우ì—ë„ ë§ˆì°¬ê°€ì§€ìž…ë‹ˆë‹¤.</dd> <dt><code><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code> </dt> -<dd>ì´ ì†ì„±ì€ <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>와 같지만, -작업 ì „ì²´ê°€ ì•„ë‹ˆë¼ -í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ì—서 ìž‘ë™í•©ë‹ˆë‹¤. ì´ê²ƒì€ 루트 액티비티를 í¬í•¨í•œ ëª¨ë“ ì•¡í‹°ë¹„í‹°ê°€ 없어지게 -í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ê²ƒì„ {@code "true"}로 ì„¤ì •í•˜ë©´, -액티비티는 현재 ì„¸ì…˜ì— ëŒ€í•´ì„œë§Œ ìž‘ì—…ì˜ ì¼ë¶€ë¡œ ìœ ì§€ë©ë‹ˆë‹¤. 사용ìžê°€ ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ +<dd>ì´ ì†ì„±ì€ <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>와 같지만, +작업 ì „ì²´ê°€ ì•„ë‹ˆë¼ +í•˜ë‚˜ì˜ ì•¡í‹°ë¹„í‹°ì—서 ìž‘ë™í•©ë‹ˆë‹¤. ì´ê²ƒì€ 루트 액티비티를 í¬í•¨í•œ ëª¨ë“ ì•¡í‹°ë¹„í‹°ê°€ 없어지게 +í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ê²ƒì„ {@code "true"}로 ì„¤ì •í•˜ë©´, +액티비티는 현재 ì„¸ì…˜ì— ëŒ€í•´ì„œë§Œ ìž‘ì—…ì˜ ì¼ë¶€ë¡œ ìœ ì§€ë©ë‹ˆë‹¤. 사용ìžê°€ ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ 다시 ëŒì•„오면 ì´ ìž‘ì—…ì€ ë” ì´ìƒ 존재하지 않습니다.</dd> </dl> @@ -526,9 +526,9 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask <h3 id="Starting">작업 시작하기</h3> -<p>액티비티를 ìž‘ì—…ì˜ ì§„ìž… ì§€ì 으로 ì„¤ì •í•˜ë ¤ë©´ ì—¬ê¸°ì— ìž‘ì—…ì—서 ì§€ì •í•œ 대로 -{@code "android.intent.action.MAIN"}ì´ ìžˆëŠ” ì¸í…트 필터를 ë¶€ì—¬í•˜ê³ -{@code "android.intent.category.LAUNCHER"}를 +<p>액티비티를 ìž‘ì—…ì˜ ì§„ìž… ì§€ì 으로 ì„¤ì •í•˜ë ¤ë©´ ì—¬ê¸°ì— ìž‘ì—…ì—서 ì§€ì •í•œ 대로 +{@code "android.intent.action.MAIN"}ì´ ìžˆëŠ” ì¸í…트 필터를 ë¶€ì—¬í•˜ê³ +{@code "android.intent.category.LAUNCHER"}를 ì§€ì •ëœ ì¹´í…Œê³ ë¦¬ë¡œ ì„¤ì •í•˜ë©´ ë©ë‹ˆë‹¤. 예:</p> <pre> @@ -541,29 +541,29 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask </activity> </pre> -<p>ì´ëŸ° ì¢…ë¥˜ì˜ ì¸í…트 필터를 사용하면 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ -ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 표시ë˜ì–´ 사용ìžì—게 액티비티를 ì‹œìž‘í• ë°©ë²•ì„ ë¶€ì—¬í•˜ë©°, +<p>ì´ëŸ° ì¢…ë¥˜ì˜ ì¸í…트 필터를 사용하면 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ +ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 표시ë˜ì–´ 사용ìžì—게 액티비티를 ì‹œìž‘í• ë°©ë²•ì„ ë¶€ì—¬í•˜ë©°, 액티비티를 ì‹œìž‘í•˜ê³ ë‚˜ë©´ ì´ê²ƒì´ ìƒì„±í•œ ìž‘ì—…ì— ì–¸ì œë“ ëŒì•„올 수 있게 ë©ë‹ˆë‹¤. </p> -<p>ì´ ë‘ ë²ˆì§¸ ëŠ¥ë ¥ì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 사용ìžëŠ” ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ ì´ ì•¡í‹°ë¹„í‹° 시작 관리ìžë¥¼ 사용하여 ë‚˜ì¤‘ì— ìž‘ì—…ì— +<p>ì´ ë‘ ë²ˆì§¸ ëŠ¥ë ¥ì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 사용ìžëŠ” ìž‘ì—…ì„ ë– ë‚¬ë‹¤ê°€ ì´ ì•¡í‹°ë¹„í‹° 시작 관리ìžë¥¼ 사용하여 ë‚˜ì¤‘ì— ìž‘ì—…ì— ëŒì•„올 수 있어야 합니다. ì´ëŸ¬í•œ ì´ìœ 로, 액티비티가 í•ìƒ ìž‘ì—…ì„ ì‹œìž‘í•˜ëŠ” 것으로 표시하는 <a href="#LaunchModes">시작 -모드</a> ë‘ ê°€ì§€, 즉 {@code "singleTask"}와 -{@code "singleInstance"}는 ì•¡í‹°ë¹„í‹°ì— +모드</a> ë‘ ê°€ì§€, 즉 {@code "singleTask"}와 +{@code "singleInstance"}는 ì•¡í‹°ë¹„í‹°ì— {@link android.content.Intent#ACTION_MAIN} - ë° {@link android.content.Intent#CATEGORY_LAUNCHER} í•„í„°ê°€ ìžˆì„ ë•Œì—ë§Œ 사용해야 합니다. 예를 들어 í•„í„°ê°€ 누ë½ë˜ë©´ 다ìŒê³¼ ê°™ì€ ì¼ì´ -ë°œìƒí•©ë‹ˆë‹¤. ì–´ëŠ ì¸í…트가 {@code "singleTask"} 액티비티를 시작하여 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ê³ , + ë° {@link android.content.Intent#CATEGORY_LAUNCHER} í•„í„°ê°€ ìžˆì„ ë•Œì—ë§Œ 사용해야 합니다. 예를 들어 í•„í„°ê°€ 누ë½ë˜ë©´ 다ìŒê³¼ ê°™ì€ ì¼ì´ +ë°œìƒí•©ë‹ˆë‹¤. ì–´ëŠ ì¸í…트가 {@code "singleTask"} 액티비티를 시작하여 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ê³ , 사용ìžê°€ ì´ ìž‘ì—…ì—서 ì¼í•˜ë©° ì–´ëŠ ì •ë„ ì‹œê°„ì„ ë³´ëƒ…ë‹ˆë‹¤. 그런 ë‹¤ìŒ ì‚¬ìš©ìžê°€ <em>홈</em> - ë²„íŠ¼ì„ ëˆ„ë¦…ë‹ˆë‹¤. ì´ì œ ì´ ìž‘ì—…ì€ ë°°ê²½ìœ¼ë¡œ ì „ì†¡ë˜ì—ˆìœ¼ë©° ëˆˆì— ë³´ì´ì§€ 않습니다. ì´ì œ 사용ìžê°€ 작업으로 ë˜ëŒì•„ê°ˆ + ë²„íŠ¼ì„ ëˆ„ë¦…ë‹ˆë‹¤. ì´ì œ ì´ ìž‘ì—…ì€ ë°°ê²½ìœ¼ë¡œ ì „ì†¡ë˜ì—ˆìœ¼ë©° ëˆˆì— ë³´ì´ì§€ 않습니다. ì´ì œ 사용ìžê°€ 작업으로 ë˜ëŒì•„ê°ˆ ë°©ë²•ì´ ì—†ì–´ì¡ŒìŠµë‹ˆë‹¤. ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 표시ë˜ì§€ 않기 때문입니다.</p> -<p>사용ìžê°€ 액티비티로 ë˜ëŒì•„ê°ˆ 수 있ë„ë¡ í•˜ëŠ” ê²ƒì„ ì›ì¹˜ 않는 경우, +<p>사용ìžê°€ 액티비티로 ë˜ëŒì•„ê°ˆ 수 있ë„ë¡ í•˜ëŠ” ê²ƒì„ ì›ì¹˜ 않는 경우, <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> - ìš”ì†Œì˜ + ìš”ì†Œì˜ <a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a> 를 {@code "true"}로 ì„¤ì •í•˜ë©´ ë©ë‹ˆë‹¤(<a href="#Clearing">ìŠ¤íƒ ì§€ìš°ê¸°</a>를 참조하ì‹ì‹œì˜¤).</p> -<p>작업과 액티비티가 개요 화면ì—서 어떻게 표시ë˜ê³ 관리ë˜ëŠ”ì§€ì— ëŒ€í•œ +<p>작업과 액티비티가 개요 화면ì—서 어떻게 표시ë˜ê³ 관리ë˜ëŠ”ì§€ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/components/recents.html"> 개요 화면</a>ì—서 확ì¸í•˜ì‹¤ 수 있습니다.</p> diff --git a/docs/html-intl/intl/ko/guide/index.jd b/docs/html-intl/intl/ko/guide/index.jd index 73af3df9b8c0..debd05312e98 100644 --- a/docs/html-intl/intl/ko/guide/index.jd +++ b/docs/html-intl/intl/ko/guide/index.jd @@ -4,16 +4,16 @@ page.title=Android 소개 <div class="sidebox" style="width:220px"><!-- width to match col-4 below --> -<p>ì•±ì˜ ìž‘ë™ ì›ë¦¬ë¥¼ ë°°ì›Œë³´ê³ ìž í•œë‹¤ë©´, ìš°ì„ +<p>ì•±ì˜ ìž‘ë™ ì›ë¦¬ë¥¼ ë°°ì›Œë³´ê³ ìž í•œë‹¤ë©´, ìš°ì„ <a href="{@docRoot}guide/components/fundamentals.html">앱 기본 í•목</a>부터 시작하ì‹ì‹œì˜¤.</p> <p>바로 ì½”ë”©ì„ ì‹œìž‘í•˜ë ¤ë©´, <a href="{@docRoot}training/basics/firstapp/index.html">첫 앱 구축하기</a>를 ì½ì–´ë³´ì‹ì‹œì˜¤.</p> </div> -<p>Android는 í’성한 ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•˜ì—¬ Java 언어 환경ì—서 실행ë˜ëŠ” -ëª¨ë°”ì¼ ê¸°ê¸°ì—서 ì‚¬ìš©í• í˜ì‹ ì ì¸ ì•±ê³¼ ê²Œìž„ì„ êµ¬ì¶•í• ìˆ˜ 있습니다. 왼쪽 íƒìƒ‰ ì˜ì—ì— ëª©ë¡ìœ¼ë¡œ ë‚˜ì—´ëœ +<p>Android는 í’성한 ì• í”Œë¦¬ì¼€ì´ì…˜ í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•˜ì—¬ Java 언어 환경ì—서 실행ë˜ëŠ” +ëª¨ë°”ì¼ ê¸°ê¸°ì—서 ì‚¬ìš©í• í˜ì‹ ì ì¸ ì•±ê³¼ ê²Œìž„ì„ êµ¬ì¶•í• ìˆ˜ 있습니다. 왼쪽 íƒìƒ‰ ì˜ì—ì— ëª©ë¡ìœ¼ë¡œ ë‚˜ì—´ëœ ì—¬ëŸ¬ 문서ì—서 Androidì˜ ë‹¤ì–‘í•œ API를 사용하여 ì•±ì„ êµ¬ì¶•í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ìƒì„¸í•œ ì •ë³´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>Android ê°œë°œì„ ì²˜ìŒ ì‹œë„í•˜ì‹ ë‹¤ë©´, 다ìŒê³¼ ê°™ì€ +<p>Android ê°œë°œì„ ì²˜ìŒ ì‹œë„í•˜ì‹ ë‹¤ë©´, 다ìŒê³¼ ê°™ì€ Android 앱 í”„ë ˆìž„ì›Œí¬ ê¸°ë³¸ ê°œë…ì„ ìˆ™ì§€í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤.</p> @@ -23,14 +23,14 @@ Android 앱 í”„ë ˆìž„ì›Œí¬ ê¸°ë³¸ ê°œë…ì„ ìˆ™ì§€í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤ <h4>ì•±ì€ ì—¬ëŸ¬ ê°œì˜ ì§„ìž… ì§€ì ì„ ì œê³µí•©ë‹ˆë‹¤.</h4> -<p>Android ì•±ì€ ì—¬ëŸ¬ 가지 ê³ ìœ í•œ 구성 ìš”ì†Œë“¤ì˜ ì¡°í•©ìœ¼ë¡œ 구축ë˜ë©°, ì´ëŸ¬í•œ 구성 요소는 개별ì 으로 -í˜¸ì¶œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ì–´ë–¤ í•˜ë‚˜ì˜ <em>액티비티</em>ê°€ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 위한 -í™”ë©´ì„ í•˜ë‚˜ ì œê³µí•˜ê³ , <em>서비스</em>ê°€ ë°°ê²½ì—서 ë…립ì 으로 ìž‘ì—…ì„ ìˆ˜í–‰í• +<p>Android ì•±ì€ ì—¬ëŸ¬ 가지 ê³ ìœ í•œ 구성 ìš”ì†Œë“¤ì˜ ì¡°í•©ìœ¼ë¡œ 구축ë˜ë©°, ì´ëŸ¬í•œ 구성 요소는 개별ì 으로 +í˜¸ì¶œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ì–´ë–¤ í•˜ë‚˜ì˜ <em>액티비티</em>ê°€ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 위한 +í™”ë©´ì„ í•˜ë‚˜ ì œê³µí•˜ê³ , <em>서비스</em>ê°€ ë°°ê²½ì—서 ë…립ì 으로 ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다.</p> -<p>한 구성 요소ì—서 ë˜ ë‹¤ë¥¸ 구성 요소를 ì‹œìž‘í•˜ë ¤ë©´ <em>ì¸í…트</em>를 사용하면 ë©ë‹ˆë‹¤. 심지어 다른 앱ì—ì„œë„ -구성 요소를 ì‹œìž‘í• ìˆ˜ 있습니다. ì§€ë„ ì•±ì—서 주소를 표시하는 액티비티를 시작하는 ê²ƒì´ ì¢‹ì€ ì˜ˆìž…ë‹ˆë‹¤. ì´ ëª¨ë¸ì€ -í•˜ë‚˜ì˜ ì•±ì— ëŒ€í•œ 여러 ê°œì˜ ì§„ìž… ì§€ì ì„ ì œê³µí•˜ì—¬ ì–´ëŠ ì•±ì´ë¼ë„ 다른 여러 ì•±ì´ í˜¸ì¶œí• ìˆ˜ 있는 ìž‘ì—…ì— ëŒ€í•´ +<p>한 구성 요소ì—서 ë˜ ë‹¤ë¥¸ 구성 요소를 ì‹œìž‘í•˜ë ¤ë©´ <em>ì¸í…트</em>를 사용하면 ë©ë‹ˆë‹¤. 심지어 다른 앱ì—ì„œë„ +구성 요소를 ì‹œìž‘í• ìˆ˜ 있습니다. ì§€ë„ ì•±ì—서 주소를 표시하는 액티비티를 시작하는 ê²ƒì´ ì¢‹ì€ ì˜ˆìž…ë‹ˆë‹¤. ì´ ëª¨ë¸ì€ +í•˜ë‚˜ì˜ ì•±ì— ëŒ€í•œ 여러 ê°œì˜ ì§„ìž… ì§€ì ì„ ì œê³µí•˜ì—¬ ì–´ëŠ ì•±ì´ë¼ë„ 다른 여러 ì•±ì´ í˜¸ì¶œí• ìˆ˜ 있는 ìž‘ì—…ì— ëŒ€í•´ 사용ìžì˜ "기본" 앱 ì—í• ì„ í•©ë‹ˆë‹¤.</p> @@ -48,14 +48,14 @@ Android 앱 í”„ë ˆìž„ì›Œí¬ ê¸°ë³¸ ê°œë…ì„ ìˆ™ì§€í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤ <h4>ì•±ì€ ì—¬ëŸ¬ 가지 ê¸°ê¸°ì— ë§žê²Œ 변경ë©ë‹ˆë‹¤.</h4> -<p>Android는 ì ì‘형 앱 í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•˜ì—¬ 여러 가지 기기 êµ¬ì„±ì— ë§žê²Œ -ê³ ìœ í•œ 리소스를 ì œê³µí• ìˆ˜ 있습니다. 예를 들어, 여러 가지 화면 í¬ê¸°ì— ë§žì¶° ê°ê¸° 다른 XML -ë ˆì´ì•„웃 파ì¼ì„ ìƒì„±í•˜ë©´ ì‹œìŠ¤í…œì´ í˜„ìž¬ ê¸°ê¸°ì˜ í™”ë©´ í¬ê¸°ë¥¼ 근거로 +<p>Android는 ì ì‘형 앱 í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•˜ì—¬ 여러 가지 기기 êµ¬ì„±ì— ë§žê²Œ +ê³ ìœ í•œ 리소스를 ì œê³µí• ìˆ˜ 있습니다. 예를 들어, 여러 가지 화면 í¬ê¸°ì— ë§žì¶° ê°ê¸° 다른 XML +ë ˆì´ì•„웃 파ì¼ì„ ìƒì„±í•˜ë©´ ì‹œìŠ¤í…œì´ í˜„ìž¬ ê¸°ê¸°ì˜ í™”ë©´ í¬ê¸°ë¥¼ 근거로 ì–´ëŠ ë ˆì´ì•„ì›ƒì„ ì ìš©í• ì§€ ê²°ì •í•©ë‹ˆë‹¤.</p> -<p>앱 ê¸°ëŠ¥ì´ íŠ¹ì •í•œ 하드웨어(예: ì¹´ë©”ë¼)를 필요로 하는 경우 ëŸ°íƒ€ìž„ì— -기기 íŠ¹ì§•ì˜ ê¸°ëŠ¥ì„ ì¿¼ë¦¬í• ìˆ˜ 있습니다. 필요하다면 ì•±ì´ í•„ìš”ë¡œ 하는 ê¸°ëŠ¥ì„ ì„ ì–¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -그러면 Google Play Store와 ê°™ì€ ì•± 마켓ì—서 해당 ê¸°ëŠ¥ì„ ì§€ì›í•˜ì§€ 않는 기기ì—서 +<p>앱 ê¸°ëŠ¥ì´ íŠ¹ì •í•œ 하드웨어(예: ì¹´ë©”ë¼)를 필요로 하는 경우 ëŸ°íƒ€ìž„ì— +기기 íŠ¹ì§•ì˜ ê¸°ëŠ¥ì„ ì¿¼ë¦¬í• ìˆ˜ 있습니다. 필요하다면 ì•±ì´ í•„ìš”ë¡œ 하는 ê¸°ëŠ¥ì„ ì„ ì–¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +그러면 Google Play Store와 ê°™ì€ ì•± 마켓ì—서 해당 ê¸°ëŠ¥ì„ ì§€ì›í•˜ì§€ 않는 기기ì—서 설치를 허용하지 않습니다.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/ko/guide/topics/manifest/manifest-intro.jd index c3550d0e7dc8..2f397c71dbb3 100644 --- a/docs/html-intl/intl/ko/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/ko/guide/topics/manifest/manifest-intro.jd @@ -20,38 +20,38 @@ page.title=앱 매니페스트 </div> <p> - ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 루트 ë¼ì´ë¸ŒëŸ¬ë¦¬ì— AndroidManifest.xml 파ì¼(ì •í™•ížˆ -ì´ ì´ë¦„으로)ì´ ìžˆì–´ì•¼ 합니다. <span itemprop="description">매니페스트 파ì¼ì€ -Android ì‹œìŠ¤í…œì— ëŒ€í•œ ì—¬ëŸ¬ë¶„ì˜ ì•± ê´€ë ¨ 필수 ì •ë³´ë¥¼ 나타냅니다. -즉 ì•±ì˜ ì½”ë“œë¥¼ 실행하기 ì „ì— ì‹œìŠ¤í…œì´ ë°˜ë“œì‹œ 필요로 하는 ì •ë³´ë¥¼ + ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 루트 ë¼ì´ë¸ŒëŸ¬ë¦¬ì— AndroidManifest.xml 파ì¼(ì •í™•ížˆ +ì´ ì´ë¦„으로)ì´ ìžˆì–´ì•¼ 합니다. <span itemprop="description">매니페스트 파ì¼ì€ +Android ì‹œìŠ¤í…œì— ëŒ€í•œ ì—¬ëŸ¬ë¶„ì˜ ì•± ê´€ë ¨ 필수 ì •ë³´ë¥¼ 나타냅니다. +즉 ì•±ì˜ ì½”ë“œë¥¼ 실행하기 ì „ì— ì‹œìŠ¤í…œì´ ë°˜ë“œì‹œ 필요로 하는 ì •ë³´ë¥¼ ë§í•©ë‹ˆë‹¤.</span> 매니페스트가 하는 ì¼ì—는 여러 가지가 있지만, ê·¸ 중ì—서 몇 가지만 소개하면 다ìŒê³¼ 같습니다. </p> <ul> -<li>ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 Java íŒ¨í‚¤ì§€ì˜ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. +<li>ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 Java íŒ¨í‚¤ì§€ì˜ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 패키지 ì´ë¦„ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 ê³ ìœ í•œ ì‹ë³„ìž ì—í• ì„ í•©ë‹ˆë‹¤.</li> -<li>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 구성 요소를 설명합니다. 액티비티, -서비스, 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° ë° ì½˜í…ì¸ ì œê³µìž ë“± ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì´ë£¨ëŠ” 여러 í•ëª©ì„ -ë§í•©ë‹ˆë‹¤. ì´ê²ƒì€ ê° êµ¬ì„± 요소를 구현하는 í´ëž˜ìŠ¤ì˜ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ê³ -ê°ê°ì˜ ê¸°ëŠ¥ì„ ê²Œì‹œí•©ë‹ˆë‹¤(예를 들어 ì²˜ë¦¬í• ìˆ˜ 있는 {@link android.content.Intent -Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ 구성 요소가 +<li>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 구성 요소를 설명합니다. 액티비티, +서비스, 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° ë° ì½˜í…ì¸ ì œê³µìž ë“± ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì´ë£¨ëŠ” 여러 í•ëª©ì„ +ë§í•©ë‹ˆë‹¤. ì´ê²ƒì€ ê° êµ¬ì„± 요소를 구현하는 í´ëž˜ìŠ¤ì˜ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ê³ +ê°ê°ì˜ ê¸°ëŠ¥ì„ ê²Œì‹œí•©ë‹ˆë‹¤(예를 들어 ì²˜ë¦¬í• ìˆ˜ 있는 {@link android.content.Intent +Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ 구성 요소가 ê°ê° 무엇ì¸ì§€ 알게 ë˜ê³ , ì–´ë–¤ ì¡°ê±´ì—서 시작해야 하는지 알 수 있습니다.</li> -<li>ì–´ëŠ í”„ë¡œì„¸ìŠ¤ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소를 í˜¸ìŠ¤íŒ…í• ê²ƒì¸ì§€ ê²°ì •í•©ë‹ˆë‹¤.</li> +<li>ì–´ëŠ í”„ë¡œì„¸ìŠ¤ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소를 í˜¸ìŠ¤íŒ…í• ê²ƒì¸ì§€ ê²°ì •í•©ë‹ˆë‹¤.</li> -<li>APIì˜ ë³´í˜¸ëœ ë¶€ë¶„ì— ì•¡ì„¸ìŠ¤í•˜ì—¬ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ ìž‘ìš©í•˜ë ¤ë©´ -ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ëŠ ê¶Œí•œì´ ê¼ í•„ìš”í•œì§€ ì„ ì–¸í•©ë‹ˆë‹¤.</li> +<li>APIì˜ ë³´í˜¸ëœ ë¶€ë¶„ì— ì•¡ì„¸ìŠ¤í•˜ì—¬ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ ìž‘ìš©í•˜ë ¤ë©´ +ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ëŠ ê¶Œí•œì´ ê¼ í•„ìš”í•œì§€ ì„ ì–¸í•©ë‹ˆë‹¤.</li> -<li>ë˜í•œ, ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 구성 요소와 ìƒí˜¸ ìž‘ìš©í•˜ë ¤ë©´ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +<li>ë˜í•œ, ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 구성 요소와 ìƒí˜¸ ìž‘ìš©í•˜ë ¤ë©´ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 반드시 ê°€ì§€ê³ ìžˆì–´ì•¼ 하는 ê¶Œí•œë„ ì„ ì–¸í•©ë‹ˆë‹¤.</li> -<li>ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 실행 ì¤‘ì¼ ë•Œ 프로파ì¼ë§ê³¼ 기타 ì •ë³´ë¥¼ ì œê³µí•˜ëŠ” -{@link android.app.Instrumentation} í´ëž˜ìŠ¤ë¥¼ 목ë¡ìœ¼ë¡œ 표시합니다. ì´ëŸ¬í•œ ì„ ì–¸ì´ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‚˜íƒ€ë‚˜ëŠ” ê²ƒì€ -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 개발 중ì´ê³ 테스트ë˜ëŠ” 단계ì—ë§Œ êµí•œë©ë‹ˆë‹¤. +<li>ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 실행 ì¤‘ì¼ ë•Œ 프로파ì¼ë§ê³¼ 기타 ì •ë³´ë¥¼ ì œê³µí•˜ëŠ” +{@link android.app.Instrumentation} í´ëž˜ìŠ¤ë¥¼ 목ë¡ìœ¼ë¡œ 표시합니다. ì´ëŸ¬í•œ ì„ ì–¸ì´ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‚˜íƒ€ë‚˜ëŠ” ê²ƒì€ +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 개발 중ì´ê³ 테스트ë˜ëŠ” 단계ì—ë§Œ êµí•œë©ë‹ˆë‹¤. ì´ë“¤ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 게시ë˜ê¸° ì „ì— ì œê±°ë©ë‹ˆë‹¤.</li> -<li>ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 필요로 하는 Android APIì˜ ìµœì†Œ ë ˆë²¨ì„ +<li>ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 필요로 하는 Android APIì˜ ìµœì†Œ ë ˆë²¨ì„ ì„ ì–¸í•©ë‹ˆë‹¤.</li> <li>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì—°ê²°ë˜ì–´ì•¼ 하는 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 목ë¡ìœ¼ë¡œ 표시합니다.</li> @@ -61,12 +61,12 @@ Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ <h2 id="filestruct">매니페스트 파ì¼ì˜ 구조</h2> <p> -ì•„ëž˜ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ 매니페스트 파ì¼ì˜ ì¼ë°˜ì ì¸ êµ¬ì¡°ì™€ 매니페스트 파ì¼ì— -ë“¤ì–´ìžˆì„ ìˆ˜ 있는 ëª¨ë“ ìš”ì†Œë¥¼ 표시한 것입니다. ê° ìš”ì†Œì™€ ê°ê°ì˜ ì†ì„±ì„ ëª¨ë‘ ë¬¸ì„œí™”í•œ -ì „ë¬¸ì€ ë³„ë„ì˜ íŒŒì¼ì—서 확ì¸í•˜ì‹¤ 수 있습니다. ì–´ë–¤ ìš”ì†Œì— ëŒ€í•´ì„œë“ -ìƒì„¸í•œ ì •ë³´ë¥¼ ë³´ë ¤ë©´ 다ì´ì–´ê·¸ëž¨ì—서 해당 요소 ì´ë¦„ì„ í´ë¦í•˜ì‹ì‹œì˜¤. -ì´ë¦„ì€ ë‹¤ì´ì–´ê·¸ëž¨ ë’¤ì— ë‚˜ì˜¤ëŠ” 요소 목ë¡(알파벳 순) ë˜ëŠ” -요소 ì´ë¦„ì´ ì–¸ê¸‰ë˜ëŠ” 기타 ì˜ì— ì–´ë””ì„œë“ í´ë¦í• 수 있습니다. +ì•„ëž˜ì˜ ë‹¤ì´ì–´ê·¸ëž¨ì€ 매니페스트 파ì¼ì˜ ì¼ë°˜ì ì¸ êµ¬ì¡°ì™€ 매니페스트 파ì¼ì— +ë“¤ì–´ìžˆì„ ìˆ˜ 있는 ëª¨ë“ ìš”ì†Œë¥¼ 표시한 것입니다. ê° ìš”ì†Œì™€ ê°ê°ì˜ ì†ì„±ì„ ëª¨ë‘ ë¬¸ì„œí™”í•œ +ì „ë¬¸ì€ ë³„ë„ì˜ íŒŒì¼ì—서 확ì¸í•˜ì‹¤ 수 있습니다. ì–´ë–¤ ìš”ì†Œì— ëŒ€í•´ì„œë“ +ìƒì„¸í•œ ì •ë³´ë¥¼ ë³´ë ¤ë©´ 다ì´ì–´ê·¸ëž¨ì—서 해당 요소 ì´ë¦„ì„ í´ë¦í•˜ì‹ì‹œì˜¤. +ì´ë¦„ì€ ë‹¤ì´ì–´ê·¸ëž¨ ë’¤ì— ë‚˜ì˜¤ëŠ” 요소 목ë¡(알파벳 순) ë˜ëŠ” +요소 ì´ë¦„ì´ ì–¸ê¸‰ë˜ëŠ” 기타 ì˜ì— ì–´ë””ì„œë“ í´ë¦í• 수 있습니다. </p> <pre> @@ -126,9 +126,9 @@ Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ </pre> <p> -매니페스트 파ì¼ì— 표시ë 수 있는 ëª¨ë“ ìš”ì†ŒëŠ” ì•„ëž˜ì— ì•ŒíŒŒë²³ 순서로 -목ë¡ìœ¼ë¡œ 표시ë˜ì–´ 있습니다. 합법ì ì¸ ìš”ì†ŒëŠ” ì´ë“¤ì´ ì „ë¶€ìž…ë‹ˆë‹¤. ê°œë°œìž ë‚˜ë¦„ëŒ€ë¡œ 요소 ë˜ëŠ” ì†ì„±ì„ -추가해서는 안 ë©ë‹ˆë‹¤. +매니페스트 파ì¼ì— 표시ë 수 있는 ëª¨ë“ ìš”ì†ŒëŠ” ì•„ëž˜ì— ì•ŒíŒŒë²³ 순서로 +목ë¡ìœ¼ë¡œ 표시ë˜ì–´ 있습니다. 합법ì ì¸ ìš”ì†ŒëŠ” ì´ë“¤ì´ ì „ë¶€ìž…ë‹ˆë‹¤. ê°œë°œìž ë‚˜ë¦„ëŒ€ë¡œ 요소 ë˜ëŠ” ì†ì„±ì„ +추가해서는 안 ë©ë‹ˆë‹¤. </p> <p style="margin-left: 2em"> @@ -158,74 +158,74 @@ Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ </p> - + <h2 id="filec">íŒŒì¼ ê·œì¹™</h2> <p> -몇몇 규칙과 ê·œì •ì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ë‚´ì˜ ëª¨ë“ ìš”ì†Œì™€ ì†ì„±ì— ì „ë°˜ì 으로 +몇몇 규칙과 ê·œì •ì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ë‚´ì˜ ëª¨ë“ ìš”ì†Œì™€ ì†ì„±ì— ì „ë°˜ì 으로 ì ìš©ë©ë‹ˆë‹¤. </p> <dl> <dt><b>요소</b></dt> -<dd>필수 요소는 -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> ë° -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> 요소ë¿ìœ¼ë¡œ, -ì´ë“¤ì€ ê°ê¸° 따로 표시ë˜ì–´ì•¼ 하며 한 번씩만 ë°œìƒí• 수 있습니다. -나머지는 대부분 여러 번 ë°œìƒí• 수 있거나 ì „í˜€ ë°œìƒí•˜ì§€ ì•Šê¸°ë„ í•©ë‹ˆë‹¤. 다만, -ê·¸ 중 최소한 ëª‡ëª‡ì€ ìžˆì–´ì•¼ 매니페스트가 무엇ì´ë“ ì˜ë¯¸ 있는 ìž‘ì—…ì„ +<dd>필수 요소는 +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> ë° +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> 요소ë¿ìœ¼ë¡œ, +ì´ë“¤ì€ ê°ê¸° 따로 표시ë˜ì–´ì•¼ 하며 한 번씩만 ë°œìƒí• 수 있습니다. +나머지는 대부분 여러 번 ë°œìƒí• 수 있거나 ì „í˜€ ë°œìƒí•˜ì§€ ì•Šê¸°ë„ í•©ë‹ˆë‹¤. 다만, +ê·¸ 중 최소한 ëª‡ëª‡ì€ ìžˆì–´ì•¼ 매니페스트가 무엇ì´ë“ ì˜ë¯¸ 있는 ìž‘ì—…ì„ ë‹¬ì„±í• ìˆ˜ 있습니다. <p> -ìš”ì†Œì— ë¬´ì—‡ì´ë“ 들어있기만 하면 다른 요소가 ê·¸ ìš”ì†Œì— ë“¤ì–´ 있는 것입니다. +ìš”ì†Œì— ë¬´ì—‡ì´ë“ 들어있기만 하면 다른 요소가 ê·¸ ìš”ì†Œì— ë“¤ì–´ 있는 것입니다. ëª¨ë“ ê°’ì€ ìš”ì†Œ ë‚´ì˜ ë¬¸ìž ë°ì´í„°ë¡œì„œê°€ ì•„ë‹ˆë¼ ì†ì„±ì„ 통해 ì„¤ì •ë©ë‹ˆë‹¤. </p> <p> -ê°™ì€ ë ˆë²¨ì— ìžˆëŠ” 여러 요소는 보통 순서가 ì§€ì •ë˜ì§€ 않습니다. 예를 들어 -<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> ë° -<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></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> ë° +<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> +요소는 ì–´ë–¤ ìˆœì„œë¡œë“ ì„œë¡œ ì„žì—¬ë„ ë©ë‹ˆë‹¤ (ì´ ê·œì¹™ì—서 <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> -요소는 예외입니다. ì´ê²ƒì€ -<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>ì˜ ë³„ì¹ì´ë¯€ë¡œ ì´ë¥¼ 반드시 ë”°ë¼ì•¼ 합니다). </p></dd> <dt><b>ì†ì„±</b></dt> -<dd>ê³µì‹ì ì¸ ì˜ë¯¸ì—서 ëª¨ë“ ì†ì„±ì€ ì„ íƒ í•목입니다. 그러나, 요소가 목ì ì„ ë‹¬ì„±í•˜ê¸° -위해서 반드시 ì§€ì •ë˜ì–´ì•¼ 하는 ê²ƒì´ ëª‡ 가지 있습니다. ê´€ë ¨ 문서를 -지침으로 사용하ì‹ì‹œì˜¤. ì •ë§ë¡œ ì„ íƒì ì¸ ì†ì„±ì˜ 경우, 기본 ê°’ì„ ì–¸ê¸‰í•˜ê±°ë‚˜ +<dd>ê³µì‹ì ì¸ ì˜ë¯¸ì—서 ëª¨ë“ ì†ì„±ì€ ì„ íƒ í•목입니다. 그러나, 요소가 목ì ì„ ë‹¬ì„±í•˜ê¸° +위해서 반드시 ì§€ì •ë˜ì–´ì•¼ 하는 ê²ƒì´ ëª‡ 가지 있습니다. ê´€ë ¨ 문서를 +지침으로 사용하ì‹ì‹œì˜¤. ì •ë§ë¡œ ì„ íƒì ì¸ ì†ì„±ì˜ 경우, 기본 ê°’ì„ ì–¸ê¸‰í•˜ê±°ë‚˜ ì‚¬ì–‘ì´ ì—†ìœ¼ë©´ ì–´ë–¤ ì¼ì´ 벌어지는지 ì§„ìˆ í•©ë‹ˆë‹¤. -<p>루트 -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +<p>루트 +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> ìš”ì†Œì˜ ëª‡ 가지 ì†ì„±ì„ ì œì™¸í•˜ê³ ëª¨ë“ ì†ì„± ì´ë¦„ì€ {@code android:alwaysRetainTaskState} ì ‘ë‘사로 시작합니다. -예를 들어, {@code android:}와 같습니다. ì´ ì ‘ë‘사는 범용ì´ê¸° ë•Œë¬¸ì— -ì†ì„±ì„ ì´ë¦„으로 참조하는 경우 ê´€ë ¨ 문서가 ì´ë¥¼ ìƒëžµí•˜ëŠ” 경우가 +예를 들어, {@code android:}와 같습니다. ì´ ì ‘ë‘사는 범용ì´ê¸° ë•Œë¬¸ì— +ì†ì„±ì„ ì´ë¦„으로 참조하는 경우 ê´€ë ¨ 문서가 ì´ë¥¼ ìƒëžµí•˜ëŠ” 경우가 ì¼ë°˜ì 입니다.</p></dd> <dt><b>í´ëž˜ìФ ì´ë¦„ ì„ ì–¸</b></dt> -<dd>ëŒ€ë‹¤ìˆ˜ì˜ ìš”ì†Œê°€ Java ê°ì²´ì— ìƒì‘합니다. 여기ì—는 +<dd>ëŒ€ë‹¤ìˆ˜ì˜ ìš”ì†Œê°€ Java ê°ì²´ì— ìƒì‘합니다. 여기ì—는 ì• í”Œë¦¬ì¼€ì´ì…˜ ìžì²´ì— 대한 요소가 í¬í•¨ë˜ë©°( -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -요소), ê·¸ê²ƒì˜ ì£¼ 구성 ìš”ì†Œë„ í¬í•¨ë©ë‹ˆë‹¤. 즉, 액티비티 -(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +요소), ê·¸ê²ƒì˜ ì£¼ 구성 ìš”ì†Œë„ í¬í•¨ë©ë‹ˆë‹¤. 즉, 액티비티 +(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), 서비스 -(<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>), 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° -(<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>) ë° ì½˜í…ì¸ ì œê³µìž -(<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> 하위 í´ëž˜ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 경우 구성 요소 í´ëž˜ìФ -({@link android.app.Activity}, {@link android.app.Service}, -{@link android.content.BroadcastReceiver} ë° {@link android.content.ContentProvider})는 ê±°ì˜ í•ìƒ ì´ë ‡ê²Œ 하게 ë˜ëŠ”ë°, -ì´ë•Œ 하위 í´ëž˜ìŠ¤ëŠ” {@code name} ì†ì„±ì„ 통해 ì„ ì–¸ë©ë‹ˆë‹¤. ì´ ì´ë¦„ì— ë°˜ë“œì‹œ -ì™„ì „í•œ 패키지 ì§€ì •ì´ í¬í•¨ë˜ì–´ 있어야 합니다. +({@link android.app.Activity}, {@link android.app.Service}, +{@link android.content.BroadcastReceiver} ë° {@link android.content.ContentProvider})는 ê±°ì˜ í•ìƒ ì´ë ‡ê²Œ 하게 ë˜ëŠ”ë°, +ì´ë•Œ 하위 í´ëž˜ìŠ¤ëŠ” {@code name} ì†ì„±ì„ 통해 ì„ ì–¸ë©ë‹ˆë‹¤. ì´ ì´ë¦„ì— ë°˜ë“œì‹œ +ì™„ì „í•œ 패키지 ì§€ì •ì´ í¬í•¨ë˜ì–´ 있어야 합니다. 예를 들어, {@link android.app.Service} 하위 í´ëž˜ìŠ¤ë¥¼ ì„ ì–¸í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í• ìˆ˜ 있습니다. </p> @@ -239,12 +239,12 @@ Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ </manifest></pre> <p> -그러나 ì¼ì¢…ì˜ ì¤„ìž„ìœ¼ë¡œì„œ 문ìžì—´ì˜ 첫 번째 글ìžê°€ ë§ˆì¹¨í‘œì¸ ê²½ìš°, 해당 +그러나 ì¼ì¢…ì˜ ì¤„ìž„ìœ¼ë¡œì„œ 문ìžì—´ì˜ 첫 번째 글ìžê°€ ë§ˆì¹¨í‘œì¸ ê²½ìš°, 해당 문ìžì—´ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 패키지 ì´ë¦„ì— ì¶”ê°€ë©ë‹ˆë‹¤( -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -ìš”ì†Œì˜ -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> -ì†ì„±ì—서 ì§€ì •í•œ 바와 ê°™ì´). ë‹¤ìŒ í• ë‹¹ì€ ìœ„ì˜ ê²ƒê³¼ 같습니다. +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +ìš”ì†Œì˜ +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> +ì†ì„±ì—서 ì§€ì •í•œ 바와 ê°™ì´). ë‹¤ìŒ í• ë‹¹ì€ ìœ„ì˜ ê²ƒê³¼ 같습니다. </p> <pre><manifest package="com.example.project" . . . > @@ -257,13 +257,13 @@ Intent} 메시지 종류 등). ì´ëŸ¬í•œ ì„ ì–¸ì„ í†µí•´ Android ì‹œìŠ¤í…œì´ </manifest></pre> <p> -Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. +Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. 하위 í´ëž˜ìŠ¤ê°€ ì§€ì •ë˜ì§€ ì•Šì€ ê²½ìš°, 기본 í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. </p></dd> <dt><b>여러 ê°œì˜ ê°’</b></dt> -<dd>하나 ì´ìƒì˜ ê°’ì„ ì§€ì •í• ìˆ˜ 있는 경우, 해당 요소는 -한 요소 ì•ˆì— ì—¬ëŸ¬ ê°œì˜ ê°’ì„ ëª©ë¡ìœ¼ë¡œ 표시하기보다 ê±°ì˜ í•ìƒ ë°˜ë³µë©ë‹ˆë‹¤. +<dd>하나 ì´ìƒì˜ ê°’ì„ ì§€ì •í• ìˆ˜ 있는 경우, 해당 요소는 +한 요소 ì•ˆì— ì—¬ëŸ¬ ê°œì˜ ê°’ì„ ëª©ë¡ìœ¼ë¡œ 표시하기보다 ê±°ì˜ í•ìƒ ë°˜ë³µë©ë‹ˆë‹¤. 예를 들어 한 ì¸í…트 í•„í„°ê°€ 여러 ê°œì˜ ìž‘ì—…ì„ ëª©ë¡ìœ¼ë¡œ í‘œì‹œí• ìˆ˜ 있습니다. <pre><intent-filter . . . > @@ -274,9 +274,9 @@ Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìФì </intent-filter></pre></dd> <dt><b>리소스 ê°’</b></dt> -<dd>몇몇 ì†ì„±ì—는 사용ìžì—게 표시ë 수 있는 ê°’ì´ ìžˆìŠµë‹ˆë‹¤. 예를 들어 -ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ë ˆì´ë¸”ê³¼ ì•„ì´ì½˜ ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. ì´ëŸ¬í•œ ì†ì„±ì˜ ê°’ì€ -ì§€ì—화해야 하며 ë”°ë¼ì„œ 리소스나 테마ì—서 ì„¤ì •ë©ë‹ˆë‹¤. 리소스 +<dd>몇몇 ì†ì„±ì—는 사용ìžì—게 표시ë 수 있는 ê°’ì´ ìžˆìŠµë‹ˆë‹¤. 예를 들어 +ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ ë ˆì´ë¸”ê³¼ ì•„ì´ì½˜ ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. ì´ëŸ¬í•œ ì†ì„±ì˜ ê°’ì€ +ì§€ì—화해야 하며 ë”°ë¼ì„œ 리소스나 테마ì—서 ì„¤ì •ë©ë‹ˆë‹¤. 리소스 ê°’ì€ ë‹¤ìŒê³¼ ê°™ì€ í˜•ì‹ìœ¼ë¡œ 표현ë©ë‹ˆë‹¤.</p> <p style="margin-left: 2em">{@code @[<i>패키지</i>:]<i>ìœ í˜•</i>:<i>ì´ë¦„</i>}</p> @@ -284,7 +284,7 @@ Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìФì <p> 여기ì—서 <i>패키지</i> ì´ë¦„ì€ ë¦¬ì†ŒìŠ¤ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ê°™ì€ íŒ¨í‚¤ì§€ì— ìžˆìœ¼ë©´ ìƒëžµí• 수 ìžˆê³ , <i>ìœ í˜•</i> ì€ "문ìžì—´" ë˜ëŠ” "그릴 수 있ìŒ" ê°™ì€ ë¦¬ì†ŒìŠ¤ ìœ í˜•ìž…ë‹ˆë‹¤. ê·¸ë¦¬ê³ - <i>ì´ë¦„</i> ì€ íŠ¹ì • 리소스를 ì‹ë³„하는 ì´ë¦„입니다. + <i>ì´ë¦„</i> ì€ íŠ¹ì • 리소스를 ì‹ë³„하는 ì´ë¦„입니다. 예: </p> @@ -299,8 +299,8 @@ Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìФì </p></dd> <dt><b>문ìžì—´ ê°’</b></dt> -<dd>ì†ì„± ê°’ì´ ë¬¸ìžì—´ì¸ 경우, ì´ì¤‘ 백슬래시('{@code \\}')를 사용하여 -ë¬¸ìž ì´ìŠ¤ì¼€ì´í”„를 수행해야 합니다. 예를 들어 줄바꿈ì—는 {@code \\n}, +<dd>ì†ì„± ê°’ì´ ë¬¸ìžì—´ì¸ 경우, ì´ì¤‘ 백슬래시('{@code \\}')를 사용하여 +ë¬¸ìž ì´ìŠ¤ì¼€ì´í”„를 수행해야 합니다. 예를 들어 줄바꿈ì—는 {@code \\n}, ìœ ë‹ˆì½”ë“œ 문ìžì—는 '{@code \\uxxxx}'를 ì“°ì‹ì‹œì˜¤.</dd> </dl> @@ -308,7 +308,7 @@ Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìФì <h2 id="filef">íŒŒì¼ ê¸°ëŠ¥</h2> <p> -ë‹¤ìŒ ì„¹ì…˜ì—서는 Android ê¸°ëŠ¥ì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— ë°˜ì˜í•˜ëŠ” +ë‹¤ìŒ ì„¹ì…˜ì—서는 Android ê¸°ëŠ¥ì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— ë°˜ì˜í•˜ëŠ” 몇 가지 ë°©ì‹ì„ 설명합니다. </p> @@ -316,37 +316,37 @@ Android는 구성 요소를 ì‹œìž‘í• ë•Œ ì´ë¦„ì´ ëª…ëª…ëœ í•˜ìœ„ í´ëž˜ìФì <h3 id="ifs">ì¸í…트 í•„í„°</h3> <p> -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 핵심 구성 요소(액티비티, 서비스 ë° ë¸Œë¡œë“œìºìŠ¤íŠ¸ -ìˆ˜ì‹ ê¸°)를 활성화하는 ê²ƒì€ <i>ì¸í…트</i>입니다. ì¸í…트는 +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 핵심 구성 요소(액티비티, 서비스 ë° ë¸Œë¡œë“œìºìŠ¤íŠ¸ +ìˆ˜ì‹ ê¸°)를 활성화하는 ê²ƒì€ <i>ì¸í…트</i>입니다. ì¸í…트는 ì›í•˜ëŠ” ìž‘ì—…ì„ ì„¤ëª…í•˜ëŠ” ì •ë³´ 묶ìŒìž…니다({@link android.content.Intent} ê°ì²´). -여기ì—는 ìž‘ì—…ì„ ìˆ˜í–‰í• ë°ì´í„°, ìž‘ì—…ì„ ìˆ˜í–‰í• êµ¬ì„± ìš”ì†Œì˜ ì¹´í…Œê³ ë¦¬ì™€ -기타 ê´€ë ¨ 지침 ë“±ì´ í¬í•¨ë©ë‹ˆë‹¤. -Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 경우 구성 ìš”ì†Œì˜ -새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì‹œìž‘í•˜ê³ , ì´ê²ƒì„ ì¸í…트 ê°ì²´ì— +여기ì—는 ìž‘ì—…ì„ ìˆ˜í–‰í• ë°ì´í„°, ìž‘ì—…ì„ ìˆ˜í–‰í• êµ¬ì„± ìš”ì†Œì˜ ì¹´í…Œê³ ë¦¬ì™€ +기타 ê´€ë ¨ 지침 ë“±ì´ í¬í•¨ë©ë‹ˆë‹¤. +Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 경우 구성 ìš”ì†Œì˜ +새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì‹œìž‘í•˜ê³ , ì´ê²ƒì„ ì¸í…트 ê°ì²´ì— ì „ë‹¬í•©ë‹ˆë‹¤. </p> <p> -구성 요소는 ìžì‹ ì˜ ëŠ¥ë ¥ì„ ì•Œë¦½ë‹ˆë‹¤. 즉, ìžì‹ ì´ ì‘ë‹µí• ìˆ˜ 있는 -ì¸í…트 종류를 ë°íž™ë‹ˆë‹¤. ì´ë•Œ 사용하는 ê²ƒì´ <i>ì¸í…트 í•„í„°</i>입니다. Android ì‹œìŠ¤í…œì€ -구성 요소를 시작하기 ì „ì— í•´ë‹¹ 구성 요소가 ì²˜ë¦¬í• ìˆ˜ 있는 ì¸í…íŠ¸ì— ëŒ€í•´ 학습해야 하기 때문ì—, -ì¸í…트 필터는 매니페스트 파ì¼ì— -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -요소로 ì§€ì •ë©ë‹ˆë‹¤. 구성 요소 í•˜ë‚˜ì— í•„í„°ëŠ” ì–¼ë§ˆë“ ì§€ ìžˆì„ ìˆ˜ 있으며, ê°ê° 서로 다른 ê¸°ëŠ¥ì„ +구성 요소는 ìžì‹ ì˜ ëŠ¥ë ¥ì„ ì•Œë¦½ë‹ˆë‹¤. 즉, ìžì‹ ì´ ì‘ë‹µí• ìˆ˜ 있는 +ì¸í…트 종류를 ë°íž™ë‹ˆë‹¤. ì´ë•Œ 사용하는 ê²ƒì´ <i>ì¸í…트 í•„í„°</i>입니다. Android ì‹œìŠ¤í…œì€ +구성 요소를 시작하기 ì „ì— í•´ë‹¹ 구성 요소가 ì²˜ë¦¬í• ìˆ˜ 있는 ì¸í…íŠ¸ì— ëŒ€í•´ 학습해야 하기 때문ì—, +ì¸í…트 필터는 매니페스트 파ì¼ì— +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> +요소로 ì§€ì •ë©ë‹ˆë‹¤. 구성 요소 í•˜ë‚˜ì— í•„í„°ëŠ” ì–¼ë§ˆë“ ì§€ ìžˆì„ ìˆ˜ 있으며, ê°ê° 서로 다른 ê¸°ëŠ¥ì„ ì„¤ëª…í•˜ê²Œ ë©ë‹ˆë‹¤. </p> <p> ëŒ€ìƒ êµ¬ì„± 요소를 명시ì 으로 지명하는 ì¸í…트가 해당 구성 요소를 활성화합니다. -필터는 아무런 ì—í• ì„ í•˜ì§€ 않습니다. 하지만 대ìƒì„ ì´ë¦„으로 ì§€ì •í•˜ì§€ 않는 ì¸í…íŠ¸ì˜ ê²½ìš°ì—는 -ìžì‹ ì´ êµ¬ì„± ìš”ì†Œì˜ í•„í„° 중 하나를 í†µê³¼í• ìˆ˜ ìžˆì„ ë•Œì—ë§Œ 해당 구성 요소를 í™œì„±í™”í• ìˆ˜ +필터는 아무런 ì—í• ì„ í•˜ì§€ 않습니다. 하지만 대ìƒì„ ì´ë¦„으로 ì§€ì •í•˜ì§€ 않는 ì¸í…íŠ¸ì˜ ê²½ìš°ì—는 +ìžì‹ ì´ êµ¬ì„± ìš”ì†Œì˜ í•„í„° 중 하나를 í†µê³¼í• ìˆ˜ ìžˆì„ ë•Œì—ë§Œ 해당 구성 요소를 í™œì„±í™”í• ìˆ˜ 있습니다. </p> <p> -ì¸í…트 ê°ì²´ë¥¼ ì¸í…트 í•„í„°ì— ëŒ€í•´ 테스트하는 ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë°©ë²•ì€ -별ë„ì˜ ë¬¸ì„œì¸ -<a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 +ì¸í…트 ê°ì²´ë¥¼ ì¸í…트 í•„í„°ì— ëŒ€í•´ 테스트하는 ë°©ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë°©ë²•ì€ +별ë„ì˜ ë¬¸ì„œì¸ +<a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a>를 참조하ì‹ì‹œì˜¤. </p> @@ -354,42 +354,42 @@ Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 ê² <h3 id="iconlabel">ì•„ì´ì½˜ ë° ë ˆì´ë¸”</h3> <p> -ëŒ€ë‹¤ìˆ˜ì˜ ìš”ì†Œì— {@code icon}ê³¼ {@code label} ì†ì„±ì´ 있으며 -ì´ê²ƒìœ¼ë¡œ 사용ìžì—게 표시ë 수 있는 ìž‘ì€ ì•„ì´ì½˜ê³¼ í…스트 ë ˆì´ë¸”ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 몇몇 요소ì—는 -{@code description} ì†ì„±ë„ 있어 좀 ë” ê¸´ 설명 í…스트를 나타낼 수 ìžˆê³ , ì´ê²ƒ ë˜í•œ í™”ë©´ì— -표시ë 수 있습니다. 예를 들어 +ëŒ€ë‹¤ìˆ˜ì˜ ìš”ì†Œì— {@code icon}ê³¼ {@code label} ì†ì„±ì´ 있으며 +ì´ê²ƒìœ¼ë¡œ 사용ìžì—게 표시ë 수 있는 ìž‘ì€ ì•„ì´ì½˜ê³¼ í…스트 ë ˆì´ë¸”ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 몇몇 요소ì—는 +{@code description} ì†ì„±ë„ 있어 좀 ë” ê¸´ 설명 í…스트를 나타낼 수 ìžˆê³ , ì´ê²ƒ ë˜í•œ í™”ë©´ì— +표시ë 수 있습니다. 예를 들어 <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -요소는 ì´ì™€ ê°™ì€ ì†ì„±ì„ ì…‹ ëª¨ë‘ ê°€ì§€ê³ ìžˆì–´ 사용ìžê°€ ì´ë¥¼ ìš”ì²í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 -ê¶Œí•œì„ í—ˆê°€í• ê²ƒì¸ì§€ 여부를 물으면 해당 권한, -ê¶Œí•œì˜ ì´ë¦„ê³¼ ê·¸ì— ìˆ˜ë°˜ë˜ëŠ” ë‚´ìš©ì— ëŒ€í•œ ì„¤ëª…ì„ +요소는 ì´ì™€ ê°™ì€ ì†ì„±ì„ ì…‹ ëª¨ë‘ ê°€ì§€ê³ ìžˆì–´ 사용ìžê°€ ì´ë¥¼ ìš”ì²í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 +ê¶Œí•œì„ í—ˆê°€í• ê²ƒì¸ì§€ 여부를 물으면 해당 권한, +ê¶Œí•œì˜ ì´ë¦„ê³¼ ê·¸ì— ìˆ˜ë°˜ë˜ëŠ” ë‚´ìš©ì— ëŒ€í•œ ì„¤ëª…ì„ ì‚¬ìš©ìžì—게 í‘œì‹œí• ìˆ˜ 있습니다. </p> <p> -ì–´ë–¤ 경우ì—ë“ , 요소ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ í•´ë‹¹ 컨테ì´ë„ˆì˜ ëª¨ë“ í•˜ìœ„ ìš”ì†Œì— ëŒ€í•œ 기본 -{@code icon}ê³¼ {@code label} ì„¤ì •ì´ ë©ë‹ˆë‹¤. -ë”°ë¼ì„œ -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -요소ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ê° ìš”ì†Œì— ëŒ€í•œ 기본 ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”입니다. -ì´ì™€ ìœ ì‚¬í•˜ê²Œ, 구성 ìš”ì†Œì— ëŒ€í•´ ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ — 예를 들어 -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -요소 — ê° êµ¬ì„± ìš”ì†Œì˜ -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -ìš”ì†Œì— ëŒ€í•œ 기본 ì„¤ì •ìž…ë‹ˆë‹¤. -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -요소가 ë ˆì´ë¸”ì„ ì„¤ì •í•˜ì§€ë§Œ 액티비티와 ê·¸ ì¸í…트 필터는 ì´ë¥¼ ì„¤ì •í•˜ì§€ 않는 경우, -ì• í”Œë¦¬ì¼€ì´ì…˜ ë ˆì´ë¸”ì„ ì•¡í‹°ë¹„í‹°ì™€ ì¸í…트 í•„í„° 양쪽 모ë‘ì˜ ë ˆì´ë¸”ì¸ ê²ƒìœ¼ë¡œ +ì–´ë–¤ 경우ì—ë“ , 요소ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ í•´ë‹¹ 컨테ì´ë„ˆì˜ ëª¨ë“ í•˜ìœ„ ìš”ì†Œì— ëŒ€í•œ 기본 +{@code icon}ê³¼ {@code label} ì„¤ì •ì´ ë©ë‹ˆë‹¤. +ë”°ë¼ì„œ +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +요소ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ê° ìš”ì†Œì— ëŒ€í•œ 기본 ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”입니다. +ì´ì™€ ìœ ì‚¬í•˜ê²Œ, 구성 ìš”ì†Œì— ëŒ€í•´ ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ — 예를 들어 +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +요소 — ê° êµ¬ì„± ìš”ì†Œì˜ +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> +ìš”ì†Œì— ëŒ€í•œ 기본 ì„¤ì •ìž…ë‹ˆë‹¤. +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +요소가 ë ˆì´ë¸”ì„ ì„¤ì •í•˜ì§€ë§Œ 액티비티와 ê·¸ ì¸í…트 필터는 ì´ë¥¼ ì„¤ì •í•˜ì§€ 않는 경우, +ì• í”Œë¦¬ì¼€ì´ì…˜ ë ˆì´ë¸”ì„ ì•¡í‹°ë¹„í‹°ì™€ ì¸í…트 í•„í„° 양쪽 모ë‘ì˜ ë ˆì´ë¸”ì¸ ê²ƒìœ¼ë¡œ 취급합니다. </p> <p> -ì¸í…트 í•„í„°ì— ëŒ€í•´ ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì€ êµ¬ì„± 요소가 사용ìžì—게 -표시ë 때마다 구성 요소를 나타내는 ë° ì‚¬ìš©ë˜ë©°, ì´ëŠ” í•„í„°ê°€ 알린 ê¸°ëŠ¥ì„ -충족하는 것입니다. 예를 들어 -"{@code android.intent.action.MAIN}" ë° -"{@code android.intent.category.LAUNCHER}"ê°€ ì„¤ì •ëœ í•„í„°ëŠ” -액티비티를 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 초기화하는 주ì—으로 알립니다. 다시 ë§í•´, -ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 표시ë˜ì–´ì•¼ 하는 ê²ƒì´ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ í•„í„°ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ +ì¸í…트 í•„í„°ì— ëŒ€í•´ ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì€ êµ¬ì„± 요소가 사용ìžì—게 +표시ë 때마다 구성 요소를 나타내는 ë° ì‚¬ìš©ë˜ë©°, ì´ëŠ” í•„í„°ê°€ 알린 ê¸°ëŠ¥ì„ +충족하는 것입니다. 예를 들어 +"{@code android.intent.action.MAIN}" ë° +"{@code android.intent.category.LAUNCHER}"ê°€ ì„¤ì •ëœ í•„í„°ëŠ” +액티비티를 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 초기화하는 주ì—으로 알립니다. 다시 ë§í•´, +ì• í”Œë¦¬ì¼€ì´ì…˜ 시작 관리ìžì— 표시ë˜ì–´ì•¼ 하는 ê²ƒì´ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ í•„í„°ì—서 ì„¤ì •ëœ ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”ì´ ì‹œìž‘ 관리ìžì— 표시ë˜ëŠ” ì•„ì´ì½˜ê³¼ ë ˆì´ë¸”입니다. </p> @@ -397,14 +397,14 @@ Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 ê² <h3 id="perms">권한</h3> <p> -í†µìƒ <i>권한</i> ì´ëž€ 기기ì—서 ì½”ë“œì˜ ì¼ë¶€ë¶„ ë˜ëŠ” ë°ì´í„°ì— 대한 액세스를 í•œì •í•˜ëŠ” -ì œí•œìž…ë‹ˆë‹¤. ì´ëŸ° 한계를 부과하는 ê²ƒì€ ì¤‘ìš”í•œ ë°ì´í„°ì™€ 코드를 보호하여 -ì´ë“¤ì´ 남용ë˜ì–´ì„œ ì‚¬ìš©ìž í™˜ê²½ì„ ì™œê³¡í•˜ê±°ë‚˜ ì†ìƒì‹œí‚¤ì§€ 않ë„ë¡ í•˜ê¸° 위해서입니다. +í†µìƒ <i>권한</i> ì´ëž€ 기기ì—서 ì½”ë“œì˜ ì¼ë¶€ë¶„ ë˜ëŠ” ë°ì´í„°ì— 대한 액세스를 í•œì •í•˜ëŠ” +ì œí•œìž…ë‹ˆë‹¤. ì´ëŸ° 한계를 부과하는 ê²ƒì€ ì¤‘ìš”í•œ ë°ì´í„°ì™€ 코드를 보호하여 +ì´ë“¤ì´ 남용ë˜ì–´ì„œ ì‚¬ìš©ìž í™˜ê²½ì„ ì™œê³¡í•˜ê±°ë‚˜ ì†ìƒì‹œí‚¤ì§€ 않ë„ë¡ í•˜ê¸° 위해서입니다. </p> <p> -ê° ê¶Œí•œì€ ê³ ìœ í•œ ë ˆì´ë¸”로 ì‹ë³„í• ìˆ˜ 있습니다. ë ˆì´ë¸”ì„ ë³´ë©´ ìžì‹ ì´ ì–´ë–¤ ìž‘ì—…ì„ ì œí•œí•˜ëŠ”ì§€ -나타내는 경우가 잦습니다. 예를 들어 다ìŒì€ Androidê°€ ì •ì˜í•˜ëŠ” 몇 가지 ê¶Œí•œì„ ë‚˜íƒ€ë‚¸ +ê° ê¶Œí•œì€ ê³ ìœ í•œ ë ˆì´ë¸”로 ì‹ë³„í• ìˆ˜ 있습니다. ë ˆì´ë¸”ì„ ë³´ë©´ ìžì‹ ì´ ì–´ë–¤ ìž‘ì—…ì„ ì œí•œí•˜ëŠ”ì§€ +나타내는 경우가 잦습니다. 예를 들어 다ìŒì€ Androidê°€ ì •ì˜í•˜ëŠ” 몇 가지 ê¶Œí•œì„ ë‚˜íƒ€ë‚¸ 것입니다. </p> @@ -418,26 +418,26 @@ Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 ê² </p> <p> -ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 권한으로 보호하는 ê¸°ëŠ¥ì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 경우, -해당 ê¶Œí•œì´ í•„ìš”í•˜ë‹¤ê³ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ -<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> -ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ê¶Œí•œì„ ì‚¬ìš©í•˜ì—¬ ìžì‹ ì˜ êµ¬ì„± 요소를(액티비티, 서비스, -브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° ë° ì½˜í…ì¸ ì œê³µìž) ë³´í˜¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Androidê°€ ì •ì˜í•œ +ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ê¶Œí•œì„ ì‚¬ìš©í•˜ì—¬ ìžì‹ ì˜ êµ¬ì„± 요소를(액티비티, 서비스, +브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° ë° ì½˜í…ì¸ ì œê³µìž) ë³´í˜¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Androidê°€ ì •ì˜í•œ 권한ì´ë¼ë©´ ì–´ë–¤ 것ì´ë“ ì‚¬ìš©í• ìˆ˜ ìžˆê³ ( -{@link android.Manifest.permission android.Manifest.permission}ì— ëª©ë¡ìœ¼ë¡œ 나열), -아니면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì„ ì–¸í•œ ê¶Œí•œì„ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. 아예 ì§ì ‘ ìžì‹ ë§Œì˜ ê¶Œí•œì„ ì •ì˜í•´ë„ ë©ë‹ˆë‹¤. 새 ê¶Œí•œì„ ì„ ì–¸í• ë•Œì—는 +{@link android.Manifest.permission android.Manifest.permission}ì— ëª©ë¡ìœ¼ë¡œ 나열), +아니면 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì„ ì–¸í•œ ê¶Œí•œì„ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. 아예 ì§ì ‘ ìžì‹ ë§Œì˜ ê¶Œí•œì„ ì •ì˜í•´ë„ ë©ë‹ˆë‹¤. 새 ê¶Œí•œì„ ì„ ì–¸í• ë•Œì—는 -<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> 요소를 사용합니다. 예를 들어 액티비티를 ë³´í˜¸í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•˜ë©´ ë©ë‹ˆë‹¤. </p> @@ -457,43 +457,43 @@ Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 ê² </pre> <p> -ì´ ì˜ˆì‹œì—서는 {@code DEBIT_ACCT} ê¶Œí•œì´ - -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -요소로 ì„ ì–¸í•˜ì˜€ì„ ë¿ë§Œ 아니ë¼, 해당 ê¶Œí•œì˜ ì‚¬ìš© ë˜í•œ -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -요소로 ìš”ì²ë˜ì—ˆë‹¤ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ì´ê²ƒì˜ ì‚¬ìš©ì„ ìš”ì²í•´ì•¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소가 ë³´í˜¸ëœ -액티비티를 ì‹œìž‘í• ìˆ˜ 있습니다. ì´ëŠ” 해당 보호를 ì• í”Œë¦¬ì¼€ì´ì…˜ ìžì‹ ì´ ë¶€ê³¼í•œ 것ì´ë”ë¼ë„ -관계 ì—†ì´ ì ìš©ë©ë‹ˆë‹¤. +ì´ ì˜ˆì‹œì—서는 {@code DEBIT_ACCT} ê¶Œí•œì´ + +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +요소로 ì„ ì–¸í•˜ì˜€ì„ ë¿ë§Œ 아니ë¼, 해당 ê¶Œí•œì˜ ì‚¬ìš© ë˜í•œ +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> +요소로 ìš”ì²ë˜ì—ˆë‹¤ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ì´ê²ƒì˜ ì‚¬ìš©ì„ ìš”ì²í•´ì•¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 다른 구성 요소가 ë³´í˜¸ëœ +액티비티를 ì‹œìž‘í• ìˆ˜ 있습니다. ì´ëŠ” 해당 보호를 ì• í”Œë¦¬ì¼€ì´ì…˜ ìžì‹ ì´ ë¶€ê³¼í•œ 것ì´ë”ë¼ë„ +관계 ì—†ì´ ì ìš©ë©ë‹ˆë‹¤. </p> <p> -ê°™ì€ ì˜ˆì‹œì—서, {@code permission} ì†ì„±ì´ 다른 ê³³ì—서 +ê°™ì€ ì˜ˆì‹œì—서, {@code permission} ì†ì„±ì´ 다른 ê³³ì—서 ì„ ì–¸í•œ ê¶Œí•œì— ì„¤ì •ëœ ê²½ìš° -(예: {@code android.permission.CALL_EMERGENCY_NUMBERS}), ì´ê²ƒì„ +(예: {@code android.permission.CALL_EMERGENCY_NUMBERS}), ì´ê²ƒì„ -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -요소를 사용하여 다시 ì„ ì–¸í• í•„ìš”ê°€ 없습니다. 하지만 해당 ê¶Œí•œì˜ ì‚¬ìš©ì€ ì—¬ì „ížˆ -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>로 ìš”ì²í•´ì•¼ 합니다. +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +요소를 사용하여 다시 ì„ ì–¸í• í•„ìš”ê°€ 없습니다. 하지만 해당 ê¶Œí•œì˜ ì‚¬ìš©ì€ ì—¬ì „ížˆ +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>로 ìš”ì²í•´ì•¼ 합니다. </p> <p> -<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> +요소는 코드로 ì •ì˜ë 권한 ê·¸ë£¹ì— ëŒ€í•œ 네임스페ì´ìŠ¤ë¥¼ +ì„ ì–¸í•©ë‹ˆë‹¤. ê·¸ë¦¬ê³ <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -ê°€ 권한 ì§‘í•©ì— ëŒ€í•œ ë ˆì´ë¸”ì„ ì •ì˜í•©ë‹ˆë‹¤(ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— -<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> +요소로 ì„ ì–¸í•œ 것과 다른 ê³³ì—서 ì„ ì–¸í•œ 것 양쪽 모ë‘). ì´ê²ƒì€ ê¶Œí•œì´ ì‚¬ìš©ìžì—게 표시ë 때 +그룹 ì§€ì •ë ë°©ì‹ì—ë§Œ ì˜í–¥ì„ 미칩니다. <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -요소는 ê·¸ë£¹ì— ì–´ëŠ ê¶Œí•œì´ ì†í•´ 있는지 ì§€ì •í•˜ëŠ” ê²ƒì´ ì•„ë‹ˆë¼, ê·¸ì € -ê·¸ë£¹ì— ì´ë¦„ì„ ë¶€ì—¬í• ë¿ìž…니다. ê·¸ë£¹ì— ê¶Œí•œì„ ë°°ì¹˜í•˜ë ¤ë©´ 그룹 ì´ë¦„ì„ +요소는 ê·¸ë£¹ì— ì–´ëŠ ê¶Œí•œì´ ì†í•´ 있는지 ì§€ì •í•˜ëŠ” ê²ƒì´ ì•„ë‹ˆë¼, ê·¸ì € +ê·¸ë£¹ì— ì´ë¦„ì„ ë¶€ì—¬í• ë¿ìž…니다. ê·¸ë£¹ì— ê¶Œí•œì„ ë°°ì¹˜í•˜ë ¤ë©´ 그룹 ì´ë¦„ì„ -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -ìš”ì†Œì˜ -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +ìš”ì†Œì˜ +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> ì†ì„±ì— í• ë‹¹í•˜ë©´ ë©ë‹ˆë‹¤. </p> @@ -501,17 +501,17 @@ Android는 ì¸í…íŠ¸ì— ì‘ë‹µí• ì ì ˆí•œ 구성 요소를 찾아 필요한 ê² <h3 id="libs">ë¼ì´ë¸ŒëŸ¬ë¦¬</h3> <p> -ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 기본 Android ë¼ì´ë¸ŒëŸ¬ë¦¬ì— ì—°ê²°ë˜ì–´ 있습니다. 여기ì—는 -ì• í”Œë¦¬ì¼€ì´ì…˜ êµ¬ì¶•ì„ ìœ„í•œ 기본ì ì¸ íŒ¨í‚¤ì§€(액티비티, 서비스, -ì¸í…트, 보기, 버튼, ì• í”Œë¦¬ì¼€ì´ì…˜, ContentProvider 등 보편ì ì¸ í´ëž˜ìФ í¬í•¨)ê°€ í¬í•¨ë˜ì–´ +ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 기본 Android ë¼ì´ë¸ŒëŸ¬ë¦¬ì— ì—°ê²°ë˜ì–´ 있습니다. 여기ì—는 +ì• í”Œë¦¬ì¼€ì´ì…˜ êµ¬ì¶•ì„ ìœ„í•œ 기본ì ì¸ íŒ¨í‚¤ì§€(액티비티, 서비스, +ì¸í…트, 보기, 버튼, ì• í”Œë¦¬ì¼€ì´ì…˜, ContentProvider 등 보편ì ì¸ í´ëž˜ìФ í¬í•¨)ê°€ í¬í•¨ë˜ì–´ 있습니다. </p> <p> -그러나 패키지 가운ë°ì—는 ìžì‹ ë§Œì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ì— ì†í•œ ê²ƒë„ ìžˆìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -사용하는 ì½”ë“œì˜ ì¶œì²˜ê°€ ì´ëŸ¬í•œ 패키지 ê°€ìš´ë° ì–´ëŠ í•œ ê°€ì§€ì— í•´ë‹¹ë˜ëŠ” 경우, 해당 íŒ¨í‚¤ì§€ì— ì—°ê²°ë˜ë„ë¡ -명시ì 으로 ìš”ì²í•´ì•¼ë§Œ 합니다. 매니페스트ì—는 별ë„ì˜ -<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> -요소가 들어 있어 ê° ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ì•¼ 합니다 (ë¼ì´ë¸ŒëŸ¬ë¦¬ ì´ë¦„ì€ íŒ¨í‚¤ì§€ì— ëŒ€í•œ +그러나 패키지 가운ë°ì—는 ìžì‹ ë§Œì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ì— ì†í•œ ê²ƒë„ ìžˆìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +사용하는 ì½”ë“œì˜ ì¶œì²˜ê°€ ì´ëŸ¬í•œ 패키지 ê°€ìš´ë° ì–´ëŠ í•œ ê°€ì§€ì— í•´ë‹¹ë˜ëŠ” 경우, 해당 íŒ¨í‚¤ì§€ì— ì—°ê²°ë˜ë„ë¡ +명시ì 으로 ìš”ì²í•´ì•¼ë§Œ 합니다. 매니페스트ì—는 별ë„ì˜ +<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> +요소가 들어 있어 ê° ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ì´ë¦„ì„ ë‚˜íƒ€ë‚´ì•¼ 합니다 (ë¼ì´ë¸ŒëŸ¬ë¦¬ ì´ë¦„ì€ íŒ¨í‚¤ì§€ì— ëŒ€í•œ ê´€ë ¨ 문서ì—서 ì°¾ì„ ìˆ˜ 있습니다). </p> diff --git a/docs/html-intl/intl/ko/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/ko/guide/topics/providers/calendar-provider.jd index 4d69b6029ec4..a2a20aff40ff 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=ìº˜ë¦°ë” ì œê³µìž <li><a href="#intent-view">ì¸í…트를 사용하여 ìº˜ë¦°ë” ë°ì´í„° 보기</a></li> </ol> </li> - + <li><a href="#sync-adapter">ë™ê¸°í™” 어댑터</a></li> </ol> @@ -56,47 +56,47 @@ page.title=ìº˜ë¦°ë” ì œê³µìž </div> </div> -<p>ìº˜ë¦°ë” ì œê³µìžëŠ” 사용ìžì˜ ìº˜ë¦°ë” ì´ë²¤íŠ¸ë¥¼ ì €ìž¥í•˜ëŠ” 리í¬ì§€í† 리입니다. -ìº˜ë¦°ë” ì œê³µìž API를 사용하면 캘린ë”, ì´ë²¤íЏ, ì°¸ì„ìž, 알림 ë“±ì˜ ì¿¼ë¦¬, 삽입, ì—…ë°ì´íЏ ë° +<p>ìº˜ë¦°ë” ì œê³µìžëŠ” 사용ìžì˜ ìº˜ë¦°ë” ì´ë²¤íŠ¸ë¥¼ ì €ìž¥í•˜ëŠ” 리í¬ì§€í† 리입니다. +ìº˜ë¦°ë” ì œê³µìž API를 사용하면 캘린ë”, ì´ë²¤íЏ, ì°¸ì„ìž, 알림 ë“±ì˜ ì¿¼ë¦¬, 삽입, ì—…ë°ì´íЏ ë° ì‚ì œ ë“±ì˜ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다.</p> -<p>ìº˜ë¦°ë” ì œê³µìž API는 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터ì—서 ì‚¬ìš©í• ìˆ˜ 있습니다. -ì–´ë–¤ ìœ í˜•ì˜ í”„ë¡œê·¸ëž¨ì´ í˜¸ì¶œì„ í•˜ëŠ” 주체ì¸ì§€ì— ë”°ë¼ ê·œì¹™ì´ ê°ê¸° 다릅니다. -ì´ ë¬¸ì„œëŠ” 주로 ìº˜ë¦°ë” ì œê³µìž API를 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 사용하는 ê²ƒì— ì£¼ì•ˆì ì„ ë‘었습니다. -여러 ë™ê¸°í™” 어댑터가 서로 어떻게 다른지 ë…¼ì˜í•œ ë‚´ìš©ì€ +<p>ìº˜ë¦°ë” ì œê³µìž API는 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터ì—서 ì‚¬ìš©í• ìˆ˜ 있습니다. +ì–´ë–¤ ìœ í˜•ì˜ í”„ë¡œê·¸ëž¨ì´ í˜¸ì¶œì„ í•˜ëŠ” 주체ì¸ì§€ì— ë”°ë¼ ê·œì¹™ì´ ê°ê¸° 다릅니다. +ì´ ë¬¸ì„œëŠ” 주로 ìº˜ë¦°ë” ì œê³µìž API를 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 사용하는 ê²ƒì— ì£¼ì•ˆì ì„ ë‘었습니다. +여러 ë™ê¸°í™” 어댑터가 서로 어떻게 다른지 ë…¼ì˜í•œ ë‚´ìš©ì€ <a href="#sync-adapter">ë™ê¸°í™” 어댑터</a>를 참조하ì‹ì‹œì˜¤.</p> -<p>ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ì½ê±°ë‚˜ ì“°ë ¤ë©´ 보통 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— -ì ì ˆí•œ ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다. ì´ëŠ” <a href="#manifest">ì‚¬ìš©ìž +<p>ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ì½ê±°ë‚˜ ì“°ë ¤ë©´ 보통 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— +ì ì ˆí•œ ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다. ì´ëŠ” <a href="#manifest">ì‚¬ìš©ìž ê¶Œí•œ</a>ì— ì„¤ëª…ë˜ì–´ 있습니다. 공통 ìž‘ì—…ì„ ì‰½ê²Œ 수행하기 위해 ìº˜ë¦°ë” ì œê³µìžëŠ” <a href="#intents">ìº˜ë¦°ë” -ì¸í…트</a>ì— ì„¤ëª…ëœ ë°”ì™€ ê°™ì´ ì¸í…트 ì§‘í•©ì„ ì œê³µí•©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì¸í…트는 사용ìžë¥¼ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì´ë™ì‹œì¼œ -ì´ë²¤íЏ 삽입, 보기 ë° íŽ¸ì§‘ì„ í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 사용ìžëŠ” ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용한 ë‹¤ìŒ -ì›ëž˜ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„옵니다. ë”°ë¼ì„œ, ì—¬ëŸ¬ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ë²¤íŠ¸ë¥¼ 보거나 +ì¸í…트</a>ì— ì„¤ëª…ëœ ë°”ì™€ ê°™ì´ ì¸í…트 ì§‘í•©ì„ ì œê³µí•©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì¸í…트는 사용ìžë¥¼ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì´ë™ì‹œì¼œ +ì´ë²¤íЏ 삽입, 보기 ë° íŽ¸ì§‘ì„ í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 사용ìžëŠ” ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ìƒí˜¸ 작용한 ë‹¤ìŒ +ì›ëž˜ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„옵니다. ë”°ë¼ì„œ, ì—¬ëŸ¬ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ë²¤íŠ¸ë¥¼ 보거나 ìƒì„±í•˜ê¸° 위해 권한 허가를 ìš”ì²í• í•„ìš”ë„ ì—†ê³ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí• í•„ìš”ë„ ì—†ëŠ” 것입니다.</p> <h2 id="overview">기본 ì •ë³´</h2> -<p><a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a>는 ë°ì´í„°ë¥¼ ì €ìž¥í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 +<p><a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a>는 ë°ì´í„°ë¥¼ ì €ìž¥í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì´ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤. ì¼ë°˜ì 으로, Android 플랫í¼ì—서 ì œê³µí•˜ëŠ” 콘í…ì¸ ì œê³µìž(ìº˜ë¦°ë” ì œê³µìž í¬í•¨)는 관계 ë°ì´í„°ë² ì´ìФ 모ë¸ì— 기초하여 í…Œì´ë¸” 집합으로 ë°ì´í„°ë¥¼ 노출합니다. ì´ ëª¨ë¸ì—서 ê° í–‰ì€ ë ˆì½”ë“œì´ê³ , -ê° ì—´ì€ íŠ¹ì •í•œ ìœ í˜•ê³¼ ì˜ë¯¸ë¥¼ 가진 ë°ì´í„°ìž…니다. ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터는 -ìº˜ë¦°ë” ì œê³µìž API를 통해 사용ìžì˜ ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ë³´ê´€í•˜ê³ ìžˆëŠ” ë°ì´í„°ë² ì´ìФ í…Œì´ë¸”ì— +ê° ì—´ì€ íŠ¹ì •í•œ ìœ í˜•ê³¼ ì˜ë¯¸ë¥¼ 가진 ë°ì´í„°ìž…니다. ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터는 +ìº˜ë¦°ë” ì œê³µìž API를 통해 사용ìžì˜ ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ë³´ê´€í•˜ê³ ìžˆëŠ” ë°ì´í„°ë² ì´ìФ í…Œì´ë¸”ì— ì½ê¸°/쓰기 액세스 ê¶Œí•œì„ ì–»ì„ ìˆ˜ 있습니다.</p> <p>ëª¨ë“ ì½˜í…ì¸ ì œê³µìžëŠ” ë°ì´í„° 세트를 ê³ ìœ í•˜ê²Œ ì‹ë³„하는 공개 URI( -{@link android.net.Uri} +{@link android.net.Uri} 개체로 래핑ë¨)를 노출합니다. 여러 ë°ì´í„° 세트(여러 í…Œì´ë¸”)를 ì œì–´í•˜ëŠ” 콘í…ì¸ ì œê³µìžëŠ” -ê° ë°ì´í„° ì„¸íŠ¸ì— ë³„ë„ì˜ URI를 노출합니다. -ì œê³µìžì— 대한 URI는 ëª¨ë‘ ë¬¸ìžì—´ "content://"로 시작합니다. -ì´ê²ƒì„ ë³´ë©´ ë°ì´í„°ë¥¼ 콘í…ì¸ ì œê³µìžê°€ ì œì–´í•˜ê³ ìžˆë‹¤ëŠ” ê²ƒì„ ì•Œì•„ë³¼ 수 있습니다. -ìº˜ë¦°ë” ì œê³µìžê°€ ê°ê°ì˜ í´ëž˜ìФ(í…Œì´ë¸”)ì— ëŒ€í•œ URIì˜ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. -ì´ì™€ ê°™ì€ URI는 <code><em><class></em>.CONTENT_URI</code> 형ì‹ì„ 취합니다. +ê° ë°ì´í„° ì„¸íŠ¸ì— ë³„ë„ì˜ URI를 노출합니다. +ì œê³µìžì— 대한 URI는 ëª¨ë‘ ë¬¸ìžì—´ "content://"로 시작합니다. +ì´ê²ƒì„ ë³´ë©´ ë°ì´í„°ë¥¼ 콘í…ì¸ ì œê³µìžê°€ ì œì–´í•˜ê³ ìžˆë‹¤ëŠ” ê²ƒì„ ì•Œì•„ë³¼ 수 있습니다. +ìº˜ë¦°ë” ì œê³µìžê°€ ê°ê°ì˜ í´ëž˜ìФ(í…Œì´ë¸”)ì— ëŒ€í•œ URIì˜ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. +ì´ì™€ ê°™ì€ URI는 <code><em><class></em>.CONTENT_URI</code> 형ì‹ì„ 취합니다. 예를 들면 다ìŒê³¼ 같습니다. {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}</p> -<p>그림 1ì€ ìº˜ë¦°ë” ì œê³µìž ë°ì´í„° 모ë¸ì„ 그림으로 나타낸 것입니다. +<p>그림 1ì€ ìº˜ë¦°ë” ì œê³µìž ë°ì´í„° 모ë¸ì„ 그림으로 나타낸 것입니다. ì´ ê·¸ë¦¼ì—는 ë©”ì¸ í…Œì´ë¸”ê³¼ì´ë“¤ì„ 서로 연결하는 필드가 표시ë˜ì–´ 있습니다.</p> <img src="{@docRoot}images/providers/datamodel.png" alt="Calendar Provider Data Model" /> @@ -113,77 +113,77 @@ page.title=ìº˜ë¦°ë” ì œê³µìž </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>ì´ í…Œì´ë¸”ì—는 캘린ë”별 ì •ë³´ê°€ 담겨 있습니다. - ì´ í…Œì´ë¸”ì˜ í–‰ë§ˆë‹¤ 한 캘린ë”ì˜ ì„¸ë¶€ ì •ë³´, + ì´ í…Œì´ë¸”ì˜ í–‰ë§ˆë‹¤ 한 캘린ë”ì˜ ì„¸ë¶€ ì •ë³´, 예를 들어 ì´ë¦„, 색ìƒ, ë™ê¸°í™” ì •ë³´ ë“±ì´ ë“¤ì–´ê°‘ë‹ˆë‹¤.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>ì´ í…Œì´ë¸”ì—는 ì´ë²¤íŠ¸ë³„ ì •ë³´ê°€ 담겨 있습니다. ì´ í…Œì´ë¸”ì˜ í–‰ë§ˆë‹¤ 한 ì´ë²¤íŠ¸ì˜ ì„¸ë¶€ ì •ë³´ 예를 들어 ì´ë²¤íЏ ì œëª©, 위치, 시작 시간, 종료 시간 ë“±ì˜ ì •ë³´ê°€ 들어갑니다. - ì´ë²¤íŠ¸ëŠ” ì¼íšŒì„±ì¼ ìˆ˜ë„ ìžˆê³ ì—¬ëŸ¬ 번 반복ë ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -ì°¸ì„ìž, 알림 ë° í™•ìž¥ëœ ì†ì„± ë“±ì€ ë³„ë„ì˜ í…Œì´ë¸”ì— ì €ìž¥ë©ë‹ˆë‹¤. -ì´ë“¤ í…Œì´ë¸”ì—는 ê°ê¸° {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}ê°€ 있어 + ì´ë²¤íŠ¸ëŠ” ì¼íšŒì„±ì¼ ìˆ˜ë„ ìžˆê³ ì—¬ëŸ¬ 번 반복ë ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +ì°¸ì„ìž, 알림 ë° í™•ìž¥ëœ ì†ì„± ë“±ì€ ë³„ë„ì˜ í…Œì´ë¸”ì— ì €ìž¥ë©ë‹ˆë‹¤. +ì´ë“¤ í…Œì´ë¸”ì—는 ê°ê¸° {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}ê°€ 있어 ì´ë²¤íЏ í…Œì´ë¸”ì˜ {@link android.provider.BaseColumns#_ID}를 참조합니다.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - - <td>ì´ í…Œì´ë¸”ì—는 ê° ì´ë²¤íЏ ë°œìƒì˜ 시작 시간과 종료 ì‹œê°„ì´ + + <td>ì´ í…Œì´ë¸”ì—는 ê° ì´ë²¤íЏ ë°œìƒì˜ 시작 시간과 종료 ì‹œê°„ì´ ë‹´ê²¨ 있습니다. ì´ í…Œì´ë¸”ì˜ ê° í–‰ì´ í•˜ë‚˜ì˜ ì´ë²¤íЏ ë°œìƒì„ 나타냅니다. ì¼íšŒì„± ì´ë²¤íŠ¸ì˜ ê²½ìš°, ì´ë²¤íŠ¸ì— ëŒ€í•œ 1:1 ì¸ìŠ¤í„´ìŠ¤ ë§¤í•‘ì´ ìžˆìŠµë‹ˆë‹¤. - 반복ë˜ëŠ” ì´ë²¤íŠ¸ì˜ ê²½ìš°, 해당 ì´ë²¤íŠ¸ê°€ 여러 번 ë°œìƒí•˜ëŠ” ê²ƒì— ë§žì¶”ì–´ + 반복ë˜ëŠ” ì´ë²¤íŠ¸ì˜ ê²½ìš°, 해당 ì´ë²¤íŠ¸ê°€ 여러 번 ë°œìƒí•˜ëŠ” ê²ƒì— ë§žì¶”ì–´ ìžë™ìœ¼ë¡œ 여러 í–‰ì´ ìƒì„±ë©ë‹ˆë‹¤.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>ì´ í…Œì´ë¸”ì—는 ì´ë²¤íЏ ì°¸ì„ìž(게스트) ì •ë³´ê°€ 담겨 있습니다. ê° í–‰ì´ ì£¼ì–´ì§„ ì´ë²¤íŠ¸ì˜ ê²ŒìŠ¤íŠ¸ 한 ì‚¬ëžŒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. - ì´ê²ƒì´ ê²ŒìŠ¤íŠ¸ì˜ ìœ í˜•ê³¼, ì´ë²¤íŠ¸ì— ëŒ€í•œ 해당 ê²ŒìŠ¤íŠ¸ì˜ ì°¸ì„ ì—¬ë¶€ ì‘ë‹µì„ + ì´ê²ƒì´ ê²ŒìŠ¤íŠ¸ì˜ ìœ í˜•ê³¼, ì´ë²¤íŠ¸ì— ëŒ€í•œ 해당 ê²ŒìŠ¤íŠ¸ì˜ ì°¸ì„ ì—¬ë¶€ ì‘ë‹µì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>ì´ í…Œì´ë¸”ì—는 ê²½ê³ /알림 ë°ì´í„°ê°€ 담겨 있습니다. - ê° í–‰ì´ ì£¼ì–´ì§„ ì´ë²¤íŠ¸ì— ëŒ€í•œ ê²½ê³ í•˜ë‚˜ë¥¼ 나타냅니다. + ê° í–‰ì´ ì£¼ì–´ì§„ ì´ë²¤íŠ¸ì— ëŒ€í•œ ê²½ê³ í•˜ë‚˜ë¥¼ 나타냅니다. ì´ë²¤íЏ í•˜ë‚˜ì— ì—¬ëŸ¬ ê°œì˜ ì•Œë¦¼ì´ ìžˆì„ ìˆ˜ 있습니다. ì´ë²¤íŠ¸ë‹¹ 최대 알림 개수는 -{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}ì—서 ì§€ì •ë˜ê³ , +{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}ì—서 ì§€ì •ë˜ê³ , ì´ëŠ” 주어진 캘린ë”를 ì†Œìœ í•œ ë™ê¸°í™” 어댑터가 ì„¤ì •í•©ë‹ˆë‹¤. - ì•Œë¦¼ì€ ì´ë²¤íЏ 몇 ë¶„ ì „ì— ì§€ì •ë˜ë©° 사용ìžì—게 어떻게 ê²½ê³ í• ê²ƒì¸ì§€ë¥¼ + ì•Œë¦¼ì€ ì´ë²¤íЏ 몇 ë¶„ ì „ì— ì§€ì •ë˜ë©° 사용ìžì—게 어떻게 ê²½ê³ í• ê²ƒì¸ì§€ë¥¼ ê²°ì •í•˜ëŠ” 메서드를 ê°€ì§€ê³ ìžˆìŠµë‹ˆë‹¤.</td> </tr> - + </table> -<p>ìº˜ë¦°ë” ì œê³µìž API는 ìœ ì—°ì„±ê³¼ ê°•ë ¥í•¨ì„ ì—¼ë‘ì— ë‘ê³ ë§Œë“¤ì–´ì§„ 것입니다. -그와 ë™ì‹œì— 우수한 최종 ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ê³ ìº˜ë¦°ë”와 ê·¸ ë°ì´í„°ì˜ +<p>ìº˜ë¦°ë” ì œê³µìž API는 ìœ ì—°ì„±ê³¼ ê°•ë ¥í•¨ì„ ì—¼ë‘ì— ë‘ê³ ë§Œë“¤ì–´ì§„ 것입니다. +그와 ë™ì‹œì— 우수한 최종 ì‚¬ìš©ìž ê²½í—˜ì„ ì œê³µí•˜ê³ ìº˜ë¦°ë”와 ê·¸ ë°ì´í„°ì˜ ë¬´ê²°ì„±ì„ ë³´í˜¸í•˜ëŠ” 것 ë˜í•œ 중요합니다. ì´ë¥¼ 위해서 API를 ì‚¬ìš©í• ë•Œ ìœ ë…해야 í• ì‚¬í•ì€ ë‹¤ìŒê³¼ 같습니다.</p> <ul> -<li><strong>ìº˜ë¦°ë” ì´ë²¤íЏ 삽입, ì—…ë°ì´íЏ ë° ë³´ê¸°.</strong> ìº˜ë¦°ë” ì œê³µìžë¡œë¶€í„° ì§ì ‘ ì´ë²¤íŠ¸ë¥¼ 삽입, ë³€ê²½í•˜ê³ ì½ìœ¼ë ¤ë©´ ì ì ˆí•œ <a href="#manifest">권한</a>ì´ í•„ìš”í•©ë‹ˆë‹¤. 그러나, ì™„ì „í•œ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” ë™ê¸°í™” 어댑터를 구축하는 경우가 아니ë¼ë©´ ì´ì™€ ê°™ì€ ê¶Œí•œì„ ìš”ì²í• 필요가 없습니다. ëŒ€ì‹ Androidì˜ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì§€ì›í•˜ëŠ” ì¸í…트를 사용하여 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì½ê¸° ë° ì“°ê¸° ìž‘ì—…ì„ ë¶„ë°°í•˜ë©´ ë©ë‹ˆë‹¤. ì¸í…트를 사용하면, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžë¥¼ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ë³´ë‚´ ì‚¬ì „ì— ìž‘ì„±ëœ ì–‘ì‹ìœ¼ë¡œ ì›í•˜ëŠ” ìž‘ì—…ì„ -수행하게 합니다. ìž‘ì—…ì´ ë나면 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„옵니다. -캘린ë”를 통해 공통 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ê³„í•¨ìœ¼ë¡œì¨ ì‚¬ìš©ìžì—게 ì¼ê´€ë˜ê³ ê°•ë ¥í•œ +<li><strong>ìº˜ë¦°ë” ì´ë²¤íЏ 삽입, ì—…ë°ì´íЏ ë° ë³´ê¸°.</strong> ìº˜ë¦°ë” ì œê³µìžë¡œë¶€í„° ì§ì ‘ ì´ë²¤íŠ¸ë¥¼ 삽입, ë³€ê²½í•˜ê³ ì½ìœ¼ë ¤ë©´ ì ì ˆí•œ <a href="#manifest">권한</a>ì´ í•„ìš”í•©ë‹ˆë‹¤. 그러나, ì™„ì „í•œ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” ë™ê¸°í™” 어댑터를 구축하는 경우가 아니ë¼ë©´ ì´ì™€ ê°™ì€ ê¶Œí•œì„ ìš”ì²í• 필요가 없습니다. ëŒ€ì‹ Androidì˜ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì§€ì›í•˜ëŠ” ì¸í…트를 사용하여 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì½ê¸° ë° ì“°ê¸° ìž‘ì—…ì„ ë¶„ë°°í•˜ë©´ ë©ë‹ˆë‹¤. ì¸í…트를 사용하면, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžë¥¼ ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ë³´ë‚´ ì‚¬ì „ì— ìž‘ì„±ëœ ì–‘ì‹ìœ¼ë¡œ ì›í•˜ëŠ” ìž‘ì—…ì„ +수행하게 합니다. ìž‘ì—…ì´ ë나면 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„옵니다. +캘린ë”를 통해 공통 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ê³„í•¨ìœ¼ë¡œì¨ ì‚¬ìš©ìžì—게 ì¼ê´€ë˜ê³ ê°•ë ¥í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ëŠ” 것입니다. ì´ê²ƒì´ 권장 방법입니다. ìžì„¸í•œ ì •ë³´ëŠ” <a href="#intents">ìº˜ë¦°ë” ì¸í…트</a>를 참조하ì‹ì‹œì˜¤.</p> -<li><strong>ë™ê¸°í™” 어댑터.</strong> -ë™ê¸°í™” 어댑터는 사용ìžì˜ ê¸°ê¸°ì— ìžˆëŠ” ìº˜ë¦°ë” ë°ì´í„°ë¥¼ 다른 서버 ë˜ëŠ” ë°ì´í„° 소스와 ë™ê¸°í™”합니다. +<li><strong>ë™ê¸°í™” 어댑터.</strong> +ë™ê¸°í™” 어댑터는 사용ìžì˜ ê¸°ê¸°ì— ìžˆëŠ” ìº˜ë¦°ë” ë°ì´í„°ë¥¼ 다른 서버 ë˜ëŠ” ë°ì´í„° 소스와 ë™ê¸°í™”합니다. {@link android.provider.CalendarContract.Calendars}와 {@link android.provider.CalendarContract.Events} í…Œì´ë¸”ì—는 ë™ê¸°í™” 어댑터가 사용하ë„ë¡ ì˜ˆì•½ëœ ì—´ì´ ìžˆìŠµë‹ˆë‹¤. -ì œê³µìžì™€ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ë¥¼ ìˆ˜ì •í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. 사실, ë™ê¸°í™” 어댑터로 액세스하지 않는 한 -ì´ ì—´ì´ í‘œì‹œë˜ì§€ 않습니다. +ì œê³µìžì™€ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ë¥¼ ìˆ˜ì •í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. 사실, ë™ê¸°í™” 어댑터로 액세스하지 않는 한 +ì´ ì—´ì´ í‘œì‹œë˜ì§€ 않습니다. ë™ê¸°í™” ì–´ëŒ‘í„°ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="#sync-adapter">ë™ê¸°í™” 어댑터</a>를 참조하ì‹ì‹œì˜¤.</li> </ul> @@ -192,8 +192,8 @@ API를 ì‚¬ìš©í• ë•Œ ìœ ë…해야 í• ì‚¬í•ì€ ë‹¤ìŒê³¼ 같습니다.</p> <h2 id="manifest">ì‚¬ìš©ìž ê¶Œí•œ</h2> <p>ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ì½ìœ¼ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 매니페스트 파ì¼ì— {@link -android.Manifest.permission#READ_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다. -ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ì‚ì œ, 삽입 ë˜ëŠ” ì—…ë°ì´íŠ¸í•˜ë ¤ë©´{@link android.Manifest.permission#WRITE_CALENDAR} +android.Manifest.permission#READ_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다. +ìº˜ë¦°ë” ë°ì´í„°ë¥¼ ì‚ì œ, 삽입 ë˜ëŠ” ì—…ë°ì´íŠ¸í•˜ë ¤ë©´{@link android.Manifest.permission#WRITE_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다.</p> <pre> @@ -209,10 +209,10 @@ android.Manifest.permission#READ_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 í•©ë <h2 id="calendar">ìº˜ë¦°ë” í…Œì´ë¸”</h2> -<p>{@link android.provider.CalendarContract.Calendars} -í…Œì´ë¸”ì—는 ê°ê°ì˜ 캘린ë”ì— ëŒ€í•œ 세부 ì •ë³´ê°€ 들어 있습니다. -ë‹¤ìŒ ìº˜ë¦°ë” ì—´ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ <a href="#sync-adapter">ë™ê¸°í™” 어댑터</a> ëª¨ë‘ ì“¸ 수 있는 것입니다. -ì§€ì›ë˜ëŠ” í•„ë“œì˜ ì „ì²´ 목ë¡ì€ +<p>{@link android.provider.CalendarContract.Calendars} +í…Œì´ë¸”ì—는 ê°ê°ì˜ 캘린ë”ì— ëŒ€í•œ 세부 ì •ë³´ê°€ 들어 있습니다. +ë‹¤ìŒ ìº˜ë¦°ë” ì—´ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ <a href="#sync-adapter">ë™ê¸°í™” 어댑터</a> ëª¨ë‘ ì“¸ 수 있는 것입니다. +ì§€ì›ë˜ëŠ” í•„ë“œì˜ ì „ì²´ 목ë¡ì€ {@link android.provider.CalendarContract.Calendars} 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> <table> <tr> @@ -229,8 +229,8 @@ android.Manifest.permission#READ_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 í•©ë </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - - <td>캘린ë”를 표시하기로 ì„ íƒí–ˆëŠ”ì§€ë¥¼ 나타내는 부울입니다. + + <td>캘린ë”를 표시하기로 ì„ íƒí–ˆëŠ”ì§€ë¥¼ 나타내는 부울입니다. ê°’ì´ 0ì´ë©´ ì´ ìº˜ë¦°ë”와 ì—°ê´€ëœ ì´ë²¤íŠ¸ëŠ” 표시하면 안 ëœë‹¤ëŠ” 뜻입니다. ê°’ì´ 1ì´ë©´ ì´ ìº˜ë¦°ë”와 ì—°ê´€ëœ ì´ë²¤íŠ¸ë¥¼ 표시해야 한다는 뜻입니다. ì´ ê°’ì´ {@link @@ -240,10 +240,10 @@ android.provider.CalendarContract.Instances} í…Œì´ë¸”ì˜ í–‰ ìƒì„±ì— ì˜í–¥ì </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - - <td>캘린ë”를 ë™ê¸°í™”í•˜ê³ ì´ ìº˜ë¦°ë”ì˜ ì´ë²¤íŠ¸ë¥¼ ê¸°ê¸°ì— ì €ìž¥í•´ì•¼í• ì§€ë¥¼ -나타내는 부울입니다. ê°’ì´ 0ì´ë©´ ì´ ìº˜ë¦°ë”를 ë™ê¸°í™”하거나 ì´ì— ì†í•œ ì´ë²¤íŠ¸ë¥¼ -ê¸°ê¸°ì— ì €ìž¥í•˜ë©´ 안 ëœë‹¤ëŠ” 뜻입니다. ê°’ì´ 1ì´ë©´ ì´ ìº˜ë¦°ë”ì— ëŒ€í•œ ì´ë²¤íŠ¸ë¥¼ ë™ê¸°í™”í•˜ê³ ì´ì— ì†í•œ + + <td>캘린ë”를 ë™ê¸°í™”í•˜ê³ ì´ ìº˜ë¦°ë”ì˜ ì´ë²¤íŠ¸ë¥¼ ê¸°ê¸°ì— ì €ìž¥í•´ì•¼í• ì§€ë¥¼ +나타내는 부울입니다. ê°’ì´ 0ì´ë©´ ì´ ìº˜ë¦°ë”를 ë™ê¸°í™”하거나 ì´ì— ì†í•œ ì´ë²¤íŠ¸ë¥¼ +ê¸°ê¸°ì— ì €ìž¥í•˜ë©´ 안 ëœë‹¤ëŠ” 뜻입니다. ê°’ì´ 1ì´ë©´ ì´ ìº˜ë¦°ë”ì— ëŒ€í•œ ì´ë²¤íŠ¸ë¥¼ ë™ê¸°í™”í•˜ê³ ì´ì— ì†í•œ ì´ë²¤íŠ¸ë¥¼ ê¸°ê¸°ì— ì €ìž¥í•˜ë¼ëŠ” 뜻입니다.</td> </tr> </table> @@ -253,8 +253,8 @@ android.provider.CalendarContract.Instances} í…Œì´ë¸”ì˜ í–‰ ìƒì„±ì— ì˜í–¥ì <p>다ìŒì€ íŠ¹ì •í•œ 사용ìžê°€ ì†Œìœ í•œ 캘린ë”를 ê°€ì ¸ì˜¤ëŠ” ë²•ì„ ë‚˜íƒ€ë‚¸ 예시입니다. ì´ ì˜ˆì‹œì—서는 단순하게 나타내기 위해 쿼리 ìž‘ì—…ì„ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ìŠ¤ë ˆë“œ("주 ìŠ¤ë ˆë“œ")ì— í‘œì‹œí–ˆìŠµë‹ˆë‹¤. ì‹¤ì œë¡œëŠ”, ì´ ìž‘ì—…ì€ ì£¼ ìŠ¤ë ˆë“œ ëŒ€ì‹ ë¹„ë™ê¸°í™” ìŠ¤ë ˆë“œì—서 해야 합니다. - ìžì„¸í•œ ë…¼ì˜ëŠ” -<a href="{@docRoot}guide/components/loaders.html">로ë”</a>를 참조하ì‹ì‹œì˜¤. ë°ì´í„°ë¥¼ ì½ê¸°ë§Œ 하는 ê²ƒì´ ì•„ë‹ˆë¼ ë³€ê²½ë„ í•˜ëŠ” 경우ë¼ë©´, + ìžì„¸í•œ ë…¼ì˜ëŠ” +<a href="{@docRoot}guide/components/loaders.html">로ë”</a>를 참조하ì‹ì‹œì˜¤. ë°ì´í„°ë¥¼ ì½ê¸°ë§Œ 하는 ê²ƒì´ ì•„ë‹ˆë¼ ë³€ê²½ë„ í•˜ëŠ” 경우ë¼ë©´, {@link android.content.AsyncQueryHandler}를 참조하ì‹ì‹œì˜¤. </p> @@ -268,90 +268,90 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3> ACCOUNT_TYPEì„ ë°˜ë“œì‹œ í¬í•¨ì‹œì¼œì•¼ 하는 ì´ìœ 는 무엇ì¼ê¹Œìš”?</h3> <p>{@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME -Calendars.ACCOUNT_NAME}ì— ëŒ€í•´ 쿼리하는 경우, 해당 ì„ íƒì— +Calendars.ACCOUNT_NAME}ì— ëŒ€í•´ 쿼리하는 경우, 해당 ì„ íƒì— {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE} -ë„ í¬í•¨ì‹œì¼œì•¼ 합니다. ì´ëŠ” 주어진 ê³„ì •ì„ ê³ ìœ í•˜ë‹¤ê³ ê°„ì£¼í•˜ëŠ” ê²ƒì€ í•´ë‹¹ ê³„ì •ì˜ -<code>ACCOUNT_NAME</code> ë° -<code>ACCOUNT_TYPE</code>ì´ ëª¨ë‘ ìžˆì„ ë•Œë¿ì´ê¸° 때문입니다. <code>ACCOUNT_TYPE</code>ì€ ê³„ì •ì´ +ë„ í¬í•¨ì‹œì¼œì•¼ 합니다. ì´ëŠ” 주어진 ê³„ì •ì„ ê³ ìœ í•˜ë‹¤ê³ ê°„ì£¼í•˜ëŠ” ê²ƒì€ í•´ë‹¹ ê³„ì •ì˜ +<code>ACCOUNT_NAME</code> ë° +<code>ACCOUNT_TYPE</code>ì´ ëª¨ë‘ ìžˆì„ ë•Œë¿ì´ê¸° 때문입니다. <code>ACCOUNT_TYPE</code>ì€ ê³„ì •ì´ {@link android.accounts.AccountManager}로 등ë¡ë˜ì—ˆì„ 때 ì‚¬ìš©ëœ ê³„ì • ì¸ì¦ìžì— ìƒì‘하는 문ìžì—´ìž…니다. 기기와 ì—°ê´€ë˜ì§€ ì•Šì€ ìº˜ë¦°ë”ì— ì ìš©ë˜ëŠ” 특별한 ìœ í˜•ì˜ ê³„ì •ë„ ìžˆìœ¼ë©° ì´ë¥¼ {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}ì´ë¼ê³ 합니다. {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} ê³„ì •ì€ ë™ê¸°í™”ë˜ì§€ 않습니다. -</p> </div> </div> +</p> </div> </div> <p> ë‹¤ìŒ ì˜ˆì‹œì—서는 ì—¬ëŸ¬ë¶„ì´ ì§ì ‘ ë‚˜ë¦„ì˜ ì¿¼ë¦¬ë¥¼ ìƒì„±í•´ë³´ì‹ì‹œì˜¤. ì„ íƒ ì˜ì—ì´ ì¿¼ë¦¬ì˜ ê¸°ì¤€ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. - ì´ ì˜ˆì‹œì—서 쿼리는 + ì´ ì˜ˆì‹œì—서 쿼리는 <code>ACCOUNT_NAME</code> "sampleuser@google.com", <code>ACCOUNT_TYPE</code> "com.google" ë° <code>OWNER_ACCOUNT</code> -"sampleuser@google.com"ì„ ê°€ì§€ê³ ìžˆëŠ” 캘린ë”를 ì°¾ê³ ìžˆìŠµë‹ˆë‹¤. 사용ìžê°€ ì†Œìœ í•œ 캘린ë”ë¿ë§Œ ì•„ë‹ˆë¼ ì‚¬ìš©ìžê°€ ì „ì— ë³¸ 캘린ë”까지 ëª¨ë‘ í™•ì¸í•˜ë ¤ë©´ -<code>OWNER_ACCOUNT</code>를 ìƒëžµí•©ë‹ˆë‹¤. +"sampleuser@google.com"ì„ ê°€ì§€ê³ ìžˆëŠ” 캘린ë”를 ì°¾ê³ ìžˆìŠµë‹ˆë‹¤. 사용ìžê°€ ì†Œìœ í•œ 캘린ë”ë¿ë§Œ ì•„ë‹ˆë¼ ì‚¬ìš©ìžê°€ ì „ì— ë³¸ 캘린ë”까지 ëª¨ë‘ í™•ì¸í•˜ë ¤ë©´ +<code>OWNER_ACCOUNT</code>를 ìƒëžµí•©ë‹ˆë‹¤. 쿼리가 {@link android.database.Cursor} 개체를 반환하여 ì´ë¥¼ 시용하면 ë°ì´í„°ë² ì´ìФ 쿼리가 반환한 ê²°ê³¼ ì§‘í•©ì„ íŠ¸ëž˜ë²„ìŠ¤í• ìˆ˜ 있습니다. - 콘í…ì¸ ì œê³µìžì—서 쿼리를 사용하는 ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë…¼ì˜ëŠ” + 콘í…ì¸ ì œê³µìžì—서 쿼리를 사용하는 ë²•ì— ëŒ€í•œ ìžì„¸í•œ ë…¼ì˜ëŠ” <a href="{@docRoot}guide/topics/providers/content-providers.html">콘í…ì¸ ì œê³µìž</a>를 참조하ì‹ì‹œì˜¤.</p> <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> -<p>다ìŒì— í‘œì‹œëœ ì„¹ì…˜ì—서는 커서를 사용하여 ê²°ê³¼ ì§‘í•©ì„ ë‹¨ê³„ë³„ë¡œ 살펴봅니다. +<p>다ìŒì— í‘œì‹œëœ ì„¹ì…˜ì—서는 커서를 사용하여 ê²°ê³¼ ì§‘í•©ì„ ë‹¨ê³„ë³„ë¡œ 살펴봅니다. 여기ì—서는 ì˜ˆì‹œì˜ ì‹œìž‘ 부분ì—서 ì„¤ì •ëœ ìƒìˆ˜ë¥¼ 사용하여 ê° í•„ë“œì— ëŒ€í•œ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤. </p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">ìº˜ë¦°ë” ìˆ˜ì •</h3> <p>ìº˜ë¦°ë” ì—…ë°ì´íŠ¸ë¥¼ ìˆ˜í–‰í•˜ë ¤ë©´ 캘린ë”ì˜ {@link -android.provider.BaseColumns#_ID}를 +android.provider.BaseColumns#_ID}를 URIì— ì¶”ê°€ëœ ID로 ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}), ë˜ëŠ” 첫 번째 ì„ íƒ í•목으로 ì œê³µí•˜ë©´ ë©ë‹ˆë‹¤. - -ì„ íƒì€ <code>"_id=?"</code>로 시작해야 하며, 첫 번째 + +ì„ íƒì€ <code>"_id=?"</code>로 시작해야 하며, 첫 번째 <code>selectionArg</code>는 캘린ë”ì˜ {@link -android.provider.BaseColumns#_ID}여야 합니다. -ë˜í•œ ID를 URIì— ì¸ì½”ë”©í•´ì„œë„ ì—…ë°ì´íŠ¸ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있습니다. ì´ ì˜ˆì‹œì—서는 캘린ë”ì˜ í‘œì‹œ ì´ë¦„ì„ +android.provider.BaseColumns#_ID}여야 합니다. +ë˜í•œ ID를 URIì— ì¸ì½”ë”©í•´ì„œë„ ì—…ë°ì´íŠ¸ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있습니다. ì´ ì˜ˆì‹œì—서는 캘린ë”ì˜ í‘œì‹œ ì´ë¦„ì„ ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) ë°©ì‹ìœ¼ë¡œ 변경하였습니다.</p> @@ -368,26 +368,26 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre> <h3 id="insert-calendar">ìº˜ë¦°ë” ì‚½ìž…</h2> -<p>캘린ë”는 주로 ë™ê¸°í™” 어댑터가 관리하ë„ë¡ ì„¤ê³„ë˜ì–´ 있습니다. ë”°ë¼ì„œ 새 캘린ë”는 -ë™ê¸°í™” 어댑터로서만 삽입해야 합니다. ëŒ€ë‹¤ìˆ˜ì˜ ê²½ìš° ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 캘린ë”ì— -표면ì ì¸ ì‚¬í•ë§Œ ë³€ê²½í• ìˆ˜ 있게 ë˜ì–´ 있습니다(예: 표시 ì´ë¦„ 변경 등). -ì–´ë–¤ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 로컬 캘린ë”를 ìƒì„±í•´ì•¼ 하는 경우, ìº˜ë¦°ë” ì‚½ìž…ì„ ë™ê¸°í™” 어댑터로 수행하면 ë©ë‹ˆë‹¤. +<p>캘린ë”는 주로 ë™ê¸°í™” 어댑터가 관리하ë„ë¡ ì„¤ê³„ë˜ì–´ 있습니다. ë”°ë¼ì„œ 새 캘린ë”는 +ë™ê¸°í™” 어댑터로서만 삽입해야 합니다. ëŒ€ë‹¤ìˆ˜ì˜ ê²½ìš° ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 캘린ë”ì— +표면ì ì¸ ì‚¬í•ë§Œ ë³€ê²½í• ìˆ˜ 있게 ë˜ì–´ 있습니다(예: 표시 ì´ë¦„ 변경 등). +ì–´ë–¤ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 로컬 캘린ë”를 ìƒì„±í•´ì•¼ 하는 경우, ìº˜ë¦°ë” ì‚½ìž…ì„ ë™ê¸°í™” 어댑터로 수행하면 ë©ë‹ˆë‹¤. ì´ë•Œ {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}ì˜ {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE}ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} ì€ ê¸°ê¸° ê³„ì •ê³¼ ì—°ê´€ë˜ì§€ ì•Šì€ ìº˜ë¦°ë”ì— ì ìš©ë˜ëŠ” 특별한 ìœ í˜•ì˜ ê³„ì •ìž…ë‹ˆë‹¤. - ì´ ìœ í˜•ì˜ ìº˜ë¦°ë”는 ì„œë²„ì— ë™ê¸°í™”ë˜ì§€ 않습니다. + ì´ ìœ í˜•ì˜ ìº˜ë¦°ë”는 ì„œë²„ì— ë™ê¸°í™”ë˜ì§€ 않습니다. ë™ê¸°í™” ì–´ëŒ‘í„°ì— ëŒ€í•œ ë…¼ì˜ëŠ” <a href="#sync-adapter">ë™ê¸°í™” 어댑터</a>를 참조하ì‹ì‹œì˜¤.</p> <h2 id="events">ì´ë²¤íЏ í…Œì´ë¸”</h2> -<p>{@link android.provider.CalendarContract.Events} -í…Œì´ë¸”ì—는 ê°ê°ì˜ ì´ë²¤íŠ¸ì— ëŒ€í•œ 세부 ì •ë³´ê°€ 들어 있습니다. ì´ë²¤íŠ¸ë¥¼ 추가, ì—…ë°ì´íЏ ë˜ëŠ” ì‚ì œí•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ +<p>{@link android.provider.CalendarContract.Events} +í…Œì´ë¸”ì—는 ê°ê°ì˜ ì´ë²¤íŠ¸ì— ëŒ€í•œ 세부 ì •ë³´ê°€ 들어 있습니다. ì´ë²¤íŠ¸ë¥¼ 추가, ì—…ë°ì´íЏ ë˜ëŠ” ì‚ì œí•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <a href="#manifest">매니페스트 파ì¼</a>ì— {@link android.Manifest.permission#WRITE_CALENDAR} ê¶Œí•œì´ í¬í•¨ë˜ì–´ 있어야 합니다.</p> -<p>ë‹¤ìŒ ì´ë²¤íЏ ì—´ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ +<p>ë‹¤ìŒ ì´ë²¤íЏ ì—´ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터 ëª¨ë‘ ì“¸ 수 있는 것입니다. ì§€ì›ë˜ëŠ” í•„ë“œì˜ ì „ì²´ 목ë¡ì€ {@link android.provider.CalendarContract.Events} 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> @@ -434,9 +434,9 @@ android.provider.CalendarContract.Events} 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>ì´ë²¤íЏ ê¸°ê°„ì„ <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a> 형ì‹ìœ¼ë¡œ 나타낸 것입니다. -예를 들어 <code>"PT1H"</code> ê°’ì„ ë³´ë©´ ì´ë²¤íŠ¸ê°€ 한 시간 ì§€ì†ë ê²ƒìž„ì„ ì•Œ 수 ìžˆê³ , +예를 들어 <code>"PT1H"</code> ê°’ì„ ë³´ë©´ ì´ë²¤íŠ¸ê°€ 한 시간 ì§€ì†ë ê²ƒìž„ì„ ì•Œ 수 ìžˆê³ , <code>"P2W"</code>는 2ì£¼ì˜ ì§€ì† ê¸°ê°„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. </td> @@ -444,39 +444,39 @@ android.provider.CalendarContract.Events} 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>ê°’ì´ 1ì´ë©´ ì´ ì´ë²¤íŠ¸ê°€ 현지 시간대ì—서 ì •ì˜í•œ ë°”ì— ì˜í•´ 하루 ì¢…ì¼ ê±¸ë¦°ë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ê°’ì´ 0ì´ë©´ ì´ê²ƒì´ 하루 중 ì–¸ì œë¼ë„ ì‹œìž‘í•˜ê³ ì¢…ë£Œë 수 있는 ì •ê¸° ì´ë²¤íЏë¼ëŠ” ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. </td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - - <td>ì´ë²¤íЏ 형ì‹ì˜ 반복 규칙입니다. -예를 들면 다ìŒê³¼ 같습니다. <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code> ë” ë§Žì€ ì˜ˆì‹œë¥¼ 확ì¸í•˜ë ¤ë©´ + + <td>ì´ë²¤íЏ 형ì‹ì˜ 반복 규칙입니다. +예를 들면 다ìŒê³¼ 같습니다. <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code> ë” ë§Žì€ ì˜ˆì‹œë¥¼ 확ì¸í•˜ë ¤ë©´ <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">여기</a>를 참조하ì‹ì‹œì˜¤.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>ì´ë²¤íŠ¸ì˜ ë°˜ë³µ ë‚ ì§œìž…ë‹ˆë‹¤. + <td>ì´ë²¤íŠ¸ì˜ ë°˜ë³µ ë‚ ì§œìž…ë‹ˆë‹¤. ì¼ë°˜ì 으로 {@link android.provider.CalendarContract.EventsColumns#RDATE} 를 {@link android.provider.CalendarContract.EventsColumns#RRULE} ê³¼ 함께 사용하여 반복ë˜ëŠ” ë°œìƒì˜ 집계 ì§‘í•©ì„ ì •ì˜í•˜ê²Œ ë©ë‹ˆë‹¤. ìžì„¸í•œ ë…¼ì˜ëŠ” <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 사양</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>ì´ ì´ë²¤íŠ¸ê°€ 사용 ì¤‘ì¸ ì‹œê°„ìœ¼ë¡œ 간주ë˜ëŠ”ì§€, 다시 ì¼ì •ì„ ì˜ˆì•½í• ìˆ˜ 있는 ìžìœ 시간으로 간주ë˜ëŠ”ì§€ë¥¼ 나타냅니다. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -494,7 +494,7 @@ android.provider.CalendarContract.Events} 참조를 확ì¸í•˜ì‹ì‹œì˜¤.</p> <h3 id="add-event">ì´ë²¤íЏ 추가</h3> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 새 ì´ë²¤íŠ¸ë¥¼ 추가하는 경우, +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 새 ì´ë²¤íŠ¸ë¥¼ 추가하는 경우, {@link android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 사용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ë•Œ <a href="#intent-insert">ì¸í…트를 사용하여 ì´ë²¤íЏ 삽입</a>ì—서 설명한 대로 따릅니다. 그러나, 필요한 경우 ì§ì ‘ ì´ë²¤íŠ¸ë¥¼ ì‚½ìž…í•´ë„ ë©ë‹ˆë‹¤. ì´ ì„¹ì…˜ì—서는 ì´ë ‡ê²Œ 하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. </p> @@ -508,39 +508,39 @@ android.provider.CalendarContract.EventsColumns#CALENDAR_ID}와 {@link android.provider.CalendarContract.EventsColumns#DTSTART}를 í¬í•¨í•´ì•¼ 합니다.</li> <li>{@link -android.provider.CalendarContract.EventsColumns#EVENT_TIMEZONE}ì„ í¬í•¨í•´ì•¼ 합니다. +android.provider.CalendarContract.EventsColumns#EVENT_TIMEZONE}ì„ í¬í•¨í•´ì•¼ 합니다. ì‹œìŠ¤í…œì— ì„¤ì¹˜ëœ í‘œì¤€ 시간대 ID 목ë¡ì„ ê°€ì ¸ì˜¤ë ¤ë©´ {@link java.util.TimeZone#getAvailableIDs()}를 사용하ì‹ì‹œì˜¤. ì´ ê·œì¹™ì€ <a href="#intent-insert">ì¸í…트를 사용하여 ì´ë²¤íЏ 삽입</a>ì—서 설명한 바와 ê°™ì´ {@link android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 통해서 ì´ë²¤íŠ¸ë¥¼ ì‚½ìž…í• ê²½ìš°ì—는 ì ìš©ë˜ì§€ 않습니다. ì´ ì‹œë‚˜ë¦¬ì˜¤ì˜ ê²½ìš°, 기본 시간대가 ì œê³µë©ë‹ˆë‹¤.</li> - + <li>비반복ì ì¸ ì´ë²¤íŠ¸ì˜ ê²½ìš°, {@link android.provider.CalendarContract.EventsColumns#DTEND}를 í¬í•¨í•´ì•¼ 합니다. </li> - - + + <li>반복ì ì¸ ì´ë²¤íŠ¸ì˜ ê²½ìš° {@link android.provider.CalendarContract.EventsColumns#DURATION}ê³¼ {@link android.provider.CalendarContract.EventsColumns#RRULE} ë˜ëŠ” {@link android.provider.CalendarContract.EventsColumns#RDATE}를 í¬í•¨í•´ì•¼ 합니다. ì´ ê·œì¹™ì€ <a href="#intent-insert">ì¸í…트를 사용하여 ì´ë²¤íЏ 삽입</a>ì—서 설명한 바와 ê°™ì´ {@link -android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 통해서 ì´ë²¤íŠ¸ë¥¼ ì‚½ìž…í• ê²½ìš°ì—는 ì ìš©ë˜ì§€ 않습니다. +android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 통해서 ì´ë²¤íŠ¸ë¥¼ ì‚½ìž…í• ê²½ìš°ì—는 ì ìš©ë˜ì§€ 않습니다. ì´ ì‹œë‚˜ë¦¬ì˜¤ì—서는 {@link android.provider.CalendarContract.EventsColumns#DTSTART} ë° {@link android.provider.CalendarContract.EventsColumns#DTEND}와 함께 {@link android.provider.CalendarContract.EventsColumns#RRULE}를 ì‚¬ìš©í• ìˆ˜ ìžˆê³ , ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ê²ƒì„ 기간으로 ìžë™ 변환해ì¤ë‹ˆë‹¤. </li> - + </ul> <p>다ìŒì€ ì´ë²¤íЏ ì‚½ìž…ì˜ ì˜ˆìž…ë‹ˆë‹¤. 단순하게 나타내기 위해 UI ìŠ¤ë ˆë“œì—서 수행한 것입니다. ì‹¤ì œë¡œ, 삽입과 ì—…ë°ì´íŠ¸ëŠ” 비ë™ê¸°í™” ìŠ¤ë ˆë“œì—서 수행해야 ìž‘ì—…ì„ ë°°ê²½ ìŠ¤ë ˆë“œë¡œ ì´ë™ì‹œí‚¬ 수 있습니다. - + ìžì„¸í•œ ì •ë³´ëŠ” {@link android.content.AsyncQueryHandler}를 참조하ì‹ì‹œì˜¤.</p> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,13 +561,13 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> <p class="note"><strong>ì°¸ê³ :</strong> ì´ë²¤íŠ¸ê°€ ìƒì„±ëœ ë‹¤ìŒ ì´ ì˜ˆì‹œê°€ ì´ë²¤íЏ ID를 캡처하는 ë²•ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. - ì´ê²ƒì´ ì´ë²¤íЏ ID를 ê°€ì ¸ì˜¤ëŠ” 가장 쉬운 방법입니다. + ì´ê²ƒì´ ì´ë²¤íЏ ID를 ê°€ì ¸ì˜¤ëŠ” 가장 쉬운 방법입니다. 다른 ìº˜ë¦°ë” ìž‘ì—…ì„ ìˆ˜í–‰í•˜ê¸° 위해 ì´ë²¤íЏ IDê°€ 필요한 경우가 ìžì£¼ 있습니다. 예를 들어 ì´ë²¤íŠ¸ì— ì°¸ì„ìžë‚˜ ì•Œë¦¼ì„ ì¶”ê°€í•˜ëŠ” ë° í•„ìš”í•©ë‹ˆë‹¤. </p> @@ -577,15 +577,15 @@ long eventID = Long.parseLong(uri.getLastPathSegment()); <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžì—게 ì´ë²¤íЏ íŽ¸ì§‘ì„ í—ˆìš©í• ê²½ìš°, <a href="#intent-edit">ì¸í…트로 ì´ë²¤íЏ 편집</a>ì—서 설명한 바와 ê°™ì´ {@link android.content.Intent#ACTION_EDIT EDIT} ì¸í…트 를 사용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. -그러나 필요한 경우 ì§ì ‘ ì´ë²¤íŠ¸ë¥¼ íŽ¸ì§‘í•´ë„ ë©ë‹ˆë‹¤. +그러나 필요한 경우 ì§ì ‘ ì´ë²¤íŠ¸ë¥¼ íŽ¸ì§‘í•´ë„ ë©ë‹ˆë‹¤. ì´ë²¤íЏ ì—…ë°ì´íŠ¸ë¥¼ ìˆ˜í–‰í•˜ë ¤ë©´ ì´ë²¤íŠ¸ì˜ <code>_ID</code>를 URIì— ì¶”ê°€ëœ ID로({@link -android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) ë˜ëŠ” 첫 번째 ì„ íƒ í•목으로 ì œê³µí•˜ë©´ ë©ë‹ˆë‹¤. - -ì„ íƒì€ <code>"_id=?"</code>로 시작해야 하며, 첫 번째 -<code>selectionArg</code>는 ì´ë²¤íŠ¸ì˜ <code>_ID</code>여야 합니다. + +ì„ íƒì€ <code>"_id=?"</code>로 시작해야 하며, 첫 번째 +<code>selectionArg</code>는 ì´ë²¤íŠ¸ì˜ <code>_ID</code>여야 합니다. ID ì—†ì´ ì„ íƒì„ ì‚¬ìš©í•´ë„ ì—…ë°ì´íŠ¸ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있습니다. 다ìŒì€ ì´ë²¤íЏ ì—…ë°ì´íŠ¸ì˜ ì˜ˆìž…ë‹ˆë‹¤. - 여기ì—서는 ì´ë²¤íЏ ì œëª©ì„ ë³€ê²½í• ë•Œ + 여기ì—서는 ì´ë²¤íЏ ì œëª©ì„ ë³€ê²½í• ë•Œ {@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()} ë°©ë²•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -608,11 +608,11 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> <p>ì´ë²¤íŠ¸ë¥¼ ì‚ì œí•˜ë ¤ë©´ ì´ë²¤íŠ¸ì˜ {@link android.provider.BaseColumns#_ID}를 URIì— ì¶”ê°€ëœ ID로 ì¨ë„ ë˜ê³ , 표준 ì„ íƒì„ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. ì¶”ê°€ëœ ID를 사용하는 경우, ì„ íƒë„ í• ìˆ˜ 없습니다. -ì‚ì œì—는 ë‘ ê°€ì§€ ë²„ì „ì´ ìžˆìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì‚ì œì™€ ë™ê¸°í™” ì–´ëŒ‘í„°ë¡œì˜ ì‚ì œìž…ë‹ˆë‹¤. -ì• í”Œë¦¬ì¼€ì´ì…˜ ì‚ì œì˜ ê²½ìš° <em>ì‚ì œëœ</em> ì—´ì„ 1로 ì„¤ì •í•©ë‹ˆë‹¤. -ì´ê²ƒì€ ë™ê¸°í™” ì–´ëŒ‘í„°ì— í–‰ì´ ì‚ì œë˜ì—ˆë‹¤ê³ 알리는 플래그ì´ë©°, -ì´ ì‚ì œë¥¼ ì„œë²„ì— ì•Œë ¤ì•¼ 한다는 ê²ƒì„ ë‚˜íƒ€ë‚´ê¸°ë„ í•©ë‹ˆë‹¤. -ë™ê¸°í™” 어댑터 ì‚ì œì˜ ê²½ìš°, ì´ë²¤íŠ¸ë¥¼ ì—°ê´€ëœ ë°ì´í„° ì¼ì²´ì™€ 함께 ë°ì´í„°ë² ì´ìФì—서 ì œê±°í•©ë‹ˆë‹¤. +ì‚ì œì—는 ë‘ ê°€ì§€ ë²„ì „ì´ ìžˆìŠµë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì‚ì œì™€ ë™ê¸°í™” ì–´ëŒ‘í„°ë¡œì˜ ì‚ì œìž…ë‹ˆë‹¤. +ì• í”Œë¦¬ì¼€ì´ì…˜ ì‚ì œì˜ ê²½ìš° <em>ì‚ì œëœ</em> ì—´ì„ 1로 ì„¤ì •í•©ë‹ˆë‹¤. +ì´ê²ƒì€ ë™ê¸°í™” ì–´ëŒ‘í„°ì— í–‰ì´ ì‚ì œë˜ì—ˆë‹¤ê³ 알리는 플래그ì´ë©°, +ì´ ì‚ì œë¥¼ ì„œë²„ì— ì•Œë ¤ì•¼ 한다는 ê²ƒì„ ë‚˜íƒ€ë‚´ê¸°ë„ í•©ë‹ˆë‹¤. +ë™ê¸°í™” 어댑터 ì‚ì œì˜ ê²½ìš°, ì´ë²¤íŠ¸ë¥¼ ì—°ê´€ëœ ë°ì´í„° ì¼ì²´ì™€ 함께 ë°ì´í„°ë² ì´ìФì—서 ì œê±°í•©ë‹ˆë‹¤. 다ìŒì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ë²¤íŠ¸ë¥¼ {@link android.provider.BaseColumns#_ID}를 통해 ì‚ì œí•˜ëŠ” 예입니다.</p> @@ -625,22 +625,22 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">ì°¸ì„ìž í…Œì´ë¸”</h2> <p>{@link android.provider.CalendarContract.Attendees} í…Œì´ë¸”ì˜ ê° í–‰ì€ -ì´ë²¤íŠ¸ì˜ ì°¸ì„ìž ë˜ëŠ” 게스트 하나를 나타냅니다. +ì´ë²¤íŠ¸ì˜ ì°¸ì„ìž ë˜ëŠ” 게스트 하나를 나타냅니다. {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} -를호출하면 주어진 -{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}와 함께 해당 ì´ë²¤íŠ¸ì˜ ì°¸ì„ìž ëª©ë¡ì„ 반환합니다. +를호출하면 주어진 +{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}와 함께 해당 ì´ë²¤íŠ¸ì˜ ì°¸ì„ìž ëª©ë¡ì„ 반환합니다. ì´ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}는 íŠ¹ì • ì´ë²¤íŠ¸ì˜ {@link -android.provider.BaseColumns#_ID}와 반드시 ì¼ì¹˜í•´ì•¼ 합니다.</p> +android.provider.BaseColumns#_ID}와 반드시 ì¼ì¹˜í•´ì•¼ 합니다.</p> <p>ë‹¤ìŒ í‘œëŠ” 쓸 수 있는 필드를 목ë¡ìœ¼ë¡œ 나열한 것입니다. - 새 ì°¸ì„ìžë¥¼ 삽입하는 경우 ì´ ëª¨ë‘를 í¬í•¨í•´ì•¼ 하며, + 새 ì°¸ì„ìžë¥¼ 삽입하는 경우 ì´ ëª¨ë‘를 í¬í•¨í•´ì•¼ 하며, 단 <code>ATTENDEE_NAME</code>ì€ ì˜ˆì™¸ìž…ë‹ˆë‹¤. </p> @@ -697,7 +697,7 @@ android.provider.BaseColumns#_ID}와 반드시 ì¼ì¹˜í•´ì•¼ 합니다.</p> <h3 id="add-attendees">ì°¸ì„ìž ì¶”ê°€</h3> -<p>다ìŒì€ ì´ë²¤íŠ¸ì— ì°¸ì„ìž í•œ ëª…ì„ ì¶”ê°€í•˜ëŠ” 예입니다. +<p>다ìŒì€ ì´ë²¤íŠ¸ì— ì°¸ì„ìž í•œ ëª…ì„ ì¶”ê°€í•˜ëŠ” 예입니다. {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ê°€ í•„ìˆ˜ì¸ ì ì„ ìœ ë…하ì‹ì‹œì˜¤.</p> @@ -717,8 +717,8 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">알림 í…Œì´ë¸”</h2> -<p>{@link android.provider.CalendarContract.Reminders} -í…Œì´ë¸”ì˜ ê° í–‰ì€ ì´ë²¤íŠ¸ì˜ ì•Œë¦¼ 하나를 나타냅니다. +<p>{@link android.provider.CalendarContract.Reminders} +í…Œì´ë¸”ì˜ ê° í–‰ì€ ì´ë²¤íŠ¸ì˜ ì•Œë¦¼ 하나를 나타냅니다. {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} 를 호출하면 주어진 {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}와 함께 ì´ë²¤íЏ 알림 목ë¡ì„ 반환합니다.</p> @@ -728,7 +728,7 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); ë™ê¸°í™” 어댑터가 {@link android.provider.CalendarContract.Calendars} í…Œì´ë¸”ì—서 ì§€ì›í•˜ëŠ” ì•Œë¦¼ì„ ë‚˜íƒ€ë‚¸ë‹¤ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ìžì„¸í•œ ë‚´ìš©ì€ -{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} +{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} 를 참조하ì‹ì‹œì˜¤.</p> @@ -774,15 +774,15 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <h2 id="instances">ì¸ìŠ¤í„´ìŠ¤ í…Œì´ë¸”</h2> <p> -{@link android.provider.CalendarContract.Instances} í…Œì´ë¸”ì—는 +{@link android.provider.CalendarContract.Instances} í…Œì´ë¸”ì—는 ì´ë²¤íЏ ë°œìƒì˜ 시작 ë° ì¢…ë£Œ ì‹œê°„ì´ ë‹´ê²¨ 있습니다. ì´ í…Œì´ë¸”ì˜ ê° í–‰ì´ í•˜ë‚˜ì˜ ì´ë²¤íЏ ë°œìƒì„ 나타냅니다. ì´ ì¸ìŠ¤í„´ìŠ¤ í…Œì´ë¸”ì€ ì“¸ 수 없으며 ì´ë²¤íЏ ë°œìƒ ì¿¼ë¦¬ ë°©ë²•ì„ ì œê³µí• ë¿ìž…니다. </p> -<p>ë‹¤ìŒ í‘œì—는 ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•´ ì¿¼ë¦¬í• ìˆ˜ 있는 몇 가지 필드를 목ë¡ìœ¼ë¡œ 나열하였습니다. -표준 시간대가 +<p>ë‹¤ìŒ í‘œì—는 ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•´ ì¿¼ë¦¬í• ìˆ˜ 있는 몇 가지 필드를 목ë¡ìœ¼ë¡œ 나열하였습니다. +표준 시간대가 {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} - ë° + ë° {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}ì— ì˜í•´ ì •ì˜ëœë‹¤ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤.</p> @@ -801,18 +801,18 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>ì¸ìŠ¤í„´ìŠ¤ì˜ ìœ¨ë¦¬ìš°ìŠ¤ë ¥ 종료 ë‚ ì§œë¥¼ 캘린ë”ì˜ ì‹œê°„ëŒ€ì— ë¹„ë¡€í•˜ì—¬ 나타낸 것입니다. - - + + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>ì¸ìŠ¤í„´ìŠ¤ì˜ ì¢…ë£Œ 시간(ë¶„ 단위)ì„ ìº˜ë¦°ë” ì‹œê°„ëŒ€ì˜ ìžì •부터 ì¸¡ì •í•œ 것입니다. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>ì¸ìŠ¤í„´ìŠ¤ì˜ ìœ¨ë¦¬ìš°ìŠ¤ë ¥ 시작 ë‚ ì§œë¥¼ 캘린ë”ì˜ ì‹œê°„ëŒ€ì— ë¹„ë¡€í•˜ì—¬ 나타낸 것입니다. + <td>ì¸ìŠ¤í„´ìŠ¤ì˜ ìœ¨ë¦¬ìš°ìŠ¤ë ¥ 시작 ë‚ ì§œë¥¼ 캘린ë”ì˜ ì‹œê°„ëŒ€ì— ë¹„ë¡€í•˜ì—¬ 나타낸 것입니다. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>ì¸ìŠ¤í„´ìŠ¤ì˜ ì‹œìž‘ 시간(ë¶„ 단위)ì„ ìº˜ë¦°ë” ì‹œê°„ëŒ€ì— ë¹„ë¡€í•˜ì—¬ ìžì •부터 ì¸¡ì •í•œ 것입니다. - + </td> - + </tr> </table> @@ -839,10 +839,10 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <p>ì¸ìŠ¤í„´ìŠ¤ í…Œì´ë¸”ì„ ì¿¼ë¦¬í•˜ë ¤ë©´, 해당 ì¿¼ë¦¬ì— ëŒ€í•œ 범위 ì‹œê°„ì„ URIì— ì§€ì •í•´ì•¼ 합니다. ì´ ì˜ˆì‹œì—서는 {@link android.provider.CalendarContract.Instances} ê°€ {@link -android.provider.CalendarContract.EventsColumns#TITLE} í•„ë“œì— ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ ì–»ìœ¼ë©°, ì´ë•Œ -{@link android.provider.CalendarContract.EventsColumns} ì¸í„°íŽ˜ì´ìŠ¤ì˜ êµ¬í˜„ì„ í†µí•©ë‹ˆë‹¤. +android.provider.CalendarContract.EventsColumns#TITLE} í•„ë“œì— ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ ì–»ìœ¼ë©°, ì´ë•Œ +{@link android.provider.CalendarContract.EventsColumns} ì¸í„°íŽ˜ì´ìŠ¤ì˜ êµ¬í˜„ì„ í†µí•©ë‹ˆë‹¤. 바꿔 ë§í•˜ë©´, {@link -android.provider.CalendarContract.EventsColumns#TITLE}ì´ +android.provider.CalendarContract.EventsColumns#TITLE}ì´ ë°ì´í„°ë² ì´ìФ 보기를 통해 반환ë˜ë©° ì›ì‹œ {@link android.provider.CalendarContract.Instances} í…Œì´ë¸” 쿼리를 통해서가 아니ë¼ëŠ” 뜻입니다.</p> @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -922,9 +922,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. -ì´ ì¸í…트 ì‚¬ìš©ë²•ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ì¸í…트를 사용하여 ìº˜ë¦°ë” ë°ì´í„° 보기</a>를 참조하ì‹ì‹œì˜¤. + +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. +ì´ ì¸í…트 ì‚¬ìš©ë²•ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ì¸í…트를 사용하여 ìº˜ë¦°ë” ë°ì´í„° 보기</a>를 참조하ì‹ì‹œì˜¤. </td> <td>캘린ë”를 <code><ms_since_epoch></code>ì— ì˜í•´ ì§€ì •ëœ ì‹œê°„ìœ¼ë¡œ 엽니다.</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. + + +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. ì´ ì¸í…트 ì‚¬ìš©ë²•ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ì¸í…트를 사용하여 ìº˜ë¦°ë” ë°ì´í„° 보기</a>를 참조하ì‹ì‹œì˜¤. - + </td> <td><code><event_id></code>ì— ì˜í•´ ì§€ì •ëœ ì´ë²¤íŠ¸ë¥¼ 봅니다.</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. + + +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. ì´ ì¸í…트 ì‚¬ìš©ë²•ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">ì¸í…트를 사용하여 ì´ë²¤íЏ 편집</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. - - + + </td> <td><code><event_id></code>ì— ì˜í•´ ì§€ì •ëœ ì´ë²¤íŠ¸ë¥¼ 편집합니다.</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. + + +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}ë¡œë„ URI를 ì°¸ì¡°í• ìˆ˜ 있습니다. ì´ ì¸í…트 ì‚¬ìš©ë²•ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">ì¸í…트를 사용하여 ì´ë²¤íЏ 삽입</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. - + </td> <td>ì´ë²¤íŠ¸ë¥¼ ìƒì„±í•©ë‹ˆë‹¤.</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>ì´ë²¤íŠ¸ì˜ ì´ë¦„입니다.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>ì´ë²¤íЏ 시작 ì‹œê°„ì„ Epoch로부터 밀리초 단위로 나타낸 것입니다.</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>ì´ë²¤íЏ 종료 ì‹œê°„ì„ Epoch로부터 밀리초 단위로 나타낸 것입니다.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - - <td>ì´ë²¤íŠ¸ê°€ ì¢…ì¼ ì´ë²¤íЏì¸ì§€ 나타내는 부울입니다. ê°’ì€ + + <td>ì´ë²¤íŠ¸ê°€ ì¢…ì¼ ì´ë²¤íЏì¸ì§€ 나타내는 부울입니다. ê°’ì€ <code>true</code> ë˜ëŠ” <code>false</code>ê°€ ë 수 있습니다.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>ì´ë²¤íЏ 위치입니다.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>ì´ë²¤íЏ 설명입니다.</td> </tr> <tr> @@ -1039,43 +1039,43 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>ì´ë²¤íŠ¸ê°€ 비공개ì¸ì§€ 공개ì¸ì§€ 나타냅니다.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>ì´ ì´ë²¤íŠ¸ê°€ 사용 ì¤‘ì¸ ì‹œê°„ìœ¼ë¡œ 간주ë˜ëŠ”ì§€, 다시 ì¼ì •ì„ ì˜ˆì•½í• ìˆ˜ 있는 ìžìœ 시간으로 간주ë˜ëŠ”ì§€ë¥¼ 나타냅니다.</td> - -</table> + +</table> <p>아래 섹션ì—서는 ì´ì™€ ê°™ì€ ì¸í…íŠ¸ì˜ ì‚¬ìš©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> <h3 id="intent-insert">ì¸í…트를 사용하여 ì´ë²¤íЏ 삽입</h3> -<p>{@link android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 사용하면 +<p>{@link android.content.Intent#ACTION_INSERT INSERT} ì¸í…트를 사용하면 캘린ë”ì— ì´ë²¤íЏ 삽입 ìž‘ì—…ì„ ë¶„ë°°í• ìˆ˜ 있습니다. ì´ ë°©ë²•ì„ ì‚¬ìš©í•˜ëŠ” 경우, ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <a href="#manifest">매니페스트 파ì¼</a>ì— {@link android.Manifest.permission#WRITE_CALENDAR} ê¶Œí•œì„ í¬í•¨í• 필요가 없습니다.</p> - + <p>사용ìžê°€ ì´ ë°©ë²•ì„ ì‚¬ìš©í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 실행하면 해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용ìžë¥¼ 캘린ë”로 ë³´ë‚´ ì´ë²¤íЏ 추가를 완료합니다. {@link android.content.Intent#ACTION_INSERT INSERT} ì¸í…트는 추가 필드를 사용하여 -캘린ë”ì— ìžˆëŠ” ì´ë²¤íЏ 세부 ì •ë³´ë¡œ ì–‘ì‹ì„ 미리 채ì›ë‹ˆë‹¤. -그러면 사용ìžê°€ ì´ë²¤íŠ¸ë¥¼ 취소하거나 ì–‘ì‹ì„ í•„ìš”ì— ë”°ë¼ íŽ¸ì§‘í• ìˆ˜ ìžˆê³ , +캘린ë”ì— ìžˆëŠ” ì´ë²¤íЏ 세부 ì •ë³´ë¡œ ì–‘ì‹ì„ 미리 채ì›ë‹ˆë‹¤. +그러면 사용ìžê°€ ì´ë²¤íŠ¸ë¥¼ 취소하거나 ì–‘ì‹ì„ í•„ìš”ì— ë”°ë¼ íŽ¸ì§‘í• ìˆ˜ ìžˆê³ , ì´ë²¤íŠ¸ë¥¼ 본ì¸ì˜ 캘린ë”ì— ì €ìž¥í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> - -<p>다ìŒì€ 2012ë…„ 1ì›” 19ì¼ì— ì´ë²¤íЏ ì¼ì •ì„ ì˜ˆì•½í•˜ëŠ” 코드 ì¡°ê°ìœ¼ë¡œ, + +<p>다ìŒì€ 2012ë…„ 1ì›” 19ì¼ì— ì´ë²¤íЏ ì¼ì •ì„ ì˜ˆì•½í•˜ëŠ” 코드 ì¡°ê°ìœ¼ë¡œ, ì´ëŠ” ì˜¤ì „ 7:30~ì˜¤ì „ 8:30까지 실행ë©ë‹ˆë‹¤. ì´ ì½”ë“œ ì¡°ê°ì— 관해서는 ë‹¤ìŒ ë‚´ìš©ì„ ì£¼ì˜í•˜ì‹ì‹œì˜¤.</p> <ul> <li>ì´ê²ƒì€ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}를 URI로 ì§€ì •í•©ë‹ˆë‹¤. </li> - + <li>ì´ê²ƒì€ {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} ë° {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} 추가 필드를 사용하여 ì´ë²¤íЏ 시간으로 ì–‘ì‹ì„ 미리 채ì›ë‹ˆë‹¤. ì´ëŸ¬í•œ ì‹œê°„ì— í•´ë‹¹í•˜ëŠ” ê°’ì€ Epoch로부터 UTC 밀리초 단위로 표시해야 합니다. </li> - + <li>ì´ê²ƒì€ {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} 추가 필드를 사용하여 쉼표로 êµ¬ë¶„ëœ ì´ˆì²ì¸ 목ë¡ì„ ì œê³µí•˜ë©°, ì´ëŠ” ì´ë©”ì¼ ì£¼ì†Œë¡œ 나타납니다.</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1108,7 +1108,7 @@ startActivity(intent); <h3 id="intent-edit">ì¸í…트를 사용하여 ì´ë²¤íЏ 편집</h3> <p><a href="#update-event">ì´ë²¤íЏ ì—…ë°ì´íЏ</a>ì—서 설명한 바와 ê°™ì´ ì´ë²¤íŠ¸ë¥¼ ì§ì ‘ ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. 그러나 {@link -android.content.Intent#ACTION_EDIT EDIT} ì¸í…트를 사용하면 +android.content.Intent#ACTION_EDIT EDIT} ì¸í…트를 사용하면 ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì´ë²¤íЏ íŽ¸ì§‘ì„ ë¶„ë°°í• ê¶Œí•œì´ ì—†ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 허용합니다. 사용ìžê°€ 캘린ë”ì—서 ì´ë²¤íЏ íŽ¸ì§‘ì„ ë§ˆì¹˜ë©´ ì›ëž˜ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„오게 ë©ë‹ˆë‹¤. </p> <p>다ìŒì€ ì§€ì •ëœ ì´ë²¤íŠ¸ì— ìƒˆ ì œëª©ì„ ì„¤ì •í•˜ì—¬ 사용ìžì—게 캘린ë”ì—서 ì´ë²¤íŠ¸ë¥¼ íŽ¸ì§‘í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” ì¸í…íŠ¸ì˜ ì˜ˆìž…ë‹ˆë‹¤. @@ -1158,18 +1158,18 @@ startActivity(intent); <ul> <li>ë™ê¸°í™” 어댑터는 {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER}를 <code>true</code>로 ì„¤ì •í•˜ì—¬ ì´ê²ƒì´ ë™ê¸°í™” 어댑터ë¼ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ì•¼ 합니다.</li> - - + + <li>ë™ê¸°í™” 어댑터는 URIì—서 쿼리 매개변수로 {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME}ê³¼ {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE}ì„ ì œê³µí•´ì•¼ 합니다. </li> - + <li>ë™ê¸°í™” 어댑터ì—는 ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” ìœ„ì ¯ì— ë¹„í•´ ë” ë§Žì€ ì—´ì— ëŒ€í•œ 쓰기 액세스 ê¶Œí•œì´ ìžˆìŠµë‹ˆë‹¤. - 예를 들어, ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 캘린ë”ì˜ ëª‡ 가지 특성만 ìˆ˜ì •í• ìˆ˜ 있습니다. + 예를 들어, ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 캘린ë”ì˜ ëª‡ 가지 특성만 ìˆ˜ì •í• ìˆ˜ 있습니다. 즉 ì´ë¦„, 표시 ì´ë¦„, 가시성 ì„¤ì • ë° ìº˜ë¦°ë” ë™ê¸°í™” 여부 등만 해당ë©ë‹ˆë‹¤. ì´ì— 비해 ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ê²½ìš° ì´ ì—´ë§Œì´ ì•„ë‹ˆë¼ ë‹¤ë¥¸ ìˆ˜ë§Žì€ ì—´ì—ë„ ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. 예를 들어 ìº˜ë¦°ë” ìƒ‰ìƒ, 표준 시간대, 액세스 수준 ë“±ì´ í•´ë‹¹ë©ë‹ˆë‹¤. -다만, ë™ê¸°í™” 어댑터는 ì§€ì •ëœ <code>ACCOUNT_NAME</code> ë° +다만, ë™ê¸°í™” 어댑터는 ì§€ì •ëœ <code>ACCOUNT_NAME</code> ë° <code>ACCOUNT_TYPE</code>ì— í•œì •ë©ë‹ˆë‹¤.</li> </ul> <p>다ìŒì€ URI를 반환하여 ë™ê¸°í™” 어댑터와 사용하ë„ë¡ í• ë•Œ 쓸 수 있는 ë„우미 메서드입니다.</p> @@ -1180,5 +1180,5 @@ android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE}ì„ ì œê³µí•´ì•¼ í•©ë .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ìƒ˜í”Œ 구현(캘린ë”ì— êµ¬ì²´ì 으로 ê´€ë ¨ëœ ê²ƒì´ ì•„ë‹˜)ì€ +<p>ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ìƒ˜í”Œ 구현(캘린ë”ì— êµ¬ì²´ì 으로 ê´€ë ¨ëœ ê²ƒì´ ì•„ë‹˜)ì€ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdpater</a>를 참조하ì‹ì‹œì˜¤. diff --git a/docs/html-intl/intl/ko/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/ko/guide/topics/providers/contacts-provider.jd index 94d3295c1d46..ad60b6dfbd85 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/contacts-provider.jd @@ -83,12 +83,12 @@ page.title=ì—°ë½ì²˜ ì œê³µìž </div> <p> 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì‚¬ëžŒì— ëŒ€í•œ 중앙 ë°ì´í„° 리í¬ì§€í† 리를 관리하는 ê°•ë ¥í•˜ê³ ìœ ì—°í•œ -Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 개발ìžì—게 표시ë˜ëŠ” -ë°ì´í„°ì˜ 출처입니다. ì—¬ê¸°ì˜ ë°ì´í„°ì—는 ê°œë°œìž ìžì‹ ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 -액세스하여 기기와 온ë¼ì¸ 서비스 사ì´ì—서 ë°ì´í„°ë¥¼ ì „ì†¡í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì œê³µìžëŠ” -광범위한 ë°ì´í„° 소스를 수용하며 ê° ì¸ë¬¼ì— 대해 가능한 한 ë§Žì€ ë°ì´í„°ë¥¼ 관리하여야 하므로, ê·¸ ê²°ê³¼ ì¡°ì§ì´ 무척 -복잡합니다. ì´ ë•Œë¬¸ì— ì´ ì œê³µìžì˜ APIì—는 -광범위한 계약 í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìФ 세트가 í¬í•¨ë˜ì–´ 있어 ë°ì´í„° 검색과 ìˆ˜ì •ì„ ëª¨ë‘ í•œì¸µ +Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 개발ìžì—게 표시ë˜ëŠ” +ë°ì´í„°ì˜ 출처입니다. ì—¬ê¸°ì˜ ë°ì´í„°ì—는 ê°œë°œìž ìžì‹ ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 +액세스하여 기기와 온ë¼ì¸ 서비스 사ì´ì—서 ë°ì´í„°ë¥¼ ì „ì†¡í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì œê³µìžëŠ” +광범위한 ë°ì´í„° 소스를 수용하며 ê° ì¸ë¬¼ì— 대해 가능한 한 ë§Žì€ ë°ì´í„°ë¥¼ 관리하여야 하므로, ê·¸ ê²°ê³¼ ì¡°ì§ì´ 무척 +복잡합니다. ì´ ë•Œë¬¸ì— ì´ ì œê³µìžì˜ APIì—는 +광범위한 계약 í´ëž˜ìŠ¤ì™€ ì¸í„°íŽ˜ì´ìФ 세트가 í¬í•¨ë˜ì–´ 있어 ë°ì´í„° 검색과 ìˆ˜ì •ì„ ëª¨ë‘ í•œì¸µ ìš©ì´í•˜ê²Œ í•´ì¤ë‹ˆë‹¤. </p> <p> @@ -105,23 +105,23 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” ì œê³µìžì—서 ë°ì´í„°ë¥¼ ìˆ˜ì •í•˜ëŠ” 방법. </li> <li> - ë™ê¸°í™” 어댑터를 작성하여 서버ì—서 ê°€ì ¸ì˜¨ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì™€ + ë™ê¸°í™” 어댑터를 작성하여 서버ì—서 ê°€ì ¸ì˜¨ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì™€ ë™ê¸°í™”하는 방법. </li> </ul> <p> - ì´ ê°€ì´ë“œëŠ” ë…ìžê°€ Android 콘í…ì¸ ì œê³µìžì˜ 기본 ì •ë³´ë¥¼ ì•Œê³ ìžˆëŠ” 것으로 간주합니다. Android 콘í…ì¸ ì œê³µìžì— -관한 ìžì„¸í•œ ë‚´ìš©ì€ + ì´ ê°€ì´ë“œëŠ” ë…ìžê°€ Android 콘í…ì¸ ì œê³µìžì˜ 기본 ì •ë³´ë¥¼ ì•Œê³ ìžˆëŠ” 것으로 간주합니다. Android 콘í…ì¸ ì œê³µìžì— +관한 ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> -콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a> ê°€ì´ë“œë¥¼ ì½ì–´ë³´ì‹ì‹œì˜¤. +콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a> ê°€ì´ë“œë¥¼ ì½ì–´ë³´ì‹ì‹œì˜¤. <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">샘플 ë™ê¸°í™” 어댑터</a> 샘플 ì•±ì€ ë™ê¸°í™” 어댑터를 사용하여 ì—°ë½ì²˜ ì œê³µìžì™€ Google Web Servicesê°€ 호스팅하는 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì—서 ë°ì´í„°ë¥¼ ì „ì†¡í•˜ëŠ” ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ì‚¬ìš© 예시입니다. </p> <h2 id="InformationTypes">ì—°ë½ì²˜ ì œê³µìž ì¡°ì§</h2> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” Android 콘í…ì¸ ì œê³µìž êµ¬ì„± 요소입니다. ì´ê²ƒì€ 한 ì‚¬ëžŒì— ëŒ€í•´ -ê°ê¸° 세 가지 ìœ í˜•ì˜ ë°ì´í„°ë¥¼ 관리합니다. ê° ë°ì´í„°ëŠ” 그림 1ì—서 설명하는 바와 ê°™ì´ ì œê³µìžê°€ ì œê³µí•˜ëŠ” + ì—°ë½ì²˜ ì œê³µìžëŠ” Android 콘í…ì¸ ì œê³µìž êµ¬ì„± 요소입니다. ì´ê²ƒì€ 한 ì‚¬ëžŒì— ëŒ€í•´ +ê°ê¸° 세 가지 ìœ í˜•ì˜ ë°ì´í„°ë¥¼ 관리합니다. ê° ë°ì´í„°ëŠ” 그림 1ì—서 설명하는 바와 ê°™ì´ ì œê³µìžê°€ ì œê³µí•˜ëŠ” ê° í…Œì´ë¸”ì— ìƒì‘합니다. </p> <img src="{@docRoot}images/providers/contacts_structure.png" alt="" height="364" id="figure1" /> @@ -129,7 +129,7 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” <strong>그림 1.</strong> ì—°ë½ì²˜ ì œê³µìž í…Œì´ë¸” 구조입니다. </p> <p> - ì´ ì„¸ ê°œì˜ í…Œì´ë¸”ì€ ë³´í†µ ìžì‹ ì˜ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ì´ë¦„으로 불립니다. ì´ë“¤ í´ëž˜ìŠ¤ëŠ” + ì´ ì„¸ ê°œì˜ í…Œì´ë¸”ì€ ë³´í†µ ìžì‹ ì˜ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ì´ë¦„으로 불립니다. ì´ë“¤ í´ëž˜ìŠ¤ëŠ” í…Œì´ë¸”ì—서 사용하는 콘í…ì¸ URI, ì—´ ì´ë¦„ ë° ì—´ ê°’ì˜ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. </p> <dl> @@ -153,29 +153,29 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” </dd> </dl> <p> - {@link android.provider.ContactsContract}ì˜ ê³„ì•½ í´ëž˜ìŠ¤ê°€ 대표하는 다른 í…Œì´ë¸”ì€ -ë³´ì¡° í…Œì´ë¸”로, ì—°ë½ì²˜ ì œê³µìžëŠ” ì´ë“¤ì„ 사용하여 ìž‘ì—…ì„ ê´€ë¦¬í•˜ê±°ë‚˜ ê¸°ê¸°ì˜ ì—°ë½ì²˜ì— 있는 + {@link android.provider.ContactsContract}ì˜ ê³„ì•½ í´ëž˜ìŠ¤ê°€ 대표하는 다른 í…Œì´ë¸”ì€ +ë³´ì¡° í…Œì´ë¸”로, ì—°ë½ì²˜ ì œê³µìžëŠ” ì´ë“¤ì„ 사용하여 ìž‘ì—…ì„ ê´€ë¦¬í•˜ê±°ë‚˜ ê¸°ê¸°ì˜ ì—°ë½ì²˜ì— 있는 íŠ¹ì • 기능 ë˜ëŠ” ì „í™” í†µì‹ ì• í”Œë¦¬ì¼€ì´ì…˜ ë“±ì„ ì§€ì›í•©ë‹ˆë‹¤. </p> <h2 id="RawContactBasics">ì›ì‹œ ì—°ë½ì²˜</h2> <p> - ì›ì‹œ ì—°ë½ì²˜ëŠ” ë‹¨ì¼ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì—서 ê°€ì ¸ì˜¤ëŠ” -한 ì‚¬ëžŒì˜ ë°ì´í„°ë¥¼ 나타냅니다. ì—°ë½ì²˜ ì œê³µìžëŠ” 한 ì‚¬ëžŒì— ëŒ€í•´ 하나 ì´ìƒì˜ 온ë¼ì¸ 서비스를 ë°ì´í„°ì˜ 출처로 허용하므로, + ì›ì‹œ ì—°ë½ì²˜ëŠ” ë‹¨ì¼ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì—서 ê°€ì ¸ì˜¤ëŠ” +한 ì‚¬ëžŒì˜ ë°ì´í„°ë¥¼ 나타냅니다. ì—°ë½ì²˜ ì œê³µìžëŠ” 한 ì‚¬ëžŒì— ëŒ€í•´ 하나 ì´ìƒì˜ 온ë¼ì¸ 서비스를 ë°ì´í„°ì˜ 출처로 허용하므로, ì—°ë½ì²˜ ì œê³µìžì—서는 ê°™ì€ ì‚¬ëžŒì— ëŒ€í•´ 여러 ê°œì˜ ì›ì‹œ ì—°ë½ì²˜ë¥¼ 허용합니다. - ì›ì‹œ ì—°ë½ì²˜ë¥¼ 여러 ê°œ 사용하면 사용ìžê°€ ê°™ì€ ê³„ì • ìœ í˜•ì˜ í•˜ë‚˜ ì´ìƒì˜ ê³„ì •ì—서 ê°€ì ¸ì˜¨ + ì›ì‹œ ì—°ë½ì²˜ë¥¼ 여러 ê°œ 사용하면 사용ìžê°€ ê°™ì€ ê³„ì • ìœ í˜•ì˜ í•˜ë‚˜ ì´ìƒì˜ ê³„ì •ì—서 ê°€ì ¸ì˜¨ 한 ì‚¬ëžŒì˜ ì—¬ëŸ¬ ë°ì´í„°ë¥¼ ì¡°í•©í• ìˆ˜ 있습니다. </p> <p> - ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„° ëŒ€ë¶€ë¶„ì€ -{@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì— ì €ìž¥ë˜ì§€ 않습니다. ëŒ€ì‹ , + ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„° ëŒ€ë¶€ë¶„ì€ +{@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì— ì €ìž¥ë˜ì§€ 않습니다. ëŒ€ì‹ , {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 하나 ì´ìƒì˜ í–‰ì— ì €ìž¥ë©ë‹ˆë‹¤. ê° ë°ì´í„° í–‰ì—는 -ìƒìœ„ {@link android.provider.ContactsContract.RawContacts} í–‰ì˜ {@code android.provider.BaseColumns#_ID RawContacts._ID} ê°’ì„ í¬í•¨í•˜ëŠ” -ì—´ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID Data.RAW_CONTACT_ID}ê°€ +ìƒìœ„ {@link android.provider.ContactsContract.RawContacts} í–‰ì˜ {@code android.provider.BaseColumns#_ID RawContacts._ID} ê°’ì„ í¬í•¨í•˜ëŠ” +ì—´ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID Data.RAW_CONTACT_ID}ê°€ 있습니다. </p> <h3 id="RawContactsColumns">중요한 ì›ì‹œ ì—°ë½ì²˜ ì—´</h3> <p> - {@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì˜ ì¤‘ìš”í•œ ì—´ì€ + {@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì˜ ì¤‘ìš”í•œ ì—´ì€ í‘œ 1ì— ë‚˜ì—´ë˜ì–´ 있습니다. 표 ë’¤ì— ì´ì–´ì§€ëŠ” ì°¸ê³ ì‚¬í•ì„ ê¼ ì½ì–´ì£¼ì‹ì‹œì˜¤. </p> <p class="table-caption" id="table1"> @@ -193,13 +193,13 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” </td> <td> ì´ ì›ì‹œ ì—°ë½ì²˜ì˜ ì†ŒìŠ¤ì¸ ê³„ì • ìœ í˜•ì— ëŒ€í•œ ê³„ì • ì´ë¦„입니다. - 예를 들어, Google ê³„ì •ì˜ ê³„ì • ì´ë¦„ì€ -기기 ì†Œìœ ìžì˜ Gmail 주소 중 하나입니다. ìžì„¸í•œ ì •ë³´ëŠ” -{@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE}ì˜ + 예를 들어, Google ê³„ì •ì˜ ê³„ì • ì´ë¦„ì€ +기기 ì†Œìœ ìžì˜ Gmail 주소 중 하나입니다. ìžì„¸í•œ ì •ë³´ëŠ” +{@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE}ì˜ ë‹¤ìŒ í•ëª©ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </td> <td> - ì´ ì´ë¦„ì˜ í˜•ì‹ì€ ê°ìžì˜ ê³„ì • ìœ í˜•ë³„ë¡œ 다릅니다. ì´ê²ƒì€ ê¼ + ì´ ì´ë¦„ì˜ í˜•ì‹ì€ ê°ìžì˜ ê³„ì • ìœ í˜•ë³„ë¡œ 다릅니다. ì´ê²ƒì€ ê¼ ì´ë©”ì¼ ì£¼ì†Œì—¬ì•¼ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. </td> </tr> @@ -208,13 +208,13 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE} </td> <td> - ì´ ì›ì‹œ ì—°ë½ì²˜ì˜ ì†ŒìŠ¤ì¸ ê³„ì • ìœ í˜•ìž…ë‹ˆë‹¤. 예를 들어, Google ê³„ì •ì˜ -ê³„ì • ìœ í˜•ì€ <code>com.google</code>입니다. ê³„ì • ìœ í˜•ì„ ì •ê·œí™”í• ë•Œì—는 í•ìƒ -본ì¸ì´ ì†Œìœ í•˜ê±°ë‚˜ ì œì–´í•˜ëŠ” ë„ë©”ì¸ì˜ ë„ë©”ì¸ ì‹ë³„ìžë¥¼ 사용하ì‹ì‹œì˜¤. ì´ë ‡ê²Œ 하면 ê³„ì • ìœ í˜•ì´ ê³ ìœ í•œ 것ì´ë„ë¡ + ì´ ì›ì‹œ ì—°ë½ì²˜ì˜ ì†ŒìŠ¤ì¸ ê³„ì • ìœ í˜•ìž…ë‹ˆë‹¤. 예를 들어, Google ê³„ì •ì˜ +ê³„ì • ìœ í˜•ì€ <code>com.google</code>입니다. ê³„ì • ìœ í˜•ì„ ì •ê·œí™”í• ë•Œì—는 í•ìƒ +본ì¸ì´ ì†Œìœ í•˜ê±°ë‚˜ ì œì–´í•˜ëŠ” ë„ë©”ì¸ì˜ ë„ë©”ì¸ ì‹ë³„ìžë¥¼ 사용하ì‹ì‹œì˜¤. ì´ë ‡ê²Œ 하면 ê³„ì • ìœ í˜•ì´ ê³ ìœ í•œ 것ì´ë„ë¡ í™•ì‹¤ížˆ 해둘 수 있습니다. </td> <td> - ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì œê³µí•˜ëŠ” ê³„ì • ìœ í˜•ì€ ëŒ€ê°œ ì—°ë½ì²˜ ì œê³µìžì™€ ë™ê¸°í™”ë˜ëŠ” ë™ê¸°í™” 어댑터와 + ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì œê³µí•˜ëŠ” ê³„ì • ìœ í˜•ì€ ëŒ€ê°œ ì—°ë½ì²˜ ì œê³µìžì™€ ë™ê¸°í™”ë˜ëŠ” ë™ê¸°í™” 어댑터와 ì—°ê´€ë˜ì–´ 있습니다. </tr> <tr> @@ -225,44 +225,44 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” ì›ì‹œ ì—°ë½ì²˜ì— 대한 "ì‚ì œë¨" 플래그입니다. </td> <td> - ì´ í”Œëž˜ê·¸ë¥¼ 사용하면 ì—°ë½ì²˜ ì œê³µìžê°€ 해당 í–‰ì„ ë‚´ë¶€ì— ê³„ì† ìœ ì§€í• ìˆ˜ 있습니다. -ì´ëŠ” ë™ê¸°í™” 어댑터가 해당 í–‰ì„ ìžì‹ ì˜ ì„œë²„ì—서 ì‚ì œí•˜ê³ ë§ˆì¹¨ë‚´ëŠ” í–‰ì„ ë¦¬í¬ì§€í† 리ì—ì„œë„ ì‚ì œí• ìˆ˜ ìžˆì„ + ì´ í”Œëž˜ê·¸ë¥¼ 사용하면 ì—°ë½ì²˜ ì œê³µìžê°€ 해당 í–‰ì„ ë‚´ë¶€ì— ê³„ì† ìœ ì§€í• ìˆ˜ 있습니다. +ì´ëŠ” ë™ê¸°í™” 어댑터가 해당 í–‰ì„ ìžì‹ ì˜ ì„œë²„ì—서 ì‚ì œí•˜ê³ ë§ˆì¹¨ë‚´ëŠ” í–‰ì„ ë¦¬í¬ì§€í† 리ì—ì„œë„ ì‚ì œí• ìˆ˜ ìžˆì„ ë•Œê¹Œì§€ë§Œìž…ë‹ˆë‹¤. </td> </tr> </table> <h4>ì°¸ê³ </h4> <p> - 다ìŒì€ + 다ìŒì€ {@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì— ê´€í•œ 중요한 ì°¸ê³ ì‚¬í•입니다. </p> <ul> <li> - ì›ì‹œ ì—°ë½ì²˜ì˜ ì´ë¦„ì€ -{@link android.provider.ContactsContract.RawContacts}ì— ìžˆëŠ” ìžì‹ ì˜ í–‰ì— ì €ìž¥ë˜ì§€ 않습니다. ëŒ€ì‹ , -{@link android.provider.ContactsContract.CommonDataKinds.StructuredName} í–‰ì— ìžˆëŠ” -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì €ìž¥ë©ë‹ˆë‹¤. ì›ì‹œ ì—°ë½ì²˜ 하나ì—는 + ì›ì‹œ ì—°ë½ì²˜ì˜ ì´ë¦„ì€ +{@link android.provider.ContactsContract.RawContacts}ì— ìžˆëŠ” ìžì‹ ì˜ í–‰ì— ì €ìž¥ë˜ì§€ 않습니다. ëŒ€ì‹ , +{@link android.provider.ContactsContract.CommonDataKinds.StructuredName} í–‰ì— ìžˆëŠ” +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì €ìž¥ë©ë‹ˆë‹¤. ì›ì‹œ ì—°ë½ì²˜ 하나ì—는 {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 ì´ëŸ° ìœ í˜•ì˜ í–‰ì´ í•˜ë‚˜ì”©ë§Œ 있습니다. </li> <li> - <strong>주ì˜:</strong> ì›ì‹œ ì—°ë½ì²˜ì—서 본ì¸ì˜ ê³„ì • ë°ì´í„°ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ ì´ë¥¼ ìš°ì„ -{@link android.accounts.AccountManager}로 등ë¡í•´ì•¼ 합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´, -사용ìžì—게 ê³„ì • ìœ í˜•ê³¼ 본ì¸ì˜ ê³„ì • ì´ë¦„ì„ ê³„ì • 목ë¡ì— 추가하ë¼ëŠ” 프롬프트를 표시하ì‹ì‹œì˜¤. ì´ë ‡ê²Œ 하지 않으면, + <strong>주ì˜:</strong> ì›ì‹œ ì—°ë½ì²˜ì—서 본ì¸ì˜ ê³„ì • ë°ì´í„°ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ ì´ë¥¼ ìš°ì„ +{@link android.accounts.AccountManager}로 등ë¡í•´ì•¼ 합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´, +사용ìžì—게 ê³„ì • ìœ í˜•ê³¼ 본ì¸ì˜ ê³„ì • ì´ë¦„ì„ ê³„ì • 목ë¡ì— 추가하ë¼ëŠ” 프롬프트를 표시하ì‹ì‹œì˜¤. ì´ë ‡ê²Œ 하지 않으면, ì—°ë½ì²˜ ì œê³µìžê°€ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ìžë™ìœ¼ë¡œ ì‚ì œí•©ë‹ˆë‹¤. <p> - 예를 들어, 앱ì—서 ë„ë©”ì¸ {@code com.example.dataservice}로 웹 ë² ì´ìФ ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ìœ ì§€í•˜ê³ -ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì‚¬ìš©ìž ê³„ì •ì´ -{@code becky.sharp@dataservice.example.com}ì´ë¼ë©´, 사용ìžëŠ” ì•±ì´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì¶”ê°€í•˜ê¸° ì „ì— + 예를 들어, 앱ì—서 ë„ë©”ì¸ {@code com.example.dataservice}로 웹 ë² ì´ìФ ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ìœ ì§€í•˜ê³ +ì„œë¹„ìŠ¤ì— ëŒ€í•œ ì‚¬ìš©ìž ê³„ì •ì´ +{@code becky.sharp@dataservice.example.com}ì´ë¼ë©´, 사용ìžëŠ” ì•±ì´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì¶”ê°€í•˜ê¸° ì „ì— ê³„ì • "ìœ í˜•"({@code com.example.dataservice})ê³¼ ê³„ì • "ì´ë¦„" ({@code becky.smart@dataservice.example.com})ì„ ë¨¼ì € 추가해야 합니다. - ì´ ìš”êµ¬ 사í•ì„ ì‚¬ìš©ìžì—게 ì„¤ëª…í•˜ë ¤ë©´ ê´€ë ¨ 문서를 ì‚¬ìš©í•´ë„ ë˜ê³ , 아니면 사용ìžì—게 -ìœ í˜•ê³¼ ì´ë¦„ì„ ì¶”ê°€í•˜ë¼ëŠ” 프롬프트를 í‘œì‹œí•´ë„ ë˜ê³ ë‘ ê°€ì§€ ë°©ë²•ì„ ë‹¤ ì¨ë„ ë©ë‹ˆë‹¤. ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì€ + ì´ ìš”êµ¬ 사í•ì„ ì‚¬ìš©ìžì—게 ì„¤ëª…í•˜ë ¤ë©´ ê´€ë ¨ 문서를 ì‚¬ìš©í•´ë„ ë˜ê³ , 아니면 사용ìžì—게 +ìœ í˜•ê³¼ ì´ë¦„ì„ ì¶”ê°€í•˜ë¼ëŠ” 프롬프트를 í‘œì‹œí•´ë„ ë˜ê³ ë‘ ê°€ì§€ ë°©ë²•ì„ ë‹¤ ì¨ë„ ë©ë‹ˆë‹¤. ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì€ ë‹¤ìŒ ì„¹ì…˜ì—서 ë” ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </li> </ul> <h3 id="RawContactsExample">ì›ì‹œ ì—°ë½ì²˜ ë°ì´í„° 소스</h3> <p> - ì›ì‹œ ì—°ë½ì²˜ì˜ ìž‘ë™ ì›ë¦¬ë¥¼ ì´í•´í•˜ê¸° 위해, 다ìŒê³¼ ê°™ì´ ê¸°ê¸°ì—서 ì •ì˜í•œ ì‚¬ìš©ìž ê³„ì • 세 가지를 ë³´ìœ í•œ ì‚¬ìš©ìž "Emily Dickinson"ì´ ìžˆë‹¤ê³ + ì›ì‹œ ì—°ë½ì²˜ì˜ ìž‘ë™ ì›ë¦¬ë¥¼ ì´í•´í•˜ê¸° 위해, 다ìŒê³¼ ê°™ì´ ê¸°ê¸°ì—서 ì •ì˜í•œ ì‚¬ìš©ìž ê³„ì • 세 가지를 ë³´ìœ í•œ ì‚¬ìš©ìž "Emily Dickinson"ì´ ìžˆë‹¤ê³ ê°€ì •í•´ 봅시다. </p> <ul> @@ -275,11 +275,11 @@ Android 구성 요소입니다. 콘í…ì¸ ì œê³µìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í” í™œì„±í™”í–ˆìŠµë‹ˆë‹¤. </p> <p> - Emily Dickinsonì´ ë¸Œë¼ìš°ì € ì°½ì„ ì—´ê³ , + Emily Dickinsonì´ ë¸Œë¼ìš°ì € ì°½ì„ ì—´ê³ , Gmailì— <code>emily.dickinson@gmail.com</code>으로 로그ì¸í•˜ê³ , -ì—°ë½ì²˜ë¥¼ 열어서 "Thomas Higginson"ì„ ì¶”ê°€í•œë‹¤ê³ ê°€ì •í•˜ê² ìŠµë‹ˆë‹¤. ì´ ì‚¬ìš©ìžëŠ” ë‚˜ì¤‘ì— Gmailì— -<code>emilyd@gmail.com</code>으로 로그ì¸í•˜ê³ "Thomas Higginson"ì—게 ì´ë©”ì¼ì„ ì „ì†¡í•©ë‹ˆë‹¤. -ì´ë ‡ê²Œ 하면 ì´ ì‚¬ëžŒì„ ìžë™ìœ¼ë¡œ ì—°ë½ì²˜ë¡œ 추가합니다. Emily는 Twitterì—서 "colonel_tom"(Thomas Higginsonì˜ Twitter ID)ë„ +ì—°ë½ì²˜ë¥¼ 열어서 "Thomas Higginson"ì„ ì¶”ê°€í•œë‹¤ê³ ê°€ì •í•˜ê² ìŠµë‹ˆë‹¤. ì´ ì‚¬ìš©ìžëŠ” ë‚˜ì¤‘ì— Gmailì— +<code>emilyd@gmail.com</code>으로 로그ì¸í•˜ê³ "Thomas Higginson"ì—게 ì´ë©”ì¼ì„ ì „ì†¡í•©ë‹ˆë‹¤. +ì´ë ‡ê²Œ 하면 ì´ ì‚¬ëžŒì„ ìžë™ìœ¼ë¡œ ì—°ë½ì²˜ë¡œ 추가합니다. Emily는 Twitterì—서 "colonel_tom"(Thomas Higginsonì˜ Twitter ID)ë„ íŒ”ë¡œìš°í•©ë‹ˆë‹¤. </p> <p> @@ -292,34 +292,34 @@ Gmailì— <code>emily.dickinson@gmail.com</code>으로 로그ì¸í•˜ê³ , </li> <li> <code>emilyd@gmail.com</code>ê³¼ ì—°ê´€ëœ "Thomas Higginson"ì˜ ë‘ ë²ˆì§¸ ì›ì‹œ ì—°ë½ì²˜ìž…니다. - ì‚¬ìš©ìž ê³„ì • ìœ í˜•ì€ ë§ˆì°¬ê°€ì§€ë¡œ Google입니다. ì´ë¦„ì´ ì´ì „ ì´ë¦„ê³¼ 똑같ë”ë¼ë„ ë‘ ë²ˆì§¸ ì›ì‹œ ì—°ë½ì²˜ê°€ -ë”해집니다. 왜ëƒí•˜ë©´ ì´ ì‚¬ëžŒì€ ì•„ê¹Œì™€ 다른 + ì‚¬ìš©ìž ê³„ì • ìœ í˜•ì€ ë§ˆì°¬ê°€ì§€ë¡œ Google입니다. ì´ë¦„ì´ ì´ì „ ì´ë¦„ê³¼ 똑같ë”ë¼ë„ ë‘ ë²ˆì§¸ ì›ì‹œ ì—°ë½ì²˜ê°€ +ë”해집니다. 왜ëƒí•˜ë©´ ì´ ì‚¬ëžŒì€ ì•„ê¹Œì™€ 다른 ì‚¬ìš©ìž ê³„ì •ì— ì¶”ê°€ë˜ì—ˆê¸° 때문입니다. </li> <li> - "belle_of_amherst"와 ì—°ê´€ëœ "Thomas Higginson"ì˜ ì„¸ 번째 ì›ì‹œ ì—°ë½ì²˜ìž…니다. ì‚¬ìš©ìž + "belle_of_amherst"와 ì—°ê´€ëœ "Thomas Higginson"ì˜ ì„¸ 번째 ì›ì‹œ ì—°ë½ì²˜ìž…니다. ì‚¬ìš©ìž ê³„ì • ìœ í˜•ì€ Twitter입니다. </li> </ol> <h2 id="DataBasics">ë°ì´í„°</h2> <p> ì´ì „ì— ì–¸ê¸‰í•œ 바와 ê°™ì´, ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„°ëŠ” -ì›ì‹œ ì—°ë½ì²˜ì˜ <code>_ID</code> ê°’ê³¼ ì—°ê²°ëœ{@link android.provider.ContactsContract.Data} í–‰ì— -ì €ìž¥ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 í•˜ë‚˜ì˜ ì›ì‹œ ì—°ë½ì²˜ì— ê°™ì€ ìœ í˜•ì˜ ë°ì´í„°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ 여러 ê°œ ìžˆì„ ìˆ˜ 있게 ë©ë‹ˆë‹¤. -예를 들어 ì´ë©”ì¼ ì£¼ì†Œ ë˜ëŠ” ì „í™” 번호 ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. 예를 들어, +ì›ì‹œ ì—°ë½ì²˜ì˜ <code>_ID</code> ê°’ê³¼ ì—°ê²°ëœ{@link android.provider.ContactsContract.Data} í–‰ì— +ì €ìž¥ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 í•˜ë‚˜ì˜ ì›ì‹œ ì—°ë½ì²˜ì— ê°™ì€ ìœ í˜•ì˜ ë°ì´í„°ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ 여러 ê°œ ìžˆì„ ìˆ˜ 있게 ë©ë‹ˆë‹¤. +예를 들어 ì´ë©”ì¼ ì£¼ì†Œ ë˜ëŠ” ì „í™” 번호 ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. 예를 들어, {@code emilyd@gmail.com}ì— ëŒ€í•œ "Thomas Higginson"(Google ê³„ì • <code>emilyd@gmail.com</code>ê³¼ ì—°ê´€ëœ Thomas Higginsonì˜ -ì›ì‹œ ì—°ë½ì²˜)ì—는 +ì›ì‹œ ì—°ë½ì²˜)ì—는 <code>thigg@gmail.com</code>ì´ë¼ëŠ” ì§‘ ì´ë©”ì¼ ì£¼ì†Œì™€ <code>thomas.higginson@gmail.com</code>ì´ë¼ëŠ” ì§ìž¥ ì´ë©”ì¼ ì£¼ì†Œê°€ ìžˆê³ , ì—°ë½ì²˜ ì œê³µìžëŠ” ë‘ ê°œì˜ ì´ë©”ì¼ ì£¼ì†Œ í–‰ì„ ì €ìž¥í•˜ê³ ì›ì‹œ ì—°ë½ì²˜ì— ë‘ ê°€ì§€ë¥¼ 연결합니다. </p> <p> - ì´ í…Œì´ë¸” í•˜ë‚˜ì— ì—¬ëŸ¬ 가지 ìœ í˜•ì˜ ë°ì´í„°ê°€ ì €ìž¥ëœ ì ì— ì£¼ì˜í•˜ì‹ì‹œì˜¤. 표시 ì´ë¦„, -ì „í™” 번호, ì´ë©”ì¼, 우편 주소, 사진 ë° ì›¹ì‚¬ì´íЏ 세부 ì •ë³´ í–‰ì€ ëª¨ë‘ -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 ì°¾ì„ ìˆ˜ 있습니다. ì´ëŸ° ë°ì´í„° 관리를 ë•기 위해 -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—는 ì„¤ëª…ì´ í¬í•¨ëœ ì´ë¦„ì´ ìžˆëŠ” ì—´ì´ ëª‡ ê°œ ìžˆê³ -ì¼ë°˜ì ì´ë¦„ì´ í¬í•¨ëœ ì—´ë„ ëª‡ ê°œ 있습니다. ì„¤ëª…ì´ í¬í•¨ëœ ì´ë¦„ ì—´ì˜ ì½˜í…ì¸ ëŠ” í–‰ ì•ˆì˜ ë°ì´í„° ìœ í˜•ê³¼ 관계 ì—†ì´ ëª¨ë‘ ì˜ë¯¸ê°€ ê°™ê³ , -ì¼ë°˜ì ì¸ ì´ë¦„ ì—´ì˜ ì½˜í…ì¸ ëŠ” ë°ì´í„° ìœ í˜•ì— ë”°ë¼ + ì´ í…Œì´ë¸” í•˜ë‚˜ì— ì—¬ëŸ¬ 가지 ìœ í˜•ì˜ ë°ì´í„°ê°€ ì €ìž¥ëœ ì ì— ì£¼ì˜í•˜ì‹ì‹œì˜¤. 표시 ì´ë¦„, +ì „í™” 번호, ì´ë©”ì¼, 우편 주소, 사진 ë° ì›¹ì‚¬ì´íЏ 세부 ì •ë³´ í–‰ì€ ëª¨ë‘ +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 ì°¾ì„ ìˆ˜ 있습니다. ì´ëŸ° ë°ì´í„° 관리를 ë•기 위해 +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—는 ì„¤ëª…ì´ í¬í•¨ëœ ì´ë¦„ì´ ìžˆëŠ” ì—´ì´ ëª‡ ê°œ ìžˆê³ +ì¼ë°˜ì ì´ë¦„ì´ í¬í•¨ëœ ì—´ë„ ëª‡ ê°œ 있습니다. ì„¤ëª…ì´ í¬í•¨ëœ ì´ë¦„ ì—´ì˜ ì½˜í…ì¸ ëŠ” í–‰ ì•ˆì˜ ë°ì´í„° ìœ í˜•ê³¼ 관계 ì—†ì´ ëª¨ë‘ ì˜ë¯¸ê°€ ê°™ê³ , +ì¼ë°˜ì ì¸ ì´ë¦„ ì—´ì˜ ì½˜í…ì¸ ëŠ” ë°ì´í„° ìœ í˜•ì— ë”°ë¼ ì„œë¡œ ì˜ë¯¸ê°€ 다릅니다. </p> <h3 id="DescriptiveColumns">ì„¤ëª…ì´ í¬í•¨ëœ ì—´ ì´ë¦„</h3> @@ -337,9 +337,9 @@ Gmailì— <code>emily.dickinson@gmail.com</code>으로 로그ì¸í•˜ê³ , {@link android.provider.ContactsContract.Data#MIMETYPE} </dt> <dd> - ì´ í–‰ì— ì €ìž¥ë˜ëŠ” ë°ì´í„° ìœ í˜•ìœ¼ë¡œ, ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ìœ¼ë¡œ 표현ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” -{@link android.provider.ContactsContract.CommonDataKinds}ì˜ í•˜ìœ„ í´ëž˜ìФì—서 ì •ì˜ëœ -MIME ìœ í˜•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ MIME ìœ í˜•ì€ ì˜¤í”ˆ 소스ì´ê³ , + ì´ í–‰ì— ì €ìž¥ë˜ëŠ” ë°ì´í„° ìœ í˜•ìœ¼ë¡œ, ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ìœ¼ë¡œ 표현ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” +{@link android.provider.ContactsContract.CommonDataKinds}ì˜ í•˜ìœ„ í´ëž˜ìФì—서 ì •ì˜ëœ +MIME ìœ í˜•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ MIME ìœ í˜•ì€ ì˜¤í”ˆ 소스ì´ê³ , ì—°ë½ì²˜ ì œê³µìžì™€ 함께 ì‚¬ìš©í• ìˆ˜ 있는 ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” ë™ê¸°í™” 어댑터가 ì‚¬ìš©í• ìˆ˜ 있습니다. </dd> <dt> @@ -347,25 +347,25 @@ MIME ìœ í˜•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ MIME ìœ í˜•ì€ ì˜¤í”ˆ 소스ì´ê³ , </dt> <dd> ì´ ìœ í˜•ì˜ ë°ì´í„° í–‰ì´ ì›ì‹œ ì—°ë½ì²˜ì—서 한 번 ì´ìƒ ë°œìƒí•˜ëŠ” 경우, -{@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} ì—´ì€ -해당 ìœ í˜•ì˜ ê¸°ë³¸ ë°ì´í„°ê°€ 들어있는 ë°ì´í„° í–‰ì„ í”Œëž˜ê·¸ë¡œ 표시합니다. 예를 들어, -사용ìžê°€ ì—°ë½ì²˜ì˜ ì „í™” 번호를 길게 ëˆ„ë¥´ê³ <strong>기본값으로 ì„¤ì •</strong>ì„ ì„ íƒí•˜ë©´ +{@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} ì—´ì€ +해당 ìœ í˜•ì˜ ê¸°ë³¸ ë°ì´í„°ê°€ 들어있는 ë°ì´í„° í–‰ì„ í”Œëž˜ê·¸ë¡œ 표시합니다. 예를 들어, +사용ìžê°€ ì—°ë½ì²˜ì˜ ì „í™” 번호를 길게 ëˆ„ë¥´ê³ <strong>기본값으로 ì„¤ì •</strong>ì„ ì„ íƒí•˜ë©´ ê·¸ 번호가 들어있는 {@link android.provider.ContactsContract.Data} í–‰ì´ -{@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} ì—´ì„ +{@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} ì—´ì„ 0ì´ ì•„ë‹Œ 값으로 ì„¤ì •í•©ë‹ˆë‹¤. </dd> </dl> <h3 id="GenericColumns">ì¼ë°˜ ì—´ ì´ë¦„</h3> <p> - 15ê°œì˜ ì¼ë°˜ ì—´ 중ì—서 <code>DATA1</code>부터 -<code>DATA15</code>까지는 ì¼ë°˜ì 으로 ì´ìš©í• 수 ìžˆê³ ì´ì™¸ì— 추가로 ë§ˆë ¨ëœ ë„¤ ê°œì˜ ì¼ë°˜ -ì—´, 즉 <code>SYNC1</code>부터 <code>SYNC4</code>까지는 -ë™ê¸°í™” 어댑터 ì „ìš©ìž…ë‹ˆë‹¤. ì¼ë°˜ ì—´ ì´ë¦„ ìƒìˆ˜ëŠ” 해당 í–‰ì— ë“¤ì–´ìžˆëŠ” ë°ì´í„° ìœ í˜•ê³¼ 관계 ì—†ì´ + 15ê°œì˜ ì¼ë°˜ ì—´ 중ì—서 <code>DATA1</code>부터 +<code>DATA15</code>까지는 ì¼ë°˜ì 으로 ì´ìš©í• 수 ìžˆê³ ì´ì™¸ì— 추가로 ë§ˆë ¨ëœ ë„¤ ê°œì˜ ì¼ë°˜ +ì—´, 즉 <code>SYNC1</code>부터 <code>SYNC4</code>까지는 +ë™ê¸°í™” 어댑터 ì „ìš©ìž…ë‹ˆë‹¤. ì¼ë°˜ ì—´ ì´ë¦„ ìƒìˆ˜ëŠ” 해당 í–‰ì— ë“¤ì–´ìžˆëŠ” ë°ì´í„° ìœ í˜•ê³¼ 관계 ì—†ì´ ì–¸ì œë‚˜ 통합니다. </p> <p> - <code>DATA1</code> ì—´ì€ ìƒ‰ì¸ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” ì œê³µìžê°€ 가장 ìžì£¼ ì¿¼ë¦¬ì˜ ëŒ€ìƒì´ ë 것으로 예ìƒí•˜ëŠ” -ë°ì´í„°ì— 대해 í•ìƒ ì´ ì—´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 예컨대 + <code>DATA1</code> ì—´ì€ ìƒ‰ì¸ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” ì œê³µìžê°€ 가장 ìžì£¼ ì¿¼ë¦¬ì˜ ëŒ€ìƒì´ ë 것으로 예ìƒí•˜ëŠ” +ë°ì´í„°ì— 대해 í•ìƒ ì´ ì—´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 예컨대 ì´ë©”ì¼ í–‰ì˜ ê²½ìš°, ì´ ì—´ì— ì‹¤ì œ ì´ë©”ì¼ ì£¼ì†Œê°€ 들어있습니다. </p> <p> @@ -374,36 +374,36 @@ MIME ìœ í˜•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ëŸ¬í•œ MIME ìœ í˜•ì€ ì˜¤í”ˆ 소스ì´ê³ , </p> <h3 id="TypeSpecificNames">ìœ í˜•ë³„ ì—´ ì´ë¦„</h3> <p> - íŠ¹ì • ìœ í˜•ì˜ í–‰ì— ëŒ€í•œ ì—´ê³¼ì˜ ìž‘ì—…ì„ ë•기 위해, ì—°ë½ì²˜ ì œê³µìžëŠ” - ìœ í˜•ë³„ ì—´ ì´ë¦„ ìƒìˆ˜ë„ ì œê³µí•©ë‹ˆë‹¤. ì´ëŠ” -{@link android.provider.ContactsContract.CommonDataKinds}ì˜ í•˜ìœ„ í´ëž˜ìФì—서 ì •ì˜í•©ë‹ˆë‹¤. ì´ ìƒìˆ˜ëŠ” ê·¸ì € ê°™ì€ ì—´ ì´ë¦„ì— -서로 다른 ìƒìˆ˜ ì´ë¦„ì„ ë¶€ì—¬í• ë¿ì´ë©°, ì´ë ‡ê²Œ 하면 개발ìžê°€ íŠ¹ì • ìœ í˜•ì˜ í–‰ì— ìžˆëŠ” ë°ì´í„°ì— + íŠ¹ì • ìœ í˜•ì˜ í–‰ì— ëŒ€í•œ ì—´ê³¼ì˜ ìž‘ì—…ì„ ë•기 위해, ì—°ë½ì²˜ ì œê³µìžëŠ” + ìœ í˜•ë³„ ì—´ ì´ë¦„ ìƒìˆ˜ë„ ì œê³µí•©ë‹ˆë‹¤. ì´ëŠ” +{@link android.provider.ContactsContract.CommonDataKinds}ì˜ í•˜ìœ„ í´ëž˜ìФì—서 ì •ì˜í•©ë‹ˆë‹¤. ì´ ìƒìˆ˜ëŠ” ê·¸ì € ê°™ì€ ì—´ ì´ë¦„ì— +서로 다른 ìƒìˆ˜ ì´ë¦„ì„ ë¶€ì—¬í• ë¿ì´ë©°, ì´ë ‡ê²Œ 하면 개발ìžê°€ íŠ¹ì • ìœ í˜•ì˜ í–‰ì— ìžˆëŠ” ë°ì´í„°ì— 액세스하기 쉽습니다. </p> <p> - 예를 들어, {@link android.provider.ContactsContract.CommonDataKinds.Email} í´ëž˜ìŠ¤ëŠ” + 예를 들어, {@link android.provider.ContactsContract.CommonDataKinds.Email} í´ëž˜ìŠ¤ëŠ” MIME ìœ í˜•{@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE Email.CONTENT_ITEM_TYPE}ì„ ê°–ëŠ” -{@link android.provider.ContactsContract.Data} í–‰ì— +{@link android.provider.ContactsContract.Data} í–‰ì— ëŒ€í•œ ìœ í˜•ë³„ ì—´ ì´ë¦„ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì´ í´ëž˜ìФì—는 ì´ë©”ì¼ ì£¼ì†Œ ì—´ì— ëŒ€í•œ - ìƒìˆ˜ {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS}ê°€ -들어있습니다. -{@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS}ì˜ ì‹¤ì œ ê°’ì€ + ìƒìˆ˜ {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS}ê°€ +들어있습니다. +{@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS}ì˜ ì‹¤ì œ ê°’ì€ "data1"ì´ê³ , ì´ëŠ” ì—´ì˜ ì¼ë°˜ ì´ë¦„ê³¼ 같습니다. </p> <p class="caution"> - <strong>주ì˜:</strong> ê°œë°œìž ë³¸ì¸ì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„°ë¥¼ -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— -ì¶”ê°€í• ë•Œ ì œê³µìžì˜ 미리 ì •ì˜ëœ MIME ìœ í˜• 중 하나가 있는 í–‰ì„ ì‚¬ìš©í•˜ë©´ 안 ë©ë‹ˆë‹¤. ê·¸ë ‡ê²Œ 하면 ë°ì´í„°ê°€ ì†ì‹¤ë˜ê±°ë‚˜ ì œê³µìžì˜ 오작ë™ì„ -ìœ ë°œí• ìˆ˜ 있습니다. 예를 들어, MIME ìœ í˜• + <strong>주ì˜:</strong> ê°œë°œìž ë³¸ì¸ì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„°ë¥¼ +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— +ì¶”ê°€í• ë•Œ ì œê³µìžì˜ 미리 ì •ì˜ëœ MIME ìœ í˜• 중 하나가 있는 í–‰ì„ ì‚¬ìš©í•˜ë©´ 안 ë©ë‹ˆë‹¤. ê·¸ë ‡ê²Œ 하면 ë°ì´í„°ê°€ ì†ì‹¤ë˜ê±°ë‚˜ ì œê³µìžì˜ 오작ë™ì„ +ìœ ë°œí• ìˆ˜ 있습니다. 예를 들어, MIME ìœ í˜• {@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE - Email.CONTENT_ITEM_TYPE} ì•ˆì— -<code>DATA1</code> ì—´ì— ìžˆëŠ” ì´ë©”ì¼ ì£¼ì†Œ ëŒ€ì‹ ì‚¬ìš©ìž ì´ë¦„ì´ ë“¤ì–´ìžˆëŠ” í–‰ì€ ì¶”ê°€í•˜ë©´ 안 ë©ë‹ˆë‹¤. 해당 í–‰ì— ê°œë°œìž ë‚˜ë¦„ì˜ ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì„ ì‚¬ìš©í•˜ëŠ” 경우 + Email.CONTENT_ITEM_TYPE} ì•ˆì— +<code>DATA1</code> ì—´ì— ìžˆëŠ” ì´ë©”ì¼ ì£¼ì†Œ ëŒ€ì‹ ì‚¬ìš©ìž ì´ë¦„ì´ ë“¤ì–´ìžˆëŠ” í–‰ì€ ì¶”ê°€í•˜ë©´ 안 ë©ë‹ˆë‹¤. 해당 í–‰ì— ê°œë°œìž ë‚˜ë¦„ì˜ ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì„ ì‚¬ìš©í•˜ëŠ” 경우 본ì¸ë§Œì˜ ìœ í˜•ë³„ ì—´ ì´ë¦„ì„ ìžìœ ìžìž¬ë¡œ ì •ì˜í•˜ê³ ì´ëŸ¬í•œ ì—´ì„ ë§ˆìŒëŒ€ë¡œ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. </p> <p> - 그림 2는 -{@link android.provider.ContactsContract.Data} í–‰ì—서 설명 ì—´ê³¼ ë°ì´í„° ì—´ì´ ë‚˜íƒ€ë‚˜ëŠ” ë°©ì‹ê³¼ ìœ í˜•ë³„ ì—´ ì´ë¦„ì´ + 그림 2는 +{@link android.provider.ContactsContract.Data} í–‰ì—서 설명 ì—´ê³¼ ë°ì´í„° ì—´ì´ ë‚˜íƒ€ë‚˜ëŠ” ë°©ì‹ê³¼ ìœ í˜•ë³„ ì—´ ì´ë¦„ì´ ì¼ë°˜ ì—´ ì´ë¦„ì— "ì˜¤ë²„ë ˆì´"ë˜ëŠ” ë°©ì‹ì„ 나타낸 것입니다. </p> <img src="{@docRoot}images/providers/data_columns.png" alt="How type-specific column names map to generic column names" height="311" id="figure2" /> @@ -446,51 +446,51 @@ Email.CONTENT_ITEM_TYPE}ì„ ê°–ëŠ” <td>{@link android.provider.ContactsContract.CommonDataKinds.GroupMembership}</td> <td>ì›ì‹œ ì—°ë½ì²˜ë¥¼ ì—°ë½ì²˜ ì œê³µìžì˜ 그룹 중 하나와 연결하는 ì‹ë³„ìžìž…니다.</td> <td> - ê·¸ë£¹ì€ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì˜ ì„ íƒì 기능입니다. ì´ëŸ¬í•œ ë‚´ìš©ì€ + ê·¸ë£¹ì€ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì˜ ì„ íƒì 기능입니다. ì´ëŸ¬í•œ ë‚´ìš©ì€ <a href="#Groups">ì—°ë½ì²˜ 그룹</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </td> </tr> </table> <h3 id="ContactBasics">ì—°ë½ì²˜</h3> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” ëª¨ë“ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì„ í†µí‹€ì–´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì¡°í•©í•˜ì—¬ -í•˜ë‚˜ì˜ <strong>ì—°ë½ì²˜</strong>를 형성합니다. ì´ë ‡ê²Œ 하면 사용ìžê°€ 한 ì‚¬ëžŒì— ëŒ€í•´ 수집한 -ëª¨ë“ ë°ì´í„°ë¥¼ í‘œì‹œí•˜ê³ ìˆ˜ì •í•˜ê¸° 쉽습니다. ì—°ë½ì²˜ ì œê³µìžëŠ” 새 ì—°ë½ì²˜ í–‰ì˜ ìƒì„±ì„ ê´€ë¦¬í•˜ê³ -ì›ì‹œ ì—°ë½ì²˜ë¥¼ 기존 ì—°ë½ì²˜ 행과 í†µí•©í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ + ì—°ë½ì²˜ ì œê³µìžëŠ” ëª¨ë“ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì„ í†µí‹€ì–´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì¡°í•©í•˜ì—¬ +í•˜ë‚˜ì˜ <strong>ì—°ë½ì²˜</strong>를 형성합니다. ì´ë ‡ê²Œ 하면 사용ìžê°€ 한 ì‚¬ëžŒì— ëŒ€í•´ 수집한 +ëª¨ë“ ë°ì´í„°ë¥¼ í‘œì‹œí•˜ê³ ìˆ˜ì •í•˜ê¸° 쉽습니다. ì—°ë½ì²˜ ì œê³µìžëŠ” 새 ì—°ë½ì²˜ í–‰ì˜ ìƒì„±ì„ ê´€ë¦¬í•˜ê³ +ì›ì‹œ ì—°ë½ì²˜ë¥¼ 기존 ì—°ë½ì²˜ 행과 í†µí•©í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™” 어댑터는 ëª¨ë‘ ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ìˆ˜ 없으며, ì—°ë½ì²˜ í–‰ì— ìžˆëŠ” ì—´ 중 ëª‡ëª‡ì€ ì½ê¸° ì „ìš©ìž…ë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ì—°ë½ì²˜ ì œê³µìžì— ì—°ë½ì²˜ë¥¼ ì¶”ê°€í•˜ë ¤ê³ -{@link android.content.ContentResolver#insert(Uri,ContentValues) insert()}를 사용하는 경우, -{@link java.lang.UnsupportedOperationException} 예외가 ë°œìƒí•©ë‹ˆë‹¤. "ì½ê¸° ì „ìš©"으로 í‘œì‹œëœ ì—´ì„ ì—…ë°ì´íŠ¸í•˜ë ¤ê³ í•˜ë©´ + <strong>ì°¸ê³ :</strong> ì—°ë½ì²˜ ì œê³µìžì— ì—°ë½ì²˜ë¥¼ ì¶”ê°€í•˜ë ¤ê³ +{@link android.content.ContentResolver#insert(Uri,ContentValues) insert()}를 사용하는 경우, +{@link java.lang.UnsupportedOperationException} 예외가 ë°œìƒí•©ë‹ˆë‹¤. "ì½ê¸° ì „ìš©"으로 í‘œì‹œëœ ì—´ì„ ì—…ë°ì´íŠ¸í•˜ë ¤ê³ í•˜ë©´ ê·¸ ì—…ë°ì´íŠ¸ëŠ” 무시ë©ë‹ˆë‹¤. </p> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” 기존 ì—°ë½ì²˜ ì–´ëŠ ê²ƒê³¼ë„ ì¼ì¹˜í•˜ì§€ 않는 새로운 ì›ì‹œ ì—°ë½ì²˜ê°€ 추가ë˜ë©´ -새로운 ì—°ë½ì²˜ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. ì œê³µìžê°€ ì´ ìž‘ì—…ì„ í•˜ëŠ” ë˜ ë‹¤ë¥¸ 경우는 -기존 ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„°ê°€ 변경ë˜ì–´ ì´ì „ì— ì²¨ë¶€ë˜ì–´ ìžˆë˜ ì—°ë½ì²˜ì— ë” ì´ìƒ ì¼ì¹˜í•˜ì§€ 않는 -경우입니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ë‚˜ ë™ê¸°í™” 어댑터가 + ì—°ë½ì²˜ ì œê³µìžëŠ” 기존 ì—°ë½ì²˜ ì–´ëŠ ê²ƒê³¼ë„ ì¼ì¹˜í•˜ì§€ 않는 새로운 ì›ì‹œ ì—°ë½ì²˜ê°€ 추가ë˜ë©´ +새로운 ì—°ë½ì²˜ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. ì œê³µìžê°€ ì´ ìž‘ì—…ì„ í•˜ëŠ” ë˜ ë‹¤ë¥¸ 경우는 +기존 ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„°ê°€ 변경ë˜ì–´ ì´ì „ì— ì²¨ë¶€ë˜ì–´ ìžˆë˜ ì—°ë½ì²˜ì— ë” ì´ìƒ ì¼ì¹˜í•˜ì§€ 않는 +경우입니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ë‚˜ ë™ê¸°í™” 어댑터가 기존 ì—°ë½ì²˜ì™€ <em>ì¼ì¹˜í•˜ëŠ”</em> 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìƒì„±í•˜ë©´, 새로운 ì›ì‹œ ì—°ë½ì²˜ëŠ” 기존 ì—°ë½ì²˜ì— 통합ë©ë‹ˆë‹¤. </p> <p> ì—°ë½ì²˜ ì œê³µìžëŠ” -{@link android.provider.ContactsContract.Contacts Contacts} í…Œì´ë¸”ì— ìžˆëŠ” ì—°ë½ì²˜ í–‰ì˜ <code>_ID</code> 열로 -ì—°ë½ì²˜ 행과 ì›ì‹œ ì—°ë½ì²˜ 행를 연결합니다. ì›ì‹œ ì—°ë½ì²˜ í…Œì´ë¸” {@link android.provider.ContactsContract.RawContacts}ì˜ <code>CONTACT_ID</code> í–‰ì—는 -ê° ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ëœ ì—°ë½ì²˜ í–‰ì— ëŒ€í•œ <code>_ID</code> ê°’ì´ +{@link android.provider.ContactsContract.Contacts Contacts} í…Œì´ë¸”ì— ìžˆëŠ” ì—°ë½ì²˜ í–‰ì˜ <code>_ID</code> 열로 +ì—°ë½ì²˜ 행과 ì›ì‹œ ì—°ë½ì²˜ 행를 연결합니다. ì›ì‹œ ì—°ë½ì²˜ í…Œì´ë¸” {@link android.provider.ContactsContract.RawContacts}ì˜ <code>CONTACT_ID</code> í–‰ì—는 +ê° ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ëœ ì—°ë½ì²˜ í–‰ì— ëŒ€í•œ <code>_ID</code> ê°’ì´ ë“¤ì–´ìžˆìŠµë‹ˆë‹¤. </p> <p> {@link android.provider.ContactsContract.Contacts} í…Œì´ë¸”ì—는 ì—°ë½ì²˜ í–‰ì— ëŒ€í•œ "ì˜êµ¬" ë§í¬ì¸ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} ì—´ë„ -있습니다. ì—°ë½ì²˜ ì œê³µìžê°€ ì—°ë½ì²˜ë¥¼ ìžë™ìœ¼ë¡œ 관리하므로, -통합ì´ë‚˜ ë™ê¸°í™”ì— ì‘답하여 ì—°ë½ì²˜ í–‰ì˜ {@code android.provider.BaseColumns#_ID} ê°’ì„ -ë³€ê²½í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° ì¼ì´ ë°œìƒí•œë‹¤ 하ë”ë¼ë„ 콘í…ì¸ URI -{@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}와 -ì—°ë½ì²˜ì˜ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}는 ì—¬ì „ížˆ -ì—°ë½ì²˜ í–‰ì„ ê°€ë¦¬í‚¤ë¯€ë¡œ, -{@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}를 -사용하여 "ì¦ê²¨ì°¾ê¸°" ì—°ë½ì²˜ì— 대한 ì—°ê²° ë“±ì„ ê·¸ëŒ€ë¡œ ìœ ì§€í• ìˆ˜ 있습니다. ì´ ì—´ì—는 +있습니다. ì—°ë½ì²˜ ì œê³µìžê°€ ì—°ë½ì²˜ë¥¼ ìžë™ìœ¼ë¡œ 관리하므로, +통합ì´ë‚˜ ë™ê¸°í™”ì— ì‘답하여 ì—°ë½ì²˜ í–‰ì˜ {@code android.provider.BaseColumns#_ID} ê°’ì„ +ë³€ê²½í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° ì¼ì´ ë°œìƒí•œë‹¤ 하ë”ë¼ë„ 콘í…ì¸ URI +{@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}와 +ì—°ë½ì²˜ì˜ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}는 ì—¬ì „ížˆ +ì—°ë½ì²˜ í–‰ì„ ê°€ë¦¬í‚¤ë¯€ë¡œ, +{@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}를 +사용하여 "ì¦ê²¨ì°¾ê¸°" ì—°ë½ì²˜ì— 대한 ì—°ê²° ë“±ì„ ê·¸ëŒ€ë¡œ ìœ ì§€í• ìˆ˜ 있습니다. ì´ ì—´ì—는 {@code android.provider.BaseColumns#_ID} ì—´ì˜ í˜•ì‹ê³¼ ê´€ë ¨ì´ ì—†ëŠ” ë‚˜ë¦„ì˜ í˜•ì‹ì´ 있습니다. </p> <p> @@ -502,17 +502,17 @@ Email.CONTENT_ITEM_TYPE}ì„ ê°–ëŠ” </p> <h2 id="Sources">ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ë°ì´í„°</h2> <p> - 사용ìžê°€ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ê¸°ê¸°ì— ì§ì ‘ ìž…ë ¥í•˜ê¸°ë„ í•˜ì§€ë§Œ, ë°ì´í„°ëŠ” 웹 서비스ì—서 -<strong>ë™ê¸°í™” 어댑터</strong>를 통해 ì—°ë½ì²˜ ì œê³µìžë¡œ í˜ëŸ¬ë“¤ì–´ê°€ê¸°ë„ 합니다. ì´ê²ƒì´ 기기와 -서비스 사ì´ì—서 ë°ì´í„°ì˜ ì „ì†¡ì„ ìžë™í™”하는 것입니다. ë™ê¸°í™” 어댑터는 ì‹œìŠ¤í…œì˜ ì œì–´ë¥¼ 받으며 -ë°°ê²½ì—서 실행ë˜ê³ , {@link android.content.ContentResolver} 메서드를 + 사용ìžê°€ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ê¸°ê¸°ì— ì§ì ‘ ìž…ë ¥í•˜ê¸°ë„ í•˜ì§€ë§Œ, ë°ì´í„°ëŠ” 웹 서비스ì—서 +<strong>ë™ê¸°í™” 어댑터</strong>를 통해 ì—°ë½ì²˜ ì œê³µìžë¡œ í˜ëŸ¬ë“¤ì–´ê°€ê¸°ë„ 합니다. ì´ê²ƒì´ 기기와 +서비스 사ì´ì—서 ë°ì´í„°ì˜ ì „ì†¡ì„ ìžë™í™”하는 것입니다. ë™ê¸°í™” 어댑터는 ì‹œìŠ¤í…œì˜ ì œì–´ë¥¼ 받으며 +ë°°ê²½ì—서 실행ë˜ê³ , {@link android.content.ContentResolver} 메서드를 호출하여 ë°ì´í„°ë¥¼ 관리합니다. </p> <p> Androidì—서 ë™ê¸°í™” 어댑터와 함께 작업하는 웹 서비스는 ê³„ì • ìœ í˜•ìœ¼ë¡œ ì‹ë³„ë©ë‹ˆë‹¤. - ê° ë™ê¸°í™” 어댑터는 ê³„ì • ìœ í˜• í•˜ë‚˜ì— í†µí•˜ì§€ë§Œ, ê·¸ ìœ í˜•ì— ëŒ€í•œ 여러 ê°œì˜ ê³„ì •ì´ë¦„ì„ -ì§€ì›í• 수 있습니다. ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì€ -<a href="#RawContactsExample">ì›ì‹œ ì—°ë½ì²˜ ë°ì´í„° 소스</a> ì„¹ì…˜ì— ê°„ë‹¨ížˆ 설명ë˜ì–´ 있습니다. ë‹¤ìŒ ì •ì˜ëŠ” 좀 ë” ìžì„¸í•œ ë‚´ìš©ì„ ì œê³µí•˜ë©°, + ê° ë™ê¸°í™” 어댑터는 ê³„ì • ìœ í˜• í•˜ë‚˜ì— í†µí•˜ì§€ë§Œ, ê·¸ ìœ í˜•ì— ëŒ€í•œ 여러 ê°œì˜ ê³„ì •ì´ë¦„ì„ +ì§€ì›í• 수 있습니다. ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ì€ +<a href="#RawContactsExample">ì›ì‹œ ì—°ë½ì²˜ ë°ì´í„° 소스</a> ì„¹ì…˜ì— ê°„ë‹¨ížˆ 설명ë˜ì–´ 있습니다. ë‹¤ìŒ ì •ì˜ëŠ” 좀 ë” ìžì„¸í•œ ë‚´ìš©ì„ ì œê³µí•˜ë©°, ê³„ì • ìœ í˜•ê³¼ ì´ë¦„ì´ ë™ê¸°í™” 어댑터와 ì„œë¹„ìŠ¤ì— ê´€ë ¨ë˜ëŠ” ë°©ì‹ì„ 설명합니다. </p> <dl> @@ -520,34 +520,34 @@ Email.CONTENT_ITEM_TYPE}ì„ ê°–ëŠ” ê³„ì • ìœ í˜• </dt> <dd> - 사용ìžê°€ ë°ì´í„°ë¥¼ ì €ìž¥í•´ë‘” 서비스를 ì‹ë³„합니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, 사용ìžê°€ -서비스로 ì¸ì¦í•´ì•¼ 합니다. 예를 들어, Google 주소ë¡ì€ ê³„ì • ìœ í˜•ì´ê³ , ì´ëŠ” -코드 <code>google.com</code>으로 ì‹ë³„ë©ë‹ˆë‹¤. ì´ ê°’ì€ + 사용ìžê°€ ë°ì´í„°ë¥¼ ì €ìž¥í•´ë‘” 서비스를 ì‹ë³„합니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, 사용ìžê°€ +서비스로 ì¸ì¦í•´ì•¼ 합니다. 예를 들어, Google 주소ë¡ì€ ê³„ì • ìœ í˜•ì´ê³ , ì´ëŠ” +코드 <code>google.com</code>으로 ì‹ë³„ë©ë‹ˆë‹¤. ì´ ê°’ì€ {@link android.accounts.AccountManager}ê°€ 사용하는 ê³„ì • ìœ í˜•ì— ìƒì‘합니다. </dd> <dt> ê³„ì • ì´ë¦„ </dt> <dd> - í•˜ë‚˜ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•œ íŠ¹ì • ê³„ì • ë˜ëŠ” 로그ì¸ì„ ì‹ë³„합니다. Google ì£¼ì†Œë¡ ê³„ì •ì€ + í•˜ë‚˜ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•œ íŠ¹ì • ê³„ì • ë˜ëŠ” 로그ì¸ì„ ì‹ë³„합니다. Google ì£¼ì†Œë¡ ê³„ì •ì€ Google ê³„ì •ê³¼ ê°™ê³ , ì´ëŠ” ê³„ì • ì´ë¦„으로 ì´ë©”ì¼ ì£¼ì†Œë¥¼ 사용합니다. 다른 서비스는 한 단어로 ëœ ì‚¬ìš©ìž ì´ë¦„ì´ë‚˜ ìˆ«ìž ID를 ì‚¬ìš©í• ìˆ˜ 있습니다. </dd> </dl> <p> - ê³„ì • ìœ í˜•ì€ ê³ ìœ í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. 한 ì‚¬ëžŒì˜ ì‚¬ìš©ìžê°€ 여러 ê°œì˜ Google 주소ë¡ì„ êµ¬ì„±í• ìˆ˜ ìžˆê³ -ê·¸ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ë‹¤ìš´ë¡œë“œí• ìˆ˜ 있습니다. ì´ëŸ° ì¼ì€ 사용ìžì—게 -ê°œì¸ìš© ê³„ì • ì´ë¦„ì— ëŒ€í•œ ê°œì¸ìš© ì—°ë½ì²˜ê°€ 한 세트 ìžˆê³ , 업무용으로 ë˜ í•œ 세트가 있는 경우 ì¼ì–´ë‚©ë‹ˆë‹¤. ê³„ì • ì´ë¦„ì€ ë³´í†µ -ê³ ìœ í•©ë‹ˆë‹¤. ì´ ë‘˜ì€ í•¨ê»˜ 사용ë˜ì–´ ì—°ë½ì²˜ ì œê³µìžì™€ 외부 서비스 사ì´ì˜ íŠ¹ì • ë°ì´í„° + ê³„ì • ìœ í˜•ì€ ê³ ìœ í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. 한 ì‚¬ëžŒì˜ ì‚¬ìš©ìžê°€ 여러 ê°œì˜ Google 주소ë¡ì„ êµ¬ì„±í• ìˆ˜ ìžˆê³ +ê·¸ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ë‹¤ìš´ë¡œë“œí• ìˆ˜ 있습니다. ì´ëŸ° ì¼ì€ 사용ìžì—게 +ê°œì¸ìš© ê³„ì • ì´ë¦„ì— ëŒ€í•œ ê°œì¸ìš© ì—°ë½ì²˜ê°€ 한 세트 ìžˆê³ , 업무용으로 ë˜ í•œ 세트가 있는 경우 ì¼ì–´ë‚©ë‹ˆë‹¤. ê³„ì • ì´ë¦„ì€ ë³´í†µ +ê³ ìœ í•©ë‹ˆë‹¤. ì´ ë‘˜ì€ í•¨ê»˜ 사용ë˜ì–´ ì—°ë½ì²˜ ì œê³µìžì™€ 외부 서비스 사ì´ì˜ íŠ¹ì • ë°ì´í„° íë¦„ì„ ì‹ë³„합니다. </p> <p> - ì„œë¹„ìŠ¤ì˜ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ì „ì†¡í•˜ë ¤ë©´, ë‚˜ë¦„ì˜ -ë™ê¸°í™” 어댑터를 작성해야 합니다. ì´ ë‚´ìš©ì€ + ì„œë¹„ìŠ¤ì˜ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ì „ì†¡í•˜ë ¤ë©´, ë‚˜ë¦„ì˜ +ë™ê¸°í™” 어댑터를 작성해야 합니다. ì´ ë‚´ìš©ì€ <a href="#SyncAdapters">ì—°ë½ì²˜ ì œê³µìž ë™ê¸°í™” 어댑터</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p> - 그림 4는 ì—°ë½ì²˜ ì œê³µìžê°€ ì‚¬ëžŒì— ëŒ€í•œ ë°ì´í„° íë¦„ì— + 그림 4는 ì—°ë½ì²˜ ì œê³µìžê°€ ì‚¬ëžŒì— ëŒ€í•œ ë°ì´í„° íë¦„ì— ì–´ë–»ê²Œ 들어맞는지 나타낸 것입니다. "ë™ê¸°í™” 어댑터"ë¼ê³ í‘œì‹œëœ ìƒìžì—서, ê° ì–´ëŒ‘í„°ì—는 ê³„ì • ìœ í˜•ì— ë”°ë¼ ë ˆì´ë¸”ì´ ë¶™ì–´ 있습니다. </p> <img src="{@docRoot}images/providers/ContactsDataFlow.png" alt="Flow of data about people" height="252" id="figure5" /> @@ -556,67 +556,67 @@ Google ê³„ì •ê³¼ ê°™ê³ , ì´ëŠ” ê³„ì • ì´ë¦„으로 ì´ë©”ì¼ ì£¼ì†Œë¥¼ ì‚¬ìš©í• </p> <h2 id="Permissions">필수 권한</h2> <p> - ì—°ë½ì²˜ ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ê³ ìž í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ë‹¤ìŒ ê¶Œí•œì„ + ì—°ë½ì²˜ ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ê³ ìž í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ë‹¤ìŒ ê¶Œí•œì„ ìš”ì²í•´ì•¼ 합니다. </p> <dl> <dt>하나 ì´ìƒì˜ í…Œì´ë¸”ì— ëŒ€í•œ ì½ê¸° 액세스</dt> <dd> - {@link android.Manifest.permission#READ_CONTACTS}, -<code>AndroidManifest.xml</code>ì—서 + {@link android.Manifest.permission#READ_CONTACTS}, +<code>AndroidManifest.xml</code>ì—서 <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"> - <uses-permission></a></code> 요소와 함께 + <uses-permission></a></code> 요소와 함께 <code><uses-permission android:name="android.permission.READ_CONTACTS"></code>로 ì§€ì •ëœ ê²ƒ. </dd> <dt>하나 ì´ìƒì˜ í…Œì´ë¸”ì— ëŒ€í•œ 쓰기 액세스</dt> <dd> - {@link android.Manifest.permission#WRITE_CONTACTS}, -<code>AndroidManifest.xml</code>ì—서 + {@link android.Manifest.permission#WRITE_CONTACTS}, +<code>AndroidManifest.xml</code>ì—서 <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"> - <uses-permission></a></code> 요소와 함께 + <uses-permission></a></code> 요소와 함께 <code><uses-permission android:name="android.permission.WRITE_CONTACTS"></code>로 ì§€ì •ëœ ê²ƒ. </dd> </dl> <p> - ì´ë“¤ ê¶Œí•œì€ ì‚¬ìš©ìž í”„ë¡œí•„ ë°ì´í„°ë¡œ 확대ë˜ì§€ 않습니다. ì‚¬ìš©ìž í”„ë¡œí•„ê³¼ -필수 ê¶Œí•œì€ + ì´ë“¤ ê¶Œí•œì€ ì‚¬ìš©ìž í”„ë¡œí•„ ë°ì´í„°ë¡œ 확대ë˜ì§€ 않습니다. ì‚¬ìš©ìž í”„ë¡œí•„ê³¼ +필수 ê¶Œí•œì€ ë‹¤ìŒ ì„¹ì…˜ì¸ <a href="#UserProfile">ì‚¬ìš©ìž í”„ë¡œí•„</a>ì—서 ë…¼ì˜í•©ë‹ˆë‹¤. </p> <p> - 사용ìžì˜ ì—°ë½ì²˜ ë°ì´í„°ëŠ” 중요한 ê°œì¸ ì •ë³´ë¼ëŠ” ì‚¬ì‹¤ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. 사용ìžëŠ” ìžì‹ ì˜ + 사용ìžì˜ ì—°ë½ì²˜ ë°ì´í„°ëŠ” 중요한 ê°œì¸ ì •ë³´ë¼ëŠ” ì‚¬ì‹¤ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. 사용ìžëŠ” ìžì‹ ì˜ ê°œì¸ì •보보호를 중요하게 ìƒê°í•˜ê³ ì‹ ê²½ 쓰기 ë•Œë¬¸ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ìžì‹ ì´ë‚˜ ìžì‹ ì˜ ì—°ë½ì²˜ì— 관한 ì •ë³´ë¥¼ 수집하는 ê²ƒì„ ë°”ë¼ì§€ 않습니다. - 사용ìžì˜ ì—°ë½ì²˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ê¶Œí•œì´ í•„ìš”í•œ ì´ìœ ê°€ 분명하지 않으면 ì—¬ëŸ¬ë¶„ì˜ + 사용ìžì˜ ì—°ë½ì²˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ê¶Œí•œì´ í•„ìš”í•œ ì´ìœ ê°€ 분명하지 않으면 ì—¬ëŸ¬ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë‚®ì€ ìˆœìœ„ë¥¼ 매기거나 설치를 ê±°ë¶€í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> <h2 id="UserProfile">ì‚¬ìš©ìž í”„ë¡œí•„</h2> <p> - {@link android.provider.ContactsContract.Contacts} í…Œì´ë¸”ì— ìžˆëŠ” 한 ê°œì˜ í–‰ì—는 ê¸°ê¸°ì˜ ì‚¬ìš©ìžì— 대한 프로필 -ë°ì´í„°ê°€ 담겨 있습니다. ì´ ë°ì´í„°ëŠ” 사용ìžì˜ ì—°ë½ì²˜ 중 하나ë¼ê¸°ë³´ë‹¤ëŠ” ê¸°ê¸°ì˜ <code>user</code>를 -설명하는 것입니다. 프로필 ì—°ë½ì²˜ í–‰ì€ + {@link android.provider.ContactsContract.Contacts} í…Œì´ë¸”ì— ìžˆëŠ” 한 ê°œì˜ í–‰ì—는 ê¸°ê¸°ì˜ ì‚¬ìš©ìžì— 대한 프로필 +ë°ì´í„°ê°€ 담겨 있습니다. ì´ ë°ì´í„°ëŠ” 사용ìžì˜ ì—°ë½ì²˜ 중 하나ë¼ê¸°ë³´ë‹¤ëŠ” ê¸°ê¸°ì˜ <code>user</code>를 +설명하는 것입니다. 프로필 ì—°ë½ì²˜ í–‰ì€ í”„ë¡œí•„ì„ ì‚¬ìš©í•˜ëŠ” ê° ì‹œìŠ¤í…œì— ëŒ€í•œ ì›ì‹œ ì—°ë½ì²˜ í–‰ì— ì—°ê²°ë˜ì–´ 있습니다. - ê° í”„ë¡œí•„ ì›ì‹œ ì—°ë½ì²˜ í–‰ì—는 여러 ê°œì˜ ë°ì´í„° í–‰ì´ ìžˆì„ ìˆ˜ 있습니다. ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ê¸° 위한 ìƒìˆ˜ëŠ” + ê° í”„ë¡œí•„ ì›ì‹œ ì—°ë½ì²˜ í–‰ì—는 여러 ê°œì˜ ë°ì´í„° í–‰ì´ ìžˆì„ ìˆ˜ 있습니다. ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ê¸° 위한 ìƒìˆ˜ëŠ” {@link android.provider.ContactsContract.Profile} í´ëž˜ìФì—서 ì´ìš©í• 수 있습니다. </p> <p> - ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ 특수 ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. ì½ê¸°ì™€ ì“°ê¸°ì— í•„ìš”í•œ + ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ 특수 ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. ì½ê¸°ì™€ ì“°ê¸°ì— í•„ìš”í•œ {@link android.Manifest.permission#READ_CONTACTS}와 -{@link android.Manifest.permission#WRITE_CONTACTS} 권한 외ì—ë„, -ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ê°ê° ì½ê¸°ì™€ 쓰기 액세스를 위한{@code android.Manifest.permission#READ_PROFILE}ê³¼ -{@code android.Manifest.permission#WRITE_PROFILE} ê¶Œí•œì´ +{@link android.Manifest.permission#WRITE_CONTACTS} 권한 외ì—ë„, +ì‚¬ìš©ìž í”„ë¡œí•„ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ê°ê° ì½ê¸°ì™€ 쓰기 액세스를 위한{@code android.Manifest.permission#READ_PROFILE}ê³¼ +{@code android.Manifest.permission#WRITE_PROFILE} ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. </p> <p> - 사용ìžì˜ í”„ë¡œí•„ì€ ì¤‘ìš”í•œ ì •ë³´ë¡œ 간주해야 한다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. -{@code android.Manifest.permission#READ_PROFILE}ê¶Œí•œì„ ì‚¬ìš©í•˜ë©´ 개발ìžê°€ 기기 사용ìžì˜ -ê°œì¸ ì‹ë³„ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ 설명ì—서 + 사용ìžì˜ í”„ë¡œí•„ì€ ì¤‘ìš”í•œ ì •ë³´ë¡œ 간주해야 한다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. +{@code android.Manifest.permission#READ_PROFILE}ê¶Œí•œì„ ì‚¬ìš©í•˜ë©´ 개발ìžê°€ 기기 사용ìžì˜ +ê°œì¸ ì‹ë³„ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ 설명ì—서 사용ìžì—게 왜 ì—¬ëŸ¬ë¶„ì´ ì‚¬ìš©ìž í”„ë¡œí•„ ê¶Œí•œì„ í•„ìš”ë¡œ 하는지 ë°í˜€ë‘어야 합니다. </p> <p> ì‚¬ìš©ìž í”„ë¡œí•„ì´ í¬í•¨ëœ ì—°ë½ì²˜ í–‰ì„ ê²€ìƒ‰í•˜ë ¤ë©´, {@link android.content.ContentResolver#query(Uri,String[], String, String[], String) ContentResolver.query()}를 호출합니다. 콘í…ì¸ URI 를 -{@link android.provider.ContactsContract.Profile#CONTENT_URI}로 ì„¤ì •í•˜ê³ -ì„ íƒ ê¸°ì¤€ì€ ì•„ë¬´ê²ƒë„ ì œê³µí•˜ì§€ 마ì‹ì‹œì˜¤. ì´ ì½˜í…ì¸ URI는 ì›ì‹œ ì—°ë½ì²˜ ë˜ëŠ” í”„ë¡œí•„ì— ëŒ€í•œ ë°ì´í„°ë¥¼ 검색하기 위한 +{@link android.provider.ContactsContract.Profile#CONTENT_URI}로 ì„¤ì •í•˜ê³ +ì„ íƒ ê¸°ì¤€ì€ ì•„ë¬´ê²ƒë„ ì œê³µí•˜ì§€ 마ì‹ì‹œì˜¤. ì´ ì½˜í…ì¸ URI는 ì›ì‹œ ì—°ë½ì²˜ ë˜ëŠ” í”„ë¡œí•„ì— ëŒ€í•œ ë°ì´í„°ë¥¼ 검색하기 위한 기본 URIë¡œë„ ì“¸ 수 있습니다. 예를 들어, ì´ ì½”ë“œ ì¡°ê°ì€ í”„ë¡œí•„ì— ëŒ€í•œ ë°ì´í„°ë¥¼ 검색합니다. </p> <pre> @@ -639,18 +639,18 @@ mProfileCursor = null); </pre> <p class="note"> - <strong>ì°¸ê³ :</strong> 여러 ê°œì˜ ì—°ë½ì²˜ í–‰ì„ ê²€ìƒ‰í•˜ê³ ê·¸ 중 하나가 -ì‚¬ìš©ìž í”„ë¡œí•„ì¸ì§€ íŒë³„í•˜ê³ ìž í•˜ëŠ” 경우, -í–‰ì˜ {@link android.provider.ContactsContract.ContactsColumns#IS_USER_PROFILE} ì—´ì„ í…ŒìŠ¤íŠ¸í•©ë‹ˆë‹¤. ì´ ì—´ì€ + <strong>ì°¸ê³ :</strong> 여러 ê°œì˜ ì—°ë½ì²˜ í–‰ì„ ê²€ìƒ‰í•˜ê³ ê·¸ 중 하나가 +ì‚¬ìš©ìž í”„ë¡œí•„ì¸ì§€ íŒë³„í•˜ê³ ìž í•˜ëŠ” 경우, +í–‰ì˜ {@link android.provider.ContactsContract.ContactsColumns#IS_USER_PROFILE} ì—´ì„ í…ŒìŠ¤íŠ¸í•©ë‹ˆë‹¤. ì´ ì—´ì€ í•´ë‹¹ ì—°ë½ì²˜ê°€ ì‚¬ìš©ìž í”„ë¡œí•„ì´ë©´ "1"로 ì„¤ì •ë©ë‹ˆë‹¤. </p> <h2 id="ContactsProviderMetadata">ì—°ë½ì²˜ ì œê³µìž ë©”íƒ€ë°ì´í„°</h2> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” 리í¬ì§€í† 리ì—서 ì—°ë½ì²˜ ë°ì´í„° ìƒíƒœë¥¼ -ì¶”ì 하는 ë°ì´í„°ë¥¼ 관리합니다. ì´ ë¦¬í¬ì§€í† 리 ê´€ë ¨ ë°ì´í„°ëŠ” + ì—°ë½ì²˜ ì œê³µìžëŠ” 리í¬ì§€í† 리ì—서 ì—°ë½ì²˜ ë°ì´í„° ìƒíƒœë¥¼ +ì¶”ì 하는 ë°ì´í„°ë¥¼ 관리합니다. ì´ ë¦¬í¬ì§€í† 리 ê´€ë ¨ ë°ì´í„°ëŠ” ì›ì‹œ ì—°ë½ì²˜, ë°ì´í„° ë° ì—°ë½ì²˜ í…Œì´ë¸” í–‰, -{@link android.provider.ContactsContract.Settings} í…Œì´ë¸” ë° -{@link android.provider.ContactsContract.SyncState} í…Œì´ë¸” ë“±ì˜ ì—¬ëŸ¬ ìž¥ì†Œì— ì €ìž¥ë©ë‹ˆë‹¤. ë‹¤ìŒ í‘œëŠ” ê° ë©”íƒ€ë°ì´í„° ì¡°ê°ì´ 미치는 +{@link android.provider.ContactsContract.Settings} í…Œì´ë¸” ë° +{@link android.provider.ContactsContract.SyncState} í…Œì´ë¸” ë“±ì˜ ì—¬ëŸ¬ ìž¥ì†Œì— ì €ìž¥ë©ë‹ˆë‹¤. ë‹¤ìŒ í‘œëŠ” ê° ë©”íƒ€ë°ì´í„° ì¡°ê°ì´ 미치는 ì˜í–¥ì„ 나타낸 것입니다. </p> <p class="table-caption" id="table3"> @@ -667,14 +667,14 @@ mProfileCursor = <td rowspan="2">{@link android.provider.ContactsContract.SyncColumns#DIRTY}</td> <td>"0" - 마지막 ë™ê¸°í™” ì´í›„로 변경ë˜ì§€ 않았습니다.</td> <td rowspan="2"> - 기기ì—서 변경ë˜ì—ˆê³ 서버로 다시 ë™ê¸°í™”ë˜ì–´ì•¼ 하는 ì›ì‹œ ë°ì´í„°ë¥¼ -표시합니다. ì´ ê°’ì€ Android ì• í”Œë¦¬ì¼€ì´ì…˜ì´ í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë©´ ì—°ë½ì²˜ ì œê³µìžê°€ + 기기ì—서 변경ë˜ì—ˆê³ 서버로 다시 ë™ê¸°í™”ë˜ì–´ì•¼ 하는 ì›ì‹œ ë°ì´í„°ë¥¼ +표시합니다. ì´ ê°’ì€ Android ì• í”Œë¦¬ì¼€ì´ì…˜ì´ í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë©´ ì—°ë½ì²˜ ì œê³µìžê°€ ìžë™ìœ¼ë¡œ ì„¤ì •í•©ë‹ˆë‹¤. <p> - ì›ì‹œ ì—°ë½ì²˜ë‚˜ ë°ì´í„° í…Œì´ë¸”ì„ ìˆ˜ì •í•˜ëŠ” ë™ê¸°í™” 어댑터는 -ì–¸ì œë‚˜ 문ìžì—´ {@link android.provider.ContactsContract#CALLER_IS_SYNCADAPTER}를 + ì›ì‹œ ì—°ë½ì²˜ë‚˜ ë°ì´í„° í…Œì´ë¸”ì„ ìˆ˜ì •í•˜ëŠ” ë™ê¸°í™” 어댑터는 +ì–¸ì œë‚˜ 문ìžì—´ {@link android.provider.ContactsContract#CALLER_IS_SYNCADAPTER}를 ìžì‹ ì´ ì‚¬ìš©í•˜ëŠ” 콘í…ì¸ URIì— ì¶”ê°€í•´ì•¼ 합니다. ì´ë ‡ê²Œ 하면 ì œê³µìžê°€ í–‰ì„ ë³€ê²½(dirty)으로 표시하지 못하게 방지합니다. - ê·¸ë ‡ì§€ 않으면, ë™ê¸°í™” 어댑터 ìˆ˜ì •ì´ ë¡œì»¬ ìˆ˜ì •ìœ¼ë¡œ 나타나며 + ê·¸ë ‡ì§€ 않으면, ë™ê¸°í™” 어댑터 ìˆ˜ì •ì´ ë¡œì»¬ ìˆ˜ì •ìœ¼ë¡œ 나타나며 서버가 ìˆ˜ì •ì˜ ê·¼ì›ì´ì—ˆë‹¤ 하ë”ë¼ë„ ì´ ë‚´ìš©ì´ ë‹¤ì‹œ 서버로 ì „ì†¡ë©ë‹ˆë‹¤. </p> </td> @@ -687,7 +687,7 @@ mProfileCursor = <td>{@link android.provider.ContactsContract.SyncColumns#VERSION}</td> <td>ì´ í–‰ì˜ ë²„ì „ 번호입니다.</td> <td> - ì—°ë½ì²˜ ì œê³µìžëŠ” í–‰ì´ë‚˜ ê´€ë ¨ ë°ì´í„°ê°€ 변경ë 때마다 ì´ ê°’ì„ ìžë™ìœ¼ë¡œ + ì—°ë½ì²˜ ì œê³µìžëŠ” í–‰ì´ë‚˜ ê´€ë ¨ ë°ì´í„°ê°€ 변경ë 때마다 ì´ ê°’ì„ ìžë™ìœ¼ë¡œ ì¦ê°€ì‹œí‚µë‹ˆë‹¤. </td> </tr> @@ -696,7 +696,7 @@ mProfileCursor = <td>{@link android.provider.ContactsContract.DataColumns#DATA_VERSION}</td> <td>ì´ í–‰ì˜ ë²„ì „ 번호입니다.</td> <td> - ì—°ë½ì²˜ ì œê³µìžëŠ” ë°ì´í„° í–‰ì´ ë³€ê²½ë 때마다 ì´ ê°’ì„ ìžë™ìœ¼ë¡œ + ì—°ë½ì²˜ ì œê³µìžëŠ” ë°ì´í„° í–‰ì´ ë³€ê²½ë 때마다 ì´ ê°’ì„ ìžë™ìœ¼ë¡œ ì¦ê°€ì‹œí‚µë‹ˆë‹¤. </td> </tr> @@ -704,33 +704,33 @@ mProfileCursor = <td>{@link android.provider.ContactsContract.RawContacts}</td> <td>{@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}</td> <td> - ì´ ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìžì‹ ì´ ìƒì„±ëœ ê³„ì •ì— ëŒ€í•´ ê³ ìœ í•˜ê²Œ ì‹ë³„하는 + ì´ ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìžì‹ ì´ ìƒì„±ëœ ê³„ì •ì— ëŒ€í•´ ê³ ìœ í•˜ê²Œ ì‹ë³„하는 문ìžì—´ 값입니다. </td> <td> - ë™ê¸°í™” 어댑터가 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìƒì„±í•˜ë©´, ì´ ì—´ì´ -해당 ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì„œë²„ì˜ ê³ ìœ ID로 ì„¤ì •ë˜ì–´ì•¼ 합니다. Android ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìƒì„±í•˜ë©´, -ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ì—´ì„ ë¹ˆ 채로 ë‘어야 합니다. ì´ê²ƒì€ ë™ê¸°í™” ì–´ëŒ‘í„°ì— -ì„œë²„ì— ìƒˆ ì›ì‹œ ë°ì´í„°ë¥¼ ìƒì„±í•´ì•¼ í•œë‹¤ê³ ì‹ í˜¸í•˜ê³ , + ë™ê¸°í™” 어댑터가 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìƒì„±í•˜ë©´, ì´ ì—´ì´ +해당 ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì„œë²„ì˜ ê³ ìœ ID로 ì„¤ì •ë˜ì–´ì•¼ 합니다. Android ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìƒì„±í•˜ë©´, +ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ì—´ì„ ë¹ˆ 채로 ë‘어야 합니다. ì´ê²ƒì€ ë™ê¸°í™” ì–´ëŒ‘í„°ì— +ì„œë²„ì— ìƒˆ ì›ì‹œ ë°ì´í„°ë¥¼ ìƒì„±í•´ì•¼ í•œë‹¤ê³ ì‹ í˜¸í•˜ê³ , {@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}ì— ëŒ€í•œ ê°’ì„ ê°€ì ¸ì˜¤ë¼ê³ 알립니다. <p> - 특히, 소스 ID는 ê° ê³„ì • ìœ í˜•ì— ëŒ€í•´ <strong>ê³ ìœ </strong>해야 í•˜ê³ + 특히, 소스 ID는 ê° ê³„ì • ìœ í˜•ì— ëŒ€í•´ <strong>ê³ ìœ </strong>해야 í•˜ê³ ë™ê¸°í™” ì „ì²´ì—서 ì•ˆì •ì ì´ì–´ì•¼ 합니다. </p> <ul> <li> - ê³ ìœ : í•˜ë‚˜ì˜ ê³„ì •ì— ëŒ€í•œ ê° ì›ì‹œ ì—°ë½ì²˜ì—는 ë‚˜ë¦„ì˜ ì†ŒìŠ¤ IDê°€ 있어야 합니다. 개발ìžê°€ + ê³ ìœ : í•˜ë‚˜ì˜ ê³„ì •ì— ëŒ€í•œ ê° ì›ì‹œ ì—°ë½ì²˜ì—는 ë‚˜ë¦„ì˜ ì†ŒìŠ¤ IDê°€ 있어야 합니다. 개발ìžê°€ ì´ê²ƒì„ ê°•ì œ ì 용하지 않으면 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë¬¸ì œë¥¼ ìœ ë°œí•˜ê²Œ ë©ë‹ˆë‹¤. - ê°™ì€ ê³„ì • <em>ìœ í˜•</em>ì— ëŒ€í•œ ë‘ ê°œì˜ ì›ì‹œ ì—°ë½ì²˜ëŠ” 소스 IDê°€ -ê°™ì„ ìˆ˜ 있다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 예를 들어, -{@code emily.dickinson@gmail.com} ê³„ì •ì— ëŒ€í•œ ì›ì‹œ ì—°ë½ì²˜ "Thomas Higginson"ì€ -{@code emilyd@gmail.com} ê³„ì •ì— ëŒ€í•œ + ê°™ì€ ê³„ì • <em>ìœ í˜•</em>ì— ëŒ€í•œ ë‘ ê°œì˜ ì›ì‹œ ì—°ë½ì²˜ëŠ” 소스 IDê°€ +ê°™ì„ ìˆ˜ 있다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 예를 들어, +{@code emily.dickinson@gmail.com} ê³„ì •ì— ëŒ€í•œ ì›ì‹œ ì—°ë½ì²˜ "Thomas Higginson"ì€ +{@code emilyd@gmail.com} ê³„ì •ì— ëŒ€í•œ ì›ì‹œ ì—°ë½ì²˜ "Thomas Higginson"ê³¼ 소스 IDê°€ ê°™ì„ ìˆ˜ 있습니다. </li> <li> - ì•ˆì •ì : 소스 ID는 ì›ì‹œ ì—°ë½ì²˜ì— 대한 온ë¼ì¸ ì„œë¹„ìŠ¤ì˜ ë°ì´í„° 중 ì˜êµ¬ì ì¸ -부분입니다. 예를 들어, 사용ìžê°€ 앱 ì„¤ì •ì—서 ì—°ë½ì²˜ ì €ìž¥ì†Œë¥¼ ì‚ì œí•˜ê³ ë‹¤ì‹œ ë™ê¸°í™”하면 -ë³µì›ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ 소스 ID는 ì „ê³¼ 같아야 + ì•ˆì •ì : 소스 ID는 ì›ì‹œ ì—°ë½ì²˜ì— 대한 온ë¼ì¸ ì„œë¹„ìŠ¤ì˜ ë°ì´í„° 중 ì˜êµ¬ì ì¸ +부분입니다. 예를 들어, 사용ìžê°€ 앱 ì„¤ì •ì—서 ì—°ë½ì²˜ ì €ìž¥ì†Œë¥¼ ì‚ì œí•˜ê³ ë‹¤ì‹œ ë™ê¸°í™”하면 +ë³µì›ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ 소스 ID는 ì „ê³¼ 같아야 합니다. 개발ìžê°€ ì´ê²ƒì„ ê°•ì œ ì 용하지 않으면 바로 가기가 ë” ì´ìƒ ìž‘ë™í•˜ì§€ 않습니다. </li> @@ -742,7 +742,7 @@ mProfileCursor = <td rowspan="2">{@link android.provider.ContactsContract.GroupsColumns#GROUP_VISIBLE}</td> <td>"0" - ì´ ê·¸ë£¹ì˜ ì—°ë½ì²˜ëŠ” Android ì• í”Œë¦¬ì¼€ì´ì…˜ UIì— í‘œì‹œë˜ì§€ 않아야 합니다.</td> <td> - ì´ ì—´ì€ ì‚¬ìš©ìžê°€ íŠ¹ì • ê·¸ë£¹ì— ì—°ë½ì²˜ë¥¼ 숨길 수 있게 해주는 ì„œë²„ì™€ì˜ + ì´ ì—´ì€ ì‚¬ìš©ìžê°€ íŠ¹ì • ê·¸ë£¹ì— ì—°ë½ì²˜ë¥¼ 숨길 수 있게 해주는 ì„œë²„ì™€ì˜ í˜¸í™˜ì„±ì„ ìœ„í•œ 것입니다. </td> </tr> @@ -754,22 +754,22 @@ mProfileCursor = <td rowspan="2"> {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE}</td> <td> - "0" - ì´ ê³„ì •ê³¼ ê³„ì • ìœ í˜•ì˜ ê²½ìš°, ê·¸ë£¹ì— ì†í•˜ì§€ 않는 ì—°ë½ì²˜ëŠ” Android ì• í”Œë¦¬ì¼€ì´ì…˜ UIì— + "0" - ì´ ê³„ì •ê³¼ ê³„ì • ìœ í˜•ì˜ ê²½ìš°, ê·¸ë£¹ì— ì†í•˜ì§€ 않는 ì—°ë½ì²˜ëŠ” Android ì• í”Œë¦¬ì¼€ì´ì…˜ UIì— í‘œì‹œë˜ì§€ 않습니다. </td> <td rowspan="2"> - 기본ì 으로, ì—°ë½ì²˜ì— ê·¸ë£¹ì— ì†í•œ ì›ì‹œ ë°ì´í„°ê°€ í•˜ë‚˜ë„ ì—†ëŠ” 경우 ì´ëŠ” 표시ë˜ì§€ 않습니다(ì›ì‹œ ì—°ë½ì²˜ì˜ 그룹 구성ì›ì€ -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 -하나 ì´ìƒì˜ {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership} 행으로 + 기본ì 으로, ì—°ë½ì²˜ì— ê·¸ë£¹ì— ì†í•œ ì›ì‹œ ë°ì´í„°ê°€ í•˜ë‚˜ë„ ì—†ëŠ” 경우 ì´ëŠ” 표시ë˜ì§€ 않습니다(ì›ì‹œ ì—°ë½ì²˜ì˜ 그룹 구성ì›ì€ +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 +하나 ì´ìƒì˜ {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership} 행으로 표시ë©ë‹ˆë‹¤). - ê³„ì • ìœ í˜•ê³¼ ê³„ì •ì— ëŒ€í•œ {@link android.provider.ContactsContract.Settings} í…Œì´ë¸” í–‰ì—서 + ê³„ì • ìœ í˜•ê³¼ ê³„ì •ì— ëŒ€í•œ {@link android.provider.ContactsContract.Settings} í…Œì´ë¸” í–‰ì—서 ì´ í”Œëž˜ê·¸ë¥¼ ì„¤ì •í•˜ë©´ ê·¸ë£¹ì´ ì—†ëŠ” ì—°ë½ì²˜ê°€ 표시ë˜ë„ë¡ ê°•ì œí• ìˆ˜ 있습니다. ì´ í”Œëž˜ê·¸ì˜ ìš©ë„ ì¤‘ 하나는 ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì§€ 않는 서버로부터 ê°€ì ¸ì˜¨ ì—°ë½ì²˜ë¥¼ 표시하는 것입니다. </td> </tr> <tr> <td> - "1" - ì´ ê³„ì •ê³¼ ê³„ì • ìœ í˜•ì˜ ê²½ìš°, ê·¸ë£¹ì— ì†í•˜ì§€ 않는 ì—°ë½ì²˜ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ UIì— + "1" - ì´ ê³„ì •ê³¼ ê³„ì • ìœ í˜•ì˜ ê²½ìš°, ê·¸ë£¹ì— ì†í•˜ì§€ 않는 ì—°ë½ì²˜ê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ UIì— í‘œì‹œë©ë‹ˆë‹¤. </td> @@ -781,14 +781,14 @@ mProfileCursor = ì´ í…Œì´ë¸”ì„ ì‚¬ìš©í•˜ì—¬ ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ë©”íƒ€ë°ì´í„°ë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. </td> <td> - ì´ í…Œì´ë¸”ì„ ì‚¬ìš©í•˜ë©´ ë™ê¸°í™” ìƒíƒœì™€ 기타 ë™ê¸°í™” ê´€ë ¨ ë°ì´í„°ë¥¼ ê¸°ê¸°ì— ì˜êµ¬ì 으로 + ì´ í…Œì´ë¸”ì„ ì‚¬ìš©í•˜ë©´ ë™ê¸°í™” ìƒíƒœì™€ 기타 ë™ê¸°í™” ê´€ë ¨ ë°ì´í„°ë¥¼ ê¸°ê¸°ì— ì˜êµ¬ì 으로 ì €ìž¥í• ìˆ˜ 있습니다. </td> </tr> </table> <h2 id="Access">ì—°ë½ì²˜ ì œê³µìž ì•¡ì„¸ìŠ¤</h2> <p> - ì´ ì„¹ì…˜ì€ ì—°ë½ì²˜ ì œê³µìžì—서 ê°€ì ¸ì˜¨ ë°ì´í„°ì— 액세스하는 ë²•ì— ëŒ€í•œ ì§€ì¹¨ì„ ì œê³µí•˜ë©°, + ì´ ì„¹ì…˜ì€ ì—°ë½ì²˜ ì œê³µìžì—서 ê°€ì ¸ì˜¨ ë°ì´í„°ì— 액세스하는 ë²•ì— ëŒ€í•œ ì§€ì¹¨ì„ ì œê³µí•˜ë©°, ìš”ì ì€ ë‹¤ìŒê³¼ 같습니다. </p> <ul> @@ -806,49 +806,49 @@ mProfileCursor = </li> </ul> <p> - ë™ê¸°í™” 어댑터ì—서 ìˆ˜ì •í•˜ëŠ” ë°©ë²•ì€ + ë™ê¸°í™” 어댑터ì—서 ìˆ˜ì •í•˜ëŠ” ë°©ë²•ì€ <a href="#SyncAdapters">ì—°ë½ì²˜ ì œê³µìž ë™ê¸°í™” 어댑터</a> 섹션ì—ë„ ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <h3 id="Entities">엔티티 쿼리</h3> <p> - ì—°ë½ì²˜ ì œê³µìž í…Œì´ë¸”ì€ ê³„ì¸µì„ ì‚¬ìš©í•˜ì—¬ ì¡°ì§í™”ë˜ì–´ 있으므로, -행과 ê·¸ í–‰ì— ì—°ê²°ëœ ëª¨ë“ "하위" í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ê²ƒì´ ìœ ìš©í• ë•Œê°€ 많습니다. 예를 들어, -ì–´ë–¤ ê°œì¸ì˜ ëª¨ë“ ì •ë³´ë¥¼ í‘œì‹œí•˜ë ¤ë©´ -í•˜ë‚˜ì˜ {@link android.provider.ContactsContract.Contacts} í–‰ì— ëŒ€í•œ ëª¨ë“ -{@link android.provider.ContactsContract.RawContacts} í–‰ì„ ê²€ìƒ‰í•˜ê±°ë‚˜ í•˜ë‚˜ì˜ -{@link android.provider.ContactsContract.RawContacts} í–‰ì— ëŒ€í•œ ëª¨ë“ -{@link android.provider.ContactsContract.CommonDataKinds.Email} í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ë¥¼ ìš©ì´í•˜ê²Œ 하기 위해, -ì—°ë½ì²˜ ì œê³µìžëŠ” í…Œì´ë¸” 사ì´ë¥¼ 연결하는 ë°ì´í„°ë² ì´ìФ ì—í• ì„ í•˜ëŠ” <strong>엔티티</strong> 구조를 + ì—°ë½ì²˜ ì œê³µìž í…Œì´ë¸”ì€ ê³„ì¸µì„ ì‚¬ìš©í•˜ì—¬ ì¡°ì§í™”ë˜ì–´ 있으므로, +행과 ê·¸ í–‰ì— ì—°ê²°ëœ ëª¨ë“ "하위" í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ê²ƒì´ ìœ ìš©í• ë•Œê°€ 많습니다. 예를 들어, +ì–´ë–¤ ê°œì¸ì˜ ëª¨ë“ ì •ë³´ë¥¼ í‘œì‹œí•˜ë ¤ë©´ +í•˜ë‚˜ì˜ {@link android.provider.ContactsContract.Contacts} í–‰ì— ëŒ€í•œ ëª¨ë“ +{@link android.provider.ContactsContract.RawContacts} í–‰ì„ ê²€ìƒ‰í•˜ê±°ë‚˜ í•˜ë‚˜ì˜ +{@link android.provider.ContactsContract.RawContacts} í–‰ì— ëŒ€í•œ ëª¨ë“ +{@link android.provider.ContactsContract.CommonDataKinds.Email} í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ë¥¼ ìš©ì´í•˜ê²Œ 하기 위해, +ì—°ë½ì²˜ ì œê³µìžëŠ” í…Œì´ë¸” 사ì´ë¥¼ 연결하는 ë°ì´í„°ë² ì´ìФ ì—í• ì„ í•˜ëŠ” <strong>엔티티</strong> 구조를 ì œê³µí•©ë‹ˆë‹¤. </p> <p> í•˜ë‚˜ì˜ ì—”í‹°í‹°ëŠ” 마치 ìƒìœ„ í…Œì´ë¸”ê³¼ ê·¸ 하위 í…Œì´ë¸”ì—서 ê°€ì ¸ì˜¨ ì„ íƒëœ 몇 ê°œì˜ ì—´ë¡œ ì´ë£¨ì–´ì§„ í…Œì´ë¸”ê³¼ 같습니다. - 엔티티를 쿼리하는 경우, 해당 엔티티ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì—´ì„ ê¸°ë°˜ìœ¼ë¡œ 하여 예측과 검색 -ê¸°ì¤€ì„ ì œê³µí•©ë‹ˆë‹¤. ê·¸ ê²°ê³¼ë„ ë„ì¶œë˜ëŠ” ê²ƒì´ {@link android.database.Cursor}ì´ë©°, -ì—¬ê¸°ì— ê²€ìƒ‰ëœ ê° í•˜ìœ„ í…Œì´ë¸”ì— ëŒ€í•´ í–‰ì´ í•˜ë‚˜ì”© 들어있습니다. 예를 들어 ì—°ë½ì²˜ ì´ë¦„ì— ëŒ€í•´ -{@link android.provider.ContactsContract.Contacts.Entity}를 ì¿¼ë¦¬í•˜ê³ -ê·¸ ì´ë¦„ì— ëŒ€í•œ ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ëª¨ë“ {@link android.provider.ContactsContract.CommonDataKinds.Email} í–‰ì„ ì¿¼ë¦¬í•˜ë©´ -{@link android.database.Cursor}를 ëŒë ¤ë°›ê²Œ ë˜ë©° ì´ ì•ˆì— + 엔티티를 쿼리하는 경우, 해당 엔티티ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì—´ì„ ê¸°ë°˜ìœ¼ë¡œ 하여 예측과 검색 +ê¸°ì¤€ì„ ì œê³µí•©ë‹ˆë‹¤. ê·¸ ê²°ê³¼ë„ ë„ì¶œë˜ëŠ” ê²ƒì´ {@link android.database.Cursor}ì´ë©°, +ì—¬ê¸°ì— ê²€ìƒ‰ëœ ê° í•˜ìœ„ í…Œì´ë¸”ì— ëŒ€í•´ í–‰ì´ í•˜ë‚˜ì”© 들어있습니다. 예를 들어 ì—°ë½ì²˜ ì´ë¦„ì— ëŒ€í•´ +{@link android.provider.ContactsContract.Contacts.Entity}를 ì¿¼ë¦¬í•˜ê³ +ê·¸ ì´ë¦„ì— ëŒ€í•œ ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ëª¨ë“ {@link android.provider.ContactsContract.CommonDataKinds.Email} í–‰ì„ ì¿¼ë¦¬í•˜ë©´ +{@link android.database.Cursor}를 ëŒë ¤ë°›ê²Œ ë˜ë©° ì´ ì•ˆì— ê° {@link android.provider.ContactsContract.CommonDataKinds.Email}í–‰ì— ëŒ€í•œ í–‰ì´ í•˜ë‚˜ì”© 들어있습니다. </p> <p> - 엔티티는 쿼리를 단순화합니다. 엔티티를 사용하면 ì—°ë½ì²˜ë‚˜ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ëª¨ë“ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ -í•œêº¼ë²ˆì— ê²€ìƒ‰í• ìˆ˜ 있습니다. 즉 ìš°ì„ ìƒìœ„ í…Œì´ë¸”ì„ ê²€ìƒ‰í•˜ì—¬ ID를 ê°€ì ¸ì˜¤ê³ , 그런 ë‹¤ìŒ -하위 í…Œì´ë¸”ì„ ê·¸ ID로 검색하지 ì•Šì•„ë„ ëœë‹¤ëŠ” 뜻입니다. ë˜í•œ, ì—°ë½ì²˜ ì œê³µìžì—는 ì—”í‹°í‹°ì— ëŒ€í•œ 쿼리를 -í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 처리하므로, ê²€ìƒ‰ëœ ë°ì´í„°ê°€ ë‚´ë¶€ì 으로 ì¼ê´€ì„±ì„ ìœ ì§€í•˜ë„ë¡ + 엔티티는 쿼리를 단순화합니다. 엔티티를 사용하면 ì—°ë½ì²˜ë‚˜ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ëª¨ë“ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ +í•œêº¼ë²ˆì— ê²€ìƒ‰í• ìˆ˜ 있습니다. 즉 ìš°ì„ ìƒìœ„ í…Œì´ë¸”ì„ ê²€ìƒ‰í•˜ì—¬ ID를 ê°€ì ¸ì˜¤ê³ , 그런 ë‹¤ìŒ +하위 í…Œì´ë¸”ì„ ê·¸ ID로 검색하지 ì•Šì•„ë„ ëœë‹¤ëŠ” 뜻입니다. ë˜í•œ, ì—°ë½ì²˜ ì œê³µìžì—는 ì—”í‹°í‹°ì— ëŒ€í•œ 쿼리를 +í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 처리하므로, ê²€ìƒ‰ëœ ë°ì´í„°ê°€ ë‚´ë¶€ì 으로 ì¼ê´€ì„±ì„ ìœ ì§€í•˜ë„ë¡ ë³´ìž¥í•©ë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> í•˜ë‚˜ì˜ ì—”í‹°í‹°ì— ìƒìœ„ ë° í•˜ìœ„ í…Œì´ë¸”ì˜ ëª¨ë“ ì—´ì´ ë“¤ì–´ìžˆì§€ëŠ” ì•Šì€ ê²ƒì´ -보통입니다. ì—”í‹°í‹°ì— ëŒ€í•œ ì—´ ì´ë¦„ ìƒìˆ˜ 목ë¡ì— 없는 ì—´ ì´ë¦„으로 ìž‘ì—…í•˜ë ¤ 시ë„하면, + <strong>ì°¸ê³ :</strong> í•˜ë‚˜ì˜ ì—”í‹°í‹°ì— ìƒìœ„ ë° í•˜ìœ„ í…Œì´ë¸”ì˜ ëª¨ë“ ì—´ì´ ë“¤ì–´ìžˆì§€ëŠ” ì•Šì€ ê²ƒì´ +보통입니다. ì—”í‹°í‹°ì— ëŒ€í•œ ì—´ ì´ë¦„ ìƒìˆ˜ 목ë¡ì— 없는 ì—´ ì´ë¦„으로 ìž‘ì—…í•˜ë ¤ 시ë„하면, {@link java.lang.Exception}ì´ ë°œìƒí•©ë‹ˆë‹¤. </p> <p> - ë‹¤ìŒ ì¡°ê°ì€ í•˜ë‚˜ì˜ ì—°ë½ì²˜ì— 대해 ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. ì´ ì¡°ê°ì€ -ë‘ ê°œì˜ ì•¡í‹°ë¹„í‹°, 즉 "기본"ê³¼ "세부"를 가진 ë” í° ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ìž…니다. 기본 액티비티는 -ì—°ë½ì²˜ í–‰ 목ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 사용ìžê°€ 하나를 ì„ íƒí•˜ë©´, ì´ ì•¡í‹°ë¹„í‹°ê°€ 해당 목ë¡ì˜ ID를 -세부 ì•¡í‹°ë¹„í‹°ì— ì „ì†¡í•©ë‹ˆë‹¤. 세부 액티비티는 {@link android.provider.ContactsContract.Contacts.Entity}를 사용하여 -ì„ íƒëœ ì—°ë½ì²˜ì™€ ì—°ê´€ëœ ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ì—서 + ë‹¤ìŒ ì¡°ê°ì€ í•˜ë‚˜ì˜ ì—°ë½ì²˜ì— 대해 ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ê²€ìƒ‰í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. ì´ ì¡°ê°ì€ +ë‘ ê°œì˜ ì•¡í‹°ë¹„í‹°, 즉 "기본"ê³¼ "세부"를 가진 ë” í° ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ìž…니다. 기본 액티비티는 +ì—°ë½ì²˜ í–‰ 목ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 사용ìžê°€ 하나를 ì„ íƒí•˜ë©´, ì´ ì•¡í‹°ë¹„í‹°ê°€ 해당 목ë¡ì˜ ID를 +세부 ì•¡í‹°ë¹„í‹°ì— ì „ì†¡í•©ë‹ˆë‹¤. 세부 액티비티는 {@link android.provider.ContactsContract.Contacts.Entity}를 사용하여 +ì„ íƒëœ ì—°ë½ì²˜ì™€ ì—°ê´€ëœ ëª¨ë“ ì›ì‹œ ì—°ë½ì²˜ì—서 ëª¨ë“ ë°ì´í„° í–‰ì„ í‘œì‹œí•©ë‹ˆë‹¤. </p> <p> @@ -921,71 +921,71 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { } </pre> <p> - ë¡œë”©ì´ ì™„ë£Œë˜ë©´, {@link android.app.LoaderManager}ê°€ + ë¡œë”©ì´ ì™„ë£Œë˜ë©´, {@link android.app.LoaderManager}ê°€ {@link android.app.LoaderManager.LoaderCallbacks#onLoadFinished(Loader, D) -onLoadFinished()}ì— ëŒ€í•œ ì½œë°±ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œë¡œ ìˆ˜ì‹ ë˜ëŠ” ì¸ìˆ˜ 중 하나가 -{@link android.database.Cursor}로, ì—¬ê¸°ì— ì¿¼ë¦¬ ê²°ê³¼ë„ í•¨ê»˜ 들어옵니다. ê°œë°œìž ë³¸ì¸ì˜ 앱ì—서는, ì´ +onLoadFinished()}ì— ëŒ€í•œ ì½œë°±ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œë¡œ ìˆ˜ì‹ ë˜ëŠ” ì¸ìˆ˜ 중 하나가 +{@link android.database.Cursor}로, ì—¬ê¸°ì— ì¿¼ë¦¬ ê²°ê³¼ë„ í•¨ê»˜ 들어옵니다. ê°œë°œìž ë³¸ì¸ì˜ 앱ì—서는, ì´ {@link android.database.Cursor}ì—서 ë°ì´í„°ë¥¼ ê°€ì ¸ì™€ ì´ë¥¼ í‘œì‹œí• ìˆ˜ë„ ìžˆê³ ì—¬ê¸°ì— ìž‘ì—…ì„ ë”í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> <h3 id="Transactions">ì¼ê´„ ìˆ˜ì •</h3> <p> - ì—°ë½ì²˜ ì œê³µìžì—서 ë°ì´í„°ë¥¼ 삽입, ì—…ë°ì´íЏ ë° ì‚ì œí•˜ëŠ” 경우 가급ì ì´ë©´ -"ì¼ê´„ 모드"를 쓰는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ë•Œ -{@link android.content.ContentProviderOperation} ê°ì²´ì˜ {@link java.util.ArrayList}를 ìƒì„±í•˜ê³ -{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}를 호출하면 ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” + ì—°ë½ì²˜ ì œê³µìžì—서 ë°ì´í„°ë¥¼ 삽입, ì—…ë°ì´íЏ ë° ì‚ì œí•˜ëŠ” 경우 가급ì ì´ë©´ +"ì¼ê´„ 모드"를 쓰는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ë•Œ +{@link android.content.ContentProviderOperation} ê°ì²´ì˜ {@link java.util.ArrayList}를 ìƒì„±í•˜ê³ +{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}를 호출하면 ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì œê³µìžëŠ” -{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ì—ì„œì˜ ëª¨ë“ ìž‘ì—…ì„ -í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 수행하기 때문ì—, ìˆ˜ì •í•œ ë‚´ìš©ì´ ì¼ê´€ë˜ì§€ ì•Šì€ ìƒíƒœë¡œ ì—°ë½ì²˜ 리í¬ì§€í† 리를 -ë– ë‚ ì¼ì´ ê²°ì½” 없습니다. ì¼ê´„ ìˆ˜ì •ì„ ì‚¬ìš©í•˜ë©´ ì›ì‹œ ì—°ë½ì²˜ì™€ ê·¸ 세부 ë°ì´í„°ë¥¼ ë™ì‹œì— 삽입하는 ê²ƒë„ +{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ì—ì„œì˜ ëª¨ë“ ìž‘ì—…ì„ +í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ìœ¼ë¡œ 수행하기 때문ì—, ìˆ˜ì •í•œ ë‚´ìš©ì´ ì¼ê´€ë˜ì§€ ì•Šì€ ìƒíƒœë¡œ ì—°ë½ì²˜ 리í¬ì§€í† 리를 +ë– ë‚ ì¼ì´ ê²°ì½” 없습니다. ì¼ê´„ ìˆ˜ì •ì„ ì‚¬ìš©í•˜ë©´ ì›ì‹œ ì—°ë½ì²˜ì™€ ê·¸ 세부 ë°ì´í„°ë¥¼ ë™ì‹œì— 삽입하는 ê²ƒë„ ì‰½ìŠµë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> <em>하나ì˜</em> ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìˆ˜ì •í•˜ë ¤ë©´ ìˆ˜ì • ìž‘ì—…ì„ ì•±ì—서 처리하는 것보다는 -ì¸í…트를 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 보내는 ë°©ì•ˆì„ ê³ ë ¤í•˜ì‹ì‹œì˜¤. -ì´ë ‡ê²Œ 하는 ë°©ë²•ì´ + <strong>ì°¸ê³ :</strong> <em>하나ì˜</em> ì›ì‹œ ì—°ë½ì²˜ë¥¼ ìˆ˜ì •í•˜ë ¤ë©´ ìˆ˜ì • ìž‘ì—…ì„ ì•±ì—서 처리하는 것보다는 +ì¸í…트를 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 보내는 ë°©ì•ˆì„ ê³ ë ¤í•˜ì‹ì‹œì˜¤. +ì´ë ‡ê²Œ 하는 ë°©ë²•ì´ <a href="#Intents">ì¸í…트로 검색 ë° ìˆ˜ì •</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <h4>ì–‘ë³´ ì§€ì </h4> <p> - ëŒ€ëŸ‰ì˜ ìž‘ì—…ì´ ë“¤ì–´ìžˆëŠ” ì¼ê´„ ìˆ˜ì •ì€ ë‹¤ë¥¸ 프로세스를 차단하므로, -ê·¸ ê²°ê³¼ ì „ë°˜ì 으로 불량한 ì‚¬ìš©ìž í™˜ê²½ì„ ìœ ë°œí• ìˆ˜ 있습니다. ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ëª¨ë“ ìˆ˜ì • ìž‘ì—…ì„ ê°€ëŠ¥í•œ 한 -ì ì€ ìˆ˜ì˜ ë³„ë„ì˜ ëª©ë¡ìœ¼ë¡œ ì •ë¦¬í•˜ê³ ê·¸ì™€ ë™ì‹œì— ì´ ìž‘ì—…ì´ ì‹œìŠ¤í…œì„ ì°¨ë‹¨í•˜ì§€ 못하ë„ë¡ ë°©ì§€í•˜ë ¤ë©´ + ëŒ€ëŸ‰ì˜ ìž‘ì—…ì´ ë“¤ì–´ìžˆëŠ” ì¼ê´„ ìˆ˜ì •ì€ ë‹¤ë¥¸ 프로세스를 차단하므로, +ê·¸ ê²°ê³¼ ì „ë°˜ì 으로 불량한 ì‚¬ìš©ìž í™˜ê²½ì„ ìœ ë°œí• ìˆ˜ 있습니다. ìˆ˜í–‰í•˜ê³ ìž í•˜ëŠ” ëª¨ë“ ìˆ˜ì • ìž‘ì—…ì„ ê°€ëŠ¥í•œ 한 +ì ì€ ìˆ˜ì˜ ë³„ë„ì˜ ëª©ë¡ìœ¼ë¡œ ì •ë¦¬í•˜ê³ ê·¸ì™€ ë™ì‹œì— ì´ ìž‘ì—…ì´ ì‹œìŠ¤í…œì„ ì°¨ë‹¨í•˜ì§€ 못하ë„ë¡ ë°©ì§€í•˜ë ¤ë©´ 하나 ì´ìƒì˜ ìž‘ì—…ì— <strong>ì–‘ë³´ ì§€ì </strong>ì„ ì„¤ì •í•´ì•¼ 합니다. ì–‘ë³´ ì§€ì ì€ {@link android.content.ContentProviderOperation#isYieldAllowed()} ê°’ì´ <code>true</code>로 ì„¤ì •ëœ {@link android.content.ContentProviderOperation} ê°ì²´ìž…니다. - ì—°ë½ì²˜ ì œê³µìžê°€ ì–‘ë³´ ì§€ì ì„ ë§Œë‚˜ë©´ -다른 프로세스가 실행ë˜ë„ë¡ ìž‘ì—…ì„ ìž ì‹œ ë©ˆì¶”ê³ í˜„ìž¬ 트랜ìžì…˜ì„ 종료합니다. ì œê³µìžê°€ 다시 시작ë˜ë©´, ì´ëŠ” -{@link java.util.ArrayList}ì—서 ë‹¤ìŒ ìž‘ì—…ì„ ê³„ì† ì§„í–‰í•˜ê³ + ì—°ë½ì²˜ ì œê³µìžê°€ ì–‘ë³´ ì§€ì ì„ ë§Œë‚˜ë©´ +다른 프로세스가 실행ë˜ë„ë¡ ìž‘ì—…ì„ ìž ì‹œ ë©ˆì¶”ê³ í˜„ìž¬ 트랜ìžì…˜ì„ 종료합니다. ì œê³µìžê°€ 다시 시작ë˜ë©´, ì´ëŠ” +{@link java.util.ArrayList}ì—서 ë‹¤ìŒ ìž‘ì—…ì„ ê³„ì† ì§„í–‰í•˜ê³ ìƒˆ 트랜ìžì…˜ì„ 시작합니다. </p> <p> - ì–‘ë³´ ì§€ì ì„ ì‚¬ìš©í•˜ë©´ ê·¸ ê²°ê³¼ -{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ë¡œì˜ í˜¸ì¶œ 한 건당 하나 ì´ìƒì˜ 트랜ìžì…˜ì´ ìƒê¸°ëŠ” ê²ƒì€ ì‚¬ì‹¤ìž…ë‹ˆë‹¤. ì´ ë•Œë¬¸ì—, + ì–‘ë³´ ì§€ì ì„ ì‚¬ìš©í•˜ë©´ ê·¸ ê²°ê³¼ +{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ë¡œì˜ í˜¸ì¶œ 한 건당 하나 ì´ìƒì˜ 트랜ìžì…˜ì´ ìƒê¸°ëŠ” ê²ƒì€ ì‚¬ì‹¤ìž…ë‹ˆë‹¤. ì´ ë•Œë¬¸ì—, ì–‘ë³´ ì§€ì ì€ ê´€ë ¨ëœ í–‰ 한 세트ì—서 마지막 ìž‘ì—…ì— ì„¤ì •í•´ì•¼ 합니다. - 예를 들어, ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ëœ ë°ì´í„° í–‰ì„ ì¶”ê°€í•˜ëŠ” ì„¸íŠ¸ì˜ ë§ˆì§€ë§‰ ìž‘ì—…ì— -ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•˜ê±°ë‚˜, í•˜ë‚˜ì˜ ì—°ë½ì²˜ì™€ ê´€ë ¨ëœ í–‰ 한 ì„¸íŠ¸ì˜ + 예를 들어, ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ëœ ë°ì´í„° í–‰ì„ ì¶”ê°€í•˜ëŠ” ì„¸íŠ¸ì˜ ë§ˆì§€ë§‰ ìž‘ì—…ì— +ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•˜ê±°ë‚˜, í•˜ë‚˜ì˜ ì—°ë½ì²˜ì™€ ê´€ë ¨ëœ í–‰ 한 ì„¸íŠ¸ì˜ ë§ˆì§€ë§‰ ìž‘ì—…ì— ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•´ì•¼ 합니다. </p> <p> - ì–‘ë³´ ì§€ì ì€ ì›ìžì„± ìž‘ì—…ì˜ ë‹¨ìœ„ì´ê¸°ë„ 합니다. ë‘ ê°œì˜ ì–‘ë³´ ì§€ì 사ì´ë¥¼ 향한 액세스는 ëª¨ë‘ -한 가지 단위로서 성공 ë˜ëŠ” 실패합니다. ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•˜ì§€ 않는 경우, 가장 ìž‘ì€ -ì›ìžì„± ìž‘ì—…ì€ ìž‘ì—… ì „ì²´ê°€ ë©ë‹ˆë‹¤. ì–‘ë³´ ì§€ì ì„ ì‚¬ìš©í•˜ë©´, ìž‘ì—…ì´ -시스템 ì„±ëŠ¥ì„ ì €í•˜í•˜ì§€ 않ë„ë¡ ë°©ì§€í•˜ëŠ” ë™ì‹œì— ìž‘ì—…ì˜ í•˜ìœ„ 세트가 ì›ìžì„± 작업ì´ë„ë¡ + ì–‘ë³´ ì§€ì ì€ ì›ìžì„± ìž‘ì—…ì˜ ë‹¨ìœ„ì´ê¸°ë„ 합니다. ë‘ ê°œì˜ ì–‘ë³´ ì§€ì 사ì´ë¥¼ 향한 액세스는 ëª¨ë‘ +한 가지 단위로서 성공 ë˜ëŠ” 실패합니다. ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•˜ì§€ 않는 경우, 가장 ìž‘ì€ +ì›ìžì„± ìž‘ì—…ì€ ìž‘ì—… ì „ì²´ê°€ ë©ë‹ˆë‹¤. ì–‘ë³´ ì§€ì ì„ ì‚¬ìš©í•˜ë©´, ìž‘ì—…ì´ +시스템 ì„±ëŠ¥ì„ ì €í•˜í•˜ì§€ 않ë„ë¡ ë°©ì§€í•˜ëŠ” ë™ì‹œì— ìž‘ì—…ì˜ í•˜ìœ„ 세트가 ì›ìžì„± 작업ì´ë„ë¡ ë³´ìž¥í• ìˆ˜ 있습니다. </p> <h4>ìˆ˜ì • ì—참조</h4> <p> - 새로운 ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ ë°ì´í„° í–‰ì„ -ì¼ë ¨ì˜ {@link android.content.ContentProviderOperation} 개체로 ì‚½ìž…í• ë•ŒëŠ”, - ì›ì‹œ ì—°ë½ì²˜ì˜ + 새로운 ì›ì‹œ ì—°ë½ì²˜ 행과 ê´€ë ¨ ë°ì´í„° í–‰ì„ +ì¼ë ¨ì˜ {@link android.content.ContentProviderOperation} 개체로 ì‚½ìž…í• ë•ŒëŠ”, + ì›ì‹œ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} ê°’ì„ -{@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID} 값으로 삽입하여 ë°ì´í„° 행과 ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì—°ê²°í•´ì•¼ 합니다. 그러나, ì´ ê°’ì€ -ë°ì´í„° í–‰ì— ëŒ€í•˜ì—¬ {@link android.content.ContentProviderOperation}ì„ +{@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID} 값으로 삽입하여 ë°ì´í„° 행과 ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì—°ê²°í•´ì•¼ 합니다. 그러나, ì´ ê°’ì€ +ë°ì´í„° í–‰ì— ëŒ€í•˜ì—¬ {@link android.content.ContentProviderOperation}ì„ ìƒì„±í•˜ëŠ” 경우ì—는 ì‚¬ìš©í• ìˆ˜ 없습니다. ì›ì‹œ ì—°ë½ì²˜ í–‰ì— ëŒ€í•´ {@link android.content.ContentProviderOperation} -ì„ ì•„ì§ ì 용하지 않았기 때문입니다. ì´ ë¬¸ì œë¥¼ í•´ê²°í•˜ë ¤ë©´ +ì„ ì•„ì§ ì 용하지 않았기 때문입니다. ì´ ë¬¸ì œë¥¼ í•´ê²°í•˜ë ¤ë©´ {@link android.content.ContentProviderOperation.Builder} í´ëž˜ìŠ¤ì— {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()} 메서드가 있어야 합니다. - ì´ ë©”ì„œë“œë¥¼ 사용하면 ì—´ì„ ì´ì „ ìž‘ì—…ì˜ ê²°ê³¼ë¡œ 삽입 ë˜ëŠ” ìˆ˜ì •í• ìˆ˜ + ì´ ë©”ì„œë“œë¥¼ 사용하면 ì—´ì„ ì´ì „ ìž‘ì—…ì˜ ê²°ê³¼ë¡œ 삽입 ë˜ëŠ” ìˆ˜ì •í• ìˆ˜ 있습니다. </p> <p> @@ -997,29 +997,29 @@ onLoadFinished()}ì— ëŒ€í•œ ì½œë°±ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œë¡œ ìˆ˜ì‹ ë <code>key</code> </dt> <dd> - 키-ê°’ ìŒì˜ 키입니다. ì´ ì¸ìˆ˜ì˜ ê°’ì€ ìˆ˜ì •í•˜ëŠ” í…Œì´ë¸”ì˜ + 키-ê°’ ìŒì˜ 키입니다. ì´ ì¸ìˆ˜ì˜ ê°’ì€ ìˆ˜ì •í•˜ëŠ” í…Œì´ë¸”ì˜ ì—´ ì´ë¦„ì´ì–´ì•¼ 합니다. </dd> <dt> <code>previousResult</code> </dt> <dd> - + {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ì˜ {@link android.content.ContentProviderResult} ê°ì²´ ë°°ì—´ì— ìžˆëŠ” -ê°’ì˜ 0 기반 색ì¸ìž…니다. -ì¼ê´„ ìž‘ì—…ì´ ì ìš©ë˜ë©´ ê° ìž‘ì—…ì˜ ê²°ê³¼ê°€ -ê²°ê³¼ì˜ ì¤‘ê°„ ë°°ì—´ì— ì €ìž¥ë©ë‹ˆë‹¤. <code>previousResult</code> ê°’ì€ -ì´ëŸ¬í•œ ê²°ê³¼ 중 í•˜ë‚˜ì˜ ìƒ‰ì¸ì´ê³ , ì´ëŠ” <code>key</code> 값으로 +ê°’ì˜ 0 기반 색ì¸ìž…니다. +ì¼ê´„ ìž‘ì—…ì´ ì ìš©ë˜ë©´ ê° ìž‘ì—…ì˜ ê²°ê³¼ê°€ +ê²°ê³¼ì˜ ì¤‘ê°„ ë°°ì—´ì— ì €ìž¥ë©ë‹ˆë‹¤. <code>previousResult</code> ê°’ì€ +ì´ëŸ¬í•œ ê²°ê³¼ 중 í•˜ë‚˜ì˜ ìƒ‰ì¸ì´ê³ , ì´ëŠ” <code>key</code> 값으로 검색 ë° ì €ìž¥ë©ë‹ˆë‹¤. ì´ê²ƒì„ 사용하면 새 ì›ì‹œ ì—°ë½ì²˜ ë ˆì½”ë“œë¥¼ ì‚½ìž…í•˜ê³ -{@code android.provider.BaseColumns#_ID} ê°’ì„ ë‹¤ì‹œ ê°€ì ¸ì˜¨ ë’¤, +{@code android.provider.BaseColumns#_ID} ê°’ì„ ë‹¤ì‹œ ê°€ì ¸ì˜¨ ë’¤, {@link android.provider.ContactsContract.Data} í–‰ì„ ì¶”ê°€í• ë•Œ 해당 ê°’ì„ "ì—참조"í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. <p> - -{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}를 ì²˜ìŒ í˜¸ì¶œí• ë•Œ, -개발ìžê°€ ì œê³µí•˜ëŠ” {@link android.content.ContentProviderOperation} ê°ì²´ì˜ {@link java.util.ArrayList} í¬ê¸°ì™€ ê°™ì€ í¬ê¸°ë¡œ -ì „ì²´ ê²°ê³¼ ë°°ì—´ì´ ìƒì„±ë©ë‹ˆë‹¤. 그러나 -ê²°ê³¼ ë°°ì—´ì˜ ëª¨ë“ ìš”ì†ŒëŠ” <code>null</code>로 ì„¤ì •ë˜ê³ , -ì•„ì§ ì ìš©ë˜ì§€ ì•Šì€ ìž‘ì—… ê²°ê³¼ì— ëŒ€í•œ ì—참조를 ìˆ˜í–‰í•˜ë ¤ 시ë„하면 + +{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}를 ì²˜ìŒ í˜¸ì¶œí• ë•Œ, +개발ìžê°€ ì œê³µí•˜ëŠ” {@link android.content.ContentProviderOperation} ê°ì²´ì˜ {@link java.util.ArrayList} í¬ê¸°ì™€ ê°™ì€ í¬ê¸°ë¡œ +ì „ì²´ ê²°ê³¼ ë°°ì—´ì´ ìƒì„±ë©ë‹ˆë‹¤. 그러나 +ê²°ê³¼ ë°°ì—´ì˜ ëª¨ë“ ìš”ì†ŒëŠ” <code>null</code>로 ì„¤ì •ë˜ê³ , +ì•„ì§ ì ìš©ë˜ì§€ ì•Šì€ ìž‘ì—… ê²°ê³¼ì— ëŒ€í•œ ì—참조를 ìˆ˜í–‰í•˜ë ¤ 시ë„하면 {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}ê°€ {@link java.lang.Exception}ì„ ë°œìƒì‹œí‚µë‹ˆë‹¤. @@ -1027,15 +1027,15 @@ onLoadFinished()}ì— ëŒ€í•œ ì½œë°±ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œë¡œ ìˆ˜ì‹ ë </dd> </dl> <p> - ë‹¤ìŒ ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ ë°ì´í„°ë¥¼ ì¼ê´„ 삽입하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. 여기ì—는 -ì–‘ë³´ ì§€ì ì„ ì§€ì •í•˜ê³ ì—참조를 사용하는 코드가 í¬í•¨ë˜ì–´ 있습니다. ì´ ì¡°ê°ì€ -<code>createContacEntry()</code> ë©”ì„œë“œì˜ í™•ìž¥ ë²„ì „ì´ë©°, ì´ëŠ” + ë‹¤ìŒ ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ ë°ì´í„°ë¥¼ ì¼ê´„ 삽입하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. 여기ì—는 +ì–‘ë³´ ì§€ì ì„ ì§€ì •í•˜ê³ ì—참조를 사용하는 코드가 í¬í•¨ë˜ì–´ 있습니다. ì´ ì¡°ê°ì€ +<code>createContacEntry()</code> ë©”ì„œë“œì˜ í™•ìž¥ ë²„ì „ì´ë©°, ì´ëŠ” <code><a href="{@docRoot}resources/samples/ContactManager/index.html"> - Contact Manager</a></code> 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 <code>ContactAdder</code> í´ëž˜ìŠ¤ì˜ + Contact Manager</a></code> 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 <code>ContactAdder</code> í´ëž˜ìŠ¤ì˜ ì¼ë¶€ìž…니다. </p> <p> - 첫 번째 ì¡°ê°ì€ UIì—서 ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 검색합니다. ì´ ì‹œì ì—서 사용ìžëŠ” ì´ë¯¸ + 첫 번째 ì¡°ê°ì€ UIì—서 ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 검색합니다. ì´ ì‹œì ì—서 사용ìžëŠ” ì´ë¯¸ 새로운 ì›ì‹œ ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ê³„ì •ì„ ì„ íƒí•˜ì˜€ìŠµë‹ˆë‹¤. </p> <pre> @@ -1055,7 +1055,7 @@ protected void createContactEntry() { mContactEmailTypeSpinner.getSelectedItemPosition()); </pre> <p> - ë‹¤ìŒ ì¡°ê°ì€ + ë‹¤ìŒ ì¡°ê°ì€ {@link android.provider.ContactsContract.RawContacts} í…Œì´ë¸”ì— ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì‚½ìž…í•˜ëŠ” ìž‘ì—…ì„ ìƒì„±í•©ë‹ˆë‹¤. </p> <pre> @@ -1086,18 +1086,18 @@ protected void createContactEntry() { 그런 다ìŒ, 코드가 표시 ì´ë¦„, ì „í™” ë° ì´ë©”ì¼ í–‰ì— ëŒ€í•œ ë°ì´í„° í–‰ì„ ìƒì„±í•©ë‹ˆë‹¤. </p> <p> - ê° ìž‘ì—… ë¹Œë” ê°œì²´ëŠ” -{@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}를 + ê° ìž‘ì—… ë¹Œë” ê°œì²´ëŠ” +{@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}를 사용하여 -{@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}를 ê°€ì ¸ì˜µë‹ˆë‹¤. 참조는 -첫 번째 ìž‘ì—…ì˜ {@link android.content.ContentProviderResult} ê°ì²´ë¥¼ 다시 ê°€ë¦¬í‚¤ê³ , +{@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}를 ê°€ì ¸ì˜µë‹ˆë‹¤. 참조는 +첫 번째 ìž‘ì—…ì˜ {@link android.content.ContentProviderResult} ê°ì²´ë¥¼ 다시 ê°€ë¦¬í‚¤ê³ , ì´ê²ƒì´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì¶”ê°€í•œ ë’¤ ì´ì˜ 새 {@code android.provider.BaseColumns#_ID} -ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ê·¸ ê²°ê³¼, ê° ë°ì´í„° í–‰ì€ ìžë™ìœ¼ë¡œ ìžì‹ ì˜ +ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ê·¸ ê²°ê³¼, ê° ë°ì´í„° í–‰ì€ ìžë™ìœ¼ë¡œ ìžì‹ ì˜ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID} ì— ì˜í•´ ìžì‹ ì´ ì†í•˜ëŠ” 새 {@link android.provider.ContactsContract.RawContacts} í–‰ì— ì—°ê²°ë©ë‹ˆë‹¤. </p> <p> - ì´ë©”ì¼ í–‰ì„ ì¶”ê°€í•˜ëŠ” {@link android.content.ContentProviderOperation.Builder} ê°ì²´ëŠ” + ì´ë©”ì¼ í–‰ì„ ì¶”ê°€í•˜ëŠ” {@link android.content.ContentProviderOperation.Builder} ê°ì²´ëŠ” ì–‘ë³´ ì§€ì ì„ ì„¤ì •í•˜ëŠ” {@link android.content.ContentProviderOperation.Builder#withYieldAllowed(boolean) withYieldAllowed()}로 플래그 표시합니다. </p> @@ -1172,8 +1172,8 @@ withYieldAllowed()}로 플래그 표시합니다. ops.add(op.build()); </pre> <p> - 마지막 ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ ë°ì´í„° í–‰ì„ ì‚½ìž…í•˜ëŠ” -{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ì— ëŒ€í•œ í˜¸ì¶œì„ + 마지막 ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ ë°ì´í„° í–‰ì„ ì‚½ìž…í•˜ëŠ” +{@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}ì— ëŒ€í•œ í˜¸ì¶œì„ ë‚˜íƒ€ë‚¸ 것입니다. </p> <pre> @@ -1205,32 +1205,32 @@ withYieldAllowed()}로 플래그 표시합니다. } </pre> <p> - ì¼ê´„ ìž‘ì—…ì„ ì‚¬ìš©í•˜ë©´ <strong>낙관ì ë™ì‹œì„± ì œì–´</strong>ë„ êµ¬í˜„í• ìˆ˜ 있습니다. + ì¼ê´„ ìž‘ì—…ì„ ì‚¬ìš©í•˜ë©´ <strong>낙관ì ë™ì‹œì„± ì œì–´</strong>ë„ êµ¬í˜„í• ìˆ˜ 있습니다. ì´ê²ƒì€ 기본 리í¬ì§€í† 리를 ìž ê·¸ì§€ ì•Šê³ ë„ ìˆ˜ì • 트랜ìžì…˜ì„ ì ìš©í• ìˆ˜ 있는 메서드입니다. - ì´ ë©”ì„œë“œë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ 트랜ìžì…˜ì„ ì ìš©í•˜ê³ ë™ì‹œì— ë°œìƒí•œ -다른 ìˆ˜ì • 사í•ì´ ìžˆëŠ”ì§€ 확ì¸í•©ë‹ˆë‹¤. 부합하지 않는 ìˆ˜ì •ì´ ë°œìƒí•œ ê²ƒì„ ë°œê²¬í•˜ë©´ + ì´ ë©”ì„œë“œë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ 트랜ìžì…˜ì„ ì ìš©í•˜ê³ ë™ì‹œì— ë°œìƒí•œ +다른 ìˆ˜ì • 사í•ì´ ìžˆëŠ”ì§€ 확ì¸í•©ë‹ˆë‹¤. 부합하지 않는 ìˆ˜ì •ì´ ë°œìƒí•œ ê²ƒì„ ë°œê²¬í•˜ë©´ 트랜ìžì…˜ì„ ë¡¤ë°±í•˜ê³ ë‹¤ì‹œ 시ë„합니다. </p> <p> - 낙관ì ë™ì‹œì„± ì œì–´ëŠ” 한 ë²ˆì— í•œ ëª…ì˜ ì‚¬ìš©ìžë§Œ ì¡´ìž¬í•˜ê³ ë°ì´í„° 리í¬ì§€í† ë¦¬ì— ëŒ€í•œ ë™ì‹œ 액세스가 드문 ëª¨ë°”ì¼ ê¸°ê¸°ì— -ìœ ìš©í•©ë‹ˆë‹¤. ìž ê¸ˆì„ ì‚¬ìš©í•˜ì§€ 않으므로 + 낙관ì ë™ì‹œì„± ì œì–´ëŠ” 한 ë²ˆì— í•œ ëª…ì˜ ì‚¬ìš©ìžë§Œ ì¡´ìž¬í•˜ê³ ë°ì´í„° 리í¬ì§€í† ë¦¬ì— ëŒ€í•œ ë™ì‹œ 액세스가 드문 ëª¨ë°”ì¼ ê¸°ê¸°ì— +ìœ ìš©í•©ë‹ˆë‹¤. ìž ê¸ˆì„ ì‚¬ìš©í•˜ì§€ 않으므로 ìž ê¸ˆì„ ì„¤ì •í•˜ê±°ë‚˜ 다른 트랜ìžì…˜ì´ ìž ê¸ˆì„ í•´ì œí•˜ê¸°ë¥¼ 기다리면서 ì‹œê°„ì„ ë‚비하지 않습니다. </p> <p> - í•˜ë‚˜ì˜ + í•˜ë‚˜ì˜ {@link android.provider.ContactsContract.RawContacts} í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë©´ì„œ ë™ì‹œì— 낙관ì ë™ì‹œì„± ì œì–´ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´, ë‹¤ìŒ ë‹¨ê³„ë¥¼ 따르ì‹ì‹œì˜¤. </p> <ol> <li> - 검색하는 다른 ë°ì´í„°ì™€ 함께 í–‰ ì—°ë½ì²˜ì˜ {@link android.provider.ContactsContract.SyncColumns#VERSION}ì„ + 검색하는 다른 ë°ì´í„°ì™€ 함께 í–‰ ì—°ë½ì²˜ì˜ {@link android.provider.ContactsContract.SyncColumns#VERSION}ì„ ê²€ìƒ‰í•©ë‹ˆë‹¤. </li> <li> - ì œì•½ì„ ê°•ì œ ì 용하는 ë° ì 합한 -{@link android.content.ContentProviderOperation.Builder} ê°ì²´ë¥¼ 하나 ìƒì„±í•˜ë˜ -{@link android.content.ContentProviderOperation#newAssertQuery(Uri)} 메서드를 사용합니다. 콘í…ì¸ URIì˜ ê²½ìš°, + ì œì•½ì„ ê°•ì œ ì 용하는 ë° ì 합한 +{@link android.content.ContentProviderOperation.Builder} ê°ì²´ë¥¼ 하나 ìƒì„±í•˜ë˜ +{@link android.content.ContentProviderOperation#newAssertQuery(Uri)} 메서드를 사용합니다. 콘í…ì¸ URIì˜ ê²½ìš°, {@link android.provider.ContactsContract.RawContacts#CONTENT_URI - RawContacts.CONTENT_URI}를 ì‚¬ìš©í•˜ë˜ + RawContacts.CONTENT_URI}를 ì‚¬ìš©í•˜ë˜ ì´ì— ì¶”ê°€ëœ ì›ì‹œ ë°ì´í„°ì˜ {@code android.provider.BaseColumns#_ID}를 함께 ì”니다. </li> <li> @@ -1256,13 +1256,13 @@ withExpectedCount()}를 호출하여 ì´ ì–´ì„¤ì…˜ì´ í…ŒìŠ¤íŠ¸í•˜ëŠ” í–‰ì´ í•˜ </ol> <p> í–‰ì„ ì½ê³ ìˆ˜ì •í•˜ë ¤ê³ ì‹œë„하는 사ì´ì— 다른 ìž‘ì—…ì´ ì›ì‹œ ì—°ë½ì²˜ í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë©´, -"어설션" {@link android.content.ContentProviderOperation}ì€ -ì‹¤íŒ¨í•˜ê³ ì „ì²´ ì¼ê´„ ìž‘ì—…ì´ ì·¨ì†Œë©ë‹ˆë‹¤. 그러면 ì¼ê´„ ìž‘ì—…ì„ ë‹¤ì‹œ 시ë„하거나 +"어설션" {@link android.content.ContentProviderOperation}ì€ +ì‹¤íŒ¨í•˜ê³ ì „ì²´ ì¼ê´„ ìž‘ì—…ì´ ì·¨ì†Œë©ë‹ˆë‹¤. 그러면 ì¼ê´„ ìž‘ì—…ì„ ë‹¤ì‹œ 시ë„하거나 다른 조치를 취하기로 ì„ íƒí• 수 있습니다. </p> <p> - ë‹¤ìŒ ì¡°ê°ì€ {@link android.content.CursorLoader}를 사용하여 ë‹¨ì¼ ì›ì‹œ ì—°ë½ì²˜ë¥¼ 쿼리한 후 -"어설션" {@link android.content.ContentProviderOperation}ì„ + ë‹¤ìŒ ì¡°ê°ì€ {@link android.content.CursorLoader}를 사용하여 ë‹¨ì¼ ì›ì‹œ ì—°ë½ì²˜ë¥¼ 쿼리한 후 +"어설션" {@link android.content.ContentProviderOperation}ì„ ìƒì„±í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. </p> <pre> @@ -1311,8 +1311,8 @@ try </pre> <h3 id="Intents">ì¸í…트로 검색 ë° ìˆ˜ì •</h3> <p> - 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì¸í…트를 ì „ì†¡í•˜ë©´ ì—°ë½ì²˜ ì œê³µìžì— -ê°„ì ‘ì 으로 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. ì¸í…트는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ UI를 ì‹œìž‘í•˜ê³ , 여기서 사용ìžëŠ” + 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì¸í…트를 ì „ì†¡í•˜ë©´ ì—°ë½ì²˜ ì œê³µìžì— +ê°„ì ‘ì 으로 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. ì¸í…트는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ UI를 ì‹œìž‘í•˜ê³ , 여기서 사용ìžëŠ” ì—°ë½ì²˜ ê´€ë ¨ ìž‘ì—…ì„ í• ìˆ˜ 있습니다. 사용ìžê°€ ì´ëŸ° 액세스 ìœ í˜•ì„ ê°€ì§€ê³ í• ìˆ˜ 있는 ì¼ì€ 다ìŒê³¼ 같습니다. <ul> <li>목ë¡ì—서 ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ê³ 추가 ìž‘ì—…ì„ ìœ„í•´ ì•±ì— ë°˜í™˜ì‹œí‚µë‹ˆë‹¤.</li> @@ -1321,20 +1321,20 @@ try <li>ì—°ë½ì²˜ ë˜ëŠ” ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì‚ì œí•©ë‹ˆë‹¤.</li> </ul> <p> - 사용ìžê°€ ë°ì´í„°ë¥¼ 삽입하거나 ì—…ë°ì´íŠ¸í•˜ê³ ìžˆë‹¤ë©´, ë¨¼ì € ë°ì´í„°ë¥¼ ìˆ˜ì§‘í•˜ê³ + 사용ìžê°€ ë°ì´í„°ë¥¼ 삽입하거나 ì—…ë°ì´íŠ¸í•˜ê³ ìžˆë‹¤ë©´, ë¨¼ì € ë°ì´í„°ë¥¼ ìˆ˜ì§‘í•˜ê³ ì¸í…íŠ¸ì˜ ì¼ë¶€ë¡œ ì „ì†¡í• ìˆ˜ 있습니다. </p> <p> - ì¸í…트를 사용하여 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 통해 ì—°ë½ì²˜ ì œê³µìžì— 액세스하는 경우 -ì œê³µìžì— 액세스하기 위해 ê°œë°œìž ë‚˜ë¦„ì˜ UI나 코드를 작성하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì œê³µìžì— 대한 ì½ê¸° ë˜ëŠ” 쓰기 ê¶Œí•œë„ ìš”ì²í•˜ì§€ ì•Šì•„ë„ -ë©ë‹ˆë‹¤. 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ -ì—°ë½ì²˜ì— 대한 ì½ê¸° ê¶Œí•œì„ ìœ„ìž„í• ìˆ˜ ìžˆê³ , 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 통해 ìˆ˜ì •í•˜ê¸° ë•Œë¬¸ì— + ì¸í…트를 사용하여 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 통해 ì—°ë½ì²˜ ì œê³µìžì— 액세스하는 경우 +ì œê³µìžì— 액세스하기 위해 ê°œë°œìž ë‚˜ë¦„ì˜ UI나 코드를 작성하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì œê³µìžì— 대한 ì½ê¸° ë˜ëŠ” 쓰기 ê¶Œí•œë„ ìš”ì²í•˜ì§€ ì•Šì•„ë„ +ë©ë‹ˆë‹¤. 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +ì—°ë½ì²˜ì— 대한 ì½ê¸° ê¶Œí•œì„ ìœ„ìž„í• ìˆ˜ ìžˆê³ , 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 통해 ìˆ˜ì •í•˜ê¸° ë•Œë¬¸ì— ì“°ê¸° ê¶Œí•œë„ í•„ìš” 없습니다. </p> <p> - ì œê³µìžì— 액세스하기 위해 ì¸í…트를 ì „ì†¡í•˜ëŠ” ì¼ë°˜ì ì¸ ê³¼ì •ì€ + ì œê³µìžì— 액세스하기 위해 ì¸í…트를 ì „ì†¡í•˜ëŠ” ì¼ë°˜ì ì¸ ê³¼ì •ì€ "ì¸í…트를 통한 ë°ì´í„° 액세스" ì„¹ì…˜ì˜ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> -콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a> ê°€ì´ë“œì— ìƒì„¸ížˆ 설명ë˜ì–´ 있습니다. ì´ìš© 가능한 ìž‘ì—…ì— ëŒ€í•´ 사용하는 ë™ìž‘, +콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a> ê°€ì´ë“œì— ìƒì„¸ížˆ 설명ë˜ì–´ 있습니다. ì´ìš© 가능한 ìž‘ì—…ì— ëŒ€í•´ 사용하는 ë™ìž‘, MIME ìœ í˜• ë° ë°ì´í„° ê°’ì€ í‘œ 4ì— ìš”ì•½ë˜ì–´ ìžˆê³ , {@link android.content.Intent#putExtra(String, String) putExtra()}와 함께 ì‚¬ìš©í• ìˆ˜ 있는 추가 ê°’ì€ @@ -1358,20 +1358,20 @@ MIME ìœ í˜• ë° ë°ì´í„° ê°’ì€ í‘œ 4ì— ìš”ì•½ë˜ì–´ ìžˆê³ , ë‹¤ìŒ ì¤‘ 하나로 ì •í•´ì§‘ë‹ˆë‹¤. <ul> <li> -{@link android.provider.ContactsContract.Contacts#CONTENT_URI Contacts.CONTENT_URI}, +{@link android.provider.ContactsContract.Contacts#CONTENT_URI Contacts.CONTENT_URI}, ì´ëŠ” ì—°ë½ì²˜ 목ë¡ì„ 표시합니다. </li> <li> -{@link android.provider.ContactsContract.CommonDataKinds.Phone#CONTENT_URI Phone.CONTENT_URI}, +{@link android.provider.ContactsContract.CommonDataKinds.Phone#CONTENT_URI Phone.CONTENT_URI}, ì´ëŠ” ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì „í™” 번호 목ë¡ì„ 표시합니다. </li> <li> {@link android.provider.ContactsContract.CommonDataKinds.StructuredPostal#CONTENT_URI -StructuredPostal.CONTENT_URI}, +StructuredPostal.CONTENT_URI}, ì´ëŠ” ì›ì‹œ ì—°ë½ì²˜ì— 대한 우편 주소 목ë¡ì„ 표시합니다. </li> <li> -{@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_URI Email.CONTENT_URI}, +{@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_URI Email.CONTENT_URI}, ì´ëŠ” ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì´ë©”ì¼ ì£¼ì†Œ 목ë¡ì„ 표시합니다. </li> </ul> @@ -1380,15 +1380,15 @@ StructuredPostal.CONTENT_URI}, 사용하지 ì•ŠìŒ </td> <td> - 개발ìžê°€ ì œê³µí•˜ëŠ” 콘í…ì¸ URIì— ë”°ë¼ ì›ì‹œ ì—°ë½ì²˜ 목ë¡ì´ë‚˜ ì›ì‹œ ì—°ë½ì²˜ì—서 ê°€ì ¸ì˜¨ + 개발ìžê°€ ì œê³µí•˜ëŠ” 콘í…ì¸ URIì— ë”°ë¼ ì›ì‹œ ì—°ë½ì²˜ 목ë¡ì´ë‚˜ ì›ì‹œ ì—°ë½ì²˜ì—서 ê°€ì ¸ì˜¨ ë°ì´í„° 목ë¡ì„ 표시합니다. <p> - -{@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()} 호출, -ì´ëŠ” ì„ íƒí•œ í–‰ì˜ ì½˜í…ì¸ URI를 반환합니다. URIì˜ í˜•íƒœëŠ” + +{@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()} 호출, +ì´ëŠ” ì„ íƒí•œ í–‰ì˜ ì½˜í…ì¸ URI를 반환합니다. URIì˜ í˜•íƒœëŠ” í…Œì´ë¸”ì˜ ì½˜í…ì¸ URIì— í–‰ì˜ <code>LOOKUP_ID</code>를 추가한 것입니다. - ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì€ ì•¡í‹°ë¹„í‹° 수명 ë™ì•ˆ ì´ ì½˜í…ì¸ URIì— -ì½ê¸° ë° ì“°ê¸° ê¶Œí•œì„ ìœ„ìž„í•©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ + ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì€ ì•¡í‹°ë¹„í‹° 수명 ë™ì•ˆ ì´ ì½˜í…ì¸ URIì— +ì½ê¸° ë° ì“°ê¸° ê¶Œí•œì„ ìœ„ìž„í•©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> 콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a> ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤. </p> @@ -1403,12 +1403,12 @@ StructuredPostal.CONTENT_URI}, RawContacts.CONTENT_TYPE}, ì¼ë ¨ì˜ ì›ì‹œ ì—°ë½ì²˜ì— 대한 MIME ìœ í˜•ìž…ë‹ˆë‹¤. </td> <td> - ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <strong>ì—°ë½ì²˜ 추가</strong> í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 개발ìžê°€ -ì¸í…íŠ¸ì— ì¶”ê°€í•˜ëŠ” 추가 ì‚¬í• ê°’ì´ í‘œì‹œë©ë‹ˆë‹¤. + ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <strong>ì—°ë½ì²˜ 추가</strong> í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 개발ìžê°€ +ì¸í…íŠ¸ì— ì¶”ê°€í•˜ëŠ” 추가 ì‚¬í• ê°’ì´ í‘œì‹œë©ë‹ˆë‹¤. {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()}와 함께 ì „ì†¡ë˜ëŠ” 경우, -새로 ì¶”ê°€ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URI는 +새로 ì¶”ê°€ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URI는 "ë°ì´í„°" í•„ë“œì˜ {@link android.content.Intent} ì¸ìˆ˜ì— 있는 ì•¡í‹°ë¹„í‹°ì˜ {@link android.app.Activity#onActivityResult(int, int, Intent) onActivityResult()} -콜백 메서드로 +콜백 메서드로 다시 ì „ë‹¬ë©ë‹ˆë‹¤. ê°’ì„ ê°€ì ¸ì˜¤ë ¤ë©´, {@link android.content.Intent#getData()}를 호출합니다. </td> </tr> @@ -1416,16 +1416,16 @@ RawContacts.CONTENT_TYPE}, ì¼ë ¨ì˜ ì›ì‹œ ì—°ë½ì²˜ì— 대한 MIME ìœ í˜•ìž…ë‹ <td><strong>ì—°ë½ì²˜ 편집</strong></td> <td>{@link android.content.Intent#ACTION_EDIT}</td> <td> - ì—°ë½ì²˜ì— 대한 -{@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}입니다. íŽ¸ì§‘ìž ì•¡í‹°ë¹„í‹°ë¥¼ 사용하면 사용ìžê°€ ì´ ì—°ë½ì²˜ì™€ ê´€ë ¨ëœ ë°ì´í„°ë¥¼ ì–´ëŠ ê²ƒì´ë“ + ì—°ë½ì²˜ì— 대한 +{@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}입니다. íŽ¸ì§‘ìž ì•¡í‹°ë¹„í‹°ë¥¼ 사용하면 사용ìžê°€ ì´ ì—°ë½ì²˜ì™€ ê´€ë ¨ëœ ë°ì´í„°ë¥¼ ì–´ëŠ ê²ƒì´ë“ íŽ¸ì§‘í• ìˆ˜ 있습니다. </td> <td> {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE Contacts.CONTENT_ITEM_TYPE}, í•˜ë‚˜ì˜ ì—°ë½ì²˜ìž…니다.</td> <td> - ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì—°ë½ì²˜ 편집 í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 개발ìžê°€ -ì¸í…íŠ¸ì— ì¶”ê°€í•˜ëŠ” 추가 ì‚¬í• ê°’ì´ í‘œì‹œë©ë‹ˆë‹¤. 사용ìžê°€ <strong>완료</strong>를 í´ë¦í•˜ì—¬ 편집 ë‚´ìš©ì„ ì €ìž¥í•˜ë©´, + ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì—°ë½ì²˜ 편집 í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 개발ìžê°€ +ì¸í…íŠ¸ì— ì¶”ê°€í•˜ëŠ” 추가 ì‚¬í• ê°’ì´ í‘œì‹œë©ë‹ˆë‹¤. 사용ìžê°€ <strong>완료</strong>를 í´ë¦í•˜ì—¬ 편집 ë‚´ìš©ì„ ì €ìž¥í•˜ë©´, 액티비티가 ì „ê²½ìœ¼ë¡œ ëŒì•„옵니다. </td> </tr> @@ -1439,31 +1439,31 @@ Contacts.CONTENT_ITEM_TYPE}, í•˜ë‚˜ì˜ ì—°ë½ì²˜ìž…니다.</td> {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE} </td> <td> - ì´ ì¸í…트는 í•ìƒ ì—°ë½ì²˜ ì•±ì˜ ì„ íƒê¸° í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 사용ìžëŠ” -íŽ¸ì§‘í• ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ê±°ë‚˜ 새 ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. 사용ìžì˜ ì„ íƒì— ë”°ë¼ -편집 ë˜ëŠ” 추가 í™”ë©´ì´ ë‚˜íƒ€ë‚˜ê³ ê°œë°œìžê°€ ì¸í…íŠ¸ì— ì „ë‹¬í•˜ëŠ” 추가 ì‚¬í• ë°ì´í„°ê°€ -표시ë©ë‹ˆë‹¤. ì•±ì´ ì´ë©”ì¼ì´ë‚˜ ì „í™” 번호 ë“±ì˜ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 표시하는 경우, -ì´ ì¸í…트를 사용하면 사용ìžê°€ 기존 ì—°ë½ì²˜ì— ë°ì´í„°ë¥¼ ì¶”ê°€í• ìˆ˜ + ì´ ì¸í…트는 í•ìƒ ì—°ë½ì²˜ ì•±ì˜ ì„ íƒê¸° í™”ë©´ì„ í‘œì‹œí•©ë‹ˆë‹¤. 사용ìžëŠ” +íŽ¸ì§‘í• ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ê±°ë‚˜ 새 ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. 사용ìžì˜ ì„ íƒì— ë”°ë¼ +편집 ë˜ëŠ” 추가 í™”ë©´ì´ ë‚˜íƒ€ë‚˜ê³ ê°œë°œìžê°€ ì¸í…íŠ¸ì— ì „ë‹¬í•˜ëŠ” 추가 ì‚¬í• ë°ì´í„°ê°€ +표시ë©ë‹ˆë‹¤. ì•±ì´ ì´ë©”ì¼ì´ë‚˜ ì „í™” 번호 ë“±ì˜ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 표시하는 경우, +ì´ ì¸í…트를 사용하면 사용ìžê°€ 기존 ì—°ë½ì²˜ì— ë°ì´í„°ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. <p class="note"> - <strong>ì°¸ê³ :</strong> ì´ ì¸í…íŠ¸ì˜ ì¶”ê°€ 사í•ì—서는 ì´ë¦„ ê°’ì„ ì „ì†¡í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. -사용ìžê°€ í•ìƒ ê¸°ì¡´ì˜ ì´ë¦„ì„ ì„ íƒí•˜ê±°ë‚˜ 새 ì´ë¦„ì„ ì¶”ê°€í•˜ê¸° 때문입니다. 게다가, -개발ìžê°€ ì´ë¦„ì„ ì „ì†¡í•˜ê³ ì‚¬ìš©ìžê°€ íŽ¸ì§‘ì„ ì„ íƒí•˜ë©´ ì—°ë½ì²˜ ì•±ì€ ê°œë°œìžê°€ ì „ì†¡í•œ ì´ë¦„ì„ í‘œì‹œí•˜ë©´ì„œ -ì´ì „ ê°’ì„ ìž¬ì •ì˜í•˜ê²Œ ë©ë‹ˆë‹¤. 사용ìžê°€ + <strong>ì°¸ê³ :</strong> ì´ ì¸í…íŠ¸ì˜ ì¶”ê°€ 사í•ì—서는 ì´ë¦„ ê°’ì„ ì „ì†¡í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. +사용ìžê°€ í•ìƒ ê¸°ì¡´ì˜ ì´ë¦„ì„ ì„ íƒí•˜ê±°ë‚˜ 새 ì´ë¦„ì„ ì¶”ê°€í•˜ê¸° 때문입니다. 게다가, +개발ìžê°€ ì´ë¦„ì„ ì „ì†¡í•˜ê³ ì‚¬ìš©ìžê°€ íŽ¸ì§‘ì„ ì„ íƒí•˜ë©´ ì—°ë½ì²˜ ì•±ì€ ê°œë°œìžê°€ ì „ì†¡í•œ ì´ë¦„ì„ í‘œì‹œí•˜ë©´ì„œ +ì´ì „ ê°’ì„ ìž¬ì •ì˜í•˜ê²Œ ë©ë‹ˆë‹¤. 사용ìžê°€ ì´ë¥¼ 눈치채지 ëª»í•˜ê³ íŽ¸ì§‘ ë‚´ìš©ì„ ì €ìž¥í•˜ë©´ ì´ì „ ê°’ì€ ì†ì‹¤ë©ë‹ˆë‹¤. </p> </td> </tr> </table> <p> - ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì€ ê°œë°œìžê°€ ì¸í…트로 ì›ì‹œ ì—°ë½ì²˜ ë˜ëŠ” ê·¸ì— ì†í•œ ëª¨ë“ ë°ì´í„°ë¥¼ ì‚ì œí•˜ë„ë¡ -허용하지 않습니다. ëŒ€ì‹ , ì›ì‹œ ì—°ë½ì²˜ë¥¼ ì‚ì œí•˜ë ¤ë©´ -{@link android.content.ContentResolver#delete(Uri, String, String[]) ContentResolver.delete()} + ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì€ ê°œë°œìžê°€ ì¸í…트로 ì›ì‹œ ì—°ë½ì²˜ ë˜ëŠ” ê·¸ì— ì†í•œ ëª¨ë“ ë°ì´í„°ë¥¼ ì‚ì œí•˜ë„ë¡ +허용하지 않습니다. ëŒ€ì‹ , ì›ì‹œ ì—°ë½ì²˜ë¥¼ ì‚ì œí•˜ë ¤ë©´ +{@link android.content.ContentResolver#delete(Uri, String, String[]) ContentResolver.delete()} ë˜ëŠ” {@link android.content.ContentProviderOperation#newDelete(Uri) ContentProviderOperation.newDelete()}를 사용합니다. </p> <p> - ë‹¤ìŒ ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ + ë‹¤ìŒ ì¡°ê°ì€ 새로운 ì›ì‹œ ì—°ë½ì²˜ì™€ ë°ì´í„°ë¥¼ 삽입하는 ì¸í…트를 구성, ì „ì†¡í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. </p> <pre> @@ -1560,65 +1560,65 @@ startActivity(insertIntent); </pre> <h3 id="DataIntegrity">ë°ì´í„° 무결성</h3> <p> - ì—°ë½ì²˜ 리í¬ì§€í† 리ì—는 ì‚¬ìš©ìž ì¸¡ì—서 ì˜¬ë°”ë¥´ê³ ìµœì‹ ì¼ ê²ƒìœ¼ë¡œ 기대하는 ì¤‘ìš”í•˜ê³ ë¯¼ê°í•œ ë°ì´í„°ê°€ 들어있으므로 -ì—°ë½ì²˜ ì œê³µìžëŠ” ë°ì´í„° ë¬´ê²°ì„±ì— ëŒ€í•œ 잘 ì •ì˜ëœ ê·œì¹™ì´ ìžˆìŠµë‹ˆë‹¤. ê°œë°œìž -여러분ì—게는 ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í• ë•Œ ì´ì™€ ê°™ì€ ê·œì¹™ì„ ì¤€ìˆ˜í• ì˜ë¬´ê°€ 있습니다. 아래ì—는 중요한 ê·œì¹™ì„ + ì—°ë½ì²˜ 리í¬ì§€í† 리ì—는 ì‚¬ìš©ìž ì¸¡ì—서 ì˜¬ë°”ë¥´ê³ ìµœì‹ ì¼ ê²ƒìœ¼ë¡œ 기대하는 ì¤‘ìš”í•˜ê³ ë¯¼ê°í•œ ë°ì´í„°ê°€ 들어있으므로 +ì—°ë½ì²˜ ì œê³µìžëŠ” ë°ì´í„° ë¬´ê²°ì„±ì— ëŒ€í•œ 잘 ì •ì˜ëœ ê·œì¹™ì´ ìžˆìŠµë‹ˆë‹¤. ê°œë°œìž +여러분ì—게는 ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í• ë•Œ ì´ì™€ ê°™ì€ ê·œì¹™ì„ ì¤€ìˆ˜í• ì˜ë¬´ê°€ 있습니다. 아래ì—는 중요한 ê·œì¹™ì„ ëª‡ 가지 나열해 놓았습니다. </p> <dl> <dt> - {@link android.provider.ContactsContract.RawContacts} í–‰ì„ ì¶”ê°€í• ë•Œë§ˆë‹¤ ì–¸ì œë‚˜ + {@link android.provider.ContactsContract.RawContacts} í–‰ì„ ì¶”ê°€í• ë•Œë§ˆë‹¤ ì–¸ì œë‚˜ {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} í–‰ì„ ì¶”ê°€í•©ë‹ˆë‹¤. </dt> <dd> - {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} í–‰ì´ ì—†ëŠ” {@link android.provider.ContactsContract.RawContacts} í–‰ì´ ìžˆìœ¼ë©´ + {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} í–‰ì´ ì—†ëŠ” {@link android.provider.ContactsContract.RawContacts} í–‰ì´ ìžˆìœ¼ë©´ 통합 ê³¼ì •ì—서 ë¬¸ì œê°€ ë°œìƒí• 수 있습니다. </dd> <dt> - ì–¸ì œë‚˜ 새로운 {@link android.provider.ContactsContract.Data} í–‰ì„ + ì–¸ì œë‚˜ 새로운 {@link android.provider.ContactsContract.Data} í–‰ì„ í•´ë‹¹ ìƒìœ„ {@link android.provider.ContactsContract.RawContacts} í–‰ì— ì—°ê²°í•©ë‹ˆë‹¤. </dt> <dd> - {@link android.provider.ContactsContract.RawContacts}ì— ì—°ê²°ë˜ì§€ ì•Šì€ {@link android.provider.ContactsContract.Data} í–‰ì€ -기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 표시ë˜ì§€ ì•Šê³ , + {@link android.provider.ContactsContract.RawContacts}ì— ì—°ê²°ë˜ì§€ ì•Šì€ {@link android.provider.ContactsContract.Data} í–‰ì€ +기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 표시ë˜ì§€ ì•Šê³ , ë™ê¸°í™” 어댑터ì—서 ë¬¸ì œë¥¼ ë°œìƒì‹œí‚¬ 수 있습니다. </dd> <dt> ê°œë°œìž ë³¸ì¸ì˜ ì†Œìœ ì¸ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ë°ì´í„°ë§Œ 변경하ì‹ì‹œì˜¤. </dt> <dd> - ì—°ë½ì²˜ ì œê³µìžëŠ” 보통 여러 가지 서로 다른 ê³„ì • ìœ í˜•/온ë¼ì¸ 서비스ì—서 ê°€ì ¸ì˜¨ -ë°ì´í„°ë¥¼ 관리한다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 본ì¸ì—게 -ì†í•œ í–‰ì— ëŒ€í•œ ë°ì´í„°ë§Œ ìˆ˜ì • ë˜ëŠ” ì‚ì œí•˜ë„ë¡ í™•ì‹¤ížˆ í•´ë‘어야 하며, ë°ì´í„°ë¥¼ ì‚½ìž…í• ë•Œì—ë„ ê°œë°œìž ë³¸ì¸ì´ + ì—°ë½ì²˜ ì œê³µìžëŠ” 보통 여러 가지 서로 다른 ê³„ì • ìœ í˜•/온ë¼ì¸ 서비스ì—서 ê°€ì ¸ì˜¨ +ë°ì´í„°ë¥¼ 관리한다는 ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 본ì¸ì—게 +ì†í•œ í–‰ì— ëŒ€í•œ ë°ì´í„°ë§Œ ìˆ˜ì • ë˜ëŠ” ì‚ì œí•˜ë„ë¡ í™•ì‹¤ížˆ í•´ë‘어야 하며, ë°ì´í„°ë¥¼ ì‚½ìž…í• ë•Œì—ë„ ê°œë°œìž ë³¸ì¸ì´ ì œì–´í•˜ëŠ” ê³„ì • ìœ í˜•ê³¼ ì´ë¦„ë§Œ 사용해야 합니다. </dd> <dt> - 권한, 콘í…ì¸ URI, URI 경로, ì—´ ì´ë¦„, MIME ìœ í˜• ë° -{@link android.provider.ContactsContract.CommonDataKinds.CommonColumns#TYPE} ê°’ì— ëŒ€í•´ì„œëŠ” í•ìƒ + 권한, 콘í…ì¸ URI, URI 경로, ì—´ ì´ë¦„, MIME ìœ í˜• ë° +{@link android.provider.ContactsContract.CommonDataKinds.CommonColumns#TYPE} ê°’ì— ëŒ€í•´ì„œëŠ” í•ìƒ {@link android.provider.ContactsContract} ë° ê·¸ 하위 í´ëž˜ìФì—서 ì •ì˜í•œ ìƒìˆ˜ë¥¼ 사용합니다. </dt> <dd> - ì´ëŸ° ìƒìˆ˜ë¥¼ 사용하면 오류를 피하는 ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. ì´ëŸ° ìƒìˆ˜ 중 하나ë¼ë„ 사용하지 않게 ë˜ëŠ” 경우 컴파ì¼ëŸ¬ë¡œë¶€í„° + ì´ëŸ° ìƒìˆ˜ë¥¼ 사용하면 오류를 피하는 ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. ì´ëŸ° ìƒìˆ˜ 중 하나ë¼ë„ 사용하지 않게 ë˜ëŠ” 경우 컴파ì¼ëŸ¬ë¡œë¶€í„° ì•Œë¦¼ì„ ë°›ê¸°ë„ í•©ë‹ˆë‹¤. </dd> </dl> <h3 id="CustomData">ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰</h3> <p> ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì„ ìƒì„±í•˜ì—¬ 사용하면, -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ìžˆëŠ” 본ì¸ì˜ ë°ì´í„° í–‰ì„ ì‚½ìž…, 편집, ì‚ì œ ë° ê²€ìƒ‰í• ìˆ˜ 있습니다. 개발ìžì˜ í–‰ì€ -{@link android.provider.ContactsContract.DataColumns}ì—서 -ì •ì˜ëœ ì—´ë§Œ 사용하ë„ë¡ ì œí•œë˜ì–´ 있습니다. 다만 ë‚˜ë¦„ì˜ ìœ í˜•ë³„ ì—´ ì´ë¦„ì„ -기본 ì—´ ì´ë¦„ì— ë§¤í•‘í• ìˆ˜ëŠ” 있습니다. ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서는 -개발ìžì˜ í–‰ì— ëŒ€í•œ ë°ì´í„°ê°€ 표시는 ë˜ì§€ë§Œ 편집ì´ë‚˜ ì‚ì œëŠ” í• ìˆ˜ ì—†ê³ , 사용ìžê°€ 추가 ë°ì´í„°ë¥¼ -ì¶”ê°€í• ìˆ˜ë„ ì—†ìŠµë‹ˆë‹¤. 사용ìžê°€ 개발ìžì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì„ ìˆ˜ì •í•˜ë„ë¡ í—ˆìš©í•˜ë ¤ë©´, 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ìžˆëŠ” 본ì¸ì˜ ë°ì´í„° í–‰ì„ ì‚½ìž…, 편집, ì‚ì œ ë° ê²€ìƒ‰í• ìˆ˜ 있습니다. 개발ìžì˜ í–‰ì€ +{@link android.provider.ContactsContract.DataColumns}ì—서 +ì •ì˜ëœ ì—´ë§Œ 사용하ë„ë¡ ì œí•œë˜ì–´ 있습니다. 다만 ë‚˜ë¦„ì˜ ìœ í˜•ë³„ ì—´ ì´ë¦„ì„ +기본 ì—´ ì´ë¦„ì— ë§¤í•‘í• ìˆ˜ëŠ” 있습니다. ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서는 +개발ìžì˜ í–‰ì— ëŒ€í•œ ë°ì´í„°ê°€ 표시는 ë˜ì§€ë§Œ 편집ì´ë‚˜ ì‚ì œëŠ” í• ìˆ˜ ì—†ê³ , 사용ìžê°€ 추가 ë°ì´í„°ë¥¼ +ì¶”ê°€í• ìˆ˜ë„ ì—†ìŠµë‹ˆë‹¤. 사용ìžê°€ 개발ìžì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì„ ìˆ˜ì •í•˜ë„ë¡ í—ˆìš©í•˜ë ¤ë©´, 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 편집기 액티비티를 ì œê³µí•´ì•¼ 합니다. </p> <p> - 개발ìžì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„°ë¥¼ í‘œì‹œí•˜ë ¤ë©´, <code><ContactsAccountType></code> 요소와 하나 ì´ìƒì˜ <code><ContactsDataKind></code> 하위 요소를 í¬í•¨í•˜ëŠ” <code>contacts.xml</code> 파ì¼ì„ + 개발ìžì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„°ë¥¼ í‘œì‹œí•˜ë ¤ë©´, <code><ContactsAccountType></code> 요소와 하나 ì´ìƒì˜ <code><ContactsDataKind></code> 하위 요소를 í¬í•¨í•˜ëŠ” <code>contacts.xml</code> 파ì¼ì„ ì œê³µí•©ë‹ˆë‹¤. - ì´ ë‚´ìš©ì€ + ì´ ë‚´ìš©ì€ <a href="#SocialStreamDataKind"><code><ContactsDataKind> element</code></a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p> @@ -1628,15 +1628,15 @@ startActivity(insertIntent); </p> <h2 id="SyncAdapters">ì—°ë½ì²˜ ì œê³µìž ë™ê¸°í™” 어댑터</h2> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” 기기와 온ë¼ì¸ 서비스 사ì´ì—서 ì—°ë½ì²˜ ë°ì´í„°ì˜ <strong>ë™ê¸°í™”</strong>를 -처리한다는 구체ì ì¸ ëª©ì ì„ ë‘ê³ ë””ìžì¸ëœ 것입니다. ì´ê²ƒì„ 사용하면 사용ìžê°€ ê¸°ì¡´ì˜ + ì—°ë½ì²˜ ì œê³µìžëŠ” 기기와 온ë¼ì¸ 서비스 사ì´ì—서 ì—°ë½ì²˜ ë°ì´í„°ì˜ <strong>ë™ê¸°í™”</strong>를 +처리한다는 구체ì ì¸ ëª©ì ì„ ë‘ê³ ë””ìžì¸ëœ 것입니다. ì´ê²ƒì„ 사용하면 사용ìžê°€ ê¸°ì¡´ì˜ ë°ì´í„°ë¥¼ 새 ê¸°ê¸°ì— ë‹¤ìš´ë¡œë“œí• ìˆ˜ë„ ìžˆê³ , ê¸°ì¡´ì˜ ë°ì´í„°ë¥¼ 새 ê³„ì •ì— ì—…ë¡œë“œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. - ë™ê¸°í™”를 사용하면 사용ìžê°€ 추가나 ë³€ê²½ì˜ ì¶œì²˜ì™€ 관계 ì—†ì´ ìµœì‹ ë°ì´í„°ë¥¼ -편리하게 ì‚¬ìš©í• ìˆ˜ 있게 ë³´ìž¥í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ë™ê¸°í™”ì˜ ë˜ ë‹¤ë¥¸ 장ì ì€ + ë™ê¸°í™”를 사용하면 사용ìžê°€ 추가나 ë³€ê²½ì˜ ì¶œì²˜ì™€ 관계 ì—†ì´ ìµœì‹ ë°ì´í„°ë¥¼ +편리하게 ì‚¬ìš©í• ìˆ˜ 있게 ë³´ìž¥í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ë™ê¸°í™”ì˜ ë˜ ë‹¤ë¥¸ 장ì ì€ ê¸°ê¸°ê°€ 네트워í¬ì— ì—°ê²°ë˜ì–´ 있지 않ë”ë¼ë„ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 있다는 것입니다. </p> <p> - 다양한 ë°©ì‹ìœ¼ë¡œ ë™ê¸°í™”를 êµ¬í˜„í• ìˆ˜ 있지만, Android ì‹œìŠ¤í…œì€ + 다양한 ë°©ì‹ìœ¼ë¡œ ë™ê¸°í™”를 êµ¬í˜„í• ìˆ˜ 있지만, Android ì‹œìŠ¤í…œì€ í”ŒëŸ¬ê·¸ì¸ ë™ê¸°í™” í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•˜ì—¬ 다ìŒê³¼ ê°™ì€ ìž‘ì—…ë“¤ì„ ìžë™í™”í•´ì¤ë‹ˆë‹¤. <ul> @@ -1651,40 +1651,40 @@ startActivity(insertIntent); </li> </ul> <p> - ì´ í”„ë ˆìž„ì›Œí¬ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ ë™ê¸°í™” 어댑터 플러그ì¸ì€ 개발ìžê°€ ì§ì ‘ ì œê³µí•´ì•¼ 합니다. ë™ê¸°í™” 어댑터는 -서비스와 콘í…ì¸ ì œê³µìžë§ˆë‹¤ ê°ê¸° 다르지만, ê°™ì€ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 여러 ê°œì˜ ê³„ì • ì´ë¦„ì„ ì²˜ë¦¬í• ìˆ˜ 있습니다. ì´ + ì´ í”„ë ˆìž„ì›Œí¬ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´ ë™ê¸°í™” 어댑터 플러그ì¸ì€ 개발ìžê°€ ì§ì ‘ ì œê³µí•´ì•¼ 합니다. ë™ê¸°í™” 어댑터는 +서비스와 콘í…ì¸ ì œê³µìžë§ˆë‹¤ ê°ê¸° 다르지만, ê°™ì€ ì„œë¹„ìŠ¤ì— ëŒ€í•´ 여러 ê°œì˜ ê³„ì • ì´ë¦„ì„ ì²˜ë¦¬í• ìˆ˜ 있습니다. ì´ í”„ë ˆìž„ì›Œí¬ ë˜í•œ ê°™ì€ ì„œë¹„ìŠ¤ì™€ ì œê³µìžì— 대해 여러 ê°œì˜ ë™ê¸°í™” 어댑터를 허용합니다. </p> <h3 id="SyncClassesFiles">ë™ê¸°í™” 어댑터 í´ëž˜ìФ ë° íŒŒì¼</h3> <p> - ë™ê¸°í™” 어댑터를 -{@link android.content.AbstractThreadedSyncAdapter}ì˜ -하위 í´ëž˜ìŠ¤ë¡œ êµ¬í˜„í•˜ê³ ì´ë¥¼Android ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ë¡œ 설치합니다. ì‹œìŠ¤í…œì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ ìš”ì†Œì™€ 매니페스트가 가리키는 -특수 XML 파ì¼ì—서 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ê´€í•œ ì •ë³´ë¥¼ 얻습니다. XML 파ì¼ì€ -온ë¼ì¸ 서비스와 콘í…ì¸ ì œê³µìžì˜ ê¶Œí•œì— ëŒ€í•œ ê³„ì • ìœ í˜•ì„ ì •ì˜í•˜ê³ , -ì´ë“¤ì´ 함께 어댑터를 ê³ ìœ í•˜ê²Œ ì‹ë³„합니다. ë™ê¸°í™” 어댑터가 활성화ë˜ë ¤ë©´ 사용ìžê°€ -ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•´ ê³„ì •ì„ ì¶”ê°€í•˜ê³ í•´ë‹¹ ë™ê¸°í™” 어댑터와 ë™ê¸°í™”하는 콘í…ì¸ ì œê³µìžì˜ ë™ê¸°í™”를 -활성화해야 합니다. ì´ ì‹œì ì—서, ì‹œìŠ¤í…œì´ ì–´ëŒ‘í„° 관리를 ì‹œìž‘í•˜ê³ , + ë™ê¸°í™” 어댑터를 +{@link android.content.AbstractThreadedSyncAdapter}ì˜ +하위 í´ëž˜ìŠ¤ë¡œ êµ¬í˜„í•˜ê³ ì´ë¥¼Android ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ë¡œ 설치합니다. ì‹œìŠ¤í…œì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ ìš”ì†Œì™€ 매니페스트가 가리키는 +특수 XML 파ì¼ì—서 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ê´€í•œ ì •ë³´ë¥¼ 얻습니다. XML 파ì¼ì€ +온ë¼ì¸ 서비스와 콘í…ì¸ ì œê³µìžì˜ ê¶Œí•œì— ëŒ€í•œ ê³„ì • ìœ í˜•ì„ ì •ì˜í•˜ê³ , +ì´ë“¤ì´ 함께 어댑터를 ê³ ìœ í•˜ê²Œ ì‹ë³„합니다. ë™ê¸°í™” 어댑터가 활성화ë˜ë ¤ë©´ 사용ìžê°€ +ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•´ ê³„ì •ì„ ì¶”ê°€í•˜ê³ í•´ë‹¹ ë™ê¸°í™” 어댑터와 ë™ê¸°í™”하는 콘í…ì¸ ì œê³µìžì˜ ë™ê¸°í™”를 +활성화해야 합니다. ì´ ì‹œì ì—서, ì‹œìŠ¤í…œì´ ì–´ëŒ‘í„° 관리를 ì‹œìž‘í•˜ê³ , 콘í…ì¸ ì œê³µìžì™€ 서버 사ì´ì—서 ë™ê¸°í™”ê°€ í•„ìš”í• ë•Œ ì´ë¥¼ 호출합니다. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ê³„ì • ìœ í˜•ì„ ë™ê¸°í™” 어댑터 ì‹ë³„ì˜ ì¼ë¶€ë¡œ 사용하면 -ì‹œìŠ¤í…œì´ ë™ì¼í•œ ê°™ì€ ì¡°ì§ì—서 여러 ì„œë¹„ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë™ê¸°í™” 어댑터를 -ê°ì§€í•˜ê³ ê·¸ë£¹í™”í• ìˆ˜ 있습니다. 예를 들어, Google 온ë¼ì¸ ì„œë¹„ìŠ¤ì˜ ë™ê¸°í™” 어댑터는 ê³„ì • ìœ í˜•ì´ ëª¨ë‘ -<code>com.google</code>로 같습니다. 사용ìžê°€ ê¸°ê¸°ì— Google ê³„ì •ì„ ì¶”ê°€í•˜ë©´, -Google ì„œë¹„ìŠ¤ì— ì„¤ì¹˜ëœ ëª¨ë“ ë™ê¸°í™” 어댑터가 함께 목ë¡ìœ¼ë¡œ 표시ë©ë‹ˆë‹¤. 목ë¡ì— ê²Œìž¬ëœ ê° ë™ê¸°í™”는 + <strong>ì°¸ê³ :</strong> ê³„ì • ìœ í˜•ì„ ë™ê¸°í™” 어댑터 ì‹ë³„ì˜ ì¼ë¶€ë¡œ 사용하면 +ì‹œìŠ¤í…œì´ ë™ì¼í•œ ê°™ì€ ì¡°ì§ì—서 여러 ì„œë¹„ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë™ê¸°í™” 어댑터를 +ê°ì§€í•˜ê³ ê·¸ë£¹í™”í• ìˆ˜ 있습니다. 예를 들어, Google 온ë¼ì¸ ì„œë¹„ìŠ¤ì˜ ë™ê¸°í™” 어댑터는 ê³„ì • ìœ í˜•ì´ ëª¨ë‘ +<code>com.google</code>로 같습니다. 사용ìžê°€ ê¸°ê¸°ì— Google ê³„ì •ì„ ì¶”ê°€í•˜ë©´, +Google ì„œë¹„ìŠ¤ì— ì„¤ì¹˜ëœ ëª¨ë“ ë™ê¸°í™” 어댑터가 함께 목ë¡ìœ¼ë¡œ 표시ë©ë‹ˆë‹¤. 목ë¡ì— ê²Œìž¬ëœ ê° ë™ê¸°í™”는 기기ì—서 ê°ê¸° 다른 콘í…ì¸ ì œê³µìžì™€ ë™ê¸°í™”합니다. </p> <p> - ëŒ€ë¶€ë¶„ì˜ ì„œë¹„ìŠ¤ì—서는 사용ìžê°€ ë°ì´í„°ì— 액세스하기 ì „ì— -ID를 확ì¸í•´ì•¼ 하기 ë•Œë¬¸ì— Androidì—서는 ë™ê¸°í™” 어댑터 í”„ë ˆìž„ì›Œí¬ì™€ 비슷하면서 종종 ì´ì™€ 함께 ì“°ì´ê¸°ë„ 하는 -ì¸ì¦ í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•©ë‹ˆë‹¤. ì¸ì¦ í”„ë ˆìž„ì›Œí¬ëŠ” -{@link android.accounts.AbstractAccountAuthenticator}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ì¸ -í”ŒëŸ¬ê·¸ì¸ ì¸ì¦ìžë¥¼ 사용합니다. ì¸ì¦ìžëŠ” ë‹¤ìŒ ì ˆì°¨ì— ë”°ë¼ + ëŒ€ë¶€ë¶„ì˜ ì„œë¹„ìŠ¤ì—서는 사용ìžê°€ ë°ì´í„°ì— 액세스하기 ì „ì— +ID를 확ì¸í•´ì•¼ 하기 ë•Œë¬¸ì— Androidì—서는 ë™ê¸°í™” 어댑터 í”„ë ˆìž„ì›Œí¬ì™€ 비슷하면서 종종 ì´ì™€ 함께 ì“°ì´ê¸°ë„ 하는 +ì¸ì¦ í”„ë ˆìž„ì›Œí¬ë¥¼ ì œê³µí•©ë‹ˆë‹¤. ì¸ì¦ í”„ë ˆìž„ì›Œí¬ëŠ” +{@link android.accounts.AbstractAccountAuthenticator}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ì¸ +í”ŒëŸ¬ê·¸ì¸ ì¸ì¦ìžë¥¼ 사용합니다. ì¸ì¦ìžëŠ” ë‹¤ìŒ ì ˆì°¨ì— ë”°ë¼ ì‚¬ìš©ìžì˜ ID를 확ì¸í•©ë‹ˆë‹¤. <ol> <li> - ì‚¬ìš©ìž ì´ë¦„, 암호 ë˜ëŠ” ìœ ì‚¬í•œ ì •ë³´(사용ìžì˜ + ì‚¬ìš©ìž ì´ë¦„, 암호 ë˜ëŠ” ìœ ì‚¬í•œ ì •ë³´(사용ìžì˜ <strong>ìžê²© ì¦ëª…</strong>)를 수집합니다. </li> <li> @@ -1695,9 +1695,9 @@ ID를 확ì¸í•´ì•¼ 하기 ë•Œë¬¸ì— Androidì—서는 ë™ê¸°í™” 어댑터 í”„ë ˆì </li> </ol> <p> - 서비스가 ìžê²© ì¦ëª…ì„ ìˆ˜ë½í•˜ë©´ -ì¸ì¦ìžê°€ ìžê²© ì¦ëª…ì„ ì €ìž¥í•˜ì—¬ ë‚˜ì¤‘ì— ì‚¬ìš©í• ìˆ˜ 있습니다. í”ŒëŸ¬ê·¸ì¸ ì¸ì¦ìž í”„ë ˆìž„ì›Œí¬ë¡œ ì¸í•´, -{@link android.accounts.AccountManager}는 Oauth2 authTokenê³¼ ê°™ì´ ì¸ì¦ìžê°€ ì§€ì›í•˜ê³ 노출하기로 ì„ íƒí•˜ëŠ” ëª¨ë“ authTokenì— ì•¡ì„¸ìŠ¤ë¥¼ + 서비스가 ìžê²© ì¦ëª…ì„ ìˆ˜ë½í•˜ë©´ +ì¸ì¦ìžê°€ ìžê²© ì¦ëª…ì„ ì €ìž¥í•˜ì—¬ ë‚˜ì¤‘ì— ì‚¬ìš©í• ìˆ˜ 있습니다. í”ŒëŸ¬ê·¸ì¸ ì¸ì¦ìž í”„ë ˆìž„ì›Œí¬ë¡œ ì¸í•´, +{@link android.accounts.AccountManager}는 Oauth2 authTokenê³¼ ê°™ì´ ì¸ì¦ìžê°€ ì§€ì›í•˜ê³ 노출하기로 ì„ íƒí•˜ëŠ” ëª¨ë“ authTokenì— ì•¡ì„¸ìŠ¤ë¥¼ ì œê³µí•©ë‹ˆë‹¤. </p> <p> @@ -1706,18 +1706,18 @@ ID를 확ì¸í•´ì•¼ 하기 ë•Œë¬¸ì— Androidì—서는 ë™ê¸°í™” 어댑터 í”„ë ˆì </p> <h3 id="SyncAdapterImplementing">ë™ê¸°í™” 어댑터 구현</h3> <p> - ì—°ë½ì²˜ ì œê³µìžì— 대한 ë™ê¸°í™” 어댑터를 êµ¬í˜„í•˜ë ¤ë©´, + ì—°ë½ì²˜ ì œê³µìžì— 대한 ë™ê¸°í™” 어댑터를 êµ¬í˜„í•˜ë ¤ë©´, 다ìŒì´ 들어있는 Android ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìƒì„±í•˜ëŠ” 것으로 시작합니다. </p> <dl> <dt> - ì‹œìŠ¤í…œì˜ ìš”ì²ì— ì‘답하여 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ë°”ì¸ë”©í•˜ëŠ” {@link android.app.Service} + ì‹œìŠ¤í…œì˜ ìš”ì²ì— ì‘답하여 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ë°”ì¸ë”©í•˜ëŠ” {@link android.app.Service} 구성 요소. </dt> <dd> - ì‹œìŠ¤í…œì´ ë™ê¸°í™”를 ì‹¤í–‰í•˜ê³ ìž í•˜ëŠ” 경우, ì´ëŠ” + ì‹œìŠ¤í…œì´ ë™ê¸°í™”를 ì‹¤í–‰í•˜ê³ ìž í•˜ëŠ” 경우, ì´ëŠ” ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onBind(Intent) onBind()} 메서드를 호출하여 -ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ {@link android.os.IBinder}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì‹œìŠ¤í…œì´ ì–´ëŒ‘í„°ì˜ +ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ {@link android.os.IBinder}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì‹œìŠ¤í…œì´ ì–´ëŒ‘í„°ì˜ ë©”ì„œë“œì— ëŒ€í•´ 프로세스간 í˜¸ì¶œì„ ìˆ˜í–‰í• ìˆ˜ 있습니다. <p> <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> @@ -1726,18 +1726,18 @@ ID를 확ì¸í•´ì•¼ 하기 ë•Œë¬¸ì— Androidì—서는 ë™ê¸°í™” 어댑터 í”„ë ˆì </p> </dd> <dt> - {@link android.content.AbstractThreadedSyncAdapter}ì˜ + {@link android.content.AbstractThreadedSyncAdapter}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ êµ¬í˜„ëœ ì‹¤ì œ ë™ê¸°í™” 어댑터. </dt> <dd> - ì´ í´ëž˜ìŠ¤ëŠ” 서버ì—서 ë°ì´í„°ë¥¼ ë‹¤ìš´ë¡œë“œí•˜ê³ , 기기ì—서 ë°ì´í„°ë¥¼ ì—…ë¡œë“œí•˜ê³ , -ì¶©ëŒì„ 해결하는 ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. ì–´ëŒ‘í„°ì˜ ì£¼ìš” ìž‘ì—…ì€ + ì´ í´ëž˜ìŠ¤ëŠ” 서버ì—서 ë°ì´í„°ë¥¼ ë‹¤ìš´ë¡œë“œí•˜ê³ , 기기ì—서 ë°ì´í„°ë¥¼ ì—…ë¡œë“œí•˜ê³ , +ì¶©ëŒì„ 해결하는 ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. ì–´ëŒ‘í„°ì˜ ì£¼ìš” ìž‘ì—…ì€ {@link android.content.AbstractThreadedSyncAdapter#onPerformSync( Account, Bundle, String, ContentProviderClient, SyncResult) onPerformSync()} 메서드ì—서 실행합니다. ì´ í´ëž˜ìŠ¤ëŠ” 반드시 ë‹¨ì¼ í•목으로 ì¸ìŠ¤í„´íŠ¸í™”í•´ì•¼ 합니다. <p> <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> -샘플 ë™ê¸°í™” 어댑터</a> 샘플 앱ì—서 ë™ê¸°í™” 어댑터는 +샘플 ë™ê¸°í™” 어댑터</a> 샘플 앱ì—서 ë™ê¸°í™” 어댑터는 <code>com.example.android.samplesync.syncadapter.SyncAdapter</code> í´ëž˜ìФì—서 ì •ì˜ë©ë‹ˆë‹¤. </p> </dd> @@ -1745,23 +1745,23 @@ onPerformSync()} 메서드ì—서 실행합니다. ì´ í´ëž˜ìŠ¤ëŠ” 반드시 단 {@link android.app.Application}ì˜ í•˜ìœ„ í´ëž˜ìФ. </dt> <dd> - ì´ í´ëž˜ìŠ¤ëŠ” ë™ê¸°í™” 어댑터 ë‹¨ì¼ í•ëª©ì˜ íŒ©í„°ë¦¬ ì—í• ì„ í•©ë‹ˆë‹¤. -{@link android.app.Application#onCreate()} 메서드는 -ë™ê¸°í™” 어댑터를 ì¸ìŠ¤í„´íŠ¸í™”í•˜ê³ , ë‹¨ì¼ í•ëª©ì„ ë™ê¸°í™” 어댑터 ì„œë¹„ìŠ¤ì˜ -{@link android.app.Service#onBind(Intent) onBind()} ë©”ì„œë“œì— ë°˜í™˜í• ì •ì "getter" 메서드를 ì œê³µí•˜ëŠ” ë° + ì´ í´ëž˜ìŠ¤ëŠ” ë™ê¸°í™” 어댑터 ë‹¨ì¼ í•ëª©ì˜ íŒ©í„°ë¦¬ ì—í• ì„ í•©ë‹ˆë‹¤. +{@link android.app.Application#onCreate()} 메서드는 +ë™ê¸°í™” 어댑터를 ì¸ìŠ¤í„´íŠ¸í™”í•˜ê³ , ë‹¨ì¼ í•ëª©ì„ ë™ê¸°í™” 어댑터 ì„œë¹„ìŠ¤ì˜ +{@link android.app.Service#onBind(Intent) onBind()} ë©”ì„œë“œì— ë°˜í™˜í• ì •ì "getter" 메서드를 ì œê³µí•˜ëŠ” ë° ì‚¬ìš©í•˜ì‹ì‹œì˜¤. </dd> <dt> - <strong>ì„ íƒ í•목:</strong> ì‚¬ìš©ìž ì¸ì¦ì— 대한 ì‹œìŠ¤í…œìœ¼ë¡œë¶€í„°ì˜ ìš”ì²ì— ì‘답하는 {@link android.app.Service} + <strong>ì„ íƒ í•목:</strong> ì‚¬ìš©ìž ì¸ì¦ì— 대한 ì‹œìŠ¤í…œìœ¼ë¡œë¶€í„°ì˜ ìš”ì²ì— ì‘답하는 {@link android.app.Service} 구성 요소. </dt> <dd> - {@link android.accounts.AccountManager}ê°€ ì´ ì„œë¹„ìŠ¤ë¥¼ 시작하여 ì¸ì¦ -ì ˆì°¨ë¥¼ 시작합니다. ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onCreate()} 메서드가 -ì¸ì¦ìž ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•©ë‹ˆë‹¤. ì‹œìŠ¤í…œì´ ì• í”Œë¦¬ì¼€ì´ì…˜ ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ì‚¬ìš©ìž ê³„ì •ì„ ì¸ì¦í•˜ê³ ìž í•˜ëŠ” 경우, -ì‹œìŠ¤í…œì€ ì„œë¹„ìŠ¤ì˜ -{@link android.app.Service#onBind(Intent) onBind()} 메서드를 호출하여 -ì¸ì¦ìžì˜ {@link android.os.IBinder}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì‹œìŠ¤í…œì´ ì¸ì¦ìžì˜ + {@link android.accounts.AccountManager}ê°€ ì´ ì„œë¹„ìŠ¤ë¥¼ 시작하여 ì¸ì¦ +ì ˆì°¨ë¥¼ 시작합니다. ì„œë¹„ìŠ¤ì˜ {@link android.app.Service#onCreate()} 메서드가 +ì¸ì¦ìž ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•©ë‹ˆë‹¤. ì‹œìŠ¤í…œì´ ì• í”Œë¦¬ì¼€ì´ì…˜ ë™ê¸°í™” ì–´ëŒ‘í„°ì˜ ì‚¬ìš©ìž ê³„ì •ì„ ì¸ì¦í•˜ê³ ìž í•˜ëŠ” 경우, +ì‹œìŠ¤í…œì€ ì„œë¹„ìŠ¤ì˜ +{@link android.app.Service#onBind(Intent) onBind()} 메서드를 호출하여 +ì¸ì¦ìžì˜ {@link android.os.IBinder}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì‹œìŠ¤í…œì´ ì¸ì¦ìžì˜ ë©”ì„œë“œì— ëŒ€í•´ 프로세스간 í˜¸ì¶œì„ ìˆ˜í–‰í• ìˆ˜ 있습니다. <p> <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> @@ -1770,18 +1770,18 @@ onPerformSync()} 메서드ì—서 실행합니다. ì´ í´ëž˜ìŠ¤ëŠ” 반드시 단 </p> </dd> <dt> - <strong>ì„ íƒ í•목:</strong> ì¸ì¦ì— 대한 ìš”ì²ì„ 처리하는 -{@link android.accounts.AbstractAccountAuthenticator}ì˜ êµ¬ì²´ì ì¸ + <strong>ì„ íƒ í•목:</strong> ì¸ì¦ì— 대한 ìš”ì²ì„ 처리하는 +{@link android.accounts.AbstractAccountAuthenticator}ì˜ êµ¬ì²´ì ì¸ í•˜ìœ„ í´ëž˜ìФ. </dt> <dd> - ì´ í´ëž˜ìŠ¤ëŠ” {@link android.accounts.AccountManager}ê°€ -서버로 ì‚¬ìš©ìž ìžê²© ì¦ëª… ì¸ì¦ì„ 호출하는 메서드를 ì œê³µí•©ë‹ˆë‹¤. ì¸ì¦ ì ˆì°¨ì˜ ì„¸ë¶€ 사í•ì€ -사용하는 서버 ê¸°ìˆ ì— ë”°ë¼ ë§¤ìš° ì°¨ì´ê°€ 있습니다. ì¸ì¦ì— 대한 + ì´ í´ëž˜ìŠ¤ëŠ” {@link android.accounts.AccountManager}ê°€ +서버로 ì‚¬ìš©ìž ìžê²© ì¦ëª… ì¸ì¦ì„ 호출하는 메서드를 ì œê³µí•©ë‹ˆë‹¤. ì¸ì¦ ì ˆì°¨ì˜ ì„¸ë¶€ 사í•ì€ +사용하는 서버 ê¸°ìˆ ì— ë”°ë¼ ë§¤ìš° ì°¨ì´ê°€ 있습니다. ì¸ì¦ì— 대한 ìžì„¸í•œ ì •ë³´ëŠ” ê°ìžì˜ 서버 ì†Œí”„íŠ¸ì›¨ì–´ì— í•´ë‹¹ë˜ëŠ” ê´€ë ¨ 문서를 참조하ì‹ì‹œì˜¤. <p> <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> -샘플 ë™ê¸°í™” 어댑터</a> 샘플 앱ì—서 ì¸ì¦ìžëŠ” +샘플 ë™ê¸°í™” 어댑터</a> 샘플 앱ì—서 ì¸ì¦ìžëŠ” <code>com.example.android.samplesync.authenticator.Authenticator</code> í´ëž˜ìФì—서 ì •ì˜ë©ë‹ˆë‹¤. </p> </dd> @@ -1789,31 +1789,31 @@ onPerformSync()} 메서드ì—서 실행합니다. ì´ í´ëž˜ìŠ¤ëŠ” 반드시 단 ë™ê¸°í™” 어댑터와 ì„œë²„ì˜ ì¸ì¦ìžë¥¼ ì •ì˜í•˜ëŠ” XML 파ì¼. </dt> <dd> - ì´ì „ì— ì„¤ëª…í•œ ë™ê¸°í™” 어댑터와 ì¸ì¦ìž 서비스 구성 요소는 -ì• í”Œë¦¬ì¼€ì´ì…˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì˜ -<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> 요소ì—서 +ì •ì˜í•©ë‹ˆë‹¤. ì´ëŸ° 요소ì—는 +ì‹œìŠ¤í…œì— íŠ¹ì • ë°ì´í„°ë¥¼ ì œê³µí•˜ëŠ” <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code> -하위 요소가 +하위 요소가 들어있습니다. <ul> <li> - ë™ê¸°í™” 어댑터 ì„œë¹„ìŠ¤ì— ëŒ€í•œ + ë™ê¸°í™” 어댑터 ì„œë¹„ìŠ¤ì— ëŒ€í•œ <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code> -요소는 -XML íŒŒì¼ <code>res/xml/syncadapter.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 그런가 하면 -ì´ íŒŒì¼ì€ ì—°ë½ì²˜ ì œê³µìžì™€ ë™ê¸°í™”ë 웹 ì„œë¹„ìŠ¤ì— ëŒ€í•œ URI와 웹 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ê³„ì • ìœ í˜•ì„ +요소는 +XML íŒŒì¼ <code>res/xml/syncadapter.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 그런가 하면 +ì´ íŒŒì¼ì€ ì—°ë½ì²˜ ì œê³µìžì™€ ë™ê¸°í™”ë 웹 ì„œë¹„ìŠ¤ì— ëŒ€í•œ URI와 웹 ì„œë¹„ìŠ¤ì— ëŒ€í•œ ê³„ì • ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. </li> <li> - <strong>ì„ íƒ í•목:</strong> ì¸ì¦ìžì˜ + <strong>ì„ íƒ í•목:</strong> ì¸ì¦ìžì˜ <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code> -요소는 XML íŒŒì¼ -<code>res/xml/authenticator.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. ì´ íŒŒì¼ì€ 다시 -ì´ ì¸ì¦ì´ ì§€ì›í•˜ëŠ” ê³„ì • ìœ í˜•ê³¼, ì¸ì¦ ê³¼ì • ì¤‘ì— í‘œì‹œë˜ëŠ” UI 리소스를 -나타냅니다. ì´ ìš”ì†Œì—서 ì§€ì •í•œ ê³„ì • ìœ í˜•ì€ ë°˜ë“œì‹œ -ë™ê¸°í™” ì–´ëŒ‘í„°ì— ëŒ€í•´ ì§€ì •ëœ ê³„ì • ìœ í˜•ê³¼ +요소는 XML íŒŒì¼ +<code>res/xml/authenticator.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. ì´ íŒŒì¼ì€ 다시 +ì´ ì¸ì¦ì´ ì§€ì›í•˜ëŠ” ê³„ì • ìœ í˜•ê³¼, ì¸ì¦ ê³¼ì • ì¤‘ì— í‘œì‹œë˜ëŠ” UI 리소스를 +나타냅니다. ì´ ìš”ì†Œì—서 ì§€ì •í•œ ê³„ì • ìœ í˜•ì€ ë°˜ë“œì‹œ +ë™ê¸°í™” ì–´ëŒ‘í„°ì— ëŒ€í•´ ì§€ì •ëœ ê³„ì • ìœ í˜•ê³¼ 같아야 합니다. </li> </ul> @@ -1821,18 +1821,18 @@ XML íŒŒì¼ <code>res/xml/syncadapter.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 그런가 í• </dl> <h2 id="SocialStream">소셜 스트림 ë°ì´í„°</h2> <p> - {@code android.provider.ContactsContract.StreamItems}와 -{@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì€ -소셜 네트워í¬ì—서 ìˆ˜ì‹ í•˜ëŠ” ë°ì´í„°ë¥¼ 관리합니다. 개발ìžëŠ” 본ì¸ì˜ 네트워í¬ì˜ 스트림 ë°ì´í„°ë¥¼ ì´ í…Œì´ë¸”ì— ì¶”ê°€í•˜ëŠ” -ë™ê¸°í™” 어댑터를 ìž‘ì„±í• ìˆ˜ë„ ìžˆê³ , ì´ í…Œì´ë¸”ì—서 스트림 ë°ì´í„°ë¥¼ ì½ì–´ì„œ -본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— í‘œì‹œí• ìˆ˜ë„ ìžˆìœ¼ë©° ë‘ ê°€ì§€ë¥¼ ëª¨ë‘ í•´ë„ ë©ë‹ˆë‹¤. ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë©´ 소셜 네트워킹 + {@code android.provider.ContactsContract.StreamItems}와 +{@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì€ +소셜 네트워í¬ì—서 ìˆ˜ì‹ í•˜ëŠ” ë°ì´í„°ë¥¼ 관리합니다. 개발ìžëŠ” 본ì¸ì˜ 네트워í¬ì˜ 스트림 ë°ì´í„°ë¥¼ ì´ í…Œì´ë¸”ì— ì¶”ê°€í•˜ëŠ” +ë™ê¸°í™” 어댑터를 ìž‘ì„±í• ìˆ˜ë„ ìžˆê³ , ì´ í…Œì´ë¸”ì—서 스트림 ë°ì´í„°ë¥¼ ì½ì–´ì„œ +본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— í‘œì‹œí• ìˆ˜ë„ ìžˆìœ¼ë©° ë‘ ê°€ì§€ë¥¼ ëª¨ë‘ í•´ë„ ë©ë‹ˆë‹¤. ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë©´ 소셜 네트워킹 서비스와 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ Androidì˜ ì†Œì…œ 네트워킹 í™˜ê²½ì— í†µí•©í• ìˆ˜ 있습니다. </p> <h3 id="StreamText">소셜 스트림 í…스트</h3> <p> - 스트림 í•ëª©ì€ í•ìƒ ì›ì‹œ ì—°ë½ì²˜ì™€ ì—°ê´€ë©ë‹ˆë‹¤. -{@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}는 -ì›ì‹œ ì—°ë½ì²˜ì˜ <code>_ID</code> ê°’ê³¼ ì—°ê´€ë©ë‹ˆë‹¤. ì›ì‹œ ì—°ë½ì²˜ì˜ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ë„ + 스트림 í•ëª©ì€ í•ìƒ ì›ì‹œ ì—°ë½ì²˜ì™€ ì—°ê´€ë©ë‹ˆë‹¤. +{@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}는 +ì›ì‹œ ì—°ë½ì²˜ì˜ <code>_ID</code> ê°’ê³¼ ì—°ê´€ë©ë‹ˆë‹¤. ì›ì‹œ ì—°ë½ì²˜ì˜ ê³„ì • ìœ í˜•ê³¼ ê³„ì • ì´ë¦„ë„ ìŠ¤íŠ¸ë¦¼ í•목 í–‰ì— ì €ìž¥ë©ë‹ˆë‹¤. </p> <p> @@ -1843,36 +1843,36 @@ XML íŒŒì¼ <code>res/xml/syncadapter.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 그런가 í• {@code android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_TYPE} </dt> <dd> - <strong>필수입니다.</strong> ì´ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì— 대한 + <strong>필수입니다.</strong> ì´ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì‚¬ìš©ìž ê³„ì •ìž…ë‹ˆë‹¤. 스트림 í•ëª©ì„ ì‚½ìž…í• ë•Œ ì´ ê°’ì„ ì„¤ì •í•˜ëŠ” ê²ƒì„ ìžŠì§€ 마ì‹ì‹œì˜¤. </dd> <dt> {@code android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_NAME} </dt> <dd> - <strong>필수입니다.</strong> ì´ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì— 대한 + <strong>필수입니다.</strong> ì´ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì‚¬ìš©ìž ê³„ì • ì´ë¦„입니다. 스트림 í•ëª©ì„ ì‚½ìž…í• ë•Œ ì´ ê°’ì„ ì„¤ì •í•˜ëŠ” ê²ƒì„ ìžŠì§€ 마ì‹ì‹œì˜¤. </dd> <dt> ì‹ë³„ìž ì—´ </dt> <dd> - <strong>필수입니다.</strong> 스트림 í•ëª©ì„ ì‚½ìž…í• ë•Œ + <strong>필수입니다.</strong> 스트림 í•ëª©ì„ ì‚½ìž…í• ë•Œ ë‹¤ìŒ ì‹ë³„ìž ì—´ì„ ì‚½ìž…í•´ì•¼ 합니다. <ul> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}: ì´ -스트림 í•목과 ì—°ê´€ëœ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} + {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}: ì´ +스트림 í•목과 ì—°ê´€ëœ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} 값입니다. </li> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}: ì´ -스트림 í•목과 ì—°ê´€ëœ ì—°ë½ì²˜ì˜ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} + {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}: ì´ +스트림 í•목과 ì—°ê´€ëœ ì—°ë½ì²˜ì˜ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} 값입니다. </li> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}: ì´ -스트림 í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} + {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}: ì´ +스트림 í•목과 ì—°ê´€ëœ ì›ì‹œ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} 값입니다. </li> </ul> @@ -1887,19 +1887,19 @@ XML íŒŒì¼ <code>res/xml/syncadapter.xml</code>ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 그런가 í• {@code android.provider.ContactsContract.StreamItemsColumns#TEXT} </dt> <dd> - 스트림 í•ëª©ì˜ í…스트로, í•ëª©ì˜ ì†ŒìŠ¤ê°€ 게시한 콘í…ì¸ ë˜ëŠ” -스트림 í•ëª©ì„ ìƒì„±í•˜ëŠ” ìž‘ì—…ì˜ ì„¤ëª… 중 하나입니다. ì´ ì—´ì—는 -{@link android.text.Html#fromHtml(String) fromHtml()}ê°€ ë Œë”ë§í• 수 있는 ëª¨ë“ ì„œì‹ê³¼ í¬í•¨ëœ 리소스 ì´ë¯¸ì§€ê°€ -ë“¤ì–´ìžˆì„ ìˆ˜ 있습니다. ì œê³µìžëŠ” 긴 콘í…ì¸ ë¥¼ + 스트림 í•ëª©ì˜ í…스트로, í•ëª©ì˜ ì†ŒìŠ¤ê°€ 게시한 콘í…ì¸ ë˜ëŠ” +스트림 í•ëª©ì„ ìƒì„±í•˜ëŠ” ìž‘ì—…ì˜ ì„¤ëª… 중 하나입니다. ì´ ì—´ì—는 +{@link android.text.Html#fromHtml(String) fromHtml()}ê°€ ë Œë”ë§í• 수 있는 ëª¨ë“ ì„œì‹ê³¼ í¬í•¨ëœ 리소스 ì´ë¯¸ì§€ê°€ +ë“¤ì–´ìžˆì„ ìˆ˜ 있습니다. ì œê³µìžëŠ” 긴 콘í…ì¸ ë¥¼ ìžë¥´ê±°ë‚˜ ìƒëžµí• 수 있지만, 가능하면 태그를 ì†ìƒì‹œí‚¤ëŠ” ê²ƒì€ í”¼í•˜ë ¤ ë“니다. </dd> <dt> {@code android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP} </dt> <dd> - 스트림 í•ëª©ì´ ì‚½ìž…ë˜ê±°ë‚˜ ì—…ë°ì´íŠ¸ëœ ì‹œê°„ì´ ë“¤ì–´ìžˆëŠ” í…스트 문ìžì—´ë¡œ, 형ì‹ì€ -epoch ì´í›„ <em>밀리초</em> 형태를 취합니다. ì´ ì—´ì„ ê´€ë¦¬í• ì±…ìž„ì€ -스트림 í•ëª©ì„ ì‚½ìž… ë˜ëŠ” ì—…ë°ì´íŠ¸í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있으며, ì´ê²ƒì€ ì—°ë½ì²˜ ì œê³µìžê°€ ìžë™ìœ¼ë¡œ + 스트림 í•ëª©ì´ ì‚½ìž…ë˜ê±°ë‚˜ ì—…ë°ì´íŠ¸ëœ ì‹œê°„ì´ ë“¤ì–´ìžˆëŠ” í…스트 문ìžì—´ë¡œ, 형ì‹ì€ +epoch ì´í›„ <em>밀리초</em> 형태를 취합니다. ì´ ì—´ì„ ê´€ë¦¬í• ì±…ìž„ì€ +스트림 í•ëª©ì„ ì‚½ìž… ë˜ëŠ” ì—…ë°ì´íŠ¸í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있으며, ì´ê²ƒì€ ì—°ë½ì²˜ ì œê³µìžê°€ ìžë™ìœ¼ë¡œ ìœ ì§€ 관리하지 않습니다. </dd> </dl> @@ -1911,18 +1911,18 @@ epoch ì´í›„ <em>밀리초</em> 형태를 취합니다. ì´ ì—´ì„ ê´€ë¦¬í• ì±… 리소스를 연결하ì‹ì‹œì˜¤. </p> <p> - {@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì—ë„ + {@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì—ë„ ë™ê¸°í™” 어댑터가 ë…ì ì 으로 사용하는 {@code android.provider.ContactsContract.StreamItemsColumns#SYNC1}ì—서 -{@code android.provider.ContactsContract.StreamItemsColumns#SYNC4}ê¹Œì§€ì˜ ì—´ì´ +{@code android.provider.ContactsContract.StreamItemsColumns#SYNC4}ê¹Œì§€ì˜ ì—´ì´ ë“¤ì–´ìžˆìŠµë‹ˆë‹¤. </p> <h3 id="StreamPhotos">소셜 스트림 사진</h3> <p> - {@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì€ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ -ì‚¬ì§„ì„ ì €ìž¥í•©ë‹ˆë‹¤. í…Œì´ë¸”ì˜ + {@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì€ ìŠ¤íŠ¸ë¦¼ í•목과 ì—°ê´€ëœ +ì‚¬ì§„ì„ ì €ìž¥í•©ë‹ˆë‹¤. í…Œì´ë¸”ì˜ {@code android.provider.ContactsContract.StreamItemPhotosColumns#STREAM_ITEM_ID} ì—´ì€ -{@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì˜ {@code android.provider.BaseColumns#_ID} ì—´ì— ìžˆëŠ” ê°’ê³¼ -ì—°ê²°ë©ë‹ˆë‹¤. 사진 참조는 +{@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì˜ {@code android.provider.BaseColumns#_ID} ì—´ì— ìžˆëŠ” ê°’ê³¼ +ì—°ê²°ë©ë‹ˆë‹¤. 사진 참조는 ë‹¤ìŒ ì—´ì˜ í…Œì´ë¸”ì— ì €ìž¥ë©ë‹ˆë‹¤. </p> <dl> @@ -1931,21 +1931,21 @@ epoch ì´í›„ <em>밀리초</em> 형태를 취합니다. ì´ ì—´ì„ ê´€ë¦¬í• ì±… </dt> <dd> ì‚¬ì§„ì˜ ë°”ì´ë„ˆë¦¬ 표현으로, ì œê³µìžê°€ ì €ìž¥í•˜ê³ í‘œì‹œí•˜ê¸° 위해 í¬ê¸°ë¥¼ ì¡°ì •í•œ 것입니다. - ì´ ì—´ì€ ì‚¬ì§„ì„ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©í•œ ì—°ë½ì²˜ ì œê³µìžì˜ ì´ì „ ë²„ì „ê³¼ -호환ë©ë‹ˆë‹¤. 그러나 현재 ë²„ì „ì—서는 -ì´ ì—´ì„ ì‚¬ì§„ ì €ìž¥ì— ì‚¬ìš©í•˜ë©´ 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , -{@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} ë˜ëŠ” + ì´ ì—´ì€ ì‚¬ì§„ì„ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©í•œ ì—°ë½ì²˜ ì œê³µìžì˜ ì´ì „ ë²„ì „ê³¼ +호환ë©ë‹ˆë‹¤. 그러나 현재 ë²„ì „ì—서는 +ì´ ì—´ì„ ì‚¬ì§„ ì €ìž¥ì— ì‚¬ìš©í•˜ë©´ 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , +{@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} ë˜ëŠ” {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI}( -ë‹¤ìŒ í•목ì—서 ë‘ ê°€ì§€ ëª¨ë‘ ì„¤ëª…)를 사용하여 ì‚¬ì§„ì„ íŒŒì¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤. 지금 ì´ ì—´ì—는 +ë‹¤ìŒ í•목ì—서 ë‘ ê°€ì§€ ëª¨ë‘ ì„¤ëª…)를 사용하여 ì‚¬ì§„ì„ íŒŒì¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤. 지금 ì´ ì—´ì—는 ì‚¬ì§„ì˜ ë¯¸ë¦¬ 보기가 들어있어 ì½ê¸° ìž‘ì—…ì— ì‚¬ìš©í• ìˆ˜ 있습니다. </dd> <dt> {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} </dt> <dd> - ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì‚¬ì§„ì˜ ìˆ«ìž ì‹ë³„ìžìž…니다. ì´ ê°’ì„ -ìƒìˆ˜ {@link android.provider.ContactsContract.DisplayPhoto#CONTENT_URI DisplayPhoto.CONTENT_URI}ì— ì¶”ê°€í•˜ì—¬ -í•˜ë‚˜ì˜ ì‚¬ì§„ 파ì¼ì„ 가리키는 콘í…ì¸ URI를 ê°€ì ¸ì˜¨ 다ìŒ, + ì›ì‹œ ì—°ë½ì²˜ì— 대한 ì‚¬ì§„ì˜ ìˆ«ìž ì‹ë³„ìžìž…니다. ì´ ê°’ì„ +ìƒìˆ˜ {@link android.provider.ContactsContract.DisplayPhoto#CONTENT_URI DisplayPhoto.CONTENT_URI}ì— ì¶”ê°€í•˜ì—¬ +í•˜ë‚˜ì˜ ì‚¬ì§„ 파ì¼ì„ 가리키는 콘í…ì¸ URI를 ê°€ì ¸ì˜¨ 다ìŒ, {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String) openAssetFileDescriptor()}를 호출하여 사진 파ì¼ì— 대한 í•¸ë“¤ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. </dd> @@ -1965,91 +1965,91 @@ openAssetFileDescriptor()}를 호출하면 사진 파ì¼ì— 대한 í•¸ë“¤ì„ ê°€ <ul> <li> ì´ í…Œì´ë¸”ì—는 추가 액세스 ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. 여기서 ì½ê¸° ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— -{@code android.Manifest.permission#READ_SOCIAL_STREAM} ê¶Œí•œì´ ìžˆì–´ì•¼ 합니다. 여기서 ìˆ˜ì • ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë ¤ë©´ +{@code android.Manifest.permission#READ_SOCIAL_STREAM} ê¶Œí•œì´ ìžˆì–´ì•¼ 합니다. 여기서 ìˆ˜ì • ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— {@code android.Manifest.permission#WRITE_SOCIAL_STREAM} ê¶Œí•œì´ ìžˆì–´ì•¼ 합니다. </li> <li> - {@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì˜ ê²½ìš°, ê° ì›ì‹œ ì—°ë½ì²˜ì— ì €ìž¥ë˜ëŠ” -í–‰ 개수가 ì œí•œë˜ì–´ 있습니다. ì´ í•œê³„ì— ë„달하면, + {@code android.provider.ContactsContract.StreamItems} í…Œì´ë¸”ì˜ ê²½ìš°, ê° ì›ì‹œ ì—°ë½ì²˜ì— ì €ìž¥ë˜ëŠ” +í–‰ 개수가 ì œí•œë˜ì–´ 있습니다. ì´ í•œê³„ì— ë„달하면, ì—°ë½ì²˜ ì œê³µìžê°€ 새 스트림 í•목 ì—´ì— í•„ìš”í•œ ê³µê°„ì„ ë§Œë“¤ì–´ì•¼ 합니다. -ì´ë•Œ 가장 ì˜¤ëž˜ëœ {@code android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP}ê°€ -있는 행부터 ìžë™ìœ¼ë¡œ ì‚ì œí•˜ëŠ” ë°©ë²•ì„ ì”니다. ì´ í•œê³„ë¥¼ -ê°€ì ¸ì˜¤ë ¤ë©´, 콘í…ì¸ URI -{@code android.provider.ContactsContract.StreamItems#CONTENT_LIMIT_URI}ì— ì¿¼ë¦¬ë¥¼ 발행합니다. 콘í…ì¸ -URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ ë©ë‹ˆë‹¤. ì´ ì¿¼ë¦¬ëŠ” -í–‰ì´ í•˜ë‚˜ 들어 있는 커서를 반환하며, +ì´ë•Œ 가장 ì˜¤ëž˜ëœ {@code android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP}ê°€ +있는 행부터 ìžë™ìœ¼ë¡œ ì‚ì œí•˜ëŠ” ë°©ë²•ì„ ì”니다. ì´ í•œê³„ë¥¼ +ê°€ì ¸ì˜¤ë ¤ë©´, 콘í…ì¸ URI +{@code android.provider.ContactsContract.StreamItems#CONTENT_LIMIT_URI}ì— ì¿¼ë¦¬ë¥¼ 발행합니다. 콘í…ì¸ +URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ ë©ë‹ˆë‹¤. ì´ ì¿¼ë¦¬ëŠ” +í–‰ì´ í•˜ë‚˜ 들어 있는 커서를 반환하며, {@code android.provider.ContactsContract.StreamItems#MAX_ITEMS} ì—´ 하나가 수반ë©ë‹ˆë‹¤. </li> </ul> <p> - {@code android.provider.ContactsContract.StreamItems.StreamItemPhotos} í´ëž˜ìŠ¤ëŠ” -스트림 í•목 í•˜ë‚˜ì˜ ì‚¬ì§„ í–‰ì„ í¬í•¨í•˜ëŠ” {@code android.provider.ContactsContract.StreamItemPhotos}ì˜ + {@code android.provider.ContactsContract.StreamItems.StreamItemPhotos} í´ëž˜ìŠ¤ëŠ” +스트림 í•목 í•˜ë‚˜ì˜ ì‚¬ì§„ í–‰ì„ í¬í•¨í•˜ëŠ” {@code android.provider.ContactsContract.StreamItemPhotos}ì˜ í•˜ìœ„ í…Œì´ë¸”ì„ ì •ì˜í•©ë‹ˆë‹¤. </p> <h3 id="SocialStreamInteraction">소셜 스트림 ìƒí˜¸ 작용</h3> <p> - ì—°ë½ì²˜ ì œê³µìžê°€ 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ 함께 관리하는 소셜 스트림 ë°ì´í„°ëŠ” -소셜 네트워킹 시스템과 + ì—°ë½ì²˜ ì œê³µìžê°€ 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ 함께 관리하는 소셜 스트림 ë°ì´í„°ëŠ” +소셜 네트워킹 시스템과 기존 ì—°ë½ì²˜ë¥¼ 연결하는 ê°•ë ¥í•œ ë°©ë²•ì„ ì œê³µí•©ë‹ˆë‹¤. ì‚¬ìš©í• ìˆ˜ 있는 ê¸°ëŠ¥ì€ ë‹¤ìŒê³¼ 같습니다. </p> <ul> <li> - 소셜 네트워킹 서비스를 ë™ê¸°í™” 어댑터로 ì—°ë½ì²˜ ì œê³µìžì— ë™ê¸°í™”함으로ì¨, -ì‚¬ìš©ìž ì—°ë½ì²˜ì˜ 최근 활ë™ì„ ê²€ìƒ‰í•˜ê³ ì´ë¥¼ -{@code android.provider.ContactsContract.StreamItems} ë° + 소셜 네트워킹 서비스를 ë™ê¸°í™” 어댑터로 ì—°ë½ì²˜ ì œê³µìžì— ë™ê¸°í™”함으로ì¨, +ì‚¬ìš©ìž ì—°ë½ì²˜ì˜ 최근 활ë™ì„ ê²€ìƒ‰í•˜ê³ ì´ë¥¼ +{@code android.provider.ContactsContract.StreamItems} ë° {@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì— ì €ìž¥í•´ ë‘ì–´ ë‚˜ì¤‘ì— ì‚¬ìš©í• ìˆ˜ 있습니다. </li> <li> - ì •ê¸° ë™ê¸°í™” 외ì—ë„ ì‚¬ìš©ìžê°€ ë³¼ ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ë©´ ë™ê¸°í™” 어댑터를 트리거하여 -추가 ë°ì´í„°ë¥¼ 검색하게 í• ìˆ˜ 있습니다. ì´ë ‡ê²Œ 하면 ë™ê¸°í™” 어댑터가 + ì •ê¸° ë™ê¸°í™” 외ì—ë„ ì‚¬ìš©ìžê°€ ë³¼ ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ë©´ ë™ê¸°í™” 어댑터를 트리거하여 +추가 ë°ì´í„°ë¥¼ 검색하게 í• ìˆ˜ 있습니다. ì´ë ‡ê²Œ 하면 ë™ê¸°í™” 어댑터가 해당 ì—°ë½ì²˜ì˜ ê³ í•´ìƒë„ 사진과 가장 최근 스트림 í•ëª©ì„ ê²€ìƒ‰í• ìˆ˜ 있습니다. </li> <li> - 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì—°ë½ì²˜ ì œê³µìžì— ì•Œë¦¼ì„ ë“±ë¡í•˜ë©´, -ì—°ë½ì²˜ê°€ 열람ë 때 ì¸í…트를 <em>ìˆ˜ì‹ </em>í•˜ê³ , -ê·¸ 시ì ì— ê°œë°œìžì˜ 서비스로부터 ì—°ë½ì²˜ì˜ ìƒíƒœë¥¼ ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. ì´ ë°©ë²•ì„ ì‚¬ìš©í•˜ë©´ ë™ê¸°í™” 어댑터로 + 기기 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì—°ë½ì²˜ ì œê³µìžì— ì•Œë¦¼ì„ ë“±ë¡í•˜ë©´, +ì—°ë½ì²˜ê°€ 열람ë 때 ì¸í…트를 <em>ìˆ˜ì‹ </em>í•˜ê³ , +ê·¸ 시ì ì— ê°œë°œìžì˜ 서비스로부터 ì—°ë½ì²˜ì˜ ìƒíƒœë¥¼ ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. ì´ ë°©ë²•ì„ ì‚¬ìš©í•˜ë©´ ë™ê¸°í™” 어댑터로 ì™„ì „ ë™ê¸°í™”를 수행하는 것보다 ë¹ ë¥´ê³ ëŒ€ì—íë„ ì 게 사용합니다. </li> <li> - 사용ìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 보면서 ì—¬ëŸ¬ë¶„ì˜ ì†Œì…œ 네트워킹 ì„œë¹„ìŠ¤ì— -ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ì´ëŠ” "ì—°ë½ì²˜ 초대" 기능으로 ì‚¬ìš©í• ìˆ˜ 있습니다. -ì—°ë½ì²˜ 초대 ê¸°ëŠ¥ì€ ê¸°ì¡´ ì—°ë½ì²˜ë¥¼ 네트워í¬ì— 추가하는 액티비티와 -ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì œê³µí•˜ëŠ” XML 파ì¼, + 사용ìžëŠ” ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 보면서 ì—¬ëŸ¬ë¶„ì˜ ì†Œì…œ 네트워킹 ì„œë¹„ìŠ¤ì— +ì—°ë½ì²˜ë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ì´ëŠ” "ì—°ë½ì²˜ 초대" 기능으로 ì‚¬ìš©í• ìˆ˜ 있습니다. +ì—°ë½ì²˜ 초대 ê¸°ëŠ¥ì€ ê¸°ì¡´ ì—°ë½ì²˜ë¥¼ 네트워í¬ì— 추가하는 액티비티와 +ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì œê³µí•˜ëŠ” XML 파ì¼, ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 세부 ì •ë³´ê°€ í¬í•¨ëœ ì—°ë½ì²˜ ì œê³µìžë¥¼ 조합하여 활성화합니다. </li> </ul> <p> - ì—°ë½ì²˜ ì œê³µìžë¡œ 스트림 í•ëª©ì„ ì •ê¸° ë™ê¸°í™”하는 ë°©ë²•ì€ -다른 ë™ê¸°í™”와 같습니다. ë™ê¸°í™”ì— ê´€í•œ ìžì„¸í•œ ë‚´ìš©ì€ -<a href="#SyncAdapters">ì—°ë½ì²˜ ì œê³µìž ë™ê¸°í™” 어댑터</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì•Œë¦¼ì„ ë“±ë¡í•˜ê³ ì—°ë½ì²˜ë¥¼ 초대하는 ë°©ë²•ì€ + ì—°ë½ì²˜ ì œê³µìžë¡œ 스트림 í•ëª©ì„ ì •ê¸° ë™ê¸°í™”하는 ë°©ë²•ì€ +다른 ë™ê¸°í™”와 같습니다. ë™ê¸°í™”ì— ê´€í•œ ìžì„¸í•œ ë‚´ìš©ì€ +<a href="#SyncAdapters">ì—°ë½ì²˜ ì œê³µìž ë™ê¸°í™” 어댑터</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì•Œë¦¼ì„ ë“±ë¡í•˜ê³ ì—°ë½ì²˜ë¥¼ 초대하는 ë°©ë²•ì€ ë‹¤ìŒ ë‘ ì„¹ì…˜ì—서 다룰 것입니다. </p> <h4>소셜 네트워킹 보기를 처리하기 위한 등ë¡</h4> <p> - ë™ê¸°í™” 어댑터를 등ë¡í•˜ì—¬ 사용ìžê°€ ë™ê¸°í™” 어댑터ì—서 관리하는 ì—°ë½ì²˜ë¥¼ ë³¼ 때 ì•Œë¦¼ì„ + ë™ê¸°í™” 어댑터를 등ë¡í•˜ì—¬ 사용ìžê°€ ë™ê¸°í™” 어댑터ì—서 관리하는 ì—°ë½ì²˜ë¥¼ ë³¼ 때 ì•Œë¦¼ì„ ìˆ˜ì‹ í•˜ëŠ” 방법: </p> <ol> <li> - 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ + 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ ë§Œë“니다. ì´ë¯¸ ì´ íŒŒì¼ì´ 있다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> <li> - ì´ íŒŒì¼ì—서, + ì´ íŒŒì¼ì—서, <code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code> 요소를 추가합니다. ì´ ìš”ì†Œê°€ ì´ë¯¸ 존재한다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> <li> - 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 + 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì—°ë½ì²˜ 세부 ì •ë³´ 페ì´ì§€ë¥¼ ì—´ë©´ ì•Œë¦¼ì„ ë³´ë‚´ëŠ” 서비스를 등ë¡í•˜ë ¤ë©´, -<code>viewContactNotifyService="<em>serviceclass</em>"</code> ì†ì„±ì„ ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. -ì´ ìš”ì†Œì—서 <code><em>serviceclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì„œë¹„ìŠ¤ì˜ -ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. 알림 ì„œë¹„ìŠ¤ì˜ ê²½ìš°, -{@link android.app.IntentService}를 확장하는 í´ëž˜ìŠ¤ë¥¼ 사용하여 서비스가 ì¸í…트를 ìˆ˜ì‹ í•˜ë„ë¡ -허용합니다. ìˆ˜ì‹ ë˜ëŠ” ì¸í…íŠ¸ì˜ ë°ì´í„°ì—는 -사용ìžê°€ í´ë¦í•œ ì›ì‹œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URIê°€ 들어있습니다. 알림 서비스ì—서 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ë°”ì¸ë”©í•œ ë‹¤ìŒ ë™ê¸°í™” 어댑터를 호출하여 +<code>viewContactNotifyService="<em>serviceclass</em>"</code> ì†ì„±ì„ ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. +ì´ ìš”ì†Œì—서 <code><em>serviceclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì„œë¹„ìŠ¤ì˜ +ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. 알림 ì„œë¹„ìŠ¤ì˜ ê²½ìš°, +{@link android.app.IntentService}를 확장하는 í´ëž˜ìŠ¤ë¥¼ 사용하여 서비스가 ì¸í…트를 ìˆ˜ì‹ í•˜ë„ë¡ +허용합니다. ìˆ˜ì‹ ë˜ëŠ” ì¸í…íŠ¸ì˜ ë°ì´í„°ì—는 +사용ìžê°€ í´ë¦í•œ ì›ì‹œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URIê°€ 들어있습니다. 알림 서비스ì—서 ë™ê¸°í™” ì–´ëŒ‘í„°ì— ë°”ì¸ë”©í•œ ë‹¤ìŒ ë™ê¸°í™” 어댑터를 호출하여 ì›ì‹œ ì—°ë½ì²˜ì˜ ë°ì´í„°ë¥¼ ì—…ë°ì´íŠ¸í• ìˆ˜ 있습니다. </li> </ol> @@ -2058,31 +2058,31 @@ URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ </p> <ol> <li> - 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ + 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ ë§Œë“니다. ì´ë¯¸ ì´ íŒŒì¼ì´ 있다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> <li> - ì´ íŒŒì¼ì—서, + ì´ íŒŒì¼ì—서, <code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code> 요소를 추가합니다. ì´ ìš”ì†Œê°€ ì´ë¯¸ 존재한다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> <li> - 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 스트림 í•ëª©ì„ í´ë¦í–ˆì„ 때 -ì²˜ë¦¬í• ì•¡í‹°ë¹„í‹°ë¥¼ 등ë¡í•˜ë ¤ë©´, -<code>viewStreamItemActivity="<em>activityclass</em>"</code> ì†ì„±ì„ ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. -ì´ ìš”ì†Œì—서 <code><em>activityclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì•¡í‹°ë¹„í‹°ì˜ + 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 스트림 í•ëª©ì„ í´ë¦í–ˆì„ 때 +ì²˜ë¦¬í• ì•¡í‹°ë¹„í‹°ë¥¼ 등ë¡í•˜ë ¤ë©´, +<code>viewStreamItemActivity="<em>activityclass</em>"</code> ì†ì„±ì„ ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. +ì´ ìš”ì†Œì—서 <code><em>activityclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. </li> <li> - 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 스트림 ì‚¬ì§„ì„ í´ë¦í–ˆì„ 때 + 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 스트림 ì‚¬ì§„ì„ í´ë¦í–ˆì„ 때 ì²˜ë¦¬í• ì•¡í‹°ë¹„í‹°ë¥¼ 등ë¡í•˜ë ¤ë©´, <code>viewStreamItemPhotoActivity="<em>activityclass</em>"</code> ì†ì„±ì„ ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. -ì´ ìš”ì†Œì—서 <code><em>activityclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì•¡í‹°ë¹„í‹°ì˜ +ì´ ìš”ì†Œì—서 <code><em>activityclass</em></code>는 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì¸í…트를 ìˆ˜ì‹ í•˜ëŠ” ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. </li> </ol> <p> - <code><ContactsAccountType></code> 요소는 + <code><ContactsAccountType></code> 요소는 <a href="#SocialStreamAcctType"><ContactsAccountType> 요소</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p> @@ -2091,17 +2091,17 @@ URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ </p> <h4>소셜 네트워킹 서비스로 ìƒí˜¸ 작용</h4> <p> - 사용ìžëŠ” 소셜 네트워킹 사ì´íŠ¸ì— ì—°ë½ì²˜ë¥¼ ì´ˆëŒ€í• ë•Œ -ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ , 개발ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì— ì•¡í‹°ë¹„í‹° 중 하나로 ì—°ë½ì²˜ë¥¼ 초대하는 ì¸í…트를 + 사용ìžëŠ” 소셜 네트워킹 사ì´íŠ¸ì— ì—°ë½ì²˜ë¥¼ ì´ˆëŒ€í• ë•Œ +ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ , 개발ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì•±ì— ì•¡í‹°ë¹„í‹° 중 하나로 ì—°ë½ì²˜ë¥¼ 초대하는 ì¸í…트를 보내게 í• ìˆ˜ 있습니다. ì´ë ‡ê²Œ ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ ë‹¤ìŒê³¼ 같습니다. </p> <ol> <li> - 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ + 프로ì íŠ¸ì˜ <code>res/xml/</code> ë””ë ‰í„°ë¦¬ì— <code>contacts.xml</code> 파ì¼ì„ ë§Œë“니다. ì´ë¯¸ ì´ íŒŒì¼ì´ 있다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> <li> - ì´ íŒŒì¼ì—서, + ì´ íŒŒì¼ì—서, <code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code> 요소를 추가합니다. ì´ ìš”ì†Œê°€ ì´ë¯¸ 존재한다면 ì´ ì ˆì°¨ë¥¼ ê±´ë„ˆë›°ì–´ë„ ë©ë‹ˆë‹¤. </li> @@ -2113,25 +2113,25 @@ URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ <code>inviteContactActionLabel="@string/<em>invite_action_label</em>"</code> </li> </ul> - <code><em>activityclass</em></code> ê°’ì€ ì¸í…트를 ìˆ˜ì‹ í•´ì•¼ 하는 ì•¡í‹°ë¹„í‹°ì˜ + <code><em>activityclass</em></code> ê°’ì€ ì¸í…트를 ìˆ˜ì‹ í•´ì•¼ 하는 ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. <code><em>invite_action_label</em></code> -ê°’ì€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 <strong>ì—°ê²° 추가</strong> ë©”ë‰´ì— +ê°’ì€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 <strong>ì—°ê²° 추가</strong> ë©”ë‰´ì— í‘œì‹œë˜ëŠ” í…스트 문ìžì—´ìž…니다. </li> </ol> <p class="note"> - <strong>ì°¸ê³ :</strong> <code>ContactsSource</code>는 + <strong>ì°¸ê³ :</strong> <code>ContactsSource</code>는 <code>ContactsAccountType</code>ì— ëŒ€í•˜ì—¬ ì´ì œ 사용하지 않는 태그 ì´ë¦„입니다. </p> <h3 id="ContactsFile">contacts.xml 참조</h3> <p> - <code>contacts.xml</code> 파ì¼ì—는 XML 요소가 들어있어 개발ìžì˜ ë™ê¸°í™” 어댑터와 -ì• í”Œë¦¬ì¼€ì´ì…˜, ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì—°ë½ì²˜ ì œê³µìž ì‚¬ì´ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì œì–´í•©ë‹ˆë‹¤. ì´ëŸ° + <code>contacts.xml</code> 파ì¼ì—는 XML 요소가 들어있어 개발ìžì˜ ë™ê¸°í™” 어댑터와 +ì• í”Œë¦¬ì¼€ì´ì…˜, ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì—°ë½ì²˜ ì œê³µìž ì‚¬ì´ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì œì–´í•©ë‹ˆë‹¤. ì´ëŸ° 요소는 ë‹¤ìŒ ì„¹ì…˜ì— ì„¤ëª…ë˜ì–´ 있습니다. </p> <h4 id="SocialStreamAcctType"><ContactsAccountType> 요소</h4> <p> - <code><ContactsAccountType></code>ìš” 요소는 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ + <code><ContactsAccountType></code>ìš” 요소는 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì œì–´í•©ë‹ˆë‹¤. ì´ ìš”ì†Œì—는 ë‹¤ìŒ êµ¬ë¬¸ì´ ìžˆìŠµë‹ˆë‹¤. </p> <pre> @@ -2161,12 +2161,12 @@ URI를 뺀 나머지 ëª¨ë“ ì¸ìˆ˜ëŠ” <code>null</code>로 ì„¤ì •í•œ 채 ë‘ë©´ <strong>설명:</strong> </p> <p> - 사용ìžê°€ ì—°ë½ì²˜ 중 하나를 소셜 네트워í¬ì— ì´ˆëŒ€í•˜ê³ , -소셜 네트워킹 ìŠ¤íŠ¸ë¦¼ì´ ì—…ë°ì´íЏë˜ë©´ 사용ìžì—게 알리는 ë“±ì˜ ìž‘ì—…ì„ í—ˆìš©í•˜ëŠ” + 사용ìžê°€ ì—°ë½ì²˜ 중 하나를 소셜 네트워í¬ì— ì´ˆëŒ€í•˜ê³ , +소셜 네트워킹 ìŠ¤íŠ¸ë¦¼ì´ ì—…ë°ì´íЏë˜ë©´ 사용ìžì—게 알리는 ë“±ì˜ ìž‘ì—…ì„ í—ˆìš©í•˜ëŠ” Android 구성 요소와 UI ë ˆì´ë¸”ì„ ì„ ì–¸í•©ë‹ˆë‹¤. </p> <p> - ì†ì„± ì ‘ë‘사 <code>android:</code>는 + ì†ì„± ì ‘ë‘사 <code>android:</code>는 <code><ContactsAccountType></code>ì˜ ì†ì„±ì—는 필요하지 않다는 ì ì„ ëˆˆì—¬ê²¨ë³´ì‹ì‹œì˜¤. </p> <p> @@ -2175,48 +2175,48 @@ Android 구성 요소와 UI ë ˆì´ë¸”ì„ ì„ ì–¸í•©ë‹ˆë‹¤. <dl> <dt>{@code inviteContactActivity}</dt> <dd> - 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 -<strong>ì—°ê²° 추가</strong>를 ì„ íƒí–ˆì„ 때 í™œì„±í™”í•˜ê³ ìž í•˜ëŠ” + 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 +<strong>ì—°ê²° 추가</strong>를 ì„ íƒí–ˆì„ 때 í™œì„±í™”í•˜ê³ ìž í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. </dd> <dt>{@code inviteContactActionLabel}</dt> <dd> - <strong>ì—°ê²° 추가</strong> ë©”ë‰´ì˜ + <strong>ì—°ê²° 추가</strong> ë©”ë‰´ì˜ {@code inviteContactActivity}ì—서 ì§€ì •ëœ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ 표시ë˜ëŠ” í…스트 문ìžì—´ìž…니다. - 예를 들어, 문ìžì—´ "ì œ 네트워í¬ë¥¼ 팔로우하세요"를 ì‚¬ìš©í• ìˆ˜ 있습니다. ì´ ë ˆì´ë¸”ì— ëŒ€í•œ 문ìžì—´ 리소스 + 예를 들어, 문ìžì—´ "ì œ 네트워í¬ë¥¼ 팔로우하세요"를 ì‚¬ìš©í• ìˆ˜ 있습니다. ì´ ë ˆì´ë¸”ì— ëŒ€í•œ 문ìžì—´ 리소스 ì‹ë³„ìžë¥¼ ì‚¬ìš©í• ìˆ˜ 있습니다. </dd> <dt>{@code viewContactNotifyService}</dt> <dd> - 사용ìžê°€ ì—°ë½ì²˜ë¥¼ ë³¼ 때 ì•Œë¦¼ì„ ìˆ˜ì‹ í•´ì•¼ 하는 -ì• í”Œë¦¬ì¼€ì´ì…˜ ì„œë¹„ìŠ¤ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. ì´ ì•Œë¦¼ì€ -ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì „ì†¡í•©ë‹ˆë‹¤. ì´ê²ƒì„ 사용하면 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°ì´í„° 집약ì ì¸ ìž‘ì—…ì„ í•„ìš”í• ë•Œê¹Œì§€ -ì—°ê¸°í• ìˆ˜ 있습니다. 예를 들어, 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ -ì—°ë½ì²˜ì˜ ê³ í•´ìƒë„ 사진과 가장 최근 소셜 스트림 í•ëª©ì„ ì½ì–´ì„œ í‘œì‹œí•¨ìœ¼ë¡œì¨ -ì´ ì•Œë¦¼ì— ì‘ë‹µí• ìˆ˜ 있습니다. ì´ ê¸°ëŠ¥ì€ -<a href="#SocialStreamInteraction">소셜 스트림 ìƒí˜¸ 작용</a>ì— ìƒì„¸ížˆ 설명ë˜ì–´ 있습니다. 알림 ì„œë¹„ìŠ¤ì˜ ì˜ˆì‹œë¥¼ + 사용ìžê°€ ì—°ë½ì²˜ë¥¼ ë³¼ 때 ì•Œë¦¼ì„ ìˆ˜ì‹ í•´ì•¼ 하는 +ì• í”Œë¦¬ì¼€ì´ì…˜ ì„œë¹„ìŠ¤ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. ì´ ì•Œë¦¼ì€ +ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì „ì†¡í•©ë‹ˆë‹¤. ì´ê²ƒì„ 사용하면 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°ì´í„° 집약ì ì¸ ìž‘ì—…ì„ í•„ìš”í• ë•Œê¹Œì§€ +ì—°ê¸°í• ìˆ˜ 있습니다. 예를 들어, 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +ì—°ë½ì²˜ì˜ ê³ í•´ìƒë„ 사진과 가장 최근 소셜 스트림 í•ëª©ì„ ì½ì–´ì„œ í‘œì‹œí•¨ìœ¼ë¡œì¨ +ì´ ì•Œë¦¼ì— ì‘ë‹µí• ìˆ˜ 있습니다. ì´ ê¸°ëŠ¥ì€ +<a href="#SocialStreamInteraction">소셜 스트림 ìƒí˜¸ 작용</a>ì— ìƒì„¸ížˆ 설명ë˜ì–´ 있습니다. 알림 ì„œë¹„ìŠ¤ì˜ ì˜ˆì‹œë¥¼ ë³´ë ¤ë©´ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a> - 샘플 ì•±ì— ìžˆëŠ” <code>NotifierService.java</code> 파ì¼ì„ + 샘플 ì•±ì— ìžˆëŠ” <code>NotifierService.java</code> 파ì¼ì„ 확ì¸í•©ë‹ˆë‹¤. </dd> <dt>{@code viewGroupActivity}</dt> <dd> - 그룹 ì •ë³´ë¥¼ í‘œì‹œí• ìˆ˜ 있는 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ -ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 그룹 ë ˆì´ë¸”ì„ í´ë¦í•˜ë©´, + 그룹 ì •ë³´ë¥¼ í‘œì‹œí• ìˆ˜ 있는 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ +ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. 사용ìžê°€ ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 그룹 ë ˆì´ë¸”ì„ í´ë¦í•˜ë©´, ì´ ì•¡í‹°ë¹„í‹°ì˜ UIê°€ 표시ë©ë‹ˆë‹¤. </dd> <dt>{@code viewGroupActionLabel}</dt> <dd> - 사용ìžê°€ 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê·¸ë£¹ì„ ì‚´íŽ´ë³¼ 수 있ë„ë¡ í•´ì£¼ëŠ” UI ì œì–´ì— ëŒ€í•´ + 사용ìžê°€ 개발ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê·¸ë£¹ì„ ì‚´íŽ´ë³¼ 수 있ë„ë¡ í•´ì£¼ëŠ” UI ì œì–´ì— ëŒ€í•´ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 표시하는 ë ˆì´ë¸”입니다. <p> - 예를 들어, ê¸°ê¸°ì— Google+ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ì¹˜í•˜ê³ -Google+를 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™”하면, Google+ 서í´ì´ -ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <strong>그룹</strong> íƒì— 표시ë˜ëŠ” ê²ƒì„ ë³¼ 수 있습니다. Google+ 서í´ì„ -í´ë¦í•˜ë©´ 해당 서í´ì—서 "그룹"으로 í‘œì‹œëœ ì‚¬ëžŒë“¤ì„ ë³¼ 수 있습니다. ì´ í‘œì‹œì˜ ë§¨ ìœ„ì— -Google+ ì•„ì´ì½˜ì´ 표시ë˜ë©°, ì´ê²ƒì„ í´ë¦í•˜ë©´ ì œì–´ê°€ -Google+ 앱으로 ì „í™˜ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ìž‘ì—…ì„ -{@code viewGroupActivity}로 수행하며, Google+ ì•„ì´ì½˜ì„ + 예를 들어, ê¸°ê¸°ì— Google+ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ì¹˜í•˜ê³ +Google+를 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ë™ê¸°í™”하면, Google+ 서í´ì´ +ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <strong>그룹</strong> íƒì— 표시ë˜ëŠ” ê²ƒì„ ë³¼ 수 있습니다. Google+ 서í´ì„ +í´ë¦í•˜ë©´ 해당 서í´ì—서 "그룹"으로 í‘œì‹œëœ ì‚¬ëžŒë“¤ì„ ë³¼ 수 있습니다. ì´ í‘œì‹œì˜ ë§¨ ìœ„ì— +Google+ ì•„ì´ì½˜ì´ 표시ë˜ë©°, ì´ê²ƒì„ í´ë¦í•˜ë©´ ì œì–´ê°€ +Google+ 앱으로 ì „í™˜ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ìž‘ì—…ì„ +{@code viewGroupActivity}로 수행하며, Google+ ì•„ì´ì½˜ì„ {@code viewGroupActionLabel}ì˜ ê°’ìœ¼ë¡œ 사용합니다. </p> <p> @@ -2225,19 +2225,19 @@ Google+ 앱으로 ì „í™˜ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ìž‘ì—…ì„ </dd> <dt>{@code viewStreamItemActivity}</dt> <dd> - 사용ìžê°€ ì›ì‹œ ì—°ë½ì²˜ì˜ 스트림 í•ëª©ì„ í´ë¦í• 때 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작하는 + 사용ìžê°€ ì›ì‹œ ì—°ë½ì²˜ì˜ 스트림 í•ëª©ì„ í´ë¦í• 때 ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작하는 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. </dd> <dt>{@code viewStreamItemPhotoActivity}</dt> <dd> - 사용ìžê°€ ì›ì‹œ ì—°ë½ì²˜ 스트림 í•ëª©ì˜ ì‚¬ì§„ì„ í´ë¦í• 때 -ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작하는 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ + 사용ìžê°€ ì›ì‹œ ì—°ë½ì²˜ 스트림 í•ëª©ì˜ ì‚¬ì§„ì„ í´ë¦í• 때 +ê¸°ê¸°ì˜ ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 시작하는 ì• í”Œë¦¬ì¼€ì´ì…˜ ì•¡í‹°ë¹„í‹°ì˜ ì™„ì „ížˆ ì •ê·œí™”ëœ í´ëž˜ìФ ì´ë¦„입니다. </dd> </dl> <h4 id="SocialStreamDataKind"><ContactsDataKind> 요소</h4> <p> - <code><ContactsDataKind></code> 요소는 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ UIì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ 표시를 + <code><ContactsDataKind></code> 요소는 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ UIì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ 표시를 ì œì–´í•©ë‹ˆë‹¤. ì´ ìš”ì†Œì—는 ë‹¤ìŒ êµ¬ë¬¸ì´ ìžˆìŠµë‹ˆë‹¤. </p> <pre> @@ -2255,11 +2255,11 @@ Google+ 앱으로 ì „í™˜ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ìž‘ì—…ì„ <strong>설명:</strong> </p> <p> - ì´ ìš”ì†Œë¥¼ 사용하여 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì˜ ì½˜í…ì¸ ë¥¼ -ì›ì‹œ ì—°ë½ì²˜ 세부 ì •ë³´ì˜ ì¼ë¶€ë¡œ 표시하게 합니다. <code><ContactsAccountType></code>ì˜ ê° <code><ContactsDataKind></code> 하위 요소는 -ë™ê¸°í™” 어댑터가 {@link android.provider.ContactsContract.Data}ì— ì¶”ê°€í•˜ëŠ” -ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì˜ ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 개발ìžê°€ 사용하는 ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜• 하나마다 -<code><ContactsDataKind></code> 요소를 하나씩 추가합니다. ë°ì´í„°ë¥¼ + ì´ ìš”ì†Œë¥¼ 사용하여 ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì˜ ì½˜í…ì¸ ë¥¼ +ì›ì‹œ ì—°ë½ì²˜ 세부 ì •ë³´ì˜ ì¼ë¶€ë¡œ 표시하게 합니다. <code><ContactsAccountType></code>ì˜ ê° <code><ContactsDataKind></code> 하위 요소는 +ë™ê¸°í™” 어댑터가 {@link android.provider.ContactsContract.Data}ì— ì¶”ê°€í•˜ëŠ” +ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì˜ ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 개발ìžê°€ 사용하는 ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜• 하나마다 +<code><ContactsDataKind></code> 요소를 하나씩 추가합니다. ë°ì´í„°ë¥¼ 표시하는 ê²ƒì„ ì›ì¹˜ 않는 ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ì´ ìžˆìœ¼ë©´, ì´ ìš”ì†Œë¥¼ 추가하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. </p> <p> @@ -2268,35 +2268,35 @@ Google+ 앱으로 ì „í™˜ë©ë‹ˆë‹¤. ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì´ ìž‘ì—…ì„ <dl> <dt>{@code android:mimeType}</dt> <dd> - {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 -ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ ìœ í˜• 중 하나로 ì§€ì •í•œ ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ìž…ë‹ˆë‹¤. 예를 들어, -<code>vnd.android.cursor.item/vnd.example.locationstatus</code> ê°’ì€ ì—°ë½ì²˜ì˜ 마지막으로 ì•Œë ¤ì§„ 위치를 기ë¡í•˜ëŠ” + {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì—서 +ì‚¬ìš©ìž ì§€ì • ë°ì´í„° í–‰ ìœ í˜• 중 하나로 ì§€ì •í•œ ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ìž…ë‹ˆë‹¤. 예를 들어, +<code>vnd.android.cursor.item/vnd.example.locationstatus</code> ê°’ì€ ì—°ë½ì²˜ì˜ 마지막으로 ì•Œë ¤ì§„ 위치를 기ë¡í•˜ëŠ” ë°ì´í„° í–‰ì— ëŒ€í•œ ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì´ ë 수 있습니다. </dd> <dt>{@code android:icon}</dt> <dd> - ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 개발ìžì˜ ë°ì´í„° ì˜†ì— í‘œì‹œí•˜ëŠ” + ì—°ë½ì²˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 개발ìžì˜ ë°ì´í„° ì˜†ì— í‘œì‹œí•˜ëŠ” Android <a href="{@docRoot}guide/topics/resources/drawable-resource.html">드로어블 리소스</a> -입니다. ì´ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하여 사용ìžì—게 +입니다. ì´ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하여 사용ìžì—게 ë°ì´í„° 출처가 개발ìžì˜ ì„œë¹„ìŠ¤ìž„ì„ ë‚˜íƒ€ë‚´ëŠ” 것입니다. </dd> <dt>{@code android:summaryColumn}</dt> <dd> - ë°ì´í„° í–‰ì—서 검색한 ë‘ ê°œ ê°’ 중ì—서 첫 번째 ê°’ì— ëŒ€í•œ ì—´ ì´ë¦„입니다. ì´ ê°’ì€ -ì´ ë°ì´í„° í–‰ì— ëŒ€í•œ í•ëª©ì˜ ì²« 번째 줄로 표시ë©ë‹ˆë‹¤. 첫 번째 ì¤„ì€ -ë°ì´í„° 요약으로 사용ë˜ëŠ” ê²ƒì´ ë³¸ 목ì ì´ì§€ë§Œ, ì´ê²ƒì€ ì„ íƒ ì‚¬í•입니다. + ë°ì´í„° í–‰ì—서 검색한 ë‘ ê°œ ê°’ 중ì—서 첫 번째 ê°’ì— ëŒ€í•œ ì—´ ì´ë¦„입니다. ì´ ê°’ì€ +ì´ ë°ì´í„° í–‰ì— ëŒ€í•œ í•ëª©ì˜ ì²« 번째 줄로 표시ë©ë‹ˆë‹¤. 첫 번째 ì¤„ì€ +ë°ì´í„° 요약으로 사용ë˜ëŠ” ê²ƒì´ ë³¸ 목ì ì´ì§€ë§Œ, ì´ê²ƒì€ ì„ íƒ ì‚¬í•입니다. <a href="#detailColumn">android:detailColumn</a>ë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </dd> <dt>{@code android:detailColumn}</dt> <dd> ë°ì´í„° í–‰ì—서 검색한 ë‘ ê°œ ê°’ 중ì—서 ë‘ ë²ˆì§¸ ê°’ì— ëŒ€í•œ ì—´ ì´ë¦„입니다. ì´ ê°’ì€ -ì´ ë°ì´í„° í–‰ì— ëŒ€í•œ í•ëª©ì˜ ë‘ ë²ˆì§¸ 줄로 표시ë©ë‹ˆë‹¤. +ì´ ë°ì´í„° í–‰ì— ëŒ€í•œ í•ëª©ì˜ ë‘ ë²ˆì§¸ 줄로 표시ë©ë‹ˆë‹¤. {@code android:summaryColumn}ë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </dd> </dl> <h2 id="AdditionalFeatures">추가 ì—°ë½ì²˜ ì œê³µìž ê¸°ëŠ¥</h2> <p> - ì´ì „ 섹션ì—서 설명한 주요 기능 외ì—ë„ ì—°ë½ì²˜ ì œê³µìžëŠ” ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 다루는 ë° + ì´ì „ 섹션ì—서 설명한 주요 기능 외ì—ë„ ì—°ë½ì²˜ ì œê³µìžëŠ” ì—°ë½ì²˜ ë°ì´í„°ë¥¼ 다루는 ë° ìœ ìš©í•œ ê¸°ëŠ¥ì„ ë§Žì´ ì œê³µí•©ë‹ˆë‹¤. 예를 들면 다ìŒê³¼ 같습니다. </p> <ul> @@ -2305,52 +2305,52 @@ Android <a href="{@docRoot}guide/topics/resources/drawable-resource.html">드로 </ul> <h3 id="Groups">ì—°ë½ì²˜ 그룹</h3> <p> - ì—°ë½ì²˜ ì œê³µìžëŠ” ê´€ë ¨ëœ ì—°ë½ì²˜ ì»¬ë ‰ì…˜ì— -<strong>그룹</strong> ë°ì´í„°ë¡œ ë ˆì´ë¸”ì„ ë¶™ì´ê¸°ë¡œ ì„ íƒí• 수 있습니다. ì‚¬ìš©ìž ê³„ì •ê³¼ ì—°ê´€ëœ ì„œë²„ì—서 -ê·¸ë£¹ì„ ê´€ë¦¬í•˜ê³ ìž í•˜ëŠ” 경우, ê³„ì •ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•œ ë™ê¸°í™” 어댑터가 -ì—°ë½ì²˜ ì œê³µìžì™€ 서버 사ì´ì—서 그룹 ë°ì´í„°ë¥¼ ì „ì†¡í•´ì•¼ 합니다. 사용ìžê°€ 해당 ì„œë²„ì— ìƒˆ ì—°ë½ì²˜ë¥¼ ì¶”ê°€í•˜ê³ + ì—°ë½ì²˜ ì œê³µìžëŠ” ê´€ë ¨ëœ ì—°ë½ì²˜ ì»¬ë ‰ì…˜ì— +<strong>그룹</strong> ë°ì´í„°ë¡œ ë ˆì´ë¸”ì„ ë¶™ì´ê¸°ë¡œ ì„ íƒí• 수 있습니다. ì‚¬ìš©ìž ê³„ì •ê³¼ ì—°ê´€ëœ ì„œë²„ì—서 +ê·¸ë£¹ì„ ê´€ë¦¬í•˜ê³ ìž í•˜ëŠ” 경우, ê³„ì •ì˜ ê³„ì • ìœ í˜•ì— ëŒ€í•œ ë™ê¸°í™” 어댑터가 +ì—°ë½ì²˜ ì œê³µìžì™€ 서버 사ì´ì—서 그룹 ë°ì´í„°ë¥¼ ì „ì†¡í•´ì•¼ 합니다. 사용ìžê°€ 해당 ì„œë²„ì— ìƒˆ ì—°ë½ì²˜ë¥¼ ì¶”ê°€í•˜ê³ ì´ ì—°ë½ì²˜ë¥¼ 새 ê·¸ë£¹ì— ë„£ìœ¼ë©´, ë™ê¸°í™” 어댑터가 해당 새 ê·¸ë£¹ì„ -{@link android.provider.ContactsContract.Groups} í…Œì´ë¸”ì— ì¶”ê°€í•´ì•¼ 합니다. ì›ì‹œ ì—°ë½ì²˜ê°€ ì†í•œ 그룹(ë˜ëŠ” 여러 그룹)ì€ -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì €ìž¥ë˜ë©°, ì´ë•Œ +{@link android.provider.ContactsContract.Groups} í…Œì´ë¸”ì— ì¶”ê°€í•´ì•¼ 합니다. ì›ì‹œ ì—°ë½ì²˜ê°€ ì†í•œ 그룹(ë˜ëŠ” 여러 그룹)ì€ +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì €ìž¥ë˜ë©°, ì´ë•Œ {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership} MIME ìœ í˜•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. </p> <p> - 개발ìžê°€ 서버ì—서 ê°€ì ¸ì˜¨ ì›ì‹œ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ì¶”ê°€í• -ë™ê¸°í™” 어댑터를 ë””ìžì¸í•˜ëŠ” 중ì´ê³ ê·¸ë£¹ì€ ì‚¬ìš©í•˜ì§€ 않는다면, -ì œê³µìž ìª½ì— ë°ì´í„°ë¥¼ 표시하ë¼ê³ 지시해야 합니다. 사용ìžê°€ ê¸°ê¸°ì— ê³„ì •ì„ ì¶”ê°€í–ˆì„ ë•Œ 실행ë˜ëŠ” 코드ì—서 -ì—°ë½ì²˜ ì œê³µìžê°€ ê³„ì •ì— ì¶”ê°€í•˜ëŠ”{@link android.provider.ContactsContract.Settings} í–‰ì„ -ì—…ë°ì´íŠ¸í•˜ì‹ì‹œì˜¤. ì´ í–‰ì—서 + 개발ìžê°€ 서버ì—서 ê°€ì ¸ì˜¨ ì›ì‹œ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ ì—°ë½ì²˜ ì œê³µìžì— ì¶”ê°€í• +ë™ê¸°í™” 어댑터를 ë””ìžì¸í•˜ëŠ” 중ì´ê³ ê·¸ë£¹ì€ ì‚¬ìš©í•˜ì§€ 않는다면, +ì œê³µìž ìª½ì— ë°ì´í„°ë¥¼ 표시하ë¼ê³ 지시해야 합니다. 사용ìžê°€ ê¸°ê¸°ì— ê³„ì •ì„ ì¶”ê°€í–ˆì„ ë•Œ 실행ë˜ëŠ” 코드ì—서 +ì—°ë½ì²˜ ì œê³µìžê°€ ê³„ì •ì— ì¶”ê°€í•˜ëŠ”{@link android.provider.ContactsContract.Settings} í–‰ì„ +ì—…ë°ì´íŠ¸í•˜ì‹ì‹œì˜¤. ì´ í–‰ì—서 {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE -Settings.UNGROUPED_VISIBLE} ì—´ì˜ ê°’ì„ 1로 ì„¤ì •í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì—°ë½ì²˜ ì œê³µìžê°€ +Settings.UNGROUPED_VISIBLE} ì—´ì˜ ê°’ì„ 1로 ì„¤ì •í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì—°ë½ì²˜ ì œê³µìžê°€ 개발ìžì˜ ì—°ë½ì²˜ ë°ì´í„°ë¥¼ í•ìƒ í‘œì‹œí•˜ê²Œ ë˜ê³ , ì´ëŠ” ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì§€ 않ë”ë¼ë„ 관계 없습니다. </p> <h3 id="Photos">ì—°ë½ì²˜ 사진</h3> <p> {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì€ {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE -Photo.CONTENT_ITEM_TYPE} MIME ìœ í˜•ìœ¼ë¡œ ì‚¬ì§„ì„ í–‰ì— ì €ìž¥í•©ë‹ˆë‹¤. ì´ í–‰ì˜ -{@link android.provider.ContactsContract.RawContactsColumns#CONTACT_ID} ì—´ì€ +Photo.CONTENT_ITEM_TYPE} MIME ìœ í˜•ìœ¼ë¡œ ì‚¬ì§„ì„ í–‰ì— ì €ìž¥í•©ë‹ˆë‹¤. ì´ í–‰ì˜ +{@link android.provider.ContactsContract.RawContactsColumns#CONTACT_ID} ì—´ì€ í–‰ì´ ì†í•œ ì›ì‹œ ì—°ë½ì²˜ì˜ {@code android.provider.BaseColumns#_ID} ì—´ê³¼ ì—°ê²°ë©ë‹ˆë‹¤. - í´ëž˜ìФ {@link android.provider.ContactsContract.Contacts.Photo}는 -ì—°ë½ì²˜ 기본 ì‚¬ì§„ì˜ ì‚¬ì§„ ì •ë³´ê°€ 들어있는 {@link android.provider.ContactsContract.Contacts} 하위 í…Œì´ë¸”ì„ ì •ì˜í•©ë‹ˆë‹¤. -ì—°ë½ì²˜ì˜ 기본 ì‚¬ì§„ì€ ì—°ë½ì²˜ 기본 ì›ì‹œ ì—°ë½ì²˜ì˜ 기본 사진입니다. 마찬가지로, + í´ëž˜ìФ {@link android.provider.ContactsContract.Contacts.Photo}는 +ì—°ë½ì²˜ 기본 ì‚¬ì§„ì˜ ì‚¬ì§„ ì •ë³´ê°€ 들어있는 {@link android.provider.ContactsContract.Contacts} 하위 í…Œì´ë¸”ì„ ì •ì˜í•©ë‹ˆë‹¤. +ì—°ë½ì²˜ì˜ 기본 ì‚¬ì§„ì€ ì—°ë½ì²˜ 기본 ì›ì‹œ ì—°ë½ì²˜ì˜ 기본 사진입니다. 마찬가지로, {@link android.provider.ContactsContract.RawContacts.DisplayPhoto} í´ëž˜ìŠ¤ëŠ” ì›ì‹œ ì—°ë½ì²˜ì˜ 기본 ì‚¬ì§„ì˜ ì‚¬ì§„ ì •ë³´ê°€ 들어있는 {@link android.provider.ContactsContract.RawContacts} 하위 í…Œì´ë¸”ì„ ì •ì˜í•©ë‹ˆë‹¤. </p> <p> - {@link android.provider.ContactsContract.Contacts.Photo} ë° -{@link android.provider.ContactsContract.RawContacts.DisplayPhoto}ì— ëŒ€í•œ 참조 ë¬¸ì„œì— -사진 ì •ë³´ë¥¼ 검색하는 예시가 들어있습니다. ì›ì‹œ ì—°ë½ì²˜ì— 대한 기본 미리 보기를 검색하는 ë° ì“°ì´ëŠ” -íŽ¸ì˜ í´ëž˜ìŠ¤ëŠ” 없습니다. 하지만 -{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì¿¼ë¦¬ë¥¼ ë³´ë‚´ ì›ì‹œ ì—°ë½ì²˜ì˜ -{@code android.provider.BaseColumns#_ID}, + {@link android.provider.ContactsContract.Contacts.Photo} ë° +{@link android.provider.ContactsContract.RawContacts.DisplayPhoto}ì— ëŒ€í•œ 참조 ë¬¸ì„œì— +사진 ì •ë³´ë¥¼ 검색하는 예시가 들어있습니다. ì›ì‹œ ì—°ë½ì²˜ì— 대한 기본 미리 보기를 검색하는 ë° ì“°ì´ëŠ” +íŽ¸ì˜ í´ëž˜ìŠ¤ëŠ” 없습니다. 하지만 +{@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì— ì¿¼ë¦¬ë¥¼ ë³´ë‚´ ì›ì‹œ ì—°ë½ì²˜ì˜ +{@code android.provider.BaseColumns#_ID}, {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE Photo.CONTENT_ITEM_TYPE}, ë° {@link android.provider.ContactsContract.Data#IS_PRIMARY} ì—´ì„ ì„ íƒí•˜ë©´ 해당 ì›ì‹œ ì—°ë½ì²˜ì˜ 기본 사진 í–‰ì„ ì°¾ì„ ìˆ˜ 있습니다. </p> <p> - 한 ì‚¬ëžŒì˜ ì†Œì…œ 스트림 ë°ì´í„°ì—ë„ ì‚¬ì§„ì´ í¬í•¨ë˜ì–´ ìžˆì„ ìˆ˜ 있습니다. ì´ëŸ° ì‚¬ì§„ì€ -{@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì— ì €ìž¥ë˜ë©°, ì´ ë‚´ìš©ì€ + 한 ì‚¬ëžŒì˜ ì†Œì…œ 스트림 ë°ì´í„°ì—ë„ ì‚¬ì§„ì´ í¬í•¨ë˜ì–´ ìžˆì„ ìˆ˜ 있습니다. ì´ëŸ° ì‚¬ì§„ì€ +{@code android.provider.ContactsContract.StreamItemPhotos} í…Œì´ë¸”ì— ì €ìž¥ë˜ë©°, ì´ ë‚´ìš©ì€ <a href="#StreamPhotos">소셜 스트림 사진</a>ì— ë” ìžì„¸í•˜ê²Œ 설명ë˜ì–´ 있습니다. </p> diff --git a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd index 953f92ab3026..68ed5683d731 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd @@ -119,11 +119,11 @@ page.title=콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´ <!-- Intro paragraphs --> <p> - 콘í…ì¸ ì œê³µìžëŠ” ë°ì´í„°ì˜ 중앙 리í¬ì§€í† ë¦¬ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. + 콘í…ì¸ ì œê³µìžëŠ” ë°ì´í„°ì˜ 중앙 리í¬ì§€í† ë¦¬ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. ì œê³µìžëŠ” Android ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ì´ë©°, ì´ëŠ” 종종 ë‚˜ë¦„ì˜ UI를 ì œê³µí•˜ì—¬ ë°ì´í„°ì— 작용하ë„ë¡ í•©ë‹ˆë‹¤. - 그러나 콘í…ì¸ ì œê³µìžëŠ” 기본ì 으로 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용하ë„ë¡ ë§Œë“¤ì–´ì§„ 것입니다. -ì´ë“¤ì€ ì œê³µìž í´ë¼ì´ì–¸íЏ 개체를 사용하여 ì œê³µìžì— 액세스합니다. -ì œê³µìžì™€ ì œê³µìž í´ë¼ì´ì–¸íŠ¸ê°€ ê²°í•©ë˜ë©´ ë°ì´í„°ì— í•˜ë‚˜ì˜ ì¼ê´€ì ì¸ í‘œì¤€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ + 그러나 콘í…ì¸ ì œê³µìžëŠ” 기본ì 으로 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용하ë„ë¡ ë§Œë“¤ì–´ì§„ 것입니다. +ì´ë“¤ì€ ì œê³µìž í´ë¼ì´ì–¸íЏ 개체를 사용하여 ì œê³µìžì— 액세스합니다. +ì œê³µìžì™€ ì œê³µìž í´ë¼ì´ì–¸íŠ¸ê°€ ê²°í•©ë˜ë©´ ë°ì´í„°ì— í•˜ë‚˜ì˜ ì¼ê´€ì ì¸ í‘œì¤€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ ì´ê²ƒì´ 프로세스간 í†µì‹ ê³¼ 보안 ë°ì´í„° ì•¡ì„¸ìŠ¤ë„ ì²˜ë¦¬í•©ë‹ˆë‹¤. </p> <p> @@ -139,14 +139,14 @@ page.title=콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´ <!-- Basics --> <h2 id="Basics">개요</h2> <p> - 콘í…ì¸ ì œê³µìžëŠ” 외부 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ 표시하며, ì´ë•Œ ë°ì´í„°ëŠ” -관계형 ë°ì´í„°ë² ì´ìФì—서 ì°¾ì„ ìˆ˜ 있는 í…Œì´ë¸”ê³¼ ìœ ì‚¬í•œ 하나 ì´ìƒì˜ í…Œì´ë¸”로서 표시ë©ë‹ˆë‹¤. -한 í–‰ì€ ì œê³µìžê°€ 수집하는 ì–´ë–¤ ìœ í˜•ì˜ ë°ì´í„° ì¸ìŠ¤í„´ìŠ¤ë¥¼ 나타내며, + 콘í…ì¸ ì œê³µìžëŠ” 외부 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ 표시하며, ì´ë•Œ ë°ì´í„°ëŠ” +관계형 ë°ì´í„°ë² ì´ìФì—서 ì°¾ì„ ìˆ˜ 있는 í…Œì´ë¸”ê³¼ ìœ ì‚¬í•œ 하나 ì´ìƒì˜ í…Œì´ë¸”로서 표시ë©ë‹ˆë‹¤. +한 í–‰ì€ ì œê³µìžê°€ 수집하는 ì–´ë–¤ ìœ í˜•ì˜ ë°ì´í„° ì¸ìŠ¤í„´ìŠ¤ë¥¼ 나타내며, í–‰ ì•ˆì˜ ê° ì—´ì€ ì¸ìŠ¤í„´ìŠ¤ì— ëŒ€í•´ ìˆ˜ì§‘ëœ ê°œë³„ì ì¸ ë°ì´í„°ë¥¼ 나타냅니다. </p> <p> - 예를 들어 Android í”Œëž«í¼ ì•ˆì— ë‚´ìž¥ëœ ì—¬ëŸ¬ ì œê³µìž ì¤‘ì— ì‚¬ìš©ìž ì‚¬ì „ì´ë¼ëŠ” ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. -ì´ê²ƒì€ 사용ìžê°€ ë³´ê´€í•˜ê³ ì‹¶ì–´í•˜ëŠ” 비표준 ë‹¨ì–´ì˜ ì² ìžë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. 표 1ì€ ì´ ì œê³µìžì˜ í…Œì´ë¸”ì—서 + 예를 들어 Android í”Œëž«í¼ ì•ˆì— ë‚´ìž¥ëœ ì—¬ëŸ¬ ì œê³µìž ì¤‘ì— ì‚¬ìš©ìž ì‚¬ì „ì´ë¼ëŠ” ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. +ì´ê²ƒì€ 사용ìžê°€ ë³´ê´€í•˜ê³ ì‹¶ì–´í•˜ëŠ” 비표준 ë‹¨ì–´ì˜ ì² ìžë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. 표 1ì€ ì´ ì œê³µìžì˜ í…Œì´ë¸”ì—서 ë°ì´í„°ê°€ ì–´ë–¤ 형태를 ë¨ ìˆ˜ 있는지를 나타낸 것입니다. </p> <p class="table-caption"> @@ -197,39 +197,39 @@ page.title=콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´ </tr> </table> <p> - 표 1ì—서, ê° í–‰ì€ ì¼ë°˜ì ì¸ ì‚¬ì „ì— ë‚˜ì˜¤ì§€ 않는 ë‹¨ì–´ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ -나타냅니다. ê° ì—´ì€ í•´ë‹¹ ë‹¨ì–´ì— ëŒ€í•œ ì¼ë¶€ ë°ì´í„°ë¥¼ 나타냅니다. 예를 들어 + 표 1ì—서, ê° í–‰ì€ ì¼ë°˜ì ì¸ ì‚¬ì „ì— ë‚˜ì˜¤ì§€ 않는 ë‹¨ì–´ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ +나타냅니다. ê° ì—´ì€ í•´ë‹¹ ë‹¨ì–´ì— ëŒ€í•œ ì¼ë¶€ ë°ì´í„°ë¥¼ 나타냅니다. 예를 들어 단어가 ì²˜ìŒ ë‚˜ì˜¨ ë¡œì¼€ì¼ ë“±ì„ ë“¤ 수 있습니다. ì—´ í—¤ë”는 ì œê³µìžì— ì €ìž¥ëœ -ì—´ ì´ë¦„입니다. í–‰ì˜ ë¡œì¼€ì¼ì„ ì°¸ì¡°í•˜ë ¤ë©´ ê·¸ í–‰ì˜ <code>locale</code> ì—´ì„ ì°¸ì¡°í•©ë‹ˆë‹¤. +ì—´ ì´ë¦„입니다. í–‰ì˜ ë¡œì¼€ì¼ì„ ì°¸ì¡°í•˜ë ¤ë©´ ê·¸ í–‰ì˜ <code>locale</code> ì—´ì„ ì°¸ì¡°í•©ë‹ˆë‹¤. ì´ ì œê³µìžì˜ 경우, <code>_ID</code> ì—´ì€ ì œê³µìžê°€ ìžë™ìœ¼ë¡œ ìœ ì§€í•˜ëŠ” "기본 키" ì—´ ì—í• ì„ í•©ë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ì œê³µìžì— 기본 키가 ê¼ ìžˆì–´ì•¼ 하는 ê²ƒì€ ì•„ë‹ˆê³ , -기본 키가 있는 경우 <code>_ID</code>를 ì—´ ì´ë¦„으로 사용하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. 그러나 ì œê³µìžì˜ ë°ì´í„°ë¥¼ -{@link android.widget.ListView}ì— ë°”ì¸ë”©í•˜ë ¤ë©´ + <strong>ì°¸ê³ :</strong> ì œê³µìžì— 기본 키가 ê¼ ìžˆì–´ì•¼ 하는 ê²ƒì€ ì•„ë‹ˆê³ , +기본 키가 있는 경우 <code>_ID</code>를 ì—´ ì´ë¦„으로 사용하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. 그러나 ì œê³µìžì˜ ë°ì´í„°ë¥¼ +{@link android.widget.ListView}ì— ë°”ì¸ë”©í•˜ë ¤ë©´ ì—´ ì´ë¦„ 중 하나는<code>_ID</code>여야 합니다. ì´ ìš”êµ¬ 사í•ì€ <a href="#DisplayResults">쿼리 ê²°ê³¼ 표시</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <h3 id="ClientProvider">ì œê³µìž ì•¡ì„¸ìŠ¤</h3> <p> - ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 콘í…ì¸ ì œê³µìžë¡œë¶€í„°ì˜ ë°ì´í„°ì— -{@link android.content.ContentResolver} í´ë¼ì´ì–¸íЏ 개체로 액세스합니다. -ì´ ê°œì²´ì—는 ì œê³µìž ê°œì²´ ë‚´ì˜ ê°™ì€ ì´ë¦„ì„ ê°€ì§„ 메서드를 호출하는 메서드가 있습니다. -ì´ëŠ” {@link android.content.ContentProvider}ì˜ êµ¬ì²´ì ì¸ í•˜ìœ„ í´ëž˜ìФ 중 í•˜ë‚˜ì˜ ì¸ìŠ¤í„´ìŠ¤ìž…ë‹ˆë‹¤. -{@link android.content.ContentResolver} 메서드는 + ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 콘í…ì¸ ì œê³µìžë¡œë¶€í„°ì˜ ë°ì´í„°ì— +{@link android.content.ContentResolver} í´ë¼ì´ì–¸íЏ 개체로 액세스합니다. +ì´ ê°œì²´ì—는 ì œê³µìž ê°œì²´ ë‚´ì˜ ê°™ì€ ì´ë¦„ì„ ê°€ì§„ 메서드를 호출하는 메서드가 있습니다. +ì´ëŠ” {@link android.content.ContentProvider}ì˜ êµ¬ì²´ì ì¸ í•˜ìœ„ í´ëž˜ìФ 중 í•˜ë‚˜ì˜ ì¸ìŠ¤í„´ìŠ¤ìž…ë‹ˆë‹¤. +{@link android.content.ContentResolver} 메서드는 ì˜êµ¬ì ì €ìž¥ì†Œì˜ ê¸°ë³¸ì ì¸ "CRUD"(ìƒì„±, 검색, ì—…ë°ì´íЏ ë° ì‚ì œ) ê¸°ëŠ¥ì„ ì œê³µí•©ë‹ˆë‹¤. </p> <p> í´ë¼ì´ì–¸íЏ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 프로세스 ë‚´ì— ìžˆëŠ” {@link android.content.ContentResolver} 개체와 - ì œê³µìžë¥¼ ì†Œìœ í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ {@link android.content.ContentProvider} 개체가 + ì œê³µìžë¥¼ ì†Œìœ í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ {@link android.content.ContentProvider} 개체가 ìžë™ìœ¼ë¡œ 프로세스간 í†µì‹ ì„ ì²˜ë¦¬í•©ë‹ˆë‹¤. -{@link android.content.ContentProvider} ë˜í•œ +{@link android.content.ContentProvider} ë˜í•œ 콘í…ì¸ ì œê³µìžì˜ ë°ì´í„° 리í¬ì§€í† 리와 ì™¸ë¶€ì— í…Œì´ë¸”로 표시ë˜ëŠ” ë°ì´í„° 모습 사ì´ì—서 ì¶”ìƒí™” 계층 ì—í• ì„ í•©ë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ë³´í†µì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -ì œê³µìžì˜ 매니페스트 파ì¼ì— 있는 íŠ¹ì • ê¶Œí•œì„ ìš”ì²í•´ì•¼ 합니다. ì´ê²ƒì€ + <strong>ì°¸ê³ :</strong> ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ë³´í†µì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +ì œê³µìžì˜ 매니페스트 파ì¼ì— 있는 íŠ¹ì • ê¶Œí•œì„ ìš”ì²í•´ì•¼ 합니다. ì´ê²ƒì€ <a href="#Permissions">콘í…ì¸ ì œê³µìž ê¶Œí•œ</a> ì„¹ì…˜ì— ë” ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p> @@ -237,7 +237,7 @@ page.title=콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´ {@link android.content.ContentResolver#query ContentResolver.query()}를 호출하면 ë©ë‹ˆë‹¤. {@link android.content.ContentResolver#query query()} 메서드는 ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžê°€ ì •ì˜í•œ {@link android.content.ContentProvider#query ContentProvider.query()} 메서드를 -호출합니다. ë‹¤ìŒ ëª‡ ì¤„ì˜ ì½”ë“œëŠ” +호출합니다. ë‹¤ìŒ ëª‡ ì¤„ì˜ ì½”ë“œëŠ” {@link android.content.ContentResolver#query ContentResolver.query()} í˜¸ì¶œì„ ë‚˜íƒ€ë‚¸ 것입니다. <p> <pre> @@ -292,26 +292,26 @@ query(Uri,projection,selection,selectionArgs,sortOrder)}ì— ëŒ€í•œ ì¸ìˆ˜ê°€ SQL <td align="center"><code>sortOrder</code></td> <td align="center"><code>ORDER BY <em>col,col,...</em></code></td> <td> - <code>sortOrder</code>는 ë°˜í™˜ëœ + <code>sortOrder</code>는 ë°˜í™˜ëœ {@link android.database.Cursor} ë‚´ì— í–‰ì´ ë‚˜íƒ€ë‚˜ëŠ” 순서를 ì§€ì •í•©ë‹ˆë‹¤. </td> </tr> </table> <h3 id="ContentURIs">콘í…ì¸ URI</h3> <p> - <strong>콘í…ì¸ URI</strong>는 ì œê³µìžì—서 ë°ì´í„°ë¥¼ ì‹ë³„하는 URI입니다. + <strong>콘í…ì¸ URI</strong>는 ì œê³µìžì—서 ë°ì´í„°ë¥¼ ì‹ë³„하는 URI입니다. 콘í…ì¸ URIì—는 ì „ì²´ ì œê³µìžì˜ ìƒì§•ì ì¸ ì´ë¦„(ì œê³µìžì˜ <strong>권한</strong>)ê³¼ -í…Œì´ë¸”ì„ ê°€ë¦¬í‚¤ëŠ” ì´ë¦„(<strong>경로</strong>)ì´ í¬í•¨ë©ë‹ˆë‹¤. +í…Œì´ë¸”ì„ ê°€ë¦¬í‚¤ëŠ” ì´ë¦„(<strong>경로</strong>)ì´ í¬í•¨ë©ë‹ˆë‹¤. ì œê³µìž ë‚´ì˜ í…Œì´ë¸”ì— ì•¡ì„¸ìŠ¤í•˜ê¸° 위해 í´ë¼ì´ì–¸íЏ 메서드를 호출하는 경우, ê·¸ í…Œì´ë¸”ì— ëŒ€í•œ 콘í…ì¸ URI는 ì¸ìˆ˜ 중 하나입니다. </p> <p> ì•žì„ ëª‡ ì¤„ì˜ ì½”ë“œì—서 ìƒìˆ˜ -{@link android.provider.UserDictionary.Words#CONTENT_URI}ì— +{@link android.provider.UserDictionary.Words#CONTENT_URI}ì— ì‚¬ìš©ìž ì‚¬ì „ì˜ "단어" í…Œì´ë¸”ì˜ ì½˜í…ì¸ URIê°€ 들어있습니다. {@link android.content.ContentResolver} 개체가 ì´ URIì˜ ê¶Œí•œì„ êµ¬ë¬¸ ë¶„ì„한 다ìŒ, ì´ë¥¼ ì´ìš©í•´ ì œê³µìžë¥¼ "확ì¸"합니다. 즉 ì´ ê¶Œí•œì„ ì•Œë ¤ì§„ ì œê³µìžë¡œ ì´ë£¨ì–´ì§„ 시스템 í…Œì´ë¸”ê³¼ 비êµí•˜ëŠ” 것입니다. - -그러면 {@link android.content.ContentResolver}ê°€ 쿼리 ì¸ìˆ˜ë¥¼ + +그러면 {@link android.content.ContentResolver}ê°€ 쿼리 ì¸ìˆ˜ë¥¼ 올바른 ì œê³µìžì—게 ë°œì†¡í• ìˆ˜ 있습니다. </p> <p> @@ -331,20 +331,20 @@ content://user_dictionary/words ì´ê²ƒì„ 콘í…ì¸ URI로 ì‹ë³„합니다. </p> <p> - ëŒ€ë‹¤ìˆ˜ì˜ ì œê³µìžì—서는 URIì˜ ë§¨ ëì— ID ê°’ì„ ì¶”ê°€í•˜ë©´ -í…Œì´ë¸” ë‚´ í•˜ë‚˜ì˜ í–‰ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 예를 들어 <code>_ID</code>ê°€ + ëŒ€ë‹¤ìˆ˜ì˜ ì œê³µìžì—서는 URIì˜ ë§¨ ëì— ID ê°’ì„ ì¶”ê°€í•˜ë©´ +í…Œì´ë¸” ë‚´ í•˜ë‚˜ì˜ í–‰ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 예를 들어 <code>_ID</code>ê°€ ì‚¬ìš©ìž ì‚¬ì „ì˜ <code>4</code>ì¸ í–‰ì„ ê²€ìƒ‰í•˜ë ¤ë©´, ì´ ì½˜í…ì¸ URI를 사용하면 ë©ë‹ˆë‹¤. </p> <pre> Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </pre> <p> - ì¼ë ¨ì˜ í–‰ì„ ê²€ìƒ‰í•œ ë‹¤ìŒ ê·¸ 중 하나를 ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ì‚ì œí•˜ê³ ìž í•˜ëŠ” 경우 종종 ID ê°’ì„ + ì¼ë ¨ì˜ í–‰ì„ ê²€ìƒ‰í•œ ë‹¤ìŒ ê·¸ 중 하나를 ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ì‚ì œí•˜ê³ ìž í•˜ëŠ” 경우 종종 ID ê°’ì„ ì´ìš©í•˜ê³¤ 합니다. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> {@link android.net.Uri}와 -{@link android.net.Uri.Builder} í´ëž˜ìФì—는 문ìžì—´ì—서 잘 구성ëœ(Well-Formed) URI 개체를 구성하기 위한 íŽ¸ì˜ ë©”ì„œë“œê°€ 들어 있습니다. + <strong>ì°¸ê³ :</strong> {@link android.net.Uri}와 +{@link android.net.Uri.Builder} í´ëž˜ìФì—는 문ìžì—´ì—서 잘 구성ëœ(Well-Formed) URI 개체를 구성하기 위한 íŽ¸ì˜ ë©”ì„œë“œê°€ 들어 있습니다. {@link android.content.ContentUris}ì—는 URIì— ID ê°’ì„ ì¶”ê°€í•˜ê¸° 위한 íŽ¸ì˜ ë©”ì„œë“œê°€ 들어 있습니다. ì´ì „ ì¡°ê°ì€ {@link android.content.ContentUris#withAppendedId withAppendedId()}를 사용하여 UserDictionary 콘í…ì¸ URIì— ID를 추가합니다. @@ -358,10 +358,10 @@ withAppendedId()}를 사용하여 UserDictionary 콘í…ì¸ URIì— ID를 ì¶”ê°€í• ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. </p> <p class="note"> - 명확히 나타내기 위해 ì´ ì„¹ì…˜ì˜ ì½”ë“œ ì¡°ê°ì€ -{@link android.content.ContentResolver#query ContentResolver.query()}를 "UI ìŠ¤ë ˆë“œ"ì—서 호출합니다. + 명확히 나타내기 위해 ì´ ì„¹ì…˜ì˜ ì½”ë“œ ì¡°ê°ì€ +{@link android.content.ContentResolver#query ContentResolver.query()}를 "UI ìŠ¤ë ˆë“œ"ì—서 호출합니다. 그러나 ì‹¤ì œ ì½”ë“œì˜ ê²½ìš° 쿼리는 별ë„ì˜ ìŠ¤ë ˆë“œì—서 비ë™ê¸°ì‹ìœ¼ë¡œ 수행해야 합니다. ì´ë¥¼ 위한 한 가지 ë°©ì‹ìœ¼ë¡œ -{@link android.content.CursorLoader} +{@link android.content.CursorLoader} í´ëž˜ìŠ¤ë¥¼ 쓰는 ê²ƒì„ ë“¤ 수 있습니다. ì´ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/loaders.html"> 로ë”</a> ê°€ì´ë“œì— ë” ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. ë˜í•œ, ì´ ì½”ë“œ ì¤„ì€ ì¡°ê°ì¼ ë¿ì´ë©° ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì „ì²´ì 으로 표시한 ê²ƒì´ ì•„ë‹™ë‹ˆë‹¤. @@ -380,32 +380,32 @@ withAppendedId()}를 사용하여 UserDictionary 콘í…ì¸ URIì— ID를 ì¶”ê°€í• <h3 id="RequestPermissions">ì½ê¸° 액세스 권한 ìš”ì²</h3> <p> ì œê³µìžì—서 ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 해당 ì œê³µìžì— 대한 "ì½ê¸° 액세스 권한"ì´ í•„ìš”í•©ë‹ˆë‹¤. - 런타임ì—는 ì´ ê¶Œí•œì„ ìš”ì²í• 수 없습니다. ëŒ€ì‹ ì´ ê¶Œí•œì´ í•„ìš”í•˜ë‹¤ëŠ” ê²ƒì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‚˜íƒ€ë‚´ì•¼ 합니다. ì´ë•Œ, + 런타임ì—는 ì´ ê¶Œí•œì„ ìš”ì²í• 수 없습니다. ëŒ€ì‹ ì´ ê¶Œí•œì´ í•„ìš”í•˜ë‹¤ëŠ” ê²ƒì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‚˜íƒ€ë‚´ì•¼ 합니다. ì´ë•Œ, <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> 요소와 ì œê³µìžê°€ ì •ì˜í•œ ì •í™•í•œ 권한 ì´ë¦„ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤. - 매니페스트ì—서 ì´ ìš”ì†Œë¥¼ ì§€ì •í•˜ëŠ” ê²ƒì€ ì‚¬ì‹¤ìƒ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 위해 ì´ ê¶Œí•œì„ "ìš”ì²"하는 것과 + 매니페스트ì—서 ì´ ìš”ì†Œë¥¼ ì§€ì •í•˜ëŠ” ê²ƒì€ ì‚¬ì‹¤ìƒ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 위해 ì´ ê¶Œí•œì„ "ìš”ì²"하는 것과 같습니다. 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ì¹˜í• ë•Œë©´, ì´ ìš”ì²ì„ 암시ì 으로 허용하게 ë©ë‹ˆë‹¤. </p> <p> - 사용 ì¤‘ì¸ ì œê³µìžì— 대한 ì½ê¸° 액세스 ê¶Œí•œì˜ ì •í™•í•œ ì´ë¦„ê³¼ 해당 ì œê³µìžê°€ 사용하는 + 사용 ì¤‘ì¸ ì œê³µìžì— 대한 ì½ê¸° 액세스 ê¶Œí•œì˜ ì •í™•í•œ ì´ë¦„ê³¼ 해당 ì œê³µìžê°€ 사용하는 다른 액세스 ê¶Œí•œì˜ ì´ë¦„ì„ ì°¾ì•„ë³´ë ¤ë©´ ì œê³µìžì˜ 문서를 살펴보ì‹ì‹œì˜¤. </p> <p> - ì œê³µìžì— 액세스하는 ë° ìžˆì–´ ê¶Œí•œì´ ì–´ë–¤ ì—í• ì„ í•˜ëŠ”ì§€ëŠ” + ì œê³µìžì— 액세스하는 ë° ìžˆì–´ ê¶Œí•œì´ ì–´ë–¤ ì—í• ì„ í•˜ëŠ”ì§€ëŠ” <a href="#Permissions">콘í…ì¸ ì œê³µìž ê¶Œí•œ</a> ì„¹ì…˜ì— ë” ìžì„¸í•˜ê²Œ 설명ë˜ì–´ 있습니다. </p> <p> - ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžëŠ” -<code>android.permission.READ_USER_DICTIONARY</code> ê¶Œí•œì„ ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— ì •ì˜í•©ë‹ˆë‹¤. ë”°ë¼ì„œ 해당 ì œê³µìžì—서 + ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžëŠ” +<code>android.permission.READ_USER_DICTIONARY</code> ê¶Œí•œì„ ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— ì •ì˜í•©ë‹ˆë‹¤. ë”°ë¼ì„œ 해당 ì œê³µìžì—서 ì½ê¸° ìž‘ì—…ì„ í•˜ê³ ìž í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 반드시 ì´ ê¶Œí•œì„ ìš”ì²í•´ì•¼ 합니다. </p> <!-- Constructing the query --> <h3 id="Query">쿼리 구성</h3> <p> - ì œê³µìžì—서 ë°ì´í„°ë¥¼ ê²€ìƒ‰í• ë•Œ ë‹¤ìŒ ë‹¨ê³„ëŠ” 쿼리를 구성하는 것입니다. 다ìŒì˜ 첫 번째 ì¡°ê°ì€ + ì œê³µìžì—서 ë°ì´í„°ë¥¼ ê²€ìƒ‰í• ë•Œ ë‹¤ìŒ ë‹¨ê³„ëŠ” 쿼리를 구성하는 것입니다. 다ìŒì˜ 첫 번째 ì¡°ê°ì€ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì— 액세스하는 ë° í•„ìš”í•œ 몇 가지 변수를 ì •ì˜í•œ 것입니다. </p> <pre class="prettyprint"> @@ -426,9 +426,9 @@ String[] mSelectionArgs = {""}; </pre> <p> - ë‹¤ìŒ ì¡°ê°ì€ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžë¥¼ 예시로 사용하여 + ë‹¤ìŒ ì¡°ê°ì€ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžë¥¼ 예시로 사용하여 {@link android.content.ContentResolver#query ContentResolver.query()}를 - 사용하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. ì œê³µìž í´ë¼ì´ì–¸íЏ 쿼리는 SQL 쿼리와 비슷하며, + 사용하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. ì œê³µìž í´ë¼ì´ì–¸íЏ 쿼리는 SQL 쿼리와 비슷하며, ë°˜í™˜í• ì—´ ì§‘í•©ê³¼ ì„ íƒ ê¸°ì¤€ ì§‘í•©, ê·¸ë¦¬ê³ ì •ë ¬ 순서가 ì´ ì•ˆì— ë“¤ì–´ 있습니다. </p> <p> @@ -438,13 +438,13 @@ String[] mSelectionArgs = {""}; <p> ê²€ìƒ‰í• í–‰ì„ ë‚˜íƒ€ë‚´ëŠ” ì‹ì€ ì„ íƒ ì ˆê³¼ ì„ íƒ ì¸ìˆ˜ë¡œ ë¶„í• ë˜ì–´ 있습니다. ì„ íƒ ì ˆì€ ë…¼ë¦¬ì™€ 부울 ì‹, ì—´ ì´ë¦„ê³¼ ê°’ -(변수 <code>mSelectionClause</code>)ì„ ì¡°í•©í•œ 것입니다. -ê°’ ëŒ€ì‹ ëŒ€ì²´ 가능한 매개변수 <code>?</code>를 ì§€ì •í•˜ë©´, +(변수 <code>mSelectionClause</code>)ì„ ì¡°í•©í•œ 것입니다. +ê°’ ëŒ€ì‹ ëŒ€ì²´ 가능한 매개변수 <code>?</code>를 ì§€ì •í•˜ë©´, 쿼리 메서드가 ê·¸ ê°’ì„ ì„ íƒ ì¸ìˆ˜ ë°°ì—´ì—서 검색합니다(변수 <code>mSelectionArgs</code>). </p> <p> - ë‹¤ìŒ ì¡°ê°ì˜ 경우, 사용ìžê°€ 단어를 ìž…ë ¥í•˜ì§€ 않으면 ì„ íƒ ì ˆì´ -<code>null</code>로 ì„¤ì •ë˜ê³ , 쿼리는 ì œê³µìž ì•ˆì˜ ëª¨ë“ ë‹¨ì–´ë¥¼ 반환합니다. + ë‹¤ìŒ ì¡°ê°ì˜ 경우, 사용ìžê°€ 단어를 ìž…ë ¥í•˜ì§€ 않으면 ì„ íƒ ì ˆì´ +<code>null</code>로 ì„¤ì •ë˜ê³ , 쿼리는 ì œê³µìž ì•ˆì˜ ëª¨ë“ ë‹¨ì–´ë¥¼ 반환합니다. 사용ìžê°€ 단어를 ìž…ë ¥í•˜ë©´ ì„ íƒ ì ˆì€ <code>UserDictionary.Words.WORD + " = ?"</code>로 ì„¤ì •ë˜ë©° ì„ íƒ ì¸ìˆ˜ì˜ 첫 번째 요소가 사용ìžê°€ ìž…ë ¥í•œ 단어로 ì„¤ì •ë©ë‹ˆë‹¤. </p> @@ -514,7 +514,7 @@ SELECT _ID, word, locale FROM words WHERE word = <userinput> ORDER BY word </p> <h4 id="Injection">ì•…ì˜ì ì¸ ìž…ë ¥ì— ëŒ€í•œ 보호</h4> <p> - 콘í…ì¸ ì œê³µìžê°€ 관리하는 ë°ì´í„°ê°€ SQL ë°ì´í„°ë² ì´ìŠ¤ì— ìžˆëŠ” 경우, + 콘í…ì¸ ì œê³µìžê°€ 관리하는 ë°ì´í„°ê°€ SQL ë°ì´í„°ë² ì´ìŠ¤ì— ìžˆëŠ” 경우, ì›ì‹œ SQL ë¬¸ì— ì™¸ë¶€ì˜ ì‹ ë¢°í• ìˆ˜ 없는 ë°ì´í„°ë¥¼ í¬í•¨ì‹œí‚¤ë©´ SQL ì‚½ìž…ì„ ì´ˆëž˜í• ìˆ˜ 있습니다. </p> <p> @@ -526,17 +526,17 @@ String mSelectionClause = "var = " + mUserInput; </pre> <p> ì´ë ‡ê²Œ 하면 사용ìžë¡œ 하여금 ì—¬ëŸ¬ë¶„ì˜ SQL ë¬¸ì— ì•…ì˜ì ì¸ SQLì„ ì—°ê²°í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤. - 예를 들어 사용ìžê°€ <code>mUserInput</code>ì— ëŒ€í•´ "nothing; DROP TABLE *;"ì„ ìž…ë ¥í• ìˆ˜ 있습니다. -그러면 ê·¸ 결과로 ì„ íƒ ì ˆ <code>var = nothing; DROP TABLE *;</code>ì´ ë‚˜ì˜µë‹ˆë‹¤. -ì„ íƒ ì ˆì´ ì¼ì¢…ì˜ SQL 문으로 취급ë˜ì—ˆê¸° ë•Œë¬¸ì— ì œê³µìžê°€ 기본 SQLite ë°ì´í„°ë² ì´ìФì—서 í…Œì´ë¸”ì„ -ëª¨ë‘ ì‚ì œí•˜ëŠ” 결과를 ë‚³ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ì œê³µìžê°€ <a href="http://en.wikipedia.org/wiki/SQL_injection">SQL 삽입</a> + 예를 들어 사용ìžê°€ <code>mUserInput</code>ì— ëŒ€í•´ "nothing; DROP TABLE *;"ì„ ìž…ë ¥í• ìˆ˜ 있습니다. +그러면 ê·¸ 결과로 ì„ íƒ ì ˆ <code>var = nothing; DROP TABLE *;</code>ì´ ë‚˜ì˜µë‹ˆë‹¤. +ì„ íƒ ì ˆì´ ì¼ì¢…ì˜ SQL 문으로 취급ë˜ì—ˆê¸° ë•Œë¬¸ì— ì œê³µìžê°€ 기본 SQLite ë°ì´í„°ë² ì´ìФì—서 í…Œì´ë¸”ì„ +ëª¨ë‘ ì‚ì œí•˜ëŠ” 결과를 ë‚³ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(ì œê³µìžê°€ <a href="http://en.wikipedia.org/wiki/SQL_injection">SQL 삽입</a> 시ë„를 잡아내ë„ë¡ ì„¤ì •ëœ ê²½ìš°ëŠ” 예외입니다). </p> <p> - ì´ ë¬¸ì œë¥¼ í”¼í•˜ë ¤ë©´ <code>?</code>를 대체 가능한 매개변수로 사용하는 ì„ íƒ ì ˆê³¼, + ì´ ë¬¸ì œë¥¼ í”¼í•˜ë ¤ë©´ <code>?</code>를 대체 가능한 매개변수로 사용하는 ì„ íƒ ì ˆê³¼, 별ë„ì˜ ì„ íƒ ì¸ìˆ˜ ë°°ì—´ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면, ì‚¬ìš©ìž ìž…ë ¥ì´ SQL ë¬¸ì˜ ì¼ë¶€ë¡œ í•´ì„ë˜ê¸°ë³´ë‹¤ ì¿¼ë¦¬ì— ì§ì ‘ ë°”ì¸ë”©ë©ë‹ˆë‹¤. - ì´ê²ƒì€ SQL로 취급ë˜ì§€ 않기 ë•Œë¬¸ì— ì‚¬ìš©ìž ìž…ë ¥ì´ ì•…ì˜ì ì¸ SQLì„ ì‚½ìž…í• ìˆ˜ 없습니다. + ì´ê²ƒì€ SQL로 취급ë˜ì§€ 않기 ë•Œë¬¸ì— ì‚¬ìš©ìž ìž…ë ¥ì´ ì•…ì˜ì ì¸ SQLì„ ì‚½ìž…í• ìˆ˜ 없습니다. ì‚¬ìš©ìž ìž…ë ¥ì„ í¬í•¨í•˜ëŠ” ë° ì—°ê²°ì„ ì‚¬ìš©í•˜ëŠ” ëŒ€ì‹ ë‹¤ìŒ ì„ íƒ ì ˆì„ ì‚¬ìš©í•©ë‹ˆë‹¤. </p> <pre> @@ -558,35 +558,35 @@ String[] selectionArgs = {""}; selectionArgs[0] = mUserInput; </pre> <p> - <code>?</code>를 대체 가능한 매개변수로 사용하는 ì„ íƒ ì ˆê³¼ -ì„ íƒ ì¸ìˆ˜ ë°°ì—´ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ì„ íƒì„ ì§€ì •í•˜ëŠ” ë° ì„ í˜¸ë˜ëŠ” 방법입니다. + <code>?</code>를 대체 가능한 매개변수로 사용하는 ì„ íƒ ì ˆê³¼ +ì„ íƒ ì¸ìˆ˜ ë°°ì—´ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ì„ íƒì„ ì§€ì •í•˜ëŠ” ë° ì„ í˜¸ë˜ëŠ” 방법입니다. ì´ëŠ” ì œê³µìžê°€ SQL ë°ì´í„°ë² ì´ìФ ê¸°ë°˜ì´ ì•„ë‹ ë•Œì—ë„ ë§ˆì°¬ê°€ì§€ìž…ë‹ˆë‹¤. </p> <!-- Displaying the results --> <h3 id="DisplayResults">쿼리 ê²°ê³¼ 표시</h3> <p> - {@link android.content.ContentResolver#query ContentResolver.query()} + {@link android.content.ContentResolver#query ContentResolver.query()} í´ë¼ì´ì–¸íЏ 메서드는 ì–¸ì œë‚˜ 쿼리 ì„ íƒ ê¸°ì¤€ê³¼ ì¼ì¹˜í•˜ëŠ” í–‰ì— ëŒ€í•´ 쿼리 프로ì ì…˜ì´ ì§€ì •í•œ ì—´ì„ í¬í•¨í•˜ëŠ” -{@link android.database.Cursor}를 반환합니다. +{@link android.database.Cursor}를 반환합니다. {@link android.database.Cursor} 개체가 ìžì‹ ì´ í¬í•¨í•œ 행과 ì—´ì— ë¬´ìž‘ìœ„ ì½ê¸° 액세스를 ì œê³µí•©ë‹ˆë‹¤. - {@link android.database.Cursor} 메서드를 사용하면 í–‰ì„ ê²°ê³¼ì—서 ë°˜ë³µí• ìˆ˜ ìžˆê³ , + {@link android.database.Cursor} 메서드를 사용하면 í–‰ì„ ê²°ê³¼ì—서 ë°˜ë³µí• ìˆ˜ ìžˆê³ , ê° ì—´ì˜ ë°ì´í„° ìœ í˜•ì„ ê²°ì •í•˜ë©° ì—´ì—서 ë°ì´í„°ë¥¼ 꺼내거나 ê²°ê³¼ì˜ ë‹¤ë¥¸ ì†ì„±ì„ ê²€í† í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì¼ë¶€ {@link android.database.Cursor} êµ¬í˜„ì€ ì œê³µìžì˜ ë°ì´í„°ê°€ 변경ë 경우, -{@link android.database.Cursor}ê°€ 변경ë 때 ê´€ì°°ìž ê°œì²´ ë‚´ì˜ ë©”ì„œë“œë¥¼ 트리거하는 경우 +{@link android.database.Cursor}ê°€ 변경ë 때 ê´€ì°°ìž ê°œì²´ ë‚´ì˜ ë©”ì„œë“œë¥¼ 트리거하는 경우 ë˜ëŠ” ë‘ ê°€ì§€ê°€ 한 ë²ˆì— ë°œìƒí• 경우 ìžë™ìœ¼ë¡œ 개체를 ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ì œê³µìžëŠ” 쿼리를 수행하는 ê°œì²´ì˜ ì„±ê²©ì„ ê·¼ê±°ë¡œ -ì—´ì— ëŒ€í•œ 액세스를 ì œí•œí• ìˆ˜ 있습니다. 예를 들어 ì—°ë½ì²˜ ì œê³µìžëŠ” ë™ê¸°í™” ì–´ëŒ‘í„°ë¡œì˜ ëª‡ëª‡ ì—´ì— ëŒ€í•œ 액세스를 ì œí•œí•©ë‹ˆë‹¤. + <strong>ì°¸ê³ :</strong> ì œê³µìžëŠ” 쿼리를 수행하는 ê°œì²´ì˜ ì„±ê²©ì„ ê·¼ê±°ë¡œ +ì—´ì— ëŒ€í•œ 액세스를 ì œí•œí• ìˆ˜ 있습니다. 예를 들어 ì—°ë½ì²˜ ì œê³µìžëŠ” ë™ê¸°í™” ì–´ëŒ‘í„°ë¡œì˜ ëª‡ëª‡ ì—´ì— ëŒ€í•œ 액세스를 ì œí•œí•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 해야 액티비티 ë˜ëŠ” ì„œë¹„ìŠ¤ì— ì—´ì„ ë°˜í™˜í•˜ì§€ 않기 때문입니다. </p> <p> - ì„ íƒ ê¸°ì¤€ì— ì¼ì¹˜í•˜ëŠ” í–‰ì´ ì—†ìœ¼ë©´, ì œê³µìžëŠ” -{@link android.database.Cursor} 개체를 반환합니다. ì´ ê°œì²´ì˜ + ì„ íƒ ê¸°ì¤€ì— ì¼ì¹˜í•˜ëŠ” í–‰ì´ ì—†ìœ¼ë©´, ì œê³µìžëŠ” +{@link android.database.Cursor} 개체를 반환합니다. ì´ ê°œì²´ì˜ {@link android.database.Cursor#getCount Cursor.getCount()}는 0(빈 커서)입니다. </p> <p> - ë‚´ë¶€ 오류가 ë°œìƒí•˜ëŠ” 경우, 쿼리 결과는 íŠ¹ì • ì œê³µìžì— ë”°ë¼ ë‹¬ë¼ì§‘니다. + ë‚´ë¶€ 오류가 ë°œìƒí•˜ëŠ” 경우, 쿼리 결과는 íŠ¹ì • ì œê³µìžì— ë”°ë¼ ë‹¬ë¼ì§‘니다. <code>null</code>ì„ ë°˜í™˜í•˜ê¸°ë¡œ ì„ íƒí• ìˆ˜ë„ ìžˆê³ , {@link java.lang.Exception}ì„ ë°œìƒì‹œí‚¬ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> <p> @@ -595,9 +595,9 @@ selectionArgs[0] = mUserInput; 연결하는 것입니다. </p> <p> - ë‹¤ìŒ ì¡°ê°ì€ ì´ì „ ì¡°ê°ìœ¼ë¡œë¶€í„° 코드를 ê³„ì† ì´ì–´ê°€ëŠ” 것입니다. + ë‹¤ìŒ ì¡°ê°ì€ ì´ì „ ì¡°ê°ìœ¼ë¡œë¶€í„° 코드를 ê³„ì† ì´ì–´ê°€ëŠ” 것입니다. ì´ëŠ” 해당 쿼리가 검색한 {@link android.database.Cursor}ê°€ 들어 있는 -{@link android.widget.SimpleCursorAdapter} 개체를 ìƒì„±í•˜ë©°, ì´ ê°œì²´ë¥¼ +{@link android.widget.SimpleCursorAdapter} 개체를 ìƒì„±í•˜ë©°, ì´ ê°œì²´ë¥¼ {@link android.widget.ListView}ì— ëŒ€í•œ 어댑터로 ì„¤ì •í•©ë‹ˆë‹¤. </p> <pre class="prettyprint"> @@ -626,7 +626,7 @@ mWordList.setAdapter(mCursorAdapter); <p class="note"> <strong>ì°¸ê³ :</strong> {@link android.database.Cursor}로 {@link android.widget.ListView}를 ë’·ë°›ì¹¨í•˜ë ¤ë©´, ì»¤ì„œì— <code>_ID</code>ë¼ëŠ” ì—´ì´ í¬í•¨ë˜ì–´ì•¼ 합니다. - ì´ê²ƒ ë•Œë¬¸ì— ì´ì „ì— í‘œì‹œëœ ì¿¼ë¦¬ê°€ "단어" í…Œì´ë¸”ì— ëŒ€í•˜ì—¬ <code>_ID</code> ì—´ì„ + ì´ê²ƒ ë•Œë¬¸ì— ì´ì „ì— í‘œì‹œëœ ì¿¼ë¦¬ê°€ "단어" í…Œì´ë¸”ì— ëŒ€í•˜ì—¬ <code>_ID</code> ì—´ì„ ê²€ìƒ‰í•˜ë©°, {@link android.widget.ListView}ê°€ ì´ë¥¼ 표시하지 않ë”ë¼ë„ 무관합니다. ì´ ì œí•œì€ ëŒ€ë¶€ë¶„ì˜ ì œê³µìžì— ê° í…Œì´ë¸”ì— ëŒ€í•œ <code>_ID</code> ì—´ì´ ìžˆëŠ” ì´ìœ 를 ì„¤ëª…í•´ì£¼ê¸°ë„ í•©ë‹ˆë‹¤. @@ -635,7 +635,7 @@ mWordList.setAdapter(mCursorAdapter); <!-- Getting data from query results --> <h3 id="GettingResults">쿼리 ê²°ê³¼ì—서 ë°ì´í„° ê°€ì ¸ì˜¤ê¸°</h3> <p> - 쿼리 결과를 단순히 표시만 하는 것보다 ì´ë¥¼ 다른 ìž‘ì—…ì— ì‚¬ìš©í• ìˆ˜ 있습니다. + 쿼리 결과를 단순히 표시만 하는 것보다 ì´ë¥¼ 다른 ìž‘ì—…ì— ì‚¬ìš©í• ìˆ˜ 있습니다. 예를 들어, ì‚¬ìš©ìž ì‚¬ì „ì—서 ì² ìžë¥¼ 검색한 ë‹¤ìŒ ì´ê²ƒì„ 다른 ì œê³µìž ë‚´ì—서 찾아볼 수 있습니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´, {@link android.database.Cursor}ì—서 í–‰ì„ ê³„ì† ë°˜ë³µí•˜ë©´ ë©ë‹ˆë‹¤. </p> @@ -672,10 +672,10 @@ if (mCursor != null) { } </pre> <p> - {@link android.database.Cursor} 구현ì—는 -여러 ê°œì˜ "ê°€ì ¸ì˜¤ê¸°" 메서드가 들어 있어 개체로부터 여러 가지 ìœ í˜•ì˜ ë°ì´í„°ë¥¼ 검색합니다. 예를 들어 ì´ì „ ì¡°ê°ì—서는 -{@link android.database.Cursor#getString getString()}ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. -여기ì—는 해당 ì—´ì˜ ë°ì´í„° ìœ í˜•ì„ ë‚˜íƒ€ë‚´ëŠ” ê°’ì„ ë°˜í™˜í•˜ëŠ” + {@link android.database.Cursor} 구현ì—는 +여러 ê°œì˜ "ê°€ì ¸ì˜¤ê¸°" 메서드가 들어 있어 개체로부터 여러 가지 ìœ í˜•ì˜ ë°ì´í„°ë¥¼ 검색합니다. 예를 들어 ì´ì „ ì¡°ê°ì—서는 +{@link android.database.Cursor#getString getString()}ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. +여기ì—는 해당 ì—´ì˜ ë°ì´í„° ìœ í˜•ì„ ë‚˜íƒ€ë‚´ëŠ” ê°’ì„ ë°˜í™˜í•˜ëŠ” {@link android.database.Cursor#getType getType()} ë©”ì„œë“œë„ ìžˆìŠµë‹ˆë‹¤. </p> @@ -683,33 +683,33 @@ if (mCursor != null) { <!-- Requesting permissions --> <h2 id="Permissions">콘í…ì¸ ì œê³µìž ê¶Œí•œ</h2> <p> - ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 해당 ì œê³µìžì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 반드시 ê°€ì§€ê³ ìžˆì–´ì•¼ 하는 -ê¶Œí•œì„ ì§€ì •í• ìˆ˜ 있습니다. ì´ì™€ ê°™ì€ ê¶Œí•œì„ í†µí•´ 사용ìžëŠ” 한 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–´ëŠ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ 시ë„í• ì§€ -알 수 있습니다. 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì œê³µìžì˜ 요구 사í•ì„ ê·¼ê±°ë¡œ 해당 ì œê³µìžì— 액세스하기 위해 필요한 + ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 해당 ì œê³µìžì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 반드시 ê°€ì§€ê³ ìžˆì–´ì•¼ 하는 +ê¶Œí•œì„ ì§€ì •í• ìˆ˜ 있습니다. ì´ì™€ ê°™ì€ ê¶Œí•œì„ í†µí•´ 사용ìžëŠ” 한 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–´ëŠ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ 시ë„í• ì§€ +알 수 있습니다. 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì œê³µìžì˜ 요구 사í•ì„ ê·¼ê±°ë¡œ 해당 ì œê³µìžì— 액세스하기 위해 필요한 ê¶Œí•œì„ ìš”ì²í•©ë‹ˆë‹¤. 최종 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì„¤ì¹˜í• ë•Œ ìš”ì²ëœ ê¶Œí•œì„ ë³´ê²Œ ë©ë‹ˆë‹¤. </p> <p> - ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 아무 ê¶Œí•œë„ ì§€ì •í•˜ì§€ ì•Šì€ ê²½ìš°, 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 해당 ì œê³µìžì˜ -ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 없습니다. 그러나 ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì— ìžˆëŠ” 구성 요소는 + ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 아무 ê¶Œí•œë„ ì§€ì •í•˜ì§€ ì•Šì€ ê²½ìš°, 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ 해당 ì œê³µìžì˜ +ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 없습니다. 그러나 ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì— ìžˆëŠ” 구성 요소는 ì§€ì •ëœ ê¶Œí•œê³¼ 무관하게 í•ìƒ ì½ê¸° ë° ì“°ê¸° 액세스 ê¶Œí•œì„ ëª¨ë‘ ê°€ì§€ê³ ìžˆìŠµë‹ˆë‹¤. </p> <p> - ì´ì „ì— ì–¸ê¸‰í•œ 것과 ê°™ì´ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì—서 ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ë ¤ë©´ + ì´ì „ì— ì–¸ê¸‰í•œ 것과 ê°™ì´ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì—서 ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ë ¤ë©´ <code>android.permission.READ_USER_DICTIONARY</code> ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. ì´ ì œê³µìžì—게는 ë°ì´í„° 삽입, ì—…ë°ì´íЏ ë˜ëŠ” ì‚ì œì— ê°ê° 별ë„ì˜ <code>android.permission.WRITE_USER_DICTIONARY</code> ê¶Œí•œì´ ìžˆìŠµë‹ˆë‹¤. </p> <p> - ì œê³µìžì— 액세스하는 ë° í•„ìš”í•œ ê¶Œí•œì„ ì–»ìœ¼ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ + ì œê³µìžì— 액세스하는 ë° í•„ìš”í•œ ê¶Œí•œì„ ì–»ìœ¼ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— 있는 <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -으로 그러한 ê¶Œí•œì„ ìš”ì²í•©ë‹ˆë‹¤. Android 패키지 관리ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 설치하는 경우, +으로 그러한 ê¶Œí•œì„ ìš”ì²í•©ë‹ˆë‹¤. Android 패키지 관리ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 설치하는 경우, 사용ìžëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ìš”ì²í•˜ëŠ” ê¶Œí•œì„ ëª¨ë‘ ìŠ¹ì¸í•´ì•¼ 합니다. 사용ìžê°€ ì´ë¥¼ ëª¨ë‘ ìŠ¹ì¸í•˜ë©´ 패키지 관리ìžê°€ 설치를 계ì†í•˜ì§€ë§Œ, 사용ìžê°€ ì´ë¥¼ 승ì¸í•˜ì§€ 않으면 패키지 관리ìžëŠ” 설치를 중단합니다. </p> <p> - + ë‹¤ìŒ <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> 요소는 ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì— ì½ê¸° 액세스 ê¶Œí•œì„ ìš”ì²í•˜ëŠ” 것입니다. </p> @@ -717,7 +717,7 @@ if (mCursor != null) { <uses-permission android:name="android.permission.READ_USER_DICTIONARY"> </pre> <p> - ì œê³µìž ì•¡ì„¸ìŠ¤ ê¶Œí•œì´ ë¯¸ì¹˜ëŠ” ì˜í–¥ì€ + ì œê³µìž ì•¡ì„¸ìŠ¤ ê¶Œí•œì´ ë¯¸ì¹˜ëŠ” ì˜í–¥ì€ <a href="{@docRoot}guide/topics/security/security.html">보안 ë° ê¶Œí•œ</a> ê°€ì´ë“œì— 좀 ë” ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> @@ -725,15 +725,15 @@ if (mCursor != null) { <!-- Inserting, Updating, and Deleting Data --> <h2 id="Modifications">ë°ì´í„° 삽입, ì—…ë°ì´íЏ ë° ì‚ì œ</h2> <p> - ì œê³µìžë¡œë¶€í„° ë°ì´í„°ë¥¼ 검색하는 것과 ê°™ì€ ë°©ì‹ìœ¼ë¡œ, ë°ì´í„°ë¥¼ ìˆ˜ì •í• ë•Œì—ë„ ì œê³µìž í´ë¼ì´ì–¸íŠ¸ì™€ ì œê³µìžì˜ + ì œê³µìžë¡œë¶€í„° ë°ì´í„°ë¥¼ 검색하는 것과 ê°™ì€ ë°©ì‹ìœ¼ë¡œ, ë°ì´í„°ë¥¼ ìˆ˜ì •í• ë•Œì—ë„ ì œê³µìž í´ë¼ì´ì–¸íŠ¸ì™€ ì œê³µìžì˜ {@link android.content.ContentProvider} 사ì´ì˜ ìƒí˜¸ìž‘ìš©ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. - {@link android.content.ContentResolver}ì˜ ë©”ì„œë“œë¥¼ 호출하면서 -{@link android.content.ContentProvider}ì˜ ìƒì‘하는 메서드로 ì „ë‹¬ëœ ì¸ìˆ˜ë¥¼ 사용합니다. + {@link android.content.ContentResolver}ì˜ ë©”ì„œë“œë¥¼ 호출하면서 +{@link android.content.ContentProvider}ì˜ ìƒì‘하는 메서드로 ì „ë‹¬ëœ ì¸ìˆ˜ë¥¼ 사용합니다. ì œê³µìžì™€ ì œê³µìžì˜ í´ë¼ì´ì–¸íŠ¸ê°€ 보안과 프로세스간 í†µì‹ ì„ ìžë™ìœ¼ë¡œ 처리합니다. </p> <h3 id="Inserting">ë°ì´í„° 삽입</h3> <p> - ë°ì´í„°ë¥¼ ì œê³µìž ì•ˆìœ¼ë¡œ ì‚½ìž…í•˜ë ¤ë©´, + ë°ì´í„°ë¥¼ ì œê³µìž ì•ˆìœ¼ë¡œ ì‚½ìž…í•˜ë ¤ë©´, {@link android.content.ContentResolver#insert ContentResolver.insert()} 메서드를 호출합니다. ì´ ë©”ì„œë“œëŠ” ì œê³µìžì— 새로운 í–‰ì„ ì‚½ìž…í•˜ê³ í•´ë‹¹ ì—´ì— ëŒ€í•œ 콘í…ì¸ URI를 반환합니다. ì´ ì¡°ê°ì€ ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì— 새 단어를 삽입하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. @@ -763,8 +763,8 @@ mNewUri = getContentResolver().insert( </pre> <p> 새로운 í–‰ì— ëŒ€í•œ ë°ì´í„°ëŠ” ë‹¨ì¼ í–‰ 커서와 형태가 ìœ ì‚¬í•œ ë‹¨ì¼ {@link android.content.ContentValues} 개체로 -ì´ë™í•©ë‹ˆë‹¤. ì´ ê°œì²´ ë‚´ì˜ ì—´ì€ ëª¨ë‘ ê°™ì€ ë°ì´í„° ìœ í˜•ì„ ê°€ì§€ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. -ë˜í•œ 아예 ê°’ì„ ì§€ì •í•˜ê³ ì‹¶ì§€ ì•Šì€ ê²½ìš°ë¼ë©´ ì—´ì„ <code>null</code>로 ì„¤ì •í• ìˆ˜ 있습니다. +ì´ë™í•©ë‹ˆë‹¤. ì´ ê°œì²´ ë‚´ì˜ ì—´ì€ ëª¨ë‘ ê°™ì€ ë°ì´í„° ìœ í˜•ì„ ê°€ì§€ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. +ë˜í•œ 아예 ê°’ì„ ì§€ì •í•˜ê³ ì‹¶ì§€ ì•Šì€ ê²½ìš°ë¼ë©´ ì—´ì„ <code>null</code>로 ì„¤ì •í• ìˆ˜ 있습니다. ì´ë•Œ {@link android.content.ContentValues#putNull ContentValues.putNull()}ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤. </p> <p> @@ -790,11 +790,11 @@ content://user_dictionary/words/<id_value> </p> <h3 id="Updating">ë°ì´í„° ì—…ë°ì´íЏ</h3> <p> - í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë ¤ë©´ ì—…ë°ì´íŠ¸ëœ ê°’ê³¼ 함께 {@link android.content.ContentValues} 개체를 사용합니다. + í–‰ì„ ì—…ë°ì´íŠ¸í•˜ë ¤ë©´ ì—…ë°ì´íŠ¸ëœ ê°’ê³¼ 함께 {@link android.content.ContentValues} 개체를 사용합니다. ì´ë•Œ ê°’ì€ ì‚½ìž…í• ë•Œì™€ ë˜‘ê°™ê³ , ì„ íƒ ê¸°ì¤€ì€ ì¿¼ë¦¬í• ë•Œì™€ 같습니다. 사용하는 í´ë¼ì´ì–¸íЏ 메서드는 -{@link android.content.ContentResolver#update ContentResolver.update()}입니다. -ê°’ì„ ì¶”ê°€í•˜ëŠ” ê²ƒì€ ì—…ë°ì´íЏ ì¤‘ì¸ ì—´ì— ëŒ€í•œ {@link android.content.ContentValues} 개체ì—ë§Œ 하면 ë©ë‹ˆë‹¤. +{@link android.content.ContentResolver#update ContentResolver.update()}입니다. +ê°’ì„ ì¶”ê°€í•˜ëŠ” ê²ƒì€ ì—…ë°ì´íЏ ì¤‘ì¸ ì—´ì— ëŒ€í•œ {@link android.content.ContentValues} 개체ì—ë§Œ 하면 ë©ë‹ˆë‹¤. ì—´ì˜ ì½˜í…ì¸ ë¥¼ ì‚ì œí•˜ë ¤ë©´, ê°’ì„ <code>null</code>로 ì„¤ì •í•˜ì‹ì‹œì˜¤. </p> <p> @@ -827,13 +827,13 @@ mRowsUpdated = getContentResolver().update( ); </pre> <p> - + {@link android.content.ContentResolver#update ContentResolver.update()}를 호출하는 경우ì—는 ì‚¬ìš©ìž ìž…ë ¥ë„ ì‚ì œí•´ì•¼ 합니다. ì´ ë‚´ìš©ì— ê´€í•´ ìžì„¸ížˆ ì•Œì•„ë³´ë ¤ë©´ <a href="#Injection">ì•…ì˜ì ì¸ ìž…ë ¥ì— ëŒ€í•œ 보호</a> ì„¹ì…˜ì„ ì½ì–´ ë³´ì‹ì‹œì˜¤. </p> <h3 id="Deleting">ë°ì´í„° ì‚ì œ</h3> <p> - í–‰ì„ ì‚ì œí•˜ëŠ” ê²ƒì€ í–‰ ë°ì´í„°ë¥¼ 검색하는 것과 비슷합니다. 즉, ì‚ì œí•˜ê³ ìž í•˜ëŠ” í–‰ì— ëŒ€í•œ ì„ íƒ ê¸°ì¤€ì„ ì§€ì •í•˜ë©´ + í–‰ì„ ì‚ì œí•˜ëŠ” ê²ƒì€ í–‰ ë°ì´í„°ë¥¼ 검색하는 것과 비슷합니다. 즉, ì‚ì œí•˜ê³ ìž í•˜ëŠ” í–‰ì— ëŒ€í•œ ì„ íƒ ê¸°ì¤€ì„ ì§€ì •í•˜ë©´ í´ë¼ì´ì–¸íЏ 메서드가 ì‚ì œëœ í–‰ 수를 반환하는 ì‹ìž…니다. ë‹¤ìŒ ì¡°ê°ì€ 앱 IDê°€ "user"와 ì¼ì¹˜í•˜ëŠ” í–‰ì„ ì‚ì œí•©ë‹ˆë‹¤. 메서드가 ì‚ì œëœ í–‰ 수를 반환합니다. @@ -857,14 +857,14 @@ mRowsDeleted = getContentResolver().delete( ); </pre> <p> - {@link android.content.ContentResolver#delete ContentResolver.delete()}를 + {@link android.content.ContentResolver#delete ContentResolver.delete()}를 호출하는 경우ì—는 ì‚¬ìš©ìž ìž…ë ¥ë„ ì‚ì œí•´ì•¼ 합니다. ì´ ë‚´ìš©ì— ê´€í•´ ìžì„¸ížˆ ì•Œì•„ë³´ë ¤ë©´ <a href="#Injection">ì•…ì˜ì ì¸ ìž…ë ¥ì— ëŒ€í•œ 보호</a> ì„¹ì…˜ì„ ì½ì–´ ë³´ì‹ì‹œì˜¤. </p> <!-- Provider Data Types --> <h2 id="DataTypes">ì œê³µìž ë°ì´í„° ìœ í˜•</h2> <p> - 콘í…ì¸ ì œê³µìžëŠ” 아주 다양한 ë°ì´í„° ìœ í˜•ì„ ì œê³µí• ìˆ˜ 있습니다. + 콘í…ì¸ ì œê³µìžëŠ” 아주 다양한 ë°ì´í„° ìœ í˜•ì„ ì œê³µí• ìˆ˜ 있습니다. ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžëŠ” í…스트만 ì œê³µí•˜ì§€ë§Œ, ì œê³µìžëŠ” 다ìŒê³¼ ê°™ì€ í˜•ì‹ë„ ì œê³µí• ìˆ˜ 있습니다. </p> <ul> @@ -883,29 +883,29 @@ mRowsDeleted = getContentResolver().delete( </ul> <p> ì œê³µìžê°€ 종종 사용하는 ë˜ ë‹¤ë¥¸ ë°ì´í„° ìœ í˜•ì€ 64KB ë°”ì´íЏ 배열로 구현ë˜ëŠ” BLOB(Binary Large OBject)입니다. - ì´ìš© 가능한 ë°ì´í„° ìœ í˜•ì„ í™•ì¸í•˜ë ¤ë©´ + ì´ìš© 가능한 ë°ì´í„° ìœ í˜•ì„ í™•ì¸í•˜ë ¤ë©´ {@link android.database.Cursor} í´ëž˜ìФ "ê°€ì ¸ì˜¤ê¸°" 메서드를 살펴보면 ë©ë‹ˆë‹¤. </p> <p> ì œê³µìž ë‚´ì˜ ê° ì—´ì— ëŒ€í•œ ë°ì´í„° ìœ í˜•ì€ ë³´í†µ ìžì‹ ì˜ ë¬¸ì„œì— ëª©ë¡ìœ¼ë¡œ 나열ë˜ì–´ 있습니다. - ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì˜ ë°ì´í„° ìœ í˜•ì€ ì œê³µìžì˜ 계약 í´ëž˜ìФ + ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì˜ ë°ì´í„° ìœ í˜•ì€ ì œê³µìžì˜ 계약 í´ëž˜ìФ {@link android.provider.UserDictionary.Words}ì˜ ì°¸ì¡° ë¬¸ì„œì— ë‚˜ì—´ë˜ì–´ 있습니다(계약 í´ëž˜ìŠ¤ëŠ” <a href="#ContractClasses">계약 í´ëž˜ìФ</a> ì„¹ì…˜ì— ì„¤ëª…ë˜ì–´ 있습니다). @link android.database.Cursor#getType Cursor.getType()}ì„ í˜¸ì¶œí•´ì„œë„ ë°ì´í„° ìœ í˜•ì„ ê²°ì •í• ìˆ˜ 있습니다. </p> <p> - ì œê³µìžëŠ” 스스로 ì •ì˜í•˜ëŠ” ê° ì½˜í…ì¸ URIì˜ MIME ë°ì´í„° ìœ í˜• ì •ë³´ë„ ìœ ì§€ê´€ë¦¬í•©ë‹ˆë‹¤. -MIME ìœ í˜• ì •ë³´ë¥¼ 사용하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œê³µìžê°€ ì œê³µí•˜ëŠ” ë°ì´í„°ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있ì„ì§€ 알아낼 ìˆ˜ë„ ìžˆê³ , -MIME ìœ í˜•ì„ ê·¼ê±°ë¡œ 처리 ìœ í˜•ì„ ì„ íƒí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. + ì œê³µìžëŠ” 스스로 ì •ì˜í•˜ëŠ” ê° ì½˜í…ì¸ URIì˜ MIME ë°ì´í„° ìœ í˜• ì •ë³´ë„ ìœ ì§€ê´€ë¦¬í•©ë‹ˆë‹¤. +MIME ìœ í˜• ì •ë³´ë¥¼ 사용하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œê³µìžê°€ ì œê³µí•˜ëŠ” ë°ì´í„°ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있ì„ì§€ 알아낼 ìˆ˜ë„ ìžˆê³ , +MIME ìœ í˜•ì„ ê·¼ê±°ë¡œ 처리 ìœ í˜•ì„ ì„ íƒí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. MIME ìœ í˜•ì´ í•„ìš”í•œ 시ì ì€ ì£¼ë¡œ 복잡한 ë°ì´í„° 구조 ë˜ëŠ” 파ì¼ì´ 들어 있는 ì œê³µìžë¥¼ 다룰 때입니다. 예를 들어 ì—°ë½ì²˜ ì œê³µìž ë‚´ì˜ {@link android.provider.ContactsContract.Data} í…Œì´ë¸”ì€ MIME ìœ í˜•ì„ ì‚¬ìš©í•˜ì—¬ ê° í–‰ì— ì €ìž¥ëœ ì—°ë½ì²˜ ë°ì´í„°ì˜ ìœ í˜•ì— ë ˆì´ë¸”ì„ ë¶™ìž…ë‹ˆë‹¤. - 콘í…ì¸ URIì— ìƒì‘하는 MIME ìœ í˜•ì„ ê°€ì ¸ì˜¤ë ¤ë©´ + 콘í…ì¸ URIì— ìƒì‘하는 MIME ìœ í˜•ì„ ê°€ì ¸ì˜¤ë ¤ë©´ {@link android.content.ContentResolver#getType ContentResolver.getType()}ì„ í˜¸ì¶œí•˜ì‹ì‹œì˜¤. </p> <p> - <a href="#MIMETypeReference">MIME ìœ í˜• 참조</a> 섹션ì—서 표준 ë° ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì˜ + <a href="#MIMETypeReference">MIME ìœ í˜• 참조</a> 섹션ì—서 표준 ë° ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜•ì˜ ë‘ ê°€ì§€ë¥¼ ëª¨ë‘ ì„¤ëª…í•˜ê³ ìžˆìŠµë‹ˆë‹¤. </p> @@ -922,13 +922,13 @@ MIME ìœ í˜•ì´ í•„ìš”í•œ 시ì ì€ ì£¼ë¡œ 복잡한 ë°ì´í„° 구조 ë˜ëŠ” 파ì {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}로 ì´ë¥¼ ì ìš©í• ìˆ˜ 있습니다. </li> <li> - 비ë™ê¸°ì‹ 쿼리: 쿼리는 별ë„ì˜ ìŠ¤ë ˆë“œì—서 수행해야 합니다. ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 한 가지 방법으로 -{@link android.content.CursorLoader} 개체를 사용하는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. ì´ ì‚¬ìš© ë°©ë²•ì€ + 비ë™ê¸°ì‹ 쿼리: 쿼리는 별ë„ì˜ ìŠ¤ë ˆë“œì—서 수행해야 합니다. ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 한 가지 방법으로 +{@link android.content.CursorLoader} 개체를 사용하는 ê²ƒì´ ìžˆìŠµë‹ˆë‹¤. ì´ ì‚¬ìš© ë°©ë²•ì€ <a href="{@docRoot}guide/components/loaders.html">로ë”</a> ê°€ì´ë“œì— 있는 예시ì—서 설명합니다. </li> <li> - <a href="#Intents">ì¸í…트를 통한 ë°ì´í„° 액세스</a>: + <a href="#Intents">ì¸í…트를 통한 ë°ì´í„° 액세스</a>: ì¸í…트를 ì œê³µìžì— ì§ì ‘ 보낼 수는 없지만, ì¸í…트를 ì œê³µìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 보낼 수는 있습니다. ë³´í†µì€ ì´ê²ƒì´ ì œê³µìžì˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í•˜ê¸°ì— ê°€ìž¥ 좋습니다. </li> @@ -938,23 +938,23 @@ MIME ìœ í˜•ì´ í•„ìš”í•œ 시ì ì€ ì£¼ë¡œ 복잡한 ë°ì´í„° 구조 ë˜ëŠ” 파ì </p> <h3 id="Batch">ì¼ê´„ 액세스</h3> <p> - ì œê³µìžì— ì¼ê´„ 액세스를 하면 ë§Žì€ ìˆ˜ì˜ í–‰ì„ ì‚½ìž…í• ë•Œ, ê°™ì€ ë©”ì„œë“œ 호출 ë‚´ì—서 여러 ê°œì˜ í…Œì´ë¸”ì— ì—¬ëŸ¬ í–‰ì„ ì‚½ìž…í• ë•Œ + ì œê³µìžì— ì¼ê´„ 액세스를 하면 ë§Žì€ ìˆ˜ì˜ í–‰ì„ ì‚½ìž…í• ë•Œ, ê°™ì€ ë©”ì„œë“œ 호출 ë‚´ì—서 여러 ê°œì˜ í…Œì´ë¸”ì— ì—¬ëŸ¬ í–‰ì„ ì‚½ìž…í• ë•Œ ë˜ëŠ” ì „ë°˜ì 으로, 프로세스 경계를 가로질러 ì¼ë ¨ì˜ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우(ì›ìžì„± 작업) ìœ ìš©í•©ë‹ˆë‹¤. </p> <p> "ì¼ê´„ 모드"로 ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ -{@link android.content.ContentProviderOperation} ê°œì²´ì˜ ë°°ì—´ì„ ìƒì„±í•œ ë‹¤ìŒ ì´ë¥¼ 콘í…ì¸ ì œê³µìžì—게 +{@link android.content.ContentProviderOperation} ê°œì²´ì˜ ë°°ì—´ì„ ìƒì„±í•œ ë‹¤ìŒ ì´ë¥¼ 콘í…ì¸ ì œê³µìžì—게 {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}로 - 발송하면 ë©ë‹ˆë‹¤. + 발송하면 ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œì—는 íŠ¹ì •í•œ 콘í…ì¸ URI보다는 콘í…ì¸ ì œê³µìžì˜ <em>권한</em>ì„ ì „ë‹¬í•©ë‹ˆë‹¤. -ì´ë ‡ê²Œ 하면 ë°°ì—´ ë‚´ì˜ ê° {@link android.content.ContentProviderOperation} 개체가 +ì´ë ‡ê²Œ 하면 ë°°ì—´ ë‚´ì˜ ê° {@link android.content.ContentProviderOperation} 개체가 서로 다른 í…Œì´ë¸”ì— ëŒ€í•´ 작용하ë„ë¡ í• ìˆ˜ 있습니다. {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}를 호출하면 ì¼ë ¨ì˜ 결과를 반환합니다. </p> <p> {@link android.provider.ContactsContract.RawContacts} 계약 í´ëž˜ìŠ¤ì˜ ì„¤ëª…ì— - ì¼ê´„ ì‚½ìž…ì„ ì„¤ëª…í•˜ëŠ” 코드 ì¡°ê°ì´ í¬í•¨ë˜ì–´ 있습니다. + ì¼ê´„ ì‚½ìž…ì„ ì„¤ëª…í•˜ëŠ” 코드 ì¡°ê°ì´ í¬í•¨ë˜ì–´ 있습니다. <a href="{@docRoot}resources/samples/ContactManager/index.html">ì—°ë½ì²˜ 관리ìž</a> 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 <code>ContactAdder.java</code> 소스 파ì¼ì˜ ì¼ê´„ 액세스 예시가 í¬í•¨ë˜ì–´ 있습니다. @@ -963,31 +963,31 @@ MIME ìœ í˜•ì´ í•„ìš”í•œ 시ì ì€ ì£¼ë¡œ 복잡한 ë°ì´í„° 구조 ë˜ëŠ” 파ì <div class="sidebox"> <h2>ë„우미 ì•±ì„ ì‚¬ìš©í•œ ë°ì´í„° 표시</h2> <p> - ì• í”Œë¦¬ì¼€ì´ì…˜ì— 액세스 ê¶Œí•œì´ <em>있ë”ë¼ë„</em> -다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ í‘œì‹œí• ì¸í…트를 ì‚¬ìš©í•˜ê³ ìž í• ìˆ˜ 있습니다. 예를 들어 ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ + ì• í”Œë¦¬ì¼€ì´ì…˜ì— 액세스 ê¶Œí•œì´ <em>있ë”ë¼ë„</em> +다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ í‘œì‹œí• ì¸í…트를 ì‚¬ìš©í•˜ê³ ìž í• ìˆ˜ 있습니다. 예를 들어 ìº˜ë¦°ë” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ íŠ¹ì • ë‚ ì§œë‚˜ ì´ë²¤íŠ¸ë¥¼ 표시하는 {@link android.content.Intent#ACTION_VIEW}를 허용합니다. ì´ ë•Œë¬¸ì— ë‚˜ë¦„ì˜ UI를 ì§ì ‘ ìƒì„±í•˜ì§€ ì•Šê³ ë„ ìº˜ë¦°ë” ì •ë³´ë¥¼ í‘œì‹œí• ìˆ˜ 있습니다. -ì´ ê¸°ëŠ¥ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” +ì´ ê¸°ëŠ¥ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/providers/calendar-provider.html">ìº˜ë¦°ë” ì œê³µìž</a> ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤. </p> <p> ì¸í…트를 보낼 목ì ì§€ì¸ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ì œê³µìžì™€ ì—°ê´€ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì•„ë‹ˆì–´ë„ ë©ë‹ˆë‹¤. - 예를 들어 ì—°ë½ì²˜ ì œê³µìžì—서 ì—°ë½ì²˜ë¥¼ 검색한 다ìŒ, 해당 ì—°ë½ì²˜ì˜ ì´ë¯¸ì§€ì— 대한 콘í…ì¸ URIê°€ 들어 있는 -{@link android.content.Intent#ACTION_VIEW} ì¸í…트를 + 예를 들어 ì—°ë½ì²˜ ì œê³µìžì—서 ì—°ë½ì²˜ë¥¼ 검색한 다ìŒ, 해당 ì—°ë½ì²˜ì˜ ì´ë¯¸ì§€ì— 대한 콘í…ì¸ URIê°€ 들어 있는 +{@link android.content.Intent#ACTION_VIEW} ì¸í…트를 ì´ë¯¸ì§€ 뷰어로 보낼 수 있습니다. </p> </div> </div> <h3 id="Intents">ì¸í…트를 통한 ë°ì´í„° 액세스</h3> <p> - ì¸í…트는 콘í…ì¸ ì œê³µìžì— ê°„ì ‘ 액세스를 ì œê³µí• ìˆ˜ 있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì— 액세스 ê¶Œí•œì´ ì—†ëŠ”ë°ë„ -사용ìžì—게 ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— 액세스 ê¶Œí•œì„ í—ˆê°€í•˜ë ¤ë©´, ê¶Œí•œì„ ê°€ì§€ê³ ìžˆëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê²°ê³¼ ì¸í…트를 다시 ê°€ì ¸ì˜¤ê±°ë‚˜ + ì¸í…트는 콘í…ì¸ ì œê³µìžì— ê°„ì ‘ 액세스를 ì œê³µí• ìˆ˜ 있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì— 액세스 ê¶Œí•œì´ ì—†ëŠ”ë°ë„ +사용ìžì—게 ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— 액세스 ê¶Œí•œì„ í—ˆê°€í•˜ë ¤ë©´, ê¶Œí•œì„ ê°€ì§€ê³ ìžˆëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ê²°ê³¼ ì¸í…트를 다시 ê°€ì ¸ì˜¤ê±°ë‚˜ ê¶Œí•œì´ ìžˆëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 활성화한 ë‹¤ìŒ ì‚¬ìš©ìžì—게 ê·¸ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 작업하ë„ë¡ í•˜ë©´ ë©ë‹ˆë‹¤. </p> <h4>임시 권한으로 액세스 얻기</h4> <p> - ì ì ˆí•œ 액세스 ê¶Œí•œì´ ì—†ë”ë¼ë„ 콘í…ì¸ ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ëŠ” 있습니다. + ì ì ˆí•œ 액세스 ê¶Œí•œì´ ì—†ë”ë¼ë„ 콘í…ì¸ ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ëŠ” 있습니다. ê¶Œí•œì„ ê°€ì§€ê³ ìžˆëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì¸í…트를 ë³´ë‚´ "URI" ê¶Œí•œì´ ë“¤ì–´ 있는 ê²°ê³¼ ì¸í…트를 ëŒë ¤ë°›ìœ¼ë©´ ë©ë‹ˆë‹¤. ì´ë“¤ ê¶Œí•œì€ íŠ¹ì • 콘í…ì¸ URIì— ëŒ€í•œ 권한으로, ì´ë¥¼ ìˆ˜ì‹ í•˜ëŠ” 액티비티가 완료ë 때까지 ìœ ì§€ë©ë‹ˆë‹¤. @@ -1005,27 +1005,27 @@ MIME ìœ í˜•ì´ í•„ìš”í•œ 시ì ì€ ì£¼ë¡œ 복잡한 ë°ì´í„° 구조 ë˜ëŠ” 파ì </li> </ul> <p class="note"> - <strong>ì°¸ê³ :</strong> ì´ì™€ ê°™ì€ í”Œëž˜ê·¸ëŠ” 콘í…ì¸ URIì— ê¶Œí•œì´ ë“¤ì–´ 있는 ì œê³µìžì— ì¼ë°˜ì ì¸ ì½ê¸° ë˜ëŠ” 쓰기 액세스 + <strong>ì°¸ê³ :</strong> ì´ì™€ ê°™ì€ í”Œëž˜ê·¸ëŠ” 콘í…ì¸ URIì— ê¶Œí•œì´ ë“¤ì–´ 있는 ì œê³µìžì— ì¼ë°˜ì ì¸ ì½ê¸° ë˜ëŠ” 쓰기 액세스 ê¶Œí•œì„ ë¶€ì—¬í•˜ì§€ëŠ” 않습니다. ì´ ì•¡ì„¸ìŠ¤ëŠ” URI ìžì²´ì—ë§Œ 해당ë©ë‹ˆë‹¤. </p> <p> - ì œê³µìžëŠ” ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ë‚´ì˜ ì½˜í…ì¸ URIì— ëŒ€í•œ URI ê¶Œí•œì„ ì •ì˜í•©ë‹ˆë‹¤. ì´ë•Œ + ì œê³µìžëŠ” ìžì‹ ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ ë‚´ì˜ ì½˜í…ì¸ URIì— ëŒ€í•œ URI ê¶Œí•œì„ ì •ì˜í•©ë‹ˆë‹¤. ì´ë•Œ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> - ìš”ì†Œì˜ + ìš”ì†Œì˜ <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"><provider></a></code> - ìš”ì†Œì˜ + ìš”ì†Œì˜ <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> - 하위 ìš”ì†Œë„ ì‚¬ìš©í•©ë‹ˆë‹¤. + 하위 ìš”ì†Œë„ ì‚¬ìš©í•©ë‹ˆë‹¤. URI 권한 ë©”ì»¤ë‹ˆì¦˜ì€ "URI 권한" ì„¹ì…˜ì˜ <a href="{@docRoot}guide/topics/security/security.html">보안 ë° ê¶Œí•œ</a> ê°€ì´ë“œì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p> 예를 들어, {@link android.Manifest.permission#READ_CONTACTS} ê¶Œí•œì´ ì—†ë”ë¼ë„ -ì—°ë½ì²˜ ì œê³µìž ë‚´ì˜ ì—°ë½ì²˜ì— 대한 ë°ì´í„°ë¥¼ ê²€ìƒ‰í• ìˆ˜ 있습니다. -ì´ ìž‘ì—…ì„ í•˜ë©´ ì¢‹ì€ ì˜ˆë¡œ, ì—°ë½ì²˜ì— ê¸°ìž¬ëœ ì‚¬ëžŒì˜ ìƒì¼ì— ì „ìž ì¶•í•˜ 카드를 보내주는 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 들 수 있습니다. -{@link android.Manifest.permission#READ_CONTACTS}를 ìš”ì²í•˜ë©´ +ì—°ë½ì²˜ ì œê³µìž ë‚´ì˜ ì—°ë½ì²˜ì— 대한 ë°ì´í„°ë¥¼ ê²€ìƒ‰í• ìˆ˜ 있습니다. +ì´ ìž‘ì—…ì„ í•˜ë©´ ì¢‹ì€ ì˜ˆë¡œ, ì—°ë½ì²˜ì— ê¸°ìž¬ëœ ì‚¬ëžŒì˜ ìƒì¼ì— ì „ìž ì¶•í•˜ 카드를 보내주는 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 들 수 있습니다. +{@link android.Manifest.permission#READ_CONTACTS}를 ìš”ì²í•˜ë©´ 사용ìžì˜ ì—°ë½ì²˜ ì „ì²´ì™€ 해당 ì •ë³´ ì¼ì²´ì— 대한 액세스를 부여하므로, ê·¸ ëŒ€ì‹ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì–´ëŠ ì—°ë½ì²˜ë¥¼ ì‚¬ìš©í• ì§€ 사용ìžê°€ ì§ì ‘ ì œì–´í•˜ë„ë¡ í•´ì£¼ëŠ” íŽ¸ì´ ë‚«ìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ í•˜ë ¤ë©´, ë‹¤ìŒ ì ˆì°¨ë¥¼ 사용합니다. </p> @@ -1043,13 +1043,13 @@ startActivityForResult()} 메서드를 사용해서 </li> <li> ì„ íƒ ì•¡í‹°ë¹„í‹°ì—서 사용ìžê°€ ì—…ë°ì´íŠ¸í• ì—°ë½ì²˜ë¥¼ ì„ íƒí•©ë‹ˆë‹¤. - ì´ë ‡ê²Œ ë˜ë©´ ì„ íƒ ì•¡í‹°ë¹„í‹°ê°€ + ì´ë ‡ê²Œ ë˜ë©´ ì„ íƒ ì•¡í‹°ë¹„í‹°ê°€ {@link android.app.Activity#setResult setResult(resultcode, intent)} -를 호출하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ëŒë ¤ì¤„ ì¸í…트를 ì„¤ì •í•©ë‹ˆë‹¤. -ì´ ì¸í…íŠ¸ì— ì‚¬ìš©ìžê°€ ì„ íƒí•œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URI와 "추가" 플래그 -{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}ì´ ë“¤ì–´ 있습니다. -ì´ëŸ¬í•œ 플래그가 URIì— ì•±ìœ¼ë¡œì˜ ê¶Œí•œì„ í—ˆê°€í•˜ì—¬ 콘í…ì¸ URIê°€ 가리킨 ì—°ë½ì²˜ì— 대한 ë°ì´í„°ë¥¼ ì½ì„ 수 있ë„ë¡ í•©ë‹ˆë‹¤. -그런 ë‹¤ìŒ ì„ íƒ ì•¡í‹°ë¹„í‹°ëŠ” {@link android.app.Activity#finish()}를 호출하여 +를 호출하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ëŒë ¤ì¤„ ì¸í…트를 ì„¤ì •í•©ë‹ˆë‹¤. +ì´ ì¸í…íŠ¸ì— ì‚¬ìš©ìžê°€ ì„ íƒí•œ ì—°ë½ì²˜ì˜ 콘í…ì¸ URI와 "추가" 플래그 +{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}ì´ ë“¤ì–´ 있습니다. +ì´ëŸ¬í•œ 플래그가 URIì— ì•±ìœ¼ë¡œì˜ ê¶Œí•œì„ í—ˆê°€í•˜ì—¬ 콘í…ì¸ URIê°€ 가리킨 ì—°ë½ì²˜ì— 대한 ë°ì´í„°ë¥¼ ì½ì„ 수 있ë„ë¡ í•©ë‹ˆë‹¤. +그런 ë‹¤ìŒ ì„ íƒ ì•¡í‹°ë¹„í‹°ëŠ” {@link android.app.Activity#finish()}를 호출하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œì–´ë¥¼ 반환합니다. </li> <li> @@ -1067,7 +1067,7 @@ startActivityForResult()} 메서드를 사용해서 </ol> <h4>다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 사용</h4> <p> - 개발ìžì—게 액세스 ê¶Œí•œì´ ì—†ëŠ” ë°ì´í„°ë¥¼ 사용ìžê°€ ìˆ˜ì •í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•˜ëŠ” 간단한 ë°©ë²•ì€ + 개발ìžì—게 액세스 ê¶Œí•œì´ ì—†ëŠ” ë°ì´í„°ë¥¼ 사용ìžê°€ ìˆ˜ì •í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•˜ëŠ” 간단한 ë°©ë²•ì€ í•´ë‹¹ ê¶Œí•œì„ ê°€ì§€ê³ ìžˆëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 활성화한 ë‹¤ìŒ ì‚¬ìš©ìžì—게 그곳ì—서 작업하ë„ë¡ í•´ì£¼ëŠ” 것입니다. </p> <p> @@ -1082,18 +1082,18 @@ startActivityForResult()} 메서드를 사용해서 <h2 id="ContractClasses">계약 í´ëž˜ìФ</h2> <p> 계약 í´ëž˜ìŠ¤ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 콘í…ì¸ URI, ì—´ ì´ë¦„, ì¸í…트 작업 ë° ì½˜í…ì¸ ì œê³µìžì˜ 다른 기능과 -ìž‘ì—…í• ìˆ˜ 있게 ë„와주는 ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. 계약 í´ëž˜ìŠ¤ëŠ” ì œê³µìžì™€ 함께 ìžë™ìœ¼ë¡œ í¬í•¨ë˜ì§€ 않습니다. +ìž‘ì—…í• ìˆ˜ 있게 ë„와주는 ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. 계약 í´ëž˜ìŠ¤ëŠ” ì œê³µìžì™€ 함께 ìžë™ìœ¼ë¡œ í¬í•¨ë˜ì§€ 않습니다. 해당 ì œê³µìžì˜ 개발ìžê°€ ì´ë¥¼ ì •ì˜í•œ ë‹¤ìŒ ë‹¤ë¥¸ 개발ìžê°€ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•´ì•¼ 합니다. - Android í”Œëž«í¼ ë‚´ì— í¬í•¨ëœ ì œê³µìžëŠ” 대부분 패키지 + Android í”Œëž«í¼ ë‚´ì— í¬í•¨ëœ ì œê³µìžëŠ” 대부분 패키지 {@link android.provider} ì•ˆì— ìƒì‘하는 계약 í´ëž˜ìŠ¤ë¥¼ ê°€ì§€ê³ ìžˆìŠµë‹ˆë‹¤. </p> <p> 예를 들어, ì‚¬ìš©ìž ì‚¬ì „ ì œê³µìžì—는 콘í…ì¸ URI와 ì—´ ì´ë¦„ ìƒìˆ˜ê°€ 들어 있는 -{@link android.provider.UserDictionary} 계약 í´ëž˜ìŠ¤ê°€ 있습니다. +{@link android.provider.UserDictionary} 계약 í´ëž˜ìŠ¤ê°€ 있습니다. "단어" í…Œì´ë¸”ì— ëŒ€í•œ 콘í…ì¸ URI는 ìƒìˆ˜ {@link android.provider.UserDictionary.Words#CONTENT_URI UserDictionary.Words.CONTENT_URI}ì— ì •ì˜ë©ë‹ˆë‹¤. - {@link android.provider.UserDictionary.Words} í´ëž˜ìФì—ë„ -ì—´ ì´ë¦„ ìƒìˆ˜ê°€ 들어 있으며, ì´ëŠ” ì´ ê°€ì´ë“œì˜ 예시 ì¡°ê°ì—서 사용ë©ë‹ˆë‹¤. + {@link android.provider.UserDictionary.Words} í´ëž˜ìФì—ë„ +ì—´ ì´ë¦„ ìƒìˆ˜ê°€ 들어 있으며, ì´ëŠ” ì´ ê°€ì´ë“œì˜ 예시 ì¡°ê°ì—서 사용ë©ë‹ˆë‹¤. 예를 들어 쿼리 프로ì ì…˜ì€ ë‹¤ìŒê³¼ ê°™ì´ ì •ì˜ë 수 있습니다. </p> <pre> @@ -1106,7 +1106,7 @@ String[] mProjection = </pre> <p> ë˜ ë‹¤ë¥¸ 계약 í´ëž˜ìŠ¤ëŠ” ì—°ë½ì²˜ ì œê³µìžì˜ {@link android.provider.ContactsContract}입니다. - ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ 참조 문서ì—는 예시 코드 ì¡°ê°ì´ í¬í•¨ë˜ì–´ 있습니다. + ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ 참조 문서ì—는 예시 코드 ì¡°ê°ì´ í¬í•¨ë˜ì–´ 있습니다. ì´ê²ƒì˜ 하위 í´ëž˜ìФ 중 í•˜ë‚˜ì¸ {@link android.provider.ContactsContract.Intents.Insert}는 ì¸í…트와 ì¸í…트 ë°ì´í„°ì˜ ìƒìˆ˜ê°€ 들어 있는 계약 í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. </p> @@ -1129,7 +1129,7 @@ String[] mProjection = 해당 URI를 사용하는 쿼리가 HTML 태그가 들어 있는 í…스트를 ë°˜í™˜í• ê²ƒì´ë¼ëŠ” 뜻입니다. </p> <p> - ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜• 문ìžì—´ì€ "공급업체별" MIME ìœ í˜•ì´ë¼ê³ ë„ ë¶ˆë¦¬ë©° + ì‚¬ìš©ìž ì§€ì • MIME ìœ í˜• 문ìžì—´ì€ "공급업체별" MIME ìœ í˜•ì´ë¼ê³ ë„ ë¶ˆë¦¬ë©° ì´ìª½ì˜ <em>ìœ í˜•</em>ê³¼ <em>하위 ìœ í˜•</em> ê°’ì´ ë” ë³µìž¡í•©ë‹ˆë‹¤. <em>ìœ í˜•</em> ê°’ì€ ê²½ìš°ì— ë”°ë¼ í•ìƒ ë‹¤ìŒê³¼ 같습니다. </p> <pre> @@ -1184,13 +1184,13 @@ content://com.example.trains/Line2/5 vnd.android.cursor.<strong>item</strong>/vnd.example.line2 </pre> <p> - ëŒ€ë¶€ë¶„ì˜ ì½˜í…ì¸ ì œê³µìžëŠ” ìžì‹ ì´ ì‚¬ìš©í•˜ëŠ” MIME ìœ í˜•ì— ëŒ€í•œ 계약 í´ëž˜ìФ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. + ëŒ€ë¶€ë¶„ì˜ ì½˜í…ì¸ ì œê³µìžëŠ” ìžì‹ ì´ ì‚¬ìš©í•˜ëŠ” MIME ìœ í˜•ì— ëŒ€í•œ 계약 í´ëž˜ìФ ìƒìˆ˜ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. 예를 들어, ì—°ë½ì²˜ ì œê³µìž ê³„ì•½ í´ëž˜ìФ {@link android.provider.ContactsContract.RawContacts}는 ë‹¨ì¼ ì—°ë½ì²˜ í–‰ì˜ MIME ìœ í–‰ì— ëŒ€í•œ ìƒìˆ˜ {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE}ì„ ì •ì˜í•©ë‹ˆë‹¤. </p> <p> - 한 í–‰ì— ëŒ€í•œ 콘í…ì¸ URI는 + 한 í–‰ì— ëŒ€í•œ 콘í…ì¸ URI는 <a href="#ContentURIs">콘í…ì¸ URI</a> ì„¹ì…˜ì— ì„¤ëª…ë˜ì–´ 있습니다. </p> diff --git a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-creating.jd index 6757194a9f28..af7b584c6257 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-creating.jd @@ -95,16 +95,16 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <p> - 콘í…ì¸ ì œê³µìžëŠ” ë°ì´í„°ì˜ 중앙 리í¬ì§€í† ë¦¬ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. Android ì• í”Œë¦¬ì¼€ì´ì…˜ì—서는 + 콘í…ì¸ ì œê³µìžëŠ” ë°ì´í„°ì˜ 중앙 리í¬ì§€í† ë¦¬ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. Android ì• í”Œë¦¬ì¼€ì´ì…˜ì—서는 ì œê³µìžë¥¼ 하나 ì´ìƒì˜ í´ëž˜ìŠ¤ë¡œ, 매니페스트 파ì¼ì— 있는 요소와 함께 구현합니다. - í´ëž˜ìФ 중 하나가 하위 í´ëž˜ìФ -{@link android.content.ContentProvider}를 구현하며, -ì´ê²ƒì´ ì œê³µìžì™€ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì˜ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. 콘í…ì¸ ì œê³µìžëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 해주ë„ë¡ ë§Œë“¤ì–´ì ¸ 있지만, -ë¬¼ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì— ì‚¬ìš©ìžë¡œ 하여금 ì œê³µìžê°€ 관리하는 ë°ì´í„°ë¥¼ ì¿¼ë¦¬í•˜ê³ ìˆ˜ì •í• ìˆ˜ 있게 허용하는 + í´ëž˜ìФ 중 하나가 하위 í´ëž˜ìФ +{@link android.content.ContentProvider}를 구현하며, +ì´ê²ƒì´ ì œê³µìžì™€ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì˜ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. 콘í…ì¸ ì œê³µìžëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 해주ë„ë¡ ë§Œë“¤ì–´ì ¸ 있지만, +ë¬¼ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì— ì‚¬ìš©ìžë¡œ 하여금 ì œê³µìžê°€ 관리하는 ë°ì´í„°ë¥¼ ì¿¼ë¦¬í•˜ê³ ìˆ˜ì •í• ìˆ˜ 있게 허용하는 액티비티가 ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> <p> - ì´ ì£¼ì œì˜ ë‚˜ë¨¸ì§€ ë¶€ë¶„ì€ ì½˜í…ì¸ ì œê³µìžë¥¼ 구축하기 위한 기본 단계 목ë¡ê³¼ + ì´ ì£¼ì œì˜ ë‚˜ë¨¸ì§€ ë¶€ë¶„ì€ ì½˜í…ì¸ ì œê³µìžë¥¼ 구축하기 위한 기본 단계 목ë¡ê³¼ ì‚¬ìš©í• API 목ë¡ìœ¼ë¡œ ì´ë£¨ì–´ì ¸ 있습니다. </p> @@ -124,12 +124,12 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <li>검색 í”„ë ˆìž„ì›Œí¬ë¥¼ 사용한 ì‚¬ìš©ìž ì§€ì • 검색 ì œì•ˆì„ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우</li> </ul> <p> - ìš©ë„ê°€ 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서로 ì™„ì „ížˆ í•œì •ë˜ì–´ 있는 경우ì—는 + ìš©ë„ê°€ 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ 안ì—서로 ì™„ì „ížˆ í•œì •ë˜ì–´ 있는 경우ì—는 ì œê³µìžê°€ SQLite ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 사용하ë„ë¡ í•˜ì§€ <em>않아ë„</em> ë©ë‹ˆë‹¤. </p> </li> <li> - ì•„ì§ ì½ì§€ 않았다면, 지금 바로 + ì•„ì§ ì½ì§€ 않았다면, 지금 바로 <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> 콘í…ì¸ ì œê³µìž ê¸°ë³¸ ì •ë³´</a>를 ì½ê³ ì œê³µìžì— 대해 ìžì„¸ížˆ 알아보ì‹ì‹œì˜¤. </li> @@ -146,8 +146,8 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± </dt> <dd> ì¼ë°˜ì 으로 사진, 오디오 ë˜ëŠ” ë™ì˜ìƒê³¼ ê°™ì€ -파ì¼ì— 들어가는 ë°ì´í„°ìž…니다. ì´ëŸ° 파ì¼ì„ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 비공개 -ê³µê°„ì— ì €ìž¥í•©ë‹ˆë‹¤. ì œê³µìžëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„° 온 íŒŒì¼ ìš”ì²ì— ì‘답하여 +파ì¼ì— 들어가는 ë°ì´í„°ìž…니다. ì´ëŸ° 파ì¼ì„ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 비공개 +ê³µê°„ì— ì €ìž¥í•©ë‹ˆë‹¤. ì œê³µìžëŠ” 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„° 온 íŒŒì¼ ìš”ì²ì— ì‘답하여 해당 파ì¼ë¡œì˜ í•¸ë“¤ì„ ì œê³µí• ìˆ˜ 있습니다. </dd> <dt> @@ -155,9 +155,9 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± </dt> <dd> ì¼ë°˜ì 으로 ë°ì´í„°ë² ì´ìФ, ë°°ì—´ ë˜ëŠ” ìœ ì‚¬ êµ¬ì¡°ì— ë“¤ì–´ê°€ëŠ” ë°ì´í„°ìž…니다. - ì´ ë°ì´í„°ë¥¼ 행과 열로 ì´ë£¨ì–´ì§„ í…Œì´ë¸”ê³¼ 호환ë˜ëŠ” 형ì‹ìœ¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤. -í–‰ì€ ì‚¬ëžŒì´ë‚˜ ì¸ë²¤í† ë¦¬ì˜ í•목과 ê°™ì€ ì—”í‹°í‹°ë¥¼ 나타냅니다. -ì—´ì€ í•´ë‹¹ ì—”í‹°í‹°ì— ëŒ€í•œ 몇 가지 ë°ì´í„°, 예를 들어 사람 ì´ë¦„ì´ë‚˜ í•목 가격 ë“±ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. + ì´ ë°ì´í„°ë¥¼ 행과 열로 ì´ë£¨ì–´ì§„ í…Œì´ë¸”ê³¼ 호환ë˜ëŠ” 형ì‹ìœ¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤. +í–‰ì€ ì‚¬ëžŒì´ë‚˜ ì¸ë²¤í† ë¦¬ì˜ í•목과 ê°™ì€ ì—”í‹°í‹°ë¥¼ 나타냅니다. +ì—´ì€ í•´ë‹¹ ì—”í‹°í‹°ì— ëŒ€í•œ 몇 가지 ë°ì´í„°, 예를 들어 사람 ì´ë¦„ì´ë‚˜ í•목 가격 ë“±ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ì´ ìœ í˜•ì˜ ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” 보편ì ì¸ ë°©ë²•ì€ SQLite ë°ì´í„°ë² ì´ìФ ì•ˆì— ì €ìž¥í•˜ëŠ” 것ì´ì§€ë§Œ, ëª¨ë“ ìœ í˜•ì˜ ì˜êµ¬ì ì¸ ì €ìž¥ì†Œë¥¼ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. Android 시스템ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì €ìž¥ì†Œ ìœ í˜•ì— ëŒ€í•´ ìžì„¸ížˆ ì•Œì•„ë³´ë ¤ë©´, <a href="#DataStorage"> @@ -172,11 +172,11 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <a href="#ContentProvider">ContentProvider í´ëž˜ìФ 구현</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </li> <li> - ì œê³µìžì˜ 권한 문ìžì—´, ê·¸ 콘í…ì¸ URI ë° ì—´ ì´ë¦„ì„ ì •ì˜í•©ë‹ˆë‹¤. + ì œê³µìžì˜ 권한 문ìžì—´, ê·¸ 콘í…ì¸ URI ë° ì—´ ì´ë¦„ì„ ì •ì˜í•©ë‹ˆë‹¤. ì œê³µìž ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì¸í…트를 처리하게 í•˜ë ¤ë©´, ì¸í…트 작업과 추가 ë°ì´í„° ë° -í”Œëž˜ê·¸ë„ ì •ì˜í•©ë‹ˆë‹¤. ë°ì´í„°ì— 액세스하기를 ì›í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì— ìš”êµ¬í• ê¶Œí•œë„ -ì •ì˜í•©ë‹ˆë‹¤. ì´ ëª¨ë“ ê°’ì€ ë³„ë„ì˜ ê³„ì•½ í´ëž˜ìФì—서 ìƒìˆ˜ë¡œ ì •ì˜í•˜ëŠ” ê²ƒì„ ê³ ë ¤í•´ë³´ëŠ” -ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ ë‚˜ì¤‘ì— ë‹¤ë¥¸ 개발ìžì—게 ë…¸ì¶œí• ìˆ˜ 있습니다. +í”Œëž˜ê·¸ë„ ì •ì˜í•©ë‹ˆë‹¤. ë°ì´í„°ì— 액세스하기를 ì›í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì— ìš”êµ¬í• ê¶Œí•œë„ +ì •ì˜í•©ë‹ˆë‹¤. ì´ ëª¨ë“ ê°’ì€ ë³„ë„ì˜ ê³„ì•½ í´ëž˜ìФì—서 ìƒìˆ˜ë¡œ ì •ì˜í•˜ëŠ” ê²ƒì„ ê³ ë ¤í•´ë³´ëŠ” +ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ë¥¼ ë‚˜ì¤‘ì— ë‹¤ë¥¸ 개발ìžì—게 ë…¸ì¶œí• ìˆ˜ 있습니다. 콘í…ì¸ URIì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="#ContentURI">콘í…ì¸ URI 설계</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì¸í…íŠ¸ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” @@ -193,8 +193,8 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <!-- Designing Data Storage --> <h2 id="DataStorage">ë°ì´í„° ì €ìž¥ì†Œ 설계</h2> <p> - 콘í…ì¸ ì œê³µìžëŠ” êµ¬ì¡°í™”ëœ í˜•ì‹ìœ¼ë¡œ ì €ìž¥ëœ ë°ì´í„°ë¡œì˜ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. -ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í•˜ê¸° ì „ì— ìš°ì„ ë°ì´í„° ì €ìž¥ ë°©ì‹ë¶€í„° ê²°ì •í•´ì•¼ 합니다. + 콘í…ì¸ ì œê³µìžëŠ” êµ¬ì¡°í™”ëœ í˜•ì‹ìœ¼ë¡œ ì €ìž¥ëœ ë°ì´í„°ë¡œì˜ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. +ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ìƒì„±í•˜ê¸° ì „ì— ìš°ì„ ë°ì´í„° ì €ìž¥ ë°©ì‹ë¶€í„° ê²°ì •í•´ì•¼ 합니다. ë°ì´í„°ëŠ” ì›í•˜ëŠ” í˜•ì‹ ì•„ë¬´ 것으로나 ì €ìž¥í• ìˆ˜ 있으며 그런 다ìŒì— í•„ìš”ì— ë”°ë¼ í•´ë‹¹ ë°ì´í„°ë¥¼ ì½ê³ 쓸 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 설계합니다. </p> <p> @@ -203,26 +203,26 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <ul> <li> Android 시스템ì—는 Android ìžì²´ ì œê³µìžê°€ í…Œì´ë¸” 지향ì ë°ì´í„°ë¥¼ -ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©í•˜ëŠ” SQLite ë°ì´í„°ë² ì´ìФ APIê°€ í¬í•¨ë©ë‹ˆë‹¤. +ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©í•˜ëŠ” SQLite ë°ì´í„°ë² ì´ìФ APIê°€ í¬í•¨ë©ë‹ˆë‹¤. {@link android.database.sqlite.SQLiteOpenHelper} í´ëž˜ìŠ¤ëŠ” ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìƒì„±í• 수 있게 ë•ê³ , {@link android.database.sqlite.SQLiteDatabase} í´ëž˜ìŠ¤ëŠ” ë°ì´í„°ë² ì´ìФ 액세스를 위한 기본 í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤. <p> - 리í¬ì§€í† 리를 구현하기 위해 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 사용하지 ì•Šì•„ë„ ëœë‹¤ëŠ” ì ì„ ê¸°ì–µí•˜ì‹ì‹œì˜¤. -ì œê³µìžëŠ” ì™¸ë¶€ì— í…Œì´ë¸” 집합으로 나타나 관계ì ë°ì´í„°ë² ì´ìŠ¤ì™€ 비슷해 ë³´ì´ì§€ë§Œ, + 리í¬ì§€í† 리를 구현하기 위해 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 사용하지 ì•Šì•„ë„ ëœë‹¤ëŠ” ì ì„ ê¸°ì–µí•˜ì‹ì‹œì˜¤. +ì œê³µìžëŠ” ì™¸ë¶€ì— í…Œì´ë¸” 집합으로 나타나 관계ì ë°ì´í„°ë² ì´ìŠ¤ì™€ 비슷해 ë³´ì´ì§€ë§Œ, ì´ê²ƒì€ ì œê³µìžì˜ ë‚´ë¶€ êµ¬í˜„ì— í•„ìš”í•œ ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. </p> </li> <li> íŒŒì¼ ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” ë° ìžˆì–´ Androidì—는 다양한 íŒŒì¼ ì§€í–¥ì APIê°€ 있습니다. íŒŒì¼ ì €ìž¥ì†Œì— ê´€í•´ ìžì„¸ížˆ ì•Œì•„ë³´ë ¤ë©´ -<a href="{@docRoot}guide/topics/data/data-storage.html">ë°ì´í„° ì €ìž¥ì†Œ</a> ì£¼ì œë¥¼ ì½ì–´ ë³´ì‹ì‹œì˜¤. -ìŒì•…ì´ë‚˜ ë™ì˜ìƒ 등 미디어 ê´€ë ¨ ë°ì´í„°ë¥¼ ì œê³µí•˜ëŠ” ì œê³µìžë¥¼ 설계하는 경우, +<a href="{@docRoot}guide/topics/data/data-storage.html">ë°ì´í„° ì €ìž¥ì†Œ</a> ì£¼ì œë¥¼ ì½ì–´ ë³´ì‹ì‹œì˜¤. +ìŒì•…ì´ë‚˜ ë™ì˜ìƒ 등 미디어 ê´€ë ¨ ë°ì´í„°ë¥¼ ì œê³µí•˜ëŠ” ì œê³µìžë¥¼ 설계하는 경우, ì œê³µìžê°€ í…Œì´ë¸” ë°ì´í„°ì™€ 파ì¼ì„ ì¡°í•© í• ìˆ˜ 있습니다. </li> <li> - ë„¤íŠ¸ì›Œí¬ ê¸°ë°˜ ë°ì´í„°ë¥¼ 다루는 경우, {@link java.net} ë° -{@link android.net} ë‚´ì˜ í´ëž˜ìŠ¤ë¥¼ 사용하ì‹ì‹œì˜¤. ë„¤íŠ¸ì›Œí¬ ê¸°ë°˜ ë°ì´í„°ë¥¼ + ë„¤íŠ¸ì›Œí¬ ê¸°ë°˜ ë°ì´í„°ë¥¼ 다루는 경우, {@link java.net} ë° +{@link android.net} ë‚´ì˜ í´ëž˜ìŠ¤ë¥¼ 사용하ì‹ì‹œì˜¤. ë„¤íŠ¸ì›Œí¬ ê¸°ë°˜ ë°ì´í„°ë¥¼ ë°ì´í„°ë² ì´ìŠ¤ì™€ ê°™ì€ ë¡œì»¬ ë°ì´í„° ìŠ¤í† ì–´ì™€ ë™ê¸°í™”한 다ìŒ, 해당 ë°ì´í„°ë¥¼ í…Œì´ë¸”ì´ë‚˜ 파ì¼ë¡œ ì œê³µí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> 샘플 ë™ê¸°í™” 어댑터</a> 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ëŸ° ìœ í˜•ì˜ ë™ê¸°í™”를 ë³´ì—¬ì¤ë‹ˆë‹¤. @@ -237,7 +237,7 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <ul> <li> í…Œì´ë¸” ë°ì´í„°ëŠ” ì–¸ì œë‚˜ ì œê³µìžê°€ ìœ ì§€ê´€ë¦¬í•˜ëŠ” "기본 키" ì—´ì„ -ê° í–‰ì˜ ê³ ìœ í•œ ìˆ«ìž ê°’ìœ¼ë¡œ ë³´ìœ í•˜ê³ ìžˆì–´ì•¼ 합니다. ì´ ê°’ì„ ì‚¬ìš©í•˜ì—¬ 해당 í–‰ì„ ë‹¤ë¥¸ í…Œì´ë¸”ì˜ +ê° í–‰ì˜ ê³ ìœ í•œ ìˆ«ìž ê°’ìœ¼ë¡œ ë³´ìœ í•˜ê³ ìžˆì–´ì•¼ 합니다. ì´ ê°’ì„ ì‚¬ìš©í•˜ì—¬ 해당 í–‰ì„ ë‹¤ë¥¸ í…Œì´ë¸”ì˜ ê´€ë ¨ í–‰ì— ì—°ê²°ì‹œí‚¬ 수 있습니다(ì´ë¥¼ "외래 키"로 사용). ì´ ì—´ì—는 ì–´ëŠ ì´ë¦„ì´ë“ ì‚¬ìš©í• ìˆ˜ 있지만 {@link android.provider.BaseColumns#_ID BaseColumns._ID}를 사용하는 ê²ƒì´ ê°€ìž¥ 좋습니다. 왜ëƒí•˜ë©´ ì œê³µìž ì¿¼ë¦¬ 결과를 @@ -246,8 +246,8 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± </li> <li> 비트맵 ì´ë¯¸ì§€ë‚˜ íŒŒì¼ ì§€í–¥ì ë°ì´í„°ì˜ 매우 í° ì¡°ê°ì„ ì œê³µí•˜ë ¤ë©´ -í…Œì´ë¸” ì•ˆì— ì§ì ‘ ì €ìž¥í•˜ê¸°ë³´ë‹¤ëŠ” 파ì¼ì— ë°ì´í„°ë¥¼ ì €ìž¥í•œ ë’¤ -ê°„ì ‘ì 으로 ì œê³µí•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하는 경우, ì œê³µìžì˜ 사용ìžë“¤ì—게 ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ +í…Œì´ë¸” ì•ˆì— ì§ì ‘ ì €ìž¥í•˜ê¸°ë³´ë‹¤ëŠ” 파ì¼ì— ë°ì´í„°ë¥¼ ì €ìž¥í•œ ë’¤ +ê°„ì ‘ì 으로 ì œê³µí•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하는 경우, ì œê³µìžì˜ 사용ìžë“¤ì—게 ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ {@link android.content.ContentResolver} íŒŒì¼ ë©”ì„œë“œë¥¼ 사용해야 í•œë‹¤ê³ ì•Œë ¤ì•¼ 합니다. </li> <li> @@ -256,12 +256,12 @@ page.title= 콘í…ì¸ ì œê³µìž ìƒì„± <a href="http://code.google.com/p/protobuf">í”„ë¡œí† ì½œ 버í¼</a> ë˜ëŠ” <a href="http://www.json.org">JSON 구조</a>를 ì €ìž¥í• ìˆ˜ 있습니다. <p> - BLOB를 사용하여 <em>ìŠ¤í‚¤ë§ˆì— ì¢…ì†ë˜ì§€ 않ì€</em> í…Œì´ë¸”ì„ êµ¬í˜„í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. + BLOB를 사용하여 <em>ìŠ¤í‚¤ë§ˆì— ì¢…ì†ë˜ì§€ 않ì€</em> í…Œì´ë¸”ì„ êµ¬í˜„í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ìœ í˜•ì˜ í…Œì´ë¸”ì—서는, 기본 키 ì—´, MIME ìœ í˜• ì—´ ë° í•˜ë‚˜ ì´ìƒì˜ ì¼ë°˜ì ì¸ ì—´ì„ BLOB로 ì •ì˜í•©ë‹ˆë‹¤. - -BLOB ì—´ì— ìžˆëŠ” ë°ì´í„°ì˜ ì˜ë¯¸ëŠ” MIME ìœ í˜• ì—´ì— ìžˆëŠ” 값으로 나타냅니다. -ì´ë ‡ê²Œ 하면 ê°™ì€ í…Œì´ë¸”ì— ì—¬ëŸ¬ 가지 í–‰ ìœ í˜•ì„ ì €ìž¥í• ìˆ˜ 있습니다. ì—°ë½ì²˜ ì œê³µìžì˜ "ë°ì´í„°" í…Œì´ë¸” -{@link android.provider.ContactsContract.Data}ê°€ + +BLOB ì—´ì— ìžˆëŠ” ë°ì´í„°ì˜ ì˜ë¯¸ëŠ” MIME ìœ í˜• ì—´ì— ìžˆëŠ” 값으로 나타냅니다. +ì´ë ‡ê²Œ 하면 ê°™ì€ í…Œì´ë¸”ì— ì—¬ëŸ¬ 가지 í–‰ ìœ í˜•ì„ ì €ìž¥í• ìˆ˜ 있습니다. ì—°ë½ì²˜ ì œê³µìžì˜ "ë°ì´í„°" í…Œì´ë¸” +{@link android.provider.ContactsContract.Data}ê°€ ìŠ¤í‚¤ë§ˆì— ì¢…ì†ë˜ì§€ ì•Šì€ í…Œì´ë¸”ì˜ í•œ 가지 예입니다. </p> </li> @@ -269,11 +269,11 @@ BLOB ì—´ì— ìžˆëŠ” ë°ì´í„°ì˜ ì˜ë¯¸ëŠ” MIME ìœ í˜• ì—´ì— ìžˆëŠ” 값으로 ë‚ <!-- Designing Content URIs --> <h2 id="ContentURI">콘í…ì¸ URI 설계</h2> <p> - <strong>콘í…ì¸ URI</strong>는 ì œê³µìžì—서 ë°ì´í„°ë¥¼ ì‹ë³„하는 URI입니다. + <strong>콘í…ì¸ URI</strong>는 ì œê³µìžì—서 ë°ì´í„°ë¥¼ ì‹ë³„하는 URI입니다. 콘í…ì¸ URIì—는 ì „ì²´ ì œê³µìžì˜ ìƒì§•ì ì¸ ì´ë¦„(ì œê³µìžì˜ <strong>권한</strong>)ê³¼ -í…Œì´ë¸” ë˜ëŠ” 파ì¼ì„ 가리키는 ì´ë¦„(<strong>경로</strong>)ì´ í¬í•¨ë©ë‹ˆë‹¤. -ì„ íƒ í•목 ID ë¶€ë¶„ì€ í…Œì´ë¸” ë‚´ì˜ ê°œë³„ì ì¸ í–‰ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. -{@link android.content.ContentProvider}ì˜ ëª¨ë“ ë°ì´í„° 액세스 메서드는 +í…Œì´ë¸” ë˜ëŠ” 파ì¼ì„ 가리키는 ì´ë¦„(<strong>경로</strong>)ì´ í¬í•¨ë©ë‹ˆë‹¤. +ì„ íƒ í•목 ID ë¶€ë¶„ì€ í…Œì´ë¸” ë‚´ì˜ ê°œë³„ì ì¸ í–‰ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. +{@link android.content.ContentProvider}ì˜ ëª¨ë“ ë°ì´í„° 액세스 메서드는 콘í…ì¸ URI를 ì¸ìˆ˜ë¡œ 가집니다. ì´ë¥¼ 통해 ì•¡ì„¸ìŠ¤í• í…Œì´ë¸”, í–‰ ë˜ëŠ” 파ì¼ì„ ê²°ì •í• ìˆ˜ 있습니다. </p> <p> @@ -283,9 +283,9 @@ BLOB ì—´ì— ìžˆëŠ” ë°ì´í„°ì˜ ì˜ë¯¸ëŠ” MIME ìœ í˜• ì—´ì— ìžˆëŠ” 값으로 ë‚ </p> <h3>권한 설계</h3> <p> - ì œê³µìžì—는 보통 í•˜ë‚˜ì˜ ê¶Œí•œì´ ìžˆìœ¼ë©°, ì´ê²ƒì´ Android ë‚´ë¶€ ì´ë¦„ ì—í• ì„ í•©ë‹ˆë‹¤. + ì œê³µìžì—는 보통 í•˜ë‚˜ì˜ ê¶Œí•œì´ ìžˆìœ¼ë©°, ì´ê²ƒì´ Android ë‚´ë¶€ ì´ë¦„ ì—í• ì„ í•©ë‹ˆë‹¤. 다른 ì œê³µìžì™€ì˜ ì¶©ëŒì„ í”¼í•˜ë ¤ë©´, ì œê³µìž ê¶Œí•œì˜ ê¸°ë°˜ìœ¼ë¡œ ì¸í„°ë„· ë„ë©”ì¸ ì†Œìœ ê¶Œ(ì—ë°©í–¥)ì„ -사용해야 합니다. ì´ ê¶Œìž¥ 사í•ì€ Android 패키지 ì´ë¦„ì—ë„ ì ìš©ë˜ë¯€ë¡œ, +사용해야 합니다. ì´ ê¶Œìž¥ 사í•ì€ Android 패키지 ì´ë¦„ì—ë„ ì ìš©ë˜ë¯€ë¡œ, ì œê³µìž ê¶Œí•œì„ ì œê³µìžê°€ 들어 있는 íŒ¨í‚¤ì§€ì˜ ì´ë¦„ 확장ìžë¡œ ì •ì˜í•´ë„ ë©ë‹ˆë‹¤. 예를 들어, Android 패키지 ì´ë¦„ì´ <code>com.example.<appname></code>ë¼ë©´, ì œê³µìžì—게 @@ -293,40 +293,40 @@ BLOB ì—´ì— ìžˆëŠ” ë°ì´í„°ì˜ ì˜ë¯¸ëŠ” MIME ìœ í˜• ì—´ì— ìžˆëŠ” 값으로 ë‚ </p> <h3>경로 구조 설계</h3> <p> - 개발ìžëŠ” 보통 권한으로부터 콘í…ì¸ URI를 ìƒì„±í• 때 개별ì ì¸ í…Œì´ë¸”ì„ ê°€ë¦¬í‚¤ëŠ” + 개발ìžëŠ” 보통 권한으로부터 콘í…ì¸ URI를 ìƒì„±í• 때 개별ì ì¸ í…Œì´ë¸”ì„ ê°€ë¦¬í‚¤ëŠ” 경로를 추가하는 ë°©ì‹ì„ 사용합니다. 예를 들어, <em>table1</em>ê³¼ <em>table2</em>ë¼ëŠ” í…Œì´ë¸”ì´ ìžˆë‹¤ë©´, ì´ì „ ì˜ˆì‹œì˜ ê¶Œí•œì„ ì¡°í•©í•˜ì—¬ -콘í…ì¸ URI<code>com.example.<appname>.provider/table1</code>와 +콘í…ì¸ URI<code>com.example.<appname>.provider/table1</code>와 <code>com.example.<appname>.provider/table2</code>를 ë„출합니다. - + 경로는 í•˜ë‚˜ì˜ ì„¸ê·¸ë¨¼íŠ¸ì— êµí•œë˜ì§€ 않으며, ê²½ë¡œì˜ ê° ìˆ˜ì¤€ì— ëŒ€í•œ í…Œì´ë¸”ì´ ì•„ë‹ˆì–´ë„ ë©ë‹ˆë‹¤. </p> <h3>콘í…ì¸ URI ID 처리</h3> <p> - ê·œì¹™ì— ì˜í•˜ë©´, ì œê³µìžëŠ” URI 맨 ëì—서 í–‰ì— ëŒ€í•œ ID ê°’ì´ ìžˆëŠ” 콘í…ì¸ URI를 허용하여 -í…Œì´ë¸” ë‚´ í•˜ë‚˜ì˜ í–‰ìœ¼ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ ì œê³µí•©ë‹ˆë‹¤. ë˜í•œ ê·œì¹™ì— ì˜í•´ ì œê³µìžëŠ” -ì´ ID ê°’ì„ í…Œì´ë¸”ì˜ <code>_ID</code> ì—´ì— ì¼ì¹˜ì‹œì¼œì•¼ 하며, + ê·œì¹™ì— ì˜í•˜ë©´, ì œê³µìžëŠ” URI 맨 ëì—서 í–‰ì— ëŒ€í•œ ID ê°’ì´ ìžˆëŠ” 콘í…ì¸ URI를 허용하여 +í…Œì´ë¸” ë‚´ í•˜ë‚˜ì˜ í–‰ìœ¼ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ ì œê³µí•©ë‹ˆë‹¤. ë˜í•œ ê·œì¹™ì— ì˜í•´ ì œê³µìžëŠ” +ì´ ID ê°’ì„ í…Œì´ë¸”ì˜ <code>_ID</code> ì—´ì— ì¼ì¹˜ì‹œì¼œì•¼ 하며, ì¼ì¹˜í•œ í–‰ì— ëŒ€í•˜ì—¬ ìš”ì²ëœ 액세스 허가를 수행해야 합니다. </p> <p> - ì´ ê·œì¹™ì€ ì œê³µìžì— 액세스하는 ì•±ì„ ìœ„í•œ 공통 설계 íŒ¨í„´ì„ ì„¸ìš°ëŠ” ë° ìœ ìš©í•©ë‹ˆë‹¤. + ì´ ê·œì¹™ì€ ì œê³µìžì— 액세스하는 ì•±ì„ ìœ„í•œ 공통 설계 íŒ¨í„´ì„ ì„¸ìš°ëŠ” ë° ìœ ìš©í•©ë‹ˆë‹¤. ì•±ì´ ì œê³µìžì— 대한 쿼리를 ìˆ˜í–‰í•˜ê³ ê·¸ 결과로 나온 {@link android.database.Cursor}를 {@link android.widget.ListView}ì— {@link android.widget.CursorAdapter}를 사용하여 표시합니다. - {@link android.widget.CursorAdapter}ì˜ ì •ì˜ì— 따르면 + {@link android.widget.CursorAdapter}ì˜ ì •ì˜ì— 따르면 {@link android.database.Cursor} ì•ˆì˜ ì—´ 중 하나는 <code>_ID</code>여야 합니다. </p> <p> - 그러면 사용ìžê°€ ë°ì´í„°ë¥¼ 살펴보거나 ìˆ˜ì •í•˜ê¸° 위하여 + 그러면 사용ìžê°€ ë°ì´í„°ë¥¼ 살펴보거나 ìˆ˜ì •í•˜ê¸° 위하여 UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link android.widget.ListView}를 ì§€ì›í•˜ëŠ” {@link android.database.Cursor}ì—서 해당하는 ì—´ì„ ê°€ì ¸ì˜¤ê³ , 해당 ì—´ì— ëŒ€í•œ <code>_ID</code> ê°’ì„ ê°€ì ¸ì™€ì„œ -콘í…ì¸ URIì— ì¶”ê°€í•˜ê³ , ì œê³µìžì— 액세스 ìš”ì²ì„ ì „ì†¡í•©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ì œê³µìžëŠ” +콘í…ì¸ URIì— ì¶”ê°€í•˜ê³ , ì œê³µìžì— 액세스 ìš”ì²ì„ ì „ì†¡í•©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ì œê³µìžëŠ” 사용ìžê°€ ì„ íƒí•œ 바로 ê·¸ í–‰ì— ëŒ€í•´ 쿼리 ë˜ëŠ” ìˆ˜ì • ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다. </p> <h3>콘í…ì¸ URI 패턴</h3> <p> - ìˆ˜ì‹ ë˜ëŠ” 콘í…ì¸ URIì— ëŒ€í•´ ì–´ë–¤ 조치를 ì·¨í• ì§€ ì„ íƒí•˜ëŠ” ë° ë„ì›€ì´ ë˜ë„ë¡ í•˜ê¸° 위해 ì œê³µìž APIì— -íŽ¸ì˜ í´ëž˜ìФ {@link android.content.UriMatcher}ê°€ -í¬í•¨ë˜ì–´ 있습니다. ì´ëŠ” 콘í…ì¸ URI "패턴"ì„ ì •ìˆ˜ê°’ìœ¼ë¡œ 매핑합니다. ì´ ì •ìˆ˜ê°’ì€ íŠ¹ì • íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” + ìˆ˜ì‹ ë˜ëŠ” 콘í…ì¸ URIì— ëŒ€í•´ ì–´ë–¤ 조치를 ì·¨í• ì§€ ì„ íƒí•˜ëŠ” ë° ë„ì›€ì´ ë˜ë„ë¡ í•˜ê¸° 위해 ì œê³µìž APIì— +íŽ¸ì˜ í´ëž˜ìФ {@link android.content.UriMatcher}ê°€ +í¬í•¨ë˜ì–´ 있습니다. ì´ëŠ” 콘í…ì¸ URI "패턴"ì„ ì •ìˆ˜ê°’ìœ¼ë¡œ 매핑합니다. ì´ ì •ìˆ˜ê°’ì€ íŠ¹ì • íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” 콘í…ì¸ URI ë˜ëŠ” 여러 URIì— ëŒ€í•´ ì›í•˜ëŠ” ìž‘ì—…ì„ ì„ íƒí•˜ëŠ” ë° <code>switch</code> 문ì—서 ì‚¬ìš©í• ìˆ˜ 있습니다. </p> <p> @@ -341,8 +341,8 @@ UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link andro </li> </ul> <p> - 콘í…ì¸ URI ì²˜ë¦¬ì˜ ì„¤ê³„ì™€ ì½”ë”©ì— ëŒ€í•œ 예시로서 ìž„ì˜ì˜ ì œê³µìžë¥¼ 들어 ë³´ê² ìŠµë‹ˆë‹¤. -ì´ ì œê³µìžì—는 권한 <code>com.example.app.provider</code>ê°€ ìžˆê³ + 콘í…ì¸ URI ì²˜ë¦¬ì˜ ì„¤ê³„ì™€ ì½”ë”©ì— ëŒ€í•œ 예시로서 ìž„ì˜ì˜ ì œê³µìžë¥¼ 들어 ë³´ê² ìŠµë‹ˆë‹¤. +ì´ ì œê³µìžì—는 권한 <code>com.example.app.provider</code>ê°€ ìžˆê³ ì´ ê¶Œí•œì´ í…Œì´ë¸”ì„ ê°€ë¦¬í‚¤ëŠ” ë‹¤ìŒ ì½˜í…ì¸ URI를 ì¸ì‹í•©ë‹ˆë‹¤. </p> <ul> @@ -350,11 +350,11 @@ UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link andro <code>content://com.example.app.provider/table1</code>: <code>table1</code>ì´ë¼ëŠ” í…Œì´ë¸”입니다. </li> <li> - <code>content://com.example.app.provider/table2/dataset1</code>: + <code>content://com.example.app.provider/table2/dataset1</code>: <code>dataset1</code>ì´ë¼ëŠ” í…Œì´ë¸”입니다. </li> <li> - <code>content://com.example.app.provider/table2/dataset2</code>: + <code>content://com.example.app.provider/table2/dataset2</code>: <code>dataset2</code>ë¼ëŠ” í…Œì´ë¸”입니다. </li> <li> @@ -363,7 +363,7 @@ UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link andro </ul> <p> ì œê³µìžëŠ” ì¶”ê°€ëœ í–‰ IDê°€ 있으면 ì´ëŸ° 콘í…ì¸ URIë„ ì¸ì‹í•©ë‹ˆë‹¤. -예를 들어, <code>table3</code>ì—서 <code>1</code>ì´ ì‹ë³„한 í–‰ì— ëŒ€í•œ +예를 들어, <code>table3</code>ì—서 <code>1</code>ì´ ì‹ë³„한 í–‰ì— ëŒ€í•œ <code>content://com.example.app.provider/table3/1</code>ì´ ì´ì— 해당ë©ë‹ˆë‹¤. </p> <p> @@ -385,7 +385,7 @@ UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link andro <code>table3</code>ì— ëŒ€í•œ 콘í…ì¸ URI와 ì¼ì¹˜í•˜ì§€ 않습니다. </dd> <dt> - <code>content://com.example.app.provider/table3/#</code>: + <code>content://com.example.app.provider/table3/#</code>: <code>table3</code>ì˜ ë‹¨ì¼ í–‰ì— ëŒ€í•œ 콘í…ì¸ URI와 ì¼ì¹˜í•©ë‹ˆë‹¤. 예를 들어, <code>6</code>ì´ ì‹ë³„한 í–‰ì— ëŒ€í•œ <code>content://com.example.app.provider/table3/6</code>ì´ ì´ì— 해당ë©ë‹ˆë‹¤. @@ -393,8 +393,8 @@ UIì—서 í‘œì‹œëœ ì—¬ëŸ¬ í–‰ 중 하나를 ì„ íƒí•©ë‹ˆë‹¤. ì•±ì€ {@link andro </dl> <p> ë‹¤ìŒ ì½”ë“œ ì¡°ê°ì€ {@link android.content.UriMatcher} 작업ì—서 ë©”ì„œë“œì˜ ìž‘ìš© ì›ë¦¬ë¥¼ 나타낸 것입니다. - ì´ ì½”ë“œëŠ” í…Œì´ë¸”ì— ëŒ€í•œ 콘í…ì¸ URI 패턴 <code>content://<authority>/<path></code>와 -ë‹¨ì¼ í–‰ì— ëŒ€í•œ 콘í…ì¸ URI 패턴 <code>content://<authority>/<path>/<id></code>를 사용하여 + ì´ ì½”ë“œëŠ” í…Œì´ë¸”ì— ëŒ€í•œ 콘í…ì¸ URI 패턴 <code>content://<authority>/<path></code>와 +ë‹¨ì¼ í–‰ì— ëŒ€í•œ 콘í…ì¸ URI 패턴 <code>content://<authority>/<path>/<id></code>를 사용하여 ë‹¨ì¼ í–‰ì— ëŒ€í•œ URI와 ì „ì²´ í…Œì´ë¸”ì— ëŒ€í•œ URI를 서로 다르게 처리합니다. </p> @@ -468,7 +468,7 @@ public class ExampleProvider extends ContentProvider { } </pre> <p> - ë˜ ë‹¤ë¥¸ í´ëž˜ìФ, {@link android.content.ContentUris}ê°€ + ë˜ ë‹¤ë¥¸ í´ëž˜ìФ, {@link android.content.ContentUris}ê°€ 콘í…ì¸ URIì˜ <code>id</code> ë¶€ë¶„ì„ ë‹¤ë£¨ê¸° 위한 íŽ¸ì˜ ë©”ì„œë“œë¥¼ ì œê³µí•©ë‹ˆë‹¤. í´ëž˜ìФ {@link android.net.Uri}와 {@link android.net.Uri.Builder}ì—는 기존 {@link android.net.Uri} 개체를 구문 ë¶„ì„í•˜ê³ ìƒˆë¡œìš´ 개체를 구축하기 위한 íŽ¸ì˜ ë©”ì„œë“œê°€ í¬í•¨ë˜ì–´ 있습니다. @@ -478,15 +478,15 @@ public class ExampleProvider extends ContentProvider { <h2 id="ContentProvider">ContentProvider í´ëž˜ìФ 구현</h2> <p> {@link android.content.ContentProvider} ì¸ìŠ¤í„´ìŠ¤ëŠ” -다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„°ì˜ ìš”ì²ì„ 처리하여 êµ¬ì¡°í™”ëœ ë°ì´í„° ì„¸íŠ¸ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. -ëª¨ë“ í˜•íƒœì˜ ì•¡ì„¸ì„œê°€ ê¶ê·¹ì 으로 {@link android.content.ContentResolver}를 호출하며, +다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„°ì˜ ìš”ì²ì„ 처리하여 êµ¬ì¡°í™”ëœ ë°ì´í„° ì„¸íŠ¸ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. +ëª¨ë“ í˜•íƒœì˜ ì•¡ì„¸ì„œê°€ ê¶ê·¹ì 으로 {@link android.content.ContentResolver}를 호출하며, 그러면 ì´ê²ƒì´ 액세스 ê¶Œí•œì„ ì–»ê¸° 위해 구체ì ì¸ {@link android.content.ContentProvider} 메서드를 호출합니다. </p> <h3 id="RequiredAccess">필수 메서드</h3> <p> - ì¶”ìƒ í´ëž˜ìФ {@link android.content.ContentProvider}는 -개발ìžê°€ ë‚˜ë¦„ì˜ êµ¬ì²´ì ì¸ í•˜ìœ„ í´ëž˜ìŠ¤ì˜ ì¼ë¶€ë¶„으로 구현해야만 하는 여섯 가지 ì¶”ìƒ ë©”ì„œë“œë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë©”ì„œë“œëŠ” ëª¨ë‘ -({@link android.content.ContentProvider#onCreate() onCreate()}는 예외) + ì¶”ìƒ í´ëž˜ìФ {@link android.content.ContentProvider}는 +개발ìžê°€ ë‚˜ë¦„ì˜ êµ¬ì²´ì ì¸ í•˜ìœ„ í´ëž˜ìŠ¤ì˜ ì¼ë¶€ë¶„으로 구현해야만 하는 여섯 가지 ì¶”ìƒ ë©”ì„œë“œë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ë©”ì„œë“œëŠ” ëª¨ë‘ +({@link android.content.ContentProvider#onCreate() onCreate()}는 예외) 콘í…ì¸ ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ë ¤ ì‹œë„ ì¤‘ì¸ í´ë¼ì´ì–¸íЏ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 호출합니다. </p> <dl> @@ -503,8 +503,8 @@ query()} {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} </dt> <dd> - ì œê³µìžì— 새로운 í–‰ì„ ì‚½ìž…í•©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ 사용하여 ëŒ€ìƒ í…Œì´ë¸”ì„ ì„ íƒí•˜ê³ -ì‚¬ìš©í• ì—´ ê°’ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. + ì œê³µìžì— 새로운 í–‰ì„ ì‚½ìž…í•©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ 사용하여 ëŒ€ìƒ í…Œì´ë¸”ì„ ì„ íƒí•˜ê³ +ì‚¬ìš©í• ì—´ ê°’ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. 새로 ì‚½ìž…ëœ í–‰ì— ëŒ€í•œ 콘í…ì¸ URI를 반환합니다. </dd> <dt> @@ -512,7 +512,7 @@ query()} update()} </dt> <dd> - ì œê³µìž ë‚´ì˜ ê¸°ì¡´ í–‰ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ 사용하여 + ì œê³µìž ë‚´ì˜ ê¸°ì¡´ í–‰ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ 사용하여 ì—…ë°ì´íŠ¸í• í…Œì´ë¸”ê³¼ í–‰ì„ ì„ íƒí•˜ê³ ì—…ë°ì´íŠ¸í•œ ì—´ ê°’ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. ì—…ë°ì´íŠ¸í•œ í–‰ 개수를 반환합니다. </dd> <dt> @@ -526,20 +526,20 @@ update()} {@link android.content.ContentProvider#getType(Uri) getType()} </dt> <dd> - 콘í…ì¸ URIì— ìƒì‘하는 MIME ìœ í˜•ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” + 콘í…ì¸ URIì— ìƒì‘하는 MIME ìœ í˜•ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” <a href="#MIMETypes">콘í…ì¸ ì œê³µìž MIME ìœ í˜•</a> ì„¹ì…˜ì— ë” ìžì„¸í•˜ê²Œ 설명ë˜ì–´ 있습니다. </dd> <dt> {@link android.content.ContentProvider#onCreate() onCreate()} </dt> <dd> - ì œê³µìžë¥¼ 초기화합니다. Android ì‹œìŠ¤í…œì€ ì œê³µìžë¥¼ ìƒì„±í•œ ì§í›„ -ì´ ë©”ì„œë“œë¥¼ 호출합니다. + ì œê³µìžë¥¼ 초기화합니다. Android ì‹œìŠ¤í…œì€ ì œê³µìžë¥¼ ìƒì„±í•œ ì§í›„ +ì´ ë©”ì„œë“œë¥¼ 호출합니다. {@link android.content.ContentResolver} 개체가 ì œê³µìžì— ì•¡ì„¸ìŠ¤í•˜ë ¤ê³ ì‹œë„í• ë•Œê¹Œì§€ëŠ” ì œê³µìžê°€ ìƒì„±ëœ ê²ƒì´ ì•„ë‹ˆë¼ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. </dd> </dl> <p> - ì´ì™€ ê°™ì€ ë©”ì„œë“œì—는 ë™ì¼í•˜ê²Œ ì´ë¦„ 붙여진 + ì´ì™€ ê°™ì€ ë©”ì„œë“œì—는 ë™ì¼í•˜ê²Œ ì´ë¦„ 붙여진 {@link android.content.ContentResolver} 메서드와 ê°™ì€ ì„œëª…ì´ ìžˆë‹¤ëŠ” ê²ƒì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. </p> <p> @@ -548,8 +548,8 @@ update()} <ul> <li> ì´ëŸ° 메서드는 모ë‘({@link android.content.ContentProvider#onCreate() onCreate()}는 예외) - í•œêº¼ë²ˆì— ì—¬ëŸ¬ ìŠ¤ë ˆë“œê°€ í˜¸ì¶œí• ìˆ˜ 있으므로, ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•´ì•¼ 합니다. -다중 ìŠ¤ë ˆë“œì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ + í•œêº¼ë²ˆì— ì—¬ëŸ¬ ìŠ¤ë ˆë“œê°€ í˜¸ì¶œí• ìˆ˜ 있으므로, ìŠ¤ë ˆë“œë¡œë¶€í„° ì•ˆì „í•´ì•¼ 합니다. +다중 ìŠ¤ë ˆë“œì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/processes-and-threads.html"> 프로세스 ë° ìŠ¤ë ˆë“œ</a> ì£¼ì œë¥¼ 참조하ì‹ì‹œì˜¤. </li> @@ -560,16 +560,16 @@ onCreate()}ì—서는 긴 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ê²ƒì„ ì‚¼ê°€ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ ì„¹ì…˜ì—서 ë”ìš± ìžì„¸ížˆ ë…¼ì˜í•©ë‹ˆë‹¤. </li> <li> - ì´ì™€ ê°™ì€ ë©”ì„œë“œëŠ” 반드시 구현해야 하는 것ì´ì§€ë§Œ, -예ìƒë˜ëŠ” ë°ì´í„° ìœ í˜•ì„ ë°˜í™˜í•˜ëŠ” 것 ì™¸ì— ë‹¬ë¦¬ 코드가 해야 í• ì¼ì€ 없습니다. + ì´ì™€ ê°™ì€ ë©”ì„œë“œëŠ” 반드시 구현해야 하는 것ì´ì§€ë§Œ, +예ìƒë˜ëŠ” ë°ì´í„° ìœ í˜•ì„ ë°˜í™˜í•˜ëŠ” 것 ì™¸ì— ë‹¬ë¦¬ 코드가 해야 í• ì¼ì€ 없습니다. 예를 들어 몇몇 í…Œì´ë¸”ì— ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°ì´í„°ë¥¼ 삽입하지 못하ë„ë¡ ë°©ì§€í•˜ë ¤ê³ í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ í•˜ë ¤ë©´, -{@link android.content.ContentProvider#insert(Uri, ContentValues) insert()}ë¡œì˜ +{@link android.content.ContentProvider#insert(Uri, ContentValues) insert()}ë¡œì˜ í˜¸ì¶œì„ ë¬´ì‹œí•˜ê³ 0ì„ ë°˜í™˜í•˜ë©´ ë©ë‹ˆë‹¤. </li> </ul> <h3 id="Query">query() 메서드 구현</h3> <p> - + {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) ContentProvider.query()} 메서드는 {@link android.database.Cursor} 개체를 반환해야 í•˜ê³ , ê·¸ë ‡ì§€ ëª»í• ê²½ìš° {@link java.lang.Exception}ì„ ë°œìƒì‹œí‚µë‹ˆë‹¤. SQLite ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ë°ì´í„° ì €ìž¥ì†Œë¡œ 사용하는 경우, @@ -587,7 +587,7 @@ ContentProvider.query()} 메서드는 {@link android.database.Cursor} 개체를 </p> <p> Android ì‹œìŠ¤í…œì´ í”„ë¡œì„¸ìŠ¤ 경계를 가로질러 {@link java.lang.Exception}ì„ - í†µì‹ ìœ¼ë¡œ ì „ë‹¬í• ìˆ˜ 있어야 한다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. Androidê°€ ì´ ìž‘ì—…ì„ í• ìˆ˜ 있는 경우는 + í†µì‹ ìœ¼ë¡œ ì „ë‹¬í• ìˆ˜ 있어야 한다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. Androidê°€ ì´ ìž‘ì—…ì„ í• ìˆ˜ 있는 경우는 쿼리 오류 ì²˜ë¦¬ì— ìœ ìš©í• ìˆ˜ 있는 다ìŒê³¼ ê°™ì€ ì˜ˆì™¸ì— í•´ë‹¹ë 때입니다. </p> <ul> @@ -608,16 +608,16 @@ ContentProvider.query()} 메서드는 {@link android.database.Cursor} 개체를 </p> <p> - ì´ ë©”ì„œë“œê°€ 새 í–‰ì— ëŒ€í•œ 콘í…ì¸ URI를 반환하는 ê²ƒì´ ì •ìƒìž…니다. ì´ê²ƒì„ êµ¬ì„±í•˜ë ¤ë©´ 새 í–‰ì˜ -<code>_ID</code>(ë˜ëŠ” 다른 기본 키) ê°’ì„ í…Œì´ë¸”ì˜ ì½˜í…ì¸ URIì— ì¶”ê°€í•˜ë©°, ì´ë•Œ + ì´ ë©”ì„œë“œê°€ 새 í–‰ì— ëŒ€í•œ 콘í…ì¸ URI를 반환하는 ê²ƒì´ ì •ìƒìž…니다. ì´ê²ƒì„ êµ¬ì„±í•˜ë ¤ë©´ 새 í–‰ì˜ +<code>_ID</code>(ë˜ëŠ” 다른 기본 키) ê°’ì„ í…Œì´ë¸”ì˜ ì½˜í…ì¸ URIì— ì¶”ê°€í•˜ë©°, ì´ë•Œ {@link android.content.ContentUris#withAppendedId(Uri, long) withAppendedId()}를 사용합니다. </p> <h3 id="Delete">delete() 메서드 구현</h3> <p> {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} ë©”ì„œë“œì˜ ê²½ìš° - ë°ì´í„° ì €ìž¥ì†Œì—서 물리ì 으로 í–‰ì„ ì‚ì œí•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. -ì œê³µìžì™€ ë™ê¸°í™” 어댑터를 함께 ì‚¬ìš©í•˜ê³ ìžˆëŠ” 경우, -ì‚ì œëœ í–‰ì„ ì™„ì „ížˆ ì œê±°í•˜ê¸°ë³´ë‹¤ëŠ” "ì‚ì œ" 플래그로 표시하는 ë°©ë²•ì„ ê³ ë ¤í•´ë³¼ 만합니다. + ë°ì´í„° ì €ìž¥ì†Œì—서 물리ì 으로 í–‰ì„ ì‚ì œí•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. +ì œê³µìžì™€ ë™ê¸°í™” 어댑터를 함께 ì‚¬ìš©í•˜ê³ ìžˆëŠ” 경우, +ì‚ì œëœ í–‰ì„ ì™„ì „ížˆ ì œê±°í•˜ê¸°ë³´ë‹¤ëŠ” "ì‚ì œ" 플래그로 표시하는 ë°©ë²•ì„ ê³ ë ¤í•´ë³¼ 만합니다. ë™ê¸°í™” 어댑터가 ì‚ì œëœ í–‰ì„ í™•ì¸í•œ 다ìŒ, ì´ë¥¼ ì œê³µìžì—서 ì‚ì œí•˜ê¸° ì „ì— ìš°ì„ ì„œë²„ì—서 ì œê±°í•©ë‹ˆë‹¤. </p> <h3 id="Update">Update() 메서드 구현</h3> @@ -633,20 +633,20 @@ ContentProvider.query()}ê°€ 사용하는 것과 ê°™ì€ <code>selection</code> ë° <h3 id="OnCreate">onCreate() 메서드 구현</h3> <p> Android ì‹œìŠ¤í…œì€ ì œê³µìžë¥¼ ì‹œìž‘í• ë•Œ {@link android.content.ContentProvider#onCreate() -onCreate()}를 호출합니다. ì´ ë©”ì„œë“œì—서는 ë¹ ë¥´ê²Œ 실행ë˜ëŠ” 초기화만 수행해야 하며, +onCreate()}를 호출합니다. ì´ ë©”ì„œë“œì—서는 ë¹ ë¥´ê²Œ 실행ë˜ëŠ” 초기화만 수행해야 하며, ë°ì´í„°ë² ì´ìФ ìƒì„±ê³¼ ë°ì´í„° ë¡œë”©ì€ ì œê³µìžê°€ ì‹¤ì œë¡œ ë°ì´í„°ì— 대한 ìš”ì²ì„ ë°›ì„ ë•Œê¹Œì§€ 미뤄ë‘어야 합니다. - + {@link android.content.ContentProvider#onCreate() onCreate()}ì—서 긴 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë©´ ì œê³µìžì˜ ì‹œë™ ì†ë„ê°€ ëŠë ¤ì§‘니다. ì´ ë•Œë¬¸ì— ì œê³µìžì—서 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ì „ë‹¬ë˜ëŠ” ì‘ë‹µë„ ë”°ë¼ì„œ ëŠë ¤ì§‘니다. </p> <p> 예를 들어, SQLite ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 사용하는 경우 -{@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()}ì—서 +{@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()}ì—서 새로운 {@link android.database.sqlite.SQLiteOpenHelper} 개체를 ìƒì„±í•˜ê³ , 그런 ë‹¤ìŒ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì²˜ìŒ ì—´ 때 SQL í…Œì´ë¸”ì„ ìƒì„±í• 수 있습니다. ì´ë¥¼ ìš©ì´í•˜ê²Œ 하기 위해 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase -getWritableDatabase()}를 ì²˜ìŒ í˜¸ì¶œí•˜ë©´ ì´ê²ƒì´ ìžë™ìœ¼ë¡œ +getWritableDatabase()}를 ì²˜ìŒ í˜¸ì¶œí•˜ë©´ ì´ê²ƒì´ ìžë™ìœ¼ë¡œ {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) SQLiteOpenHelper.onCreate()} 메서드를 호출합니다. </p> @@ -776,7 +776,7 @@ protected static final class MainDatabaseHelper extends SQLiteOpenHelper { </p> <p> í…스트, HTML ë˜ëŠ” JPEG와 ê°™ì€ ë³´íŽ¸ì ì¸ ìœ í˜•ì˜ ë°ì´í„°ë¼ë©´ -{@link android.content.ContentProvider#getType(Uri) getType()}ì´ +{@link android.content.ContentProvider#getType(Uri) getType()}ì´ í•´ë‹¹ ë°ì´í„°ì— 대한 표준 MIME ìœ í˜•ì„ ë°˜í™˜í•˜ëŠ” ê²ƒì´ ì •ìƒìž…니다. ì´ëŸ¬í•œ 표준 ìœ í˜•ì˜ ì „ì²´ 목ë¡ì€ <a href="http://www.iana.org/assignments/media-types/index.htm">IANA MIME 미디어 ìœ í˜•</a> 웹사ì´íЏì—서 확ì¸í• 수 있습니다. @@ -807,17 +807,17 @@ MIME 형ì‹ì„ 반환해야 합니다. 개발ìžê°€ <code><name></code>ê³¼ <code><type></code>ì„ ì œê³µí•©ë‹ˆë‹¤. <code><name></code> ê°’ì€ ì „ì²´ì 으로 ê³ ìœ í•´ì•¼ í•˜ê³ , <code><type></code> ê°’ì€ ìƒì‘하는 URI íŒ¨í„´ì— ê³ ìœ í•´ì•¼ -합니다. <code><name></code>으로 ì¢‹ì€ ì˜ˆëŠ” 회사 ì´ë¦„ì´ë‚˜ -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ Android 패키지 ì´ë¦„ì„ ë“¤ 수 있습니다. -<code><type></code>으로 ì¢‹ì€ ì˜ˆëŠ” URI와 ì—°ê´€ëœ í…Œì´ë¸”ì„ ì‹ë³„하는 +합니다. <code><name></code>으로 ì¢‹ì€ ì˜ˆëŠ” 회사 ì´ë¦„ì´ë‚˜ +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ Android 패키지 ì´ë¦„ì„ ë“¤ 수 있습니다. +<code><type></code>으로 ì¢‹ì€ ì˜ˆëŠ” URI와 ì—°ê´€ëœ í…Œì´ë¸”ì„ ì‹ë³„하는 문ìžì—´ì„ 들 수 있습니다. </p> </li> </ul> <p> - 예를 들어 ì–´ë–¤ ì œê³µìžì˜ ê¶Œí•œì´ -<code>com.example.app.provider</code>ì´ê³ , ì´ê²ƒì´ + 예를 들어 ì–´ë–¤ ì œê³µìžì˜ ê¶Œí•œì´ +<code>com.example.app.provider</code>ì´ê³ , ì´ê²ƒì´ <code>table1</code>ì´ë¼ëŠ” í…Œì´ë¸”ì„ ë…¸ì¶œí•˜ëŠ” 경우, <code>table1</code>ì˜ ì—¬ëŸ¬ í–‰ì— ëŒ€í•œ MIME ìœ í˜•ì€ ë‹¤ìŒê³¼ 같습니다. </p> <pre> @@ -833,8 +833,8 @@ vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1 <p> ì œê³µìžê°€ 파ì¼ì„ ì œê³µí•˜ëŠ” 경우, {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}를 구현합니다. - ì´ ë©”ì„œë“œëŠ” ì œê³µìžê°€ 주어진 콘í…ì¸ URIì— ëŒ€í•´ ë°˜í™˜í• ìˆ˜ 있는 파ì¼ì— 대한 MIME ìœ í˜•ì˜ {@link java.lang.String} ë°°ì—´ì„ ë°˜í™˜í•©ë‹ˆë‹¤. -ì œê³µí•˜ëŠ” MIME ìœ í˜•ì„ MIME ìœ í˜• í•„í„° ì¸ìˆ˜ 기준으로 í•„í„°ë§í•´ì•¼ + ì´ ë©”ì„œë“œëŠ” ì œê³µìžê°€ 주어진 콘í…ì¸ URIì— ëŒ€í•´ ë°˜í™˜í• ìˆ˜ 있는 파ì¼ì— 대한 MIME ìœ í˜•ì˜ {@link java.lang.String} ë°°ì—´ì„ ë°˜í™˜í•©ë‹ˆë‹¤. +ì œê³µí•˜ëŠ” MIME ìœ í˜•ì„ MIME ìœ í˜• í•„í„° ì¸ìˆ˜ 기준으로 í•„í„°ë§í•´ì•¼ í´ë¼ì´ì–¸íŠ¸ê°€ ì²˜ë¦¬í•˜ê³ ìž í•˜ëŠ” MIME ìœ í˜•ë§Œ ë°˜í™˜í• ìˆ˜ 있습니다. </p> <p> @@ -850,16 +850,16 @@ ContentProvider.getStreamTypes()} 메서드가 다ìŒê³¼ ê°™ì€ ë°°ì—´ì„ ë°˜í™˜ { "image/jpeg", "image/png", "image/gif"} </pre> <p> - ì•±ì´ <code>.jpg</code> 파ì¼ì—ë§Œ ê´€ì‹¬ì´ ìžˆëŠ” 경우ì—는 + ì•±ì´ <code>.jpg</code> 파ì¼ì—ë§Œ ê´€ì‹¬ì´ ìžˆëŠ” 경우ì—는 í•„í„° 문ìžì—´ <code>*\/jpeg</code>으로 {@link android.content.ContentResolver#getStreamTypes(Uri, String) - ContentResolver.getStreamTypes()}를 í˜¸ì¶œí• ìˆ˜ 있습니다. 그러면 + ContentResolver.getStreamTypes()}를 í˜¸ì¶œí• ìˆ˜ 있습니다. 그러면 {@link android.content.ContentProvider#getStreamTypes(Uri, String) ContentProvider.getStreamTypes()}ê°€ 다ìŒê³¼ ê°™ì´ ë°˜í™˜í•˜ëŠ” ê²ƒì´ ì •ìƒìž…니다. <pre> {"image/jpeg"} </pre> <p> - ì œê³µìžê°€ í•„í„° 문ìžì—´ì—서 ìš”ì²í•œ MIME ìœ í˜• 중 ì œê³µí•˜ëŠ” ê²ƒì´ ì—†ëŠ” 경우, + ì œê³µìžê°€ í•„í„° 문ìžì—´ì—서 ìš”ì²í•œ MIME ìœ í˜• 중 ì œê³µí•˜ëŠ” ê²ƒì´ ì—†ëŠ” 경우, {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}ê°€ <code>null</code>ì„ ë°˜í™˜í•˜ëŠ” ê²ƒì´ ì •ìƒìž…니다. </p> @@ -868,76 +868,76 @@ ContentProvider.getStreamTypes()} 메서드가 다ìŒê³¼ ê°™ì€ ë°°ì—´ì„ ë°˜í™˜ <!-- Implementing a Contract Class --> <h2 id="ContractClass">계약 í´ëž˜ìФ 구현</h2> <p> - 계약 í´ëž˜ìŠ¤ëŠ” <code>public final</code> í´ëž˜ìŠ¤ë¡œ, ì´ ì•ˆì— URI, ì—´ ì´ë¦„, MIME ìœ í˜•ì˜ -ìƒìˆ˜ ì •ì˜ ë° ì œê³µìžì— ê´€ë ¨ëœ ë‹¤ë¥¸ 메타 ë°ì´í„°ê°€ 들어 있습니다. + 계약 í´ëž˜ìŠ¤ëŠ” <code>public final</code> í´ëž˜ìŠ¤ë¡œ, ì´ ì•ˆì— URI, ì—´ ì´ë¦„, MIME ìœ í˜•ì˜ +ìƒìˆ˜ ì •ì˜ ë° ì œê³µìžì— ê´€ë ¨ëœ ë‹¤ë¥¸ 메타 ë°ì´í„°ê°€ 들어 있습니다. ì´ í´ëž˜ìŠ¤ëŠ” URI, ì—´ ì´ë¦„ ë“±ì˜ ì‹¤ì œ ê°’ì— ë³€ê²½ëœ ë‚´ìš©ì´ ìžˆë”ë¼ë„ - ì œê³µìžì— 올바르게 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ ë³´ìž¥í•˜ì—¬ ì œê³µìžì™€ + ì œê³µìžì— 올바르게 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ ë³´ìž¥í•˜ì—¬ ì œê³µìžì™€ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 사ì´ì˜ ê³„ì•½ì„ í™•ë¦½í•©ë‹ˆë‹¤. </p> <p> - 계약 í´ëž˜ìŠ¤ê°€ 개발ìžì—게 ìœ ìš©í•œ ì´ìœ 는 ë˜ ìžˆìŠµë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ëŠ” 보통 ìžì‹ ì˜ ìƒìˆ˜ ì´ë¦„으로 -니모닉 ì´ë¦„ì„ ê°€ì§€ê¸° ë•Œë¬¸ì— ê°œë°œìžê°€ ì—´ ì´ë¦„ ë˜ëŠ” URIì— ìž˜ëª»ëœ ê°’ì„ ì‚¬ìš©í• ê°€ëŠ¥ì„±ì´ ëœí•©ë‹ˆë‹¤. -ì´ê²ƒë„ í´ëž˜ìŠ¤ì˜ ì¼ì¢…ì´ê¸° ë•Œë¬¸ì— Javadoc 문서를 í¬í•¨í• 수 있습니다. + 계약 í´ëž˜ìŠ¤ê°€ 개발ìžì—게 ìœ ìš©í•œ ì´ìœ 는 ë˜ ìžˆìŠµë‹ˆë‹¤. ì´ í´ëž˜ìŠ¤ëŠ” 보통 ìžì‹ ì˜ ìƒìˆ˜ ì´ë¦„으로 +니모닉 ì´ë¦„ì„ ê°€ì§€ê¸° ë•Œë¬¸ì— ê°œë°œìžê°€ ì—´ ì´ë¦„ ë˜ëŠ” URIì— ìž˜ëª»ëœ ê°’ì„ ì‚¬ìš©í• ê°€ëŠ¥ì„±ì´ ëœí•©ë‹ˆë‹¤. +ì´ê²ƒë„ í´ëž˜ìŠ¤ì˜ ì¼ì¢…ì´ê¸° ë•Œë¬¸ì— Javadoc 문서를 í¬í•¨í• 수 있습니다. Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ìžë™ ì™„ì„±í•˜ê³ í•´ë‹¹ ìƒìˆ˜ì— 대한 Javadocì„ í‘œì‹œí• ìˆ˜ 있습니다. </p> <p> - 개발ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 계약 í´ëž˜ìŠ¤ì˜ í´ëž˜ìФ 파ì¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ëŠ” 없지만 + 개발ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 계약 í´ëž˜ìŠ¤ì˜ í´ëž˜ìФ 파ì¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ëŠ” 없지만 ì—¬ëŸ¬ë¶„ì´ ì œê³µí•˜ëŠ” <code>.jar</code> 파ì¼ì—서 ì´ë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ 안으로 ì •ì 으로 컴파ì¼ë§í• 수 있습니다. </p> <p> - {@link android.provider.ContactsContract} í´ëž˜ìŠ¤ì™€ + {@link android.provider.ContactsContract} í´ëž˜ìŠ¤ì™€ ì´ì— ì¤‘ì²©ëœ í´ëž˜ìŠ¤ê°€ 계약 í´ëž˜ìŠ¤ì˜ ì˜ˆì‹œìž…ë‹ˆë‹¤. </p> <h2 id="Permissions">콘í…ì¸ ì œê³µìž ê¶Œí•œ 구현</h2> <p> Android ì‹œìŠ¤í…œì˜ ëª¨ë“ ì¸¡ë©´ì— ëŒ€í•œ 권한과 액세스는 <a href="{@docRoot}guide/topics/security/security.html">보안 ë° ê¶Œí•œ</a> ì£¼ì œì— ì„¤ëª…ë˜ì–´ 있습니다. - <a href="{@docRoot}guide/topics/data/data-storage.html">ë°ì´í„° ì €ìž¥ì†Œ</a> ì£¼ì œì—ì„œë„ + <a href="{@docRoot}guide/topics/data/data-storage.html">ë°ì´í„° ì €ìž¥ì†Œ</a> ì£¼ì œì—ì„œë„ ë‹¤ì–‘í•œ ìœ í˜•ì˜ ì €ìž¥ì†Œì— ì ìš©ë˜ëŠ” 보안 ë° ê¶Œí•œì„ ì„¤ëª…í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 간략히 ë§í•´ ìš”ì ì€ ë‹¤ìŒê³¼ 같습니다. </p> <ul> <li> - 기본ì 으로, ê¸°ê¸°ì˜ ë‚´ë¶€ ì €ìž¥ì†Œì— ì €ìž¥ëœ ë°ì´í„° 파ì¼ì€ + 기본ì 으로, ê¸°ê¸°ì˜ ë‚´ë¶€ ì €ìž¥ì†Œì— ì €ìž¥ëœ ë°ì´í„° 파ì¼ì€ 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì œê³µìž ì „ìš©ìž…ë‹ˆë‹¤. </li> <li> - 본ì¸ì´ ìƒì„±í•œ {@link android.database.sqlite.SQLiteDatabase} ë°ì´í„°ë² ì´ìŠ¤ëŠ” + 본ì¸ì´ ìƒì„±í•œ {@link android.database.sqlite.SQLiteDatabase} ë°ì´í„°ë² ì´ìŠ¤ëŠ” 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ì œê³µìžë§Œì˜ 비공개 ë°ì´í„°ìž…니다. </li> <li> 기본ì 으로 외부 ì €ìž¥ì†Œì— ì €ìž¥í•˜ëŠ” ë°ì´í„° 파ì¼ì€ <em>공개</em>ì´ê³ -<em>누구나 ì½ì„ 수 있습니다</em>. 외부 ì €ìž¥ì†Œì— ìžˆëŠ” 파ì¼ë¡œì˜ 액세스를 ì œê³µí•˜ëŠ” ë° ì½˜í…ì¸ ì œê³µìžë¥¼ 쓸 수는 +<em>누구나 ì½ì„ 수 있습니다</em>. 외부 ì €ìž¥ì†Œì— ìžˆëŠ” 파ì¼ë¡œì˜ 액세스를 ì œê³µí•˜ëŠ” ë° ì½˜í…ì¸ ì œê³µìžë¥¼ 쓸 수는 없습니다. 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다른 API í˜¸ì¶œì„ ì‚¬ìš©í•˜ì—¬ 해당 파ì¼ì„ ì½ê³ 쓸 수 있기 때문입니다. </li> <li> ê¸°ê¸°ì˜ ë‚´ë¶€ ì €ìž¥ì†Œì— ìžˆëŠ” íŒŒì¼ ë˜ëŠ” SQLite ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 열거나 ìƒì„±í•˜ê¸° 위한 메서드 í˜¸ì¶œì€ -다른 ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì½ê¸° ë° ì“°ê¸° 액세스 ê¶Œí•œì„ í—ˆê°€í• ê°€ëŠ¥ì„±ì´ ìžˆìŠµë‹ˆë‹¤. +다른 ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì½ê¸° ë° ì“°ê¸° 액세스 ê¶Œí•œì„ í—ˆê°€í• ê°€ëŠ¥ì„±ì´ ìžˆìŠµë‹ˆë‹¤. ë‚´ë¶€ 파ì¼ì´ë‚˜ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì œê³µìžì˜ 리í¬ì§€í† 리로 ì‚¬ìš©í•˜ê³ -"누구나 ì½ì„ 수 있는" ë˜ëŠ” "누구나 쓸 수 있는" 액세스를 부여하면 -매니페스트ì—서 ì œê³µìžì— 대해 ì„¤ì •í•œ ê¶Œí•œì´ ë°ì´í„°ë¥¼ 보호하지 못합니다. +"누구나 ì½ì„ 수 있는" ë˜ëŠ” "누구나 쓸 수 있는" 액세스를 부여하면 +매니페스트ì—서 ì œê³µìžì— 대해 ì„¤ì •í•œ ê¶Œí•œì´ ë°ì´í„°ë¥¼ 보호하지 못합니다. ë‚´ë¶€ ì €ìž¥ì†Œ ì•ˆì— ìžˆëŠ” 파ì¼ê³¼ ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•œê¸°ë³¸ 액세스는 "비공개"ì´ë©°, ì œê³µìžì˜ 리í¬ì§€í† 리가 ì´ê²ƒì„ 변경하면 안 ë©ë‹ˆë‹¤. </li> </ul> <p> - ë°ì´í„°ë¡œì˜ 액세스를 ì œì–´í•˜ê¸° 위해 콘í…ì¸ ì œê³µìž ê¶Œí•œì„ ì“°ê³ ìž í•˜ëŠ” 경우, -ë°ì´í„°ë¥¼ ë‚´ë¶€ 파ì¼, SQLite ë°ì´í„°ë² ì´ìФ ë˜ëŠ” "í´ë¼ìš°ë“œ"(예: ì›ê²© 서버) ì•ˆì˜ + ë°ì´í„°ë¡œì˜ 액세스를 ì œì–´í•˜ê¸° 위해 콘í…ì¸ ì œê³µìž ê¶Œí•œì„ ì“°ê³ ìž í•˜ëŠ” 경우, +ë°ì´í„°ë¥¼ ë‚´ë¶€ 파ì¼, SQLite ë°ì´í„°ë² ì´ìФ ë˜ëŠ” "í´ë¼ìš°ë“œ"(예: ì›ê²© 서버) ì•ˆì˜ ë‚´ë¶€ 파ì¼ë¡œ ì €ìž¥í•´ì•¼ í•˜ê³ , 파ì¼ê³¼ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ë§Œì˜ 비공개로 ìœ ì§€í•´ì•¼ 합니다. </p> <h3>권한 구현</h3> <p> - 기본 ë°ì´í„°ê°€ 비공개ë¼ê³ 하ë”ë¼ë„ ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œê³µìžë¥¼ ì½ê³ ì œê³µìžì— 쓸 수 있습니다. + 기본 ë°ì´í„°ê°€ 비공개ë¼ê³ 하ë”ë¼ë„ ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œê³µìžë¥¼ ì½ê³ ì œê³µìžì— 쓸 수 있습니다. 기본ì 으로 ì œê³µìžì—는 ê¶Œí•œì´ ì„¤ì •ë˜ì–´ 있지 않기 때문입니다. ì´ë¥¼ ë³€ê²½í•˜ë ¤ë©´, <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> <provider></a></code> ìš”ì†Œì˜ ì†ì„±ì´ë‚˜ 하위 요소를 사용하여 -매니페스트 파ì¼ì— 있는 ì œê³µìžì˜ ê¶Œí•œì„ ì„¤ì •í•©ë‹ˆë‹¤. ê¶Œí•œì€ ì œê³µìž ì „ì²´ì— ì ìš©ë˜ë„ë¡ ì„¤ì •í• ìˆ˜ë„ ìžˆê³ , +매니페스트 파ì¼ì— 있는 ì œê³µìžì˜ ê¶Œí•œì„ ì„¤ì •í•©ë‹ˆë‹¤. ê¶Œí•œì€ ì œê³µìž ì „ì²´ì— ì ìš©ë˜ë„ë¡ ì„¤ì •í• ìˆ˜ë„ ìžˆê³ , íŠ¹ì • í…Œì´ë¸”ì—, ë˜ëŠ” 심지어 íŠ¹ì • ë ˆì½”ë“œì— ì ìš©ë˜ê²Œ í• ìˆ˜ë„ ìžˆê³ ì„¸ 가지 모ë‘를 íƒí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> <p> - ì œê³µìžì— 대한 ê¶Œí•œì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— 있는 하나 ì´ìƒì˜ + ì œê³µìžì— 대한 ê¶Œí•œì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 파ì¼ì— 있는 하나 ì´ìƒì˜ <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"> - <permission></a></code> 요소로 ì •ì˜í•©ë‹ˆë‹¤. + <permission></a></code> 요소로 ì •ì˜í•©ë‹ˆë‹¤. ì œê³µìžì— ê³ ìœ í•œ ê¶Œí•œì„ ì„¤ì •í•˜ë ¤ë©´ <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#nm"> android:name</a></code> ì†ì„±ì— Java ìŠ¤íƒ€ì¼ ë²”ìœ„ë¥¼ 사용합니다. 예를 들어 ì½ê¸° ê¶Œí•œì˜ ì´ë¦„ì„ @@ -945,7 +945,7 @@ Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ì </p> <p> - ë‹¤ìŒ ëª©ë¡ì€ ì œê³µìž ê¶Œí•œì˜ ë²”ìœ„ë¥¼ 설명한 것입니다. + ë‹¤ìŒ ëª©ë¡ì€ ì œê³µìž ê¶Œí•œì˜ ë²”ìœ„ë¥¼ 설명한 것입니다. ì œê³µìž ì „ì²´ì— ì ìš©ë˜ëŠ” 권한부터 시작하여 ì ì°¨ ì„¸ë¶„í™”ëœ ê¶Œí•œì´ ë©ë‹ˆë‹¤. 보다 ì„¸ë¶€í™”ëœ ê¶Œí•œì´ ë²”ìœ„ê°€ í° ê²ƒë³´ë‹¤ ìš°ì„ í•©ë‹ˆë‹¤. </p> @@ -954,9 +954,9 @@ Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ì ë‹¨ì¼ ì½ê¸°-쓰기 ì œê³µìž ìˆ˜ì¤€ 권한 </dt> <dd> - ì œê³µìž ì „ì²´ë¡œì˜ ì½ê¸°ì™€ 쓰기 액세스 양쪽 모ë‘를 ì œì–´í•˜ëŠ” í•˜ë‚˜ì˜ ê¶Œí•œìœ¼ë¡œ, + ì œê³µìž ì „ì²´ë¡œì˜ ì½ê¸°ì™€ 쓰기 액세스 양쪽 모ë‘를 ì œì–´í•˜ëŠ” í•˜ë‚˜ì˜ ê¶Œí•œìœ¼ë¡œ, <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> - <provider></a></code> ìš”ì†Œì˜ + <provider></a></code> ìš”ì†Œì˜ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> android:permission</a></code> ì†ì„±ìœ¼ë¡œ ì§€ì •ë©ë‹ˆë‹¤. </dd> @@ -978,14 +978,14 @@ Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ì 경로 수준 권한 </dt> <dd> - ì œê³µìžì˜ 콘í…ì¸ URIì— ëŒ€í•œ ì½ê¸°, 쓰기 ë˜ëŠ” ì½ê¸°/쓰기 권한입니다. ì œì–´í•˜ê³ ìž í•˜ëŠ” ê° URI를 ì§ì ‘ ì§€ì •í•˜ë˜, -ì´ë•Œ + ì œê³µìžì˜ 콘í…ì¸ URIì— ëŒ€í•œ ì½ê¸°, 쓰기 ë˜ëŠ” ì½ê¸°/쓰기 권한입니다. ì œì–´í•˜ê³ ìž í•˜ëŠ” ê° URI를 ì§ì ‘ ì§€ì •í•˜ë˜, +ì´ë•Œ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> - <provider></a></code> ìš”ì†Œì˜ + <provider></a></code> ìš”ì†Œì˜ <code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html"> - <path-permission></a></code> 하위 요소를 사용합니다. ì§€ì •í•˜ëŠ” 콘í…ì¸ URI마다 -ì½ê¸°/쓰기 권한, ì½ê¸° 권한 ë˜ëŠ” 쓰기 ê¶Œí•œì„ í•˜ë‚˜ì”© ì§€ì •í•˜ê±°ë‚˜ ì…‹ 모ë‘를 ì§€ì •í• ìˆ˜ 있습니다. -ì½ê¸° ë° ì“°ê¸° ê¶Œí•œì´ ì½ê¸°/쓰기 권한보다 ìš°ì„ í•©ë‹ˆë‹¤. + <path-permission></a></code> 하위 요소를 사용합니다. ì§€ì •í•˜ëŠ” 콘í…ì¸ URI마다 +ì½ê¸°/쓰기 권한, ì½ê¸° 권한 ë˜ëŠ” 쓰기 ê¶Œí•œì„ í•˜ë‚˜ì”© ì§€ì •í•˜ê±°ë‚˜ ì…‹ 모ë‘를 ì§€ì •í• ìˆ˜ 있습니다. +ì½ê¸° ë° ì“°ê¸° ê¶Œí•œì´ ì½ê¸°/쓰기 권한보다 ìš°ì„ í•©ë‹ˆë‹¤. ë˜í•œ, 경로 수준 ê¶Œí•œì´ ì œê³µìž ìˆ˜ì¤€ 권한보다 ìš°ì„ í•©ë‹ˆë‹¤. </dd> <dt> @@ -993,18 +993,18 @@ Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ì </dt> <dd> ì• í”Œë¦¬ì¼€ì´ì…˜ì— 임시 액세스를 허용하는 권한 수준입니다. -해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì¼ë°˜ì 으로 요구ë˜ëŠ” ê¶Œí•œì´ ì—†ë”ë¼ë„ 무관합니다. +해당 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì¼ë°˜ì 으로 요구ë˜ëŠ” ê¶Œí•œì´ ì—†ë”ë¼ë„ 무관합니다. 임시 액세스 ê¸°ëŠ¥ì€ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì—서 ìš”ì²í•´ì•¼ 하는 -권한과 ì• í”Œë¦¬ì¼€ì´ì…˜ 개수를 줄여ì¤ë‹ˆë‹¤. 임시 ê¶Œí•œì„ ì‚¬ìš©í•˜ëŠ” 경우, -ì œê³µìžì— 대하여 "ì˜êµ¬" ê¶Œí•œì„ í•„ìš”ë¡œí•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +권한과 ì• í”Œë¦¬ì¼€ì´ì…˜ 개수를 줄여ì¤ë‹ˆë‹¤. 임시 ê¶Œí•œì„ ì‚¬ìš©í•˜ëŠ” 경우, +ì œê³µìžì— 대하여 "ì˜êµ¬" ê¶Œí•œì„ í•„ìš”ë¡œí•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ëª¨ë“ ë°ì´í„°ì— ì§€ì†ì 으로 액세스하는 것들ë¿ìž…니다. <p> - ì´ë©”ì¼ ì œê³µìžì™€ ì•±ì„ êµ¬í˜„í• ë•Œ 필요한 ê¶Œí•œì„ ì˜ˆë¡œ 들어 ë³´ê² ìŠµë‹ˆë‹¤. -외부 ì´ë¯¸ì§€ ë·°ì–´ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 하여금 ì œê³µìžì—서 보낸 사진 첨부 파ì¼ì„ -표시하ë„ë¡ í—ˆìš©í•˜ê³ ìž í•œë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. ê¶Œí•œì„ ìš”êµ¬í•˜ì§€ ì•Šê³ ì´ë¯¸ì§€ ë·°ì–´ì— í•„ìˆ˜ 액세스를 ë¶€ì—¬í•˜ë ¤ë©´, -ì‚¬ì§„ì— ëŒ€í•œ 콘í…ì¸ URIì— í•´ë‹¨ë˜ëŠ” 임시 ê¶Œí•œì„ ì„¤ì •í•˜ì‹ì‹œì˜¤. + ì´ë©”ì¼ ì œê³µìžì™€ ì•±ì„ êµ¬í˜„í• ë•Œ 필요한 ê¶Œí•œì„ ì˜ˆë¡œ 들어 ë³´ê² ìŠµë‹ˆë‹¤. +외부 ì´ë¯¸ì§€ ë·°ì–´ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 하여금 ì œê³µìžì—서 보낸 사진 첨부 파ì¼ì„ +표시하ë„ë¡ í—ˆìš©í•˜ê³ ìž í•œë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. ê¶Œí•œì„ ìš”êµ¬í•˜ì§€ ì•Šê³ ì´ë¯¸ì§€ ë·°ì–´ì— í•„ìˆ˜ 액세스를 ë¶€ì—¬í•˜ë ¤ë©´, +ì‚¬ì§„ì— ëŒ€í•œ 콘í…ì¸ URIì— í•´ë‹¨ë˜ëŠ” 임시 ê¶Œí•œì„ ì„¤ì •í•˜ì‹ì‹œì˜¤. 사용ìžê°€ ì‚¬ì§„ì„ í‘œì‹œí•˜ê¸°ë¥¼ ì›í• 때 ì•±ì´ ì‚¬ì§„ì˜ ì½˜í…ì¸ URI와 권한 플래그를 í¬í•¨í•˜ëŠ” ì¸í…트를 -ì´ë¯¸ì§€ ë·°ì–´ì— ë³´ë‚´ë„ë¡ ì´ë©”ì¼ ì•±ì„ ì„¤ê³„í•©ë‹ˆë‹¤. 그러면 해당 ì´ë¯¸ì§€ ë·°ì–´ê°€ +ì´ë¯¸ì§€ ë·°ì–´ì— ë³´ë‚´ë„ë¡ ì´ë©”ì¼ ì•±ì„ ì„¤ê³„í•©ë‹ˆë‹¤. 그러면 해당 ì´ë¯¸ì§€ ë·°ì–´ê°€ ì´ë©”ì¼ ì œê³µìžì— 사진 ê²€ìƒ‰ì„ ì¿¼ë¦¬í• ìˆ˜ 있으며, ì´ ë·°ì–´ì— ì œê³µìžì— 대한 ì •ìƒì ì¸ ì½ê¸° ê¶Œí•œì´ ì—†ë”ë¼ë„ 무방합니다. </p> @@ -1017,29 +1017,29 @@ Eclipse와 ê°™ì€ í†µí•© 개발 í™˜ê²½ì€ ê³„ì•½ í´ëž˜ìŠ¤ì˜ ìƒìˆ˜ ì´ë¦„ì„ ì <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> <grant-uri-permission></a></code> 하위 요소를 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> - <provider></a></code> ìš”ì†Œì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. 임시 ê¶Œí•œì„ ì‚¬ìš©í•˜ëŠ” 경우, + <provider></a></code> ìš”ì†Œì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. 임시 ê¶Œí•œì„ ì‚¬ìš©í•˜ëŠ” 경우, ì œê³µìžì—서 콘í…ì¸ URIì— ëŒ€í•œ ì§€ì›ì„ ì œê±°í• ë•Œë§ˆë‹¤ {@link android.content.Context#revokeUriPermission(Uri, int) - Context.revokeUriPermission()}ì„ í˜¸ì¶œí•´ì•¼ 합니다. + Context.revokeUriPermission()}ì„ í˜¸ì¶œí•´ì•¼ 합니다. 그러면 콘í…ì¸ URIê°€ 임시 권한과 ì—°ê´€ë©ë‹ˆë‹¤. </p> <p> ì†ì„±ì˜ ê°’ì— ë”°ë¼ ì œê³µìžì— 액세스 가능한 ì •ë„ê°€ ê²°ì •ë©ë‹ˆë‹¤. - ì†ì„±ì´ <code>true</code>로 ì„¤ì •ë˜ì–´ 있는 경우ë¼ë©´ -ì‹œìŠ¤í…œì´ ì œê³µìž ì „ì²´ì— ìž„ì‹œ ê¶Œí•œì„ í—ˆìš©í•˜ë©°, ì œê³µìž ìˆ˜ì¤€ ë˜ëŠ” + ì†ì„±ì´ <code>true</code>로 ì„¤ì •ë˜ì–´ 있는 경우ë¼ë©´ +ì‹œìŠ¤í…œì´ ì œê³µìž ì „ì²´ì— ìž„ì‹œ ê¶Œí•œì„ í—ˆìš©í•˜ë©°, ì œê³µìž ìˆ˜ì¤€ ë˜ëŠ” 경로 수준 권한ì—서 요구하는 다른 ëª¨ë“ ê¶Œí•œì„ ìž¬ì •ì˜í•©ë‹ˆë‹¤. </p> <p> - ì´ í”Œëž˜ê·¸ê°€ <code>false</code>로 ì„¤ì •ë˜ë©´, 반드시 + ì´ í”Œëž˜ê·¸ê°€ <code>false</code>로 ì„¤ì •ë˜ë©´, 반드시 <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> <grant-uri-permission></a></code> 하위 요소를 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> - <provider></a></code> ìš”ì†Œì— ì¶”ê°€í•´ì•¼ 합니다. ê° í•˜ìœ„ 요소는 임시 ê¶Œí•œì„ í—ˆìš©í•œ + <provider></a></code> ìš”ì†Œì— ì¶”ê°€í•´ì•¼ 합니다. ê° í•˜ìœ„ 요소는 임시 ê¶Œí•œì„ í—ˆìš©í•œ 콘í…ì¸ URI(하나 ë˜ëŠ” 여러 ê°œ)를 나타냅니다. </p> <p> ì• í”Œë¦¬ì¼€ì´ì…˜ì— 임시 액세스를 ìœ„ìž„í•˜ë ¤ë©´, ì¸í…íŠ¸ì— {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} ë˜ëŠ” -{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} 플래그, ë˜ëŠ” 둘 모ë‘ê°€ 들어 있어야 합니다. ì´ë“¤ì€ +{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} 플래그, ë˜ëŠ” 둘 모ë‘ê°€ 들어 있어야 합니다. ì´ë“¤ì€ {@link android.content.Intent#setFlags(int) setFlags()} 메서드로 ì„¤ì •ë©ë‹ˆë‹¤. </p> <p> @@ -1087,7 +1087,7 @@ android:authorities}</a>) 권한 </dt> <dd> - ì œê³µìžì˜ ë°ì´í„°ì— 액세스하기 위해 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ + ì œê³µìžì˜ ë°ì´í„°ì— 액세스하기 위해 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 반드시 ê°€ì§€ê³ ìžˆì–´ì•¼ 하는 ê¶Œí•œì„ ë‚˜íƒ€ë‚´ëŠ” ì†ì„±ìž…니다. <ul> <li> @@ -1108,7 +1108,7 @@ android:authorities}</a>) </li> </ul> <p> - ê°ì¢… 권한과 ê·¸ì— ìƒì‘하는 ì†ì„±ì€ + ê°ì¢… 권한과 ê·¸ì— ìƒì‘하는 ì†ì„±ì€ <a href="#Permissions">콘í…ì¸ ì œê³µìž ê¶Œí•œ 구현</a> ì„¹ì…˜ì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> @@ -1117,7 +1117,7 @@ android:authorities}</a>) 시작 ë° ì œì–´ ì†ì„± </dt> <dd> - ì´ì™€ ê°™ì€ ì†ì„±ì€ Android ì‹œìŠ¤í…œì´ ì œê³µìžë¥¼ 시작하는 방법과 시ì , + ì´ì™€ ê°™ì€ ì†ì„±ì€ Android ì‹œìŠ¤í…œì´ ì œê³µìžë¥¼ 시작하는 방법과 시ì , ì œê³µìžì˜ 프로세스 특징과 기타 런타임 ì„¤ì • ë“±ì„ ê²°ì •í•©ë‹ˆë‹¤. <ul> <li> @@ -1130,12 +1130,12 @@ android:authorities}</a>) </li> <li> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#init"> - android:initOrder</a></code>: ê°™ì€ í”„ë¡œì„¸ìŠ¤ ë‚´ì˜ ë‹¤ë¥¸ ì œê³µìžì™€ 비êµí•˜ì—¬ + android:initOrder</a></code>: ê°™ì€ í”„ë¡œì„¸ìŠ¤ ë‚´ì˜ ë‹¤ë¥¸ ì œê³µìžì™€ 비êµí•˜ì—¬ ì´ ì œê³µìžê°€ 시작ë˜ì–´ì•¼ 하는 순서입니다. </li> <li> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#multi"> - android:multiProcess</a></code>: í´ë¼ì´ì–¸íŠ¸ë¥¼ 호출하는 것과 + android:multiProcess</a></code>: í´ë¼ì´ì–¸íŠ¸ë¥¼ 호출하는 것과 ê°™ì€ í”„ë¡œì„¸ìŠ¤ì—서 ì‹œìŠ¤í…œì´ ì œê³µìžë¥¼ ì‹œìž‘í• ìˆ˜ 있게 해주는 플래그입니다. </li> <li> @@ -1145,7 +1145,7 @@ android:authorities}</a>) </li> <li> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#sync"> - android:syncable</a></code>: ì œê³µìžì˜ ë°ì´í„°ê°€ + android:syncable</a></code>: ì œê³µìžì˜ ë°ì´í„°ê°€ ì„œë²„ì— ìžˆëŠ” ë°ì´í„°ì™€ ë™ê¸°í™”ë ì˜ˆì •ìž„ì„ ë‚˜íƒ€ë‚´ëŠ” 플래그입니다. </li> </ul> @@ -1165,7 +1165,7 @@ android:authorities}</a>) <li> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#icon"> android:icon</a></code>: ì œê³µìžì˜ ì•„ì´ì½˜ì´ 들어 있는 드로어블 리소스입니다. - ì´ ì•„ì´ì½˜ì€ + ì´ ì•„ì´ì½˜ì€ <em>ì„¤ì •</em> > <em>앱</em> > <em>모ë‘</em>ì— ìžˆëŠ” 앱 목ë¡ì—서 ì œê³µìžì˜ ë ˆì´ë¸” ì˜†ì— í‘œì‹œë©ë‹ˆë‹¤. </li> <li> @@ -1187,28 +1187,28 @@ android:authorities}</a>) <h2 id="Intents">ì¸í…트 ë° ë°ì´í„° 액세스</h2> <p> ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 콘í…ì¸ ì œê³µìžì— ê°„ì ‘ì 으로 ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ {@link android.content.Intent}를 사용하면 ë©ë‹ˆë‹¤. - ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ {@link android.content.ContentResolver} ë˜ëŠ” -{@link android.content.ContentProvider}ì˜ ë©”ì„œë“œ 중 ì–´ëŠ í•˜ë‚˜ë„ í˜¸ì¶œí•˜ì§€ 않습니다. -ëŒ€ì‹ , 액티비티를 시작하는 ì¸í…트를 ì „ì†¡í•©ë‹ˆë‹¤. ì´ ì¸í…트는 ì œê³µìžê°€ ì†Œìœ í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ì¸ 경우가 많습니다. -ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ê°€ ë°ì´í„°ë¥¼ ìžì²´ UIì—서 ê²€ìƒ‰í•˜ê³ í‘œì‹œí•˜ëŠ” ì—í• ì„ ë§¡ìŠµë‹ˆë‹¤. + ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ {@link android.content.ContentResolver} ë˜ëŠ” +{@link android.content.ContentProvider}ì˜ ë©”ì„œë“œ 중 ì–´ëŠ í•˜ë‚˜ë„ í˜¸ì¶œí•˜ì§€ 않습니다. +ëŒ€ì‹ , 액티비티를 시작하는 ì¸í…트를 ì „ì†¡í•©ë‹ˆë‹¤. ì´ ì¸í…트는 ì œê³µìžê°€ ì†Œìœ í•œ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì¼ë¶€ì¸ 경우가 많습니다. +ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ê°€ ë°ì´í„°ë¥¼ ìžì²´ UIì—서 ê²€ìƒ‰í•˜ê³ í‘œì‹œí•˜ëŠ” ì—í• ì„ ë§¡ìŠµë‹ˆë‹¤. ì¸í…íŠ¸ì˜ ë™ìž‘ì— ë”°ë¼ ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ê°€ 사용ìžì—게 프롬프트를 표시하여 ì œê³µìžì˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì¸í…트ì—는 ëŒ€ìƒ ì•¡í‹°ë¹„í‹°ê°€ UIì— í‘œì‹œí•˜ëŠ” "추가" ë°ì´í„°ê°€ 들어 ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -그러면 사용ìžì—게 ì´ ë°ì´í„°ë¥¼ ë³€ê²½í• ìˆ˜ 있는 ì˜µì…˜ì´ ì£¼ì–´ì§€ê³ , 그런 ë‹¤ìŒ ì´ë¥¼ 사용하여 +그러면 사용ìžì—게 ì´ ë°ì´í„°ë¥¼ ë³€ê²½í• ìˆ˜ 있는 ì˜µì…˜ì´ ì£¼ì–´ì§€ê³ , 그런 ë‹¤ìŒ ì´ë¥¼ 사용하여 ì œê³µìž ë‚´ì˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í• ìˆ˜ 있습니다. </p> <p> </p> <p> - ë°ì´í„° ë¬´ê²°ì„±ì„ ë³´ìž¥í•˜ëŠ” ë° ìœ ìš©í•œ ê²ƒì„ ì›í•˜ë©´ ì¸í…트 액세스를 사용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. -엄격하게 ì •ì˜ëœ 비즈니스 ë…¼ë¦¬ì— ë”°ë¼ ë°ì´í„°ê°€ 삽입, ì—…ë°ì´íЏë˜ê³ ì‚ì œë˜ëŠ” ê²ƒì´ ì œê³µìžë¥¼ í¬ê²Œ ì¢Œìš°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -ì´ëŸ° ê²½ìš°ì— í•´ë‹¹ë˜ë©´, 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ ì§ì ‘ ìˆ˜ì •í•˜ë„ë¡ í—ˆìš©í•˜ë©´ ë°ì´í„°ê°€ 잘못ë˜ëŠ” + ë°ì´í„° ë¬´ê²°ì„±ì„ ë³´ìž¥í•˜ëŠ” ë° ìœ ìš©í•œ ê²ƒì„ ì›í•˜ë©´ ì¸í…트 액세스를 사용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. +엄격하게 ì •ì˜ëœ 비즈니스 ë…¼ë¦¬ì— ë”°ë¼ ë°ì´í„°ê°€ 삽입, ì—…ë°ì´íЏë˜ê³ ì‚ì œë˜ëŠ” ê²ƒì´ ì œê³µìžë¥¼ í¬ê²Œ ì¢Œìš°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +ì´ëŸ° ê²½ìš°ì— í•´ë‹¹ë˜ë©´, 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ë°ì´í„°ë¥¼ ì§ì ‘ ìˆ˜ì •í•˜ë„ë¡ í—ˆìš©í•˜ë©´ ë°ì´í„°ê°€ 잘못ë˜ëŠ” 결과를 ì´ˆëž˜í• ìˆ˜ 있습니다. 개발ìžë“¤ì—게 ì¸í…트 액세스 ì‚¬ìš©ì„ í—ˆìš©í•˜ë ¤ë©´, ê·¸ ë‚´ìš©ì„ ì² ì €ížˆ 기ë¡í•´ë‘어야 합니다. - 개발ìžë“¤ì—게 ìžê¸° ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ UI를 사용한 ì¸í…트 액세스가 + 개발ìžë“¤ì—게 ìžê¸° ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ UI를 사용한 ì¸í…트 액세스가 코드로 ë°ì´í„°ë¥¼ ìˆ˜ì •í•˜ë ¤ 시ë„하는 것보다 ë‚˜ì€ ì´ìœ 를 설명해주ì‹ì‹œì˜¤. </p> <p> ì œê³µìžì˜ ë°ì´í„°ë¥¼ ìˆ˜ì •í•˜ê³ ìž í•˜ëŠ” ìˆ˜ì‹ ë˜ëŠ” ì¸í…트 ì²˜ë¦¬ë„ ë‹¤ë¥¸ ì¸í…트 처리와 다를 바가 없습니다. - ì¸í…트 ì‚¬ìš©ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ + ì¸í…트 ì‚¬ìš©ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> ì£¼ì œë¥¼ ì½ìœ¼ë©´ 확ì¸í• 수 있습니다. </p> diff --git a/docs/html-intl/intl/ko/guide/topics/providers/content-providers.jd b/docs/html-intl/intl/ko/guide/topics/providers/content-providers.jd index ce98840e16db..8671f7b71f91 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/content-providers.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/content-providers.jd @@ -47,31 +47,31 @@ page.title=콘í…ì¸ ì œê³µìž </div> </div> <p> - 콘í…ì¸ ì œê³µìžëŠ” êµ¬ì¡°í™”ëœ ë°ì´í„° ì„¸íŠ¸ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. -ë°ì´í„°ë¥¼ 캡ìŠí™”하여 ë°ì´í„° ë³´ì•ˆì„ ì •ì˜í•˜ëŠ” ë° í•„ìš”í•œ ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•˜ê¸°ë„ í•©ë‹ˆë‹¤. + 콘í…ì¸ ì œê³µìžëŠ” êµ¬ì¡°í™”ëœ ë°ì´í„° ì„¸íŠ¸ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 관리합니다. +ë°ì´í„°ë¥¼ 캡ìŠí™”하여 ë°ì´í„° ë³´ì•ˆì„ ì •ì˜í•˜ëŠ” ë° í•„ìš”í•œ ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•˜ê¸°ë„ í•©ë‹ˆë‹¤. 콘í…ì¸ ì œê³µìžëŠ” 한 í”„ë¡œì„¸ìŠ¤ì˜ ë°ì´í„°ì— 다른 프로세스ì—서 실행 ì¤‘ì¸ ì½”ë“œë¥¼ 연결하는 표준 ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. </p> <p> - 콘í…ì¸ ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ê³ ìž í•˜ëŠ” 경우, + 콘í…ì¸ ì œê³µìž ë‚´ì˜ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í•˜ê³ ìž í•˜ëŠ” 경우, ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.content.Context}ì— ìžˆëŠ” {@link android.content.ContentResolver} 개체를 사용하여 í´ë¼ì´ì–¸íŠ¸ë¡œì„œ ì œê³µìžì™€ í†µì‹ ì„ ì£¼ê³ ë°›ìœ¼ë©´ ë©ë‹ˆë‹¤. - {@link android.content.ContentResolver} 개체가 ì œê³µìž ê°œì²´ì™€ í†µì‹ í•˜ë©°, ì´ ê°œì²´ëŠ” -{@link android.content.ContentProvider}를 구현하는 í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ìž…ë‹ˆë‹¤. + {@link android.content.ContentResolver} 개체가 ì œê³µìž ê°œì²´ì™€ í†µì‹ í•˜ë©°, ì´ ê°œì²´ëŠ” +{@link android.content.ContentProvider}를 구현하는 í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ìž…ë‹ˆë‹¤. ì œê³µìž ê°œì²´ê°€ í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„° ë°ì´í„° ìš”ì²ì„ 받아 ìš”ì²ëœ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë©° 결과를 반환합니다. </p> <p> ë°ì´í„°ë¥¼ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ ê³µìœ í• ìƒê°ì´ 없으면 ë‚˜ë¦„ì˜ ì œê³µìžë¥¼ 개발하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. 그러나, ìžì²´ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 ì‚¬ìš©ìž ì§€ì • 검색 ì œì•ˆì„ ì œê³µí•˜ë ¤ë©´ ë‚˜ë¦„ì˜ ì œê³µìžê°€ ê¼ í•„ìš”í•©ë‹ˆë‹¤. - ë˜í•œ, 복잡한 ë°ì´í„°ë‚˜ 파ì¼ì„ ìžì‹ ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 복사하여 ë¶™ì—¬ë„£ê³ ìž í•˜ëŠ” 경우ì—ë„ + ë˜í•œ, 복잡한 ë°ì´í„°ë‚˜ 파ì¼ì„ ìžì‹ ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ 복사하여 ë¶™ì—¬ë„£ê³ ìž í•˜ëŠ” 경우ì—ë„ ë‚˜ë¦„ì˜ ì œê³µìžê°€ 필요합니다. </p> <p> - Android ìžì²´ì— 오디오, ë™ì˜ìƒ, ì´ë¯¸ì§€ ë° ê°œì¸ ì—°ë½ì²˜ ì •ë³´ ë“±ì˜ ë°ì´í„°ë¥¼ 관리하는 콘í…ì¸ ì œê³µìžê°€ -í¬í•¨ë˜ì–´ 있습니다. 그중 몇 가지를 목ë¡ìœ¼ë¡œ 나열한 ê²ƒì„ + Android ìžì²´ì— 오디오, ë™ì˜ìƒ, ì´ë¯¸ì§€ ë° ê°œì¸ ì—°ë½ì²˜ ì •ë³´ ë“±ì˜ ë°ì´í„°ë¥¼ 관리하는 콘í…ì¸ ì œê³µìžê°€ +í¬í•¨ë˜ì–´ 있습니다. 그중 몇 가지를 목ë¡ìœ¼ë¡œ 나열한 ê²ƒì„ <code><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a> - </code> íŒ¨í‚¤ì§€ì— ëŒ€í•œ 참조 문서ì—서 확ì¸í• 수 있습니다. ì´ì™€ ê°™ì€ ì œê³µìžëŠ” 몇 가지 ì œì•½ì´ ìžˆì§€ë§Œ, + </code> íŒ¨í‚¤ì§€ì— ëŒ€í•œ 참조 문서ì—서 확ì¸í• 수 있습니다. ì´ì™€ ê°™ì€ ì œê³µìžëŠ” 몇 가지 ì œì•½ì´ ìžˆì§€ë§Œ, ì–´ëŠ Android ì• í”Œë¦¬ì¼€ì´ì…˜ì—나 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. </p><p> ë‹¤ìŒ ì£¼ì œì—서는 콘í…ì¸ ì œê³µìžì— 대해 좀 ë” ìžì„¸ížˆ 설명합니다. diff --git a/docs/html-intl/intl/ko/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/ko/guide/topics/providers/document-provider.jd index e356e22d17c9..665a72a755cf 100644 --- a/docs/html-intl/intl/ko/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/ko/guide/topics/providers/document-provider.jd @@ -75,96 +75,96 @@ StorageClient</a></li> </div> -<p>Android 4.4(API ë ˆë²¨ 19)ì—서는 ì €ìž¥ì†Œ 액세스 í”„ë ˆìž„ì›Œí¬(SAF)를 ì²˜ìŒ ë„입하게 ë˜ì—ˆìŠµë‹ˆë‹¤. SAF는 -사용ìžê°€ ì„ í˜¸í•˜ëŠ” 문서 ì €ìž¥ì†Œ ì œê³µìž ì „ì²´ë¥¼ ê±¸ì³ ë¬¸ì„œ, ì´ë¯¸ì§€ ë° ê°ì¢… 다른 파ì¼ì„ -íƒìƒ‰í•˜ê³ 여는 ìž‘ì—…ì„ ê°„íŽ¸í•˜ê²Œ 만들어ì¤ë‹ˆë‹¤. 표준형ì˜, 사용하기 쉬운 UI로 +<p>Android 4.4(API ë ˆë²¨ 19)ì—서는 ì €ìž¥ì†Œ 액세스 í”„ë ˆìž„ì›Œí¬(SAF)를 ì²˜ìŒ ë„입하게 ë˜ì—ˆìŠµë‹ˆë‹¤. SAF는 +사용ìžê°€ ì„ í˜¸í•˜ëŠ” 문서 ì €ìž¥ì†Œ ì œê³µìž ì „ì²´ë¥¼ ê±¸ì³ ë¬¸ì„œ, ì´ë¯¸ì§€ ë° ê°ì¢… 다른 파ì¼ì„ +íƒìƒ‰í•˜ê³ 여는 ìž‘ì—…ì„ ê°„íŽ¸í•˜ê²Œ 만들어ì¤ë‹ˆë‹¤. 표준형ì˜, 사용하기 쉬운 UI로 사용ìžê°€ ê°ì¢… 앱과 ì œê³µìžì— ê±¸ì³ ì¼ê´€ëœ ë°©ì‹ìœ¼ë¡œ 파ì¼ì„ íƒìƒ‰í•˜ê³ 최근 ë‚´ìš©ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</p> -<p>í´ë¼ìš°ë“œ ë˜ëŠ” 로컬 ì €ìž¥ì†Œ 서비스가 ì´ ì—ì½”ì‹œìŠ¤í…œì— ì°¸ê°€í•˜ë ¤ë©´ ìžì‹ ì˜ ì„œë¹„ìŠ¤ë¥¼ 캡ìŠí™”하는 -{@link android.provider.DocumentsProvider}를 구현하면 ë©ë‹ˆë‹¤. -ì œê³µìžì˜ ë¬¸ì„œì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 í´ë¼ì´ì–¸íЏ ì•±ì˜ ê²½ìš° 단 몇 ì¤„ì˜ ì½”ë“œë§Œìœ¼ë¡œ +<p>í´ë¼ìš°ë“œ ë˜ëŠ” 로컬 ì €ìž¥ì†Œ 서비스가 ì´ ì—ì½”ì‹œìŠ¤í…œì— ì°¸ê°€í•˜ë ¤ë©´ ìžì‹ ì˜ ì„œë¹„ìŠ¤ë¥¼ 캡ìŠí™”하는 +{@link android.provider.DocumentsProvider}를 구현하면 ë©ë‹ˆë‹¤. +ì œê³µìžì˜ ë¬¸ì„œì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 í´ë¼ì´ì–¸íЏ ì•±ì˜ ê²½ìš° 단 몇 ì¤„ì˜ ì½”ë“œë§Œìœ¼ë¡œ SAF와 í†µí•©í• ìˆ˜ 있습니다.</p> <p>SAFì—는 다ìŒê³¼ ê°™ì€ í•ëª©ì´ í¬í•¨ë©ë‹ˆë‹¤.</p> <ul> <li><strong>문서 ì œê³µìž</strong>—ì¼ì¢…ì˜ ì½˜í…ì¸ ì œê³µìžë¡œ -ì €ìž¥ì†Œ 서비스(예: Google Drive 등)로 하여금 ìžì‹ ì´ ê´€ë¦¬í•˜ëŠ” 파ì¼ì„ 드러내ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤. 문서 ì œê³µìžëŠ” -{@link android.provider.DocumentsProvider} í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë©ë‹ˆë‹¤. -문서 ì œê³µìž ìŠ¤í‚¤ë§ˆëŠ” ê¸°ì¡´ì˜ íŒŒì¼ ê³„ì¸µì„ ê·¼ê±°ë¡œ 하지만, -문서 ì œê³µìžê°€ ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” 물리ì ì¸ ë°©ë²•ì€ ê°œë°œìžê°€ ì„ íƒí•˜ê¸° 나름입니다. -Android 플랫í¼ì—는 ë‚´ìž¥ëœ ë¬¸ì„œ ì œê³µìžê°€ 여러 ê°œ 있습니다. +ì €ìž¥ì†Œ 서비스(예: Google Drive 등)로 하여금 ìžì‹ ì´ ê´€ë¦¬í•˜ëŠ” 파ì¼ì„ 드러내ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤. 문서 ì œê³µìžëŠ” +{@link android.provider.DocumentsProvider} í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ 구현ë©ë‹ˆë‹¤. +문서 ì œê³µìž ìŠ¤í‚¤ë§ˆëŠ” ê¸°ì¡´ì˜ íŒŒì¼ ê³„ì¸µì„ ê·¼ê±°ë¡œ 하지만, +문서 ì œê³µìžê°€ ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” 물리ì ì¸ ë°©ë²•ì€ ê°œë°œìžê°€ ì„ íƒí•˜ê¸° 나름입니다. +Android 플랫í¼ì—는 ë‚´ìž¥ëœ ë¬¸ì„œ ì œê³µìžê°€ 여러 ê°œ 있습니다. 예를 들어 다운로드, ì´ë¯¸ì§€ ë° ë¹„ë””ì˜¤ 등입니다.</li> <li><strong>í´ë¼ì´ì–¸íЏ 앱</strong>—ì¼ì¢…ì˜ ì‚¬ìš©ìž ì§€ì • 앱으로 {@link android.content.Intent#ACTION_OPEN_DOCUMENT} ë°/ë˜ëŠ” -{@link android.content.Intent#ACTION_CREATE_DOCUMENT} ì¸í…트를 í˜¸ì¶œí•˜ê³ , +{@link android.content.Intent#ACTION_CREATE_DOCUMENT} ì¸í…트를 í˜¸ì¶œí•˜ê³ , 문서 ì œê³µìžê°€ 반환하는 파ì¼ì„ ìˆ˜ì‹ í•©ë‹ˆë‹¤.</li> -<li><strong>ì„ íƒê¸°</strong>—ì¼ì¢…ì˜ ì‹œìŠ¤í…œ UI로 사용ìžê°€ í´ë¼ì´ì–¸íЏ ì•±ì˜ +<li><strong>ì„ íƒê¸°</strong>—ì¼ì¢…ì˜ ì‹œìŠ¤í…œ UI로 사용ìžê°€ í´ë¼ì´ì–¸íЏ ì•±ì˜ ê²€ìƒ‰ ê¸°ì¤€ì„ ë§Œì¡±í•˜ëŠ” ëª¨ë“ ë¬¸ì„œ ì œê³µìžì—서 ë¬¸ì„œì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•´ì¤ë‹ˆë‹¤.</li> </ul> <p>SAFê°€ ì œê³µí•˜ëŠ” ê¸°ëŠ¥ì„ ëª‡ 가지 예로 들면 다ìŒê³¼ 같습니다.</p> <ul> <li>사용ìžë“¤ë¡œ 하여금 í•˜ë‚˜ì˜ ì•±ë§Œì´ ì•„ë‹ˆë¼ ëª¨ë“ ë¬¸ì„œ ì œê³µìžì—서 콘í…ì¸ ë¥¼ íƒìƒ‰í• 수 있게 í•´ì¤ë‹ˆë‹¤.</li> -<li>ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ë¬¸ì„œ ì œê³µìžê°€ ì†Œìœ í•œ ë¬¸ì„œì— ëŒ€í•œ 장기ì , ì˜êµ¬ì 액세스 ê¶Œí•œì„ ê°€ì§ˆ 수 있ë„ë¡ -í•´ì¤ë‹ˆë‹¤. ì´ ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ í†µí•´ 사용ìžê°€ ì œê³µìžì— 있는 파ì¼ì„ 추가, 편집, +<li>ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ë¬¸ì„œ ì œê³µìžê°€ ì†Œìœ í•œ ë¬¸ì„œì— ëŒ€í•œ 장기ì , ì˜êµ¬ì 액세스 ê¶Œí•œì„ ê°€ì§ˆ 수 있ë„ë¡ +í•´ì¤ë‹ˆë‹¤. ì´ ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ í†µí•´ 사용ìžê°€ ì œê³µìžì— 있는 파ì¼ì„ 추가, 편집, ì €ìž¥ ë° ì‚ì œí• ìˆ˜ 있습니다.</li> -<li>여러 ê°œì˜ ì‚¬ìš©ìž ê³„ì •ì„ ì§€ì›í•˜ë©° USB ì €ìž¥ì†Œ ì œê³µìžì™€ ê°™ì€ ìž„ì‹œ ë£¨íŠ¸ë„ ì§€ì›í•©ë‹ˆë‹¤. +<li>여러 ê°œì˜ ì‚¬ìš©ìž ê³„ì •ì„ ì§€ì›í•˜ë©° USB ì €ìž¥ì†Œ ì œê³µìžì™€ ê°™ì€ ìž„ì‹œ ë£¨íŠ¸ë„ ì§€ì›í•©ë‹ˆë‹¤. ì´ëŠ” 드ë¼ì´ë¸Œê°€ ì—°ê²°ë˜ì–´ ìžˆì„ ë•Œë§Œ 나타납니다. </li> </ul> <h2 id ="overview">개요</h2> -<p>SAF는 {@link android.provider.DocumentsProvider} í´ëž˜ìŠ¤ì˜ -하위 í´ëž˜ìŠ¤ì¸ ì½˜í…ì¸ ì œê³µìžë¥¼ 중심으로 ë‘˜ëŸ¬ì‹¸ê³ ìžˆìŠµë‹ˆë‹¤. ë°ì´í„°ëŠ” <em>문서 ì œê³µìž</em> ë‚´ì—서 ì¼ë°˜ì ì¸ íŒŒì¼ ê³„ì¸µìœ¼ë¡œ +<p>SAF는 {@link android.provider.DocumentsProvider} í´ëž˜ìŠ¤ì˜ +하위 í´ëž˜ìŠ¤ì¸ ì½˜í…ì¸ ì œê³µìžë¥¼ 중심으로 ë‘˜ëŸ¬ì‹¸ê³ ìžˆìŠµë‹ˆë‹¤. ë°ì´í„°ëŠ” <em>문서 ì œê³µìž</em> ë‚´ì—서 ì¼ë°˜ì ì¸ íŒŒì¼ ê³„ì¸µìœ¼ë¡œ 구조화ë©ë‹ˆë‹¤.</p> <p><img src="{@docRoot}images/providers/storage_datamodel.png" alt="data model" /></p> -<p class="img-caption"><strong>그림 1.</strong> 문서 ì œê³µìž ë°ì´í„° 모ë¸ìž…니다. 루트 하나가 í•˜ë‚˜ì˜ ë¬¸ì„œë¥¼ 가리키며, +<p class="img-caption"><strong>그림 1.</strong> 문서 ì œê³µìž ë°ì´í„° 모ë¸ìž…니다. 루트 하나가 í•˜ë‚˜ì˜ ë¬¸ì„œë¥¼ 가리키며, ì´ëŠ” 다시 트리 ì „ì²´ì˜ íŒ¬ì•„ì›ƒì„ ì‹œìž‘í•©ë‹ˆë‹¤.</p> <p>ë‹¤ìŒ ë‚´ìš©ì„ ì°¸ê³ í•˜ì‹ì‹œì˜¤.</p> <ul> -<li>ê° ë¬¸ì„œ ì œê³µìžëŠ” 하나 ì´ìƒì˜ "루트"를 ë³´ê³ í•©ë‹ˆë‹¤. +<li>ê° ë¬¸ì„œ ì œê³µìžëŠ” 하나 ì´ìƒì˜ "루트"를 ë³´ê³ í•©ë‹ˆë‹¤. ì´ëŠ” 문서 트리 ì†ì„ íƒìƒ‰í• 시작 ì§€ì 입니다. -ê° ë£¨íŠ¸ì—는 ê³ ìœ í•œ {@link android.provider.DocumentsContract.Root#COLUMN_ROOT_ID}ê°€ 있으며, -ì´ëŠ” 해당 루트 ì•„ëž˜ì˜ ì½˜í…ì¸ ë¥¼ 나타내는 문서(ë””ë ‰í„°ë¦¬)를 +ê° ë£¨íŠ¸ì—는 ê³ ìœ í•œ {@link android.provider.DocumentsContract.Root#COLUMN_ROOT_ID}ê°€ 있으며, +ì´ëŠ” 해당 루트 ì•„ëž˜ì˜ ì½˜í…ì¸ ë¥¼ 나타내는 문서(ë””ë ‰í„°ë¦¬)를 가리킵니다. -루트는 ì„¤ê³„ìƒ ë™ì 으로 ë§Œë“¤ì–´ì ¸ 있어 여러 ê°œì˜ ê³„ì •, 임시 USB ì €ìž¥ì†Œ 기기 +루트는 ì„¤ê³„ìƒ ë™ì 으로 ë§Œë“¤ì–´ì ¸ 있어 여러 ê°œì˜ ê³„ì •, 임시 USB ì €ìž¥ì†Œ 기기 ë˜ëŠ” ì‚¬ìš©ìž ë¡œê·¸ì¸/로그아웃 등과 ê°™ì€ ê²½ìš°ë¥¼ ì§€ì›í•˜ë„ë¡ ë˜ì–´ 있습니다.</li> -<li>ê° ë£¨íŠ¸ ì•„ëž˜ì— ë¬¸ì„œê°€ 하나씩 있습니다. 해당 문서는 1부터 <em>N</em>ê¹Œì§€ì˜ ë¬¸ì„œë¥¼ 가리키는ë°, +<li>ê° ë£¨íŠ¸ ì•„ëž˜ì— ë¬¸ì„œê°€ 하나씩 있습니다. 해당 문서는 1부터 <em>N</em>ê¹Œì§€ì˜ ë¬¸ì„œë¥¼ 가리키는ë°, ì´ëŠ” ê°ê° 1부터 <em>N</em>ì˜ ë¬¸ì„œë¥¼ 가리킬 수 있습니다. </li> -<li>ê° ì €ìž¥ì†Œì˜ ë°±ì—”ë“œê°€ -개별ì ì¸ íŒŒì¼ê³¼ ë””ë ‰í„°ë¦¬ë¥¼ ê³ ìœ í•œ -{@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID}로 -참조하여 드러냅니다.문서 ID는 ê³ ìœ í•´ì•¼ 하며 한 번 발행ë˜ê³ 나면 변경ë˜ì§€ 않습니다. +<li>ê° ì €ìž¥ì†Œì˜ ë°±ì—”ë“œê°€ +개별ì ì¸ íŒŒì¼ê³¼ ë””ë ‰í„°ë¦¬ë¥¼ ê³ ìœ í•œ +{@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID}로 +참조하여 드러냅니다.문서 ID는 ê³ ìœ í•´ì•¼ 하며 한 번 발행ë˜ê³ 나면 변경ë˜ì§€ 않습니다. ì´ë“¤ì€ 기기 ìž¬ë¶€íŒ…ì„ í†µê´„í•˜ì—¬ ì˜êµ¬ì ì¸ URI í—ˆê°€ì— ì‚¬ìš©ë˜ê¸° 때문입니다.</li> -<li>문서는 ì—´ 수 있는 파ì¼ì´ê±°ë‚˜(íŠ¹ì • MIME ìœ í˜•ìœ¼ë¡œ), +<li>문서는 ì—´ 수 있는 파ì¼ì´ê±°ë‚˜(íŠ¹ì • MIME ìœ í˜•ìœ¼ë¡œ), 추가 문서가 들어있는 ë””ë ‰í„°ë¦¬ì¼ ìˆ˜ 있습니다( {@link android.provider.DocumentsContract.Document#MIME_TYPE_DIR} MIME ìœ í˜•ìœ¼ë¡œ).</li> -<li>ê° ë¬¸ì„œëŠ” 서로 다른 ê¸°ëŠ¥ì„ ê°€ì§€ê³ ìžˆì„ ìˆ˜ 있습니다. ì´ëŠ” -{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS COLUMN_FLAGS}ì—서 설명한 것과 같습니다. - 예를 들어 {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_WRITE}, -{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE} ë° -{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_THUMBNAIL} 등입니다. -ê°™ì€ {@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID}ê°€ +<li>ê° ë¬¸ì„œëŠ” 서로 다른 ê¸°ëŠ¥ì„ ê°€ì§€ê³ ìžˆì„ ìˆ˜ 있습니다. ì´ëŠ” +{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS COLUMN_FLAGS}ì—서 설명한 것과 같습니다. + 예를 들어 {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_WRITE}, +{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE} ë° +{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_THUMBNAIL} 등입니다. +ê°™ì€ {@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID}ê°€ 여러 ë””ë ‰í„°ë¦¬ì— í¬í•¨ë˜ì–´ ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</li> </ul> <h2 id="flow">ì œì–´ í름</h2> -<p>위ì—서 언급한 바와 ê°™ì´, 문서 ì œê³µìž ë°ì´í„° 모ë¸ì€ ì¼ë°˜ì ì¸ -íŒŒì¼ ê³„ì¸µì„ ê¸°ë°˜ìœ¼ë¡œ 합니다. 그러나, ë°ì´í„°ë¥¼ 물리ì 으로 ì €ìž¥í•˜ëŠ” ë°©ì‹ì€ 마ìŒëŒ€ë¡œ ì„ íƒí• 수 있습니다. 다만 -{@link android.provider.DocumentsProvider} API를 통해 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있기만 하면 ë©ë‹ˆë‹¤. +<p>위ì—서 언급한 바와 ê°™ì´, 문서 ì œê³µìž ë°ì´í„° 모ë¸ì€ ì¼ë°˜ì ì¸ +íŒŒì¼ ê³„ì¸µì„ ê¸°ë°˜ìœ¼ë¡œ 합니다. 그러나, ë°ì´í„°ë¥¼ 물리ì 으로 ì €ìž¥í•˜ëŠ” ë°©ì‹ì€ 마ìŒëŒ€ë¡œ ì„ íƒí• 수 있습니다. 다만 +{@link android.provider.DocumentsProvider} API를 통해 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있기만 하면 ë©ë‹ˆë‹¤. 예를 들어, ë°ì´í„°ë¥¼ ì €ìž¥í•˜ê¸° 위해 태그 기반 í´ë¼ìš°ë“œ ì €ìž¥ì†Œë¥¼ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤.</p> -<p>그림 2는 사진 ì•±ì´ SAF를 사용하여 ì €ìž¥ëœ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ë°©ë²•ì„ +<p>그림 2는 사진 ì•±ì´ SAF를 사용하여 ì €ìž¥ëœ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ë°©ë²•ì„ ì˜ˆì‹œë¡œ 나타낸 것입니다.</p> <p><img src="{@docRoot}images/providers/storage_dataflow.png" alt="app" /></p> @@ -174,31 +174,31 @@ Android 플랫í¼ì—는 ë‚´ìž¥ëœ ë¬¸ì„œ ì œê³µìžê°€ 여러 ê°œ 있습니다. <ul> <li>SAFì—서는 ì œê³µìžì™€ í´ë¼ì´ì–¸íŠ¸ê°€ ì§ì ‘ ìƒí˜¸ 작용하지 않습니다. - í´ë¼ì´ì–¸íŠ¸ê°€ 파ì¼ê³¼ ìƒí˜¸ 작용하기 위한 ê¶Œí•œì„ ìš”ì²í•©ë‹ˆë‹¤(다시 ë§í•´, + í´ë¼ì´ì–¸íŠ¸ê°€ 파ì¼ê³¼ ìƒí˜¸ 작용하기 위한 ê¶Œí•œì„ ìš”ì²í•©ë‹ˆë‹¤(다시 ë§í•´, 파ì¼ì„ ì½ê³ , íŽ¸ì§‘í•˜ê³ ìƒì„± ë˜ëŠ” ì‚ì œí• ê¶Œí•œì„ ë§í•©ë‹ˆë‹¤).</li> -<li>ìƒí˜¸ ìž‘ìš©ì€ ì• í”Œë¦¬ì¼€ì´ì…˜(ì´ ì˜ˆì‹œì—서는 주어진 사진 앱)ì´ ì¸í…트 -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ë˜ëŠ” {@link android.content.Intent#ACTION_CREATE_DOCUMENT}를 실행시키면 시작합니다. ì´ ì¸í…트ì—는 -ê¸°ì¤€ì„ í•œì¸µ ë” ì •ë°€í•˜ê²Œ 하기 위한 í•„í„°ê°€ í¬í•¨ë 수 있습니다. 예를 들어, "ì—´ 수 있는 íŒŒì¼ ì¤‘ì—서 +<li>ìƒí˜¸ ìž‘ìš©ì€ ì• í”Œë¦¬ì¼€ì´ì…˜(ì´ ì˜ˆì‹œì—서는 주어진 사진 앱)ì´ ì¸í…트 +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ë˜ëŠ” {@link android.content.Intent#ACTION_CREATE_DOCUMENT}를 실행시키면 시작합니다. ì´ ì¸í…트ì—는 +ê¸°ì¤€ì„ í•œì¸µ ë” ì •ë°€í•˜ê²Œ 하기 위한 í•„í„°ê°€ í¬í•¨ë 수 있습니다. 예를 들어, "ì—´ 수 있는 íŒŒì¼ ì¤‘ì—서 'ì´ë¯¸ì§€' MIME ìœ í˜•ì„ ê°€ì§„ 파ì¼ì„ ëª¨ë‘ ì£¼ì„¸ìš”"ë¼ê³ í• ìˆ˜ 있습니다.</li> -<li>ì¸í…트가 실행ë˜ë©´ 시스템 ì„ íƒê¸°ê°€ ê°ê°ì˜ 등ë¡ëœ ì œê³µìžë¡œ ì´ë™í•˜ì—¬ 사용ìžì—게 +<li>ì¸í…트가 실행ë˜ë©´ 시스템 ì„ íƒê¸°ê°€ ê°ê°ì˜ 등ë¡ëœ ì œê³µìžë¡œ ì´ë™í•˜ì—¬ 사용ìžì—게 ì¼ì¹˜í•˜ëŠ” 콘í…ì¸ ë£¨íŠ¸ë¥¼ ë³´ì—¬ì¤ë‹ˆë‹¤.</li> -<li>ì„ íƒê¸°ëŠ” 사용ìžì—게 ë¬¸ì„œì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë° ì“°ëŠ” 표준 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 부여합니다. ì´ëŠ” -기본 문서 ì œê³µìž ì‚¬ì´ì— í° ì°¨ì´ê°€ 있ë”ë¼ë„ 무관합니다. 예를 들어, 그림 2는 +<li>ì„ íƒê¸°ëŠ” 사용ìžì—게 ë¬¸ì„œì— ì•¡ì„¸ìŠ¤í•˜ëŠ” ë° ì“°ëŠ” 표준 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 부여합니다. ì´ëŠ” +기본 문서 ì œê³µìž ì‚¬ì´ì— í° ì°¨ì´ê°€ 있ë”ë¼ë„ 무관합니다. 예를 들어, 그림 2는 Google Drive ì œê³µìž, USB ì œê³µìžì™€ í´ë¼ìš°ë“œ ì œê³µìžë¥¼ 나타낸 것입니다.</li> </ul> -<p>그림 3ì€ ì´ë¯¸ì§€ë¥¼ 검색 ì¤‘ì¸ ì‚¬ìš©ìžê°€ Google Drive ê³„ì •ì„ ì„ íƒí•œ +<p>그림 3ì€ ì´ë¯¸ì§€ë¥¼ 검색 ì¤‘ì¸ ì‚¬ìš©ìžê°€ Google Drive ê³„ì •ì„ ì„ íƒí•œ ì„ íƒê¸°ë¥¼ 나타낸 것입니다.</p> <p><img src="{@docRoot}images/providers/storage_picker.png" width="340" alt="picker" style="border:2px solid #ddd" /></p> <p class="img-caption"><strong>그림 3.</strong> ì„ íƒê¸°</p> -<p>사용ìžê°€ Google Drive를 ì„ íƒí•˜ë©´ ì´ë¯¸ì§€ê°€ 그림 4ì— ë‚˜íƒ€ë‚œ 것처럼 -표시ë©ë‹ˆë‹¤. 그때부터 사용ìžëŠ” ì œê³µìžì™€ í´ë¼ì´ì–¸íЏ ì•±ì´ ì§€ì›í•˜ëŠ” ë°©ì‹ì´ë¼ë©´ ì–´ë–¤ ì‹ìœ¼ë¡œë“ +<p>사용ìžê°€ Google Drive를 ì„ íƒí•˜ë©´ ì´ë¯¸ì§€ê°€ 그림 4ì— ë‚˜íƒ€ë‚œ 것처럼 +표시ë©ë‹ˆë‹¤. 그때부터 사용ìžëŠ” ì œê³µìžì™€ í´ë¼ì´ì–¸íЏ ì•±ì´ ì§€ì›í•˜ëŠ” ë°©ì‹ì´ë¼ë©´ ì–´ë–¤ ì‹ìœ¼ë¡œë“ ì´ë“¤ ì´ë¯¸ì§€ì™€ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있게 ë©ë‹ˆë‹¤. <p><img src="{@docRoot}images/providers/storage_photos.png" width="340" alt="picker" style="border:2px solid #ddd" /></p> @@ -207,45 +207,45 @@ Google Drive ì œê³µìž, USB ì œê³µìžì™€ í´ë¼ìš°ë“œ ì œê³µìžë¥¼ 나타낸 것 <h2 id="client">í´ë¼ì´ì–¸íЏ 앱 작성</h2> -<p>Android 4.3 ì´í•˜ì—서는 ì•±ì´ ë˜ ë‹¤ë¥¸ 앱ì—서 파ì¼ì„ ê²€ìƒ‰í• ìˆ˜ 있ë„ë¡ í•˜ë ¤ë©´ +<p>Android 4.3 ì´í•˜ì—서는 ì•±ì´ ë˜ ë‹¤ë¥¸ 앱ì—서 파ì¼ì„ ê²€ìƒ‰í• ìˆ˜ 있ë„ë¡ í•˜ë ¤ë©´ {@link android.content.Intent#ACTION_PICK} - ë˜ëŠ” {@link android.content.Intent#ACTION_GET_CONTENT}와 ê°™ì€ ì¸í…트를 호출해야만 했습니다. 그런 ë‹¤ìŒ -파ì¼ì„ ì„ íƒí• ì•±ì„ í•˜ë‚˜ ì„ íƒí•˜ê³ , ì„ íƒí•œ ì•±ì´ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ì•¼ 사용ìžê°€ + ë˜ëŠ” {@link android.content.Intent#ACTION_GET_CONTENT}와 ê°™ì€ ì¸í…트를 호출해야만 했습니다. 그런 ë‹¤ìŒ +파ì¼ì„ ì„ íƒí• ì•±ì„ í•˜ë‚˜ ì„ íƒí•˜ê³ , ì„ íƒí•œ ì•±ì´ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•˜ì—¬ì•¼ 사용ìžê°€ ì´ìš© 가능한 íŒŒì¼ ì¤‘ì—서 íƒìƒ‰í•˜ê³ ì„ íƒí• 수 있었습니다. </p> -<p>Android 4.4 ì´ìƒì—는 -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트를 ì‚¬ìš©í• ìˆ˜ 있다는 추가 ì˜µì…˜ì´ ìžˆìŠµë‹ˆë‹¤. -ì´ëŠ” ì‹œìŠ¤í…œì´ ì œì–´í•˜ëŠ” ì„ íƒê¸°ë¥¼ 표시하여 사용ìžê°€ 다른 앱ì—서 ì´ìš©í• 수 있게 ë§Œë“ íŒŒì¼ì„ -ëª¨ë‘ íƒìƒ‰í• 수 있게 í•´ì¤ë‹ˆë‹¤. ì´ í•˜ë‚˜ì˜ UI로부터 +<p>Android 4.4 ì´ìƒì—는 +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트를 ì‚¬ìš©í• ìˆ˜ 있다는 추가 ì˜µì…˜ì´ ìžˆìŠµë‹ˆë‹¤. +ì´ëŠ” ì‹œìŠ¤í…œì´ ì œì–´í•˜ëŠ” ì„ íƒê¸°ë¥¼ 표시하여 사용ìžê°€ 다른 앱ì—서 ì´ìš©í• 수 있게 ë§Œë“ íŒŒì¼ì„ +ëª¨ë‘ íƒìƒ‰í• 수 있게 í•´ì¤ë‹ˆë‹¤. ì´ í•˜ë‚˜ì˜ UI로부터 사용ìžëŠ” ì§€ì›ë˜ëŠ” ëª¨ë“ ì•±ì—서 파ì¼ì„ ì„ íƒí• 수 있는 것입니다.</p> -<p>{@link android.content.Intent#ACTION_OPEN_DOCUMENT}는 -{@link android.content.Intent#ACTION_GET_CONTENT}를 +<p>{@link android.content.Intent#ACTION_OPEN_DOCUMENT}는 +{@link android.content.Intent#ACTION_GET_CONTENT}를 ëŒ€ì²´í• ëª©ì 으로 만들어진 ê²ƒì´ ì•„ë‹™ë‹ˆë‹¤. ì–´ëŠ ê²ƒì„ ì‚¬ìš©í•´ì•¼ í• ì§€ëŠ” ê°ìžì˜ ì•±ì— í•„ìš”í•œ ê²ƒì´ ë¬´ì—‡ì¸ì§€ì— 좌우ë©ë‹ˆë‹¤.</p> <ul> -<li>ì•±ì´ ë‹¨ìˆœížˆ ë°ì´í„°ë¥¼ ì½ê³ /ê°€ì ¸ì˜¤ê¸°ë§Œì„ ë°”ëž€ë‹¤ë©´ -{@link android.content.Intent#ACTION_GET_CONTENT}를 사용하ì‹ì‹œì˜¤. +<li>ì•±ì´ ë‹¨ìˆœížˆ ë°ì´í„°ë¥¼ ì½ê³ /ê°€ì ¸ì˜¤ê¸°ë§Œì„ ë°”ëž€ë‹¤ë©´ +{@link android.content.Intent#ACTION_GET_CONTENT}를 사용하ì‹ì‹œì˜¤. ì´ ë°©ì‹ì„ 사용하면 ì•±ì€ ì´ë¯¸ì§€ 파ì¼ê³¼ ê°™ì€ ë°ì´í„° ì‚¬ë³¸ì„ ê°€ì ¸ì˜¤ê²Œ ë©ë‹ˆë‹¤.</li> -<li>ì•±ì´ ë¬¸ì„œ ì œê³µìžê°€ ë³´ìœ í•œ ë¬¸ì„œì— ìž¥ê¸°ì , ì˜êµ¬ì 액세스 ê¶Œí•œì„ ê°€ì§€ê¸°ë¥¼ ë°”ë¼ëŠ” 경우 +<li>ì•±ì´ ë¬¸ì„œ ì œê³µìžê°€ ë³´ìœ í•œ ë¬¸ì„œì— ìž¥ê¸°ì , ì˜êµ¬ì 액세스 ê¶Œí•œì„ ê°€ì§€ê¸°ë¥¼ ë°”ë¼ëŠ” 경우 {@link android.content.Intent#ACTION_OPEN_DOCUMENT}를 사용하ì‹ì‹œì˜¤. - ì¼ë¡€ë¡œ 사용ìžë“¤ì—게 문서 ì œê³µìžì— ì €ìž¥ëœ ì´ë¯¸ì§€ë¥¼ íŽ¸ì§‘í• ìˆ˜ 있게 해주는 + ì¼ë¡€ë¡œ 사용ìžë“¤ì—게 문서 ì œê³µìžì— ì €ìž¥ëœ ì´ë¯¸ì§€ë¥¼ íŽ¸ì§‘í• ìˆ˜ 있게 해주는 사진 편집 ì•±ì„ ë“¤ 수 ìžˆê² ìŠµë‹ˆë‹¤. </li> </ul> -<p>ì´ ì„¹ì…˜ì—서는 -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ë° +<p>ì´ ì„¹ì…˜ì—서는 +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ë° {@link android.content.Intent#ACTION_CREATE_DOCUMENT} ì¸í…트를 근거로 í´ë¼ì´ì–¸íЏ ì•±ì„ ìž‘ì„±í•˜ëŠ” ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> <h3 id="search">문서 검색</h3> <p> -ë‹¤ìŒ ì¡°ê°ì—서는 {@link android.content.Intent#ACTION_OPEN_DOCUMENT}를 -사용하여 ì´ë¯¸ì§€ 파ì¼ì´ 들어 있는 문서 ì œê³µìžë¥¼ +ë‹¤ìŒ ì¡°ê°ì—서는 {@link android.content.Intent#ACTION_OPEN_DOCUMENT}를 +사용하여 ì´ë¯¸ì§€ 파ì¼ì´ 들어 있는 문서 ì œê³µìžë¥¼ 검색합니다.</p> <pre>private static final int READ_REQUEST_CODE = 42; @@ -277,7 +277,7 @@ public void performFileSearch() { <li>ì•±ì´ {@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트를 실행시키면 ì´ëŠ” ì¼ì¹˜í•˜ëŠ” 문서 ì œê³µìžë¥¼ ëª¨ë‘ í‘œì‹œí•˜ëŠ” ì„ íƒê¸°ë¥¼ 시작합니다.</li> -<li>{@link android.content.Intent#CATEGORY_OPENABLE} ì¹´í…Œê³ ë¦¬ë¥¼ +<li>{@link android.content.Intent#CATEGORY_OPENABLE} ì¹´í…Œê³ ë¦¬ë¥¼ ì¸í…íŠ¸ì— ì¶”ê°€í•˜ë©´ 결과를 í•„í„°ë§í•˜ì—¬ ì´ë¯¸ì§€ íŒŒì¼ ë“± ì—´ 수 있는 문서만 표시합니다.</li> <li>{@code intent.setType("image/*")} 문으로 한층 ë” í•„í„°ë§ì„ 수행하여 @@ -286,10 +286,10 @@ MIME ë°ì´í„° ìœ í˜•ì´ ì´ë¯¸ì§€ì¸ 문서만 표시하ë„ë¡ í•©ë‹ˆë‹¤.</li> <h3 id="results">ê²°ê³¼ 처리</h3> -<p>사용ìžê°€ ì„ íƒê¸°ì—서 문서를 ì„ íƒí•˜ë©´ -{@link android.app.Activity#onActivityResult onActivityResult()}ê°€ 호출ë©ë‹ˆë‹¤. +<p>사용ìžê°€ ì„ íƒê¸°ì—서 문서를 ì„ íƒí•˜ë©´ +{@link android.app.Activity#onActivityResult onActivityResult()}ê°€ 호출ë©ë‹ˆë‹¤. ì„ íƒí•œ 문서를 가리키는 URI는 {@code resultData} -매개변수 ì•ˆì— ë“¤ì–´ìžˆìŠµë‹ˆë‹¤. ì´ URI를 {@link android.content.Intent#getData getData()}를 사용하여 추출합니다. +매개변수 ì•ˆì— ë“¤ì–´ìžˆìŠµë‹ˆë‹¤. ì´ URI를 {@link android.content.Intent#getData getData()}를 사용하여 추출합니다. ì¼ë‹¨ ì´ê²ƒì„ 가지게 ë˜ë©´ ì´ë¥¼ 사용하여 사용ìžê°€ ì›í•˜ëŠ” 문서를 검색하면 ë©ë‹ˆë‹¤. 예: </p> @@ -318,7 +318,7 @@ public void onActivityResult(int requestCode, int resultCode, <h3 id="metadata">문서 메타ë°ì´í„° 살펴보기</h3> -<p>ë¬¸ì„œì˜ URI를 ì–»ì€ ë‹¤ìŒì—는 ê·¸ ë¬¸ì„œì˜ ë©”íƒ€ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. ì´ +<p>ë¬¸ì„œì˜ URI를 ì–»ì€ ë‹¤ìŒì—는 ê·¸ ë¬¸ì„œì˜ ë©”íƒ€ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. ì´ ì¡°ê°ì€ 해당 URIê°€ 나타내는 ë¬¸ì„œì˜ ë©”íƒ€ë°ì´í„°ë¥¼ ê°€ì ¸ì™€ 다ìŒê³¼ ê°™ì´ ê¸°ë¡í•©ë‹ˆë‹¤.</p> <pre>public void dumpImageMetaData(Uri uri) { @@ -365,7 +365,7 @@ public void onActivityResult(int requestCode, int resultCode, <h3 id="open-client">문서 열기</h3> -<p>ë¬¸ì„œì˜ URI를 ì–»ì€ ë‹¤ìŒì—는 문서를 ì—´ ìˆ˜ë„ ìžˆê³ ì›í•˜ëŠ” 대로 무엇ì´ë“ +<p>ë¬¸ì„œì˜ URI를 ì–»ì€ ë‹¤ìŒì—는 문서를 ì—´ ìˆ˜ë„ ìžˆê³ ì›í•˜ëŠ” 대로 무엇ì´ë“ í• ìˆ˜ 있습니다.</p> <h4>비트맵</h4> @@ -382,14 +382,14 @@ public void onActivityResult(int requestCode, int resultCode, } </pre> -<p>ì´ ìž‘ì—…ì„ UI ìŠ¤ë ˆë“œì—서 해서는 안 ëœë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì´ê²ƒì€ ë°°ê²½ì—서 하ë˜, -{@link android.os.AsyncTask}를 사용합니다. ë¹„íŠ¸ë§µì„ ì—´ê³ ë‚˜ë©´ ì´ë¥¼ +<p>ì´ ìž‘ì—…ì„ UI ìŠ¤ë ˆë“œì—서 해서는 안 ëœë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì´ê²ƒì€ ë°°ê²½ì—서 하ë˜, +{@link android.os.AsyncTask}를 사용합니다. ë¹„íŠ¸ë§µì„ ì—´ê³ ë‚˜ë©´ ì´ë¥¼ {@link android.widget.ImageView}로 í‘œì‹œí• ìˆ˜ 있습니다. </p> <h4>InputStream ê°€ì ¸ì˜¤ê¸°</h4> -<p>다ìŒì€ URIì—서 {@link java.io.InputStream}ì„ ê°€ì ¸ì˜¤ëŠ” ë°©ë²•ì„ ì˜ˆì‹œë¡œ 나타낸 것입니다. ì´ ì¡°ê°ì—서 +<p>다ìŒì€ URIì—서 {@link java.io.InputStream}ì„ ê°€ì ¸ì˜¤ëŠ” ë°©ë²•ì„ ì˜ˆì‹œë¡œ 나타낸 것입니다. ì´ ì¡°ê°ì—서 파ì¼ì˜ ì¤„ì´ ë¬¸ìžì—´ë¡œ ì½ížˆê³ 있습니다.</p> <pre>private String readTextFromUri(Uri uri) throws IOException { @@ -409,9 +409,9 @@ public void onActivityResult(int requestCode, int resultCode, <h3 id="create">새 문서 ìƒì„±í•˜ê¸°</h3> -<p>개발ìžì˜ ì•±ì€ ë¬¸ì„œ ì œê³µìžì—서 새 문서를 ìƒì„±í• 수 있습니다. ì´ë•Œ +<p>개발ìžì˜ ì•±ì€ ë¬¸ì„œ ì œê³µìžì—서 새 문서를 ìƒì„±í• 수 있습니다. ì´ë•Œ {@link android.content.Intent#ACTION_CREATE_DOCUMENT} - ì¸í…트를 사용하면 ë©ë‹ˆë‹¤. 파ì¼ì„ ìƒì„±í•˜ë ¤ë©´ ì¸í…íŠ¸ì— MIME ìœ í˜•ê³¼ íŒŒì¼ ì´ë¦„ì„ ë¶€ì—¬í•˜ê³ , + ì¸í…트를 사용하면 ë©ë‹ˆë‹¤. 파ì¼ì„ ìƒì„±í•˜ë ¤ë©´ ì¸í…íŠ¸ì— MIME ìœ í˜•ê³¼ íŒŒì¼ ì´ë¦„ì„ ë¶€ì—¬í•˜ê³ , ê³ ìœ í•œ ìš”ì² ì½”ë“œë¡œ ì´ë¥¼ 시작하면 ë©ë‹ˆë‹¤. 나머지는 여러분 ëŒ€ì‹ ì•Œì•„ì„œ 해드립니다.</p> @@ -440,15 +440,15 @@ private void createFile(String mimeType, String fileName) { } </pre> -<p>새 문서를 ìƒì„±í•˜ê³ 나면 -{@link android.app.Activity#onActivityResult onActivityResult()}ì—서 URI를 ê°€ì ¸ì™€ ê±°ê¸°ì— ê³„ì†í•´ì„œ +<p>새 문서를 ìƒì„±í•˜ê³ 나면 +{@link android.app.Activity#onActivityResult onActivityResult()}ì—서 URI를 ê°€ì ¸ì™€ ê±°ê¸°ì— ê³„ì†í•´ì„œ 쓸 수 있습니다.</p> <h3 id="delete">문서 ì‚ì œí•˜ê¸°</h3> -<p>ì–´ëŠ ë¬¸ì„œì— ëŒ€í•œ URIê°€ ìžˆê³ í•´ë‹¹ ë¬¸ì„œì˜ +<p>ì–´ëŠ ë¬¸ì„œì— ëŒ€í•œ URIê°€ ìžˆê³ í•´ë‹¹ ë¬¸ì„œì˜ {@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS} -ì— +ì— {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE}ê°€ 들어 있는 경우, 해당 문서를 ì‚ì œí• ìˆ˜ 있습니다. 예:</p> @@ -459,9 +459,9 @@ DocumentsContract.deleteDocument(getContentResolver(), uri); <h3 id="edit">문서 편집하기</h3> <p>ì¤€ë¹„ëœ í…스트 문서를 편집하는 ë° SAF를 ì‚¬ìš©í• ìˆ˜ 있습니다. -ì´ ì¡°ê°ì€ -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트를 실행하며 -{@link android.content.Intent#CATEGORY_OPENABLE} ì¹´í…Œê³ ë¦¬ë¥¼ 사용해 +ì´ ì¡°ê°ì€ +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트를 실행하며 +{@link android.content.Intent#CATEGORY_OPENABLE} ì¹´í…Œê³ ë¦¬ë¥¼ 사용해 ì—´ 수 있는 문서만 표시하ë„ë¡ í•©ë‹ˆë‹¤. ì´ê²ƒì„ 한층 ë” í•„í„°ë§í•˜ì—¬ í…스트 파ì¼ë§Œ 표시하게 í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> <pre> @@ -486,10 +486,10 @@ private static final int EDIT_REQUEST_CODE = 44; </pre> <p>다ìŒìœ¼ë¡œ, {@link android.app.Activity#onActivityResult onActivityResult()} -(<a href="#results">ê²°ê³¼ 처리</a> 참조)ì—서 코드를 호출하여 편집 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í•˜ë©´ ë©ë‹ˆë‹¤. +(<a href="#results">ê²°ê³¼ 처리</a> 참조)ì—서 코드를 호출하여 편집 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í•˜ë©´ ë©ë‹ˆë‹¤. ë‹¤ìŒ ì¡°ê°ì€ {@link android.content.ContentResolver}ì—서 {@link java.io.FileOutputStream} -ì„ ê°€ì ¸ì˜¨ 것입니다. ì´ê²ƒì€ 기본ì 으로 "쓰기" 모드를 사용합니다. -필요한 최소 ìˆ˜ëŸ‰ì˜ ì•¡ì„¸ìŠ¤ë§Œì„ ìš”ì²í•˜ëŠ” ê²ƒì´ ê°€ìž¥ 좋으니 쓰기만 필요하다면 +ì„ ê°€ì ¸ì˜¨ 것입니다. ì´ê²ƒì€ 기본ì 으로 "쓰기" 모드를 사용합니다. +필요한 최소 ìˆ˜ëŸ‰ì˜ ì•¡ì„¸ìŠ¤ë§Œì„ ìš”ì²í•˜ëŠ” ê²ƒì´ ê°€ìž¥ 좋으니 쓰기만 필요하다면 ì½ê¸°/쓰기를 ìš”ì²í•˜ì§€ 마ì‹ì‹œì˜¤.</p> <pre>private void alterDocument(Uri uri) { @@ -512,16 +512,16 @@ private static final int EDIT_REQUEST_CODE = 44; <h3 id="permissions">권한 ìœ ì§€</h3> -<p>ì•±ì´ ì½ê¸° ë˜ëŠ” 쓰기 ìž‘ì—…ì— ëŒ€í•œ 파ì¼ì„ ì—´ë©´ ì‹œìŠ¤í…œì´ ì•±ì— í•´ë‹¹ 파ì¼ì— 대한 URI 권한 허가를 +<p>ì•±ì´ ì½ê¸° ë˜ëŠ” 쓰기 ìž‘ì—…ì— ëŒ€í•œ 파ì¼ì„ ì—´ë©´ ì‹œìŠ¤í…œì´ ì•±ì— í•´ë‹¹ 파ì¼ì— 대한 URI 권한 허가를 부여합니다. ì´ê²ƒì€ 사용ìžì˜ 장치를 다시 ì‹œìž‘í• ë•Œê¹Œì§€ ìœ ì§€ë©ë‹ˆë‹¤. -하지만 ë§Œì¼ ì•±ì´ ì´ë¯¸ì§€ 편집 앱ì´ê³ , 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì—서 바로 편집한 5ê°œì˜ ì´ë¯¸ì§€ì— -ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•˜ê³ ìž í•œë‹¤ê³ ê°€ì •í•´ë´…ì‹œë‹¤. 사용ìžì˜ 기기가 재시작ë˜ë©´ -ì—¬ëŸ¬ë¶„ì´ ì‚¬ìš©ìžì—게 시스템 ì„ íƒê¸°ë¥¼ 다시 ë³´ë‚´ 해당 파ì¼ì„ 검색하ë„ë¡ í•´ì•¼ í• í…ë°, +하지만 ë§Œì¼ ì•±ì´ ì´ë¯¸ì§€ 편집 앱ì´ê³ , 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì—서 바로 편집한 5ê°œì˜ ì´ë¯¸ì§€ì— +ì•¡ì„¸ìŠ¤í• ìˆ˜ 있ë„ë¡ í•˜ê³ ìž í•œë‹¤ê³ ê°€ì •í•´ë´…ì‹œë‹¤. 사용ìžì˜ 기기가 재시작ë˜ë©´ +ì—¬ëŸ¬ë¶„ì´ ì‚¬ìš©ìžì—게 시스템 ì„ íƒê¸°ë¥¼ 다시 ë³´ë‚´ 해당 파ì¼ì„ 검색하ë„ë¡ í•´ì•¼ í• í…ë°, ì´ê²ƒì€ ë¬¼ë¡ ì´ìƒì ì¸ ê²ƒê³¼ëŠ” 거리가 멉니다.</p> <p>ì´ëŸ° ì¼ì´ ì¼ì–´ë‚˜ì§€ 않ë„ë¡ ë°©ì§€í•˜ê¸° 위해 ì‹œìŠ¤í…œì´ ì•±ì— ë¶€ì—¬í•œ ê¶Œí•œì„ ìœ ì§€í• ìˆ˜ 있습니다. -ì—¬ëŸ¬ë¶„ì˜ ì•±ì€ ì‹œìŠ¤í…œì´ ì œê³µí•˜ëŠ” ìœ ì§€ 가능한 URI 권한 허가를 -효율ì 으로 "받아들입니다". ì´ë ‡ê²Œ 하면 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì„ í†µí•´ 파ì¼ì— ì§€ì†ì ì¸ ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ ê°€ì§ˆ 수 있으며, +ì—¬ëŸ¬ë¶„ì˜ ì•±ì€ ì‹œìŠ¤í…œì´ ì œê³µí•˜ëŠ” ìœ ì§€ 가능한 URI 권한 허가를 +효율ì 으로 "받아들입니다". ì´ë ‡ê²Œ 하면 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì„ í†µí•´ 파ì¼ì— ì§€ì†ì ì¸ ì•¡ì„¸ìŠ¤ ê¶Œí•œì„ ê°€ì§ˆ 수 있으며, ì´ëŠ” 기기가 다시 시작ë˜ë”ë¼ë„ 관계 없습니다.</p> @@ -531,65 +531,65 @@ private static final int EDIT_REQUEST_CODE = 44; // Check for the freshest data. getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre> -<p>마지막 한 단계가 남았습니다. ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ì•¡ì„¸ìŠ¤í•œ 가장 ìµœê·¼ì˜ URI를 -ì €ìž¥í•´ë‘ì—ˆì„ ìˆ˜ 있지만, ì´ëŠ” ë” ì´ìƒ ìœ íš¨í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. ë˜ ë‹¤ë¥¸ ì•±ì´ ë¬¸ì„œë¥¼ -ì‚ì œí•˜ê±°ë‚˜ ìˆ˜ì •í–ˆì„ ìˆ˜ 있기 때문입니다. ë”°ë¼ì„œ, í•ìƒ -{@code getContentResolver().takePersistableUriPermission()}ì„ +<p>마지막 한 단계가 남았습니다. ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ì•¡ì„¸ìŠ¤í•œ 가장 ìµœê·¼ì˜ URI를 +ì €ìž¥í•´ë‘ì—ˆì„ ìˆ˜ 있지만, ì´ëŠ” ë” ì´ìƒ ìœ íš¨í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. ë˜ ë‹¤ë¥¸ ì•±ì´ ë¬¸ì„œë¥¼ +ì‚ì œí•˜ê±°ë‚˜ ìˆ˜ì •í–ˆì„ ìˆ˜ 있기 때문입니다. ë”°ë¼ì„œ, í•ìƒ +{@code getContentResolver().takePersistableUriPermission()}ì„ í˜¸ì¶œí•˜ì—¬ ìµœì‹ ë°ì´í„°ë¥¼ 확ì¸í•´ì•¼ 합니다.</p> <h2 id="custom">ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìž ìž‘ì„±í•˜ê¸°</h2> <p> -파ì¼ìš© ì €ìž¥ì†Œ 서비스를 ì œê³µí•˜ëŠ” ì•±ì„ ê°œë°œ ì¤‘ì¸ ê²½ìš°(예를 들어 -í´ë¼ìš°ë“œ ì €ìž¥ 서비스 등), SAF를 통해 파ì¼ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ë ¤ë©´ ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ +파ì¼ìš© ì €ìž¥ì†Œ 서비스를 ì œê³µí•˜ëŠ” ì•±ì„ ê°œë°œ ì¤‘ì¸ ê²½ìš°(예를 들어 +í´ë¼ìš°ë“œ ì €ìž¥ 서비스 등), SAF를 통해 파ì¼ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ë ¤ë©´ ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ 작성하면 ë©ë‹ˆë‹¤. ì´ ì„¹ì…˜ì—서는 ì´ë ‡ê²Œ 하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. </p> <h3 id="manifest">매니페스트</h3> -<p>ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ êµ¬í˜„í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‹¤ìŒê³¼ ê°™ì€ í•ëª©ì„ +<p>ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ êµ¬í˜„í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë‹¤ìŒê³¼ ê°™ì€ í•ëª©ì„ ì¶”ê°€í•˜ì‹ì‹œì˜¤.</p> <ul> <li>API ë ˆë²¨ 19 ì´ìƒì˜ 대ìƒ.</li> -<li>ì‚¬ìš©ìž ì§€ì • ì €ìž¥ì†Œ ì œê³µìžë¥¼ ì„ ì–¸í•˜ëŠ” <code><provider></code> +<li>ì‚¬ìš©ìž ì§€ì • ì €ìž¥ì†Œ ì œê³µìžë¥¼ ì„ ì–¸í•˜ëŠ” <code><provider></code> 요소. </li> -<li>ì œê³µìžì˜ ì´ë¦„ì€ ê·¸ í´ëž˜ìФ ì´ë¦„ì´ë©° ì—¬ê¸°ì— íŒ¨í‚¤ì§€ ì´ë¦„ë„ í¬í•¨ë©ë‹ˆë‹¤. +<li>ì œê³µìžì˜ ì´ë¦„ì€ ê·¸ í´ëž˜ìФ ì´ë¦„ì´ë©° ì—¬ê¸°ì— íŒ¨í‚¤ì§€ ì´ë¦„ë„ í¬í•¨ë©ë‹ˆë‹¤. 예: <code>com.example.android.storageprovider.MyCloudProvider</code></li> -<li>ê¶Œí•œì˜ ì´ë¦„, ì´ëŠ” 패키지 ì´ë¦„ê³¼ 같으며(ì´ ì˜ˆì‹œì—서는 +<li>ê¶Œí•œì˜ ì´ë¦„, ì´ëŠ” 패키지 ì´ë¦„ê³¼ 같으며(ì´ ì˜ˆì‹œì—서는 <code>com.example.android.storageprovider</code>)ì—¬ê¸°ì— ì½˜í…ì¸ ì œê³µìž ìœ í˜•ì„ ë”합니다 (<code>documents</code>). 예: {@code com.example.android.storageprovider.documents}</li> <li><code>android:exported</code> ì†ì„±ì„ <code>"true"</code>로 ì„¤ì •. ì œê³µìžë¥¼ ë‚´ë³´ë‚´ 다른 ì•±ì´ ë³¼ 수 있ë„ë¡ í•´ì•¼ 합니다.</li> -<li><code>android:grantUriPermissions</code> ì†ì„±ì„ -<code>"true"</code>로 ì„¤ì •. ì´ë ‡ê²Œ ì„¤ì •í•˜ë©´ ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ë¶„ì˜ ì œê³µìž ì•ˆì— ìžˆëŠ” 콘í…ì¸ ì— ì•¡ì„¸ìŠ¤í•˜ë„ë¡ ë‹¤ë¥¸ ì•±ì— -ê¶Œí•œì„ í—ˆê°€í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. íŠ¹ì • ë¬¸ì„œì— ëŒ€í•œ 권한 부여를 ìœ ì§€í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ë…¼ì˜ëŠ” +<li><code>android:grantUriPermissions</code> ì†ì„±ì„ +<code>"true"</code>로 ì„¤ì •. ì´ë ‡ê²Œ ì„¤ì •í•˜ë©´ ì‹œìŠ¤í…œì´ ì—¬ëŸ¬ë¶„ì˜ ì œê³µìž ì•ˆì— ìžˆëŠ” 콘í…ì¸ ì— ì•¡ì„¸ìŠ¤í•˜ë„ë¡ ë‹¤ë¥¸ ì•±ì— +ê¶Œí•œì„ í—ˆê°€í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. íŠ¹ì • ë¬¸ì„œì— ëŒ€í•œ 권한 부여를 ìœ ì§€í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ë…¼ì˜ëŠ” <a href="#permissions">권한 ìœ ì§€</a>를 참조하ì‹ì‹œì˜¤.</li> <li>{@code MANAGE_DOCUMENTS} 권한. 기본ì 으로 ì œê³µìžëŠ” 누구나 ì´ìš©í• 수 있습니다. - ì´ ê¶Œí•œì„ ì¶”ê°€í•˜ë©´ ì—¬ëŸ¬ë¶„ì˜ ì œê³µìžë¥¼ ì‹œìŠ¤í…œì— ì œí•œí•˜ê²Œ ë©ë‹ˆë‹¤. + ì´ ê¶Œí•œì„ ì¶”ê°€í•˜ë©´ ì—¬ëŸ¬ë¶„ì˜ ì œê³µìžë¥¼ ì‹œìŠ¤í…œì— ì œí•œí•˜ê²Œ ë©ë‹ˆë‹¤. ì´ ì œí•œì€ ë³´ì•ˆìƒ ë§¤ìš° 중요합니다.</li> -<li>{@code android:enabled} ì†ì„±ì„ 리소스 파ì¼ì—서 ì •ì˜í•œ 부울 값으로 -ì„¤ì •í•©ë‹ˆë‹¤. ì´ ì†ì„±ì˜ 목ì ì€ Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—서 ì œê³µìžë¥¼ 비활성화하는 ë° ìžˆìŠµë‹ˆë‹¤. -예를 들어 {@code android:enabled="@bool/atLeastKitKat"} 등입니다. ì´ ì†ì„±ì„ +<li>{@code android:enabled} ì†ì„±ì„ 리소스 파ì¼ì—서 ì •ì˜í•œ 부울 값으로 +ì„¤ì •í•©ë‹ˆë‹¤. ì´ ì†ì„±ì˜ 목ì ì€ Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—서 ì œê³µìžë¥¼ 비활성화하는 ë° ìžˆìŠµë‹ˆë‹¤. +예를 들어 {@code android:enabled="@bool/atLeastKitKat"} 등입니다. ì´ ì†ì„±ì„ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ì¶”ê°€í•˜ëŠ” 것 ì´ì™¸ì—ë„ ë‹¤ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ í•´ì•¼ 합니다. <ul> -<li>{@code res/values/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— +<li>{@code res/values/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— ì´ ë¼ì¸ì„ 추가합니다. <pre><bool name="atLeastKitKat">false</bool></pre></li> -<li>{@code res/values-v19/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— +<li>{@code res/values-v19/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— ì´ ë¼ì¸ì„ 추가합니다. <pre><bool name="atLeastKitKat">true</bool></pre></li> </ul></li> <li> -{@code android.content.action.DOCUMENTS_PROVIDER} ë™ìž‘ì„ í¬í•¨í•œ ì¸í…트 í•„í„°ê°€ 있어야 +{@code android.content.action.DOCUMENTS_PROVIDER} ë™ìž‘ì„ í¬í•¨í•œ ì¸í…트 í•„í„°ê°€ 있어야 ì‹œìŠ¤í…œì´ ì œê³µìžë¥¼ ê²€ìƒ‰í• ë•Œ ì—¬ëŸ¬ë¶„ì˜ ì œê³µìžê°€ ì„ íƒê¸°ì— ë‚˜íƒ€ë‚ ìˆ˜ 있습니다.</li> </ul> @@ -619,31 +619,31 @@ getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre> <h4 id="43">Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기 ì§€ì›</h4> <p> -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트는 -Android 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기ì—서만 ì‚¬ìš©í• ìˆ˜ 있습니다. -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ {@link android.content.Intent#ACTION_GET_CONTENT}를 ì§€ì›í•˜ë„ë¡ í•˜ì—¬ -Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—ë„ ì ìš©ë˜ë„ë¡ í•˜ë ¤ë©´ Android 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기용 ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ìžˆëŠ” +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} ì¸í…트는 +Android 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기ì—서만 ì‚¬ìš©í• ìˆ˜ 있습니다. +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ {@link android.content.Intent#ACTION_GET_CONTENT}를 ì§€ì›í•˜ë„ë¡ í•˜ì—¬ +Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—ë„ ì ìš©ë˜ë„ë¡ í•˜ë ¤ë©´ Android 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기용 ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ìžˆëŠ” {@link android.content.Intent#ACTION_GET_CONTENT} - ì¸í…트 필터를 비활성화해야 합니다. -문서 ì œê³µìžì™€ {@link android.content.Intent#ACTION_GET_CONTENT}는 ìƒí˜¸ 배타ì ì¸ ê²ƒìœ¼ë¡œ -간주해야 합니다. ë‘˜ì„ ëª¨ë‘ ë™ì‹œì— ì§€ì›í•˜ëŠ” 경우, ì•±ì´ ì‹œìŠ¤í…œ ì„ íƒê¸° UIì— + ì¸í…트 필터를 비활성화해야 합니다. +문서 ì œê³µìžì™€ {@link android.content.Intent#ACTION_GET_CONTENT}는 ìƒí˜¸ 배타ì ì¸ ê²ƒìœ¼ë¡œ +간주해야 합니다. ë‘˜ì„ ëª¨ë‘ ë™ì‹œì— ì§€ì›í•˜ëŠ” 경우, ì•±ì´ ì‹œìŠ¤í…œ ì„ íƒê¸° UIì— ë‘ ë²ˆ 나타나 ì €ìž¥ëœ ë°ì´í„°ì— ì•¡ì„¸ìŠ¤í• ë‘ ê°€ì§€ 서로 다른 ë°©ë²•ì„ ì œì•ˆí•˜ê²Œ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ ë˜ë©´ 사용ìžì—게 혼ë™ì„ 주게 ë˜ê² ì£ .</p> -<p>다ìŒì€ Android ë²„ì „ 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기용 -{@link android.content.Intent#ACTION_GET_CONTENT} ì¸í…트 필터를 +<p>다ìŒì€ Android ë²„ì „ 4.4 ì´ìƒì—서 실행ë˜ëŠ” 기기용 +{@link android.content.Intent#ACTION_GET_CONTENT} ì¸í…트 필터를 비활성화하는 ë° ê¶Œìž¥ë˜ëŠ” 방법입니다.</p> <ol> -<li>{@code res/values/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— +<li>{@code res/values/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— ì´ ë¼ì¸ì„ 추가합니다. <pre><bool name="atMostJellyBeanMR2">true</bool></pre></li> -<li>{@code res/values-v19/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— +<li>{@code res/values-v19/} ì•„ëž˜ì˜ {@code bool.xml} 리소스 파ì¼ì— ì´ ë¼ì¸ì„ 추가합니다. <pre><bool name="atMostJellyBeanMR2">false</bool></pre></li> <li> -<a href="{@docRoot}guide/topics/manifest/activity-alias-element.html">액티비티 -별ì¹</a>ì„ ì¶”ê°€í•˜ì—¬ ë²„ì „ 4.4(API ë ˆë²¨ 19) ì´ìƒì„ 대ìƒìœ¼ë¡œ 한 {@link android.content.Intent#ACTION_GET_CONTENT} +<a href="{@docRoot}guide/topics/manifest/activity-alias-element.html">액티비티 +별ì¹</a>ì„ ì¶”ê°€í•˜ì—¬ ë²„ì „ 4.4(API ë ˆë²¨ 19) ì´ìƒì„ 대ìƒìœ¼ë¡œ 한 {@link android.content.Intent#ACTION_GET_CONTENT} ì¸í…트 필터를 비활성화합니다. 예: <pre> @@ -666,13 +666,13 @@ Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—ë„ ì ìš©ë˜ë„ë¡ í•˜ë ¤ë©´ And </ol> <h3 id="contract">계약</h3> -<p>ì‚¬ìš©ìž ì§€ì • ì œê³µìžë¥¼ ìž‘ì„±í• ë•Œë©´ ì¼ë°˜ì 으로 수반ë˜ëŠ” 작업 중 하나가 -계약 í´ëž˜ìŠ¤ë¥¼ 구현하는 것입니다. ì´ëŠ” +<p>ì‚¬ìš©ìž ì§€ì • ì œê³µìžë¥¼ ìž‘ì„±í• ë•Œë©´ ì¼ë°˜ì 으로 수반ë˜ëŠ” 작업 중 하나가 +계약 í´ëž˜ìŠ¤ë¥¼ 구현하는 것입니다. ì´ëŠ” <a href="{@docRoot}guide/topics/providers/content-provider-creating.html#ContractClass"> -콘í…ì¸ ì œê³µìž</a> ê°œë°œìž ê°€ì´ë“œì—서 설명한 것과 같습니다. 계약 í´ëž˜ìŠ¤ëŠ” {@code public final} í´ëž˜ìŠ¤ë¡œ, -ì´ ì•ˆì— URIì— ëŒ€í•œ ìƒìˆ˜ ì •ì˜, ì—´ ì´ë¦„, MIME ìœ í˜• ë° ì œê³µìžì— ê´€ë ¨ëœ -다른 메타 ë°ì´í„°ê°€ 들어 있습니다. SAFê°€ -ì´ì™€ ê°™ì€ ê³„ì•½ í´ëž˜ìŠ¤ë¥¼ ëŒ€ì‹ ì œê³µí•´ì£¼ë¯€ë¡œ ì§ì ‘ ì“°ì§€ ì•Šì•„ë„ +콘í…ì¸ ì œê³µìž</a> ê°œë°œìž ê°€ì´ë“œì—서 설명한 것과 같습니다. 계약 í´ëž˜ìŠ¤ëŠ” {@code public final} í´ëž˜ìŠ¤ë¡œ, +ì´ ì•ˆì— URIì— ëŒ€í•œ ìƒìˆ˜ ì •ì˜, ì—´ ì´ë¦„, MIME ìœ í˜• ë° ì œê³µìžì— ê´€ë ¨ëœ +다른 메타 ë°ì´í„°ê°€ 들어 있습니다. SAFê°€ +ì´ì™€ ê°™ì€ ê³„ì•½ í´ëž˜ìŠ¤ë¥¼ ëŒ€ì‹ ì œê³µí•´ì£¼ë¯€ë¡œ ì§ì ‘ ì“°ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤.</p> <ul> @@ -680,7 +680,7 @@ Android 4.3 ì´í•˜ì—서 실행ë˜ëŠ” 기기ì—ë„ ì ìš©ë˜ë„ë¡ í•˜ë ¤ë©´ And <li>{@link android.provider.DocumentsContract.Root}</li> </ul> -<p>예를 들어 다ìŒì€ ì—¬ëŸ¬ë¶„ì˜ ë¬¸ì„œ ì œê³µìžê°€ 문서 ë˜ëŠ” ë£¨íŠ¸ì— ëŒ€í•´ ì¿¼ë¦¬ëœ ê²½ìš° +<p>예를 들어 다ìŒì€ ì—¬ëŸ¬ë¶„ì˜ ë¬¸ì„œ ì œê³µìžê°€ 문서 ë˜ëŠ” ë£¨íŠ¸ì— ëŒ€í•´ ì¿¼ë¦¬ëœ ê²½ìš° 커서로 ë°˜í™˜í• ìˆ˜ 있는 ì—´ì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> <pre>private static final String[] DEFAULT_ROOT_PROJECTION = @@ -696,7 +696,7 @@ private static final String[] DEFAULT_DOCUMENT_PROJECTION = new <h3 id="subclass">하위 í´ëž˜ìФ DocumentsProvider</h3> -<p>ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ 작성하기 위한 ë‹¤ìŒ ë‹¨ê³„ëŠ” +<p>ì‚¬ìš©ìž ì§€ì • 문서 ì œê³µìžë¥¼ 작성하기 위한 ë‹¤ìŒ ë‹¨ê³„ëŠ” ì¶”ìƒ í´ëž˜ìФ {@link android.provider.DocumentsProvider}를 하위 í´ëž˜ìŠ¤ë¡œ 만드는 것입니다. 최소한 다ìŒê³¼ ê°™ì€ ë©”ì„œë“œë¥¼ 구현해야 합니다. </p> @@ -710,22 +710,22 @@ private static final String[] DEFAULT_DOCUMENT_PROJECTION = new <li>{@link android.provider.DocumentsProvider#openDocument openDocument()}</li> </ul> -<p>ê¼ êµ¬í˜„í•´ì•¼ë§Œ 하는 메서드는 ì´ë“¤ë¿ì´ì§€ë§Œ, ê°œë°œìž ì—¬ëŸ¬ë¶„ì´ êµ¬í˜„í•˜ê³ ìž í•˜ëŠ” 메서드는 ì´ë³´ë‹¤ -훨씬 ë§Žì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€{@link android.provider.DocumentsProvider} +<p>ê¼ êµ¬í˜„í•´ì•¼ë§Œ 하는 메서드는 ì´ë“¤ë¿ì´ì§€ë§Œ, ê°œë°œìž ì—¬ëŸ¬ë¶„ì´ êµ¬í˜„í•˜ê³ ìž í•˜ëŠ” 메서드는 ì´ë³´ë‹¤ +훨씬 ë§Žì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€{@link android.provider.DocumentsProvider} 를 참조하ì‹ì‹œì˜¤.</p> <h4 id="queryRoots">QueryRoots 구현</h4> <p>{@link android.provider.DocumentsProvider#queryRoots -queryRoots()} êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, -ì´ëŠ” 문서 ì œê³µìžì˜ ëª¨ë“ ë£¨íŠ¸ ë””ë ‰í„°ë¦¬ë¥¼ 가리켜야 합니다. ì´ë•Œ +queryRoots()} êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, +ì´ëŠ” 문서 ì œê³µìžì˜ ëª¨ë“ ë£¨íŠ¸ ë””ë ‰í„°ë¦¬ë¥¼ 가리켜야 합니다. ì´ë•Œ {@link android.provider.DocumentsContract.Root}ì—서 ì •ì˜í•œ ì—´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p> -<p>ë‹¤ìŒ ì¡°ê°ì—서 {@code projection} 매개변수는 +<p>ë‹¤ìŒ ì¡°ê°ì—서 {@code projection} 매개변수는 ë°œì‹ ìžê°€ ëŒë ¤ë°›ê³ ìž í•˜ëŠ” íŠ¹ì • 필드를 나타냅니다. ì´ ì¡°ê°ì€ 새 커서를 ìƒì„±í•˜ë©° -ê·¸ì— í•˜ë‚˜ì˜ í–‰ì„ ì¶”ê°€í•©ë‹ˆë‹¤. í•˜ë‚˜ì˜ ë£¨íŠ¸, -다운로드 ë˜ëŠ” ì´ë¯¸ì§€ì™€ ê°™ì€ ìµœìƒìœ„ ë ˆë²¨ ë””ë ‰í„°ë¦¬ê°€ 해당ë©ë‹ˆë‹¤. ëŒ€ë¶€ë¶„ì˜ ì œê³µìžì—는 루트가 하나ë¿ìž…니다. 하나 ì´ìƒì´ ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -예를 들어 ì‚¬ìš©ìž ê³„ì •ì´ ì—¬ëŸ¬ ê°œì¸ ê²½ìš°ê°€ 있습니다. 그런 경우ì—는 ì»¤ì„œì— ë‘ ë²ˆì§¸ í–‰ì„ +ê·¸ì— í•˜ë‚˜ì˜ í–‰ì„ ì¶”ê°€í•©ë‹ˆë‹¤. í•˜ë‚˜ì˜ ë£¨íŠ¸, +다운로드 ë˜ëŠ” ì´ë¯¸ì§€ì™€ ê°™ì€ ìµœìƒìœ„ ë ˆë²¨ ë””ë ‰í„°ë¦¬ê°€ 해당ë©ë‹ˆë‹¤. ëŒ€ë¶€ë¶„ì˜ ì œê³µìžì—는 루트가 하나ë¿ìž…니다. 하나 ì´ìƒì´ ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +예를 들어 ì‚¬ìš©ìž ê³„ì •ì´ ì—¬ëŸ¬ ê°œì¸ ê²½ìš°ê°€ 있습니다. 그런 경우ì—는 ì»¤ì„œì— ë‘ ë²ˆì§¸ í–‰ì„ ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> @@ -778,13 +778,13 @@ public Cursor queryRoots(String[] projection) throws FileNotFoundException { <p> {@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()} - êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, -ì´ëŠ” ì§€ì •ëœ ë””ë ‰í„°ë¦¬ ë‚´ì˜ ëª¨ë“ íŒŒì¼ì„ 가리켜야 합니다. ì´ë•Œ + êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, +ì´ëŠ” ì§€ì •ëœ ë””ë ‰í„°ë¦¬ ë‚´ì˜ ëª¨ë“ íŒŒì¼ì„ 가리켜야 합니다. ì´ë•Œ {@link android.provider.DocumentsContract.Document}ì—서 ì •ì˜í•œ ì—´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p> -<p>ì´ ë©”ì„œë“œëŠ” ì„ íƒê¸° UIì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ 루트를 ì„ íƒí•˜ëŠ” 경우 호출ë©ë‹ˆë‹¤. -ì´ëŠ” 해당 루트 아래 ë””ë ‰í„°ë¦¬ì˜ í•˜ìœ„ 문서를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ê²ƒì€ 루트ì—서ë¿ë§Œ ì•„ë‹ˆë¼ íŒŒì¼ ê³„ì¸µì˜ ì–´ëŠ ë ˆë²¨ì—서나 -í˜¸ì¶œí• ìˆ˜ 있습니다. ì´ ì¡°ê°ì€ ìš”ì²í•œ 열로 새 커서를 ë§Œë“ ë‹¤ìŒ, +<p>ì´ ë©”ì„œë“œëŠ” ì„ íƒê¸° UIì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ 루트를 ì„ íƒí•˜ëŠ” 경우 호출ë©ë‹ˆë‹¤. +ì´ëŠ” 해당 루트 아래 ë””ë ‰í„°ë¦¬ì˜ í•˜ìœ„ 문서를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ê²ƒì€ 루트ì—서ë¿ë§Œ ì•„ë‹ˆë¼ íŒŒì¼ ê³„ì¸µì˜ ì–´ëŠ ë ˆë²¨ì—서나 +í˜¸ì¶œí• ìˆ˜ 있습니다. ì´ ì¡°ê°ì€ ìš”ì²í•œ 열로 새 커서를 ë§Œë“ ë‹¤ìŒ, ìƒìœ„ ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” ëª¨ë“ ì§ì† í•˜ìœ„ì— ëŒ€í•œ ì •ë³´ë¥¼ ì»¤ì„œì— ì¶”ê°€í•©ë‹ˆë‹¤. 하위는 ì´ë¯¸ì§€, ë˜ ë‹¤ë¥¸ ë””ë ‰í„°ë¦¬ê°€ ë ìˆ˜ë„ ìžˆê³ ì–´ëŠ íŒŒì¼ì´ë¼ë„ ë 수 있습니다.</p> @@ -808,13 +808,13 @@ public Cursor queryChildDocuments(String parentDocumentId, String[] projection, <p> {@link android.provider.DocumentsProvider#queryDocument queryDocument()} - êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, + êµ¬í˜„ì€ ë°˜ë“œì‹œ {@link android.database.Cursor}를 반환해야 하며, ì´ëŠ” ì§€ì •ëœ íŒŒì¼ì„ 가리켜야 합니다. ì´ë•Œ {@link android.provider.DocumentsContract.Document}ì—서 ì •ì˜í•œ ì—´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. </p> <p>{@link android.provider.DocumentsProvider#queryDocument queryDocument()} - 메서드는 -{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}ì—서 + 메서드는 +{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}ì—서 ì „ë‹¬ëœ ê²ƒê³¼ ê°™ì€ ì •ë³´ë¥¼ 반환하지만, íŠ¹ì •í•œ 파ì¼ì—ë§Œ 해당ë©ë‹ˆë‹¤.</p> @@ -832,12 +832,12 @@ public Cursor queryDocument(String documentId, String[] projection) throws <h4 id="openDocument">OpenDocument 구현</h4> -<p>ì§€ì •ëœ íŒŒì¼ì„ 나타내는 +<p>ì§€ì •ëœ íŒŒì¼ì„ 나타내는 {@link android.os.ParcelFileDescriptor}를 ë°˜í™˜í•˜ë ¤ë©´ {@link android.provider.DocumentsProvider#openDocument openDocument()}를 구현해야 합니다. 다른 ì•±ë“¤ì´ ë°˜í™˜ëœ {@link android.os.ParcelFileDescriptor}를 - 사용하여 ë°ì´í„°ë¥¼ 스트리ë°í• 수 있습니다. ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžê°€ 파ì¼ì„ ì„ íƒí•˜ê³ -í´ë¼ì´ì–¸íЏ ì•±ì´ ì´ì— 대한 액세스를 ìš”ì²í•˜ë©´ì„œ -{@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()}를 ì‚¬ìš©í• ë•Œ ì´ ë©”ì„œë“œë¥¼ 호출합니다. + 사용하여 ë°ì´í„°ë¥¼ 스트리ë°í• 수 있습니다. ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžê°€ 파ì¼ì„ ì„ íƒí•˜ê³ +í´ë¼ì´ì–¸íЏ ì•±ì´ ì´ì— 대한 액세스를 ìš”ì²í•˜ë©´ì„œ +{@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()}를 ì‚¬ìš©í• ë•Œ ì´ ë©”ì„œë“œë¥¼ 호출합니다. 예를 들면 다ìŒê³¼ 같습니다.</p> <pre>@Override @@ -885,8 +885,8 @@ public ParcelFileDescriptor openDocument(final String documentId, <h3 id="security">보안</h3> <p>ì—¬ëŸ¬ë¶„ì˜ ë¬¸ì„œ ì œê³µìžê°€ 암호로 ë³´í˜¸ëœ í´ë¼ìš°ë“œ ì €ìž¥ì†Œ 서비스ì´ê³ -ì—¬ëŸ¬ë¶„ì€ ì‚¬ìš©ìžê°€ 파ì¼ì„ ê³µìœ í•˜ê¸° ì „ì— ìš°ì„ ë¡œê·¸ì¸ë¶€í„° 하ë„ë¡ í™•ì‹¤ížˆ í•´ë‘ê³ ì‹¶ë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. -사용ìžê°€ 로그ì¸ë˜ì§€ ì•Šì€ ê²½ìš° ì•±ì€ ì–´ë–»ê²Œ 해야 합니까? í•´ë²•ì€ +ì—¬ëŸ¬ë¶„ì€ ì‚¬ìš©ìžê°€ 파ì¼ì„ ê³µìœ í•˜ê¸° ì „ì— ìš°ì„ ë¡œê·¸ì¸ë¶€í„° 하ë„ë¡ í™•ì‹¤ížˆ í•´ë‘ê³ ì‹¶ë‹¤ê³ ê°€ì •í•©ë‹ˆë‹¤. +사용ìžê°€ 로그ì¸ë˜ì§€ ì•Šì€ ê²½ìš° ì•±ì€ ì–´ë–»ê²Œ 해야 합니까? í•´ë²•ì€ {@link android.provider.DocumentsProvider#queryRoots queryRoots()} 구현ì—서 루트를 반환하지 않는 것입니다. 다시 ë§í•´, í…… 빈 루트 커서를 반환하는 것입니다.</p> @@ -901,11 +901,11 @@ public Cursor queryRoots(String[] projection) throws FileNotFoundException { </pre> <p>ë˜ ë‹¤ë¥¸ 단계는 {@code getContentResolver().notifyChange()}를 호출하는 것입니다. -{@link android.provider.DocumentsContract}를 기억하ì‹ë‹ˆê¹Œ? ì´ê²ƒì„ 사용하는 ì´ìœ 는 -바로 ì´ URI를 만들기 위해서입니다. ë‹¤ìŒ ì¡°ê°ì€ 사용ìžì˜ ë¡œê·¸ì¸ ìƒíƒœê°€ 변경ë 때마다 -ì‹œìŠ¤í…œì´ ë¬¸ì„œ ì œê³µìžì˜ 루트를 쿼리하ë„ë¡ ì§€ì‹œí•˜ê³ ìžˆìŠµë‹ˆë‹¤. 사용ìžê°€ 로그ì¸ë˜ì–´ 있지 ì•Šì€ ìƒíƒœì—서 -{@link android.provider.DocumentsProvider#queryRoots queryRoots()}를 호출하면 -위ì—서 나타낸 것과 ê°™ì´ ë¹ˆ 커서를 반환합니다. ì´ë ‡ê²Œ 하면 사용ìžê°€ ì œê³µìžì— 로그ì¸ë˜ì—ˆì„ 때만 +{@link android.provider.DocumentsContract}를 기억하ì‹ë‹ˆê¹Œ? ì´ê²ƒì„ 사용하는 ì´ìœ 는 +바로 ì´ URI를 만들기 위해서입니다. ë‹¤ìŒ ì¡°ê°ì€ 사용ìžì˜ ë¡œê·¸ì¸ ìƒíƒœê°€ 변경ë 때마다 +ì‹œìŠ¤í…œì´ ë¬¸ì„œ ì œê³µìžì˜ 루트를 쿼리하ë„ë¡ ì§€ì‹œí•˜ê³ ìžˆìŠµë‹ˆë‹¤. 사용ìžê°€ 로그ì¸ë˜ì–´ 있지 ì•Šì€ ìƒíƒœì—서 +{@link android.provider.DocumentsProvider#queryRoots queryRoots()}를 호출하면 +위ì—서 나타낸 것과 ê°™ì´ ë¹ˆ 커서를 반환합니다. ì´ë ‡ê²Œ 하면 사용ìžê°€ ì œê³µìžì— 로그ì¸ë˜ì—ˆì„ 때만 ì œê³µìžì˜ 문서를 ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ë³´ìž¥í• ìˆ˜ 있습니다.</p> <pre>private void onLoginButtonClick() { diff --git a/docs/html-intl/intl/ko/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/ko/guide/topics/resources/accessing-resources.jd index be9dd6bb0b20..f323280f9d78 100644 --- a/docs/html-intl/intl/ko/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/ko/guide/topics/resources/accessing-resources.jd @@ -7,7 +7,7 @@ parent.link=index.html <div id="qv"> <h2>간략히 보기</h2> <ul> - <li>리소스는 {@code R.java}ì˜ ì •ìˆ˜ë¥¼ 사용하는 코드, 예를 들어 + <li>리소스는 {@code R.java}ì˜ ì •ìˆ˜ë¥¼ 사용하는 코드, 예를 들어 {@code R.drawable.myimage}ì—서 ì°¸ì¡°í• ìˆ˜ 있습니다.</li> <li>리소스는 특수 XML êµ¬ë¬¸ì„ ì‚¬ìš©í•˜ëŠ” 리소스, 예를 들어 {@code @drawable/myimage}ì—서 ì°¸ì¡°í• ìˆ˜ 있습니다.</li> @@ -42,25 +42,25 @@ parent.link=index.html -<p>ì¼ë‹¨ ì–´ë–¤ 리소스를 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œê³µí•œ 다ìŒì—는(<a href="providing-resources.html">리소스 ì œê³µ</a>ì—서 ë…¼ì˜), -해당 ë¦¬ì†ŒìŠ¤ì˜ ë¦¬ì†ŒìŠ¤ ID를 ì°¸ì¡°í•¨ìœ¼ë¡œì¨ ì´ë¥¼ ì ìš©í• ìˆ˜ 있습니다. ëª¨ë“ ë¦¬ì†ŒìŠ¤ ID는 +<p>ì¼ë‹¨ ì–´ë–¤ 리소스를 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œê³µí•œ 다ìŒì—는(<a href="providing-resources.html">리소스 ì œê³µ</a>ì—서 ë…¼ì˜), +해당 ë¦¬ì†ŒìŠ¤ì˜ ë¦¬ì†ŒìŠ¤ ID를 ì°¸ì¡°í•¨ìœ¼ë¡œì¨ ì´ë¥¼ ì ìš©í• ìˆ˜ 있습니다. ëª¨ë“ ë¦¬ì†ŒìŠ¤ ID는 {@code aapt} ë„구가 ìžë™ìœ¼ë¡œ ìƒì„±í•˜ëŠ” 프로ì íŠ¸ì˜ {@code R} í´ëž˜ìФì—서 ì •ì˜ë©ë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 컴파ì¼ë§ë˜ë©´, {@code aapt}ê°€ {@code R} í´ëž˜ìŠ¤ë¥¼ ìƒì„±í•˜ë©°, ì´ í´ëž˜ìФ ì•ˆì— {@code -res/} ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” ëª¨ë“ ë¦¬ì†ŒìŠ¤ì˜ -리소스 IDê°€ 들어있습니다. ê° ë¦¬ì†ŒìŠ¤ ìœ í˜•ì—는 {@code R} 하위 í´ëž˜ìŠ¤ê°€ ìžˆê³ (예: ëª¨ë“ ë“œë¡œì–´ë¸” ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ +res/} ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” ëª¨ë“ ë¦¬ì†ŒìŠ¤ì˜ +리소스 IDê°€ 들어있습니다. ê° ë¦¬ì†ŒìŠ¤ ìœ í˜•ì—는 {@code R} 하위 í´ëž˜ìŠ¤ê°€ ìžˆê³ (예: ëª¨ë“ ë“œë¡œì–´ë¸” ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ {@code R.drawable}), 해당 ìœ í˜•ì˜ ê° ë¦¬ì†ŒìŠ¤ì—는 ì •ì -ì •ìˆ˜ê°€ 있습니다(예: {@code R.drawable.icon}). ì´ ì •ìˆ˜ê°€ +ì •ìˆ˜ê°€ 있습니다(예: {@code R.drawable.icon}). ì´ ì •ìˆ˜ê°€ 리소스를 검색하는 ë° ì‚¬ìš©í• ìˆ˜ 있는 리소스 ID입니다.</p> -<p>{@code R} í´ëž˜ìŠ¤ê°€ 리소스 IDê°€ ì§€ì •ë˜ëŠ” ê³³ì´ê¸°ëŠ” 하지만, 리소스 ID를 찾기 위해 +<p>{@code R} í´ëž˜ìŠ¤ê°€ 리소스 IDê°€ ì§€ì •ë˜ëŠ” ê³³ì´ê¸°ëŠ” 하지만, 리소스 ID를 찾기 위해 ì´ê³³ì„ ë³¼ 필요는 ì „í˜€ 없습니다. í•˜ë‚˜ì˜ ë¦¬ì†ŒìŠ¤ ID는 í•ìƒ ë‹¤ìŒê³¼ ê°™ì´ êµ¬ì„±ë©ë‹ˆë‹¤.</p> <ul> <li><em>리소스 ìœ í˜•</em>: ê° ë¦¬ì†ŒìŠ¤ëŠ” "ìœ í˜•"으로 그룹화ë©ë‹ˆë‹¤. 예: {@code string}, {@code drawable} ë° {@code layout} 다양한 ìœ í˜•ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="available-resources.html">리소스 ìœ í˜•</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </li> - <li><em>리소스 ì´ë¦„</em>: -리소스가 단순 ê°’(예: 문ìžì—´ 등)ì¼ ê²½ìš°, + <li><em>리소스 ì´ë¦„</em>: +리소스가 단순 ê°’(예: 문ìžì—´ 등)ì¼ ê²½ìš°, 확장ìžë¥¼ ì œì™¸í•œ íŒŒì¼ ì´ë¦„ì´ë‚˜ XML {@code android:name} ì†ì„± ê°’ 중 하나입니다.</li> </ul> @@ -69,14 +69,14 @@ string}, {@code drawable} ë° {@code layout} 다양한 ìœ í˜•ì— ê´€í•œ ìžì„¸í• <li><strong>코드 ë‚´ë¶€ì—서:</strong> {@code R} í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìФì—서 ì •ì ì •ìˆ˜ë¥¼ 사용합니다. 예: <pre class="classic no-pretty-print">R.string.hello</pre> - <p>{@code string}ì€ ë¦¬ì†ŒìŠ¤ ìœ í˜•ì´ê³ {@code hello}는 리소스 ì´ë¦„입니다. 리소스 ID를 ì´ í˜•ì‹ìœ¼ë¡œ ì œê³µí•˜ë©´ ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 -Android APIê°€ 많습니다. + <p>{@code string}ì€ ë¦¬ì†ŒìŠ¤ ìœ í˜•ì´ê³ {@code hello}는 리소스 ì´ë¦„입니다. 리소스 ID를 ì´ í˜•ì‹ìœ¼ë¡œ ì œê³µí•˜ë©´ ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 +Android APIê°€ 많습니다. <a href="#ResourcesFromCode">코드 ë‚´ 리소스 액세스</a>를 참조하ì‹ì‹œì˜¤.</p> </li> - <li><strong>XML ë‚´ë¶€ì—서:</strong> {@code R} í´ëž˜ìФì—서 ì •ì˜ëœ + <li><strong>XML ë‚´ë¶€ì—서:</strong> {@code R} í´ëž˜ìФì—서 ì •ì˜ëœ 리소스 IDì— ìƒì‘í•˜ê¸°ë„ í•˜ëŠ” 특수 XML êµ¬ë¬¸ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 예: <pre class="classic no-pretty-print">@string/hello</pre> - <p>{@code string}ì€ ë¦¬ì†ŒìŠ¤ ìœ í˜•ì´ê³ {@code hello}는 리소스 ì´ë¦„입니다. ì´ + <p>{@code string}ì€ ë¦¬ì†ŒìŠ¤ ìœ í˜•ì´ê³ {@code hello}는 리소스 ì´ë¦„입니다. ì´ êµ¬ë¬¸ì€ ë¦¬ì†ŒìŠ¤ë¡œ ê°’ì„ ì œê³µí• ê²ƒìœ¼ë¡œ 예ìƒë˜ëŠ” ì–´ëŠ ê³³ì—서나 XML 리소스 형태로 ì‚¬ìš©í• ìˆ˜ 있습니다. <a href="#ResourcesFromXml">XMLì—서 리소스 액세스</a>를 참조하ì‹ì‹œì˜¤.</p> </li> </ul> @@ -94,20 +94,20 @@ imageView.setImageResource(<strong>R.drawable.myimage</strong>); </pre> <p>{@link -android.content.res.Resources}ì—서 메서드를 사용하는 개별 리소스를 ê²€ìƒ‰í• ìˆ˜ë„ ìžˆìœ¼ë©°, ì´ëŠ” +android.content.res.Resources}ì—서 메서드를 사용하는 개별 리소스를 ê²€ìƒ‰í• ìˆ˜ë„ ìžˆìœ¼ë©°, ì´ëŠ” {@link android.content.Context#getResources()}로 ì¸ìŠ¤í„´ìŠ¤ë¥¼ ê°€ì ¸ì˜¬ 수 있습니다.</p> <div class="sidebox-wrapper"> <div class="sidebox"> <h2>ì›ë³¸ 파ì¼ì— 액세스</h2> -<p>í”한 ì¼ì€ 아니지만, ì›ë³¸ 파ì¼ê³¼ ë””ë ‰í„°ë¦¬ì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 경우가 있습니다. ì´ ê²½ìš°ì—는 -{@code res/}ì— íŒŒì¼ì„ ì €ìž¥í•˜ë”ë¼ë„ ì†Œìš©ì´ ì—†ìŠµë‹ˆë‹¤. -{@code res/}ì—서 리소스를 ì½ëŠ” ë°©ë²•ì€ ë¦¬ì†ŒìŠ¤ ID를 사용하는 것ë¿ì´ê¸° 때문입니다. ê·¸ ëŒ€ì‹ ë¦¬ì†ŒìŠ¤ë¥¼ +<p>í”한 ì¼ì€ 아니지만, ì›ë³¸ 파ì¼ê³¼ ë””ë ‰í„°ë¦¬ì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 경우가 있습니다. ì´ ê²½ìš°ì—는 +{@code res/}ì— íŒŒì¼ì„ ì €ìž¥í•˜ë”ë¼ë„ ì†Œìš©ì´ ì—†ìŠµë‹ˆë‹¤. +{@code res/}ì—서 리소스를 ì½ëŠ” ë°©ë²•ì€ ë¦¬ì†ŒìŠ¤ ID를 사용하는 것ë¿ì´ê¸° 때문입니다. ê·¸ ëŒ€ì‹ ë¦¬ì†ŒìŠ¤ë¥¼ {@code assets/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•˜ë©´ ë©ë‹ˆë‹¤.</p> <p>{@code assets/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥ëœ íŒŒì¼ì€ 리소스 -IDê°€ 부여ë˜ì§€ <em>않으므로</em>, ì´ì™€ ê°™ì€ ë¦¬ì†ŒìŠ¤ëŠ” {@code R} í´ëž˜ìŠ¤ë‚˜ XML 리소스ì—서 ì°¸ì¡°í• ìˆ˜ 없습니다. ê·¸ ëŒ€ì‹ -ì¼ë°˜ íŒŒì¼ ì‹œìŠ¤í…œì²˜ëŸ¼ {@code assets/} ë””ë ‰í„°ë¦¬ì— íŒŒì¼ì„ ì¿¼ë¦¬í•˜ê³ +IDê°€ 부여ë˜ì§€ <em>않으므로</em>, ì´ì™€ ê°™ì€ ë¦¬ì†ŒìŠ¤ëŠ” {@code R} í´ëž˜ìŠ¤ë‚˜ XML 리소스ì—서 ì°¸ì¡°í• ìˆ˜ 없습니다. ê·¸ ëŒ€ì‹ +ì¼ë°˜ íŒŒì¼ ì‹œìŠ¤í…œì²˜ëŸ¼ {@code assets/} ë””ë ‰í„°ë¦¬ì— íŒŒì¼ì„ ì¿¼ë¦¬í•˜ê³ {@link android.content.res.AssetManager}를 사용하여 ì›ì‹œ ë°ì´í„°ë¥¼ ì½ì„ 수 있습니다.</p> <p>하지만 필요한 ê²ƒì´ ì›ì‹œ ë°ì´í„°(ë™ì˜ìƒ ë˜ëŠ” 오디오 íŒŒì¼ ë“±)를 ì½ëŠ” ëŠ¥ë ¥ë¿ì¸ 경우ë¼ë©´, 파ì¼ì„ {@code res/raw/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•œ ë‹¤ìŒ ì¼ë ¨ì˜ ë°”ì´íЏ ìŠ¤íŠ¸ë¦¼ì„ {@link @@ -184,10 +184,10 @@ R.java} 파ì¼ì„ ìˆ˜ì •í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤.—ì´ê²ƒì€ 프로ì 트가 <h2 id="ResourcesFromXml">XMLì—서 리소스 액세스</h2> <p>기존 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ 참조를 사용하여 -ì¼ë¶€ XML ì†ì„±ê³¼ ìš”ì†Œì˜ ê°’ì„ ì •ì˜í• 수 있습니다. ì´ ìž‘ì—…ì€ ë ˆì´ì•„웃 파ì¼ì„ ìƒì„±í• 때 ìœ„ì ¯ì— ë¬¸ìžì—´ê³¼ ì´ë¯¸ì§€ë¥¼ ì œê³µí•˜ê¸° 위해 +ì¼ë¶€ XML ì†ì„±ê³¼ ìš”ì†Œì˜ ê°’ì„ ì •ì˜í• 수 있습니다. ì´ ìž‘ì—…ì€ ë ˆì´ì•„웃 파ì¼ì„ ìƒì„±í• 때 ìœ„ì ¯ì— ë¬¸ìžì—´ê³¼ ì´ë¯¸ì§€ë¥¼ ì œê³µí•˜ê¸° 위해 ìžì£¼ 하게 ë©ë‹ˆë‹¤.</p> -<p>예를 들어, ë ˆì´ì•„ì›ƒì— {@link android.widget.Button}ì„ ì¶”ê°€í•˜ë©´ +<p>예를 들어, ë ˆì´ì•„ì›ƒì— {@link android.widget.Button}ì„ ì¶”ê°€í•˜ë©´ 해당 버튼 í…ìŠ¤íŠ¸ì— <a href="string-resource.html">문ìžì—´ 리소스</a>를 사용해야 합니다.</p> <pre> @@ -209,7 +209,7 @@ R.java} 파ì¼ì„ ìˆ˜ì •í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤.—ì´ê²ƒì€ 프로ì 트가 <ul> <li>{@code <package_name>}ì€(는) 리소스가 위치한 íŒ¨í‚¤ì§€ì˜ ì´ë¦„입니다( ê°™ì€ íŒ¨í‚¤ì§€ì˜ ë¦¬ì†ŒìŠ¤ë¥¼ ì°¸ì¡°í• ê²½ìš°ì—는 필요하지 않습니다).</li> - <li>{@code <resource_type>}ì€(는) 해당 리소스 ìœ í˜•ì˜ + <li>{@code <resource_type>}ì€(는) 해당 리소스 ìœ í˜•ì˜ {@code R} 하위 í´ëž˜ìŠ¤ìž…ë‹ˆë‹¤.</li> <li>{@code <resource_name>}ì€(는) 확장ìžê°€ 없는 리소스 íŒŒì¼ ì´ë¦„ì´ê±°ë‚˜ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 @@ -234,7 +234,7 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 </resources> </pre> -<p>í…스트 색ìƒê³¼ +<p>í…스트 색ìƒê³¼ í…스트 문ìžì—´ì„ ì„¤ì •í•˜ëŠ” ë° ì´ì™€ ê°™ì€ ë¦¬ì†ŒìŠ¤ë¥¼ 다ìŒì˜ ë ˆì´ì•„웃 파ì¼ì—서 ì‚¬ìš©í• ìˆ˜ 있습니다.</p> <pre> @@ -247,7 +247,7 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 </pre> <p>ì´ ê²½ìš°, 리소스를 ìžì²´ 패키지ì—서 ê°€ì ¸ì™”ìœ¼ë¯€ë¡œ 리소스 ì°¸ì¡°ì— íŒ¨í‚¤ì§€ ì´ë¦„ì„ -ì§€ì •í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. +ì§€ì •í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. 시스템 리소스를 ì°¸ì¡°í•˜ë ¤ë©´ 패키지 ì´ë¦„ì„ í¬í•¨í•´ì•¼ 합니다. 예:</p> <pre> @@ -260,13 +260,13 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 </pre> <p class="note"><strong>ì°¸ê³ :</strong> í•ìƒ ë¬¸ìžì—´ 리소스를 사용해야 -사용ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다른 ì–¸ì–´ì— ë§žê²Œ ì§€ì—í™”ë 수 있습니다. +사용ìžì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다른 ì–¸ì–´ì— ë§žê²Œ ì§€ì—í™”ë 수 있습니다. 대체 리소스(예: ì§€ì—í™”ëœ ë¬¸ìžì—´) ìƒì„±ì— 관한 ìžì„¸í•œ ì •ë³´ëŠ” <a href="providing-resources.html#AlternativeResources">대체 리소스 ì œê³µ</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. 다른 언어로 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì§€ì—화하기 위한 ì „ì²´ ì§€ì¹¨ì€ <a href="localization.html">ì§€ì—í™”</a>를 참조하ì‹ì‹œì˜¤.</p> -<p>XMLì˜ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하여 ë³„ëª…ì„ ìƒì„±í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, 드로어블 리소스ì´ë©´ì„œ +<p>XMLì˜ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하여 ë³„ëª…ì„ ìƒì„±í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, 드로어블 리소스ì´ë©´ì„œ ë˜ ë‹¤ë¥¸ 드로어블 ë¦¬ì†ŒìŠ¤ì˜ ë³„ëª…ì¸ ê²ƒì„ ìƒì„±í• 수 있습니다.</p> <pre> @@ -275,7 +275,7 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 android:src="@drawable/other_drawable" /> </pre> -<p>ì´ê²ƒì€ ì¼ê²¬ 중복ë˜ëŠ” 것처럼 들리지만, 대체 리소스를 ì‚¬ìš©í• ë•Œ 매우 ìœ ìš©í•˜ê²Œ ì“°ì¼ ìˆ˜ 있습니다. +<p>ì´ê²ƒì€ ì¼ê²¬ 중복ë˜ëŠ” 것처럼 들리지만, 대체 리소스를 ì‚¬ìš©í• ë•Œ 매우 ìœ ìš©í•˜ê²Œ ì“°ì¼ ìˆ˜ 있습니다. <a href="providing-resources.html#AliasResources">별명 리소스 ìƒì„±</a>ì— ê´€í•´ ìžì„¸ížˆ 알아보ì‹ì‹œì˜¤.</p> @@ -283,20 +283,20 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 <h3 id="ReferencesToThemeAttributes">ìŠ¤íƒ€ì¼ ì†ì„± 참조</h3> <p>ìŠ¤íƒ€ì¼ ì†ì„± 리소스는 현재 ì ìš©ëœ í…Œë§ˆì˜ ì†ì„± ê°’ì„ -ì°¸ì¡°í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하면 -하드 코드로 ìž‘ì„±ëœ ê°’ì„ ì œê³µí•˜ëŠ” 것 ëŒ€ì‹ ì— UI ìš”ì†Œì˜ ì™¸ê´€ì„ ì‚¬ìš©ìž ì§€ì •í•˜ì—¬ -현재 테마ì—서 ì œê³µí•œ 표준 ë³€í˜•ì— ë§žì¶° 스타ì¼ë§í• 수 있습니다. ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하는 ê²ƒì€ +ì°¸ì¡°í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하면 +하드 코드로 ìž‘ì„±ëœ ê°’ì„ ì œê³µí•˜ëŠ” 것 ëŒ€ì‹ ì— UI ìš”ì†Œì˜ ì™¸ê´€ì„ ì‚¬ìš©ìž ì§€ì •í•˜ì—¬ +현재 테마ì—서 ì œê³µí•œ 표준 ë³€í˜•ì— ë§žì¶° 스타ì¼ë§í• 수 있습니다. ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하는 ê²ƒì€ ê¸°ë³¸ì 으로 "ì´ ì†ì„±ì´ ì •ì˜í•œ 스타ì¼ì„ 현재 테마로 사용하ë¼"는 ë§ê³¼ 같습니다.</p> -<p>ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하는 경우, ì´ë¦„ êµ¬ë¬¸ì€ ë³´í†µ -리소스와 ê±°ì˜ ë˜‘ê°™ìŠµë‹ˆë‹¤. 다만 앳 기호({@code @})를 사용하는 ëŒ€ì‹ ë¬¼ìŒí‘œ({@code ?})를 사용하며, +<p>ìŠ¤íƒ€ì¼ ì†ì„±ì„ 참조하는 경우, ì´ë¦„ êµ¬ë¬¸ì€ ë³´í†µ +리소스와 ê±°ì˜ ë˜‘ê°™ìŠµë‹ˆë‹¤. 다만 앳 기호({@code @})를 사용하는 ëŒ€ì‹ ë¬¼ìŒí‘œ({@code ?})를 사용하며, 리소스 ìœ í˜• ë¶€ë¶„ì´ ì„ íƒ ì‚¬í•ì´ë¼ëŠ” ì ë§Œì´ ë‹¤ë¦…ë‹ˆë‹¤. 예:</p> <pre class="classic"> ?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> </pre> -<p>예컨대 다ìŒì€ í…스트 색ìƒì„ 시스템 í…Œë§ˆì˜ "기본" í…스트 색ìƒì— +<p>예컨대 다ìŒì€ í…스트 색ìƒì„ 시스템 í…Œë§ˆì˜ "기본" í…스트 색ìƒì— ì¼ì¹˜í•˜ë„ë¡ ì„¤ì •í•˜ê¸° 위해 ì†ì„±ì„ 참조하는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> <pre> @@ -307,7 +307,7 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 android:text="@string/hello_world" /> </pre> -<p>여기서 {@code android:textColor} ì†ì„±ì´ 주어진 ìŠ¤íƒ€ì¼ ì†ì„±ì˜ ì´ë¦„ì„ í˜„ìž¬ 테마대로 +<p>여기서 {@code android:textColor} ì†ì„±ì´ 주어진 ìŠ¤íƒ€ì¼ ì†ì„±ì˜ ì´ë¦„ì„ í˜„ìž¬ 테마대로 ì§€ì •í•©ë‹ˆë‹¤. Android는 ì´ì œ {@code android:textColorSecondary} ìŠ¤íƒ€ì¼ ì†ì„±ì— ì ìš©ëœ ê°’ì„ ì´ ìœ„ì ¯ì˜ {@code android:textColor}ì— ëŒ€í•œ 값으로 사용합니다. 시스템 리소스 ë„구는 ì†ì„± 리소스가 ì´ ì»¨í…스트ì—서 예ìƒëœë‹¤ëŠ” ê²ƒì„ ì•Œê¸° ë•Œë¬¸ì— @@ -319,9 +319,9 @@ XML ìš”ì†Œì˜ {@code android:name} ì†ì„± 값입니다(단순 <h2 id="PlatformResources">í”Œëž«í¼ ë¦¬ì†ŒìŠ¤ 액세스</h2> -<p>Androidì—는 스타ì¼, 테마 ë° ë ˆì´ì•„웃 등 여러 가지 표준 리소스가 í¬í•¨ë˜ì–´ 있습니다. -ì´ì™€ ê°™ì€ ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ -<code>android</code> 패키지 ì´ë¦„으로 리소스 참조를 í•œì •í•©ë‹ˆë‹¤. 예를 들어 Android는 +<p>Androidì—는 스타ì¼, 테마 ë° ë ˆì´ì•„웃 등 여러 가지 표준 리소스가 í¬í•¨ë˜ì–´ 있습니다. +ì´ì™€ ê°™ì€ ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ +<code>android</code> 패키지 ì´ë¦„으로 리소스 참조를 í•œì •í•©ë‹ˆë‹¤. 예를 들어 Android는 {@link android.widget.ListAdapter}ì˜ ëª©ë¡ í•목으로 ì‚¬ìš©í• ìˆ˜ 있는 ë ˆì´ì•„웃 리소스를 ì œê³µí•©ë‹ˆë‹¤.</p> <pre> @@ -330,8 +330,8 @@ setListAdapter}(new {@link android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray)); </pre> -<p>ì´ ì˜ˆì‹œì—서 {@link android.R.layout#simple_list_item_1}ì€ -{@link android.widget.ListView}ì˜ í•ëª©ì— ëŒ€í•´ 플랫í¼ì´ ì •ì˜í•œ ë ˆì´ì•„웃 리소스입니다. ëª©ë¡ í•ëª©ì— ëŒ€í•´ ë‚˜ë¦„ì˜ ë ˆì´ì•„ì›ƒì„ -만드는 ëŒ€ì‹ ì´ê²ƒì„ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ +<p>ì´ ì˜ˆì‹œì—서 {@link android.R.layout#simple_list_item_1}ì€ +{@link android.widget.ListView}ì˜ í•ëª©ì— ëŒ€í•´ 플랫í¼ì´ ì •ì˜í•œ ë ˆì´ì•„웃 리소스입니다. ëª©ë¡ í•ëª©ì— ëŒ€í•´ ë‚˜ë¦„ì˜ ë ˆì´ì•„ì›ƒì„ +만드는 ëŒ€ì‹ ì´ê²ƒì„ ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/ui/layout/listview.html">ëª©ë¡ ë³´ê¸°</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/resources/overview.jd b/docs/html-intl/intl/ko/guide/topics/resources/overview.jd index e98a67750772..7faab592ea6d 100644 --- a/docs/html-intl/intl/ko/guide/topics/resources/overview.jd +++ b/docs/html-intl/intl/ko/guide/topics/resources/overview.jd @@ -19,13 +19,13 @@ page.title=리소스 개요 </div> -<p>ì´ë¯¸ì§€ë‚˜ 문ìžì—´ ê°™ì€ ë¦¬ì†ŒìŠ¤ëŠ” í•ìƒ ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 -외부화하여 ë…립ì 으로 ìœ ì§€í•´ì•¼ 합니다. 리소스를 외부화하면 +<p>ì´ë¯¸ì§€ë‚˜ 문ìžì—´ ê°™ì€ ë¦¬ì†ŒìŠ¤ëŠ” í•ìƒ ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 +외부화하여 ë…립ì 으로 ìœ ì§€í•´ì•¼ 합니다. 리소스를 외부화하면 다양한 언어나 화면 í¬ê¸°ì™€ ê°™ì€ íŠ¹ì • 기기 êµ¬ì„±ì„ ì§€ì›í•˜ëŠ” 대체 리소스를 ì œê³µí• ìˆ˜ 있습니다. ì´ëŸ¬í•œ ê¸°ëŠ¥ì€ Android êµ¬ë™ ìž¥ì¹˜ë¥¼ -다양한 구성ì—서 ì´ìš©í•˜ê²Œ ë˜ë©´ì„œ ì ì ë” ì¤‘ìš”í•´ì§€ê³ ìžˆìŠµë‹ˆë‹¤. 여러 가지 êµ¬ì„±ì— -í˜¸í™˜ì„±ì„ ì œê³µí•˜ë ¤ë©´ 프로ì íŠ¸ì˜ -{@code res/} ë””ë ‰í„°ë¦¬ ì•ˆì— ë¦¬ì†ŒìŠ¤ë¥¼ ì •ë¦¬í•´ì•¼ 합니다. ì´ë•Œ 여러 가지 하위 ë””ë ‰í„°ë¦¬ë¥¼ 사용하여 리소스를 ìœ í˜•ê³¼ 구성 +다양한 구성ì—서 ì´ìš©í•˜ê²Œ ë˜ë©´ì„œ ì ì ë” ì¤‘ìš”í•´ì§€ê³ ìžˆìŠµë‹ˆë‹¤. 여러 가지 êµ¬ì„±ì— +í˜¸í™˜ì„±ì„ ì œê³µí•˜ë ¤ë©´ 프로ì íŠ¸ì˜ +{@code res/} ë””ë ‰í„°ë¦¬ ì•ˆì— ë¦¬ì†ŒìŠ¤ë¥¼ ì •ë¦¬í•´ì•¼ 합니다. ì´ë•Œ 여러 가지 하위 ë””ë ‰í„°ë¦¬ë¥¼ 사용하여 리소스를 ìœ í˜•ê³¼ 구성 기준으로 그룹화하면 좋습니다.</p> <div class="figure" style="width:429px"> @@ -38,7 +38,7 @@ page.title=리소스 개요 <div class="figure" style="width:429px"> <img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" /> <p class="img-caption"> -<strong>그림 2.</strong> 서로 다른 ë‘ ê°œì˜ ê¸°ê¸°ë¡œ, ê°ê° 다른 화면 í¬ê¸°ì— 맞게 ì œê³µëœ ì„œë¡œ 다른 +<strong>그림 2.</strong> 서로 다른 ë‘ ê°œì˜ ê¸°ê¸°ë¡œ, ê°ê° 다른 화면 í¬ê¸°ì— 맞게 ì œê³µëœ ì„œë¡œ 다른 ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ê³ ìžˆìŠµë‹ˆë‹¤.</p> </div> @@ -46,42 +46,42 @@ page.title=리소스 개요 <em>대체</em> 리소스를 ì§€ì •í• ìˆ˜ 있습니다.</p> <ul> <li>기본 리소스는 기기 êµ¬ì„±ì— ê´€ê³„ì—†ì´ í•ìƒ ì‚¬ìš©í•˜ê±°ë‚˜ -기존 êµ¬ì„±ì— ì¼ì¹˜í•˜ëŠ” 대체 리소스가 ì—†ì„ ë•Œ +기존 êµ¬ì„±ì— ì¼ì¹˜í•˜ëŠ” 대체 리소스가 ì—†ì„ ë•Œ 사용합니다.</li> - <li>대체 리소스는 íŠ¹ì • 구성ì—서 사용하기 위해 개발ìžê°€ 특별히 ë””ìžì¸í•œ ê²ƒì„ -ë§í•©ë‹ˆë‹¤. 리소스 ê·¸ë£¹ì„ íŠ¹ì • 구성용으로 ì§€ì •í•˜ë ¤ë©´, + <li>대체 리소스는 íŠ¹ì • 구성ì—서 사용하기 위해 개발ìžê°€ 특별히 ë””ìžì¸í•œ ê²ƒì„ +ë§í•©ë‹ˆë‹¤. 리소스 ê·¸ë£¹ì„ íŠ¹ì • 구성용으로 ì§€ì •í•˜ë ¤ë©´, ë””ë ‰í„°ë¦¬ ì´ë¦„ì— ì ì ˆí•œ 구성 í•œì •ìžë¥¼ 추가하ì‹ì‹œì˜¤.</li> </ul> -<p>예를 들어 기본 UI ë ˆì´ì•„ì›ƒì€ -{@code res/layout/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë˜ì–´ 있ë”ë¼ë„ í™”ë©´ì´ ê°€ë¡œ ë°©í–¥ì¼ ë•Œ ì‚¬ìš©í• +<p>예를 들어 기본 UI ë ˆì´ì•„ì›ƒì€ +{@code res/layout/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥ë˜ì–´ 있ë”ë¼ë„ í™”ë©´ì´ ê°€ë¡œ ë°©í–¥ì¼ ë•Œ ì‚¬ìš©í• ë‹¤ë¥¸ ë ˆì´ì•„ì›ƒì„ ì§€ì •í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë¥¼ {@code res/layout-land/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•˜ë©´ ë©ë‹ˆë‹¤. Android는 ê¸°ê¸°ì˜ í˜„ìž¬ êµ¬ì„±ì„ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ ì´ë¦„ê³¼ ì¼ì¹˜ì‹œì¼œì„œ ì ì ˆí•œ 리소스를 ì 용합니다.</p> -<p>그림 1ì€ ì´ìš© 가능한 대체 리소스가 ì—†ì„ ê²½ìš° ì‹œìŠ¤í…œì´ ì„œë¡œ 다른 ë‘ ê°œì˜ ê¸°ê¸°ì— -ê°™ì€ ë ˆì´ì•„ì›ƒì„ ì 용하는 ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 그림 2는 +<p>그림 1ì€ ì´ìš© 가능한 대체 리소스가 ì—†ì„ ê²½ìš° ì‹œìŠ¤í…œì´ ì„œë¡œ 다른 ë‘ ê°œì˜ ê¸°ê¸°ì— +ê°™ì€ ë ˆì´ì•„ì›ƒì„ ì 용하는 ë°©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 그림 2는 ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— í° í™”ë©´ìš© ë ˆì´ì•„웃 리소스를 추가한 ëª¨ìŠµì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> -<p>ë‹¤ìŒ ë¬¸ì„œëŠ” 대체 리소스를 ì²´ê³„í™”í•˜ê³ , +<p>ë‹¤ìŒ ë¬¸ì„œëŠ” 대체 리소스를 ì²´ê³„í™”í•˜ê³ , 대체 리소스를 ì§€ì •í•˜ê³ , ì• í”Œë¦¬ì¼€ì´ì…˜ì— 액세스 하는 ë“±ì˜ ë°©ë²•ì— ê´€í•œ ì™„ì „í•œ ì§€ì¹¨ì„ ì œê³µí•©ë‹ˆë‹¤.</p> <dl> <dt><strong><a href="providing-resources.html">리소스 ì œê³µ</a></strong></dt> - <dd>ì•±ì— í¬í•¨í• 수 있는 여러 가지 ì¢…ë¥˜ì˜ ë¦¬ì†ŒìŠ¤ì™€, ì´ëŸ¬í•œ 리소스를 ì €ìž¥í•˜ëŠ” 장소, íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ + <dd>ì•±ì— í¬í•¨í• 수 있는 여러 가지 ì¢…ë¥˜ì˜ ë¦¬ì†ŒìŠ¤ì™€, ì´ëŸ¬í•œ 리소스를 ì €ìž¥í•˜ëŠ” 장소, íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ 대체 리소스를 ìƒì„±í•˜ëŠ” 방법입니다.</dd> <dt><strong><a href="accessing-resources.html">리소스 액세스</a></strong></dt> - <dd>ì œê³µí•œ 리소스를 사용하는 방법입니다. ì´ë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 참조하거나 + <dd>ì œê³µí•œ 리소스를 사용하는 방법입니다. ì´ë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ 코드ì—서 참조하거나 다른 XML 리소스ì—서 참조하는 ë°©ì‹ì„ ì”니다.</dd> <dt><strong><a href="runtime-changes.html">런타임 변경 처리</a></strong></dt> <dd>액티비티가 실행 ì¤‘ì¸ ë™ì•ˆ ë°œìƒí•œ 구성 ë³€ê²½ì„ ê´€ë¦¬í•˜ëŠ” 방법입니다.</dd> <dt><strong><a href="localization.html">ì§€ì—í™”</a></strong></dt> - <dd>대체 리소스를 사용하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì§€ì—화하는 ë°©ë²•ì— ëŒ€í•œ ìƒì„¸í•œ ê°€ì´ë“œìž…니다. ì´ê²ƒì€ 대체 -리소스를 사용하는 한 가지 ë°©ë²•ì— ë¶ˆê³¼í•˜ì§€ë§Œ, ë” ë§Žì€ ì‚¬ìš©ìžì—게 ë„ë‹¬í•˜ë ¤ë©´ 매우 중요한 + <dd>대체 리소스를 사용하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì§€ì—화하는 ë°©ë²•ì— ëŒ€í•œ ìƒì„¸í•œ ê°€ì´ë“œìž…니다. ì´ê²ƒì€ 대체 +리소스를 사용하는 한 가지 ë°©ë²•ì— ë¶ˆê³¼í•˜ì§€ë§Œ, ë” ë§Žì€ ì‚¬ìš©ìžì—게 ë„ë‹¬í•˜ë ¤ë©´ 매우 중요한 방법입니다.</dd> <dt><strong><a href="available-resources.html">리소스 ìœ í˜•</a></strong></dt> - <dd>개발ìžê°€ ì œê³µí• ìˆ˜ 있는 다양한 리소스 ìœ í˜•ì˜ ì°¸ì¡°ë¡œ, ê°ê°ì˜ XML 요소, -ì†ì„±ê³¼ êµ¬ë¬¸ì„ ì„¤ëª…í•˜ëŠ” 것입니다. 예를 들어, ì´ ì°¸ì¡°ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ 메뉴와 드로어블 리소스, + <dd>개발ìžê°€ ì œê³µí• ìˆ˜ 있는 다양한 리소스 ìœ í˜•ì˜ ì°¸ì¡°ë¡œ, ê°ê°ì˜ XML 요소, +ì†ì„±ê³¼ êµ¬ë¬¸ì„ ì„¤ëª…í•˜ëŠ” 것입니다. 예를 들어, ì´ ì°¸ì¡°ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ 메뉴와 드로어블 리소스, ì• ë‹ˆë©”ì´ì…˜ì— 대한 리소스를 ìƒì„±í•˜ëŠ” ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.</dd> </dl> diff --git a/docs/html-intl/intl/ko/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/ko/guide/topics/resources/providing-resources.jd index 681cbb31c4fb..bc631f2fab8d 100644 --- a/docs/html-intl/intl/ko/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/ko/guide/topics/resources/providing-resources.jd @@ -9,7 +9,7 @@ parent.link=index.html <ul> <li>{@code res/}ì˜ ì—¬ëŸ¬ 가지 하위 ë””ë ‰í„°ë¦¬ì— ì†í•œ 여러 가지 ìœ í˜•ì˜ ë¦¬ì†ŒìŠ¤</li> <li>구성별 리소스 파ì¼ì„ ì œê³µí•˜ëŠ” 대체 리소스</li> - <li>í•ìƒ ê¸°ë³¸ 리소스를 í¬í•¨í•´ì•¼ ì•±ì´ íŠ¹ì • 기기 êµ¬ì„±ì— + <li>í•ìƒ ê¸°ë³¸ 리소스를 í¬í•¨í•´ì•¼ ì•±ì´ íŠ¹ì • 기기 êµ¬ì„±ì— ì¢Œìš°ë˜ì§€ 않습니다.</li> </ul> <h2>ì´ ë¬¸ì„œì˜ ë‚´ìš©</h2> @@ -29,23 +29,23 @@ parent.link=index.html <ol> <li><a href="accessing-resources.html">리소스 액세스</a></li> <li><a href="available-resources.html">리소스 ìœ í˜•</a></li> - <li><a href="{@docRoot}guide/practices/screens_support.html">다중 + <li><a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a></li> </ol> </div> </div> -<p>ì´ë¯¸ì§€ë‚˜ 문ìžì—´ê³¼ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ 리소스는 í•ìƒ ì½”ë“œì—서 외부화해야 합니다. -그래야 ì´ë“¤ì„ ë…립ì 으로 ìœ ì§€ê´€ë¦¬í• ìˆ˜ 있습니다. íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ 대체 ë¦¬ì†ŒìŠ¤ë„ -ì œê³µí•´ì•¼ 합니다. ì´ê²ƒì€ 특별하게 명명한 리소스 ë””ë ‰í„°ë¦¬ì— ê·¸ë£¹í™”í•˜ëŠ” ë°©ë²•ì„ ì”니다. Android는 -ëŸ°íƒ€ìž„ì— í˜„ìž¬ êµ¬ì„±ì„ ê·¼ê±°ë¡œ ì ì ˆí•œ 리소스를 사용합니다. 예를 들어 -여러 가지 화면 í¬ê¸°ì— ë”°ë¼ ì—¬ëŸ¬ 가지 UI ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ê±°ë‚˜ 언어 ì„¤ì •ì— ë”°ë¼ +<p>ì´ë¯¸ì§€ë‚˜ 문ìžì—´ê³¼ ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ 리소스는 í•ìƒ ì½”ë“œì—서 외부화해야 합니다. +그래야 ì´ë“¤ì„ ë…립ì 으로 ìœ ì§€ê´€ë¦¬í• ìˆ˜ 있습니다. íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ 대체 ë¦¬ì†ŒìŠ¤ë„ +ì œê³µí•´ì•¼ 합니다. ì´ê²ƒì€ 특별하게 명명한 리소스 ë””ë ‰í„°ë¦¬ì— ê·¸ë£¹í™”í•˜ëŠ” ë°©ë²•ì„ ì”니다. Android는 +ëŸ°íƒ€ìž„ì— í˜„ìž¬ êµ¬ì„±ì„ ê·¼ê±°ë¡œ ì ì ˆí•œ 리소스를 사용합니다. 예를 들어 +여러 가지 화면 í¬ê¸°ì— ë”°ë¼ ì—¬ëŸ¬ 가지 UI ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ê±°ë‚˜ 언어 ì„¤ì •ì— ë”°ë¼ ê°ê¸° 다른 문ìžì—´ì„ ì œê³µí•˜ê³ ìž í• ìˆ˜ 있습니다.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ 리소스를 외부화하면 프로ì 트 {@code R} í´ëž˜ìФì—서 ë°œìƒí•˜ëŠ” 리소스 ID로 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 리소스를 사용하는 ë°©ë²•ì€ <a href="accessing-resources.html">리소스 -액세스</a>ì—서 설명합니다. ì´ ë¬¸ì„œì—서는 Android 프로ì 트ì—서 리소스를 그룹화하는 방법과 íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ +액세스</a>ì—서 설명합니다. ì´ ë¬¸ì„œì—서는 Android 프로ì 트ì—서 리소스를 그룹화하는 방법과 íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•œ 대체 리소스를 ì œê³µí•˜ëŠ” ë²•ì„ ë³´ì—¬ë“œë¦½ë‹ˆë‹¤.</p> @@ -75,10 +75,10 @@ MyProject/ ) í¬í•¨í•˜ëŠ” ê²ƒì„ ë³¼ 수 있습니다. 리소스 ë””ë ‰í„°ë¦¬ ì´ë¦„ì€ ì¤‘ìš”í•˜ë©° 표1ì— ì„¤ëª…ë˜ì–´ 있습니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> Mipmap í´ë”를 사용하는 ìžì„¸í•œ ë°©ë²•ì€ +<p class="note"><strong>ì°¸ê³ :</strong> Mipmap í´ë”를 사용하는 ìžì„¸í•œ ë°©ë²•ì€ <a href="{@docRoot}tools/projects/index.html#mipmap">프로ì 트 관리 개요</a>를 참조하ì‹ì‹œì˜¤.</p> -<p class="table-caption" id="table1"><strong>표 1</strong>. 프로ì 트 +<p class="table-caption" id="table1"><strong>표 1</strong>. 프로ì 트 {@code res/} ë””ë ‰í„°ë¦¬ ë‚´ë¶€ì—서 ì§€ì›í•˜ëŠ” 리소스 ë””ë ‰í„°ë¦¬ìž…ë‹ˆë‹¤.</p> <table> @@ -89,13 +89,13 @@ MyProject/ <tr> <td><code>animator/</code></td> - <td><a href="{@docRoot}guide/topics/graphics/prop-animation.html">ì†ì„± + <td><a href="{@docRoot}guide/topics/graphics/prop-animation.html">ì†ì„± ì• ë‹ˆë©”ì´ì…˜</a>ì„ ì •ì˜í•˜ëŠ” XML 파ì¼ìž…니다.</td> </tr> <tr> <td><code>anim/</code></td> - <td><a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">tween + <td><a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">tween ì• ë‹ˆë©”ì´ì…˜</a>ì„ ì •ì˜í•˜ëŠ” XML 파ì¼ìž…니다 (ì†ì„± ì• ë‹ˆë©”ì´ì…˜ë„ ì´ ë””ë ‰í„°ë¦¬ì— ì €ìž¥í• ìˆ˜ 있지만 ë‘ ê°€ì§€ ìœ í˜•ì„ êµ¬ë¶„í•˜ê¸° 위해 ì†ì„± ì• ë‹ˆë©”ì´ì…˜ì—는 {@code animator/} ë””ë ‰í„°ë¦¬ê°€ 기본 ì„¤ì •ë©ë‹ˆë‹¤ ).</td> @@ -126,8 +126,8 @@ MyProject/ <tr> <td><code>mipmap/</code></td> - <td>ê°ê¸° 다른 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ ë°€ë„ì— ëŒ€í•œ 드로어블 파ì¼ìž…니다. -{@code mipmap/} í´ë”로 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ 관리하는 ìžì„¸í•œ ë°©ë²•ì€ + <td>ê°ê¸° 다른 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ ë°€ë„ì— ëŒ€í•œ 드로어블 파ì¼ìž…니다. +{@code mipmap/} í´ë”로 시작 ê´€ë¦¬ìž ì•„ì´ì½˜ì„ 관리하는 ìžì„¸í•œ ë°©ë²•ì€ <a href="{@docRoot}tools/project/index.html#mipmap">프로ì 트 관리 개요</a>를 참조하ì‹ì‹œì˜¤.</td> </tr> @@ -139,32 +139,32 @@ MyProject/ <tr> <td><code>menu/</code></td> - <td>옵션 메뉴, 컨í…스트 메뉴 ë˜ëŠ” 하위 + <td>옵션 메뉴, 컨í…스트 메뉴 ë˜ëŠ” 하위 메뉴 등과 ê°™ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ 메뉴를 ì •ì˜í•˜ëŠ” XML입니다. <a href="menu-resource.html">메뉴 리소스</a>를 참조하ì‹ì‹œì˜¤.</td> </tr> <tr> <td><code>raw/</code></td> - <td><p>ì›ì‹œ 형태로 ì €ìž¥í•˜ê¸° 위한 ìž„ì˜ì˜ 파ì¼ìž…니다. ì›ì‹œ + <td><p>ì›ì‹œ 형태로 ì €ìž¥í•˜ê¸° 위한 ìž„ì˜ì˜ 파ì¼ìž…니다. ì›ì‹œ {@link java.io.InputStream}으로 ì´ëŸ° 리소스를 ì—´ë ¤ë©´ 리소스 ID, {@code R.raw.<em>filename</em>}으로 {@link android.content.res.Resources#openRawResource(int) Resources.openRawResource()}를 호출합니다.</p> - <p>그러나 ì›ë³¸ íŒŒì¼ ì´ë¦„ê³¼ íŒŒì¼ ê³„ì¸µì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 경우, + <p>그러나 ì›ë³¸ íŒŒì¼ ì´ë¦„ê³¼ íŒŒì¼ ê³„ì¸µì— ì•¡ì„¸ìŠ¤í•´ì•¼ 하는 경우, ({@code res/raw/}ê°€ 아니ë¼) {@code -assets/} ë””ë ‰í„°ë¦¬ì— ëª‡ëª‡ 리소스를 ì €ìž¥í•´ë‘는 ê²ƒì„ ê³ ë ¤í•´ ë³¼ 수 있습니다. {@code assets/}ì— ìžˆëŠ” 파ì¼ì—는 +assets/} ë””ë ‰í„°ë¦¬ì— ëª‡ëª‡ 리소스를 ì €ìž¥í•´ë‘는 ê²ƒì„ ê³ ë ¤í•´ ë³¼ 수 있습니다. {@code assets/}ì— ìžˆëŠ” 파ì¼ì—는 리소스 IDê°€ 주어지지 않으므로, ì´ë“¤ì„ ì½ëŠ” ìœ ì¼í•œ ë°©ë²•ì€ {@link android.content.res.AssetManager}를 사용하는 것ë¿ìž…니다.</p></td> </tr> <tr> <td><code>values/</code></td> <td><p>문ìžì—´, ì •ìˆ˜ ë° ìƒ‰ê³¼ ê°™ì€ ë‹¨ìˆœ ê°’ì´ ë“¤ì–´ìžˆëŠ” XML 파ì¼ìž…니다.</p> - <p>다른 {@code res/} 하위 ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” XML 리소스 파ì¼ì€ XML íŒŒì¼ ì´ë¦„ì„ ê·¼ê±°ë¡œ + <p>다른 {@code res/} 하위 ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” XML 리소스 파ì¼ì€ XML íŒŒì¼ ì´ë¦„ì„ ê·¼ê±°ë¡œ í•˜ë‚˜ì˜ ë¦¬ì†ŒìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” 반면, {@code values/} ë””ë ‰í„°ë¦¬ì— ìžˆëŠ” 파ì¼ì€ 여러 ê°œì˜ ë¦¬ì†ŒìŠ¤ë¥¼ 설명합니다. -ì´ ë””ë ‰í„°ë¦¬ ì•ˆì— ìžˆëŠ” 파ì¼ì˜ 경우, {@code <resources>} ìš”ì†Œì˜ ê° í•˜ìœ„ 요소가 리소스를 하나씩 -ì •ì˜í•©ë‹ˆë‹¤. 예를 들어 {@code <string>} 요소는 +ì´ ë””ë ‰í„°ë¦¬ ì•ˆì— ìžˆëŠ” 파ì¼ì˜ 경우, {@code <resources>} ìš”ì†Œì˜ ê° í•˜ìœ„ 요소가 리소스를 하나씩 +ì •ì˜í•©ë‹ˆë‹¤. 예를 들어 {@code <string>} 요소는 {@code R.string} 리소스를 ìƒì„±í•˜ê³ {@code <color>} 요소는 {@code R.color} 리소스를 ìƒì„±í•©ë‹ˆë‹¤.</p> <p>ê° ë¦¬ì†ŒìŠ¤ê°€ ìžì²´ XML 요소로 ì •ì˜ë˜ë¯€ë¡œ, ì›í•˜ëŠ” 대로 파ì¼ì„ ì •ì˜í•˜ê³ í•˜ë‚˜ì˜ íŒŒì¼ì— 여러 가지 리소스 ìœ í˜•ì„ -ë°°ì •í• ìˆ˜ 있습니다. 하지만 명확히 í•˜ë ¤ë©´ 여러 가지 파ì¼ì— +ë°°ì •í• ìˆ˜ 있습니다. 하지만 명확히 í•˜ë ¤ë©´ 여러 가지 파ì¼ì— ê°ê¸° ê³ ìœ í•œ 리소스를 배치하는 ê²ƒì´ ì¢‹ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, 다ìŒì€ ì´ ë””ë ‰í„°ë¦¬ì—서 ìƒì„±í• 수 있는 리소스를 위한 íŒŒì¼ ì´ë¦„ 명명법입니다.</p> <ul> @@ -176,7 +176,7 @@ assets/} ë””ë ‰í„°ë¦¬ì— ëª‡ëª‡ 리소스를 ì €ìž¥í•´ë‘는 ê²ƒì„ ê³ ë ¤í•´ ë³ <li><a href="style-resource.html">스타ì¼</a>ì„ ìœ„í•œ styles.xml</li> </ul> <p><a href="string-resource.html">문ìžì—´ 리소스</a>, -<a href="style-resource.html">ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤</a> ë° +<a href="style-resource.html">ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤</a> ë° <a href="more-resources.html">ìžì„¸í•œ 리소스 ìœ í˜•</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </td> </tr> @@ -184,21 +184,21 @@ assets/} ë””ë ‰í„°ë¦¬ì— ëª‡ëª‡ 리소스를 ì €ìž¥í•´ë‘는 ê²ƒì„ ê³ ë ¤í•´ ë³ <tr> <td><code>xml/</code></td> <td>ëŸ°íƒ€ìž„ì— ì½ì„ 수 있는 ìž„ì˜ì˜ XML 파ì¼ë¡œ, ì´ë•Œ {@link -android.content.res.Resources#getXml(int) Resources.getXML()}ì„ í˜¸ì¶œí•˜ëŠ” ë°©ë²•ì„ ì”니다. 다양한 XML 구성 파ì¼ì„ ì—¬ê¸°ì— ì €ìž¥í•´ì•¼ 합니다. 예를 들어 +android.content.res.Resources#getXml(int) Resources.getXML()}ì„ í˜¸ì¶œí•˜ëŠ” ë°©ë²•ì„ ì”니다. 다양한 XML 구성 파ì¼ì„ ì—¬ê¸°ì— ì €ìž¥í•´ì•¼ 합니다. 예를 들어 <a href="{@docRoot}guide/topics/search/searchable-config.html">검색 가능한 구성</a> ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. <!-- or preferences configuration. --></td> </tr> </table> -<p class="caution"><strong>주ì˜:</strong> 리소스 파ì¼ì„ +<p class="caution"><strong>주ì˜:</strong> 리소스 파ì¼ì„ {@code res/} ë””ë ‰í„°ë¦¬ì— ì§ì ‘ ì €ìž¥í•˜ë©´ ì ˆëŒ€ë¡œ 안 ë©ë‹ˆë‹¤. 컴파ì¼ëŸ¬ 오류를 초래하게 ë©ë‹ˆë‹¤.</p> <p>íŠ¹ì • ìœ í˜•ì˜ ë¦¬ì†ŒìŠ¤ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="available-resources.html">리소스 ìœ í˜•</a> 문서를 참조하ì‹ì‹œì˜¤.</p> <p>표1ì— ì •ì˜ëœ 하위 ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•˜ëŠ” 리소스는 "기본" -리소스입니다. 다시 ë§í•´, ì´ëŸ¬í•œ 리소스가 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ë””ìžì¸ê³¼ 콘í…ì¸ ë¥¼ ì •ì˜í•œë‹¤ëŠ” 뜻입니다. +리소스입니다. 다시 ë§í•´, ì´ëŸ¬í•œ 리소스가 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ë””ìžì¸ê³¼ 콘í…ì¸ ë¥¼ ì •ì˜í•œë‹¤ëŠ” 뜻입니다. 그러나, 여러 가지 ìœ í˜•ì˜ Android êµ¬ë™ ê¸°ê¸°ëŠ” ê°ê¸° 다른 ìœ í˜•ì˜ ë¦¬ì†ŒìŠ¤ë¥¼ í˜¸ì¶œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. -예를 들어 ì–´ëŠ ê¸°ê¸°ì˜ í™”ë©´ì´ ë³´í†µë³´ë‹¤ í° íŽ¸ì´ë¼ë©´, 추가ì ì¸ í™”ë©´ ê³µê°„ì˜ ì´ì ì„ í™œìš©í• ìˆ˜ 있는 +예를 들어 ì–´ëŠ ê¸°ê¸°ì˜ í™”ë©´ì´ ë³´í†µë³´ë‹¤ í° íŽ¸ì´ë¼ë©´, 추가ì ì¸ í™”ë©´ ê³µê°„ì˜ ì´ì ì„ í™œìš©í• ìˆ˜ 있는 다른 ë ˆì´ì•„웃 리소스를 ì œê³µí•´ì•¼ 합니다. ë˜ëŠ”, ê¸°ê¸°ì— ë‹¤ë¥¸ 언어 ì„¤ì •ì´ ìžˆì„ ê²½ìš° 해당 í…스트를 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— ë²ˆì—하는 다른 문ìžì—´ 리소스를 ì œê³µí•´ì•¼ 합니다. 여러 가지 기기 êµ¬ì„±ì— ì—¬ëŸ¬ 가지 리소스를 ì œê³µí•˜ë ¤ë©´, @@ -215,10 +215,10 @@ android.content.res.Resources#getXml(int) Resources.getXML()}ì„ í˜¸ì¶œí•˜ëŠ” ë° <strong>그림 1.</strong> 서로 다른 ë‘ ê°œì˜ ê¸°ê¸°ë¡œ, 서로 다른 ë ˆì´ì•„웃 리소스를 사용합니다.</p> </div> -<p>ê±°ì˜ ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ íŠ¹ì • 기기 êµ¬ì„±ì„ ì§€ì›í•˜ëŠ” -대체 리소스를 ì œê³µí•´ì•¼ 합니다. 예를 들어 여러 가지 화면 ë°€ë„ì— ë§žëŠ” 대체 드로어블 리소스를 -í¬í•¨ì‹œì¼œì•¼ 하며 여러 가지 ì–¸ì–´ì— ë§žê²Œ 대체 문ìžì—´ ë¦¬ì†ŒìŠ¤ë„ í¬í•¨ì‹œì¼œì•¼ 합니다. Android는 ëŸ°íƒ€ìž„ì— -현재 기기 êµ¬ì„±ì„ ê°ì§€í•˜ê³ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대해 ì ì ˆí•œ 리소스를 +<p>ê±°ì˜ ëª¨ë“ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ íŠ¹ì • 기기 êµ¬ì„±ì„ ì§€ì›í•˜ëŠ” +대체 리소스를 ì œê³µí•´ì•¼ 합니다. 예를 들어 여러 가지 화면 ë°€ë„ì— ë§žëŠ” 대체 드로어블 리소스를 +í¬í•¨ì‹œì¼œì•¼ 하며 여러 가지 ì–¸ì–´ì— ë§žê²Œ 대체 문ìžì—´ ë¦¬ì†ŒìŠ¤ë„ í¬í•¨ì‹œì¼œì•¼ 합니다. Android는 ëŸ°íƒ€ìž„ì— +현재 기기 êµ¬ì„±ì„ ê°ì§€í•˜ê³ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대해 ì ì ˆí•œ 리소스를 로드합니다.</p> <p>리소스 ì„¸íŠ¸ì— ëŒ€í•˜ì—¬ 구성별로 ì ì ˆí•œ 대체를 ì§€ì •í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> @@ -231,13 +231,13 @@ android.content.res.Resources#getXml(int) Resources.getXML()}ì„ í˜¸ì¶œí•˜ëŠ” ë° <li><em>{@code <qualifier>}</em>는 리소스를 ì‚¬ìš©í• ê°œë³„ êµ¬ì„±ì„ ì§€ì •í•˜ëŠ” ì´ë¦„입니다(표2ì— ì •ì˜).</li> </ul> - <p>하나 ì´ìƒì˜ <em>{@code <qualifier>}</em>를 ì¶”ê°€í• ìˆ˜ 있습니다. ê°ê¸° 대시로 + <p>하나 ì´ìƒì˜ <em>{@code <qualifier>}</em>를 ì¶”ê°€í• ìˆ˜ 있습니다. ê°ê¸° 대시로 구분합니다.</p> <p class="caution"><strong>주ì˜:</strong> 여러 í•œì •ìžë¥¼ ì¶”ê°€í• ë•ŒëŠ” -표2ì— ë‚˜ì—´ëœ ê²ƒê³¼ ê°™ì€ ìˆœì„œë¡œ 배치해야 합니다. í•œì •ìžì˜ 순서가 잘못 ì§€ì •ë˜ë©´ +표2ì— ë‚˜ì—´ëœ ê²ƒê³¼ ê°™ì€ ìˆœì„œë¡œ 배치해야 합니다. í•œì •ìžì˜ 순서가 잘못 ì§€ì •ë˜ë©´ 해당 리소스가 무시ë©ë‹ˆë‹¤.</p> </li> - <li>해당ë˜ëŠ” ê° ëŒ€ì²´ 리소스를 ì´ ìƒˆ ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•˜ì‹ì‹œì˜¤. ì´ ë¦¬ì†ŒìŠ¤ 파ì¼ì€ 기본 리소스 파ì¼ê³¼ + <li>해당ë˜ëŠ” ê° ëŒ€ì²´ 리소스를 ì´ ìƒˆ ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•˜ì‹ì‹œì˜¤. ì´ ë¦¬ì†ŒìŠ¤ 파ì¼ì€ 기본 리소스 파ì¼ê³¼ ë˜‘ê°™ì€ ì´ë¦„ì„ ì§€ì •í•´ì•¼ 합니다.</li> </ol> @@ -254,21 +254,21 @@ res/ </pre> <p>{@code hdpi} í•œì •ìžëŠ” 해당 ë””ë ‰í„°ë¦¬ì˜ ë¦¬ì†ŒìŠ¤ê°€ -ê³ í™”ì§ˆ 화면 기기용ì´ë¼ëŠ” ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ê° ë“œë¡œì–´ë¸” ë””ë ‰í„°ë¦¬ì˜ ì´ë¯¸ì§€ëŠ” íŠ¹ì • 화면 í™”ì§ˆì— ë§žì¶”ì–´ +ê³ í™”ì§ˆ 화면 기기용ì´ë¼ëŠ” ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ê° ë“œë¡œì–´ë¸” ë””ë ‰í„°ë¦¬ì˜ ì´ë¯¸ì§€ëŠ” íŠ¹ì • 화면 í™”ì§ˆì— ë§žì¶”ì–´ í¬ê¸°ê°€ ì§€ì •ë˜ì—ˆìœ¼ë‚˜ íŒŒì¼ ì´ë¦„ì€ ë˜‘ê°™ìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 {@code icon.png} ë˜ëŠ” {@code -background.png} ì´ë¯¸ì§€ë¥¼ 참조하는 ë° ì‚¬ìš©í•˜ëŠ” 리소스 ID는 í•ìƒ ê°™ì§€ë§Œ Androidê°€ ê° ë¦¬ì†ŒìŠ¤ 중ì—서 현재 ê¸°ê¸°ì— ê°€ìž¥ 잘 ì¼ì¹˜í•˜ëŠ” -ë²„ì „ì„ ì„ íƒí•˜ê²Œ ë©ë‹ˆë‹¤. ì´ë•Œ 리소스 ë””ë ‰í„°ë¦¬ ì´ë¦„ì˜ í•œì •ìžë¥¼ 기기 구성 ì •ë³´ì™€ +background.png} ì´ë¯¸ì§€ë¥¼ 참조하는 ë° ì‚¬ìš©í•˜ëŠ” 리소스 ID는 í•ìƒ ê°™ì§€ë§Œ Androidê°€ ê° ë¦¬ì†ŒìŠ¤ 중ì—서 현재 ê¸°ê¸°ì— ê°€ìž¥ 잘 ì¼ì¹˜í•˜ëŠ” +ë²„ì „ì„ ì„ íƒí•˜ê²Œ ë©ë‹ˆë‹¤. ì´ë•Œ 리소스 ë””ë ‰í„°ë¦¬ ì´ë¦„ì˜ í•œì •ìžë¥¼ 기기 구성 ì •ë³´ì™€ 비êµí•˜ëŠ” ë°©ë²•ì„ ì”니다.</p> -<p>Android는 여러 가지 구성 í•œì •ìžë¥¼ ì§€ì›í•˜ë©° 한 ë””ë ‰í„°ë¦¬ ì´ë¦„ì— -여러 ê°œì˜ í•œì •ìžë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ê° í•œì •ìžë¥¼ 대시로 구분하면 ë©ë‹ˆë‹¤. 표 2는 -ìœ íš¨í•œ 구성 í•œì •ìžë¥¼ ìš°ì„ ìˆœìœ„ëŒ€ë¡œ 나열한 것입니다. 리소스 ë””ë ‰í„°ë¦¬ì— ì—¬ëŸ¬ ê°œì˜ -í•œì •ìžë¥¼ 사용하는 경우, 해당 í•œì •ìžë¥¼ ë””ë ‰í„°ë¦¬ ì´ë¦„ì— ì¶”ê°€í• ë•Œ ì´ í‘œì— ë‚˜ì—´ëœ ê²ƒê³¼ ê°™ì€ +<p>Android는 여러 가지 구성 í•œì •ìžë¥¼ ì§€ì›í•˜ë©° 한 ë””ë ‰í„°ë¦¬ ì´ë¦„ì— +여러 ê°œì˜ í•œì •ìžë¥¼ ì¶”ê°€í• ìˆ˜ 있습니다. ê° í•œì •ìžë¥¼ 대시로 구분하면 ë©ë‹ˆë‹¤. 표 2는 +ìœ íš¨í•œ 구성 í•œì •ìžë¥¼ ìš°ì„ ìˆœìœ„ëŒ€ë¡œ 나열한 것입니다. 리소스 ë””ë ‰í„°ë¦¬ì— ì—¬ëŸ¬ ê°œì˜ +í•œì •ìžë¥¼ 사용하는 경우, 해당 í•œì •ìžë¥¼ ë””ë ‰í„°ë¦¬ ì´ë¦„ì— ì¶”ê°€í• ë•Œ ì´ í‘œì— ë‚˜ì—´ëœ ê²ƒê³¼ ê°™ì€ ìˆœì„œë¡œ 추가해야 합니다.</p> -<p class="table-caption" id="table2"><strong>표 2.</strong> 구성 í•œì •ìž +<p class="table-caption" id="table2"><strong>표 2.</strong> 구성 í•œì •ìž ì´ë¦„입니다.</p> <table> <tr> @@ -285,7 +285,7 @@ background.png} ì´ë¯¸ì§€ë¥¼ 참조하는 ë° ì‚¬ìš©í•˜ëŠ” 리소스 ID는 í•ìƒ ë“±. </td> <td> - <p>ì´ë™í†µì‹ êµê°€ 코드(MCC)ì— ì„ íƒì 으로 ì´ë™í†µì‹ ë„¤íŠ¸ì›Œí¬ ì½”ë“œ(MNC)ê°€ ì´ì–´ì§€ëŠ” 형태로, + <p>ì´ë™í†µì‹ êµê°€ 코드(MCC)ì— ì„ íƒì 으로 ì´ë™í†µì‹ ë„¤íŠ¸ì›Œí¬ ì½”ë“œ(MNC)ê°€ ì´ì–´ì§€ëŠ” 형태로, ê¸°ê¸°ì˜ SIM 카드ì—서 ê°€ì ¸ì˜µë‹ˆë‹¤. 예를 들어, <code>mcc310</code>ì€ ëª¨ë“ ì´ë™í†µì‹ 사를 í¬í•¨í•œ 미êµì´ê³ , <code>mcc310-mnc004</code>는 Verizonì„ ì‚¬ìš©í•˜ëŠ” 미êµ, <code>mcc208-mnc00</code>ì€ Orange를 사용하는 프랑스입니다.</p> @@ -293,11 +293,11 @@ background.png} ì´ë¯¸ì§€ë¥¼ 참조하는 ë° ì‚¬ìš©í•˜ëŠ” 리소스 ID는 í•ìƒ SIM 카드ì—서 ê°€ì ¸ì˜µë‹ˆë‹¤.</p> <p>MCCë§Œ 단ë…으로 ì‚¬ìš©í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예를 들어, ì• í”Œë¦¬ì¼€ì´ì…˜ì— êµê°€ë³„ 합법ì 리소스를 í¬í•¨í•˜ëŠ” 경우). ì–¸ì–´ì— ê¸°ì´ˆí•´ì„œë§Œ ì§€ì •í•´ì•¼ í• ê²½ìš°, -<em>언어 ë° ì§€ì—</em> í•œì •ìžë¥¼ ëŒ€ì‹ ì‚¬ìš©í•©ë‹ˆë‹¤(ì•„ëž˜ì— ì„¤ëª…). MCC와 +<em>언어 ë° ì§€ì—</em> í•œì •ìžë¥¼ ëŒ€ì‹ ì‚¬ìš©í•©ë‹ˆë‹¤(ì•„ëž˜ì— ì„¤ëª…). MCC와 MNC í•œì •ìžë¥¼ ì‚¬ìš©í• ê²½ìš°, 조심해서 ì‚¬ìš©í•˜ê³ ì˜ˆìƒí•œ 대로 ìž‘ë™í•˜ëŠ”ì§€ 테스트해야 합니다.</p> <p>ë˜í•œ, 구성 필드 {@link android.content.res.Configuration#mcc}와 {@link -android.content.res.Configuration#mnc}를 참조하ì‹ì‹œì˜¤. ì´ êµ¬ì„± 필드는 ê°ê° ì´ë™í†µì‹ êµê°€ 코드와 +android.content.res.Configuration#mnc}를 참조하ì‹ì‹œì˜¤. ì´ êµ¬ì„± 필드는 ê°ê° ì´ë™í†µì‹ êµê°€ 코드와 ì´ë™í†µì‹ ë„¤íŠ¸ì›Œí¬ ì½”ë“œë¥¼ 나타냅니다.</p> </td> </tr> @@ -312,19 +312,19 @@ android.content.res.Configuration#mnc}를 참조하ì‹ì‹œì˜¤. ì´ êµ¬ì„± 필드ë 등. </td> <td><p>언어는 ë‘ ê¸€ìžì˜ <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO -639-1</a> 언어 코드로 ì •ì˜ë˜ê³ , +639-1</a> 언어 코드로 ì •ì˜ë˜ê³ , ë’¤ì´ì–´ ë‘ ê¸€ìžì˜ <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1-alpha-2</a> ì§€ì— ì½”ë“œê°€ ì„ íƒì 으로 ë”°ë¼ì˜µë‹ˆë‹¤(ì†Œë¬¸ìž "{@code r}" ë’¤ì— ë¶™ìŒ). </p><p> - 코드는 대소문ìžë¥¼ 구별하지 <em>않습니다</em>. {@code r} ì ‘ë‘사는 + 코드는 대소문ìžë¥¼ 구별하지 <em>않습니다</em>. {@code r} ì ‘ë‘사는 ì§€ì— ë¶€ë¶„ì„ êµ¬ë³„í•˜ê¸° 위해 사용합니다. ì§€ì—ë§Œ ì§€ì •í• ìˆ˜ëŠ” 없습니다.</p> - <p>사용ìžê°€ 시스템 ì„¤ì •ì—서 언어를 ë³€ê²½í• ê²½ìš° + <p>사용ìžê°€ 시스템 ì„¤ì •ì—서 언어를 ë³€ê²½í• ê²½ìš° ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— ë³€ê²½ë 수 있습니다. 런타임ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ìžì„¸ížˆ ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤. </p> <p>다른 여러 ì–¸ì–´ì— ë§žê²Œ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì§€ì—화하기 위한 ì „ì²´ ì§€ì¹¨ì€ <a href="localization.html">ì§€ì—í™”</a>를 참조하ì‹ì‹œì˜¤.</p> - <p>ë˜í•œ, 현재 로케ì¼ì„ 나타내는 {@link android.content.res.Configuration#locale} 구성 í•„ë“œë„ + <p>ë˜í•œ, 현재 로케ì¼ì„ 나타내는 {@link android.content.res.Configuration#locale} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </td> </tr> @@ -368,22 +368,22 @@ supportsRtl}</a>ì„ {@code "true"}로 ì„¤ì •í•˜ê³ <a href="{@docRoot}guide/topi 등. </td> <td> - <p>í™”ë©´ì˜ ê¸°ë³¸ í¬ê¸°ë¡œ, 사용 가능한 화면 ì˜ì—ì˜ ê°€ìž¥ ì§§ì€ ì¹˜ìˆ˜ê°€ -나타냅니다. 구체ì 으로 ê¸°ê¸°ì˜ smallestWidth는 해당 í™”ë©´ì˜ ì´ìš© 가능한 높ì´ì™€ ë„ˆë¹„ì˜ -가장 ì§§ì€ ì¹˜ìˆ˜ë¥¼ ë§í•©ë‹ˆë‹¤(ì´ê²ƒì„ í™”ë©´ì— ëŒ€í•œ "가능한 한 가장 ì¢ì€ 너비"로 ìƒê°í•´ë„ ë©ë‹ˆë‹¤). ì´ í•œì •ìžë¥¼ 사용하면 -í™”ë©´ì˜ í˜„ìž¬ ë°©í–¥ì— ê´€ê³„ ì—†ì´ + <p>í™”ë©´ì˜ ê¸°ë³¸ í¬ê¸°ë¡œ, 사용 가능한 화면 ì˜ì—ì˜ ê°€ìž¥ ì§§ì€ ì¹˜ìˆ˜ê°€ +나타냅니다. 구체ì 으로 ê¸°ê¸°ì˜ smallestWidth는 해당 í™”ë©´ì˜ ì´ìš© 가능한 높ì´ì™€ ë„ˆë¹„ì˜ +가장 ì§§ì€ ì¹˜ìˆ˜ë¥¼ ë§í•©ë‹ˆë‹¤(ì´ê²ƒì„ í™”ë©´ì— ëŒ€í•œ "가능한 한 가장 ì¢ì€ 너비"로 ìƒê°í•´ë„ ë©ë‹ˆë‹¤). ì´ í•œì •ìžë¥¼ 사용하면 +í™”ë©´ì˜ í˜„ìž¬ ë°©í–¥ì— ê´€ê³„ ì—†ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 해당 UIì—서 ì´ìš© 가능한 너비 중 최소 {@code <N>}dps를 확보하ë„ë¡ í• ìˆ˜ 있습니다.</p> - <p>예를 들어, ë ˆì´ì•„ì›ƒì— ì–¸ì œë‚˜ + <p>예를 들어, ë ˆì´ì•„ì›ƒì— ì–¸ì œë‚˜ 600dp ì´ìƒì˜ 화면 최소 치수가 필요하다면, ì´ í•œì •ìžë¥¼ 사용하여 ë ˆì´ì•„웃 리소스, {@code -res/layout-sw600dp/}를 만들 수 있습니다. ì‹œìŠ¤í…œì´ ì´ëŸ¬í•œ 리소스를 사용하는 ê²ƒì€ ì‚¬ìš© 가능한 í™”ë©´ì˜ ìµœì†Œ 치수가 ì ì–´ë„ 600dpê°€ -ë˜ëŠ” 경우ë¿ì´ë©°, ì´ë•Œ 600dpë¼ëŠ” í¬ê¸°ê°€ ì‚¬ìš©ìž ìª½ì—서 ë³´ê¸°ì— ë†’ì´ì´ë“ 너비ì´ë“ +res/layout-sw600dp/}를 만들 수 있습니다. ì‹œìŠ¤í…œì´ ì´ëŸ¬í•œ 리소스를 사용하는 ê²ƒì€ ì‚¬ìš© 가능한 í™”ë©´ì˜ ìµœì†Œ 치수가 ì ì–´ë„ 600dpê°€ +ë˜ëŠ” 경우ë¿ì´ë©°, ì´ë•Œ 600dpë¼ëŠ” í¬ê¸°ê°€ ì‚¬ìš©ìž ìª½ì—서 ë³´ê¸°ì— ë†’ì´ì´ë“ 너비ì´ë“ 관계 없습니다. ì´ smallestWidth는 ê¸°ê¸°ì˜ ê³ ì •ëœ í™”ë©´ í¬ê¸° 특성입니다. <strong> ê¸°ê¸°ì˜ smallestWidth는 화면 ë°©í–¥ì´ ë³€ê²½ë˜ì–´ë„ 바뀌지 않습니다</strong>.</p> <p>ê¸°ê¸°ì˜ smallestWidth는 화면 장ì‹ê³¼ 시스템 UI를 ê°ì•ˆí•©ë‹ˆë‹¤. 예를 들어, 화면 ìƒì—서 최소 ë„ˆë¹„ì˜ ì¶• 주변 ê³µê°„ì„ ì°¨ì§€í•˜ëŠ” ì˜êµ¬ UI 요소가 있다면, -ì‹œìŠ¤í…œì€ smallestWidth를 ì‹¤ì œ 화면 í¬ê¸°ë³´ë‹¤ 작게 ì„ ì–¸í•©ë‹ˆë‹¤. -ì´ê²ƒì€ 개발ìžì˜ UIê°€ ì‚¬ìš©í• ìˆ˜ 없는 화면 픽셀ì´ê¸° 때문입니다. ë”°ë¼ì„œ 개발ìžê°€ 사용하는 ê°’ì€ -<em>ë ˆì´ì•„웃ì—서 요구하는</em> ì‹¤ì œ 최소 치수여야 합니다(ì¼ë°˜ì 으로 ì´ ê°’ì€ í™”ë©´ì˜ í˜„ìž¬ 방향과 ê´€ê³„ì—†ì´ +ì‹œìŠ¤í…œì€ smallestWidth를 ì‹¤ì œ 화면 í¬ê¸°ë³´ë‹¤ 작게 ì„ ì–¸í•©ë‹ˆë‹¤. +ì´ê²ƒì€ 개발ìžì˜ UIê°€ ì‚¬ìš©í• ìˆ˜ 없는 화면 픽셀ì´ê¸° 때문입니다. ë”°ë¼ì„œ 개발ìžê°€ 사용하는 ê°’ì€ +<em>ë ˆì´ì•„웃ì—서 요구하는</em> ì‹¤ì œ 최소 치수여야 합니다(ì¼ë°˜ì 으로 ì´ ê°’ì€ í™”ë©´ì˜ í˜„ìž¬ 방향과 ê´€ê³„ì—†ì´ ë ˆì´ì•„ì›ƒì´ ì§€ì›í•˜ëŠ” "최소 너비"ê°€ ë©ë‹ˆë‹¤.).</p> <p>다ìŒì˜ 몇몇 ê°’ì€ ë³´íŽ¸ì ì¸ í™”ë©´ í¬ê¸°ì— 대하여 ì‚¬ìš©í• ìˆ˜ 있습니다.</p> <ul> @@ -398,16 +398,16 @@ res/layout-sw600dp/}를 만들 수 있습니다. ì‹œìŠ¤í…œì´ ì´ëŸ¬í•œ ë¦¬ì†ŒìŠ <li>600x1024mdpi (7ì¸ì¹˜ 태블릿) ë“±ì˜ í™”ë©´ì—는 600ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</li> <li>720x1280mdpi (10ì¸ì¹˜ 태블릿) ë“±ì˜ í™”ë©´ì—는 720ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</li> </ul> - <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -smallestWidth í•œì •ìžì˜ 여러 ê°’ì´ í¬í•¨ëœ 여러 리소스 ë””ë ‰í„°ë¦¬ë¥¼ ì œê³µí•˜ë©´, ì‹œìŠ¤í…œì€ + <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +smallestWidth í•œì •ìžì˜ 여러 ê°’ì´ í¬í•¨ëœ 여러 리소스 ë””ë ‰í„°ë¦¬ë¥¼ ì œê³µí•˜ë©´, ì‹œìŠ¤í…œì€ ê¸°ê¸°ì˜ smallestWidthì— ê°€ìž¥ 가까운(그러나 ì´ë¥¼ 초과하지 않는) ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. </p> <p><em>API ë ˆë²¨ 13ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> <p>ì´ì™¸ì—ë„ ì• í”Œë¦¬ì¼€ì´ì…˜ê³¼ 호환ë˜ëŠ” ìµœì†Œí•œì˜ smallestWidth를 ì„ ì–¸í•˜ëŠ” <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code -android:requiresSmallestWidthDp}</a> ì†ì„±ê³¼ +android:requiresSmallestWidthDp}</a> ì†ì„±ê³¼ ê¸°ê¸°ì˜ smallestWidth ê°’ì„ ë³´ìœ í•œ {@link -android.content.res.Configuration#smallestScreenWidthDp} +android.content.res.Configuration#smallestScreenWidthDp} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> - <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” + <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> </td> @@ -421,21 +421,21 @@ android.content.res.Configuration#smallestScreenWidthDp} 등. </td> <td> - <p>리소스를 사용해야 하는 {@code dp} 단위ì—서 최소 ì´ìš© 가능한 화면 너비를 ì§€ì •í•©ë‹ˆë‹¤. -ì´ëŠ” <code><N></code> ê°’ì´ ì •ì˜í•©ë‹ˆë‹¤. ì´ êµ¬ì„± -ê°’ì€ í˜„ìž¬ ì‹¤ì œ ë„ˆë¹„ì— ë§žì¶”ê¸° 위해 화면 ë°©í–¥ì´ ê°€ë¡œì™€ 세로 사ì´ë¥¼ 오가며 바뀔 때 + <p>리소스를 사용해야 하는 {@code dp} 단위ì—서 최소 ì´ìš© 가능한 화면 너비를 ì§€ì •í•©ë‹ˆë‹¤. +ì´ëŠ” <code><N></code> ê°’ì´ ì •ì˜í•©ë‹ˆë‹¤. ì´ êµ¬ì„± +ê°’ì€ í˜„ìž¬ ì‹¤ì œ ë„ˆë¹„ì— ë§žì¶”ê¸° 위해 화면 ë°©í–¥ì´ ê°€ë¡œì™€ 세로 사ì´ë¥¼ 오가며 바뀔 때 변경ë©ë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ êµ¬ì„±ì— ëŒ€í•´ 서로 다른 ê°’ì´ í¬í•¨ëœ 여러 ê°œì˜ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ë¥¼ ì œê³µí•˜ë©´, -ì‹œìŠ¤í…œì€ ê¸°ê¸°ì˜ í˜„ìž¬ 화면 ë„ˆë¹„ì— ê°€ìž¥ 가까운(그러나 ì´ë¥¼ 초과하지 않는) -ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ê°’ì€ -화면 장ì‹ì„ ê°ì•ˆí•œ 것ì´ë¯€ë¡œ, ê¸°ê¸°ì˜ ì™¼ìª½ì´ë‚˜ 오른쪽 가장ìžë¦¬ì— -ì˜êµ¬ UI 요소가 ìžˆì„ ê²½ìš°, 기기는 +ì‹œìŠ¤í…œì€ ê¸°ê¸°ì˜ í˜„ìž¬ 화면 ë„ˆë¹„ì— ê°€ìž¥ 가까운(그러나 ì´ë¥¼ 초과하지 않는) +ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ê°’ì€ +화면 장ì‹ì„ ê°ì•ˆí•œ 것ì´ë¯€ë¡œ, ê¸°ê¸°ì˜ ì™¼ìª½ì´ë‚˜ 오른쪽 가장ìžë¦¬ì— +ì˜êµ¬ UI 요소가 ìžˆì„ ê²½ìš°, 기기는 ì´ëŸ¬í•œ UI 요소를 ê°ì•ˆí•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì´ìš© 가능한 ê³µê°„ì„ ì¤„ì—¬ì„œ ì‹¤ì œ 화면 í¬ê¸°ë³´ë‹¤ ìž‘ì€ ë„ˆë¹„ ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p> <p><em>API ë ˆë²¨ 13ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> <p>현재 화면 너비를 ë³´ìœ í•œ {@link android.content.res.Configuration#screenWidthDp} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> - <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” + <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> </td> @@ -449,25 +449,25 @@ android.content.res.Configuration#smallestScreenWidthDp} 등. </td> <td> - <p>리소스가 사용ë˜ì–´ì•¼ 하는 ìµœì†Œí•œì˜ ì‚¬ìš© 가능한 화면 높ì´ë¥¼ "dp" 단위로 나타냅니다. -ì´ëŠ” <code><N></code> ê°’ì´ ì •ì˜í•©ë‹ˆë‹¤. ì´ êµ¬ì„± -ê°’ì€ í˜„ìž¬ ì‹¤ì œ 높ì´ì— 맞추기 위해 화면 ë°©í–¥ì´ ê°€ë¡œì™€ 세로 사ì´ë¥¼ 오가며 바뀔 때 + <p>리소스가 사용ë˜ì–´ì•¼ 하는 ìµœì†Œí•œì˜ ì‚¬ìš© 가능한 화면 높ì´ë¥¼ "dp" 단위로 나타냅니다. +ì´ëŠ” <code><N></code> ê°’ì´ ì •ì˜í•©ë‹ˆë‹¤. ì´ êµ¬ì„± +ê°’ì€ í˜„ìž¬ ì‹¤ì œ 높ì´ì— 맞추기 위해 화면 ë°©í–¥ì´ ê°€ë¡œì™€ 세로 사ì´ë¥¼ 오가며 바뀔 때 변경ë©ë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ êµ¬ì„±ì— ëŒ€í•´ 서로 다른 ê°’ì´ í¬í•¨ëœ 여러 ê°œì˜ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ë¥¼ ì œê³µí•˜ë©´, -ì‹œìŠ¤í…œì€ ê¸°ê¸°ì˜ í˜„ìž¬ 화면 높ì´ì— 가장 가까운(그러나 ì´ë¥¼ 초과하지 않는) -ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ê°’ì€ -화면 장ì‹ì„ ê°ì•ˆí•œ 것ì´ë¯€ë¡œ, ê¸°ê¸°ì˜ ìƒë‹¨ì´ë‚˜ 하단 가장ìžë¦¬ì— -ì˜êµ¬ UI 요소가 ìžˆì„ ê²½ìš°, 기기는 +ì‹œìŠ¤í…œì€ ê¸°ê¸°ì˜ í˜„ìž¬ 화면 높ì´ì— 가장 가까운(그러나 ì´ë¥¼ 초과하지 않는) +ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ê°’ì€ +화면 장ì‹ì„ ê°ì•ˆí•œ 것ì´ë¯€ë¡œ, ê¸°ê¸°ì˜ ìƒë‹¨ì´ë‚˜ 하단 가장ìžë¦¬ì— +ì˜êµ¬ UI 요소가 ìžˆì„ ê²½ìš°, 기기는 ì´ëŸ¬í•œ UI 요소를 ê°ì•ˆí•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì´ìš© 가능한 ê³µê°„ì„ ì¤„ì—¬ì„œ - ì‹¤ì œ 화면 í¬ê¸°ë³´ë‹¤ ìž‘ì€ ë†’ì´ ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. -ìƒíƒœ í‘œì‹œì¤„ì— ê³ ì •ë˜ì§€ ì•Šì€ í™”ë©´ 장ì‹(예를 들어 -ì „í™” ìƒíƒœ í‘œì‹œì¤„ì€ ì „ì²´ 화면ì—서 숨길 수 있ìŒ)ì€ ì—¬ê¸°ì—서 ê°ì•ˆí•˜ì§€ <em>ì•Šì•˜ê³ </em>, -ì œëª© 표시줄ì´ë‚˜ 작업 ëª¨ìŒ ë“±ì˜ ì°½ 장ì‹ë„ ê°ì•ˆë˜ì§€ 않았으므로, ì• í”Œë¦¬ì¼€ì´ì…˜ 입장ì—서는 ìžì‹ ì´ ì§€ì •í•œ 것보다 ì–´ëŠ ì •ë„ ìž‘ì€ ê³µê°„ì„ + ì‹¤ì œ 화면 í¬ê¸°ë³´ë‹¤ ìž‘ì€ ë†’ì´ ê°’ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. +ìƒíƒœ í‘œì‹œì¤„ì— ê³ ì •ë˜ì§€ ì•Šì€ í™”ë©´ 장ì‹(예를 들어 +ì „í™” ìƒíƒœ í‘œì‹œì¤„ì€ ì „ì²´ 화면ì—서 숨길 수 있ìŒ)ì€ ì—¬ê¸°ì—서 ê°ì•ˆí•˜ì§€ <em>ì•Šì•˜ê³ </em>, +ì œëª© 표시줄ì´ë‚˜ 작업 ëª¨ìŒ ë“±ì˜ ì°½ 장ì‹ë„ ê°ì•ˆë˜ì§€ 않았으므로, ì• í”Œë¦¬ì¼€ì´ì…˜ 입장ì—서는 ìžì‹ ì´ ì§€ì •í•œ 것보다 ì–´ëŠ ì •ë„ ìž‘ì€ ê³µê°„ì„ ë°›ì•„ë“¤ì¼ ëŒ€ë¹„ë¥¼ 해야 합니다. <p><em>API ë ˆë²¨ 13ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> <p>현재 화면 너비를 ë³´ìœ í•œ {@link android.content.res.Configuration#screenHeightDp} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> - <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” + <p>여러 가지 í™”ë©´ì— ë§žëŠ” ë””ìžì¸ê³¼ í•œì •ìž ì‚¬ìš©ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a> ê°œë°œìž ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> </td> @@ -482,39 +482,39 @@ android.content.res.Configuration#smallestScreenWidthDp} </td> <td> <ul class="nolist"> - <li>{@code small}: ì €ë°€ë„ QVGA 화면과 비슷한 + <li>{@code small}: ì €ë°€ë„ QVGA 화면과 비슷한 í¬ê¸°ì˜ 화면입니다. ìž‘ì€ í™”ë©´ì˜ ìµœì†Œ ë ˆì´ì•„웃 í¬ê¸°ëŠ” -약 320x426 dp단위입니다. ì´ í™”ë©´ì˜ ì˜ˆì‹œë¡œëŠ” QVGA ì €ë°€ë„ ë° VGA ê³ ë°€ë„ê°€ +약 320x426 dp단위입니다. ì´ í™”ë©´ì˜ ì˜ˆì‹œë¡œëŠ” QVGA ì €ë°€ë„ ë° VGA ê³ ë°€ë„ê°€ 있습니다.</li> - <li>{@code normal}: ì¤‘ë°€ë„ HVGA 화면과 + <li>{@code normal}: ì¤‘ë°€ë„ HVGA 화면과 비슷한 í¬ê¸°ì˜ 화면입니다. ì •ìƒ í™”ë©´ì˜ - 최소 ë ˆì´ì•„웃 í¬ê¸°ëŠ” 약 320x470 dp 단위입니다. ì´ í™”ë©´ì˜ ì˜ˆë¡œëŠ” + 최소 ë ˆì´ì•„웃 í¬ê¸°ëŠ” 약 320x470 dp 단위입니다. ì´ í™”ë©´ì˜ ì˜ˆë¡œëŠ” WQVGA ì €ë°€ë„, HVGA 중밀ë„, WVGA ê³ ë°€ë„ ë“±ì´ ìžˆìŠµë‹ˆë‹¤. </li> - <li>{@code large}: ì¤‘ë°€ë„ VGA 화면과 + <li>{@code large}: ì¤‘ë°€ë„ VGA 화면과 비슷한 í¬ê¸°ì˜ 화면입니다. í° í™”ë©´ì˜ ìµœì†Œ ë ˆì´ì•„웃 í¬ê¸°ëŠ” 약 480x640 dp 단위입니다. ì´ í™”ë©´ì˜ ì˜ˆì‹œë¡œëŠ” VGA ë° WVGA ì¤‘ë°€ë„ í™”ë©´ì´ ìžˆìŠµë‹ˆë‹¤.</li> - <li>{@code xlarge}: ì¼ë°˜ì ì¸ ì¤‘ë°€ë„ HVGA 화면보다 ìƒë‹¹ížˆ í° í™”ë©´ì„ + <li>{@code xlarge}: ì¼ë°˜ì ì¸ ì¤‘ë°€ë„ HVGA 화면보다 ìƒë‹¹ížˆ í° í™”ë©´ì„ ë§í•©ë‹ˆë‹¤. 초대형 í™”ë©´ì˜ - 최소 ë ˆì´ì•„웃 í¬ê¸°ëŠ” 약 720x960 dp 단위입니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, 초대형 화면 기기는 -ì£¼ë¨¸ë‹ˆì— ë„£ì–´ ë‹¤ë‹ˆê¸°ì— ë„ˆë¬´ í½ë‹ˆë‹¤. ë”°ë¼ì„œ 태블릿 스타ì¼ì˜ ê¸°ê¸°ì¼ ê°€ëŠ¥ì„±ì´ + 최소 ë ˆì´ì•„웃 í¬ê¸°ëŠ” 약 720x960 dp 단위입니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°, 초대형 화면 기기는 +ì£¼ë¨¸ë‹ˆì— ë„£ì–´ ë‹¤ë‹ˆê¸°ì— ë„ˆë¬´ í½ë‹ˆë‹¤. ë”°ë¼ì„œ 태블릿 스타ì¼ì˜ ê¸°ê¸°ì¼ ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. <em>API ë ˆë²¨ 9ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></li> </ul> - <p class="note"><strong>ì°¸ê³ :</strong> í¬ê¸° í•œì •ìžë¥¼ 사용하ë”ë¼ë„ 해당 리소스가 ê·¸ í¬ê¸°ì˜ 화면 -<em>ì „ìš©</em>ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤. 현재 기기 구성과 ë”ìš± 잘 맞는 í•œì •ìžê°€ í¬í•¨ëœ 대체 리소스를 -ì œê³µí•˜ì§€ 않으면, + <p class="note"><strong>ì°¸ê³ :</strong> í¬ê¸° í•œì •ìžë¥¼ 사용하ë”ë¼ë„ 해당 리소스가 ê·¸ í¬ê¸°ì˜ 화면 +<em>ì „ìš©</em>ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤. 현재 기기 구성과 ë”ìš± 잘 맞는 í•œì •ìžê°€ í¬í•¨ëœ 대체 리소스를 +ì œê³µí•˜ì§€ 않으면, ì‹œìŠ¤í…œì´ <a href="#BestMatch">가장 잘 ì¼ì¹˜í•˜ëŠ”</a> 리소스를 사용합니다.</p> <p class="caution"><strong>주ì˜:</strong> ëª¨ë“ ë¦¬ì†ŒìŠ¤ê°€ 현재 화면보다 <em>í°</em> í¬ê¸° í•œì •ìžë¥¼ 사용하는 경우, ì‹œìŠ¤í…œì€ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하지 <strong>않으며</strong> ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ëŸ°íƒ€ìž„ì— ìž‘ë™ì´ 중단ë©ë‹ˆë‹¤(예를 들어, ëª¨ë“ ë ˆì´ì•„웃 ë¦¬ì†ŒìŠ¤ì— {@code xlarge} í•œì •ìžê°€ 태그ë˜ì–´ 있지만 기기는 ì¼ë°˜ í¬ê¸° í™”ë©´ì¼ ê²½ìš° ).</p> <p><em>API ë ˆë²¨ 4ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> - - <p>ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 + + <p>ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> - <p>{@link android.content.res.Configuration#screenLayout} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. -ì´ê²ƒì€ í™”ë©´ì´ ì†Œí˜•, ì¼ë°˜ í¬ê¸° ë˜ëŠ” + <p>{@link android.content.res.Configuration#screenLayout} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. +ì´ê²ƒì€ í™”ë©´ì´ ì†Œí˜•, ì¼ë°˜ í¬ê¸° ë˜ëŠ” 대형ì¸ì§€ë¥¼ 나타냅니다.</p> </td> </tr> @@ -530,9 +530,9 @@ xlarge} í•œì •ìžê°€ 태그ë˜ì–´ 있지만 기기는 ì¼ë°˜ í¬ê¸° í™”ë©´ì¼ ê² <li>{@code notlong}: QVGA, HVGA ë° VGA ë“±ì˜ ê¸¸ì§€ ì•Šì€ í™”ë©´</li> </ul> <p><em>API ë ˆë²¨ 4ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> - <p>ì´ê²ƒì€ ìˆœì „ížˆ 화면 비율ì—ë§Œ 기초합니다("긴" í™”ë©´ì´ ë” ë„“ìŠµë‹ˆë‹¤). ì´ëŠ” + <p>ì´ê²ƒì€ ìˆœì „ížˆ 화면 비율ì—ë§Œ 기초합니다("긴" í™”ë©´ì´ ë” ë„“ìŠµë‹ˆë‹¤). ì´ëŠ” 화면 방향과 관계가 없습니다.</p> - <p>{@link android.content.res.Configuration#screenLayout}ë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + <p>{@link android.content.res.Configuration#screenLayout}ë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ê²ƒì€ í™”ë©´ì´ ê¸´ 화면ì¸ì§€ 여부를 나타냅니다.</p> </td> </tr> @@ -549,10 +549,10 @@ xlarge} í•œì •ìžê°€ 태그ë˜ì–´ 있지만 기기는 ì¼ë°˜ í¬ê¸° í™”ë©´ì¼ ê² <li>{@code land}: 기기가 가로 ë°©í–¥(수í‰)입니다.</li> <!-- Square mode is currently not used. --> </ul> - <p>ì´ê²ƒì€ 사용ìžê°€ í™”ë©´ì„ ëŒë¦¬ëŠ” 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— -변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ + <p>ì´ê²ƒì€ 사용ìžê°€ í™”ë©´ì„ ëŒë¦¬ëŠ” 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— +변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤.</p> - <p>{@link android.content.res.Configuration#orientation} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + <p>{@link android.content.res.Configuration#orientation} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ëŠ” 현재 기기 ë°©í–¥ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</p> </td> </tr> @@ -569,21 +569,21 @@ xlarge} í•œì •ìžê°€ 태그ë˜ì–´ 있지만 기기는 ì¼ë°˜ í¬ê¸° í™”ë©´ì¼ ê² <ul class="nolist"> <li>{@code car}: 기기가 차량용 ë„í¬ì—서 표시ë˜ê³ 있습니다.</li> <li>{@code desk}: 기기가 ë°ìФí¬ìš© ë„í¬ì—서 표시ë˜ê³ 있습니다.</li> - <li>{@code television}: 기기가 í…”ë ˆë¹„ì „ì—서 표시ë˜ê³ 있으며, -UIê°€ í° í™”ë©´ì— ìžˆê³ ì‚¬ìš©ìžê°€ 여기ì—서 멀리 ë–¨ì–´ì ¸ 있는 -"í… í’‹(ten foot)" í™˜ê²½ì„ ì œê³µí•˜ê³ ìžˆìŠµë‹ˆë‹¤. ì´ëŠ” 주로 DPAD ë˜ëŠ” + <li>{@code television}: 기기가 í…”ë ˆë¹„ì „ì—서 표시ë˜ê³ 있으며, +UIê°€ í° í™”ë©´ì— ìžˆê³ ì‚¬ìš©ìžê°€ 여기ì—서 멀리 ë–¨ì–´ì ¸ 있는 +"í… í’‹(ten foot)" í™˜ê²½ì„ ì œê³µí•˜ê³ ìžˆìŠµë‹ˆë‹¤. ì´ëŠ” 주로 DPAD ë˜ëŠ” 기타 비-í¬ì¸í„° ìƒí˜¸ 작용 ì£¼ë³€ì„ ê°€ë¦¬í‚µë‹ˆë‹¤.</li> - <li>{@code appliance}: 기기가 ê°€ì „ ì œí’ˆ ì—í• ì„ í•˜ê³ ìžˆìœ¼ë©°, ë””ìŠ¤í”Œë ˆì´ + <li>{@code appliance}: 기기가 ê°€ì „ ì œí’ˆ ì—í• ì„ í•˜ê³ ìžˆìœ¼ë©°, ë””ìŠ¤í”Œë ˆì´ í™”ë©´ì´ ì—†ìŠµë‹ˆë‹¤.</li> <li>{@code watch}: ê¸°ê¸°ì— ë””ìŠ¤í”Œë ˆì´ í™”ë©´ì´ ìžˆê³ ì†ëª©ì— ì°©ìš©ë©ë‹ˆë‹¤.</li> </ul> <p><em>API ë ˆë²¨ 8ì—서 추가ë˜ì—ˆê³ , í…”ë ˆë¹„ì „ì€ API 13ì—서, 시계는 API 20ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> - <p>기기가 ë„í¬ì— 삽입ë˜ê±°ë‚˜ ì œê±°ë 때 ì•±ì´ ì‘답하는 ë°©ì‹ì— 관한 ì •ë³´ëŠ” -<a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">ë„킹 ìƒíƒœ ë° ìœ í˜• + <p>기기가 ë„í¬ì— 삽입ë˜ê±°ë‚˜ ì œê±°ë 때 ì•±ì´ ì‘답하는 ë°©ì‹ì— 관한 ì •ë³´ëŠ” +<a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">ë„킹 ìƒíƒœ ë° ìœ í˜• íŒë³„ê³¼ 모니터ë§</a>ì„ ì½ì–´ë³´ì‹ì‹œì˜¤.</p> - <p>ì´ê²ƒì€ 사용ìžê°€ 기기를 ë„í¬ì— 놓는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— + <p>ì´ê²ƒì€ 사용ìžê°€ 기기를 ë„í¬ì— 놓는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— ë³€ê²½ë 수 있습니다. ì´ëŸ¬í•œ 모드 중 몇 가지는 {@link -android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 +android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤.</p> </td> </tr> @@ -599,9 +599,9 @@ android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ <li>{@code notnight}: 주간</li> </ul> <p><em>API ë ˆë²¨ 8ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></p> - <p>ì´ê²ƒì€ 야간 모드가 ìžë™ ëª¨ë“œì¸ ìƒíƒœ(기본)ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 수명 ì¤‘ì— -변경ë 수 있습니다. ì´ ê²½ìš° 모드는 하루 중 시간대를 기반으로 변경ë©ë‹ˆë‹¤. ì´ ëª¨ë“œëŠ” -{@link android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. ì´ê²ƒì´ 런타임 중 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 + <p>ì´ê²ƒì€ 야간 모드가 ìžë™ ëª¨ë“œì¸ ìƒíƒœ(기본)ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 수명 ì¤‘ì— +변경ë 수 있습니다. ì´ ê²½ìš° 모드는 하루 중 시간대를 기반으로 변경ë©ë‹ˆë‹¤. ì´ ëª¨ë“œëŠ” +{@link android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. ì´ê²ƒì´ 런타임 중 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤.</p> </td> </tr> @@ -623,33 +623,33 @@ android.app.UiModeManager}를 사용하여 활성화 ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ <li>{@code mdpi}: 중밀ë„(ì¼ë°˜ì ì¸ HVGAì—서) 화면, 약 160dpi.</li> <li>{@code hdpi}: ê³ ë°€ë„ í™”ë©´, 약 240dpi.</li> - <li>{@code xhdpi}: ì´ˆê³ ë°€ë„ í™”ë©´, 약 320dpi. <em>API ë ˆë²¨ 8ì—서 + <li>{@code xhdpi}: ì´ˆê³ ë°€ë„ í™”ë©´, 약 320dpi. <em>API ë ˆë²¨ 8ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></li> - <li>{@code xxhdpi}: ìŠˆí¼ ì´ˆê³ ë°€ë„ í™”ë©´, 약 480dpi. <em>API ë ˆë²¨ 16ì—서 + <li>{@code xxhdpi}: ìŠˆí¼ ì´ˆê³ ë°€ë„ í™”ë©´, 약 480dpi. <em>API ë ˆë²¨ 16ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></li> - <li>{@code xxxhdpi}: ìš¸íŠ¸ë¼ ìŠˆí¼ ì´ˆê³ ë°€ë„ í™”ë©´ 사용(시작 ê´€ë¦¬ìž ì•„ì´ì½˜ë§Œ 해당, -<em>다중 화면 ì§€ì›</em>ì˜ -<a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">ì°¸ê³ </a>를 참조하ì‹ì‹œì˜¤), 약 640dpi. <em>API ë ˆë²¨ 18ì—서 + <li>{@code xxxhdpi}: ìš¸íŠ¸ë¼ ìŠˆí¼ ì´ˆê³ ë°€ë„ í™”ë©´ 사용(시작 ê´€ë¦¬ìž ì•„ì´ì½˜ë§Œ 해당, +<em>다중 화면 ì§€ì›</em>ì˜ +<a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">ì°¸ê³ </a>를 참조하ì‹ì‹œì˜¤), 약 640dpi. <em>API ë ˆë²¨ 18ì—서 추가ë˜ì—ˆìŠµë‹ˆë‹¤.</em></li> - <li>{@code nodpi}: ì´ê²ƒì€ 기기 ë°€ë„ì— ì¼ì¹˜í•˜ë„ë¡ í¬ê¸°ë¥¼ ì¡°ì •í•˜ê³ ìž í•˜ì§€ 않는 비트맵 ë¦¬ì†ŒìŠ¤ì— + <li>{@code nodpi}: ì´ê²ƒì€ 기기 ë°€ë„ì— ì¼ì¹˜í•˜ë„ë¡ í¬ê¸°ë¥¼ ì¡°ì •í•˜ê³ ìž í•˜ì§€ 않는 비트맵 ë¦¬ì†ŒìŠ¤ì— ì‚¬ìš©í• ìˆ˜ 있습니다.</li> - <li>{@code tvdpi}: Mdpi와 hdpi ì‚¬ì´ ì–´ë”˜ê°€ì— í•´ë‹¹ë˜ëŠ” 화면, 약 213dpi. ì´ê²ƒì€ -"기본" ë°€ë„ ê·¸ë£¹ìœ¼ë¡œ 간주ë˜ì§€ 않습니다. ì´ëŠ” 대체로 í…”ë ˆë¹„ì „ìš©ìœ¼ë¡œ 만들어진 것ì´ë©° -ëŒ€ë¶€ë¶„ì˜ ì•±ì—는 필요하지 않는 ê²ƒì´ ì •ìƒìž…니다. mdpi ë° hdpië§Œ ì œê³µí•˜ë©´ ëŒ€ë¶€ë¶„ì˜ ì•±ì—는 ì¶©ë¶„í•˜ê³ + <li>{@code tvdpi}: Mdpi와 hdpi ì‚¬ì´ ì–´ë”˜ê°€ì— í•´ë‹¹ë˜ëŠ” 화면, 약 213dpi. ì´ê²ƒì€ +"기본" ë°€ë„ ê·¸ë£¹ìœ¼ë¡œ 간주ë˜ì§€ 않습니다. ì´ëŠ” 대체로 í…”ë ˆë¹„ì „ìš©ìœ¼ë¡œ 만들어진 것ì´ë©° +ëŒ€ë¶€ë¶„ì˜ ì•±ì—는 필요하지 않는 ê²ƒì´ ì •ìƒìž…니다. mdpi ë° hdpië§Œ ì œê³µí•˜ë©´ ëŒ€ë¶€ë¶„ì˜ ì•±ì—는 ì¶©ë¶„í•˜ê³ ì‹œìŠ¤í…œì´ í•„ìš”ì— ë”°ë¼ í¬ê¸°ë¥¼ ì¡°ì •í•´ì¤ë‹ˆë‹¤. ì´ í•œì •ìžëŠ” API ë ˆë²¨ 13ê³¼ 함께 ë„ìž…ë˜ì—ˆìŠµë‹ˆë‹¤.</li> </ul> - <p>여섯 가지 기본 ë°€ë„ê°„ì— 3:4:6:8:12:16 비율 ì²™ë„ê°€ 있습니다(tvdpi ë°€ë„는 + <p>여섯 가지 기본 ë°€ë„ê°„ì— 3:4:6:8:12:16 비율 ì²™ë„ê°€ 있습니다(tvdpi ë°€ë„는 무시). 그러므로 ldpiì˜ 9x9 ë¹„íŠ¸ë§µì€ mdpiì—서 12x12ì´ê³ , hdpiì—서 18x18, xhdpiì—서 24x24 등, ì´ëŸ° ì‹ìœ¼ë¡œ ì ìš©ë©ë‹ˆë‹¤. </p> - <p>ì´ë¯¸ì§€ 리소스가 í…”ë ˆë¹„ì „ì´ë‚˜ íŠ¹ì • 기기ì—서 ì œëŒ€ë¡œ ë³´ì´ì§€ ì•ŠëŠ”ë‹¤ê³ ê²°ì •í•˜ê³ + <p>ì´ë¯¸ì§€ 리소스가 í…”ë ˆë¹„ì „ì´ë‚˜ íŠ¹ì • 기기ì—서 ì œëŒ€ë¡œ ë³´ì´ì§€ ì•ŠëŠ”ë‹¤ê³ ê²°ì •í•˜ê³ tvdpi 리소스를 ì‚¬ìš©í•˜ë ¤ í• ê²½ìš°, ë°°ìœ¨ì€ 1.33*mdpi입니다. 예를 들어, mdpi í™”ë©´ì˜ 100px x 100px ì´ë¯¸ì§€ëŠ” tvdpiì—서 133px x 133pxê°€ ë˜ì–´ì•¼ 합니다.</p> - <p class="note"><strong>ì°¸ê³ :</strong> ë°€ë„ í•œì •ìžë¥¼ 사용하ë”ë¼ë„ 해당 리소스가 ê·¸ ë°€ë„ì˜ í™”ë©´ -<em>ì „ìš©</em>ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤. 현재 기기 구성과 ë”ìš± 잘 맞는 í•œì •ìžê°€ í¬í•¨ëœ 대체 리소스를 -ì œê³µí•˜ì§€ 않으면, + <p class="note"><strong>ì°¸ê³ :</strong> ë°€ë„ í•œì •ìžë¥¼ 사용하ë”ë¼ë„ 해당 리소스가 ê·¸ ë°€ë„ì˜ í™”ë©´ +<em>ì „ìš©</em>ì´ë¼ëŠ” ëœ»ì€ ì•„ë‹™ë‹ˆë‹¤. 현재 기기 구성과 ë”ìš± 잘 맞는 í•œì •ìžê°€ í¬í•¨ëœ 대체 리소스를 +ì œê³µí•˜ì§€ 않으면, ì‹œìŠ¤í…œì´ <a href="#BestMatch">가장 잘 ì¼ì¹˜í•˜ëŠ”</a> 리소스를 사용합니다.</p> - <p>다양한 í™”ì§ˆì„ ì²˜ë¦¬í•˜ëŠ” 방법과 -Androidê°€ 현재 í™”ì§ˆì— ë§žì¶° ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•˜ëŠ” ë°©ë²•ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 + <p>다양한 í™”ì§ˆì„ ì²˜ë¦¬í•˜ëŠ” 방법과 +Androidê°€ 현재 í™”ì§ˆì— ë§žì¶° ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•˜ëŠ” ë°©ë²•ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </td> </tr> @@ -662,10 +662,10 @@ Androidê°€ 현재 í™”ì§ˆì— ë§žì¶° ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•˜ëŠ” ë°©ë²•ì— ê´€í•œ ìž <td> <ul class="nolist"> <li>{@code notouch}: ê¸°ê¸°ì— í„°ì¹˜ 스í¬ë¦°ì´ 없습니다.</li> - <li>{@code finger}: ê¸°ê¸°ì— í„°ì¹˜ 스í¬ë¦°ì´ 있으며 ì´ë¥¼ + <li>{@code finger}: ê¸°ê¸°ì— í„°ì¹˜ 스í¬ë¦°ì´ 있으며 ì´ë¥¼ 사용ìžì˜ ì†ê°€ë½ì„ 사용한 ë°©í–¥ 지시 ìƒí˜¸ ìž‘ìš©ì„ í†µí•´ ì“°ë„ë¡ ë˜ì–´ 있습니다.</li> </ul> - <p>{@link android.content.res.Configuration#touchscreen} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + <p>{@link android.content.res.Configuration#touchscreen} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ëŠ” 기기ì—서 사용ë˜ëŠ” 터치 스í¬ë¦°ì˜ ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</p> </td> </tr> @@ -678,25 +678,25 @@ Androidê°€ 현재 í™”ì§ˆì— ë§žì¶° ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•˜ëŠ” ë°©ë²•ì— ê´€í•œ ìž </td> <td> <ul class="nolist"> - <li>{@code keysexposed}: 기기ì—서 키보드를 ì‚¬ìš©í• ìˆ˜ 있습니다. í‚¤ë³´ë“œì— -소프트웨어 키보드가 활성화ë˜ì–´ 있으면(ì´ëŸ´ ê°€ëŠ¥ì„±ì´ í½ë‹ˆë‹¤), 하드웨어 키보드가 사용ìžì—게 노출ë˜ì–´ 있지 -<em>않거나</em> ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 키보드가 ì—†ë”ë¼ë„ ì´ ë¦¬ì†ŒìŠ¤ë¥¼ ì‚¬ìš©í• ìˆ˜ 있습니다. 소프트웨어 -키보드가 ì œê³µë˜ì–´ 있지 않거나 비활성화ë˜ì–´ 있는 경우 ì´ê²ƒì€ 하드웨어 키보드가 노출ë˜ì–´ ìžˆì„ ë•Œì—ë§Œ + <li>{@code keysexposed}: 기기ì—서 키보드를 ì‚¬ìš©í• ìˆ˜ 있습니다. í‚¤ë³´ë“œì— +소프트웨어 키보드가 활성화ë˜ì–´ 있으면(ì´ëŸ´ ê°€ëŠ¥ì„±ì´ í½ë‹ˆë‹¤), 하드웨어 키보드가 사용ìžì—게 노출ë˜ì–´ 있지 +<em>않거나</em> ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 키보드가 ì—†ë”ë¼ë„ ì´ ë¦¬ì†ŒìŠ¤ë¥¼ ì‚¬ìš©í• ìˆ˜ 있습니다. 소프트웨어 +키보드가 ì œê³µë˜ì–´ 있지 않거나 비활성화ë˜ì–´ 있는 경우 ì´ê²ƒì€ 하드웨어 키보드가 노출ë˜ì–´ ìžˆì„ ë•Œì—ë§Œ ì‚¬ìš©í• ìˆ˜ 있습니다.</li> - <li>{@code keyshidden}: 기기ì—서 하드웨어 키보드를 ì‚¬ìš©í• ìˆ˜ 있지만 + <li>{@code keyshidden}: 기기ì—서 하드웨어 키보드를 ì‚¬ìš©í• ìˆ˜ 있지만 ìˆ¨ê²¨ì ¸ ìžˆê³ <em>ì´ì— ë”하여</em> ê¸°ê¸°ì— ì†Œí”„íŠ¸ì›¨ì–´ 키보드가 활성화ë˜ì–´ 있지 <em>않습니다</em>.</li> - <li>{@code keyssoft}: ê¸°ê¸°ì— í™œì„±í™”ëœ ì†Œí”„íŠ¸ì›¨ì–´ 키보드가 있습니다(표시 여부는 + <li>{@code keyssoft}: ê¸°ê¸°ì— í™œì„±í™”ëœ ì†Œí”„íŠ¸ì›¨ì–´ 키보드가 있습니다(표시 여부는 무관).</li> </ul> <p><code>keysexposed</code> 리소스를 ì œê³µí•˜ì§€ë§Œ <code>keyssoft</code> -리소스는 ì œê³µí•˜ì§€ 않는다면, ì‹œìŠ¤í…œì€ ì†Œí”„íŠ¸ì›¨ì–´ 키보드가 활성화ë˜ì–´ 있는 ë™ì•ˆì€ 키보드가 ë³´ì´ëŠ”ì§€ 여부와 ê´€ê³„ì—†ì´ <code>keysexposed</code> +리소스는 ì œê³µí•˜ì§€ 않는다면, ì‹œìŠ¤í…œì€ ì†Œí”„íŠ¸ì›¨ì–´ 키보드가 활성화ë˜ì–´ 있는 ë™ì•ˆì€ 키보드가 ë³´ì´ëŠ”ì§€ 여부와 ê´€ê³„ì—†ì´ <code>keysexposed</code> 리소스를 사용합니다.</p> - <p>ì´ê²ƒì€ 사용ìžê°€ 하드웨어 키보드를 여는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— -변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 + <p>ì´ê²ƒì€ 사용ìžê°€ 하드웨어 키보드를 여는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— +변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤.</p> <p>ë˜í•œ, 구성 필드 {@link android.content.res.Configuration#hardKeyboardHidden}ê³¼ {@link -android.content.res.Configuration#keyboardHidden}ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ í•„ë“œëŠ” ê°ê° 하드웨어 í‚¤ë³´ë“œì˜ ê°€ì‹œì„±ê³¼ +android.content.res.Configuration#keyboardHidden}ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ í•„ë“œëŠ” ê°ê° 하드웨어 í‚¤ë³´ë“œì˜ ê°€ì‹œì„±ê³¼ ëª¨ë“ ì¢…ë¥˜ì˜ í‚¤ë³´ë“œ(소프트웨어 í¬í•¨)ì˜ ê°€ì‹œì„±ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</p> </td> </tr> @@ -710,13 +710,13 @@ android.content.res.Configuration#keyboardHidden}ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ í•„ <td> <ul class="nolist"> <li>{@code nokeys}: ê¸°ê¸°ì— í…스트 ìž…ë ¥ì„ ìœ„í•œ 하드웨어 키가 없습니다.</li> - <li>{@code qwerty}: ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 쿼티 키보드가 있습니다(ì´ê²ƒì´ + <li>{@code qwerty}: ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 쿼티 키보드가 있습니다(ì´ê²ƒì´ ì‚¬ìš©ìž ì—게 표시ë˜ëŠ”ì§€ 여부는 무관).</li> - <li>{@code 12key}: ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 12-키 키보드가 있습니다(ì´ê²ƒì´ 사용ìžì—게 표시ë˜ëŠ”ì§€ 여부는 + <li>{@code 12key}: ê¸°ê¸°ì— í•˜ë“œì›¨ì–´ 12-키 키보드가 있습니다(ì´ê²ƒì´ 사용ìžì—게 표시ë˜ëŠ”ì§€ 여부는 무관).</li> </ul> - <p>{@link android.content.res.Configuration#keyboard} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + <p>{@link android.content.res.Configuration#keyboard} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ëŠ” 기본 í…스트 ìž…ë ¥ 메서드를 ì‚¬ìš©í• ìˆ˜ 있는지 여부를 나타냅니다.</p> </td> </tr> @@ -729,13 +729,13 @@ android.content.res.Configuration#keyboardHidden}ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ í•„ <td> <ul class="nolist"> <li>{@code navexposed}: 사용ìžê°€ íƒìƒ‰ 키를 ì‚¬ìš©í• ìˆ˜ 있습니다.</li> - <li>{@code navhidden}: íƒìƒ‰ 키를 ì‚¬ìš©í• ìˆ˜ 없습니다(예: 닫힌 뚜껑 ë’¤ì— ìžˆëŠ” + <li>{@code navhidden}: íƒìƒ‰ 키를 ì‚¬ìš©í• ìˆ˜ 없습니다(예: 닫힌 뚜껑 ë’¤ì— ìžˆëŠ” 경우).</li> </ul> - <p>ì´ê²ƒì€ 사용ìžê°€ íƒìƒ‰ 키를 드러내는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— -변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 + <p>ì´ê²ƒì€ 사용ìžê°€ íƒìƒ‰ 키를 드러내는 경우 ì• í”Œë¦¬ì¼€ì´ì…˜ 수명 ì¤‘ì— +변경ë 수 있습니다. ì´ê²ƒì´ ëŸ°íƒ€ìž„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì–´ë–¤ ì˜í–¥ì„ 미치는지 ì•Œì•„ë³´ë ¤ë©´ <a href="runtime-changes.html">런타임 변경 처리</a>를 참조하ì‹ì‹œì˜¤.</p> - <p>{@link android.content.res.Configuration#navigationHidden} 구성 + <p>{@link android.content.res.Configuration#navigationHidden} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ëŠ” íƒìƒ‰ 키가 ìˆ¨ê²¨ì ¸ 있는지 여부를 나타냅니다.</p> </td> </tr> @@ -749,13 +749,13 @@ android.content.res.Configuration#keyboardHidden}ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ í•„ </td> <td> <ul class="nolist"> - <li>{@code nonav}: ê¸°ê¸°ì— í„°ì¹˜ 스í¬ë¦°ì„ ì œì™¸í•˜ê³ ë‹¤ë¥¸ íƒìƒ‰ ê¸°ëŠ¥ì´ + <li>{@code nonav}: ê¸°ê¸°ì— í„°ì¹˜ 스í¬ë¦°ì„ ì œì™¸í•˜ê³ ë‹¤ë¥¸ íƒìƒ‰ ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤.</li> <li>{@code dpad}: ê¸°ê¸°ì— íƒìƒ‰ìš© ë°©í–¥ 패드(d-pad)ê°€ 있습니다.</li> <li>{@code trackball}: ê¸°ê¸°ì— íƒìƒ‰ìš© íŠ¸ëž™ë³¼ì´ ìžˆìŠµë‹ˆë‹¤.</li> <li>{@code wheel}: ê¸°ê¸°ì— íƒìƒ‰ìš© ë°©í–¥ íœ ì´ ìžˆìŠµë‹ˆë‹¤.</li> </ul> - <p>{@link android.content.res.Configuration#navigation} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. + <p>{@link android.content.res.Configuration#navigation} 구성 í•„ë“œë„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. ì´ëŠ” 사용 가능한 íƒìƒ‰ ë©”ì„œë“œì˜ ìœ í˜•ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</p> </td> </tr> @@ -792,11 +792,11 @@ orientation" described above.</p> <p class="note"><strong>ì°¸ê³ :</strong> ì¼ë¶€ 구성 í•œì •ìžëŠ” Android -1.0 ì´í›„부터 추가ë˜ì—ˆìœ¼ë¯€ë¡œ ëª¨ë“ Android ë²„ì „ì´ ëª¨ë“ í•œì •ìžë¥¼ ì§€ì›í•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 새로운 í•œì •ìžë¥¼ 사용하면 암시ì 으로 -í”Œëž«í¼ ë²„ì „ í•œì •ìžë„ 추가하므로 구형 기기가 ì´ë¥¼ 무시하게 ë©ë‹ˆë‹¤. 예를 들어 -<code>w600dp</code> í•œì •ìžë¥¼ 사용하면 ìžë™ì 으로 <code>v13</code> í•œì •ìžë¥¼ í¬í•¨í•©ë‹ˆë‹¤. -사용 가능한 너비 í•œì •ìžê°€ API ë ˆë²¨ 13부터 새로 ë„ìž…ë˜ì—ˆê¸° 때문입니다. ë¬¸ì œë¥¼ ì• ì´ˆì— í”¼í•˜ë ¤ë©´, í•ìƒ -기본 리소스를 한 세트 í¬í•¨í•˜ì„¸ìš”(<em>í•œì •ìž ì—†ëŠ”</em> 리소스 한 세트). ìžì„¸í•œ ì •ë³´ëŠ” +1.0 ì´í›„부터 추가ë˜ì—ˆìœ¼ë¯€ë¡œ ëª¨ë“ Android ë²„ì „ì´ ëª¨ë“ í•œì •ìžë¥¼ ì§€ì›í•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 새로운 í•œì •ìžë¥¼ 사용하면 암시ì 으로 +í”Œëž«í¼ ë²„ì „ í•œì •ìžë„ 추가하므로 구형 기기가 ì´ë¥¼ 무시하게 ë©ë‹ˆë‹¤. 예를 들어 +<code>w600dp</code> í•œì •ìžë¥¼ 사용하면 ìžë™ì 으로 <code>v13</code> í•œì •ìžë¥¼ í¬í•¨í•©ë‹ˆë‹¤. +사용 가능한 너비 í•œì •ìžê°€ API ë ˆë²¨ 13부터 새로 ë„ìž…ë˜ì—ˆê¸° 때문입니다. ë¬¸ì œë¥¼ ì• ì´ˆì— í”¼í•˜ë ¤ë©´, í•ìƒ +기본 리소스를 한 세트 í¬í•¨í•˜ì„¸ìš”(<em>í•œì •ìž ì—†ëŠ”</em> 리소스 한 세트). ìžì„¸í•œ ì •ë³´ëŠ” <a href="#Compatibility">리소스와 ì—°ê´€ëœ ìµœì„ ì˜ ê¸°ê¸° 호환성 ì œê³µ </a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> @@ -808,7 +808,7 @@ orientation" described above.</p> <ul> <li>한 가지 리소스 ì„¸íŠ¸ì— ì—¬ëŸ¬ ê°œì˜ í•œì •ìžë¥¼ ì‚¬ìš©í• ìˆ˜ 있으며, ì´ë¥¼ 대시로 구분하면 ë©ë‹ˆë‹¤. 예를 들어, -<code>drawable-en-rUS-land</code>는 ìˆ˜í‰ ë°©í–¥ì˜ +<code>drawable-en-rUS-land</code>는 ìˆ˜í‰ ë°©í–¥ì˜ US-English ê¸°ê¸°ì— ì 용합니다.</li> <li>í•œì •ìžëŠ” <a href="#table2">표2</a>ì— ë‚˜ì—´ëœ ìˆœì„œë¥¼ ë”°ë¼ì•¼ 합니다. 예: @@ -817,25 +817,25 @@ US-English ê¸°ê¸°ì— ì 용합니다.</li> <li>맞는 ë°°ì—´: <code>drawable-port-hdpi/</code></li> </ul> </li> - <li>대체 리소스 ë””ë ‰í„°ë¦¬ëŠ” 중첩ë 수 없습니다. 예를 들어, + <li>대체 리소스 ë””ë ‰í„°ë¦¬ëŠ” 중첩ë 수 없습니다. 예를 들어, <code>res/drawable/drawable-en/</code>는 ìžˆì„ ìˆ˜ 없습니다.</li> - <li>ê°’ì€ ëŒ€ì†Œë¬¸ìžë¥¼ 구분하지 않습니다. 리소스 컴파ì¼ëŸ¬ê°€ 처리 ì „ì— ë””ë ‰í„°ë¦¬ ì´ë¦„ì„ -소문ìžë¡œ 바꿔 대소문ìžë¥¼ 구분하지 않는 + <li>ê°’ì€ ëŒ€ì†Œë¬¸ìžë¥¼ 구분하지 않습니다. 리소스 컴파ì¼ëŸ¬ê°€ 처리 ì „ì— ë””ë ‰í„°ë¦¬ ì´ë¦„ì„ +소문ìžë¡œ 바꿔 대소문ìžë¥¼ 구분하지 않는 íŒŒì¼ ì‹œìŠ¤í…œì—서 ë¬¸ì œë¥¼ ì¼ìœ¼í‚¤ì§€ 않ë„ë¡ ë°©ì§€í•©ë‹ˆë‹¤. ì´ë¦„ì— ëŒ€ë¬¸ìžê°€ 있는 ê²ƒì€ ì˜¤ë¡œì§€ ê°€ë…ì„±ì„ í–¥ìƒí•˜ê¸° 위해서입니다.</li> - <li>ê° í•œì •ìž ìœ í˜•ë§ˆë‹¤ 한 ê°œì˜ ê°’ë§Œ ì§€ì›ë©ë‹ˆë‹¤. 예를 들어, 스페ì¸ê³¼ í”„ëž‘ìŠ¤ì— -ê°™ì€ ë“œë¡œì–´ë¸” 파ì¼ì„ ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우 ë””ë ‰í„°ë¦¬ ì´ë¦„ì´ -<code>drawable-rES-rFR/</code>ì´ë©´ <em>안 ë©ë‹ˆë‹¤.</em> ëŒ€ì‹ + <li>ê° í•œì •ìž ìœ í˜•ë§ˆë‹¤ 한 ê°œì˜ ê°’ë§Œ ì§€ì›ë©ë‹ˆë‹¤. 예를 들어, 스페ì¸ê³¼ í”„ëž‘ìŠ¤ì— +ê°™ì€ ë“œë¡œì–´ë¸” 파ì¼ì„ ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우 ë””ë ‰í„°ë¦¬ ì´ë¦„ì´ +<code>drawable-rES-rFR/</code>ì´ë©´ <em>안 ë©ë‹ˆë‹¤.</em> ëŒ€ì‹ <code>drawable-rES/</code>와 <code>drawable-rFR/</code> ê°™ì´ ì ì ˆí•œ 파ì¼ì´ í¬í•¨ëœ ë‘ ê°œì˜ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ê°€ 필요합니다. -그러나 ë‘ ìœ„ì¹˜ì—서 ê°™ì€ íŒŒì¼ì„ ì‹¤ì œë¡œ ë³µì œí• í•„ìš”ëŠ” 없습니다. ëŒ€ì‹ +그러나 ë‘ ìœ„ì¹˜ì—서 ê°™ì€ íŒŒì¼ì„ ì‹¤ì œë¡œ ë³µì œí• í•„ìš”ëŠ” 없습니다. ëŒ€ì‹ ë¦¬ì†ŒìŠ¤ì— ë³„ëª…ì„ ë§Œë“¤ë©´ ë©ë‹ˆë‹¤. ì•„ëž˜ì˜ <a href="#AliasResources">별명 리소스 ìƒì„±</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</li> </ul> -<p>ì´ëŸ° í•œì •ìžë¡œ ì´ë¦„ì„ ì§€ì€ ë””ë ‰í„°ë¦¬ì— ëŒ€ì²´ 리소스를 ì €ìž¥í•˜ê³ ë‚˜ë©´ +<p>ì´ëŸ° í•œì •ìžë¡œ ì´ë¦„ì„ ì§€ì€ ë””ë ‰í„°ë¦¬ì— ëŒ€ì²´ 리소스를 ì €ìž¥í•˜ê³ ë‚˜ë©´ Androidê°€ 현재 기기 êµ¬ì„±ì— ê¸°ì´ˆí•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ìžë™ìœ¼ë¡œ 리소스를 ì 용합니다. 리소스가 ìš”ì²ë 때마다 Androidê°€ ìš”ì²í•œ 리소스 파ì¼ì´ 들어있는 -대체 리소스 ë””ë ‰í„°ë¦¬ë¥¼ 확ì¸í•˜ê³ , 그런 ë‹¤ìŒ <a href="#BestMatch">가장 잘 ì¼ì¹˜í•˜ëŠ” -리소스를 찾습니다</a>(아래ì—서 논함). íŠ¹ì • 기기 êµ¬ì„±ì— ì¼ì¹˜í•˜ëŠ” 대체 리소스가 없는 경우, +대체 리소스 ë””ë ‰í„°ë¦¬ë¥¼ 확ì¸í•˜ê³ , 그런 ë‹¤ìŒ <a href="#BestMatch">가장 잘 ì¼ì¹˜í•˜ëŠ” +리소스를 찾습니다</a>(아래ì—서 논함). íŠ¹ì • 기기 êµ¬ì„±ì— ì¼ì¹˜í•˜ëŠ” 대체 리소스가 없는 경우, Android는 ìƒì‘하는 기본 리소스(구성 í•œì •ìžë¥¼ í¬í•¨í•˜ì§€ 않는 íŠ¹ì • 리소스 ìœ í˜•ì— ëŒ€í•œ 리소스 세트 )를 사용합니다.</p> @@ -844,31 +844,31 @@ Android는 ìƒì‘하는 기본 리소스(구성 í•œì •ìžë¥¼ í¬í•¨í•˜ì§€ 않는 <h3 id="AliasResources">별명 리소스 ìƒì„±</h3> -<p>ì–´ë–¤ 리소스를 하나 ì´ìƒì˜ 기기 구성ì—서 ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우(ê·¸ë ‡ì§€ë§Œ -ì´ë¥¼ 기본 리소스를 ì œê³µí•˜ëŠ” ê²ƒì€ ì›ì¹˜ 않는 경우), ê°™ì€ ë¦¬ì†ŒìŠ¤ë¥¼ 하나 ì´ìƒì˜ 대체 리소스 ë””ë ‰í„°ë¦¬ì— -넣지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ , 기본 리소스 ë””ë ‰í„°ë¦¬ì— ì €ìž¥ëœ ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 별명 ì—í• ì„ í•˜ëŠ” -대체 +<p>ì–´ë–¤ 리소스를 하나 ì´ìƒì˜ 기기 구성ì—서 ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우(ê·¸ë ‡ì§€ë§Œ +ì´ë¥¼ 기본 리소스를 ì œê³µí•˜ëŠ” ê²ƒì€ ì›ì¹˜ 않는 경우), ê°™ì€ ë¦¬ì†ŒìŠ¤ë¥¼ 하나 ì´ìƒì˜ 대체 리소스 ë””ë ‰í„°ë¦¬ì— +넣지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ , 기본 리소스 ë””ë ‰í„°ë¦¬ì— ì €ìž¥ëœ ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 별명 ì—í• ì„ í•˜ëŠ” +대체 리소스를 만들면 ë©ë‹ˆë‹¤(ê²½ìš°ì— ë”°ë¼).</p> -<p class="note"><strong>ì°¸ê³ :</strong> ëª¨ë“ ë¦¬ì†ŒìŠ¤ê°€ 다른 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ -ë³„ëª…ì„ ìƒì„±í• 수 있는 ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 특히, {@code xml/} ë””ë ‰í„°ë¦¬ì˜ ì• ë‹ˆë©”ì´ì…˜, 메뉴, ì›ì‹œ ë° ê¸°íƒ€ ì§€ì •ë˜ì§€ ì•Šì€ +<p class="note"><strong>ì°¸ê³ :</strong> ëª¨ë“ ë¦¬ì†ŒìŠ¤ê°€ 다른 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ +ë³„ëª…ì„ ìƒì„±í• 수 있는 ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 특히, {@code xml/} ë””ë ‰í„°ë¦¬ì˜ ì• ë‹ˆë©”ì´ì…˜, 메뉴, ì›ì‹œ ë° ê¸°íƒ€ ì§€ì •ë˜ì§€ ì•Šì€ ë¦¬ì†ŒìŠ¤ëŠ” ì´ ê¸°ëŠ¥ì„ ì œê³µí•˜ì§€ 않습니다.</p> -<p>예를 들어, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ {@code icon.png}ì´ ìžˆê³ ì„œë¡œ 다른 로케ì¼ì—서 ì´ ì•„ì´ì½˜ì˜ ê³ ìœ ë²„ì „ì´ -필요한 경우가 있습니다. 그러나 ë‘ ë¡œì¼€ì¼, English-Canadianê³¼ French-Canadianì€ ê°™ì€ ë²„ì „ì„ -사용해야 합니다. ê°™ì€ ì´ë¯¸ì§€ë¥¼ English-Canadianê³¼ French-Canadian 양쪽 -모ë‘ì— ëŒ€í•œ 리소스 ë””ë ‰í„°ë¦¬ì— ë³µì‚¬í•´ì•¼ í•œë‹¤ê³ ìƒê°í• 수 있지만, ì‹¤ì€ +<p>예를 들어, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ {@code icon.png}ì´ ìžˆê³ ì„œë¡œ 다른 로케ì¼ì—서 ì´ ì•„ì´ì½˜ì˜ ê³ ìœ ë²„ì „ì´ +필요한 경우가 있습니다. 그러나 ë‘ ë¡œì¼€ì¼, English-Canadianê³¼ French-Canadianì€ ê°™ì€ ë²„ì „ì„ +사용해야 합니다. ê°™ì€ ì´ë¯¸ì§€ë¥¼ English-Canadianê³¼ French-Canadian 양쪽 +모ë‘ì— ëŒ€í•œ 리소스 ë””ë ‰í„°ë¦¬ì— ë³µì‚¬í•´ì•¼ í•œë‹¤ê³ ìƒê°í• 수 있지만, ì‹¤ì€ ê·¸ë ‡ì§€ 않습니다. ëŒ€ì‹ , ë‘ ë¡œì¼€ì¼ì—서 사용하는 ì´ë¯¸ì§€ë¥¼ {@code icon_ca.png}( -{@code icon.png} ì´ì™¸ì— ì–´ë–¤ ì´ë¦„ì´ë“ 가능)로 ì €ìž¥í•˜ê³ ì´ë¥¼ +{@code icon.png} ì´ì™¸ì— ì–´ë–¤ ì´ë¦„ì´ë“ 가능)로 ì €ìž¥í•˜ê³ ì´ë¥¼ 기본 {@code res/drawable/} ë””ë ‰í„°ë¦¬ì— ë„£ìœ¼ë©´ ë©ë‹ˆë‹¤. 그런 ë‹¤ìŒ {@code icon.xml} 파ì¼ì„ {@code icon_ca.png} 리소스를 참조하는 {@code -res/drawable-en-rCA/} ë° {@code res/drawable-fr-rCA/}로 ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ, {@code <bitmap>} 요소를 사용하면 ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 +res/drawable-en-rCA/} ë° {@code res/drawable-fr-rCA/}로 ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ, {@code <bitmap>} 요소를 사용하면 ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 PNG íŒŒì¼ ë²„ì „ 하나와 ê·¸ê²ƒì„ ê°€ë¦¬í‚¤ëŠ” ìž‘ì€ XML íŒŒì¼ ë‘ ê°œë§Œ ì €ìž¥í• ìˆ˜ 있습니다. (XML íŒŒì¼ ì˜ˆì‹œëŠ” 아래와 같습니다.)</p> <h4>드로어블</h4> -<p>기존 ë“œë¡œì–´ë¸”ì— ë³„ëª…ì„ ìƒì„±í•˜ë ¤ë©´ {@code <bitmap>} 요소를 사용합니다. +<p>기존 ë“œë¡œì–´ë¸”ì— ë³„ëª…ì„ ìƒì„±í•˜ë ¤ë©´ {@code <bitmap>} 요소를 사용합니다. 예를 들면 다ìŒê³¼ 같습니다.</p> <pre> @@ -896,13 +896,13 @@ R.drawable.icon_ca} 리소스({@code res/drawable/}ì— ì €ìž¥ë¨)ì˜ ë³„ëª…ì¸ ë </pre> <p>파ì¼ì„ {@code main.xml}로 ì €ìž¥í•˜ë©´, {@code R.layout.main}으로 ì°¸ì¡°í• ìˆ˜ 있지만 ì‹¤ì œë¡œëŠ” {@code R.layout.main_ltr} - ë¦¬ì†ŒìŠ¤ì˜ ë³„ëª…ì¸ ë¦¬ì†ŒìŠ¤ë¡œ + ë¦¬ì†ŒìŠ¤ì˜ ë³„ëª…ì¸ ë¦¬ì†ŒìŠ¤ë¡œ 컴파ì¼ë§ë©ë‹ˆë‹¤.</p> <h4>문ìžì—´ ë° ê¸°íƒ€ 단순 ê°’</h4> -<p>기존 문ìžì—´ì— ë³„ëª…ì„ ìƒì„±í•˜ë ¤ë©´ ì›í•˜ëŠ” 문ìžì—´ì˜ 리소스 ID를 +<p>기존 문ìžì—´ì— ë³„ëª…ì„ ìƒì„±í•˜ë ¤ë©´ ì›í•˜ëŠ” 문ìžì—´ì˜ 리소스 ID를 새 문ìžì—´ì˜ 값으로 사용하면 ë©ë‹ˆë‹¤. 예:</p> <pre> @@ -915,7 +915,7 @@ R.drawable.icon_ca} 리소스({@code res/drawable/}ì— ì €ìž¥ë¨)ì˜ ë³„ëª…ì¸ ë <p>ì´ì œ {@code R.string.hi} 리소스는 {@code R.string.hello}ì˜ ë³„ëª…ìž…ë‹ˆë‹¤.</p> -<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">기타 단순 ê°’ë„</a> ê°™ì€ ë°©ì‹ìœ¼ë¡œ +<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">기타 단순 ê°’ë„</a> ê°™ì€ ë°©ì‹ìœ¼ë¡œ ë™ìž‘합니다. 예를 들면 색ìƒì€ 다ìŒê³¼ 같습니다.</p> <pre> @@ -931,50 +931,50 @@ R.drawable.icon_ca} 리소스({@code res/drawable/}ì— ì €ìž¥ë¨)ì˜ ë³„ëª…ì¸ ë <h2 id="Compatibility">리소스와 ì—°ê´€ëœ ìµœì„ ì˜ ê¸°ê¸° 호환성 ì œê³µ</h2> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 여러 기기 êµ¬ì„±ì„ ì§€ì›í•˜ê²Œ í•˜ë ¤ë©´, +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 여러 기기 êµ¬ì„±ì„ ì§€ì›í•˜ê²Œ í•˜ë ¤ë©´, ì–¸ì œë‚˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 사용하는 ê° ìœ í˜•ì˜ ë¦¬ì†ŒìŠ¤ì— ê¸°ë³¸ 리소스를 ì œê³µí•˜ëŠ” ê²ƒì´ ë§¤ìš° 중요합니다.</p> <p>예를 들어 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 여러 언어를 ì§€ì›í• 경우, í•ìƒ <em>언어 ë° ì§€ì— í•œì •ìž</em> <a href="#LocaleQualifier">ì—†ì´</a> {@code -values/} ë””ë ‰í„°ë¦¬(ì—¬ê¸°ì— ë¬¸ìžì—´ ì €ìž¥)를 í¬í•¨ì‹œì¼œì•¼ 합니다. ê·¸ë ‡ê²Œ 하지 ì•Šê³ ì–¸ì–´ì™€ ì§€ì— í•œì •ìžê°€ 있는 ë””ë ‰í„°ë¦¬ì— -ëª¨ë“ ë¬¸ìžì—´ì„ 넣으면, 문ìžì—´ì´ ì§€ì›í•˜ì§€ 않는 언어로 ì„¤ì •ëœ ê¸°ê¸°ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ -실행하면 ìž‘ë™ì´ 중단ë©ë‹ˆë‹¤. 그러나 기본 -{@code values/} 리소스를 ì œê³µí•˜ëŠ” í•œì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œëŒ€ë¡œ 실행ë©ë‹ˆë‹¤(사용ìžê°€ ì´í•´í•˜ì§€ 못하는 +values/} ë””ë ‰í„°ë¦¬(ì—¬ê¸°ì— ë¬¸ìžì—´ ì €ìž¥)를 í¬í•¨ì‹œì¼œì•¼ 합니다. ê·¸ë ‡ê²Œ 하지 ì•Šê³ ì–¸ì–´ì™€ ì§€ì— í•œì •ìžê°€ 있는 ë””ë ‰í„°ë¦¬ì— +ëª¨ë“ ë¬¸ìžì—´ì„ 넣으면, 문ìžì—´ì´ ì§€ì›í•˜ì§€ 않는 언어로 ì„¤ì •ëœ ê¸°ê¸°ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ +실행하면 ìž‘ë™ì´ 중단ë©ë‹ˆë‹¤. 그러나 기본 +{@code values/} 리소스를 ì œê³µí•˜ëŠ” í•œì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì œëŒ€ë¡œ 실행ë©ë‹ˆë‹¤(사용ìžê°€ ì´í•´í•˜ì§€ 못하는 언어로ë¼ë„ ìž‘ë™í•©ë‹ˆë‹¤. ìž‘ë™ ì¤‘ë‹¨ë³´ë‹¤ 낫습니다.)</p> -<p>마찬가지로 화면 ë°©í–¥ì— ê¸°ì´ˆí•˜ì—¬ 여러 가지 ë ˆì´ì•„웃 리소스를 ì œê³µí•˜ëŠ” 경우 +<p>마찬가지로 화면 ë°©í–¥ì— ê¸°ì´ˆí•˜ì—¬ 여러 가지 ë ˆì´ì•„웃 리소스를 ì œê³µí•˜ëŠ” 경우 í•˜ë‚˜ì˜ ë°©í–¥ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ ì„ íƒí•´ì•¼ 합니다. 예를 들어 가로 ë°©í–¥ì—는 {@code -layout-land/}로, 세로 ë°©í–¥ì—는 {@code layout-port/}로 ë ˆì´ì•„웃 리소스를 ì œê³µí•˜ëŠ” ëŒ€ì‹ í•˜ë‚˜ë¥¼ 기본으로 남겨ë‘ì‹ì‹œì˜¤. +layout-land/}로, 세로 ë°©í–¥ì—는 {@code layout-port/}로 ë ˆì´ì•„웃 리소스를 ì œê³µí•˜ëŠ” ëŒ€ì‹ í•˜ë‚˜ë¥¼ 기본으로 남겨ë‘ì‹ì‹œì˜¤. 가로 ë°©í–¥ì— {@code layout/}, 세로 ë°©í–¥ì— {@code layout-port/}와 ê°™ì€ ì‹ìœ¼ë¡œ 하면 ë©ë‹ˆë‹¤.</p> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 예ìƒì¹˜ 못한 구성ì—서 실행ë 수 ìžˆì„ ë¿ë§Œ ì•„ë‹ˆë¼ -Androidì˜ ìƒˆ ë²„ì „ì—서 ì´ì „ ë²„ì „ì—서는 ì§€ì›í•˜ì§€ 않는 구성 í•œì •ìžë¥¼ ì¶”ê°€í• ìˆ˜ë„ ìžˆìœ¼ë¯€ë¡œ, -기본 리소스를 ì œê³µí•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 새 리소스 í•œì •ìžë¥¼ 사용하지만, +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 예ìƒì¹˜ 못한 구성ì—서 실행ë 수 ìžˆì„ ë¿ë§Œ ì•„ë‹ˆë¼ +Androidì˜ ìƒˆ ë²„ì „ì—서 ì´ì „ ë²„ì „ì—서는 ì§€ì›í•˜ì§€ 않는 구성 í•œì •ìžë¥¼ ì¶”ê°€í• ìˆ˜ë„ ìžˆìœ¼ë¯€ë¡œ, +기본 리소스를 ì œê³µí•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 새 리소스 í•œì •ìžë¥¼ 사용하지만, Android ì´ì „ ë²„ì „ê³¼ 코드 í˜¸í™˜ì„±ì€ ìœ ì§€í•œ 경우, ê·¸ 후 Android ì´ì „ ë²„ì „ì´ -ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 실행하면 새로운 í•œì •ìžë¡œ ì´ë¦„ì„ ì§€ì •í•œ 리소스를 ì‚¬ìš©í• ìˆ˜ 없으므로 기본 리소스를 ì œê³µí•˜ì§€ 않으면 +ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 실행하면 새로운 í•œì •ìžë¡œ ì´ë¦„ì„ ì§€ì •í•œ 리소스를 ì‚¬ìš©í• ìˆ˜ 없으므로 기본 리소스를 ì œê³µí•˜ì§€ 않으면 ì• í”Œë¦¬ì¼€ì´ì…˜ ìž‘ë™ì´ 중단ë©ë‹ˆë‹¤. 예를 들어, <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code -minSdkVersion}</a>ì´ 4로 ì„¤ì •ë˜ê³ <a href="#NightQualifier">야간 모드</a>(API ë ˆë²¨ 8ì—서 ì¶”ê°€ëœ {@code night} ë˜ëŠ” {@code notnight})를 사용하는 ëª¨ë“ ë“œë¡œì–´ë¸” 리소스를 í•œì •í• ê²½ìš°, API ë ˆë²¨ 4 기기는 -드로어블 ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ì§€ ëª»í•˜ê³ ì‚¬ìš©ì´ ì¤‘ë‹¨ë©ë‹ˆë‹¤. ì´ ê²½ìš°, -{@code notnight}를 기본 리소스로 ì œê³µí•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 그래야 해당 í•œì •ìžë¥¼ ë°°ì œí•˜ê³ +minSdkVersion}</a>ì´ 4로 ì„¤ì •ë˜ê³ <a href="#NightQualifier">야간 모드</a>(API ë ˆë²¨ 8ì—서 ì¶”ê°€ëœ {@code night} ë˜ëŠ” {@code notnight})를 사용하는 ëª¨ë“ ë“œë¡œì–´ë¸” 리소스를 í•œì •í• ê²½ìš°, API ë ˆë²¨ 4 기기는 +드로어블 ë¦¬ì†ŒìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ì§€ ëª»í•˜ê³ ì‚¬ìš©ì´ ì¤‘ë‹¨ë©ë‹ˆë‹¤. ì´ ê²½ìš°, +{@code notnight}를 기본 리소스로 ì œê³µí•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 그래야 해당 í•œì •ìžë¥¼ ë°°ì œí•˜ê³ ë“œë¡œì–´ë¸” 리소스가 {@code drawable/} ë˜ëŠ” {@code drawable-night/}ì´ ë©ë‹ˆë‹¤.</p> -<p>그러므로 ìµœì„ ì˜ ê¸°ê¸° í˜¸í™˜ì„±ì„ ì œê³µí•˜ë ¤ë©´ ì–¸ì œë‚˜ -ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 반드시 ì œëŒ€ë¡œ 수행해야 하는 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 기본 리소스를 ì œê³µí•˜ì‹ì‹œì˜¤. 그런 ë‹¤ìŒ êµ¬ì„± í•œì •ìžë¥¼ 사용하여 +<p>그러므로 ìµœì„ ì˜ ê¸°ê¸° í˜¸í™˜ì„±ì„ ì œê³µí•˜ë ¤ë©´ ì–¸ì œë‚˜ +ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 반드시 ì œëŒ€ë¡œ 수행해야 하는 ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 기본 리소스를 ì œê³µí•˜ì‹ì‹œì˜¤. 그런 ë‹¤ìŒ êµ¬ì„± í•œì •ìžë¥¼ 사용하여 íŠ¹ì • 기기 êµ¬ì„±ì— ëŒ€í•´ 대체 리소스를 ìƒì„±í•˜ë©´ ë©ë‹ˆë‹¤.</p> -<p>ì´ ê·œì¹™ì—는 한 가지 예외가 있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> ì´ 4 ì´ìƒì´ë©´ -<a href="#DensityQualifier">화면 ë°€ë„</a> í•œì •ìžë¡œ 대체 드로어블 리소스를 ì œê³µí• ë•Œ 기본 드로어블 -리소스가 <em>ì—†ì–´ë„ ë©ë‹ˆë‹¤</em>. 기본 -드로어블 리소스가 ì—†ë”ë¼ë„ Androidê°€ 대체 화면 화질 중ì—서 가장 잘 맞는 리소스를 ì°¾ê³ -í•„ìš”ì— ë”°ë¼ ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•©ë‹ˆë‹¤. 그러나 ëª¨ë“ ìœ í˜•ì˜ ê¸°ê¸°ì—서 최ìƒì˜ ê²½í—˜ì„ ì œê³µí•˜ë ¤ë©´, +<p>ì´ ê·œì¹™ì—는 한 가지 예외가 있습니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> ì´ 4 ì´ìƒì´ë©´ +<a href="#DensityQualifier">화면 ë°€ë„</a> í•œì •ìžë¡œ 대체 드로어블 리소스를 ì œê³µí• ë•Œ 기본 드로어블 +리소스가 <em>ì—†ì–´ë„ ë©ë‹ˆë‹¤</em>. 기본 +드로어블 리소스가 ì—†ë”ë¼ë„ Androidê°€ 대체 화면 화질 중ì—서 가장 잘 맞는 리소스를 ì°¾ê³ +í•„ìš”ì— ë”°ë¼ ë¹„íŠ¸ë§µì„ ì¶•ì†Œí•©ë‹ˆë‹¤. 그러나 ëª¨ë“ ìœ í˜•ì˜ ê¸°ê¸°ì—서 최ìƒì˜ ê²½í—˜ì„ ì œê³µí•˜ë ¤ë©´, ëª¨ë“ ì„¸ 가지 ìœ í˜•ì˜ ë°€ë„ì— ëŒ€í•´ 대체 ë“œë¡œì–´ë¸”ì„ ì œê³µí•´ì•¼ 합니다.</p> <h2 id="BestMatch">Androidê°€ 가장 잘 ì¼ì¹˜í•˜ëŠ” 리소스를 찾는 방법</h2> -<p>개발ìžê°€ ìžì‹ ì´ ëŒ€ì²´ë¥¼ ì œê³µí•˜ëŠ” 리소스를 ìš”ì²í•˜ë©´ Androidê°€ ëŸ°íƒ€ìž„ì— ì–´ëŠ ëŒ€ì²´ 리소스를 -ì‚¬ìš©í• ì§€ 현대 기기 êµ¬ì„±ì— ë”°ë¼ ì—¬ëŸ¬ 가지로 ì„ íƒí•©ë‹ˆë‹¤. Androidê°€ -대체 리소스를 ì„ íƒí•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ì£¼ê¸° 위해 ë‹¤ìŒ ë“œë¡œì–´ë¸” ë””ë ‰í„°ë¦¬ì— ê°ê° ê°™ì€ ì´ë¯¸ì§€ì˜ +<p>개발ìžê°€ ìžì‹ ì´ ëŒ€ì²´ë¥¼ ì œê³µí•˜ëŠ” 리소스를 ìš”ì²í•˜ë©´ Androidê°€ ëŸ°íƒ€ìž„ì— ì–´ëŠ ëŒ€ì²´ 리소스를 +ì‚¬ìš©í• ì§€ 현대 기기 êµ¬ì„±ì— ë”°ë¼ ì—¬ëŸ¬ 가지로 ì„ íƒí•©ë‹ˆë‹¤. Androidê°€ +대체 리소스를 ì„ íƒí•˜ëŠ” ë°©ë²•ì„ ë³´ì—¬ì£¼ê¸° 위해 ë‹¤ìŒ ë“œë¡œì–´ë¸” ë””ë ‰í„°ë¦¬ì— ê°ê° ê°™ì€ ì´ë¯¸ì§€ì˜ 서로 다른 ë²„ì „ì´ ë“¤ì–´ìžˆë‹¤ê³ ê°€ì •í•˜ê² ìŠµë‹ˆë‹¤.</p> <pre class="classic no-pretty-print"> @@ -997,16 +997,16 @@ drawable-port-notouch-12key/ 기본 í…스트 ìž…ë ¥ 메서드 = <code>12key</code> </p> -<p>Android는 기기 êµ¬ì„±ì„ ì´ìš© 가능한 대체 리소스와 비êµí•˜ì—¬, +<p>Android는 기기 êµ¬ì„±ì„ ì´ìš© 가능한 대체 리소스와 비êµí•˜ì—¬, {@code drawable-en-port}ì—서 ë“œë¡œì–´ë¸”ì„ ì„ íƒí•©ë‹ˆë‹¤.</p> -<p>ì‹œìŠ¤í…œì€ ë‹¤ìŒê³¼ ê°™ì€ ë…¼ë¦¬ì— ë”°ë¼ +<p>ì‹œìŠ¤í…œì€ ë‹¤ìŒê³¼ ê°™ì€ ë…¼ë¦¬ì— ë”°ë¼ ì–´ëŠ ë¦¬ì†ŒìŠ¤ë¥¼ ì‚¬ìš©í• ì§€ ê²°ì •í•©ë‹ˆë‹¤.</p> <div class="figure" style="width:371px"> <img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" /> -<p class="img-caption"><strong>그림 2.</strong> Androidê°€ 가장 잘 ì¼ì¹˜í•˜ëŠ” 리소스를 찾는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ +<p class="img-caption"><strong>그림 2.</strong> Androidê°€ 가장 잘 ì¼ì¹˜í•˜ëŠ” 리소스를 찾는 ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ í름ë„입니다.</p> </div> @@ -1024,23 +1024,23 @@ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/ </pre> -<p class="note"><strong>예외:</strong> 화면 픽셀 ë°€ë„ í•œì •ìž í•˜ë‚˜ë§Œì€ ì¶©ëŒì„ ì´ìœ 로 ì œê±°ë˜ì§€ -않습니다. ê¸°ê¸°ì˜ í™”ë©´ ë°€ë„ê°€ hdpië¼ë„, +<p class="note"><strong>예외:</strong> 화면 픽셀 ë°€ë„ í•œì •ìž í•˜ë‚˜ë§Œì€ ì¶©ëŒì„ ì´ìœ 로 ì œê±°ë˜ì§€ +않습니다. ê¸°ê¸°ì˜ í™”ë©´ ë°€ë„ê°€ hdpië¼ë„, 현 시ì ì—서는 ëª¨ë“ í™”ë©´ ë°€ë„ê°€ ì¼ì¹˜ë¡œ 간주ë˜ë¯€ë¡œ <code>drawable-port-ldpi/</code>를 ì œê±°í•˜ì§€ 않습니다. - ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 + ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a> 문서ì—서 ì´ìš©í•˜ì‹¤ 수 있습니다.</p></li> <li>목ë¡(<a href="#table2">표2</a>)ì—서 (ê·¸ 다ìŒìœ¼ë¡œ) ìš°ì„ ìˆœìœ„ê°€ 가장 ë†’ì€ í•œì •ìžë¥¼ ì„ íƒí•©ë‹ˆë‹¤ (MCC부터 시작하여 아래로 ë‚´ë ¤ê°€ì‹ì‹œì˜¤). </li> <li>리소스 ë””ë ‰í„°ë¦¬ ì¤‘ì— ì´ í•œì •ìžë¥¼ í¬í•¨í•œ ê²ƒì´ ìžˆë‚˜ìš”? </li> <ul> - <li>없는 경우, 2단계로 ëŒì•„ê°€ ë‹¤ìŒ í•œì •ìžë¥¼ 살펴보ì‹ì‹œì˜¤ (ì´ ì˜ˆì‹œì˜ ê²½ìš° + <li>없는 경우, 2단계로 ëŒì•„ê°€ ë‹¤ìŒ í•œì •ìžë¥¼ 살펴보ì‹ì‹œì˜¤ (ì´ ì˜ˆì‹œì˜ ê²½ìš° 언어 í•œì •ìžì— ë„ë‹¬í• ë•Œê¹Œì§€ ë‹µì€ "없습니다"입니다).</li> <li>있는 경우, 4단계로 ê³„ì† ì§„í–‰í•©ë‹ˆë‹¤.</li> </ul> </li> - <li>ì´ í•œì •ìžë¥¼ í¬í•¨í•˜ì§€ 않는 ë””ë ‰í„°ë¦¬ë¥¼ ì œê±°í•©ë‹ˆë‹¤. ì´ ì˜ˆì‹œì—서는 ì‹œìŠ¤í…œì´ + <li>ì´ í•œì •ìžë¥¼ í¬í•¨í•˜ì§€ 않는 ë””ë ‰í„°ë¦¬ë¥¼ ì œê±°í•©ë‹ˆë‹¤. ì´ ì˜ˆì‹œì—서는 ì‹œìŠ¤í…œì´ ì–¸ì–´ í•œì •ìžë¥¼ í¬í•¨í•˜ì§€ 않는 ë””ë ‰í„°ë¦¬ë¥¼ ëª¨ë‘ ì œê±°í•©ë‹ˆë‹¤.</li> <pre class="classic no-pretty-print"> <strike>drawable/</strike> @@ -1050,15 +1050,15 @@ drawable-en-notouch-12key/ <strike>drawable-port-ldpi/</strike> <strike>drawable-port-notouch-12key/</strike> </pre> -<p class="note"><strong>예외:</strong> ë¬¸ì œì˜ í•œì •ìžê°€ 화면 픽셀 ë°€ë„ë¼ë©´, -Android는 기기 화면 ë°€ë„와 가장 ê°€ê¹ê²Œ ì¼ì¹˜í•˜ëŠ” ì˜µì…˜ì„ ì„ íƒí•©ë‹ˆë‹¤. +<p class="note"><strong>예외:</strong> ë¬¸ì œì˜ í•œì •ìžê°€ 화면 픽셀 ë°€ë„ë¼ë©´, +Android는 기기 화면 ë°€ë„와 가장 ê°€ê¹ê²Œ ì¼ì¹˜í•˜ëŠ” ì˜µì…˜ì„ ì„ íƒí•©ë‹ˆë‹¤. ì¼ë°˜ì 으로, Android는 ìž‘ì€ ì›ë³¸ ì´ë¯¸ì§€ë¥¼ 확대하는 것보다 -í° ì›ë³¸ ì´ë¯¸ì§€ë¥¼ 축소하는 ê²ƒì„ ì„ í˜¸í•©ë‹ˆë‹¤. <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 +í° ì›ë³¸ ì´ë¯¸ì§€ë¥¼ 축소하는 ê²ƒì„ ì„ í˜¸í•©ë‹ˆë‹¤. <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 ì§€ì›</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </li> - <li>뒤로 ëŒì•„ê°€ ë””ë ‰í„°ë¦¬ê°€ 한 개만 ë‚¨ì„ ë•Œê¹Œì§€ 2, 3 ë° 4단계를 반복합니다. ì´ ì˜ˆì‹œì—서, ì¼ì¹˜í•˜ëŠ” ê²ƒì´ ìžˆëŠ” ë‹¤ìŒ í•œì •ìžëŠ” -화면 방향입니다. + <li>뒤로 ëŒì•„ê°€ ë””ë ‰í„°ë¦¬ê°€ 한 개만 ë‚¨ì„ ë•Œê¹Œì§€ 2, 3 ë° 4단계를 반복합니다. ì´ ì˜ˆì‹œì—서, ì¼ì¹˜í•˜ëŠ” ê²ƒì´ ìžˆëŠ” ë‹¤ìŒ í•œì •ìžëŠ” +화면 방향입니다. 그러므로 화면 ë°©í–¥ì„ ì§€ì •í•˜ì§€ 않는 리소스가 ì œê±°ë©ë‹ˆë‹¤. <pre class="classic no-pretty-print"> <strike>drawable-en/</strike> @@ -1069,26 +1069,26 @@ drawable-en-port/ </li> </ol> -<p>ì´ ì ˆì°¨ëŠ” ìš”ì²ëœ ê° ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 실행하지만, ì‹œìŠ¤í…œì´ ëª‡ 가지 ì¸¡ë©´ì„ ì¶”ê°€ë¡œ -최ì 화합니다. 그러한 최ì í™” 가운ë°ì—는 ì¼ë‹¨ 기기 êµ¬ì„±ì„ ì•Œê²Œ ë˜ê³ 나면 ì ˆëŒ€ ì¼ì¹˜í• ê°€ëŠ¥ì„±ì´ ì—†ëŠ” -대체 리소스를 ì‹œìŠ¤í…œì´ ì œê±°í• ìˆ˜ 있다는 ì ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, 구성 언어가 -ì˜ì–´("en")ì´ê³ ì˜ì–´ ì´ì™¸ì˜ 다른 언어 í•œì •ìžë¡œ ì„¤ì •ëœ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ëŠ” +<p>ì´ ì ˆì°¨ëŠ” ìš”ì²ëœ ê° ë¦¬ì†ŒìŠ¤ì— ëŒ€í•´ 실행하지만, ì‹œìŠ¤í…œì´ ëª‡ 가지 ì¸¡ë©´ì„ ì¶”ê°€ë¡œ +최ì 화합니다. 그러한 최ì í™” 가운ë°ì—는 ì¼ë‹¨ 기기 êµ¬ì„±ì„ ì•Œê²Œ ë˜ê³ 나면 ì ˆëŒ€ ì¼ì¹˜í• ê°€ëŠ¥ì„±ì´ ì—†ëŠ” +대체 리소스를 ì‹œìŠ¤í…œì´ ì œê±°í• ìˆ˜ 있다는 ì ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어, 구성 언어가 +ì˜ì–´("en")ì´ê³ ì˜ì–´ ì´ì™¸ì˜ 다른 언어 í•œì •ìžë¡œ ì„¤ì •ëœ ë¦¬ì†ŒìŠ¤ ë””ë ‰í„°ë¦¬ëŠ” ì ˆëŒ€ 확ì¸ëœ 리소스 í’€ì— í¬í•¨ë˜ì§€ 않습니다( 언어 í•œì •ìžê°€ í¬í•¨ë˜ì§€ <em>않는</em> 리소스 ë””ë ‰í„°ë¦¬ëŠ” ì—¬ì „ížˆ í¬í•¨ë©ë‹ˆë‹¤).</p> <p>화면 í¬ê¸° í•œì •ìžì— 기초하여 리소스를 ì„ íƒí• 때 ì‹œìŠ¤í…œì€ ê°€ìž¥ 잘 ì¼ì¹˜í•˜ëŠ” 리소스가 없다면 현재 화면보다 ìž‘ì€ í™”ë©´ì— ì§€ì •ëœ ë¦¬ì†ŒìŠ¤ë¥¼ 사용합니다 -(예를 들어, í° í™”ë©´ì€ í•„ìš”ì— ë”°ë¼ ì¼ë°˜ í¬ê¸° 화면 리소스를 사용합니다). 그러나 +(예를 들어, í° í™”ë©´ì€ í•„ìš”ì— ë”°ë¼ ì¼ë°˜ í¬ê¸° 화면 리소스를 사용합니다). 그러나 ì´ìš© 가능한 리소스가 현재 화면보다 <em>í°</em> 리소스ë¿ì´ë¼ë©´, ì‹œìŠ¤í…œì€ ì´ë¥¼ 사용하지 <strong>ì•Šê³ </strong>, 기기 êµ¬ì„±ì— ì¼ì¹˜í•˜ëŠ” 리소스가 없으면 ì• í”Œë¦¬ì¼€ì´ì…˜ ì‚¬ìš©ì´ ì¤‘ë‹¨ë©ë‹ˆë‹¤ (예를 들어 ëª¨ë“ ë ˆì´ì•„웃 리소스가 {@code xlarge} í•œì •ìžì— 태그ë˜ì–´ 있지만, 기기가 보통 í¬ê¸° í™”ë©´ì¼ ê²½ìš°).</p> -<p class="note"><strong>ì°¸ê³ :</strong> í•œì •ìžì˜ <em>ìš°ì„ ìˆœìœ„</em>(<a href="#table2">표 2</a> 참조)ê°€ 기기와 ì •í™•í•˜ê²Œ ì¼ì¹˜í•˜ëŠ” -í•œì •ìž ìˆ˜ë³´ë‹¤ ë” ì¤‘ìš”í•©ë‹ˆë‹¤. 예를 들어 ìœ„ì˜ 4단계ì—서 +<p class="note"><strong>ì°¸ê³ :</strong> í•œì •ìžì˜ <em>ìš°ì„ ìˆœìœ„</em>(<a href="#table2">표 2</a> 참조)ê°€ 기기와 ì •í™•í•˜ê²Œ ì¼ì¹˜í•˜ëŠ” +í•œì •ìž ìˆ˜ë³´ë‹¤ ë” ì¤‘ìš”í•©ë‹ˆë‹¤. 예를 들어 ìœ„ì˜ 4단계ì—서 목ë¡ì˜ 마지막 ì„ íƒì— 기기와 ì •í™•ížˆ ì¼ì¹˜í•˜ëŠ” í•œì •ìžê°€ 세 ê°œ í¬í•¨ë˜ì–´ 있지만(ë°©í–¥, 터치 스í¬ë¦° -ìœ í˜• ë° ìž…ë ¥ 메서드), <code>drawable-en</code>ì—는 ì¼ì¹˜í•˜ëŠ” 매개변수가 -하나ë¿ìž…니다(언어). 다만, 언어가 ì´ëŸ¬í•œ 다른 í•œì •ìžë³´ë‹¤ ìš°ì„ ìˆœìœ„ê°€ 높기 ë•Œë¬¸ì— +ìœ í˜• ë° ìž…ë ¥ 메서드), <code>drawable-en</code>ì—는 ì¼ì¹˜í•˜ëŠ” 매개변수가 +하나ë¿ìž…니다(언어). 다만, 언어가 ì´ëŸ¬í•œ 다른 í•œì •ìžë³´ë‹¤ ìš°ì„ ìˆœìœ„ê°€ 높기 ë•Œë¬¸ì— <code>drawable-port-notouch-12key</code>는 탈ë½í•©ë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 리소스를 사용하는 ê²ƒì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="accessing-resources.html">리소스 액세스</a>로 ê³„ì† ì§„í–‰í•˜ì—¬ 알아보ì‹ì‹œì˜¤.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/ko/guide/topics/resources/runtime-changes.jd index a5e7f5bbad88..720601fb999a 100644 --- a/docs/html-intl/intl/ko/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/ko/guide/topics/resources/runtime-changes.jd @@ -22,41 +22,41 @@ page.tags=액티비티, 수명 주기 </div> <p>몇몇 기기 êµ¬ì„±ì€ ëŸ°íƒ€ìž„ ì¤‘ì— ë³€ê²½ë 수 있습니다 -(예: 화면 ë°©í–¥, 키보드 가용성 ë° ì–¸ì–´ 등). 그러한 ë³€ê²½ì´ ì¼ì–´ë‚˜ëŠ” 경우, -Android는 실행 ì¤‘ì¸ +(예: 화면 ë°©í–¥, 키보드 가용성 ë° ì–¸ì–´ 등). 그러한 ë³€ê²½ì´ ì¼ì–´ë‚˜ëŠ” 경우, +Android는 실행 ì¤‘ì¸ {@link android.app.Activity}를 다시 시작합니다({@link android.app.Activity#onDestroy()} 호출, ë’¤ì´ì–´ {@link -android.app.Activity#onCreate(Bundle) onCreate()} 호출). ì´ëŸ° ë™ìž‘ì€ ì—¬ëŸ¬ë¶„ì´ ì œê³µí•œ +android.app.Activity#onCreate(Bundle) onCreate()} 호출). ì´ëŸ° ë™ìž‘ì€ ì—¬ëŸ¬ë¶„ì´ ì œê³µí•œ 대체 리소스로 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ìžë™ìœ¼ë¡œ 다시 ë¡œë”©í•¨ìœ¼ë¡œì¨ ìƒˆë¡œìš´ 기기 êµ¬ì„±ì— ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì ì‘하는 ê²ƒì„ ë•ë„ë¡ ì„¤ê³„ë˜ì—ˆìŠµë‹ˆë‹¤(예: 다양한 화면 방향과 í¬ê¸°ì— 대한 다양한 ë ˆì´ì•„웃).</p> -<p>다시 ì‹œìž‘ì„ ì ì ˆížˆ ì²˜ë¦¬í•˜ë ¤ë©´ 액티비티가 ì •ìƒì ì¸ +<p>다시 ì‹œìž‘ì„ ì ì ˆížˆ ì²˜ë¦¬í•˜ë ¤ë©´ 액티비티가 ì •ìƒì ì¸ <a href="{@docRoot}guide/components/activities.html#Lifecycle">액티비티 -수명 주기</a>를 통해 ì´ì „ ìƒíƒœë¥¼ ë³µì›í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 여기ì—서 Android는 -{@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()}를 호출한 다ìŒì— 액티비티를 소멸시켜 -ì• í”Œë¦¬ì¼€ì´ì…˜ ìƒíƒœì— 대한 ë°ì´í„°ë¥¼ ì €ìž¥í• ìˆ˜ 있습니다. 그러면 +수명 주기</a>를 통해 ì´ì „ ìƒíƒœë¥¼ ë³µì›í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 여기ì—서 Android는 +{@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()}를 호출한 다ìŒì— 액티비티를 소멸시켜 +ì• í”Œë¦¬ì¼€ì´ì…˜ ìƒíƒœì— 대한 ë°ì´í„°ë¥¼ ì €ìž¥í• ìˆ˜ 있습니다. 그러면 {@link android.app.Activity#onCreate(Bundle) onCreate()} ë˜ëŠ” {@link android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()} ì¤‘ì— ìƒíƒœë¥¼ ë³µì›í• 수 있습니다.</p> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ ìƒíƒœë¥¼ 그대로 ìœ ì§€í•œ 채 스스로 다시 ì‹œìž‘í• ìˆ˜ 있는지 시험해 ë³´ë ¤ë©´, -구성 ë³€ê²½ì„ ì¼ìœ¼ì¼œë³´ì•„야 합니다(예를 들어 화면 ë°©í–¥ 변경 등). ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 여러 가지 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” -ë™ì•ˆ 해봅니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–¸ì œë“ ì‚¬ìš©ìž ë°ì´í„°ë‚˜ ìƒíƒœë¥¼ ì†ì‹¤í•˜ì§€ ì•Šê³ -다시 ì‹œìž‘í• ìˆ˜ 있어야 합니다. 그래야 구성 변경과 ê°™ì€ ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있기 때문입니다. ê·¸ë ‡ì§€ 않으면 -사용ìžê°€ ê±¸ë ¤ì˜¤ëŠ” ì „í™”ë¥¼ ë°›ì€ ë‹¤ìŒ í•œì°¸ í›„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„오면 ì• í”Œë¦¬ì¼€ì´ì…˜ 프로세스가 ì´ë¯¸ +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ ìƒíƒœë¥¼ 그대로 ìœ ì§€í•œ 채 스스로 다시 ì‹œìž‘í• ìˆ˜ 있는지 시험해 ë³´ë ¤ë©´, +구성 ë³€ê²½ì„ ì¼ìœ¼ì¼œë³´ì•„야 합니다(예를 들어 화면 ë°©í–¥ 변경 등). ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 여러 가지 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” +ë™ì•ˆ 해봅니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–¸ì œë“ ì‚¬ìš©ìž ë°ì´í„°ë‚˜ ìƒíƒœë¥¼ ì†ì‹¤í•˜ì§€ ì•Šê³ +다시 ì‹œìž‘í• ìˆ˜ 있어야 합니다. 그래야 구성 변경과 ê°™ì€ ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있기 때문입니다. ê·¸ë ‡ì§€ 않으면 +사용ìžê°€ ê±¸ë ¤ì˜¤ëŠ” ì „í™”ë¥¼ ë°›ì€ ë‹¤ìŒ í•œì°¸ í›„ì— ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ëŒì•„오면 ì• í”Œë¦¬ì¼€ì´ì…˜ 프로세스가 ì´ë¯¸ 소멸ë˜ì–´ ìžˆì„ ìˆ˜ 있습니다. 액티비티 ìƒíƒœë¥¼ ë³µì›í•˜ëŠ” ë°©ë²•ì„ ë°°ìš°ë ¤ë©´, <a href="{@docRoot}guide/components/activities.html#Lifecycle">액티비티 수명 주기</a>ì— ê´€í•´ ì½ì–´ë³´ì‹ì‹œì˜¤.</p> -<p>하지만, ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 다시 ì‹œìž‘í•˜ê³ ìƒë‹¹ëŸ‰ì˜ ë°ì´í„°ë¥¼ ë³µì›í•˜ë©´ ë¹„ìš©ë„ ë§Žì´ ë“¤ê³ -불량한 ì‚¬ìš©ìž í™˜ê²½ì´ ë§Œë“¤ì–´ì§€ëŠ” ìƒí™©ì— ì§ë©´í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 그러한 ìƒí™©ì´ë¼ë©´, +<p>하지만, ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 다시 ì‹œìž‘í•˜ê³ ìƒë‹¹ëŸ‰ì˜ ë°ì´í„°ë¥¼ ë³µì›í•˜ë©´ ë¹„ìš©ë„ ë§Žì´ ë“¤ê³ +불량한 ì‚¬ìš©ìž í™˜ê²½ì´ ë§Œë“¤ì–´ì§€ëŠ” ìƒí™©ì— ì§ë©´í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 그러한 ìƒí™©ì´ë¼ë©´, ë‘ ê°€ì§€ 다른 ì˜µì…˜ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ol type="a"> <li><a href="#RetainingAnObject">구성 변경 ì¤‘ì— ê°ì²´ 보존하기</a> - <p>êµ¬ì„±ì´ ë³€ê²½ë˜ëŠ” ì¤‘ì— ì•¡í‹°ë¹„í‹°ê°€ 다시 시작ë 수 있게 허용하ë˜, ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ì— ìƒíƒœ + <p>êµ¬ì„±ì´ ë³€ê²½ë˜ëŠ” ì¤‘ì— ì•¡í‹°ë¹„í‹°ê°€ 다시 시작ë 수 있게 허용하ë˜, ì•¡í‹°ë¹„í‹°ì˜ ìƒˆ ì¸ìŠ¤í„´ìŠ¤ì— ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ 넣습니다.</p> </li> <li><a href="#HandlingTheChange">구성 변경 ì§ì ‘ 처리하기</a> - <p>íŠ¹ì • 구성 변경 ì¤‘ì— ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하ë„ë¡ í•˜ì§€ 못하게 방지하ë˜, -êµ¬ì„±ì´ ì‹¤ì œë¡œ 변경ë˜ë©´ ì½œë°±ì„ ìˆ˜ì‹ í•˜ë„ë¡ í•˜ì—¬ í•„ìš”ì— ë”°ë¼ ì•¡í‹°ë¹„í‹°ë¥¼ 수ë™ìœ¼ë¡œ ì—…ë°ì´íŠ¸í• ìˆ˜ + <p>íŠ¹ì • 구성 변경 ì¤‘ì— ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하ë„ë¡ í•˜ì§€ 못하게 방지하ë˜, +êµ¬ì„±ì´ ì‹¤ì œë¡œ 변경ë˜ë©´ ì½œë°±ì„ ìˆ˜ì‹ í•˜ë„ë¡ í•˜ì—¬ í•„ìš”ì— ë”°ë¼ ì•¡í‹°ë¹„í‹°ë¥¼ 수ë™ìœ¼ë¡œ ì—…ë°ì´íŠ¸í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.</p> </li> </ol> @@ -64,30 +64,30 @@ android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()} ì¤ <h2 id="RetainingAnObject">구성 변경 ì¤‘ì— ê°ì²´ 보존하기</h2> -<p>액티비티를 다시 ì‹œìž‘í•˜ë ¤ë©´ ë§Žì€ ìˆ˜ì˜ ë°ì´í„° 세트를 복구해야 하는 경우, ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ -다시 ì„¤ì •í•˜ê±°ë‚˜ 다른 집약ì ìž‘ì—…ì„ ìˆ˜í–‰í•œ ë‹¤ìŒ ì™„ì „ížˆ 다시 시작하ì‹ì‹œì˜¤. -구성 변경 ë•Œë¬¸ì— ì‚¬ìš©ìž í™˜ê²½ì´ ëŠë ¤ì§ˆ 수 있습니다. ë˜í•œ, 액티비티 ìƒíƒœë¥¼ ì™„ì „ížˆ ë³µì›í•˜ë ¤ë©´ +<p>액티비티를 다시 ì‹œìž‘í•˜ë ¤ë©´ ë§Žì€ ìˆ˜ì˜ ë°ì´í„° 세트를 복구해야 하는 경우, ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ +다시 ì„¤ì •í•˜ê±°ë‚˜ 다른 집약ì ìž‘ì—…ì„ ìˆ˜í–‰í•œ ë‹¤ìŒ ì™„ì „ížˆ 다시 시작하ì‹ì‹œì˜¤. +구성 변경 ë•Œë¬¸ì— ì‚¬ìš©ìž í™˜ê²½ì´ ëŠë ¤ì§ˆ 수 있습니다. ë˜í•œ, 액티비티 ìƒíƒœë¥¼ ì™„ì „ížˆ ë³µì›í•˜ë ¤ë©´ {@link android.os.Bundle}ì„ ì‚¬ìš©í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ ì‹œìŠ¤í…œì´ ê°œë°œìž ëŒ€ì‹ {@link -android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} 콜백으로 ì €ìž¥í•´ë‘는 것입니다. ì´ê²ƒì€ 대형 ê°ì²´(예: 비트맵)를 ë‹´ë„ë¡ -ë””ìžì¸ëœ ê²ƒì´ ì•„ë‹ˆë©° ì´ ì•ˆì˜ ë°ì´í„°ëŠ” 반드시 ì§ë ¬í™”했다가 다시 ì—ì§ë ¬í™”해야 합니다. ì´ë ‡ê²Œ 하면 -메모리를 아주 ë§Žì´ ì†Œëª¨í• ìˆ˜ 있으며 구성 ë³€ê²½ì´ ëŠë ¤ì§ˆ 수 있습니다. ì´ì™€ ê°™ì€ ìƒí™©ì—서는 +android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} 콜백으로 ì €ìž¥í•´ë‘는 것입니다. ì´ê²ƒì€ 대형 ê°ì²´(예: 비트맵)를 ë‹´ë„ë¡ +ë””ìžì¸ëœ ê²ƒì´ ì•„ë‹ˆë©° ì´ ì•ˆì˜ ë°ì´í„°ëŠ” 반드시 ì§ë ¬í™”했다가 다시 ì—ì§ë ¬í™”해야 합니다. ì´ë ‡ê²Œ 하면 +메모리를 아주 ë§Žì´ ì†Œëª¨í• ìˆ˜ 있으며 구성 ë³€ê²½ì´ ëŠë ¤ì§ˆ 수 있습니다. ì´ì™€ ê°™ì€ ìƒí™©ì—서는 액티비티를 다시 초기화해야 한다는 ë¶€ë‹´ì„ í•´ê²°í•˜ê¸° 위해 액티비티가 구성 변경으로 ì¸í•´ 다시 시작ë˜ì—ˆì„ 때 {@link -android.app.Fragment}를 보존하면 ë©ë‹ˆë‹¤. ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ì—는 +android.app.Fragment}를 보존하면 ë©ë‹ˆë‹¤. ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ì—는 ë³´ì¡´í•˜ê³ ìž í•˜ëŠ” ìƒíƒœ ì €ìž¥ ê°ì²´ì— 대한 참조를 ë‹´ì„ ìˆ˜ 있습니다.</p> -<p>Android ì‹œìŠ¤í…œì´ êµ¬ì„± 변경으로 ì¸í•˜ì—¬ 액티비티를 종료시킬 때, 액티비티ì—서 보존하기로 표시해둔 -프래그먼트는 소멸ë˜ì§€ 않습니다. 그러한 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ë©´ +<p>Android ì‹œìŠ¤í…œì´ êµ¬ì„± 변경으로 ì¸í•˜ì—¬ 액티비티를 종료시킬 때, 액티비티ì—서 보존하기로 표시해둔 +프래그먼트는 소멸ë˜ì§€ 않습니다. 그러한 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•˜ë©´ ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ ë³´ì¡´í• ìˆ˜ 있습니다.</p> <p>런타임 구성 변경 ì¤‘ì— ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ë³´ì¡´í•´ë‘는 ë°©ë²•ì€ ë‹¤ìŒê³¼ 같습니다.</p> <ol> - <li>{@link android.app.Fragment} í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìƒíƒœ ì €ìž¥ + <li>{@link android.app.Fragment} í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìƒíƒœ ì €ìž¥ ê°ì²´ì— 참조를 ì„ ì–¸í•©ë‹ˆë‹¤.</li> <li>프래그먼트가 ìƒì„±ë˜ë©´ {@link android.app.Fragment#setRetainInstance(boolean)}를 호출합니다. </li> <li>해당 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•©ë‹ˆë‹¤.</li> - <li>{@link android.app.FragmentManager}를 사용하여 액티비티가 다시 시작ë 때 프래그먼트를 + <li>{@link android.app.FragmentManager}를 사용하여 액티비티가 다시 시작ë 때 프래그먼트를 검색합니다.</li> </ol> @@ -117,16 +117,16 @@ public class RetainedFragment extends Fragment { } </pre> -<p class="caution"><strong>주ì˜:</strong> ì–´ëŠ ê°ì²´ë“ ì €ìž¥í• ìˆ˜ 있지만, +<p class="caution"><strong>주ì˜:</strong> ì–´ëŠ ê°ì²´ë“ ì €ìž¥í• ìˆ˜ 있지만, {@link android.app.Activity}ì— ë¬¶ì—¬ 있는 ê°ì²´ëŠ” ì ˆëŒ€ë¡œ ì „ë‹¬í•˜ë©´ 안 ë©ë‹ˆë‹¤. 예를 들어 {@link android.graphics.drawable.Drawable}, {@link android.widget.Adapter}, {@link android.view.View} - ë˜ëŠ” {@link android.content.Context}와 ì—°ê´€ëœ ê¸°íƒ€ ëª¨ë“ ê°ì²´ê°€ ì´ì— 해당ë©ë‹ˆë‹¤. ì´ëŸ° ê²ƒì„ ì „ë‹¬í•˜ë©´, -ì›ëž˜ 액티비티 ì¸ìŠ¤í„´ìŠ¤ì˜ ëª¨ë“ ë³´ê¸°ì™€ 리소스를 몽땅 누출시킵니다. (리소스 누출ì´ëž€ -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ ë³´ìœ ê¶Œì„ ìœ ì§€í•˜ê³ ìžˆì–´ 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë 수 ì—†ê³ , ë”°ë¼ì„œ ì—„ì²ë‚œ ì–‘ì˜ ë©”ëª¨ë¦¬ê°€ + ë˜ëŠ” {@link android.content.Context}와 ì—°ê´€ëœ ê¸°íƒ€ ëª¨ë“ ê°ì²´ê°€ ì´ì— 해당ë©ë‹ˆë‹¤. ì´ëŸ° ê²ƒì„ ì „ë‹¬í•˜ë©´, +ì›ëž˜ 액티비티 ì¸ìŠ¤í„´ìŠ¤ì˜ ëª¨ë“ ë³´ê¸°ì™€ 리소스를 몽땅 누출시킵니다. (리소스 누출ì´ëž€ +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë¦¬ì†ŒìŠ¤ì— ëŒ€í•œ ë³´ìœ ê¶Œì„ ìœ ì§€í•˜ê³ ìžˆì–´ 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë 수 ì—†ê³ , ë”°ë¼ì„œ ì—„ì²ë‚œ ì–‘ì˜ ë©”ëª¨ë¦¬ê°€ ì†ì‹¤ëœë‹¤ëŠ” 뜻입니다.)</p> -<p>그런 ë‹¤ìŒ {@link android.app.FragmentManager}를 사용하여 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•©ë‹ˆë‹¤. -프래그먼트ì—서 ë°ì´í„° ê°ì²´ë¥¼ ê°€ì ¸ì˜¤ë ¤ë©´ 런타임 구성 변경 ì¤‘ì— ì•¡í‹°ë¹„í‹°ê°€ 다시 시작ë 때 +<p>그런 ë‹¤ìŒ {@link android.app.FragmentManager}를 사용하여 프래그먼트를 ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•©ë‹ˆë‹¤. +프래그먼트ì—서 ë°ì´í„° ê°ì²´ë¥¼ ê°€ì ¸ì˜¤ë ¤ë©´ 런타임 구성 변경 ì¤‘ì— ì•¡í‹°ë¹„í‹°ê°€ 다시 시작ë 때 ê°€ì ¸ì˜¤ë©´ ë©ë‹ˆë‹¤. 예를 들어, 액티비티를 다ìŒê³¼ ê°™ì´ ì •ì˜í•©ë‹ˆë‹¤.</p> <pre> @@ -165,10 +165,10 @@ public class MyActivity extends Activity { } </pre> -<p>ì´ ì˜ˆì‹œì—서 {@link android.app.Activity#onCreate(Bundle) onCreate()}는 프래그먼트를 추가하거나 -ì´ì— 대한 참조를 ë³µì›í•©ë‹ˆë‹¤. {@link android.app.Activity#onCreate(Bundle) onCreate()} ë˜í•œ -프래그먼트 ì¸ìŠ¤í„´ìŠ¤ ì•ˆì— ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. -{@link android.app.Activity#onDestroy() onDestroy()}는 ë³´ì¡´ëœ +<p>ì´ ì˜ˆì‹œì—서 {@link android.app.Activity#onCreate(Bundle) onCreate()}는 프래그먼트를 추가하거나 +ì´ì— 대한 참조를 ë³µì›í•©ë‹ˆë‹¤. {@link android.app.Activity#onCreate(Bundle) onCreate()} ë˜í•œ +프래그먼트 ì¸ìŠ¤í„´ìŠ¤ ì•ˆì— ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ ì €ìž¥í•©ë‹ˆë‹¤. +{@link android.app.Activity#onDestroy() onDestroy()}는 ë³´ì¡´ëœ í”„ëž˜ê·¸ë¨¼íŠ¸ ì¸ìŠ¤í„´ìŠ¤ ë‚´ë¶€ì˜ ìƒíƒœ ì €ìž¥ ê°ì²´ë¥¼ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤.</p> @@ -177,26 +177,26 @@ public class MyActivity extends Activity { <h2 id="HandlingTheChange">구성 변경 ì§ì ‘ 처리하기</h2> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ íŠ¹ì • 구성 변경 ì¤‘ì— ë¦¬ì†ŒìŠ¤ë¥¼ ì—…ë°ì´íŠ¸í•˜ì§€ ì•Šì•„ë„ ë˜ê³ -그와 <em>ë™ì‹œì—</em> 성능 한계가 있어 액티비티 다시 ì‹œìž‘ì„ í”¼í•´ì•¼ 하는 경우, -액티비티가 구성 ë³€ê²½ì„ ì•Œì•„ì„œ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ë©´ ë©ë‹ˆë‹¤. +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ íŠ¹ì • 구성 변경 ì¤‘ì— ë¦¬ì†ŒìŠ¤ë¥¼ ì—…ë°ì´íŠ¸í•˜ì§€ ì•Šì•„ë„ ë˜ê³ +그와 <em>ë™ì‹œì—</em> 성능 한계가 있어 액티비티 다시 ì‹œìž‘ì„ í”¼í•´ì•¼ 하는 경우, +액티비티가 구성 ë³€ê²½ì„ ì•Œì•„ì„œ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ë©´ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하지 않ë„ë¡ ë°©ì§€í• ìˆ˜ 있습니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 구성 ë³€ê²½ì„ ì§ì ‘ 처리하면 대체 리소스를 사용하는 ê²ƒì´ -훨씬 ë” ê¹Œë‹¤ë¡œì›Œì§ˆ 수 있습니다. ì‹œìŠ¤í…œì´ ê°œë°œìž ëŒ€ì‹ ìžë™ìœ¼ë¡œ ì´ë¥¼ ì 용해주지 않기 -때문입니다. ì´ ê¸°ë²•ì€ êµ¬ì„± 변경으로 ì¸í•œ ìž¬ì‹œìž‘ì„ ë°˜ë“œì‹œ 피해야만 하는 경우 ìµœí›„ì˜ ìˆ˜ë‹¨ìœ¼ë¡œì„œë§Œ +<p class="note"><strong>ì°¸ê³ :</strong> 구성 ë³€ê²½ì„ ì§ì ‘ 처리하면 대체 리소스를 사용하는 ê²ƒì´ +훨씬 ë” ê¹Œë‹¤ë¡œì›Œì§ˆ 수 있습니다. ì‹œìŠ¤í…œì´ ê°œë°œìž ëŒ€ì‹ ìžë™ìœ¼ë¡œ ì´ë¥¼ ì 용해주지 않기 +때문입니다. ì´ ê¸°ë²•ì€ êµ¬ì„± 변경으로 ì¸í•œ ìž¬ì‹œìž‘ì„ ë°˜ë“œì‹œ 피해야만 하는 경우 ìµœí›„ì˜ ìˆ˜ë‹¨ìœ¼ë¡œì„œë§Œ ê³ ë ¤í•´ì•¼ 하며 ëŒ€ë¶€ë¶„ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 권장하지 않습니다.</p> -<p>액티비티가 구성 ë³€ê²½ì„ ì§ì ‘ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ë ¤ë©´, 매니페스트 파ì¼ì˜ ì ì ˆí•œ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 요소를 편집하여 +<p>액티비티가 구성 ë³€ê²½ì„ ì§ì ‘ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ë ¤ë©´, 매니페스트 파ì¼ì˜ ì ì ˆí•œ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 요소를 편집하여 ì²˜ë¦¬í•˜ê³ ìž í•˜ëŠ” êµ¬ì„±ì„ ë‚˜íƒ€ë‚´ëŠ” ê°’ì´ ìžˆëŠ” <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code -android:configChanges}</a> ì†ì„±ì„ í¬í•¨í•˜ë„ë¡ +android:configChanges}</a> ì†ì„±ì„ í¬í•¨í•˜ë„ë¡ í•©ë‹ˆë‹¤. 가능한 ê°’ì€ <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code -android:configChanges}</a> ì†ì„±ì— 대한 ê´€ë ¨ ë¬¸ì„œì— ëª©ë¡ìœ¼ë¡œ 나열ë˜ì–´ 있습니다(가장 보편ì 으로 사용ë˜ëŠ” ê°’ì€ í™”ë©´ ë°©í–¥ì´ ë³€ê²½ë 때 다시 ì‹œìž‘ì„ ë°©ì§€í•˜ëŠ” {@code "orientation"}ê³¼ +android:configChanges}</a> ì†ì„±ì— 대한 ê´€ë ¨ ë¬¸ì„œì— ëª©ë¡ìœ¼ë¡œ 나열ë˜ì–´ 있습니다(가장 보편ì 으로 사용ë˜ëŠ” ê°’ì€ í™”ë©´ ë°©í–¥ì´ ë³€ê²½ë 때 다시 ì‹œìž‘ì„ ë°©ì§€í•˜ëŠ” {@code "orientation"}ê³¼ 키보드 ê°€ìš©ì„±ì´ ë³€ê²½ë 때 다시 ì‹œìž‘ì„ ë°©ì§€í•˜ëŠ” {@code "keyboardHidden"} -입니다). ì´ ì†ì„±ì—는 여러 ê°œì˜ êµ¬ì„± ê°’ì„ ì„ ì–¸í• ìˆ˜ 있습니다. ê°ê°ì„ +입니다). ì´ ì†ì„±ì—는 여러 ê°œì˜ êµ¬ì„± ê°’ì„ ì„ ì–¸í• ìˆ˜ 있습니다. ê°ê°ì„ 파ì´í”„ {@code |} 문ìžë¡œ 구분하면 ë©ë‹ˆë‹¤.</p> -<p>예를 들어 ë‹¤ìŒ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 코드는 화면 ë°©í–¥ 변경과 키보드 가용성 ë³€ê²½ì„ ë‘˜ 다 +<p>예를 들어 ë‹¤ìŒ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ 코드는 화면 ë°©í–¥ 변경과 키보드 가용성 ë³€ê²½ì„ ë‘˜ 다 처리하는 액티비티를 ì„ ì–¸í•˜ëŠ” 것입니다.</p> <pre> @@ -205,29 +205,29 @@ android:configChanges}</a> ì†ì„±ì— 대한 ê´€ë ¨ ë¬¸ì„œì— ëª©ë¡ìœ¼ë¡œ 나열 android:label="@string/app_name"> </pre> -<p>ì´ì œ ì´ëŸ¬í•œ 구성 중 하나가 변경ë˜ì–´ë„ {@code MyActivity}는 다시 시작하지 않습니다. +<p>ì´ì œ ì´ëŸ¬í•œ 구성 중 하나가 변경ë˜ì–´ë„ {@code MyActivity}는 다시 시작하지 않습니다. ê·¸ ëŒ€ì‹ , {@code MyActivity}ê°€ {@link -android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}ë¡œì˜ í˜¸ì¶œì„ ë°›ìŠµë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” -{@link android.content.res.Configuration} ê°ì²´ë¡œ ì „ë‹¬ë˜ë©°, ì´ëŠ” 새 기기 êµ¬ì„±ì„ -나타냅니다. {@link android.content.res.Configuration}ì˜ í•„ë“œë¥¼ ì½ì–´ë³´ë©´ -새 êµ¬ì„±ì„ íŒë³„í• ìˆ˜ ìžˆê³ ì ì ˆí•œ ë³€ê²½ì„ í• ìˆ˜ 있습니다. ê·¸ëŸ¬ë ¤ë©´ ì¸í„°íŽ˜ì´ìŠ¤ì— ì‚¬ìš©ëœ ë¦¬ì†ŒìŠ¤ë¥¼ -ì—…ë°ì´íŠ¸í•˜ë©´ ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œê°€ -호출ë˜ë©´, ì•¡í‹°ë¹„í‹°ì˜ {@link android.content.res.Resources} ê°ì²´ê°€ -ì—…ë°ì´íЏë˜ì–´ 새 êµ¬ì„±ì— ê¸°ë°˜í•œ 리소스를 반환하며, ë”°ë¼ì„œ ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하지 ì•Šì•„ë„ +android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}ë¡œì˜ í˜¸ì¶œì„ ë°›ìŠµë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” +{@link android.content.res.Configuration} ê°ì²´ë¡œ ì „ë‹¬ë˜ë©°, ì´ëŠ” 새 기기 êµ¬ì„±ì„ +나타냅니다. {@link android.content.res.Configuration}ì˜ í•„ë“œë¥¼ ì½ì–´ë³´ë©´ +새 êµ¬ì„±ì„ íŒë³„í• ìˆ˜ ìžˆê³ ì ì ˆí•œ ë³€ê²½ì„ í• ìˆ˜ 있습니다. ê·¸ëŸ¬ë ¤ë©´ ì¸í„°íŽ˜ì´ìŠ¤ì— ì‚¬ìš©ëœ ë¦¬ì†ŒìŠ¤ë¥¼ +ì—…ë°ì´íŠ¸í•˜ë©´ ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œê°€ +호출ë˜ë©´, ì•¡í‹°ë¹„í‹°ì˜ {@link android.content.res.Resources} ê°ì²´ê°€ +ì—…ë°ì´íЏë˜ì–´ 새 êµ¬ì„±ì— ê¸°ë°˜í•œ 리소스를 반환하며, ë”°ë¼ì„œ ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하지 ì•Šì•„ë„ UIì˜ ìš”ì†Œë¥¼ ì†ì‰½ê²Œ ìž¬ì„¤ì •í• ìˆ˜ 있게 ë©ë‹ˆë‹¤.</p> -<p class="caution"><strong>주ì˜:</strong> Android 3.2(API ë ˆë²¨ 13)부터 기기가 -세로 ë°©í–¥ ë° ê°€ë¡œ ë°©í–¥ 사ì´ë¥¼ ì „í™˜í• ë•Œ <strong>"화면 í¬ê¸°"ë„ -ê°™ì´ ë³€ê²½ë©ë‹ˆë‹¤</strong>. ë”°ë¼ì„œ, +<p class="caution"><strong>주ì˜:</strong> Android 3.2(API ë ˆë²¨ 13)부터 기기가 +세로 ë°©í–¥ ë° ê°€ë¡œ ë°©í–¥ 사ì´ë¥¼ ì „í™˜í• ë•Œ <strong>"화면 í¬ê¸°"ë„ +ê°™ì´ ë³€ê²½ë©ë‹ˆë‹¤</strong>. ë”°ë¼ì„œ, API ë ˆë²¨ 13 ì´ìƒ(<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> ë° <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> ì†ì„±ì—서 ì„ ì–¸í•œ ë‚´ìš©ì— ë”°ë¦„)ì„ ëŒ€ìƒìœ¼ë¡œ 개발하는 경우 ë°©í–¥ 변경으로 ì¸í•œ 런타임 다시 ì‹œìž‘ì„ ë°©ì§€í•˜ê³ ìž í•˜ë©´, {@code "orientation"} ê°’ ì™¸ì— {@code "screenSize"} ê°’ë„ í¬í•¨ì‹œì¼œì•¼ 합니다. 다시 ë§í•´, {@code -android:configChanges="orientation|screenSize"}를 ì„ ì–¸í•´ì•¼ 합니다. 하지만, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ API ë ˆë²¨ 12 ì´í•˜ë¥¼ -대ìƒìœ¼ë¡œ 하는 경우ë¼ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–¸ì œë“ ì´ êµ¬ì„± ë³€ê²½ì„ ì•Œì•„ì„œ 처리합니다(ì´ êµ¬ì„± ë³€ê²½ì€ +android:configChanges="orientation|screenSize"}를 ì„ ì–¸í•´ì•¼ 합니다. 하지만, ì• í”Œë¦¬ì¼€ì´ì…˜ì´ API ë ˆë²¨ 12 ì´í•˜ë¥¼ +대ìƒìœ¼ë¡œ 하는 경우ë¼ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì–¸ì œë“ ì´ êµ¬ì„± ë³€ê²½ì„ ì•Œì•„ì„œ 처리합니다(ì´ êµ¬ì„± ë³€ê²½ì€ ì•¡í‹°ë¹„í‹°ë¥¼ 다시 시작하지 않습니다. ì´ëŠ” Android 3.2 ì´ìƒ 기기ì—서 실행ë˜ëŠ” 경우ì—ë„ ë§ˆì°¬ê°€ì§€ìž…ë‹ˆë‹¤).</p> <p>예를 들어, ë‹¤ìŒ {@link -android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} êµ¬í˜„ì€ +android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} êµ¬í˜„ì€ í˜„ìž¬ ê¸°ê¸°ì˜ ë°©í–¥ì„ í™•ì¸í•©ë‹ˆë‹¤.</p> <pre> @@ -244,36 +244,36 @@ public void onConfigurationChanged(Configuration newConfig) { } </pre> -<p>{@link android.content.res.Configuration} ê°ì²´ëŠ” ë³€ê²½ëœ ê²ƒë§Œì´ ì•„ë‹ˆë¼ í˜„ìž¬ -구성 ì „ì²´ë¥¼ 나타냅니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì—는 êµ¬ì„±ì´ ì •í™•ížˆ 어떻게 -변경ë˜ì—ˆëŠ”ì§€ì—는 ê´€ì‹¬ì´ ì—†ê³ ì²˜ë¦¬ ì¤‘ì¸ êµ¬ì„±ì— ëŒ€ì²´ 리소스를 ì œê³µí•˜ëŠ” ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ ê·¸ì € +<p>{@link android.content.res.Configuration} ê°ì²´ëŠ” ë³€ê²½ëœ ê²ƒë§Œì´ ì•„ë‹ˆë¼ í˜„ìž¬ +구성 ì „ì²´ë¥¼ 나타냅니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì—는 êµ¬ì„±ì´ ì •í™•ížˆ 어떻게 +변경ë˜ì—ˆëŠ”ì§€ì—는 ê´€ì‹¬ì´ ì—†ê³ ì²˜ë¦¬ ì¤‘ì¸ êµ¬ì„±ì— ëŒ€ì²´ 리소스를 ì œê³µí•˜ëŠ” ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ ê·¸ì € ìž¬í• ë‹¹í•˜ê¸°ë§Œ 하면 ë©ë‹ˆë‹¤. 예를 들어 ì´ì œ {@link android.content.res.Resources} ê°ì²´ê°€ ì—…ë°ì´íЏë˜ì—ˆìœ¼ë‹ˆ {@link android.widget.ImageView#setImageResource(int) -setImageResource()}ê°€ 있는 ëª¨ë“ -{@link android.widget.ImageView}와 +setImageResource()}ê°€ 있는 ëª¨ë“ +{@link android.widget.ImageView}와 새 êµ¬ì„±ì— ëŒ€í•œ ì ì ˆí•œ 리소스를 ìž¬ì„¤ì •í• ìˆ˜ 있습니다(<a href="providing-resources.html#AlternateResources">리소스 ì œê³µ</a>ì— ì„¤ëª…ëœ ë°”ì™€ ê°™ìŒ).</p> <p>{@link -android.content.res.Configuration} 필드ì—서 ê°€ì ¸ì˜¨ ê°’ì´ -{@link android.content.res.Configuration} í´ëž˜ìФì—서 ê°€ì ¸ì˜¨ íŠ¹ì • ìƒìˆ˜ì™€ ì¼ì¹˜í•˜ëŠ” ì •ìˆ˜ë¼ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ê° í•„ë“œì— +android.content.res.Configuration} 필드ì—서 ê°€ì ¸ì˜¨ ê°’ì´ +{@link android.content.res.Configuration} í´ëž˜ìФì—서 ê°€ì ¸ì˜¨ íŠ¹ì • ìƒìˆ˜ì™€ ì¼ì¹˜í•˜ëŠ” ì •ìˆ˜ë¼ëŠ” ì ì„ ëˆˆì—¬ê²¨ ë³´ì‹ì‹œì˜¤. ê° í•„ë“œì— ì–´ëŠ ìƒìˆ˜ë¥¼ ì¨ì•¼ í•˜ëŠ”ì§€ì— ëŒ€í•œ ê´€ë ¨ 문서는 {@link android.content.res.Configuration} ì°¸ì¡°ì— ìžˆëŠ” ì ì ˆí•œ 필드를 참조하ì‹ì‹œì˜¤.</p> -<p class="note"><strong>ëª…ì‹¬í• ì :</strong> 액티비티가 ì§ì ‘ 구성 ë³€ê²½ì„ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ëŠ” 경우, -대체를 ì œê³µí•˜ëŠ” ëª¨ë“ ìš”ì†Œì— ëŒ€í•´ 본ì¸ì´ ì§ì ‘ ì±…ìž„ì„ ì§€ê²Œ ë©ë‹ˆë‹¤. 액티비티가 ì§ì ‘ -ë°©í–¥ ë³€ê²½ì„ ì²˜ë¦¬í•˜ê³ ê°€ë¡œ ë° ì„¸ë¡œ ë°©í–¥ 사ì´ì—서 바뀌어야 하는 ì´ë¯¸ì§€ê°€ 있는 경우, +<p class="note"><strong>ëª…ì‹¬í• ì :</strong> 액티비티가 ì§ì ‘ 구성 ë³€ê²½ì„ ì²˜ë¦¬í•œë‹¤ê³ ì„ ì–¸í•˜ëŠ” 경우, +대체를 ì œê³µí•˜ëŠ” ëª¨ë“ ìš”ì†Œì— ëŒ€í•´ 본ì¸ì´ ì§ì ‘ ì±…ìž„ì„ ì§€ê²Œ ë©ë‹ˆë‹¤. 액티비티가 ì§ì ‘ +ë°©í–¥ ë³€ê²½ì„ ì²˜ë¦¬í•˜ê³ ê°€ë¡œ ë° ì„¸ë¡œ ë°©í–¥ 사ì´ì—서 바뀌어야 하는 ì´ë¯¸ì§€ê°€ 있는 경우, ê° ë¦¬ì†ŒìŠ¤ë¥¼ ê° ìš”ì†Œì— ìž¬í• ë‹¹í•´ì•¼ 하며 ì´ë¥¼ {@link android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} ì¤‘ì— ìˆ˜í–‰í•´ì•¼ 합니다.</p> -<p>ì´ëŸ¬í•œ 구성 ë³€ê²½ì„ ê¸°ë°˜ìœ¼ë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì—…ë°ì´íŠ¸í•˜ì§€ ì•Šì•„ë„ ë˜ëŠ” 경우, +<p>ì´ëŸ¬í•œ 구성 ë³€ê²½ì„ ê¸°ë°˜ìœ¼ë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì—…ë°ì´íŠ¸í•˜ì§€ ì•Šì•„ë„ ë˜ëŠ” 경우, ëŒ€ì‹ {@link -android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}를 구현하지 <em>않으면</em> ë©ë‹ˆë‹¤. ì´ëŸ° -경우, 구성 변경 ì „ì— ì“°ì˜€ë˜ ë¦¬ì†ŒìŠ¤ê°€ ëª¨ë‘ ê·¸ëŒ€ë¡œ 사용ë˜ê³ ì•¡í‹°ë¹„í‹°ì˜ ë‹¤ì‹œ 시작만 -피한 ê²ƒì´ ë©ë‹ˆë‹¤. 그러나, ì• í”Œë¦¬ì¼€ì´ì…˜ì€ -ì–¸ì œë“ ì¢…ë£Œë˜ê³ ì´ì „ ìƒíƒœë¥¼ 그대로 ìœ ì§€í•œ 채 다시 시작ë 수 있어야 합니다 ì •ìƒì ì¸ ì•¡í‹°ë¹„í‹° -수명 주기 ì¤‘ì— ìƒíƒœ ìœ ì§€ì—ì„œì˜ íƒˆì¶œ 방안으로 ì´ ê¸°ë²•ì„ ê³ ë ¤í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -다시 시작ë˜ì§€ 않ë„ë¡ ë°©ì§€í• ìˆ˜ 없는, 다른 구성 ë³€ê²½ë„ ì—¬ëŸ¿ 있어서ì¼ë¿ë§Œ 아니ë¼, 사용ìžê°€ -ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚¬ì„ ê²½ìš° 해당 사용ìžê°€ 다시 ëŒì•„오기 ì „ì— ì†Œë©¸ë˜ëŠ” 것과 ê°™ì€ ì´ë²¤íŠ¸ë¥¼ 처리해야 하기 때문ì´ë¼ëŠ” +android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}를 구현하지 <em>않으면</em> ë©ë‹ˆë‹¤. ì´ëŸ° +경우, 구성 변경 ì „ì— ì“°ì˜€ë˜ ë¦¬ì†ŒìŠ¤ê°€ ëª¨ë‘ ê·¸ëŒ€ë¡œ 사용ë˜ê³ ì•¡í‹°ë¹„í‹°ì˜ ë‹¤ì‹œ 시작만 +피한 ê²ƒì´ ë©ë‹ˆë‹¤. 그러나, ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +ì–¸ì œë“ ì¢…ë£Œë˜ê³ ì´ì „ ìƒíƒœë¥¼ 그대로 ìœ ì§€í•œ 채 다시 시작ë 수 있어야 합니다 ì •ìƒì ì¸ ì•¡í‹°ë¹„í‹° +수명 주기 ì¤‘ì— ìƒíƒœ ìœ ì§€ì—ì„œì˜ íƒˆì¶œ 방안으로 ì´ ê¸°ë²•ì„ ê³ ë ¤í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ì´ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +다시 시작ë˜ì§€ 않ë„ë¡ ë°©ì§€í• ìˆ˜ 없는, 다른 구성 ë³€ê²½ë„ ì—¬ëŸ¿ 있어서ì¼ë¿ë§Œ 아니ë¼, 사용ìžê°€ +ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ë– ë‚¬ì„ ê²½ìš° 해당 사용ìžê°€ 다시 ëŒì•„오기 ì „ì— ì†Œë©¸ë˜ëŠ” 것과 ê°™ì€ ì´ë²¤íŠ¸ë¥¼ 처리해야 하기 때문ì´ë¼ëŠ” ì´ìœ ë„ ìžˆìŠµë‹ˆë‹¤.</p> <p>액티비티 ë‚´ì—서 ì²˜ë¦¬í• ìˆ˜ 있는 구성 ë³€ê²½ì´ ë¬´ì—‡ì¸ì§€ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code diff --git a/docs/html-intl/intl/ko/guide/topics/ui/controls.jd b/docs/html-intl/intl/ko/guide/topics/ui/controls.jd index bf873980beb6..9561ba05771b 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/controls.jd @@ -7,11 +7,11 @@ parent.link=index.html <img src="{@docRoot}images/ui/ui-controls.png" alt="" style="margin:0" /> </div> -<p>ìž…ë ¥ ì œì–´ëŠ” ì•±ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— ìžˆëŠ” 대화형 구성 요소입니다. +<p>ìž…ë ¥ ì œì–´ëŠ” ì•±ì˜ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— ìžˆëŠ” 대화형 구성 요소입니다. Android는 버튼, í…스트 필드, 찾기 막대, 확ì¸ëž€, 확대 버튼, ì „í™˜ 버튼 등과 ê°™ì´ UIì—서 ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ë§¤ìš° 다양한 ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>UIì— ìž…ë ¥ ì œì–´ë¥¼ ì¶”ê°€í•˜ë ¤ë©´ 단순히 <a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML ë ˆì´ì•„웃</a>ì— XML 요소를 하나 추가하기만 하면 ë©ë‹ˆë‹¤. +<p>UIì— ìž…ë ¥ ì œì–´ë¥¼ ì¶”ê°€í•˜ë ¤ë©´ 단순히 <a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML ë ˆì´ì•„웃</a>ì— XML 요소를 하나 추가하기만 하면 ë©ë‹ˆë‹¤. 다ìŒì€ í…스트 필드와 ë²„íŠ¼ì´ ìžˆëŠ” ë ˆì´ì•„ì›ƒì„ ì˜ˆì‹œë¡œ 나타낸 것입니다.</p> <pre style="clear:right"> @@ -33,16 +33,16 @@ UIì—서 ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ë§¤ìš° 다양한 ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> </LinearLayout> </pre> -<p>ê° ìž…ë ¥ ì œì–´ëŠ” íŠ¹ì •í•œ ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ ì§€ì›í•˜ë¯€ë¡œ, 사용ìžê°€ í…스트를 ìž…ë ¥í• ë•Œ ë˜ëŠ” ë²„íŠ¼ì„ í„°ì¹˜í• ë•Œ +<p>ê° ìž…ë ¥ ì œì–´ëŠ” íŠ¹ì •í•œ ìž…ë ¥ ì´ë²¤íŠ¸ë¥¼ ì§€ì›í•˜ë¯€ë¡œ, 사용ìžê°€ í…스트를 ìž…ë ¥í• ë•Œ ë˜ëŠ” ë²„íŠ¼ì„ í„°ì¹˜í• ë•Œ ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</p> <h2 id="CommonControls">보편ì ì¸ ì œì–´</h2> -<p>다ìŒì€ 앱ì—서 ì‚¬ìš©í• ìˆ˜ 있는 몇 가지 보편ì ì¸ ì œì–´ë¥¼ 목ë¡ìœ¼ë¡œ 나열한 것입니다. ë§í¬ë¥¼ ë”°ë¼ê°€ë©´ ê° ì œì–´ì— ëŒ€í•´ +<p>다ìŒì€ 앱ì—서 ì‚¬ìš©í• ìˆ˜ 있는 몇 가지 보편ì ì¸ ì œì–´ë¥¼ 목ë¡ìœ¼ë¡œ 나열한 것입니다. ë§í¬ë¥¼ ë”°ë¼ê°€ë©´ ê° ì œì–´ì— ëŒ€í•´ 좀 ë” ìžì„¸ížˆ 알아볼 수 있습니다.</p> <p class="note"><strong>ì°¸ê³ :</strong> Android는 ì—¬ê¸°ì— ë‚˜ì—´ëœ ê²ƒë³´ë‹¤ 몇 가지 ë” ë§Žì€ ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤. - ë” ë§Žì€ ë‚´ìš©ì„ ì•Œì•„ë³´ë ¤ë©´ {@link android.widget} 패키지를 íƒìƒ‰í•´ë³´ì‹ì‹œì˜¤. + ë” ë§Žì€ ë‚´ìš©ì„ ì•Œì•„ë³´ë ¤ë©´ {@link android.widget} 패키지를 íƒìƒ‰í•´ë³´ì‹ì‹œì˜¤. ì•±ì— íŠ¹ì •í•œ ì¢…ë¥˜ì˜ ìž…ë ¥ ì œì–´ê°€ 필요한 경우, ë‚˜ë¦„ì˜ <a href="{@docRoot}guide/topics/ui/custom-components.html">ì‚¬ìš©ìž ì§€ì • 구성 요소</a>를 ì§ì ‘ êµ¬ì¶•í•´ë„ ë©ë‹ˆë‹¤.</p> <table> @@ -69,7 +69,7 @@ UIì—서 ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ë§¤ìš° 다양한 ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤.</p> <tr> <td><a href="controls/radiobutton.html">ë¬´ì„ ë²„íŠ¼</a></td> <td>확ì¸ëž€ê³¼ 비슷하지만, 예외가 있다면 그룹 ë‚´ì—서 하나만 ì„ íƒí• 수 있다는 ì 입니다.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/ko/guide/topics/ui/declaring-layout.jd index 78832368b222..97f9083d6a57 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/declaring-layout.jd @@ -34,14 +34,14 @@ page.tags=view,viewgroup <h2>ì°¸ê³ í•목</h2> <ol> - <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">간단한 ì‚¬ìš©ìž + <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">간단한 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ 구축</a></li> </div> </div> <p>ë ˆì´ì•„ì›ƒì€ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì— ëŒ€í•œ 시ê°ì 구조를 ì •ì˜í•©ë‹ˆë‹¤. 예컨대 <a href="{@docRoot}guide/components/activities.html">액티비티</a> ë˜ëŠ” <a href="{@docRoot}guide/topics/appwidgets/index.html">앱 ìœ„ì ¯</a>ì— ëŒ€í•œ UIê°€ ì´ì— 해당ë©ë‹ˆë‹¤. ë ˆì´ì•„ì›ƒì„ ì„ ì–¸í•˜ëŠ” ë°ì—는 다ìŒê³¼ ê°™ì€ ë‘ ê°€ì§€ ë°©ë²•ì´ ìžˆìŠµë‹ˆë‹¤.</p> <ul> -<li><strong>UI 요소를 XML로 ì„ ì–¸</strong>. Androidê°€ ìœ„ì ¯ê³¼ ë ˆì´ì•„웃 등과 ê°™ì´ +<li><strong>UI 요소를 XML로 ì„ ì–¸</strong>. Androidê°€ ìœ„ì ¯ê³¼ ë ˆì´ì•„웃 등과 ê°™ì´ ë³´ê¸° í´ëž˜ìŠ¤ì™€ 하위 í´ëž˜ìŠ¤ì— ìƒì‘하는 간단한 XML 어휘를 ì œê³µí•©ë‹ˆë‹¤.</li> <li><strong>ëŸ°íƒ€ìž„ì— ë ˆì´ì•„웃 요소를 ì¸ìŠ¤í„´íŠ¸í™”</strong>. ì• í”Œë¦¬ì¼€ì´ì…˜ì´ í”„ë¡œê·¸ëž˜ë° ë°©ë²•ìœ¼ë¡œ 보기 ë° ViewGroupê°ì²´ë¥¼ 만들 수 있습니다(ê·¸ë¦¬ê³ ê·¸ ì†ì„±ì„ ì¡°ìž‘í•˜ê¸°ë„ í•©ë‹ˆë‹¤). </li> @@ -55,26 +55,26 @@ page.tags=view,viewgroup <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">Eclipseìš© ADT 플러그ì¸</a>ì´ XMLì˜ ë ˆì´ì•„웃 미리보기를 ì œê³µí•©ë‹ˆë‹¤. — XML 파ì¼ì´ 열린 ìƒíƒœì—서 <strong>ë ˆì´ì•„웃</strong> íƒì„ ì„ íƒí•˜ì‹ì‹œì˜¤.</li> - <li>ë˜í•œ, -<a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">계층 ë·°ì–´</a> ë„구로 -ë ˆì´ì•„웃 ë””ë²„ê¹…ë„ ì‹œë„í•´ 보아야 합니다.—ì´ê²ƒì€ ë ˆì´ì•„웃 ì†ì„± ê°’ì„ ë“œëŸ¬ë‚´ê³ , -ë‚´ë¶€ 여백/여백 표시기가 있는 와ì´ì–´í”„ë ˆìž„ì„ ê·¸ë¦¬ë©° 개발ìžê°€ ì—ë®¬ë ˆì´í„° ë˜ëŠ” 기기ì—서 디버깅하는 ë™ì•ˆ + <li>ë˜í•œ, +<a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">계층 ë·°ì–´</a> ë„구로 +ë ˆì´ì•„웃 ë””ë²„ê¹…ë„ ì‹œë„í•´ 보아야 합니다.—ì´ê²ƒì€ ë ˆì´ì•„웃 ì†ì„± ê°’ì„ ë“œëŸ¬ë‚´ê³ , +ë‚´ë¶€ 여백/여백 표시기가 있는 와ì´ì–´í”„ë ˆìž„ì„ ê·¸ë¦¬ë©° 개발ìžê°€ ì—ë®¬ë ˆì´í„° ë˜ëŠ” 기기ì—서 디버깅하는 ë™ì•ˆ ì™„ì „ížˆ ë Œë”ë§ëœ 보기를 ì œê³µí•©ë‹ˆë‹¤.</li> <li><a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> ë„구를 사용하면 ë ˆì´ì•„웃과 ê³„ì¸µì„ ë¹„íš¨ìœ¨ì„± ë˜ëŠ” 다른 ë¬¸ì œì— ëŒ€í•˜ì—¬ 재빨리 ë¶„ì„í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</li> </div> </div> -<p>UI를 XML로 ì„ ì–¸í•˜ëŠ” ê²ƒì˜ ì´ì ì€ ì´ë ‡ê²Œ 하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê·¸ í–‰ë™ì„ ì œì–´í•˜ëŠ” 코드로부터 따로 표시하기가 ë” ì¢‹ë‹¤ëŠ” 것입니다. UI ì„¤ëª…ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì½”ë“œì˜ ì™¸ë¶€ì— ìžˆìŠµë‹ˆë‹¤. ì´ëŠ” 다시 ë§í•´ 소스 코드를 ìˆ˜ì •í•˜ê³ ë‹¤ì‹œ 컴파ì¼ë§í•˜ì§€ ì•Šì•„ë„ ì´ë¥¼ ìˆ˜ì • ë˜ëŠ” ë³€ê²½í• ìˆ˜ 있다는 뜻입니다. 예를 들어, 서로 다른 화면 ë°©í–¥, 사로 다른 기기 화면 í¬ê¸° ë° ì„œë¡œ 다른 ì–¸ì–´ì— ëŒ€í•´ XML ë ˆì´ì•„ì›ƒì„ ìƒì„±í• 수 있습니다. ì´ì™¸ì—ë„ ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ë©´ UIì˜ êµ¬ì¡°ë¥¼ 시ê°í™”하기가 ë” ì‰¬ìš°ë¯€ë¡œ ë¬¸ì œë¥¼ ë””ë²„ê¹…í•˜ê¸°ë„ ë” ì‰½ìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, ì´ ë¬¸ì„œëŠ” ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ëŠ” ë°©ë²•ì„ ê°€ë¥´ì¹˜ëŠ” ë° ì£¼ì•ˆì ì„ ë‘ê³ ìžˆìŠµë‹ˆë‹¤. ëŸ°íƒ€ìž„ì— ë³´ê¸° ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” ê²ƒì— í¥ë¯¸ê°€ 있는 경우, -{@link android.view.ViewGroup} ë° +<p>UI를 XML로 ì„ ì–¸í•˜ëŠ” ê²ƒì˜ ì´ì ì€ ì´ë ‡ê²Œ 하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê·¸ í–‰ë™ì„ ì œì–´í•˜ëŠ” 코드로부터 따로 표시하기가 ë” ì¢‹ë‹¤ëŠ” 것입니다. UI ì„¤ëª…ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì½”ë“œì˜ ì™¸ë¶€ì— ìžˆìŠµë‹ˆë‹¤. ì´ëŠ” 다시 ë§í•´ 소스 코드를 ìˆ˜ì •í•˜ê³ ë‹¤ì‹œ 컴파ì¼ë§í•˜ì§€ ì•Šì•„ë„ ì´ë¥¼ ìˆ˜ì • ë˜ëŠ” ë³€ê²½í• ìˆ˜ 있다는 뜻입니다. 예를 들어, 서로 다른 화면 ë°©í–¥, 사로 다른 기기 화면 í¬ê¸° ë° ì„œë¡œ 다른 ì–¸ì–´ì— ëŒ€í•´ XML ë ˆì´ì•„ì›ƒì„ ìƒì„±í• 수 있습니다. ì´ì™¸ì—ë„ ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ë©´ UIì˜ êµ¬ì¡°ë¥¼ 시ê°í™”하기가 ë” ì‰¬ìš°ë¯€ë¡œ ë¬¸ì œë¥¼ ë””ë²„ê¹…í•˜ê¸°ë„ ë” ì‰½ìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, ì´ ë¬¸ì„œëŠ” ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ëŠ” ë°©ë²•ì„ ê°€ë¥´ì¹˜ëŠ” ë° ì£¼ì•ˆì ì„ ë‘ê³ ìžˆìŠµë‹ˆë‹¤. ëŸ°íƒ€ìž„ì— ë³´ê¸° ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” ê²ƒì— í¥ë¯¸ê°€ 있는 경우, +{@link android.view.ViewGroup} ë° {@link android.view.View} í´ëž˜ìФ 참조를 참조하ì‹ì‹œì˜¤.</p> -<p>ì¼ë°˜ì 으로 UI 요소를 ì„ ì–¸í•˜ëŠ” ë° ì“°ì´ëŠ” XML 어휘는 í´ëž˜ìŠ¤ì™€ 메서드 ëª…ëª…ì„ ì¶©ì‹¤ížˆ 따릅니다. 여기ì—서 요소 ì´ë¦„ì€ í´ëž˜ìФ ì´ë¦„ì— ìƒì‘하며 ì†ì„± ì´ë¦„ì€ ë©”ì„œë“œì— ìƒì‘합니다. 사실 ì´ëŸ¬í•œ ì¼ì¹˜ì„±ì€ 아주 ì§ì ‘ì ì¸ ê²½ìš°ê°€ 잦아 ì–´ëŠ XML ì†ì„±ì´ í´ëž˜ìФ ë©”ì„œë“œì— ìƒì‘하는지를 ì¶”ì¸¡í• ìˆ˜ ìžˆê³ , ì–´ëŠ í´ëž˜ìŠ¤ê°€ 주어진 XML ìš”ì†Œì— ìƒì‘í•˜ëŠ”ì§€ë„ ì¶”ì¸¡í• ìˆ˜ 있습니다. 다만 ëª¨ë“ ì–´íœ˜ê°€ 다 같지는 않다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 몇몇 경우ì—는 ëª…ëª…ì— ì•½ê°„ì˜ ì°¨ì´ì ì´ ìžˆìŠµë‹ˆë‹¤. 예를 들어, -EditText 요소ì—는 <code>text</code> ì†ì„±ì´ 있으며 ì´ëŠ” +<p>ì¼ë°˜ì 으로 UI 요소를 ì„ ì–¸í•˜ëŠ” ë° ì“°ì´ëŠ” XML 어휘는 í´ëž˜ìŠ¤ì™€ 메서드 ëª…ëª…ì„ ì¶©ì‹¤ížˆ 따릅니다. 여기ì—서 요소 ì´ë¦„ì€ í´ëž˜ìФ ì´ë¦„ì— ìƒì‘하며 ì†ì„± ì´ë¦„ì€ ë©”ì„œë“œì— ìƒì‘합니다. 사실 ì´ëŸ¬í•œ ì¼ì¹˜ì„±ì€ 아주 ì§ì ‘ì ì¸ ê²½ìš°ê°€ 잦아 ì–´ëŠ XML ì†ì„±ì´ í´ëž˜ìФ ë©”ì„œë“œì— ìƒì‘하는지를 ì¶”ì¸¡í• ìˆ˜ ìžˆê³ , ì–´ëŠ í´ëž˜ìŠ¤ê°€ 주어진 XML ìš”ì†Œì— ìƒì‘í•˜ëŠ”ì§€ë„ ì¶”ì¸¡í• ìˆ˜ 있습니다. 다만 ëª¨ë“ ì–´íœ˜ê°€ 다 같지는 않다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 몇몇 경우ì—는 ëª…ëª…ì— ì•½ê°„ì˜ ì°¨ì´ì ì´ ìžˆìŠµë‹ˆë‹¤. 예를 들어, +EditText 요소ì—는 <code>text</code> ì†ì„±ì´ 있으며 ì´ëŠ” <code>EditText.setText()</code>ì— ìƒì‘합니다. </p> <p class="note"><strong>íŒ:</strong> 여러 가지 ë ˆì´ì•„웃 ìœ í˜•ì— ëŒ€í•´ì„œëŠ” <a href="{@docRoot}guide/topics/ui/layout-objects.html">보편ì ì¸ -ë ˆì´ì•„웃 ê°ì²´</a>를 참조하ì‹ì‹œì˜¤. 여러 가지 ë ˆì´ì•„ì›ƒì„ êµ¬ì¶•í•˜ëŠ” ë° ëŒ€í•œ íŠœí† ë¦¬ì–¼ 모ìŒë„ 있습니다. +ë ˆì´ì•„웃 ê°ì²´</a>를 참조하ì‹ì‹œì˜¤. 여러 가지 ë ˆì´ì•„ì›ƒì„ êµ¬ì¶•í•˜ëŠ” ë° ëŒ€í•œ íŠœí† ë¦¬ì–¼ 모ìŒë„ 있습니다. <a href="{@docRoot}resources/tutorials/views/index.html">Hello 보기</a> íŠœí† ë¦¬ì–¼ ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> <h2 id="write">XML 쓰기</h2> @@ -100,20 +100,20 @@ EditText 요소ì—는 <code>text</code> ì†ì„±ì´ 있으며 ì´ëŠ” </LinearLayout> </pre> -<p>ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ê³ ë‚˜ë©´ ê·¸ 파ì¼ì„ Android 프로ì íŠ¸ì˜ <code>res/layout/</code> ë””ë ‰í„°ë¦¬ ë‚´ì— +<p>ë ˆì´ì•„ì›ƒì„ XML로 ì„ ì–¸í•˜ê³ ë‚˜ë©´ ê·¸ 파ì¼ì„ Android 프로ì íŠ¸ì˜ <code>res/layout/</code> ë””ë ‰í„°ë¦¬ ë‚´ì— <code>.xml</code> 확장ìžë¡œ ì €ìž¥í•˜ì—¬ ì ì ˆí•˜ê²Œ 컴파ì¼ë§ë˜ë„ë¡ í•©ë‹ˆë‹¤. </p> <p>ë ˆì´ì•„웃 XML 파ì¼ì˜ êµ¬ë¬¸ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/resources/layout-resource.html">ë ˆì´ì•„웃 리소스</a> 문서ì—서 확ì¸í• 수 있습니다.</p> <h2 id="load">XML 리소스 로딩</h2> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 컴파ì¼ë§í•˜ëŠ” 경우, ê° XML ë ˆì´ì•„웃 파ì¼ì´ -{@link android.view.View} 리소스 ì•ˆì— ì»´íŒŒì¼ë§ë©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ 코드로부터 ê°€ì ¸ì˜¨ ë ˆì´ì•„웃 리소스는 -{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} 콜백 +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 컴파ì¼ë§í•˜ëŠ” 경우, ê° XML ë ˆì´ì•„웃 파ì¼ì´ +{@link android.view.View} 리소스 ì•ˆì— ì»´íŒŒì¼ë§ë©ë‹ˆë‹¤. ì• í”Œë¦¬ì¼€ì´ì…˜ 코드로부터 ê°€ì ¸ì˜¨ ë ˆì´ì•„웃 리소스는 +{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} 콜백 êµ¬í˜„ì— ë¡œë”©í•´ì•¼ 합니다. -ì´ë ‡ê²Œ í•˜ë ¤ë©´ <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>를 호출한 다ìŒ, ì´ë¥¼ +ì´ë ‡ê²Œ í•˜ë ¤ë©´ <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>를 호출한 다ìŒ, ì´ë¥¼ <code>R.layout.<em>layout_file_name</em></code> 형태로 ë ˆì´ì•„웃 ë¦¬ì†ŒìŠ¤ì˜ ì°¸ì¡°ì— ì „ë‹¬í•©ë‹ˆë‹¤. - 예를 들어, XML ë ˆì´ì•„ì›ƒì´ <code>main_layout.xml</code>로 ì €ìž¥ëœ ê²½ìš°, ì´ê²ƒì„ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ë¡œë”©í•˜ë ¤ë©´ + 예를 들어, XML ë ˆì´ì•„ì›ƒì´ <code>main_layout.xml</code>로 ì €ìž¥ëœ ê²½ìš°, ì´ê²ƒì„ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ë¡œë”©í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> public void onCreate(Bundle savedInstanceState) { @@ -122,8 +122,8 @@ public void onCreate(Bundle savedInstanceState) { } </pre> -<p>액티비티 ë‚´ì˜ <code>onCreate()</code> 콜백 메서드는 액티비티가 시작ë 때 -Android í”„ë ˆìž„ì›Œí¬ê°€ 호출합니다(수명 ì£¼ê¸°ì— ëŒ€í•œ ë…¼ì˜ëŠ” +<p>액티비티 ë‚´ì˜ <code>onCreate()</code> 콜백 메서드는 액티비티가 시작ë 때 +Android í”„ë ˆìž„ì›Œí¬ê°€ 호출합니다(수명 ì£¼ê¸°ì— ëŒ€í•œ ë…¼ì˜ëŠ” <a href="{@docRoot}guide/components/activities.html#Lifecycle">액티비티</a> 문서ì—서 확ì¸í•˜ì‹ì‹œì˜¤).</p> @@ -134,24 +134,24 @@ Android í”„ë ˆìž„ì›Œí¬ê°€ 호출합니다(수명 ì£¼ê¸°ì— ëŒ€í•œ ë…¼ì˜ëŠ” 몇몇 ì†ì„±ì€ 보기 ê°ì²´ì—ë§Œ 특화ë˜ì–´ 있지만(예를 들어, TextView는 <code>textSize</code> ì†ì„±ì„ ì§€ì›), ì´ì™€ ê°™ì€ ì†ì„±ì€ ì´ í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í• ìˆ˜ 있는 ëª¨ë“ ë³´ê¸° ê°ì²´ê°€ ìƒì†í•˜ê¸°ë„ 합니다. ëª¨ë“ ë³´ê¸° ê°ì²´ì— 공통으로 ì“°ì´ëŠ” ê²ƒë„ ëª‡ 가지 있습니다. 왜ëƒí•˜ë©´ ì´ë“¤ì€ 루트 보기 í´ëž˜ìФì—서 ìƒì†ëœ 것ì´ê¸° 때문입니다(예: -<code>id</code> ì†ì„±). ê·¸ë¦¬ê³ ë‚˜ë¨¸ì§€ ì†ì„±ì€ "ë ˆì´ì•„웃 매개변수"로 간주ë©ë‹ˆë‹¤. -ì´ë“¤ì€ 보기 ê°ì²´ì˜ íŠ¹ì •í•œ ë ˆì´ì•„웃 ë°©í–¥ì„ ì„¤ëª…í•˜ëŠ” 것으로, ì´ëŠ” 해당 ê°ì²´ì˜ ìƒìœ„ VeiwGroup ê°ì²´ì—서 +<code>id</code> ì†ì„±). ê·¸ë¦¬ê³ ë‚˜ë¨¸ì§€ ì†ì„±ì€ "ë ˆì´ì•„웃 매개변수"로 간주ë©ë‹ˆë‹¤. +ì´ë“¤ì€ 보기 ê°ì²´ì˜ íŠ¹ì •í•œ ë ˆì´ì•„웃 ë°©í–¥ì„ ì„¤ëª…í•˜ëŠ” 것으로, ì´ëŠ” 해당 ê°ì²´ì˜ ìƒìœ„ VeiwGroup ê°ì²´ì—서 ì •ì˜ëœ ë°”ì— ë”°ë¦…ë‹ˆë‹¤.</p> <h3 id="id">ID</h3> <p>ëª¨ë“ ë³´ê¸° ê°ì²´ì—는 ì—°ê´€ëœ ì •ìˆ˜ IDê°€ ìžˆì„ ìˆ˜ 있습니다. ì´ëŠ” 트리 ë‚´ì—서 해당 보기를 ê³ ìœ í•˜ê²Œ ì‹ë³„하기 위한 것입니다. -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 컴파ì¼ë§ë˜ë©´ ì´ IDê°€ ì •ìˆ˜ë¡œ 참조ë˜ì§€ë§Œ, ID는 -ì¼ë°˜ì 으로 ë ˆì´ì•„웃 XML 파ì¼ì— 문ìžì—´ë¡œ í• ë‹¹ë˜ë©°, <code>id</code> ì†ì„±ìœ¼ë¡œ 쓰입니다. +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 컴파ì¼ë§ë˜ë©´ ì´ IDê°€ ì •ìˆ˜ë¡œ 참조ë˜ì§€ë§Œ, ID는 +ì¼ë°˜ì 으로 ë ˆì´ì•„웃 XML 파ì¼ì— 문ìžì—´ë¡œ í• ë‹¹ë˜ë©°, <code>id</code> ì†ì„±ìœ¼ë¡œ 쓰입니다. ì´ê²ƒì€ ëª¨ë“ ë³´ê¸° ê°ì²´ì— 공통ì ì¸ XML ì†ì„±ìœ¼ë¡œ ({@link android.view.View} í´ëž˜ìŠ¤ê°€ ì •ì˜) ì´ê²ƒì„ 매우 ìžì£¼ 사용하게 ë©ë‹ˆë‹¤. IDì— ëŒ€í•œ, XML 태그 ë‚´ì— ìžˆëŠ” êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같습니다.</p> <pre>android:id="@+id/my_button"</pre> -<p>문ìžì—´ 시작 ë¶€ë¶„ì— ìžˆëŠ” 앳 기호(@)는 XML 파서가 ID 문ìžì—´ì˜ 나머지를 구문 ë¶„ì„í•˜ê³ í™•ìž¥í•˜ì—¬ -ID 리소스로 ì‹ë³„해야 한다는 ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ë”하기 기호(+)는 ì´ê²ƒì´ 새 리소스 ì´ë¦„ì´ë©°, -ì´ê²ƒì„ 반드시 ìƒì„±í•˜ì—¬ 우리 ë¦¬ì†ŒìŠ¤ì— ì¶”ê°€í•´ì•¼ 한다는 ê²ƒì„ ëœ»í•©ë‹ˆë‹¤(<code>R.java</code> 파ì¼ì—서). Android í”„ë ˆìž„ì›Œí¬ëŠ” 다른 ID ë¦¬ì†ŒìŠ¤ë„ ì•„ì£¼ ë§Žì´ -ì œê³µí•©ë‹ˆë‹¤. Android 리소스 ID를 ì°¸ì¡°í• ë•Œì—는 ë”하기 기호는 필요하지 않지만 +<p>문ìžì—´ 시작 ë¶€ë¶„ì— ìžˆëŠ” 앳 기호(@)는 XML 파서가 ID 문ìžì—´ì˜ 나머지를 구문 ë¶„ì„í•˜ê³ í™•ìž¥í•˜ì—¬ +ID 리소스로 ì‹ë³„해야 한다는 ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ë”하기 기호(+)는 ì´ê²ƒì´ 새 리소스 ì´ë¦„ì´ë©°, +ì´ê²ƒì„ 반드시 ìƒì„±í•˜ì—¬ 우리 ë¦¬ì†ŒìŠ¤ì— ì¶”ê°€í•´ì•¼ 한다는 ê²ƒì„ ëœ»í•©ë‹ˆë‹¤(<code>R.java</code> 파ì¼ì—서). Android í”„ë ˆìž„ì›Œí¬ëŠ” 다른 ID ë¦¬ì†ŒìŠ¤ë„ ì•„ì£¼ ë§Žì´ +ì œê³µí•©ë‹ˆë‹¤. Android 리소스 ID를 ì°¸ì¡°í• ë•Œì—는 ë”하기 기호는 필요하지 않지만 <code>android</code> 패키지 네임스페ì´ìŠ¤ë¥¼ 다ìŒê³¼ ê°™ì´ ë°˜ë“œì‹œ 추가해야 합니다.</p> <pre>android:id="@android:id/empty"</pre> <p><code>android</code> 패키지 네임스페ì´ìŠ¤ë¥¼ ì œìžë¦¬ì— 넣으면 ì´ì œ ID를 로컬 리소스 í´ëž˜ìФì—서가 ì•„ë‹ˆë¼ <code>android.R</code> @@ -174,54 +174,54 @@ Button myButton = (Button) findViewById(R.id.my_button); </pre> </li> </ol> -<p>{@link android.widget.RelativeLayout}ì„ ìƒì„±í• 때ì—는 보기 ê°ì²´ì˜ ID를 ì •ì˜í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. -관계 ë ˆì´ì•„웃ì—서는 í˜•ì œ 보기가 ë˜ ë‹¤ë¥¸ í˜•ì œ 보기와 ê´€ë ¨ëœ ìžì‹ ì˜ ë ˆì´ì•„ì›ƒì„ ì •ì˜í• 수 있으며, +<p>{@link android.widget.RelativeLayout}ì„ ìƒì„±í• 때ì—는 보기 ê°ì²´ì˜ ID를 ì •ì˜í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. +관계 ë ˆì´ì•„웃ì—서는 í˜•ì œ 보기가 ë˜ ë‹¤ë¥¸ í˜•ì œ 보기와 ê´€ë ¨ëœ ìžì‹ ì˜ ë ˆì´ì•„ì›ƒì„ ì •ì˜í• 수 있으며, ì´ë¥¼ ê³ ìœ í•œ ID로 참조하게 ë©ë‹ˆë‹¤.</p> -<p>ID는 트리 ì „ì²´ë¥¼ 통틀어 ê³ ìœ í• í•„ìš”ëŠ” 없지만, 트리ì—서 ê²€ìƒ‰í•˜ê³ ìžˆëŠ” 부분 ë‚´ì—서는 -ê³ ìœ í•´ì•¼ 합니다(ì´ê²ƒì´ 트리 ì „ì²´ì¸ ê²½ìš°ê°€ 잦으므로, 가급ì ì´ë©´ ì™„ì „ížˆ +<p>ID는 트리 ì „ì²´ë¥¼ 통틀어 ê³ ìœ í• í•„ìš”ëŠ” 없지만, 트리ì—서 ê²€ìƒ‰í•˜ê³ ìžˆëŠ” 부분 ë‚´ì—서는 +ê³ ìœ í•´ì•¼ 합니다(ì´ê²ƒì´ 트리 ì „ì²´ì¸ ê²½ìš°ê°€ 잦으므로, 가급ì ì´ë©´ ì™„ì „ížˆ ê³ ìœ í•œ ê²ƒì„ ì“°ëŠ” ê²ƒì´ ê°€ìž¥ 좋습니다).</p> <h3 id="layout-params">ë ˆì´ì•„웃 매개변수</h3> -<p><code>layout_<em>something</em></code>ì´ë¼ëŠ” XML ë ˆì´ì•„웃 ì†ì„±ì´ +<p><code>layout_<em>something</em></code>ì´ë¼ëŠ” XML ë ˆì´ì•„웃 ì†ì„±ì´ 보기가 ìƒì£¼í•˜ëŠ” ViewGroupì— ëŒ€í•´ ì ì ˆí•œ ë³´ê¸°ì˜ ë ˆì´ì•„웃 매개변수를 ì •ì˜í•©ë‹ˆë‹¤.</p> <p>ëª¨ë“ ViewGroup í´ëž˜ìŠ¤ê°€ ì¤‘ì²©ëœ í´ëž˜ìŠ¤ë¥¼ 하나씩 구현하며 ì´ê²ƒì´ {@link -android.view.ViewGroup.LayoutParams}를 확장합니다. ì´ í•˜ìœ„ í´ëž˜ìФì—는 -ê° í•˜ìœ„ ë³´ê¸°ì˜ í¬ê¸°ì™€ 위치를 보기 ê·¸ë£¹ì— ì ì ˆí•œ ë°©ì‹ìœ¼ë¡œ ì •ì˜í•˜ëŠ” -ì†ì„± ìœ í˜•ì´ ë“¤ì–´ 있습니다. 그림 1ì—서 ë³¼ 수 있듯ì´, ìƒìœ„ 보기 ê·¸ë£¹ì´ +android.view.ViewGroup.LayoutParams}를 확장합니다. ì´ í•˜ìœ„ í´ëž˜ìФì—는 +ê° í•˜ìœ„ ë³´ê¸°ì˜ í¬ê¸°ì™€ 위치를 보기 ê·¸ë£¹ì— ì ì ˆí•œ ë°©ì‹ìœ¼ë¡œ ì •ì˜í•˜ëŠ” +ì†ì„± ìœ í˜•ì´ ë“¤ì–´ 있습니다. 그림 1ì—서 ë³¼ 수 있듯ì´, ìƒìœ„ 보기 ê·¸ë£¹ì´ ê° í•˜ìœ„ ë³´ê¸°ì˜ ë ˆì´ì•„웃 매개변수를 ì •ì˜í•©ë‹ˆë‹¤(하위 보기 그룹 í¬í•¨).</p> <img src="{@docRoot}images/layoutparams.png" alt="" /> -<p class="img-caption"><strong>그림 1.</strong> ê° ë³´ê¸°ì™€ ì—°ê´€ëœ ë ˆì´ì•„웃 매개변수가 +<p class="img-caption"><strong>그림 1.</strong> ê° ë³´ê¸°ì™€ ì—°ê´€ëœ ë ˆì´ì•„웃 매개변수가 있는 보기 ê³„ì¸µì„ ì‹œê°í™”한 것입니다.</p> -<p>ëª¨ë“ LayoutParams 하위 í´ëž˜ìФì—는 ì„¤ì • ê°’ì— ëŒ€í•œ ê°ê¸° ìžì‹ ë§Œì˜ êµ¬ë¬¸ì´ ìžˆë‹¤ëŠ” ì ì„ -눈여겨 ë³´ì‹ì‹œì˜¤. ê° í•˜ìœ„ 요소는 ìžì‹ ì˜ ìƒìœ„ì— ì 합한 LayoutParams를 ì •ì˜í•´ì•¼ 합니다. +<p>ëª¨ë“ LayoutParams 하위 í´ëž˜ìФì—는 ì„¤ì • ê°’ì— ëŒ€í•œ ê°ê¸° ìžì‹ ë§Œì˜ êµ¬ë¬¸ì´ ìžˆë‹¤ëŠ” ì ì„ +눈여겨 ë³´ì‹ì‹œì˜¤. ê° í•˜ìœ„ 요소는 ìžì‹ ì˜ ìƒìœ„ì— ì 합한 LayoutParams를 ì •ì˜í•´ì•¼ 합니다. 다만 ì´ê²ƒì€ ìžì‹ ì˜ í•˜ìœ„ì— ëŒ€í•´ ê°ê¸° 다른 LayoutParamsë„ ì •ì˜í• 수 있습니다. </p> -<p>ëª¨ë“ ë³´ê¸° 그룹ì—는 너비와 높ì´ê°€ í¬í•¨ë˜ë©°(<code>layout_width</code> ë° -<code>layout_height</code>), ê° ë³´ê¸°ëŠ” ì´ë“¤ì„ 반드시 ì •ì˜í•´ì•¼ 합니다. ì„ íƒ ì‚¬í•으로 +<p>ëª¨ë“ ë³´ê¸° 그룹ì—는 너비와 높ì´ê°€ í¬í•¨ë˜ë©°(<code>layout_width</code> ë° +<code>layout_height</code>), ê° ë³´ê¸°ëŠ” ì´ë“¤ì„ 반드시 ì •ì˜í•´ì•¼ 합니다. ì„ íƒ ì‚¬í•으로 여백과 í…Œë‘ë¦¬ë„ í¬í•¨í•˜ëŠ” LayoutParamsë„ ë§ŽìŠµë‹ˆë‹¤. <p> -<p>너비와 높ì´ëŠ” ì •í™•í•œ 치수로 ì§€ì •í• ìˆ˜ 있습니다. 다만 ì´ê²ƒì€ ìžì£¼ 하지 -않는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 그보다는 다ìŒê³¼ ê°™ì€ ìƒìˆ˜ 중 하나를 사용하여 너비 ë˜ëŠ” 높ì´ë¥¼ ì„¤ì •í•˜ëŠ” 경우가 +<p>너비와 높ì´ëŠ” ì •í™•í•œ 치수로 ì§€ì •í• ìˆ˜ 있습니다. 다만 ì´ê²ƒì€ ìžì£¼ 하지 +않는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 그보다는 다ìŒê³¼ ê°™ì€ ìƒìˆ˜ 중 하나를 사용하여 너비 ë˜ëŠ” 높ì´ë¥¼ ì„¤ì •í•˜ëŠ” 경우가 ë” ë§ŽìŠµë‹ˆë‹¤. </p> <ul> - <li><var>wrap_content</var> ë³´ê¸°ì— ì½˜í…ì¸ ì— í•„ìš”í•œ 치수대로 알아서 + <li><var>wrap_content</var> ë³´ê¸°ì— ì½˜í…ì¸ ì— í•„ìš”í•œ 치수대로 알아서 í¬ê¸°ë¥¼ ì¡°ì •í•˜ë¼ê³ 합니다.</li> <li><var>match_parent</var> (다른 ì´ë¦„ì€ <var>fill_parent</var> 로, API ë ˆë²¨ 8 ì´ì „ì— í•´ë‹¹) ë³´ê¸°ì— ìƒìœ„ 보기 ê·¸ë£¹ì´ í—ˆìš©í•˜ëŠ” 한 최대한으로 커지ë¼ê³ 합니다.</li> </ul> -<p>ì¼ë°˜ì 으로 픽셀과 ê°™ì´ ì ˆëŒ€ì ì¸ ë‹¨ìœ„ë¥¼ 사용하여 ë ˆì´ì•„웃 너비와 높ì´ë¥¼ ì§€ì •í•˜ëŠ” ê²ƒì€ -권장하지 않습니다. ê·¸ ëŒ€ì‹ , ë°€ë„ ë…립ì ì¸ í”½ì…€ 단위와 ê°™ì´ ìƒëŒ€ì ì¸ ì¸¡ì •ì¹˜ë¥¼ +<p>ì¼ë°˜ì 으로 픽셀과 ê°™ì´ ì ˆëŒ€ì ì¸ ë‹¨ìœ„ë¥¼ 사용하여 ë ˆì´ì•„웃 너비와 높ì´ë¥¼ ì§€ì •í•˜ëŠ” ê²ƒì€ +권장하지 않습니다. ê·¸ ëŒ€ì‹ , ë°€ë„ ë…립ì ì¸ í”½ì…€ 단위와 ê°™ì´ ìƒëŒ€ì ì¸ ì¸¡ì •ì¹˜ë¥¼ 사용하는 것(<var>dp</var>), <var>wrap_content</var>, ë˜ëŠ” -<var>match_parent</var>ë“±ì´ ë” ë‚«ìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 +<var>match_parent</var>ë“±ì´ ë” ë‚«ìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 다양한 기기 화면 í¬ê¸°ì— 걸ì³ì„œë„ ì ì ˆí•˜ê²Œ 표시ë˜ë„ë¡ ë³´ìž¥í•˜ëŠ” ë° ë„ì›€ì´ ë˜ê¸° 때문입니다. -í—ˆìš©ëœ ì¸¡ì • ìœ í˜•ì€ +í—ˆìš©ëœ ì¸¡ì • ìœ í˜•ì€ <a href="{@docRoot}guide/topics/resources/available-resources.html#dimension"> 사용 가능한 리소스</a>ì— ì •ì˜ë˜ì–´ 있습니다.</p> @@ -229,23 +229,23 @@ android.view.ViewGroup.LayoutParams}를 확장합니다. ì´ í•˜ìœ„ í´ëž˜ìŠ¤ì— <h2 id="Position">ë ˆì´ì•„웃 위치</h2> <p> ë³´ê¸°ì˜ ëª¨ì–‘ì€ ì§ì‚¬ê°í˜•입니다. 보기ì—는 위치가 있으며, ì´ëŠ” - 한 ìŒì˜ <em>왼쪽</em> ë° <em>ìƒë‹¨</em> 좌표, ê·¸ë¦¬ê³ ë‘ ê°œì˜ ì¹˜ìˆ˜ê°€ 너비와 높ì´ë¥¼ 나타내는 + 한 ìŒì˜ <em>왼쪽</em> ë° <em>ìƒë‹¨</em> 좌표, ê·¸ë¦¬ê³ ë‘ ê°œì˜ ì¹˜ìˆ˜ê°€ 너비와 높ì´ë¥¼ 나타내는 형ì‹ìœ¼ë¡œ 표현ë©ë‹ˆë‹¤. 위치와 ì¹˜ìˆ˜ì˜ ë‹¨ìœ„ëŠ” 픽셀입니다. </p> <p> - ë³´ê¸°ì˜ ìœ„ì¹˜ë¥¼ ê²€ìƒ‰í• ìˆ˜ 있습니다. -{@link android.view.View#getLeft()} ë° {@link android.view.View#getTop()} 메서드를 호출하면 ë©ë‹ˆë‹¤. ì „ìžëŠ” 보기를 -나타내는 ì§ì‚¬ê°í˜•ì˜ ì™¼ìª½, 즉 X 좌표를 반환합니다. 후ìžëŠ” 보기를 -나타내는 ì§ì‚¬ê°í˜•ì˜ ìƒë‹¨, 즉 Y 좌표를 반환합니다. ì´ë“¤ 메서드는 둘 다 -ë³´ê¸°ì˜ ìœ„ì¹˜ë¥¼ 해당 ë³´ê¸°ì˜ ìƒìœ„와 ê´€ë ¨ì§€ì–´ 반환합니다. 예를 들어, -<code>getLeft()</code>ê°€ 20ì„ ë°˜í™˜í•˜ëŠ” 경우 ì´ëŠ” 해당 보기가 ê·¸ ë³´ê¸°ì˜ ë°”ë¡œ ìƒìœ„ì˜ ì™¼ìª½ 가장ìžë¦¬ì—서 + ë³´ê¸°ì˜ ìœ„ì¹˜ë¥¼ ê²€ìƒ‰í• ìˆ˜ 있습니다. +{@link android.view.View#getLeft()} ë° {@link android.view.View#getTop()} 메서드를 호출하면 ë©ë‹ˆë‹¤. ì „ìžëŠ” 보기를 +나타내는 ì§ì‚¬ê°í˜•ì˜ ì™¼ìª½, 즉 X 좌표를 반환합니다. 후ìžëŠ” 보기를 +나타내는 ì§ì‚¬ê°í˜•ì˜ ìƒë‹¨, 즉 Y 좌표를 반환합니다. ì´ë“¤ 메서드는 둘 다 +ë³´ê¸°ì˜ ìœ„ì¹˜ë¥¼ 해당 ë³´ê¸°ì˜ ìƒìœ„와 ê´€ë ¨ì§€ì–´ 반환합니다. 예를 들어, +<code>getLeft()</code>ê°€ 20ì„ ë°˜í™˜í•˜ëŠ” 경우 ì´ëŠ” 해당 보기가 ê·¸ ë³´ê¸°ì˜ ë°”ë¡œ ìƒìœ„ì˜ ì™¼ìª½ 가장ìžë¦¬ì—서 오른쪽으로 20픽셀 떨어진 ê³³ì— ìžˆë‹¤ëŠ” 뜻입니다. </p> <p> - ì´ì™¸ì—ë„ ë¶ˆí•„ìš”í•œ ê³„ì‚°ì„ í”¼í•˜ê¸° 위해 여러 가지 íŽ¸ì˜ ë©”ì„œë“œê°€ ì œê³µë©ë‹ˆë‹¤. + ì´ì™¸ì—ë„ ë¶ˆí•„ìš”í•œ ê³„ì‚°ì„ í”¼í•˜ê¸° 위해 여러 가지 íŽ¸ì˜ ë©”ì„œë“œê°€ ì œê³µë©ë‹ˆë‹¤. 구체ì 으로 {@link android.view.View#getRight()} ë° {@link android.view.View#getBottom()}ì„ ë“¤ 수 있습니다. ì´ë“¤ 메서드는 해당 보기를 나타내는 ì§ì‚¬ê°í˜•ì˜ ì˜¤ë¥¸ìª½ê³¼ 하단 가장ìžë¦¬ì˜ 좌표를 반환합니다. 예를 들어 {@link android.view.View#getRight()}를 @@ -255,46 +255,46 @@ android.view.ViewGroup.LayoutParams}를 확장합니다. ì´ í•˜ìœ„ í´ëž˜ìŠ¤ì— <h2 id="SizePaddingMargins">í¬ê¸°, 안쪽 여백 ë° ì—¬ë°±</h2> <p> - ë³´ê¸°ì˜ í¬ê¸°ëŠ” 너비와 높ì´ë¡œ 표현ë©ë‹ˆë‹¤. 사실 í•˜ë‚˜ì˜ ë³´ê¸°ëŠ” + ë³´ê¸°ì˜ í¬ê¸°ëŠ” 너비와 높ì´ë¡œ 표현ë©ë‹ˆë‹¤. 사실 í•˜ë‚˜ì˜ ë³´ê¸°ëŠ” ë‘ ìŒì˜ 너비 ë° ë†’ì´ ê°’ì„ ì†Œìœ í•©ë‹ˆë‹¤. </p> <p> - 첫 번째 ìŒì„ <em>ì¸¡ì •ëœ ë„ˆë¹„</em> ë° -<em>ì¸¡ì •ëœ ë†’ì´</em>ë¼ê³ 합니다. ì´ë“¤ 치수는 보기가 -ìƒìœ„ ë‚´ì—서 얼마나 ì»¤ì§€ê³ ìž í•˜ëŠ”ì§€ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì¸¡ì •ëœ + 첫 번째 ìŒì„ <em>ì¸¡ì •ëœ ë„ˆë¹„</em> ë° +<em>ì¸¡ì •ëœ ë†’ì´</em>ë¼ê³ 합니다. ì´ë“¤ 치수는 보기가 +ìƒìœ„ ë‚´ì—서 얼마나 ì»¤ì§€ê³ ìž í•˜ëŠ”ì§€ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. ì¸¡ì •ëœ ì¹˜ìˆ˜ë¥¼ ê°€ì ¸ì˜¤ë ¤ë©´ {@link android.view.View#getMeasuredWidth()} ë° {@link android.view.View#getMeasuredHeight()}를 호출하면 ë©ë‹ˆë‹¤. </p> <p> - ë‘ ë²ˆì§¸ ìŒì€ 단순히 <em>너비</em> ë° <em>높ì´</em>ë¼ê³ ì¼ì»¬ìœ¼ë©°, -때로는 <em>그리기 너비</em> ë° <em>그리기 높ì´</em>로 부를 ë•Œë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ¬í•œ -치수는 그리기 시간 ë° ë ˆì´ì•„웃 í›„ì— ë³´ê¸°ê°€ í™”ë©´ì— í‘œì‹œë˜ëŠ” ì‹¤ì œ í¬ê¸°ë¥¼ -ì •ì˜í•©ë‹ˆë‹¤. ì´ë“¤ ê°’ì€ ì¸¡ì •ëœ ë„ˆë¹„ ë° ë†’ì´ì™€ 달ë¼ë„ ë˜ì§€ë§Œ -ê¼ ë‹¬ë¼ì•¼ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 너비와 높ì´ë¥¼ ê°€ì ¸ì˜¤ë ¤ë©´ + ë‘ ë²ˆì§¸ ìŒì€ 단순히 <em>너비</em> ë° <em>높ì´</em>ë¼ê³ ì¼ì»¬ìœ¼ë©°, +때로는 <em>그리기 너비</em> ë° <em>그리기 높ì´</em>로 부를 ë•Œë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ¬í•œ +치수는 그리기 시간 ë° ë ˆì´ì•„웃 í›„ì— ë³´ê¸°ê°€ í™”ë©´ì— í‘œì‹œë˜ëŠ” ì‹¤ì œ í¬ê¸°ë¥¼ +ì •ì˜í•©ë‹ˆë‹¤. ì´ë“¤ ê°’ì€ ì¸¡ì •ëœ ë„ˆë¹„ ë° ë†’ì´ì™€ 달ë¼ë„ ë˜ì§€ë§Œ +ê¼ ë‹¬ë¼ì•¼ 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 너비와 높ì´ë¥¼ ê°€ì ¸ì˜¤ë ¤ë©´ {@link android.view.View#getWidth()} ë° {@link android.view.View#getHeight()}를 호출하면 ë©ë‹ˆë‹¤. </p> <p> - ë³´ê¸°ì˜ ì¹˜ìˆ˜ë¥¼ ì¸¡ì •í•˜ë ¤ë©´ 보기는 ìžì‹ ì˜ ì•ˆìª½ ì—¬ë°±ì„ ê°ì•ˆí•©ë‹ˆë‹¤. 안쪽 ì—¬ë°±ì€ + ë³´ê¸°ì˜ ì¹˜ìˆ˜ë¥¼ ì¸¡ì •í•˜ë ¤ë©´ 보기는 ìžì‹ ì˜ ì•ˆìª½ ì—¬ë°±ì„ ê°ì•ˆí•©ë‹ˆë‹¤. 안쪽 ì—¬ë°±ì€ ë³´ê¸°ì˜ ì™¼ìª½, ìƒë‹¨, 오른쪽 ë° í•˜ë‹¨ ë¶€ë¶„ì— ëŒ€í•´ 픽셀로 표시ë©ë‹ˆë‹¤. - 안쪽 ì—¬ë°±ì€ ì •í•´ì§„ 픽셀 수를 사용하여 ë³´ê¸°ì˜ ì½˜í…ì¸ ë¥¼ 오프셋하는 ë° ì“°ì¼ ìˆ˜ë„ -있습니다. 예를 들어 왼쪽 안쪽 ì—¬ë°±ì„ 2로 ì„¤ì •í•˜ë©´ 해당 ë³´ê¸°ì˜ ì½˜í…ì¸ ë¥¼ 왼쪽 가장ìžë¦¬ì—서 -오른쪽으로 2픽셀 밀어냅니다. 안쪽 ì—¬ë°±ì„ ì„¤ì •í• ë•Œì—는 -{@link android.view.View#setPadding(int, int, int, int)} 메서드를 사용하면 ë˜ê³ , ì´ë¥¼ ì¿¼ë¦¬í•˜ë ¤ë©´ -{@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()}, + 안쪽 ì—¬ë°±ì€ ì •í•´ì§„ 픽셀 수를 사용하여 ë³´ê¸°ì˜ ì½˜í…ì¸ ë¥¼ 오프셋하는 ë° ì“°ì¼ ìˆ˜ë„ +있습니다. 예를 들어 왼쪽 안쪽 ì—¬ë°±ì„ 2로 ì„¤ì •í•˜ë©´ 해당 ë³´ê¸°ì˜ ì½˜í…ì¸ ë¥¼ 왼쪽 가장ìžë¦¬ì—서 +오른쪽으로 2픽셀 밀어냅니다. 안쪽 ì—¬ë°±ì„ ì„¤ì •í• ë•Œì—는 +{@link android.view.View#setPadding(int, int, int, int)} 메서드를 사용하면 ë˜ê³ , ì´ë¥¼ ì¿¼ë¦¬í•˜ë ¤ë©´ +{@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()}, {@link android.view.View#getPaddingRight()} ë° {@link android.view.View#getPaddingBottom()}ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤. </p> <p> - 보기가 안쪽 ì—¬ë°±ì„ ì •ì˜í• 수는 있지만, ì—¬ë°±ì— ëŒ€í•œ ì§€ì›ì€ ì „í˜€ ì œê³µí•˜ì§€ -않습니다. 다만 보기 ê·¸ë£¹ì´ ê·¸ì™€ ê°™ì€ ì§€ì›ì„ ì œê³µí•©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” -{@link android.view.ViewGroup} ë° + 보기가 안쪽 ì—¬ë°±ì„ ì •ì˜í• 수는 있지만, ì—¬ë°±ì— ëŒ€í•œ ì§€ì›ì€ ì „í˜€ ì œê³µí•˜ì§€ +않습니다. 다만 보기 ê·¸ë£¹ì´ ê·¸ì™€ ê°™ì€ ì§€ì›ì„ ì œê³µí•©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ëŠ” +{@link android.view.ViewGroup} ë° {@link android.view.ViewGroup.MarginLayoutParams}를 참조하ì‹ì‹œì˜¤. </p> - <p>ì¹˜ìˆ˜ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” + <p>ì¹˜ìˆ˜ì— ëŒ€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">치수 ê°’</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </p> @@ -320,13 +320,13 @@ div.layout.first { <h2 id="CommonLayouts">보편ì ì¸ ë ˆì´ì•„웃</h2> -<p>{@link android.view.ViewGroup} í´ëž˜ìŠ¤ì˜ ê° í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” ê°ê¸° ê³ ìœ í•œ ë°©ì‹ìœ¼ë¡œ ìžì‹ ì•ˆì— -중첩한 보기를 표시합니다. 아래는 Android 플랫í¼ì—서 기본 ì œê³µë˜ëŠ”, 보다 보편ì ì¸ ë ˆì´ì•„웃 ìœ í˜•ì„ +<p>{@link android.view.ViewGroup} í´ëž˜ìŠ¤ì˜ ê° í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” ê°ê¸° ê³ ìœ í•œ ë°©ì‹ìœ¼ë¡œ ìžì‹ ì•ˆì— +중첩한 보기를 표시합니다. 아래는 Android 플랫í¼ì—서 기본 ì œê³µë˜ëŠ”, 보다 보편ì ì¸ ë ˆì´ì•„웃 ìœ í˜•ì„ ëª‡ 가지 나타낸 것입니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 하나 ì´ìƒì˜ ë ˆì´ì•„ì›ƒì„ ë˜ ë‹¤ë¥¸ ë ˆì´ì•„ì›ƒì— ì¤‘ì²©í•˜ì—¬ -UI ë””ìžì¸ì„ ì´ë£° ìˆ˜ë„ ìžˆì§€ë§Œ, ë ˆì´ì•„웃 ê³„ì¸µì„ ê°€ëŠ¥í•œ 한 얕게 ìœ ì§€í•˜ë„ë¡ -ì• ì¨ì•¼ 합니다. ì¤‘ì²©ëœ ë ˆì´ì•„ì›ƒì´ ì ì„ìˆ˜ë¡ ë ˆì´ì•„ì›ƒì´ ë”ìš± ë¹ ë¥´ê²Œ ê·¸ë ¤ì§‘ë‹ˆë‹¤(가로로 ë„“ì€ ë³´ê¸° ê³„ì¸µì´ +<p class="note"><strong>ì°¸ê³ :</strong> 하나 ì´ìƒì˜ ë ˆì´ì•„ì›ƒì„ ë˜ ë‹¤ë¥¸ ë ˆì´ì•„ì›ƒì— ì¤‘ì²©í•˜ì—¬ +UI ë””ìžì¸ì„ ì´ë£° ìˆ˜ë„ ìžˆì§€ë§Œ, ë ˆì´ì•„웃 ê³„ì¸µì„ ê°€ëŠ¥í•œ 한 얕게 ìœ ì§€í•˜ë„ë¡ +ì• ì¨ì•¼ 합니다. ì¤‘ì²©ëœ ë ˆì´ì•„ì›ƒì´ ì ì„ìˆ˜ë¡ ë ˆì´ì•„ì›ƒì´ ë”ìš± ë¹ ë¥´ê²Œ ê·¸ë ¤ì§‘ë‹ˆë‹¤(가로로 ë„“ì€ ë³´ê¸° ê³„ì¸µì´ ê¹Šì€ ë³´ê¸° 계층보다 낫습니다).</p> <!-- @@ -345,14 +345,14 @@ partially or totally obscuring them (unless the newer object is transparent). <div class="layout first"> <h4><a href="layout/linear.html">ì„ í˜• ë ˆì´ì•„웃</a></h4> <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a> - <p>여러 하위를 í•˜ë‚˜ì˜ ê°€ë¡œ ë°©í–¥ ë˜ëŠ” 세로 ë°©í–¥ 행으로 ì •ë¦¬í•˜ëŠ” ë ˆì´ì•„웃. ì´ê²ƒì€ + <p>여러 하위를 í•˜ë‚˜ì˜ ê°€ë¡œ ë°©í–¥ ë˜ëŠ” 세로 ë°©í–¥ 행으로 ì •ë¦¬í•˜ëŠ” ë ˆì´ì•„웃. ì´ê²ƒì€ ì°½ì˜ ê¸¸ì´ê°€ 화면 길ì´ë¥¼ 웃ë„는 경우 스í¬ë¡¤ 막대를 ë§Œë“니다.</p> </div> <div class="layout"> <h4><a href="layout/relative.html">관계 ë ˆì´ì•„웃</a></h4> <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a> - <p>여러 하위 ê°ì²´ì˜ 위치를 서로 ê´€ë ¨ì§€ì–´ 나타내거나(하위 Aê°€ + <p>여러 하위 ê°ì²´ì˜ 위치를 서로 ê´€ë ¨ì§€ì–´ 나타내거나(하위 Aê°€ 하위 Bì˜ ì™¼ìª½), ìƒìœ„와 ê´€ë ¨ì§€ì–´ 나타낼 수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤(ìƒìœ„ì˜ ë§¨ ìœ„ì— ë§žì¶° ì •ë ¬).</p> </div> @@ -367,12 +367,12 @@ partially or totally obscuring them (unless the newer object is transparent). <h2 id="AdapterViews" style="clear:left">어댑터로 ë ˆì´ì•„웃 구축하기</h2> -<p>ë ˆì´ì•„ì›ƒì˜ ì½˜í…ì¸ ê°€ ë™ì ì´ê±°ë‚˜ 미리 ì •ì˜ë˜ì§€ ì•Šì€ ê²½ìš°, -{@link android.widget.AdapterView}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ê°€ ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ì—¬ ëŸ°íƒ€ìž„ì— ë³´ê¸°ë¡œ ë ˆì´ì•„ì›ƒì„ ì±„ìš¸ 수 있습니다. -{@link android.widget.AdapterView} í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” {@link android.widget.Adapter}를 +<p>ë ˆì´ì•„ì›ƒì˜ ì½˜í…ì¸ ê°€ ë™ì ì´ê±°ë‚˜ 미리 ì •ì˜ë˜ì§€ ì•Šì€ ê²½ìš°, +{@link android.widget.AdapterView}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ê°€ ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ì—¬ ëŸ°íƒ€ìž„ì— ë³´ê¸°ë¡œ ë ˆì´ì•„ì›ƒì„ ì±„ìš¸ 수 있습니다. +{@link android.widget.AdapterView} í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” {@link android.widget.Adapter}를 사용하여 ìžì‹ ì˜ ë ˆì´ì•„ì›ƒì— ë°ì´í„°ë¥¼ ë°”ì¸ë”©í•©ë‹ˆë‹¤. {@link android.widget.Adapter}ê°€ ë°ì´í„° 소스와 {@link android.widget.AdapterView} ë ˆì´ì•„웃 사ì´ì˜ ì¤‘ê°œìž ì—í• ì„ í•©ë‹ˆë‹¤. —{@link android.widget.Adapter}ê°€ - ë°ì´í„°ë¥¼ 검색하여(ë°°ì—´ ë˜ëŠ” ë°ì´í„°ë² ì´ìФ 쿼리와 ê°™ì€ ì†ŒìŠ¤ë¡œë¶€í„°) + ë°ì´í„°ë¥¼ 검색하여(ë°°ì—´ ë˜ëŠ” ë°ì´í„°ë² ì´ìФ 쿼리와 ê°™ì€ ì†ŒìŠ¤ë¡œë¶€í„°) ê° í•ëª©ì„ ë³´ê¸°ë¡œ 변환해서 {@link android.widget.AdapterView} ë ˆì´ì•„ì›ƒì— ì¶”ê°€ë 수 있ë„ë¡ í•©ë‹ˆë‹¤.</p> <p>어댑터로 ì§€ì›ë˜ëŠ” 보편ì ì¸ ë ˆì´ì•„ì›ƒì˜ ëª‡ 가지 예는 다ìŒê³¼ 같습니다.</p> @@ -393,13 +393,13 @@ partially or totally obscuring them (unless the newer object is transparent). <h3 id="FillingTheLayout" style="clear:left">ë°ì´í„°ë¡œ 어댑터 보기 채우기</h3> -<p>{@link android.widget.ListView} ë˜ëŠ” -{@link android.widget.GridView}와 ê°™ì€ {@link android.widget.AdapterView}를 ì±„ìš°ë ¤ë©´ {@link android.widget.AdapterView} ì¸ìŠ¤í„´ìŠ¤ë¥¼ +<p>{@link android.widget.ListView} ë˜ëŠ” +{@link android.widget.GridView}와 ê°™ì€ {@link android.widget.AdapterView}를 ì±„ìš°ë ¤ë©´ {@link android.widget.AdapterView} ì¸ìŠ¤í„´ìŠ¤ë¥¼ {@link android.widget.Adapter}ì— ë°”ì¸ë”©í•˜ë©´ ë©ë‹ˆë‹¤. ì´ëŠ” 외부 소스로부터 ë°ì´í„°ë¥¼ 검색하여 ê° ë°ì´í„° í•ëª©ì„ ë‚˜íƒ€ë‚´ëŠ” {@link android.view.View}를 ìƒì„±í•©ë‹ˆë‹¤.</p> -<p>Android는 {@link android.widget.Adapter}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ 여러 ê°œ ì œê³µí•©ë‹ˆë‹¤. -ì´ëŠ” 여러 가지 ì¢…ë¥˜ì˜ ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ê³ {@link android.widget.AdapterView}ì— ëŒ€í•œ 보기를 구축하는 ë° ìœ ìš©í•©ë‹ˆë‹¤. +<p>Android는 {@link android.widget.Adapter}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ 여러 ê°œ ì œê³µí•©ë‹ˆë‹¤. +ì´ëŠ” 여러 가지 ì¢…ë¥˜ì˜ ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ê³ {@link android.widget.AdapterView}ì— ëŒ€í•œ 보기를 구축하는 ë° ìœ ìš©í•©ë‹ˆë‹¤. 가장 보편ì ì¸ ì–´ëŒ‘í„° ë‘ ê°€ì§€ë¥¼ 예로 들면 다ìŒê³¼ 같습니다.</p> <dl> @@ -409,7 +409,7 @@ android.widget.ArrayAdapter}ê°€ ê° í•목ì—서 {@link java.lang.Object#toString()}를 í˜¸ì¶œí•˜ê³ ê·¸ 콘í…ì¸ ë¥¼ {@link android.widget.TextView}ì— ë°°ì¹˜í•¨ìœ¼ë¡œì¨ ê° ë°°ì—´ í•ëª©ì— ëŒ€í•œ 보기를 ìƒì„±í•©ë‹ˆë‹¤. <p>예를 들어, {@link -android.widget.ListView}로 문ìžì—´ ë°°ì—´ì„ í‘œì‹œí•˜ê³ ìž í•˜ëŠ” 경우, ìƒì„±ìžë¥¼ 사용하여 +android.widget.ListView}로 문ìžì—´ ë°°ì—´ì„ í‘œì‹œí•˜ê³ ìž í•˜ëŠ” 경우, ìƒì„±ìžë¥¼ 사용하여 새로운 {@link android.widget.ArrayAdapter}를 초기화해서 ê° ë¬¸ìžì—´ê³¼ 문ìžì—´ ë°°ì—´ì— ëŒ€í•œ ë ˆì´ì•„ì›ƒì„ ì§€ì •í•˜ë©´ ë©ë‹ˆë‹¤.</p> <pre> ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, @@ -421,7 +421,7 @@ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, <li>ë°°ì—´ì— ìžˆëŠ” ê° ë¬¸ìžì—´ì— 대한 {@link android.widget.TextView}ê°€ 들어있는 ë ˆì´ì•„웃</li> <li>문ìžì—´ ë°°ì—´</li> </ul> -<p>그런 ë‹¤ìŒ {@link android.widget.ListView}ì—서 +<p>그런 ë‹¤ìŒ {@link android.widget.ListView}ì—서 {@link android.widget.ListView#setAdapter setAdapter()}를 호출하기만 하면 ë©ë‹ˆë‹¤.</p> <pre> ListView listView = (ListView) findViewById(R.id.listview); @@ -430,7 +430,7 @@ listView.setAdapter(adapter); <p>ê° í•ëª©ì˜ ì™¸ê´€ì„ ì‚¬ìš©ìž ì§€ì •í•˜ë ¤ë©´ ë°°ì—´ì˜ ê°ì²´ì— 대한 {@link java.lang.Object#toString()} 메서드를 ìž¬ì •ì˜í•˜ë©´ ë©ë‹ˆë‹¤. 아니면, ê° í•ëª©ì— ëŒ€í•˜ì—¬ -{@link android.widget.TextView}ê°€ 아닌 다른 보기를 ìƒì„±í•˜ê³ ìž í•˜ëŠ” 경우(예를 들어 ê° ë°°ì—´ í•ëª©ì— +{@link android.widget.TextView}ê°€ 아닌 다른 보기를 ìƒì„±í•˜ê³ ìž í•˜ëŠ” 경우(예를 들어 ê° ë°°ì—´ í•ëª©ì— {@link android.widget.ImageView}를 ì›í•˜ëŠ” 경우), {@link android.widget.ArrayAdapter} í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ {@link android.widget.ArrayAdapter#getView getView()}를 ìž¬ì •ì˜í•˜ì—¬ ê° í•ëª©ì— ëŒ€í•´ ì›í•˜ëŠ” ìœ í˜•ì˜ ë³´ê¸°ë¥¼ 반환하ë„ë¡ í• ìˆ˜ 있습니다.</p> @@ -438,21 +438,21 @@ getView()}를 ìž¬ì •ì˜í•˜ì—¬ ê° í•ëª©ì— ëŒ€í•´ ì›í•˜ëŠ” ìœ í˜•ì˜ ë³´ê¸°ë¥¼ </dd> <dt>{@link android.widget.SimpleCursorAdapter}</dt> - <dd>ì´ ì–´ëŒ‘í„°ëŠ” ë°ì´í„° 출처가 {@link android.database.Cursor}ì¼ ë•Œ 사용하ì‹ì‹œì˜¤. -{@link android.widget.SimpleCursorAdapter}를 사용하는 경우, + <dd>ì´ ì–´ëŒ‘í„°ëŠ” ë°ì´í„° 출처가 {@link android.database.Cursor}ì¼ ë•Œ 사용하ì‹ì‹œì˜¤. +{@link android.widget.SimpleCursorAdapter}를 사용하는 경우, {@link android.database.Cursor}ì— ìžˆëŠ” ê° í–‰ì— ëŒ€í•˜ì—¬ ì‚¬ìš©í• ë ˆì´ì•„ì›ƒì„ ì§€ì •í•´ì•¼ 합니다. ë˜í•œ {@link android.database.Cursor} -ì˜ ì–´ëŠ ì—´ì´ ë ˆì´ì•„ì›ƒì˜ ì–´ëŠ ë³´ê¸°ì— ì‚½ìž…ë˜ì–´ì•¼ í• ì§€ë„ ì§€ì •í•´ì•¼ 합니다. 예를 들어 사람 ì´ë¦„ê³¼ +ì˜ ì–´ëŠ ì—´ì´ ë ˆì´ì•„ì›ƒì˜ ì–´ëŠ ë³´ê¸°ì— ì‚½ìž…ë˜ì–´ì•¼ í• ì§€ë„ ì§€ì •í•´ì•¼ 합니다. 예를 들어 사람 ì´ë¦„ê³¼ ì „í™”ë²ˆí˜¸ë¡œ ì´ë£¨ì–´ì§„ 목ë¡ì„ ìƒì„±í•˜ê³ ìž í•˜ëŠ” 경우, ê° ì‚¬ëžŒì— ëŒ€í•´ í–‰ì´ í•˜ë‚˜ì”© ìžˆê³ ì´ë¦„ê³¼ ë²ˆí˜¸ì— ëŒ€í•´ ì—´ì´ ë“¤ì–´ìžˆëŠ” {@link android.database.Cursor}를 반환하는 쿼리를 수행하면 ë©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ë ˆì´ì•„웃ì—서 ê° ê²°ê³¼ì— ëŒ€í•˜ì—¬ {@link -android.database.Cursor}ì˜ ì–´ëŠ ì—´ì„ ì›í•˜ëŠ”ì§€ ì§€ì •í•˜ëŠ” 문ìžì—´ ë°°ì—´ì„ ë§Œë“¤ 수 ìžˆê³ , ê° ì—´ì´ ë°°ì¹˜ë˜ì–´ì•¼ 하는 +android.database.Cursor}ì˜ ì–´ëŠ ì—´ì„ ì›í•˜ëŠ”ì§€ ì§€ì •í•˜ëŠ” 문ìžì—´ ë°°ì—´ì„ ë§Œë“¤ 수 ìžˆê³ , ê° ì—´ì´ ë°°ì¹˜ë˜ì–´ì•¼ 하는 ìƒì‘하는 보기를 ì§€ì •í•˜ëŠ” ì •ìˆ˜ ë°°ì—´ì„ ë§Œë“¤ë©´ ë©ë‹ˆë‹¤.</p> <pre> String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; int[] toViews = {R.id.display_name, R.id.phone_number}; </pre> -<p>{@link android.widget.SimpleCursorAdapter}를 ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 경우, ê° ê²°ê³¼ì— ëŒ€í•´ ì‚¬ìš©í• ë ˆì´ì•„웃과 +<p>{@link android.widget.SimpleCursorAdapter}를 ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 경우, ê° ê²°ê³¼ì— ëŒ€í•´ ì‚¬ìš©í• ë ˆì´ì•„웃과 결과가 들어있는 {@link android.database.Cursor}, ê·¸ë¦¬ê³ ë‹¤ìŒì˜ ë‘ ë°°ì—´ì„ ì „ë‹¬í•©ë‹ˆë‹¤.</p> <pre> SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, @@ -460,21 +460,21 @@ SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, ListView listView = getListView(); listView.setAdapter(adapter); </pre> -<p>그러면 {@link android.widget.SimpleCursorAdapter}ê°€ +<p>그러면 {@link android.widget.SimpleCursorAdapter}ê°€ {@link android.database.Cursor}ì— ìžˆëŠ” ê° í–‰ì— ëŒ€í•œ 보기를 하나씩 ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ ìƒì‘하는 {@code toViews} 보기 ì•ˆì— ê° {@code fromColumns} í•ëª©ì„ ì‚½ìž…í•¨ìœ¼ë¡œì¨ ì œê³µëœ ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p>.</dd> </dl> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìˆ˜ëª…ì´ ì§„í–‰ë˜ëŠ” ë™ì•ˆì— 어댑터가 ì½ëŠ” 기본 ë°ì´í„°ë¥¼ 변경하는 경우, -{@link android.widget.ArrayAdapter#notifyDataSetChanged()}를 호출해야 합니다. +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìˆ˜ëª…ì´ ì§„í–‰ë˜ëŠ” ë™ì•ˆì— 어댑터가 ì½ëŠ” 기본 ë°ì´í„°ë¥¼ 변경하는 경우, +{@link android.widget.ArrayAdapter#notifyDataSetChanged()}를 호출해야 합니다. ì´ë ‡ê²Œ 하면 ì²¨ë¶€ëœ ë³´ê¸°ì— ë°ì´í„°ê°€ 변경ë˜ì—ˆìœ¼ë©° 스스로 새로 ê³ ì³ì•¼ 한다는 ì‚¬ì‹¤ì„ ì•Œë ¤ì¤ë‹ˆë‹¤.</p> <h3 id="HandlingUserSelections">í´ë¦ ì´ë²¤íЏ 처리</h3> -<p>{@link android.widget.AdapterView}ì— ìžˆëŠ” ê° í•목ì—ì„œì˜ í´ë¦ ì´ë²¤íŠ¸ì— ì‘ë‹µí•˜ë ¤ë©´ +<p>{@link android.widget.AdapterView}ì— ìžˆëŠ” ê° í•목ì—ì„œì˜ í´ë¦ ì´ë²¤íŠ¸ì— ì‘ë‹µí•˜ë ¤ë©´ {@link android.widget.AdapterView.OnItemClickListener} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하면 ë©ë‹ˆë‹¤. 예:</p> <pre> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/ko/guide/topics/ui/dialogs.jd index 23e92c9f855e..7fad584ff700 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>ì°¸ê³ í•목</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">대화 ë””ìžì¸ ê°€ì´ë“œ</a></li> @@ -41,24 +41,24 @@ page.tags=alertdialog,dialogfragment </div> </div> -<p>대화는 사용ìžì—게 ê²°ì •ì„ ë‚´ë¦¬ê±°ë‚˜ 추가 ì •ë³´ë¥¼ ìž…ë ¥í•˜ë¼ëŠ” -프롬프트를 보내는 ìž‘ì€ ì°½ìž…ë‹ˆë‹¤. 대화는 í™”ë©´ì„ ê°€ë“ ì±„ìš°ì§€ 않으며 보통 사용ìžê°€ +<p>대화는 사용ìžì—게 ê²°ì •ì„ ë‚´ë¦¬ê±°ë‚˜ 추가 ì •ë³´ë¥¼ ìž…ë ¥í•˜ë¼ëŠ” +프롬프트를 보내는 ìž‘ì€ ì°½ìž…ë‹ˆë‹¤. 대화는 í™”ë©´ì„ ê°€ë“ ì±„ìš°ì§€ 않으며 보통 사용ìžê°€ 다ìŒìœ¼ë¡œ ê³„ì† ì§„í–‰í•˜ê¸° ì „ì— ì¡°ì¹˜ë¥¼ 취해야 하는 모달 ì´ë²¤íŠ¸ì— ì“°ìž…ë‹ˆë‹¤.</p> <div class="note design"> <p><strong>대화 ë””ìžì¸</strong></p> - <p>언어 권장 사í•ì„ ë¹„ë¡¯í•œ 여러 가지 대화 ë””ìžì¸ ë°©ë²•ì— ê´€ë ¨ëœ ì •ë³´ëŠ” + <p>언어 권장 사í•ì„ ë¹„ë¡¯í•œ 여러 가지 대화 ë””ìžì¸ ë°©ë²•ì— ê´€ë ¨ëœ ì •ë³´ëŠ” <a href="{@docRoot}design/building-blocks/dialogs.html">대화</a> ë””ìžì¸ ê°€ì´ë“œë¥¼ ì½ì–´ë³´ì‹ì‹œì˜¤.</p> </div> <img src="{@docRoot}images/ui/dialogs.png" /> -<p>{@link android.app.Dialog} í´ëž˜ìŠ¤ê°€ ëŒ€í™”ì˜ ê¸°ë³¸ í´ëž˜ìФì´ì§€ë§Œ, +<p>{@link android.app.Dialog} í´ëž˜ìŠ¤ê°€ ëŒ€í™”ì˜ ê¸°ë³¸ í´ëž˜ìФì´ì§€ë§Œ, {@link android.app.Dialog}를 ì§ì ‘ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” ê²ƒì€ ì‚¼ê°€ì•¼ 합니다. ëŒ€ì‹ ë‹¤ìŒ í•˜ìœ„ í´ëž˜ìФ 중 하나를 사용하ì‹ì‹œì˜¤.</p> <dl> <dt>{@link android.app.AlertDialog}</dt> - <dd>ì œëª© 하나, 최대 세 ê°œì˜ ë²„íŠ¼, ì„ íƒ ê°€ëŠ¥í•œ 품목 ëª©ë¡ ë˜ëŠ” + <dd>ì œëª© 하나, 최대 세 ê°œì˜ ë²„íŠ¼, ì„ íƒ ê°€ëŠ¥í•œ 품목 ëª©ë¡ ë˜ëŠ” ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ í‘œì‹œí• ìˆ˜ 있는 대화입니다.</dd> <dt>{@link android.app.DatePickerDialog} ë˜ëŠ” {@link android.app.TimePickerDialog}</dt> <dd>미리 ì •ì˜ëœ UIê°€ 있는 대화로 사용ìžë¡œ 하여금 ë‚ ì§œ ë˜ëŠ” ì‹œê°„ì„ ì„ íƒí• 수 있게 í•´ì¤ë‹ˆë‹¤.</dd> @@ -66,55 +66,55 @@ page.tags=alertdialog,dialogfragment <div class="sidebox"> <h2>ProgressDialog 피하기</h2> -<p>Androidì—는 -{@link android.app.ProgressDialog}ë¼ê³ 하는 ë˜ ë‹¤ë¥¸ 대화 í´ëž˜ìŠ¤ê°€ 있습니다. ì´ê²ƒì€ ì§„í–‰ë¥ í‘œì‹œì¤„ì´ ìžˆëŠ” 대화를 표시하는 것입니다. 그러나, -로딩ì´ë‚˜ í™•ì •ë˜ì§€ ì•Šì€ ì§„í–‰ë¥ ì„ ë‚˜íƒ€ë‚´ì•¼ 하는 경우 ì´ ëŒ€ì‹ <a href="{@docRoot}design/building-blocks/progress.html">ì§„í–‰ë¥ ë° -액티비티</a>ì— ëŒ€í•œ ë””ìžì¸ ì§€ì¹¨ì„ ë”°ë¥´ê³ , +<p>Androidì—는 +{@link android.app.ProgressDialog}ë¼ê³ 하는 ë˜ ë‹¤ë¥¸ 대화 í´ëž˜ìŠ¤ê°€ 있습니다. ì´ê²ƒì€ ì§„í–‰ë¥ í‘œì‹œì¤„ì´ ìžˆëŠ” 대화를 표시하는 것입니다. 그러나, +로딩ì´ë‚˜ í™•ì •ë˜ì§€ ì•Šì€ ì§„í–‰ë¥ ì„ ë‚˜íƒ€ë‚´ì•¼ 하는 경우 ì´ ëŒ€ì‹ <a href="{@docRoot}design/building-blocks/progress.html">ì§„í–‰ë¥ ë° +액티비티</a>ì— ëŒ€í•œ ë””ìžì¸ ì§€ì¹¨ì„ ë”°ë¥´ê³ , ë ˆì´ì•„ì›ƒì˜ {@link android.widget.ProgressBar}를 사용해야 합니다.</p> </div> -<p>ì´ëŸ¬í•œ í´ëž˜ìŠ¤ê°€ ëŒ€í™”ì˜ ìŠ¤íƒ€ì¼ê³¼ 구조를 ì •ì˜í•˜ì§€ë§Œ, ëŒ€í™”ì˜ ì»¨í…Œì´ë„ˆë¡œëŠ” +<p>ì´ëŸ¬í•œ í´ëž˜ìŠ¤ê°€ ëŒ€í™”ì˜ ìŠ¤íƒ€ì¼ê³¼ 구조를 ì •ì˜í•˜ì§€ë§Œ, ëŒ€í™”ì˜ ì»¨í…Œì´ë„ˆë¡œëŠ” {@link android.support.v4.app.DialogFragment}를 사용해야 합니다. {@link android.support.v4.app.DialogFragment} - í´ëž˜ìŠ¤ëŠ” 대화를 ë§Œë“¤ê³ ê·¸ ì™¸ê´€ì„ ê´€ë¦¬í•˜ëŠ” ë° í•„ìš”í•œ ëª¨ë“ ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤. + í´ëž˜ìŠ¤ëŠ” 대화를 ë§Œë“¤ê³ ê·¸ ì™¸ê´€ì„ ê´€ë¦¬í•˜ëŠ” ë° í•„ìš”í•œ ëª¨ë“ ì œì–´ë¥¼ ì œê³µí•©ë‹ˆë‹¤. {@link android.app.Dialog} ê°ì²´ì—서 메서드를 호출하는 것 ëŒ€ì‹ ìž…ë‹ˆë‹¤.</p> -<p>대화를 관리하기 위해 {@link android.support.v4.app.DialogFragment}를 사용하면 -사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ê±°ë‚˜ í™”ë©´ì„ ëŒë¦´ 때 등 +<p>대화를 관리하기 위해 {@link android.support.v4.app.DialogFragment}를 사용하면 +사용ìžê°€ <em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ê±°ë‚˜ í™”ë©´ì„ ëŒë¦´ 때 등 수명 주기 ì´ë²¤íŠ¸ë¥¼ 올바르게 처리하ë„ë¡ ë³´ìž¥í• ìˆ˜ 있습니다. {@link -android.support.v4.app.DialogFragment} í´ëž˜ìŠ¤ë¥¼ 사용하면 ëŒ€í™”ì˜ UI를 ë” í° UIì— +android.support.v4.app.DialogFragment} í´ëž˜ìŠ¤ë¥¼ 사용하면 ëŒ€í™”ì˜ UI를 ë” í° UIì— í¬í•¨ì‹œí‚¬ 수 있는 구성 요소로 다시 ì‚¬ìš©í• ìˆ˜ 있게 í•´ì£¼ê¸°ë„ í•©ë‹ˆë‹¤. ì´ê²ƒì€ ê¸°ì¡´ì˜ {@link -android.support.v4.app.Fragment}와 똑같습니다(대화 UI를 í¬ê³ ìž‘ì€ í™”ë©´ì—서 서로 다르게 +android.support.v4.app.Fragment}와 똑같습니다(대화 UI를 í¬ê³ ìž‘ì€ í™”ë©´ì—서 서로 다르게 나타나ë„ë¡ í•˜ê³ ìž í•˜ëŠ” 경우 등).</p> <p>ì´ ê°€ì´ë“œì˜ ë‹¤ìŒ ì„¹ì…˜ì—서는 {@link android.support.v4.app.DialogFragment}를 {@link android.app.AlertDialog} - ê°ì²´ì™€ 함께 조합하여 사용하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. ë‚ ì§œ ë˜ëŠ” 시간 ì„ íƒê¸°ë¥¼ ìƒì„±í•˜ê³ ìž í•˜ëŠ” 경우, ëŒ€ì‹ + ê°ì²´ì™€ 함께 조합하여 사용하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. ë‚ ì§œ ë˜ëŠ” 시간 ì„ íƒê¸°ë¥¼ ìƒì„±í•˜ê³ ìž í•˜ëŠ” 경우, ëŒ€ì‹ <a href="{@docRoot}guide/topics/ui/controls/pickers.html">ì„ íƒê¸°</a> ê°€ì´ë“œë¥¼ ì½ìœ¼ì‹ì‹œì˜¤.</p> <p class="note"><strong>ì°¸ê³ :</strong> -{@link android.app.DialogFragment} í´ëž˜ìŠ¤ëŠ” ì›ëž˜ +{@link android.app.DialogFragment} í´ëž˜ìŠ¤ëŠ” ì›ëž˜ Android 3.0(API ë ˆë²¨ 11)ì— ì¶”ê°€ë˜ì—ˆê¸° ë•Œë¬¸ì— ì´ ë¬¸ì„œì—서는 <a href="{@docRoot}tools/support-library/index.html">ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬</a>와 함께 ì œê³µëœ {@link -android.support.v4.app.DialogFragment} í´ëž˜ìŠ¤ë¥¼ 사용하는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. ì´ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì•±ì— ì¶”ê°€í•˜ë©´ Android 1.6 ì´ìƒì„ 실행하는 기기ì—서 -{@link android.support.v4.app.DialogFragment}를 비롯하여 -다른 APIë„ ë‹¤ì–‘í•˜ê²Œ ì‚¬ìš©í• ìˆ˜ 있습니다. ì•±ì˜ ìµœì†Œ ë²„ì „ì´ +android.support.v4.app.DialogFragment} í´ëž˜ìŠ¤ë¥¼ 사용하는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. ì´ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì•±ì— ì¶”ê°€í•˜ë©´ Android 1.6 ì´ìƒì„ 실행하는 기기ì—서 +{@link android.support.v4.app.DialogFragment}를 비롯하여 +다른 APIë„ ë‹¤ì–‘í•˜ê²Œ ì‚¬ìš©í• ìˆ˜ 있습니다. ì•±ì˜ ìµœì†Œ ë²„ì „ì´ API ë ˆë²¨ 11 ì´ìƒì¸ 경우, {@link -android.app.DialogFragment}ì˜ í”„ë ˆìž„ì›Œí¬ ë²„ì „ì„ ì‚¬ìš©í•´ë„ ë˜ì§€ë§Œ, ì´ ë¬¸ì„œì— ìžˆëŠ” ë§í¬ëŠ” -ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ API를 대ìƒìœ¼ë¡œ 한 것ì´ë¼ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì‚¬ìš©í• ë•Œì—는 +android.app.DialogFragment}ì˜ í”„ë ˆìž„ì›Œí¬ ë²„ì „ì„ ì‚¬ìš©í•´ë„ ë˜ì§€ë§Œ, ì´ ë¬¸ì„œì— ìžˆëŠ” ë§í¬ëŠ” +ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ API를 대ìƒìœ¼ë¡œ 한 것ì´ë¼ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì‚¬ìš©í• ë•Œì—는 <code>android.support.v4.app.DialogFragment</code> í´ëž˜ìŠ¤ë¥¼ ê°€ì ¸ì™€ì•¼ 합니다. <code>android.app.DialogFragment</code>ê°€ <em>아닙니다</em>.</p> <h2 id="DialogFragment">대화 프래그먼트 ìƒì„±</h2> -<p>대단히 다양한 대화 ë””ìžì¸ì„ 만들 수 있습니다. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì€ ë¬¼ë¡ +<p>대단히 다양한 대화 ë””ìžì¸ì„ 만들 수 있습니다. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì€ ë¬¼ë¡ <a href="{@docRoot}design/building-blocks/dialogs.html">대화</a> -ë””ìžì¸ ê°€ì´ë“œì—서 설명한 ê²ƒë„ í¬í•¨í•©ë‹ˆë‹¤. +ë””ìžì¸ ê°€ì´ë“œì—서 설명한 ê²ƒë„ í¬í•¨í•©ë‹ˆë‹¤. {@link android.support.v4.app.DialogFragment}를 í™•ìž¥í•˜ê³ {@link android.support.v4.app.DialogFragment#onCreateDialog onCreateDialog()} 콜백 ë©”ì„œë“œì— {@link android.app.AlertDialog}를 ìƒì„±í•˜ë©´ ë©ë‹ˆë‹¤.</p> -<p>예를 들어 다ìŒì€ {@link android.app.AlertDialog}로, ì´ëŠ” +<p>예를 들어 다ìŒì€ {@link android.app.AlertDialog}로, ì´ëŠ” {@link android.support.v4.app.DialogFragment} ë‚´ì—서 관리ë˜ëŠ” 것입니다.</p> <pre> @@ -147,14 +147,14 @@ public class FireMissilesDialogFragment extends DialogFragment { </div> <p>ì´ í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ê³ 해당 ê°ì²´ì—서 {@link -android.support.v4.app.DialogFragment#show show()}를 호출하면 대화는 +android.support.v4.app.DialogFragment#show show()}를 호출하면 대화는 그림 1ì— í‘œì‹œëœ ê²ƒì²˜ëŸ¼ 나타납니다.</p> <p>ë‹¤ìŒ ì„¹ì…˜ì—서는 {@link android.app.AlertDialog.Builder} API를 사용하여 대화를 ìƒì„±í•˜ëŠ” ê²ƒì— ëŒ€í•´ 좀 ë” ìžì„¸ížˆ 설명합니다.</p> -<p>대화가 얼마나 ë³µìž¡í•œì§€ì— ë”°ë¼ -{@link android.support.v4.app.DialogFragment}ì—서 여러 가지 다른 콜백 메서드를 êµ¬í˜„í• ìˆ˜ 있습니다. 그중ì—는 기본ì ì¸ +<p>대화가 얼마나 ë³µìž¡í•œì§€ì— ë”°ë¼ +{@link android.support.v4.app.DialogFragment}ì—서 여러 가지 다른 콜백 메서드를 êµ¬í˜„í• ìˆ˜ 있습니다. 그중ì—는 기본ì ì¸ <a href="{@docRoot}guide/components/fragments.html#Lifecycle">ì¡°ê° ìˆ˜ëª… 주기 메서드</a>ë„ í¬í•¨ë©ë‹ˆë‹¤. @@ -164,8 +164,8 @@ API를 사용하여 대화를 ìƒì„±í•˜ëŠ” ê²ƒì— ëŒ€í•´ 좀 ë” ìžì„¸ížˆ ì„¤ëª <h2 id="AlertDialog">ê²½ê³ ëŒ€í™” 구축</h2> -<p>{@link android.app.AlertDialog} í´ëž˜ìŠ¤ë¥¼ 사용하면 -여러 가지 대화 ë””ìžì¸ì„ êµ¬ì¶•í• ìˆ˜ 있으며, 필요한 대화 í´ëž˜ìŠ¤ëŠ” ì´ê²ƒë¿ì¸ ê²½ìš°ë„ ë§ŽìŠµë‹ˆë‹¤. +<p>{@link android.app.AlertDialog} í´ëž˜ìŠ¤ë¥¼ 사용하면 +여러 가지 대화 ë””ìžì¸ì„ êµ¬ì¶•í• ìˆ˜ 있으며, 필요한 대화 í´ëž˜ìŠ¤ëŠ” ì´ê²ƒë¿ì¸ ê²½ìš°ë„ ë§ŽìŠµë‹ˆë‹¤. 그림 2ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´ ê²½ê³ ëŒ€í™”ì—는 세 가지 ì˜ì—ì´ ìžˆìŠµë‹ˆë‹¤.</p> <div class="figure" style="width:311px;margin-top:0"> @@ -175,8 +175,8 @@ API를 사용하여 대화를 ìƒì„±í•˜ëŠ” ê²ƒì— ëŒ€í•´ 좀 ë” ìžì„¸ížˆ ì„¤ëª <ol> <li><b>ì œëª©</b> - <p>ì´ê²ƒì€ ì„ íƒ í•목ì´ë©° 콘í…ì¸ ì˜ì—ì— ìƒì„¸í•œ 메시지, ëª©ë¡ ë˜ëŠ” -ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ì±„ì›Œì ¸ 있는 경우ì—ë§Œ 사용해야 합니다. 단순한 메시지 ë˜ëŠ” + <p>ì´ê²ƒì€ ì„ íƒ í•목ì´ë©° 콘í…ì¸ ì˜ì—ì— ìƒì„¸í•œ 메시지, ëª©ë¡ ë˜ëŠ” +ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ì±„ì›Œì ¸ 있는 경우ì—ë§Œ 사용해야 합니다. 단순한 메시지 ë˜ëŠ” 질문(그림 1ì˜ ëŒ€í™”ì²˜ëŸ¼)ì„ ì§„ìˆ í•´ì•¼ 하는 경우, ì œëª©ì€ ì—†ì–´ë„ ë©ë‹ˆë‹¤.</li> <li><b>콘í…ì¸ ì˜ì—</b> <p>ì´ê²ƒì€ 메시지, ëª©ë¡ ë˜ëŠ” 다른 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ í‘œì‹œí• ìˆ˜ 있습니다.</p></li> @@ -202,7 +202,7 @@ builder.setMessage(R.string.dialog_message) AlertDialog dialog = builder.create(); </pre> -<p>ë‹¤ìŒ ì£¼ì œëŠ” +<p>ë‹¤ìŒ ì£¼ì œëŠ” {@link android.app.AlertDialog.Builder} í´ëž˜ìŠ¤ë¥¼ 사용하여 다양한 대화 ì†ì„±ì„ ì •ì˜í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> @@ -210,8 +210,8 @@ AlertDialog dialog = builder.create(); <h3 id="AddingButtons">버튼 추가</h3> -<p>그림 2ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì€ ìž‘ì—… ë²„íŠ¼ì„ ì¶”ê°€í•˜ë ¤ë©´ -{@link android.app.AlertDialog.Builder#setPositiveButton setPositiveButton()} ë° +<p>그림 2ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì€ ìž‘ì—… ë²„íŠ¼ì„ ì¶”ê°€í•˜ë ¤ë©´ +{@link android.app.AlertDialog.Builder#setPositiveButton setPositiveButton()} ë° {@link android.app.AlertDialog.Builder#setNegativeButton setNegativeButton()} 메서드를 호출하면 ë©ë‹ˆë‹¤.</p> <pre style="clear:right"> @@ -235,8 +235,8 @@ AlertDialog dialog = builder.create(); </pre> <p><code>set...Button()</code> 메서드ì—는 ë²„íŠ¼ì˜ ì œëª©ì´ í•„ìš”í•˜ê³ ( -<a href="{@docRoot}guide/topics/resources/string-resource.html">문ìžì—´ 리소스</a>ê°€ ì œê³µ), 사용ìžê°€ ë²„íŠ¼ì„ ëˆŒë €ì„ ë•Œ ìˆ˜í–‰í• ìž‘ì—…ì„ ì •ì˜í•˜ëŠ” -{@link android.content.DialogInterface.OnClickListener}ê°€ +<a href="{@docRoot}guide/topics/resources/string-resource.html">문ìžì—´ 리소스</a>ê°€ ì œê³µ), 사용ìžê°€ ë²„íŠ¼ì„ ëˆŒë €ì„ ë•Œ ìˆ˜í–‰í• ìž‘ì—…ì„ ì •ì˜í•˜ëŠ” +{@link android.content.DialogInterface.OnClickListener}ê°€ 필요합니다.</p> <p>ì¶”ê°€í• ìˆ˜ 있는 작업 ë²„íŠ¼ì€ ë‹¤ìŒê³¼ ê°™ì€ ì„¸ 가지가 있습니다.</p> @@ -246,9 +246,9 @@ AlertDialog dialog = builder.create(); <dt>ë¶€ì •ì </dt> <dd>ì´ê²ƒì€ ìž‘ì—…ì„ ì·¨ì†Œí•˜ëŠ” ë° ì‚¬ìš©í•´ì•¼ 합니다.</dd> <dt>중립ì </dt> - <dd>ì´ê²ƒì€ 사용ìžê°€ ìž‘ì—…ì„ ê³„ì†í•˜ê³ ì‹¶ì§€ ì•Šì„ ìˆ˜ 있지만 + <dd>ì´ê²ƒì€ 사용ìžê°€ ìž‘ì—…ì„ ê³„ì†í•˜ê³ ì‹¶ì§€ ì•Šì„ ìˆ˜ 있지만 ì·¨ì†Œí•˜ê³ ìž í•œë‹¤ê³ ë³¼ 수 ì—†ì„ ë•Œ 사용해야 합니다. ì´ê²ƒì€ ê¸ì •ì 버튼과 ë¶€ì •ì 버튼 사ì´ì— 나타납니다. - ì´ëŸ° ìž‘ì—…ì„ ì˜ˆë¡œ 들면 "ë‚˜ì¤‘ì— ì•Œë¦¼" ë“±ì´ ìžˆìŠµë‹ˆë‹¤.</dd> + ì´ëŸ° ìž‘ì—…ì„ ì˜ˆë¡œ 들면 "ë‚˜ì¤‘ì— ì•Œë¦¼" ë“±ì´ ìžˆìŠµë‹ˆë‹¤.</dd> </dl> <p>{@link @@ -271,7 +271,7 @@ android.app.AlertDialog}ì—는 ê° ë²„íŠ¼ ìœ í˜•ì„ í•˜ë‚˜ì”©ë§Œ ì¶”ê°€í• ìˆ˜ ì <li>ì˜êµ¬ì ì¸ ë‹¤ì¤‘ ì„ íƒ ëª©ë¡(확ì¸ëž€)</li> </ul> -<p>그림 3ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì€ ë‹¨ì¼ ì„ íƒ ëª©ë¡ì„ ìƒì„±í•˜ë ¤ë©´ +<p>그림 3ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì€ ë‹¨ì¼ ì„ íƒ ëª©ë¡ì„ ìƒì„±í•˜ë ¤ë©´ {@link android.app.AlertDialog.Builder#setItems setItems()} 메서드를 사용하면 ë©ë‹ˆë‹¤.</p> <pre style="clear:right"> @@ -289,23 +289,23 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { } </pre> -<p>목ë¡ì€ ëŒ€í™”ì˜ ì½˜í…ì¸ ì˜ì—ì— ë‚˜íƒ€ë‚˜ë¯€ë¡œ, -대화는 메시지와 목ë¡ì„ 둘 다 í‘œì‹œí• ìˆ˜ 없습니다. 대화ì—는 -{@link android.app.AlertDialog.Builder#setTitle setTitle()}로 ì œëª©ì„ ì„¤ì •í•´ì•¼ 합니다. +<p>목ë¡ì€ ëŒ€í™”ì˜ ì½˜í…ì¸ ì˜ì—ì— ë‚˜íƒ€ë‚˜ë¯€ë¡œ, +대화는 메시지와 목ë¡ì„ 둘 다 í‘œì‹œí• ìˆ˜ 없습니다. 대화ì—는 +{@link android.app.AlertDialog.Builder#setTitle setTitle()}로 ì œëª©ì„ ì„¤ì •í•´ì•¼ 합니다. 목ë¡ì— 대한 í•ëª©ì„ ì§€ì •í•˜ë ¤ë©´ {@link android.app.AlertDialog.Builder#setItems setItems()}를 호출하여 ë°°ì—´ì„ í•˜ë‚˜ ì „ë‹¬í•©ë‹ˆë‹¤. 아니면 {@link -android.app.AlertDialog.Builder#setAdapter setAdapter()}를 사용하여 목ë¡ì„ ì§€ì •í•´ë„ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ë™ì ì¸ ë°ì´í„°ê°€ 있는 목ë¡(예: ë°ì´í„°ë² ì´ìФì—서 ê°€ì ¸ì˜¨ 것)ì„ +android.app.AlertDialog.Builder#setAdapter setAdapter()}를 사용하여 목ë¡ì„ ì§€ì •í•´ë„ ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ë™ì ì¸ ë°ì´í„°ê°€ 있는 목ë¡(예: ë°ì´í„°ë² ì´ìФì—서 ê°€ì ¸ì˜¨ 것)ì„ {@link android.widget.ListAdapter}로 ì§€ì›í• 수 있게 í•´ì¤ë‹ˆë‹¤.</p> -<p>{@link android.widget.ListAdapter}로 목ë¡ì„ ì§€ì›í•˜ê¸°ë¡œ ì„ íƒí•˜ëŠ” 경우, -í•ìƒ {@link android.support.v4.content.Loader}를 사용해야 콘í…ì¸ ê°€ 비ë™ê¸°ì‹ìœ¼ë¡œ -로딩ë©ë‹ˆë‹¤. -ì´ê²ƒì€ <a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">어댑터로 ë ˆì´ì•„웃 +<p>{@link android.widget.ListAdapter}로 목ë¡ì„ ì§€ì›í•˜ê¸°ë¡œ ì„ íƒí•˜ëŠ” 경우, +í•ìƒ {@link android.support.v4.content.Loader}를 사용해야 콘í…ì¸ ê°€ 비ë™ê¸°ì‹ìœ¼ë¡œ +로딩ë©ë‹ˆë‹¤. +ì´ê²ƒì€ <a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">어댑터로 ë ˆì´ì•„웃 구축하기</a> ë° <a href="{@docRoot}guide/components/loaders.html">로ë”</a> ê°€ì´ë“œì— ë” ìžì„¸ížˆ 설명ë˜ì–´ 있습니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> 기본ì 으로 ëª©ë¡ í•ëª©ì„ í„°ì¹˜í•˜ë©´ 대화를 무시하게 ë©ë‹ˆë‹¤. +<p class="note"><strong>ì°¸ê³ :</strong> 기본ì 으로 ëª©ë¡ í•ëª©ì„ í„°ì¹˜í•˜ë©´ 대화를 무시하게 ë©ë‹ˆë‹¤. 다만 다ìŒê³¼ ê°™ì€ ì˜êµ¬ì ì¸ ì„ íƒ ëª©ë¡ ì¤‘ 하나를 사용하는 경우는 예외입니다.</p> <div class="figure" style="width:290px;margin:-30px 0 0 40px"> @@ -317,15 +317,15 @@ android.app.AlertDialog.Builder#setAdapter setAdapter()}를 사용하여 목ë¡ì <h4 id="Checkboxes">ì˜êµ¬ì 다중 ì„ íƒ ë˜ëŠ” ë‹¨ì¼ ì„ íƒ ëª©ë¡ ì¶”ê°€</h4> -<p>다중 ì„ íƒ í•목 목ë¡ì„ 추가하거나(확ì¸ëž€) -ë‹¨ì¼ ì„ íƒ ëª©ë¡ì„ ì¶”ê°€í•˜ë ¤ë©´(ë¬´ì„ ë²„íŠ¼), ê°ê° +<p>다중 ì„ íƒ í•목 목ë¡ì„ 추가하거나(확ì¸ëž€) +ë‹¨ì¼ ì„ íƒ ëª©ë¡ì„ ì¶”ê°€í•˜ë ¤ë©´(ë¬´ì„ ë²„íŠ¼), ê°ê° {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ë˜ëŠ” -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ë˜ëŠ” +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} 메서드를 사용합니다.</p> -<p>예를 들어 다ìŒì€ 그림 4ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´ ë‹¤ì¤‘ ì„ íƒ ëª©ë¡ì„ ìƒì„±í•˜ëŠ” 방법입니다. -ì´ê²ƒì€ ì„ íƒí•œ í•ëª©ì„ +<p>예를 들어 다ìŒì€ 그림 4ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´ ë‹¤ì¤‘ ì„ íƒ ëª©ë¡ì„ ìƒì„±í•˜ëŠ” 방법입니다. +ì´ê²ƒì€ ì„ íƒí•œ í•ëª©ì„ {@link java.util.ArrayList}ì— ì €ìž¥í•©ë‹ˆë‹¤.</p> <pre style="clear:right"> @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -371,11 +371,11 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { } </pre> -<p>ì¼ë°˜ì ì¸ ëª©ë¡ê³¼ ë¬´ì„ ë²„íŠ¼ì´ ìžˆëŠ” ëª©ë¡ ì–‘ìª½ ëª¨ë‘ "ë‹¨ì¼ ì„ íƒ" ìž‘ì—…ì„ +<p>ì¼ë°˜ì ì¸ ëª©ë¡ê³¼ ë¬´ì„ ë²„íŠ¼ì´ ìžˆëŠ” ëª©ë¡ ì–‘ìª½ ëª¨ë‘ "ë‹¨ì¼ ì„ íƒ" ìž‘ì—…ì„ ì œê³µí•˜ì§€ë§Œ, 사용ìžì˜ ì„ íƒì„ ìœ ì§€í•˜ê³ ìž í•˜ëŠ” 경우 {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) -setSingleChoiceItems()}를 사용해야 합니다. -다시 ë§í•´, 대화를 ë‚˜ì¤‘ì— ë‹¤ì‹œ 여는 경우 사용ìžì˜ 현재 ì„ íƒì´ 무엇ì¸ì§€ 나타내야 하며, +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +setSingleChoiceItems()}를 사용해야 합니다. +다시 ë§í•´, 대화를 ë‚˜ì¤‘ì— ë‹¤ì‹œ 여는 경우 사용ìžì˜ 현재 ì„ íƒì´ 무엇ì¸ì§€ 나타내야 하며, 그러면 ë¬´ì„ ë²„íŠ¼ìœ¼ë¡œ 목ë¡ì„ ìƒì„±í• 수 있습니다.</p> @@ -389,12 +389,12 @@ setSingleChoiceItems()}를 사용해야 합니다. <p class="img-caption"><strong>그림 5.</strong> ì‚¬ìš©ìž ì§€ì • 대화 ë ˆì´ì•„웃입니다.</p> </div> -<p>대화ì—서 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì›í•˜ëŠ” 경우, ë ˆì´ì•„ì›ƒì„ ìƒì„±í•œ ë‹¤ìŒ ì´ë¥¼ +<p>대화ì—서 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì›í•˜ëŠ” 경우, ë ˆì´ì•„ì›ƒì„ ìƒì„±í•œ ë‹¤ìŒ ì´ë¥¼ {@link android.app.AlertDialog}ì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. ì´ë•Œ {@link android.app.AlertDialog.Builder#setView setView()} on your {@link android.app.AlertDialog.Builder} ê°ì²´ë¥¼ 호출하는 ë°©ë²•ì„ ì”니다.</p> -<p>기본ì 으로 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ëŒ€í™”ì°½ì„ ê°€ë“ ì±„ìš°ì§€ë§Œ, ì—¬ì „ížˆ +<p>기본ì 으로 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ëŒ€í™”ì°½ì„ ê°€ë“ ì±„ìš°ì§€ë§Œ, ì—¬ì „ížˆ {@link android.app.AlertDialog.Builder} 메서드를 사용하여 버튼과 ì œëª©ì„ ì¶”ê°€í• ìˆ˜ 있습니다.</p> <p>예를 들어 다ìŒì€ 그림 5ì— í‘œì‹œëœ ëŒ€í™”ì— ëŒ€í•œ ë ˆì´ì•„웃 파ì¼ìž…니다.</p> @@ -437,14 +437,14 @@ android.app.AlertDialog.Builder} ê°ì²´ë¥¼ 호출하는 ë°©ë²•ì„ ì”니다.</p> </pre> <p class="note"><strong>íŒ:</strong> 기본ì 으로 {@link android.widget.EditText} - 요소를 ì„¤ì •í•˜ì—¬ {@code "textPassword"} ìž…ë ¥ ìœ í˜•ì„ ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우, 글꼴 패밀리가 ê³ ì • í으로 ì„¤ì •ë˜ì–´ 있으므로 -글꼴 패밀리를 {@code "sans-serif"}로 변경해야 합니다. 그래야 양쪽 í…스트 필드가 ëª¨ë‘ ì¼ì¹˜í•˜ëŠ” 글꼴 스타ì¼ì„ + 요소를 ì„¤ì •í•˜ì—¬ {@code "textPassword"} ìž…ë ¥ ìœ í˜•ì„ ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 경우, 글꼴 패밀리가 ê³ ì • í으로 ì„¤ì •ë˜ì–´ 있으므로 +글꼴 패밀리를 {@code "sans-serif"}로 변경해야 합니다. 그래야 양쪽 í…스트 필드가 ëª¨ë‘ ì¼ì¹˜í•˜ëŠ” 글꼴 스타ì¼ì„ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> -<p>{@link android.support.v4.app.DialogFragment} ì•ˆì˜ ë ˆì´ì•„ì›ƒì„ íŒ½ì°½ì‹œí‚¤ë ¤ë©´, -{@link android.view.LayoutInflater}를 -{@link android.app.Activity#getLayoutInflater()}로 ê°€ì ¸ì™€ -{@link android.view.LayoutInflater#inflate inflate()}를 호출합니다. +<p>{@link android.support.v4.app.DialogFragment} ì•ˆì˜ ë ˆì´ì•„ì›ƒì„ íŒ½ì°½ì‹œí‚¤ë ¤ë©´, +{@link android.view.LayoutInflater}를 +{@link android.app.Activity#getLayoutInflater()}로 ê°€ì ¸ì™€ +{@link android.view.LayoutInflater#inflate inflate()}를 호출합니다. 여기서 첫 번째 매개변수가 ë ˆì´ì•„웃 리소스 IDì´ê³ ë‘ ë²ˆì§¸ 매개변수가 ë ˆì´ì•„ì›ƒì˜ ìƒìœ„ 보기입니다. 그러므로 그런 ë‹¤ìŒ {@link android.app.AlertDialog#setView setView()}를 호출하여 ë ˆì´ì•„ì›ƒì„ ëŒ€í™”ì— ë°°ì¹˜í• ìˆ˜ 있습니다.</p> @@ -470,16 +470,16 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> <div class="note"> -<p><strong>íŒ:</strong> ì‚¬ìš©ìž ì§€ì • 대화를 ì›í•˜ëŠ” 경우, -{@link android.app.Activity}를 ëŒ€ì‹ í‘œì‹œí•´ë„ ë©ë‹ˆë‹¤. ì´ëŠ” +<p><strong>íŒ:</strong> ì‚¬ìš©ìž ì§€ì • 대화를 ì›í•˜ëŠ” 경우, +{@link android.app.Activity}를 ëŒ€ì‹ í‘œì‹œí•´ë„ ë©ë‹ˆë‹¤. ì´ëŠ” {@link android.app.Dialog} API ëŒ€ì‹ ëŒ€í™”ë¡œ 표시하는 것입니다. 단순히 액티비티를 하나 ìƒì„±í•œ ë‹¤ìŒ ê·¸ 테마를 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code -<activity>}</a> 매니페스트 ìš”ì†Œì— ìžˆëŠ” +<activity>}</a> 매니페스트 ìš”ì†Œì— ìžˆëŠ” {@link android.R.style#Theme_Holo_Dialog Theme.Holo.Dialog}로 ì„¤ì •í•˜ë©´ ë©ë‹ˆë‹¤.</p> @@ -493,19 +493,19 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <h2 id="PassingEvents">ì´ë²¤íŠ¸ë¥¼ ëŒ€í™”ì˜ í˜¸ìŠ¤íŠ¸ì— ë‹¤ì‹œ ì „ë‹¬</h2> -<p>사용ìžê°€ ëŒ€í™”ì˜ ìž‘ì—… 버튼 중 하나를 터치하거나 목ë¡ì—서 í•ëª©ì„ í•˜ë‚˜ ì„ íƒí•˜ë©´, -{@link android.support.v4.app.DialogFragment}ê°€ +<p>사용ìžê°€ ëŒ€í™”ì˜ ìž‘ì—… 버튼 중 하나를 터치하거나 목ë¡ì—서 í•ëª©ì„ í•˜ë‚˜ ì„ íƒí•˜ë©´, +{@link android.support.v4.app.DialogFragment}ê°€ 필요한 ìž‘ì—…ì„ ì•Œì•„ì„œ ìˆ˜í–‰í• ìˆ˜ë„ ìžˆì§€ë§Œ ëŒ€ë¶€ë¶„ì˜ ê²½ìš° ì´ë²¤íŠ¸ë¥¼ 대화를 ì—° 액티비티 ë˜ëŠ” í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì§ì ‘ ì „ë‹¬í•˜ê³ ìž í• ìˆ˜ 있습니다. - ì´ë ‡ê²Œ í•˜ë ¤ë©´ ê° í´ë¦ ì´ë²¤íŠ¸ì˜ ìœ í˜•ë³„ë¡œ 메서드가 있는 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. - 그런 ë‹¤ìŒ í•´ë‹¹ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 대화로부터 작업 ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í• + ì´ë ‡ê²Œ í•˜ë ¤ë©´ ê° í´ë¦ ì´ë²¤íŠ¸ì˜ ìœ í˜•ë³„ë¡œ 메서드가 있는 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•©ë‹ˆë‹¤. + 그런 ë‹¤ìŒ í•´ë‹¹ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 대화로부터 작업 ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í• í˜¸ìŠ¤íŠ¸ 구성 ìš”ì†Œì— êµ¬í˜„í•˜ë©´ ë©ë‹ˆë‹¤.</p> -<p>예를 들어 다ìŒì€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” {@link android.support.v4.app.DialogFragment}입니다. +<p>예를 들어 다ìŒì€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì •ì˜í•˜ëŠ” {@link android.support.v4.app.DialogFragment}입니다. ì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 ì´ë²¤íŠ¸ë¥¼ 호스트 ì•¡í‹°ë¹„í‹°ì— ë„로 ì „ë‹¬í•˜ê²Œ ë©ë‹ˆë‹¤.</p> <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -535,15 +535,15 @@ public class NoticeDialogFragment extends DialogFragment { } </pre> -<p>대화를 호스팅하는 액티비티는 ëŒ€í™”ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë§Œë“니다. -ì´ë•Œ 대화 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìƒì„±ìžë¥¼ 사용하며, +<p>대화를 호스팅하는 액티비티는 ëŒ€í™”ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë§Œë“니다. +ì´ë•Œ 대화 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìƒì„±ìžë¥¼ 사용하며, {@code NoticeDialogListener} ì¸í„°íŽ˜ì´ìФ êµ¬í˜„ì„ í†µí•´ ëŒ€í™”ì˜ ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í•˜ê²Œ ë©ë‹ˆë‹¤.</p> <pre> public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -568,8 +568,8 @@ public class MainActivity extends FragmentActivity </pre> <p>액티비티가 {@code NoticeDialogListener}를 구현하기 ë•Œë¬¸ì——ìœ„ì— í‘œì‹œëœ {@link android.support.v4.app.Fragment#onAttach onAttach()} - 콜백 메서드가 ê°•ì œ ì ìš©—해당 대화 프래그먼트는 -ì¸í„°íŽ˜ì´ìФ 콜백 메서드를 사용하여 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ í´ë¦ ì´ë²¤íŠ¸ë¥¼ + 콜백 메서드가 ê°•ì œ ì ìš©—해당 대화 프래그먼트는 +ì¸í„°íŽ˜ì´ìФ 콜백 메서드를 사용하여 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ í´ë¦ ì´ë²¤íŠ¸ë¥¼ ì „ë‹¬í• ìˆ˜ 있습니다.</p> <pre> @@ -604,11 +604,11 @@ public class NoticeDialogFragment extends DialogFragment { <p>대화를 í‘œì‹œí•˜ê³ ìž í•˜ëŠ” 경우, {@link android.support.v4.app.DialogFragment}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•œ ë‹¤ìŒ {@link android.support.v4.app.DialogFragment#show -show()}를 호출하여 {@link android.support.v4.app.FragmentManager}와 대화 í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ +show()}를 호출하여 {@link android.support.v4.app.FragmentManager}와 대화 í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•œ 태그 ì´ë¦„ì„ ì „ë‹¬í•©ë‹ˆë‹¤.</p> -<p>{@link android.support.v4.app.FragmentManager}를 ê°€ì ¸ì˜¤ë ¤ë©´ -{@link android.support.v4.app.FragmentActivity}ì—서 +<p>{@link android.support.v4.app.FragmentManager}를 ê°€ì ¸ì˜¤ë ¤ë©´ +{@link android.support.v4.app.FragmentActivity}ì—서 {@link android.support.v4.app.FragmentActivity#getSupportFragmentManager()}를 호출하거나 {@link android.support.v4.app.Fragment}로부터 {@link android.support.v4.app.Fragment#getFragmentManager()}를 호출합니다. 예:</p> @@ -620,7 +620,7 @@ public void confirmFireMissiles() { } </pre> -<p>ë‘ ë²ˆì§¸ ì¸ìˆ˜ {@code "missiles"}는 ì‹œìŠ¤í…œì´ +<p>ë‘ ë²ˆì§¸ ì¸ìˆ˜ {@code "missiles"}는 ì‹œìŠ¤í…œì´ í•„ìš”ì— ë”°ë¼ í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ë³µì›í•˜ëŠ” ë° ì‚¬ìš©í•˜ëŠ” ê³ ìœ í•œ 태그 ì´ë¦„입니다. ì´ íƒœê·¸ë¥¼ 사용하면 {@link android.support.v4.app.FragmentManager#findFragmentByTag findFragmentByTag()}를 호출하여 해당 프래그먼트를 íŒŒì•…í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </p> @@ -630,20 +630,20 @@ findFragmentByTag()}를 호출하여 해당 프래그먼트를 íŒŒì•…í• ìˆ˜ë„ <h2 id="FullscreenDialog">대화를 ì „ì²´ 화면으로 ë˜ëŠ” í¬í•¨ëœ 프래그먼트로 표시</h2> -<p>UI ë””ìžì¸ì—서, 몇몇 ìƒí™© 하ì—서는 UIì˜ í•œ ì¡°ê°ì„ 대화로 나타내지만 -다른 ìƒí™©ì—서는 ì „ì²´ 화면ì´ë‚˜ í¬í•¨ëœ 프래그먼트로 ë‚˜íƒ€ë‚´ê³ ìž í•˜ëŠ” 경우가 ìžˆì„ ìˆ˜ +<p>UI ë””ìžì¸ì—서, 몇몇 ìƒí™© 하ì—서는 UIì˜ í•œ ì¡°ê°ì„ 대화로 나타내지만 +다른 ìƒí™©ì—서는 ì „ì²´ 화면ì´ë‚˜ í¬í•¨ëœ 프래그먼트로 ë‚˜íƒ€ë‚´ê³ ìž í•˜ëŠ” 경우가 ìžˆì„ ìˆ˜ 있습니다(ì´ëŠ” 어쩌면 기기 í™”ë©´ì´ ëŒ€í˜•ì¸ì§€ 소형ì¸ì§€ì— ë”°ë¼ ë‹¬ë¼ì§ˆ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤). {@link android.support.v4.app.DialogFragment} í´ëž˜ìФì—서 ì´ëŸ° ìœ ì—°ì„±ì„ ì œê³µí•˜ëŠ” ê²ƒì€ ì´ê²ƒì´ ì—¬ì „ížˆ í¬í•¨ 가능한 {@link android.support.v4.app.Fragment} ì—í• ì„ í• ìˆ˜ 있기 때문입니다.</p> <p>그러나 ì´ ê²½ìš°ì—는 대화를 구축하는 ë° {@link android.app.AlertDialog.Builder AlertDialog.Builder} -ë˜ëŠ” 다른 {@link android.app.Dialog} ê°ì²´ë¥¼ 사용하면 안 ë©ë‹ˆë‹¤. -{@link android.support.v4.app.DialogFragment}를 í¬í•¨ 가능한 ìƒíƒœë¡œ ë§Œë“¤ë ¤ë©´, -ë ˆì´ì•„웃 ì•ˆì— ìžˆëŠ” ëŒ€í™”ì˜ UI를 ì •ì˜í•´ì•¼ 합니다. 그런 ë‹¤ìŒ ë ˆì´ì•„ì›ƒì„ +ë˜ëŠ” 다른 {@link android.app.Dialog} ê°ì²´ë¥¼ 사용하면 안 ë©ë‹ˆë‹¤. +{@link android.support.v4.app.DialogFragment}를 í¬í•¨ 가능한 ìƒíƒœë¡œ ë§Œë“¤ë ¤ë©´, +ë ˆì´ì•„웃 ì•ˆì— ìžˆëŠ” ëŒ€í™”ì˜ UI를 ì •ì˜í•´ì•¼ 합니다. 그런 ë‹¤ìŒ ë ˆì´ì•„ì›ƒì„ {@link android.support.v4.app.DialogFragment#onCreateView onCreateView()} ì½œë°±ì— ë¡œë”©í•©ë‹ˆë‹¤.</p> -<p>다ìŒì€ 대화 ë˜ëŠ” í¬í•¨ 가능한 프래그먼트 중 ì–´ëŠ ìª½ìœ¼ë¡œë“ í‘œì‹œë 수 있는 +<p>다ìŒì€ 대화 ë˜ëŠ” í¬í•¨ 가능한 프래그먼트 중 ì–´ëŠ ìª½ìœ¼ë¡œë“ í‘œì‹œë 수 있는 {@link android.support.v4.app.DialogFragment} 예시입니다(<code>purchase_items.xml</code>ì´ë¼ëŠ” ë ˆì´ì•„웃 사용).</p> <pre> @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ public class CustomDialogFragment extends DialogFragment { public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -695,14 +695,14 @@ public void showDialog() { } </pre> -<p>프래그먼트 트랜ìžì…˜ì„ 수행하는 ê²ƒì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ +<p>프래그먼트 트랜ìžì…˜ì„ 수행하는 ê²ƒì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}guide/components/fragments.html">프래그먼트</a> ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤.</p> <p>ì´ ì˜ˆì‹œì—서는 <code>mIsLargeLayout</code> ë¶€ìš¸ì´ í˜„ìž¬ 기기가 ì•±ì˜ í° ë ˆì´ì•„웃 ë””ìžì¸ì„ ì¨ì•¼ í• ì§€ë¥¼ 나타냅니다(ë”°ë¼ì„œ ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ ì „ì²´ 화면보다는 대화로 표시). - ì´ëŸ° ì¢…ë¥˜ì˜ ë¶€ìš¸ì„ ì„¤ì •í•˜ëŠ” 가장 ì¢‹ì€ ë°©ë²•ì€ + ì´ëŸ° ì¢…ë¥˜ì˜ ë¶€ìš¸ì„ ì„¤ì •í•˜ëŠ” 가장 ì¢‹ì€ ë°©ë²•ì€ <a href="{@docRoot}guide/topics/resources/more-resources.html#Bool">부울 리소스 ê°’</a>ì„ -여러 가지 화면 í¬ê¸°ì— 대한 <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">대체 리소스</a> 값으로 ì„ ì–¸í•˜ëŠ” 것입니다. +여러 가지 화면 í¬ê¸°ì— 대한 <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">대체 리소스</a> 값으로 ì„ ì–¸í•˜ëŠ” 것입니다. 예를 들어 다ìŒì€ 여러 가지 화면 í¬ê¸°ì— 대한 ë‘ ê°€ì§€ ë²„ì „ì˜ ë¶€ìš¸ 리소스입니다.</p> <p class="code-caption">res/values/bools.xml</p> @@ -721,7 +721,7 @@ public void showDialog() { </resources> </pre> -<p>그러면 ì•¡í‹°ë¹„í‹°ì˜ +<p>그러면 ì•¡í‹°ë¹„í‹°ì˜ {@link android.app.Activity#onCreate onCreate()} 메서드 ì¤‘ì— {@code mIsLargeLayout} ê°’ì„ ì´ˆê¸°í™”í• ìˆ˜ 있습니다.</p> <pre> @@ -740,14 +740,14 @@ public void onCreate(Bundle savedInstanceState) { <h3 id="ActivityAsDialog">액티비티를 í° í™”ë©´ì— ëŒ€í™”ë¡œ 표시</h3> -<p>ìž‘ì€ í™”ë©´ì˜ ê²½ìš° 대화를 ì „ì²´ 화면 UI로 표시하는 ëŒ€ì‹ , í° í™”ë©´ì— ìžˆì„ ë•Œì—는 +<p>ìž‘ì€ í™”ë©´ì˜ ê²½ìš° 대화를 ì „ì²´ 화면 UI로 표시하는 ëŒ€ì‹ , í° í™”ë©´ì— ìžˆì„ ë•Œì—는 {@link android.app.Activity}를 대화로 í‘œì‹œí•¨ìœ¼ë¡œì¨ ê°™ì€ ê²°ê³¼ë¥¼ ì–»ì„ ìˆ˜ 있습니다. - ì–´ëŠ ë°©ì‹ì„ ì‚¬ìš©í• ê²ƒì¸ì§€ëŠ” 앱 ë””ìžì¸ì— ë”°ë¼ ë‹¬ë¼ì§€ì§€ë§Œ, -액티비티를 대화로 표시하면 ì•±ì´ ì´ë¯¸ ìž‘ì€ í™”ë©´ìš©ìœ¼ë¡œ ë””ìžì¸ëœ ìƒíƒœì—서 -태블릿ì—ì„œì˜ í™˜ê²½ì„ ê°œì„ í•˜ê¸° 위해 ì¼ì‹œì ì¸ ì•¡í‹°ë¹„í‹°ë¥¼ 대화로 표시하는 경우 + ì–´ëŠ ë°©ì‹ì„ ì‚¬ìš©í• ê²ƒì¸ì§€ëŠ” 앱 ë””ìžì¸ì— ë”°ë¼ ë‹¬ë¼ì§€ì§€ë§Œ, +액티비티를 대화로 표시하면 ì•±ì´ ì´ë¯¸ ìž‘ì€ í™”ë©´ìš©ìœ¼ë¡œ ë””ìžì¸ëœ ìƒíƒœì—서 +태블릿ì—ì„œì˜ í™˜ê²½ì„ ê°œì„ í•˜ê¸° 위해 ì¼ì‹œì ì¸ ì•¡í‹°ë¹„í‹°ë¥¼ 대화로 표시하는 경우 ìœ ìš©í• ë•Œê°€ 많습니다.</p> -<p>í° í™”ë©´ì˜ ê²½ìš° 액티비티를 대화로만 í‘œì‹œí•˜ë ¤ë©´, +<p>í° í™”ë©´ì˜ ê²½ìš° 액티비티를 대화로만 í‘œì‹œí•˜ë ¤ë©´, {@link android.R.style#Theme_Holo_DialogWhenLarge Theme.Holo.DialogWhenLarge} 테마를 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 매니페스트 ìš”ì†Œì— ì 용하면 ë©ë‹ˆë‹¤.</p> @@ -762,11 +762,11 @@ public void onCreate(Bundle savedInstanceState) { <h2 id="DismissingADialog">대화 무시</h2> -<p>사용ìžê°€ +<p>사용ìžê°€ {@link android.app.AlertDialog.Builder}로 ìƒì„±í•œ 작업 버튼 중 하나ë¼ë„ 터치하면 ì‹œìŠ¤í…œì´ ëŒ€í™”ë¥¼ ëŒ€ì‹ ë¬´ì‹œí•©ë‹ˆë‹¤.</p> -<p>ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžê°€ 대화 목ë¡ì—서 í•ëª©ì„ í„°ì¹˜í•˜ëŠ” 경우ì—ë„ ëŒ€í™”ë¥¼ 무시합니다. -다만 목ë¡ì´ ë¬´ì„ ë²„íŠ¼ì´ë‚˜ 확ì¸ëž€ì„ 사용하는 경우ì—는 예외입니다. +<p>ì‹œìŠ¤í…œì€ ì‚¬ìš©ìžê°€ 대화 목ë¡ì—서 í•ëª©ì„ í„°ì¹˜í•˜ëŠ” 경우ì—ë„ ëŒ€í™”ë¥¼ 무시합니다. +다만 목ë¡ì´ ë¬´ì„ ë²„íŠ¼ì´ë‚˜ 확ì¸ëž€ì„ 사용하는 경우ì—는 예외입니다. ê·¸ë ‡ì§€ 않으면 대화를 수ë™ìœ¼ë¡œ ë¬´ì‹œí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. {@link android.support.v4.app.DialogFragment}ì—서 {@link android.support.v4.app.DialogFragment#dismiss()}를 호출하면 ë©ë‹ˆë‹¤.</p> @@ -775,24 +775,24 @@ android.support.v4.app.DialogFragment}ì—서 {@link android.support.v4.app.Dialo android.support.v4.app.DialogFragment}ì—서 @link android.support.v4.app.DialogFragment#onDismiss onDismiss()}를 구현하면 ë©ë‹ˆë‹¤.</p> -<p>ë˜í•œ 대화를 <em>취소</em>í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ ìž‘ì—…ì„ ì™„ë£Œí•˜ì§€ ì•Šê³ ëŒ€í™”ë¥¼ -분명히 ë– ë‚¬ë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ëŠ” 특수 ì´ë²¤íŠ¸ìž…ë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ -<em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ê±°ë‚˜ 대화 ì˜ì— ë°”ê¹¥ì˜ í™”ë©´ì„ í„°ì¹˜í•˜ê±°ë‚˜, +<p>ë˜í•œ 대화를 <em>취소</em>í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ ìž‘ì—…ì„ ì™„ë£Œí•˜ì§€ ì•Šê³ ëŒ€í™”ë¥¼ +분명히 ë– ë‚¬ë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚´ëŠ” 특수 ì´ë²¤íŠ¸ìž…ë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ +<em>뒤로</em> ë²„íŠ¼ì„ ëˆ„ë¥´ê±°ë‚˜ 대화 ì˜ì— ë°”ê¹¥ì˜ í™”ë©´ì„ í„°ì¹˜í•˜ê±°ë‚˜, 개발ìžê°€ {@link android.app.Dialog}ì—서 명시ì 으로 {@link android.app.Dialog#cancel()}ì„ í˜¸ì¶œí•œ 경우 ë°œìƒí•©ë‹ˆë‹¤(예: ëŒ€í™”ì˜ "취소" ë²„íŠ¼ì— ëŒ€í•œ ì‘답으로).</p> <p>ìœ„ì˜ ì˜ˆì‹œì— ë‚˜íƒ€ë‚œ 바와 ê°™ì´ ì·¨ì†Œ ì´ë²¤íŠ¸ì— ì‘ë‹µí•˜ë ¤ë©´ {@link -android.support.v4.app.DialogFragment} í´ëž˜ìФì—서 +android.support.v4.app.DialogFragment} í´ëž˜ìФì—서 {@link android.support.v4.app.DialogFragment#onCancel onCancel()}ì„ êµ¬í˜„í•˜ë©´ ë©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì‹œìŠ¤í…œì€ -{@link android.support.v4.app.DialogFragment#onCancel onCancel()} ì½œë°±ì„ ë¶ˆëŸ¬ì˜¤ëŠ” ì´ë²¤íŠ¸ê°€ ë°œìƒí• 때마다 -{@link android.support.v4.app.DialogFragment#onDismiss onDismiss()}를 호출합니다. +<p class="note"><strong>ì°¸ê³ :</strong> ì‹œìŠ¤í…œì€ +{@link android.support.v4.app.DialogFragment#onCancel onCancel()} ì½œë°±ì„ ë¶ˆëŸ¬ì˜¤ëŠ” ì´ë²¤íŠ¸ê°€ ë°œìƒí• 때마다 +{@link android.support.v4.app.DialogFragment#onDismiss onDismiss()}를 호출합니다. 그러나 {@link android.app.Dialog#dismiss Dialog.dismiss()} ë˜ëŠ” {@link -android.support.v4.app.DialogFragment#dismiss DialogFragment.dismiss()}를 호출하면 -ì‹œìŠ¤í…œì€ {@link android.support.v4.app.DialogFragment#onDismiss onDismiss()}는 호출하지만 {@link android.support.v4.app.DialogFragment#onCancel onCancel()}ì€ -호출하지 <em>않습니다</em>. ë”°ë¼ì„œ 사용ìžê°€ 대화를 보기ì—서 ì œê±°í•˜ê¸° 위해 ëŒ€í™”ì— ìžˆëŠ” -<em>ê¸ì •ì ì¸</em> ë²„íŠ¼ì„ ëˆ„ë¥´ëŠ” 경우, ì¼ë°˜ì 으로 {@link android.support.v4.app.DialogFragment#dismiss dismiss()}를 +android.support.v4.app.DialogFragment#dismiss DialogFragment.dismiss()}를 호출하면 +ì‹œìŠ¤í…œì€ {@link android.support.v4.app.DialogFragment#onDismiss onDismiss()}는 호출하지만 {@link android.support.v4.app.DialogFragment#onCancel onCancel()}ì€ +호출하지 <em>않습니다</em>. ë”°ë¼ì„œ 사용ìžê°€ 대화를 보기ì—서 ì œê±°í•˜ê¸° 위해 ëŒ€í™”ì— ìžˆëŠ” +<em>ê¸ì •ì ì¸</em> ë²„íŠ¼ì„ ëˆ„ë¥´ëŠ” 경우, ì¼ë°˜ì 으로 {@link android.support.v4.app.DialogFragment#dismiss dismiss()}를 사용해야 합니다.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/menus.jd b/docs/html-intl/intl/ko/guide/topics/ui/menus.jd index c115c2a7c3ba..924445d94e64 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/menus.jd @@ -72,7 +72,7 @@ parent.link=index.html <dl> <dt><strong>옵션 메뉴 ë° ìž‘ì—… 모ìŒ</strong></dt> <dd><a href="#options-menu">옵션 메뉴</a>는 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 기본 메뉴 í•목 ì»¬ë ‰ì…˜ -입니다. +입니다. ì´ê³³ì— "검색", "ì´ë©”ì¼ ìž‘ì„±" ë° "ì„¤ì •"ê³¼ ê°™ì´ ì•±ì— ì „ì²´ì ì¸ ì˜í–¥ì„ 미치는 ìž‘ì—…ì„ ë°°ì¹˜í•´ì•¼ 합니다. <p>Android 2.3 ì´í•˜ë¥¼ 대ìƒìœ¼ë¡œ 개발하는 경우 사용ìžëŠ” <em>메뉴</em> ë²„íŠ¼ì„ ëˆŒëŸ¬ì„œ 옵션 메뉴 패ë„ì„ í‘œì‹œí• ìˆ˜ 있습니다.</p> @@ -83,9 +83,9 @@ parent.link=index.html 사용하기 시작해야 합니다.</p> <p><a href="#options-menu">옵션 메뉴 만들기</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </dd> - + <dt><strong>컨í…스트 메뉴 ë° ìƒí™©ë³„ 작업 모드</strong></dt> - + <dd>컨í…스트 메뉴는 사용ìžê°€ 요소를 길게 í´ë¦í•˜ë©´ 나타나는 <a href="#FloatingContextMenu">ë¶€ë™ ë©”ë‰´</a> 입니다. ì´ê²ƒì€ ì„ íƒí•œ 콘í…ì¸ ë‚˜ 컨í…스트 í”„ë ˆìž„ì— ì˜í–¥ì„ 주는 ìž‘ì—…ì„ ì œê³µí•©ë‹ˆë‹¤. @@ -94,7 +94,7 @@ parent.link=index.html 여러 í•ëª©ì„ ì„ íƒí• 수 있습니다.</p> <p><a href="#context-menu">ìƒí™©ë³„ 메뉴 만들기</a>ì— ê´€í•œ ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> </dd> - + <dt><strong>íŒì—… 메뉴</strong></dt> <dd>íŒì—… 메뉴는 메뉴를 호출하는 ë³´ê¸°ì— ê³ ì •ëœ ìˆ˜ì§ ëª©ë¡ì—서 í•목 목ë¡ì„ 표시합니다. ì´ê²ƒì€ ì • 콘í…ì¸ ì™€ ê´€ë ¨ì´ ë˜ëŠ” ìž‘ì—…ì˜ ì˜¤ë²„í”Œë¡œë¥¼ ì œê³µí•˜ê±°ë‚˜ @@ -112,7 +112,7 @@ parent.link=index.html <p>ëª¨ë“ ë©”ë‰´ ìœ í˜•ì— ëŒ€í•˜ì—¬, Android는 표준 XML 형ì‹ìœ¼ë¡œ 메뉴 í•ëª©ì„ ì •ì˜í•©ë‹ˆë‹¤. 액티비티 코드ì—서 메뉴를 구축하는 ëŒ€ì‹ -XML <a href="{@docRoot}guide/topics/resources/menu-resource.html">메뉴 리소스</a>ì—서 메뉴와 ëª¨ë“ í•ëª©ì„ ì •ì˜í•´ì•¼ 합니다. 그러면 +XML <a href="{@docRoot}guide/topics/resources/menu-resource.html">메뉴 리소스</a>ì—서 메뉴와 ëª¨ë“ í•ëª©ì„ ì •ì˜í•´ì•¼ 합니다. 그러면 액티비티나 프래그먼트ì—서 메뉴 리소스를 팽창시킬 수 있습니다({@link android.view.Menu} 개체로 로딩하면 ë©ë‹ˆë‹¤). </p> @@ -128,17 +128,17 @@ XML <a href="{@docRoot}guide/topics/resources/menu-resource.html">메뉴 리소ì ë””ë ‰í„°ë¦¬ì—서 XML 파ì¼ì„ ìƒì„±í•˜ê³ ë‹¤ìŒ ìš”ì†Œë¡œ 메뉴를 구축합니다.</p> <dl> <dt><code><menu></code></dt> - <dd>메뉴 í•ëª©ì˜ ì»¨í…Œì´ë„ˆì¸ {@link android.view.Menu}를 ì •ì˜í•©ë‹ˆë‹¤. + <dd>메뉴 í•ëª©ì˜ ì»¨í…Œì´ë„ˆì¸ {@link android.view.Menu}를 ì •ì˜í•©ë‹ˆë‹¤. <code><menu></code> 요소는 파ì¼ì˜ 루트 노드여야 í•˜ê³ í•˜ë‚˜ ì´ìƒì˜ <code><item></code>와 <code><group></code> 요소를 ë³´ìœ í• ìˆ˜ 있습니다.</dd> <dt><code><item></code></dt> - <dd>메뉴 ì•ˆì˜ í•목 하나를 나타내는 {@link android.view.MenuItem}ì„ ìƒì„±í•©ë‹ˆë‹¤. + <dd>메뉴 ì•ˆì˜ í•목 하나를 나타내는 {@link android.view.MenuItem}ì„ ìƒì„±í•©ë‹ˆë‹¤. ì´ ìš”ì†Œ 안ì—는 하위 메뉴를 ìƒì„±í•˜ê¸° 위한 중첩 <code><menu></code> 요소가 ë“¤ì–´ìžˆì„ ìˆ˜ 있습니다.</dd> - + <dt><code><group></code></dt> <dd>{@code <item>} 요소를 위한 ì„ íƒì ì¸ íˆ¬ëª… 컨테ì´ë„ˆìž…니다. ì´ê²ƒì„ 사용하면 활성 ìƒíƒœì™€ 가시성 ë“±ì˜ ì†ì„±ì„ ê³µìœ í• ìˆ˜ 있ë„ë¡ -메뉴 í•ëª©ì„ ë¶„ë¥˜í•˜ë„ë¡ í•´ì¤ë‹ˆë‹¤. +메뉴 í•ëª©ì„ ë¶„ë¥˜í•˜ë„ë¡ í•´ì¤ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ë¥¼ ë³´ë ¤ë©´ <a href="#groups">메뉴 그룹 만들기</a>를 참조하ì‹ì‹œì˜¤.</dd> </dl> @@ -207,7 +207,7 @@ MenuInflater.inflate()}를 사용하여 메뉴 리소스를 팽창해야 합니ë <div class="figure" style="width:200px;margin:0"> <img src="{@docRoot}images/options_menu.png" height="333" alt="" /> - <p class="img-caption"><strong>그림 1.</strong> Android 2.3ì—서 실행ë˜ëŠ” + <p class="img-caption"><strong>그림 1.</strong> Android 2.3ì—서 실행ë˜ëŠ” 브ë¼ìš°ì €ì˜ 옵션 메뉴입니다.</p> </div> @@ -220,21 +220,21 @@ MenuInflater.inflate()}를 사용하여 메뉴 리소스를 팽창해야 합니ë <ul> <li><strong>Android 2.3.x(API ë ˆë²¨ 10) ì´í•˜</strong>ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê°œë°œí–ˆì„ ê²½ìš°, -그림 1ê³¼ ê°™ì´ ì‚¬ìš©ìžê°€ <em>메뉴</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 화면 ì•„ëž˜ì— ì˜µì…˜ ë©”ë‰´ì˜ ì½˜í…ì¸ ê°€ 나타납니다. ì´ê²ƒì´ ì—´ë ¸ì„ ë•Œ 가장 ë¨¼ì € ë³´ì´ëŠ” ë¶€ë¶„ì€ +그림 1ê³¼ ê°™ì´ ì‚¬ìš©ìžê°€ <em>메뉴</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ 화면 ì•„ëž˜ì— ì˜µì…˜ ë©”ë‰´ì˜ ì½˜í…ì¸ ê°€ 나타납니다. ì´ê²ƒì´ ì—´ë ¸ì„ ë•Œ 가장 ë¨¼ì € ë³´ì´ëŠ” ë¶€ë¶„ì€ ì•„ì´ì½˜ -메뉴ì´ê³ , ì´ëŠ” 최대 여섯 ê°œì˜ ë©”ë‰´ í•ëª©ì„ ë³´ìœ í•©ë‹ˆë‹¤. ë©”ë‰´ì— ì—¬ì„¯ 개를 넘는 í•ëª©ì´ í¬í•¨ë˜ì–´ 있는 경우, Android는 -여섯 번째 í•목과 나머지 í•ëª©ì„ ë”보기 ë©”ë‰´ì— ë°°ì¹˜í•©ë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ +메뉴ì´ê³ , ì´ëŠ” 최대 여섯 ê°œì˜ ë©”ë‰´ í•ëª©ì„ ë³´ìœ í•©ë‹ˆë‹¤. ë©”ë‰´ì— ì—¬ì„¯ 개를 넘는 í•ëª©ì´ í¬í•¨ë˜ì–´ 있는 경우, Android는 +여섯 번째 í•목과 나머지 í•ëª©ì„ ë”보기 ë©”ë‰´ì— ë°°ì¹˜í•©ë‹ˆë‹¤. ì´ê²ƒì€ 사용ìžê°€ <em>ë”보기</em>를 ì„ íƒí•˜ë©´ ì—´ 수 있습니다.</li> <li><strong>Android 3.0(API ë ˆë²¨ 11) ì´ìƒ</strong>ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê°œë°œí–ˆì„ ê²½ìš°, 옵션 ë©”ë‰´ì˜ í•ëª©ì€ <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>ì—서 ì´ìš©í• 수 있습니다. 기본ì 으로 ì‹œìŠ¤í…œì€ ëª¨ë“ í•ëª©ì„ ìž‘ì—… ë”ë³´ê¸°ì— ë°°ì¹˜í•©ë‹ˆë‹¤. 사용ìžëŠ” 작업 ëª¨ìŒ ì˜¤ë¥¸ìª½ì— ìžˆëŠ” -작업 ë”보기 ì•„ì´ì½˜ìœ¼ë¡œ ì´ë¥¼ í‘œì‹œí• ìˆ˜ 있습니다(ë˜ëŠ” ì´ìš©í• 수 ìžˆì„ ê²½ìš° 기기 <em>메뉴</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ë©ë‹ˆë‹¤). +작업 ë”보기 ì•„ì´ì½˜ìœ¼ë¡œ ì´ë¥¼ í‘œì‹œí• ìˆ˜ 있습니다(ë˜ëŠ” ì´ìš©í• 수 ìžˆì„ ê²½ìš° 기기 <em>메뉴</em> ë²„íŠ¼ì„ ëˆ„ë¥´ë©´ ë©ë‹ˆë‹¤). 중요한 ìž‘ì—…ì— ëŒ€í•œ ë¹ ë¥¸ 액세스를 í™œì„±í™”í•˜ë ¤ë©´ {@code android:showAsAction="ifRoom"}ì„ í•´ë‹¹ {@code <item>} ìš”ì†Œì— ì¶”ê°€í•˜ì—¬ 몇 가지 í•ëª©ì´ ìž‘ì—… 모ìŒì— 표시ë˜ë„ë¡ ìˆ˜ì¤€ì„ ì˜¬ë¦½ë‹ˆë‹¤(그림 2 참조). <p>작업 í•목과 다른 작업 ëª¨ìŒ ë™ìž‘ì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a> ê°€ì´ë“œë¥¼ 참조하ì‹ì‹œì˜¤. </p> -<p class="note"><strong>ì°¸ê³ :</strong> Andoid 3.0 ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하지 <em>않ë”ë¼ë„</em> +<p class="note"><strong>ì°¸ê³ :</strong> Andoid 3.0 ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하지 <em>않ë”ë¼ë„</em> ê°œë°œìž ë‚˜ë¦„ì˜ ìž‘ì—… ëª¨ìŒ ë ˆì´ì•„ì›ƒì„ êµ¬ì¶•í•˜ì—¬ 비슷한 효과를 낼 수 있습니다. 예를 들어, 작업 모ìŒì´ í¬í•¨ëœ Android ì´ì „ ë²„ì „ì„ ì§€ì›í•˜ëŠ” ë°©ë²•ì€ <a href="{@docRoot}resources/samples/ActionBarCompat/index.html">작업 ëª¨ìŒ í˜¸í™˜ì„±</a> ìƒ˜í”Œì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> @@ -247,13 +247,13 @@ MenuInflater.inflate()}를 사용하여 메뉴 리소스를 팽창해야 합니ë <p>{@link android.app.Activity} 하위 í´ëž˜ìŠ¤ë‚˜ {@link android.app.Fragment} 하위 í´ëž˜ìФì—서 옵션 메뉴용 í•ëª©ì„ ì„ ì–¸í• ìˆ˜ 있습니다. 액티비티와 프래그먼트가 ëª¨ë‘ -옵션 메뉴용 í•ëª©ì„ ì„ ì–¸í• ê²½ìš°, ì´ë“¤ì€ UIì—서 ì¡°í•©ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì˜ í•ëª©ì´ ë¨¼ì € ë‚˜íƒ€ë‚˜ê³ , -ë’¤ì´ì–´ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ í•ëª©ì´ ë‚˜íƒ€ë‚˜ë©° ì´ë•Œ 순서는 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€ëœ ìˆœì„œë¥¼ +옵션 메뉴용 í•ëª©ì„ ì„ ì–¸í• ê²½ìš°, ì´ë“¤ì€ UIì—서 ì¡°í•©ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì˜ í•ëª©ì´ ë¨¼ì € ë‚˜íƒ€ë‚˜ê³ , +ë’¤ì´ì–´ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ í•ëª©ì´ ë‚˜íƒ€ë‚˜ë©° ì´ë•Œ 순서는 ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€ëœ ìˆœì„œë¥¼ 따릅니다. 필요한 경우 ì´ë™í•´ì•¼ 하는 ê° {@code <item>}ì—서{@code android:orderInCategory} ì†ì„±ì´ í¬í•¨ëœ 메뉴 í•ëª©ì„ ë‹¤ì‹œ ì •ë ¬í• ìˆ˜ 있습니다.</p> <p>ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 옵션 메뉴를 ì§€ì •í•˜ë ¤ë©´ {@link -android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}를 ìž¬ì •ì˜í•©ë‹ˆë‹¤(프래그먼트는 +android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}를 ìž¬ì •ì˜í•©ë‹ˆë‹¤(프래그먼트는 ìžì‹ ë§Œì˜ {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()} ì½œë°±ì„ ì œê³µí•©ë‹ˆë‹¤). ì´ ë©”ì„œë“œì—서 (<a href="#xml">XMLì—서 ì •ì˜ëœ</a>) 메뉴 리소스를 콜백ì—서 ì œê³µëœ {@link android.view.Menu}로 íŒ½ì°½í• ìˆ˜ 있습니다. 예:</p> @@ -283,7 +283,7 @@ android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}를 <p>사용ìžê°€ 옵션 메뉴ì—서 í•ëª©ì„ ì„ íƒí•˜ë©´(작업 모ìŒì˜ 작업 í•목 í¬í•¨), ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì˜ {@link android.app.Activity#onOptionsItemSelected(MenuItem) -onOptionsItemSelected()} 메서드를 호출합니다. ì´ ë©”ì„œë“œê°€ ì„ íƒí•œ {@link android.view.MenuItem}ì„ ì „ë‹¬í•©ë‹ˆë‹¤. í•ëª©ì„ ì‹ë³„í•˜ë ¤ë©´ +onOptionsItemSelected()} 메서드를 호출합니다. ì´ ë©”ì„œë“œê°€ ì„ íƒí•œ {@link android.view.MenuItem}ì„ ì „ë‹¬í•©ë‹ˆë‹¤. í•ëª©ì„ ì‹ë³„í•˜ë ¤ë©´ {@link android.view.MenuItem#getItemId()}ì„ í˜¸ì¶œí•˜ë©´ ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ”(메뉴 ë¦¬ì†ŒìŠ¤ì˜ {@code android:id} ì†ì„±ìœ¼ë¡œ ì§€ì •ë˜ê±°ë‚˜ {@link android.view.Menu#add(int,int,int,int) add()} ë©”ì„œë“œì— ì œê³µëœ ì •ìˆ˜ê°€ í¬í•¨ëœ) 메뉴 í•ëª©ì— ëŒ€í•œ ê³ ìœ ID를 반환합니다 . ì´ ID와 @@ -317,7 +317,7 @@ android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}를 {@code true}를 반환하거나 ëª¨ë“ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ 호출ë 때까지 (ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì¶”ê°€ëœ ìˆœì„œëŒ€ë¡œ) ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ 해당 메서드를 호출합니다.</p> <p class="note"><strong>íŒ:</strong> Android 3.0ì—는 -{@code android:onClick} ì†ì„±ì„ 사용하여 XMLì— ìžˆëŠ” 메뉴 í•ëª©ì— ëŒ€í•œ 온-í´ë¦ ë™ìž‘ì„ ì •ì˜í•˜ëŠ” ê¸°ëŠ¥ì´ ì¶”ê°€ë©ë‹ˆë‹¤. +{@code android:onClick} ì†ì„±ì„ 사용하여 XMLì— ìžˆëŠ” 메뉴 í•ëª©ì— ëŒ€í•œ 온-í´ë¦ ë™ìž‘ì„ ì •ì˜í•˜ëŠ” ê¸°ëŠ¥ì´ ì¶”ê°€ë©ë‹ˆë‹¤. ì†ì„± ê°’ì€ ë©”ë‰´ë¥¼ 사용하여 액티비티가 ì •ì˜í•œ ë©”ì„œë“œì˜ ì´ë¦„ì´ì–´ì•¼ 합니다. 메서드는 공개여야 하며 í•˜ë‚˜ì˜ {@link android.view.MenuItem} 매개변수를 수ë½í•´ì•¼ 합니다. ì‹œìŠ¤í…œì´ ì´ ë©”ì„œë“œë¥¼ 호출하면 메서드가 ì„ íƒí•œ 메뉴 í•ëª©ì„ ì „ë‹¬í•©ë‹ˆë‹¤. ìžì„¸í•œ ì •ë³´ì™€ 예시는 <a href="{@docRoot}guide/topics/resources/menu-resource.html">메뉴 리소스</a> 문서를 참조하ì‹ì‹œì˜¤.</p> @@ -326,14 +326,14 @@ android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}를 {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}와 {@link android.app.Activity#onOptionsItemSelected(MenuItem) -onOptionsItemSelected()} 메서드를 ì œì™¸í•˜ê³ ì•„ë¬´ê²ƒë„ êµ¬í˜„í•˜ì§€ 않는 액티비티를 만드는 ê²ƒì„ ê³ ë ¤í•´ë³´ì‹ì‹œì˜¤. 그런 ë‹¤ìŒ ì´ í´ëž˜ìŠ¤ë¥¼ ê°™ì€ ì˜µì…˜ 메뉴를 ê³µìœ í•´ì•¼ 하는 ê° ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ +onOptionsItemSelected()} 메서드를 ì œì™¸í•˜ê³ ì•„ë¬´ê²ƒë„ êµ¬í˜„í•˜ì§€ 않는 액티비티를 만드는 ê²ƒì„ ê³ ë ¤í•´ë³´ì‹ì‹œì˜¤. 그런 ë‹¤ìŒ ì´ í´ëž˜ìŠ¤ë¥¼ ê°™ì€ ì˜µì…˜ 메뉴를 ê³µìœ í•´ì•¼ 하는 ê° ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ 확장하면 ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 메뉴 ìž‘ì—…ì„ ì²˜ë¦¬í•˜ëŠ” 코드 세트 하나를 ê´€ë¦¬í• ìˆ˜ ìžˆê³ , ê° í•˜ìœ„ í´ëž˜ìŠ¤ê°€ 메뉴 ë™ìž‘ì„ ìƒì†í•©ë‹ˆë‹¤. ì´ëŸ° 하위 액티비티 중 í•˜ë‚˜ì— ë©”ë‰´ í•ëª©ì„ ì¶”ê°€í•˜ë ¤ë©´, 해당 액티비티ì—서 {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}를 ìž¬ì •ì˜í•˜ì‹ì‹œì˜¤. {@code super.onCreateOptionsMenu(menu)}를 호출하여 ì›ëž˜ 메뉴 í•ëª©ì„ ìƒì„±í•˜ê³ , {@link -android.view.Menu#add(int,int,int,int) menu.add()}ì´ í¬í•¨ëœ 새로운 메뉴 í•ëª©ì„ ì¶”ê°€í•©ë‹ˆë‹¤. ê°ê°ì˜ 메뉴 í•ëª©ì— ëŒ€í•œ 슈í¼í´ëž˜ìŠ¤ì˜ ë™ìž‘ì„ +android.view.Menu#add(int,int,int,int) menu.add()}ì´ í¬í•¨ëœ 새로운 메뉴 í•ëª©ì„ ì¶”ê°€í•©ë‹ˆë‹¤. ê°ê°ì˜ 메뉴 í•ëª©ì— ëŒ€í•œ 슈í¼í´ëž˜ìŠ¤ì˜ ë™ìž‘ì„ ìž¬ì •ì˜í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> @@ -363,10 +363,10 @@ onPrepareOptionsMenu()}를 호출합니다.</p> {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()}를 호출하여 ì‹œìŠ¤í…œì´ {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}를 호출하ë„ë¡ ìš”ì²í•´ì•¼ 합니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> -현재 ì´ˆì ì´ ë§žì¶°ì ¸ 있는 {@link android.view.View}를 기반으로 한 -옵션 ë©”ë‰´ì˜ í•ëª©ì„ ì ˆëŒ€ë¡œ 변경해서는 안 ë©ë‹ˆë‹¤. 터치 모드ì—서는(사용ìžê°€ 트랙볼ì´ë‚˜ d-패드를 사용하지 않는 경우), -보기가 ì´ˆì ì„ ì·¨í• ìˆ˜ 없으므로 옵션 ë©”ë‰´ì— ìžˆëŠ” í•ëª©ì„ ìˆ˜ì •í• +<p class="note"><strong>ì°¸ê³ :</strong> +현재 ì´ˆì ì´ ë§žì¶°ì ¸ 있는 {@link android.view.View}를 기반으로 한 +옵션 ë©”ë‰´ì˜ í•ëª©ì„ ì ˆëŒ€ë¡œ 변경해서는 안 ë©ë‹ˆë‹¤. 터치 모드ì—서는(사용ìžê°€ 트랙볼ì´ë‚˜ d-패드를 사용하지 않는 경우), +보기가 ì´ˆì ì„ ì·¨í• ìˆ˜ 없으므로 옵션 ë©”ë‰´ì— ìžˆëŠ” í•ëª©ì„ ìˆ˜ì •í• ê·¼ê±°ë¡œ ì´ˆì ì„ ì‚¬ìš©í•´ì„œëŠ” ê²°ì½” 안 ë©ë‹ˆë‹¤. {@link android.view.View}ì˜ ì»¨í…ìŠ¤íŠ¸ì— ë¯¼ê°í•œ 메뉴를 ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우, <a href="#context-menu">컨í…스트 메뉴</a>를 사용하ì‹ì‹œì˜¤.</p> @@ -390,18 +390,18 @@ android.widget.ListView}나 {@link android.widget.GridView}, 사용ìžê°€ ê° í• <ul> <li><a href="#FloatingContextMenu">ë¶€ë™ ì»¨í…스트 메뉴</a>를 사용합니다. 사용ìžê°€ 컨í…스트 ë©”ë‰´ì— ëŒ€í•œ ì§€ì›ì„ ì„ ì–¸í•˜ëŠ” 보기를 길게 í´ë¦í•˜ë©´ (대화와 ìœ ì‚¬í•œ) 메뉴 í•ëª©ì˜ ë¶€ë™ ëª©ë¡ì´ -나타납니다. 사용ìžëŠ” 한 í•목ì—서 한 ë²ˆì— í•˜ë‚˜ì˜ ìƒí™©ë³„ +나타납니다. 사용ìžëŠ” 한 í•목ì—서 한 ë²ˆì— í•˜ë‚˜ì˜ ìƒí™©ë³„ ìž‘ì—…ì„ ìˆ˜í–‰í• ìˆ˜ 있습니다.</li> <li><a href="#CAB">ìƒí™©ë³„ 작업 모드</a>를 사용합니다. ì´ ëª¨ë“œëŠ” 화면 ìœ„ì— ìžˆëŠ” 막대ì—서 ì„ íƒëœ í•ëª©ì— ì˜í–¥ì„ 미치는 작업 í•ëª©ì´ í¬í•¨ëœ <em>ìƒí™©ë³„ 작업 막대</em>를 표시하는 {@link android.view.ActionMode}ì˜ ì‹œìŠ¤í…œ 구현입니다. - ì´ ëª¨ë“œê°€ 활성 ìƒíƒœì´ë©´ 사용ìžëŠ” + ì´ ëª¨ë“œê°€ 활성 ìƒíƒœì´ë©´ 사용ìžëŠ” 여러 ê°œì˜ í•목ì—서 한 ìž‘ì—…ì„ í•œêº¼ë²ˆì— ìˆ˜í–‰í• ìˆ˜ 있습니다(ì•±ì´ ì´ë¥¼ 허용하는 경우).</li> </ul> <p class="note"><strong>ì°¸ê³ :</strong> ìƒí™©ë³„ 작업 모드는 Android 3.0(API ë ˆë²¨ 11) ì´ìƒì—서 ì´ìš©í• 수 있으며, ì´ìš© ê°€ëŠ¥í• ë•Œ 컨í…스트 작업 표시용으로 기본 ì„¤ì •ëœ ê¸°ìˆ ìž…ë‹ˆë‹¤. - ì•±ì´ 3.0 ì´í•˜ì˜ ë²„ì „ì„ ì§€ì›í• 경우 해당 기기ì—서는 + ì•±ì´ 3.0 ì´í•˜ì˜ ë²„ì „ì„ ì§€ì›í• 경우 해당 기기ì—서는 ë¶€ë™ ì»¨í…스트 메뉴로 ëŒì•„가야 합니다.</p> @@ -409,8 +409,8 @@ android.widget.ListView}나 {@link android.widget.GridView}, 사용ìžê°€ ê° í• <p>ë¶€ë™ ì»¨í…스트 메뉴를 ì œê³µí•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> <ol> - <li>컨í…스트 메뉴가 ì—°ê´€ë˜ì–´ì•¼ 하는 {@link android.view.View}를 등ë¡í•©ë‹ˆë‹¤. ê·¸ëŸ¬ë ¤ë©´ -{@link android.app.Activity#registerForContextMenu(View) registerForContextMenu()}를 í˜¸ì¶œí•˜ê³ ì—¬ê¸°ì— + <li>컨í…스트 메뉴가 ì—°ê´€ë˜ì–´ì•¼ 하는 {@link android.view.View}를 등ë¡í•©ë‹ˆë‹¤. ê·¸ëŸ¬ë ¤ë©´ +{@link android.app.Activity#registerForContextMenu(View) registerForContextMenu()}를 í˜¸ì¶œí•˜ê³ ì—¬ê¸°ì— {@link android.view.View}를 ì „ë‹¬í•˜ë©´ ë©ë‹ˆë‹¤. <p>액티비티가 {@link android.widget.ListView} ë˜ëŠ” {@link android.widget.GridView}를 ì‚¬ìš©í•˜ê³ ê° í•ëª©ì´ ê°™ì€ ì»¨í…스트 메뉴를 ì œê³µí•˜ê²Œ í•˜ê³ ì‹¶ì„ ê²½ìš°, @@ -419,7 +419,7 @@ android.app.Activity#registerForContextMenu(View) registerForContextMenu()}ì— ì </li> <li>{@link android.app.Activity}나 {@link android.app.Fragment}ì—서 {@link -android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} 메서드를 +android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} 메서드를 구현합니다. <p>등ë¡ëœ 보기가 롱-í´ë¦ ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í•˜ë©´, ì‹œìŠ¤í…œì´ {@link android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} @@ -437,9 +437,9 @@ public void onCreateContextMenu(ContextMenu menu, View v, <p>{@link android.view.MenuInflater}를 사용하면 <a href="{@docRoot}guide/topics/resources/menu-resource.html">메뉴 리소스</a>ì—서 컨í…스트 메뉴를 팽창하게 í•´ì¤ë‹ˆë‹¤. 콜백 메서드 매개변수ì—는 사용ìžê°€ ì„ íƒí•œ {@link android.view.View}와 -ì„ íƒí•œ í•ëª©ì— ëŒ€í•œ 추가 ì •ë³´ë¥¼ ì œê³µí•˜ëŠ” {@link android.view.ContextMenu.ContextMenuInfo} ê°ì²´ê°€ -í¬í•¨ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì— ì—¬ëŸ¬ ê°œì˜ ë³´ê¸°ê°€ ìžˆê³ ì´ë“¤ì´ ê°ê° 서로 다른 컨í…스트 메뉴를 ì œê³µí•˜ëŠ” 경우, -ì´ì™€ ê°™ì€ ë§¤ê°œë³€ìˆ˜ë¥¼ 사용하여 íŒ½ì°½í• ì»¨í…스트 메뉴가 무엇ì¸ì§€ +ì„ íƒí•œ í•ëª©ì— ëŒ€í•œ 추가 ì •ë³´ë¥¼ ì œê³µí•˜ëŠ” {@link android.view.ContextMenu.ContextMenuInfo} ê°ì²´ê°€ +í¬í•¨ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì— ì—¬ëŸ¬ ê°œì˜ ë³´ê¸°ê°€ ìžˆê³ ì´ë“¤ì´ ê°ê° 서로 다른 컨í…스트 메뉴를 ì œê³µí•˜ëŠ” 경우, +ì´ì™€ ê°™ì€ ë§¤ê°œë³€ìˆ˜ë¥¼ 사용하여 íŒ½ì°½í• ì»¨í…스트 메뉴가 무엇ì¸ì§€ íŒë³„í• ìˆ˜ 있습니다.</p> </li> @@ -470,8 +470,8 @@ public boolean onContextItemSelected(MenuItem item) { XMLì—서 메뉴 ì •ì˜</a> ì„¹ì…˜ì— ë‚˜íƒ€ë‚œ 바와 ê°™ì´ {@code android:id} ì†ì„±ì„ 사용하여 XMLì˜ ê° ë©”ë‰´ í•ëª©ì— ì´ë¥¼ í• ë‹¹í•´ì•¼ 합니다.</p> -<p>메뉴 í•ëª©ì„ ì„±ê³µì 으로 처리하면 {@code true}를 반환합니다. 메뉴 í•ëª©ì„ ì²˜ë¦¬í•˜ì§€ 않는 경우, -해당 메뉴 í•ëª©ì„ ìŠˆí¼í´ëž˜ìФ êµ¬í˜„ì— ì „ë‹¬í•´ì•¼ 합니다. ì•¡í‹°ë¹„í‹°ì— í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ í¬í•¨ë˜ì–´ 있는 경우 +<p>메뉴 í•ëª©ì„ ì„±ê³µì 으로 처리하면 {@code true}를 반환합니다. 메뉴 í•ëª©ì„ ì²˜ë¦¬í•˜ì§€ 않는 경우, +해당 메뉴 í•ëª©ì„ ìŠˆí¼í´ëž˜ìФ êµ¬í˜„ì— ì „ë‹¬í•´ì•¼ 합니다. ì•¡í‹°ë¹„í‹°ì— í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ í¬í•¨ë˜ì–´ 있는 경우 해당 액티비티가 첫 번째로 ì´ ì½œë°±ì„ ìˆ˜ì‹ í•©ë‹ˆë‹¤. 처리ë˜ì§€ ì•Šì„ ë•Œ 슈í¼í´ëž˜ìŠ¤ë¥¼ 호출하면 ì‹œìŠ¤í…œì´ ì´ë²¤íŠ¸ë¥¼ ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ ê° ì½œë°± ë©”ì„œë“œì— ì „ë‹¬í•©ë‹ˆë‹¤. {@code true} ë˜ëŠ” {@code false}ê°€ 반환ë 때까지 (ê° í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì¶”ê°€ëœ ìˆœì„œëŒ€ë¡œ) 한 ë²ˆì— í•˜ë‚˜ì”© ì „ë‹¬ë©ë‹ˆë‹¤ ( @@ -484,7 +484,7 @@ false}를 반환하므로 처리ë˜ì§€ ì•Šì„ ë•ŒëŠ” ì–¸ì œë‚˜ ìŠˆí¼ í´ëž˜ìФë <h3 id="CAB">ìƒí™©ë³„ ë™ìž‘ 모드 사용</h3> <p>ìƒí™©ë³„ 작업 모드는 ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ì»¨í…스트 작업 ìˆ˜í–‰ì— ì§‘ì¤‘ì‹œí‚¤ëŠ” {@link android.view.ActionMode}ì˜ -시스템 구현입니다. 사용ìžê°€ í•ëª©ì„ ì„ íƒí•˜ì—¬ +시스템 구현입니다. 사용ìžê°€ í•ëª©ì„ ì„ íƒí•˜ì—¬ ì´ ëª¨ë“œë¥¼ 활성화하면, <em>ìƒí™©ë³„ 작업 모ìŒ</em>ì´ í™”ë©´ ìœ„ì— ë‚˜íƒ€ë‚˜ì„œ 사용ìžê°€ 현재 ì„ íƒëœ í•목ì—서 ìˆ˜í–‰í• ìˆ˜ 있는 ìž‘ì—…ì„ í‘œì‹œí•©ë‹ˆë‹¤. ì´ ëª¨ë“œê°€ 활성화ë˜ë©´ 사용ìžëŠ” 여러 í•ëª©ì„ ì„ íƒí•˜ê³ (개발ìžê°€ ì´ë¥¼ 허용하는 경우), í•ëª©ì„ ì„ íƒ í•´ì œí•˜ê³ , 액티비티 ë‚´ì—서 @@ -492,15 +492,15 @@ false}를 반환하므로 처리ë˜ì§€ ì•Šì„ ë•ŒëŠ” ì–¸ì œë‚˜ ìŠˆí¼ í´ëž˜ìФë 작업 ëª¨ìŒ ì™¼ìª½ì˜ <em>완료</em> ìž‘ì—…ì„ ëˆ„ë¥´ë©´ 작업 모드가 비활성화ë˜ê³ ìƒí™©ë³„ 작업 모ìŒì´ 사ë¼ì§‘니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ìƒí™©ë³„ 작업 모ìŒì´ -반드시 <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>ê³¼ ì—°ê´€ë˜ì–´ 있는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ì´ë“¤ì€ 서로 -ë…립ì 으로 ìž‘ë™í•©ë‹ˆë‹¤. ì´ëŠ” 겉으로 보기ì—는 ìƒí™©ë³„ 작업 모ìŒì´ 작업 모ìŒì˜ 위치를 능가하는 것으로 +<p class="note"><strong>ì°¸ê³ :</strong> ìƒí™©ë³„ 작업 모ìŒì´ +반드시 <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>ê³¼ ì—°ê´€ë˜ì–´ 있는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ì´ë“¤ì€ 서로 +ë…립ì 으로 ìž‘ë™í•©ë‹ˆë‹¤. ì´ëŠ” 겉으로 보기ì—는 ìƒí™©ë³„ 작업 모ìŒì´ 작업 모ìŒì˜ 위치를 능가하는 것으로 ë³´ì´ë”ë¼ë„ ì ìš©ë©ë‹ˆë‹¤.</p> -<p>Android 3.0 (API level 11) ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하는 경우, +<p>Android 3.0 (API level 11) ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하는 경우, ì¼ë°˜ì 으로 ìƒí™©ë³„ 작업 모드를 사용하여 <a href="#FloatingContextMenu">ë¶€ë™ ì»¨í…스트 메뉴</a>ê°€ 아닌 ìƒí™©ë³„ ìž‘ì—…ì„ í‘œì‹œí•©ë‹ˆë‹¤.</p> -<p>ìƒí™©ë³„ ìž‘ì—…ì„ ì œê³µí•˜ëŠ” ë³´ê¸°ì˜ ê²½ìš°, ì¼ë°˜ì 으로 ë‘ ì´ë²¤íЏ 중 하나(ë˜ëŠ” ë‘ ê°€ì§€ 모ë‘)ì—서 ìƒí™©ë³„ 작업 모드를 +<p>ìƒí™©ë³„ ìž‘ì—…ì„ ì œê³µí•˜ëŠ” ë³´ê¸°ì˜ ê²½ìš°, ì¼ë°˜ì 으로 ë‘ ì´ë²¤íЏ 중 하나(ë˜ëŠ” ë‘ ê°€ì§€ 모ë‘)ì—서 ìƒí™©ë³„ 작업 모드를 호출해야 합니다.</p> <ul> <li>사용ìžê°€ 보기ì—서 롱-í´ë¦ì„ 수행합니다.</li> @@ -521,11 +521,11 @@ android.widget.ListView} ë˜ëŠ” {@link android.widget.GridView}ì—서 í•목 ê·¸ <h4 id="CABforViews">ê°ê°ì˜ ë³´ê¸°ì— ëŒ€í•œ ìƒí™©ë³„ 작업 ëª¨ë“œì˜ í™œì„±í™”</h4> -<p>사용ìžê°€ íŠ¹ì • 보기를 ì„ íƒí–ˆì„ 때만 ìƒí™©ë³„ 작업 모드를 í˜¸ì¶œí•˜ê³ ìž í•˜ëŠ” 경우 +<p>사용ìžê°€ íŠ¹ì • 보기를 ì„ íƒí–ˆì„ 때만 ìƒí™©ë³„ 작업 모드를 í˜¸ì¶œí•˜ê³ ìž í•˜ëŠ” 경우 다ìŒê³¼ ê°™ì´ í•´ì•¼ 합니다.</p> <ol> - <li>{@link android.view.ActionMode.Callback} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현합니다. 콜백 메서드ì—서 -ìƒí™©ë³„ 작업 모ìŒì˜ ìž‘ì—…ì„ ì§€ì •í•˜ê³ , 작업 í•ëª©ì— ëŒ€í•œ í´ë¦ ì´ë²¤íŠ¸ì— ì‘ë‹µí•˜ê³ , 작업 ëª¨ë“œì— ëŒ€í•œ + <li>{@link android.view.ActionMode.Callback} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현합니다. 콜백 메서드ì—서 +ìƒí™©ë³„ 작업 모ìŒì˜ ìž‘ì—…ì„ ì§€ì •í•˜ê³ , 작업 í•ëª©ì— ëŒ€í•œ í´ë¦ ì´ë²¤íŠ¸ì— ì‘ë‹µí•˜ê³ , 작업 ëª¨ë“œì— ëŒ€í•œ 다른 수명 주기 ì´ë²¤íŠ¸ë¥¼ 처리합니다.</li> <li>모ìŒì„ í‘œì‹œí•˜ê³ ìž í•˜ëŠ” 경우{@link android.app.Activity#startActionMode startActionMode()}를 호출합니다 (사용ìžê°€ 보기를 롱-í´ë¦í•˜ëŠ” 경우).</li> @@ -579,11 +579,11 @@ private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { android.view.ActionMode} ê°ì²´ë¥¼ ì „ë‹¬í•©ë‹ˆë‹¤. {@link android.view.ActionMode} API를 사용하여 {@link android.view.ActionMode#setTitle setTitle()}ê³¼ {@link -android.view.ActionMode#setSubtitle setSubtitle()}ì´ í¬í•¨ëœ ì œëª©ê³¼ 하위 ì œëª©ì„ ìˆ˜ì •í•˜ëŠ” 등과 ê°™ì´ CAB를 다양하게 변경합니다(몇 ê°œì˜ +android.view.ActionMode#setSubtitle setSubtitle()}ì´ í¬í•¨ëœ ì œëª©ê³¼ 하위 ì œëª©ì„ ìˆ˜ì •í•˜ëŠ” 등과 ê°™ì´ CAB를 다양하게 변경합니다(몇 ê°œì˜ í•ëª©ì´ ì„ íƒë˜ì—ˆëŠ”ì§€ 나타낼 때 ìœ ìš©í•©ë‹ˆë‹¤).</p> <p>ë˜í•œ, 위 ìƒ˜í”Œì€ ìž‘ì—… 모드가 소멸ë 때 {@code mActionMode} 변수를 null로 -ì„¤ì •í•œë‹¤ëŠ” ì ë„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ë‹¤ìŒ ë‹¨ê³„ì—서는 액티비티나 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ êµ¬ì„±ì› ë³€ìˆ˜ë¥¼ ì´ˆê¸°í™”í•˜ê³ ì €ìž¥í•˜ëŠ” ë°©ë²•ì„ +ì„¤ì •í•œë‹¤ëŠ” ì ë„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ë‹¤ìŒ ë‹¨ê³„ì—서는 액티비티나 í”„ëž˜ê·¸ë¨¼íŠ¸ì˜ êµ¬ì„±ì› ë³€ìˆ˜ë¥¼ ì´ˆê¸°í™”í•˜ê³ ì €ìž¥í•˜ëŠ” ë°©ë²•ì„ ë³¼ 수 있습니다.</p> </li> @@ -608,10 +608,10 @@ someView.setOnLongClickListener(new View.OnLongClickListener() { </pre> <p>{@link android.app.Activity#startActionMode startActionMode()}를 호출하면 ì‹œìŠ¤í…œì´ -ìƒì„±ëœ {@link android.view.ActionMode}를 반환합니다. ì´ê²ƒì„ êµ¬ì„±ì› ë³€ìˆ˜ì— ì €ìž¥í•˜ë©´ +ìƒì„±ëœ {@link android.view.ActionMode}를 반환합니다. ì´ê²ƒì„ êµ¬ì„±ì› ë³€ìˆ˜ì— ì €ìž¥í•˜ë©´ 다른 ì´ë²¤íŠ¸ì— ëŒ€í•œ ì‘답으로 ìƒí™©ë³„ 작업 모ìŒì„ ë³€ê²½í• ìˆ˜ 있습니다. 위 샘플ì—서 {@link android.view.ActionMode}를 사용하여 {@link android.view.ActionMode} ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ 활성화ë˜ì—ˆì„ 경우 -작업 모드를 시작하기 ì „ì— êµ¬ì„±ì›ì´ nullì¸ì§€ 여부를 ì 검하여 +작업 모드를 시작하기 ì „ì— êµ¬ì„±ì›ì´ nullì¸ì§€ 여부를 ì 검하여 해당 ì¸ìŠ¤í„´ìŠ¤ê°€ 재ìƒì„±ë˜ì§€ 않게 합니다.</p> </li> </ol> @@ -621,13 +621,13 @@ someView.setOnLongClickListener(new View.OnLongClickListener() { <h4 id="CABforListView">ListView ë˜ëŠ” GridViewì—서 ì¼ê´„ ìƒí™©ë³„ 작업 활성화</h4> <p>{@link android.widget.ListView} ë˜ëŠ” {@link -android.widget.GridView}(ë˜ëŠ” {@link android.widget.AbsListView}ì˜ ë˜ ë‹¤ë¥¸ 확장)ì— í•목 ì»¬ë ‰ì…˜ì´ ìžˆê³ +android.widget.GridView}(ë˜ëŠ” {@link android.widget.AbsListView}ì˜ ë˜ ë‹¤ë¥¸ 확장)ì— í•목 ì»¬ë ‰ì…˜ì´ ìžˆê³ ì‚¬ìš©ìžê°€ ì¼ê´„ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë„ë¡ í—ˆìš©í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•´ì•¼ 합니다.</p> <ul> - <li>{@link android.widget.AbsListView.MultiChoiceModeListener} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ ì´ë¥¼ + <li>{@link android.widget.AbsListView.MultiChoiceModeListener} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ ì´ë¥¼ {@link android.widget.AbsListView#setMultiChoiceModeListener -setMultiChoiceModeListener()}ê°€ 있는 보기 ê·¸ë£¹ì— ëŒ€í•´ ì„¤ì •í•©ë‹ˆë‹¤. ìˆ˜ì‹ ê¸° 콜백 메서드ì—서 ìƒí™©ë³„ 작업 모ìŒì— 대한 +setMultiChoiceModeListener()}ê°€ 있는 보기 ê·¸ë£¹ì— ëŒ€í•´ ì„¤ì •í•©ë‹ˆë‹¤. ìˆ˜ì‹ ê¸° 콜백 메서드ì—서 ìƒí™©ë³„ 작업 모ìŒì— 대한 ìž‘ì—…ì„ ì§€ì •í•˜ê³ , 작업 í•ëª©ì— ëŒ€í•œ í´ë¦ ì´ë²¤íŠ¸ì— ëŒ€ì‘í•˜ê³ , {@link android.view.ActionMode.Callback} ì¸í„°íŽ˜ì´ìФì—서 ìƒì†í•œ 다른 ì½œë°±ì„ ì²˜ë¦¬í• ìˆ˜ 있습니다.</li> @@ -690,10 +690,10 @@ android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateAc 메서드를 í˜¸ì¶œí•˜ê³ ì§€ì •ëœ ìž‘ì—…ìœ¼ë¡œ ìƒí™©ë³„ 작업 모ìŒì„ 표시합니다. ìƒí™©ë³„ 작업 모ìŒì´ 표시ë˜ëŠ” ë™ì•ˆ 사용ìžê°€ 추가 í•ëª©ì„ ì„ íƒí• 수 있습니다.</p> -<p>ìƒí™©ë³„ ìž‘ì—…ì´ ê³µí†µ 작업 í•ëª©ì„ ì œê³µí•˜ëŠ” 몇몇 경우, -확ì¸ëž€ì´ë‚˜ 그와 비슷한 UI요소를 추가하여 사용ìžê°€ í•ëª©ì„ ì„ íƒí• 수 있ë„ë¡ í•´ì£¼ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. -사용ìžê°€ 롱-í´ë¦ ë™ìž‘ì„ ë°œê²¬í•˜ì§€ ëª»í• ìˆ˜ë„ ìžˆê¸° 때문입니다. 사용ìžê°€ 확ì¸ëž€ì„ ì„ íƒí•˜ë©´ -{@link android.widget.AbsListView#setItemChecked setItemChecked()}로 +<p>ìƒí™©ë³„ ìž‘ì—…ì´ ê³µí†µ 작업 í•ëª©ì„ ì œê³µí•˜ëŠ” 몇몇 경우, +확ì¸ëž€ì´ë‚˜ 그와 비슷한 UI요소를 추가하여 사용ìžê°€ í•ëª©ì„ ì„ íƒí• 수 있ë„ë¡ í•´ì£¼ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. +사용ìžê°€ 롱-í´ë¦ ë™ìž‘ì„ ë°œê²¬í•˜ì§€ ëª»í• ìˆ˜ë„ ìžˆê¸° 때문입니다. 사용ìžê°€ 확ì¸ëž€ì„ ì„ íƒí•˜ë©´ +{@link android.widget.AbsListView#setItemChecked setItemChecked()}로 확ì¸ëœ ìƒíƒœì— ê° ëª©ë¡ í•ëª©ì„ ì„¤ì •í•˜ì—¬ ìƒí™©ë³„ 작업 모드를 í˜¸ì¶œí• ìˆ˜ 있습니다.</p> @@ -703,19 +703,19 @@ android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateAc <div class="figure" style="width:220px"> <img src="{@docRoot}images/ui/popupmenu.png" alt="" /> -<p><strong>그림 4.</strong> Gmail ì•±ì˜ íŒì—… 메뉴는 오른쪽 ìœ„ì— ìžˆëŠ” ë”보기 +<p><strong>그림 4.</strong> Gmail ì•±ì˜ íŒì—… 메뉴는 오른쪽 ìœ„ì— ìžˆëŠ” ë”보기 ë²„íŠ¼ì— ê³ ì •ë˜ì–´ 있습니다.</p> </div> <p>{@link android.widget.PopupMenu}는 {@link android.view.View}ì— ê³ ì •ëœ ëª¨ë‹¬ 메뉴입니다. ì´ê²ƒì€ 앵커 보기 ì•„ëž˜ì— ê³µê°„ì´ ìžˆìœ¼ë©´ 아래ì—, 없으면 보기 ìœ„ì— ë‚˜íƒ€ë‚©ë‹ˆë‹¤. ì´ê²ƒì€ 다ìŒê³¼ ê°™ì€ ìƒí™©ì— ìœ ìš©í•©ë‹ˆë‹¤.</p> <ul> - <li>íŠ¹ì • 콘í…ì¸ ì™€ <em>ê´€ë ¨ëœ</em> ìž‘ì—…ì— ëŒ€í•œ ë”보기 ìŠ¤íƒ€ì¼ ë©”ë‰´ë¥¼ ì œê³µí•©ë‹ˆë‹¤(예: + <li>íŠ¹ì • 콘í…ì¸ ì™€ <em>ê´€ë ¨ëœ</em> ìž‘ì—…ì— ëŒ€í•œ ë”보기 ìŠ¤íƒ€ì¼ ë©”ë‰´ë¥¼ ì œê³µí•©ë‹ˆë‹¤(예: 그림 4ì˜ Gmail ì´ë©”ì¼ í—¤ë” ë“±). - <p class="note"><strong>ì°¸ê³ :</strong> ì´ê²ƒì€ 컨í…스트 메뉴와는 다릅니다. 컨í…스트 메뉴는 + <p class="note"><strong>ì°¸ê³ :</strong> ì´ê²ƒì€ 컨í…스트 메뉴와는 다릅니다. 컨í…스트 메뉴는 ì¼ë°˜ì 으로 ì„ íƒëœ 콘í…ì¸ ì— <em>ì˜í–¥ì„ 미치는</em> 작업입니다. ì„ íƒëœ 콘í…ì¸ ì— ì˜í–¥ì„ 미치는 ìž‘ì—…ì˜ ê²½ìš°, <a href="#CAB">ìƒí™©ë³„ 작업 모드</a> ë˜ëŠ” <a href="#FloatingContextMenu">ë¶€ë™ ì»¨í…스트 메뉴</a>를 사용하ì‹ì‹œì˜¤.</p></li> - <li>ëª…ë ¹ë¬¸ì˜ ë‘ ë²ˆì§¸ ë¶€ë¶„ì„ ì œê³µí•©ë‹ˆë‹¤(예: "추가"ë¼ê³ í‘œì‹œëœ ë²„íŠ¼ìœ¼ë¡œ, + <li>ëª…ë ¹ë¬¸ì˜ ë‘ ë²ˆì§¸ ë¶€ë¶„ì„ ì œê³µí•©ë‹ˆë‹¤(예: "추가"ë¼ê³ í‘œì‹œëœ ë²„íŠ¼ìœ¼ë¡œ, ê°ê¸° 다른 "추가" ì˜µì…˜ì´ ìžˆëŠ” íŒì—… 메뉴를 ë°œìƒì‹œí‚µë‹ˆë‹¤).</li> <li>ì˜êµ¬ì ì¸ ì„ íƒì´ í¬í•¨ë˜ì§€ ì•Šì€ {@link android.widget.Spinner}와 ìœ ì‚¬í•œ 드ë¡ë‹¤ìš´ì„ ì œê³µí•©ë‹ˆë‹¤. </li> @@ -727,23 +727,23 @@ android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateAc <p><a href="#xml">XML로 메뉴를 ì •ì˜</a>하는 경우, íŒì—… 메뉴를 표시하는 ë°©ë²•ì€ ë‹¤ìŒê³¼ 같습니다.</p> <ol> - <li>ìžì‹ ì˜ ìƒì„±ìžë¡œ {@link android.widget.PopupMenu}를 ì¸ìŠ¤í„´íŠ¸í™”í•©ë‹ˆë‹¤. ìƒì„±ìžëŠ” -현재 ì• í”Œë¦¬ì¼€ì´ì…˜ {@link android.content.Context} ë° {@link android.view.View}를 + <li>ìžì‹ ì˜ ìƒì„±ìžë¡œ {@link android.widget.PopupMenu}를 ì¸ìŠ¤í„´íŠ¸í™”í•©ë‹ˆë‹¤. ìƒì„±ìžëŠ” +현재 ì• í”Œë¦¬ì¼€ì´ì…˜ {@link android.content.Context} ë° {@link android.view.View}를 메뉴를 ê³ ì •ì‹œì¼œì•¼ 하는 ê³³ì— ê°€ì ¸ê°‘ë‹ˆë‹¤.</li> <li>{@link android.view.MenuInflater}를 사용하여{@link android.widget.PopupMenu#getMenu() PopupMenu.getMenu()}ê°€ 반환한 {@link -android.view.Menu} ê°ì²´ì— 메뉴 리소스를 팽창합니다. API ë ˆë²¨ 14 ì´ìƒì—서는 ì´ ëŒ€ì‹ +android.view.Menu} ê°ì²´ì— 메뉴 리소스를 팽창합니다. API ë ˆë²¨ 14 ì´ìƒì—서는 ì´ ëŒ€ì‹ {@link android.widget.PopupMenu#inflate PopupMenu.inflate()}를 ì‚¬ìš©í• ìˆ˜ 있습니다.</li> <li>{@link android.widget.PopupMenu#show() PopupMenu.show()}를 호출합니다.</li> </ol> -<p>예를 들어, 다ìŒì€ íŒì—… 메뉴를 표시하는 {@link android.R.attr#onClick android:onClick} ì†ì„±ì´ +<p>예를 들어, 다ìŒì€ íŒì—… 메뉴를 표시하는 {@link android.R.attr#onClick android:onClick} ì†ì„±ì´ 있는 버튼입니다.</p> <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -763,7 +763,7 @@ public void showPopup(View v) { <p>API ë ˆë²¨ 14 ì´ìƒì˜ 경우, {@link android.widget.PopupMenu#inflate PopupMenu.inflate()}로 메뉴를 팽창하는 ë‘ ê°œì˜ ì¤„ì„ ê²°í•©ì‹œí‚¬ 수 있습니다.</p> -<p>사용ìžê°€ í•ëª©ì„ ì„ íƒí•˜ê±°ë‚˜ 메뉴 ì˜ì— ë°”ê¹¥ìª½ì„ í„°ì¹˜í•˜ë©´ ì´ ë©”ë‰´ëŠ” +<p>사용ìžê°€ í•ëª©ì„ ì„ íƒí•˜ê±°ë‚˜ 메뉴 ì˜ì— ë°”ê¹¥ìª½ì„ í„°ì¹˜í•˜ë©´ ì´ ë©”ë‰´ëŠ” 무시ë©ë‹ˆë‹¤. {@link android.widget.PopupMenu.OnDismissListener}를 사용하여 무시 ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ ëŒ€ê¸°í• ìˆ˜ 있습니다.</p> @@ -807,7 +807,7 @@ public boolean onMenuItemClick(MenuItem item) { <h2 id="groups">메뉴 그룹 만들기</h2> -<p>메뉴 ê·¸ë£¹ì€ íŠ¹ì •í•œ íŠ¹ì„±ì„ ê³µìœ í•˜ëŠ” 메뉴 í•ëª©ì˜ ì»¬ë ‰ì…˜ìž…ë‹ˆë‹¤. 그룹으로 다ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ +<p>메뉴 ê·¸ë£¹ì€ íŠ¹ì •í•œ íŠ¹ì„±ì„ ê³µìœ í•˜ëŠ” 메뉴 í•ëª©ì˜ ì»¬ë ‰ì…˜ìž…ë‹ˆë‹¤. 그룹으로 다ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ í• ìˆ˜ 있습니다.</p> <ul> <li>{@link android.view.Menu#setGroupVisible(int,boolean) @@ -840,11 +840,11 @@ android.view.Menu#add(int,int,int,int) add()} 메서드로 그룹 ID를 ì§€ì •í• </menu> </pre> -<p>ê·¸ë£¹ì— ìžˆëŠ” í•ëª©ì€ ì²« í•목과 ê°™ì€ ë ˆë²¨ì—서 표시ë©ë‹ˆë‹¤. 메뉴 ì•ˆì— ìžˆëŠ” 세 가지 í•ëª©ì€ ëª¨ë‘ -í˜•ì œìž…ë‹ˆë‹¤. 그러나 ì´ ê·¸ë£¹ì— ìžˆëŠ” í•목 ë‘ ê°œì˜ íŠ¹ì„±ì„ ê°œë°œìžê°€ ìˆ˜ì •í• ìˆ˜ 있습니다. -그룹 ID를 ì°¸ì¡°í•˜ê³ ìœ„ì— ë‚˜ë ¹ëœ ë©”ì„œë“œë¥¼ 사용하면 ë©ë‹ˆë‹¤. 시스템 ë˜í•œ +<p>ê·¸ë£¹ì— ìžˆëŠ” í•ëª©ì€ ì²« í•목과 ê°™ì€ ë ˆë²¨ì—서 표시ë©ë‹ˆë‹¤. 메뉴 ì•ˆì— ìžˆëŠ” 세 가지 í•ëª©ì€ ëª¨ë‘ +í˜•ì œìž…ë‹ˆë‹¤. 그러나 ì´ ê·¸ë£¹ì— ìžˆëŠ” í•목 ë‘ ê°œì˜ íŠ¹ì„±ì„ ê°œë°œìžê°€ ìˆ˜ì •í• ìˆ˜ 있습니다. +그룹 ID를 ì°¸ì¡°í•˜ê³ ìœ„ì— ë‚˜ë ¹ëœ ë©”ì„œë“œë¥¼ 사용하면 ë©ë‹ˆë‹¤. 시스템 ë˜í•œ ê·¸ë£¹í™”ëœ í•ëª©ì€ ì ˆëŒ€ 분리하지 않습니다. 예를 들어, ê° í•ëª©ì— ëŒ€í•´ {@code -android:showAsAction="ifRoom"}ì„ ì„ ì–¸í•˜ë©´, ë‘ ê°€ì§€ ëª¨ë‘ ìž‘ì—… 모ìŒì— 나타나거나 +android:showAsAction="ifRoom"}ì„ ì„ ì–¸í•˜ë©´, ë‘ ê°€ì§€ ëª¨ë‘ ìž‘ì—… 모ìŒì— 나타나거나 작업 ë”ë³´ê¸°ì— ë‚˜íƒ€ë‚©ë‹ˆë‹¤.</p> @@ -852,23 +852,23 @@ android:showAsAction="ifRoom"}ì„ ì„ ì–¸í•˜ë©´, ë‘ ê°€ì§€ ëª¨ë‘ ìž‘ì—… 모ìŒì <div class="figure" style="width:200px"> <img src="{@docRoot}images/radio_buttons.png" height="333" alt="" /> - <p class="img-caption"><strong>그림 5.</strong> í™•ì¸ ê°€ëŠ¥í•œ + <p class="img-caption"><strong>그림 5.</strong> í™•ì¸ ê°€ëŠ¥í•œ í•ëª©ì´ ìžˆëŠ” 하위 ë©”ë‰´ì˜ ìŠ¤í¬ë¦°ìƒ·ìž…니다.</p> </div> -<p>메뉴는 ì˜µì…˜ì„ ì¼œê³ ë„거나, ë…립ì ì˜µì…˜ì— ëŒ€í•œ 확ì¸ëž€ìœ¼ë¡œ 사용하거나, -ìƒí˜¸ 배타ì ì¸ ì˜µì…˜ì˜ ê·¸ë£¹ì— ëŒ€í•œ ë¬´ì„ ë²„íŠ¼ìœ¼ë¡œ 사용하기 위한 ì¸í„°íŽ˜ì´ìŠ¤ë¡œ +<p>메뉴는 ì˜µì…˜ì„ ì¼œê³ ë„거나, ë…립ì ì˜µì…˜ì— ëŒ€í•œ 확ì¸ëž€ìœ¼ë¡œ 사용하거나, +ìƒí˜¸ 배타ì ì¸ ì˜µì…˜ì˜ ê·¸ë£¹ì— ëŒ€í•œ ë¬´ì„ ë²„íŠ¼ìœ¼ë¡œ 사용하기 위한 ì¸í„°íŽ˜ì´ìŠ¤ë¡œ ìœ ìš©í•©ë‹ˆë‹¤. 그림 5는 ë¬´ì„ ë²„íŠ¼ì´ ìžˆìœ¼ë©° í™•ì¸ ê°€ëŠ¥í•œ í•ëª©ì´ í¬í•¨ëœ 하위 메뉴를 표시합니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> (옵션 메뉴ì˜) ì•„ì´ì½˜ ë©”ë‰´ì˜ ë©”ë‰´ í•ëª©ì€ -확ì¸ëž€ì´ë‚˜ ë¬´ì„ ë²„íŠ¼ì„ í‘œì‹œí• ìˆ˜ 없습니다. í™•ì¸ ê°€ëŠ¥í•œ ì•„ì´ì½˜ 메뉴ì—서 í•ëª©ì„ ë§Œë“¤ê¸°ë¡œ ì„ íƒí•˜ëŠ” 경우, -ìƒíƒœê°€ 변경ë 때마다 ì•„ì´ì½˜ ë°/ë˜ëŠ” í…스트를 êµì²´í•˜ì—¬ +<p class="note"><strong>ì°¸ê³ :</strong> (옵션 메뉴ì˜) ì•„ì´ì½˜ ë©”ë‰´ì˜ ë©”ë‰´ í•ëª©ì€ +확ì¸ëž€ì´ë‚˜ ë¬´ì„ ë²„íŠ¼ì„ í‘œì‹œí• ìˆ˜ 없습니다. í™•ì¸ ê°€ëŠ¥í•œ ì•„ì´ì½˜ 메뉴ì—서 í•ëª©ì„ ë§Œë“¤ê¸°ë¡œ ì„ íƒí•˜ëŠ” 경우, +ìƒíƒœê°€ 변경ë 때마다 ì•„ì´ì½˜ ë°/ë˜ëŠ” í…스트를 êµì²´í•˜ì—¬ 확ì¸ëœ ìƒíƒœë¥¼ 수ë™ìœ¼ë¡œ 나타내야 합니다.</p> <p>{@code <item>} ìš”ì†Œì˜ {@code android:checkable} ì†ì„±ì„ 사용하여 개별 메뉴 í•ëª©ì— ëŒ€í•œ í™•ì¸ ê°€ëŠ¥í•œ ë™ìž‘ì„ ì •ì˜í•˜ê±°ë‚˜ -{@code <group>} 요소ì—서 {@code android:checkableBehavior} ì†ì„±ìœ¼ë¡œ ì „ì²´ ê·¸ë£¹ì— ëŒ€í•œ í™•ì¸ ê°€ëŠ¥í•œ ë™ìž‘ì„ ì‚¬ìš©í• ìˆ˜ 있습니다. +{@code <group>} 요소ì—서 {@code android:checkableBehavior} ì†ì„±ìœ¼ë¡œ ì „ì²´ ê·¸ë£¹ì— ëŒ€í•œ í™•ì¸ ê°€ëŠ¥í•œ ë™ìž‘ì„ ì‚¬ìš©í• ìˆ˜ 있습니다. 예를 들어, ì´ ë©”ë‰´ ê·¸ë£¹ì˜ ëª¨ë“ í•ëª©ì€ ë¬´ì„ ë²„íŠ¼ìœ¼ë¡œ 확ì¸í• 수 있습니다.</p> <pre> @@ -893,15 +893,15 @@ android:checkable} ì†ì„±ì„ 사용하여 개별 메뉴 í•ëª©ì— ëŒ€í•œ í™•ì¸ <dd>확ì¸í• 수 있는 í•ëª©ì´ ì—†ìŠµë‹ˆë‹¤.</dd> </dl> -<p>{@code <item>} ìš”ì†Œì˜ {@code android:checked} ì†ì„±ì„ ì´ìš©í•˜ì—¬ í•ëª©ì— ê¸°ë³¸ 확ì¸ëœ ìƒíƒœë¥¼ ì ìš©í•˜ê³ +<p>{@code <item>} ìš”ì†Œì˜ {@code android:checked} ì†ì„±ì„ ì´ìš©í•˜ì—¬ í•ëª©ì— ê¸°ë³¸ 확ì¸ëœ ìƒíƒœë¥¼ ì ìš©í•˜ê³ {@link android.view.MenuItem#setChecked(boolean) setChecked()} 메서드로 코드 ë‚´ì—서 ì´ë¥¼ ë³€ê²½í• ìˆ˜ 있습니다.</p> <p>í™•ì¸ ê°€ëŠ¥í•œ í•ëª©ì´ ì„ íƒë˜ë©´, ì‹œìŠ¤í…œì´ ê° í•ëª©ì´ ì„ íƒëœ 콜백 메서드를 호출합니다 -(예: {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}). 바로 여기ì—서 -확ì¸ëž€ì˜ ìƒíƒœë¥¼ ì„¤ì •í•´ì•¼ 합니다. 확ì¸ëž€ì´ë‚˜ ë¬´ì„ ë²„íŠ¼ì€ ìžì‹ ì˜ ìƒíƒœë¥¼ ìžë™ìœ¼ë¡œ -변경하지 않기 때문입니다. -{@link android.view.MenuItem#isChecked()}로 í•ëª©ì˜ í˜„ìž¬ ìƒíƒœë¥¼ (사용ìžê°€ ì´ë¥¼ ì„ íƒí•˜ê¸° ì „ ìƒíƒœ 그대로) ì¿¼ë¦¬í•˜ê³ ê·¸ëŸ° ë‹¤ìŒ +(예: {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}). 바로 여기ì—서 +확ì¸ëž€ì˜ ìƒíƒœë¥¼ ì„¤ì •í•´ì•¼ 합니다. 확ì¸ëž€ì´ë‚˜ ë¬´ì„ ë²„íŠ¼ì€ ìžì‹ ì˜ ìƒíƒœë¥¼ ìžë™ìœ¼ë¡œ +변경하지 않기 때문입니다. +{@link android.view.MenuItem#isChecked()}로 í•ëª©ì˜ í˜„ìž¬ ìƒíƒœë¥¼ (사용ìžê°€ ì´ë¥¼ ì„ íƒí•˜ê¸° ì „ ìƒíƒœ 그대로) ì¿¼ë¦¬í•˜ê³ ê·¸ëŸ° ë‹¤ìŒ {@link android.view.MenuItem#setChecked(boolean) setChecked()}로 확ì¸ëœ ìƒíƒœë¥¼ ì„¤ì •í• ìˆ˜ 있습니다. 예:</p> <pre> @@ -926,7 +926,7 @@ public boolean onOptionsItemSelected(MenuItem item) { ë³´ì´ê²Œ 합니다.</p> <p class="note"><strong>ì°¸ê³ :</strong> -í™•ì¸ ê°€ëŠ¥í•œ 메뉴 í•ëª©ì€ ì„¸ì…˜ë³„ 기준으로만 사용하ë„ë¡ ë§Œë“¤ì–´ì ¸ 있으며 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì†Œë©¸ëœ í›„ì—는 +í™•ì¸ ê°€ëŠ¥í•œ 메뉴 í•ëª©ì€ ì„¸ì…˜ë³„ 기준으로만 사용하ë„ë¡ ë§Œë“¤ì–´ì ¸ 있으며 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì†Œë©¸ëœ í›„ì—는 ì €ìž¥ë˜ì§€ 않습니다. 사용ìžì— 대해 ì €ìž¥í•˜ê³ ìž í•˜ëŠ” ì• í”Œë¦¬ì¼€ì´ì…˜ ì„¤ì •ì´ ìžˆìœ¼ë©´, <a href="{@docRoot}guide/topics/data/data-storage.html#pref">ê³µìœ ê¸°ë³¸ ì„¤ì •</a>으로 해당 ë°ì´í„°ë¥¼ ì €ìž¥í•´ì•¼ 합니다.</p> @@ -935,16 +935,16 @@ public boolean onOptionsItemSelected(MenuItem item) { <h2 id="intents">ì¸í…íŠ¸ì— ê¸°ë°˜í•œ 메뉴 í•목 추가</h2> <p>{@link android.content.Intent}를 ì´ìš©í•˜ì—¬ -액티비티를 시작하는 메뉴 í•ëª©ì„ ì›í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(액티비티가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì— ìžˆëŠ” 것ì´ë“ ë˜ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 것ì´ë“ 무관합니다). ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” ì¸í…트를 ì•Œê³ +액티비티를 시작하는 메뉴 í•ëª©ì„ ì›í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(액티비티가 본ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ ì•ˆì— ìžˆëŠ” 것ì´ë“ ë˜ ë‹¤ë¥¸ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 있는 것ì´ë“ 무관합니다). ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” ì¸í…트를 ì•Œê³ ì¸í…트를 시작해야 하는 íŠ¹ì • 메뉴 í•ëª©ì´ ìžˆì„ ê²½ìš°, -í•ëª©ì— ëŒ€í•´ ì„ íƒëœ ì ì ˆí•œ 콜백 메서드ì—서 {@link android.app.Activity#startActivity(Intent) startActivity()}ê°€ +í•ëª©ì— ëŒ€í•´ ì„ íƒëœ ì ì ˆí•œ 콜백 메서드ì—서 {@link android.app.Activity#startActivity(Intent) startActivity()}ê°€ í¬í•¨ëœ ì¸í…트를 실행합니다(예: {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} 콜백).</p> -<p>그러나 ì‚¬ìš©ìž ê¸°ê¸°ì— +<p>그러나 ì‚¬ìš©ìž ê¸°ê¸°ì— í•´ë‹¹ ì¸í…트를 처리하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 있는지 모르는 경우, ì´ë¥¼ 호출하는 메뉴 í•ëª©ì„ ì¶”ê°€í•˜ë©´ 해당 ì¸í…트가 ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ 확ì¸ë˜ì§€ 못해서 메뉴 í•ëª©ì´ ê¸°ëŠ¥í•˜ì§€ ëª»í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. - ì´ê²ƒì„ 해결하기 위해 Android는 개발ìžê°€ ë™ì 으로 ìžì‹ ì˜ ë©”ë‰´ì— ë©”ë‰´ í•ëª©ì„ ì¶”ê°€í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤. + ì´ê²ƒì„ 해결하기 위해 Android는 개발ìžê°€ ë™ì 으로 ìžì‹ ì˜ ë©”ë‰´ì— ë©”ë‰´ í•ëª©ì„ ì¶”ê°€í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤. ì´ëŠ” Androidê°€ 기기ì—서 개발ìžì˜ ì¸í…트를 처리하는 액티비티를 ì°¾ì„ ê²½ìš°ì— í•´ë‹¹ë©ë‹ˆë‹¤.</p> <p>ì¸í…트를 수ë½í•˜ëŠ” ì´ìš© 가능한 ì•¡í‹°ë¹„í‹°ì— ê¸°ë°˜í•˜ì—¬ 메뉴 í•ëª©ì„ ì¶”ê°€í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.</p> @@ -954,15 +954,15 @@ android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} ì½ {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE}, 기타 요구 사í•으로 ì¸í…트를 ì •ì˜í•©ë‹ˆë‹¤.</li> <li>{@link android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[]) -Menu.addIntentOptions()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. 그러면 Androidê°€ ì¸í…트를 수행하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê²€ìƒ‰í•˜ê³ +Menu.addIntentOptions()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. 그러면 Androidê°€ ì¸í…트를 수행하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ê²€ìƒ‰í•˜ê³ ì´ë“¤ì„ 개발ìžì˜ ë©”ë‰´ì— ì¶”ê°€í•©ë‹ˆë‹¤.</li> </ol> -<p>ì¸í…트를 만족하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 설치ë˜ì–´ 있지 않으면, +<p>ì¸í…트를 만족하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 설치ë˜ì–´ 있지 않으면, 메뉴 í•ëª©ì´ ì¶”ê°€ë˜ì§€ 않습니다.</p> <p class="note"><strong>ì°¸ê³ :</strong> -{@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} 를 사용하여 화면ì—서 현재 ì„ íƒëœ +{@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} 를 사용하여 화면ì—서 현재 ì„ íƒëœ 요소를 처리합니다. 그러므로 ì´ê²ƒì€ {@link android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenuInfo) onCreateContextMenu()}ì—서 메뉴를 ìƒì„±í• 때만 사용해야 합니다.</p> @@ -995,7 +995,7 @@ public boolean onCreateOptionsMenu(Menu menu){ <p>ì •ì˜ëœ ì¸í…트와 ì¼ì¹˜í•˜ëŠ” ì¸í…트 필터를 ì œê³µí•˜ëŠ” 것으로 ë°œê²¬ëœ ê° ì•¡í‹°ë¹„í‹°ì— ì¸í…트 í•„í„°ì˜ <code>android:label</code>를 -메뉴 í•목 ì œëª©ìœ¼ë¡œ, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ì„ 메뉴 í•목 ì•„ì´ì½˜ìœ¼ë¡œ 사용하여 메뉴 í•ëª©ì„ ì¶”ê°€í•©ë‹ˆë‹¤. +메뉴 í•목 ì œëª©ìœ¼ë¡œ, ì• í”Œë¦¬ì¼€ì´ì…˜ ì•„ì´ì½˜ì„ 메뉴 í•목 ì•„ì´ì½˜ìœ¼ë¡œ 사용하여 메뉴 í•ëª©ì„ ì¶”ê°€í•©ë‹ˆë‹¤. {@link android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[]) addIntentOptions()} 메서드는 ì¶”ê°€ëœ ë©”ë‰´ í•목 개수를 반환합니다.</p> @@ -1007,10 +1007,10 @@ addIntentOptions()}ì„ í˜¸ì¶œí• ë•Œ 첫 번째 ì¸ìˆ˜ì—서 ì§€ì •ëœ ë©”ë‰´ ê· <h3 id="AllowingToAdd">다른 ë©”ë‰´ì— ì•¡í‹°ë¹„í‹° 추가 허용</h3> -<p>본ì¸ì˜ ì•¡í‹°ë¹„í‹°ì˜ ì„œë¹„ìŠ¤ë¥¼ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œê³µí•˜ì—¬ 다른 +<p>본ì¸ì˜ ì•¡í‹°ë¹„í‹°ì˜ ì„œë¹„ìŠ¤ë¥¼ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œê³µí•˜ì—¬ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë©”ë‰´ì— ë³¸ì¸ì˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 추가ë˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(위ì—서 설명한 것과 ì—í• ì´ ë°˜ëŒ€ìž…ë‹ˆë‹¤).</p> -<p>다른 ì• í”Œë¦¬ì¼€ì´ì…˜ ë©”ë‰´ì— ì¶”ê°€ë˜ë ¤ë©´, ì¸í…트 필터는 í‰ì†Œì™€ ê°™ì´ +<p>다른 ì• í”Œë¦¬ì¼€ì´ì…˜ ë©”ë‰´ì— ì¶”ê°€ë˜ë ¤ë©´, ì¸í…트 필터는 í‰ì†Œì™€ ê°™ì´ ì •ì˜í•´ì•¼ 하지만, ì¸í…트 í•„í„° ì¹´í…Œê³ ë¦¬ì— {@link android.content.Intent#CATEGORY_ALTERNATIVE} ë°/ë˜ëŠ”{@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} ê°’ì„ ë°˜ë“œì‹œ í¬í•¨í•´ì•¼ 합니다. 예:</p> @@ -1023,9 +1023,9 @@ addIntentOptions()}ì„ í˜¸ì¶œí• ë•Œ 첫 번째 ì¸ìˆ˜ì—서 ì§€ì •ëœ ë©”ë‰´ ê· </intent-filter> </pre> -<p>ì¸í…트 í•„í„° ìž‘ì„±ì— ê´€í•œ ìžì„¸í•œ ë‚´ìš©ì€ +<p>ì¸í…트 í•„í„° ìž‘ì„±ì— ê´€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href="/guide/components/intents-filters.html">ì¸í…트와 ì¸í…트 í•„í„°</a> 문서를 참조하ì‹ì‹œì˜¤.</p> -<p>ì´ ê¸°ë²•ì„ ì‚¬ìš©í•˜ëŠ” 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ +<p>ì´ ê¸°ë²•ì„ ì‚¬ìš©í•˜ëŠ” 샘플 ì• í”Œë¦¬ì¼€ì´ì…˜ì€ <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note Pad</a> 샘플 코드를 참조하ì‹ì‹œì˜¤.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/ko/guide/topics/ui/notifiers/notifications.jd index db55424d8965..4d87df7e242c 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/notifiers/notifications.jd @@ -81,8 +81,8 @@ page.title=알림 <strong>그림 2.</strong> 알림 ì°½ì— ìžˆëŠ” 알림입니다. </p> -<p class="note"><strong>ì°¸ê³ :</strong> 따로 ì–¸ê¸‰ëœ ë¶€ë¶„ì„ ì œì™¸í•˜ê³ ì´ ê°€ì´ë“œëŠ” -ë²„ì „ 4 <a href="{@docRoot}tools/support-library/index.html">ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬</a>ì˜ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} í´ëž˜ìŠ¤ë¥¼ +<p class="note"><strong>ì°¸ê³ :</strong> 따로 ì–¸ê¸‰ëœ ë¶€ë¶„ì„ ì œì™¸í•˜ê³ ì´ ê°€ì´ë“œëŠ” +ë²„ì „ 4 <a href="{@docRoot}tools/support-library/index.html">ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬</a>ì˜ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} í´ëž˜ìŠ¤ë¥¼ 참조합니다. í´ëž˜ìФ {@link android.app.Notification.Builder Notification.Builder}는 Android 3.0(API ë ˆë²¨ 11)ì— ì¶”ê°€ë˜ì—ˆìŠµë‹ˆë‹¤.</p> @@ -111,15 +111,15 @@ Android 5.0(API ë ˆë²¨ 21)부터 ë„ìž…ëœ ë¨¸í‹°ì–´ë¦¬ì–¼ ë””ìžì¸ 변경 사í </p> <ul> <li> - + {@link android.support.v4.app.NotificationCompat.Builder#setSmallIcon setSmallIcon()}ì´ ì„¤ì •í•œ ìž‘ì€ ì•„ì´ì½˜ </li> <li> - + {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}ì´ ì„¤ì •í•œ ì œëª© </li> <li> - + {@link android.support.v4.app.NotificationCompat.Builder#setContentText setContentText()}ì´ ì„¤ì •í•œ 세부 í…스트 </li> </ul> @@ -132,8 +132,8 @@ Android 5.0(API ë ˆë²¨ 21)부터 ë„ìž…ëœ ë¨¸í‹°ì–´ë¦¬ì–¼ ë””ìžì¸ 변경 사í <h3 id="Actions">알림 작업</h3> <p> ì„ íƒ í•목ì´ê¸°ëŠ” 하지만 ì•Œë¦¼ì— ìž‘ì—…ì„ í•˜ë‚˜ ì´ìƒ 추가해야 합니다. - ìž‘ì—…ì€ ì‚¬ìš©ìžê°€ 알림ì—서 -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.app.Activity}로 바로 ê°ˆ 수 있게 í•˜ê³ , 여기ì—서 사용ìžëŠ” 하나 ì´ìƒì˜ ì´ë²¤íŠ¸ë¥¼ 보거나 + ìž‘ì—…ì€ ì‚¬ìš©ìžê°€ 알림ì—서 +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.app.Activity}로 바로 ê°ˆ 수 있게 í•˜ê³ , 여기ì—서 사용ìžëŠ” 하나 ì´ìƒì˜ ì´ë²¤íŠ¸ë¥¼ 보거나 ë” ë§Žì€ ìž‘ì—…ì„ í• ìˆ˜ 있습니다. </p> <p> @@ -141,15 +141,15 @@ Android 5.0(API ë ˆë²¨ 21)부터 ë„ìž…ëœ ë¨¸í‹°ì–´ë¦¬ì–¼ ë””ìžì¸ 변경 사í ì¼ë°˜ì 으로 ìž‘ì—…ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.app.Activity}를 엽니다. ë˜í•œ, 알람 다시 알림ì´ë‚˜ í…스트 ë©”ì‹œì§€ì— ì¦‰ì‹œ 답장 등과 ê°™ì€ ì¶”ê°€ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 알림 ë²„íŠ¼ì„ ì¶”ê°€í• ìˆ˜ 있습니다. -ì´ ê¸°ëŠ¥ì€ Android 4.1부터 ì‚¬ìš©í• ìˆ˜ 있습니다. 추가 작업 ë²„íŠ¼ì„ ì‚¬ìš©í• ê²½ìš°, -ì•±ì˜ {@link android.app.Activity}ì—서 해당 ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있게 해야 합니다. +ì´ ê¸°ëŠ¥ì€ Android 4.1부터 ì‚¬ìš©í• ìˆ˜ 있습니다. 추가 작업 ë²„íŠ¼ì„ ì‚¬ìš©í• ê²½ìš°, +ì•±ì˜ {@link android.app.Activity}ì—서 해당 ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있게 해야 합니다. ìžì„¸í•œ ì •ë³´ëŠ” <a href="#Compatibility">처리 호환성</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </p> <p> - {@link android.app.Notification}ì—서 작업 ìžì²´ëŠ” -ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 {@link android.app.Activity}를 시작하는 -{@link android.content.Intent}ê°€ í¬í•¨ëœ -{@link android.app.PendingIntent}ê°€ ì •ì˜í•©ë‹ˆë‹¤. + {@link android.app.Notification}ì—서 작업 ìžì²´ëŠ” +ì• í”Œë¦¬ì¼€ì´ì…˜ì—서 {@link android.app.Activity}를 시작하는 +{@link android.content.Intent}ê°€ í¬í•¨ëœ +{@link android.app.PendingIntent}ê°€ ì •ì˜í•©ë‹ˆë‹¤. {@link android.app.PendingIntent}를 ë™ìž‘ê³¼ ì—°ê´€ì‹œí‚¤ë ¤ë©´ {@link android.support.v4.app.NotificationCompat.Builder}ì˜ ì ì ˆí•œ 메서드를 호출합니다. 예를 들어, 사용ìžê°€ 알림 ì°½ì˜ ì•Œë¦¼ í…스트를 í´ë¦í–ˆì„ 때 {@link android.app.Activity}를 ì‹œìž‘í•˜ë ¤ë©´, @@ -158,20 +158,20 @@ Android 5.0(API ë ˆë²¨ 21)부터 ë„ìž…ëœ ë¨¸í‹°ì–´ë¦¬ì–¼ ë””ìžì¸ 변경 사í </p> <p> 사용ìžê°€ ì•Œë¦¼ì„ í´ë¦í–ˆì„ 때 {@link android.app.Activity}를 시작하는 ë™ìž‘ì´ ê°€ìž¥ 보편ì ì¸ ìž‘ì—… -시나리오입니다. ë˜í•œ, 사용ìžê°€ ì•Œë¦¼ì„ ë¬´ì‹œí–ˆì„ ë•Œ {@link android.app.Activity}를 -ì‹œìž‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Android 4.1 ì´í›„부터는 +시나리오입니다. ë˜í•œ, 사용ìžê°€ ì•Œë¦¼ì„ ë¬´ì‹œí–ˆì„ ë•Œ {@link android.app.Activity}를 +ì‹œìž‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Android 4.1 ì´í›„부터는 {@link android.app.Activity}를 작업 버튼ì—서 ì‹œìž‘í• ìˆ˜ 있습니다. ìžì„¸í•œ ë‚´ìš©ì„ ì•Œì•„ë³´ë ¤ë©´ {@link android.support.v4.app.NotificationCompat.Builder} 참조 ê°€ì´ë“œë¥¼ ì½ì–´ë³´ì‹ì‹œì˜¤. </p> <!-- ------------------------------------------------------------------------------------------ --> <h3 id="Priority">알림 ìš°ì„ ìˆœìœ„</h3> <p> - ì›í•œë‹¤ë©´, ì•Œë¦¼ì— ìš°ì„ ìˆœìœ„ë¥¼ ì„¤ì •í• ìˆ˜ 있습니다. ìš°ì„ ìˆœìœ„ëŠ” + ì›í•œë‹¤ë©´, ì•Œë¦¼ì— ìš°ì„ ìˆœìœ„ë¥¼ ì„¤ì •í• ìˆ˜ 있습니다. ìš°ì„ ìˆœìœ„ëŠ” 기기 UIì— ì•Œë¦¼ 표시 ë°©ì‹ì„ 암시하는 ì—í• ì„ í•©ë‹ˆë‹¤. 알림 ìš°ì„ ìˆœìœ„ë¥¼ ì„¤ì •í•˜ë ¤ë©´, {@link android.support.v4.app.NotificationCompat.Builder#setPriority(int) NotificationCompat.Builder.setPriority()}를 í˜¸ì¶œí•˜ê³ {@link -android.support.v4.app.NotificationCompat} ìš°ì„ ìˆœìœ„ ìƒìˆ˜ 중 í•˜ë‚˜ì— ì „ë‹¬í•©ë‹ˆë‹¤. +android.support.v4.app.NotificationCompat} ìš°ì„ ìˆœìœ„ ìƒìˆ˜ 중 í•˜ë‚˜ì— ì „ë‹¬í•©ë‹ˆë‹¤. ìš°ì„ ìˆœìœ„ ìˆ˜ì¤€ì€ {@link android.support.v4.app.NotificationCompat#PRIORITY_MIN}(-2)ì—서 {@link android.support.v4.app.NotificationCompat#PRIORITY_MAX}(2)까지 다섯 개가 있습니다. 별ë„ì˜ ì„¤ì •ì´ ì—†ì„ ê²½ìš°, @@ -185,10 +185,10 @@ android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT}(0)으로 ì„¤ì •ë©ë‹ <!-- ------------------------------------------------------------------------------------------ --> <h3 id="SimpleNotification">단순 알림 만들기</h3> <p> - ë‹¤ìŒ ì¡°ê°ì€ 사용ìžê°€ ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 알리는 + ë‹¤ìŒ ì¡°ê°ì€ 사용ìžê°€ ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 알리는 액티비티를 ì§€ì •í•˜ëŠ” 단순한 ì•Œë¦¼ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ì´ ì½”ë“œëŠ” -{@link android.support.v4.app.TaskStackBuilder} ê°ì²´ë¥¼ ìƒì„±í•˜ê³ ì´ë¥¼ 사용하여 -해당 ìž‘ì—…ì˜ {@link android.app.PendingIntent}를 ìƒì„±í•©ë‹ˆë‹¤. ì´ íŒ¨í„´ì€ +{@link android.support.v4.app.TaskStackBuilder} ê°ì²´ë¥¼ ìƒì„±í•˜ê³ ì´ë¥¼ 사용하여 +해당 ìž‘ì—…ì˜ {@link android.app.PendingIntent}를 ìƒì„±í•©ë‹ˆë‹¤. ì´ íŒ¨í„´ì€ <a href="#NotificationResponse"> 액티비티를 ì‹œìž‘í• ë•Œ íƒìƒ‰ ë³´ì¡´</a> 섹션ì—서 ìžì„¸ížˆ 설명합니다. </p> @@ -225,13 +225,13 @@ mNotificationManager.notify(mId, mBuilder.build()); <!-- ------------------------------------------------------------------------------------------ --> <h3 id="ApplyStyle">ì•Œë¦¼ì— í™•ìž¥ ë ˆì´ì•„웃 ì ìš©</h3> <p> - í™•ìž¥ëœ ë³´ê¸°ì— ì•Œë¦¼ì„ ë‚˜íƒ€ë‚˜ê²Œ í•˜ë ¤ë©´, + í™•ìž¥ëœ ë³´ê¸°ì— ì•Œë¦¼ì„ ë‚˜íƒ€ë‚˜ê²Œ í•˜ë ¤ë©´, ë¨¼ì € ì›í•˜ëŠ” ì¼ë°˜ 보기 옵션으로 {@link android.support.v4.app.NotificationCompat.Builder} ê°ì²´ë¥¼ ìƒì„±í•©ë‹ˆë‹¤. 다ìŒì—는 í™•ìž¥ëœ ë ˆì´ì•„웃 ê°ì²´ì˜ ì¸ìˆ˜ë¡œ {@link android.support.v4.app.NotificationCompat.Builder#setStyle Builder.setStyle()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. </p> <p> - 확장 ì•Œë¦¼ì€ Android 4.1 ì´ì „ 플랫í¼ì—서 ì‚¬ìš©í• ìˆ˜ 없다는 ê²ƒì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. + 확장 ì•Œë¦¼ì€ Android 4.1 ì´ì „ 플랫í¼ì—서 ì‚¬ìš©í• ìˆ˜ 없다는 ê²ƒì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. Android 4.1 ì´í•˜ 플랫í¼ì—서 ì•Œë¦¼ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì€ <a href="#Compatibility">처리 호환성</a> ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. </p> @@ -264,7 +264,7 @@ mBuilder.setStyle(inBoxStyle); <h3 id="Compatibility">처리 호환성</h3> <p> - + 알림 ê¸°ëŠ¥ì„ ì„¤ì •í•˜ëŠ” 메서드가 ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ í´ëž˜ìФ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}ì— ìžˆë”ë¼ë„ ëª¨ë“ ì•Œë¦¼ ê¸°ëŠ¥ì„ íŠ¹ì • ë²„ì „ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. 예를 들어, 확장 ì•Œë¦¼ì— ë”°ë¼ ë‹¬ë¼ì§€ëŠ” 작업 ë²„íŠ¼ì€ Android @@ -294,13 +294,13 @@ NotificationCompat.Builder}를 ì´ìš©í•´ì„œ ì•Œë¦¼ì„ ìƒì„±í•©ë‹ˆë‹¤. ë˜í•œ, ì 사용ìžê°€ ì•Œë¦¼ì„ í´ë¦í•˜ë©´ ì•Œë¦¼ì„ ì‹œìž‘ì‹œí‚¤ëŠ” ë°©ì‹ìœ¼ë¡œ ëª¨ë“ ì‚¬ìš©ìžì—게 {@link android.app.Activity}ì—서 알림 ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있게 합니다. ì´ë¥¼ 위해, -{@link android.app.Activity}를 위한 {@link android.app.PendingIntent}를 ìƒì„±í•©ë‹ˆë‹¤. +{@link android.app.Activity}를 위한 {@link android.app.PendingIntent}를 ìƒì„±í•©ë‹ˆë‹¤. {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}를 호출하여 ì•Œë¦¼ì— {@link android.app.PendingIntent}를 추가합니다. </li> <li> ì´ì œ 알림ì—서 ì‚¬ìš©í•˜ê³ ìž í•˜ëŠ” 확장 알림 ê¸°ëŠ¥ì„ ì¶”ê°€í•©ë‹ˆë‹¤. ë˜í•œ, 사용ìžê°€ ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 시작ë˜ëŠ” -{@link android.app.Activity}ì—서 개발ìžê°€ 추가한 ëª¨ë“ ê¸°ëŠ¥ì„ +{@link android.app.Activity}ì—서 개발ìžê°€ 추가한 ëª¨ë“ ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있어야 합니다. </li> </ol> @@ -310,18 +310,18 @@ setContentIntent()}를 호출하여 ì•Œë¦¼ì— {@link android.app.PendingIntent}ë <!-- ------------------------------------------------------------------------------------------ --> <h2 id="Managing">알림 관리</h2> <p> - ê°™ì€ ìœ í˜•ì˜ ì´ë²¤íЏì—서 ì•Œë¦¼ì„ ì—¬ëŸ¬ 번 발행해야 í• ê²½ìš°, + ê°™ì€ ìœ í˜•ì˜ ì´ë²¤íЏì—서 ì•Œë¦¼ì„ ì—¬ëŸ¬ 번 발행해야 í• ê²½ìš°, ì™„ì „ížˆ 새로운 ì•Œë¦¼ì„ ë§Œë“œëŠ” ê²ƒì€ ì‚¼ê°€ì•¼ 합니다. ëŒ€ì‹ , ì¼ë¶€ ê°’ì„ ë³€ê²½í•˜ê±°ë‚˜ 추가하거나, ë‘ ê°€ì§€ 조치를 ëª¨ë‘ ì·¨í•˜ì—¬ ì´ì „ ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. </p> <p> 예를 들어, Gmailì€ ì½ì§€ ì•Šì€ ë©”ì‹œì§€ 개수를 ì˜¬ë¦¬ê³ ê° ì´ë©”ì¼ì˜ ìš”ì•½ì„ ì•Œë¦¼ì— ì¶”ê°€í•˜ì—¬ -새 ì´ë©”ì¼ ë„ì°©ì„ ì•Œë¦½ë‹ˆë‹¤. ì´ê²ƒì„ ì¼ëª… -ì•Œë¦¼ì„ "쌓는다"ê³ í•˜ë©°, ì´ëŠ” +새 ì´ë©”ì¼ ë„ì°©ì„ ì•Œë¦½ë‹ˆë‹¤. ì´ê²ƒì„ ì¼ëª… +ì•Œë¦¼ì„ "쌓는다"ê³ í•˜ë©°, ì´ëŠ” <a href="{@docRoot}design/patterns/notifications.html">알림</a> ë””ìžì¸ ê°€ì´ë“œì— ìžì„¸ížˆ 설명ë˜ì–´ 있습니다. </p> <p class="note"> - <strong>ì°¸ê³ :</strong> ì´ Gmail 기능ì—는 "ë°›ì€íŽ¸ì§€í•¨" 확장 ë ˆì´ì•„ì›ƒì´ í•„ìš”í•œë°, + <strong>ì°¸ê³ :</strong> ì´ Gmail 기능ì—는 "ë°›ì€íŽ¸ì§€í•¨" 확장 ë ˆì´ì•„ì›ƒì´ í•„ìš”í•œë°, ì´ê²ƒì€ Android 4.1부터 ì´ìš©í• 수 있는 확장 알림 ê¸°ëŠ¥ì˜ ì¼ë¶€ìž…니다. </p> <p> @@ -331,16 +331,16 @@ setContentIntent()}를 호출하여 ì•Œë¦¼ì— {@link android.app.PendingIntent}ë <p> ì•Œë¦¼ì´ ì—…ë°ì´íЏë˜ë„ë¡ ì„¤ì •í•˜ë ¤ë©´, {@link android.app.NotificationManager#notify(int, android.app.Notification) NotificationManager.notify()}를 호출하여 알림 ID와 함께 발행합니다. - ì•Œë¦¼ì„ ë°œí–‰í•œ í›„ì— ì—…ë°ì´íŠ¸í•˜ë ¤ë©´, -{@link android.support.v4.app.NotificationCompat.Builder} ê°ì²´ë¥¼ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ìƒì„±í•˜ê³ , -{@link android.app.Notification} ê°ì²´ë¥¼ êµ¬ì¶•í•˜ê³ , -ì´ì „ì— ì‚¬ìš©í•œ 것과 ê°™ì€ ID로 {@link android.app.Notification}ì„ ë°œí–‰í•©ë‹ˆë‹¤. ì´ì „ ì•Œë¦¼ì´ + ì•Œë¦¼ì„ ë°œí–‰í•œ í›„ì— ì—…ë°ì´íŠ¸í•˜ë ¤ë©´, +{@link android.support.v4.app.NotificationCompat.Builder} ê°ì²´ë¥¼ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ìƒì„±í•˜ê³ , +{@link android.app.Notification} ê°ì²´ë¥¼ êµ¬ì¶•í•˜ê³ , +ì´ì „ì— ì‚¬ìš©í•œ 것과 ê°™ì€ ID로 {@link android.app.Notification}ì„ ë°œí–‰í•©ë‹ˆë‹¤. ì´ì „ ì•Œë¦¼ì´ ì—¬ì „ížˆ 표시ë˜ëŠ” 경우, ì‹œìŠ¤í…œì€ -{@link android.app.Notification} ê°ì²´ì˜ 콘í…ì¸ ì—서 ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ì´ì „ ì•Œë¦¼ì„ ë¬´ì‹œí• ê²½ìš°, +{@link android.app.Notification} ê°ì²´ì˜ 콘í…ì¸ ì—서 ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ì´ì „ ì•Œë¦¼ì„ ë¬´ì‹œí• ê²½ìš°, ëŒ€ì‹ ìƒˆë¡œìš´ ì•Œë¦¼ì´ ìƒì„±ë©ë‹ˆë‹¤. </p> <p> - ë‹¤ìŒ ì½”ë“œ ì¡°ê°ì€ ë°œìƒí•œ ì´ë²¤íЏ 개수를 ë°˜ì˜í•˜ì—¬ + ë‹¤ìŒ ì½”ë“œ ì¡°ê°ì€ ë°œìƒí•œ ì´ë²¤íЏ 개수를 ë°˜ì˜í•˜ì—¬ ì—…ë°ì´íŠ¸ëœ ì•Œë¦¼ì„ ë‚˜íƒ€ë‚¸ 것입니다. ì´ê²ƒì€ ì•Œë¦¼ì„ ìŒ“ì•„ ìš”ì•½ì„ í‘œì‹œí•©ë‹ˆë‹¤. </p> <pre> @@ -385,7 +385,7 @@ numMessages = 0; ì´ ë©”ì„œë“œë„ í˜„ìž¬ ì§„í–‰ ì¤‘ì¸ ì•Œë¦¼ì„ ì‚ì œí•©ë‹ˆë‹¤. </li> <li> - {@link android.app.NotificationManager#cancelAll() cancelAll()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. + {@link android.app.NotificationManager#cancelAll() cancelAll()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. ì´ê²ƒì€ ì´ì „ì— ë°œí–‰í•œ ì•Œë¦¼ì„ ëª¨ë‘ ì œê±°í•©ë‹ˆë‹¤. </li> </ul> @@ -393,9 +393,9 @@ numMessages = 0; <!-- ------------------------------------------------------------------------------------------ --> <h2 id="NotificationResponse">액티비티를 ì‹œìž‘í• ë•Œ íƒìƒ‰ ë³´ì¡´</h2> <p> - 알림ì—서 {@link android.app.Activity}를 ì‹œìž‘í• ë•ŒëŠ” 사용ìžì˜ ì˜ˆìƒ íƒìƒ‰ ê²½í—˜ì„ -보존해야 합니다. <i>'뒤로'를 í´ë¦í•˜ë©´</i> 사용ìžë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì •ìƒ ìž‘ì—… íë¦„ì„ ê±°ì³ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ë³´ë‚´ê³ , - <i>'최근'ì„ í´ë¦í•˜ë©´</i> + 알림ì—서 {@link android.app.Activity}를 ì‹œìž‘í• ë•ŒëŠ” 사용ìžì˜ ì˜ˆìƒ íƒìƒ‰ ê²½í—˜ì„ +보존해야 합니다. <i>'뒤로'를 í´ë¦í•˜ë©´</i> 사용ìžë¥¼ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì •ìƒ ìž‘ì—… íë¦„ì„ ê±°ì³ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ë³´ë‚´ê³ , + <i>'최근'ì„ í´ë¦í•˜ë©´</i> {@link android.app.Activity}를 ë³„ê°œì˜ ìž‘ì—…ìœ¼ë¡œ 표시합니다. íƒìƒ‰ ê²½í—˜ì„ ë³´ì¡´í•˜ë ¤ë©´ 새 작업ì—서 {@link android.app.Activity}를 시작해야 합니다. 새로운 ìž‘ì—…ì„ ë¶€ì—¬í•˜ê¸° 위한 {@link android.app.PendingIntent} ì„¤ì • ë°©ë²•ì€ ì‹œìž‘í•˜ëŠ” @@ -406,19 +406,19 @@ numMessages = 0; ì •ê·œ 액티비티 </dt> <dd> - ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì •ìƒì 작업 íë¦„ì˜ ì¼ë¶€ì¸ {@link android.app.Activity}를 + ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì •ìƒì 작업 íë¦„ì˜ ì¼ë¶€ì¸ {@link android.app.Activity}를 시작합니다. ì´ ìƒí™©ì—서 {@link android.app.PendingIntent}를 ì„¤ì •í•˜ì—¬ 새 ìž‘ì—…ì„ ì‹œìž‘í•˜ê³ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì •ìƒì ì¸ <i>'뒤로' </i>ë™ìž‘ì„ ìž¬í˜„í•˜ëŠ” ë°± 스íƒìœ¼ë¡œ {@link android.app.PendingIntent}를 ì œê³µí•©ë‹ˆë‹¤. <p> - Gmail 앱ì—서 보낸 ì•Œë¦¼ì´ ì´ê²ƒì„ 잘 ë³´ì—¬ì¤ë‹ˆë‹¤. í•˜ë‚˜ì˜ ì´ë©”ì¼ ë©”ì‹œì§€ì— ëŒ€í•œ -ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 메시지 ìžì²´ë¥¼ 보게 ë©ë‹ˆë‹¤. <b>뒤로</b>를 터치하면 + Gmail 앱ì—서 보낸 ì•Œë¦¼ì´ ì´ê²ƒì„ 잘 ë³´ì—¬ì¤ë‹ˆë‹¤. í•˜ë‚˜ì˜ ì´ë©”ì¼ ë©”ì‹œì§€ì— ëŒ€í•œ +ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 메시지 ìžì²´ë¥¼ 보게 ë©ë‹ˆë‹¤. <b>뒤로</b>를 터치하면 알림ì—서 들어간 ê²ƒì´ ì•„ë‹ˆë¼ ë©”ì¸ ìŠ¤í¬ë¦°ì—서 Gmailì— ë“¤ì–´ê°„ 것처럼 Gmailì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니다. </p> <p> - ì´ê²ƒì€ ì•Œë¦¼ì„ í„°ì¹˜í•˜ê¸°ë§Œ 하면 ì–´ëŠ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ìžˆë“ ê´€ê³„ ì—†ì´ ë°œìƒí•˜ëŠ” -ì¼ìž…니다. 예를 들어, Gmailì—서 메시지를 작성하다가 + ì´ê²ƒì€ ì•Œë¦¼ì„ í„°ì¹˜í•˜ê¸°ë§Œ 하면 ì–´ëŠ ì• í”Œë¦¬ì¼€ì´ì…˜ì— ìžˆë“ ê´€ê³„ ì—†ì´ ë°œìƒí•˜ëŠ” +ì¼ìž…니다. 예를 들어, Gmailì—서 메시지를 작성하다가 한 ì´ë©”ì¼ì— 대한 ì•Œë¦¼ì„ í´ë¦í•˜ë©´ 해당 ì´ë©”ì¼ë¡œ 바로 ì´ë™í•©ë‹ˆë‹¤. <i>뒤로</i> 를 터치하면 작성 ì¤‘ì¸ ë©”ì‹œì§€ê°€ ì•„ë‹ˆë¼ ë°›ì€íŽ¸ì§€í•¨ê³¼ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니다. @@ -429,18 +429,18 @@ Gmailì— ë“¤ì–´ê°„ 것처럼 Gmailì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니 </dt> <dd> {@link android.app.Activity}ê°€ 알림ì—서 시작ë 경우 사용ìžì—게는 ì´ê²ƒë§Œ 보입니다. - {@link android.app.Activity}는 알림 ìžì²´ì—서 표시하기 ì–´ë ¤ìš´ ì •ë³´ë¥¼ ì œê³µí•˜ë¯€ë¡œ -ì–´ë–¤ ë©´ì—서는 ì•Œë¦¼ì„ í™•ìž¥í•˜ëŠ” 셈입니다. ì´ ìƒí™©ì—서는, -{@link android.app.PendingIntent}를 ì„¤ì •í•˜ê³ ìƒˆë¡œìš´ 작업ì—서 시작합니다. -ì‹œìž‘ëœ {@link android.app.Activity}는 -ì• í”Œë¦¬ì¼€ì´ì…˜ 액티비티 íë¦„ì˜ ì¼ë¶€ê°€ 아니므로 ë°± 스íƒì„ ìƒì„±í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. <i>뒤로</i>를 í´ë¦í•˜ë©´ 사용ìžëŠ” ì—¬ì „ížˆ + {@link android.app.Activity}는 알림 ìžì²´ì—서 표시하기 ì–´ë ¤ìš´ ì •ë³´ë¥¼ ì œê³µí•˜ë¯€ë¡œ +ì–´ë–¤ ë©´ì—서는 ì•Œë¦¼ì„ í™•ìž¥í•˜ëŠ” 셈입니다. ì´ ìƒí™©ì—서는, +{@link android.app.PendingIntent}를 ì„¤ì •í•˜ê³ ìƒˆë¡œìš´ 작업ì—서 시작합니다. +ì‹œìž‘ëœ {@link android.app.Activity}는 +ì• í”Œë¦¬ì¼€ì´ì…˜ 액티비티 íë¦„ì˜ ì¼ë¶€ê°€ 아니므로 ë°± 스íƒì„ ìƒì„±í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. <i>뒤로</i>를 í´ë¦í•˜ë©´ 사용ìžëŠ” ì—¬ì „ížˆ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니다. </dd> </dl> <!-- ------------------------------------------------------------------------------------------ --> <h3 id="DirectEntry">ì •ê·œ 액티비티 PendingIntent ì„¤ì •</h3> <p> - ì§ì ‘ ì§„ìž… + ì§ì ‘ ì§„ìž… {@link android.app.Activity}를 시작하는 {@link android.app.PendingIntent}를 ì„¤ì •í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì€ ë‹¨ê³„ë¥¼ 따르ì‹ì‹œì˜¤. </p> <ol> @@ -448,7 +448,7 @@ Gmailì— ë“¤ì–´ê°„ 것처럼 Gmailì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니 매니페스트ì—서 ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ {@link android.app.Activity} ê³„ì¸µì„ ì •ì˜í•©ë‹ˆë‹¤. <ol style="list-style-type: lower-alpha;"> <li> - Android 4.0.3 ì´ì „ì— ëŒ€í•œ ì§€ì›ì„ 추가합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´ + Android 4.0.3 ì´ì „ì— ëŒ€í•œ ì§€ì›ì„ 추가합니다. ì´ë ‡ê²Œ í•˜ë ¤ë©´ <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code> 요소를 @@ -506,39 +506,39 @@ Gmailì— ë“¤ì–´ê°„ 것처럼 Gmailì„ í†µí•´ ë©”ì¸ ìŠ¤í¬ë¦°ìœ¼ë¡œ ëŒì•„갑니 TaskStackBuilder.create()}를 호출하여 ìŠ¤íƒ ë¹Œë”를 ìƒì„±í•©ë‹ˆë‹¤. </li> <li> - + {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}ì„ í˜¸ì¶œí•˜ì—¬ ìŠ¤íƒ ë¹Œë”를 ë°± 스íƒì— 추가합니다. 매니페스트ì—서 ì •ì˜í•œ ê³„ì¸µì˜ ê° {@link android.app.Activity}ì˜ ê²½ìš°, ë°± 스íƒì— -{@link android.app.Activity}를 시작하는 {@link android.content.Intent} ê°ì²´ê°€ í¬í•¨ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 새로운 작업ì—서 +{@link android.app.Activity}를 시작하는 {@link android.content.Intent} ê°ì²´ê°€ í¬í•¨ë©ë‹ˆë‹¤. ì´ ë©”ì„œë“œëŠ” 새로운 작업ì—서 스íƒì„ 시작하는 í”Œëž˜ê·¸ë„ ì¶”ê°€í•©ë‹ˆë‹¤. <p class="note"> - <strong>ì°¸ê³ :</strong> + <strong>ì°¸ê³ :</strong> {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}ì— ëŒ€í•œ ì¸ìˆ˜ê°€ -ì‹œìž‘ëœ {@link android.app.Activity}ì˜ ì°¸ì¡°ì´ê¸°ëŠ” 하지만, ì´ ë©”ì„œë“œ í˜¸ì¶œì€ +ì‹œìž‘ëœ {@link android.app.Activity}ì˜ ì°¸ì¡°ì´ê¸°ëŠ” 하지만, ì´ ë©”ì„œë“œ í˜¸ì¶œì€ {@link android.app.Activity}를 시작하는 {@link android.content.Intent}를 추가하지 않습니다. ëŒ€ì‹ , ê·¸ ë¶€ë¶„ì€ ë‹¤ìŒ ë‹¨ê³„ì—서 해결합니다. </p> </li> <li> - -{@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}를 호출하여 {@link android.app.Activity}를 시작하는 {@link android.content.Intent}를 + +{@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}를 호출하여 {@link android.app.Activity}를 시작하는 {@link android.content.Intent}를 추가합니다. 첫 번째 단계ì—서 ìƒì„±í•œ {@link android.content.Intent}를 {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}ì— ëŒ€í•œ ì¸ìˆ˜ë¡œ ì „ë‹¬í•©ë‹ˆë‹¤. </li> <li> - í•„ìš”í• ê²½ìš° + í•„ìš”í• ê²½ìš° {@link android.support.v4.app.TaskStackBuilder#editIntentAt TaskStackBuilder.editIntentAt()}ì„ í˜¸ì¶œí•˜ì—¬ 스íƒì—서{@link android.content.Intent} ê°ì²´ì— 대한 ì¸ìˆ˜ë¥¼ 추가합니다. ì´ê²ƒì€ 사용ìžê°€ <i>'뒤로'</i>를 사용하여 íƒìƒ‰í• 때 대ìƒ{@link android.app.Activity}ê°€ ì˜ë¯¸ 있는 ë°ì´í„°ë¥¼ 표시하ë„ë¡ ë³´ìž¥í•˜ê¸° 위해 때때로 필요한 ì ˆì°¨ìž…ë‹ˆë‹¤. </li> <li> - ì´ ë°± 스íƒì— 대한 {@link android.app.PendingIntent}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë•Œ + ì´ ë°± 스íƒì— 대한 {@link android.app.PendingIntent}를 ê°€ì ¸ì˜µë‹ˆë‹¤. ì´ë•Œ {@link android.support.v4.app.TaskStackBuilder#getPendingIntent getPendingIntent()}를 호출하는 ë°©ë²•ì„ ì”니다. - 그러면 ì´ {@link android.app.PendingIntent}를 + 그러면 ì´ {@link android.app.PendingIntent}를 {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}ì— ëŒ€í•œ ì¸ìˆ˜ë¡œ ì‚¬ìš©í• ìˆ˜ 있습니다. </li> @@ -569,21 +569,21 @@ mNotificationManager.notify(id, builder.build()); <!-- ------------------------------------------------------------------------------------------ --> <h3 id="ExtendedNotification">특수 액티비티 PendingIntent ì„¤ì •</h3> <p> - ë‹¤ìŒ ì„¹ì…˜ì—서는 특수 액티비티 + ë‹¤ìŒ ì„¹ì…˜ì—서는 특수 액티비티 {@link android.app.PendingIntent}를 ì„¤ì •í•˜ëŠ” ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. </p> <p> - 특수 {@link android.app.Activity}ì—는 ë°± 스íƒì´ 필요하지 않습니다. ë”°ë¼ì„œ 매니페스트ì—서 ì´ê²ƒì˜ -{@link android.app.Activity} ê³„ì¸µì„ ì •ì˜í•˜ì§€ ì•Šì•„ë„ ë˜ê³ , -ë°± 스íƒì„ 구축하기 위해 -{@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}ì„ -호출하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ë¥¼ 사용하여 {@link android.app.Activity} 작업 ì˜µì…˜ì„ ì„¤ì •í•˜ê³ , -{@link android.app.PendingIntent}를 ìƒì„±í•˜ì‹ì‹œì˜¤. ì´ë•Œ + 특수 {@link android.app.Activity}ì—는 ë°± 스íƒì´ 필요하지 않습니다. ë”°ë¼ì„œ 매니페스트ì—서 ì´ê²ƒì˜ +{@link android.app.Activity} ê³„ì¸µì„ ì •ì˜í•˜ì§€ ì•Šì•„ë„ ë˜ê³ , +ë°± 스íƒì„ 구축하기 위해 +{@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}ì„ +호출하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ëŒ€ì‹ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ë¥¼ 사용하여 {@link android.app.Activity} 작업 ì˜µì…˜ì„ ì„¤ì •í•˜ê³ , +{@link android.app.PendingIntent}를 ìƒì„±í•˜ì‹ì‹œì˜¤. ì´ë•Œ {@link android.app.PendingIntent#getActivity getActivity()}를 호출하는 ë°©ë²•ì„ ì”니다. </p> <ol> <li> - 매니페스트ì—서 ë‹¤ìŒ ì†ì„±ì„ {@link android.app.Activity}ì— ëŒ€í•œ + 매니페스트ì—서 ë‹¤ìŒ ì†ì„±ì„ {@link android.app.Activity}ì— ëŒ€í•œ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> ìš”ì†Œì— ì¶”ê°€í•©ë‹ˆë‹¤. <dl> @@ -597,10 +597,10 @@ mNotificationManager.notify(id, builder.build()); <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">android:taskAffinity</a>=""</code> </dt> <dd> - ì´ê²ƒì€ 개발ìžê°€ 코드ì—서 ì„¤ì •í•˜ëŠ” -{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} 플래그와 ë”불어 -ì´ {@link android.app.Activity}ê°€ -ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 작업으로 들어가지 않게 보장합니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìœ ì‚¬ì„±ì„ + ì´ê²ƒì€ 개발ìžê°€ 코드ì—서 ì„¤ì •í•˜ëŠ” +{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} 플래그와 ë”불어 +ì´ {@link android.app.Activity}ê°€ +ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 작업으로 들어가지 않게 보장합니다. ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ìœ ì‚¬ì„±ì„ ê°€ì§€ê³ ìžˆëŠ” 기존 ìž‘ì—…ì€ ëª¨ë‘ ì˜í–¥ì„ 받지 않습니다. </dd> <dt> @@ -629,23 +629,23 @@ mNotificationManager.notify(id, builder.build()); ì•Œë¦¼ì„ êµ¬ì¶• ë° ë°œí–‰í•©ë‹ˆë‹¤. <ol style="list-style-type: lower-alpha;"> <li> - + {@link android.app.Activity}를 시작하는 {@link android.content.Intent}를 ìƒì„±í•©ë‹ˆë‹¤. </li> <li> - {@link android.app.Activity}ê°€ 새로운, 빈 작업ì—서 시작ë˜ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤. ì´ë•Œ -{@link android.content.Intent#setFlags setFlags()}를 + {@link android.app.Activity}ê°€ 새로운, 빈 작업ì—서 시작ë˜ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤. ì´ë•Œ +{@link android.content.Intent#setFlags setFlags()}를 {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} - ë° + ë° {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_CLEAR_TASK} 플래그와 함께 호출하면 ë©ë‹ˆë‹¤. </li> <li> {@link android.content.Intent}ì— í•„ìš”í•œ 다른 ëª¨ë“ ì˜µì…˜ì„ ì„¤ì •í•©ë‹ˆë‹¤. </li> <li> - {@link android.app.PendingIntent}를 {@link android.content.Intent}로부터 + {@link android.app.PendingIntent}를 {@link android.content.Intent}로부터 ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ {@link android.app.PendingIntent#getActivity getActivity()}를 호출하면 ë©ë‹ˆë‹¤. - 그러면 ì´ {@link android.app.PendingIntent}를 + 그러면 ì´ {@link android.app.PendingIntent}를 {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}ì— ëŒ€í•œ ì¸ìˆ˜ë¡œ ì‚¬ìš©í• ìˆ˜ 있습니다. </li> @@ -687,24 +687,24 @@ mNotificationManager.notify(id, builder.build()); <!-- ------------------------------------------------------------------------------------------ --> <h2 id="Progress">알림ì—서 ì§„í–‰ ìƒíƒœ 표시</h2> <p> - 알림ì—는 사용ìžì—게 ì§„í–‰ ì¤‘ì¸ ìž‘ì—…ì˜ ìƒíƒœë¥¼ 보여주는 -ì• ë‹ˆë©”ì´ì…˜ ì§„í–‰ 표시기를 í¬í•¨í• 수 있습니다. ìž‘ì—…ì´ ì–¼ë§ˆë‚˜ 걸릴지, 주어진 시ì ì— ì–´ëŠ ì •ë„ ì™„ë£Œë˜ì—ˆëŠ”ì§€ë¥¼ ì¶”ì •í• ìˆ˜ 있는 경우 -í‘œì‹œê¸°ì˜ "í™•ì •ì " 형태(ì§„í–‰ë¥ í‘œì‹œì¤„)를 -사용하ì‹ì‹œì˜¤. ìž‘ì—…ì˜ ê¸¸ì´ë¥¼ ì¶”ì •í• ìˆ˜ 없으면, í‘œì‹œê¸°ì˜ + 알림ì—는 사용ìžì—게 ì§„í–‰ ì¤‘ì¸ ìž‘ì—…ì˜ ìƒíƒœë¥¼ 보여주는 +ì• ë‹ˆë©”ì´ì…˜ ì§„í–‰ 표시기를 í¬í•¨í• 수 있습니다. ìž‘ì—…ì´ ì–¼ë§ˆë‚˜ 걸릴지, 주어진 시ì ì— ì–´ëŠ ì •ë„ ì™„ë£Œë˜ì—ˆëŠ”ì§€ë¥¼ ì¶”ì •í• ìˆ˜ 있는 경우 +í‘œì‹œê¸°ì˜ "í™•ì •ì " 형태(ì§„í–‰ë¥ í‘œì‹œì¤„)를 +사용하ì‹ì‹œì˜¤. ìž‘ì—…ì˜ ê¸¸ì´ë¥¼ ì¶”ì •í• ìˆ˜ 없으면, í‘œì‹œê¸°ì˜ "ë¹„í™•ì •ì " 형태(액티비티 표시기)를 사용하ì‹ì‹œì˜¤. </p> <p> - ì§„í–‰ ìƒíƒœ 표시기는 + ì§„í–‰ ìƒíƒœ 표시기는 {@link android.widget.ProgressBar} í´ëž˜ìŠ¤ì˜ í”Œëž«í¼ êµ¬í˜„ìœ¼ë¡œ 표시ë©ë‹ˆë‹¤. </p> <p> - Android 4.0부터 시작ë˜ëŠ” 플랫í¼ì—서 ì§„í–‰ ìƒíƒœ 표시기를 ì‚¬ìš©í•˜ë ¤ë©´, -{@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}를 호출하ì‹ì‹œì˜¤. ì´ì „ -ë²„ì „ì˜ ê²½ìš°, ê°œë°œìž ë‚˜ë¦„ì˜ ì‚¬ìš©ìž ì§€ì • 알림 ë ˆì´ì•„ì›ƒì„ ìƒì„±í•´ì•¼ 하며 ì—¬ê¸°ì— + Android 4.0부터 시작ë˜ëŠ” 플랫í¼ì—서 ì§„í–‰ ìƒíƒœ 표시기를 ì‚¬ìš©í•˜ë ¤ë©´, +{@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}를 호출하ì‹ì‹œì˜¤. ì´ì „ +ë²„ì „ì˜ ê²½ìš°, ê°œë°œìž ë‚˜ë¦„ì˜ ì‚¬ìš©ìž ì§€ì • 알림 ë ˆì´ì•„ì›ƒì„ ìƒì„±í•´ì•¼ 하며 ì—¬ê¸°ì— {@link android.widget.ProgressBar} 보기가 í¬í•¨ë˜ì–´ 있어야 합니다. </p> <p> - ë‹¤ìŒ ì„¹ì…˜ì€ + ë‹¤ìŒ ì„¹ì…˜ì€ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}를 사용하여 ì•Œë¦¼ì˜ ì§„í–‰ ìƒíƒœë¥¼ 표시하는 ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤. </p> <!-- ------------------------------------------------------------------------------------------ --> @@ -712,15 +712,15 @@ mNotificationManager.notify(id, builder.build()); <p> í™•ì •ì ì¸ ì§„í–‰ë¥ í‘œì‹œì¤„ì„ í‘œì‹œí•˜ë ¤ë©´ {@link android.support.v4.app.NotificationCompat.Builder#setProgress -setProgress(max, progress, false)}를 호출하여 í‘œì‹œì¤„ì„ ì•Œë¦¼ì— ì¶”ê°€í•˜ê³ , ê·¸ 다ìŒì— ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ìž‘ì—…ì´ ì§„í–‰ë˜ëŠ” ë™ì•ˆ -<code>progress</code>를 ì¦ê°€ì‹œí‚¤ê³ ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ìž‘ì—…ì´ ëë‚ ë¬´ë µ -<code>progress</code>ê°€ <code>max</code>와 같아야 합니다. +setProgress(max, progress, false)}를 호출하여 í‘œì‹œì¤„ì„ ì•Œë¦¼ì— ì¶”ê°€í•˜ê³ , ê·¸ 다ìŒì— ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ìž‘ì—…ì´ ì§„í–‰ë˜ëŠ” ë™ì•ˆ +<code>progress</code>를 ì¦ê°€ì‹œí‚¤ê³ ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ìž‘ì—…ì´ ëë‚ ë¬´ë µ +<code>progress</code>ê°€ <code>max</code>와 같아야 합니다. {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}를 호출하는 보편ì ì¸ ë°©ë²•ì€ <code>max</code>를 100ì— ì„¤ì •í•˜ê³ ìž‘ì—…ì— ëŒ€í•œ "완료 비율" ê°’ì— ë”°ë¼ <code>progress</code>를 ì¦ê°€ì‹œí‚¤ëŠ” 것입니다. </p> <p> - ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ ì§„í–‰ë¥ í‘œì‹œì¤„ì´ í‘œì‹œë˜ëŠ” ìƒíƒœë¡œ 둘 ìˆ˜ë„ ìžˆê³ , ì œê±°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì–´ëŠ ê²½ìš°ë¥¼ íƒí•˜ë”ë¼ë„ + ìž‘ì—…ì´ ì™„ë£Œë˜ë©´ ì§„í–‰ë¥ í‘œì‹œì¤„ì´ í‘œì‹œë˜ëŠ” ìƒíƒœë¡œ 둘 ìˆ˜ë„ ìžˆê³ , ì œê±°í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì–´ëŠ ê²½ìš°ë¥¼ íƒí•˜ë”ë¼ë„ 알림 í…스트를 ì—…ë°ì´íŠ¸í•˜ì—¬ ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆë‹¤ê³ 표시하는 ê²ƒì„ ìžŠì§€ 마ì‹ì‹œì˜¤. ì§„í–‰ë¥ í‘œì‹œì¤„ì„ ì œê±°í•˜ë ¤ë©´, {@link android.support.v4.app.NotificationCompat.Builder#setProgress @@ -773,15 +773,15 @@ new Thread( <p> ë¹„í™•ì •ì 액티비티 표시기를 í‘œì‹œí•˜ë ¤ë©´, {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, true)}으로 ì•Œë¦¼ì— í‘œì‹œê¸°ë¥¼ ì¶”ê°€í•˜ê³ (처ìŒì˜ ì¸ìˆ˜ ë‘ ê°œëŠ” 무시합니다) -, ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ê·¸ 결과로 +, ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ê·¸ 결과로 ì§„í–‰ë¥ í‘œì‹œì¤„ê³¼ ê°™ì€ ìŠ¤íƒ€ì¼ì˜ 표시기가 나타납니다. 다만 ì´ê²ƒì€ ì• ë‹ˆë©”ì´ì…˜ì´ ê³„ì† ì§„í–‰ 중입니다. </p> <p> - ìž‘ì—…ì„ ì‹œìž‘í• ë•Œ ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ì• ë‹ˆë©”ì´ì…˜ì€ -ì•Œë¦¼ì„ ìˆ˜ì •í• ë•Œê¹Œì§€ 실행ë©ë‹ˆë‹¤. ìž‘ì—…ì´ ì™„ë£Œë˜ë©´, + ìž‘ì—…ì„ ì‹œìž‘í• ë•Œ ì•Œë¦¼ì„ ë°œí–‰í•©ë‹ˆë‹¤. ì• ë‹ˆë©”ì´ì…˜ì€ +ì•Œë¦¼ì„ ìˆ˜ì •í• ë•Œê¹Œì§€ 실행ë©ë‹ˆë‹¤. ìž‘ì—…ì´ ì™„ë£Œë˜ë©´, {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)}를 í˜¸ì¶œí•˜ê³ ì•Œë¦¼ì„ ì—…ë°ì´íŠ¸í•˜ì—¬ 액티비티 표시기를 ì œê±°í•©ë‹ˆë‹¤. - ì´ ìž‘ì—…ì€ í•ìƒ í•´ì•¼ 합니다. 하지 않으면, ìž‘ì—…ì´ ì™„ë£Œë˜ë”ë¼ë„ ì• ë‹ˆë©”ì´ì…˜ì´ ê³„ì† ì‹¤í–‰ë©ë‹ˆë‹¤. ë˜í•œ, + ì´ ìž‘ì—…ì€ í•ìƒ í•´ì•¼ 합니다. 하지 않으면, ìž‘ì—…ì´ ì™„ë£Œë˜ë”ë¼ë„ ì• ë‹ˆë©”ì´ì…˜ì´ ê³„ì† ì‹¤í–‰ë©ë‹ˆë‹¤. ë˜í•œ, 알림 í…스트를 변경하여 ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆìŒì„ 나타내는 ê²ƒì„ ìžŠì§€ 마ì‹ì‹œì˜¤. </p> <p> @@ -806,19 +806,19 @@ mNotifyManager.notify(0, mBuilder.build()); <h2 id="metadata">알림 메타ë°ì´í„°</h2> -<p>ì•Œë¦¼ì€ +<p>ì•Œë¦¼ì€ ë‹¤ìŒ {@link android.support.v4.app.NotificationCompat.Builder} 메서드로 í• ë‹¹ëœ ë©”íƒ€ë°ì´í„°ì— ë”°ë¼ ì •ë ¬í• ìˆ˜ 있습니다.</p> <ul> - <li>{@link android.support.v4.app.NotificationCompat.Builder#setCategory(java.lang.String) setCategory()}는 + <li>{@link android.support.v4.app.NotificationCompat.Builder#setCategory(java.lang.String) setCategory()}는 기기가 ìš°ì„ ìˆœìœ„ ëª¨ë“œì¼ ë•Œ 앱 ì•Œë¦¼ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì„ ì‹œìŠ¤í…œì— ì „ë‹¬í•©ë‹ˆë‹¤ (예를 들어, ì•Œë¦¼ì´ ìˆ˜ì‹ ì „í™”ë‚˜ 채팅 메시지, 알람 ë“±ì„ ë‚˜íƒ€ë‚¼ 경우).</li> - <li>{@link android.support.v4.app.NotificationCompat.Builder#setPriority(int) setPriority()}는 -ìš°ì„ ìˆœìœ„ 필드가 í¬í•¨ëœ ì•Œë¦¼ì„ {@code PRIORITY_MAX} ë˜ëŠ” {@code PRIORITY_HIGH}로 ì„¤ì •í•˜ê³ , + <li>{@link android.support.v4.app.NotificationCompat.Builder#setPriority(int) setPriority()}는 +ìš°ì„ ìˆœìœ„ 필드가 í¬í•¨ëœ ì•Œë¦¼ì„ {@code PRIORITY_MAX} ë˜ëŠ” {@code PRIORITY_HIGH}로 ì„¤ì •í•˜ê³ , ì•Œë¦¼ì— ì†Œë¦¬ë‚˜ ì§„ë™ì´ í¬í•¨ë˜ì–´ ìžˆì„ ê²½ìš° ìž‘ì€ ë¶€ë™ ì°½ì— ë‚˜íƒ€ë‚˜ê²Œ 합니다.</li> - <li>{@link android.support.v4.app.NotificationCompat.Builder#addPerson(java.lang.String) addPerson()}ì„ -사용하면 ì•Œë¦¼ì— ì‚¬ëžŒ 목ë¡ì„ ì¶”ê°€í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 개발ìžì˜ ì•±ì€ ì´ ì‹ í˜¸ë¥¼ 사용하여 -ì‹œìŠ¤í…œì— ì§€ì •ëœ ì‚¬ëžŒë“¤ë¡œë¶€í„° ë°›ì€ ì•Œë¦¼ì„ í•¨ê»˜ 그룹화해야 í•œë‹¤ê³ ì•Œë¦¬ê±°ë‚˜, ì´ëŸ° 사람들로부터 ë°›ì€ ì•Œë¦¼ì„ + <li>{@link android.support.v4.app.NotificationCompat.Builder#addPerson(java.lang.String) addPerson()}ì„ +사용하면 ì•Œë¦¼ì— ì‚¬ëžŒ 목ë¡ì„ ì¶”ê°€í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 개발ìžì˜ ì•±ì€ ì´ ì‹ í˜¸ë¥¼ 사용하여 +ì‹œìŠ¤í…œì— ì§€ì •ëœ ì‚¬ëžŒë“¤ë¡œë¶€í„° ë°›ì€ ì•Œë¦¼ì„ í•¨ê»˜ 그룹화해야 í•œë‹¤ê³ ì•Œë¦¬ê±°ë‚˜, ì´ëŸ° 사람들로부터 ë°›ì€ ì•Œë¦¼ì„ ë”ìš± 중요한 것으로 순위를 ë†’ì¼ ìˆ˜ 있습니다.</li> </ul> @@ -832,10 +832,10 @@ mNotifyManager.notify(0, mBuilder.build()); <h2 id="Heads-up">헤드업 알림</h2> <p>Android 5.0(API ë ˆë²¨ 21)ì—서는 ì•Œë¦¼ì„ ìž‘ì€ ë¶€ë™ ì°½ì— ë‚˜íƒ€ë‚¼ 수 있습니다 -(다른 ë§ë¡œ <em>헤드업 알림</em>ì´ë¼ê³ 부릅니다). ì´ê²ƒì€ 기기가 활성 ìƒíƒœì¼ 때(즉, -기기가 ìž ê¸ˆ í•´ì œ ìƒíƒœì´ë©° í™”ë©´ì— ì¼œì ¸ 있는 경우) 해당ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì•Œë¦¼ì€ -ì™¸ê²¬ìƒ ì¼ë°˜ì ì¸ ì•Œë¦¼ì˜ ì†Œí˜• 형태와 비슷해 ë³´ì´ì§€ë§Œ, -해드업 알림ì—서는 작업 ë²„íŠ¼ë„ í‘œì‹œí•œë‹¤ëŠ” ì ì´ ë‹¤ë¦…ë‹ˆë‹¤. 사용ìžëŠ” 현재 ì•±ì„ ë– ë‚˜ì§€ ì•Šê³ ë„ +(다른 ë§ë¡œ <em>헤드업 알림</em>ì´ë¼ê³ 부릅니다). ì´ê²ƒì€ 기기가 활성 ìƒíƒœì¼ 때(즉, +기기가 ìž ê¸ˆ í•´ì œ ìƒíƒœì´ë©° í™”ë©´ì— ì¼œì ¸ 있는 경우) 해당ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì•Œë¦¼ì€ +ì™¸ê²¬ìƒ ì¼ë°˜ì ì¸ ì•Œë¦¼ì˜ ì†Œí˜• 형태와 비슷해 ë³´ì´ì§€ë§Œ, +해드업 알림ì—서는 작업 ë²„íŠ¼ë„ í‘œì‹œí•œë‹¤ëŠ” ì ì´ ë‹¤ë¦…ë‹ˆë‹¤. 사용ìžëŠ” 현재 ì•±ì„ ë– ë‚˜ì§€ ì•Šê³ ë„ í—¤ë“œì—… ì•Œë¦¼ì— ì¡°ì¹˜ë¥¼ 취하거나 ì´ë¥¼ ë¬´ì‹œí• ìˆ˜ 있습니다.</p> <p>헤드업 ì•Œë¦¼ì„ íŠ¸ë¦¬ê±°í• ìˆ˜ 있는 ì¡°ê±´ì˜ ì˜ˆì‹œë¥¼ 몇 가지 소개하면 다ìŒê³¼ 같습니다.</p> @@ -843,55 +843,55 @@ mNotifyManager.notify(0, mBuilder.build()); <ul> <li>ì‚¬ìš©ìž ì•¡í‹°ë¹„í‹°ê°€ ì „ì²´ 화면 모드ì´ê±°ë‚˜(ì•±ì´ {@link android.app.Notification#fullScreenIntent}를 ì‚¬ìš©í• ê²½ìš°)</li> - <li>ì•Œë¦¼ì˜ ìš°ì„ ìˆœìœ„ê°€ ë†’ê³ + <li>ì•Œë¦¼ì˜ ìš°ì„ ìˆœìœ„ê°€ ë†’ê³ ë²¨ì†Œë¦¬ë‚˜ ì§„ë™ì„ ì‚¬ìš©í• ê²½ìš°</li> </ul> <h2 id="lockscreenNotification">ìž ê¸ˆ 화면 알림</h2> -<p>Android 5.0 (API ë ˆë²¨ 21) 릴리스부터 ì•Œë¦¼ì´ ìž ê¸ˆ 화면ì—ë„ -ë‚˜íƒ€ë‚ ìˆ˜ 있게 ë˜ì—ˆìŠµë‹ˆë‹¤. ì•±ì€ ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë©´ 미디어 ìž¬ìƒ ì œì–´ì™€ 다른 보편ì ì¸ ìž‘ì—…ì„ -ì œê³µí• ìˆ˜ 있습니다. 사용ìžëŠ” ì„¤ì •ì„ í†µí•´ ìž ê¸ˆ í™”ë©´ì— ì•Œë¦¼ 표시 여부를 ì„ íƒí• 수 ìžˆê³ , +<p>Android 5.0 (API ë ˆë²¨ 21) 릴리스부터 ì•Œë¦¼ì´ ìž ê¸ˆ 화면ì—ë„ +ë‚˜íƒ€ë‚ ìˆ˜ 있게 ë˜ì—ˆìŠµë‹ˆë‹¤. ì•±ì€ ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë©´ 미디어 ìž¬ìƒ ì œì–´ì™€ 다른 보편ì ì¸ ìž‘ì—…ì„ +ì œê³µí• ìˆ˜ 있습니다. 사용ìžëŠ” ì„¤ì •ì„ í†µí•´ ìž ê¸ˆ í™”ë©´ì— ì•Œë¦¼ 표시 여부를 ì„ íƒí• 수 ìžˆê³ , 개발ìžëŠ” ì•±ì˜ ì•Œë¦¼ì´ ìž ê¸ˆ í™”ë©´ì— í‘œì‹œë ì§€ 여부를 ì§€ì •í• ìˆ˜ 있습니다.</p> <h3 id="visibility">가시성 ì„¤ì •</h3> -<p>보안 ìž ê¸ˆ í™”ë©´ì— ì•Œë¦¼ì´ ì–¼ë§ˆë‚˜ ìƒì„¸í•˜ê²Œ 표시ë 것ì¸ì§€ ê·¸ ìˆ˜ì¤€ì„ ì•±ì´ ì œì–´í• ìˆ˜ -있습니다. {@link android.support.v4.app.NotificationCompat.Builder#setVisibility(int) setVisibility()}를 í˜¸ì¶œí•˜ê³ +<p>보안 ìž ê¸ˆ í™”ë©´ì— ì•Œë¦¼ì´ ì–¼ë§ˆë‚˜ ìƒì„¸í•˜ê²Œ 표시ë 것ì¸ì§€ ê·¸ ìˆ˜ì¤€ì„ ì•±ì´ ì œì–´í• ìˆ˜ +있습니다. {@link android.support.v4.app.NotificationCompat.Builder#setVisibility(int) setVisibility()}를 í˜¸ì¶œí•˜ê³ ë‹¤ìŒ ê°’ 중 하나를 ì§€ì •í•©ë‹ˆë‹¤.</p> <ul> - <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}ì€ + <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}ì€ ì•Œë¦¼ì˜ ì „ì²´ 콘í…ì¸ ë¥¼ 표시합니다.</li> - <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_SECRET}ì€ + <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_SECRET}ì€ ì´ ì•Œë¦¼ì˜ ì–´ë–¤ ë¶€ë¶„ë„ í™”ë©´ì— í‘œì‹œí•˜ì§€ 않습니다.</li> - <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE}ì€ + <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE}ì€ ì•Œë¦¼ ì•„ì´ì½˜ê³¼ 콘í…ì¸ ì œëª© ë“±ì˜ ê¸°ë³¸ ì •ë³´ëŠ” 표시하지만 ì•Œë¦¼ì˜ ì „ì²´ 콘í…ì¸ ëŠ” 숨ê¹ë‹ˆë‹¤.</li> </ul> <p>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE}으로 ì„¤ì •í•˜ë©´ , -알림 콘í…ì¸ ì˜ ëŒ€ì²´ ë²„ì „ì„ ì œê³µí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 íŠ¹ì • 세부 사í•ë§Œ 숨ê¹ë‹ˆë‹¤. 예를 들어, -SMS 앱ì—서 <em>3ê°œì˜ ìƒˆ ë¬¸ìž ë©”ì‹œì§€ê°€ 있습니다.</em>ë¼ê³ í‘œì‹œí•˜ë©´ì„œë„ -ë¬¸ìž ë©”ì‹œì§€ì˜ ë‚´ìš©ê³¼ ë°œì‹ ìžëŠ” 숨길 수 있습니다. ì´ ëŒ€ì²´ ì•Œë¦¼ì„ ì œê³µí•˜ë ¤ë©´, ìš°ì„ ëŒ€ì²´ ì•Œë¦¼ì„ ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ -{@link android.support.v4.app.NotificationCompat.Builder}를 사용합니다. 비공개 알림 ê°ì²´ë¥¼ -ìƒì„±í•˜ëŠ” 경우, 대체 ì•Œë¦¼ì„ ì´ì— ì²¨ë¶€í• ë•Œ +알림 콘í…ì¸ ì˜ ëŒ€ì²´ ë²„ì „ì„ ì œê³µí• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 íŠ¹ì • 세부 사í•ë§Œ 숨ê¹ë‹ˆë‹¤. 예를 들어, +SMS 앱ì—서 <em>3ê°œì˜ ìƒˆ ë¬¸ìž ë©”ì‹œì§€ê°€ 있습니다.</em>ë¼ê³ í‘œì‹œí•˜ë©´ì„œë„ +ë¬¸ìž ë©”ì‹œì§€ì˜ ë‚´ìš©ê³¼ ë°œì‹ ìžëŠ” 숨길 수 있습니다. ì´ ëŒ€ì²´ ì•Œë¦¼ì„ ì œê³µí•˜ë ¤ë©´, ìš°ì„ ëŒ€ì²´ ì•Œë¦¼ì„ ìƒì„±í•©ë‹ˆë‹¤. ì´ë•Œ +{@link android.support.v4.app.NotificationCompat.Builder}를 사용합니다. 비공개 알림 ê°ì²´ë¥¼ +ìƒì„±í•˜ëŠ” 경우, 대체 ì•Œë¦¼ì„ ì´ì— ì²¨ë¶€í• ë•Œ {@link android.support.v4.app.NotificationCompat.Builder#setPublicVersion(android.app.Notification) setPublicVersion()} 메서드를 통합니다.</p> <h3 id="controllingMedia">ìž ê¸ˆ 화면ì—서 미디어 ìž¬ìƒ ì œì–´</h3> -<p>Android 5.0(API ë ˆë²¨ 21)ì˜ ìž ê¸ˆ 화면ì—서는 ë” ì´ìƒ -{@link android.media.RemoteControlClient}를 기반으로 한 미디어 ì œì–´ë¥¼ 표시하지 않습니다. ì´ëŠ” 사용ë˜ì§€ ì•Šê³ ìžˆê¸° 때문입니다. ëŒ€ì‹ , -{@link android.app.Notification.MediaStyle} í…œí”Œë¦¿ì„ +<p>Android 5.0(API ë ˆë²¨ 21)ì˜ ìž ê¸ˆ 화면ì—서는 ë” ì´ìƒ +{@link android.media.RemoteControlClient}를 기반으로 한 미디어 ì œì–´ë¥¼ 표시하지 않습니다. ì´ëŠ” 사용ë˜ì§€ ì•Šê³ ìžˆê¸° 때문입니다. ëŒ€ì‹ , +{@link android.app.Notification.MediaStyle} í…œí”Œë¦¿ì„ {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()} 메서드와 함께 사용하ì‹ì‹œì˜¤. ì´ ë©”ì„œë“œëŠ” ìž‘ì—…ì„ í´ë¦í• 수 있는 ì•„ì´ì½˜ìœ¼ë¡œ 변환해ì¤ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì´ í…œí”Œë¦¿ê³¼ {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()} -메서드는 ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ì— í¬í•¨ë˜ì–´ 있지 않으므로 ì´ ê¸°ëŠ¥ì€ Android 5.0 ì´ìƒì—서만 +<p class="note"><strong>ì°¸ê³ :</strong> ì´ í…œí”Œë¦¿ê³¼ {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()} +메서드는 ì§€ì› ë¼ì´ë¸ŒëŸ¬ë¦¬ì— í¬í•¨ë˜ì–´ 있지 않으므로 ì´ ê¸°ëŠ¥ì€ Android 5.0 ì´ìƒì—서만 실행ë©ë‹ˆë‹¤.</p> -<p>Android 5.0ì˜ ìž ê¸ˆ 화면ì—서 미디어 ìž¬ìƒ ì œì–´ë¥¼ í‘œì‹œí•˜ë ¤ë©´, -ìœ„ì— ì„¤ëª…í•œ 바와 ê°™ì´ ê°€ì‹œì„±ì„ {@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}으로 ì„¤ì •í•©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ë‹¤ìŒ ìƒ˜í”Œ 코드ì—서 설명한 바와 ê°™ì´ ìž‘ì—…ì„ ì¶”ê°€í•˜ê³ +<p>Android 5.0ì˜ ìž ê¸ˆ 화면ì—서 미디어 ìž¬ìƒ ì œì–´ë¥¼ í‘œì‹œí•˜ë ¤ë©´, +ìœ„ì— ì„¤ëª…í•œ 바와 ê°™ì´ ê°€ì‹œì„±ì„ {@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}으로 ì„¤ì •í•©ë‹ˆë‹¤. 그런 ë‹¤ìŒ ë‹¤ìŒ ìƒ˜í”Œ 코드ì—서 설명한 바와 ê°™ì´ ìž‘ì—…ì„ ì¶”ê°€í•˜ê³ {@link android.app.Notification.MediaStyle} í…œí”Œë¦¿ì„ ì„¤ì •í•©ë‹ˆë‹¤. </p> @@ -914,7 +914,7 @@ Notification notification = new Notification.Builder(context) .build(); </pre> -<p class="note"><strong>ì°¸ê³ :</strong> {@link android.media.RemoteControlClient}를 +<p class="note"><strong>ì°¸ê³ :</strong> {@link android.media.RemoteControlClient}를 사용하지 않게 ëœ ê²ƒì€ ë¯¸ë””ì–´ ì œì–´ì— ì´ì™¸ì—ë„ ë” ë§Žì€ ì˜í–¥ì„ 미칩니다. 미디어 ì„¸ì…˜ì„ ê´€ë¦¬í•˜ê³ ìž¬ìƒì„ ì œì–´í•˜ê¸° 위한 새 APIì— ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="{@docRoot}about/versions/android-5.0.html#MediaPlaybackControl">미디어 ìž¬ìƒ ì œì–´</a>를 참조하ì‹ì‹œì˜¤.</p> @@ -923,57 +923,57 @@ Notification notification = new Notification.Builder(context) <!-- ------------------------------------------------------------------------------------------ --> <h2 id="CustomNotification">ì‚¬ìš©ìž ì§€ì • 알림 ë ˆì´ì•„웃</h2> <p> - 알림 í”„ë ˆìž„ì›Œí¬ë¥¼ 사용하면 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì •ì˜í• 수 있습니다. + 알림 í”„ë ˆìž„ì›Œí¬ë¥¼ 사용하면 ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì •ì˜í• 수 있습니다. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì€ {@link android.widget.RemoteViews} ê°ì²´ì—서 ì•Œë¦¼ì˜ ì™¸ê´€ì„ ì •ì˜í•©ë‹ˆë‹¤. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„웃 ì•Œë¦¼ì€ ì¼ë°˜ì ì¸ ì•Œë¦¼ê³¼ 비슷하지만, ì´ë“¤ì€ XML ë ˆì´ì•„웃 파ì¼ì—서 ì •ì˜í•œ {@link android.widget.RemoteViews}ì— ê¸°ì´ˆí•©ë‹ˆë‹¤. </p> <p> - ì‚¬ìš©ìž ì§€ì • 알림 ë ˆì´ì•„ì›ƒì— ì‚¬ìš©í• ìˆ˜ 있는 높ì´ëŠ” 알림 ë³´ê¸°ì— ë”°ë¼ ë‹¤ë¦…ë‹ˆë‹¤. ì¼ë°˜ + ì‚¬ìš©ìž ì§€ì • 알림 ë ˆì´ì•„ì›ƒì— ì‚¬ìš©í• ìˆ˜ 있는 높ì´ëŠ” 알림 ë³´ê¸°ì— ë”°ë¼ ë‹¤ë¦…ë‹ˆë‹¤. ì¼ë°˜ 보기 ë ˆì´ì•„ì›ƒì€ 64dp로 ì œí•œë˜ì–´ 있으며 확장 보기 ë ˆì´ì•„ì›ƒì€ 256dp로 ì œí•œë˜ì–´ 있습니다. </p> <p> - ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ë ¤ë©´ -XML ë ˆì´ì•„웃 파ì¼ì„ 팽창하는 {@link android.widget.RemoteViews} ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 것부터 시작합니다. 그런 다ìŒ, + ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ë ¤ë©´ +XML ë ˆì´ì•„웃 파ì¼ì„ 팽창하는 {@link android.widget.RemoteViews} ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” 것부터 시작합니다. 그런 다ìŒ, -{@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}ê³¼ ê°™ì€ ë©”ì„œë“œë¥¼ 호출하는 ëŒ€ì‹ -{@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}를 호출합니다. ì‚¬ìš©ìž ì§€ì • 알림ì—서 +{@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}ê³¼ ê°™ì€ ë©”ì„œë“œë¥¼ 호출하는 ëŒ€ì‹ +{@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}를 호출합니다. ì‚¬ìš©ìž ì§€ì • 알림ì—서 콘í…ì¸ ì„¸ë¶€ ì •ë³´ë¥¼ ì„¤ì •í•˜ë ¤ë©´ {@link android.widget.RemoteViews}ì˜ ë©”ì„œë“œë¥¼ 사용하여 ë³´ê¸°ì˜ í•˜ìœ„ ìš”ì†Œì— ëŒ€í•œ ê°’ì„ ì„¤ì •í•©ë‹ˆë‹¤. </p> <ol> <li> - ì•Œë¦¼ì— ëŒ€í•œ XML ë ˆì´ì•„ì›ƒì€ ë³„ë„ì˜ íŒŒì¼ì— ìƒì„±í•˜ì‹ì‹œì˜¤. íŒŒì¼ ì´ë¦„ì€ ì›í•˜ëŠ” 대로 + ì•Œë¦¼ì— ëŒ€í•œ XML ë ˆì´ì•„ì›ƒì€ ë³„ë„ì˜ íŒŒì¼ì— ìƒì„±í•˜ì‹ì‹œì˜¤. íŒŒì¼ ì´ë¦„ì€ ì›í•˜ëŠ” 대로 아무 것ì´ë‚˜ ì‚¬ìš©í•´ë„ ì¢‹ì§€ë§Œ, 확장ìžëŠ” <code>.xml</code>ì„ ì‚¬ìš©í•´ì•¼ 합니다. </li> <li> - 앱ì—서 {@link android.widget.RemoteViews} 메서드를 사용하여 ì•Œë¦¼ì˜ ì•„ì´ì½˜ê³¼ í…스트를 -ì •ì˜í•©ë‹ˆë‹¤. ì´ {@link android.widget.RemoteViews} ê°ì²´ë¥¼ -{@link android.support.v4.app.NotificationCompat.Builder} ì•ˆì— ë„£ìœ¼ì‹ì‹œì˜¤. -{@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}를 호출하면 ë©ë‹ˆë‹¤. ë°°ê²½ -{@link android.graphics.drawable.Drawable}ì„ + 앱ì—서 {@link android.widget.RemoteViews} 메서드를 사용하여 ì•Œë¦¼ì˜ ì•„ì´ì½˜ê³¼ í…스트를 +ì •ì˜í•©ë‹ˆë‹¤. ì´ {@link android.widget.RemoteViews} ê°ì²´ë¥¼ +{@link android.support.v4.app.NotificationCompat.Builder} ì•ˆì— ë„£ìœ¼ì‹ì‹œì˜¤. +{@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}를 호출하면 ë©ë‹ˆë‹¤. ë°°ê²½ +{@link android.graphics.drawable.Drawable}ì„ {@link android.widget.RemoteViews} ê°ì²´ì—서 ì„¤ì •í•˜ëŠ” ê²ƒì€ ì‚¼ê°€í•˜ì‹ì‹œì˜¤. í…스트 색ìƒì„ ì½ì„ 수 없게 ë ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. </li> </ol> <p> - {@link android.widget.RemoteViews} í´ëž˜ìФì—ë„ ê°œë°œìžê°€ ì†ì‰½ê²Œ ì‚¬ìš©í• ìˆ˜ 있는 여러 가지 메서드가 í¬í•¨ë˜ì–´ 있습니다. ì´ë¥¼ ì´ìš©í•´ -{@link android.widget.Chronometer} ë˜ëŠ” {@link android.widget.ProgressBar}를 + {@link android.widget.RemoteViews} í´ëž˜ìФì—ë„ ê°œë°œìžê°€ ì†ì‰½ê²Œ ì‚¬ìš©í• ìˆ˜ 있는 여러 가지 메서드가 í¬í•¨ë˜ì–´ 있습니다. ì´ë¥¼ ì´ìš©í•´ +{@link android.widget.Chronometer} ë˜ëŠ” {@link android.widget.ProgressBar}를 ì•Œë¦¼ì˜ ë ˆì´ì•„ì›ƒì— ì¶”ê°€í•˜ë©´ ë©ë‹ˆë‹¤. ì•Œë¦¼ì˜ ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„웃 ìƒì„±ì— 관한 ìžì„¸í•œ ì •ë³´ëŠ” {@link android.widget.RemoteViews} 참조 문서를 참조하ì‹ì‹œì˜¤. </p> <p class="caution"> - <strong>주ì˜:</strong> ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ëŠ” 경우, -ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ë‹¤ì–‘í•œ 기기 방향과 í•´ìƒë„ì—서 ìž‘ë™í•˜ëŠ”ì§€ ê°ë³„히 주ì˜ë¥¼ 기울여 확ì¸í•˜ì‹ì‹œì˜¤. ì´ ì¡°ì–¸ì€ -ëª¨ë“ ë³´ê¸° ë ˆì´ì•„ì›ƒì— ê³µí†µì 으로 ì ìš©ë˜ì§€ë§Œ, 특히 ì•Œë¦¼ì— ì¤‘ìš”í•œ ì˜ë¯¸ë¥¼ 지닙니다. -알림 ì°½ì—서는 ê³µê°„ì´ êµ‰ìž¥ížˆ ì œí•œë˜ì–´ 있기 때문입니다. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ë„ˆë¬´ 복잡하게 만들지 ë§ˆì‹œê³ , + <strong>주ì˜:</strong> ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ì‚¬ìš©í•˜ëŠ” 경우, +ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì´ ë‹¤ì–‘í•œ 기기 방향과 í•´ìƒë„ì—서 ìž‘ë™í•˜ëŠ”ì§€ ê°ë³„히 주ì˜ë¥¼ 기울여 확ì¸í•˜ì‹ì‹œì˜¤. ì´ ì¡°ì–¸ì€ +ëª¨ë“ ë³´ê¸° ë ˆì´ì•„ì›ƒì— ê³µí†µì 으로 ì ìš©ë˜ì§€ë§Œ, 특히 ì•Œë¦¼ì— ì¤‘ìš”í•œ ì˜ë¯¸ë¥¼ 지닙니다. +알림 ì°½ì—서는 ê³µê°„ì´ êµ‰ìž¥ížˆ ì œí•œë˜ì–´ 있기 때문입니다. ì‚¬ìš©ìž ì§€ì • ë ˆì´ì•„ì›ƒì„ ë„ˆë¬´ 복잡하게 만들지 ë§ˆì‹œê³ , 여러 가지 구성ì—서 테스트하는 ê²ƒì„ ìžŠì§€ 마ì‹ì‹œì˜¤. </p> <!-- ------------------------------------------------------------------------------------------ --> <h4>ì‚¬ìš©ìž ì§€ì • 알림 í…ìŠ¤íŠ¸ì— ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤ 사용</h4> <p> - ì‚¬ìš©ìž ì§€ì • ì•Œë¦¼ì˜ í…스트ì—는 í•ìƒ ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하ì‹ì‹œì˜¤. ì•Œë¦¼ì˜ ë°°ê²½ 색ìƒì€ 기기와 ë²„ì „ë³„ë¡œ 다를 수 있습니다. -ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하면 ì´ëŸ¬í•œ ì°¨ì´ë¥¼ -ê°ì•ˆí•˜ëŠ” ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. Android 2.3부터 ì‹œìŠ¤í…œì€ -표준 알림 ë ˆì´ì•„웃 í…ìŠ¤íŠ¸ì˜ ìŠ¤íƒ€ì¼ì„ ì •ì˜í–ˆìŠµë‹ˆë‹¤. Android 2.3 ì´ìƒì„ 대ìƒìœ¼ë¡œ 하는 + ì‚¬ìš©ìž ì§€ì • ì•Œë¦¼ì˜ í…스트ì—는 í•ìƒ ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하ì‹ì‹œì˜¤. ì•Œë¦¼ì˜ ë°°ê²½ 색ìƒì€ 기기와 ë²„ì „ë³„ë¡œ 다를 수 있습니다. +ìŠ¤íƒ€ì¼ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하면 ì´ëŸ¬í•œ ì°¨ì´ë¥¼ +ê°ì•ˆí•˜ëŠ” ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. Android 2.3부터 ì‹œìŠ¤í…œì€ +표준 알림 ë ˆì´ì•„웃 í…ìŠ¤íŠ¸ì˜ ìŠ¤íƒ€ì¼ì„ ì •ì˜í–ˆìŠµë‹ˆë‹¤. Android 2.3 ì´ìƒì„ 대ìƒìœ¼ë¡œ 하는 ì• í”Œë¦¬ì¼€ì´ì…˜ì—서와 ê°™ì€ ìŠ¤íƒ€ì¼ì„ 사용하면 í…스트가 ë””ìŠ¤í”Œë ˆì´ ë°°ê²½ì—ì„œë„ ìž˜ ë³´ì´ë„ë¡ í• ìˆ˜ 있습니다. </p> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/overview.jd b/docs/html-intl/intl/ko/guide/topics/ui/overview.jd index eb288f1532ae..72e5692e80e4 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/overview.jd @@ -3,9 +3,9 @@ page.title=UI 개요 <p>Android ì•±ì˜ ëª¨ë“ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ 요소는 {@link android.view.View}와 -{@link android.view.ViewGroup} 개체를 사용하여 구축합니다. {@link android.view.View}는 사용ìžê°€ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있는 무언가를 -í™”ë©´ì— ê·¸ë¦¬ëŠ” ê°ì²´ìž…니다. {@link android.view.ViewGroup}ì€ -ì¸í„°íŽ˜ì´ìФ ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ê¸° 위해 다른 {@link android.view.View}(ë°{@link android.view.ViewGroup}) ê°ì²´ë¥¼ +{@link android.view.ViewGroup} 개체를 사용하여 구축합니다. {@link android.view.View}는 사용ìžê°€ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 있는 무언가를 +í™”ë©´ì— ê·¸ë¦¬ëŠ” ê°ì²´ìž…니다. {@link android.view.ViewGroup}ì€ +ì¸í„°íŽ˜ì´ìФ ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ê¸° 위해 다른 {@link android.view.View}(ë°{@link android.view.ViewGroup}) ê°ì²´ë¥¼ ë³´ìœ í•˜ëŠ” ê°ì²´ìž…니다.</p> <p>Android는 공통 ìž…ë ¥ ì œì–´(버튼 ë° í…스트 필드)와 다양한 ë ˆì´ì•„웃 모ë¸(ì„ í˜• ë˜ëŠ” 관계 ë ˆì´ì•„웃)ì„ ì œê³µí•˜ëŠ” {@link android.view.View}와 {@link @@ -16,30 +16,30 @@ android.view.ViewGroup} 하위 í´ëž˜ìŠ¤ì˜ <h2 id="Layout">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë ˆì´ì•„웃</h2> <p>ì•±ì˜ ê° êµ¬ì„± ìš”ì†Œì— ëŒ€í•œ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 그림 1ì—서 나타난 바와 ê°™ì´ {@link -android.view.View}와 {@link android.view.ViewGroup} ê°ì²´ì˜ 계층으로 ì •ì˜ë©ë‹ˆë‹¤. ê° ë³´ê¸° ê·¸ë£¹ì€ -하위 보기를 체계화하는 투명한 컨테ì´ë„ˆì´ê³ , -하위 보기는 UIì˜ ì¼ë¶€ë¶„ì„ ê·¸ë¦¬ëŠ” ì œì–´ë‚˜ 다른 ìœ„ì ¯ì¼ ìˆ˜ 있습니다. -ì´ ê³„ì¸µ 트리는 개발ìžì—게 필요한 ë§Œí¼ ë‹¨ìˆœí•˜ê±°ë‚˜ 복잡하게 +android.view.View}와 {@link android.view.ViewGroup} ê°ì²´ì˜ 계층으로 ì •ì˜ë©ë‹ˆë‹¤. ê° ë³´ê¸° ê·¸ë£¹ì€ +하위 보기를 체계화하는 투명한 컨테ì´ë„ˆì´ê³ , +하위 보기는 UIì˜ ì¼ë¶€ë¶„ì„ ê·¸ë¦¬ëŠ” ì œì–´ë‚˜ 다른 ìœ„ì ¯ì¼ ìˆ˜ 있습니다. +ì´ ê³„ì¸µ 트리는 개발ìžì—게 필요한 ë§Œí¼ ë‹¨ìˆœí•˜ê±°ë‚˜ 복잡하게 만들 수 있습니다(다만 단순한 ê²ƒì´ ì„±ëŠ¥ì—는 가장 좋습니다).</p> <img src="{@docRoot}images/viewgroup.png" alt="" /> -<p class="img-caption"><strong>그림 1.</strong> 보기 ê³„ì¸µì„ ë‚˜íƒ€ë‚¸ 것으로, ì´ê²ƒì´ +<p class="img-caption"><strong>그림 1.</strong> 보기 ê³„ì¸µì„ ë‚˜íƒ€ë‚¸ 것으로, ì´ê²ƒì´ UI ë ˆì´ì•„ì›ƒì„ ì •ì˜í•©ë‹ˆë‹¤.</p> -<p>ë ˆì´ì•„ì›ƒì„ ì„ ì–¸í•˜ë ¤ë©´ ì½”ë“œì˜ {@link android.view.View} ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ê³ íŠ¸ë¦¬ë¥¼ 구축하기 시작하면 ë˜ì§€ë§Œ, -ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ëŠ” 가장 ì‰½ê³ íš¨ê³¼ì ì¸ ë°©ë²•ì€ XML 파ì¼ì„ 사용하는 것입니다. +<p>ë ˆì´ì•„ì›ƒì„ ì„ ì–¸í•˜ë ¤ë©´ ì½”ë“œì˜ {@link android.view.View} ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í•˜ê³ íŠ¸ë¦¬ë¥¼ 구축하기 시작하면 ë˜ì§€ë§Œ, +ë ˆì´ì•„ì›ƒì„ ì •ì˜í•˜ëŠ” 가장 ì‰½ê³ íš¨ê³¼ì ì¸ ë°©ë²•ì€ XML 파ì¼ì„ 사용하는 것입니다. XMLì€ HTMLê³¼ ìœ ì‚¬í•œ, ì¸ê°„ì´ ì½ì„ 수 있는 ë ˆì´ì•„웃 구조를 ì œê³µí•©ë‹ˆë‹¤.</p> -<p>ë³´ê¸°ì˜ XML 요소 ì´ë¦„ì€ í•´ë‹¹ 요소가 나타내는 ê°ê°ì˜ Android í´ëž˜ìŠ¤ë¥¼ 따릅니다. ë§í•˜ìžë©´ +<p>ë³´ê¸°ì˜ XML 요소 ì´ë¦„ì€ í•´ë‹¹ 요소가 나타내는 ê°ê°ì˜ Android í´ëž˜ìŠ¤ë¥¼ 따릅니다. ë§í•˜ìžë©´ <code><TextView></code> 요소가 UIì—서 {@link android.widget.TextView} ìœ„ì ¯ì„ ìƒì„±í•˜ê³ , -<code><LinearLayout></code> 요소는 {@link android.widget.LinearLayout} 보기 +<code><LinearLayout></code> 요소는 {@link android.widget.LinearLayout} 보기 ê·¸ë£¹ì„ ìƒì„±í•˜ëŠ” 것입니다. </p> <p>예를 들어, í…스트 보기와 버튼 하나가 있는 단순한 ìˆ˜ì§ ë ˆì´ì•„ì›ƒì€ ì´ëŸ° ëª¨ìŠµì„ ë±ë‹ˆë‹¤.</p> <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -53,19 +53,19 @@ XMLì€ HTMLê³¼ ìœ ì‚¬í•œ, ì¸ê°„ì´ ì½ì„ 수 있는 ë ˆì´ì•„웃 구조를 ì œ </LinearLayout> </pre> -<p>ì•±ì— ë ˆì´ì•„웃 리소스를 로드하면 Androidê°€ ë ˆì´ì•„ì›ƒì˜ ê° ë…¸ë“œë¥¼ 초기화하여 -추가 ë™ìž‘ì„ ì •ì˜í•˜ê±°ë‚˜, ê°ì²´ ìƒíƒœë¥¼ 쿼리 ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ìˆ˜ì •í•˜ëŠ” ë° ì“¸ 수 있는 런타임 ê°ì²´ë¡œ +<p>ì•±ì— ë ˆì´ì•„웃 리소스를 로드하면 Androidê°€ ë ˆì´ì•„ì›ƒì˜ ê° ë…¸ë“œë¥¼ 초기화하여 +추가 ë™ìž‘ì„ ì •ì˜í•˜ê±°ë‚˜, ê°ì²´ ìƒíƒœë¥¼ 쿼리 ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ìˆ˜ì •í•˜ëŠ” ë° ì“¸ 수 있는 런타임 ê°ì²´ë¡œ 초기화합니다.</p> -<p>UI ë ˆì´ì•„웃 ìƒì„±ì— 대한 ì™„ì „í•œ ê°€ì´ë“œëŠ” <a href="declaring-layout.html">XML +<p>UI ë ˆì´ì•„웃 ìƒì„±ì— 대한 ì™„ì „í•œ ê°€ì´ë“œëŠ” <a href="declaring-layout.html">XML ë ˆì´ì•„웃</a>ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤. - + <h2 id="UIComponents">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ 구성 요소</h2> <p>UI를 êµ¬ì¶•í• ë•Œ ëª¨ë‘ {@link android.view.View} ë° {@link -android.view.ViewGroup} ê°ì²´ë¥¼ 사용해야 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. Androidê°€ 표준형 UI ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ëŠ” 앱 구성 요소를 여러 ê°œ ì œê³µí•˜ê³ ìžˆìœ¼ë‹ˆ, -ê°œë°œìž ì—¬ëŸ¬ë¶„ì€ ì´ì— 대한 콘í…ì¸ ë§Œ ì •ì˜í•˜ë©´ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ UI 구성 요소ì—는 ê°ê° +android.view.ViewGroup} ê°ì²´ë¥¼ 사용해야 하는 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. Androidê°€ 표준형 UI ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ëŠ” 앱 구성 요소를 여러 ê°œ ì œê³µí•˜ê³ ìžˆìœ¼ë‹ˆ, +ê°œë°œìž ì—¬ëŸ¬ë¶„ì€ ì´ì— 대한 콘í…ì¸ ë§Œ ì •ì˜í•˜ë©´ ë©ë‹ˆë‹¤. ì´ì™€ ê°™ì€ UI 구성 요소ì—는 ê°ê° ê³ ìœ í•œ API 세트가 있습니다. ì´ë“¤ì€ <a href="{@docRoot}guide/topics/ui/actionbar.html">작업 모ìŒ</a>, <a href="{@docRoot}guide/topics/ui/dialogs.html">대화</a> ë° <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">ìƒíƒœ 알림</a> 등 ê°ê° 다른 문서ì—서 설명하였습니다.</p> diff --git a/docs/html-intl/intl/ko/guide/topics/ui/settings.jd b/docs/html-intl/intl/ko/guide/topics/ui/settings.jd index 36204e03ecf5..01b62ed6783a 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/settings.jd @@ -65,13 +65,13 @@ page.tags=preference,preferenceactivity,preferencefragment -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 종종 ì„¤ì •ì´ í¬í•¨ë˜ì–´ 있어 사용ìžê°€ 앱 기능과 í–‰ë™ì„ ìˆ˜ì •í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 예를 들어 -몇몇 ì•±ì€ ì‚¬ìš©ìžì—게 ì•Œë¦¼ì„ í™œì„±í™”í• ì§€ 여부를 ì§€ì •í•˜ê±°ë‚˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì—는 종종 ì„¤ì •ì´ í¬í•¨ë˜ì–´ 있어 사용ìžê°€ 앱 기능과 í–‰ë™ì„ ìˆ˜ì •í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. 예를 들어 +몇몇 ì•±ì€ ì‚¬ìš©ìžì—게 ì•Œë¦¼ì„ í™œì„±í™”í• ì§€ 여부를 ì§€ì •í•˜ê±°ë‚˜ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ í´ë¼ìš°ë“œì™€ ë°ì´í„°ë¥¼ ë™ê¸°í™”í• ë¹ˆë„를 ì§€ì •í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.</p> -<p>ìžì‹ ì˜ ì•±ì— ì„¤ì •ì„ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우, Androidì˜ -{@link android.preference.Preference} API를 사용하여 다른 Android 앱(시스템 ì„¤ì • í¬í•¨)ì˜ ì‚¬ìš©ìž í™˜ê²½ê³¼ -ì¼ê´€ì„±ì„ ìœ ì§€í•˜ëŠ” ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬ì¶•í• ìˆ˜ 있게 해야 합니다. ì´ ë¬¸ì„œì—서는 +<p>ìžì‹ ì˜ ì•±ì— ì„¤ì •ì„ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우, Androidì˜ +{@link android.preference.Preference} API를 사용하여 다른 Android 앱(시스템 ì„¤ì • í¬í•¨)ì˜ ì‚¬ìš©ìž í™˜ê²½ê³¼ +ì¼ê´€ì„±ì„ ìœ ì§€í•˜ëŠ” ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬ì¶•í• ìˆ˜ 있게 해야 합니다. ì´ ë¬¸ì„œì—서는 {@link android.preference.Preference} API를 사용하여 앱 ì„¤ì •ì„ êµ¬ì¶•í•˜ëŠ” ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> <div class="note design"> @@ -81,8 +81,8 @@ page.tags=preference,preferenceactivity,preferencefragment <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> -<p class="img-caption"><strong>그림 1.</strong> Android 메시지 ì•±ì˜ ì„¤ì •ì—서 ê°€ì ¸ì˜¨ -스í¬ë¦°ìƒ·ìž…니다. {@link android.preference.Preference}ê°€ ì •ì˜í•œ í•ëª©ì„ ì„ íƒí•˜ë©´ +<p class="img-caption"><strong>그림 1.</strong> Android 메시지 ì•±ì˜ ì„¤ì •ì—서 ê°€ì ¸ì˜¨ +스í¬ë¦°ìƒ·ìž…니다. {@link android.preference.Preference}ê°€ ì •ì˜í•œ í•ëª©ì„ ì„ íƒí•˜ë©´ ì¸í„°íŽ˜ì´ìŠ¤ê°€ ì—´ë ¤ ì„¤ì •ì„ ë³€ê²½í• ìˆ˜ 있게 ë©ë‹ˆë‹¤.</p> @@ -90,24 +90,24 @@ page.tags=preference,preferenceactivity,preferencefragment <h2 id="Overview">개요</h2> -<p>ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬ì¶•í• ë•Œì—는 {@link android.view.View} ê°ì²´ë¥¼ 사용하지만, ì„¤ì •ì€ ê·¸ ëŒ€ì‹ -{@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ ë‹¤ì–‘í•œ 하위 í´ëž˜ìŠ¤ë¥¼ 사용하여 구축합니다. +<p>ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬ì¶•í• ë•Œì—는 {@link android.view.View} ê°ì²´ë¥¼ 사용하지만, ì„¤ì •ì€ ê·¸ ëŒ€ì‹ +{@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ ë‹¤ì–‘í•œ 하위 í´ëž˜ìŠ¤ë¥¼ 사용하여 구축합니다. ì´ì™€ ê°™ì€ í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” XML 파ì¼ì—서 ì„ ì–¸í•©ë‹ˆë‹¤.</p> -<p>{@link android.preference.Preference} ê°ì²´ëŠ” í•˜ë‚˜ì˜ ì„¤ì •ì„ ì´ë£¨ëŠ” 기본 -단위입니다. ê°ê°ì˜ {@link android.preference.Preference}는 목ë¡ì˜ í•목으로 +<p>{@link android.preference.Preference} ê°ì²´ëŠ” í•˜ë‚˜ì˜ ì„¤ì •ì„ ì´ë£¨ëŠ” 기본 +단위입니다. ê°ê°ì˜ {@link android.preference.Preference}는 목ë¡ì˜ í•목으로 나타나며 사용ìžê°€ ì„¤ì •ì„ ìˆ˜ì •í•˜ê¸°ì— ì ì ˆí•œ UI를 ì œê³µí•©ë‹ˆë‹¤. 예를 들어 {@link android.preference.CheckBoxPreference}는 확ì¸ëž€ì„ 표시하는 ëª©ë¡ í•ëª©ì„ ë§Œë“¤ê³ , {@link android.preference.ListPreference}는 ì„ íƒ ëª©ë¡ì´ 있는 대화를 여는 í•ëª©ì„ ë§Œë“니다.</p> -<p>ê°ê°ì˜ {@link android.preference.Preference}를 ì¶”ê°€í• ë•Œë§ˆë‹¤ ìƒì‘하는 키-ê°’ ìŒì´ 있어 +<p>ê°ê°ì˜ {@link android.preference.Preference}를 ì¶”ê°€í• ë•Œë§ˆë‹¤ ìƒì‘하는 키-ê°’ ìŒì´ 있어 ì‹œìŠ¤í…œì´ ì´ë¥¼ 사용하여 해당 ì„¤ì •ì„ ì•±ì˜ ì„¤ì •ì— ëŒ€í•œ 기본 {@link android.content.SharedPreferences} -파ì¼ì— ì €ìž¥í•©ë‹ˆë‹¤. 사용ìžê°€ ì„¤ì •ì„ ë³€ê²½í•˜ë©´ ì‹œìŠ¤í…œì´ -{@link android.content.SharedPreferences} 파ì¼ì— 있는 ìƒì‘하는 ê°’ì„ ê°œë°œìž ëŒ€ì‹ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. 개발ìžê°€ ì§ì ‘ -ì—°ê´€ëœ {@link android.content.SharedPreferences} 파ì¼ê³¼ ìƒí˜¸ ìž‘ìš©ì„ í•´ì•¼ 하는 경우는 +파ì¼ì— ì €ìž¥í•©ë‹ˆë‹¤. 사용ìžê°€ ì„¤ì •ì„ ë³€ê²½í•˜ë©´ ì‹œìŠ¤í…œì´ +{@link android.content.SharedPreferences} 파ì¼ì— 있는 ìƒì‘하는 ê°’ì„ ê°œë°œìž ëŒ€ì‹ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. 개발ìžê°€ ì§ì ‘ +ì—°ê´€ëœ {@link android.content.SharedPreferences} 파ì¼ê³¼ ìƒí˜¸ ìž‘ìš©ì„ í•´ì•¼ 하는 경우는 사용ìžì˜ ì„¤ì •ì„ ê¸°ë°˜ìœ¼ë¡œ ì•±ì˜ ë™ìž‘ì„ ê²°ì •í•˜ê¸° 위해 ê°’ì„ ì½ì–´ì•¼ í• ë•Œë¿ìž…니다.</p> -<p>ê° ì„¤ì •ì— ëŒ€í•˜ì—¬ {@link android.content.SharedPreferences}ì— ì €ìž¥ëœ ê°’ì€ ë‹¤ìŒê³¼ ê°™ì€ +<p>ê° ì„¤ì •ì— ëŒ€í•˜ì—¬ {@link android.content.SharedPreferences}ì— ì €ìž¥ëœ ê°’ì€ ë‹¤ìŒê³¼ ê°™ì€ ë°ì´í„° ìœ í˜• 중 한 가지를 ì·¨í• ìˆ˜ 있습니다.</p> <ul> @@ -119,31 +119,31 @@ android.preference.ListPreference}는 ì„ íƒ ëª©ë¡ì´ 있는 대화를 여는 í <li>String {@link java.util.Set}</li> </ul> -<p>ì•±ì˜ ì„¤ì • UI는 -{@link android.view.View} ê°ì²´ ëŒ€ì‹ -{@link android.preference.Preference} ê°ì²´ë¥¼ 사용하여 구축ë˜ê¸° 때문ì—, ëª©ë¡ ì„¤ì •ì„ í‘œì‹œí•˜ë ¤ë©´ 특수 {@link android.app.Activity} ë˜ëŠ” +<p>ì•±ì˜ ì„¤ì • UI는 +{@link android.view.View} ê°ì²´ ëŒ€ì‹ +{@link android.preference.Preference} ê°ì²´ë¥¼ 사용하여 구축ë˜ê¸° 때문ì—, ëª©ë¡ ì„¤ì •ì„ í‘œì‹œí•˜ë ¤ë©´ 특수 {@link android.app.Activity} ë˜ëŠ” {@link android.app.Fragment} 하위 í´ëž˜ìŠ¤ë¥¼ 사용해야 합니다.</p> <ul> - <li>ì•±ì´ Android 3.0 ì´ì „ ë²„ì „(API ë ˆë²¨ 10 ì´í•˜)ì„ ì§€ì›í•˜ëŠ” 경우, 액티비티를 êµ¬ì¶•í• ë•Œ + <li>ì•±ì´ Android 3.0 ì´ì „ ë²„ì „(API ë ˆë²¨ 10 ì´í•˜)ì„ ì§€ì›í•˜ëŠ” 경우, 액티비티를 êµ¬ì¶•í• ë•Œ {@link android.preference.PreferenceActivity} í´ëž˜ìŠ¤ì˜ í™•ìž¥ìœ¼ë¡œ 구축해야 합니다.</li> - <li>Android 3.0 ì´í›„ì˜ ê²½ìš°ì—는 ëŒ€ì‹ ê¸°ì¡´ì˜ {@link android.app.Activity}를 -사용해야 합니다. ì´ê²ƒì€ 앱 ì„¤ì •ì„ í‘œì‹œí•˜ëŠ” {@link android.preference.PreferenceFragment}를 호스팅합니다. -하지만, 여러 ê°œì˜ ì„¤ì • ê·¸ë£¹ì´ ìžˆëŠ” 경우 {@link android.preference.PreferenceActivity}를 사용하여 + <li>Android 3.0 ì´í›„ì˜ ê²½ìš°ì—는 ëŒ€ì‹ ê¸°ì¡´ì˜ {@link android.app.Activity}를 +사용해야 합니다. ì´ê²ƒì€ 앱 ì„¤ì •ì„ í‘œì‹œí•˜ëŠ” {@link android.preference.PreferenceFragment}를 호스팅합니다. +하지만, 여러 ê°œì˜ ì„¤ì • ê·¸ë£¹ì´ ìžˆëŠ” 경우 {@link android.preference.PreferenceActivity}를 사용하여 대형 í™”ë©´ì— ë§žëŠ” ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„ì›ƒì„ ë§Œë“¤ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</li> </ul> <p>{@link android.preference.PreferenceActivity}와 {@link -android.preference.PreferenceFragment}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ <a href="#Activity">기본 ì„¤ì • 액티비티 만들기</a>와 <a href="#Fragment">기본 ì„¤ì • +android.preference.PreferenceFragment}ì˜ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì„¤ì •í•˜ëŠ” ë°©ë²•ì€ <a href="#Activity">기본 ì„¤ì • 액티비티 만들기</a>와 <a href="#Fragment">기본 ì„¤ì • 프래그먼트 사용하기</a>ì— ê´€ë ¨ëœ ì„¹ì…˜ì—서 논합니다.</p> <h3 id="SettingTypes">기본 ì„¤ì •</h3> <p>ì•±ì— ëŒ€í•œ ì„¤ì •ì€ ëª¨ë‘ {@link -android.preference.Preference} í´ëž˜ìŠ¤ì˜ íŠ¹ì • 하위 í´ëž˜ìŠ¤ë¡œ 표현ë©ë‹ˆë‹¤. ê° í•˜ìœ„ í´ëž˜ìŠ¤ì— í•µì‹¬ ì†ì„±ì´ 한 세트씩 í¬í•¨ë˜ì–´ 있어 -ì„¤ì •ì˜ ì œëª©ê³¼ 기본 ê°’ 등과 ê°™ì€ ê²ƒì„ ì§€ì •í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ê° í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” ë˜í•œ ìžì‹ ë§Œì˜ -특수 ì†ì„±ê³¼ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë„ ì œê³µí•©ë‹ˆë‹¤. 예를 들어, 그림 1ì—서는 메시지 ì•±ì˜ ì„¤ì •ì—서 +android.preference.Preference} í´ëž˜ìŠ¤ì˜ íŠ¹ì • 하위 í´ëž˜ìŠ¤ë¡œ 표현ë©ë‹ˆë‹¤. ê° í•˜ìœ„ í´ëž˜ìŠ¤ì— í•µì‹¬ ì†ì„±ì´ 한 세트씩 í¬í•¨ë˜ì–´ 있어 +ì„¤ì •ì˜ ì œëª©ê³¼ 기본 ê°’ 등과 ê°™ì€ ê²ƒì„ ì§€ì •í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ê° í•˜ìœ„ í´ëž˜ìŠ¤ëŠ” ë˜í•œ ìžì‹ ë§Œì˜ +특수 ì†ì„±ê³¼ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë„ ì œê³µí•©ë‹ˆë‹¤. 예를 들어, 그림 1ì—서는 메시지 ì•±ì˜ ì„¤ì •ì—서 ê°€ì ¸ì˜¨ 스í¬ë¦°ìƒ·ì„ 나타낸 것입니다. ì„¤ì • í™”ë©´ì— ìžˆëŠ” ê° ëª©ë¡ í•ëª©ì€ ê°ê¸° 서로 다른 {@link android.preference.Preference} ê°ì²´ë¡œ ì§€ì›ë©ë‹ˆë‹¤.</p> @@ -151,11 +151,11 @@ android.preference.Preference} ê°ì²´ë¡œ ì§€ì›ë©ë‹ˆë‹¤.</p> <dl> <dt>{@link android.preference.CheckBoxPreference}</dt> - <dd>활성화ë˜ì—ˆê±°ë‚˜ ë¹„í™œì„±í™”ëœ ì„¤ì •ì— ëŒ€í•œ 확ì¸ëž€ì´ 있는 í•ëª©ì„ í‘œì‹œí•©ë‹ˆë‹¤. ì €ìž¥ëœ ê°’ì€ + <dd>활성화ë˜ì—ˆê±°ë‚˜ ë¹„í™œì„±í™”ëœ ì„¤ì •ì— ëŒ€í•œ 확ì¸ëž€ì´ 있는 í•ëª©ì„ í‘œì‹œí•©ë‹ˆë‹¤. ì €ìž¥ëœ ê°’ì€ ë¶€ìš¸ìž…ë‹ˆë‹¤(확ì¸ëž€ì´ ì„ íƒëœ 경우 <code>true</code>).</dd> <dt>{@link android.preference.ListPreference}</dt> - <dd>ë¬´ì„ ë²„íŠ¼ 목ë¡ì´ 있는 대화를 엽니다. ì €ìž¥ëœ ê°’ì€ + <dd>ë¬´ì„ ë²„íŠ¼ 목ë¡ì´ 있는 대화를 엽니다. ì €ìž¥ëœ ê°’ì€ ì§€ì›ë˜ëŠ” ê°’ ìœ í˜•(ìœ„ì— ëª©ë¡ìœ¼ë¡œ 나열) 중 ì–´ëŠ ê²ƒì´ë¼ë„ ë 수 있습니다.</dd> <dt>{@link android.preference.EditTextPreference}</dt> @@ -166,36 +166,36 @@ java.lang.String}입니다.</dd> <p>다른 ëª¨ë“ í•˜ìœ„ í´ëž˜ìŠ¤ì™€ ì´ì— ìƒì‘하는 ì†ì„±ì˜ 목ë¡ì„ ë³´ë ¤ë©´ {@link android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ 참조하ì‹ì‹œì˜¤.</p> -<p>ë¬¼ë¡ ê¸°ë³¸ ì œê³µ í´ëž˜ìŠ¤ë§Œìœ¼ë¡œëŠ” 필요한 ê²ƒì„ ëª¨ë‘ ì¶©ì¡±í• ìˆ˜ ì—†ê³ ì•±ì— ë¬´ì–¸ê°€ 좀 ë” íŠ¹ìˆ˜í•œ ê²ƒì´ +<p>ë¬¼ë¡ ê¸°ë³¸ ì œê³µ í´ëž˜ìŠ¤ë§Œìœ¼ë¡œëŠ” 필요한 ê²ƒì„ ëª¨ë‘ ì¶©ì¡±í• ìˆ˜ ì—†ê³ ì•±ì— ë¬´ì–¸ê°€ 좀 ë” íŠ¹ìˆ˜í•œ ê²ƒì´ í•„ìš”í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 플랫í¼ì€ 현재 숫ìžë‚˜ ë‚ ì§œë¥¼ ì„ íƒí• 수 있는 {@link -android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. ë”°ë¼ì„œ ê°œë°œìž ë‚˜ë¦„ëŒ€ë¡œ +android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ ì œê³µí•˜ì§€ 않습니다. ë”°ë¼ì„œ ê°œë°œìž ë‚˜ë¦„ëŒ€ë¡œ {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ë¥¼ ì •ì˜í•´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” ë° ìœ ìš©í•œ ë‚´ìš©ì¸ <a href="#Custom">ì‚¬ìš©ìž ì§€ì • 기본 ì„¤ì • 구축하기</a>ì— ê´€í•œ ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> <h2 id="DefiningPrefs">XML로 기본 ì„¤ì • ì •ì˜í•˜ê¸°</h2> -<p>새로운 {@link android.preference.Preference} ê°ì²´ë¥¼ ëŸ°íƒ€ìž„ì— ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” ê²ƒë„ ê°€ëŠ¥í•˜ì§€ë§Œ, +<p>새로운 {@link android.preference.Preference} ê°ì²´ë¥¼ ëŸ°íƒ€ìž„ì— ì¸ìŠ¤í„´íŠ¸í™”í•˜ëŠ” ê²ƒë„ ê°€ëŠ¥í•˜ì§€ë§Œ, ì„¤ì • 목ë¡ì„ ì •ì˜í• 때ì—는 {@link android.preference.Preference} -ê°ì²´ì˜ 계층과 함께 XMLì„ ì‚¬ìš©í•´ì•¼ 합니다. ì„¤ì • ì»¬ë ‰ì…˜ì„ ì •ì˜í•˜ëŠ” ë° XM 파ì¼ì„ 사용하는 ê²ƒì´ ì„ í˜¸ë˜ëŠ” ì´ìœ 는 ì´ íŒŒì¼ì´ -ì½ê¸° 쉬운 구조를 ì œê³µí•˜ì—¬ ì—…ë°ì´íŠ¸ê°€ 단순하기 때문입니다. ë˜í•œ, ì•±ì˜ ì„¤ì •ì€ ë³´í†µ +ê°ì²´ì˜ 계층과 함께 XMLì„ ì‚¬ìš©í•´ì•¼ 합니다. ì„¤ì • ì»¬ë ‰ì…˜ì„ ì •ì˜í•˜ëŠ” ë° XM 파ì¼ì„ 사용하는 ê²ƒì´ ì„ í˜¸ë˜ëŠ” ì´ìœ 는 ì´ íŒŒì¼ì´ +ì½ê¸° 쉬운 구조를 ì œê³µí•˜ì—¬ ì—…ë°ì´íŠ¸ê°€ 단순하기 때문입니다. ë˜í•œ, ì•±ì˜ ì„¤ì •ì€ ë³´í†µ 미리 ì •ì˜ë˜ì–´ 있습니다. 다만 개발ìžë„ ì—¬ì „ížˆ ëŸ°íƒ€ìž„ì— ì„¤ì • ì»¬ë ‰ì…˜ì„ ìˆ˜ì •í• ìˆ˜ 있습니다.</p> -<p>ê° {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ëŠ” í´ëž˜ìФ ì´ë¦„ì— ì¼ì¹˜í•˜ëŠ” XML 요소로 +<p>ê° {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ëŠ” í´ëž˜ìФ ì´ë¦„ì— ì¼ì¹˜í•˜ëŠ” XML 요소로 ì„ ì–¸í•˜ë©´ ë©ë‹ˆë‹¤. 예를 들면 {@code <CheckBoxPreference>}ê°€ ì´ì— 해당ë©ë‹ˆë‹¤.</p> -<p>ì´ XML 파ì¼ì€ 반드시 {@code res/xml/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•´ì•¼ 합니다. 파ì¼ì˜ ì´ë¦„ì€ ë¬´ì—‡ì´ë“ ì›í•˜ëŠ” 대로 ì§€ì •í• ìˆ˜ 있지만, -ì¼ë°˜ì 으로는 {@code preferences.xml}ì´ë¼ê³ 명명합니다. 파ì¼ì€ 하나만 필요한 ê²ƒì´ ë³´í†µìž…ë‹ˆë‹¤. -왜ëƒí•˜ë©´ ê³„ì¸µì— ìžˆëŠ” 분기(ìžì‹ ë§Œì˜ ì„¤ì • 목ë¡ì„ ì—¶)는 +<p>ì´ XML 파ì¼ì€ 반드시 {@code res/xml/} ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•´ì•¼ 합니다. 파ì¼ì˜ ì´ë¦„ì€ ë¬´ì—‡ì´ë“ ì›í•˜ëŠ” 대로 ì§€ì •í• ìˆ˜ 있지만, +ì¼ë°˜ì 으로는 {@code preferences.xml}ì´ë¼ê³ 명명합니다. 파ì¼ì€ 하나만 필요한 ê²ƒì´ ë³´í†µìž…ë‹ˆë‹¤. +왜ëƒí•˜ë©´ ê³„ì¸µì— ìžˆëŠ” 분기(ìžì‹ ë§Œì˜ ì„¤ì • 목ë¡ì„ ì—¶)는 {@link android.preference.PreferenceScreen}ì˜ ì¤‘ì²©ëœ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 사용하여 ì„ ì–¸ë˜ê¸° 때문입니다.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì„¤ì •ì— ë‹¤ì¤‘ ì°½ ë ˆì´ì•„ì›ƒì„ ë§Œë“¤ê³ ìž í•˜ëŠ” 경우, +<p class="note"><strong>ì°¸ê³ :</strong> ì„¤ì •ì— ë‹¤ì¤‘ ì°½ ë ˆì´ì•„ì›ƒì„ ë§Œë“¤ê³ ìž í•˜ëŠ” 경우, ê° í”„ëž˜ê·¸ë¨¼íŠ¸ì— ëŒ€í•´ 별ë„ì˜ XML 파ì¼ì´ 필요합니다.</p> <p>XML 파ì¼ì˜ 루트 노드는 반드시 {@link android.preference.PreferenceScreen <PreferenceScreen>} 요소여야 합니다. 바로 ì´ ìš”ì†Œ ë‚´ì— ê° {@link -android.preference.Preference}를 추가하는 것입니다. -{@link android.preference.PreferenceScreen <PreferenceScreen>} 요소 ë‚´ì— ì¶”ê°€í•˜ëŠ” ê° í•˜ìœ„ëŠ” ì„¤ì • 목ë¡ì—서 +android.preference.Preference}를 추가하는 것입니다. +{@link android.preference.PreferenceScreen <PreferenceScreen>} 요소 ë‚´ì— ì¶”ê°€í•˜ëŠ” ê° í•˜ìœ„ëŠ” ì„¤ì • 목ë¡ì—서 ê°ê¸° í•목 하나씩으로 나타납니다.</p> <p>예:</p> @@ -224,11 +224,11 @@ android.preference.ListPreference}ê°€ 하나씩 있습니다. ë‘ í•목 ëª¨ë‘ <dl> <dt>{@code android:key}</dt> - <dd>ì´ ì†ì„±ì€ ë°ì´í„° ê°’ì„ ìœ ì§€í•˜ëŠ” 기본 ì„¤ì •ì— í•„ìˆ˜ìž…ë‹ˆë‹¤. ì´ê²ƒì€ ê³ ìœ í‚¤(문ìž)를 + <dd>ì´ ì†ì„±ì€ ë°ì´í„° ê°’ì„ ìœ ì§€í•˜ëŠ” 기본 ì„¤ì •ì— í•„ìˆ˜ìž…ë‹ˆë‹¤. ì´ê²ƒì€ ê³ ìœ í‚¤(문ìž)를 나타내며, ì‹œìŠ¤í…œì´ ì´ê²ƒì„ 사용하여 ì´ ì„¤ì •ì˜ ê°’ì„ {@link -android.content.SharedPreferences}ì— ì €ìž¥í•©ë‹ˆë‹¤. - <p>ì´ ì†ì„±ì´ <em>필요하지 않ì€</em> ì¸ìŠ¤í„´ìŠ¤ëŠ” 기본 ì„¤ì •ì´ -{@link android.preference.PreferenceCategory} ë˜ëŠ” {@link android.preference.PreferenceScreen}ì¸ ê²½ìš°, ë˜ëŠ” +android.content.SharedPreferences}ì— ì €ìž¥í•©ë‹ˆë‹¤. + <p>ì´ ì†ì„±ì´ <em>필요하지 않ì€</em> ì¸ìŠ¤í„´ìŠ¤ëŠ” 기본 ì„¤ì •ì´ +{@link android.preference.PreferenceCategory} ë˜ëŠ” {@link android.preference.PreferenceScreen}ì¸ ê²½ìš°, ë˜ëŠ” 기본 ì„¤ì •ì´ {@link android.content.Intent}를 í˜¸ì¶œí• ê²ƒì„ ë‚˜íƒ€ë‚´ê±°ë‚˜(<a href="#Intents">{@code <intent>}</a> 요소로) {@link android.app.Fragment}를 표시하ë„ë¡ ì§€ì •í•˜ëŠ” 경우(<a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code android:fragment}</a> ì†ì„±ìœ¼ë¡œ)ë¿ìž…니다.</p> </dd> @@ -236,7 +236,7 @@ android:fragment}</a> ì†ì„±ìœ¼ë¡œ)ë¿ìž…니다.</p> <dd>ì´ê²ƒì€ ì„¤ì •ì— ëŒ€í•˜ì—¬ 사용ìžê°€ ë³¼ 수 있는 ì´ë¦„ì„ ì œê³µí•©ë‹ˆë‹¤.</dd> <dt>{@code android:defaultValue}</dt> <dd>ì´ê²ƒì€ ì‹œìŠ¤í…œì´ {@link -android.content.SharedPreferences} 파ì¼ì— ì„¤ì •í•´ì•¼ 하는 초기 ê°’ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ëª¨ë“ ì„¤ì •ì— ê¸°ë³¸ ê°’ì„ ì œê³µí•´ì•¼ +android.content.SharedPreferences} 파ì¼ì— ì„¤ì •í•´ì•¼ 하는 초기 ê°’ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ëª¨ë“ ì„¤ì •ì— ê¸°ë³¸ ê°’ì„ ì œê³µí•´ì•¼ 합니다.</dd> </dl> @@ -248,21 +248,21 @@ android.preference.Preference}(ë° ê°ê°ì˜ 하위 í´ëž˜ìФ) ê´€ë ¨ 문서를 <img src="{@docRoot}images/ui/settings/settings-titles.png" alt="" /> <p class="img-caption"><strong>그림 2.</strong> ì œëª©ì´ ìžˆëŠ” ì„¤ì • ì¹´í…Œê³ ë¦¬ìž…ë‹ˆë‹¤. <br/><b>1.</b> ì¹´í…Œê³ ë¦¬ëŠ” {@link -android.preference.PreferenceCategory <PreferenceCategory>} 요소가 ì§€ì •í•©ë‹ˆë‹¤. <br/><b>2.</b> ì œëª©ì€ +android.preference.PreferenceCategory <PreferenceCategory>} 요소가 ì§€ì •í•©ë‹ˆë‹¤. <br/><b>2.</b> ì œëª©ì€ {@code android:title} ì†ì„±ìœ¼ë¡œ ì§€ì •í•©ë‹ˆë‹¤.</p> </div> -<p>ì„¤ì • 목ë¡ì´ 약 10ê°œ í•ëª©ì„ ì´ˆê³¼í•˜ë©´ ì œëª©ì„ ì¶”ê°€í•˜ì—¬ -ì„¤ì • ê·¸ë£¹ì„ ì •ì˜í•˜ê±°ë‚˜, 해당 ê·¸ë£¹ì„ ë³„ë„ì˜ +<p>ì„¤ì • 목ë¡ì´ 약 10ê°œ í•ëª©ì„ ì´ˆê³¼í•˜ë©´ ì œëª©ì„ ì¶”ê°€í•˜ì—¬ +ì„¤ì • ê·¸ë£¹ì„ ì •ì˜í•˜ê±°ë‚˜, 해당 ê·¸ë£¹ì„ ë³„ë„ì˜ í™”ë©´ì— í‘œì‹œí•˜ëŠ” ê²ƒì´ ì¢‹ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ¬í•œ ì˜µì…˜ì€ ë‹¤ìŒ ì„¹ì…˜ì— ì„¤ëª…ë˜ì–´ 있습니다.</p> <h3 id="Groups">ì„¤ì • 그룹 만들기</h3> -<p>10ê°œ ì´ìƒì˜ ì„¤ì • 목ë¡ì„ ì œì‹œí•˜ëŠ” 경우, 사용ìžê°€ -ì´ë“¤ì„ ë‘˜ëŸ¬ë³´ê³ ì´í•´í•˜ë©° 처리하는 ë° ì–´ë ¤ì›€ì„ ê²ªì„ ìˆ˜ 있습니다. ì´ ë¬¸ì œë¥¼ í•´ê²°í•˜ë ¤ë©´ -ì„¤ì •ì˜ ì¼ë¶€ ë˜ëŠ” 모ë‘를 그룹으로 나누어 ì‚¬ì‹¤ìƒ í•˜ë‚˜ì˜ ê¸´ 목ë¡ì„ 여러 ê°œì˜ ë” ì§§ì€ ëª©ë¡ìœ¼ë¡œ +<p>10ê°œ ì´ìƒì˜ ì„¤ì • 목ë¡ì„ ì œì‹œí•˜ëŠ” 경우, 사용ìžê°€ +ì´ë“¤ì„ ë‘˜ëŸ¬ë³´ê³ ì´í•´í•˜ë©° 처리하는 ë° ì–´ë ¤ì›€ì„ ê²ªì„ ìˆ˜ 있습니다. ì´ ë¬¸ì œë¥¼ í•´ê²°í•˜ë ¤ë©´ +ì„¤ì •ì˜ ì¼ë¶€ ë˜ëŠ” 모ë‘를 그룹으로 나누어 ì‚¬ì‹¤ìƒ í•˜ë‚˜ì˜ ê¸´ 목ë¡ì„ 여러 ê°œì˜ ë” ì§§ì€ ëª©ë¡ìœ¼ë¡œ 바꿔주면 ë©ë‹ˆë‹¤. ê´€ë ¨ëœ ì„¤ì • 그룹 하나를 나타낼 때ì—는 다ìŒê³¼ ê°™ì€ ë‘ ê°€ì§€ ë°©ì‹ ì¤‘ 하나를 íƒí•˜ë©´ ë©ë‹ˆë‹¤.</p> <ul> @@ -270,14 +270,14 @@ android.preference.PreferenceCategory <PreferenceCategory>} 요소가 ì§€ì <li><a href="#Subscreens">ë³´ì¡° 화면 사용하기</a></li> </ul> -<p>ì´ì™€ ê°™ì€ ê·¸ë£¹í™” 기법 중 하나 ë˜ëŠ” 둘 모ë‘를 사용하여 ì•±ì˜ ì„¤ì •ì„ ì¡°ì§í™”í• ìˆ˜ 있습니다. ì–´ëŠ ê²ƒì„ -ì‚¬ìš©í• ì§€, ì„¤ì •ì„ ì–´ë–»ê²Œ 나눌지 ê²°ì •í• ë•Œì—는 Android +<p>ì´ì™€ ê°™ì€ ê·¸ë£¹í™” 기법 중 하나 ë˜ëŠ” 둘 모ë‘를 사용하여 ì•±ì˜ ì„¤ì •ì„ ì¡°ì§í™”í• ìˆ˜ 있습니다. ì–´ëŠ ê²ƒì„ +ì‚¬ìš©í• ì§€, ì„¤ì •ì„ ì–´ë–»ê²Œ 나눌지 ê²°ì •í• ë•Œì—는 Android ë””ìžì¸ì˜ <a href="{@docRoot}design/patterns/settings.html">ì„¤ì •</a> ê°€ì´ë“œì— 있는 ì§€ì¹¨ì„ ë”°ë¼ì•¼ 합니다.</p> <h4 id="Titles">ì œëª© 사용하기</h4> -<p>여러 ê°œì˜ ì„¤ì • 그룹 사ì´ì— êµ¬ë¶„ì„ ê³¼ ì œëª©ì„ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우(그림 2ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´), +<p>여러 ê°œì˜ ì„¤ì • 그룹 사ì´ì— êµ¬ë¶„ì„ ê³¼ ì œëª©ì„ ì œê³µí•˜ê³ ìž í•˜ëŠ” 경우(그림 2ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´), ê° {@link android.preference.Preference} ê°ì²´ ê·¸ë£¹ì„ {@link android.preference.PreferenceCategory} ë‚´ë¶€ì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> @@ -285,7 +285,7 @@ android.preference.PreferenceCategory} ë‚´ë¶€ì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory} ë‚´ë¶€ì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -311,13 +311,13 @@ android.preference.PreferenceCategory} ë‚´ë¶€ì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> <h4 id="Subscreens">ë³´ì¡° 화면 사용하기</h4> -<p>ì„¤ì • 그룹 여러 개를 ë³´ì¡° í™”ë©´ì— ë°°ì¹˜í•˜ê³ ìž í•˜ëŠ” 경우(그림 3ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´), 해당 +<p>ì„¤ì • 그룹 여러 개를 ë³´ì¡° í™”ë©´ì— ë°°ì¹˜í•˜ê³ ìž í•˜ëŠ” 경우(그림 3ì— í‘œì‹œëœ ê²ƒê³¼ ê°™ì´), 해당 {@link android.preference.Preference} ê°ì²´ ê·¸ë£¹ì„ {@link android.preference.PreferenceScreen} ì•ˆì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> <img src="{@docRoot}images/ui/settings/settings-subscreen.png" alt="" /> <p class="img-caption"><strong>그림 3.</strong> ì„¤ì • ë³´ì¡° 화면입니다. {@code -<PreferenceScreen>} 요소가 +<PreferenceScreen>} 요소가 í•ëª©ì„ ë§Œë“¤ë©°, ì´ í•ëª©ì´ ì„ íƒë˜ë©´ 별ë„ì˜ ëª©ë¡ì´ ì—´ë ¤ ì¤‘ì²©ëœ ì„¤ì •ì„ í‘œì‹œí•©ë‹ˆë‹¤.</p> <p>예:</p> @@ -352,7 +352,7 @@ android.preference.PreferenceScreen} ì•ˆì— ë°°ì¹˜í•©ë‹ˆë‹¤.</p> <h3 id="Intents">ì¸í…트 사용하기</h3> -<p>ì–´ë–¤ 경우ì—는 기본 ì„¤ì • í•ëª©ì„ ì‚¬ìš©í•˜ì—¬ ì„¤ì • 화면 ëŒ€ì‹ ì—¬ëŸ¬ 가지 액티비티를 +<p>ì–´ë–¤ 경우ì—는 기본 ì„¤ì • í•ëª©ì„ ì‚¬ìš©í•˜ì—¬ ì„¤ì • 화면 ëŒ€ì‹ ì—¬ëŸ¬ 가지 액티비티를 ì—´ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 웹 브ë¼ìš°ì €ë¥¼ ì—´ì–´ 웹 페ì´ì§€ë¥¼ 보는 ê²ƒì´ ì´ì— 해당ë©ë‹ˆë‹¤. 사용ìžê°€ 기본 ì„¤ì • í•ëª©ì„ ì„ íƒí• 때 {@link android.content.Intent}를 호출하ë„ë¡ í•˜ë ¤ë©´, {@code <intent>} 요소를 ìƒì‘하는 {@code <Preference>} ìš”ì†Œì˜ í•˜ìœ„ë¡œ 추가하면 ë©ë‹ˆë‹¤.</p> @@ -392,18 +392,18 @@ android.content.Intent#setComponent setComponent()} 메서드를 따릅니다.</ <p>ì„¤ì •ì„ ì•¡í‹°ë¹„í‹°ì—서 í‘œì‹œí•˜ë ¤ë©´ {@link android.preference.PreferenceActivity} í´ëž˜ìŠ¤ë¥¼ 확장하면 ë©ë‹ˆë‹¤. ì´ê²ƒì€ ì¼ë°˜ì ì¸ {@link android.app.Activity} í´ëž˜ìФ í™•ìž¥ì˜ ì¼ì¢…입니다. ì´ëŠ” {@link -android.preference.Preference} ê°ì²´ì˜ ê³„ì¸µì— ê¸°ë°˜í•œ ì„¤ì • 목ë¡ì„ 표시합니다. {@link android.preference.PreferenceActivity}는 +android.preference.Preference} ê°ì²´ì˜ ê³„ì¸µì— ê¸°ë°˜í•œ ì„¤ì • 목ë¡ì„ 표시합니다. {@link android.preference.PreferenceActivity}는 사용ìžê°€ 변경 ìž‘ì—…ì„ í•˜ë©´ ê° {@link android.preference.Preference}와 ì—°ê´€ëœ ì„¤ì •ì„ ìœ ì§€í•©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> Android 3.0 ì´ìƒì— ë§žì¶° ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 개발하는 경우, -ëŒ€ì‹ {@link android.preference.PreferenceFragment}를 사용해야 합니다. ë‹¤ìŒ ì„¹ì…˜ì˜ +<p class="note"><strong>ì°¸ê³ :</strong> Android 3.0 ì´ìƒì— ë§žì¶° ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 개발하는 경우, +ëŒ€ì‹ {@link android.preference.PreferenceFragment}를 사용해야 합니다. ë‹¤ìŒ ì„¹ì…˜ì˜ <a href="#Fragment">기본 ì„¤ì • 프래그먼트 사용하기</a> ê´€ë ¨ ë‚´ìš©ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> <p>여기서 기억해야 í• ê°€ìž¥ 중요한 ì ì€ {@link android.preference.PreferenceActivity#onCreate onCreate()} 콜백 ì¤‘ì— ë³´ê¸° ë ˆì´ì•„ì›ƒì„ ë¡œë”©í•´ì„œëŠ” 안 ëœë‹¤ëŠ” 것입니다. ê·¸ ëŒ€ì‹ {@link -android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 호출하여 -XML 파ì¼ì—서 ì„ ì–¸í•œ 기본 ì„¤ì •ì„ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•©ë‹ˆë‹¤. 예를 들어 다ìŒì€ 기능ì ì¸ +android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 호출하여 +XML 파ì¼ì—서 ì„ ì–¸í•œ 기본 ì„¤ì •ì„ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í•©ë‹ˆë‹¤. 예를 들어 다ìŒì€ 기능ì ì¸ {@link android.preference.PreferenceActivity}ì— í•„ìš”í•œ 가장 ìµœì†Œí•œì˜ ì½”ë“œë¥¼ 나타낸 것입니다.</p> <pre> @@ -416,11 +416,11 @@ public class SettingsActivity extends PreferenceActivity { } </pre> -<p>사실 ì´ ì½”ë“œë§Œìœ¼ë¡œ 몇몇 앱ì—는 충분합니다. 사용ìžê°€ 기본 ì„¤ì •ì„ ìˆ˜ì •í•˜ìžë§ˆìž -ì‹œìŠ¤í…œì´ í•´ë‹¹ ë³€ê²½ì„ ê¸°ë³¸ {@link android.content.SharedPreferences} 파ì¼ì— ì €ìž¥í•˜ì—¬, -사용ìžì˜ ì„¤ì •ì„ í™•ì¸í•´ì•¼ í• ë•Œ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 ì´ë¥¼ ì½ì„ 수 있ë„ë¡ í•˜ê¸° 때문입니다. 하지만 +<p>사실 ì´ ì½”ë“œë§Œìœ¼ë¡œ 몇몇 앱ì—는 충분합니다. 사용ìžê°€ 기본 ì„¤ì •ì„ ìˆ˜ì •í•˜ìžë§ˆìž +ì‹œìŠ¤í…œì´ í•´ë‹¹ ë³€ê²½ì„ ê¸°ë³¸ {@link android.content.SharedPreferences} 파ì¼ì— ì €ìž¥í•˜ì—¬, +사용ìžì˜ ì„¤ì •ì„ í™•ì¸í•´ì•¼ í• ë•Œ 다른 ì• í”Œë¦¬ì¼€ì´ì…˜ 구성 요소가 ì´ë¥¼ ì½ì„ 수 있ë„ë¡ í•˜ê¸° 때문입니다. 하지만 ëŒ€ë‹¤ìˆ˜ì˜ ì•±ì€ ê¸°ë³¸ ì„¤ì •ì— ì¼ì–´ë‚˜ëŠ” ë³€ê²½ì„ ìˆ˜ì‹ ëŒ€ê¸°í•˜ê¸° 위해 ì•½ê°„ì˜ ì½”ë“œê°€ ë” í•„ìš”í•©ë‹ˆë‹¤. -{@link android.content.SharedPreferences} 파ì¼ì— ì¼ì–´ë‚˜ëŠ” ë³€ê²½ì„ ìˆ˜ì‹ ëŒ€ê¸°í•˜ëŠ” ë° ê´€í•œ +{@link android.content.SharedPreferences} 파ì¼ì— ì¼ì–´ë‚˜ëŠ” ë³€ê²½ì„ ìˆ˜ì‹ ëŒ€ê¸°í•˜ëŠ” ë° ê´€í•œ ìžì„¸í•œ ì •ë³´ëŠ” <a href="#ReadingPrefs">기본 ì„¤ì • ì½ê¸°</a>ì— ê´€í•œ ì„¹ì…˜ì„ ì°¸ì¡°í•˜ì‹ì‹œì˜¤.</p> @@ -430,17 +430,17 @@ public class SettingsActivity extends PreferenceActivity { <p>Android 3.0(API ë ˆë²¨ 11) ì´ìƒì— ë§žì¶° 개발하는 경우, {@link android.preference.PreferenceFragment}를 사용하여 {@link android.preference.Preference} -ê°ì²´ 목ë¡ì„ 표시해야 합니다. {@link android.preference.PreferenceFragment}는 ëª¨ë“ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í• ìˆ˜ 있습니다. 즉, +ê°ì²´ 목ë¡ì„ 표시해야 합니다. {@link android.preference.PreferenceFragment}는 ëª¨ë“ ì•¡í‹°ë¹„í‹°ì— ì¶”ê°€í• ìˆ˜ 있습니다. 즉, {@link android.preference.PreferenceActivity}를 사용하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤.</p> -<p><a href="{@docRoot}guide/components/fragments.html">프래그먼트</a>는 액티비티만 -사용하는 ê²ƒì— ë¹„í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 보다 ìœ ì—°í•œ 아키í…처를 ì œê³µí•˜ë©°, ì´ëŠ” 구축하는 +<p><a href="{@docRoot}guide/components/fragments.html">프래그먼트</a>는 액티비티만 +사용하는 ê²ƒì— ë¹„í•´ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 보다 ìœ ì—°í•œ 아키í…처를 ì œê³µí•˜ë©°, ì´ëŠ” 구축하는 ì•¡í‹°ë¹„í‹°ì˜ ì¢…ë¥˜ì™€ 무관하게 ì ìš©ë©ë‹ˆë‹¤. ë”°ë¼ì„œ ì„¤ì • 표시를 ì œì–´í•˜ëŠ” ë°ì—는 {@link android.preference.PreferenceFragment}를 {@link android.preference.PreferenceActivity} ëŒ€ì‹ ì‚¬ìš©í•˜ëŠ” ë°©ì•ˆì„ ê¶Œìž¥í•©ë‹ˆë‹¤(가능한 경우).</p> <p>{@link android.preference.PreferenceFragment} êµ¬í˜„ì€ ë§¤ìš° 간단합니다. -{@link android.preference.PreferenceFragment#onCreate onCreate()} 메서드를 ì •ì˜í•˜ì—¬ 기본 ì„¤ì • 파ì¼ì„ +{@link android.preference.PreferenceFragment#onCreate onCreate()} 메서드를 ì •ì˜í•˜ì—¬ 기본 ì„¤ì • 파ì¼ì„ {@link android.preference.PreferenceFragment#addPreferencesFromResource addPreferencesFromResource()}로 로딩하ë„ë¡ í•˜ê¸°ë§Œ 하면 ë©ë‹ˆë‹¤. 예:</p> @@ -457,7 +457,7 @@ public static class SettingsFragment extends PreferenceFragment { } </pre> -<p>그런 ë‹¤ìŒ ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ {@link android.app.Activity}ì— ì¶”ê°€í•˜ê¸°ë§Œ 하면 ë˜ê³ , ì´ëŠ” 다른 ëª¨ë“ +<p>그런 ë‹¤ìŒ ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ë¥¼ {@link android.app.Activity}ì— ì¶”ê°€í•˜ê¸°ë§Œ 하면 ë˜ê³ , ì´ëŠ” 다른 ëª¨ë“ {@link android.app.Fragment}ì—서와 마찬가지입니다. 예:</p> <pre> @@ -474,24 +474,24 @@ public class SettingsActivity extends Activity { } </pre> -<p class="note"><strong>ì°¸ê³ :</strong> {@link android.preference.PreferenceFragment}ì—는 ìžì‹ ë§Œì˜ +<p class="note"><strong>ì°¸ê³ :</strong> {@link android.preference.PreferenceFragment}ì—는 ìžì‹ ë§Œì˜ {@link android.content.Context} ê°ì²´ê°€ 없습니다. {@link android.content.Context} -ê°ì²´ê°€ 필요한 경우, {@link android.app.Fragment#getActivity()}를 호출하면 ë©ë‹ˆë‹¤. 하지만, -{@link android.app.Fragment#getActivity()}를 호출하는 ê²ƒì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì•¡í‹°ë¹„í‹°ì— ì²¨ë¶€ë˜ì–´ 있는 경우만으로 êµí•œì‹œì¼œì•¼ 한다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 프래그먼트가 +ê°ì²´ê°€ 필요한 경우, {@link android.app.Fragment#getActivity()}를 호출하면 ë©ë‹ˆë‹¤. 하지만, +{@link android.app.Fragment#getActivity()}를 호출하는 ê²ƒì€ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì•¡í‹°ë¹„í‹°ì— ì²¨ë¶€ë˜ì–´ 있는 경우만으로 êµí•œì‹œì¼œì•¼ 한다는 ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. 프래그먼트가 ì•„ì§ ì²¨ë¶€ë˜ì§€ 않았거나 수명 주기가 ëë‚ ë¬´ë µ ë¶„ë¦¬ëœ ê²½ìš°, {@link android.app.Fragment#getActivity()}ê°€ nullì„ ë°˜í™˜í•©ë‹ˆë‹¤.</p> <h2 id="Defaults">ì„¤ì • 기본 ê°’</h2> -<p>ì—¬ëŸ¬ë¶„ì´ ë§Œë“œëŠ” 기본 ì„¤ì •ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 중요한 ë™ìž‘ì„ ì •ì˜í•˜ëŠ” 경우가 ë§Žì„ ê²ƒìž…ë‹ˆë‹¤. ë”°ë¼ì„œ -ì—°ê´€ëœ {@link android.content.SharedPreferences} 파ì¼ì„ -ê° {@link android.preference.Preference}ì— ëŒ€í•œ 기본 값으로 초기화하여 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì²˜ìŒ ì—´ 때 +<p>ì—¬ëŸ¬ë¶„ì´ ë§Œë“œëŠ” 기본 ì„¤ì •ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 중요한 ë™ìž‘ì„ ì •ì˜í•˜ëŠ” 경우가 ë§Žì„ ê²ƒìž…ë‹ˆë‹¤. ë”°ë¼ì„œ +ì—°ê´€ëœ {@link android.content.SharedPreferences} 파ì¼ì„ +ê° {@link android.preference.Preference}ì— ëŒ€í•œ 기본 값으로 초기화하여 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ ì²˜ìŒ ì—´ 때 ì 용하는 ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤.</p> <p>가장 ë¨¼ì € 해야 í• ì¼ì€ XML íŒŒì¼ ë‚´ì˜ ê° {@link android.preference.Preference} -ê°ì²´ì— 대해 기본 ê°’ì„ ì§€ì •í•˜ëŠ” 것입니다. ì´ë•Œ {@code android:defaultValue} ì†ì„±ì„ 사용합니다. ì´ ê°’ì€ ìƒì‘하는 +ê°ì²´ì— 대해 기본 ê°’ì„ ì§€ì •í•˜ëŠ” 것입니다. ì´ë•Œ {@code android:defaultValue} ì†ì„±ì„ 사용합니다. ì´ ê°’ì€ ìƒì‘하는 {@link android.preference.Preference} ê°ì²´ì— 대해 ì ì ˆí•œ ì–´ëŠ ë°ì´í„° ìœ í˜•ì´ë¼ë„ ë 수 있습니다. 예: </p> @@ -507,8 +507,8 @@ android.preference.Preference} ... /> </pre> -<p>그런 다ìŒ, ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ì•¡í‹°ë¹„í‹°ì— ìžˆëŠ” {@link android.app.Activity#onCreate onCreate()} -메서드로부터—ë˜í•œ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 처ìŒìœ¼ë¡œ 들어올 통로가 ë 수 있는 +<p>그런 다ìŒ, ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ 기본 ì•¡í‹°ë¹„í‹°ì— ìžˆëŠ” {@link android.app.Activity#onCreate onCreate()} +메서드로부터—ë˜í•œ 사용ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ì— 처ìŒìœ¼ë¡œ 들어올 통로가 ë 수 있는 다른 ëª¨ë“ ì•¡í‹°ë¹„í‹°ë„ í¬í•¨—{@link android.preference.PreferenceManager#setDefaultValues setDefaultValues()}를 호출합니다.</p> @@ -516,9 +516,9 @@ setDefaultValues()}를 호출합니다.</p> PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false); </pre> -<p>ì´ê²ƒì„ {@link android.app.Activity#onCreate onCreate()} ì¤‘ì— í˜¸ì¶œí•˜ë©´ -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 기본 ì„¤ì •ìœ¼ë¡œ ì ì ˆížˆ 초기화ë˜ë„ë¡ ë³´ìž¥í• ìˆ˜ 있습니다. ì´ê²ƒì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -몇 가지 ë™ìž‘ì„ ê²°ì •í•˜ê¸° 위해 ì½ì–´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예를 들어 셀룰러 네트워í¬ì—서 ë°ì´í„°ë¥¼ +<p>ì´ê²ƒì„ {@link android.app.Activity#onCreate onCreate()} ì¤‘ì— í˜¸ì¶œí•˜ë©´ +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 기본 ì„¤ì •ìœ¼ë¡œ ì ì ˆížˆ 초기화ë˜ë„ë¡ ë³´ìž¥í• ìˆ˜ 있습니다. ì´ê²ƒì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +몇 가지 ë™ìž‘ì„ ê²°ì •í•˜ê¸° 위해 ì½ì–´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예를 들어 셀룰러 네트워í¬ì—서 ë°ì´í„°ë¥¼ ë‹¤ìš´ë¡œë“œí• ì§€ 여부 등).</p> <p>ì´ ë©”ì„œë“œëŠ” 다ìŒê³¼ ê°™ì€ ì„¸ ê°œì˜ ì¸ìˆ˜ë¥¼ 취합니다.</p> @@ -526,73 +526,73 @@ PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false); <li>ì• í”Œë¦¬ì¼€ì´ì…˜ {@link android.content.Context}.</li> <li>기본 ê°’ì„ ì„¤ì •í•˜ê³ ìž í•˜ëŠ” 기본 ì„¤ì • XML 파ì¼ì— 대한 리소스 ID입니다.</li> <li>기본 ê°’ì„ í•œ 번 ì´ìƒ ì„¤ì •í•´ì•¼ 하는지 여부를 나타내는 부울 값입니다. -<p><code>false</code>ì¸ ê²½ìš°, ì‹œìŠ¤í…œì€ ì´ ë©”ì„œë“œê°€ ì „ì— í•œ ë²ˆë„ í˜¸ì¶œëœ ì ì´ ì—†ì„ ê²½ìš°ì—ë§Œ +<p><code>false</code>ì¸ ê²½ìš°, ì‹œìŠ¤í…œì€ ì´ ë©”ì„œë“œê°€ ì „ì— í•œ ë²ˆë„ í˜¸ì¶œëœ ì ì´ ì—†ì„ ê²½ìš°ì—ë§Œ 기본 ê°’ì„ ì„¤ì •í•©ë‹ˆë‹¤(아니면 기본 ê°’ì„ ê³µìœ í•œ 기본 ì„¤ì • 파ì¼ì— 있는 {@link android.preference.PreferenceManager#KEY_HAS_SET_DEFAULT_VALUES} ê°€ ì•ˆì „í•©ë‹ˆë‹¤).</p></li> </ul> -<p>세 번째 ì¸ìˆ˜ë¥¼ <code>false</code>로 ì„¤ì •í•´ ë‘는 한 ì´ ë©”ì„œë“œë¥¼ 액티비티가 시작ë 때마다 -ì•ˆì „í•˜ê²Œ í˜¸ì¶œí• ìˆ˜ 있으며, ê·¸ë ‡ê²Œ í•´ë„ ì‚¬ìš©ìžì˜ ì €ìž¥ëœ ê¸°ë³¸ ì„¤ì •ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 초기화하여 -ìž¬ì •ì˜í•˜ì§€ 않습니다. 하지만 ì´ë¥¼ <code>true</code>로 ì„¤ì •í•˜ë©´, ì´ì „ì˜ ëª¨ë“ ê°’ì„ +<p>세 번째 ì¸ìˆ˜ë¥¼ <code>false</code>로 ì„¤ì •í•´ ë‘는 한 ì´ ë©”ì„œë“œë¥¼ 액티비티가 시작ë 때마다 +ì•ˆì „í•˜ê²Œ í˜¸ì¶œí• ìˆ˜ 있으며, ê·¸ë ‡ê²Œ í•´ë„ ì‚¬ìš©ìžì˜ ì €ìž¥ëœ ê¸°ë³¸ ì„¤ì •ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 초기화하여 +ìž¬ì •ì˜í•˜ì§€ 않습니다. 하지만 ì´ë¥¼ <code>true</code>로 ì„¤ì •í•˜ë©´, ì´ì „ì˜ ëª¨ë“ ê°’ì„ ê¸°ë³¸ 값으로 ìž¬ì •ì˜í•˜ê²Œ ë©ë‹ˆë‹¤.</p> <h2 id="PreferenceHeaders">기본 ì„¤ì • í—¤ë” ì‚¬ìš©í•˜ê¸°</h2> -<p>드문 경우지만 ì„¤ì •ì„ ë””ìžì¸í• 때 첫 화면ì—는 -<a href="#Subscreens">ë³´ì¡° 화면</a> 목ë¡ë§Œ 표시하ë„ë¡ í•˜ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예: 시스템 ì„¤ì • 앱, -그림 4와 5 참조). 그러한 ë””ìžì¸ì„ Android 3.0 ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하는 경우, Android 3.0ì— ìžˆëŠ” -새로운 "í—¤ë”" ê¸°ëŠ¥ì„ ì‚¬ìš©í•´ì•¼ 합니다. ì´ê²ƒì´ ì¤‘ì²©ëœ +<p>드문 경우지만 ì„¤ì •ì„ ë””ìžì¸í• 때 첫 화면ì—는 +<a href="#Subscreens">ë³´ì¡° 화면</a> 목ë¡ë§Œ 표시하ë„ë¡ í•˜ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(예: 시스템 ì„¤ì • 앱, +그림 4와 5 참조). 그러한 ë””ìžì¸ì„ Android 3.0 ì´ìƒì„ 대ìƒìœ¼ë¡œ 개발하는 경우, Android 3.0ì— ìžˆëŠ” +새로운 "í—¤ë”" ê¸°ëŠ¥ì„ ì‚¬ìš©í•´ì•¼ 합니다. ì´ê²ƒì´ ì¤‘ì²©ëœ {@link android.preference.PreferenceScreen} 요소를 사용하여 ë³´ì¡° í™”ë©´ì„ êµ¬ì¶•í•˜ëŠ” ë°©ì•ˆì„ ëŒ€ì‹ í•©ë‹ˆë‹¤.</p> <p>í—¤ë”를 사용하여 ì„¤ì •ì„ êµ¬ì¶•í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ í•´ì•¼ 합니다.</p> <ol> <li>ê° ì„¤ì • ê·¸ë£¹ì„ ë³„ê°œì˜ {@link -android.preference.PreferenceFragment} ì¸ìŠ¤í„´ìŠ¤ë¡œ 구분합니다. 다시 ë§í•´, ì„¤ì • 그룹마다 별ë„ì˜ XML 파ì¼ì´ 하나씩 있어야 한다는 +android.preference.PreferenceFragment} ì¸ìŠ¤í„´ìŠ¤ë¡œ 구분합니다. 다시 ë§í•´, ì„¤ì • 그룹마다 별ë„ì˜ XML 파ì¼ì´ 하나씩 있어야 한다는 뜻입니다.</li> - <li>ê° ì„¤ì • ê·¸ë£¹ì„ ëª©ë¡ìœ¼ë¡œ 나열하는 XML í—¤ë” íŒŒì¼ì„ ìƒì„±í•˜ê³ ì–´ëŠ í”„ëž˜ê·¸ë¨¼íŠ¸ì— + <li>ê° ì„¤ì • ê·¸ë£¹ì„ ëª©ë¡ìœ¼ë¡œ 나열하는 XML í—¤ë” íŒŒì¼ì„ ìƒì„±í•˜ê³ ì–´ëŠ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ìƒì‘하는 ì„¤ì • 목ë¡ì´ 들어있는지 ì„ ì–¸í•©ë‹ˆë‹¤.</li> <li>{@link android.preference.PreferenceActivity} í´ëž˜ìŠ¤ë¥¼ 확장하여 ì„¤ì •ì„ í˜¸ìŠ¤íŒ…í•˜ë„ë¡ í•©ë‹ˆë‹¤.</li> <li>{@link -android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} ì½œë°±ì„ êµ¬í˜„í•˜ì—¬ í—¤ë” íŒŒì¼ì„ +android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} ì½œë°±ì„ êµ¬í˜„í•˜ì—¬ í—¤ë” íŒŒì¼ì„ 나타냅니다.</li> </ol> -<p>ì´ ë””ìžì¸ì„ 사용하는 ë° ìžˆì–´ 커다란 ì´ì ì€ {@link android.preference.PreferenceActivity}ê°€ +<p>ì´ ë””ìžì¸ì„ 사용하는 ë° ìžˆì–´ 커다란 ì´ì ì€ {@link android.preference.PreferenceActivity}ê°€ (앱ì´) 대형 화면ì—서 실행ë 때 그림 4ì—서 나타낸 것과 ê°™ì´ ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„ì›ƒì„ ìžë™ìœ¼ë¡œ 표시한다는 것입니다.</p> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 3.0 ì´ì „ ë²„ì „ì„ ì§€ì›í•œë‹¤ 하ë”ë¼ë„ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ -{@link android.preference.PreferenceFragment}를 사용하여 -ì‹ í˜• 기기ì—서 ì°½ ë‘ ê°œì§œë¦¬ 표시를 ì§€ì›í•˜ë„ë¡ í•˜ë©´ì„œë„ êµ¬í˜• 기기ì—서는 ì¼ë°˜ì ì¸ ë‹¤ì¤‘ 화면 ê³„ì¸µì„ -ì—¬ì „ížˆ ì§€ì›í•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(<a href="#BackCompatHeaders">기본 ì„¤ì • í—¤ë”로 +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 3.0 ì´ì „ ë²„ì „ì„ ì§€ì›í•œë‹¤ 하ë”ë¼ë„ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ +{@link android.preference.PreferenceFragment}를 사용하여 +ì‹ í˜• 기기ì—서 ì°½ ë‘ ê°œì§œë¦¬ 표시를 ì§€ì›í•˜ë„ë¡ í•˜ë©´ì„œë„ êµ¬í˜• 기기ì—서는 ì¼ë°˜ì ì¸ ë‹¤ì¤‘ 화면 ê³„ì¸µì„ +ì—¬ì „ížˆ ì§€ì›í•˜ë„ë¡ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤(<a href="#BackCompatHeaders">기본 ì„¤ì • í—¤ë”로 ì´ì „ ë²„ì „ ì§€ì›í•˜ê¸°</a>를 참조하ì‹ì‹œì˜¤).</p> <img src="{@docRoot}images/ui/settings/settings-headers-tablet.png" alt="" /> -<p class="img-caption"><strong>그림 4.</strong> í—¤ë”ê°€ 있는 ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„웃입니다. <br/><b>1.</b> í—¤ë”는 -XML í—¤ë” íŒŒì¼ë¡œ ì •ì˜ë©ë‹ˆë‹¤. <br/><b>2.</b> ê° ì„¤ì • ê·¸ë£¹ì€ -{@link android.preference.PreferenceFragment}ê°€ ì •ì˜í•˜ë©°, ì´ëŠ” í—¤ë” íŒŒì¼ì— 있는 {@code <header>} 요소가 +<p class="img-caption"><strong>그림 4.</strong> í—¤ë”ê°€ 있는 ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„웃입니다. <br/><b>1.</b> í—¤ë”는 +XML í—¤ë” íŒŒì¼ë¡œ ì •ì˜ë©ë‹ˆë‹¤. <br/><b>2.</b> ê° ì„¤ì • ê·¸ë£¹ì€ +{@link android.preference.PreferenceFragment}ê°€ ì •ì˜í•˜ë©°, ì´ëŠ” í—¤ë” íŒŒì¼ì— 있는 {@code <header>} 요소가 ì§€ì •í•©ë‹ˆë‹¤.</p> <img src="{@docRoot}images/ui/settings/settings-headers-handset.png" alt="" /> -<p class="img-caption"><strong>그림 5.</strong> ì„¤ì • í—¤ë”ê°€ 있는 핸드셋 기기입니다. í•ëª©ì„ ì„ íƒí•˜ë©´ -ì—°ê´€ëœ {@link android.preference.PreferenceFragment}ê°€ í—¤ë”를 +<p class="img-caption"><strong>그림 5.</strong> ì„¤ì • í—¤ë”ê°€ 있는 핸드셋 기기입니다. í•ëª©ì„ ì„ íƒí•˜ë©´ +ì—°ê´€ëœ {@link android.preference.PreferenceFragment}ê°€ í—¤ë”를 대체합니다.</p> <h3 id="CreateHeaders" style="clear:left">í—¤ë” íŒŒì¼ ë§Œë“¤ê¸°</h3> -<p>í—¤ë” ëª©ë¡ì— 있는 ê° ì„¤ì • ê·¸ë£¹ì€ ë£¨íŠ¸ {@code <preference-headers>} +<p>í—¤ë” ëª©ë¡ì— 있는 ê° ì„¤ì • ê·¸ë£¹ì€ ë£¨íŠ¸ {@code <preference-headers>} 요소 ì•ˆì— ìžˆëŠ” {@code <header>} 요소 하나로 나타냅니다. 예:</p> <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -607,12 +607,12 @@ android.preference.PreferenceFragment} 예를 ì„ ì–¸í•˜ë©° ì´ëŠ” 사용ìžê°€ í <p>{@code <extras>} 요소를 사용하면 키-ê°’ ìŒì„ {@link android.os.Bundle} ë‚´ì˜ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì „ë‹¬í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤. ì´ í”„ëž˜ê·¸ë¨¼íŠ¸ê°€ ì¸ìˆ˜ë¥¼ ê²€ìƒ‰í•˜ë ¤ë©´ {@link -android.app.Fragment#getArguments()}를 호출하면 ë©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì „ë‹¬í•˜ëŠ” ë°ì—는 여러 가지 ì´ìœ ê°€ ìžˆì„ ìˆ˜ 있지만, +android.app.Fragment#getArguments()}를 호출하면 ë©ë‹ˆë‹¤. ì¸ìˆ˜ë¥¼ í”„ëž˜ê·¸ë¨¼íŠ¸ì— ì „ë‹¬í•˜ëŠ” ë°ì—는 여러 가지 ì´ìœ ê°€ ìžˆì„ ìˆ˜ 있지만, 한 가지 중요한 ì´ìœ 를 예로 들면 ê° ê·¸ë£¹ì— ëŒ€í•´ {@link -android.preference.PreferenceFragment}ì˜ ê°™ì€ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ ìž¬ì‚¬ìš©í•˜ê³ , ì´ ì¸ìˆ˜ë¥¼ 사용하여 해당 프래그먼트가 로딩해야 하는 +android.preference.PreferenceFragment}ì˜ ê°™ì€ í•˜ìœ„ í´ëž˜ìŠ¤ë¥¼ ìž¬ì‚¬ìš©í•˜ê³ , ì´ ì¸ìˆ˜ë¥¼ 사용하여 해당 프래그먼트가 로딩해야 하는 기본 ì„¤ì • XML 파ì¼ì´ 무엇ì¸ì§€ 나타낼 수 있다는 ì 입니다.</p> -<p>예를 들어 다ìŒì€ 여러 가지 ì„¤ì • ê·¸ë£¹ì— ìž¬ì‚¬ìš©í• ìˆ˜ 있는 프래그먼트입니다. ì´ê²ƒì€ +<p>예를 들어 다ìŒì€ 여러 가지 ì„¤ì • ê·¸ë£¹ì— ìž¬ì‚¬ìš©í• ìˆ˜ 있는 프래그먼트입니다. ì´ê²ƒì€ ê° í—¤ë”ê°€ {@code "settings"} 키로 {@code <extra>} ì¸ìˆ˜ë¥¼ ì •ì˜í•˜ëŠ” 경우를 나타낸 것입니다.</p> <pre> @@ -636,7 +636,7 @@ public static class SettingsFragment extends PreferenceFragment { <h3 id="DisplayHeaders">í—¤ë” í‘œì‹œí•˜ê¸°</h3> <p>기본 ì„¤ì • í—¤ë”를 í‘œì‹œí•˜ë ¤ë©´ {@link -android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} 콜백 메서드를 êµ¬í˜„í•˜ê³ +android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} 콜백 메서드를 êµ¬í˜„í•˜ê³ {@link android.preference.PreferenceActivity#loadHeadersFromResource loadHeadersFromResource()}를 호출해야 합니다. 예:</p> @@ -654,56 +654,56 @@ android.preference.PreferenceFragment}를 엽니다.</p> <p class="note"><strong>ì°¸ê³ :</strong> 기본 ì„¤ì • í—¤ë”를 사용하는 경우, {@link android.preference.PreferenceActivity}ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ê°€ {@link -android.preference.PreferenceActivity#onCreate onCreate()} 메서드를 구현하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 필수 ìž‘ì—…ì€ +android.preference.PreferenceActivity#onCreate onCreate()} 메서드를 구현하지 ì•Šì•„ë„ ë©ë‹ˆë‹¤. ì•¡í‹°ë¹„í‹°ì— ëŒ€í•œ 필수 ìž‘ì—…ì€ í—¤ë”를 로딩하는 것ë¿ì´ê¸° 때문입니다.</p> <h3 id="BackCompatHeaders">기본 ì„¤ì • í—¤ë”로 ì´ì „ ë²„ì „ ì§€ì›í•˜ê¸°</h3> -<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 3.0 ì´ì „ ë²„ì „ì„ ì§€ì›í•˜ëŠ” 경우ì—ë„ ì—¬ì „ížˆ í—¤ë”를 사용하여 -Android 3.0 ì´ìƒì—서 ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ë„ë¡ í• ìˆ˜ 있습니다. 개발ìžê°€ 해야 í• ì¼ì€ 추가로 기본 ì„¤ì • XML 파ì¼ì„ +<p>ì• í”Œë¦¬ì¼€ì´ì…˜ì´ Android 3.0 ì´ì „ ë²„ì „ì„ ì§€ì›í•˜ëŠ” 경우ì—ë„ ì—¬ì „ížˆ í—¤ë”를 사용하여 +Android 3.0 ì´ìƒì—서 ì°½ ë‘ ê°œì§œë¦¬ ë ˆì´ì•„ì›ƒì„ ì œê³µí•˜ë„ë¡ í• ìˆ˜ 있습니다. 개발ìžê°€ 해야 í• ì¼ì€ 추가로 기본 ì„¤ì • XML 파ì¼ì„ ìƒì„±í•˜ëŠ” 것ë¿ìž…니다. ì´ íŒŒì¼ì€ 마치 í—¤ë” í•목처럼 ë™ìž‘하는 기본ì ì¸ {@link android.preference.Preference -<Preference>} 요소를 사용합니다(ì´ê²ƒì„ ì´ì „ Android ë²„ì „ì´ ì‚¬ìš©í•˜ë„ë¡ +<Preference>} 요소를 사용합니다(ì´ê²ƒì„ ì´ì „ Android ë²„ì „ì´ ì‚¬ìš©í•˜ë„ë¡ í• ì˜ˆì •).</p> <p>하지만 새로운 {@link android.preference.PreferenceScreen}ì„ ì—¬ëŠ” ëŒ€ì‹ ê° {@link -android.preference.Preference <Preference>} 요소가 {@link android.content.Intent}를 하나씩 -{@link android.preference.PreferenceActivity}ì— ì „ì†¡í•©ë‹ˆë‹¤. ì´ê²ƒì´ ë¡œë”©í• XML 파ì¼ì´ 무엇ì¸ì§€ë¥¼ +android.preference.Preference <Preference>} 요소가 {@link android.content.Intent}를 하나씩 +{@link android.preference.PreferenceActivity}ì— ì „ì†¡í•©ë‹ˆë‹¤. ì´ê²ƒì´ ë¡œë”©í• XML 파ì¼ì´ 무엇ì¸ì§€ë¥¼ 나타냅니다.</p> -<p>예를 들어 다ìŒì€ Android 3.0 ì´ìƒì—서 사용ë˜ëŠ” 기본 ì„¤ì • í—¤ë”ì— ëŒ€í•œ -XML 파ì¼ìž…니다({@code res/xml/preference_headers.xml}).</p> +<p>예를 들어 다ìŒì€ Android 3.0 ì´ìƒì—서 사용ë˜ëŠ” 기본 ì„¤ì • í—¤ë”ì— ëŒ€í•œ +XML 파ì¼ìž…니다({@code res/xml/preference_headers.xml}).</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> </preference-headers> </pre> -<p>ê·¸ë¦¬ê³ ë‹¤ìŒì€, Android 3.0 ì´ì „ ë²„ì „ì— ê°™ì€ í—¤ë”를 ì œê³µí•˜ëŠ” 기본 ì„¤ì • +<p>ê·¸ë¦¬ê³ ë‹¤ìŒì€, Android 3.0 ì´ì „ ë²„ì „ì— ê°™ì€ í—¤ë”를 ì œê³µí•˜ëŠ” 기본 ì„¤ì • 파ì¼ìž…니다({@code res/xml/preference_headers_legacy.xml}).</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -711,13 +711,13 @@ XML 파ì¼ìž…니다({@code res/xml/preference_headers.xml}).</p> </PreferenceScreen> </pre> -<p>{@code <preference-headers>}ì— ëŒ€í•œ ì§€ì›ì´ Android 3.0ì—서 추가ë˜ì—ˆê¸° ë•Œë¬¸ì— ì‹œìŠ¤í…œì´ +<p>{@code <preference-headers>}ì— ëŒ€í•œ ì§€ì›ì´ Android 3.0ì—서 추가ë˜ì—ˆê¸° ë•Œë¬¸ì— ì‹œìŠ¤í…œì´ {@link android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()}를 {@link -android.preference.PreferenceActivity}ì—서 호출하는 ê²ƒì€ Android 3.0 ì´ìƒì—서 실행ë 때ë¿ìž…니다. "ë ˆê±°ì‹œ" í—¤ë” íŒŒì¼ì„ -ë¡œë”©í•˜ë ¤ë©´({@code preference_headers_legacy.xml}) 반드시 Android +android.preference.PreferenceActivity}ì—서 호출하는 ê²ƒì€ Android 3.0 ì´ìƒì—서 실행ë 때ë¿ìž…니다. "ë ˆê±°ì‹œ" í—¤ë” íŒŒì¼ì„ +ë¡œë”©í•˜ë ¤ë©´({@code preference_headers_legacy.xml}) 반드시 Android ë²„ì „ì„ í™•ì¸í•´ì•¼ 하며, 해당 ë²„ì „ì´ Android 3.0 ì´ì „ì¸ ê²½ìš°({@link android.os.Build.VERSION_CODES#HONEYCOMB}), {@link -android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 호출하여 +android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 호출하여 ë ˆê±°ì‹œ í—¤ë” íŒŒì¼ì„ 로딩해야 합니다. 예:</p> <pre> @@ -739,8 +739,8 @@ public void onBuildHeaders(List<Header> target) { } </pre> -<p>ì´ì œ ë‚¨ì€ í• ì¼ì´ë¼ê³ 는 {@link android.content.Intent}를 처리하는 것ë¿ìž…니다. ì´ê²ƒì€ -액티비티로 ì „ë‹¬ë˜ì–´ ì–´ëŠ ê¸°ë³¸ ì„¤ì • 파ì¼ì„ 로딩해야 하는지 ì‹ë³„하는 ë° ì“°ìž…ë‹ˆë‹¤. 그럼 ì´ì œ ì¸í…íŠ¸ì˜ ìž‘ì—…ì„ ê²€ìƒ‰í•˜ì—¬ 기본 ì„¤ì • XMLì˜ +<p>ì´ì œ ë‚¨ì€ í• ì¼ì´ë¼ê³ 는 {@link android.content.Intent}를 처리하는 것ë¿ìž…니다. ì´ê²ƒì€ +액티비티로 ì „ë‹¬ë˜ì–´ ì–´ëŠ ê¸°ë³¸ ì„¤ì • 파ì¼ì„ 로딩해야 하는지 ì‹ë³„하는 ë° ì“°ìž…ë‹ˆë‹¤. 그럼 ì´ì œ ì¸í…íŠ¸ì˜ ìž‘ì—…ì„ ê²€ìƒ‰í•˜ì—¬ 기본 ì„¤ì • XMLì˜ {@code <intent>} 태그ì—서 사용한 ì•Œë ¤ì§„ 작업 문ìžì—´ì— 비êµí•´ë³´ê² 습니다.</p> <pre> @@ -765,8 +765,8 @@ public void onCreate(Bundle savedInstanceState) { </pre> <p>{@link -android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 ì—°ì´ì–´ 호출하면 -ëª¨ë“ ê¸°ë³¸ ì„¤ì •ì„ í•˜ë‚˜ì˜ ëª©ë¡ì— 쌓게 ëœë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ë”°ë¼ì„œ ì´ê²ƒì€ 'Else-if' ë¬¸ì´ ìžˆëŠ” ì¡°ê±´ì„ ë³€ê²½í•˜ì—¬ ë”± 한 번만 +android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()}를 ì—°ì´ì–´ 호출하면 +ëª¨ë“ ê¸°ë³¸ ì„¤ì •ì„ í•˜ë‚˜ì˜ ëª©ë¡ì— 쌓게 ëœë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ë”°ë¼ì„œ ì´ê²ƒì€ 'Else-if' ë¬¸ì´ ìžˆëŠ” ì¡°ê±´ì„ ë³€ê²½í•˜ì—¬ ë”± 한 번만 호출하ë„ë¡ ì£¼ì˜í•´ì•¼ 합니다.</p> @@ -775,15 +775,15 @@ android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesF <h2 id="ReadingPrefs">기본 ì„¤ì • ì½ê¸°</h2> -<p>기본ì 으로 ì•±ì˜ ê¸°ë³¸ ì„¤ì •ì€ ëª¨ë‘ +<p>기본ì 으로 ì•±ì˜ ê¸°ë³¸ ì„¤ì •ì€ ëª¨ë‘ ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ ì–´ë””ì„œë“ ì •ì 메서드 {@link android.preference.PreferenceManager#getDefaultSharedPreferences PreferenceManager.getDefaultSharedPreferences()}를 호출하면 ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 파ì¼ì— ì €ìž¥ë©ë‹ˆë‹¤. ì´ê²ƒì€ {@link android.content.SharedPreferences} ê°ì²´ë¥¼ 반환하며, ì—¬ê¸°ì— {@link -android.preference.PreferenceActivity}ì—서 사용한 {@link android.preference.Preference} ê°ì²´ì™€ +android.preference.PreferenceActivity}ì—서 사용한 {@link android.preference.Preference} ê°ì²´ì™€ ì—°ê´€ëœ ëª¨ë“ í‚¤-ê°’ ìŒì´ 들어있습니다.</p> -<p>예를 들어 다ìŒì€ 기본 ì„¤ì • ê°’ 중 하나를 ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ ë‹¤ë¥¸ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì—서 ì½ëŠ” ë°©ë²•ì„ +<p>예를 들어 다ìŒì€ 기본 ì„¤ì • ê°’ 중 하나를 ì• í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì˜ ë‹¤ë¥¸ ëª¨ë“ ì•¡í‹°ë¹„í‹°ì—서 ì½ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다.</p> <pre> @@ -795,17 +795,17 @@ String syncConnPref = sharedPref.getString(SettingsActivity.KEY_PREF_SYNC_CONN, <h3 id="Listening">기본 ì„¤ì • 변경 ìˆ˜ì‹ ëŒ€ê¸°</h3> -<p>사용ìžê°€ 기본 ì„¤ì • 중 하나를 변경하ìžë§ˆìž ì´ì— 대해 ì•Œë¦¼ì„ ë°›ëŠ” ê²ƒì´ ì¢‹ì€ ë°ì—는 몇 가지 -ì´ìœ ê°€ 있습니다. 기본 ì„¤ì • 중 ì–´ëŠ í•˜ë‚˜ì—ë¼ë„ ë³€ê²½ì´ ë°œìƒí–ˆì„ 때 ì½œë°±ì„ ë°›ìœ¼ë ¤ë©´, +<p>사용ìžê°€ 기본 ì„¤ì • 중 하나를 변경하ìžë§ˆìž ì´ì— 대해 ì•Œë¦¼ì„ ë°›ëŠ” ê²ƒì´ ì¢‹ì€ ë°ì—는 몇 가지 +ì´ìœ ê°€ 있습니다. 기본 ì„¤ì • 중 ì–´ëŠ í•˜ë‚˜ì—ë¼ë„ ë³€ê²½ì´ ë°œìƒí–ˆì„ 때 ì½œë°±ì„ ë°›ìœ¼ë ¤ë©´, {@link android.content.SharedPreferences.OnSharedPreferenceChangeListener -SharedPreference.OnSharedPreferenceChangeListener} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ +SharedPreference.OnSharedPreferenceChangeListener} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ {@link android.content.SharedPreferences} ê°ì²´ì— 대한 ìˆ˜ì‹ ê¸°ë¥¼ 등ë¡í•©ë‹ˆë‹¤. ì´ë•Œ {@link android.content.SharedPreferences#registerOnSharedPreferenceChangeListener registerOnSharedPreferenceChangeListener()}를 호출하면 ë©ë‹ˆë‹¤.</p> <p>ì´ ì¸í„°íŽ˜ì´ìФì—는 콜백 메서드가 {@link android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged -onSharedPreferenceChanged()} 하나ë¿ì´ë©°, ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì•¡í‹°ë¹„í‹°ì˜ ì¼ë¶€ë¶„으로 구현하는 ê²ƒì´ +onSharedPreferenceChanged()} 하나ë¿ì´ë©°, ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì•¡í‹°ë¹„í‹°ì˜ ì¼ë¶€ë¶„으로 구현하는 ê²ƒì´ ê°€ìž¥ 쉬운 ë°©ë²•ì¼ ê³µì‚°ì´ í½ë‹ˆë‹¤. 예:</p> <pre> @@ -825,19 +825,19 @@ public class SettingsActivity extends PreferenceActivity } </pre> -<p>ì´ ì˜ˆì‹œì—서 메서드는 ë³€ê²½ëœ ì„¤ì •ì´ ì•Œë ¤ì§„ 기본 ì„¤ì • í‚¤ì— ëŒ€í•œ 것ì¸ì§€ 여부를 확ì¸í•©ë‹ˆë‹¤. ì´ê²ƒì€ -{@link android.preference.PreferenceActivity#findPreference findPreference()}를 호출하여 -ë³€ê²½ëœ {@link android.preference.Preference} ê°ì²´ë¥¼ ê°€ì ¸ì˜¤ëŠ”ë°, ì´ë ‡ê²Œ 해야 í•ëª©ì˜ ìš”ì•½ì„ ìˆ˜ì •í•˜ì—¬ +<p>ì´ ì˜ˆì‹œì—서 메서드는 ë³€ê²½ëœ ì„¤ì •ì´ ì•Œë ¤ì§„ 기본 ì„¤ì • í‚¤ì— ëŒ€í•œ 것ì¸ì§€ 여부를 확ì¸í•©ë‹ˆë‹¤. ì´ê²ƒì€ +{@link android.preference.PreferenceActivity#findPreference findPreference()}를 호출하여 +ë³€ê²½ëœ {@link android.preference.Preference} ê°ì²´ë¥¼ ê°€ì ¸ì˜¤ëŠ”ë°, ì´ë ‡ê²Œ 해야 í•ëª©ì˜ ìš”ì•½ì„ ìˆ˜ì •í•˜ì—¬ 사용ìžì˜ ì„ íƒì— 대한 ì„¤ëª…ì´ ë˜ë„ë¡ í• ìˆ˜ 있습니다. 다시 ë§í•´, ì„¤ì •ì´ {@link android.preference.ListPreference} ë˜ëŠ” 다른 다중 ì„ íƒ ì„¤ì •ì¸ ê²½ìš°, ì„¤ì •ì´ ë³€ê²½ë˜ì–´ 현재 ìƒíƒœë¥¼ 표시하ë„ë¡ í•˜ë©´ {@link -android.preference.Preference#setSummary setSummary()}를 호출해야 한다는 뜻입니다(예를 들어 +android.preference.Preference#setSummary setSummary()}를 호출해야 한다는 뜻입니다(예를 들어 그림 5ì— í‘œì‹œëœ ì ˆì „ 모드 ì„¤ì •ê³¼ ê°™ìŒ).</p> -<p class="note"><strong>ì°¸ê³ :</strong> Android ë””ìžì¸ ë¬¸ì„œì˜ <a href="{@docRoot}design/patterns/settings.html">ì„¤ì •</a> ê´€ë ¨ ë‚´ìš©ì—서 설명한 바와 ê°™ì´, 사용ìžê°€ 기본 ì„¤ì •ì„ ë³€ê²½í• ë•Œë§ˆë‹¤ -{@link android.preference.ListPreference}ì˜ ìš”ì•½ì„ ì—…ë°ì´íŠ¸í•˜ëŠ” ê²ƒì„ ê¶Œìž¥í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하여 현재 ì„¤ì •ì„ +<p class="note"><strong>ì°¸ê³ :</strong> Android ë””ìžì¸ ë¬¸ì„œì˜ <a href="{@docRoot}design/patterns/settings.html">ì„¤ì •</a> ê´€ë ¨ ë‚´ìš©ì—서 설명한 바와 ê°™ì´, 사용ìžê°€ 기본 ì„¤ì •ì„ ë³€ê²½í• ë•Œë§ˆë‹¤ +{@link android.preference.ListPreference}ì˜ ìš”ì•½ì„ ì—…ë°ì´íŠ¸í•˜ëŠ” ê²ƒì„ ê¶Œìž¥í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하여 현재 ì„¤ì •ì„ ë‚˜íƒ€ë‚´ëŠ” 것입니다.</p> -<p>액티비티ì—서 ì ì ˆí•œ 수명 주기 관리를 ìˆ˜í–‰í•˜ë ¤ë©´ +<p>액티비티ì—서 ì ì ˆí•œ 수명 주기 관리를 ìˆ˜í–‰í•˜ë ¤ë©´ {@link android.content.SharedPreferences.OnSharedPreferenceChangeListener}를 등ë¡í•˜ê³ ë“±ë¡ í•´ì œí•˜ëŠ” ìž‘ì—…ì€ ê°ê° {@link android.app.Activity#onResume} ë° {@link android.app.Activity#onPause} 콜백 ì¤‘ì— ìˆ˜í–‰í•˜ëŠ” ê²ƒì„ ê¶Œìž¥í•©ë‹ˆë‹¤.</p> @@ -859,14 +859,14 @@ protected void onPause() { <p class="caution"><strong>주ì˜:</strong> {@link android.content.SharedPreferences#registerOnSharedPreferenceChangeListener -registerOnSharedPreferenceChangeListener()}를 호출하면 -í˜„ìž¬ì˜ ê²½ìš°, 기본 ì„¤ì • 관리ìžê°€ ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ ê°•ë ¥í•œ 참조를 ì €ìž¥í•˜ì§€ 않습니다. 반드시 ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ ê°•ë ¥í•œ -참조를 ì €ìž¥í•´ì•¼ 합니다. ê·¸ë ‡ì§€ 않으면 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. 권장 사í•으로는 -ìˆ˜ì‹ ê¸°ë¥¼ ê°ì²´ì˜ ì¸ìŠ¤í„´ìŠ¤ ë°ì´í„° ì•ˆì— ë³´ê´€í•˜ëŠ” ê²ƒì„ ì¶”ì²œí•©ë‹ˆë‹¤. ì´ ê°ì²´ëŠ” +registerOnSharedPreferenceChangeListener()}를 호출하면 +í˜„ìž¬ì˜ ê²½ìš°, 기본 ì„¤ì • 관리ìžê°€ ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ ê°•ë ¥í•œ 참조를 ì €ìž¥í•˜ì§€ 않습니다. 반드시 ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ ê°•ë ¥í•œ +참조를 ì €ìž¥í•´ì•¼ 합니다. ê·¸ë ‡ì§€ 않으면 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. 권장 사í•으로는 +ìˆ˜ì‹ ê¸°ë¥¼ ê°ì²´ì˜ ì¸ìŠ¤í„´ìŠ¤ ë°ì´í„° ì•ˆì— ë³´ê´€í•˜ëŠ” ê²ƒì„ ì¶”ì²œí•©ë‹ˆë‹¤. ì´ ê°ì²´ëŠ” ìˆ˜ì‹ ê¸°ë¥¼ 필요로 하는 ê¸°ê°„ë§Œí¼ ì˜¤ëž˜ ì¡´ìž¬í• ê²ƒì´ í™•ì‹¤í•´ì•¼ 합니다.</p> -<p>예를 들어 ë‹¤ìŒ ì½”ë“œì—서 ë°œì‹ ìžëŠ” ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ 참조를 -보관하지 않습니다. ê·¸ ê²°ê³¼ 해당 ìˆ˜ì‹ ê¸°ê°€ 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë˜ë©° +<p>예를 들어 ë‹¤ìŒ ì½”ë“œì—서 ë°œì‹ ìžëŠ” ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ 참조를 +보관하지 않습니다. ê·¸ ê²°ê³¼ 해당 ìˆ˜ì‹ ê¸°ê°€ 가비지 ìˆ˜ì§‘ì˜ ëŒ€ìƒì´ ë˜ë©° 향후 ì–¸ì ê°€ 알 수 없는 시ì ì— ê³ ìž¥ì„ ì¼ìœ¼í‚¤ê²Œ ë 것입니다.</p> <pre> @@ -879,7 +879,7 @@ prefs.registerOnSharedPreferenceChangeListener( }); </pre> -<p>ëŒ€ì‹ , ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ 참조를 ìˆ˜ì‹ ê¸°ê°€ 필요한 ê¸°ê°„ë§Œí¼ ì˜¤ëž˜ ì¡´ìž¬í• ê²ƒì´ í™•ì‹¤í•œ ê°ì²´ì˜ +<p>ëŒ€ì‹ , ìˆ˜ì‹ ê¸°ì— ëŒ€í•œ 참조를 ìˆ˜ì‹ ê¸°ê°€ 필요한 ê¸°ê°„ë§Œí¼ ì˜¤ëž˜ ì¡´ìž¬í• ê²ƒì´ í™•ì‹¤í•œ ê°ì²´ì˜ ì¸ìŠ¤í„´ìŠ¤ ë°ì´í„° í•„ë“œì— ì €ìž¥í•˜ì‹ì‹œì˜¤.</p> <pre> @@ -895,19 +895,19 @@ prefs.registerOnSharedPreferenceChangeListener(listener); <h2 id="NetworkUsage">ë„¤íŠ¸ì›Œí¬ ì‚¬ìš©ëŸ‰ 관리하기</h2> -<p>Android 4.0부터 ì‹œìŠ¤í…œì˜ ì„¤ì • ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 사용하면 사용ìžê°€ -ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì „ê²½ê³¼ ë°°ê²½ì— ìžˆëŠ” ë™ì•ˆ ê°ê° 얼마나 ë§Žì€ ë„¤íŠ¸ì›Œí¬ ë°ì´í„°ë¥¼ 사용하는지 알아볼 수 있게 ë˜ì—ˆìŠµë‹ˆë‹¤. 그런 ë‹¤ìŒ -사용ìžëŠ” ê°ê°ì˜ ì•±ì— ëŒ€í•´ ë°°ê²½ ë°ì´í„° ì‚¬ìš©ì„ ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ë°°ê²½ì—서 -ë°ì´í„°ì— 액세스하는 ê¸°ëŠ¥ì„ ë¹„í™œì„±í™”í•˜ëŠ” 사태를 í”¼í•˜ë ¤ë©´ ë°ì´í„° ì—°ê²°ì„ íš¨ìœ¨ì 으로 ì‚¬ìš©í•˜ê³ +<p>Android 4.0부터 ì‹œìŠ¤í…œì˜ ì„¤ì • ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 사용하면 사용ìžê°€ +ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì „ê²½ê³¼ ë°°ê²½ì— ìžˆëŠ” ë™ì•ˆ ê°ê° 얼마나 ë§Žì€ ë„¤íŠ¸ì›Œí¬ ë°ì´í„°ë¥¼ 사용하는지 알아볼 수 있게 ë˜ì—ˆìŠµë‹ˆë‹¤. 그런 ë‹¤ìŒ +사용ìžëŠ” ê°ê°ì˜ ì•±ì— ëŒ€í•´ ë°°ê²½ ë°ì´í„° ì‚¬ìš©ì„ ë¹„í™œì„±í™”í• ìˆ˜ 있습니다. 사용ìžê°€ ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ ë°°ê²½ì—서 +ë°ì´í„°ì— 액세스하는 ê¸°ëŠ¥ì„ ë¹„í™œì„±í™”í•˜ëŠ” 사태를 í”¼í•˜ë ¤ë©´ ë°ì´í„° ì—°ê²°ì„ íš¨ìœ¨ì 으로 ì‚¬ìš©í•˜ê³ ì‚¬ìš©ìžê°€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì„¤ì •ì„ í†µí•˜ì—¬ ì•±ì˜ ë°ì´í„° ì‚¬ìš©ëŸ‰ì„ ë¯¸ì„¸ ì¡°ì •í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•´ì•¼ 합니다.<p> -<p>예를 들어 사용ìžì—게 ì•±ì˜ ë°ì´í„° ë™ê¸°í™” 빈ë„를 ì œì–´í•˜ë„ë¡ í—ˆìš©í• ìˆ˜ 있습니다. ì•±ì´ Wi-Fiì— ìžˆì„ ë•Œì—ë§Œ -업로드/다운로드를 수행하ë„ë¡ í• ì§€ 여부, ì•±ì´ ë¡œë° ì¤‘ì— ë°ì´í„°ë¥¼ 사용하ë„ë¡ í• ì§€ 여부 ë“±ì„ ì´ë ‡ê²Œ ì¡°ì ˆí•©ë‹ˆë‹¤. 사용ìžê°€ -ì´ëŸ¬í•œ ì œì–´ ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있게 ë˜ë©´ 시스템 ì„¤ì •ì—서 ì„¤ì •í•œ 한ë„ì— ê°€ê¹Œì›Œì§€ê³ -ìžˆì„ ë•Œ ì•±ì˜ ë°ì´í„° 액세스를 ë¹„í™œì„±í™”í• ê°€ëŠ¥ì„±ì´ ë‚®ì•„ì§‘ë‹ˆë‹¤. ê·¸ ëŒ€ì‹ ì•±ì´ ì‚¬ìš©í•˜ëŠ” ë°ì´í„° ì–‘ì„ +<p>예를 들어 사용ìžì—게 ì•±ì˜ ë°ì´í„° ë™ê¸°í™” 빈ë„를 ì œì–´í•˜ë„ë¡ í—ˆìš©í• ìˆ˜ 있습니다. ì•±ì´ Wi-Fiì— ìžˆì„ ë•Œì—ë§Œ +업로드/다운로드를 수행하ë„ë¡ í• ì§€ 여부, ì•±ì´ ë¡œë° ì¤‘ì— ë°ì´í„°ë¥¼ 사용하ë„ë¡ í• ì§€ 여부 ë“±ì„ ì´ë ‡ê²Œ ì¡°ì ˆí•©ë‹ˆë‹¤. 사용ìžê°€ +ì´ëŸ¬í•œ ì œì–´ ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있게 ë˜ë©´ 시스템 ì„¤ì •ì—서 ì„¤ì •í•œ 한ë„ì— ê°€ê¹Œì›Œì§€ê³ +ìžˆì„ ë•Œ ì•±ì˜ ë°ì´í„° 액세스를 ë¹„í™œì„±í™”í• ê°€ëŠ¥ì„±ì´ ë‚®ì•„ì§‘ë‹ˆë‹¤. ê·¸ ëŒ€ì‹ ì•±ì´ ì‚¬ìš©í•˜ëŠ” ë°ì´í„° ì–‘ì„ ì •ë°€í•˜ê²Œ ì œì–´í• ìˆ˜ 있기 때문입니다.</p> -<p>ì¼ë‹¨ 필요한 기본 ì„¤ì •ì„ {@link android.preference.PreferenceActivity}ì— +<p>ì¼ë‹¨ 필요한 기본 ì„¤ì •ì„ {@link android.preference.PreferenceActivity}ì— ì¶”ê°€í•˜ì—¬ ì•±ì˜ ë°ì´í„° ìŠµê´€ì„ ì œì–´í•˜ë„ë¡ í–ˆìœ¼ë©´, 다ìŒìœ¼ë¡œ 매니페스트 파ì¼ì— 있는 {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}ì— ëŒ€í•œ ì¸í…트 필터를 추가해야 합니다. 예:</p> @@ -920,10 +920,10 @@ android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}ì— ëŒ€í•œ ì¸í…트 í•„í„°ë¥ </activity> </pre> -<p>ì´ ì¸í…트 필터는 ì´ê²ƒì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë°ì´í„° ì‚¬ìš©ëŸ‰ì„ ì œì–´í•˜ëŠ” 액티비티ë¼ëŠ” -ì‚¬ì‹¤ì„ ì‹œìŠ¤í…œì— ë‚˜íƒ€ë‚´ëŠ” ì—í• ì„ í•©ë‹ˆë‹¤. ë”°ë¼ì„œ, 사용ìžê°€ ì‹œìŠ¤í…œì˜ ì„¤ì • 앱ì—서 ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ -얼마나 ë§Žì€ ë°ì´í„°ë¥¼ 사용하는지 알아볼 때면 <em>ì• í”Œë¦¬ì¼€ì´ì…˜ ì„¤ì • 보기</em> ë²„íŠ¼ì„ ì‚¬ìš©í• ìˆ˜ 있어 -{@link android.preference.PreferenceActivity}를 시작하게 ë©ë‹ˆë‹¤. 그러면 사용ìžëŠ” +<p>ì´ ì¸í…트 필터는 ì´ê²ƒì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ë°ì´í„° ì‚¬ìš©ëŸ‰ì„ ì œì–´í•˜ëŠ” 액티비티ë¼ëŠ” +ì‚¬ì‹¤ì„ ì‹œìŠ¤í…œì— ë‚˜íƒ€ë‚´ëŠ” ì—í• ì„ í•©ë‹ˆë‹¤. ë”°ë¼ì„œ, 사용ìžê°€ ì‹œìŠ¤í…œì˜ ì„¤ì • 앱ì—서 ì—¬ëŸ¬ë¶„ì˜ ì•±ì´ +얼마나 ë§Žì€ ë°ì´í„°ë¥¼ 사용하는지 알아볼 때면 <em>ì• í”Œë¦¬ì¼€ì´ì…˜ ì„¤ì • 보기</em> ë²„íŠ¼ì„ ì‚¬ìš©í• ìˆ˜ 있어 +{@link android.preference.PreferenceActivity}를 시작하게 ë©ë‹ˆë‹¤. 그러면 사용ìžëŠ” ì•±ì´ ì‚¬ìš©í• ë°ì´í„° ì–‘ì„ ë¯¸ì„¸í•˜ê²Œ ì¡°ì •í• ìˆ˜ 있습니다.</p> @@ -934,22 +934,22 @@ android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}ì— ëŒ€í•œ ì¸í…트 í•„í„°ë¥ <h2 id="Custom">ì‚¬ìš©ìž ì§€ì • 기본 ì„¤ì • 구축하기</h2> -<p>Android í”„ë ˆìž„ì›Œí¬ì—는 다양한 {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ê°€ í¬í•¨ë˜ì–´ 있어 -여러 가지 ì„¤ì • ìœ í˜•ì— ë§žê²Œ UI를 êµ¬ì¶•í• ìˆ˜ 있습니다. -하지만, 기본 ì œê³µ ì†”ë£¨ì…˜ì´ ì—†ëŠ” ì„¤ì •ì´ í•„ìš”í•˜ê²Œ ë˜ëŠ” ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ìˆ«ìž ì„ íƒê¸° ë˜ëŠ” -ë‚ ì§œ ì„ íƒê¸° ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. 그러한 경우ì—는 ì‚¬ìš©ìž ì§€ì • 기본 ì„¤ì •ì„ ë§Œë“¤ì–´ì•¼ 합니다. ì´ë•Œ +<p>Android í”„ë ˆìž„ì›Œí¬ì—는 다양한 {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ê°€ í¬í•¨ë˜ì–´ 있어 +여러 가지 ì„¤ì • ìœ í˜•ì— ë§žê²Œ UI를 êµ¬ì¶•í• ìˆ˜ 있습니다. +하지만, 기본 ì œê³µ ì†”ë£¨ì…˜ì´ ì—†ëŠ” ì„¤ì •ì´ í•„ìš”í•˜ê²Œ ë˜ëŠ” ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. 예를 들어 ìˆ«ìž ì„ íƒê¸° ë˜ëŠ” +ë‚ ì§œ ì„ íƒê¸° ë“±ì´ ì´ì— 해당ë©ë‹ˆë‹¤. 그러한 경우ì—는 ì‚¬ìš©ìž ì§€ì • 기본 ì„¤ì •ì„ ë§Œë“¤ì–´ì•¼ 합니다. ì´ë•Œ {@link android.preference.Preference} í´ëž˜ìФ ë˜ëŠ” 다른 하위 í´ëž˜ìФ 중 하나를 확장하는 ë°©ë²•ì„ ì”니다.</p> -<p>{@link android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ 확장하는 경우, 다ìŒê³¼ ê°™ì´ +<p>{@link android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ 확장하는 경우, 다ìŒê³¼ ê°™ì´ ëª‡ 가지 중요한 해야 í• ì¼ì´ 있습니다.</p> <ul> <li>사용ìžê°€ ì„¤ì •ì„ ì„ íƒí•˜ë©´ 나타나는 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì§€ì •í•©ë‹ˆë‹¤.</li> <li>í•„ìš”ì— ë”°ë¼ ì„¤ì •ì˜ ê°’ì„ ì €ìž¥í•©ë‹ˆë‹¤.</li> - <li>{@link android.preference.Preference}ê°€ ë³´ì´ê²Œ ë˜ë©´ + <li>{@link android.preference.Preference}ê°€ ë³´ì´ê²Œ ë˜ë©´ ì´ë¥¼ 현재(ë˜ëŠ” 기본) 값으로 초기화합니다.</li> <li>ì‹œìŠ¤í…œì´ ìš”ì²í•˜ëŠ” 경우 기본 ê°’ì„ ì œê³µí•©ë‹ˆë‹¤.</li> - <li>{@link android.preference.Preference}ê°€ ë‚˜ë¦„ì˜ UI(예: 대화)를 ì œê³µí•˜ëŠ” 경우, ìƒíƒœë¥¼ + <li>{@link android.preference.Preference}ê°€ ë‚˜ë¦„ì˜ UI(예: 대화)를 ì œê³µí•˜ëŠ” 경우, ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ë³µì›í•˜ì—¬ 수명 주기 ë³€ê²½ì„ ì²˜ë¦¬í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤(예: 사용ìžê°€ í™”ë©´ì„ ëŒë¦¬ëŠ” 경우).</li> </ul> @@ -959,27 +959,27 @@ android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}ì— ëŒ€í•œ ì¸í…트 í•„í„°ë¥ <h3 id="CustomSelected">ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ì§€ì •í•˜ê¸°</h3> - <p>{@link android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ ì§ì ‘ 확장하는 경우, -{@link android.preference.Preference#onClick()}ì„ êµ¬í˜„í•˜ì—¬ 사용ìžê°€ -í•ëª©ì„ ì„ íƒí• 때 ì¼ì–´ë‚ ë™ìž‘ì„ ì •ì˜í•´ì•¼ 합니다. 그러나, ëŒ€ë¶€ë¶„ì˜ ì‚¬ìš©ìž ì§€ì • ì„¤ì •ì€ {@link android.preference.DialogPreference}를 확장하여 + <p>{@link android.preference.Preference} í´ëž˜ìŠ¤ë¥¼ ì§ì ‘ 확장하는 경우, +{@link android.preference.Preference#onClick()}ì„ êµ¬í˜„í•˜ì—¬ 사용ìžê°€ +í•ëª©ì„ ì„ íƒí• 때 ì¼ì–´ë‚ ë™ìž‘ì„ ì •ì˜í•´ì•¼ 합니다. 그러나, ëŒ€ë¶€ë¶„ì˜ ì‚¬ìš©ìž ì§€ì • ì„¤ì •ì€ {@link android.preference.DialogPreference}를 확장하여 대화를 표시하ë„ë¡ í•©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì ˆì°¨ê°€ 단순해집니다. {@link android.preference.DialogPreference}를 확장하는 경우ì—는 í´ëž˜ìФ ìƒì„±ìž ì¤‘ì— ë°˜ë“œì‹œ {@link -android.preference.DialogPreference#setDialogLayoutResource setDialogLayoutResourcs()}를 호출하여 +android.preference.DialogPreference#setDialogLayoutResource setDialogLayoutResourcs()}를 호출하여 ëŒ€í™”ì— ëŒ€í•œ ë ˆì´ì•„ì›ƒì„ ì§€ì •í•´ì•¼ 합니다.</p> <p>예를 들어 다ìŒì€ ë ˆì´ì•„ì›ƒì„ ì„ ì–¸í•˜ëŠ” ì‚¬ìš©ìž ì§€ì • {@link -android.preference.DialogPreference}와 기본 +android.preference.DialogPreference}와 기본 ê¸ì •ì ë° ë¶€ì •ì 대화 ë²„íŠ¼ì— ëŒ€í•œ í…스트를 ì§€ì •í•˜ëŠ” ìƒì„±ìžìž…니다.</p> <pre> public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -992,21 +992,21 @@ public class NumberPickerPreference extends DialogPreference { <p>ì„¤ì •ì— ëŒ€í•œ ê°’ì€ ì–¸ì œë“ ì €ìž¥í• ìˆ˜ 있습니다. {@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ {@code persist*()} 메서드 중 하나를 호출하기만 하면 ë©ë‹ˆë‹¤. 예를 들어 ì„¤ì •ì˜ ê°’ì´ ì •ìˆ˜ì¸ ê²½ìš° {@link -android.preference.Preference#persistInt persistInt()}를, ë¶€ìš¸ì„ ì €ìž¥í•˜ë ¤ë©´ +android.preference.Preference#persistInt persistInt()}를, ë¶€ìš¸ì„ ì €ìž¥í•˜ë ¤ë©´ {@link android.preference.Preference#persistBoolean persistBoolean()}ì„ í˜¸ì¶œí•˜ì‹ì‹œì˜¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ê°ê°ì˜ {@link android.preference.Preference}는 ë°ì´í„° ìœ í˜• 하나씩만 -ì €ìž¥í• ìˆ˜ 있으므로, ì‚¬ìš©ìž ì§€ì • +<p class="note"><strong>ì°¸ê³ :</strong> ê°ê°ì˜ {@link android.preference.Preference}는 ë°ì´í„° ìœ í˜• 하나씩만 +ì €ìž¥í• ìˆ˜ 있으므로, ì‚¬ìš©ìž ì§€ì • {@link android.preference.Preference}ì—서 사용한 ë°ì´í„° ìœ í˜•ì— ì ì ˆí•œ {@code persist*()} 메서드를 사용해야 합니다.</p> <p>ì„¤ì •ì„ ìœ ì§€í•˜ê¸°ë¡œ ì„ íƒí•˜ëŠ” 시ì ì€ í™•ìž¥í•˜ëŠ” ì§€ì ì´ {@link android.preference.Preference} í´ëž˜ìФì¸ì§€ì— 좌우ë 수 있습니다. {@link -android.preference.DialogPreference}를 확장하면 ê°’ì„ ìœ ì§€í•˜ëŠ” ê²ƒì€ ëŒ€í™”ê°€ ê¸ì •ì ì¸ ê²°ê³¼ë¡œ ì¸í•´ +android.preference.DialogPreference}를 확장하면 ê°’ì„ ìœ ì§€í•˜ëŠ” ê²ƒì€ ëŒ€í™”ê°€ ê¸ì •ì ì¸ ê²°ê³¼ë¡œ ì¸í•´ 닫히는 경우만으로 êµí•œí•´ì•¼ 합니다(사용ìžê°€ "확ì¸(OK)" ë²„íŠ¼ì„ ì„ íƒí•˜ëŠ” 경우).</p> <p>{@link android.preference.DialogPreference}ê°€ 닫히면 ì‹œìŠ¤í…œì´ {@link -android.preference.DialogPreference#onDialogClosed onDialogClosed()} 메서드를 호출합니다. ì´ ë©”ì„œë“œì—는 -부울 ì¸ìˆ˜ê°€ í¬í•¨ë˜ì–´ 있어 사용ìžì˜ 결과가 "ê¸ì •ì "ì¸ì§€ 아닌지를 나타냅니다. ì´ ê°’ì´ +android.preference.DialogPreference#onDialogClosed onDialogClosed()} 메서드를 호출합니다. ì´ ë©”ì„œë“œì—는 +부울 ì¸ìˆ˜ê°€ í¬í•¨ë˜ì–´ 있어 사용ìžì˜ 결과가 "ê¸ì •ì "ì¸ì§€ 아닌지를 나타냅니다. ì´ ê°’ì´ <code>true</code>ì¸ ê²½ìš°, 사용ìžê°€ ê¸ì •ì ë²„íŠ¼ì„ ì„ íƒí•œ 것ì´ê³ 새 ê°’ì„ ì €ìž¥í•´ì•¼ 합니다. 예: </p> @@ -1020,29 +1020,29 @@ protected void onDialogClosed(boolean positiveResult) { } </pre> -<p>ì´ ì˜ˆì‹œì—서 <code>mNewValue</code>는 ì„¤ì •ì˜ í˜„ìž¬ ê°’ì„ ë³´ìœ í•œ í´ëž˜ìФ -구성ì›ìž…니다. {@link android.preference.Preference#persistInt persistInt()}를 호출하면 -{@link android.content.SharedPreferences} 파ì¼ì— 대한 ê°’ì„ ì €ìž¥í•©ë‹ˆë‹¤(ì´ +<p>ì´ ì˜ˆì‹œì—서 <code>mNewValue</code>는 ì„¤ì •ì˜ í˜„ìž¬ ê°’ì„ ë³´ìœ í•œ í´ëž˜ìФ +구성ì›ìž…니다. {@link android.preference.Preference#persistInt persistInt()}를 호출하면 +{@link android.content.SharedPreferences} 파ì¼ì— 대한 ê°’ì„ ì €ìž¥í•©ë‹ˆë‹¤(ì´ {@link android.preference.Preference}ì— ëŒ€í•˜ì—¬ XML 파ì¼ì— ì§€ì •ëœ í‚¤ë¥¼ ìžë™ìœ¼ë¡œ 사용합니다).</p> <h3 id="CustomInitialize">현재 ê°’ 초기화하기</h3> -<p>ì‹œìŠ¤í…œì´ {@link android.preference.Preference}를 í™”ë©´ì— ì¶”ê°€í•˜ëŠ” 경우, ì´ëŠ” -{@link android.preference.Preference#onSetInitialValue onSetInitialValue()}를 호출하여 -ì„¤ì •ì— ìœ ì§€ëœ ê°’ì´ ìžˆëŠ”ì§€ 없는지를 알립니다. ìœ ì§€ëœ ê°’ì´ ì—†ëŠ” 경우, ì´ í˜¸ì¶œì€ ê¸°ë³¸ ê°’ì„ +<p>ì‹œìŠ¤í…œì´ {@link android.preference.Preference}를 í™”ë©´ì— ì¶”ê°€í•˜ëŠ” 경우, ì´ëŠ” +{@link android.preference.Preference#onSetInitialValue onSetInitialValue()}를 호출하여 +ì„¤ì •ì— ìœ ì§€ëœ ê°’ì´ ìžˆëŠ”ì§€ 없는지를 알립니다. ìœ ì§€ëœ ê°’ì´ ì—†ëŠ” 경우, ì´ í˜¸ì¶œì€ ê¸°ë³¸ ê°’ì„ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>{@link android.preference.Preference#onSetInitialValue onSetInitialValue()} 메서드는 -부울 ê°’ <code>restorePersistedValue</code>를 ì „ë‹¬í•˜ì—¬ 해당 ì„¤ì •ì— ëŒ€í•´ ì´ë¯¸ ì–´ë–¤ ê°’ì´ ìœ ì§€ë˜ì—ˆëŠ”ì§€ -아닌지를 나타냅니다. ë§Œì¼ ì´ê²ƒì´ <code>true</code>ë¼ë©´, ìœ ì§€ëœ ê°’ì„ ê²€ìƒ‰í•˜ë˜ +<p>{@link android.preference.Preference#onSetInitialValue onSetInitialValue()} 메서드는 +부울 ê°’ <code>restorePersistedValue</code>를 ì „ë‹¬í•˜ì—¬ 해당 ì„¤ì •ì— ëŒ€í•´ ì´ë¯¸ ì–´ë–¤ ê°’ì´ ìœ ì§€ë˜ì—ˆëŠ”ì§€ +아닌지를 나타냅니다. ë§Œì¼ ì´ê²ƒì´ <code>true</code>ë¼ë©´, ìœ ì§€ëœ ê°’ì„ ê²€ìƒ‰í•˜ë˜ {@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ {@code getPersisted*()} 메서드 중 하나를 호출하는 ë°©ë²•ì„ ì¨ì•¼ 합니다. 예를 들어 ì •ìˆ˜ ê°’ì´ë¼ë©´ {@link -android.preference.Preference#getPersistedInt getPersistedInt()}를 사용합니다. ë³´í†µì€ -ìœ ì§€ëœ ê°’ì„ ê²€ìƒ‰í•˜ì—¬, UIì— ì´ì „ì— ì €ìž¥ëœ ê°’ì„ ë°˜ì˜í•˜ì—¬ ì´ë¥¼ ì ì ˆí•˜ê²Œ ì—…ë°ì´íŠ¸í• ìˆ˜ +android.preference.Preference#getPersistedInt getPersistedInt()}를 사용합니다. ë³´í†µì€ +ìœ ì§€ëœ ê°’ì„ ê²€ìƒ‰í•˜ì—¬, UIì— ì´ì „ì— ì €ìž¥ëœ ê°’ì„ ë°˜ì˜í•˜ì—¬ ì´ë¥¼ ì ì ˆí•˜ê²Œ ì—…ë°ì´íŠ¸í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.</p> -<p><code>restorePersistedValue</code>ê°€ <code>false</code>ì¸ ê²½ìš°, +<p><code>restorePersistedValue</code>ê°€ <code>false</code>ì¸ ê²½ìš°, ë‘ ë²ˆì§¸ ì¸ìˆ˜ë¡œ ì „ë‹¬ëœ ê¸°ë³¸ ê°’ì„ ì‚¬ìš©í•´ì•¼ 합니다.</p> <pre> @@ -1059,22 +1059,22 @@ protected void onSetInitialValue(boolean restorePersistedValue, Object defaultVa } </pre> -<p>ê° {@code getPersisted*()} 메서드는 기본 ê°’ì„ ë‚˜íƒ€ë‚´ëŠ” ì¸ìˆ˜ë¥¼ 취하여 -ì‚¬ì‹¤ì€ ìœ ì§€ëœ ê°’ì´ ì „í˜€ 없거나 키 ìžì²´ê°€ 존재하지 않는 경우 사용하ë„ë¡ í•©ë‹ˆë‹¤. ìœ„ì˜ +<p>ê° {@code getPersisted*()} 메서드는 기본 ê°’ì„ ë‚˜íƒ€ë‚´ëŠ” ì¸ìˆ˜ë¥¼ 취하여 +ì‚¬ì‹¤ì€ ìœ ì§€ëœ ê°’ì´ ì „í˜€ 없거나 키 ìžì²´ê°€ 존재하지 않는 경우 사용하ë„ë¡ í•©ë‹ˆë‹¤. ìœ„ì˜ ì˜ˆì‹œì—서는 혹시 {@link android.preference.Preference#getPersistedInt getPersistedInt()}ê°€ ìœ ì§€ëœ ê°’ì„ ë°˜í™˜í• ìˆ˜ 없는 ê²½ìš°ì— ì‚¬ìš©í•˜ë„ë¡ ê¸°ë³¸ ê°’ì„ ë‚˜íƒ€ë‚´ëŠ” ë° ë¡œì»¬ ìƒìˆ˜ë¥¼ 사용하였습니다.</p> -<p class="caution"><strong>주ì˜:</strong> {@code getPersisted*()} 메서드ì—서는 -<code>defaultValue</code>를 기본 값으로 사용하면 <strong>안 ë©ë‹ˆë‹¤</strong>. ì´ê²ƒì˜ ê°’ì€ +<p class="caution"><strong>주ì˜:</strong> {@code getPersisted*()} 메서드ì—서는 +<code>defaultValue</code>를 기본 값으로 사용하면 <strong>안 ë©ë‹ˆë‹¤</strong>. ì´ê²ƒì˜ ê°’ì€ <code>restorePersistedValue</code>ê°€ <code>true</code>ì´ë©´ í•ìƒ nullì´ê¸° 때문입니다.</p> <h3 id="CustomDefault">기본 ê°’ ì œê³µí•˜ê¸°</h3> <p>{@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ 기본 ê°’ì„ ë‚˜íƒ€ë‚´ëŠ” 경우 -({@code android:defaultValue} ì†ì„±ìœ¼ë¡œ), ì‹œìŠ¤í…œì€ +({@code android:defaultValue} ì†ì„±ìœ¼ë¡œ), ì‹œìŠ¤í…œì€ ê°’ì„ ê²€ìƒ‰í•˜ê¸° 위해 ê°ì²´ë¥¼ ì¸ìŠ¤í„´íŠ¸í™”í• ë•Œ {@link android.preference.Preference#onGetDefaultValue -onGetDefaultValue()}를 호출합니다. ì´ ë©”ì„œë“œë¥¼ 구현해야 +onGetDefaultValue()}를 호출합니다. ì´ ë©”ì„œë“œë¥¼ 구현해야 ì‹œìŠ¤í…œì´ {@link android.content.SharedPreferences}ì— ìžˆëŠ” 기본 ê°’ì„ ì €ìž¥í• ìˆ˜ 있습니다. 예:</p> @@ -1085,9 +1085,9 @@ protected Object onGetDefaultValue(TypedArray a, int index) { } </pre> -<p>ì´ ë©”ì„œë“œ ì¸ìˆ˜ê°€ 여러분ì—게 필요한 ëª¨ë“ ê²ƒì„ ì œê³µí•©ë‹ˆë‹¤. 즉 ì†ì„± ë°°ì—´ê³¼ -{@code android:defaultValue}ì˜ ìœ„ì¹˜ë¡œ, ì´ëŠ” 반드시 검색해야 합니다. ì´ ë©”ì„œë“œë¥¼ -반드시 구현하여 ì†ì„±ì—서 기본 ê°’ì„ ì¶”ì¶œí•´ì•¼ë§Œ 하는 ì´ìœ 는 ê°’ì´ ì •ì˜ë˜ì§€ ì•Šì€ ê²½ìš°, ì†ì„±ì— 대한 +<p>ì´ ë©”ì„œë“œ ì¸ìˆ˜ê°€ 여러분ì—게 필요한 ëª¨ë“ ê²ƒì„ ì œê³µí•©ë‹ˆë‹¤. 즉 ì†ì„± ë°°ì—´ê³¼ +{@code android:defaultValue}ì˜ ìœ„ì¹˜ë¡œ, ì´ëŠ” 반드시 검색해야 합니다. ì´ ë©”ì„œë“œë¥¼ +반드시 구현하여 ì†ì„±ì—서 기본 ê°’ì„ ì¶”ì¶œí•´ì•¼ë§Œ 하는 ì´ìœ 는 ê°’ì´ ì •ì˜ë˜ì§€ ì•Šì€ ê²½ìš°, ì†ì„±ì— 대한 로컬 기본 ê°’ì„ ê¼ ì§€ì •í•´ì•¼ 하기 때문입니다.</p> @@ -1095,25 +1095,25 @@ protected Object onGetDefaultValue(TypedArray a, int index) { <h3 id="CustomSaveState">기본 ì„¤ì •ì˜ ìƒíƒœ ì €ìž¥ ë° ë³µì›í•˜ê¸°</h3> <p>ë ˆì´ì•„웃ì—ì„œì˜ {@link android.view.View}와 마찬가지로 {@link android.preference.Preference} -하위 í´ëž˜ìŠ¤ê°€ 액티비티 ë˜ëŠ” 프래그먼트가 ìž¬ì‹œìž‘í–ˆì„ ë•Œ -ê·¸ ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ë³µì›í•˜ëŠ” ì—í• ì„ ë§¡ìŠµë‹ˆë‹¤(예를 들어 사용ìžê°€ í™”ë©´ì„ ëŒë¦¬ëŠ” 경우 등). -{@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ ìƒíƒœë¥¼ ì ì ˆí•˜ê²Œ ì €ìž¥í•˜ê³ ë³µì›í•˜ë ¤ë©´, +하위 í´ëž˜ìŠ¤ê°€ 액티비티 ë˜ëŠ” 프래그먼트가 ìž¬ì‹œìž‘í–ˆì„ ë•Œ +ê·¸ ìƒíƒœë¥¼ ì €ìž¥í•˜ê³ ë³µì›í•˜ëŠ” ì—í• ì„ ë§¡ìŠµë‹ˆë‹¤(예를 들어 사용ìžê°€ í™”ë©´ì„ ëŒë¦¬ëŠ” 경우 등). +{@link android.preference.Preference} í´ëž˜ìŠ¤ì˜ ìƒíƒœë¥¼ ì ì ˆí•˜ê²Œ ì €ìž¥í•˜ê³ ë³µì›í•˜ë ¤ë©´, 수명 주기 콜백 메서드 {@link android.preference.Preference#onSaveInstanceState onSaveInstanceState()} ë° {@link android.preference.Preference#onRestoreInstanceState onRestoreInstanceState()}를 구현해야 합니다.</p> -<p>{@link android.preference.Preference}ì˜ ìƒíƒœë¥¼ ì •ì˜í•˜ëŠ” ê²ƒì€ -{@link android.os.Parcelable} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하는 ê°ì²´ìž…니다. Android í”„ë ˆìž„ì›Œí¬ëŠ” +<p>{@link android.preference.Preference}ì˜ ìƒíƒœë¥¼ ì •ì˜í•˜ëŠ” ê²ƒì€ +{@link android.os.Parcelable} ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하는 ê°ì²´ìž…니다. Android í”„ë ˆìž„ì›Œí¬ëŠ” 그러한 ê°ì²´ë¥¼ ì œê³µí•˜ì—¬ ìƒíƒœ ê°ì²´ë¥¼ ì •ì˜í•˜ëŠ” ë° ì¼ì¢…ì˜ ì‹œìž‘ ì§€ì 으로 사용하ë„ë¡ í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 즉 {@link android.preference.Preference.BaseSavedState} í´ëž˜ìŠ¤ê°€ ì´ì— 해당ë©ë‹ˆë‹¤.</p> -<p>{@link android.preference.Preference} í´ëž˜ìŠ¤ê°€ ìžì‹ ì˜ ìƒíƒœë¥¼ ì €ìž¥í•˜ëŠ” ë°©ë²•ì„ ì •ì˜í•˜ë ¤ë©´ -{@link android.preference.Preference.BaseSavedState} í´ëž˜ìŠ¤ë¥¼ 확장해야 합니다. 아주 ì•½ê°„ì˜ ë©”ì„œë“œë¥¼ ìž¬ì •ì˜í•˜ê³ +<p>{@link android.preference.Preference} í´ëž˜ìŠ¤ê°€ ìžì‹ ì˜ ìƒíƒœë¥¼ ì €ìž¥í•˜ëŠ” ë°©ë²•ì„ ì •ì˜í•˜ë ¤ë©´ +{@link android.preference.Preference.BaseSavedState} í´ëž˜ìŠ¤ë¥¼ 확장해야 합니다. 아주 ì•½ê°„ì˜ ë©”ì„œë“œë¥¼ ìž¬ì •ì˜í•˜ê³ {@link android.preference.Preference.BaseSavedState#CREATOR} ê°ì²´ë¥¼ ì •ì˜í•´ì•¼ 합니다.</p> -<p>ëŒ€ë¶€ë¶„ì˜ ì•±ì—서는 다ìŒê³¼ ê°™ì€ êµ¬í˜„ì„ ë³µì‚¬í•œ 다ìŒ, -{@code value}를 처리하는 줄만 변경하면 ë©ë‹ˆë‹¤. ì´ëŠ” {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ê°€ ì •ìˆ˜ë³´ë‹¤ëŠ” ë°ì´í„° +<p>ëŒ€ë¶€ë¶„ì˜ ì•±ì—서는 다ìŒê³¼ ê°™ì€ êµ¬í˜„ì„ ë³µì‚¬í•œ 다ìŒ, +{@code value}를 처리하는 줄만 변경하면 ë©ë‹ˆë‹¤. ì´ëŠ” {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ê°€ ì •ìˆ˜ë³´ë‹¤ëŠ” ë°ì´í„° ìœ í˜•ì„ ì €ìž¥í•˜ëŠ” 경우 해당ë©ë‹ˆë‹¤.</p> <pre> @@ -1154,11 +1154,11 @@ private static class SavedState extends BaseSavedState { } </pre> -<p>ìœ„ì˜ {@link android.preference.Preference.BaseSavedState} êµ¬í˜„ì„ ì•±ì— -ì¶”ê°€í•˜ê³ ë‚˜ë©´(주로 {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ), ì´ì œ +<p>ìœ„ì˜ {@link android.preference.Preference.BaseSavedState} êµ¬í˜„ì„ ì•±ì— +ì¶”ê°€í•˜ê³ ë‚˜ë©´(주로 {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ì˜ í•˜ìœ„ í´ëž˜ìŠ¤ë¡œ), ì´ì œ {@link android.preference.Preference#onSaveInstanceState onSaveInstanceState()} ë° {@link -android.preference.Preference#onRestoreInstanceState onRestoreInstanceState()} 메서드를 구현해야 합니다. ì´ê²ƒì€ +android.preference.Preference#onRestoreInstanceState onRestoreInstanceState()} 메서드를 구현해야 합니다. ì´ê²ƒì€ {@link android.preference.Preference} 하위 í´ëž˜ìŠ¤ë¥¼ 위한 것입니다.</p> <p>예:</p> @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/ko/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/ko/guide/topics/ui/ui-events.jd index b059bd24de48..427051c8ac24 100644 --- a/docs/html-intl/intl/ko/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/ko/guide/topics/ui/ui-events.jd @@ -16,67 +16,67 @@ parent.link=index.html </div> </div> -<p>Androidì—는 사용ìžì™€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìƒí˜¸ 작용으로부터 ì´ë²¤íŠ¸ë¥¼ 가로채는 ë°©ë²•ì´ ì—¬ëŸ¬ 가지 있습니다. -ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë‚´ì˜ ì´ë²¤íŠ¸ê°€ ê´€ë ¨ëœ ê²½ìš°, ì´ëŸ¬í•œ ë°©ì‹ì€ ì´ë²¤íŠ¸ë¥¼ 사용ìžê°€ ìƒí˜¸ 작용하는 +<p>Androidì—는 사용ìžì™€ ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ìƒí˜¸ 작용으로부터 ì´ë²¤íŠ¸ë¥¼ 가로채는 ë°©ë²•ì´ ì—¬ëŸ¬ 가지 있습니다. +ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë‚´ì˜ ì´ë²¤íŠ¸ê°€ ê´€ë ¨ëœ ê²½ìš°, ì´ëŸ¬í•œ ë°©ì‹ì€ ì´ë²¤íŠ¸ë¥¼ 사용ìžê°€ ìƒí˜¸ 작용하는 íŠ¹ì • 보기 ê°ì²´ë¡œë¶€í„° 캡처하는 것입니다. ì´ì— 필요한 ìˆ˜ë‹¨ì€ ë³´ê¸° í´ëž˜ìŠ¤ê°€ ì œê³µí•©ë‹ˆë‹¤.</p> -<p>ë ˆì´ì•„ì›ƒì„ ìž‘ì„±í•˜ëŠ” ë° ì‚¬ìš©í•˜ê²Œ ë˜ëŠ” 여러 가지 보기 í´ëž˜ìФ ì•ˆì„ ë³´ë©´ UI ì´ë²¤íŠ¸ì— ìœ ìš©í•´ ë³´ì´ëŠ” 공개 콜백 -메서드가 여러 ê°œ 있는 ê²ƒì´ ëˆˆì— ë•니다. ì´ëŸ¬í•œ 메서드는 해당 ê°ì²´ì—서 ê°ê°ì˜ ìž‘ì—…ì´ ë°œìƒí• 때 Android í”„ë ˆìž„ì›Œí¬ê°€ -호출하는 것입니다. 예를 들어 보기(예: 버튼)를 하나 터치하면 -해당 ê°ì²´ì—서 <code>onTouchEvent()</code> 메서드가 호출ë©ë‹ˆë‹¤. 그러나 ì´ê²ƒì„ ê°€ë¡œì±„ë ¤ë©´ í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ -메서드를 ìž¬ì •ì˜í•´ì•¼ 합니다. 다만 그런 ì´ë²¤íŠ¸ë¥¼ 처리하기 위해 ëª¨ë“ ë³´ê¸° ê°ì²´ë¥¼ -다 확장하는 ê²ƒì€ íƒ€ë‹¹ì„±ì´ ì—†ìŠµë‹ˆë‹¤. ì´ ë•Œë¬¸ì— ë³´ê¸° í´ëž˜ìŠ¤ì— -ì¼ë ¨ì˜ ì¤‘ì²©ëœ ì¸í„°íŽ˜ì´ìŠ¤ê°€ ìžˆê³ ê±°ê¸°ì— í›¨ì”¬ 쉽게 ì •ì˜í• 수 있는 ì½œë°±ì— ìžˆìŠµë‹ˆë‹¤. ì´ì™€ ê°™ì€ +<p>ë ˆì´ì•„ì›ƒì„ ìž‘ì„±í•˜ëŠ” ë° ì‚¬ìš©í•˜ê²Œ ë˜ëŠ” 여러 가지 보기 í´ëž˜ìФ ì•ˆì„ ë³´ë©´ UI ì´ë²¤íŠ¸ì— ìœ ìš©í•´ ë³´ì´ëŠ” 공개 콜백 +메서드가 여러 ê°œ 있는 ê²ƒì´ ëˆˆì— ë•니다. ì´ëŸ¬í•œ 메서드는 해당 ê°ì²´ì—서 ê°ê°ì˜ ìž‘ì—…ì´ ë°œìƒí• 때 Android í”„ë ˆìž„ì›Œí¬ê°€ +호출하는 것입니다. 예를 들어 보기(예: 버튼)를 하나 터치하면 +해당 ê°ì²´ì—서 <code>onTouchEvent()</code> 메서드가 호출ë©ë‹ˆë‹¤. 그러나 ì´ê²ƒì„ ê°€ë¡œì±„ë ¤ë©´ í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ +메서드를 ìž¬ì •ì˜í•´ì•¼ 합니다. 다만 그런 ì´ë²¤íŠ¸ë¥¼ 처리하기 위해 ëª¨ë“ ë³´ê¸° ê°ì²´ë¥¼ +다 확장하는 ê²ƒì€ íƒ€ë‹¹ì„±ì´ ì—†ìŠµë‹ˆë‹¤. ì´ ë•Œë¬¸ì— ë³´ê¸° í´ëž˜ìŠ¤ì— +ì¼ë ¨ì˜ ì¤‘ì²©ëœ ì¸í„°íŽ˜ì´ìŠ¤ê°€ ìžˆê³ ê±°ê¸°ì— í›¨ì”¬ 쉽게 ì •ì˜í• 수 있는 ì½œë°±ì— ìžˆìŠµë‹ˆë‹¤. ì´ì™€ ê°™ì€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì¼ëª… <a href="#EventListeners">ì´ë²¤íЏ ìˆ˜ì‹ ê¸°</a>ë¼ê³ 하는ë°, ì´ê²ƒì´ UI와 ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ìº¡ì²˜í•˜ëŠ” ë° ì•„ì£¼ ì 합합니다.</p> -<p>ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ìˆ˜ì‹ ëŒ€ê¸°í•˜ëŠ” ë°ì—는 ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ë¥¼ 사용하는 ê²ƒì´ ì¢€ ë” ë³´íŽ¸ì ì´ì§€ë§Œ, ì‚¬ìš©ìž ì§€ì • -구성 요소를 구축하기 위해 보기 í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìž í•˜ëŠ” ìƒí™©ì´ 올 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +<p>ì‚¬ìš©ìž ìƒí˜¸ ìž‘ìš©ì„ ìˆ˜ì‹ ëŒ€ê¸°í•˜ëŠ” ë°ì—는 ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ë¥¼ 사용하는 ê²ƒì´ ì¢€ ë” ë³´íŽ¸ì ì´ì§€ë§Œ, ì‚¬ìš©ìž ì§€ì • +구성 요소를 구축하기 위해 보기 í´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìž í•˜ëŠ” ìƒí™©ì´ 올 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 어쩌면 {@link android.widget.Button} -í´ëž˜ìŠ¤ë¥¼ 확장하여 무언가 ë” ë³µìž¡í•œ ê²ƒì„ ë§Œë“¤ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° 경우, í´ëž˜ìŠ¤ì— ëŒ€í•œ 기본 ì´ë²¤íЏ í–‰ë™ì„ í´ëž˜ìФ +í´ëž˜ìŠ¤ë¥¼ 확장하여 무언가 ë” ë³µìž¡í•œ ê²ƒì„ ë§Œë“¤ê³ ìž í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ° 경우, í´ëž˜ìŠ¤ì— ëŒ€í•œ 기본 ì´ë²¤íЏ í–‰ë™ì„ í´ëž˜ìФ <a href="#EventHandlers">ì´ë²¤íЏ 처리기</a>를 사용하여 ì •ì˜í• 수 있습니다.</p> <h2 id="EventListeners">ì´ë²¤íЏ ìˆ˜ì‹ ê¸°</h2> -<p>ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ëž€ {@link android.view.View} í´ëž˜ìФ ë‚´ì— ìžˆëŠ” ì¼ì¢…ì˜ ì¸í„°íŽ˜ì´ìŠ¤ë¡œ, ì´ ì•ˆì— í•˜ë‚˜ì˜ -콜백 메서드가 들어있습니다. ì´ëŸ¬í•œ 메서드는 ìˆ˜ì‹ ê¸°ê°€ 등ë¡ëœ 보기가 UI ì•ˆì˜ í•목과 사용ìžì˜ ìƒí˜¸ 작용으로 ì¸í•˜ì—¬ 트리거ë˜ì—ˆì„ 때 +<p>ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ëž€ {@link android.view.View} í´ëž˜ìФ ë‚´ì— ìžˆëŠ” ì¼ì¢…ì˜ ì¸í„°íŽ˜ì´ìŠ¤ë¡œ, ì´ ì•ˆì— í•˜ë‚˜ì˜ +콜백 메서드가 들어있습니다. ì´ëŸ¬í•œ 메서드는 ìˆ˜ì‹ ê¸°ê°€ 등ë¡ëœ 보기가 UI ì•ˆì˜ í•목과 사용ìžì˜ ìƒí˜¸ 작용으로 ì¸í•˜ì—¬ 트리거ë˜ì—ˆì„ 때 Android í”„ë ˆìž„ì›Œí¬ê°€ 호출하는 것입니다.</p> <p>ì´ë²¤íЏ ìˆ˜ì‹ ê¸° ì¸í„°íŽ˜ì´ìŠ¤ì— í¬í•¨ëœ 콜백 메서드는 다ìŒê³¼ 같습니다.</p> <dl> <dt><code>onClick()</code></dt> - <dd>{@link android.view.View.OnClickListener}ì—서 온 것입니다. + <dd>{@link android.view.View.OnClickListener}ì—서 온 것입니다. ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ í•ëª©ì„ í„°ì¹˜í•˜ê±°ë‚˜ -(터치 ëª¨ë“œì— ìžˆì„ ë•Œ), íƒìƒ‰ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ 해당 í•ëª©ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆìœ¼ë©´ì„œ +(터치 ëª¨ë“œì— ìžˆì„ ë•Œ), íƒìƒ‰ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ 해당 í•ëª©ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆìœ¼ë©´ì„œ ì ì ˆí•œ "엔터" 키를 누르거나 íŠ¸ëž™ë³¼ì„ ê¾¹ 누를 때입니다.</dd> <dt><code>onLongClick()</code></dt> - <dd>{@link android.view.View.OnLongClickListener}ì—서 온 것입니다. -ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ í•ëª©ì„ ê¸¸ê²Œ 누르거나(터치 ëª¨ë“œì— ìžˆì„ ë•Œ), -íƒìƒ‰ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ 해당 í•ëª©ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆìœ¼ë©´ì„œ + <dd>{@link android.view.View.OnLongClickListener}ì—서 온 것입니다. +ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ í•ëª©ì„ ê¸¸ê²Œ 누르거나(터치 ëª¨ë“œì— ìžˆì„ ë•Œ), +íƒìƒ‰ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ 해당 í•ëª©ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆìœ¼ë©´ì„œ ì ì ˆí•œ "엔터" 키를 누르거나 íŠ¸ëž™ë³¼ì„ ê¾¹ 누를 때입니다(ì¼ ì´ˆê°„).</dd> <dt><code>onFocusChange()</code></dt> - <dd>{@link android.view.View.OnFocusChangeListener}ì—서 온 것입니다. + <dd>{@link android.view.View.OnFocusChangeListener}ì—서 온 것입니다. ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ íƒìƒ‰ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ í•목 쪽으로 ì´ë™í•˜ê±°ë‚˜ í•목ì—서 멀어질 때입니다.</dd> <dt><code>onKey()</code></dt> - <dd>{@link android.view.View.OnKeyListener}ì—서 온 것입니다. + <dd>{@link android.view.View.OnKeyListener}ì—서 온 것입니다. ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ í•ëª©ì— ì´ˆì ì„ ë§žì¶”ê³ ìžˆìœ¼ë©´ì„œ ê¸°ê¸°ì— ìžˆëŠ” 하드웨어 키를 누르거나 키ì—서 ì†ì„ 떼는 경우입니다.</dd> <dt><code>onTouch()</code></dt> - <dd>{@link android.view.View.OnTouchListener}ì—서 온 것입니다. -ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ 터치 ì´ë²¤íŠ¸ë¡œì„œì˜ ìžê²©ì„ 만족하는 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우로, ì—¬ê¸°ì— + <dd>{@link android.view.View.OnTouchListener}ì—서 온 것입니다. +ì´ê²ƒì´ 호출ë˜ëŠ” ê²ƒì€ ì‚¬ìš©ìžê°€ 터치 ì´ë²¤íŠ¸ë¡œì„œì˜ ìžê²©ì„ 만족하는 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 경우로, ì—¬ê¸°ì— ëˆ„ë¥´ê¸°, ì† ë–¼ê¸°ì™€ 화면ì—서 ì´ë£¨ì–´ì§€ëŠ” ëª¨ë“ ì›€ì§ìž„ ë™ìž‘(í•ëª©ì˜ ê²½ê³„ ë‚´ì—서)ì´ í¬í•¨ë©ë‹ˆë‹¤.</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>{@link android.view.View.OnCreateContextMenuListener}ì—서 온 것입니다. -ì´ê²ƒì„ 호출하는 ê²ƒì€ ì»¨í…스트 메뉴가 구축ë˜ëŠ” ì¤‘ì¼ ë•Œìž…ë‹ˆë‹¤(ì •ì²´ëœ "롱 í´ë¦"ì˜ ê²°ê³¼ë¡œ). + <dd>{@link android.view.View.OnCreateContextMenuListener}ì—서 온 것입니다. +ì´ê²ƒì„ 호출하는 ê²ƒì€ ì»¨í…스트 메뉴가 구축ë˜ëŠ” ì¤‘ì¼ ë•Œìž…ë‹ˆë‹¤(ì •ì²´ëœ "롱 í´ë¦"ì˜ ê²°ê³¼ë¡œ). <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">메뉴</a> ê°œë°œìž ê°€ì´ë“œì— 있는 컨í…스트 메뉴 ê´€ë ¨ ë…¼ì˜ë¥¼ 참조하ì‹ì‹œì˜¤.</dd> </dl> -<p>ì´ëŸ¬í•œ 메서드는 ê°ìžì˜ ì¸í„°íŽ˜ì´ìФ ì•ˆì— ê±°ì£¼í•˜ëŠ” ìœ ì¼í•œ 주민입니다. ì´ëŸ¬í•œ 메서드 중 하나를 -ì •ì˜í•˜ê³ ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í•˜ë ¤ë©´ 액티비티 ë‚´ì˜ ì¤‘ì²©ëœ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하거나 ìµëª…ì˜ í´ëž˜ìŠ¤ë¡œ ì •ì˜í•˜ë©´ ë©ë‹ˆë‹¤. -그런 ë‹¤ìŒ êµ¬í˜„ì˜ ì¸ìŠ¤í„´ìŠ¤ 하나를 -ê°ê°ì˜ <code>View.set...Listener()</code> ë©”ì„œë“œì— ì „ë‹¬í•˜ì‹ì‹œì˜¤ (예: -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>를 +<p>ì´ëŸ¬í•œ 메서드는 ê°ìžì˜ ì¸í„°íŽ˜ì´ìФ ì•ˆì— ê±°ì£¼í•˜ëŠ” ìœ ì¼í•œ 주민입니다. ì´ëŸ¬í•œ 메서드 중 하나를 +ì •ì˜í•˜ê³ ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í•˜ë ¤ë©´ 액티비티 ë‚´ì˜ ì¤‘ì²©ëœ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하거나 ìµëª…ì˜ í´ëž˜ìŠ¤ë¡œ ì •ì˜í•˜ë©´ ë©ë‹ˆë‹¤. +그런 ë‹¤ìŒ êµ¬í˜„ì˜ ì¸ìŠ¤í„´ìŠ¤ 하나를 +ê°ê°ì˜ <code>View.set...Listener()</code> ë©”ì„œë“œì— ì „ë‹¬í•˜ì‹ì‹œì˜¤ (예: +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>를 호출한 ë‹¤ìŒ ì´ë¥¼ {@link android.view.View.OnClickListener OnClickListener}ì˜ êµ¬í˜„ì— ì „ë‹¬í•©ë‹ˆë‹¤).</p> <p>ì•„ëž˜ì˜ ì˜ˆì‹œëŠ” ë²„íŠ¼ì— ëŒ€í•˜ì—¬ 온-í´ë¦ ìˆ˜ì‹ ê¸°ë¥¼ 등ë¡í•˜ëŠ” ë°©ë²•ì„ ë‚˜íƒ€ë‚¸ 것입니다. </p> @@ -117,57 +117,57 @@ public class ExampleActivity extends Activity implements OnClickListener { } </pre> -<p>ìœ„ì˜ ì˜ˆì‹œì—서 <code>onClick()</code> 콜백ì—는 -반환 ê°’ì´ ì—†ì§€ë§Œ 다른 ì´ë²¤íЏ ìˆ˜ì‹ ê¸° 메서드 중ì—는 부울 ê°’ì„ ë°˜í™˜í•´ì•¼ë§Œ 하는 ê²ƒë„ ìžˆë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ê·¸ ì´ìœ 는 ì´ë²¤íŠ¸ì— ë”°ë¼ +<p>ìœ„ì˜ ì˜ˆì‹œì—서 <code>onClick()</code> 콜백ì—는 +반환 ê°’ì´ ì—†ì§€ë§Œ 다른 ì´ë²¤íЏ ìˆ˜ì‹ ê¸° 메서드 중ì—는 부울 ê°’ì„ ë°˜í™˜í•´ì•¼ë§Œ 하는 ê²ƒë„ ìžˆë‹¤ëŠ” ì ì„ ìœ ì˜í•˜ì‹ì‹œì˜¤. ê·¸ ì´ìœ 는 ì´ë²¤íŠ¸ì— ë”°ë¼ ë‹¤ë¦…ë‹ˆë‹¤. ì´ëŸ° 필수 사í•ì´ ì ìš©ë˜ëŠ” 몇몇 ë©”ì„œë“œì˜ ê²½ìš°, ì´ìœ 는 다ìŒê³¼ 같습니다.</p> <ul> - <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - -ì´ê²ƒì€ 부울 ê°’ì„ ë°˜í™˜í•˜ì—¬ ì´ë²¤íŠ¸ë¥¼ ì™„ì „ížˆ 사용하였으며 ë” ì´ìƒ ì´ë¥¼ ë‹´ì§€ ì•Šì•„ë„ ë˜ëŠ”ì§€ 여부를 나타냅니다. -다시 ë§í•´, <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ë¥¼ 처리했으며 여기ì—서 중단해야 한다는 ê²ƒì„ ì˜ë¯¸í•˜ë©° -<em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ ì•„ì§ ë¯¸ì²˜ë¦¬ ìƒíƒœì´ë©°/거나 ì´ ì´ë²¤íŠ¸ë¥¼ 다른 + <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - +ì´ê²ƒì€ 부울 ê°’ì„ ë°˜í™˜í•˜ì—¬ ì´ë²¤íŠ¸ë¥¼ ì™„ì „ížˆ 사용하였으며 ë” ì´ìƒ ì´ë¥¼ ë‹´ì§€ ì•Šì•„ë„ ë˜ëŠ”ì§€ 여부를 나타냅니다. +다시 ë§í•´, <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ë¥¼ 처리했으며 여기ì—서 중단해야 한다는 ê²ƒì„ ì˜ë¯¸í•˜ë©° +<em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ ì•„ì§ ë¯¸ì²˜ë¦¬ ìƒíƒœì´ë©°/거나 ì´ ì´ë²¤íŠ¸ë¥¼ 다른 온-í´ë¦ ìˆ˜ì‹ ê¸°ë¡œ ê³„ì† ì§„í–‰í•´ì•¼ í• ì§€ 나타내는 것입니다.</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> - ì´ê²ƒì€ 부울 ê°’ì„ ë°˜í™˜í•˜ì—¬ ì´ë²¤íŠ¸ë¥¼ ì™„ì „ížˆ 사용하였으며 ë” ì´ìƒ ì´ë¥¼ ë‹´ì§€ ì•Šì•„ë„ ë˜ëŠ”ì§€ 여부를 나타냅니다. - 다시 ë§í•´, <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ë¥¼ 처리했으며 여기ì—서 중단해야 한다는 ê²ƒì„ ì˜ë¯¸í•˜ë©° -<em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ ì•„ì§ ë¯¸ì²˜ë¦¬ ìƒíƒœì´ë©°/거나 ì´ ì´ë²¤íŠ¸ë¥¼ 다른 + 다시 ë§í•´, <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ë¥¼ 처리했으며 여기ì—서 중단해야 한다는 ê²ƒì„ ì˜ë¯¸í•˜ë©° +<em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ ì•„ì§ ë¯¸ì²˜ë¦¬ ìƒíƒœì´ë©°/거나 ì´ ì´ë²¤íŠ¸ë¥¼ 다른 온-키 ìˆ˜ì‹ ê¸°ë¡œ ê³„ì† ì§„í–‰í•´ì•¼ í• ì§€ 나타내는 것입니다.</li> - <li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> - -ì´ê²ƒì€ 부울 ê°’ì„ ë°˜í™˜í•˜ì—¬ ìˆ˜ì‹ ê¸°ê°€ ì´ ì´ë²¤íŠ¸ë¥¼ 사용하는지 아닌지를 나타냅니다. 여기서 중요한 ì ì€ -ì´ ì´ë²¤íЏì—는 서로 연달아 ë°œìƒí•˜ëŠ” 여러 ê°œì˜ ìž‘ì—…ì´ ìžˆì„ ìˆ˜ 있다는 것입니다. 그러므로 '아래로' 작업 ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í–ˆì„ ë•Œ <em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´, -해당 ì´ë²¤íŠ¸ë¥¼ 사용하지 않았으며 ì´ ì´ë²¤íŠ¸ë¡œë¶€í„° ì´ì–´ì§€ëŠ” ì´í›„ì˜ ìž‘ì—…ì— -í¥ë¯¸ê°€ ì—†ìŒì„ 나타내는 ê²ƒì´ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ ì´ ì´ë²¤íЏ ë‚´ì˜ ë‹¤ë¥¸ ëª¨ë“ ìž‘ì—…ì— ëŒ€í•´ + <li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> - +ì´ê²ƒì€ 부울 ê°’ì„ ë°˜í™˜í•˜ì—¬ ìˆ˜ì‹ ê¸°ê°€ ì´ ì´ë²¤íŠ¸ë¥¼ 사용하는지 아닌지를 나타냅니다. 여기서 중요한 ì ì€ +ì´ ì´ë²¤íЏì—는 서로 연달아 ë°œìƒí•˜ëŠ” 여러 ê°œì˜ ìž‘ì—…ì´ ìžˆì„ ìˆ˜ 있다는 것입니다. 그러므로 '아래로' 작업 ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ í–ˆì„ ë•Œ <em>ê±°ì§“</em>ì„ ë°˜í™˜í•˜ë©´, +해당 ì´ë²¤íŠ¸ë¥¼ 사용하지 않았으며 ì´ ì´ë²¤íŠ¸ë¡œë¶€í„° ì´ì–´ì§€ëŠ” ì´í›„ì˜ ìž‘ì—…ì— +í¥ë¯¸ê°€ ì—†ìŒì„ 나타내는 ê²ƒì´ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ ì´ ì´ë²¤íЏ ë‚´ì˜ ë‹¤ë¥¸ ëª¨ë“ ìž‘ì—…ì— ëŒ€í•´ 호출ë˜ì§€ 않습니다(예: ì†ê°€ë½ ë™ìž‘ ë˜ëŠ” 최종ì ì¸ '위로' 작업 ì´ë²¤íЏ 등).</li> </ul> -<p>하드웨어 키 ì´ë²¤íŠ¸ëŠ” í•ìƒ í˜„ìž¬ ì´ˆì ì˜ ì¤‘ì‹¬ì— ìžˆëŠ” 보기로 ì „ë‹¬ëœë‹¤ëŠ” ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. ì´ë“¤ì€ 보기 ê³„ì¸µì˜ ë§¨ 위ì—서 시작하여 -아래 방향으로 발송ë˜ì–´ ì ì ˆí•œ 목ì ì§€ì— ë„ë‹¬í• ë•Œê¹Œì§€ 계ì†í•©ë‹ˆë‹¤. 보기(ë˜ëŠ” ë³´ê¸°ì˜ í•˜ìœ„)ì— +<p>하드웨어 키 ì´ë²¤íŠ¸ëŠ” í•ìƒ í˜„ìž¬ ì´ˆì ì˜ ì¤‘ì‹¬ì— ìžˆëŠ” 보기로 ì „ë‹¬ëœë‹¤ëŠ” ì ì„ ëª…ì‹¬í•˜ì‹ì‹œì˜¤. ì´ë“¤ì€ 보기 ê³„ì¸µì˜ ë§¨ 위ì—서 시작하여 +아래 방향으로 발송ë˜ì–´ ì ì ˆí•œ 목ì ì§€ì— ë„ë‹¬í• ë•Œê¹Œì§€ 계ì†í•©ë‹ˆë‹¤. 보기(ë˜ëŠ” ë³´ê¸°ì˜ í•˜ìœ„)ì— í˜„ìž¬ ì´ˆì ì´ ë§žì¶°ì ¸ 있으면, ì´ë²¤íŠ¸ê°€ <code>{@link android.view.View#dispatchKeyEvent(KeyEvent) -dispatchKeyEvent()}</code> 메서드를 통과하여 ì´ë™í•˜ëŠ” ê²ƒì„ í™•ì¸í• 수 있습니다. 보기를 통해 키 ì´ë²¤íŠ¸ë¥¼ 캡처하는 ëŒ€ì‹ , 액티비티 ë‚´ë¶€ì˜ ëª¨ë“ ì´ë²¤íŠ¸ë¥¼ <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>ë° +dispatchKeyEvent()}</code> 메서드를 통과하여 ì´ë™í•˜ëŠ” ê²ƒì„ í™•ì¸í• 수 있습니다. 보기를 통해 키 ì´ë²¤íŠ¸ë¥¼ 캡처하는 ëŒ€ì‹ , 액티비티 ë‚´ë¶€ì˜ ëª¨ë“ ì´ë²¤íŠ¸ë¥¼ <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>ë° <code>{@link android.app.Activity#onKeyUp(int,KeyEvent) onKeyUp()}</code>ì„ ì‚¬ìš©í•˜ì—¬ ìˆ˜ì‹ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> -<p>ë˜í•œ, ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 í…스트 ìž…ë ¥ì˜ ê²½ìš° ëŒ€ë‹¤ìˆ˜ì˜ ê¸°ê¸°ì—는 소프트웨어 ìž…ë ¥ 메서드만 있다는 ì‚¬ì‹¤ì„ -명심하ì‹ì‹œì˜¤. 그러한 메서드는 반드시 키 ê¸°ë°˜ì´ ì•„ë‹ˆì–´ë„ ë©ë‹ˆë‹¤. ìŒì„± ìž…ë ¥, ì†ê¸€ì”¨ ë“±ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒë„ ìžˆìŠµë‹ˆë‹¤. ìž…ë ¥ -메서드가 키보드 ê°™ì€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 표시하ë”ë¼ë„ ì¼ë°˜ì 으로 -<code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code> ì´ë²¤íŠ¸êµ°ì„ íŠ¸ë¦¬ê±°í•˜ì§€ëŠ” <strong>않습니다</strong>. íŠ¹ì • 키 ëˆ„ë¦„ì„ -ì œì–´í•´ì•¼ë§Œ 하는 UI는 ì ˆëŒ€ 구축하면 안 ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 하드웨어 키보드가 있는 -기기ì—ë§Œ í•œì •ë©ë‹ˆë‹¤. 특히, 사용ìžê°€ 리턴 키를 누르면 ìž…ë ¥ì˜ ìœ íš¨ì„±ì„ ê²€ì‚¬í•˜ëŠ” ë° ì´ì™€ ê°™ì€ ë©”ì„œë“œì— -ì˜ì¡´í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , {@link android.view.inputmethod.EditorInfo#IME_ACTION_DONE}ê³¼ ê°™ì€ ìž‘ì—…ì„ ì‚¬ìš©í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°˜ì‘í• ê²ƒìœ¼ë¡œ 기대ë˜ëŠ” ë°©ì‹ì— 해당ë˜ëŠ” -ìž…ë ¥ 메서드를 ì‹ í˜¸í•˜ì—¬ ì˜ë¯¸ 있는 ë°©ì‹ìœ¼ë¡œ UI를 ë³€ê²½í• ìˆ˜ 있게 하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 소프트웨어 ìž…ë ¥ 메서드가 +<p>ë˜í•œ, ì• í”Œë¦¬ì¼€ì´ì…˜ì— 대한 í…스트 ìž…ë ¥ì˜ ê²½ìš° ëŒ€ë‹¤ìˆ˜ì˜ ê¸°ê¸°ì—는 소프트웨어 ìž…ë ¥ 메서드만 있다는 ì‚¬ì‹¤ì„ +명심하ì‹ì‹œì˜¤. 그러한 메서드는 반드시 키 ê¸°ë°˜ì´ ì•„ë‹ˆì–´ë„ ë©ë‹ˆë‹¤. ìŒì„± ìž…ë ¥, ì†ê¸€ì”¨ ë“±ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒë„ ìžˆìŠµë‹ˆë‹¤. ìž…ë ¥ +메서드가 키보드 ê°™ì€ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 표시하ë”ë¼ë„ ì¼ë°˜ì 으로 +<code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code> ì´ë²¤íŠ¸êµ°ì„ íŠ¸ë¦¬ê±°í•˜ì§€ëŠ” <strong>않습니다</strong>. íŠ¹ì • 키 ëˆ„ë¦„ì„ +ì œì–´í•´ì•¼ë§Œ 하는 UI는 ì ˆëŒ€ 구축하면 안 ë©ë‹ˆë‹¤. ì´ë ‡ê²Œ 하면 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 하드웨어 키보드가 있는 +기기ì—ë§Œ í•œì •ë©ë‹ˆë‹¤. 특히, 사용ìžê°€ 리턴 키를 누르면 ìž…ë ¥ì˜ ìœ íš¨ì„±ì„ ê²€ì‚¬í•˜ëŠ” ë° ì´ì™€ ê°™ì€ ë©”ì„œë“œì— +ì˜ì¡´í•´ì„œëŠ” 안 ë©ë‹ˆë‹¤. ëŒ€ì‹ , {@link android.view.inputmethod.EditorInfo#IME_ACTION_DONE}ê³¼ ê°™ì€ ìž‘ì—…ì„ ì‚¬ìš©í•˜ì—¬ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ë°˜ì‘í• ê²ƒìœ¼ë¡œ 기대ë˜ëŠ” ë°©ì‹ì— 해당ë˜ëŠ” +ìž…ë ¥ 메서드를 ì‹ í˜¸í•˜ì—¬ ì˜ë¯¸ 있는 ë°©ì‹ìœ¼ë¡œ UI를 ë³€ê²½í• ìˆ˜ 있게 하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 소프트웨어 ìž…ë ¥ 메서드가 어떻게 ìž‘ë™í• ì§€ ìž„ì˜ë¡œ ì¶”ì •í•˜ì§€ ë§ˆì‹œê³ , ì´ë¯¸ ì„œì‹ ì§€ì •ëœ í…스트를 ì• í”Œë¦¬ì¼€ì´ì…˜ì— ì œê³µí•´ì¤„ 것ì´ë¼ 믿으면 ë©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> Androids는 ìš°ì„ ì´ë²¤íЏ 처리기부터 í˜¸ì¶œí•˜ê³ , ê·¸ 다ìŒì— í´ëž˜ìФ ì •ì˜ë¡œë¶€í„° ê°€ì ¸ì˜¨ -ì ì ˆí•œ 기본 처리기를 ë‘ ë²ˆì§¸ë¡œ 호출합니다. ë”°ë¼ì„œ, ì´ì™€ ê°™ì€ ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ì—서 <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ -다른 ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ë¡œ ì „íŒŒë˜ëŠ” ê²ƒì„ ì¤‘ì§€ì‹œí‚¬ ë¿ë§Œ ì•„ë‹ˆë¼ ë³´ê¸°ì— ìžˆëŠ” +<p class="note"><strong>ì°¸ê³ :</strong> Androids는 ìš°ì„ ì´ë²¤íЏ 처리기부터 í˜¸ì¶œí•˜ê³ , ê·¸ 다ìŒì— í´ëž˜ìФ ì •ì˜ë¡œë¶€í„° ê°€ì ¸ì˜¨ +ì ì ˆí•œ 기본 처리기를 ë‘ ë²ˆì§¸ë¡œ 호출합니다. ë”°ë¼ì„œ, ì´ì™€ ê°™ì€ ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ì—서 <em>ì°¸</em>ì„ ë°˜í™˜í•˜ë©´ ì´ë²¤íŠ¸ê°€ +다른 ì´ë²¤íЏ ìˆ˜ì‹ ê¸°ë¡œ ì „íŒŒë˜ëŠ” ê²ƒì„ ì¤‘ì§€ì‹œí‚¬ ë¿ë§Œ ì•„ë‹ˆë¼ ë³´ê¸°ì— ìžˆëŠ” 기본 ì´ë²¤íЏ ì²˜ë¦¬ê¸°ë¡œì˜ ì½œë°±ë„ ì°¨ë‹¨í•˜ê²Œ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ <em>ì°¸</em>ì„ ë°˜í™˜í•˜ëŠ” 경우 해당 ì´ë²¤íŠ¸ë¥¼ ì¢…ë£Œí•˜ê³ ì‹¶ì€ ê²ƒì¸ì§€ í™•ì‹ í•´ì•¼ 합니다.</p> <h2 id="EventHandlers">ì´ë²¤íЏ 처리기</h2> -<p>보기ì—서 ì‚¬ìš©ìž ì§€ì • 구성 요소를 구축하는 경우, 기본 ì´ë²¤íЏ 처리기로 사용ë 콜백 메서드를 +<p>보기ì—서 ì‚¬ìš©ìž ì§€ì • 구성 요소를 구축하는 경우, 기본 ì´ë²¤íЏ 처리기로 사용ë 콜백 메서드를 여러 ê°œ ì •ì˜í• 수 있게 ë©ë‹ˆë‹¤. <a href="{@docRoot}guide/topics/ui/custom-components.html">ì‚¬ìš©ìž ì§€ì • -구성 요소</a>ì— ëŒ€í•œ 문서를 ë³´ë©´ ì´ë²¤íЏ ì²˜ë¦¬ì— ì‚¬ìš©ë˜ëŠ” 몇 가지 보편ì ì¸ ì½œë°±ì„ í™•ì¸í• 수 있습니다. +구성 요소</a>ì— ëŒ€í•œ 문서를 ë³´ë©´ ì´ë²¤íЏ ì²˜ë¦¬ì— ì‚¬ìš©ë˜ëŠ” 몇 가지 보편ì ì¸ ì½œë°±ì„ í™•ì¸í• 수 있습니다. 다ìŒì€ ê·¸ 몇 가지 예입니다.</p> <ul> <li><code>{@link android.view.View#onKeyDown}</code> - 새로운 키 ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ë©´ 호출합니다.</li> @@ -176,68 +176,68 @@ dispatchKeyEvent()}</code> 메서드를 통과하여 ì´ë™í•˜ëŠ” ê²ƒì„ í™•ì¸í <li><code>{@link android.view.View#onTouchEvent}</code> - 터치 스í¬ë¦° ë™ìž‘ ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ë©´ 호출합니다.</li> <li><code>{@link android.view.View#onFocusChanged}</code> - 보기가 ì´ˆì ì„ ì·¨í•˜ê±°ë‚˜ ì´ë¥¼ 잃으면 호출합니다.</li> </ul> -<p>ê°œë°œìž ì—¬ëŸ¬ë¶„ì´ ì•Œì•„ë‘어야 하는 다른 메서드가 몇 가지 ë” ìžˆìŠµë‹ˆë‹¤. ì´ë“¤ì€ 보기 í´ëž˜ìŠ¤ì˜ ì¼ë¶€ë¶„ì´ ì•„ë‹ˆì§€ë§Œ, -ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있는 ë°©ì‹ì— ì§ì ‘ì 으로 ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있는 것들입니다. 그러니, ë ˆì´ì•„웃 안ì—서 좀 ë” ë³µìž¡í•œ ì´ë²¤íŠ¸ë¥¼ 관리하는 경우, +<p>ê°œë°œìž ì—¬ëŸ¬ë¶„ì´ ì•Œì•„ë‘어야 하는 다른 메서드가 몇 가지 ë” ìžˆìŠµë‹ˆë‹¤. ì´ë“¤ì€ 보기 í´ëž˜ìŠ¤ì˜ ì¼ë¶€ë¶„ì´ ì•„ë‹ˆì§€ë§Œ, +ì´ë²¤íŠ¸ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있는 ë°©ì‹ì— ì§ì ‘ì 으로 ì˜í–¥ì„ ë¯¸ì¹ ìˆ˜ 있는 것들입니다. 그러니, ë ˆì´ì•„웃 안ì—서 좀 ë” ë³µìž¡í•œ ì´ë²¤íŠ¸ë¥¼ 관리하는 경우, ì´ì™€ ê°™ì€ ë‹¤ë¥¸ ë©”ì„œë“œë„ ê³ ë ¤í•˜ì‹ì‹œì˜¤.</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> - ì´ê²ƒì„ 사용하면 {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> - ì´ê²ƒì„ 사용하면 {@link android.app.Activity}로 하여금 ëª¨ë“ í„°ì¹˜ ì´ë²¤íŠ¸ê°€ 창으로 발송ë˜ê¸° ì „ì— ì´ë“¤ì„ 가로채ë„ë¡ í• ìˆ˜ 있습니다.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - ì´ê²ƒì„ 사용하면 {@link android.view.ViewGroup}으로 하여금 ì´ë²¤íŠ¸ê°€ 하위 보기로 발송ë˜ëŠ” ê²ƒì„ ì§€ì¼œë³´ë„ë¡ í• ìˆ˜ 있습니다.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) - ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - ì´ê²ƒì„ -호출하는 ê²ƒì€ ìƒìœ„ ë³´ê¸°ì— <code>{@link + ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - ì´ê²ƒì„ +호출하는 ê²ƒì€ ìƒìœ„ ë³´ê¸°ì— <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>ê°€ 있는 터치 ì´ë²¤íŠ¸ë¥¼ 가로채면 안 ëœë‹¤ê³ 나타낼 때입니다.</li> </ul> <h2 id="TouchMode">터치 모드</h2> <p> -사용ìžê°€ ë°©í–¥ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ íƒìƒ‰í•˜ê³ 있는 경우, -조치 가능한 í•목(예: 버튼)ì— ì´ˆì ì„ ë§žì¶° ì–´ëŠ ê²ƒì´ ìž…ë ¥ì„ í—ˆìš©í• ì§€ 사용ìžê°€ -ë³¼ 수 있ë„ë¡ í•´ì•¼ 합니다. 하지만 ê¸°ê¸°ì— í„°ì¹˜ ê¸°ëŠ¥ì´ ìžˆê³ ì‚¬ìš©ìžê°€ -ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 터치하여 ì¸í„°íŽ˜ì´ìŠ¤ì™€ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì‹œìž‘í•˜ëŠ” 경우ë¼ë©´, ë” ì´ìƒ í•ëª©ì„ ê°•ì¡° 표시하거나 -íŠ¹ì • ë³´ê¸°ì— ì´ˆì ì„ ë§žì¶”ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ "터치 모드"ë¼ê³ 불리는 ìƒí˜¸ ìž‘ìš©ì— ëŒ€í•œ -모드가 따로 있습니다. +사용ìžê°€ ë°©í–¥ 키 ë˜ëŠ” íŠ¸ëž™ë³¼ì„ ì‚¬ìš©í•˜ì—¬ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ íƒìƒ‰í•˜ê³ 있는 경우, +조치 가능한 í•목(예: 버튼)ì— ì´ˆì ì„ ë§žì¶° ì–´ëŠ ê²ƒì´ ìž…ë ¥ì„ í—ˆìš©í• ì§€ 사용ìžê°€ +ë³¼ 수 있ë„ë¡ í•´ì•¼ 합니다. 하지만 ê¸°ê¸°ì— í„°ì¹˜ ê¸°ëŠ¥ì´ ìžˆê³ ì‚¬ìš©ìžê°€ +ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 터치하여 ì¸í„°íŽ˜ì´ìŠ¤ì™€ì˜ ìƒí˜¸ ìž‘ìš©ì„ ì‹œìž‘í•˜ëŠ” 경우ë¼ë©´, ë” ì´ìƒ í•ëª©ì„ ê°•ì¡° 표시하거나 +íŠ¹ì • ë³´ê¸°ì— ì´ˆì ì„ ë§žì¶”ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. ë”°ë¼ì„œ "터치 모드"ë¼ê³ 불리는 ìƒí˜¸ ìž‘ìš©ì— ëŒ€í•œ +모드가 따로 있습니다. </p> <p> -터치 ê¸°ëŠ¥ì´ ìžˆëŠ” ê¸°ê¸°ì˜ ê²½ìš°, 사용ìžê°€ í™”ë©´ì„ í„°ì¹˜í•˜ë©´ 기기가 터치 ëª¨ë“œì— -진입하게 ë©ë‹ˆë‹¤. ì´ ì‹œì 부터는 -{@link android.view.View#isFocusableInTouchMode}ê°€ ì°¸ì¸ ë³´ê¸°ì—ë§Œ ì´ˆì ì„ ë§žì¶œ 수 있습니다. 예를 들어 í…스트 편집 ìœ„ì ¯ì´ ì´ì— 해당ë©ë‹ˆë‹¤. -버튼처럼 í„°ì¹˜í• ìˆ˜ 있는 다른 ë³´ê¸°ì˜ ê²½ìš° í„°ì¹˜í•´ë„ ì£¼ì˜ë¥¼ ëŒ ìˆ˜ 없으며 ì´ë¥¼ 누르면 ê·¸ì € +터치 ê¸°ëŠ¥ì´ ìžˆëŠ” ê¸°ê¸°ì˜ ê²½ìš°, 사용ìžê°€ í™”ë©´ì„ í„°ì¹˜í•˜ë©´ 기기가 터치 ëª¨ë“œì— +진입하게 ë©ë‹ˆë‹¤. ì´ ì‹œì 부터는 +{@link android.view.View#isFocusableInTouchMode}ê°€ ì°¸ì¸ ë³´ê¸°ì—ë§Œ ì´ˆì ì„ ë§žì¶œ 수 있습니다. 예를 들어 í…스트 편집 ìœ„ì ¯ì´ ì´ì— 해당ë©ë‹ˆë‹¤. +버튼처럼 í„°ì¹˜í• ìˆ˜ 있는 다른 ë³´ê¸°ì˜ ê²½ìš° í„°ì¹˜í•´ë„ ì£¼ì˜ë¥¼ ëŒ ìˆ˜ 없으며 ì´ë¥¼ 누르면 ê·¸ì € 온-í´ë¦ ìˆ˜ì‹ ê¸°ë¥¼ 실행시키기만 합니다. </p> <p> -사용ìžê°€ ë°©í–¥ 키를 누르거나 트랙볼로 스í¬ë¡¤ ë™ìž‘ì„ í• ë•Œë§ˆë‹¤ 기기가 -터치 모드를 ì¢…ë£Œí•˜ê³ ì´ˆì ì„ ë§žì¶œ 보기를 찾습니다. ì´ì œ 사용ìžëŠ” ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì™€ +사용ìžê°€ ë°©í–¥ 키를 누르거나 트랙볼로 스í¬ë¡¤ ë™ìž‘ì„ í• ë•Œë§ˆë‹¤ 기기가 +터치 모드를 ì¢…ë£Œí•˜ê³ ì´ˆì ì„ ë§žì¶œ 보기를 찾습니다. ì´ì œ 사용ìžëŠ” ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ì™€ ìƒí˜¸ ìž‘ìš©ì„ ìž¬ê°œí•´ë„ ë˜ë©°, í™”ë©´ì„ í„°ì¹˜í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. </p> <p> -터치 모드 ìƒíƒœëŠ” 시스템 ì „ì²´ë¥¼ 통틀어 ìœ ì§€ë©ë‹ˆë‹¤(ëª¨ë“ ì°½ê³¼ 액티비티 í¬í•¨). -현재 ìƒíƒœë¥¼ ì¿¼ë¦¬í•˜ë ¤ë©´ +터치 모드 ìƒíƒœëŠ” 시스템 ì „ì²´ë¥¼ 통틀어 ìœ ì§€ë©ë‹ˆë‹¤(ëª¨ë“ ì°½ê³¼ 액티비티 í¬í•¨). +현재 ìƒíƒœë¥¼ ì¿¼ë¦¬í•˜ë ¤ë©´ {@link android.view.View#isInTouchMode}를 호출하여 기기가 현재 터치 ëª¨ë“œì— ìžˆëŠ”ì§€ 확ì¸í•˜ë©´ ë©ë‹ˆë‹¤. </p> <h2 id="HandlingFocus">ì´ˆì 처리하기</h2> -<p>í”„ë ˆìž„ì›Œí¬ê°€ ì‚¬ìš©ìž ìž…ë ¥ì— ì‘답하여 ì¼ìƒì ì¸ ì´ˆì ì´ë™ì„ 처리합니다. -여기ì—는 보기가 ì œê±°ë˜ê±°ë‚˜ 숨겨지는 것, ë˜ëŠ” 새 보기를 ì‚¬ìš©í• ìˆ˜ 있게 ë¨ì— ë”°ë¼ -ì´ˆì ì„ ë³€ê²½í•˜ëŠ” ê²ƒì´ í¬í•¨ë©ë‹ˆë‹¤. 보기는 ì´ˆì ì„ ì·¨í•˜ê³ ìž í•˜ëŠ” ì˜í–¥ì„ -<code>{@link android.view.View#isFocusable()}</code> 메서드를 통해 나타냅니다. 보기가 ì´ˆì ì„ ì·¨í• ìˆ˜ 있는지 여부를 ë³€ê²½í•˜ë ¤ë©´ -<code>{@link android.view.View#setFocusable(boolean) setFocusable()}</code>ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. 터치 ëª¨ë“œì— ìžˆëŠ” 경우, -ì–´ëŠ ë³´ê¸°ê°€ <code>{@link android.view.View#isFocusableInTouchMode()}</code>로 ì´ˆì ì„ ì·¨í•˜ëŠ” ê²ƒì„ í—ˆìš©í•˜ëŠ”ì§€ 여부를 ì¿¼ë¦¬í• ìˆ˜ 있습니다. +<p>í”„ë ˆìž„ì›Œí¬ê°€ ì‚¬ìš©ìž ìž…ë ¥ì— ì‘답하여 ì¼ìƒì ì¸ ì´ˆì ì´ë™ì„ 처리합니다. +여기ì—는 보기가 ì œê±°ë˜ê±°ë‚˜ 숨겨지는 것, ë˜ëŠ” 새 보기를 ì‚¬ìš©í• ìˆ˜ 있게 ë¨ì— ë”°ë¼ +ì´ˆì ì„ ë³€ê²½í•˜ëŠ” ê²ƒì´ í¬í•¨ë©ë‹ˆë‹¤. 보기는 ì´ˆì ì„ ì·¨í•˜ê³ ìž í•˜ëŠ” ì˜í–¥ì„ +<code>{@link android.view.View#isFocusable()}</code> 메서드를 통해 나타냅니다. 보기가 ì´ˆì ì„ ì·¨í• ìˆ˜ 있는지 여부를 ë³€ê²½í•˜ë ¤ë©´ +<code>{@link android.view.View#setFocusable(boolean) setFocusable()}</code>ì„ í˜¸ì¶œí•©ë‹ˆë‹¤. 터치 ëª¨ë“œì— ìžˆëŠ” 경우, +ì–´ëŠ ë³´ê¸°ê°€ <code>{@link android.view.View#isFocusableInTouchMode()}</code>로 ì´ˆì ì„ ì·¨í•˜ëŠ” ê²ƒì„ í—ˆìš©í•˜ëŠ”ì§€ 여부를 ì¿¼ë¦¬í• ìˆ˜ 있습니다. ì´ê²ƒì€ <code>{@link android.view.View#setFocusableInTouchMode(boolean) setFocusableInTouchMode()}</code>로 변경하면 ë©ë‹ˆë‹¤. </p> -<p>ì´ˆì ì´ë™ì€ 주어진 ë°©í–¥ì—서 가장 가까운 ì´ì›ƒì„ 찾아내는 ì•Œê³ ë¦¬ì¦˜ì„ ê¸°ë°˜ìœ¼ë¡œ -합니다. 드문 ì¼ì´ì§€ë§Œ 기본 ì•Œê³ ë¦¬ì¦˜ì´ ê°œë°œìžê°€ ì˜ë„한 í–‰ë™ê³¼ ì¼ì¹˜í•˜ì§€ 않는 -ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ¬í•œ ìƒí™©ì´ë¼ë©´, ë ˆì´ì•„웃 파ì¼ì—서 다ìŒê³¼ ê°™ì€ XML ì†ì„±ì„ +<p>ì´ˆì ì´ë™ì€ 주어진 ë°©í–¥ì—서 가장 가까운 ì´ì›ƒì„ 찾아내는 ì•Œê³ ë¦¬ì¦˜ì„ ê¸°ë°˜ìœ¼ë¡œ +합니다. 드문 ì¼ì´ì§€ë§Œ 기본 ì•Œê³ ë¦¬ì¦˜ì´ ê°œë°œìžê°€ ì˜ë„한 í–‰ë™ê³¼ ì¼ì¹˜í•˜ì§€ 않는 +ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŸ¬í•œ ìƒí™©ì´ë¼ë©´, ë ˆì´ì•„웃 파ì¼ì—서 다ìŒê³¼ ê°™ì€ XML ì†ì„±ì„ 사용하여 명시ì ìž¬ì •ì˜ë¥¼ ì œê³µí•˜ë©´ ë©ë‹ˆë‹¤. <var>nextFocusDown</var>, <var>nextFocusLeft</var>, <var>nextFocusRight</var>, ë° -<var>nextFocusUp</var>입니다. ì´ì™€ ê°™ì€ ì†ì„± 중 한 가지를 ì´ˆì ì´ <em>ë– ë‚˜ê³ </em> 있는 ë³´ê¸°ì— -추가합니다. ì†ì„±ì˜ ê°’ì„ ì´ˆì ì„ +<var>nextFocusUp</var>입니다. ì´ì™€ ê°™ì€ ì†ì„± 중 한 가지를 ì´ˆì ì´ <em>ë– ë‚˜ê³ </em> 있는 ë³´ê¸°ì— +추가합니다. ì†ì„±ì˜ ê°’ì„ ì´ˆì ì„ <em>맞춰야 í• </em> ë³´ê¸°ì˜ IDê°€ ë˜ë„ë¡ ì •ì˜í•©ë‹ˆë‹¤. 예:</p> <pre> <LinearLayout @@ -252,18 +252,18 @@ dispatchKeyEvent()}</code> 메서드를 통과하여 ì´ë™í•˜ëŠ” ê²ƒì„ í™•ì¸í </LinearLayout> </pre> -<p>ë³´í†µì€ ì´ëŸ° ìˆ˜ì§ ë ˆì´ì•„웃ì—서 첫 버튼부터 위로 ì´ë™í•˜ë©´ 아무 ë°ë„ ê°ˆ 수 ì—†ê³ , -ë‘ ë²ˆì§¸ 버튼ì—서 아래로 ì´ë™í•´ë„ 마찬가지입니다. ì´ì œ 맨 위 ë²„íŠ¼ì´ ë§¨ 아래 ë²„íŠ¼ì„ ë‹¤ìŒê³¼ ê°™ì´ -ì •ì˜í–ˆìŠµë‹ˆë‹¤. <var>nextFocusUp</var> (ë°˜ëŒ€ìª½ë„ ë§ˆì°¬ê°€ì§€) ë”°ë¼ì„œ ì´ë™ ì´ˆì ì€ ìœ„ì—서 아래로 갔다가 +<p>ë³´í†µì€ ì´ëŸ° ìˆ˜ì§ ë ˆì´ì•„웃ì—서 첫 버튼부터 위로 ì´ë™í•˜ë©´ 아무 ë°ë„ ê°ˆ 수 ì—†ê³ , +ë‘ ë²ˆì§¸ 버튼ì—서 아래로 ì´ë™í•´ë„ 마찬가지입니다. ì´ì œ 맨 위 ë²„íŠ¼ì´ ë§¨ 아래 ë²„íŠ¼ì„ ë‹¤ìŒê³¼ ê°™ì´ +ì •ì˜í–ˆìŠµë‹ˆë‹¤. <var>nextFocusUp</var> (ë°˜ëŒ€ìª½ë„ ë§ˆì°¬ê°€ì§€) ë”°ë¼ì„œ ì´ë™ ì´ˆì ì€ ìœ„ì—서 아래로 갔다가 아래ì—서 위로 순환하게 ë©ë‹ˆë‹¤.</p> -<p>보기를 UIì—서 ì´ˆì ì„ ë§žì¶œ 수 있는 것으로 ì„ ì–¸í•˜ê³ ìž í•˜ëŠ” 경우(ì¼ë°˜ì 으로는 ê·¸ë ‡ì§€ 않ìŒ), -ë³´ê¸°ì— ë ˆì´ì•„웃 ì„ ì–¸ì—서 <code>android:focusable</code> XML ì†ì„±ì„ 추가합니다. -ì´ ê°’ì„ <var>ì°¸</var>으로 ì„¤ì •í•©ë‹ˆë‹¤. 터치 ëª¨ë“œì— ìžˆì„ ë•Œì—ë„ ë³´ê¸°ë¥¼ ì´ˆì ì„ ë§žì¶œ 수 있는 것으로 +<p>보기를 UIì—서 ì´ˆì ì„ ë§žì¶œ 수 있는 것으로 ì„ ì–¸í•˜ê³ ìž í•˜ëŠ” 경우(ì¼ë°˜ì 으로는 ê·¸ë ‡ì§€ 않ìŒ), +ë³´ê¸°ì— ë ˆì´ì•„웃 ì„ ì–¸ì—서 <code>android:focusable</code> XML ì†ì„±ì„ 추가합니다. +ì´ ê°’ì„ <var>ì°¸</var>으로 ì„¤ì •í•©ë‹ˆë‹¤. 터치 ëª¨ë“œì— ìžˆì„ ë•Œì—ë„ ë³´ê¸°ë¥¼ ì´ˆì ì„ ë§žì¶œ 수 있는 것으로 ì„ ì–¸í• ìˆ˜ 있습니다. <code>android:focusableInTouchMode</code>를 사용하면 ë©ë‹ˆë‹¤.</p> <p>íŠ¹ì • ë³´ê¸°ì— ì´ˆì ì„ ë§žì¶”ê¸°ë¥¼ ìš”ì²í•˜ë ¤ë©´, <code>{@link android.view.View#requestFocus()}</code>를 호출하ì‹ì‹œì˜¤.</p> -<p>ì´ˆì ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ ëŒ€ê¸°í•˜ë ¤ë©´(ì–´ë–¤ ë³´ê¸°ì— ì´ˆì ì´ ë§žì¶°ì§€ê±°ë‚˜ ì´ë¥¼ 잃는 경우 ì•Œë¦¼ì„ ë°›ìœ¼ë ¤ë©´), -<code>{@link android.view.View.OnFocusChangeListener#onFocusChange(View,boolean) onFocusChange()}</code>를 사용하면 ë©ë‹ˆë‹¤. +<p>ì´ˆì ì´ë²¤íŠ¸ë¥¼ ìˆ˜ì‹ ëŒ€ê¸°í•˜ë ¤ë©´(ì–´ë–¤ ë³´ê¸°ì— ì´ˆì ì´ ë§žì¶°ì§€ê±°ë‚˜ ì´ë¥¼ 잃는 경우 ì•Œë¦¼ì„ ë°›ìœ¼ë ¤ë©´), +<code>{@link android.view.View.OnFocusChangeListener#onFocusChange(View,boolean) onFocusChange()}</code>를 사용하면 ë©ë‹ˆë‹¤. ì´ëŠ” ìœ„ì˜ <a href="#EventListeners">ì´ë²¤íЏ ìˆ˜ì‹ ê¸°</a> 섹션ì—서 ì´ì•¼ê¸°í•œ 바와 같습니다.</p> @@ -282,7 +282,7 @@ dispatchKeyEvent()}</code> 메서드를 통과하여 ì´ë™í•˜ëŠ” ê²ƒì„ í™•ì¸í the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/ko/preview/api-overview.jd b/docs/html-intl/intl/ko/preview/api-overview.jd index fdae40619bd1..5cffdfb23572 100644 --- a/docs/html-intl/intl/ko/preview/api-overview.jd +++ b/docs/html-intl/intl/ko/preview/api-overview.jd @@ -311,7 +311,7 @@ Data Saver 기본 ì„¤ì •ì„ ê²€ìƒ‰</a>í•˜ê³ <a href="{@docRoot}preview/features <h2 id="vulkan">Vulkan API</h2> <p> - Android Nì€ ìƒˆë¡œìš´ 3D ë Œë”ë§ APIì¸ <a href="http://www.khronos.org/vulkan" class="external-link">Vulkanâ„¢</a>ì„ í”Œëž«í¼ì— 통합합니다. + Android Nì€ ìƒˆë¡œìš´ 3D ë Œë”ë§ APIì¸ <a href="http://www.khronos.org/vulkan" class="external-link">Vulkanâ„¢</a>ì„ í”Œëž«í¼ì— 통합합니다. <a href="https://www.khronos.org/opengles/" class="external-link">OpenGLâ„¢ ES</a>와 마찬가지로, Vulkanì€ Khronos Groupì— ì˜í•´ 관리ë˜ëŠ” 3D 그래픽 ë° ë Œë”ë§ì„ 위한 공개 표준입니다. @@ -502,7 +502,7 @@ API를 사용하여 사용ìžì˜ 로케ì¼ì„ ê°€ì ¸ì˜¨ ì´ëª¨í‹°ì½˜ì— 대한 시ê°ì 표시를 ì œê³µí•´ì•¼ 하며, 사용ìžê°€ ì„ í˜¸í•˜ëŠ” 피부 색조를 ì„ íƒí•˜ë„ë¡ í—ˆìš©í•´ì•¼ 합니다. ì–´ë–¤ 시스템 ì´ëª¨í‹°ì½˜ì— 피부 색조 í•œì •ìžê°€ 있는지 확ì¸í•˜ë ¤ë©´ {@link android.graphics.Paint#hasGlyph(String)} -메서드를 사용하세요. +메서드를 사용하세요. <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html"> ìœ ë‹ˆì½”ë“œ 설명서</a>를 ì½ì–´ë³´ë©´ ì–´ë–¤ ì´ëª¨í‹°ì½˜ì—서 피부 색조가 사용ë˜ëŠ”ì§€ 확ì¸í• 수 있습니다. </li> @@ -857,7 +857,7 @@ Android Nì—서는 사용ìžê°€ "Alt + /" 키를 눌러 <em>Keyboard Shortcuts</ 앱 개발ìžëŠ” N Developer Previewì— ìžˆëŠ” ì´ ìƒˆ API를 Nexus 6P 기기ì—서만 시험해 ë³¼ 수 있습니다. ì´ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ ì§€ì†ì ì¸ ì„±ëŠ¥ 모드ì—서 ì‹¤í–‰í•˜ë ¤ëŠ” ê¸°ê°„ì— ëŒ€í•´ -ì§€ì†ì ì¸ ì„±ëŠ¥ 기간 플래그를 ì„¤ì •í•˜ì„¸ìš”. +ì§€ì†ì ì¸ ì„±ëŠ¥ 기간 플래그를 ì„¤ì •í•˜ì„¸ìš”. {@code Window.setSustainedPerformanceMode()} 메서드를 사용하여 ì´ í”Œëž˜ê·¸ë¥¼ ì„¤ì •í•˜ì„¸ìš”. 해당 ê¸°ê°„ì´ í¬ì»¤ìФ ì•ˆì— ì—†ì„ ë•ŒëŠ” ì´ ëª¨ë“œê°€ ìžë™ìœ¼ë¡œ 비활성화ë©ë‹ˆë‹¤. </p> diff --git a/docs/html-intl/intl/ko/preview/behavior-changes.jd b/docs/html-intl/intl/ko/preview/behavior-changes.jd index 709ccfc2f079..5d325e1b41db 100644 --- a/docs/html-intl/intl/ko/preview/behavior-changes.jd +++ b/docs/html-intl/intl/ko/preview/behavior-changes.jd @@ -167,7 +167,7 @@ CPU ë° ë„¤íŠ¸ì›Œí¬ ì œí•œì˜ í•˜ìœ„ 세트를 ì 용하여 ìž ìžê¸° 모드를 Android N 기기를 올바로 대ìƒìœ¼ë¡œ ì‚¼ì„ ìˆ˜ 있ë„ë¡ ì´ë“¤ ì¸í…íŠ¸ì— ëŒ€í•œ 종ì†ì„±ì„ 최대한 빨리 ì œê±°í•´ì•¼ 합니다. Android í”„ë ˆìž„ì›Œí¬ëŠ” ì´ëŸ¬í•œ 암시ì 브로드ìºìŠ¤íŠ¸ì˜ í•„ìš”ì„±ì„ ì¤„ì´ê¸° 위한 여러 가지 í•´ê²°ì±…ì„ ì œê³µí•©ë‹ˆë‹¤. 예를 들어, {@link - android.app.job.JobScheduler} API는 ì§€ì •ëœ ì¡°ê±´(예: + android.app.job.JobScheduler} API는 ì§€ì •ëœ ì¡°ê±´(예: ê³ ì • ìš”ê¸ˆì œ 네트워í¬ì— ì—°ê²°)ì´ ì¶©ì¡±ë 경우 ë„¤íŠ¸ì›Œí¬ ìš´ì˜ì„ ì˜ˆì•½í• ìˆ˜ 있는 ê°•ë ¥í•œ ë©”ì»¤ë‹ˆì¦˜ì„ ì œê³µí•©ë‹ˆë‹¤. 심지어 {@link android.app.job.JobScheduler}를 사용하여 콘í…ì¸ ê³µê¸‰ìžì˜ 변경 사í•ì— ëŒ€ì‘í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. @@ -224,7 +224,7 @@ API ë˜ëŠ” {@link java.io.File File} API를 사용하여 ê°œì¸ ë””ë ‰í„°ë¦¬ì— ëŒ€ìƒìœ¼ë¡œ 하는 ì•±ì€ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}ì— ì•¡ì„¸ìŠ¤í• ë•Œ {@link java.lang.SecurityException}ì„ íŠ¸ë¦¬ê±°í•©ë‹ˆë‹¤. - + {@link android.app.DownloadManager.Request#setDestinationInExternalFilesDir DownloadManager.Request.setDestinationInExternalFilesDir()} ë˜ëŠ” @@ -562,7 +562,7 @@ TCP ì†Œì¼“ì— ëŒ€í•œ 쓰기를 엄격 모드 위반으로서 플래그하지 못 </li> <li> -{@code Debug.startMethodTracing()} ê³„ì—´ì— ì†í•˜ëŠ” 메서드는, +{@code Debug.startMethodTracing()} ê³„ì—´ì— ì†í•˜ëŠ” 메서드는, SD ì¹´ë“œì˜ ìµœìƒìœ„ ë ˆë²¨ì— ì €ìž¥í•˜ëŠ” ê²ƒì´ ì•„ë‹ˆë¼, ì´ì œ ê³µìœ ì €ìž¥ì†Œì˜ íŒ¨í‚¤ì§€ë³„ ë””ë ‰í„°ë¦¬ì— ì¶œë ¥ì„ ê¸°ë³¸ì 으로 ì €ìž¥í•©ë‹ˆë‹¤. 즉, ì•±ì€ ì´ë“¤ API를 사용하기 위해 {@code WRITE_EXTERNAL_STORAGE} ê¶Œí•œì„ ìš”ì²í• 필요가 ë” ì´ìƒ 없습니다. diff --git a/docs/html-intl/intl/ko/preview/download-ota.jd b/docs/html-intl/intl/ko/preview/download-ota.jd index 886b8a806c85..ee0884672942 100644 --- a/docs/html-intl/intl/ko/preview/download-ota.jd +++ b/docs/html-intl/intl/ko/preview/download-ota.jd @@ -202,65 +202,73 @@ page.title=기기 OTA ì´ë¯¸ì§€ ì ìš© <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5: 15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1: 5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5: 3fac09fef759dde26e57cb80b20b6477<br> - SHA-1: 27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5: 58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5: 92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5: 1461622ad53ea842b2722fa7b49b8172<br> - SHA-1: 409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1: 87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> - <td>General Mobile 4G(Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1: 6f33742290eb46f2561891f38ca2e754b4e50c6a + <td>General Mobile 4G (Android One) <br>"seed"</td> + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/ko/preview/download.jd b/docs/html-intl/intl/ko/preview/download.jd index 802420b85aaa..45d5bd851943 100644 --- a/docs/html-intl/intl/ko/preview/download.jd +++ b/docs/html-intl/intl/ko/preview/download.jd @@ -300,72 +300,73 @@ Developer Preview 마ì¼ìŠ¤í†¤ ë¹Œë“œì— ëŒ€í•œ <strong>OTA ì—…ë°ì´íŠ¸ë¥¼ ìžë <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1: 5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1: 81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5: 565be87ebb2d5937e2abe1a42645864b<br> - SHA-1: 2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1: 2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1: 1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> - <td>General Mobile 4G(Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5: 7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1: 5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 ë° D6653)</td> - <td>다운로드: <a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - ìžì„¸í•œ ë‚´ìš©ì€ <a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Xperia Z3ìš© Android N Developer Preview ì²´í—˜</a>ì„ ì°¸ì¡°í•˜ì„¸ìš”. + <td>General Mobile 4G (Android One) <br>"seed"</td> + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html-intl/intl/ko/preview/features/direct-boot.jd b/docs/html-intl/intl/ko/preview/features/direct-boot.jd index 981c3e080898..2674481181a4 100644 --- a/docs/html-intl/intl/ko/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/ko/preview/features/direct-boot.jd @@ -18,7 +18,7 @@ page.image=images/cards/card-nyc_2x.jpg </div> </div> -<p>ê¸°ê¸°ì— ì „ì›ì´ 들어와 있지만 <i>사용ìžê°€ ê¸°ê¸°ì˜ ìž ê¸ˆì„ í•´ì œí•˜ì§€</i> ì•Šì•˜ì„ ê²½ìš° Android Nì€ ì•ˆì „í•œ +<p>ê¸°ê¸°ì— ì „ì›ì´ 들어와 있지만 <i>사용ìžê°€ ê¸°ê¸°ì˜ ìž ê¸ˆì„ í•´ì œí•˜ì§€</i> ì•Šì•˜ì„ ê²½ìš° Android Nì€ ì•ˆì „í•œ ì§ì ‘ 부팅 모드ì—서 실행ë©ë‹ˆë‹¤. ì´ë¥¼ ì§€ì›í•˜ê¸° 위해 시스템ì—서 다ìŒê³¼ ê°™ì€ ë‘ ê°€ì§€ ë°ì´í„° ì €ìž¥ì†Œ 위치를 ì œê³µí•©ë‹ˆë‹¤.</p> @@ -125,7 +125,7 @@ ACTION_BOOT_COMPLETED} 메시지를 ìˆ˜ì‹ í• ìˆ˜ 있습니다. ì´ ë©”ì‹œì§€ëŠ” <h2 id="migrating">기존 ë°ì´í„° 마ì´ê·¸ë ˆì´ì…˜</h2> <p>ì§ì ‘ 부팅 모드를 사용하ë„ë¡ ì‚¬ìš©ìžê°€ ìžì‹ ì˜ ê¸°ê¸°ë¥¼ ì—…ë°ì´íŠ¸í•˜ëŠ” 경우, -ì—¬ëŸ¬ë¶„ì´ ê¸°ì¡´ ë°ì´í„°ë¥¼ 기기 암호화 ì €ìž¥ì†Œë¡œ 마ì´ê·¸ë ˆì´ì…˜í•´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +ì—¬ëŸ¬ë¶„ì´ ê¸°ì¡´ ë°ì´í„°ë¥¼ 기기 암호화 ì €ìž¥ì†Œë¡œ 마ì´ê·¸ë ˆì´ì…˜í•´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. <code>Context.moveSharedPreferencesFrom()</code>ê³¼ <code>Context.moveDatabaseFrom()</code>ì„ ì‚¬ìš©í•˜ì—¬ ìžê²© ì¦ëª… 암호화 ì €ìž¥ì†Œì™€ 기기 암호화 ì €ìž¥ì†Œ ê°„ì— ê¸°ë³¸ ì„¤ì •ê³¼ ë°ì´í„°ë² ì´ìФ ë°ì´í„°ë¥¼ 마ì´ê·¸ë ˆì´ì…˜í•©ë‹ˆë‹¤.</p> diff --git a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd index f626bff6bde9..921873d8e6f2 100644 --- a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd +++ b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd @@ -50,7 +50,7 @@ Android í”„ë ˆìž„ì›Œí¬ì—서 ICU4J API를 사용하는 ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹ <p> Android Nì€ -<code>com.ibm.icu</code>ê°€ ì•„ë‹ˆë¼ <code>android.icu</code> 패키지를 통해 ICU4J APIì˜ í•˜ìœ„ 세트를 노출합니다. +<code>com.ibm.icu</code>ê°€ ì•„ë‹ˆë¼ <code>android.icu</code> 패키지를 통해 ICU4J APIì˜ í•˜ìœ„ 세트를 노출합니다. Android í”„ë ˆìž„ì›Œí¬ëŠ” 여러 가지 ì´ìœ 로 ICU4J API를 노출하지 ì•Šì„ ìˆ˜ 있습니다. 예컨대 Android Nì€ ì¼ë¶€ 사용 ì¤‘ë‹¨ëœ API나 ICU 팀ì—서 ì•ˆì •ì ì´ë¼ê³ ì„ ì–¸í•˜ì§€ ì•Šì€ API를 diff --git a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd index f353cc6a4e67..fa557bcf14fd 100644 --- a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd +++ b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd @@ -81,7 +81,7 @@ page.image=images/cards/card-nyc_2x.jpg ì „ì†¡í•˜ëŠ” ì—í• ì„ ë‹´ë‹¹í•©ë‹ˆë‹¤.</p> <p>ì‹œìŠ¤í…œì´ <code>RecordingSession.onTune()</code>ì„ í˜¸ì¶œí•˜ë©´ -ì±„ë„ URIì— ì „ë‹¬ë˜ê³ , URIê°€ ì§€ì •í•˜ëŠ” 채ë„ì— ë§žì¶° ì¡°ì •ë©ë‹ˆë‹¤. +ì±„ë„ URIì— ì „ë‹¬ë˜ê³ , URIê°€ ì§€ì •í•˜ëŠ” 채ë„ì— ë§žì¶° ì¡°ì •ë©ë‹ˆë‹¤. <code>notifyTuned()</code>를 호출해서 ì•±ì´ ì›í•˜ëŠ” 채ë„ì— ë§žì¶°ì¡ŒìŒì„ ì‹œìŠ¤í…œì— ì•Œë¦¬ê±°ë‚˜ ì•±ì´ ì ì ˆí•œ 채ë„ì— ë§žì¶œ 수 없으면 <code>notifyError()</code>를 호출합니다.</p> diff --git a/docs/html-intl/intl/ko/preview/setup-sdk.jd b/docs/html-intl/intl/ko/preview/setup-sdk.jd index 03727a3320db..c2a0380de61c 100644 --- a/docs/html-intl/intl/ko/preview/setup-sdk.jd +++ b/docs/html-intl/intl/ko/preview/setup-sdk.jd @@ -92,7 +92,7 @@ Platform-Tools</strong>, <strong>Android SDK Tools</strong> ì²´í¬ë°•스를 <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd index e66e8d19c372..4fd4af25afd4 100644 --- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd @@ -35,11 +35,11 @@ startpage=true </div> <p>사용ìžê°€ ì•±ì„ íƒìƒ‰í•˜ê³ , 앱ì—서 ë‚˜ê°€ê³ , 앱으로 다시 ëŒì•„가면, ì•±ì˜ -{@link android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ëŠ” +{@link android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ëŠ” 수명 주기 안ì—서 서로 다른 ìƒíƒœ ê°„ì— ì „í™˜ë©ë‹ˆë‹¤. 예를 들어 액티비티가 ì²˜ìŒ ì‹œìž‘ë˜ëŠ” 경우, ì‹œìŠ¤í…œì˜ ì „ë©´ì— í‘œì‹œë˜ì–´ 사용ìžì˜ í¬ì»¤ìŠ¤ë¥¼ 받습니다. ì´ ê³¼ì •ì—서 Android ì‹œìŠ¤í…œì€ ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ë° ë‹¤ë¥¸ êµ¬ì„±ìš”ì†Œì— ì„¤ì •ëœ -ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ì¼ë ¨ì˜ 수명 주기 메서드를 호출합니다. 사용ìžê°€ 다른 액티비티를 시작하거나 다른 앱으로 ì „í™˜í•˜ëŠ” +ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ì¼ë ¨ì˜ 수명 주기 메서드를 호출합니다. 사용ìžê°€ 다른 액티비티를 시작하거나 다른 앱으로 ì „í™˜í•˜ëŠ” ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë©´, 백그ë¼ìš´ë“œ(액티비티가 ë” ì´ìƒ ë³´ì´ì§€ 않지만 ì¸ìŠ¤í„´ìŠ¤ì™€ 해당 ìƒíƒœëŠ” 그대로 ìœ ì§€ë˜ëŠ” ìƒíƒœ)로 ì „í™˜ë˜ë©´ì„œ ì‹œìŠ¤í…œì€ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ ë˜ ë‹¤ë¥¸ 수명 주기 메서드 세트를 호출합니다.</p> @@ -55,7 +55,7 @@ android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ê°€ ìˆ˜ì‹ í•˜ëŠ” 중요한 수명 주기 ì½œë° ì‚¬ìš©ìžê°€ ì›í•˜ëŠ” ìž‘ì—…ì„ í•˜ê³ , 액티비티가 필요로 하지 ì•Šì„ ë•Œ 시스템 리소스 소비를 방지하는 ë°©ë²•ì— ëŒ€í•´ì„œë„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> <h2>ê³¼ì •</h2> - + <dl> <dt><b><a href="starting.html">액티비티 시작하기</a></b></dt> <dd>액티비티 수명 ì£¼ê¸°ì˜ ê¸°ë³¸ì‚¬í•, 사용ìžê°€ ì•±ì„ ì‹œìž‘í•˜ëŠ” 방법, ê·¸ë¦¬ê³ ê¸°ë³¸ 액티비티 ìƒì„± ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” @@ -68,5 +68,5 @@ android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ê°€ ìˆ˜ì‹ í•˜ëŠ” 중요한 수명 주기 ì½œë° <dt><b><a href="recreating.html">액티비티 재ìƒì„±í•˜ê¸°</a></b></dt> <dd>액티비티가 소멸ë˜ë©´ ì–´ë–¤ ë™ìž‘ì´ ë°œìƒí•˜ëŠ”ì§€, ê·¸ë¦¬ê³ í•„ìš” 시 액티비티 ìƒíƒœë¥¼ 재구축하는 ë°©ë²•ì— ëŒ€í•´ 설명합니다.</dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd index b0497cda4da1..98e2afd3f4d9 100644 --- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ì´ ê³¼ì •ì—서 다루는 ë‚´ìš©</h2> <ol> <li><a href="#Pause">액티비티 ì¼ì§€ì •지하기</a></li> <li><a href="#Resume">액티비티 재개하기</a></li> </ol> - + <h2>í•„ë… í•목</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">액티비티</a> @@ -31,7 +31,7 @@ trainingnavtop=true </div> </div> -<p>ì¼ë°˜ì ì¸ ì•± 사용 ì¤‘ì— ê°€ë” ë‹¤ë¥¸ +<p>ì¼ë°˜ì ì¸ ì•± 사용 ì¤‘ì— ê°€ë” ë‹¤ë¥¸ 비주얼 구성요소로 ì¸í•´ ì „ë©´ì˜ ì•¡í‹°ë¹„í‹°ê°€ <em>ì¼ì‹œì •ì§€</em>ë˜ëŠ” 경우가 있습니다. 예를 들어, 대화 ìƒìž 스타ì¼ê³¼ ê°™ì€ ë°˜íˆ¬ëª… 액티비티가 열리면, ê·¸ ì´ì „ 액티비티는 ì¼ì‹œì •ì§€ë©ë‹ˆë‹¤. 액티비티가 부분ì 으로 ë³´ì´ì§€ë§Œ 현재 í¬ì»¤ìФ ë‚´ì— ìžˆì§€ 않는 한 ì¼ì‹œì •ì§€ëœ ìƒíƒœë¡œ ìœ ì§€ë©ë‹ˆë‹¤.</p> @@ -59,7 +59,7 @@ android.app.Activity#onPause()}ì— ëŒ€í•œ í˜¸ì¶œì„ ìˆ˜ì‹ í•˜ëŠ” 경우, ì´ëŠ” <h2 id="Pause">액티비티 ì¼ì§€ì •지하기</h2> - + <p>ì‹œìŠ¤í…œì´ ì•¡í‹°ë¹„í‹°ì— ëŒ€í•´ {@link android.app.Activity#onPause()}를 호출하면, ì´ëŠ” 엄밀해 ë§í•´ 액티비티가 ì—¬ì „ížˆ 부분ì 으로 ë³´ì¼ ìˆ˜ 있ìŒì„ ì˜ë¯¸í•˜ì§€ë§Œ, ëŒ€ê°œì˜ ê²½ìš° 사용ìžê°€ 액티비티를 ë– ë‚˜ ê³§ ì •ì§€ ìƒíƒœë¡œ ì „í™˜ë ê²ƒìž„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ì¼ë°˜ì 으로 ë‹¤ìŒ ìž‘ì—…ì„ ìˆ˜í–‰í• ë•Œ diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd index 79fb92bbdc7d..2408cac248bb 100644 --- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ì´ ê³¼ì •ì—서 다루는 ë‚´ìš©</h2> <ol> <li><a href="#SaveState">액티비티 ìƒíƒœ ì €ìž¥í•˜ê¸°</a></li> <li><a href="#RestoreState">액티비티 ìƒíƒœ ë³µì›í•˜ê¸°</a></li> </ol> - + <h2>í•„ë… í•목</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">다양한 @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()}ì—서 몇 가지 ìƒíƒœ ë°ì´í„°ë¥¼ ë³µì›í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ì @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ protected void onCreate(Bundle savedInstanceState) { android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 구현하ë„ë¡ ì„ íƒí• 수 있습니다. ì‹œìŠ¤í…œì€ ë³µì›í• ì €ìž¥ ìƒíƒœê°€ ìžˆì„ ê²½ìš°ì—ë§Œ {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 호출합니다. ë”°ë¼ì„œ {@link android.os.Bundle}ì´ nullì¸ì§€ 확ì¸í• 필요가 없습니다.</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd index ef1348783dfa..68b456235236 100644 --- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ì´ ê³¼ì •ì—서 다루는 ë‚´ìš©</h2> <ol> <li><a href="#lifecycle-states">수명 주기 콜백 ì´í•´í•˜ê¸°</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">새로운 ì¸ìŠ¤í„´ìŠ¤ ìƒì„±í•˜ê¸°</a></li> <li><a href="#Destroy">액티비티 소멸하기</a></li> </ol> - + <h2>í•„ë… í•목</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">액티비티</a></li> @@ -83,7 +83,7 @@ Android ì‹œìŠ¤í…œì€ {@link android.app.Activity} ì¸ìŠ¤í„´ìŠ¤ 수명 ì£¼ê¸°ì˜ </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -138,7 +138,7 @@ android.app.Activity#onResume()}ì„ í˜¸ì¶œí•©ë‹ˆë‹¤.</p> -<h2 id="launching-activity">앱 시작 ê´€ë¦¬ìž ì•¡í‹°ë¹„í‹° ì§€ì •í•˜ê¸°</h2> +<h2 id="launching-activity">앱 시작 ê´€ë¦¬ìž ì•¡í‹°ë¹„í‹° ì§€ì •í•˜ê¸°</h2> <p>사용ìžê°€ 홈 화면ì—서 앱 ì•„ì´ì½˜ì„ ì„ íƒí•˜ë©´, ì‹œìŠ¤í…œì´ ì•±ì—서 "시작 관리ìž"(ë˜ëŠ” "ë©”ì¸") 액티비티로 ì„ ì–¸í•œ {@link android.app.Activity}ì— ëŒ€í•œ {@link android.app.Activity#onCreate onCreate()} 메서드를 @@ -151,7 +151,7 @@ android.app.Activity#onCreate onCreate()} 메서드를 <p>ì•±ì˜ ë©”ì¸ ì•¡í‹°ë¹„í‹°ëŠ” {@link android.content.Intent#ACTION_MAIN MAIN} 작업 ë°{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} ì¹´í…Œê³ ë¦¬ë¥¼ í¬í•¨í•˜ëŠ” <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>와 함께 -매니페스트 파ì¼ì— ì„ ì–¸ë˜ì–´ì•¼ 합니다. 예를 들면 다ìŒê³¼ 같습니다.</p> +매니페스트 파ì¼ì— ì„ ì–¸ë˜ì–´ì•¼ 합니다. 예를 들면 다ìŒê³¼ 같습니다.</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -268,7 +268,7 @@ android.app.Activity#onDestroy} ì¤‘ì— ì•¡í‹°ë¹„í‹°ë¥¼ 중단시켜야 합니다 @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd index 79e713a72a56..28000951c1ac 100644 --- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>ì´ ê³¼ì •ì—서 다루는 ë‚´ìš©</h2> <ol> <li><a href="#Stop">액티비티 ì •ì§€í•˜ê¸°</a></li> <li><a href="#Start">액티비티 시작/재시작하기</a></li> </ol> - + <h2>í•„ë… í•목</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">액티비티</a> @@ -152,13 +152,13 @@ android.app.Activity#onStart()}를 호출하기 때문입니다.</p> @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd b/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd index e7ca16681e0e..70f896170e7f 100644 --- a/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd +++ b/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd @@ -118,15 +118,15 @@ private static final String SQL_DELETE_ENTRIES = ì•¡ì„¸ìŠ¤í• ìˆ˜ 없기 ë•Œë¬¸ì— ì €ìž¥ëœ ë°ì´í„°ëŠ” ì•ˆì „í•˜ê²Œ ìœ ì§€ë©ë‹ˆë‹¤.</p> <p>ìœ ìš©í•œ API ì§‘í•©ì´ {@link -android.database.sqlite.SQLiteOpenHelper} í´ëž˜ìФì—서 ì œê³µë©ë‹ˆë‹¤. +android.database.sqlite.SQLiteOpenHelper} í´ëž˜ìФì—서 ì œê³µë©ë‹ˆë‹¤. ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•œ 참조를 ê°€ì ¸ì˜¤ê¸° 위해 ì´ í´ëž˜ìŠ¤ë¥¼ 사용하는 경우, ì‹œìŠ¤í…œì€ -필요한 ê²½ìš°ì— í•œí•´ì„œë§Œ ë°ì´í„°ë² ì´ìФ ìƒì„± ë° ì—…ë°ì´íŠ¸ì™€ ê°™ì´ +필요한 ê²½ìš°ì— í•œí•´ì„œë§Œ ë°ì´í„°ë² ì´ìФ ìƒì„± ë° ì—…ë°ì´íŠ¸ì™€ ê°™ì´ ìž¥ì‹œê°„ 실행ë 수 있는 ìž‘ì—…ì„ -수행하며, <em>ì•±ì´ ì‹œìž‘ë˜ëŠ” ë™ì•ˆì—는 ì´ëŸ¬í•œ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ì§€ 않습니다</em>. -{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ë˜ëŠ” +수행하며, <em>ì•±ì´ ì‹œìž‘ë˜ëŠ” ë™ì•ˆì—는 ì´ëŸ¬í•œ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ì§€ 않습니다</em>. +{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ë˜ëŠ” {@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}를 호출하기만 하면 ë©ë‹ˆë‹¤.</p> -<p class="note"><strong>ì°¸ê³ :</strong> ì´ëŸ¬í•œ ìž‘ì—…ì€ ìž¥ì‹œê°„ 실행ë ìˆ˜ë„ ìžˆê¸° ë•Œë¬¸ì— +<p class="note"><strong>ì°¸ê³ :</strong> ì´ëŸ¬í•œ ìž‘ì—…ì€ ìž¥ì‹œê°„ 실행ë ìˆ˜ë„ ìžˆê¸° ë•Œë¬¸ì— {@link android.os.AsyncTask} ë˜ëŠ” {@link android.app.IntentService}와 ê°™ì´ ë°±ê·¸ë¼ìš´ë“œ ìŠ¤ë ˆë“œì—서 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ë˜ëŠ” {@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}를 diff --git a/docs/html-intl/intl/ko/training/material/animations.jd b/docs/html-intl/intl/ko/training/material/animations.jd index e8c6267aff10..79710c129fb7 100644 --- a/docs/html-intl/intl/ko/training/material/animations.jd +++ b/docs/html-intl/intl/ko/training/material/animations.jd @@ -47,7 +47,7 @@ page.title=사용ìžì§€ì • ì• ë‹ˆë©”ì´ì…˜ì˜ ì •ì˜ <ul> <li>ì œí•œëœ ë¬¼ê²°ì˜ ê²½ìš°, <code>?android:attr/selectableItemBackground</code></li> -<li>뷰를 넘어 확장ë˜ëŠ” ë¬¼ê²°ì˜ ê²½ìš°, <code>?android:attr/selectableItemBackgroundBorderless</code> +<li>뷰를 넘어 확장ë˜ëŠ” ë¬¼ê²°ì˜ ê²½ìš°, <code>?android:attr/selectableItemBackgroundBorderless</code> ì´ ê²½ìš° ë¬¼ê²°ì´ nullì´ ì•„ë‹Œ ë°°ê²½ì„ ê°€ì§„ ë·°ì˜ ê°€ìž¥ 가까운 ìƒìœ„ 요소 ìœ„ì— ê·¸ë ¤ì§€ê³ í•´ë‹¹ ìƒìœ„ 요소까지로 ì œí•œë©ë‹ˆë‹¤. </li> </ul> @@ -139,7 +139,7 @@ anim.start(); </video> </div> <div style="font-size:10pt;margin-left:20px;margin-bottom:30px"> - <p class="img-caption" style="margin-top:3px;margin-bottom:10px"><strong>그림 1</strong> - + <p class="img-caption" style="margin-top:3px;margin-bottom:10px"><strong>그림 1</strong> - ê³µìœ ìš”ì†Œë¥¼ ì´ìš©í•œ ì „í™˜.</p> <em>ì˜í™”를 재ìƒí•˜ë ¤ë©´ 기기 í™”ë©´ì„ í´ë¦í•˜ì„¸ìš”.</em> </div> @@ -263,7 +263,7 @@ setSharedElementEnterTransition()} 메서드는 호출ë˜ëŠ” ì•¡í‹°ë¹„í‹°ì˜ ë“¤ ê·¸ë ‡ì§€ 않으면 호출하는 액티비티가 나가기 ì „í™˜ì„ ì‹œìž‘í•˜ì§€ë§Œ, 배율 ë˜ëŠ” 페ì´ë“œì™€ ê°™ì€ ì°½ ì „í™˜ì´ ë‚˜íƒ€ë‚©ë‹ˆë‹¤. </p> -<p>들어가기 ì „í™˜ì„ ìµœëŒ€í•œ 빨리 ì‹œìž‘í•˜ë ¤ë©´ 호출ë˜ëŠ” 액티비티ì—서 +<p>들어가기 ì „í™˜ì„ ìµœëŒ€í•œ 빨리 ì‹œìž‘í•˜ë ¤ë©´ 호출ë˜ëŠ” 액티비티ì—서 {@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()} 메서드를 사용하세요. 그러면 ë”ìš± ì¸ìƒì ì¸ ë“¤ì–´ê°€ê¸° ì „í™˜ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.</p> @@ -317,7 +317,7 @@ imgContainerView.setOnClickListener(new View.OnClickListener() { }); </pre> -<p>코드ì—서 ìƒì„±í•˜ëŠ” ê³µìœ ëœ ë™ì ë·°ì˜ ê²½ìš°, +<p>코드ì—서 ìƒì„±í•˜ëŠ” ê³µìœ ëœ ë™ì ë·°ì˜ ê²½ìš°, {@link android.view.View#setTransitionName View.setTransitionName()} 메서드를 사용하여 ë‘ ì•¡í‹°ë¹„í‹°ì˜ ê³µí†µ 요소 ì´ë¦„ì„ ì§€ì •í•©ë‹ˆë‹¤. </p> @@ -414,7 +414,7 @@ android.animation.StateListAnimator}를 XML 리소스로 ì •ì˜í•˜ëŠ” ë°©ë²•ì„ </selector> </pre> -<p>사용ìžì§€ì • ë·° ìƒíƒœ ì• ë‹ˆë©”ì´ì…˜ì„ ë·°ì— ì²¨ë¶€í•˜ë ¤ë©´ ì´ ì˜ˆì™€ ê°™ì´ XML 리소스 파ì¼ì˜ +<p>사용ìžì§€ì • ë·° ìƒíƒœ ì• ë‹ˆë©”ì´ì…˜ì„ ë·°ì— ì²¨ë¶€í•˜ë ¤ë©´ ì´ ì˜ˆì™€ ê°™ì´ XML 리소스 파ì¼ì˜ <code>selector</code> 요소를 사용하여 ì• ë‹ˆë©”ì´í„°ë¥¼ ì •ì˜í•œ í›„ì— <code>android:stateListAnimator</code> íŠ¹ì„±ì„ í†µí•´ ë·°ì— í• ë‹¹í•©ë‹ˆë‹¤. 코드ì—서 ë·°ì— ìƒíƒœ ëª©ë¡ ì• ë‹ˆë©”ì´í„°ë¥¼ í• ë‹¹í•˜ë ¤ë©´ {@link android.animation.AnimatorInflater#loadStateListAnimator AnimationInflater.loadStateListAnimator()} 메서드를 ì‚¬ìš©í•˜ê³ , diff --git a/docs/html-intl/intl/ko/training/material/lists-cards.jd b/docs/html-intl/intl/ko/training/material/lists-cards.jd index 28fdf22cfae0..b8d6e791f9a9 100644 --- a/docs/html-intl/intl/ko/training/material/lists-cards.jd +++ b/docs/html-intl/intl/ko/training/material/lists-cards.jd @@ -204,7 +204,7 @@ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { í™•ìž¥í•˜ê³ ì¹´ë“œ ë‚´ì˜ ì •ë³´ë¥¼ 플랫í¼ì—서 ì¼ê´€ëœ 모습으로 í‘œì‹œí• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤. {@link android.support.v7.widget.CardView} ìœ„ì ¯ì€ ê·¸ë¦¼ìžì™€ 둥근 모서리를 가질 수 있습니다.</p> -<p>그림ìžê°€ 있는 카드를 ìƒì„±í•˜ë ¤ë©´ <code>card_view:cardElevation</code> íŠ¹ì„±ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. +<p>그림ìžê°€ 있는 카드를 ìƒì„±í•˜ë ¤ë©´ <code>card_view:cardElevation</code> íŠ¹ì„±ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. {@link android.support.v7.widget.CardView}는 Android 5.0(API ë ˆë²¨ 21) ì´ìƒì—서 ì‹¤ì œ ì—˜ë¦¬ë² ì´ì…˜ ë° ë™ì 그림ìžë¥¼ 사용하며, ì´ì „ ë²„ì „ì—서는 ì´ì „ì˜ í”„ë¡œê·¸ëž˜ë° ë°©ì‹ì˜ ê·¸ë¦¼ìž êµ¬í˜„ìœ¼ë¡œ 환ì›ë©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ <a href="{@docRoot}training/material/compatibility.html">호환성 ìœ ì§€</a>를 참조하세요. diff --git a/docs/html-intl/intl/ko/training/material/shadows-clipping.jd b/docs/html-intl/intl/ko/training/material/shadows-clipping.jd index e04d0c524453..9d1a67920bd8 100644 --- a/docs/html-intl/intl/ko/training/material/shadows-clipping.jd +++ b/docs/html-intl/intl/ko/training/material/shadows-clipping.jd @@ -121,7 +121,7 @@ android.view.View#setOutlineProvider View.setOutlineProvider()} 메서드를 사 <p>뷰를 í´ë¦¬í•‘하면 ë·°ì˜ ëª¨ì–‘ì„ ì†ì‰½ê²Œ 바꿀 수 있습니다. 다른 ë””ìžì¸ ìš”ì†Œì™€ì˜ ì¼ê´€ì„±ì„ 위해, ë˜ëŠ” ì‚¬ìš©ìž ìž…ë ¥ì— ì‘답하여 ë·°ì˜ ëª¨ì–‘ì„ ë°”ê¾¸ê¸° 위해 뷰를 í´ë¦¬í•‘í• ìˆ˜ 있습니다. {@link android.view.View#setClipToOutline View.setClipToOutline()} 메서드나 <code>android:clipToOutline</code> íŠ¹ì„±ì„ ì‚¬ìš©í•˜ì—¬ 뷰를 해당 ìœ¤ê³½ì„ ì˜ì—까지 í´ë¦¬í•‘í• ìˆ˜ 있습니다. - + {@link android.graphics.Outline#canClip Outline.canClip()} 메서드ì—서 ê²°ì •ëœ ëŒ€ë¡œ 사ê°í˜•, ì›í˜• ë° ë‘¥ê·¼ 사ê°í˜•ì˜ ìœ¤ê³½ì„ ë§Œ í´ë¦¬í•‘ì„ ì§€ì›í•©ë‹ˆë‹¤. </p> diff --git a/docs/html-intl/intl/ko/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/intl/ko/training/monitoring-device-state/battery-monitoring.jd index 2eacccf64106..058cf85223aa 100644 --- a/docs/html-intl/intl/ko/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html-intl/intl/ko/training/monitoring-device-state/battery-monitoring.jd @@ -7,8 +7,8 @@ next.title=ë„킹 ìƒíƒœì™€ ìœ í˜• í™•ì¸ ë° ëª¨ë‹ˆí„°ë§ next.link=docking-monitoring.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> @@ -24,9 +24,9 @@ next.link=docking-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> </ul> -</div> </div> - +</div> + <p>백그ë¼ìš´ë“œ ì—…ë°ì´íŠ¸ê°€ 배터리 ìˆ˜ëª…ì— ë¯¸ì¹˜ëŠ” ì˜í–¥ì„ 줄ì´ê¸° 위하여 백그ë¼ìš´ë“œ ì—…ë°ì´íЏ 빈ë„수를 변경하는 경우, 현재 배터리 수준과 ì¶©ì „ ìƒíƒœë¶€í„° 확ì¸í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.</p> <p>ì• í”Œë¦¬ì¼€ì´ì…˜ ì—…ë°ì´íЏ ìˆ˜í–‰ì´ ë°°í„°ë¦¬ ìˆ˜ëª…ì— ë¯¸ì¹˜ëŠ” ì˜í–¥ì€ 배터리 수준 ë° ê¸°ê¸°ì˜ ì¶©ì „ ìƒíƒœì— ë”°ë¼ ë‹¤ë¦…ë‹ˆë‹¤. 기기를 AC ì¶©ì „ê¸°ë¡œ ì¶©ì „í•˜ëŠ” ë™ì•ˆ ì—…ë°ì´íЏ ìˆ˜í–‰ì´ ë¯¸ì¹˜ëŠ” ì˜í–¥ì€ ë¬´ì‹œí•´ë„ ì¢‹ìŠµë‹ˆë‹¤. ë”°ë¼ì„œ 기기가 범용 ì¶©ì „ê¸°ì— ì—°ê²°ë˜ì–´ ìžˆì„ ë•ŒëŠ” 대부분 ìƒˆë¡œê³ ì¹¨ 빈ë„를 ìµœëŒ€í™”í• ìˆ˜ 있습니다. 반대로 기기가 ì¶©ì „ ì¤‘ì´ ì•„ë‹ˆë¼ë©´, ì—…ë°ì´íЏ 빈ë„를 줄ì´ëŠ” ê²ƒì´ ë°°í„°ë¦¬ 수명 ì—°ìž¥ì— ë„ì›€ì´ ë©ë‹ˆë‹¤.</p> @@ -34,8 +34,8 @@ next.link=docking-monitoring.html <p>마찬가지로 배터리가 ê±°ì˜ ë°©ì „ëœ ê²½ìš°, ì—…ë°ì´íЏ 빈ë„를 줄ì´ê±°ë‚˜ ì¤‘ë‹¨í• ìˆ˜ 있습니다.</p> -<h2 id="DetermineChargeState">현재 ì¶©ì „ ìƒíƒœ 확ì¸</h2> - +<h2 id="DetermineChargeState">현재 ì¶©ì „ ìƒíƒœ 확ì¸</h2> + <p>ë¨¼ì € 현재 ì¶©ì „ ìƒíƒœë¥¼ 확ì¸í•˜ëŠ” 것부터 시작합니다. {@link android.os.BatteryManager}는 배터리 ì¶©ì „ ìƒíƒœ 등 ì¶©ì „ ì •ë³´ë¥¼ 스티키 {@link android.content.Intent}를 통해 브로드ìºìŠ¤íŠ¸í•©ë‹ˆë‹¤.</p> <p>스티키 ì¸í…트ì´ë¯€ë¡œ {@link android.content.BroadcastReceiver}를 등ë¡í• 필요가 없으며 아래 코드 ìƒì˜ 리시버와 ê°™ì´ ê°„ë‹¨ížˆ {@code registerReceiver}ì„(를) 호출하여 {@code null}ì— ì œì¶œí•˜ë©´ 현재 배터리 ìƒíƒœê°€ 담긴 ì¸í…트가 반환ë©ë‹ˆë‹¤. ì—¬ê¸°ì— ì‹¤ì œ {@link android.content.BroadcastReceiver} 개체 ì‚¬ìš©í• ìˆ˜ 있으나, ì´í›„ 섹션ì—서 ì—…ë°ì´íŠ¸ë¥¼ 다루게 ë˜ë¯€ë¡œ 그럴 필요는 없습니다.</p> @@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <p>ì¼ë°˜ì 으로 기기가 AC ì¶©ì „ê¸°ì— ì—°ê²°ëœ ê²½ìš° 백그ë¼ìš´ë“œ ì—…ë°ì´íЏ 빈ë„를 최대화합니다. USB를 통해 ì¶©ì „í•˜ëŠ” 경우 ì—…ë°ì´íЏ 빈ë„를 낮춥니다. 배터리가 ë°©ì „ 중ì´ë¼ë©´ 빈ë„를 ë” ë§Žì´ ë‚®ì¶”ë„ë¡ í•©ë‹ˆë‹¤.</p> -<h2 id="MonitorChargeState">ì¶©ì „ ìƒíƒœ ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> +<h2 id="MonitorChargeState">ì¶©ì „ ìƒíƒœ ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> <p>ì¶©ì „ ìƒíƒœëŠ” 수시로 변하므로 ì¶©ì „ ìƒíƒœì˜ 변경사í•ì„ í™•ì¸í•˜ê³ ì´ì— ë”°ë¼ ì—…ë°ì´íЏ 주기를 변경하는 ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤.</p> @@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <pre>public class PowerConnectionReceiver extends BroadcastReceiver { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; - + int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; @@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> }</pre> -<h2 id="CurrentLevel">현재 배터리 수준 확ì¸</h2> +<h2 id="CurrentLevel">현재 배터리 수준 확ì¸</h2> <p>현재 배터리 ìˆ˜ì¤€ì„ í™•ì¸í•˜ëŠ” ê²ƒì´ ìœ ìš©í•œ ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. 배터리 ì¶©ì „ì´ ìˆ˜ì¤€ ì´í•˜ì¸ 경우 백그ë¼ìš´ë“œ ì—…ë°ì´íЏ 빈ë„를 ì¤„ì¼ ìˆ˜ 있습니다.</p> @@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> -<h2 id="MonitorLevel">배터리 수준 중요 ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> +<h2 id="MonitorLevel">배터리 수준 중요 ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> <p>배터리 ìƒíƒœë¥¼ ì§€ì†ì 으로 확ì¸í•˜ëŠ” ê²ƒì€ ì‰½ì§€ 않지만, ê¼ ê·¸ëŸ´ í•„ìš”ë„ ì—†ìŠµë‹ˆë‹¤.</p> diff --git a/docs/html-intl/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd index 5666b98c9045..377f85f3215a 100644 --- a/docs/html-intl/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html-intl/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> </ul> -</div> +</div> </div> <p>반복 알람과 백그ë¼ìš´ë“œ 서비스는 ì¼ë°˜ì 으로 ì¸í„°ë„· 리소스 ë° ìºì‹œ ë°ì´í„°ë¡œë¶€í„° ì• í”Œë¦¬ì¼€ì´ì…˜ì˜ ì—…ë°ì´íŠ¸ë¥¼ 예약하거나 긴 ì‹œê°„ì´ í•„ìš”í•œ 다운로드를 실행하는 ë° ì‚¬ìš©ë©ë‹ˆë‹¤. 하지만 ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있지 않거나 ì—°ê²°ì´ ë§¤ìš° ëŠë ¤ 다운로드를 완료하지 못한다면 ì—…ë°ì´íЏ ì˜ˆì•½ì„ í•´ë„ ì†Œìš©ì´ ì—†ê² ì£ ?</p> @@ -35,18 +35,18 @@ next.link=manifest-receivers.html <p>ì¸í„°ë„·ì— ì—°ê²°ë˜ì—ˆëŠ”ì§€, ì–´ë–¤ ì—°ê²° ë°©ì‹ì¸ì§€ë¥¼ 확ì¸í•˜ê¸° 위하여 {@link android.net.ConnectivityManager}를 ì‚¬ìš©í• ìˆ˜ 있습니다.</p> -<h2 id="DetermineConnection">ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있는지 확ì¸</h2> - +<h2 id="DetermineConnection">ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있는지 확ì¸</h2> + <p>ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있지 않는 경우 ì¸í„°ë„· 리소스를 기반으로 한 ì—…ë°ì´íЏ ì˜ˆì•½ì„ í• í•„ìš”ê°€ 없습니다. 다ìŒì€ 활성 네트워í¬ë¥¼ ì¿¼ë¦¬í•˜ê³ ì¸í„°ë„·ì´ ì—°ê²°ë˜ì–´ 있는지 확ì¸í•˜ê¸° 위한 {@link android.net.ConnectivityManager} ì‚¬ìš©ë²•ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">ì¸í„°ë„· ì—°ê²° ìœ í˜• 확ì¸</h2> +<h2 id="DetermineType">ì¸í„°ë„· ì—°ê²° ìœ í˜• 확ì¸</h2> <p>현재 ì‚¬ìš©í• ìˆ˜ 있는 ì¸í„°ë„· ì—°ê²° ìœ í˜•ì„ í™•ì¸í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.</p> @@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> <p>ì—…ë°ì´íŠ¸ë¥¼ 비활성화한 경우, ì¸í„°ë„· ì—°ê²°ì´ ìž¬ê°œë˜ë©´ ì—…ë°ì´íŠ¸ë¥¼ 다시 시작하기 위해 ì—°ê²° 변경사í•ì„ ì•Œê³ ìžˆëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤.</p> -<h2 id="MonitorChanges">ì—°ê²° ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> +<h2 id="MonitorChanges">ì—°ê²° ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> <p>ì—°ê²° ì •ë³´ê°€ 변경ë 때마다 {@link android.net.ConnectivityManager}는 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}({@code "android.net.conn.CONNECTIVITY_CHANGE"}) ì•¡ì…˜ì„ ë¸Œë¡œë“œìºìŠ¤íŠ¸í•©ë‹ˆë‹¤. 변경사í•ì„ ìˆ˜ì‹ í•˜ê±°ë‚˜ ì ì ˆížˆ 백그ë¼ìš´ë“œ ì—…ë°ì´íŠ¸ë¥¼ 다시 시작 ë˜ëŠ” ì¼ì‹œ 중지하기 위해 매니페스트ì—서 브로드ìºìŠ¤íŠ¸ 리시버를 등ë¡í• 수 있습니다.</p> diff --git a/docs/html-intl/intl/ko/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/intl/ko/training/monitoring-device-state/docking-monitoring.jd index 0cd61a067d93..f3cf36d3299d 100644 --- a/docs/html-intl/intl/ko/training/monitoring-device-state/docking-monitoring.jd +++ b/docs/html-intl/intl/ko/training/monitoring-device-state/docking-monitoring.jd @@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> @@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> </ul> -</div> +</div> </div> <p>Android 기기는 여러 ì¢…ë¥˜ì˜ ë„í¬ë¡œ ë„킹ë 수 있습니다. 여기ì—는 ì¹´í° ë˜ëŠ” 홈 ë„í¬ì™€ 디지털 ë° ì•„ë‚ ë¡œê·¸ ë„í¬ê°€ í¬í•¨ë©ë‹ˆë‹¤. ë§Žì€ ë„í¬ê°€ ë„í‚¹ëœ ê¸°ê¸°ì— ì „ê¸°ë¥¼ 공급하므로 ì¼ë°˜ì 으로 ì¶©ì „ ìƒíƒœì™€ ë„í¬ ìƒíƒœëŠ” ë°€ì ‘í•œ ê´€ë ¨ì´ ìžˆìŠµë‹ˆë‹¤.</p> @@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html <p>ë„í¬ ìƒíƒœëŠ” 스티키 {@link android.content.Intent}로 브로드ìºìŠ¤íŠ¸ë˜ì–´ 기기가 ë„킹ë˜ì—ˆëŠ”ì§€ 여부와 ë„킹ë˜ì—ˆë‹¤ë©´ ì–´ë–¤ ì¢…ë¥˜ì˜ ë„í¬ì¸ì§€ 알아낼 수 있습니다. </p> -<h2 id="CurrentDockState">현재 ë„킹 ìƒíƒœ 확ì¸</h2> - +<h2 id="CurrentDockState">현재 ë„킹 ìƒíƒœ 확ì¸</h2> + <p>ë„í¬ ìƒíƒœì˜ 세부사í•ì€ {@link android.content.Intent#ACTION_DOCK_EVENT} ì•¡ì…˜ì˜ ìŠ¤í‹°í‚¤ 브로드ìºìŠ¤íŠ¸ ë‚´ì— ì¶”ê°€ë¡œ í¬í•¨ë©ë‹ˆë‹¤. 스티키 브로드ìºìŠ¤íŠ¸ì´ë¯€ë¡œ {@link android.content.BroadcastReceiver}를 등ë¡í• 필요가 없습니다. ë‹¤ìŒ ìŠ¤ë‹ˆíŽ«ì— í‘œì‹œëœ ë¸Œë¡œë“œìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸°ì™€ ê°™ì´ ê°„ë‹¨ížˆ {@link android.content.Context#registerReceiver registerReceiver()}를 호출하여 {@code null}ì— ì œì¶œí• ìˆ˜ 있습니다. </p> <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); @@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre> boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> -<h2 id="DockType">현재 ë„í¬ ìœ í˜• 확ì¸</h2> +<h2 id="DockType">현재 ë„í¬ ìœ í˜• 확ì¸</h2> -<p>4가지 ìœ í˜•ì˜ ë„í¬ê°€ 있습니다. +<p>4가지 ìœ í˜•ì˜ ë„í¬ê°€ 있습니다. <ul><li>ì¹´í°</li> <li>ë°ìФí¬</li> <li>ì €ê°€í˜•(ì•„ë‚ ë¡œê·¸) ë°ìФí¬</li> @@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> <p>마지막 ë‘ ê°€ì§€ ì˜µì…˜ì€ API 수준 11ì˜ Androidì—ë§Œ ì œê³µë˜ì–´ 있으므로, 디지털 ë˜ëŠ” ì•„ë‚ ë¡œê·¸ì— ìƒê´€í•˜ì§€ ì•Šê³ ê´€ì‹¬ 있는 세 가지 ë„í¬ ìœ í˜•ì— ëŒ€í•´ 확ì¸í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.</p> <pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; -boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || +boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;</pre> -<h2 id="MonitorDockState">ë„í¬ ìƒíƒœ ë˜ëŠ” ìœ í˜• ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> +<h2 id="MonitorDockState">ë„í¬ ìƒíƒœ ë˜ëŠ” ìœ í˜• ë³€ê²½ì‚¬í• ëª¨ë‹ˆí„°ë§</h2> <p>ë„킹 ìƒíƒœê°€ 바뀌면 {@link android.content.Intent#ACTION_DOCK_EVENT} ì•¡ì…˜ì´ ë¸Œë¡œë“œìºìŠ¤íŠ¸ë©ë‹ˆë‹¤. ê¸°ê¸°ì˜ ë„í¬ ìƒíƒœ 변경사í•ì„ ëª¨ë‹ˆí„°ë§í•˜ë ¤ë©´ ì•„ëž˜ì— í‘œì‹œëœ ëŒ€ë¡œ ì• í”Œë¦¬ì¼€ì´ì…˜ 매니페스트ì—서 브로드ìºìŠ¤íŠ¸ 리시버를 등ë¡í•˜ì„¸ìš”.</p> diff --git a/docs/html-intl/intl/ko/training/monitoring-device-state/index.jd b/docs/html-intl/intl/ko/training/monitoring-device-state/index.jd index f96e2e16dc57..030701f99956 100644 --- a/docs/html-intl/intl/ko/training/monitoring-device-state/index.jd +++ b/docs/html-intl/intl/ko/training/monitoring-device-state/index.jd @@ -7,10 +7,10 @@ next.link=battery-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>요구사í•ê³¼ ì„ í–‰ì¡°ê±´</h2> +<h2>요구사í•ê³¼ ì„ í–‰ì¡°ê±´</h2> <ul> <li>Android 2.0(API 수준 5) ë˜ëŠ” ì´ìƒ</li> <li> <a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> 사용 경험</li> @@ -21,19 +21,19 @@ next.link=battery-monitoring.html <li><a href="{@docRoot}guide/components/services.html">서비스</a> </ul> -</div> +</div> </div> <p>ì¢‹ì€ ì•±ì€ í˜¸ìŠ¤íŠ¸ ê¸°ê¸°ì˜ ë°°í„°ë¦¬ ìˆ˜ëª…ì— ë¯¸ì¹˜ëŠ” ì˜í–¥ì´ 미미해야 합니다. ê°•ì˜ë¥¼ 통해 호스트 ê¸°ê¸°ì˜ ìƒíƒœì— ë”°ë¼ ê¸°ëŠ¥ê³¼ ë™ìž‘ì„ ìˆ˜ì •í•˜ëŠ” ê²ƒì„ ëª¨ë‹ˆí„°ë§í•˜ëŠ” ì•±ì„ êµ¬ì¶•í• ìˆ˜ 있게 ë©ë‹ˆë‹¤.</p> <p>ì—°ê²°ì´ ëŠê²¼ì„ 때 백그ë¼ìš´ë“œ 서비스 ì—…ë°ì´íŠ¸ë¥¼ 사용 중지하거나, 배터리 ìˆ˜ì¤€ì´ ë‚®ì„ ë•Œ ì—…ë°ì´íЏ 빈ë„를 줄ì´ëŠ” 조치를 취하여, ì‚¬ìš©ìž í™˜ê²½ì„ ì†ìƒì‹œí‚¤ì§€ ì•Šê³ ë°°í„°ë¦¬ ìˆ˜ëª…ì— ë¯¸ì¹˜ëŠ” ì˜í–¥ì„ ìµœì†Œí™”í• ìˆ˜ 있습니다.</p> -<h2>ê°•ì˜</h2> - +<h2>ê°•ì˜</h2> + <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="battery-monitoring.html">배터리 수준 ë° ì¶©ì „ ìƒíƒœ 모니터ë§</a></b></dt> <dd>ì¶©ì „ ìƒíƒœì—서 현재 배터리 수준 ë° ë³€ê²½ì‚¬í•ì„ í™•ì¸ ë° ëª¨ë‹ˆí„°ë§í•˜ì—¬ ì•±ì˜ ì—…ë°ì´íЏ 빈ë„를 변경하는 ë²•ì„ ì•Œì•„ë³´ì„¸ìš”.</dd> @@ -46,4 +46,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="manifest-receivers.html">온디맨드로 브로드ìºìŠ¤íŠ¸ ìˆ˜ì‹ ê¸° ì¡°ìž‘</a></b></dt> <dd>매니페스트 ë‚´ì— ì„ ì–¸í–ˆë˜ ë¸Œë¡œë“œìºìŠ¤íŠ¸ 리시버는 현재 기기 ìƒíƒœì—서 í•„ìš” 없는 ê²ƒì„ ì‚¬ìš© 중지하ë„ë¡ ëŸ°íƒ€ìž„ 때 ì „í™˜ë 수 있습니다. 기기가 íŠ¹ì • ìƒíƒœì— ë„ë‹¬í• ë•Œê¹Œì§€ ìƒíƒœ 변화 리시버 ë° ì§€ì—° ì•¡ì…˜ì„ ì „í™˜ ë° ë‹¨ê³„ì 으로 연결하여 íš¨ìœ¨ì„±ì„ í–¥ìƒí•˜ëŠ” ë²•ì„ ì•Œì•„ë³´ì„¸ìš”.</dd> -</dl>
\ No newline at end of file +</dl>
\ No newline at end of file diff --git a/docs/html-intl/intl/ko/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/intl/ko/training/monitoring-device-state/manifest-receivers.jd index c5c311b75f6b..0eefe0850182 100644 --- a/docs/html-intl/intl/ko/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html-intl/intl/ko/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> @@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ì¸í…트 ë° ì¸í…트 í•„í„°</a> </ul> -</div> +</div> </div> <p>기기 ìƒíƒœ ë³€ê²½ì„ ëª¨ë‹ˆí„°ë§í•˜ëŠ” 가장 간단한 ë°©ë²•ì€ ëª¨ë‹ˆí„°ë§í•˜ëŠ” ê° ìƒíƒœì— 대해 {@link android.content.BroadcastReceiver}를 만들어 ê°ê°ì„ ì• í”Œë¦¬ì¼€ì´ì…˜ ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ë“±ë¡í•˜ëŠ” 것입니다. 그러면 ê° ë¦¬ì‹œë²„ ë‚´ì—서 현재 기기 ìƒíƒœë¥¼ 기반으로 반복 ì•ŒëžŒì˜ ì¼ì •ì„ ê°„ë‹¨ížˆ ë³€ê²½í• ìˆ˜ 있습니다.</p> @@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html <p>ì´ ë°©ë²•ì˜ ë¶€ìž‘ìš©ì€ ë¦¬ì‹œë²„ 중 하나ë¼ë„ 실행ë˜ë©´ 매번 ì•±ì´ ê¸°ê¸°ì˜ ì ˆì „ 모드를 í•´ì œì‹œí‚¨ë‹¤ëŠ” 것입니다.</p> <p>ë” ë‚˜ì€ ë°©ë²•ì€ ëŸ°íƒ€ìž„ 때 브로드ìºìŠ¤íŠ¸ 리시버를 사용 중지 ë˜ëŠ” 사용하ë„ë¡ ì„¤ì •í•˜ëŠ” 것입니다. ì´ë ‡ê²Œ 하면 ë§¤ë‹ˆíŽ˜ìŠ¤íŠ¸ì— ì„ ì–¸í•œ 리시버를 í•„ìš”í• ë•Œë§Œ 시스템 ì´ë²¤íŠ¸ì— ì˜í•´ 실행ë˜ëŠ” 수ë™ì ì¸ ì•ŒëžŒìœ¼ë¡œ ì‚¬ìš©í• ìˆ˜ 있습니다.</p> - -<h2 id="ToggleReceivers">효율성 í–¥ìƒì„ 위한 ìƒíƒœ 변화 ìˆ˜ì‹ ê¸°ì˜ ì „í™˜ ë° ë‹¨ê³„ì ì—°ê²° </h2> - + +<h2 id="ToggleReceivers">효율성 í–¥ìƒì„ 위한 ìƒíƒœ 변화 ìˆ˜ì‹ ê¸°ì˜ ì „í™˜ ë° ë‹¨ê³„ì ì—°ê²° </h2> + <p>{@link android.content.pm.PackageManager}를 사용하여 아래ì—서 í‘œì‹œëœ ëŒ€ë¡œ ëª¨ë“ ì‚¬ìš© ë˜ëŠ” 사용 중지하기 ì›í•˜ëŠ” 브로드ìºìŠ¤íŠ¸ 리시버를 í¬í•¨í•˜ì—¬ 매니페스트 ë‚´ì— ì •ì˜ëœ ëª¨ë“ ìš”ì†Œì˜ ì‚¬ìš© 가능 ìƒíƒœë¥¼ ì „í™˜í• ìˆ˜ 있습니다.</p> <pre>ComponentName receiver = new ComponentName(context, myReceiver.class); diff --git a/docs/html-intl/intl/ko/training/multiscreen/adaptui.jd b/docs/html-intl/intl/ko/training/multiscreen/adaptui.jd index cb7b66c90238..a8d2fc16939f 100644 --- a/docs/html-intl/intl/ko/training/multiscreen/adaptui.jd +++ b/docs/html-intl/intl/ko/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>ê°•ì˜ ëª©í‘œ</h2> <ol> @@ -27,17 +27,17 @@ previous.link=screendensities.html <ul> <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 ë° íœ´ëŒ€ì „í™” ì§€ì›</a></li> </ul> - + <h2>다운로드 </h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>현재 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 표시하는 ë ˆì´ì•„ì›ƒì— ë”°ë¼ UI 플로가 달ë¼ì§ˆ 수 있습니다. 예를 들어 ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì´ì¤‘ ì°½ 모드로 ë˜ì–´ 있는 경우ì—는 왼쪽 ì°½ì— ìžˆëŠ” í•ëª©ì„ í´ë¦í•˜ë©´ 오른쪽 ì°½ì— ì½˜í…ì¸ ê°€ 표시ë˜ê³ , ë‹¨ì¼ ì°½ 모드로 ë˜ì–´ 있는 경우ì—는 콘í…ì¸ ê°€ 해당 ì°½ì— í‘œì‹œë©ë‹ˆë‹¤(다른 액티비티ì—서).</p> @@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment { public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html-intl/intl/ko/training/multiscreen/index.jd b/docs/html-intl/intl/ko/training/multiscreen/index.jd index dd152aea410a..0a30f92abaab 100644 --- a/docs/html-intl/intl/ko/training/multiscreen/index.jd +++ b/docs/html-intl/intl/ko/training/multiscreen/index.jd @@ -7,10 +7,10 @@ next.link=screensizes.html @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>요구사í•ê³¼ ì„ í–‰ì¡°ê±´</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>요구사í•ê³¼ ì„ í–‰ì¡°ê±´</h2> <ul> <li>Android 1.6 ì´ìƒ(샘플 ì•±ì˜ ê²½ìš° 2.1 ì´ìƒ)</li> @@ -27,17 +27,17 @@ href="{@docRoot}tools/support-library/index.html">호환성 ë¼ì´ë¸ŒëŸ¬ë¦¬</a>ë <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 ì§€ì›</a></li> </ul> - -<h2>다운로드 </h2> - -<div class="download-box"> + +<h2>다운로드 </h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Android는 소형 íœ´ëŒ€ì „í™”ì—서부터 대형 TVì— ì´ë¥´ê¸°ê¹Œì§€ 다양한 화면 í¬ê¸°ì˜ ìˆ˜ë§Žì€ ê¸°ê¸° ìœ í˜•ì„ ì§€ì›í•©ë‹ˆë‹¤. ë”°ë¼ì„œ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ëª¨ë“ í™”ë©´ í¬ê¸°ì™€ 호환ë˜ì–´ 최대한 ë§Žì€ ì‚¬ìš©ìžê°€ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ë””ìžì¸í•˜ëŠ” ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤.</p> <p>하지만 다양한 기기 ìœ í˜•ê³¼ 호환ë˜ëŠ” 것만으로는 충분하지 않습니다. ê° í™”ë©´ í¬ê¸°ì— ë”°ë¼ ì‚¬ìš©ìž ìƒí˜¸ìž‘ìš©ì— ìœ ë¦¬í•œ ì ê³¼ 불리한 ì ì´ ë‹¤ë¦…ë‹ˆë‹¤. ë”°ë¼ì„œ 사용ìžì—게 ë§Œì¡±ì„ ì£¼ê³ ê¹Šì€ ì¸ìƒì„ ì‹¬ì–´ì£¼ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 단지 여러 í™”ë©´ì„ <em>ì§€ì›</em>하는 ë° ê·¸ì¹˜ì§€ ì•Šê³ í™”ë©´ 구성별로 ì‚¬ìš©ìž í™˜ê²½ì„ <em>최ì í™”</em>해야 합니다.</p> @@ -48,17 +48,17 @@ href="{@docRoot}tools/support-library/index.html">호환성 ë¼ì´ë¸ŒëŸ¬ë¦¬</a>ë <p class="note"><strong>ì°¸ê³ :</strong> ì´ ê°•ì˜ ë° ê°•ì˜ì™€ ê´€ë ¨ëœ ìƒ˜í”Œì€ <a href="{@docRoot}tools/support-library/index.html">호환성 ë¼ì´ë¸ŒëŸ¬ë¦¬</a>를 사용하며 ì´ëŠ” Android 3.0 ì´í•˜ ë²„ì „ì—서 <PH>{@link android.app.Fragment}</PH> API를 사용하기 위해서입니다. ì´ ê°•ì˜ì—서 API를 ëª¨ë‘ ì‚¬ìš©í•˜ë ¤ë©´ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 다운로드하여 ì• í”Œë¦¬ì¼€ì´ì…˜ì— 추가해야 합니다.</p> - - -<h2>ê°•ì˜</h2> - -<dl> - <dt><b><a href="screensizes.html">다양한 화면 í¬ê¸° ì§€ì›</a></b></dt> - <dd>ì´ ê°•ì˜ì—서는 여러 다양한 화면 í¬ê¸°ì— ì¡°ì •ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ë””ìžì¸í•˜ëŠ” 방법(ìœ ì—°í•œ 보기 í¬ê¸°, <PH>{@link android.widget.RelativeLayout}</PH>, 화면 í¬ê¸° ë° ë°©í–¥ í•œì •ìž, ë³„ì¹ í•„í„° ë° ë‚˜ì¸-패치 비트맵 사용하기)ì„ ì•ˆë‚´í•©ë‹ˆë‹¤.</dd> - - <dt><b><a href="screendensities.html">다양한 화면 ë°€ë„ ì§€ì›</a></b></dt> - <dd>ì´ ê°•ì˜ì—서는 다양한 픽셀 ë°€ë„를 가진 í™”ë©´ì„ ì§€ì›í•˜ëŠ” 방법(ë°€ë„ ë…립형 픽셀(density-independent pixel) 사용하기 ë° ë°€ë„별로 ì 합한 비트맵 ì œê³µí•˜ê¸°)ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</dd> - - <dt><b><a href="adaptui.html">ì¡°ì •í˜• UI 플로우 구현</a></b></dt> - <dd>ì´ ê°•ì˜ì—서는 여러 화면 í¬ê¸°/ë°€ë„ ì¡°í•©ì— ì¡°ì •ë˜ë„ë¡ UI 플로우를 구현하는 방법(활성 ë ˆì´ì•„ì›ƒì˜ ëŸ°íƒ€ìž„ ê°ì§€, 현재 ë ˆì´ì•„ì›ƒì— ë”°ë¥¸ 대ì‘, 화면 구성 변경 처리)ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</dd> -</dl> + + +<h2>ê°•ì˜</h2> + +<dl> + <dt><b><a href="screensizes.html">다양한 화면 í¬ê¸° ì§€ì›</a></b></dt> + <dd>ì´ ê°•ì˜ì—서는 여러 다양한 화면 í¬ê¸°ì— ì¡°ì •ë˜ëŠ” ë ˆì´ì•„ì›ƒì„ ë””ìžì¸í•˜ëŠ” 방법(ìœ ì—°í•œ 보기 í¬ê¸°, <PH>{@link android.widget.RelativeLayout}</PH>, 화면 í¬ê¸° ë° ë°©í–¥ í•œì •ìž, ë³„ì¹ í•„í„° ë° ë‚˜ì¸-패치 비트맵 사용하기)ì„ ì•ˆë‚´í•©ë‹ˆë‹¤.</dd> + + <dt><b><a href="screendensities.html">다양한 화면 ë°€ë„ ì§€ì›</a></b></dt> + <dd>ì´ ê°•ì˜ì—서는 다양한 픽셀 ë°€ë„를 가진 í™”ë©´ì„ ì§€ì›í•˜ëŠ” 방법(ë°€ë„ ë…립형 픽셀(density-independent pixel) 사용하기 ë° ë°€ë„별로 ì 합한 비트맵 ì œê³µí•˜ê¸°)ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</dd> + + <dt><b><a href="adaptui.html">ì¡°ì •í˜• UI 플로우 구현</a></b></dt> + <dd>ì´ ê°•ì˜ì—서는 여러 화면 í¬ê¸°/ë°€ë„ ì¡°í•©ì— ì¡°ì •ë˜ë„ë¡ UI 플로우를 구현하는 방법(활성 ë ˆì´ì•„ì›ƒì˜ ëŸ°íƒ€ìž„ ê°ì§€, 현재 ë ˆì´ì•„ì›ƒì— ë”°ë¥¸ 대ì‘, 화면 구성 변경 처리)ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</dd> +</dl> diff --git a/docs/html-intl/intl/ko/training/multiscreen/screendensities.jd b/docs/html-intl/intl/ko/training/multiscreen/screendensities.jd index 5d6e2f3c59b7..dfaa44f33abc 100644 --- a/docs/html-intl/intl/ko/training/multiscreen/screendensities.jd +++ b/docs/html-intl/intl/ko/training/multiscreen/screendensities.jd @@ -12,8 +12,8 @@ next.link=adaptui.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> <ol> @@ -29,15 +29,15 @@ next.link=adaptui.html </ul> <h2>다운로드 </h2> - -<div class="download-box"> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>ì´ ê°•ì˜ì—서는 다양한 리소스를 ì œê³µí•˜ê³ í•´ìƒë„ ë…립형(resolution-independent) ì¸¡ì • 단위를 ì‚¬ìš©í•¨ìœ¼ë¡œì¨ ë‹¤ì–‘í•œ 화면 ë°€ë„를 ì§€ì›í•˜ëŠ” ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> @@ -48,8 +48,8 @@ next.link=adaptui.html <p>예를 들어 ë‘ ê°œì˜ ë³´ê¸° 사ì´ì— ì—¬ë°±ì„ ì§€ì •í• ë•Œ <code>px</code>ê°€ 아닌 <code>dp</code>를 사용합니다.</p> <pre> -<Button android:layout_width="wrap_content" - android:layout_height="wrap_content" +<Button android:layout_width="wrap_content" + android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> @@ -57,8 +57,8 @@ next.link=adaptui.html <p>í…스트 í¬ê¸°ë¥¼ ì§€ì •í• ë•Œì—는 í•ìƒ <code>sp</code>를 사용합니다.</p> <pre> -<TextView android:layout_width="match_parent" - android:layout_height="wrap_content" +<TextView android:layout_width="match_parent" + android:layout_height="wrap_content" android:textSize="20sp" /> </pre> diff --git a/docs/html-intl/intl/ko/training/multiscreen/screensizes.jd b/docs/html-intl/intl/ko/training/multiscreen/screensizes.jd index f2e77a6e2b04..984923d5ee93 100644 --- a/docs/html-intl/intl/ko/training/multiscreen/screensizes.jd +++ b/docs/html-intl/intl/ko/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>ê°•ì˜ ëª©í‘œ</h2> <ol> @@ -30,26 +30,26 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 ì§€ì›</a></li> </ul> -<h2>다운로드 </h2> - -<div class="download-box"> +<h2>다운로드 </h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>ì´ ê°•ì˜ì—서는 다양한 화면 í¬ê¸°ë¥¼ ì§€ì›í•˜ëŠ” ë°©ë²•ì„ ì„¤ëª…í•©ë‹ˆë‹¤.</p> -<ul> - <li>í™”ë©´ì— ë§žê²Œ ë ˆì´ì•„웃 í¬ê¸° ì¡°ì •</li> - <li>화면 êµ¬ì„±ì— ë”°ë¼ ì 합한 UI ë ˆì´ì•„웃 ì œê³µ</li> +<ul> + <li>í™”ë©´ì— ë§žê²Œ ë ˆì´ì•„웃 í¬ê¸° ì¡°ì •</li> + <li>화면 êµ¬ì„±ì— ë”°ë¼ ì 합한 UI ë ˆì´ì•„웃 ì œê³µ</li> <li>올바른 í™”ë©´ì— ì˜¬ë°”ë¥¸ ë ˆì´ì•„웃 ì ìš©</li> - <li>ì •í™•í•˜ê²Œ 확대ë˜ëŠ” 비트맵 ì œê³µ</li> -</ul> + <li>ì •í™•í•˜ê²Œ 확대ë˜ëŠ” 비트맵 ì œê³µ</li> +</ul> -<h2 id="TaskUseWrapMatchPar">'wrap_content' ë° 'match_parent' 사용</h2> +<h2 id="TaskUseWrapMatchPar">'wrap_content' ë° 'match_parent' 사용</h2> <p>ë ˆì´ì•„ì›ƒì´ ë‹¤ì–‘í•œ 화면 í¬ê¸°ì— ë”°ë¼ ìœ ì—°í•˜ê²Œ ì¡°ì •ë˜ë„ë¡ í•˜ë ¤ë©´ ì¼ë¶€ ë·° êµ¬ì„±ìš”ì†Œì˜ ë„ˆë¹„ì™€ 높ì´ì— <code>"wrap_content"</code> ë° <code>"match_parent"</code>를 사용해야 합니다. <code>"wrap_content"</code>를 사용하면 ë·°ì˜ ë„ˆë¹„ì™€ 높ì´ê°€ 해당 ë·° ë‚´ì— ì½˜í…ì¸ ê°€ ë“¤ì–´ê°€ëŠ”ë° í•„ìš”í•œ 최소 í¬ê¸°ë¡œ ì„¤ì •ë˜ëŠ” 반면, <code>"match_parent"</code>(API 수준 8 ì´ì „ì—는 <code>"fill_parent"</code>ë¼ê³ ë„ í•¨)를 사용하면 구성요소가 확장ë˜ì–´ ë¶€ëª¨ë·°ì˜ í¬ê¸°ì™€ ì¼ì¹˜í•˜ê²Œ ë©ë‹ˆë‹¤.</p> @@ -65,7 +65,7 @@ next.link=screendensities.html <p class="img-caption"><strong>그림 1.</strong> 세로 모드(왼쪽) ë° ê°€ë¡œ 모드(오른쪽)ì—ì„œì˜ ë‰´ìŠ¤ ë¦¬ë” ìƒ˜í”Œ 앱</p> -<h2 id="TaskUseRelativeLayout">RelativeLayout 사용</h2> +<h2 id="TaskUseRelativeLayout">RelativeLayout 사용</h2> <p>비êµì 복잡한 ë ˆì´ì•„ì›ƒì„ ë§Œë“¤ë ¤ë©´ <PH>{@link android.widget.LinearLayout}ì˜ ì¤‘ì²© ì¸ìŠ¤í„´ìŠ¤ì™€</PH> <code>"wrap_content"</code> ë° <code>"match_parent"</code> í¬ê¸°ì˜ ì¡°í•©ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 하지만 <PH>{@link android.widget.LinearLayout}</PH> ì„ ì‚¬ìš©í•˜ë©´ ìžì‹ë·°ì˜ 여백 관계를 ì •í™•í•˜ê²Œ ì œì–´í• ìˆ˜ 없으며 <PH>{@link android.widget.LinearLayout}</PH> 단순히 나란하게 표시ë©ë‹ˆë‹¤. ìžì‹ë·°ë¥¼ ì¼ì§ì„ ì´ ì•„ë‹Œ 다양한 방향으로 표시해야 하는 경우 구성요소 사ì´ì˜ 여백 관계를 중심으로 ë ˆì´ì•„ì›ƒì„ ì§€ì •í• ìˆ˜ 있는 <PH>{@link android.widget.RelativeLayout}</PH>ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ë” ì¢‹ì€ ë°©ë²•ì¼ ìˆ˜ 있습니다. 예를 들어 화면 ì™¼ìª½ì— í•˜ë‚˜ì˜ ìžì‹ë·°ë¥¼, ì˜¤ë¥¸ìª½ì— ë‹¤ë¥¸ ìžì‹ë·°ë¥¼ ì •ë ¬í• ìˆ˜ 있습니다.</p> @@ -115,8 +115,8 @@ next.link=screendensities.html <p>êµ¬ì„±ìš”ì†Œì˜ í¬ê¸°ê°€ 변하ë”ë¼ë„ 여백 관계가 <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p> - -<h2 id="TaskUseSizeQuali">í¬ê¸° í•œì •ìž ì‚¬ìš©</h2> + +<h2 id="TaskUseSizeQuali">í¬ê¸° í•œì •ìž ì‚¬ìš©</h2> <p>ì´ì „ 섹션ì—서 다룬 ìœ ì—°í•œ ë ˆì´ì•„웃ì´ë‚˜ ìƒëŒ€ì ë ˆì´ì•„웃으로는 한계가 있습니다. ì´ëŸ¬í•œ ë ˆì´ì•„ì›ƒì´ êµ¬ì„±ìš”ì†Œ ë‚´ë¶€ ë° ì£¼ìœ„ì˜ ì—¬ë°±ì„ í™•ìž¥í•˜ì—¬ 다양한 í™”ë©´ì— ë§žê²Œ ì¡°ì •ë˜ê¸´ 하지만 화면 í¬ê¸°ë³„로 최ì ì˜ ì‚¬ìš©ìž í™˜ê²½ì„ ì œê³µí•˜ì§€ëŠ” ëª»í• ìˆ˜ 있습니다. ë”°ë¼ì„œ ì• í”Œë¦¬ì¼€ì´ì…˜ì€ ìœ ì—°í•œ ë ˆì´ì•„ì›ƒì„ êµ¬í˜„í• ë¿ ì•„ë‹ˆë¼ ë‹¤ì–‘í•œ 화면 êµ¬ì„±ì„ íƒ€ê²ŸíŒ…í• ìˆ˜ 있ë„ë¡ ë‹¤ì–‘í•œ 대체 ë ˆì´ì•„ì›ƒì„ ì œê³µí•´ì•¼ 합니다. ê·¸ ë°©ë²•ì€ ëŸ°íƒ€ìž„ì´ í˜„ìž¬ ê¸°ê¸°ì˜ êµ¬ì„±ì— ë”°ë¼ ì 합한 리소스(예: 화면 í¬ê¸°ë³„로 다른 ë ˆì´ì•„웃 ë””ìžì¸)를 ìžë™ìœ¼ë¡œ ì„ íƒí•˜ë„ë¡ í•´ 주는 <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">구성 í•œì •ìž</a>를 사용하는 것입니다.</p> @@ -158,7 +158,7 @@ next.link=screendensities.html <p>하지만 Android 3.2 ì´ì „ 기기는 <code>sw600dp</code>를 í¬ê¸° í•œì •ìžë¡œ ì¸ì‹í•˜ì§€ 않기 ë•Œë¬¸ì— ìµœì†Œ 너비 í•œì •ìžê°€ ì œëŒ€ë¡œ ìž‘ë™í•˜ì§€ 않으며 ë”°ë¼ì„œ <code>large</code> í•œì •ìžë„ ê³„ì† ì‚¬ìš©í•´ì•¼ 합니다. ë”°ë¼ì„œ <code>res/layout-large/main.xml</code>ë¼ëŠ” ì´ë¦„ì˜ íŒŒì¼ì´ 있어야 하며 ì´ íŒŒì¼ì€ <code>res/layout-sw600dp/main.xml</code>ê³¼ ë™ì¼í•œ 파ì¼ìž…니다. ë‹¤ìŒ ì„¹ì…˜ì—서는 ì´ëŸ° ì‹ìœ¼ë¡œ ë ˆì´ì•„웃 파ì¼ì´ 중복ë˜ì§€ 않게 하는 ê¸°ìˆ ì„ ì‚´íŽ´ë³´ê² ìŠµë‹ˆë‹¤.</p> -<h2 id="TaskUseAliasFilters">ë ˆì´ì•„웃 ë³„ì¹ ì‚¬ìš©</h2> +<h2 id="TaskUseAliasFilters">ë ˆì´ì•„웃 ë³„ì¹ ì‚¬ìš©</h2> <p>최소 너비 í•œì •ìžëŠ” Android 3.2 ì´ìƒ ë²„ì „ì—서만 ì‚¬ìš©í• ìˆ˜ 있습니다. ë”°ë¼ì„œ ì´ì „ ë²„ì „ê³¼ 호환ë˜ë„ë¡ í•˜ë ¤ë©´ ì¶”ìƒí™” í¬ê¸° 빈(소형, 보통, 대형 ë° ì´ˆëŒ€í˜•)ì„ ê³„ì† ì‚¬ìš©í•´ì•¼ 합니다. 예를 들어 íœ´ëŒ€ì „í™”ì—서는 ë‹¨ì¼ ì°½ UIê°€ 표시ë˜ê³ 7ì¸ì¹˜ 태블릿, TV ë° ê¸°íƒ€ 대형 기기ì—서는 다중 ì°½ UIê°€ 표시ë˜ë„ë¡ UI를 ë””ìžì¸í•˜ë ¤ë©´ ë‹¤ìŒ íŒŒì¼ì„ ì œê³µí•´ì•¼ 합니다.</p> @@ -202,7 +202,7 @@ next.link=screendensities.html <PH>{@code large}</PH>,3.2 ì´í›„ ë²„ì „ì€ <code>sw600dp</code>와 ì¼ì¹˜).</p> -<h2 id="TaskUseOriQuali">ë°©í–¥ í•œì •ìž ì‚¬ìš©</h2> +<h2 id="TaskUseOriQuali">ë°©í–¥ í•œì •ìž ì‚¬ìš©</h2> <p>ì¼ë¶€ ë ˆì´ì•„ì›ƒì€ ê°€ë¡œ ë° ì„¸ë¡œ ë°©í–¥ 모ë‘ì—서 잘 ìž‘ë™í•˜ì§€ë§Œ ëŒ€ë¶€ë¶„ì˜ ë ˆì´ì•„ì›ƒì€ ì¡°ì •ì„ í†µí•´ ë§Žì€ ì´ì ì„ ëˆ„ë¦´ 수 있습니다. 다ìŒì€ 뉴스 ë¦¬ë” ìƒ˜í”Œ 앱ì—서 화면 í¬ê¸°ì™€ 방향별로 ë ˆì´ì•„ì›ƒì´ ì–´ë–»ê²Œ ìž‘ë™í•˜ëŠ”ì§€ ë³´ì—¬ì¤ë‹ˆë‹¤.</p> diff --git a/docs/html-intl/intl/pt-br/about/versions/android-5.0.jd b/docs/html-intl/intl/pt-br/about/versions/android-5.0.jd index 23904b3325ef..5408793c79e9 100644 --- a/docs/html-intl/intl/pt-br/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/pt-br/about/versions/android-5.0.jd @@ -426,7 +426,7 @@ sdk.platform.apiLevel=21 <p>Quando o sistema detectar uma rede adequada, ele se conectará à rede e chamará a chamada de retorno {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()}. É possÃvel usar o objeto {@link android.net.Network} da chamada de retorno a fim de receber mais informações sobre a rede ou direcionar o tráfego para que a rede selecionada seja usada.</p> <h3 id="BluetoothBroadcasting">Bluetooth Low Energy</h3> -<p>O Android 4.3 apresentou o suporte de plataforma para o <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth Low Energy</a>(<em>Bluetooth LE</em>) na função central. No Android 5.0, um dispositivo Android agora pode agir como um <em>dispositivo periférico</em> de Bluetooth LE. Os apps podem usar esse recurso para fazer com que sua presença seja percebida pelos dispositivos vizinhos. É possÃvel, por exemplo, criar apps que permitem que um dispositivo funcione como um pedômetro ou um monitor de integridade de dados e envie seus dados para outro dispositivo Bluetooth LE.</p> +<p>O Android 4.3 apresentou o suporte de plataforma para o <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth Low Energy</a>(<em>Bluetooth LE</em>) na função central. No Android 5.0, um dispositivo Android agora pode agir como um <em>dispositivo periférico</em> de Bluetooth LE. Os apps podem usar esse recurso para fazer com que sua presença seja percebida pelos dispositivos vizinhos. É possÃvel, por exemplo, criar apps que permitem que um dispositivo funcione como um pedômetro ou um monitor de integridade de dados e envie seus dados para outro dispositivo Bluetooth LE.</p> <p>As novas APIs de {@link android.bluetooth.le} permitem que seus apps divulguem anúncios, verifiquem respostas e formem conexões com dispositivos Bluetooth LE vizinhos. Para usar os novos recursos de publicidade e varredura, adicione a permissão {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} no manifesto. Quando os usuários atualizam ou fazem o download do seu app a partir da Play Store, eles são solicitados a conceder a seguinte permissão para seu app: "Informações da conexão Bluetooth: permite que o app controle o Bluetooth, incluindo a divulgação para dispositivos Bluetooth vizinhos ou a busca de informações sobre esses dispositivos."</p> <p>Para começar a publicidade de Bluetooth LE para que outros dispositivos possam descobrir seu app, chame {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} e passe uma implementação da classe {@link android.bluetooth.le.AdvertiseCallback}. O objeto de chamada de retorno recebe um relatório do sucesso ou da falha da operação de publicidade.</p> diff --git a/docs/html-intl/intl/pt-br/design/get-started/principles.jd b/docs/html-intl/intl/pt-br/design/get-started/principles.jd index 82e28cccfe10..81b3524130e0 100644 --- a/docs/html-intl/intl/pt-br/design/get-started/principles.jd +++ b/docs/html-intl/intl/pt-br/design/get-started/principles.jd @@ -8,7 +8,7 @@ definir as diretrizes de projeto mais detalhadas para diferentes tipos de dispositivo.</p> <p> -Considere estes princÃpios ao aplicar +Considere estes princÃpios ao aplicar sua criatividade e sua mentalidade de projeto. Desvie-se de forma objetiva. </p> @@ -18,7 +18,7 @@ sua criatividade e sua mentalidade de projeto. Desvie-se de forma objetiva. <div class="col-7"> <h4 id="delight-me">Agrade-me de formas surpreendentes</h4> -<p>Uma bela superfÃcie, uma animação cuidadosamente posicionada ou um efeito sonoro no momento certo +<p>Uma bela superfÃcie, uma animação cuidadosamente posicionada ou um efeito sonoro no momento certo contribui para a boa experiência. Efeitos sutis contribuem para uma sensação de facilidade e de que algo poderoso está à mão.</p> diff --git a/docs/html-intl/intl/pt-br/design/material/index.jd b/docs/html-intl/intl/pt-br/design/material/index.jd index 5368d2d74c0c..e2f0b47de6e9 100644 --- a/docs/html-intl/intl/pt-br/design/material/index.jd +++ b/docs/html-intl/intl/pt-br/design/material/index.jd @@ -39,10 +39,10 @@ page.image=images/cards/design-material-for-android_2x.jpg -<p itemprop="description">O Material Design é um guia abrangente para design visual, de movimento e de +<p itemprop="description">O Material Design é um guia abrangente para design visual, de movimento e de interação para diversas plataformas e dispositivos. O Android agora é compatÃvel com -aplicativos do Material Design. Para usar o Material Design nos aplicativos Android, siga as orientações definidas -nas <a href="http://www.google.com/design/spec">especificações do Material Design</a> e use os novos +aplicativos do Material Design. Para usar o Material Design nos aplicativos Android, siga as orientações definidas +nas <a href="http://www.google.com/design/spec">especificações do Material Design</a> e use os novos componentes e funcionalidades disponÃveis no Android 5.0 (API de nÃvel 21) e em posteriores.</p> <p>O Android fornece os seguintes elementos para criar aplicativos do Material Design:</p> @@ -59,7 +59,7 @@ componentes e funcionalidades disponÃveis no Android 5.0 (API de nÃvel 21) e e <h3>Tema do Material</h3> -<p>O tema do Material fornece um novo estilo para o seu aplicativo, widgets de sistema que permitem +<p>O tema do Material fornece um novo estilo para o seu aplicativo, widgets de sistema que permitem definir a paleta de cores e as animações padrão para feedback de toque e transições de atividades.</p> <!-- two columns --> @@ -79,13 +79,13 @@ definir a paleta de cores e as animações padrão para feedback de toque e tran <br style="clear:left"/> </div> -<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/theme.html">Como usar o tema +<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/theme.html">Como usar o tema do Material</a>.</p> <h3>Listas e cartões</h3> -<p>O Android fornece dois novos widgets para exibir cartões e listas com estilos e animações do +<p>O Android fornece dois novos widgets para exibir cartões e listas com estilos e animações do Material Design:</p> <!-- two columns --> @@ -97,19 +97,19 @@ Material Design:</p> </div> <div style="float:left;width:250px;margin-right:0px;"> <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" /> - <p>O novo widget <code>CardView</code> permite exibir informações importantes dentro de + <p>O novo widget <code>CardView</code> permite exibir informações importantes dentro de cartões que têm aparência consistente.</p> </div> <br style="clear:left"/> </div> -<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/lists-cards.html">Como criar +<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/lists-cards.html">Como criar listas e cartões</a>.</p> <h3>Sombras de vistas</h3> -<p>Além das propriedades X e Y, vistas no Android agora têm uma propriedade +<p>Além das propriedades X e Y, vistas no Android agora têm uma propriedade Z. Essa nova propriedade representa a elevação de uma vista, que determina:</p> <ul> @@ -130,7 +130,7 @@ Z. Essa nova propriedade representa a elevação de uma vista, que determina:</p </div> </div> -<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/shadows-clipping.html">Como +<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/shadows-clipping.html">Como definir sombras e recortar visualizações</a>.</p> @@ -165,7 +165,7 @@ Exibir animações em <strong>desenháveis da lista de estado</strong> entre mud <p>Animações de feedback de toque são integradas em várias vistas padrão, como botões. As novas APIs permitem personalizar essas animações e adicioná-las à s vistas personalizadas.</p> -<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/animations.html">Como definir +<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/animations.html">Como definir animações personalizadas</a>.</p> @@ -182,5 +182,5 @@ uma cor em tempo de execução.</li> imagem de mapa de bits.</li> </ul> -<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/drawables.html">Como trabalhar +<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/drawables.html">Como trabalhar com desenháveis</a>.</p> diff --git a/docs/html-intl/intl/pt-br/design/patterns/compatibility.jd b/docs/html-intl/intl/pt-br/design/patterns/compatibility.jd index 775af0c312a0..bd4ec30ab1ed 100644 --- a/docs/html-intl/intl/pt-br/design/patterns/compatibility.jd +++ b/docs/html-intl/intl/pt-br/design/patterns/compatibility.jd @@ -57,7 +57,7 @@ de ações resultante tem o mesmo estilo que no exemplo anterior, mas é exibida <div class="col-6"> <h4>Aplicativos legados em telefones com controles de navegação virtuais</h4> -<p>Ao executar um aplicativo que foi desenvolvido para Android 2.3 ou anterior em um telefone com controles de +<p>Ao executar um aplicativo que foi desenvolvido para Android 2.3 ou anterior em um telefone com controles de navegação virtuais, um controle de ações adicionais é exibido no lado direito da barra de navegação virtual. É possÃvel tocar no controle para exibir as ações do aplicativo no estilo tradicional de menu do Android.</p> diff --git a/docs/html-intl/intl/pt-br/design/patterns/navigation.jd b/docs/html-intl/intl/pt-br/design/patterns/navigation.jd index 8ed12f71b60b..89eab9a4a19e 100644 --- a/docs/html-intl/intl/pt-br/design/patterns/navigation.jd +++ b/docs/html-intl/intl/pt-br/design/patterns/navigation.jd @@ -66,7 +66,7 @@ estará no mesmo lugar dentro da hierarquia do aplicativo e nenhum histórico de <li>Mudar caracterÃsticas de exibição (como mudar o zoom)</li> </ul> <h4>Navegação entre telas de mesmo nÃvel</h4> -<p>Quando o aplicativo suporta navegação de uma lista de itens para uma vista de detalhes de um desses itens, +<p>Quando o aplicativo suporta navegação de uma lista de itens para uma vista de detalhes de um desses itens, frequentemente é desejável dar suporte à navegação de direção daquele item para outro anterior ou posterior a ele na lista. Por exemplo, no Gmail, é fácil deslizar para a esquerda ou para a direita em uma conversa para visualizar uma mais nova ou mais antiga na mesma Caixa de entrada. Assim como ao mudar a vista dentro de uma tela, tal @@ -82,9 +82,9 @@ ignorar essas telas relacionadas e navegar para a tela do contêiner visualizada <img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> -<p>Você tem a capacidade de deixar o comportamento de Para Cima ainda mais inteligente com base em seu conhecimento da +<p>Você tem a capacidade de deixar o comportamento de Para Cima ainda mais inteligente com base em seu conhecimento da vista de detalhe. Estendendo o exemplo da Play Store acima, imagine que o usuário navegou do último -Livro visualizado para os detalhes da adaptação do Filme. Nesse caso, Para Cima pode retornar a um contêiner +Livro visualizado para os detalhes da adaptação do Filme. Nesse caso, Para Cima pode retornar a um contêiner (filmes) pelo qual o usuário não navegou anteriormente.</p> <img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> @@ -116,7 +116,7 @@ botão Voltar continua até a Tela inicial.</p> <h4>Notificações indiretas</h4> -<p>Quando o aplicativo precisa apresentar simultaneamente informações sobre vários eventos, ele pode usar +<p>Quando o aplicativo precisa apresentar simultaneamente informações sobre vários eventos, ele pode usar uma única notificação que direcione o usuário a uma tela intersticial. Essa tela resume esses eventos e fornece caminhos para que o usuário mergulhe profundamente no aplicativo. Notificações desse estilo são chamadas de <em>notificações indiretas</em>.</p> @@ -128,7 +128,7 @@ tela intersticial, Para Cima e Voltar se comportam como em notificações padrã navegando dentro do aplicativo em vez de voltar à tela intersticial.</p> <p>Por exemplo, suponha que um usuário no Gmail receba uma notificação indireta do Agenda. Tocar nessa -notificação abrirá a tela intersticial, que exibirá lembretes para vários +notificação abrirá a tela intersticial, que exibirá lembretes para vários eventos. Tocar em Voltar na tela intersticial retornará o usuário ao Gmail. Tocar em um determinado evento levará o usuário da tela intersticial ao aplicativo completo do Agenda para exibir detalhes do evento. Dos detalhes do evento, Para Cima e Voltar navegam para a vista de nÃvel superior do Agenda.</p> @@ -169,7 +169,7 @@ informações e todas as ações associadas que o usuário pode executar. Seu ap atividades, consistindo em atividades que você cria e naquelas que reutiliza de outros aplicativos.</p> <p>Uma <strong>tarefa</strong> é a sequência de atividades que um usuário segue para atingir um objetivo. Uma -única tarefa pode usar atividades apenas de um aplicativo ou pode retirar atividades de uma série +única tarefa pode usar atividades apenas de um aplicativo ou pode retirar atividades de uma série de outros aplicativos.</p> <p>Uma <strong>intenção</strong> é um mecanismo para que um aplicativo sinalize que gostaria a assistência de outro @@ -188,7 +188,7 @@ que foram registradas para tratar a intenção Compartilhar.</p> <img src="{@docRoot}design/media/navigation_between_apps_inward.png"> -<p>Quando o usuário seleciona o compartilhamento via Gmail, a atividade de composição do Gmail é adicionada como uma continuação da +<p>Quando o usuário seleciona o compartilhamento via Gmail, a atividade de composição do Gmail é adicionada como uma continuação da Tarefa A — nenhuma tarefa nova é criada. Se o Gmail tivesse a própria tarefa em execução em segundo plano, ela não seria afetada.</p> @@ -209,5 +209,5 @@ Recentes). Se o Gmail já tivesse a própria tarefa em execução em segundo pla pela Tarefa B — o contexto anterior é abandonado em favor do novo objetivo do usuário.</p> <p>Quando o aplicativo é registrado para tratar intenções com uma atividade em um ponto profundo da hierarquia do aplicativo, -consulte <a href="#into-your-app">Navegação para o seu aplicativo pelos widgets de tela +consulte <a href="#into-your-app">Navegação para o seu aplicativo pelos widgets de tela inicial e notificações</a> para ver orientações sobre como especificar a navegação Para Cima.</p> diff --git a/docs/html-intl/intl/pt-br/design/patterns/notifications.jd b/docs/html-intl/intl/pt-br/design/patterns/notifications.jd index efea6104638c..5560e85f5c2e 100644 --- a/docs/html-intl/intl/pt-br/design/patterns/notifications.jd +++ b/docs/html-intl/intl/pt-br/design/patterns/notifications.jd @@ -43,12 +43,12 @@ atenção — e que é sincronizado conforme apropriado em todos os disposit funcionais:</p> <ul> - <li>As notificações passaram por mudanças visuais consistentes com o novo + <li>As notificações passaram por mudanças visuais consistentes com o novo tema do Material Design.</li> <li> As notificações agora estão disponÃveis na tela de bloqueio do dispositivo, enquanto que o conteúdo sensÃvel ainda pode ficar oculto atrás dela.</li> - <li>Notificações de alta prioridade recebidas enquanto o dispositivo está em uso agora usam um novo formato, chamado de + <li>Notificações de alta prioridade recebidas enquanto o dispositivo está em uso agora usam um novo formato, chamado de notificações heads-up.</li> <li>Notificações sincronizadas na nuvem: descartar uma notificação em um dos dispositivos Android a descarta @@ -62,7 +62,7 @@ anteriores, consulte <a href="./notifications_k.html">Notificações no Android <h2 id="Anatomy">Anatomia de uma notificação</h2> -<p>Esta seção aborda as partes básicas de uma notificação e como elas +<p>Esta seção aborda as partes básicas de uma notificação e como elas podem aparecer em diferentes tipos de dispositivos.</p> <h3 id="BaseLayout">Layout básico</h3> @@ -83,7 +83,7 @@ tipo.</li> para versões anteriores da plataforma têm a mesma aparência e o mesmo funcionamento no Android 5.0, com apenas mudanças menores de estilo que o sistema entrega a você. Para obter mais informações sobre notificações em versões -anteriores do Android, consulte +anteriores do Android, consulte <a href="./notifications_k.html">Notificações no Android 4.4 ou em anteriores</a>.</p></p> @@ -92,7 +92,7 @@ anteriores do Android, consulte <div style="clear:both;margin-top:20px"> <p class="img-caption"> - Layout básico de uma notificação em dispositivo portátil (à esquerda) e a mesma notificação em Wear (à direita), + Layout básico de uma notificação em dispositivo portátil (à esquerda) e a mesma notificação em Wear (à direita), com uma foto do usuário e um Ãcone de notificação </p> </div> @@ -110,8 +110,8 @@ pinçar para aproximar ou afastar a vista ou realizar deslizamento de um dedo pa compacto e expandido. Para notificações de um evento, o Android fornece três modelos de layout expandido (texto, caixa de entrada e - imagem) para usar em seu aplicativo. As imagens a seguir mostram como -se parecem notificações de um evento em + imagem) para usar em seu aplicativo. As imagens a seguir mostram como +se parecem notificações de um evento em dispositivos portáteis (à esquerda) e usados junto ao corpo (à direita).</p> <img style="margin-top:30px" @@ -168,7 +168,7 @@ exibido e um nome de ação. Adicionar ações a um layout básico simples torna a notificação expansÃvel, mesmo se a -notificação não tiver um layout expandido. Como as ações são exibidas apenas para notificações +notificação não tiver um layout expandido. Como as ações são exibidas apenas para notificações expandidas e que ficam de outra forma ocultas, certifique-se de que qualquer ação que um usuário possa invocar de dentro de uma @@ -207,7 +207,7 @@ marcada como Alta, Máxima ou tela cheia, ela receberá uma notificação heads- <h3 id="MakeItPersonal">Torne-a pessoal</h3> <p>Para notificações de itens enviados por outra pessoa (como uma mensagem ou -atualização de status), inclua a imagem da pessoa usando +atualização de status), inclua a imagem da pessoa usando {@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Anexe também informações sobre a pessoa nos metadados da notificação (consulte {@link android.app.Notification#EXTRA_PEOPLE}).</p> @@ -235,8 +235,8 @@ o usuário possa pressionar o botão Voltar do sistema para voltar ao nÃvel sup <em>Navegação para o seu aplicativo pelos widgets de página inicial e notificações</em> no padrão de projeto de <a href="{@docRoot}design/patterns/navigation.html#into-your-app">Navegação</a>. </p> -<h3 id="correctly_set_and_manage_notification_priority">Definição e gerenciamento -corretos da prioridade das +<h3 id="correctly_set_and_manage_notification_priority">Definição e gerenciamento +corretos da prioridade das notificações</h3> <p>O Android tem suporte para um sinalizador de prioridade para notificações. Esse sinalizador permite @@ -311,11 +311,11 @@ as descobre expandindo a sombra da notificação.</p> </table> -<h4 id="how_to_choose_an_appropriate_priority"><strong>Como escolher uma prioridade +<h4 id="how_to_choose_an_appropriate_priority"><strong>Como escolher uma prioridade adequada </strong></h4> -<p><code>DEFAULT</code>, <code>HIGH</code> e <code>MAX</code> são nÃveis de prioridade de interrupção e arriscam +<p><code>DEFAULT</code>, <code>HIGH</code> e <code>MAX</code> são nÃveis de prioridade de interrupção e arriscam interromper a atividade do usuário. Para evitar irritar os usuários de seu aplicativo, reserve nÃveis de prioridade de interrupção para notificações que:</p> @@ -359,7 +359,7 @@ de notificação), podem usar essas informações para tomar decisões de classi href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> </td> <td> -<p>Chamada recebida (voz ou vÃdeo) ou solicitação similar de +<p>Chamada recebida (voz ou vÃdeo) ou solicitação similar de comunicação sÃncrona</p> </td> </tr> @@ -508,7 +508,7 @@ de um determinado tipo estão pendentes.</p> <p style="clear:left; padding-top:30px; padding-bottom:20px">Você pode fornecer mais detalhes sobre as notificações individuais que compõem um -resumo usando o layout resumido expandido. Essa abordagem permite que os usuários +resumo usando o layout resumido expandido. Essa abordagem permite que os usuários entendam melhor quais notificações estão pendentes e decidam se estão interessados o suficiente para lê-las em detalhes dentro @@ -525,13 +525,13 @@ opcionais</h3> <p>Os usuários devem sempre controlar as notificações. Permita que o usuário desative as notificações -de seu aplicativo ou altere as propriedades de alerta, como som de alerta e +de seu aplicativo ou altere as propriedades de alerta, como som de alerta e se a vibração será usada, adicionando um item de configuração da notificação nas configurações do aplicativo.</p> <h3 id="use_distinct_icons">Use Ãcones distintos</h3> <p>Ao olhar para a área de notificação, o usuário deverá ser capaz de discernir -que tipos de +que tipos de notificações estão atualmente pendentes.</p> <div class="figure"> @@ -545,7 +545,7 @@ aplicativo que tenham aparência suficientemente distinta.</p> <p><strong>O que fazer</strong></p> <p>Use o <a href="/design/style/iconography.html#notification">estilo de Ãcone de notificação</a> apropriado - para Ãcones pequenos e o + para Ãcones pequenos e o <a href="/design/style/iconography.html#action-bar">estilo de Ãcone de barra de ação</a> da luminosidade do Material para os Ãcones de ação.</p> @@ -564,7 +564,7 @@ opacidade total.</p> </div> <p style="clear:both"><strong>O que não fazer</strong></p> -<p>Use cores para distinguir o seu aplicativo dos outros. Ãcones de notificação devem +<p>Use cores para distinguir o seu aplicativo dos outros. Ãcones de notificação devem somente ser uma imagem com fundo branco sobre transparente.</p> @@ -599,7 +599,7 @@ aplicativo exige. Portanto, use notificações de forma cuidadosa.</p> <p>Para criar um aplicativo que as pessoas gostem de usar, é importante reconhecer que a atenção e o foco -do usuário são recursos que devem ser protegidos. Apesar de o sistema de +do usuário são recursos que devem ser protegidos. Apesar de o sistema de notificação do Android ter sido projetado para minimizar o impacto das notificações na atenção do usuário, ainda é @@ -617,7 +617,7 @@ alguma outra coisa.</p> Exemplos de notificação que depende de tempo </p> -<p>Apesar de aplicativos bem comportados geralmente se manifestarem apenas quando ocorre interação com eles, alguns +<p>Apesar de aplicativos bem comportados geralmente se manifestarem apenas quando ocorre interação com eles, alguns casos justificam que o aplicativo interrompa o usuário com uma notificação não solicitada.</p> <p>Use notificações principalmente para <strong>eventos que dependam de tempo</strong>, especialmente @@ -625,11 +625,11 @@ casos justificam que o aplicativo interrompa o usuário com uma notificação nà exemplo, um bate-papo recebido é uma forma sÃncrona em tempo real de comunicação: outro usuário espera ativamente a resposta. Eventos de calendário são outro exemplo bom de quando usar uma -notificação e atrair a +notificação e atrair a atenção do usuário, pois o evento é iminente e eventos de calendário frequentemente envolvem outras pessoas.</p> -<h3 style="clear:both" id="when_not_to_display_a_notification">Quando não exibir +<h3 style="clear:both" id="when_not_to_display_a_notification">Quando não exibir uma notificação</h3> <div class="figure" style="margin-top:60px"> @@ -646,8 +646,8 @@ assÃncronas e não direcionadas que fluem por uma rede social geralmente não justificam uma interrupção em tempo real. Para os usuários que se importam com elas, deixe que decidam recebê-las.</li> - <li> Não crie uma notificação se as informações novas relevantes estiverem -atualmente na tela. Em vez disso, + <li> Não crie uma notificação se as informações novas relevantes estiverem +atualmente na tela. Em vez disso, use a IU do próprio aplicativo para notificar o usuário das novas informações diretamente no contexto. Por exemplo, um aplicativo de bate-papo não deve criar notificações de sistema enquanto o @@ -655,12 +655,12 @@ usuário estiver conversando ativamente com outro usuário.</li> <li> Não interrompa o usuário para realizar operações técnicas de baixo nÃvel, como salvar ou sincronizar informações, nem atualize um aplicativo se o aplicativo ou o sistema puder resolver o problema sem envolver o usuário.</li> - <li> Não interrompa o usuário para informar um erro se o aplicativo -puder se recuperar dele por conta própria, sem que o usuário + <li> Não interrompa o usuário para informar um erro se o aplicativo +puder se recuperar dele por conta própria, sem que o usuário tome qualquer ação.</li> <li> Não crie notificações que não tenham conteúdo real de notificação e que meramente anunciem o seu -aplicativo. Uma notificação deve fornecer informações úteis, oportunas e novas e +aplicativo. Uma notificação deve fornecer informações úteis, oportunas e novas e não deve ser usada meramente para executar um aplicativo.</li> <li> Não crie notificações supérfluas apenas para colocar sua marca na frente @@ -673,7 +673,7 @@ com o seu tela inicial.</li> </ul> -<h2 style="clear:left" id="interacting_with_notifications">Interação com +<h2 style="clear:left" id="interacting_with_notifications">Interação com notificações</h2> <p>Notificações são indicadas por Ãcones na barra de status e podem ser acessadas @@ -692,7 +692,7 @@ Deslizar à esquerda ou à direita em uma notificação a remove da gaveta.</p> </p> </div> <p>Notificações contÃnuas mantêm os usuários informados sobre um processo em andamento em -segundo plano. +segundo plano. Por exemplo, reprodutores de música anunciam a faixa em reprodução no sistema de notificação e continuam a fazer isso até que o usuário interrompa a reprodução. Notificações contÃnuas também podem @@ -701,7 +701,7 @@ feedback sobre tarefas mais longas, como o download de um arquivo ou a codificaà manualmente uma notificação contÃnua da gaveta de notificações.</p> <h3 id="ongoing_notifications">Reprodução de mÃdia</h3> -<p>No Android 5.0, a tela de bloqueio não mostra controles de transporte por causa da classe +<p>No Android 5.0, a tela de bloqueio não mostra controles de transporte por causa da classe {@link android.media.RemoteControlClient} obsoleta. Mas ela <em>mostra</em> notificações, portanto, a notificação de reprodução de cada aplicativo agora é a forma principal para que os usuários controlem a reprodução em um estado bloqueado. Esse comportamento dá aos aplicativos mais @@ -724,12 +724,12 @@ Para obter orientação adicional sobre o uso de caixas de diálogo e avisos, co <p>Notificações são notÃcias e, portanto, são essencialmente exibidas em ordem cronológica inversa, com -consideração especial para a +consideração especial para a <a href="#correctly_set_and_manage_notification_priority">prioridade</a> da notificação declarada no aplicativo.</p> <p>Notificações são uma parte importante da tela de bloqueio e são exibidas proeminentemente sempre -que a tela do dispositivo é exibida. O espaço na tela de bloqueio é restrito, portanto, +que a tela do dispositivo é exibida. O espaço na tela de bloqueio é restrito, portanto, é mais importante do que nunca identificar as notificações mais urgentes ou relevantes. Por esse motivo, o Android tem um @@ -762,14 +762,14 @@ recebem <h3>Na tela de bloqueio</h3> -<p>Como as notificações são visÃveis na tela de bloqueio, a privacidade do usuário é uma consideração +<p>Como as notificações são visÃveis na tela de bloqueio, a privacidade do usuário é uma consideração especialmente - importante. Notificações frequentemente contêm informações sensÃveis e + importante. Notificações frequentemente contêm informações sensÃveis e não devem necessariamente estar visÃveis para qualquer pessoa que ligar a tela do dispositivo.</p> <ul> - <li> Para dispositivos que têm uma tela de bloqueio segura (PIN, padrão ou senha), a interface tem + <li> Para dispositivos que têm uma tela de bloqueio segura (PIN, padrão ou senha), a interface tem partes públicas e privadas. A interface pública pode ser exibida em uma tela de bloqueio segura e, portanto, vista por qualquer pessoa. A interface privada é o mundo atrás da tela de bloqueio e só é revelada depois que o usuário faz login no dispositivo.</li> @@ -828,7 +828,7 @@ Os desenvolvedores podem controlar que notificações são enviadas do celular ao relógio e vice-versa. Os desenvolvedores também podem controlar quais ações são transmitidas. Se o seu aplicativo inclui -ações que não podem ser executadas com um toque, oculte essas ações +ações que não podem ser executadas com um toque, oculte essas ações na sua notificação do Wear ou considere colocá-las em um aplicativo do Wear, permitindo que o usuário termine a ação diff --git a/docs/html-intl/intl/pt-br/guide/components/bound-services.jd b/docs/html-intl/intl/pt-br/guide/components/bound-services.jd index aa024943160f..032950eb962b 100644 --- a/docs/html-intl/intl/pt-br/guide/components/bound-services.jd +++ b/docs/html-intl/intl/pt-br/guide/components/bound-services.jd @@ -334,7 +334,7 @@ que o serviço realize vários encadeamentos, deve-se usar a <a href="{@docRoot} </div> </div> -<p>Caso precise que o serviço comunique-se com processos remotos, é possÃvel usar +<p>Caso precise que o serviço comunique-se com processos remotos, é possÃvel usar o {@link android.os.Messenger} para fornecer a interface ao serviço. Esta técnica permite estabelecer comunicação entre processos (IPC) sem precisar usar a AIDL.</p> @@ -348,7 +348,7 @@ para cada chamada de um cliente.</li> <li>O {@link android.os.Messenger} cria um {@link android.os.IBinder} que o serviço retorna aos clientes a partir de {@link android.app.Service#onBind onBind()}.</li> <li>Os clientes usam {@link android.os.IBinder} para instanciar o {@link android.os.Messenger} -(que menciona o {@link android.os.Handler} do serviço), que usam para enviar objetos +(que menciona o {@link android.os.Handler} do serviço), que usam para enviar objetos {@link android.os.Message} para o serviço.</li> <li>O serviço recebe cada {@link android.os.Message} em seu {@link android.os.Handler} — especificamente, no método {@link android.os.Handler#handleMessage @@ -538,7 +538,7 @@ são abordados mais abaixo).</p> </li> </ol> -<p>Por exemplo, o fragmento a seguir conecta o cliente ao serviço criado acima +<p>Por exemplo, o fragmento a seguir conecta o cliente ao serviço criado acima <a href="#Binder">estendendo a classe Binder</a> para que tudo que ele tenha que fazer seja lançar o {@link android.os.IBinder} retornado para a classe {@code LocalService} e solicitar a instância de {@code LocalService}:</p> @@ -637,7 +637,7 @@ android.content.Context#stopService stopService()}, independente de vÃnculo com qualquer cliente.</p> <p>Além disso, se o serviço for iniciado e aceitar vÃnculos, quando o sistema chamar -o método {@link android.app.Service#onUnbind onUnbind()}, será possÃvel retornar +o método {@link android.app.Service#onUnbind onUnbind()}, será possÃvel retornar {@code true} opcionalmente se você quiser receber uma chamada de {@link android.app.Service#onRebind onRebind()} na próxima vez em que um cliente vincular-se ao serviço (em vez de receber uma chamada de {@link android.app.Service#onBind onBind()}). {@link android.app.Service#onRebind diff --git a/docs/html-intl/intl/pt-br/guide/components/fragments.jd b/docs/html-intl/intl/pt-br/guide/components/fragments.jd index 7b1acf9e3439..74f3dfe2d15b 100644 --- a/docs/html-intl/intl/pt-br/guide/components/fragments.jd +++ b/docs/html-intl/intl/pt-br/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>Veja também</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Construção de uma IU dinâmica com Fragmentos</a></li> @@ -361,8 +361,8 @@ você precisará usar {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}.</p> <p>Para ver uma atividade de exemplo que usa um fragmento como um trabalhador de segundo plano, sem uma IU, consulte o exemplo de {@code -FragmentRetainInstance.java}, incluso nos exemplos do SDK (disponibilizados pelo -Android SDK Manager) e localizado no sistema como +FragmentRetainInstance.java}, incluso nos exemplos do SDK (disponibilizados pelo +Android SDK Manager) e localizado no sistema como <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p> @@ -378,7 +378,7 @@ chame {@link android.app.Activity#getFragmentManager()} a partir da atividade.</ <li>Adquirir fragmentos existentes na atividade, com {@link android.app.FragmentManager#findFragmentById findFragmentById()} (para fragmentos que forneçam uma IU no layout da atividade) ou {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()} (para fragmentos que forneçam ou não uma IU).</li> +findFragmentByTag()} (para fragmentos que forneçam ou não uma IU).</li> <li>Retire os fragmentos da pilha de retorno com {@link android.app.FragmentManager#popBackStack()} (simulando um comando de <em>Voltar</em> do usuário).</li> <li>Registre uma escuta para as alterações na pilha de retorno com {@link @@ -600,7 +600,7 @@ como usar o provedor de conteúdo estão disponÃveis na documentação <a href= <h3 id="ActionBar">Adição de itens à barra de ação</h3> -<p>Os fragmentos podem contribuir com itens de menu para o <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">menu de opções</a> da atividade (e, consequentemente, para a <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ação</a>) implementando +<p>Os fragmentos podem contribuir com itens de menu para o <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">menu de opções</a> da atividade (e, consequentemente, para a <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ação</a>) implementando {@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. Para que este método receba chamadas, no entanto, você deve chamar {@link android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} durante {@link @@ -785,7 +785,7 @@ android.widget.FrameLayout}), ou iniciar uma nova atividade (onde o fragmento po <p>O segundo fragmento, {@code DetailsFragment}, exibe o resumo da peça para o item selecionado na lista de {@code TitlesFragment}:</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>Uma nova chamada da classe {@code TitlesFragment}, ou seja, se o usuário clicar em um item de lista @@ -798,7 +798,7 @@ o resumo da peça selecionada quando a tela está na orientação de retrato:</p {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>Observe que esta atividade finaliza-se se a configuração for de paisagem, pois a atividade principal pode tomar o controle e exibir {@code DetailsFragment} juntamente com {@code TitlesFragment}. Isto pode acontecer se o usuário iniciar {@code DetailsActivity} enquanto estiver na orientação de retrato, diff --git a/docs/html-intl/intl/pt-br/guide/components/fundamentals.jd b/docs/html-intl/intl/pt-br/guide/components/fundamentals.jd index 47b98458e642..2fb85531de8a 100644 --- a/docs/html-intl/intl/pt-br/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/pt-br/guide/components/fundamentals.jd @@ -379,7 +379,7 @@ mas serviços externos, como o Google Play, as leem para oferecer uma filtragem aos usuários quando buscam esses aplicativos para seu dispositivo.</p> <p>Por exemplo: se o aplicativo exige uma câmera e usa APIs introduzidas no Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API de nÃvel</a> 7), -deve-se declarar esses requisitos no arquivo de manifesto da seguinte forma:</p> +deve-se declarar esses requisitos no arquivo de manifesto da seguinte forma:</p> <pre> <manifest ... > @@ -393,7 +393,7 @@ deve-se declarar esses requisitos no arquivo de manifesto da seguinte forma:</p> <p>Assim, dispositivos que <em>não</em> tenham câmera e tenham versão Android <em>anterior</em> a 2.1 não poderão instalar o aplicativo a partir do Google Play.</p> -<p>No entanto, também é possÃvel declarar que o aplicativo usa a câmera como recurso +<p>No entanto, também é possÃvel declarar que o aplicativo usa a câmera como recurso <em>não obrigatório</em>. Nesse caso, o aplicativo precisa definir o atributo <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a> como {@code "false"} e verificar em tempo de execução se o dispositivo tem câmera e desativar os recursos da câmera conforme o necessário.</p> diff --git a/docs/html-intl/intl/pt-br/guide/components/index.jd b/docs/html-intl/intl/pt-br/guide/components/index.jd index 02fcaa63c63a..5131ead2239c 100644 --- a/docs/html-intl/intl/pt-br/guide/components/index.jd +++ b/docs/html-intl/intl/pt-br/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=Componentes do aplicativo page.landing=true -page.landing.intro=A estrutura de aplicativo do Android permite criar aplicativos ricos e inovadores usando um conjunto de componentes reutilizáveis. Esta seção explica como criar os componentes que definem os blocos de construção do aplicativo e como conectá-los usando intenções. -page.metaDescription=A estrutura de aplicativo do Android permite criar aplicativos ricos e inovadores usando um conjunto de componentes reutilizáveis. Esta seção mostra como criar os componentes que definem os blocos de construção do aplicativo e como conectá-los usando intenções. +page.landing.intro=A estrutura de aplicativo do Android permite criar aplicativos ricos e inovadores usando um conjunto de componentes reutilizáveis. Esta seção explica como criar os componentes que definem os blocos de construção do aplicativo e como conectá-los usando intenções. +page.metaDescription=A estrutura de aplicativo do Android permite criar aplicativos ricos e inovadores usando um conjunto de componentes reutilizáveis. Esta seção mostra como criar os componentes que definem os blocos de construção do aplicativo e como conectá-los usando intenções. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Artigos de blogue</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>Uso de DialogFragments</h4> <p>Nesta publicação, mostrarei como usar DialogFragments com a biblioteca de suporte v4 (para compatibilidade retroativa em dispositivos anteriores a Honeycomb) para mostrar uma caixa de diálogo de edição simples e retornar um resultado para a Atividade chamadora usando uma interface.</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>Fragmentos para todos</h4> <p>Hoje, lançamos uma biblioteca estática que expõe a mesma API Fragments (bem como o novo LoaderManager e algumas outras classes) para que aplicativos compatÃveis com Android 1.6 e posteriores possam usar fragmentos para criar interfaces de usuário compatÃveis com tablets. </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>Multiencadeamento para desempenho</h4> <p>Uma boa prática para criar aplicativos responsivos é garantir que o encadeamento principal da IU @@ -32,11 +32,11 @@ em um encadeamento diferente.</p> <div class="col-6"> <h3>Treinamento</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>Gerenciamento do ciclo de vida da atividade</h4> <p>Essa lição explica a importância dos métodos de retorno de chamada do ciclo de vida que cada instância de -Atividade recebe e como utilizá-los para que a atividade faça o que o usuário espera e não consuma recursos +Atividade recebe e como utilizá-los para que a atividade faça o que o usuário espera e não consuma recursos do sistema quando não estiver em uso.</p> </a> diff --git a/docs/html-intl/intl/pt-br/guide/components/loaders.jd b/docs/html-intl/intl/pt-br/guide/components/loaders.jd index f3c42094729d..c69cbbfd25d2 100644 --- a/docs/html-intl/intl/pt-br/guide/components/loaders.jd +++ b/docs/html-intl/intl/pt-br/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>Classes principais</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>Exemplos relacionados</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ quando o conteúdo é alterado.</li> quando são recriados após uma alteração de configuração. Portanto, eles não precisam reconsultar os dados.</li> </ul> - + <h2 id="summary">Resumo da API de carregador</h2> <p>Há várias classes e interfaces que podem ser envolvidas no uso @@ -68,7 +68,7 @@ de carregadores em um aplicativo. Elas são resumidas nesta tabela:</p> {@link android.app.Fragment} para gerenciar uma ou mais instâncias de {@link android.content.Loader}. Isto ajuda um aplicativo a gerenciar operações executadas por longos perÃodos juntamente com o ciclo de vida de {@link android.app.Activity} -ou {@link android.app.Fragment}; o uso mais comum disto é com +ou {@link android.app.Fragment}; o uso mais comum disto é com {@link android.content.CursorLoader}. No entanto, os aplicativos têm a liberdade de criar os próprios carregadores para outros tipos de dados. <br /> @@ -129,7 +129,7 @@ de {@link android.content.Loader} ou {@link android.content.AsyncTaskLoader} para carregar dados de outra origem.</li> <li>Uma implementação de {@link android.app.LoaderManager.LoaderCallbacks}. É aqui que é possÃvel criar novos carregadores e gerenciar as referências -a carregadores existentes.</li> +a carregadores existentes.</li> <li>Uma maneira de exibir os dados do carregador, como um {@link android.widget.SimpleCursorAdapter}.</li> <li>Uma origem de dados, como um {@link android.content.ContentProvider}, ao usar @@ -140,7 +140,7 @@ android.widget.SimpleCursorAdapter}.</li> <p>O {@link android.app.LoaderManager} gerencia uma ou mais instâncias de {@link android.content.Loader} dentro de uma {@link android.app.Activity} ou um {@link android.app.Fragment}. Há apenas um {@link -android.app.LoaderManager} por atividade ou fragmento.</p> +android.app.LoaderManager} por atividade ou fragmento.</p> <p>Geralmente, inicializa-se um {@link android.content.Loader} dentro do método {@link @@ -157,13 +157,13 @@ recebe os seguintes parâmetros:</p> <ul> <li>Um ID único que identifica o carregador. Neste exemplo, o ID é 0.</li> <li>Argumentos opcionais para fornecer ao carregador -em construção (<code>null</code> neste exemplo).</li> +em construção (<code>null</code> neste exemplo).</li> <li>Uma implementação de {@link android.app.LoaderManager.LoaderCallbacks}, que {@link android.app.LoaderManager} chama para relatar eventos do carregador. Nesse exemplo,  a classe local implementa a interface de {@link android.app.LoaderManager.LoaderCallbacks}, para que ela passe uma referência -para si, {@code this}.</li> +para si, {@code this}.</li> </ul> <p>A chamada de {@link android.app.LoaderManager#initLoader initLoader()} garante que o carregador foi inicializado e que está ativo. Ela possui dois possÃveis resultados:</p> @@ -193,7 +193,7 @@ a vida do carregador automaticamente. O {@link android.app.LoaderManager} inicia e interrompe o carregamento quando necessário, além de manter o estado do carregador e do conteúdo associado. À medida que isso ocorre, você raramente interage com os carregadores diretamente (para ver um exemplo de métodos para aprimorar o comportamento -de um carregador, consulte o exemplo de <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). +de um carregador, consulte o exemplo de <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). Geralmente, usam-se os métodos {@link android.app.LoaderManager.LoaderCallbacks} para intervir no processo de carregamento quando determinados eventos ocorrem. Para obter mais informações sobre este assunto, consulte <a href="#callback">Uso dos retornos de chamada de LoaderManager</a>.</p> @@ -245,7 +245,7 @@ instancia e retorna um novo {@link android.content.Loader} para o ID fornecido. — chamado quando um carregador anteriormente criado termina o seu carregamento. </li></ul> <ul> - <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} + <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} — chamado quando um carregador anteriormente criado é reiniciado, tornando os dados indisponÃveis. </li> @@ -343,7 +343,7 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <p>Este método é chamado quando um carregador anteriormente criado é reiniciado, tornando os dados indisponÃveis. Este retorno de chamada permite que você descubra quando os dados estão prestes a serem liberados para que seja possÃvel remover a referência a eles.  </p> -<p>Esta implementação chama +<p>Esta implementação chama {@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} com um valor de <code>null</code>:</p> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} que exibe uma {@link android.widget.ListView} contendo os resultados de uma consulta aos provedores de conteúdo de contatos. Ela usa um {@link android.content.CursorLoader} para gerenciar a consulta no provedor.</p> - + <p>Para um aplicativo acessar os contatos de um usuário, como neste exemplo, o manifesto deverá incluir a permissão {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p> diff --git a/docs/html-intl/intl/pt-br/guide/components/processes-and-threads.jd b/docs/html-intl/intl/pt-br/guide/components/processes-and-threads.jd index c8e636dacce8..9bd335d98e8f 100644 --- a/docs/html-intl/intl/pt-br/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/pt-br/guide/components/processes-and-threads.jd @@ -120,7 +120,7 @@ o dispositivo atingiu o estado de paginação de memória. Portanto, eliminar al <ul> <li>Se ele hospedar um {@link android.app.Activity} que não esteja em primeiro plano, -mas ainda seja visÃvel para o usuário (o seu método {@link android.app.Activity#onPause onPause()} tiver sido chamado). +mas ainda seja visÃvel para o usuário (o seu método {@link android.app.Activity#onPause onPause()} tiver sido chamado). Isto poderá ocorrer, por exemplo, se a atividade em primeiro plano iniciar um diálogo, o que permitirá que a atividade anterior seja vista por trás dela.</li> @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/pt-br/guide/components/recents.jd b/docs/html-intl/intl/pt-br/guide/components/recents.jd index 467f62067a54..9f7588593bba 100644 --- a/docs/html-intl/intl/pt-br/guide/components/recents.jd +++ b/docs/html-intl/intl/pt-br/guide/components/recents.jd @@ -41,7 +41,7 @@ page.tags="recents","overview" atividades</a> e <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tarefas</a> acessadas recentemente. O usuário pode navegar pela lista e selecionar uma tarefa a retomar ou remover uma tarefa da lista deslizando-a para fora. Com a versão 5.0 do Android (API de nÃvel 21), várias instâncias da -mesma atividade contendo diferentes documentos podem aparecer como tarefas na tela de visão geral. Por exemplo, o +mesma atividade contendo diferentes documentos podem aparecer como tarefas na tela de visão geral. Por exemplo, o Google Drive pode ter uma tarefa para cada um dos vários documentos do Google. Cada documento aparece como uma tarefa na tela de visão geral.</p> @@ -158,8 +158,8 @@ efeitos quando o usuário abre um documento com o aplicativo:</p> <dl> <dt>"{@code intoExisting}"</dt> <dd>A atividade reutiliza uma tarefa existente para o documento. Isso é o mesmo que configurar o - sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>sem</em> configurar - o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, como descrito em + sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>sem</em> configurar + o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, como descrito em <a href="#flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</a> acima.</dd> <dt>"{@code always}"</dt> @@ -169,7 +169,7 @@ efeitos quando o usuário abre um documento com o aplicativo:</p> <dt>"{@code noneâ€}"</dt> <dd>A atividade não cria uma nova tarefa para o documento. A tela de visão geral trata a - atividade como aconteceria por padrão: ela exibe uma tarefa para o aplicativo, que + atividade como aconteceria por padrão: ela exibe uma tarefa para o aplicativo, que retoma a atividade invocada por último pelo usuário.</dd> <dt>"{@code never}"</dt> @@ -205,7 +205,7 @@ recentemente é removida da tela de visão geral. O valor máximo de {@code andr <h3 id="#apptask-remove">Uso da classe AppTask para remover tarefas</h3> -<p>Na atividade que cria uma nova tarefa na tela de visão geral, é possÃvel +<p>Na atividade que cria uma nova tarefa na tela de visão geral, é possÃvel especificar quando remover a tarefa e terminar todas as atividades associadas a ela chamando o método {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}.</p> diff --git a/docs/html-intl/intl/pt-br/guide/components/services.jd b/docs/html-intl/intl/pt-br/guide/components/services.jd index 123d90ac9cb3..564ac80d3506 100644 --- a/docs/html-intl/intl/pt-br/guide/components/services.jd +++ b/docs/html-intl/intl/pt-br/guide/components/services.jd @@ -185,7 +185,7 @@ usá-los a partir de outros componentes do aplicativo.</p> <p>Como atividades (e outros componentes), você deve declarar todos os serviços no arquivo de manifesto do aplicativo.</p> -<p>Para declarar o serviço, adicione um elemento <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> +<p>Para declarar o serviço, adicione um elemento <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> como filho do elemento <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> . Por exemplo:</p> @@ -494,7 +494,7 @@ a cada constante.</p> <h3 id="StartingAService">InÃcio de um serviço</h3> -<p>É possÃvel iniciar um dispositivo de uma atividade ou outro componente do aplicativo passando uma +<p>É possÃvel iniciar um dispositivo de uma atividade ou outro componente do aplicativo passando uma {@link android.content.Intent} a {@link android.content.Context#startService startService()}. O sistema Android chama o método {@link android.app.Service#onStartCommand onStartCommand()} do serviço e passa a ele a {@link diff --git a/docs/html-intl/intl/pt-br/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/pt-br/guide/components/tasks-and-back-stack.jd index d309c6704f37..8e485b0fc939 100644 --- a/docs/html-intl/intl/pt-br/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/pt-br/guide/components/tasks-and-back-stack.jd @@ -77,7 +77,7 @@ android.app.Fragment} class documentation.</p> </div> --> -<p>A tela inicial do dispositivo é o ponto de partida para a maioria das tarefas. Quando o usuário toca em um Ãcone no inicializador do +<p>A tela inicial do dispositivo é o ponto de partida para a maioria das tarefas. Quando o usuário toca em um Ãcone no inicializador do aplicativo (ou em um atalho na tela inicial), essa tarefa do aplicativo acontece em primeiro plano. Se não existir nenhuma tarefa para o aplicativo (se o aplicativo não tiver sido usado recentemente), uma nova tarefa @@ -85,7 +85,7 @@ será criada e a atividade "principal" daquele aplicativo abrirá como a ativida <p>Quando a atividade atual inicia outra, a nova atividade é colocada no topo da pilha e recebe foco. A atividade anterior permanece na pilha, mas é interrompida. Quando uma atividade -para, o sistema retém o estado atual da interface do usuário. Quando o usuário pressiona o botão +para, o sistema retém o estado atual da interface do usuário. Quando o usuário pressiona o botão <em>Voltar</em> , a atividade atual é retirada do topo da pilha (a atividade é destruÃda) e a atividade anterior reinicia (o estado anterior da IU é restaurado). Atividades na pilha nunca @@ -103,7 +103,7 @@ a atividade atual é destruÃda e a atividade anterior reinicia.</p> -<p>Se o usuário continua pressionando <em>Voltar</em>, cada atividade na pilha é retirada para +<p>Se o usuário continua pressionando <em>Voltar</em>, cada atividade na pilha é retirada para revelar a anterior até que o usuário retorne à tela inicial (ou a qualquer atividade que estivesse em execução no começo da tarefa). Quando todas as atividades forem removidas da pilha, a tarefa não existirá mais.</p> @@ -295,7 +295,7 @@ launchMode}</a> do elemento <p>O atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> especifica uma instrução sobre como a atividade deve ser inicializada -em uma tarefa. Há quatro modos diferentes de inicialização que podem ser designados ao atributo +em uma tarefa. Há quatro modos diferentes de inicialização que podem ser designados ao atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code>: </p> @@ -334,7 +334,7 @@ Entretanto, se uma instância da atividade já existir em uma tarefa separada, o a intenção à quela instância por meio de uma chamada do método {@link android.app.Activity#onNewIntent onNewIntent()} em vez de criar uma nova instância. Somente uma instância da atividade pode existir por vez. - <p class="note"><strong>Observação:</strong> embora a atividade inicie em uma nova tarefa, o botão + <p class="note"><strong>Observação:</strong> embora a atividade inicie em uma nova tarefa, o botão <em>Voltar</em> ainda direciona o usuário à atividade anterior.</p></dd> <dt>{@code "singleInstance"}.</dt> <dd>Igual à {@code "singleTask"}, exceto que o sistema não inicializa nenhuma outra atividade @@ -505,7 +505,7 @@ A tarefa reterá todas as atividades em sua pilha mesmo após um longo perÃodo. href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt> <dd>Se esse atributo for definido como {@code "true"} na atividade raiz de uma tarefa, a pilha será apagada da atividade raiz sempre que o usuário sair da tarefa -e retornar a ela. Em outras palavras, é o oposto de +e retornar a ela. Em outras palavras, é o oposto de <a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> {@code alwaysRetainTaskState}</a>. O usuário sempre retorna à tarefa no estado inicial, mesmo ao retirar-se da tarefa somente por um momento.</dd> @@ -557,13 +557,13 @@ nova tarefa, e o usuário perderia algum tempo trabalhando nessa tarefa. O usuá <em>Página inicial</em>. A tarefa é enviada para segundo plano e não fica mais visÃvel. O usuário não tem como voltar à tarefa porque ela não é representada no inicializador do aplicativo.</p> -<p>Para esses casos em que se deseja que o usuário não seja capaz de retornar a uma atividade, defina +<p>Para esses casos em que se deseja que o usuário não seja capaz de retornar a uma atividade, defina <a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a> - do elemento + do elemento <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> como {@code "true"} (consulte <a href="#Clearing">Apagar a pilha</a>).</p> -<p>Veja mais informações sobre a representação e o gerenciamento de atividades +<p>Veja mais informações sobre a representação e o gerenciamento de atividades na tela de visão geral em <a href="{@docRoot}guide/components/recents.html"> Tela de visão geral</a>.</p> diff --git a/docs/html-intl/intl/pt-br/guide/index.jd b/docs/html-intl/intl/pt-br/guide/index.jd index ab396477e250..74151ccd26ba 100644 --- a/docs/html-intl/intl/pt-br/guide/index.jd +++ b/docs/html-intl/intl/pt-br/guide/index.jd @@ -29,7 +29,7 @@ tela para a interface de usuário e um <em>serviço</em> realiza trabalho em segundo plano de forma independente.</p> <p>De um componente, é possÃvel executar outro componente usando uma <em>intenção</em>. É possÃvel até mesmo -iniciar um componente em um aplicativo diferente, como uma atividade em um aplicativo de mapas para mostrar um endereço. Esse modelo +iniciar um componente em um aplicativo diferente, como uma atividade em um aplicativo de mapas para mostrar um endereço. Esse modelo fornece vários pontos de entrada para um único aplicativo e permite que qualquer aplicativo se comporte como o "padrão" de um usuário para uma ação que outros aplicativos podem invocar.</p> @@ -53,7 +53,7 @@ diferentes configurações de dispositivos. Por exemplo, é possÃvel criar dife de layout para diversos tamanhos de tela e o sistema determina qual layout deverá aplicar com base no tamanho da tela do dispositivo atual.</p> -<p>Você pode consultar a disponibilidade dos recursos do dispositivo em tempo de execução se qualquer recurso do +<p>Você pode consultar a disponibilidade dos recursos do dispositivo em tempo de execução se qualquer recurso do aplicativo exigir hardware especÃfico, como uma câmera. Se necessário, também é possÃvel declarar recursos que o aplicativo exige, para que mercados como a Google Play Store não permitam a instalação em dispositivos que não sejam compatÃveis com aquele recurso.</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/pt-br/guide/topics/manifest/manifest-intro.jd index e33779684a5c..639b6dbf4bf1 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/manifest/manifest-intro.jd @@ -34,14 +34,14 @@ O nome do pacote serve como identificador exclusivo para o aplicativo.</li> <li>Descrever os componentes do aplicativo — as atividades, os serviços, os receptores de transmissão e os provedores de conteúdo que compõem o aplicativo. Nomear as classes que implementam os componentes -e publicam seus recursos (por exemplo, que mensagens {@link android.content.Intent +e publicam seus recursos (por exemplo, que mensagens {@link android.content.Intent Intent} eles podem tratar). Essas declarações permitem ao sistema Android saber quais são os componentes e em que condições eles podem ser iniciados.</li> -<li>Determinar que processos hospedarão componentes de aplicativo.</li> +<li>Determinar que processos hospedarão componentes de aplicativo.</li> <li>Declarar as permissões que o aplicativo deve ter para acessar -partes protegidas da API e interagir com outros aplicativos.</li> +partes protegidas da API e interagir com outros aplicativos.</li> <li>Declarar também as permissões que outros devem ter para interagir com os componentes do aplicativo.</li> @@ -66,7 +66,7 @@ elemento que ele pode conter. Cada elemento e seus atributos são documentados na totalidade em um arquivo separado. Para exibir informações detalhadas sobre cada elemento, clique no nome do elemento no diagrama, na lista de elementos em ordem alfabética que acompanha o diagrama -ou em qualquer outra menção ao nome do elemento. +ou em qualquer outra menção ao nome do elemento. </p> <pre> @@ -128,7 +128,7 @@ ou em qualquer outra menção ao nome do elemento. <p> Todos os elementos que podem aparecer no arquivo de manifesto estão relacionados abaixo em ordem alfabética. Estes são os únicos elementos legais. Não é possÃvel -adicionar elementos ou atributos próprios. +adicionar elementos ou atributos próprios. </p> <p style="margin-left: 2em"> @@ -158,7 +158,7 @@ adicionar elementos ou atributos próprios. </p> - + <h2 id="filec">Convenções de arquivos</h2> @@ -172,25 +172,25 @@ no manifesto: <dd>Somente os elementos <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> e <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -são necessários — eles devem estar presentes e ocorrer somente uma vez. +são necessários — eles devem estar presentes e ocorrer somente uma vez. A maioria dos outros pode ocorrer diversas vezes ou nunca — embora pelo menos alguns deles devam estar presentes para que o manifesto realize algo significativo. <p> -Se um elemento contiver qualquer coisa, ele conterá outros elementos. +Se um elemento contiver qualquer coisa, ele conterá outros elementos. Todos os valores são definidos por meio de atributos, e não como dados de caracteres dentro de um elemento. </p> <p> Elementos de mesmo nÃvel geralmente não são ordenados. Por exemplo: os elementos -<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> -e <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> -podem ser combinados entre si em qualquer sequência. (O elemento +e <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> +podem ser combinados entre si em qualquer sequência. (O elemento <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> -é uma exceção a essa regra: ele deve seguir o -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +é uma exceção a essa regra: ele deve seguir o +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> para o qual é alias.) </p></dd> @@ -200,32 +200,32 @@ devem ser especificados para um elemento para cumprir a sua finalidade. Use a documentação como guia. Para atributos verdadeiramente opcionais, ele menciona um valor padrão ou declara o que acontece na ausência de uma especificação. -<p>Exceto por alguns atributos do elemento +<p>Exceto por alguns atributos do elemento <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -raiz, todos os nomes de atributo têm um prefixo {@code android:} — +raiz, todos os nomes de atributo têm um prefixo {@code android:} — por exemplo, {@code android:alwaysRetainTaskState}. Como o prefixo é universal, a documentação geralmente o omite ao referir-se a atributos pelo nome.</p></dd> <dt><b>Declaração de nomes de classe</b></dt> <dd>Muitos elementos correspondem a objetos Java, inclusive elementos do próprio -aplicativo (o elemento -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -) e seus componentes principais — atividades -(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), -serviços -(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), -receptores de transmissão -(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) -e provedores de conteúdo -(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). +aplicativo (o elemento +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +) e seus componentes principais — atividades +(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), +serviços +(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), +receptores de transmissão +(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) +e provedores de conteúdo +(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). <p> -Se uma subclasse for definida, como quase sempre acontece para classes de componentes -({@link android.app.Activity}, {@link android.app.Service}, -{@link android.content.BroadcastReceiver} e {@link android.content.ContentProvider}), +Se uma subclasse for definida, como quase sempre acontece para classes de componentes +({@link android.app.Activity}, {@link android.app.Service}, +{@link android.content.BroadcastReceiver} e {@link android.content.ContentProvider}), a subclasse será declarada por meio de um atributo {@code name}. O nome deve conter -toda a designação do pacote. +toda a designação do pacote. Por exemplo: uma subclasse {@link android.app.Service} pode ser declarada assim: </p> @@ -240,11 +240,11 @@ Por exemplo: uma subclasse {@link android.app.Service} pode ser declarada assim: <p> No entanto, para encurtar, se o primeiro caractere da string for um ponto, -a string será acrescentada ao nome do pacote do aplicativo (conforme especificado pelo atributo -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> - do elemento -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -). A seguinte atribuição é igual à atribuição acima: +a string será acrescentada ao nome do pacote do aplicativo (conforme especificado pelo atributo +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> + do elemento +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +). A seguinte atribuição é igual à atribuição acima: </p> <pre><manifest package="com.example.project" . . . > @@ -257,13 +257,13 @@ a string será acrescentada ao nome do pacote do aplicativo (conforme especifica </manifest></pre> <p> -Ao iniciar um componente, o Android cria uma instância da subclasse nomeada. +Ao iniciar um componente, o Android cria uma instância da subclasse nomeada. Se nenhuma subclasse for especificada, ele criará uma instância da classe base. </p></dd> <dt><b>Vários valores</b></dt> <dd>Se for especificado mais de um valor, o elemento sempre será repetido -em vez de listar os vários valores dentro de um único elemento. +em vez de listar os vários valores dentro de um único elemento. Por exemplo, um filtro de intenção pode listar algumas ações: <pre><intent-filter . . . > @@ -276,22 +276,22 @@ Por exemplo, um filtro de intenção pode listar algumas ações: <dt><b>Valores de recurso</b></dt> <dd>Alguns atributos têm valores que podem ser exibidos aos usuários — por exemplo, uma etiqueta e um Ãcone de uma atividade. Os valores desses atributos -devem ser localizados e, por tanto, definidos a partir de um recurso ou tema. Os valores +devem ser localizados e, por tanto, definidos a partir de um recurso ou tema. Os valores de recurso são expressos no formato a seguir:</p> <p style="margin-left: 2em">{@code @[<i>pacote</i>:]<i>tipo</i>:<i>nome</i>}</p> <p> em que o nome do <i>pacote</i> pode ser omitido se o recurso estiver no mesmo pacote -que o aplicativo <i>tipo</i> é um tipo de recurso — como uma "string" ou -"drawable" (desenhável) — e <i>nome</i> é o nome que identifica o recurso especÃfico. +que o aplicativo <i>tipo</i> é um tipo de recurso — como uma "string" ou +"drawable" (desenhável) — e <i>nome</i> é o nome que identifica o recurso especÃfico. Por exemplo: </p> <pre><activity android:icon="@drawable/smallPic" . . . ></pre> <p> -Os valores de um tema são expressos de forma semelhante, mas, com um '{@code ?}' +Os valores de um tema são expressos de forma semelhante, mas, com um '{@code ?}' em vez de '{@code @}': </p> @@ -299,8 +299,8 @@ em vez de '{@code @}': </p></dd> <dt><b>Valores de string</b></dt> -<dd>Quando o valor de um atributo é uma string, devem-se usar duas barras invertidas ('{@code \\}') -para caracteres de escape — por exemplo, '{@code \\n}' para +<dd>Quando o valor de um atributo é uma string, devem-se usar duas barras invertidas ('{@code \\}') +para caracteres de escape — por exemplo, '{@code \\n}' para uma nova linha ou '{@code \\uxxxx}' para um caractere Unicode.</dd> </dl> @@ -320,7 +320,7 @@ Os componentes fundamentais de um aplicativo (suas atividades, serviços e recep de transmissão) são ativados por <i>intenções</i>. Intenções são pacotes de informações (objetos {@link android.content.Intent}) que descrevem uma ação desejada — inclusive os dados usados em ações, a categoria -do componente que deve executar a ação e outras instruções pertinentes. +do componente que deve executar a ação e outras instruções pertinentes. O Android localiza um componente adequado para responder à intenção, inicia uma nova instância do componente se necessário e passa-o ao objeto da intenção. @@ -330,7 +330,7 @@ ao objeto da intenção. Os componentes anunciam seus recursos — os tipos de intenção aos quais eles podem responder — por meio de <i>filtros de intenções</i>. Como o sistema Android precisa saber que intenções um componente pode tratar antes de iniciá-lo, os filtros -de intenções são especificados no manifesto como elementos +de intenções são especificados no manifesto como elementos <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> . Os componentes podem ter qualquer quantidade de filtros, em que cada um descreve um recurso diferente. @@ -345,8 +345,8 @@ do componente. <p> Para ver como os objetos de intenção são testados em relação aos filtros de intenções, -consulte o documento -<a href="{@docRoot}guide/components/intents-filters.html">Intenções +consulte o documento +<a href="{@docRoot}guide/components/intents-filters.html">Intenções e filtros de intenções</a> em separado. </p> @@ -355,41 +355,41 @@ e filtros de intenções</a> em separado. <p> Alguns elementos têm atributos {@code icon} e {@code label} de um pequeno Ãcone -e uma etiqueta de texto que pode ficar visÃvel para os usuários. Alguns deles também têm um atributo -{@code description} para um texto explicativo mais longo que também pode ser -exibido na tela. Por exemplo: o elemento +e uma etiqueta de texto que pode ficar visÃvel para os usuários. Alguns deles também têm um atributo +{@code description} para um texto explicativo mais longo que também pode ser +exibido na tela. Por exemplo: o elemento <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -tem todos os três atributos; assim, quando o usuário é consultado para dar -permissão a um aplicativo que a solicitou, serão apresentados ao usuário um Ãcone -que representa a permissão, o nome da permissão e uma descrição +tem todos os três atributos; assim, quando o usuário é consultado para dar +permissão a um aplicativo que a solicitou, serão apresentados ao usuário um Ãcone +que representa a permissão, o nome da permissão e uma descrição de tudo o que está envolvido. </p> <p> -Em todo caso, o Ãcone e a etiqueta definidos em um elemento recipiente se tornam as configurações -{@code icon} e {@code label} padrão de todos os subelementos do contêiner. -Assim, o Ãcone e a etiqueta definidos no elemento -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -são o Ãcone e a etiqueta padrão para cada um dos componentes do aplicativo. -Da mesma forma, o Ãcone e a etiqueta definidos para um componente — por exemplo, um elemento -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> - — são as configurações padrão para cada um dos elementos -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> +Em todo caso, o Ãcone e a etiqueta definidos em um elemento recipiente se tornam as configurações +{@code icon} e {@code label} padrão de todos os subelementos do contêiner. +Assim, o Ãcone e a etiqueta definidos no elemento +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +são o Ãcone e a etiqueta padrão para cada um dos componentes do aplicativo. +Da mesma forma, o Ãcone e a etiqueta definidos para um componente — por exemplo, um elemento +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> + — são as configurações padrão para cada um dos elementos +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> do componente. Se um elemento -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -define uma etiqueta, mas uma atividade e seu filtro de intenção não definem, -a etiqueta do aplicativo é tratada como a etiqueta de atividade +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +define uma etiqueta, mas uma atividade e seu filtro de intenção não definem, +a etiqueta do aplicativo é tratada como a etiqueta de atividade e do filtro de intenção. </p> <p> -O Ãcone e a etiqueta definidos para um filtro de intenção são usados para representar um componente +O Ãcone e a etiqueta definidos para um filtro de intenção são usados para representar um componente apresentado para o usuário para preencher a função -anunciada pelo filtro. Por exemplo: um filtro com as configurações -"{@code android.intent.action.MAIN}" e -"{@code android.intent.category.LAUNCHER}" anuncia uma atividade +anunciada pelo filtro. Por exemplo: um filtro com as configurações +"{@code android.intent.action.MAIN}" e +"{@code android.intent.category.LAUNCHER}" anuncia uma atividade como uma que inicia um aplicativo — ou seja, -que deve ser exibida no inicializador do aplicativo. O Ãcone e a etiqueta +que deve ser exibida no inicializador do aplicativo. O Ãcone e a etiqueta definidos no filtro são, portanto, as exibidas no inicializador. </p> @@ -397,14 +397,14 @@ definidos no filtro são, portanto, as exibidas no inicializador. <h3 id="perms">Permissões</h3> <p> -As <i>permissões</i> são restrições que limitam o acesso a parte do código -ou aos dados de um dispositivo. A limitação é imposta para proteger dados -essenciais que podem sofrer mau uso e distorções ou prejudicar a experiência do usuário. +As <i>permissões</i> são restrições que limitam o acesso a parte do código +ou aos dados de um dispositivo. A limitação é imposta para proteger dados +essenciais que podem sofrer mau uso e distorções ou prejudicar a experiência do usuário. </p> <p> -Cada permissão é identificada por uma etiqueta exclusiva. Geralmente a etiqueta indica -a ação que foi restringida. A seguir há alguns exemplos de permissões definidas +Cada permissão é identificada por uma etiqueta exclusiva. Geralmente a etiqueta indica +a ação que foi restringida. A seguir há alguns exemplos de permissões definidas pelo Android: </p> @@ -418,25 +418,25 @@ Um recurso pode ser protegido por, no máximo, uma permissão. </p> <p> -Se um aplicativo precisar de acesso a um recurso protegido por uma permissão, -ele deve declarar que precisa da permissão com um elemento -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -no manifesto. Assim, quando o aplicativo é instalado -no dispositivo, o instalador determina se concederá ou não a permissão -solicitada, marcando as autoridades que assinaram os certificados -do aplicativo e, em alguns casos, perguntando ao usuário. -Se a permissão for concedida, o aplicativo será capaz de usar os recursos -protegidos. Caso contrário, sua tentativa de acessar esses recursos simplesmente falhará -sem nenhuma notificação ao usuário. +Se um aplicativo precisar de acesso a um recurso protegido por uma permissão, +ele deve declarar que precisa da permissão com um elemento +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> +no manifesto. Assim, quando o aplicativo é instalado +no dispositivo, o instalador determina se concederá ou não a permissão +solicitada, marcando as autoridades que assinaram os certificados +do aplicativo e, em alguns casos, perguntando ao usuário. +Se a permissão for concedida, o aplicativo será capaz de usar os recursos +protegidos. Caso contrário, sua tentativa de acessar esses recursos simplesmente falhará +sem nenhuma notificação ao usuário. </p> <p> -Um aplicativo também pode proteger seus componentes (atividades, serviços, -receptores de transmissão e provedores de conteúdo) com permissões. Ele pode empregar -qualquer uma das permissões definidas pelo Android (listadas em -{@link android.Manifest.permission android.Manifest.permission}) ou declaradas -por outros aplicativos. Ou então, ele pode definir as suas próprias. As novas permissões são declaradas -com o elemento +Um aplicativo também pode proteger seus componentes (atividades, serviços, +receptores de transmissão e provedores de conteúdo) com permissões. Ele pode empregar +qualquer uma das permissões definidas pelo Android (listadas em +{@link android.Manifest.permission android.Manifest.permission}) ou declaradas +por outros aplicativos. Ou então, ele pode definir as suas próprias. As novas permissões são declaradas +com o elemento <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>. Por exemplo: uma atividade pode ser protegida da seguinte forma: </p> @@ -458,41 +458,41 @@ com o elemento <p> Observe que, nesse exemplo, a permissão {@code DEBIT_ACCT}, além de declarada -com o elemento +com o elemento <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, tem seu uso solicitado com o elemento +, tem seu uso solicitado com o elemento <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. Ela deve ser solicitada para que outros componentes do aplicativo -iniciem a atividade protegida, mesmo que a proteção -seja imposta pelo próprio aplicativo. +iniciem a atividade protegida, mesmo que a proteção +seja imposta pelo próprio aplicativo. </p> <p> Se, no mesmo exemplo, o atributo {@code permission} fosse definido -como uma permissão declarada em outro lugar +como uma permissão declarada em outro lugar (como {@code android.permission.CALL_EMERGENCY_NUMBERS}), não seria -necessário declará-la novamente com um elemento +necessário declará-la novamente com um elemento <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>. - No entanto, ainda seria necessário solicitar seu uso com -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. + No entanto, ainda seria necessário solicitar seu uso com +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. </p> <p> -O elemento -<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> -declara um espaço de nome de um grupo de permissões que será definido -no código. E +O elemento +<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> +declara um espaço de nome de um grupo de permissões que será definido +no código. E <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -define um etiqueta de um conjunto de permissões (os dois declarados no manifesto com elementos -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -e as declaradas em outro lugar). Ele afeta somente a forma com que as permissões estão -agrupadas quando apresentadas ao usuário. O elemento +define um etiqueta de um conjunto de permissões (os dois declarados no manifesto com elementos +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +e as declaradas em outro lugar). Ele afeta somente a forma com que as permissões estão +agrupadas quando apresentadas ao usuário. O elemento <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -não especifica que permissões pertencem ao grupo; +não especifica que permissões pertencem ao grupo; ele só dá um nome ao grupo. Para incluir uma permissão no grupo, -designa-se o nome do grupo ao atributo -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> - do elemento +designa-se o nome do grupo ao atributo +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> + do elemento <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>. </p> @@ -501,17 +501,17 @@ designa-se o nome do grupo ao atributo <h3 id="libs">Bibliotecas</h3> <p> -Todo aplicativo está vinculado à biblioteca Android padrão, que -contém os pacotes básicos para programar aplicativos (com classes comuns +Todo aplicativo está vinculado à biblioteca Android padrão, que +contém os pacotes básicos para programar aplicativos (com classes comuns tais como Activity, Service, Intent, View, Button, Application, ContentProvider etc.). </p> <p> -No entanto, alguns pacotes residem em suas próprias bibliotecas. Se o aplicativo -usar código de algum desses pacotes, ele deve receber solicitação explÃcita para ser -vinculado a eles. O manifesto deve conter um elemento +No entanto, alguns pacotes residem em suas próprias bibliotecas. Se o aplicativo +usar código de algum desses pacotes, ele deve receber solicitação explÃcita para ser +vinculado a eles. O manifesto deve conter um elemento <code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> - separado para nomear cada uma das bibliotecas (o nome da biblioteca se encontra + separado para nomear cada uma das bibliotecas (o nome da biblioteca se encontra na documentação do pacote). </p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/calendar-provider.jd index ce72b7db5cff..42a517b73783 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=Provedor de agenda <li><a href="#intent-view">Uso de intenções para exibir dados de agenda</a></li> </ol> </li> - + <li><a href="#sync-adapter">Adaptadores de sincronização</a></li> </ol> @@ -113,26 +113,26 @@ as tabelas e os campos principais que as vinculam entre si.</p> </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>Essa tabela contém as informações especÃficas da agenda. Cada linha nessa tabela contém os detalhes de uma única agenda, como nome, cor, informações de sincronização etc.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>Essa tabela contém as informações especÃficas do evento. Cada linha nessa tabela tem as informações de um único evento — por exemplo: tÃtulo do evento, local, horário de inÃcio, horário de término etc. O evento pode ocorrer uma vez ou diversas vezes. Os participantes, -lembretes e propriedades estendidas são armazenados em tabelas separadas. +lembretes e propriedades estendidas são armazenados em tabelas separadas. Cada um deles tem um {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} que referencia o {@link android.provider.BaseColumns#_ID} na tabela de eventos.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>Essa tabela contém os horários de inÃcio e término para cada ocorrência em um evento. Cada linha nessa tabela representa uma única ocorrência do evento. Para eventos de ocorrência única, há um mapeamento 1:1 @@ -141,7 +141,7 @@ a diversas ocorrências daquele evento são geradas automaticamente.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>Essa tabela contém as informações dos participantes (convidados) do evento. Cada linha representa um único convidado de um evento. Ela especifica o tipo de convidado e a resposta quanto à participação do convidado @@ -149,7 +149,7 @@ no evento.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>Essa tabela contém os dados de alerta/notificação. Cada linha representa um único alerta de um evento. Um evento pode ter vários lembretes. O número máximo de lembretes por evento @@ -159,7 +159,7 @@ que é definido pelo adaptador de sincronização que possui a agenda fornecida. Os lembretes são especificados em minutos antes do evento e têm um método que determina a forma de alertar o usuário.</td> </tr> - + </table> <p>A API do Provedor de Agenda é projetada para ser flexÃvel e poderosa. Ao mesmo tempo, @@ -211,7 +211,7 @@ para excluir, inserir ou atualizar dados da agenda:</p> <p>A tabela {@link android.provider.CalendarContract.Calendars} contém detalhes de agendas individuais. As colunas -Agendas a seguir são graváveis tanto por aplicativos quanto por <a href="#sync-adapter">adaptadores de sincronização</a>. +Agendas a seguir são graváveis tanto por aplicativos quanto por <a href="#sync-adapter">adaptadores de sincronização</a>. Para obter uma lista completa de campos compatÃveis, consulte a referência {@link android.provider.CalendarContract.Calendars}</p> <table> @@ -229,7 +229,7 @@ a referência {@link android.provider.CalendarContract.Calendars}</p> </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>Um booleano indicando se a agenda foi selecionada para ser exibida. Um valor de 0 indica que eventos associados a essa agenda não devem ser exibidos. Um valor de 1 indica que eventos associados a essa agenda devem @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances}.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>Um booleano que indica se a agenda deve ser sincronizada e ter os eventos armazenados no dispositivo. Um valor de 0 indica a não sincronização dessa agenda e o não armazenamento dos eventos no dispositivo. Um valor de 1 indica a sincronização dos eventos dessa agenda @@ -253,7 +253,7 @@ e o armazenamento dos eventos no dispositivo.</td> <p>A seguir há um exemplo que mostra como obter as agendas de propriedade de determinado usuário. Para simplificar o exemplo, a operação de consulta é exibida no encadeamento da interface do usuário ("encadeamento principal"). Na prática, isso deve ser feito em um encadeamento -assÃncrono em vez de no encadeamento principal. Para ver mais discussões, consulte +assÃncrono em vez de no encadeamento principal. Para ver mais discussões, consulte <a href="{@docRoot}guide/components/loaders.html">Carregadores</a>. Se você não estiver somente lendo dados, mas modificando-os, consulte {@link android.content.AsyncQueryHandler}. </p> @@ -268,13 +268,13 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Por que incluir ACCOUNT_TYPE?</h3> <p>Ao consultar um {@link @@ -289,7 +289,7 @@ o {@link android.accounts.AccountManager}. Há também um tipo especial de conta android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} para agendas não associadas a nenhuma conta do dispositivo. Contas {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} não são -sincronizadas.</p> </div> </div> +sincronizadas.</p> </div> </div> <p> Na próxima parte do exemplo, você construirá a consulta. A seleção @@ -308,38 +308,38 @@ consulte <a href="{@docRoot}guide/topics/providers/content-providers.html">Prove <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>Essa próxima seção usa o cursor para avançar pelo conjunto de resultados. Ele usa as constantes definidas no inÃcio do exemplo para retornar os valores de cada campo.</p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">Modificação de uma agenda</h3> <p>Para realizar uma atualização de uma agenda, é possÃvel fornecer o {@link @@ -350,7 +350,7 @@ URI ou como o primeiro item de seleção. A seleção deve iniciar com <code>"_id=?"</code> e o primeiro <code>selectionArg</code> deve ser o {@link -android.provider.BaseColumns#_ID} da agenda. +android.provider.BaseColumns#_ID} da agenda. Também é possÃvel realizar atualizações com codificações do ID na URI. Este exemplo altera o nome de exibição de uma agenda usando a abordagem @@ -377,14 +377,14 @@ android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} de {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} é um tipo de conta especial para agendas -não associado a nenhuma conta do dispositivo. Agendas desse tipo não são sincronizadas com um servidor. Para +não associado a nenhuma conta do dispositivo. Agendas desse tipo não são sincronizadas com um servidor. Para ver discussões sobre adaptadores de sincronização, consulte <a href="#sync-adapter">Adaptadores de sincronização</a>.</p> <h2 id="events">Tabela de eventos</h2> <p>A tabela {@link android.provider.CalendarContract.Events} contém detalhes de eventos individuais. Para adicionar, atualizar ou excluir eventos, um aplicativo deve -conter a permissão {@link android.Manifest.permission#WRITE_CALENDAR} +conter a permissão {@link android.Manifest.permission#WRITE_CALENDAR} no <a href="#manifest">arquivo de manifesto</a>.</p> <p>As colunas de Eventos a seguir são graváveis tanto por um aplicativo quanto por um adaptador @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>A duração do evento em formato <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RCF5545</a>. Por exemplo, um valor de <code>"PT1H"</code> indica que o evento deve durar uma hora, e um valor de <code>"P2W"</code> indica @@ -444,39 +444,39 @@ uma duração de 2 semanas. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>Um valor de 1 indica que esse evento ocupa o dia inteiro, como definido pelo fuso horário local. Um valor de 0 indica que é um evento comum que pode iniciar e terminar a qualquer momento durante um dia.</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>A regra de recorrência do formato do evento. Por exemplo, <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Veja mais exemplos <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">aqui</a>.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>As datas de recorrência do evento. - Normalmente, usa-se {@link android.provider.CalendarContract.EventsColumns#RDATE} - em conjunto com {@link android.provider.CalendarContract.EventsColumns#RRULE} + <td>As datas de recorrência do evento. + Normalmente, usa-se {@link android.provider.CalendarContract.EventsColumns#RDATE} + em conjunto com {@link android.provider.CalendarContract.EventsColumns#RRULE} para definir um conjunto agregado de ocorrências repetidas. Para ver mais discussões, consulte <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">Especificação RFC5545</a>.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>Se esse evento considera tempo ocupado ou se há tempo livre que pode ser reagendado. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}. Observe que essa regra não se aplica a inserções de evento pela intenção {@link android.content.Intent#ACTION_INSERT INSERT} descrita em <a href="#intent-insert">Uso de uma intenção para inserir um evento</a> — nesta situação, é fornecido um fuso horário padrão.</li> - + <li>Para eventos não recorrentes, é preciso incluir {@link android.provider.CalendarContract.EventsColumns#DTEND}. </li> - - + + <li>Para eventos recorrentes, é necessário incluir uma {@link android.provider.CalendarContract.EventsColumns#DURATION} além de uma {@link android.provider.CalendarContract.EventsColumns#RRULE} ou {@link @@ -528,7 +528,7 @@ android.content.Intent#ACTION_INSERT INSERT} descrita em <a href="#intent-insert é possÃvel usar uma {@link android.provider.CalendarContract.EventsColumns#RRULE} em conjunto com {@link android.provider.CalendarContract.EventsColumns#DTSTART} e {@link android.provider.CalendarContract.EventsColumns#DTEND}. Desta forma, o aplicativo Agenda a converte em uma duração automaticamente.</li> - + </ul> <p>A seguir há um exemplo de inserção de um evento: para simplificar, isso está sendo realizado @@ -539,8 +539,8 @@ mais informações, consulte {@link android.content.AsyncQueryHandler}.</p> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -581,7 +581,7 @@ Contudo, se for necessário, é possÃvel editar eventos diretamente. Para reali de um evento, é possÃvel fornecer o <code>_ID</code> do evento como um ID anexado à URI ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) -ou como o primeiro item de seleção. +ou como o primeiro item de seleção. A seleção deve iniciar com <code>"_id=?"</code> e o primeiro <code>selectionArg</code> deve ser o <code>_ID</code> do evento. Você também pode realizar atualizações usando uma seleção sem ID. A seguir há um exemplo de como atualizar @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -608,7 +608,7 @@ Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> <p>Pode-se excluir um evento tanto pelo {@link android.provider.BaseColumns#_ID} como um ID anexado na URI quanto usando-se a seleção padrão. Ao usar um ID anexado, não é possÃvel fazer seleções. -Há duas versões de exclusão: como aplicativo e como adaptador de sincronização. +Há duas versões de exclusão: como aplicativo e como adaptador de sincronização. A exclusão por um aplicativo define as colunas <em>excluÃdas</em> como 1. Esse sinalizador é que diz ao adaptador de sincronização que a linha foi excluÃda e que essa exclusão deve ser propagada para o servidor. A exclusão por um adaptador de sincronização remove o evento @@ -625,7 +625,7 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Tabela de participantes</h2> @@ -634,10 +634,10 @@ Log.i(DEBUG_TAG, "Rows deleted: " + rows); representa um único participante ou convidado de um evento. Chamar {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} retorna uma lista de participantes para -o evento com o {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} dado. +o evento com o {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} dado. Esse {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} deve corresponder ao {@link -android.provider.BaseColumns#_ID} de determinado evento.</p> +android.provider.BaseColumns#_ID} de determinado evento.</p> <p>A tabela a seguir lista os campos graváveis. Ao inserir um novo participante, é necessário incluir todos eles @@ -773,7 +773,7 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <h2 id="instances">Tabela de instâncias</h2> -<p>A tabela +<p>A tabela {@link android.provider.CalendarContract.Instances} contém os horários de inÃcio e término das ocorrência de um evento. Cada linha nessa tabela representa uma única ocorrência do evento. A tabela de instâncias não é gravável e fornece @@ -782,7 +782,7 @@ somente um modo de consultar ocorrências de eventos. </p> <p>A tabela a seguir relaciona alguns dos campos passÃveis de consulta de uma instância. Observe que o fuso horário é definido por {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -e +e {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p> @@ -801,18 +801,18 @@ e </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>O dia final juliano da instância relativo ao fuso horário -do Agenda. - +do Agenda. + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>O minuto final da instância calculado a partir de meia-noite no fuso horário do Agenda.</td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ no fuso horário do Agenda.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>O dia inicial juliano da instância relativo ao fuso horário do Agenda. + <td>O dia inicial juliano da instância relativo ao fuso horário do Agenda. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>O minuto inicial da instância calculado a partir de meia-noite, relativo -ao fuso horário do Agenda. +ao fuso horário do Agenda. </td> - + </tr> </table> @@ -840,7 +840,7 @@ ao fuso horário do Agenda. na URI. Neste exemplo, {@link android.provider.CalendarContract.Instances} obtém acesso ao campo {@link android.provider.CalendarContract.EventsColumns#TITLE} por meio -da sua implementação da interface {@link android.provider.CalendarContract.EventsColumns}. +da sua implementação da interface {@link android.provider.CalendarContract.EventsColumns}. Em outras palavras, {@link android.provider.CalendarContract.EventsColumns#TITLE} é retornado por uma vista do banco de dados, não pela consulta da tabela {@link @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -923,8 +923,8 @@ while (cur.moveToNext()) { {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> Também pode-se consultar a URI com -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. -Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Uso de intenções para exibir dados de calendários</a>. +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. +Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Uso de intenções para exibir dados de calendários</a>. </td> <td>Abre a agenda no horário especificado por <code><ms_since_epoch></code>.</td> @@ -935,11 +935,11 @@ Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/t </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + Também é possÃvel consultar a URI com -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Uso de intenções para exibir dados de calendários</a>. - + </td> <td>Exibe o evento especificado por <code><event_id></code>.</td> @@ -952,12 +952,12 @@ Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/t <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + Também é possÃvel consultar a URI com -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Uso de uma intenção para editar um evento</a>. - - + + </td> <td>Edita o evento especificado por <code><event_id></code>.</td> @@ -972,11 +972,11 @@ Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/t <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - + Também é possÃvel consultar a URI com -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Uso de uma intenção para inserir um evento</a>. - + </td> <td>Cria um evento.</td> @@ -996,7 +996,7 @@ Para ver um exemplo do uso dessa intenção, consulte <a href="{@docRoot}guide/t <td>Nome do evento.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>Horário de inÃcio do evento em milissegundos a partir da época.</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>Horário de término do evento em milissegundos a partir da época.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>Um booleano que indica que um evento acontece o dia inteiro. O valor pode ser <code>true</code> ou <code>false</code>.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>Local do evento.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>Descrição do evento.</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>Se o evento é privado ou público.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>Se esse evento considera tempo ocupado na contagem ou se há tempo livre que pode ser reagendado.</td> - -</table> + +</table> <p>As seções a seguir descrevem como usar estas intenções.</p> @@ -1059,14 +1059,14 @@ permite que o aplicativo entregue a tarefa de inserção de eventos ao próprio Com essa abordagem, o aplicativo não precisará ter a permissão {@link android.Manifest.permission#WRITE_CALENDAR} contida no <a href="#manifest">arquivo de manifesto</a>.</p> - + <p>Quando usuários executam um aplicativo que usa essa abordagem, ele os direciona ao Agenda para finalizar a adição do evento. A intenção {@link android.content.Intent#ACTION_INSERT INSERT} usa campos extras para pré-preencher um formulário com os detalhes do evento na Agenda. Os usuários podem, então, cancelar o evento, editar o formulário conforme o necessário ou salvar o evento nas suas agendas.</p> - + <p>A seguir há um fragmento de código que agenda um evento em 19 de janeiro de 2012, que acontece @@ -1075,7 +1075,7 @@ das 7h30 à s 8h30. Observe o exposto a seguir sobre esse fragmento de código:</ <ul> <li>Ele especifica {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} como a URI.</li> - + <li>Ele usa os campos extras {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} e {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} para pré-preencher o formulário com o horário do evento. Os valores desses horários devem estar em milissegundos UTC da época.</li> - + <li>Ele usa o campo extra {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} para fornecer uma lista de termos separados por vÃrgula de convidados, especificados por endereço de e-mail.</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,12 +1158,12 @@ via aplicativo e via adaptador de sincronização:</p> <ul> <li>Um adaptador de sincronização precisa especificar que é um adaptador de sincronização que define {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} como <code>true</code>.</li> - - + + <li>Os adaptadores de sincronização precisam fornecer um {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} e um {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} como parâmetros da consulta na URI. </li> - + <li>Os adaptadores de sincronização têm acesso de gravação a mais colunas do que um aplicativo ou widget. Por exemplo: um aplicativo só pode modificar algumas caracterÃsticas de uma agenda, como nome, nome de exibição, configurações de visibilidade e se a agenda está @@ -1180,5 +1180,5 @@ e ao <code>ACCOUNT_TYPE</code> que especificou.</li> </ul> .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>Para obter uma implementação de exemplo de um adaptador de sincronização (não especificamente relacionada ao Agenda), consulte +<p>Para obter uma implementação de exemplo de um adaptador de sincronização (não especificamente relacionada ao Agenda), consulte <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>. diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/contacts-provider.jd index 0d42d2daed53..f3b7c58523af 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/contacts-provider.jd @@ -113,14 +113,14 @@ o Provedor de Contatos. Este guia considera que o leitor conhece os preceitos dos provedores de conteúdo do Android. Para saber mais sobre provedores de conteúdo do Android, leia o guia <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> - Preceitos do provedor de conteúdo</a>. + Preceitos do provedor de conteúdo</a>. O aplicativo <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Exemplo de adaptador de sincronização</a> é um exemplo de uso de um adaptador de sincronização que transfere dados entre o Provedor de contatos e um aplicativo de amostra hospedado pelo Google Web Services. </p> <h2 id="InformationTypes">Organização do Provedor de Contatos</h2> <p> - O Provedor de Contatos é um componente do provedor de conteúdo do Android. Ele mantém três tipos de + O Provedor de Contatos é um componente do provedor de conteúdo do Android. Ele mantém três tipos de dados sobre uma pessoa, sendo cada um deles correspondente a uma tabela fornecida pelo provedor, como ilustrado na figura 1: </p> @@ -199,7 +199,7 @@ de dados de uma pessoa, ele permite diversos contatos brutos para a mesma pessoa {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE}. </td> <td> - O formato desse nome é especÃfico deste tipo de conta. + O formato desse nome é especÃfico deste tipo de conta. Não se trata necessariamente de um endereço de e-mail. </td> </tr> @@ -239,7 +239,7 @@ de dados de uma pessoa, ele permite diversos contatos brutos para a mesma pessoa <ul> <li> O nome de um contato bruto não é armazenado em sua linha em - {@link android.provider.ContactsContract.RawContacts}. Em vez disso, é armazenado na + {@link android.provider.ContactsContract.RawContacts}. Em vez disso, é armazenado na tabela {@link android.provider.ContactsContract.Data}, em uma linha {@link android.provider.ContactsContract.CommonDataKinds.StructuredName}. Os contatos brutos têm apenas uma linha desse tipo na tabela {@link android.provider.ContactsContract.Data}. @@ -275,7 +275,7 @@ de dados de uma pessoa, ele permite diversos contatos brutos para a mesma pessoa Configurações da <em>conta</em>. </p> <p> - Suponhamos que Emily Dickinson abra uma janela do navegador, acesse o Gmail como + Suponhamos que Emily Dickinson abra uma janela do navegador, acesse o Gmail como <code>emily.dickinson@gmail.com</code>, abra Contatos e adicione "Thomas Higginson". Mais tarde, ela acessa o Gmail como <code>emilyd@gmail.com</code> e envia um e-mail para "Thomas Higginson", o que automaticamente @@ -309,7 +309,7 @@ de dados de uma pessoa, ele permite diversos contatos brutos para a mesma pessoa tipo de dados, como endereços de e-mail ou números de telefone. Por exemplo: se "Thomas Higginson" para {@code emilyd@gmail.com} (a linha do contato bruto de Thomas Higginson associada à conta Google <code>emilyd@gmail.com</code>) tem um endereço de e-mail pessoal - <code>thigg@gmail.com</code> e um de trabalho + <code>thigg@gmail.com</code> e um de trabalho <code>thomas.higginson@gmail.com</code>, o Provedor de Contatos armazena as duas linhas de endereço de e-mail e vincula ambas ao contato bruto. </p> @@ -490,7 +490,7 @@ de dados de uma pessoa, ele permite diversos contatos brutos para a mesma pessoa {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} do contato continuará apontado para a linha do contato para permitir o uso de {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} - e manter ligações com contatos "favoritos" e assim por diante. Essa coluna tem o próprio formato, que + e manter ligações com contatos "favoritos" e assim por diante. Essa coluna tem o próprio formato, que não tem nenhuma relação com o formato da coluna {@code android.provider.BaseColumns#_ID}. </p> <p> @@ -981,7 +981,7 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { {@code android.provider.BaseColumns#_ID} do contato bruto como o valor {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}. Contudo, esse valor não está disponÃvel ao criar a {@link android.content.ContentProviderOperation} - para a linha de dados porque + para a linha de dados porque {@link android.content.ContentProviderOperation} ainda não foi aplicada à linha de contato bruto. Para trabalhar com isso, a classe {@link android.content.ContentProviderOperation.Builder} tem o método {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}. @@ -1403,7 +1403,7 @@ StructuredPostal.CONTENT_URI}, RawContacts.CONTENT_TYPE}, tipo MIME para um grupo de contatos brutos. </td> <td> - Exibe a tela <strong>Adicionar contato</strong> do aplicativo de contatos do dispositivo. + Exibe a tela <strong>Adicionar contato</strong> do aplicativo de contatos do dispositivo. São exibidos os valores extras adicionados à intenção. Se enviada com {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()}, a URI de conteúdo do contato bruto recentemente adicionado é passada de volta @@ -1636,7 +1636,7 @@ startActivity(insertIntent); a disponibilidade dos dados dos contatos mesmo quando o dispositivo não está conectado à rede. </p> <p> - Embora seja possÃvel implementar a sincronização de diversos modos, o sistema Android fornece + Embora seja possÃvel implementar a sincronização de diversos modos, o sistema Android fornece uma estrutura de sincronização de extensão que automatiza as seguintes tarefas: <ul> @@ -1652,7 +1652,7 @@ startActivity(insertIntent); </ul> <p> Para usar essa estrutura, deve-se fornecer uma extensão do adaptador de sincronização. Cada adaptador de sincronização é exclusivo - de um serviço e um provedor de conteúdo, mas pode tratar diversos nomes de conta do mesmo serviço. + de um serviço e um provedor de conteúdo, mas pode tratar diversos nomes de conta do mesmo serviço. A estrutura também permite diversos adaptadores de sincronização para o mesmo serviço e provedor. </p> <h3 id="SyncClassesFiles">Classes e arquivos do adaptador de sincronização</h3> @@ -1830,7 +1830,7 @@ elemento <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.ht </p> <h3 id="StreamText">Textos de fluxos sociais</h3> <p> - Itens de fluxo sempre são associados a um contato bruto. + Itens de fluxo sempre são associados a um contato bruto. O {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID} conecta-se ao valor <code>_ID</code> do contato bruto. O tipo e o nome da conta do contato bruto também são armazenados na linha do item de fluxo. @@ -1861,17 +1861,17 @@ elemento <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.ht ao inserir um item de fluxo: <ul> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}: + {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}: o valor {@code android.provider.BaseColumns#_ID} do contato ao qual esse item de fluxo está associado. </li> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}: + {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}: o valor{@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} do contato ao qual esse item de fluxo está associado. </li> <li> - {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}: + {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}: o valor {@code android.provider.BaseColumns#_ID} do contato bruto ao qual esse item de fluxo está associado. </li> @@ -2275,14 +2275,14 @@ elemento <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.ht </dd> <dt>{@code android:icon}</dt> <dd> - + <a href="{@docRoot}guide/topics/resources/drawable-resource.html">Recurso desenhável</a> do Android que o aplicativo de contatos exibe próximo aos dados. Use isso para indicar ao usuário que os dados são advindos do seu serviço. </dd> <dt>{@code android:summaryColumn}</dt> <dd> - O nome de coluna do primeiro de dois valores recuperados da linha de dados. + O nome de coluna do primeiro de dois valores recuperados da linha de dados. O valor é exibido como a primeira linha da entrada para essa linha de dados. A primeira linha destina-se ao uso como um resumo dos dados, mas isso é opcional. Veja também <a href="#detailColumn">android:detailColumn</a>. diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-basics.jd index 5005f9208bfe..7bbca94bd937 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-basics.jd @@ -216,7 +216,7 @@ page.title=Preceitos do provedor de conteúdo Os aplicativos acessam dados a partir de um provedor de conteúdo com um objeto cliente {@link android.content.ContentResolver}. Esse objeto tem métodos que chamam métodos de nome idêntico no objeto do provedor, uma instância de uma das subclasses - concretas de {@link android.content.ContentProvider}. + concretas de {@link android.content.ContentProvider}. Os métodos {@link android.content.ContentResolver} fornecem as funções básicas do "CRUD" (criar, recuperar, atualizar e excluir) de armazenamento persistente. </p> @@ -251,7 +251,7 @@ mCursor = getContentResolver().query( </pre> <p> A tabela 2 mostra como os argumentos para - {@link android.content.ContentResolver#query + {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} correspondem a uma declaração SQL SELECT: </p> <p class="table-caption"> @@ -310,7 +310,7 @@ mCursor = getContentResolver().query( {@link android.provider.UserDictionary.Words#CONTENT_URI} contém a URI de conteúdo da tabela de "palavras" do dicionário do usuário. O objeto {@link android.content.ContentResolver} analisa a autoridade da URI e usa-na para "determinar" o provedor - comparando a autoridade a uma tabela de provedores conhecidos do sistema. + comparando a autoridade a uma tabela de provedores conhecidos do sistema. O {@link android.content.ContentResolver} pode, então, enviar os argumentos da consulta ao provedor correto. </p> @@ -344,7 +344,7 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </p> <p class="note"> <strong>Observação:</strong> as classes {@link android.net.Uri} e {@link android.net.Uri.Builder} - contêm métodos convenientes para a construção de objetos de URI bem formados a partir de strings. + contêm métodos convenientes para a construção de objetos de URI bem formados a partir de strings. As {@link android.content.ContentUris} contêm métodos conveniente para anexar valores de ID a uma URI. O fragmento anterior usa {@link android.content.ContentUris#withAppendedId withAppendedId()} para anexar um ID à URI de conteúdo UserDictionary. @@ -359,7 +359,7 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </p> <p class="note"> Por uma questão de clareza, os fragmentos de código nesta seção chamam - {@link android.content.ContentResolver#query ContentResolver.query()} no "encadeamento da IU". + {@link android.content.ContentResolver#query ContentResolver.query()} no "encadeamento da IU". No código atual, contudo, deve-se realizar consultas assincronamente em um encadeamento separado. Um modo de fazê-lo é usar a classe {@link android.content.CursorLoader}, descrita com mais detalhes no guia <a href="{@docRoot}guide/components/loaders.html"> @@ -567,7 +567,7 @@ selectionArgs[0] = mUserInput; <p> O método cliente {@link android.content.ContentResolver#query ContentResolver.query()} sempre retorna um {@link android.database.Cursor} contendo as colunas especificadas pela projeção - da consulta para as linhas que atendem aos critérios de seleção da consulta. + da consulta para as linhas que atendem aos critérios de seleção da consulta. Um objeto {@link android.database.Cursor} fornece acesso para leitura aleatório para as linhas e colunas que contém. Usando métodos {@link android.database.Cursor}, é possÃvel repetir as linhas nos resultados, determinar o tipo dos dados de cada coluna, extrair os dados de uma coluna e examinar @@ -946,7 +946,7 @@ mRowsDeleted = getContentResolver().delete( Para acessar um provedor em "modo de lote", cria-se uma matriz de objetos {@link android.content.ContentProviderOperation} e, em seguida, envia-os a um provedor de conteúdo com - {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Confere-se a + {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Confere-se a <em>autoridade</em> do provedor de conteúdo para esse método em vez de para uma URI de conteúdo especÃfica. Isso permite que cada objeto {@link android.content.ContentProviderOperation} na matriz trabalhe com uma tabela diferente. Chamar {@link android.content.ContentResolver#applyBatch @@ -954,7 +954,7 @@ mRowsDeleted = getContentResolver().delete( </p> <p> A descrição da classe de contrato {@link android.provider.ContactsContract.RawContacts} - contém um fragmento de código que demonstra a inserção em lote. + contém um fragmento de código que demonstra a inserção em lote. O aplicativo de exemplo do <a href="{@docRoot}resources/samples/ContactManager/index.html">Gerente de contato</a> contém um exemplo de acesso em lote em seu arquivo de origem <code>ContactAdder.java</code>. @@ -1089,7 +1089,7 @@ O aplicativo de exemplo do <a href="{@docRoot}resources/samples/ContactManager/i </p> <p> Por exemplo: o Provedor de Dicionário do Usuário tem uma classe de contrato - {@link android.provider.UserDictionary} que contém constantes de URI de conteúdo e de nome de coluna. + {@link android.provider.UserDictionary} que contém constantes de URI de conteúdo e de nome de coluna. A URI de conteúdo da tabela de "palavras" é definida na constante {@link android.provider.UserDictionary.Words#CONTENT_URI UserDictionary.Words.CONTENT_URI}. A classe {@link android.provider.UserDictionary.Words} também contém constantes de nome de coluna @@ -1184,7 +1184,7 @@ content://com.example.trains/Line2/5 vnd.android.cursor.<strong>item</strong>/vnd.example.line2 </pre> <p> - A maioria dos provedores define constantes de classe de contrato para os tipos MIME que usam. + A maioria dos provedores define constantes de classe de contrato para os tipos MIME que usam. A classe de contrato {@link android.provider.ContactsContract.RawContacts} do Provedor de Contatos, por exemplo, define a constante {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} para o tipo MIME diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-creating.jd index 11ad4c3b1cca..6ae7b2d6ee3d 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/content-provider-creating.jd @@ -203,7 +203,7 @@ Projeto de armazenamento de dados</a>. <ul> <li> O sistema Android contém uma API de banco de dados SQLite que os provedores do Android usam - para armazenar dados orientados a tabela. + para armazenar dados orientados a tabela. A classe {@link android.database.sqlite.SQLiteOpenHelper} ajuda a criar bancos de dados e a classe {@link android.database.sqlite.SQLiteDatabase} é a classe de base para acessar banco de dados. @@ -539,7 +539,7 @@ public class ExampleProvider extends ContentProvider { </dd> </dl> <p> - Observe que esses métodos têm a mesma assinatura dos métodos + Observe que esses métodos têm a mesma assinatura dos métodos {@link android.content.ContentResolver} de mesmo nome. </p> <p> @@ -569,7 +569,7 @@ public class ExampleProvider extends ContentProvider { </ul> <h3 id="Query">Implementação do método query()</h3> <p> - + O método {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) ContentProvider.query()} precisa retornar um objeto {@link android.database.Cursor} ou, se falhar, gerar uma {@link java.lang.Exception}. Se você estiver usando um banco de dados SQLite @@ -778,7 +778,7 @@ protected static final class MainDatabaseHelper extends SQLiteOpenHelper { Para tipos de dados comuns como texto, HTML ou JPEG, {@link android.content.ContentProvider#getType(Uri) getType()} deve retornar o tipo MIME padrão daqueles dados. Há uma lista completa desse tipos de padrão - no site de + no site de <a href="http://www.iana.org/assignments/media-types/index.htm">Tipos de mÃdia MIME IANA</a>. </p> <p> @@ -981,7 +981,7 @@ vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1 Permissão de leitura, gravação ou leitura/gravação para uma URI de conteúdo no provedor. Especifica-se cada URI que se deseja controlar com um elemento filho <code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html"> - <path-permission></a></code> + <path-permission></a></code> do elemento <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> <provider></a></code>. Para cada URI de conteúdo, pode-se especificar uma permissão de leitura/gravação, uma permissão de leitura, uma permissão de gravação ou as três. As permissões diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/content-providers.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/content-providers.jd index c9574f6b90c6..48f4cd49843d 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/content-providers.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/content-providers.jd @@ -52,12 +52,12 @@ dados e fornecem mecanismos para definir a segurança dos dados. Provedores de c padrão que conecta dados em um processo com código em execução em outro processo. </p> <p> - Quando desejar acessar dados em um provedor de conteúdo, você usa o - objeto {@link android.content.ContentResolver} no + Quando desejar acessar dados em um provedor de conteúdo, você usa o + objeto {@link android.content.ContentResolver} no {@link android.content.Context} do aplicativo para se comunicar com o provedor como cliente. O objeto {@link android.content.ContentResolver} se comunica com o objeto provedor, uma instância de uma classe que implementa {@link android.content.ContentProvider}. O objeto - provedor recebe solicitações de dados de clientes, realiza a ação solicitada e + provedor recebe solicitações de dados de clientes, realiza a ação solicitada e devolve os resultados. </p> <p> @@ -68,10 +68,10 @@ dados e fornecem mecanismos para definir a segurança dos dados. Provedores de c </p> <p> O Android propriamente dito inclui provedores de conteúdo que gerenciam dados como áudio, vÃdeo, imagens e - informações de contato pessoais. Alguns deles estão listados na documentação de - referência do + informações de contato pessoais. Alguns deles estão listados na documentação de + referência do pacote <code><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a> - </code>. Com algumas restrições, esses provedores podem ser acessados por qualquer aplicativo + </code>. Com algumas restrições, esses provedores podem ser acessados por qualquer aplicativo Android. </p><p> Os tópicos a seguir descrevem provedores de conteúdo em mais detalhes: diff --git a/docs/html-intl/intl/pt-br/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/pt-br/guide/topics/providers/document-provider.jd index 25aab7aa7a9d..b2e040ecefa5 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/providers/document-provider.jd @@ -139,7 +139,7 @@ dispositivos de armazenamento USB transitórios ou login/logout do usuário.</li cada um deles, por sua vez, podem indicar 1 a <em>N</em> documentos. </li> <li>Cada back-end de armazenamento apresenta -arquivos e diretórios individuais referenciando-os com um +arquivos e diretórios individuais referenciando-os com um {@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID} exclusivo. IDs de documentos devem ser exclusivos e não podem mudar depois de emitidos, pois são usados para concessões persistentes da URI em reinicializações do dispositivo.</li> @@ -236,7 +236,7 @@ imagens armazenadas em um provedor de documentos. </li> </ul> -<p>Esta seção descreve como programar aplicativos clientes com base nas intenções +<p>Esta seção descreve como programar aplicativos clientes com base nas intenções {@link android.content.Intent#ACTION_OPEN_DOCUMENT} e {@link android.content.Intent#ACTION_CREATE_DOCUMENT}.</p> @@ -521,7 +521,7 @@ os arquivos, o que, obviamente, não é o ideal.</p> <p>Para evitar que isso aconteça, você pode manter as permissões que o sistema forneceu ao aplicativo. Efetivamente, o aplicativo "toma" a concessão de permissão da URI persistente -que o sistema está oferecendo. Isso concede ao usuário um acesso contÃnuo aos arquivos +que o sistema está oferecendo. Isso concede ao usuário um acesso contÃnuo aos arquivos por meio do aplicativo mesmo se o dispositivo for reiniciado:</p> @@ -624,7 +624,7 @@ em dispositivos que executam o Android 4.4 ou posteriores. Se você deseja que o aplicativo seja compatÃvel com {@link android.content.Intent#ACTION_GET_CONTENT} para adaptar-se a dispositivos que executam o Android 4.3 ou versões anteriores, é necessário desativar o filtro de intenção {@link android.content.Intent#ACTION_GET_CONTENT} -no manifesto para dispositivos que executam Android 4.4 ou versões posteriores. +no manifesto para dispositivos que executam Android 4.4 ou versões posteriores. Um provedor de documentos e {@link android.content.Intent#ACTION_GET_CONTENT} devem ser avaliados de forma mutuamente exclusiva. Se houver compatibilidade com ambos simultaneamente, o aplicativo aparecerá duas vezes na IU do seletor do sistema, oferecendo dois meios de acesso diff --git a/docs/html-intl/intl/pt-br/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/pt-br/guide/topics/resources/accessing-resources.jd index f196dfeae779..de8b5df5e486 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/resources/accessing-resources.jd @@ -11,7 +11,7 @@ parent.link=index.html {@code R.drawable.myimage}</li> <li>Recursos podem ser referenciados de recursos usando uma sintaxe XML especial, como {@code @drawable/myimage}</li> - <li>Também é possÃvel acessar os recursos do aplicativo com métodos em + <li>Também é possÃvel acessar os recursos do aplicativo com métodos em {@link android.content.res.Resources}</li> </ul> @@ -43,10 +43,10 @@ parent.link=index.html <p>Depois de fornecer um recurso no aplicativo (discutido em <a href="providing-resources.html">Fornecimento de recursos</a>), é possÃvel aplicá-lo -referenciando seu ID de recurso. Todos os IDs de recursos são definidos na classe {@code R} do projeto, que +referenciando seu ID de recurso. Todos os IDs de recursos são definidos na classe {@code R} do projeto, que a ferramenta {@code aapt} gera automaticamente.</p> -<p>Quando o aplicativo é compilado, {@code aapt} gera a classe {@code R}, que contém +<p>Quando o aplicativo é compilado, {@code aapt} gera a classe {@code R}, que contém IDs de recursos para todos os recursos no diretório {@code res/}. Para cada tipo de recurso, há uma subclasse {@code R} (por exemplo, {@code R.drawable} para todos os recursos desenháveis) e, para cada recurso daquele tipo, há um número inteiro @@ -60,7 +60,7 @@ verificá-la para descobrir um ID de recurso. Ele é sempre composto de:</p> string}, {@code drawable} e {@code layout}. Para saber mais sobre os diferentes tipos, consulte <a href="available-resources.html">Tipos de recursos</a>. </li> <li>O <em>nome do recurso</em>, que é: o nome do arquivo, -excluindo a extensão; ou o valor no atributo {@code android:name} do XML, se o +excluindo a extensão; ou o valor no atributo {@code android:name} do XML, se o recurso for um valor simples (como uma string).</li> </ul> @@ -101,7 +101,7 @@ com {@link android.content.Context#getResources()}.</p> <div class="sidebox"> <h2>Acesso aos arquivos originais</h2> -<p>Apesar de ser incomum, pode ser necessário acessar os arquivos e os diretórios originais. Nesse caso, +<p>Apesar de ser incomum, pode ser necessário acessar os arquivos e os diretórios originais. Nesse caso, salvar os arquivos em {@code res/} não funcionará, pois a única forma de ler um recurso de {@code res/} é com o ID do recurso. Em vez disso, é possÃvel salvar os recursos no diretório {@code assets/}.</p> @@ -139,7 +139,7 @@ obter mais informações sobre cada tipo de recurso e como referenciá-los.</p> <h3>Casos de uso</h3> -<p>Há muitos métodos que aceitam um parâmetro de ID de recurso e você pode recuperar recursos usando +<p>Há muitos métodos que aceitam um parâmetro de ID de recurso e você pode recuperar recursos usando métodos em {@link android.content.res.Resources}. É possÃvel obter uma instância de {@link android.content.res.Resources} com {@link android.content.Context#getResources Context.getResources()}.</p> @@ -176,7 +176,7 @@ setText}(<strong>R.string.hello_message</strong>); <p class="caution"><strong>Atenção:</strong> nunca modifique o arquivo {@code -R.java} manualmente — ele é gerado pela ferramenta {@code aapt} quando o projeto é +R.java} manualmente — ele é gerado pela ferramenta {@code aapt} quando o projeto é compilado. As alterações serão sobrepostas na próxima compilação.</p> @@ -209,7 +209,7 @@ um <a href="string-resource.html">recurso de string</a> para o texto do botão:< <ul> <li>{@code <package_name>} é o nome do pacote no qual o recurso está localizado (não é obrigatório ao referenciar recursos do mesmo pacote).</li> - <li>{@code <resource_type>} é a subclasse + <li>{@code <resource_type>} é a subclasse {@code R} do tipo de recurso.</li> <li>{@code <resource_name>} é o nome do arquivo do recurso sem a extensão ou o valor do atributo {@code android:name} no elemento XML (para valores @@ -260,10 +260,10 @@ referenciar um recurso do sistema, é preciso incluir o nome do pacote. Por exem </pre> <p class="note"><strong>Observação:</strong> você deve usar recursos de string -o tempo inteiro para que o seu aplicativo possa ser localizado para outros idiomas. +o tempo inteiro para que o seu aplicativo possa ser localizado para outros idiomas. Para obter informações sobre a criação de recursos -alternativos (como strings localizadas), consulte <a href="providing-resources.html#AlternativeResources">Fornecimento de recursos -alternativos</a>. Para obter um guia completo para localizar o aplicativo para outros idiomas, +alternativos (como strings localizadas), consulte <a href="providing-resources.html#AlternativeResources">Fornecimento de recursos +alternativos</a>. Para obter um guia completo para localizar o aplicativo para outros idiomas, consulte <a href="localization.html">Localização</a>.</p> <p>Você pode até mesmo usar recursos em XML para criar alias. Por exemplo, é possÃvel criar um recurso @@ -289,14 +289,14 @@ tema atual, em vez de fornecer um valor codificado. Referenciar um atributo de e essencialmente significa "usar o estilo que é definido por esse atributo no tema atual".</p> <p>Para referenciar um atributo de estilo, a sintaxe do nome é quase idêntica ao formato normal de recurso, -mas, em vez de o sÃmbolo arroba ({@code @}), use um ponto de interrogação ({@code ?}). Além disso, +mas, em vez de o sÃmbolo arroba ({@code @}), use um ponto de interrogação ({@code ?}). Além disso, a parte do tipo de recurso é opcional. Por exemplo:</p> <pre class="classic"> ?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> </pre> -<p>Por exemplo, abaixo apresenta-se como você pode referenciar um atributo para definir a cor do texto para que corresponda à +<p>Por exemplo, abaixo apresenta-se como você pode referenciar um atributo para definir a cor do texto para que corresponda à cor "principal" do texto do tema do sistema:</p> <pre> @@ -320,7 +320,7 @@ não é preciso declarar explicitamente o tipo (que seria <h2 id="PlatformResources">Acesso aos recursos da plataforma</h2> <p>O Android contém uma série de recursos padrão, como estilos, temas e layouts. Para -acessá-los, qualifique a referência de recurso com o +acessá-los, qualifique a referência de recurso com o nome do pacote <code>android</code>. Por exemplo, o Android fornece um recurso de layout que pode ser usado para listar itens em um {@link android.widget.ListAdapter}:</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/resources/overview.jd b/docs/html-intl/intl/pt-br/guide/topics/resources/overview.jd index 5bf37e691376..b34c01b54081 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/resources/overview.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/resources/overview.jd @@ -24,8 +24,8 @@ para que você possa mantê-los independentemente. Exteriorizar os recursos também permite fornecer recursos alternativos que sejam compatÃveis com configurações de dispositivos especÃficos, como idiomas ou tamanhos de tela diferentes, que se tornam cada vez mais importantes à medida que mais dispositivos com Android são disponibilizados com configurações diferentes. Para fornecer -compatibilidade com diferentes configurações, é preciso organizar recursos no -diretório {@code res/} de seu projeto usando vários subdiretórios que agrupem recursos por tipo e +compatibilidade com diferentes configurações, é preciso organizar recursos no +diretório {@code res/} de seu projeto usando vários subdiretórios que agrupem recursos por tipo e configuração.</p> <div class="figure" style="width:429px"> diff --git a/docs/html-intl/intl/pt-br/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/pt-br/guide/topics/resources/providing-resources.jd index 1118fd536b32..b45018d2533b 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/resources/providing-resources.jd @@ -71,7 +71,7 @@ MyProject/ </pre> <p>Como pode ver neste exemplo, o diretório {@code res/} contém todos os recursos (em subdiretórios): -um recurso de imagem, dois recursos de layout, diretórios {@code mipmap/} para Ãcones de +um recurso de imagem, dois recursos de layout, diretórios {@code mipmap/} para Ãcones de inicialização e um arquivo de recurso de string. Os nomes dos diretórios de recursos são importantes e são descritos na tabela 1.</p> @@ -161,7 +161,7 @@ então é possÃvel lê-los usando apenas o {@link android.content.res.AssetMana com base no nome do arquivo XML, os arquivos no diretório {@code values/} descrevem vários recursos. Para cada arquivo neste diretório, cada filho do elemento {@code <resources>} define um único recurso. Por exemplo, um elemento {@code <string>} cria -um recurso {@code R.string} e um elemento {@code <color>} cria um recurso +um recurso {@code R.string} e um elemento {@code <color>} cria um recurso {@code R.color}.</p> <p>Como cada recurso é definido com seu próprio elemento XML, é possÃvel nomear o arquivo da forma que quiser e colocar tipos de recurso variados em um arquivo. No entanto, para esclarecer, você pode @@ -510,7 +510,7 @@ quaisquer recursos que representarem a <a href="#BestMatch">melhor correspondên e o aplicativo apresentará um erro em tempo de execução (por exemplo, se todos os recursos de layout receberem tag com o qualificador {@code xlarge}, mas o dispositivo tiver uma tela de tamanho normal).</p> <p><em>Adicionado à API de nÃvel 4.</em></p> - + <p>Consulte <a href="{@docRoot}guide/practices/screens_support.html">Compatibilidade com várias telas</a> para obter mais informações.</p> <p>Consulte também o campo de configuração {@link android.content.res.Configuration#screenLayout}, @@ -627,8 +627,8 @@ sobre como isto pode afetar o aplicativo em tempo de execução.</p> nÃvel 8</em></li> <li>{@code xxhdpi}: Telas de densidade extra-extra-alta, aproximadamente 480 dpi. <em>Adicionado à API de nÃvel 16</em></li> - <li>{@code xxxhdpi}: Usos de densidade extra-extra-extra-alta (somente Ãcone do inicializador, consulte a - <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">observação</a> + <li>{@code xxxhdpi}: Usos de densidade extra-extra-extra-alta (somente Ãcone do inicializador, consulte a + <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">observação</a> em <em>Compatibilidade com várias telas</em>), aproximadamente 640 dpi. <em>Adicionado à API de nÃvel 18</em></li> <li>{@code nodpi}: Isto pode ser usado para recursos de bitmap que você não deseja dimensionar @@ -823,7 +823,7 @@ exemplo: para letras minúsculas antes de processar para evitar problemas nos sistemas de arquivo que não diferenciam maiúsculas e minúsculas. Qualquer letra maiúscula nos nomes é apenas para o benefÃcio da leitura.</li> <li>Somente um valor para cada tipo de qualificador é suportado. Por exemplo, se quiser usar -os mesmos arquivos desenháveis para Espanha e França, <em>não</em> é possÃvel ter um diretório chamado +os mesmos arquivos desenháveis para Espanha e França, <em>não</em> é possÃvel ter um diretório chamado <code>drawable-rES-rFR/</code>. Em vez disso, você precisa de dois diretórios de recursos, como <code>drawable-rES/</code> e <code>drawable-rFR/</code>, que contenham arquivos adequados. No entanto, não é necessário duplicar os mesmos arquivos em ambos os locais. Em vez disso, @@ -1088,7 +1088,7 @@ mas o dispositivo tiver uma tela de tamanho normal).</p> do que o número de qualificadores que correspondem exatamente ao dispositivo. Por exemplo, na etapa 4 acima, a última escolha na lista inclui três qualificadores que correspondem exatamente ao dispositivo (orientação, tipo de tela sensÃvel ao toque e método de entrada), enquanto que <code>drawable-en</code> possui apenas um parâmetro que corresponde -(idioma). No entanto, o idioma tem uma precedência maior que esses outros qualificadores, então +(idioma). No entanto, o idioma tem uma precedência maior que esses outros qualificadores, então <code>drawable-port-notouch-12key</code> está fora.</p> <p>Para obter mais informações sobre como usar os recursos no aplicativo, acesse <a href="accessing-resources.html">Acesso aos recursos</a>.</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/pt-br/guide/topics/resources/runtime-changes.jd index 366ce0d2c072..416bce98e4ab 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/resources/runtime-changes.jd @@ -125,7 +125,7 @@ ele vazará todas as vistas e recursos da instância da atividade original (vaza significa que o aplicativo mantém a retenção deles, que não podem ser recolhidos, o que causa perda de memória).</p> -<p>Em seguida, use {@link android.app.FragmentManager} para adicionar o fragmento à atividade. +<p>Em seguida, use {@link android.app.FragmentManager} para adicionar o fragmento à atividade. É possÃvel obter o objeto de dados do fragmento quando a atividade reiniciar durante as alterações de configuração em tempo de execução. Por exemplo: defina a atividade da seguinte forma:</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/controls.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/controls.jd index 58a4fcdbe5a0..1cd6d52ef4d3 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ de um tipo especÃfico de controle de entrada, você pode criar os próprios <a <tr> <td><a href="controls/radiobutton.html">Botão de opção</a></td> <td>Similar à s caixas de seleção, exceto que somente uma opção pode ser selecionada no grupo.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/declaring-layout.jd index 09dbd2cee275..8782ba2e4593 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/declaring-layout.jd @@ -43,7 +43,7 @@ simples</a></li> </div> <ul> <li><strong>Declarar elementos da IU em XML</strong>. O Android fornece um vocabulário XML direto que corresponde à s classes e subclasses de View, como as de widgets e layouts.</li> -<li><strong>Instanciar elementos do layout em tempo de execução</strong>. +<li><strong>Instanciar elementos do layout em tempo de execução</strong>. O aplicativo pode criar objetos de View e ViewGroup (e manipular suas propriedades) programaticamente. </li> </ul> @@ -123,7 +123,7 @@ public void onCreate(Bundle savedInstanceState) { </pre> <p>O método de retorno de chamada <code>onCreate()</code> na Atividade é chamado pela estrutura do Android quando -ela é inicializada (veja a discussão sobre ciclos de vida no documento +ela é inicializada (veja a discussão sobre ciclos de vida no documento <a href="{@docRoot}guide/components/activities.html#Lifecycle">Atividades</a> ).</p> @@ -201,7 +201,7 @@ de layout associados a cada uma delas.</p> valores. Cada elemento filho deve definir LayoutParams apropriados para seu pai, embora possa também definir diferentes LayoutParams para os próprios filhos. </p> -<p>Todos os grupos de vistas contêm largura e altura (<code>layout_width</code> e +<p>Todos os grupos de vistas contêm largura e altura (<code>layout_width</code> e <code>layout_height</code>) e cada vista é obrigatória para defini-las. Muitos LayoutParams também contêm margens e bordas opcionais. <p> @@ -229,7 +229,7 @@ Recursos disponÃveis</a>.</p> <h2 id="Position">Posição do layout</h2> <p> A geometria de uma vista de um retângulo. As vistas têm uma localização, - expressa como um par de coordenadas <em>esquerda</em> e <em>topo</em> + expressa como um par de coordenadas <em>esquerda</em> e <em>topo</em> e duas dimensões, expressas como largura e altura. A unidade de localização e de dimensões é o pixel. </p> @@ -262,7 +262,7 @@ desnecessárias, chamados {@link android.view.View#getRight()} e {@link android. <p> O primeiro par é conhecido como <em>largura medida</em> e <em>altura medida</em>. Essas dimensões definem o tamanho que a vista terá - dentro da vista pai. + dentro da vista pai. Para obter as dimensões medidas, chamam-se {@link android.view.View#getMeasuredWidth()} e {@link android.view.View#getMeasuredHeight()}. </p> @@ -368,7 +368,7 @@ partially or totally obscuring them (unless the newer object is transparent). <h2 id="AdapterViews" style="clear:left">Criação de layouts com um adaptador</h2> <p>Quando o conteúdo do layout é dinâmico ou não predeterminado, é possÃvel usar um layout que -torne {@link android.widget.AdapterView} uma subclasse para preencher o layout com vistas em tempo de execução. +torne {@link android.widget.AdapterView} uma subclasse para preencher o layout com vistas em tempo de execução. Uma subclasse da classe {@link android.widget.AdapterView} usa um {@link android.widget.Adapter} para agrupar dados ao seu layout. O {@link android.widget.Adapter} se comporta como um intermediário entre a fonte dos dados e o layout do {@link android.widget.AdapterView} — o {@link android.widget.Adapter} @@ -399,7 +399,7 @@ a um {@link android.widget.Adapter}, o que recupera dados de uma fonte externa e android.view.View} que representa cada entrada de dados.</p> <p>O Android oferece diversas subclasses de {@link android.widget.Adapter} que são úteis para -recuperar diferentes tipos de dados e criar vistas de um {@link android.widget.AdapterView}. +recuperar diferentes tipos de dados e criar vistas de um {@link android.widget.AdapterView}. Os dois adaptadores mais comuns são:</p> <dl> @@ -438,7 +438,7 @@ getView()} para retornar o tipo de vista que deseja para cada item.</p> </dd> <dt>{@link android.widget.SimpleCursorAdapter}</dt> - <dd>Use este adaptador quando os dados vierem de um {@link android.database.Cursor}. + <dd>Use este adaptador quando os dados vierem de um {@link android.database.Cursor}. Ao usar {@link android.widget.SimpleCursorAdapter}, é necessário especificar um layout a usar para cada linha no {@link android.database.Cursor} e que colunas no {@link android.database.Cursor} devem ser inseridas em determinadas vistas do layout. Por exemplo: se você deseja criar uma lista @@ -466,7 +466,7 @@ fromColumns} na vista {@code toViews} correspondente.</p>.</dd> </dl> -<p>Se durante o curso de vida do aplicativo, você mudar os dados subjacentes lidos +<p>Se durante o curso de vida do aplicativo, você mudar os dados subjacentes lidos pelo adaptador, chame {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. Isso notificará à vista anexada que os dados foram alterados e que ela deve se atualizar.</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/dialogs.jd index 2cbedbebdebf..71e617677507 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=diálogodealerta,fragmentodediálogo <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>Veja também</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">Guia de projeto de caixas de diálogo</a></li> @@ -235,8 +235,8 @@ AlertDialog dialog = builder.create(); </pre> <p>Os métodos <code>set...Button()</code> exigem um tÃtulo para o botão (fornecido -por um <a href="{@docRoot}guide/topics/resources/string-resource.html">recurso de string</a>) e um -{@link android.content.DialogInterface.OnClickListener} que defina a ação a realizar +por um <a href="{@docRoot}guide/topics/resources/string-resource.html">recurso de string</a>) e um +{@link android.content.DialogInterface.OnClickListener} que defina a ação a realizar quando o usuário pressionar o botão.</p> <p>Há três botões de ação diferente que podem ser adicionados:</p> @@ -248,7 +248,7 @@ quando o usuário pressionar o botão.</p> <dt>Neutro</dt> <dd>É o que se deve usar quando houver a opção de o usuário não querer continuar a ação, mas não necessariamente cancelá-la. Ele aparece entre os botões positivo - e negativo. Por exemplo: a ação pode ser "Notifique-me mais tarde".</dd> + e negativo. Por exemplo: a ação pode ser "Notifique-me mais tarde".</dd> </dl> <p>É possÃvel adicionar somente um de cada tipo de botão a uma {@link @@ -271,7 +271,7 @@ Caixa de diálogo com um tÃtulo e uma lista.</p> <li>Lista de escolhas múltiplas persistentes (caixas de seleção)</li> </ul> -<p>Para criar uma lista de escolha única como a da figura 3, +<p>Para criar uma lista de escolha única como a da figura 3, use o método {@link android.app.AlertDialog.Builder#setItems setItems()}:</p> <pre style="clear:right"> @@ -291,7 +291,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Como a lista aparece na área do conteúdo da caixa de diálogo, a caixa não pode exibir uma mensagem e uma lista, e será preciso definir um tÃtulo -para ela com {@link android.app.AlertDialog.Builder#setTitle setTitle()}. +para ela com {@link android.app.AlertDialog.Builder#setTitle setTitle()}. Para especificar os itens da lista, chame {@link android.app.AlertDialog.Builder#setItems setItems()} passando uma matriz. Alternativamente, é possÃvel especificar uma lista com {@link @@ -320,8 +320,8 @@ Lista de itens de múltipla escolha.</p> <p>Para adicionar uma lista de itens de múltipla escolha (caixas de seleção) ou itens de escolha única (botões de rádio), use os métodos {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ou -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} ou +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} respectivamente.</p> <p>Por exemplo, a seguir apresenta-se como criar uma lista de múltipla escolha como @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Embora a lista tradicional e uma lista com botões de opção forneçam uma ação de "escolha única", deve-se usar {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} se você desejar manter a escolha do usuário. Ou seja, se a caixa de diálogo abrir novamente mais tarde, deve indicar qual é a escolha atual do usuário, portanto deve-se criar uma lista com botões de opção.</p> @@ -442,7 +442,7 @@ deve-se alterar a famÃlia da fonte para {@code "sans-serif"} para que os campos um estilo de fonte compatÃvel.</p> <p>Para inflar o layout no {@link android.support.v4.app.DialogFragment}, -obtenha um {@link android.view.LayoutInflater} com +obtenha um {@link android.view.LayoutInflater} com {@link android.app.Activity#getLayoutInflater()} e chame {@link android.view.LayoutInflater#inflate inflate()}, em que o primeiro parâmetro é o ID de recurso do layout e o segundo é uma vista pai do layout. @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ uma interface por meio da qual entrega os eventos de volta à atividade do host: <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ dela por meio de uma implementação da interface {@code NoticeDialogListener}:< public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ ou como uma IU de tela cheia com base no tamanho da tela:</p> public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -695,7 +695,7 @@ public void showDialog() { } </pre> -<p>Para obter mais informações sobre a realização de operações de fragmentos, consulte o guia +<p>Para obter mais informações sobre a realização de operações de fragmentos, consulte o guia <a href="{@docRoot}guide/components/fragments.html">Fragmentos</a>.</p> <p>Nesse exemplo, o booleano <code>mIsLargeLayout</code> especifica se o dispositivo atual @@ -721,7 +721,7 @@ versões de recurso bool para diferentes tamanhos de tela:</p> </resources> </pre> -<p>Assim, é possÃvel inicializar o valor {@code mIsLargeLayout} durante o método +<p>Assim, é possÃvel inicializar o valor {@code mIsLargeLayout} durante o método {@link android.app.Activity#onCreate onCreate()} da atividade:</p> <pre> @@ -776,7 +776,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} no {@link android.support.v4.app.DialogFragment}.</p> <p>Também é possÃvel <em>cancelar</em> uma caixa de diálogo. Trata-se de um evento especial que indica que o usuário -se retirou explicitamente da caixa de diálogo sem concluir a tarefa. Isso ocorre se o usuário pressionar o botão +se retirou explicitamente da caixa de diálogo sem concluir a tarefa. Isso ocorre se o usuário pressionar o botão <em>Voltar</em>, tocar na tela fora da área da caixa de diálogo ou se você chamar {@link android.app.Dialog#cancel()} explicitamente no {@link android.app.Dialog} (como em resposta a um botão "Cancelar" na caixa de diálogo).</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/menus.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/menus.jd index 833f8966b439..6bdb370740d3 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/menus.jd @@ -83,9 +83,9 @@ não têm), então você deve migrar usando a barra de ação para fornecer aces e outras opções.</p> <p>Consulte a seção <a href="#options-menu">Criação de um menu de opções</a>.</p> </dd> - + <dt><strong>Modo de ação contextual e menu de contexto</strong></dt> - + <dd>Um menu de contexto é um <a href="#FloatingContextMenu">menu flutuante</a> que aparece quando o usuário realiza um clique longo em um elemento. Ele fornece ações que afetam o conteúdo selecionado ou a estrutura do contexto. @@ -94,7 +94,7 @@ que afetam o conteúdo selecionado em uma barra no topo da tela e permite que o selecione vários itens.</p> <p>Consulte a seção <a href="#context-menu">Criação de menus contextuais</a>.</p> </dd> - + <dt><strong>Menu pop-up</strong></dt> <dd>Um menu pop-up exibe itens em uma lista vertical ancorada à vista que apresentou o menu. É bom para fornecer um estouro de ações relacionado a conteúdo especÃfico @@ -135,7 +135,7 @@ do projeto e crie o menu com os seguintes elementos:</p> <dt><code><item></code></dt> <dd>Cria um {@link android.view.MenuItem}, que representa um único item em um menu. Este elemento pode conter um elemento <code><menu></code> aninhado para criar um submenu.</dd> - + <dt><code><group></code></dt> <dd>Um recipiente invisÃvel e opcional para os elementos {@code <item>}. Ele permite que você categorize itens de menu para que eles compartilhem propriedades como estado ativo e visibilidade. Para obter mais informações, @@ -218,7 +218,7 @@ para o contexto de atividade atual, como "Buscar", "Escrever e-mail" e "Configur foi desenvolvido:</p> <ul> - <li>Caso tenha desenvolvido o aplicativo para <strong>Android 2.3.x (API de nÃvel 10) ou + <li>Caso tenha desenvolvido o aplicativo para <strong>Android 2.3.x (API de nÃvel 10) ou inferior</strong>, os conteúdos do menu de opções aparecerão na parte inferior da tela, quando o usuário pressionar o botão <em>Menu</em>, como exibido na figura 1. Quando aberto, a primeira parte visÃvel é o menu @@ -363,7 +363,7 @@ são apresentados na barra de ação. Quando um evento ocorre e você quer reali você deve chamar {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} para pedir que o sistema chame {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p> -<p class="note"><strong>Observação:</strong> +<p class="note"><strong>Observação:</strong> você nunca deve alterar os itens no menu de opções com base no {@link android.view.View} atualmente em foco. Quando estiver no modo de toque (quando o usuário não está usando cursor de bola ou um teclado), as vistas não podem ter foco, então você nunca deve usar o foco como base para modificar @@ -742,8 +742,8 @@ que exibe um menu pop-up:</p> <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -901,7 +901,7 @@ android.view.MenuItem#setChecked(boolean) setChecked()}.</p> (como {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}). É aqui que você deve definir o estado da caixa de seleção, pois a caixa de seleção ou o botão de rádio não altera o seu estado automaticamente. É possÃvel consultar o estado do item (como ele era antes -do usuário selecioná-lo) com {@link android.view.MenuItem#isChecked()} e, em seguida, definir o estado marcado com +do usuário selecioná-lo) com {@link android.view.MenuItem#isChecked()} e, em seguida, definir o estado marcado com {@link android.view.MenuItem#setChecked(boolean) setChecked()}. Por exemplo:</p> <pre> @@ -1023,9 +1023,9 @@ do filtro de intenção. Por exemplo:</p> </intent-filter> </pre> -<p>Leia mais sobre a criação de filtros de intenção no documento +<p>Leia mais sobre a criação de filtros de intenção no documento <a href="/guide/components/intents-filters.html">Intenções e filtros de intenções</a>.</p> -<p>Para obter um exemplo de aplicativo que usa esta técnica, consulte o código de exemplo do +<p>Para obter um exemplo de aplicativo que usa esta técnica, consulte o código de exemplo do <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Bloco de notas</a>.</p> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/notifiers/notifications.jd index 42563ace2248..d3fb4cfab296 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/notifiers/notifications.jd @@ -92,7 +92,7 @@ A classe {@link android.app.Notification.Builder Notification.Builder} foi adici <p>As notificações, como parte importante da interface do usuário do Android, possuem as próprias diretrizes de projeto. As alterações do Material Design introduzidas no Android 5.0 (API de nÃvel 21) são de importância especÃfica e, por isso, recomenda-se revisar o treinamento do <a href="{@docRoot}training/material/index.html">Material Design</a> - para obter mais informações. Para saber como projetar notificações e suas interações, leia o guia de projeto + para obter mais informações. Para saber como projetar notificações e suas interações, leia o guia de projeto <a href="{@docRoot}design/patterns/notifications.html">Notificações</a>.</p> <h2 id="CreateNotification">Criação de uma notificação</h2> @@ -451,14 +451,14 @@ todas as notificações emitidas anteriormente. Adicione compatibilidade com Android 4.0.3 e mais antigos. Para fazer isto, especifique o pai da {@link android.app.Activity} que está iniciando adicionando um elemento <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code> - como o filho de + como o filho de <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>. <p> - Para este elemento, defina + Para este elemento, defina <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>. Defina <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#val">android:value</a>="<parent_activity_name>"</code>, - onde <code><parent_activity_name></code> é o valor de + onde <code><parent_activity_name></code> é o valor de <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code> para o elemento <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/overview.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/overview.jd index d12bfe5fac8b..d82ecf7aa8fa 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/overview.jd @@ -4,12 +4,12 @@ page.title=Visão geral da IU <p>Todos os elementos da interface do usuário em um aplicativo para Android são criados usando objetos {@link android.view.View} e {@link android.view.ViewGroup}. Uma {@link android.view.View} é um objeto que desenha -algo na tela com o qual o usuário pode interagir. Um {@link android.view.ViewGroup} é um +algo na tela com o qual o usuário pode interagir. Um {@link android.view.ViewGroup} é um objeto que contém outros objetos {@link android.view.View} (e {@link android.view.ViewGroup}) para definir o layout da interface.</p> <p>O Android fornece uma coleção de subclasses {@link android.view.View} e {@link -android.view.ViewGroup} que oferecem controles de entrada comuns (como botões e campos de +android.view.ViewGroup} que oferecem controles de entrada comuns (como botões e campos de texto) e vários modelos de layout (como um layout linear ou relativo).</p> @@ -30,7 +30,7 @@ de uma IU.</p> criar uma árvore. Mas a forma mais fácil e efetiva de definir o layout é com um arquivo XML. O XML oferece uma estrutura legÃvel por humanos para o layout, similar a HTML.</p> -<p>O nome de um elemento XML para uma vista é respectivo à classe do Android que ele representa. Portanto, um elemento +<p>O nome de um elemento XML para uma vista é respectivo à classe do Android que ele representa. Portanto, um elemento <code><TextView></code> cria um widget {@link android.widget.TextView} na IU e um elemento <code><LinearLayout></code> cria um grupo de vistas de {@link android.widget.LinearLayout} . </p> @@ -39,7 +39,7 @@ e um elemento <code><LinearLayout></code> cria um grupo de vistas de {@lin <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ layout.</p> <p>Para obter um guia completo para criar um layout de IU, consulte <a href="declaring-layout.html">Layouts XML</a>. - + <h2 id="UIComponents">Componentes da interface do usuário</h2> <p>Você não precisa criar toda a IU usando objetos {@link android.view.View} e {@link diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/settings.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/settings.jd index f95966c37578..c00b461499d4 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/settings.jd @@ -82,7 +82,7 @@ como programar as configurações do aplicativo por meio de APIs {@link android. <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> <p class="img-caption"><strong>Figura 1.</strong> Capturas de tela das configurações do aplicativo Mensagens -do Android. A seleção de um item definido por uma {@link android.preference.Preference} +do Android. A seleção de um item definido por uma {@link android.preference.Preference} abre uma interface para alterar a configuração.</p> @@ -120,8 +120,8 @@ um dos seguintes tipos de dados:</p> </ul> <p>Como a IU de configurações do aplicativo é criada com objetos {@link android.preference.Preference} - em vez de objetos -{@link android.view.View}, é preciso usar uma subclasse {@link android.app.Activity} ou + em vez de objetos +{@link android.view.View}, é preciso usar uma subclasse {@link android.app.Activity} ou {@link android.app.Fragment} especializada para exibir as configurações de lista:</p> <ul> @@ -226,8 +226,8 @@ android.preference.ListPreference}. Os dois itens contêm estes três atributos: <dt>{@code android:key}</dt> <dd>Esse atributo é necessário para preferências que persistem a um valor de dados. Ele especifica a chave exclusiva (uma string) que o sistema usa ao salvar o valor dessa configuração em {@link -android.content.SharedPreferences}. - <p>As únicas instâncias em que esse atributo é <em>dispensável</em> ocorrem quando a preferência é um +android.content.SharedPreferences}. + <p>As únicas instâncias em que esse atributo é <em>dispensável</em> ocorrem quando a preferência é um {@link android.preference.PreferenceCategory} ou {@link android.preference.PreferenceScreen}, ou quando a preferência especifica um {@link android.content.Intent} para invocar (com um elemento <a href="#Intents">{@code <intent>}</a>) ou um {@link android.app.Fragment} para exibir (com um atributo <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code android:fragment}</a>).</p> @@ -285,7 +285,7 @@ android.preference.PreferenceCategory}.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -311,7 +311,7 @@ android.preference.PreferenceCategory}.</p> <h4 id="Subscreens">Uso de subtelas</h4> -<p>Para usar grupos de configurações em uma subtela (como ilustrado na figura 3), coloque o grupo +<p>Para usar grupos de configurações em uma subtela (como ilustrado na figura 3), coloque o grupo de objetos {@link android.preference.Preference} dentro de {@link android.preference.PreferenceScreen}.</p> @@ -588,11 +588,11 @@ dentro de um elemento raiz {@code <preference-headers>}. Por exemplo:</p> <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -636,7 +636,7 @@ public static class SettingsFragment extends PreferenceFragment { <h3 id="DisplayHeaders">Exibição de cabeçalhos</h3> <p>Para exibir os cabeçalhos de preferência, é preciso implementar o método de retorno de chamada {@link -android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} e chamar +android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} e chamar {@link android.preference.PreferenceActivity#loadHeadersFromResource loadHeadersFromResource()}. Por exemplo:</p> @@ -672,15 +672,15 @@ ao {@link android.preference.PreferenceActivity} que especifica que arquivo XML carregar.</p> <p>Por exemplo, abaixo há um arquivo XML de cabeçalhos de preferência usado no Android 3.0 -e posterior ({@code res/xml/preference_headers.xml}):</p> +e posterior ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ mais antigas que a 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -975,11 +975,11 @@ da caixa de diálogo positiva e negativa:</p> public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/ui-events.jd index e0ace1d4b3ca..2f88248b3eb2 100644 --- a/docs/html-intl/intl/pt-br/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/pt-br/guide/topics/ui/ui-events.jd @@ -30,7 +30,7 @@ uma coleção de interfaces aninhadas com retornos de chamada que podem ser defi chamadas de <a href="#EventListeners">escutas de evento</a>, são a sua passagem para capturar a interação do usuário com a IU.</p> <p>Geralmente, as escutas de evento são usadas para escutar a interação do usuário. -No entanto, há casos em que você pode querer estender uma classe View para criar um componente personalizado. +No entanto, há casos em que você pode querer estender uma classe View para criar um componente personalizado. Talvez você queira estender a classe {@link android.widget.Button} para deixar algo mais extravagante. Neste caso, você poderá definir os comportamentos de evento padrão para a classe usando <a href="#EventHandlers">manipuladores de evento</a>.</p> @@ -46,27 +46,27 @@ estiver registrada for ativada pela interação do usuário com o item na IU.</p <dl> <dt><code>onClick()</code></dt> - <dd>De {@link android.view.View.OnClickListener}. + <dd>De {@link android.view.View.OnClickListener}. Isto é chamado quando o usuário toca no item (no modo de toque), ou atribui foco ao item com as teclas de navegação ou cursor de bola e pressiona a tecla "enter" adequada ou pressiona o cursor de bola.</dd> <dt><code>onLongClick()</code></dt> - <dd>De {@link android.view.View.OnLongClickListener}. + <dd>De {@link android.view.View.OnLongClickListener}. Isto é chamado quando o usuário toca e mantém o item pressionado (no modo de toque), ou atribui foco ao item com as teclas de navegação ou cursor de bola e mantém pressionada a tecla "enter" adequada ou o cursor de bola (por um segundo).</dd> <dt><code>onFocusChange()</code></dt> - <dd>De {@link android.view.View.OnFocusChangeListener}. + <dd>De {@link android.view.View.OnFocusChangeListener}. Isto é chamado quando o usuário navega no ou do item, usando as teclas de navegação ou cursor de bola.</dd> <dt><code>onKey()</code></dt> - <dd>De {@link android.view.View.OnKeyListener}. + <dd>De {@link android.view.View.OnKeyListener}. Isto é chamado quando o usuário está com foco no item ou solta uma tecla de hardware no dispositivo.</dd> <dt><code>onTouch()</code></dt> - <dd>De {@link android.view.View.OnTouchListener}. + <dd>De {@link android.view.View.OnTouchListener}. Isto é chamado quando o usuário realiza uma ação qualificada como um toque de evento, incluindo o pressionamento, a liberação, ou qualquer outro gesto de movimento na tela (dentro dos limites do item).</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>De {@link android.view.View.OnCreateContextMenuListener}. + <dd>De {@link android.view.View.OnCreateContextMenuListener}. Isto é chamado quando um menu de contexto está sendo construÃdo (como resultado de um "clique longo"). Consulte a discussão sobre menus de contexto no guia do desenvolvedor <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menus</a> .</dd> @@ -75,8 +75,8 @@ estiver registrada for ativada pela interação do usuário com o item na IU.</p <p>Esses métodos são os únicos habitantes de suas respectivas interfaces. Para definir um desses métodos e lidar com seus eventos, implemente a interface aninhada na atividade ou defina-a como uma classe anônima. Em seguida, passe uma instância da implementação -para o respectivo método <code>View.set...Listener()</code>. (Ex.:, chame -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> +para o respectivo método <code>View.set...Listener()</code>. (Ex.:, chame +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> e passe-o à implementação de {@link android.view.View.OnClickListener OnClickListener}.)</p> <p>O exemplo abaixo mostra como registrar uma escuta de clique para um botão. </p> @@ -121,17 +121,17 @@ public class ExampleActivity extends Activity implements OnClickListener { não tem valor de retorno, mas outros métodos de escuta de evento podem retornar um booleano. O motivo depende do evento. Para os poucos que retornam, apresenta-se a razão:</p> <ul> - <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - - Isto retorna um booleano para indicar se você consumiu o evento e se ele deve ser levado adiante. - Ou seja, ele retorna <em>verdadeiro</em> para indicar que você lidou com o evento e não deve seguir adiante; + <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - + Isto retorna um booleano para indicar se você consumiu o evento e se ele deve ser levado adiante. + Ou seja, ele retorna <em>verdadeiro</em> para indicar que você lidou com o evento e não deve seguir adiante; ou retorna <em>falso</em> caso você não tenha lidado com ele e/ou o evento deva continuar para qualquer outra escuta de clique.</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> - Isto retorna um booleano para indicar se você consumiu o evento e se ele deve ser levado adiante. - Ou seja, ele retorna <em>verdadeiro</em> para indicar que você lidou com o evento e não deve seguir adiante; + Ou seja, ele retorna <em>verdadeiro</em> para indicar que você lidou com o evento e não deve seguir adiante; ou retorna <em>falso</em> caso você não tenha lidado com ele e/ou o evento deva continuar para qualquer outra escuta de tecla.</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> - Isto retorna um booleano para indicar se a escuta consome este evento. O importante é que este evento pode possuir várias ações que se seguem mutuamente. Portanto, se retornar <em>falso</em> quando o evento de ação inferior for recebido, você indicará que não consumiu o evento e que não está @@ -181,14 +181,14 @@ mas podem ter impacto direto na maneira de lidar com os eventos. Portanto, ao ge dentro de um layout, considere esses outros métodos:</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> - Isto permite que {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> - Isto permite que {@link android.app.Activity} intercepte todos os evento de toque antes de serem enviados à janela.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Isto permite que {@link android.view.ViewGroup} assista aos eventos à medida que são enviados para as vistas filho.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Chame isto - sobre uma Vista pai para indicar que ela não deve interceptar eventos de toque com <code>{@link + sobre uma Vista pai para indicar que ela não deve interceptar eventos de toque com <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li> </ul> @@ -199,7 +199,7 @@ Quando um usuário está navegando em uma interface do usuário com teclas direc ver o que aceitará entrada. Se o dispositivo tiver capacidades de toque, no entanto, e o usuário começar a interagir com a interface por meio de toque, então não é mais necessário destacar itens ou fornecer foco para uma vista especÃfica. Contudo, há um modo -de interação chamado "modo de toque". +de interação chamado "modo de toque". </p> <p> Para dispositivos com capacidades de toque, quando o usuário toca na tela, o dispositivo @@ -214,7 +214,7 @@ sairá do modo de toque e encontrará uma vista para atribuir foco. Agora, o usu com a interface do usuário sem tocar na tela. </p> <p> -O estado de modo de toque é mantido em todo o sistema (todas as janelas e atividades). +O estado de modo de toque é mantido em todo o sistema (todas as janelas e atividades). Para consultar o estado atual, é possÃvel chamar {@link android.view.View#isInTouchMode} para ver se o dispositivo está no modo de toque no momento. </p> @@ -282,7 +282,7 @@ como discutido na seção <a href="#EventListeners">Escutas de evento</a> acima. the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd index c16d84701d11..d638e71fc53c 100644 --- a/docs/html-intl/intl/pt-br/preview/api-overview.jd +++ b/docs/html-intl/intl/pt-br/preview/api-overview.jd @@ -48,7 +48,7 @@ page.image=images/cards/card-n-apis_2x.png -<p>O Android N ainda está em desenvolvimento ativo, mas agora você já pode testá-lo +<p>O Android N ainda está em desenvolvimento ativo, mas agora você já pode testá-lo como parte do N Developer Preview. As seções a seguir destacam alguns dos novos recursos para desenvolvedores. </p> @@ -62,7 +62,7 @@ novos recursos para desenvolvedores. </p> <h2 id="multi-window_support">Suporte a várias janelas</h2> -<p>No Android N, introduzimos um recurso de multitarefa novo e muito solicitado +<p>No Android N, introduzimos um recurso de multitarefa novo e muito solicitado na plataforma — o suporte a várias janelas. </p> <p>Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo. </p> @@ -85,9 +85,9 @@ interage com outros aplicativos.</li> </div> -<p>O suporte a várias janelas oferece novas formas de envolver os usuários, -particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar -no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima +<p>O suporte a várias janelas oferece novas formas de envolver os usuários, +particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar +no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima maneira de aprimorar a experiência do usuário. </p> <p>É muito fácil adicionar suporte a várias janelas a seu aplicativo e configurar como ele @@ -103,7 +103,7 @@ deste tamanho. Você também pode desativar a exibição de várias janelas para <h2 id="notification_enhancements">Aprimoramentos de notificações</h2> -<p>Reformulamos as notificações no Android N para facilitar e agilizar o +<p>Reformulamos as notificações no Android N para facilitar e agilizar o uso. Entre as alterações estão:</p> <ul> @@ -158,7 +158,7 @@ e a visualização de conteúdo. <strong>Figura 2.</strong> Notificações empacotadas e resposta direta. </p> -<p>Para saber como implementar os novos recursos, consulte o +<p>Para saber como implementar os novos recursos, consulte o guia <a href="{@docRoot}preview/features/notification-updates.html">Notificações</a> .</p> @@ -166,42 +166,42 @@ guia <a href="{@docRoot}preview/features/notification-updates.html">Notificaçõ <h2 id="jit_aot">Compilação JIT/AOT orientada a perfil</h2> -<p>No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para -ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a +<p>No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para +ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT) do ART e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar atualizações de aplicativos e de sistema.</p> -<p>A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo -de acordo com o uso real e com as condições no dispositivo. Por -exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar +<p>A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo +de acordo com o uso real e com as condições no dispositivo. Por +exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo não são compiladas até que sejam realmente utilizadas.</p> -<p>Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação -ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários +<p>Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação +ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários associados. Esse recurso é particularmente importante em dispositivos com pouca memória.</p> -<p>O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a -bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e +<p>O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a +bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.</p> <h2 id="quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</h2> -<p>Um dos benefÃcios mais tangÃveis do compilador JIT do ART é a velocidade de instalação dos -aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam vários minutos para -otimização e instalação no Android 6.0, podem agora ser instalados em +<p>Um dos benefÃcios mais tangÃveis do compilador JIT do ART é a velocidade de instalação dos +aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam vários minutos para +otimização e instalação no Android 6.0, podem agora ser instalados em segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização. </p> <h2 id="doze_on_the_go">Modo soneca em movimento...</h2> -<p>O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando -atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como +<p>O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando +atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como quando está em uma mesa ou gaveta. </p> -<p>Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento. -Sempre que a tela ficar desativada por um perÃodo e o dispositivo ficar desativado, -o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos. +<p>Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento. +Sempre que a tela ficar desativada por um perÃodo e o dispositivo ficar desativado, +o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos. Isso significa que os usuários podem economizar bateria transportando os dispositivos no bolso.</p> @@ -213,36 +213,36 @@ bolso.</p> </p> -<p>Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca -restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de -manutenção, os aplicativos podem acessar a rede e todos os +<p>Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca +restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de +manutenção, os aplicativos podem acessar a rede e todos os trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo encerra o modo soneca.</p> -<p>Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um +<p>Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um perÃodo, o modo soneca aplicará as restrições completas de CPU e rede em {@link -android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e +android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e verificações de GPS/Wi-Fi.</p> -<p>As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para -dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para +<p>As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para +dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para processar o modo soneca corretamente, está pronto. Caso contrário, comece a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptar o aplicativo para o modo soneca</a> agora.</p> <h2 id="background_optimizations">Project Svelte: Otimizações em segundo plano</h2> -<p>O Project Svelte é um esforço contÃnuo para minimizar o uso de RAM pelo sistema e pelos aplicativos -nos dispositivos Android existentes no ecossistema. No Android N, o Project +<p>O Project Svelte é um esforço contÃnuo para minimizar o uso de RAM pelo sistema e pelos aplicativos +nos dispositivos Android existentes no ecossistema. No Android N, o Project Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano. </p> -<p>O processamento em segundo plano é parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência -do usuário pode ficar incrÃvel — imediata, rápida e sensÃvel ao contexto. -Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e +<p>O processamento em segundo plano é parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência +do usuário pode ficar incrÃvel — imediata, rápida e sensÃvel ao contexto. +Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e bateria) e afetar o desempenho do sistema para os outros aplicativos. </p> -<p>Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma -preferencial para execução de trabalho em segundo plano de uma maneira que beneficia -os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em +<p>Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma +preferencial para execução de trabalho em segundo plano de uma maneira que beneficia +os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em condições de memória, energia e conectividade. O JobScheduler oferece controle e simplicidade, e queremos que seja usado por todos os aplicativos. </p> @@ -253,23 +253,23 @@ simplicidade, e queremos que seja usado por todos os aplicativos. </p> Android. </p> -<p>Continuamos a expandir o <code>JobScheduler</code> e o -<code>GCMNetworkManager</code> para atender a mais -casos de uso — por exemplo, no Android N, você já pode agendar trabalhos -em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a -substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema, +<p>Continuamos a expandir o <code>JobScheduler</code> e o +<code>GCMNetworkManager</code> para atender a mais +casos de uso — por exemplo, no Android N, você já pode agendar trabalhos +em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a +substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema, particularmente em dispositivos com pouca memória.</p> <p>No Android N, estamos removendo três transmissões implÃcitas de uso comum — {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link android.hardware.Camera#ACTION_NEW_PICTURE} e {@link - android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente -processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se + android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente +processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para migrar para o <code>JobScheduler</code> e as APIs relacionadas. </p> <p> - Consulte a documentação de <a href="{@docRoot}preview/features/background-optimization.html">Otimizações + Consulte a documentação de <a href="{@docRoot}preview/features/background-optimization.html">Otimizações em segundo plano</a> para obter mais detalhes. </p> @@ -284,27 +284,27 @@ em segundo plano</a> para obter mais detalhes. </p> </div> -<p>Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel -excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular +<p>Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel +excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular são um recurso caro que querem economizar. </p> -<p>O Android N introduz o modo de Economia de dados, um novo serviço do sistema que ajuda a reduzir -o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança -ou em pacotes de dados pré-pagos pequenos. A Economia de dados permite que os usuários controlem o -uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo de Economia +<p>O Android N introduz o modo de Economia de dados, um novo serviço do sistema que ajuda a reduzir +o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança +ou em pacotes de dados pré-pagos pequenos. A Economia de dados permite que os usuários controlem o +uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo de Economia de dados estiver ativado. </p> -<p>Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está -em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos -para reduzir o uso de dados no primeiro plano sempre que possÃvel — como, por exemplo, limitar a -taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache +<p>Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está +em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos +para reduzir o uso de dados no primeiro plano sempre que possÃvel — como, por exemplo, limitar a +taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache e assim por diante. Os usuários podem autorizar aplicativos especÃficos a usar dados tarifados em segundo plano, mesmo com a Economia de dados ativada.</p> -<p>O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma -forma de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar as -preferências do usuário para a Economia de dados</a> e <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitorar -as mudanças de preferências</a>. Todos os aplicativos devem verificar se o usuário ativou a Economia +<p>O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma +forma de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar as +preferências do usuário para a Economia de dados</a> e <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitorar +as mudanças de preferências</a>. Todos os aplicativos devem verificar se o usuário ativou a Economia de dados e tentar limitar o uso de dados em primeiro e segundo plano.</p> @@ -364,16 +364,16 @@ de dados e tentar limitar o uso de dados em primeiro e segundo plano.</p> </p> - </div><p>As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações -diretamente na aba de notificações. No Android N, ampliamos o escopo das + </div><p>As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações +diretamente na aba de notificações. No Android N, ampliamos o escopo das Configurações rápidas para aumentar ainda mais a utilidade e a conveniência. </p> -<p>Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem -acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso, -permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local +<p>Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem +acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso, +permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e soltam os blocos. </p> -<p>Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios +<p>Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.</p> <p> @@ -396,25 +396,25 @@ blocos de Configurações rápidas para que os usuários possam acessar facilmen <h2 id="number-blocking">Bloqueio de número</h2> -<p>O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma +<p>O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O - aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar + aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar a lista de números bloqueados. A lista não está acessÃvel para outros aplicativos.</p> -<p>Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece -uma forma consistente de bloqueio de números em uma grande variedade de +<p>Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece +uma forma consistente de bloqueio de números em uma grande variedade de dispositivos. Alguns benefÃcios que podem ser aproveitados pelos aplicativos são:</p> <ul> <li> Números bloqueados para chamadas também são bloqueados para mensagens de texto - <li> Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do + <li> Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do recurso Backup e restauração <li> Vários aplicativos podem usar a mesma lista de números bloqueados </ul> -<p>Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem -ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor -para o usuário, impedindo que chamadas e textos indesejados cheguem a ele +<p>Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem +ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor +para o usuário, impedindo que chamadas e textos indesejados cheguem a ele por qualquer meio, como terminais de VOIP ou encaminhamento de telefones.</p> <p> @@ -449,23 +449,23 @@ da API</a>, disponÃvel para download. <p>O Android N agora permite que os usuários selecionem <strong>diversas localidades</strong> em Settings -para oferecer melhor suporte a casos de uso bilÃngue. Os aplicativos podem usar -uma API nova para obter as localidades selecionadas pelo usuário e oferecer -experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em -diversos idiomas e não oferecer a tradução de páginas da web que usam +para oferecer melhor suporte a casos de uso bilÃngue. Os aplicativos podem usar +uma API nova para obter as localidades selecionadas pelo usuário e oferecer +experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em +diversos idiomas e não oferecer a tradução de páginas da web que usam um idioma conhecido pelo usuário.</p> -<p>Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas -disponÃveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas +<p>Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas +disponÃveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas mais comuns, como inglês, espanhol, francês e árabe. Além disso, adiciona suporte parcial a mais de 100 novos idiomas.</p> <p>Os aplicativos podem obter a lista de localidades definida pelo usuário chamando <code>LocaleList.GetDefault()</code>. Para oferecer suporte ao maior número de localidades, o Android N está -alterando a forma como resolve recursos. Não deixe de testar e verificar se seus aplicativos +alterando a forma como resolve recursos. Não deixe de testar e verificar se seus aplicativos funcionam da forma esperada com a nova lógica de resolução de recursos.</p> -<p>Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve +<p>Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve seguir, consulte <a href="{@docRoot}preview/features/multilingual-support.html">Suporte a vários idiomas</a>.</p> @@ -481,7 +481,7 @@ seguir, consulte <a href="{@docRoot}preview/features/multilingual-support.html"> <ul> <li> <strong>Verifique se o dispositivo contém um emoticon antes de inseri-lo.</strong> - Para conferir quais emoticons estão presentes + Para conferir quais emoticons estão presentes na fonte do sistema, use o método {@link android.graphics.Paint#hasGlyph(String)}. </li> <li> @@ -539,19 +539,19 @@ Pacote de extensão Android</a></a> (AEP), exceto <code>EXT_texture_sRGB_decode< </ul> <p>A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe -<code>GLES32</code>. Ao usar o OpenGL ES 3.2, não deixe de declarar o -requisito no arquivo manifesto usando o rótulo <code><uses-feature></code> e o +<code>GLES32</code>. Ao usar o OpenGL ES 3.2, não deixe de declarar o +requisito no arquivo manifesto usando o rótulo <code><uses-feature></code> e o atributo <code>android:glEsVersion</code>. </p> -<p>Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do +<p>Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do OpenGL ES compatÃvel do dispositivo no tempo de execução, consulte o <a href="{@docRoot}guide/topics/graphics/opengl.html">guia da OpenGL ES API</a>.</p> <h2 id="android_tv_recording">Gravação do Android TV</h2> -<p>O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada -do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting, -os serviços de entrada de TV podem controlar quais dados de canal são gravados e como +<p>O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada +do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting, +os serviços de entrada de TV podem controlar quais dados de canal são gravados e como as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado. </p> <p>Para obter mais informações, consulte <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p> @@ -589,8 +589,8 @@ para desbloquear o perfil) usando<code>setPasswordQuality()</code>, </p> <h3 id="turn_off_work">Desativar o trabalho </h3> -<p>Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está -desativado, o usuário gerenciado é encerrado temporariamente, o que desativa +<p>Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está +desativado, o usuário gerenciado é encerrado temporariamente, o que desativa os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho. Isso inclui o aplicativo do dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um Ãcone de status persistente para lembrar ao usuário que não é possÃvel iniciar aplicativos de trabalho. A tela de inÃcio @@ -598,7 +598,7 @@ indica que os aplicativos e widgets de trabalho não podem ser acessados. </p> <h3 id="always_on_vpn">Always on VPN </h3> -<p>Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre +<p>Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a inicialização do dispositivo.</p> @@ -608,7 +608,7 @@ por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a <code>getAlwaysOnVpnPackage()</code>. </p> -<p>Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com +<p>Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção correspondente à ação <code>android.net.VpnService</code>. </p> @@ -631,17 +631,17 @@ aplicativos, os clientes de VPN precisam processar novos pontos de entrada para <h2 id="accessibility_enhancements">Aprimoramentos na acessibilidade</h2> -<p>O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação +<p>O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho da fonte, tamanho da tela e TalkBack. </p> -<p>Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários +<p>Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos com essas configurações ativadas. Você pode ativá-las em Settings > Accessibility.</p> -<p>Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências +<p>Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências motoras a tocar na tela. A nova API permite criar serviços com recursos como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para atender à s necessidades desses usuários.</p> @@ -652,22 +652,22 @@ como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre <h2 id="direct_boot">Inicialização direta</h2> -<p>A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos -registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada. -Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário, -alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando +<p>A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos +registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada. +Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário, +alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser disponibilizados imediatamente após um reinÃcio.</p> -<p>A inicialização direita aproveita a criptografia baseada em arquivo do Android N -para ativar polÃticas de criptografia detalhadas para dados de sistema e aplicativos. -O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados +<p>A inicialização direita aproveita a criptografia baseada em arquivo do Android N +para ativar polÃticas de criptografia detalhadas para dados de sistema e aplicativos. +O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos. </p> -<p>Na inicialização, o sistema inicia em um modo restrito que permite -acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados. -Se você deseja executar componentes nesse modo, pode registrá-los +<p>Na inicialização, o sistema inicia em um modo restrito que permite +acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados. +Se você deseja executar componentes nesse modo, pode registrá-los definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa componentes registrados transmitindo a intenção <code>LOCKED_BOOT_COMPLETED</code> . O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados @@ -680,26 +680,26 @@ Para obter mais informações, consulte <a href="{@docRoot}preview/features/dire <h2 id="key_attestation">Confirmação de chaves</h2> -<p>Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar +<p>Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o kernel do Linux, possÃveis vulnerabilidades do Android e extração em dispositivos com acesso root.</p> -<p>Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança, +<p>Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança, o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação de chaves para determinar com precisão se um par de chaves RSA ou EC está protegido por hardware, quais as propriedades do par de chaves e quais as restrições aplicadas ao uso e à validação. </p> -<p>Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves -por meio de um certificado de confirmação X.509, que deve estar assinado por uma -chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA, -injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica. -Portanto, um certificado de confirmação assinado com uma chave de confirmação -válida confirma a existência de um armazenamento de chaves protegido por hardware, além de +<p>Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves +por meio de um certificado de confirmação X.509, que deve estar assinado por uma +chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA, +injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica. +Portanto, um certificado de confirmação assinado com uma chave de confirmação +válida confirma a existência de um armazenamento de chaves protegido por hardware, além de detalhes dos pares de chaves desse armazenamento de chaves.</p> -<p>Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica +<p>Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica e segura, a confirmação de chaves exige que o <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> do dispositivo forneça as seguintes informações ao <a class="external-link" href="https://source.android.com/security/trusty/index.html">Ambiente de execução confiável (TEE)</a>:</p> @@ -709,7 +709,7 @@ e segura, a confirmação de chaves exige que o <a class="external-link" href="h <li>A chave pública <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> e seu status de bloqueio</li> </ul> -<p>Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware, +<p>Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware, consulte o guia <a href="https://source.android.com/security/keystore/" class="external-link">Armazenamento de chaves protegido por hardware</a>.</p> <p>Além da confirmação de chaves, o Android N também introduziu @@ -717,9 +717,9 @@ consulte o guia <a href="https://source.android.com/security/keystore/" class="e <h2 id="network_security_config">Configuração de segurança de rede</h2> -<p>No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS) -de forma segura, sem modificação no código, usando a -<em>Configuração de segurança de rede</em> declarativa em vez das +<p>No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS) +de forma segura, sem modificação no código, usando a +<em>Configuração de segurança de rede</em> declarativa em vez das APIs programáticas propensas a erro (por exemplo, X509TrustManager).</p> <p>Recursos compatÃveis:</p> @@ -728,25 +728,25 @@ APIs programáticas propensas a erro (por exemplo, X509TrustManager).</p> autoridades de certificado (CA) são confiáveis para as conexões seguras. Por exemplo, confiar em certificados autoassinados privados ou um restrito conjunto de CAs públicas. </li> -<li><b>Substituições apenas em depuração.</b> Permite que um desenvolvedor de aplicativos depure -conexões seguras do aplicativo com segurança, sem adicionar riscos à base +<li><b>Substituições apenas em depuração.</b> Permite que um desenvolvedor de aplicativos depure +conexões seguras do aplicativo com segurança, sem adicionar riscos à base instalada. </li> -<li><b>Cancelamento do uso de tráfego de texto simples.</b> Permite que um aplicativo seja protegido contra +<li><b>Cancelamento do uso de tráfego de texto simples.</b> Permite que um aplicativo seja protegido contra o uso acidental de tráfego de texto simples.</li> <li><b>Fixação de certificados.</b> Um recurso avançado que permite que os aplicativos limitem quais chaves de servidor são confiáveis para conexões seguras.</li> </ul> -<p>Para obter mais configurações, consulte <a href="{@docRoot}preview/features/security-config.html">Configuração de segurança +<p>Para obter mais configurações, consulte <a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a>.</p> <h2 id="default_trusted_ca">Autoridade de certificado confiável padrão</h2> -<p>Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema -e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android -N que querem confiar em CAs adicionadas pelo usuário devem usar a -<a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a> para +<p>Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema +e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android +N que querem confiar em CAs adicionadas pelo usuário devem usar a +<a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a> para especificar como confiar nas CAs de usuário.</p> <h2 id="apk_signature_v2">Esquema de assinatura de APK v2</h2> @@ -804,18 +804,18 @@ o arquivo de programação para assinar aplicativos</a> usando o plug-in do Andr <p>No Android N, os aplicativos podem usar novas APIs para solicitar acesso a determinados diretórios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">armazenamento externo</a>, incluindo diretórios em mÃdias removÃveis, tais como cartões SD. As novas APIs simplificam consideravelmente como o aplicativo acessa os -diretórios de armazenamento externo padrão, tais como o diretório<code>Pictures</code>. Os aplicativos, -como aplicativos de fotografia, podem usar essas APIs em vez de -<code>READ_EXTERNAL_STORAGE</code>, que concede acesso a todos os diretórios de -armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até +diretórios de armazenamento externo padrão, tais como o diretório<code>Pictures</code>. Os aplicativos, +como aplicativos de fotografia, podem usar essas APIs em vez de +<code>READ_EXTERNAL_STORAGE</code>, que concede acesso a todos os diretórios de +armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até o diretório.</p> -<p>Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo +<p>Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU de permissões simples que detalha claramente a qual diretório o aplicativo está solicitando acesso.</p> -<p>Para obter mais informações, consulte a documentação para desenvolvedores +<p>Para obter mais informações, consulte a documentação para desenvolvedores <a href="{@docRoot}preview/features/scoped-folder-access.html">Acessos a diretório com escopo</a>.</p> @@ -846,7 +846,7 @@ limite de temperatura. Esta flutuação representa um desafio para desenvolvedor </p> <p> -Para tratar estas limitações, o Android N inclui compatibilidade opcional para +Para tratar estas limitações, o Android N inclui compatibilidade opcional para <em>modo de desempenho sustentado</em>, permitindo que OEMs ofereçam dicas sobre capacidades de desempenho em dispositivo para aplicativos de longa duração. Os desenvolvedores de aplicativos podem usar essas dicas para ajustar os aplicativos para um nÃvel de desempenho do dispositivo previsÃvel @@ -869,8 +869,8 @@ O Android N adiciona compatibilidade de plataformas e otimizações para um novo desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há diversas melhorias de desempenho , incluindo acesso a um núcleo exclusivo da CPU para aplicativos de RV. Dentro dos aplicativos, é possÃvel tirar vantagem do rastreamento inteligente da cabeça -e de notificações estéreo que funcionam para RV. Mais importante, o Android N oferece -gráficos de latência muito baixa. Para obter informações completas sobre a criação de aplicativos de RV para Android N, +e de notificações estéreo que funcionam para RV. Mais importante, o Android N oferece +gráficos de latência muito baixa. Para obter informações completas sobre a criação de aplicativos de RV para Android N, consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>. </p> @@ -883,7 +883,7 @@ consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK par </p> <p> - Ao listar impressoras individuais, agora um serviço de impressão pode definir + Ao listar impressoras individuais, agora um serviço de impressão pode definir Ãcones por impressora de duas maneiras: </p> diff --git a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd index 1e56a9951986..b2f07d973ff9 100644 --- a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd +++ b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd @@ -44,7 +44,7 @@ Visão geral da API do Android N</a></li> <p> - Junto com novos recursos e funcionalidades, o Android N + Junto com novos recursos e funcionalidades, o Android N inclui uma variedade de mudanças de comportamento do sistema e da API. Este documento destaca algumas das principais mudanças que você deve entender e considerar nos aplicativos. @@ -88,7 +88,7 @@ recursos do sistema, bem como a forma como ele interage com outros aplicativos p perÃodo, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer estacionário por um determinado perÃodo após entrar no modo soneca, o sistema aplicará -as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes +as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes {@link android.app.AlarmManager} e à s verificações de GPS e Wi-Fi. Independentemente de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o dispositivo para breves janelas de manutenção, quando os aplicativos @@ -151,7 +151,7 @@ do dispositivo e a experiência do usuário. <ul> <li>Os aplicativos direcionados ao Android N não receberão transmissões {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, mesmo - se tiverem entradas no manifesto solicitando notificação desses eventos. Os aplicativos em execução + se tiverem entradas no manifesto solicitando notificação desses eventos. Os aplicativos em execução ainda poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal se solicitarem a notificação com {@link android.content.BroadcastReceiver}. </li> @@ -175,7 +175,7 @@ android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo <p> Para obter mais informações sobre otimizações em segundo plano no N e como adaptar seu aplicativo, - consulte <a href="{@docRoot}preview/features/background-optimization.html">Otimizações + consulte <a href="{@docRoot}preview/features/background-optimization.html">Otimizações em segundo plano</a>. </p> @@ -245,14 +245,14 @@ ContentResolver.openFileDescriptor()}. <p> Para aplicativos direcionados ao Android N, a estrutura do Android cumpre com -a polÃtica de API {@link android.os.StrictMode} que proÃbe a exposição de URIs {@code file://} +a polÃtica de API {@link android.os.StrictMode} que proÃbe a exposição de URIs {@code file://} fora do aplicativo. Se uma intenção que contenha o URI de um arquivo deixar o aplicativo, ele falhará com uma exceção {@code FileUriExposedException}. </p> <p> Para compartilhar arquivos entre aplicativos, você deve enviar um URI {@code content://} -e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é +e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é usar a classe {@link android.support.v4.content.FileProvider}. Para obter mais informações sobre permissões e compartilhamento de arquivos, consulte <a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhamento de Arquivos</a>. @@ -334,7 +334,7 @@ sw320dp</a>, que é a largura do Nexus 4, um telefone comum de tamanho médio. rede. Verifique a ocorrência de alterações de configuração quando o aplicativo sair do estado pausado e retomar a execução. <p class="note"> - <strong>Observação:</strong> se você armazenar em cache dados dependentes de configuração, + <strong>Observação:</strong> se você armazenar em cache dados dependentes de configuração, recomendamos incluir metadados relevantes, como o tamanho de tela adequado ou a densidade de pixels desses dados. Salvar esses dados permitirá que você decida se será necessário atualizar os dados armazenados em cache após uma mudança @@ -373,7 +373,7 @@ configurações ativadas. As configurações podem ser encontradas em <strong>Se <p> Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo Android N geram um erro na saÃda logcat quando um aplicativo chama uma API não pública. - Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário + Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário fique ciente da situação. Revise o código do seu aplicativo para remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando um dispositivo de visualização ou um emulador. @@ -384,7 +384,7 @@ fique ciente da situação. Revise o código do seu aplicativo para para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes. Também é possÃvel que você esteja vinculando bibliotecas de plataforma sem perceber, particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como - <code>libpng</code>), mas não faz parte do NDK. Nesse caso, verifique se + <code>libpng</code>), mas não faz parte do NDK. Nesse caso, verifique se o APK contém todos os arquivos .so que você pretende vincular. </p> @@ -398,9 +398,9 @@ o APK contém todos os arquivos .so que você pretende vincular. Os aplicativos não devem depender de nem usar bibliotecas nativas não incluÃdas no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações. - Além disso, dispositivos diferentes podem oferecer nÃveis distintos de compatibilidade, pois - não há requisitos de compatibilidade para bibliotecas de plataforma não incluÃdas -no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento + Além disso, dispositivos diferentes podem oferecer nÃveis distintos de compatibilidade, pois + não há requisitos de compatibilidade para bibliotecas de plataforma não incluÃdas +no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento dependente do nÃvel da Android API. </p> @@ -528,28 +528,28 @@ Se o seu aplicativo se baseou neste comportamento, adicione uma polÃtica de ret <ul> <li>Quando um aplicativo for executado no Android N, mas for direcionado a um nÃvel da API menor - e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo -deverá ser capaz de processar corretamente esse cenário. Caso contrário, ele falhará + e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo +deverá ser capaz de processar corretamente esse cenário. Caso contrário, ele falhará quando o usuário restaurá-lo usando Recents. <p> -Você deve testar o aplicativo para verificar -se esse comportamento não ocorre. -Isso pode ser feito causando uma falha idêntica +Você deve testar o aplicativo para verificar +se esse comportamento não ocorre. +Isso pode ser feito causando uma falha idêntica eliminando o aplicativo manualmente usando o DDMS. </p> <p> -Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade. +Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade. No entanto, podem continuar a responder a alterações de configurações de forma não ideal. </p> </li> <li> -Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração -e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo +Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração +e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo alterando o tamanho da fonte (<strong>Setting</strong> > -<strong>Display</strong> > <strong>Font size</strong>) e depois restaurando +<strong>Display</strong> > <strong>Font size</strong>) e depois restaurando o aplicativo em Recents. </li> @@ -557,12 +557,12 @@ o aplicativo em Recents. Devido a um erro em versões anteriores do Android, o sistema não sinaliza gravações em um soquete TCP no encadeamento principal como violações do modo estrito. O Android N corrigiu esse erro. Agora, os aplicativos que exibirem este comportamento gerarão uma{@code android.os.NetworkOnMainThreadException}. -Geralmente, a realização de operações de rede no encadeamento principal é uma má ideia porque essas operações +Geralmente, a realização de operações de rede no encadeamento principal é uma má ideia porque essas operações geralmente têm alta latência no final, causando ANRs e problemas. </li> <li> -Agora, por padrão, a famÃlia de métodos {@code Debug.startMethodTracing()} armazena +Agora, por padrão, a famÃlia de métodos {@code Debug.startMethodTracing()} armazena os resultados no diretório especÃfico do pacote no armazenamento compartilhado, e não no nÃvel mais alto do cartão SD. Isso significa que os aplicativos não precisam mais solicitar a permissão {@code WRITE_EXTERNAL_STORAGE} para usar estas APIs. @@ -583,9 +583,9 @@ que faz com que {@code ActivityThread.StopInfo} gere uma Se um aplicativo publica tarefas {@link java.lang.Runnable} para uma {@link android.view.View} e esta {@link android.view.View} não está anexada a uma janela, o sistema -coloca a tarefa {@link java.lang.Runnable} em fila com a {@link android.view.View}. -A tarefa {@link java.lang.Runnable} não é executada até que a -{@link android.view.View} esteja anexada +coloca a tarefa {@link java.lang.Runnable} em fila com a {@link android.view.View}. +A tarefa {@link java.lang.Runnable} não é executada até que a +{@link android.view.View} esteja anexada a uma janela. Este comportamento corrige os seguintes erros: <ul> <li>Se um aplicativo publicasse em uma {@link android.view.View} de um encadeamento que não fosse o encadeamento de IU da janela pretendida diff --git a/docs/html-intl/intl/pt-br/preview/download-ota.jd b/docs/html-intl/intl/pt-br/preview/download-ota.jd index 693aa9288c97..3f817ed545e3 100644 --- a/docs/html-intl/intl/pt-br/preview/download-ota.jd +++ b/docs/html-intl/intl/pt-br/preview/download-ota.jd @@ -165,7 +165,7 @@ Este é o contrato de licença do Android SDK Preview (o “Contrato de Licença <p> Esta página fornece links para imagens OTA de dispositivo e descreve como aplicar manualmente uma atualização OTA em um dispositivo. Esse procedimento pode ser útil - para recuperar dispositivos que receberam atualizações OTA usando o programa beta + para recuperar dispositivos que receberam atualizações OTA usando o programa beta do Android e não estão ligando após a instalação. </p> @@ -179,7 +179,7 @@ do Android e não estão ligando após a instalação. <li>Baixe uma imagem OTA de dispositivo na tabela abaixo.</li> <li>Reinicialize o dispositivo para ficar em modo Recovery. Para obter mais informações sobre como colocar dispositivos Nexus nesse modo, consulte - <a href="https://support.google.com/nexus/answer/4596836">Redefinição do + <a href="https://support.google.com/nexus/answer/4596836">Redefinição do dispositivo Nexus para voltar à configuração de fábrica</a>. </li> <li>No dispositivo, selecione <strong>ADB sideload</strong>.</li> @@ -202,65 +202,73 @@ dispositivo Nexus para voltar à configuração de fábrica</a>. <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5: 15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1: 5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5: 3fac09fef759dde26e57cb80b20b6477<br> - SHA-1: 27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5: 58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5: 92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5: 1461622ad53ea842b2722fa7b49b8172<br> - SHA-1: 409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1: 87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1: 6f33742290eb46f2561891f38ca2e754b4e50c6a + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/pt-br/preview/download.jd b/docs/html-intl/intl/pt-br/preview/download.jd index b0f23e5aefed..4477142d0708 100644 --- a/docs/html-intl/intl/pt-br/preview/download.jd +++ b/docs/html-intl/intl/pt-br/preview/download.jd @@ -286,7 +286,7 @@ Este é o contrato de licença do Android SDK Preview (o “Contrato de Licença </p> <p> - Se decidir que deseja obter atualizações por OTA após atualizar um dispositivo manualmente, + Se decidir que deseja obter atualizações por OTA após atualizar um dispositivo manualmente, basta inscrevê-lo no <a href="https://g.co/androidbeta">programa beta do Android</a>. É possÃvel inscrever dispositivos a qualquer momento para receber a próxima atualização do Preview por OTA. @@ -300,72 +300,73 @@ basta inscrevê-lo no <a href="https://g.co/androidbeta">programa beta <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1: 5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1: 81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5: 565be87ebb2d5937e2abe1a42645864b<br> - SHA-1: 2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1: 2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1: 1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5: 7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1: 5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 e D6653)</td> - <td>Download: <a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - Para obter mais informações, consulte <a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Experimente o Android N Developer Preview para Xperia Z3</a>. + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> @@ -390,7 +391,7 @@ basta inscrevê-lo no <a href="https://g.co/androidbeta">programa beta </ul> </li> <li><strong>Cancele a inscrição do dispositivo no programa beta do Android</strong>. Se o - dispositivo estiver inscrito no <a href="https://g.co/androidbeta">programa beta + dispositivo estiver inscrito no <a href="https://g.co/androidbeta">programa beta do Android</a>, independentemente de qual ele seja, você poderá simplesmente cancelar a inscrição. <p> O dispositivo receberá uma atualização por OTA para a versão @@ -465,7 +466,7 @@ para o Android N Preview.) <p>Agora, é possÃvel iniciar o emulador do Android com o AVD Android N Preview.</p> <p> -Para ter a melhor experiência possÃvel com o emulador do Android, instale o +Para ter a melhor experiência possÃvel com o emulador do Android, instale o Android Studio 2.1 ou mais recente, que oferece suporte ao <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>, cujo desempenho é muito superior ao do emulador no Android Studio 1.5.</p> diff --git a/docs/html-intl/intl/pt-br/preview/features/afw.jd b/docs/html-intl/intl/pt-br/preview/features/afw.jd index c16cff9f97e0..977d2a0f968a 100644 --- a/docs/html-intl/intl/pt-br/preview/features/afw.jd +++ b/docs/html-intl/intl/pt-br/preview/features/afw.jd @@ -101,7 +101,7 @@ ao dispositivo. Donos de perfis podem exigir que os usuários especifiquem um desafio de segurança para aplicativos em execução no perfil de trabalho. O sistema mostra o desafio de segurança quando o usuário tenta abrir qualquer aplicativo de trabalho. Se o usuário preencher corretamente o - desafio de segurança, o sistema desbloqueará e, se necessário, descriptografará o + desafio de segurança, o sistema desbloqueará e, se necessário, descriptografará o perfil de trabalho. </p> @@ -126,14 +126,14 @@ android.app.admin.DevicePolicyManager#setPasswordMinimumLength setPasswordMinimumLength()}. O dono de perfil também pode definir o bloqueio de dispositivo usando a instância de {@link android.app.admin.DevicePolicyManager} retornada pelo novo método <code>DevicePolicyManager.getParentProfileInstance()</code> -. Além disso, donos de perfil podem personalizar a tela de credenciais do +. Além disso, donos de perfil podem personalizar a tela de credenciais do desafio de trabalho usando os novos métodos <code>setOrganizationColor()</code> e <code>setOrganizationName()</code> da classe {@link android.app.admin.DevicePolicyManager} . </p> <p> - Para obter detalhes sobre os novos métodos e constantes, consulte a + Para obter detalhes sobre os novos métodos e constantes, consulte a página de referência <code>DevicePolicyManager</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência do N Preview SDK</a>. </p> @@ -149,7 +149,7 @@ página de referência <code>DevicePolicyManager</code> na <a href="{@docRoot}pr Enquanto está suspenso, um pacote não consegue iniciar atividades, as notificações são suspensas e a entrada do aplicativo na <a href="{@docRoot}guide/components/recents.html">tela de visão geral</a> é ocultada. Os pacotes suspensos não são exibidos na <a href="{@docRoot}guide/components/recents.html">tela de visão geral</a> e não - podem mostrar caixas de diálogo (incluindo avisos e snackbars). Também não conseguem reproduzir + podem mostrar caixas de diálogo (incluindo avisos e snackbars). Também não conseguem reproduzir áudio nem vibrar o dispositivo. </p> @@ -175,13 +175,13 @@ de trabalho. A tela de inÃcio indica que os aplicativos e widgets de trabalho n <h2 id="always-on-vpn">Always-On VPN</h2> <p> - Os donos de dispositivo e perfil podem exigir que os aplicativos de trabalho se conectem sempre + Os donos de dispositivo e perfil podem exigir que os aplicativos de trabalho se conectem sempre por meio de uma VPN especificada. Se os donos definirem este requisito, o dispositivo iniciará a VPN automaticamente na inicialização. </p> <p> - Os donos podem exigir o uso de uma VPN chamando o novo + Os donos podem exigir o uso de uma VPN chamando o novo método <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code>. Para descobrir se o dono definiu um requisito de VPN, chame o novo método <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>. @@ -319,7 +319,7 @@ o registro no dispositivo usando <code>DevicePolicyManager.setSecurityLoggingEna </p> <p> - O Android N inclui as seguintes adições de API para dar suporte a este recurso. Para + O Android N inclui as seguintes adições de API para dar suporte a este recurso. Para obter detalhes, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl"> Referência do N Preview SDK</a>. </p> @@ -353,7 +353,7 @@ obter detalhes, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl"> R <h2 id="remove-cert">Remoção de certificado do cliente</h2> <p> - Agora, donos de perfis e dispositivos podem remover certificados de cliente que foram + Agora, donos de perfis e dispositivos podem remover certificados de cliente que foram instalados por meio do {@link android.app.admin.DevicePolicyManager#installKeyPair installKeyPair()} chamando o novo método <code>DevicePolicyManager.removeKeyPair()</code>. @@ -404,7 +404,7 @@ na instalação</h2> O dono do dispositivo ou perfil pode habilitar outro aplicativo para gerenciar restrições de aplicativo por meio do novo método <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code> -. O aplicativo indicado pode verificar se a permissão foi +. O aplicativo indicado pode verificar se a permissão foi concedida chamando <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>. </p> @@ -421,7 +421,7 @@ getApplicationRestrictions()} para quaisquer pacotes dentro daquele usuário ou <p> Os usuários podem desativar as permissões de localidade para aplicativos de trabalho sem deixar de - acessar informações de localidade em seus aplicativos pessoais. Um interruptor de acesso de localidade + acessar informações de localidade em seus aplicativos pessoais. Um interruptor de acesso de localidade em separado em Location Settings permite que o usuário impeça atualizações de localização ou consultas de última localidade em aplicativos executados no perfil de trabalho. </p> diff --git a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd index 073fd5e5b03b..cf4bbe9b8ff0 100644 --- a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd @@ -62,7 +62,7 @@ restrições: <li>Os aplicativos direcionados ao Preview não receberão transmissões {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem registrados para recebê-las no seu manifesto. Os aplicativos em execução ainda -poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal registrando um +poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal registrando um {@link android.content.BroadcastReceiver} em {@link android.content.Context#registerReceiver Context.registerReceiver()}. </li> @@ -111,7 +111,7 @@ poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal registran </p> <p class="note"> - <strong>Observação:</strong> Um {@link android.content.BroadcastReceiver} registrado em + <strong>Observação:</strong> Um {@link android.content.BroadcastReceiver} registrado em {@link android.content.Context#registerReceiver Context.registerReceiver()} continuará a receber essas transmissões enquanto o aplicativo estiver em execução. </p> @@ -185,7 +185,7 @@ public static void scheduleJob(Context context) { </p> <p> - O aplicativo continuará a receber retornos de chamada até que o aplicativo encerre ou chame + O aplicativo continuará a receber retornos de chamada até que o aplicativo encerre ou chame {@link android.net.ConnectivityManager#unregisterNetworkCallback unregisterNetworkCallback()}. </p> diff --git a/docs/html-intl/intl/pt-br/preview/features/data-saver.jd b/docs/html-intl/intl/pt-br/preview/features/data-saver.jd index 29c9ee46c0f6..f42b9cf2b495 100644 --- a/docs/html-intl/intl/pt-br/preview/features/data-saver.jd +++ b/docs/html-intl/intl/pt-br/preview/features/data-saver.jd @@ -40,17 +40,17 @@ facilmente exceder o custo do próprio dispositivo. No N Developer Preview, os u </p> <p> - Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está + Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa - aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possÃvel. Os usuários podem + aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possÃvel. Os usuários podem autorizar aplicativos especÃficos a usar dados tarifados em segundo plano, mesmo com a Economia de dados ativada. </p> <p> O N Developer Preview estende a API {@link android.net.ConnectivityManager} - para oferecer aos aplicativos uma forma de <a href="#status">recuperar as -preferências do usuário para a Economia de dados</a> e <a href="#monitor-changes">monitorar + para oferecer aos aplicativos uma forma de <a href="#status">recuperar as +preferências do usuário para a Economia de dados</a> e <a href="#monitor-changes">monitorar as mudanças de preferências</a>. Como prática recomendada, os aplicativos devem verificar se o usuário ativou a Economia de dados e tentar limitar o uso de dados em primeiro e segundo plano. @@ -147,7 +147,7 @@ if (connMgr.isActiveNetworkMetered()) { O envio da intenção e do URI abre o aplicativo <strong>Settings</strong> e exibe as configurações de uso de dados de seu aplicativo. O usuário pode decidir então se ativará os dados em segundo plano para o aplicativo. Antes de enviar a intenção, é - prática recomendada perguntar primeiro ao usuário se ele deseja iniciar o + prática recomendada perguntar primeiro ao usuário se ele deseja iniciar o aplicativo <strong>Settings</strong> com o objetivo de ativar o uso de dados em segundo plano. </p> diff --git a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd index d14449f49a5d..8f588411a612 100644 --- a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd @@ -18,7 +18,7 @@ page.image=images/cards/card-nyc_2x.jpg </div> </div> -<p>O Android N é executado em um modo seguro de <i>inicialização direta</i> +<p>O Android N é executado em um modo seguro de <i>inicialização direta</i> quando o dispositivo é ligado, mas o usuário não o desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:</p> diff --git a/docs/html-intl/intl/pt-br/preview/features/multi-window.jd b/docs/html-intl/intl/pt-br/preview/features/multi-window.jd index 77421820dde3..1a48140e0b14 100644 --- a/docs/html-intl/intl/pt-br/preview/features/multi-window.jd +++ b/docs/html-intl/intl/pt-br/preview/features/multi-window.jd @@ -34,9 +34,9 @@ page.keywords="multi-window", "android N", "split screen", "free-form" <p> Se você compilar o aplicativo com o N Preview SDK, poderá configurar como o aplicativo - processa a exibição de várias janelas. Por exemplo, você pode especificar as dimensões + processa a exibição de várias janelas. Por exemplo, você pode especificar as dimensões mÃnimas permitidas para a atividade. Você também pode desativar a exibição de várias janelas para - o aplicativo, garantindo que o sistema mostre o aplicativo apenas + o aplicativo, garantindo que o sistema mostre o aplicativo apenas em modo de tela inteira. </p> diff --git a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd index 072e55b58cd8..c00eb9b9a798 100644 --- a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd +++ b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd @@ -29,7 +29,7 @@ se seu aplicativo oferecer suporte a vários idiomas, você deverá garantir que esperada. Por fim, garanta que seu aplicativo possa lidar corretamente com idiomas que ele não tenha sido explicitamente projetado para suportar.</p> -<p>Este documento começa explicando a estratégia de resolução de recursos anterior ao +<p>Este documento começa explicando a estratégia de resolução de recursos anterior ao Android N. Em seguida, ele descreve a estratégia de resolução de recursos aprimorada do Android N. Por fim, ele explica como aproveitar as vantagens do maior número de localidades para oferecer suporte a usuários multilÃngues.</p> @@ -215,7 +215,7 @@ não deixe de usar formatadores em vez de strings no código para números e dat <p>Um bom exemplo é o árabe, cujo suporte no Android N foi expandido de uma {@code ar_EG} para 27 localidades de árabe. Essas localidades podem compartilhar a maioria dos recursos, mas algumas preferem dÃgitos ASCII, enquanto outras preferem dÃgitos nativos. Por exemplo, -quando você quer criar uma frase com uma variável em dÃgito, como +quando você quer criar uma frase com uma variável em dÃgito, como “Choose a 4 digit pinâ€, use formatadores como mostrado abaixo:</p> <pre> format(locale, "Choose a %d-digit PIN", 4)</pre> diff --git a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd index 72c2fe618522..36988da09ea5 100644 --- a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd +++ b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd @@ -212,7 +212,7 @@ anexar a resposta do usuário ao histórico da entrada remota. <h2 id="bundle">Notificações empacotadas</h2> <p>O Android N oferece aos desenvolvedores uma nova forma de representar - uma fila de notificações: <i>notificações empacotadas</i>. Essa forma é semelhante ao recurso + uma fila de notificações: <i>notificações empacotadas</i>. Essa forma é semelhante ao recurso <a href="{@docRoot}training/wearables/notifications/stacks.html">Pilhas de Notificações</a> no Android Wear. Por exemplo, se o aplicativo criar notificações para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as @@ -243,8 +243,8 @@ Builder.setGroup()} para empacotar notificações semelhantes.</p> sistema as agrupará automaticamente. </p> -<p>Para saber como adicionar notificações a um grupo, consulte -<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Adicionar +<p>Para saber como adicionar notificações a um grupo, consulte +<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Adicionar cada notificação a um grupo</a>.</p> @@ -278,7 +278,7 @@ cada notificação a um grupo</a>.</p> <p> Os exemplos de casos em que uma única notificação é preferÃvel incluem mensagens individuais de uma única pessoa ou uma representação em lista - de itens de texto com uma única linha. Você pode usar + de itens de texto com uma única linha. Você pode usar ({@link android.app.Notification.InboxStyle InboxStyle} ou {@link android.app.Notification.BigTextStyle BigTextStyle}) para isso. @@ -354,7 +354,7 @@ Os exemplos de casos em que uma única notificação é preferÃvel <p>Para usar essa nova API, chame o método {@code setStyle()}, passando o estilo de visualização personalizada desejado.</p> -<p>O snippet mostra como construir um objeto de notificação personalizada com o método +<p>O snippet mostra como construir um objeto de notificação personalizada com o método {@code DecoratedCustomViewStyle()}.</p> <pre> @@ -370,7 +370,7 @@ Notification notification = new Notification.Builder() <h2 id="style">Estilo de mensagens</h2> <p> O Android N traz uma nova API para personalização do estilo de uma notificação. - Usando a classe <code>MessageStyle</code>, você pode alterar vários + Usando a classe <code>MessageStyle</code>, você pode alterar vários rótulos exibidos na notificação, incluindo o tÃtulo da conversa, mensagens adicionais e a visualização de conteúdo para a notificação. </p> diff --git a/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd b/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd index 3a7dec491a13..4bdc54598826 100644 --- a/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd +++ b/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd @@ -9,13 +9,13 @@ page.tags=androidn <h2>Neste documento</h2> <ol> - <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de + <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de imagem em imagem</a></li> <li><a href="#pip_button">Alternar a atividade para o modo de imagem em imagem</a> </li> <li><a href="#handling_ui">Lidar com a IU durante o modo de imagem em imagem</a> </li> - <li><a href="#continuing_playback">Continuar reprodução de vÃdeo no modo de + <li><a href="#continuing_playback">Continuar reprodução de vÃdeo no modo de imagem em imagem</a></li> <li><a href="#single_playback">Usar uma única atividade de reprodução para imagem em imagem</a></li> @@ -99,7 +99,7 @@ na janela do PIP.</p> <h2 id="pip_button">Alternar a atividade para o modo de imagem em imagem</h2> Quando precisar colocar a atividade no modo de PIP, chame -<code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir +<code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir entra no modo de PIP quando o usuário seleciona um botão dedicado ao PIP na barra de controle de uma mÃdia:</p> @@ -146,7 +146,7 @@ public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { } </pre> -<h2 id="continuing_playback">Continuar reprodução de vÃdeo no modo de +<h2 id="continuing_playback">Continuar reprodução de vÃdeo no modo de imagem em imagem</h2> <p>Quando a atividade entra no modo de PIP, o sistema a considera @@ -177,11 +177,11 @@ imagem em imagem</h2> <p>Ao navegar pelo conteúdo da tela principal de seu aplicativo, um usuário pode selecionar um novo vÃdeo enquanto uma atividade de reprodução de vÃdeo estiver em modo de PIP. Reproduza o novo - vÃdeo na atividade de reprodução existente em modo de tela cheia em vez de + vÃdeo na atividade de reprodução existente em modo de tela cheia em vez de lançar uma nova atividade que pode confundir o usuário.</p> <p>Para que uma única atividade seja usada para solicitações de reprodução de vÃdeo e -com o modo de PIP ativado ou desativado, conforme necessário, configure o +com o modo de PIP ativado ou desativado, conforme necessário, configure o <code>android:launchMode</code> da atividade para <code>singleTask</code> em seu manifesto. </p> @@ -194,7 +194,7 @@ com o modo de PIP ativado ou desativado, conforme necessário, configure o </pre> <p>Na atividade, modifique {@link android.app.Activity#onNewIntent -Activity.onNewIntent()} e processe o novo vÃdeo, interrompendo qualquer +Activity.onNewIntent()} e processe o novo vÃdeo, interrompendo qualquer reprodução existente, caso necessário.</p> <h2 id="best">Práticas recomendadas</h2> diff --git a/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd index ef9ba6596189..6a58d7656646 100644 --- a/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd +++ b/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd @@ -25,7 +25,7 @@ acesso direcionado a diretórios para esses tipos de aplicativos. Por exemplo:</ ou {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} em seu manifesto permite o acesso a todos os diretórios públicos no armazenamento externo, o que pode ser mais do que o aplicativo precisa.</li> -<li>Usar a +<li>Usar a <a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de acesso ao armazenamento</a> geralmente faz com que o usuário selecione diretórios por meio de uma IU de sistema, o que é desnecessário se seu aplicativo sempre acessa o mesmo @@ -54,7 +54,7 @@ o diretório de armazenamento externo para o arquivo.</p> Em volumes secundários, como cartões SD externos, passe nulo ao chamar <code>StorageVolume.createAccessIntent()</code> para solicitar acesso ao volume todo em vez de um diretório especÃfico. -<code>StorageVolume.createAccessIntent()</code> retornará nulo se você passar +<code>StorageVolume.createAccessIntent()</code> retornará nulo se você passar nulo no volume principal ou se passar um nome de diretório inválido. </p> @@ -80,7 +80,7 @@ acesso ao diretório Pictures.</p> <code>onActivityResult()</code> com um código de resultado de <code>Activity.RESULT_OK</code> e os dados de intenção que contêm o URI. Use o URI fornecido para acessar as informações do diretório, o que é semelhante a usar URIs -retornados pela +retornados pela <a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de acesso ao armazenamento</a>.</p> diff --git a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd index 15d22d1a8d4f..890e1403793b 100644 --- a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd +++ b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd @@ -123,7 +123,7 @@ os aplicativos de canais com recursos de gravação na tabela de provedor de con <code>RecordedPrograms.Uri</code>. Use APIs de provedores de conteúdo para ler, adicionar e excluir entradas dessa tabela.</p> -<p>Para saber mais sobre como trabalhar com dados de provedores de conteúdo, consulte +<p>Para saber mais sobre como trabalhar com dados de provedores de conteúdo, consulte <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> Fundamentos do provedor de conteúdo</a> .</p> diff --git a/docs/html-intl/intl/pt-br/preview/j8-jack.jd b/docs/html-intl/intl/pt-br/preview/j8-jack.jd index 504739689a09..22f4b679febf 100644 --- a/docs/html-intl/intl/pt-br/preview/j8-jack.jd +++ b/docs/html-intl/intl/pt-br/preview/j8-jack.jd @@ -23,7 +23,7 @@ page.keywords="android N", "Java 8", "Jack" </p> <p>Para começar a usar esses recursos, primeiro faça o download e instale o Android -Studio 2.1 e o Android N Preview SDK, que inclui a +Studio 2.1 e o Android N Preview SDK, que inclui a cadeia de ferramentas Jack obrigatória e o Android Plugin for Gradle atualizado. Se você ainda não instalou o Android N Preview SDK, consulte <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o Android N</a>.</p> diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd index eaa3c0c1ae95..1c81f6d920b5 100644 --- a/docs/html-intl/intl/pt-br/preview/overview.jd +++ b/docs/html-intl/intl/pt-br/preview/overview.jd @@ -116,7 +116,7 @@ page.tags="preview", "developer", "android" </h5> <p> - Informe problemas e dê-nos feedback usando o + Informe problemas e dê-nos feedback usando o <a href="{@docRoot}preview/bug">issue tracker</a>. Conecte-se a outros desenvolvedores na <a href="{@docRoot}preview/dev-community">Comunidade N Developer</a>. @@ -262,7 +262,7 @@ page.tags="preview", "developer", "android" </p> <p> - Para se inscrever no programa, acesse o site do <a href="https://g.co/androidbeta">programa beta + Para se inscrever no programa, acesse o site do <a href="https://g.co/androidbeta">programa beta do Android</a>. Você verá uma lista de todos os dispositivos registrados em sua conta que estejam qualificados para inscrição no programa beta do Android. @@ -314,13 +314,13 @@ page.tags="preview", "developer", "android" </p> <ul> - <li> <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o + <li> <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o Android N</a> tem instruções passo a passo para você iniciar o trabalho.</li> <li> <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> indicam as principais áreas a serem testadas.</li> - <li> Documentação de novas APIs, incluindo uma <a href="{@docRoot}preview/api-overview.html">visão geral das APIs</a>, a -<a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da + <li> Documentação de novas APIs, incluindo uma <a href="{@docRoot}preview/api-overview.html">visão geral das APIs</a>, a +<a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da API</a> disponÃvel para download e guias de desenvolvedor detalhados sobre os recursos principais, como suporte para várias janelas, notificações agrupadas, suporte para vários idiomas e outros. <li> <a href="{@docRoot}preview/samples.html">Exemplo de código</a> que @@ -333,7 +333,7 @@ suporte para várias janelas, notificações agrupadas, suporte para vários idi <h4 id="reference">Referência da API para download</h4> <p> - Durante as primeiras atualizações do Preview, você pode fazer o download da + Durante as primeiras atualizações do Preview, você pode fazer o download da <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da API mais recente para a plataforma Android N</a> como um arquivo zip separado. Esse download também inclui um relatório de diferenças que ajuda você a identificar as mudanças da API em relação à @@ -357,7 +357,7 @@ suporte para várias janelas, notificações agrupadas, suporte para vários idi <ul> <li> O <a href="https://code.google.com/p/android-developer-preview/">Issue Tracker do N Developer Preview</a> é o <strong>canal principal de feedback.</strong> É possÃvel informar erros, - problemas de desempenho e feedback geral pelo issue tracker. Também é possÃvel verificar os + problemas de desempenho e feedback geral pelo issue tracker. Também é possÃvel verificar os <a href="{@docRoot}preview/bugs">erros conhecidos</a> e encontrar etapas de resolução. Manteremos você atualizado sobre seu problema conforme ele seja avaliado e enviado para a equipe de engenharia do Android para análise. </li> @@ -374,7 +374,7 @@ suporte para várias janelas, notificações agrupadas, suporte para vários idi O N Developer Preview fornece um sistema apenas para desenvolvimento e uma biblioteca Android que <strong>não tem um nÃvel da API padrão</strong>. Caso opte pelos comportamentos de compatibilidade para testar o aplicativo (o que é muito - recomendado), é possÃvel destinar a versão de prévia do Android N + recomendado), é possÃvel destinar a versão de prévia do Android N configurando o <code><a href= "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> do aplicativo para <code>“Nâ€</code>. diff --git a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd index 6db456cba6bc..9c1f03522603 100644 --- a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd +++ b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd @@ -41,7 +41,7 @@ compilar seu aplicativo. Caso contrário, não será preciso usar o Jack, mas ai necessário atualizar para o JDK 8 para desenvolver para a plataforma Android N, conforme descrito abaixo.</p> -<p>Se você já instalou o Android Studio, verifique se tem o Android +<p>Se você já instalou o Android Studio, verifique se tem o Android Studio 2.1 ou superior clicando em <strong>Help > Check for Update</strong> (no Mac, <strong>Android Studio > Check for Updates</strong>).</p> @@ -51,7 +51,7 @@ Studio 2.1 aqui</a>.</p> <h2 id="get-sdk">Obter o N Preview SDK</h2> -<p>Para começar a desenvolver com as APIs do Android N, instale o +<p>Para começar a desenvolver com as APIs do Android N, instale o Android N Preview SDK no Android Studio da seguinte maneira:</p> <ol> @@ -77,7 +77,7 @@ Android N Preview SDK no Android Studio da seguinte maneira:</p> <p> Informações detalhadas sobre as APIs do Android N são disponibilizadas na documentação de referência do N Preview , que pode ser baixada pela tabela a seguir. - Este pacote contém uma versão off-line resumida do site de desenvolvedores do Android + Este pacote contém uma versão off-line resumida do site de desenvolvedores do Android e inclui uma referência de API atualizada para as APIs do Android N, além de um relatório das diferenças entre as APIs. </p> @@ -92,7 +92,7 @@ Android N Preview SDK no Android Studio da seguinte maneira:</p> <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> @@ -131,7 +131,7 @@ não tiver a versão mais recente, baixe o JDK 8 agora mesmo.</p> Para usar as APIs do Android N, seu projeto deve ser configurado da maneira apropriada. </p> -<p>Se planeja usar os recursos de linguagem do Java 8, consulte +<p>Se planeja usar os recursos de linguagem do Java 8, consulte <a href="{@docRoot}preview/j8-jack.html">Recursos de linguagem do Java 8</a> para saber mais sobre os recursos do Java 8 com suporte e como configurar seu projeto com o compilador Jack.</p> @@ -179,7 +179,7 @@ android { <ul> <li>Siga o guia para <a href="{@docRoot}preview/download.html">Testar em um dispositivo Android N</a>.</li> - <li>Saiba mais sobre a plataforma Android N com + <li>Saiba mais sobre a plataforma Android N com <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> e <a href="{@docRoot}preview/api-overview.html">Recursos de APIs do Android N</a>.</li> diff --git a/docs/html-intl/intl/pt-br/preview/support.jd b/docs/html-intl/intl/pt-br/preview/support.jd index 4580887b7a8b..9ae32c89fd25 100644 --- a/docs/html-intl/intl/pt-br/preview/support.jd +++ b/docs/html-intl/intl/pt-br/preview/support.jd @@ -101,7 +101,7 @@ page.image=images/cards/card-n-support_2x.png desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há diversas melhorias de desempenho, incluindo o acesso a um núcleo exclusivo da CPU para aplicativos de RV. Dentro dos aplicativos, é possÃvel aproveitar o rastreamento inteligente - da cabeça e notificações estéreo que funcionam para RV. Mais importante, + da cabeça e notificações estéreo que funcionam para RV. Mais importante, o Android N oferece gráficos de latência muito baixa. </p> @@ -112,7 +112,7 @@ o Android N oferece gráficos de latência muito baixa. <h4 id="">Modo de desempenho sustentado</h4> <p> - O Android N inclui compatibilidade opcional para <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">modo de desempenho + O Android N inclui compatibilidade opcional para <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">modo de desempenho sustentado</a>, permitindo que OEMs ofereçam dicas sobre capacidades de desempenho do dispositivo para aplicativos de longa duração. Desenvolvedores de aplicativos podem usar essas dicas para ajustar os aplicativos para um nÃvel de @@ -143,7 +143,7 @@ sustentado</a>, permitindo que OEMs ofereçam dicas sobre No Android N, o usuário pode pressionar <code>Meta+/</code> para acionar uma tela de <strong>atalhos de teclado</strong> que exibe todos os atalhos disponÃveis do sistema e do aplicativo em questão. Os desenvolvedores podem adicionar os próprios atalhos ou - ativar a tela de atalhos nos aplicativos. Consulte o <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Auxiliar de + ativar a tela de atalhos nos aplicativos. Consulte o <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</a> para saber mais. </p> @@ -223,7 +223,7 @@ API</a> <dd> Agora o sistema usa os metadados da atividade para decidir o modo do bloco. (Anteriormente, o modo do bloco era determinado pelo valor de retorno do - <code>TileService.onTileAdded()</code>.) Para obter mais informações, consulte + <code>TileService.onTileAdded()</code>.) Para obter mais informações, consulte <code>TileService.META_DATA_ACTIVE_TILE</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponÃvel para download. </dd> </dl> @@ -604,7 +604,7 @@ issue tracker</a>.</p> problemas podem aumentar com o uso prolongado. </li> - <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e + <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e desligar a tela. </li> </ul> @@ -857,7 +857,7 @@ issue tracker</a>.</p> problemas podem aumentar com o uso prolongado. </li> - <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e + <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e desligar a tela. </li> @@ -885,7 +885,7 @@ issue tracker</a>.</p> problemas podem aumentar com o uso prolongado. </li> - <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e + <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e desligar a tela. </li> </ul> @@ -966,7 +966,7 @@ issue tracker</a>.</p> <li>Always on VPN <ul> <li>Se o modo Always on VPN estiver ativado, mas uma VPN não estiver disponÃvel, os aplicativos - não especificados como exceções na polÃtica Always on se conectarão via + não especificados como exceções na polÃtica Always on se conectarão via rede comum. Exceto quando especificados como exceções na polÃtica Always on, os aplicativos deverão ficar off-line se não houver nenhuma conexão VPN disponÃvel. <ul> @@ -1124,7 +1124,7 @@ issue tracker</a>.</p> desenvolvedor do aplicativo. </li> - <li>Quando o aplicativo é destinado para uma versão da plataforma Android anterior ao N, + <li>Quando o aplicativo é destinado para uma versão da plataforma Android anterior ao N, ele pode não funcionar com avisos de tela dividida que aparecem diversas vezes. </li> diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd index 59120589f3f6..ff226429e7ee 100644 --- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd @@ -45,7 +45,7 @@ métodos do ciclo de vida em sua atividade conforme ela fica em segundo plano (o está visÃvel, mas a instância e seu estado permanecem intactos).</p> <p>Dentro dos métodos de retorno de chamada do ciclo de vida, você pode declarar como a atividade deve se comportar quando o -usuário sai e retorna da atividade. Por exemplo, se estiver construindo um reprodutor de vÃdeos de transmissão em sequência, +usuário sai e retorna da atividade. Por exemplo, se estiver construindo um reprodutor de vÃdeos de transmissão em sequência, você pode pausar o vÃdeo e encerrar a conexão da rede quando o usuário alternar para outro aplicativo. Quando o usuário retornar, será possÃvel reconectar a rede e permitir que ele reinicie o vÃdeo de onde parou.</p> @@ -55,7 +55,7 @@ android.app.Activity} recebe e como utilizá-los para que a atividade faça o qu usuário espera e não consuma recursos do sistema quando não estiver em uso.</p> <h2>Lições</h2> - + <dl> <dt><b><a href="starting.html">Iniciando uma atividade</a></b></dt> <dd>Aprenda os fundamentos sobre ciclo de vida da atividade, como o usuário pode iniciar seu aplicativo e como @@ -68,5 +68,5 @@ fazer durante essas mudanças de estados.</dd> <dt><b><a href="recreating.html">Recriando uma atividade</a></b></dt> <dd>Aprenda sobre o que acontece quando sua atividade é destruÃda e como reconstruir o estado da atividade quando necessário.</dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd index 55f772e51dfb..9851579650a2 100644 --- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Esta lição ensina a</h2> <ol> <li><a href="#Pause">Pausar sua atividade</a></li> <li><a href="#Resume">Reiniciar sua atividade</a></li> </ol> - + <h2>Leia também</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Atividades</a> @@ -31,12 +31,12 @@ trainingnavtop=true </div> </div> -<p>Durante o uso normal do aplicativo, a atividade em primeiro plano as vezes é obstruÃda por outros +<p>Durante o uso normal do aplicativo, a atividade em primeiro plano as vezes é obstruÃda por outros componentes visuais que causam a <em>pausa</em>. Por exemplo, quando uma atividade - semitransparente é aberta (como uma no estilo de um diálogo), a atividade anterior pausa. Enquanto a + semitransparente é aberta (como uma no estilo de um diálogo), a atividade anterior pausa. Enquanto a atividade estiver parcialmente visÃvel, mas não for o foco da atividade, ela permanecerá pausada.</p> -<p>No entanto, se a atividade estiver completamente obstruÃda e não visÃvel, ela <em>para</em> (o que será +<p>No entanto, se a atividade estiver completamente obstruÃda e não visÃvel, ela <em>para</em> (o que será discutido na próxima lição).</p> <p>Conforme a atividade entra no estado pausado, o sistema chama o método {@link @@ -59,7 +59,7 @@ aguarda no estado Pausa (1). Se o usuário retornar à atividade enquanto ainda <h2 id="Pause">Pausar sua atividade</h2> - + <p>Quando o sistema chama {@link android.app.Activity#onPause()} para sua atividade, teoricamente significa que a atividade ainda está parcialmente visÃvel, mas geralmente é um indÃcio de que o usuário está saindo da atividade e logo entrará em estado Interrompido. Use diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd index 7cb122f713ef..9746a65ceeb0 100644 --- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Esta lição ensina a</h2> <ol> <li><a href="#SaveState">Salvar o estado da atividade</a></li> <li><a href="#RestoreState">Restaurar o estado da atividade</a></li> </ol> - + <h2>Leia também</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Compatibilidade @@ -57,7 +57,7 @@ atividade pode conter mais informações de estado do que se deseja restaurar, c rastreiam o progresso do usuário na atividade.</p> <p class="note"><strong>Observação:</strong> para que o sistema Android restaure o estado das -visualizações em sua atividade, <strong>cada visualização precisa ter uma ID exclusiva</strong>, fornecido pelo atributo +visualizações em sua atividade, <strong>cada visualização precisa ter uma ID exclusiva</strong>, fornecido pelo atributo <a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code android:id}</a>.</p> @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()}:</p> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, que o sis depois do método {@link android.app.Activity#onStart()}. O sistema chama {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} se houver um estado salvo para ser restaurado. Portanto, não é necessário verificar se {@link android.os.Bundle} é null:</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd index efe2badc149f..4c1a9b846cc7 100644 --- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Esta lição ensina a</h2> <ol> <li><a href="#lifecycle-states">Entender o ciclo de vida do retorno de chamada</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">Criar uma nova instância</a></li> <li><a href="#Destroy">Destruir a atividade</a></li> </ol> - + <h2>Leia também</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Atividades</a></li> @@ -83,7 +83,7 @@ paisagem e retrato.</li> </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -138,7 +138,7 @@ comportamentos especÃficos do ciclo de vida.</p> -<h2 id="launching-activity">Especificar a atividade da tela de inÃcio do aplicativo</h2> +<h2 id="launching-activity">Especificar a atividade da tela de inÃcio do aplicativo</h2> <p>Quando o usuário seleciona seu aplicativo na tela inicial, o sistema chama o método {@link android.app.Activity#onCreate onCreate()} para {@link android.app.Activity} no aplicativo @@ -151,7 +151,7 @@ na raiz do diretório do seu projeto.</p> <p>A principal atividade do aplicativo deve ser declarada no manifesto com um <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> que inclui a ação {@link android.content.Intent#ACTION_MAIN MAIN} e categoria -{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Por exemplo:</p> +{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Por exemplo:</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -268,7 +268,7 @@ android.app.Activity#onDestroy}.</p> @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd index 2eba37729485..1c00d9917296 100644 --- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Esta lição ensina a</h2> <ol> <li><a href="#Stop">Interromper sua atividade</a></li> <li><a href="#Start">Iniciar/reiniciar sua atividade</a></li> </ol> - + <h2>Leia também</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Atividades</a> @@ -152,13 +152,13 @@ os recursos do sistema exigidos estão habilitados:</p> @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd b/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd index 37d0d432473c..68b55187ea71 100644 --- a/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd +++ b/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd @@ -118,12 +118,12 @@ ao aplicativo. Seus dados estão protegidos porque, por padrão, essa área não pode ser acessada por outros aplicativos.</p> <p>Um conjunto de APIs está disponÃvel na classe {@link -android.database.sqlite.SQLiteOpenHelper}. +android.database.sqlite.SQLiteOpenHelper}. Ao usar esta classe para obter referências para seu banco de dados, o sistema realiza operações de possÃvel longa execução para criar e atualizar o banco de dados apenas quando -necessário e <em>não durante a inicialização do aplicativo</em>. Basta chamar -{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ou +necessário e <em>não durante a inicialização do aplicativo</em>. Basta chamar +{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ou {@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p> <p class="note"><strong>Observação:</strong> devido à possibilidade de serem de longa execução, diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd index f3b3b12c591a..596f35cfb91f 100644 --- a/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd +++ b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd @@ -154,7 +154,7 @@ android.content.Intent} utilizada para iniciá-la.</p> <p>Quando sua atividade iniciar, chame {@link android.app.Activity#getIntent()} para retomar a {@link android.content.Intent} que iniciou a atividade. Pode-se fazer isso a qualquer momento durante -o ciclo de vida da atividade, mas recomenda-se fazê-lo no inÃcio do retorno de chamada como +o ciclo de vida da atividade, mas recomenda-se fazê-lo no inÃcio do retorno de chamada como {@link android.app.Activity#onCreate onCreate()} ou {@link android.app.Activity#onStart()}.</p> <p>Por exemplo:</p> diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/result.jd b/docs/html-intl/intl/pt-br/training/basics/intents/result.jd index ecb5a47480a0..abb880b0161b 100644 --- a/docs/html-intl/intl/pt-br/training/basics/intents/result.jd +++ b/docs/html-intl/intl/pt-br/training/basics/intents/result.jd @@ -29,7 +29,7 @@ receber um resultado de volta. Para receber um resultado, chame {@link android.a startActivityForResult()} (em vez de {@link android.app.Activity#startActivity startActivity()}).</p> -<p>Por exemplo, o aplicativo pode iniciar um aplicativo de câmera e receber a foto capturada como resultado. Ou, +<p>Por exemplo, o aplicativo pode iniciar um aplicativo de câmera e receber a foto capturada como resultado. Ou, ao iniciar o aplicativo Pessoas para que o usuário selecione um contato, você receberá os detalhes do contato como resultado.</p> @@ -104,7 +104,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { aplicativos Contatos ou Pessoas do Android fornece um conteúdo {@link android.net.Uri} que identifica o contato escolhido pelo usuário.</p> -<p>Para que o resultado seja tratado de forma adequada, é preciso saber o formato do resultado +<p>Para que o resultado seja tratado de forma adequada, é preciso saber o formato do resultado {@link android.content.Intent}. Isso é fácil quando umas das suas atividades retorna o resultado. Os aplicativos incluÃdos na plataforma Android oferecem suas próprias APIs que podem ser usadas para dados de resultado especÃficos. Por exemplo, o aplicativo Pessoas (Contatos em algumas versões mais @@ -155,7 +155,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { <p class="note"><strong>Observação:</strong> antes do Android 2.3 (API nÃvel 9), executar uma consulta no {@link android.provider.ContactsContract.Contacts Contacts Provider} (como mostrado acima) exige que o aplicativo declare a permissão {@link -android.Manifest.permission#READ_CONTACTS} (consulte <a href="{@docRoot}guide/topics/security/security.html">Segurança e permissões</a>). Contudo, +android.Manifest.permission#READ_CONTACTS} (consulte <a href="{@docRoot}guide/topics/security/security.html">Segurança e permissões</a>). Contudo, iniciar com Android 2.3, o aplicativo Contatos/Pessoas dá ao aplicativo permissão temporária para ler no Provedor de Contatos quando retornar um resultado. A permissão temporária aplica-se apenas a pedidos de contato especÃficos, portanto, não é possÃvel consultar um contato diferente daquele diff --git a/docs/html-intl/intl/pt-br/training/material/drawables.jd b/docs/html-intl/intl/pt-br/training/material/drawables.jd index 4eb9f3602037..900fbb19d3a1 100644 --- a/docs/html-intl/intl/pt-br/training/material/drawables.jd +++ b/docs/html-intl/intl/pt-br/training/material/drawables.jd @@ -38,7 +38,7 @@ somente uma vez e colore-os automaticamente para combinar com seu tema.</p> <p>Você pode aplicar um tingimento aos objetos {@link android.graphics.drawable.BitmapDrawable} ou {@link android.graphics.drawable.NinePatchDrawable} com o método {@code setTint()}. Você também -pode configurar a cor e o modo do tingimento nos layouts com os atributos <code>android:tint</code> e +pode configurar a cor e o modo do tingimento nos layouts com os atributos <code>android:tint</code> e <code>android:tintMode</code>.</p> diff --git a/docs/html-intl/intl/ru/about/versions/android-5.0.jd b/docs/html-intl/intl/ru/about/versions/android-5.0.jd index 5dbbac85db47..826725265d20 100644 --- a/docs/html-intl/intl/ru/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/ru/about/versions/android-5.0.jd @@ -429,7 +429,7 @@ sdk.platform.apiLevel=21 <p>При обнаружении подходÑщей Ñети ÑиÑтема подключаетÑÑ Ðº ней и отправлÑет ответ {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()}. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений о Ñети можно иÑпользовать объект {@link android.net.Network} в ответе. Он же применÑетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ñ„Ð¸ÐºÐ° в выбранную Ñеть.</p> <h3 id="BluetoothBroadcasting">ÐизкоÑнергетичеÑкий Bluetooth</h3> -<p>Ð’ Android верÑии 4.3 была предÑтавлена поддержка <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">низкоÑнергетичеÑкого Bluetooth</a> (<em>Bluetooth LE</em>) как оÑновного ÑпоÑоба передачи данных. УÑтройÑтво на Android 5.0 может быть <em>периферийным</em> Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Bluetooth низкой мощноÑти. Ðта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет приложениÑм ÑвÑзыватьÑÑ Ñ ÑƒÑтройÑтвами, раÑположенными неподалеку. Ðапример, ваше приложение может работать как шагомер или отÑлеживать иные показатели, Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ñ Ð´Ð°Ð½Ð½Ñ‹Ðµ на другое близко раÑположенное уÑтройÑтво по Ñети Bluetooth.</p> +<p>Ð’ Android верÑии 4.3 была предÑтавлена поддержка <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">низкоÑнергетичеÑкого Bluetooth</a> (<em>Bluetooth LE</em>) как оÑновного ÑпоÑоба передачи данных. УÑтройÑтво на Android 5.0 может быть <em>периферийным</em> Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Bluetooth низкой мощноÑти. Ðта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет приложениÑм ÑвÑзыватьÑÑ Ñ ÑƒÑтройÑтвами, раÑположенными неподалеку. Ðапример, ваше приложение может работать как шагомер или отÑлеживать иные показатели, Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ñ Ð´Ð°Ð½Ð½Ñ‹Ðµ на другое близко раÑположенное уÑтройÑтво по Ñети Bluetooth.</p> <p>Ðовый API {@link android.bluetooth.le} позволÑет приложениÑм передавать рекламу, получать отчеты и уÑтанавливать ÑвÑзь Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ уÑтройÑтвами, поддерживающими Bluetooth LE. Чтобы воÑпользоватьÑÑ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ функциÑми, добавьте в манифеÑÑ‚ разрешение {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN}. Ð¡ÐºÐ°Ñ‡Ð¸Ð²Ð°Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ или Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ в Google Play, пользователи должны дать разрешение на Ñбор данных о Bluetooth, управление Ñтой функцией, а также на обмен информацией Ñ ÑƒÑтройÑтвами по ÑоÑедÑтву.</p> <p>Чтобы начать передачу рекламы по Bluetooth LE на другие уÑтройÑтва, вызовите {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} и передайте данные о внедрении клаÑÑа {@link android.bluetooth.le.AdvertiseCallback}. Объект обратного вызова получает отчет об уÑпешном или неуÑпешном показе рекламы.</p> diff --git a/docs/html-intl/intl/ru/design/get-started/principles.jd b/docs/html-intl/intl/ru/design/get-started/principles.jd index 7e4ea1214b9f..4eb0f5d797e9 100644 --- a/docs/html-intl/intl/ru/design/get-started/principles.jd +++ b/docs/html-intl/intl/ru/design/get-started/principles.jd @@ -260,7 +260,7 @@ page.title=Принципы Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Android <div class="col-7"> <h4 id="sprinkle-encouragement">Ðе ÑкупитеÑÑŒ на поддержку пользователÑ</h4> -<p>Разбейте Ñложные задачи на более мелкие, легко выполнимые Ñтапы. ОбеÑпечьте обратную ÑвÑзь, +<p>Разбейте Ñложные задачи на более мелкие, легко выполнимые Ñтапы. ОбеÑпечьте обратную ÑвÑзь, даже при незначительных операциÑÑ….</p> </div> @@ -295,7 +295,7 @@ page.title=Принципы Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Android <div class="col-7"> <h4 id="make-important-things-fast">Важные дейÑÑ‚Ð²Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ проиÑходить быÑтро</h4> -<p>Ðе вÑе дейÑÑ‚Ð²Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹. Решите, какие функции вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ñамыми важными, и обеÑпечьте возможноÑть +<p>Ðе вÑе дейÑÑ‚Ð²Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹. Решите, какие функции вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ñамыми важными, и обеÑпечьте возможноÑть быÑтро найти и иÑпользовать их. Ðапример, Ñто может быть кнопка ÑпуÑка затвора в фотокамере или кнопка паузы в музыкальном плеере.</p> </div> diff --git a/docs/html-intl/intl/ru/design/material/index.jd b/docs/html-intl/intl/ru/design/material/index.jd index da0352a10ef6..f585a0df5c4a 100644 --- a/docs/html-intl/intl/ru/design/material/index.jd +++ b/docs/html-intl/intl/ru/design/material/index.jd @@ -165,7 +165,7 @@ Z. Ðто новое ÑвойÑтво показывает, наÑколько Ð <p>ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ°ÐºÑ†Ð¸Ð¸ на каÑание вÑтроена в некоторые Ñтандартные предÑтавлениÑ, например кнопки. Ðовые API-интерфейÑÑ‹ позволÑÑŽÑ‚ разработчику наÑтраивать Ñти анимации и добавлÑть их в Ñвои неÑтандартные предÑтавлениÑ.</p> -<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе <a href="{@docRoot}training/material/animations.html">Определение наÑтраиваемой +<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе <a href="{@docRoot}training/material/animations.html">Определение наÑтраиваемой анимации</a>.</p> @@ -182,5 +182,5 @@ Z. Ðто новое ÑвойÑтво показывает, наÑколько РраÑтровых изображений.</li> </ul> -<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе <a href="{@docRoot}training/material/drawables.html">Работа Ñ +<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе <a href="{@docRoot}training/material/drawables.html">Работа Ñ Ñлементами дизайна</a>.</p> diff --git a/docs/html-intl/intl/ru/design/patterns/navigation.jd b/docs/html-intl/intl/ru/design/patterns/navigation.jd index 3a0fc6eb31e1..817ec33f7686 100644 --- a/docs/html-intl/intl/ru/design/patterns/navigation.jd +++ b/docs/html-intl/intl/ru/design/patterns/navigation.jd @@ -15,7 +15,7 @@ page.image=/design/media/navigation_between_siblings_gmail.png глобальное поведение навигации претерпело значительные изменениÑ. Тщательное Ñледование инÑтрукциÑм по применению кнопок "Ðазад" и "Вверх" Ñделает навигацию в вашем приложении предÑказуемой и надежной Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹.</p> <p>Ð’ Android 2.3 и в более ранних верÑиÑÑ… Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸ внутри Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑпользовалаÑÑŒ ÑиÑÑ‚ÐµÐ¼Ð½Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° <em>Ðазад</em>. - С поÑвлением панели дейÑтвий в Android 3.0 Ñтал доÑтупен второй механизм + С поÑвлением панели дейÑтвий в Android 3.0 Ñтал доÑтупен второй механизм навигации – кнопка <em>Вверх</em>, ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ñ‰Ð°Ñ Ð·Ð½Ð°Ñ‡Ð¾Ðº Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ левую угловую Ñкобку.</p> <img src="{@docRoot}design/media/navigation_with_back_and_up.png"> @@ -33,7 +33,7 @@ page.image=/design/media/navigation_between_siblings_gmail.png Ñкранов, недавно открытых пользователем. Ð¢Ð°ÐºÐ°Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¾Ñнована на порÑдке поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñкранов, а не на иерархии приложениÑ.</p> -<p>ЕÑли предыдущий Ñкран одновременно ÑвлÑетÑÑ Ð¸ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ‡ÐµÑким родителем текущего, +<p>ЕÑли предыдущий Ñкран одновременно ÑвлÑетÑÑ Ð¸ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ‡ÐµÑким родителем текущего, кнопка "Ðазад" имеет то же дейÑтвие, что и кнопка "Вверх", — и Ñто ÑлучаетÑÑ Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾ чаÑто. Однако, в отличие от кнопки "Вверх", гарантирующей, что пользователь оÑтаетÑÑ Ð² приложении, кнопка "Ðазад" может перевеÑти его на главный Ñкран или даже в другое приложение.</p> @@ -98,12 +98,12 @@ page.image=/design/media/navigation_between_siblings_gmail.png <p>Ð’ обоих Ñтих ÑлучаÑÑ… реализуйте Ñледующее поведение кнопки "Вверх":</p> <ul> -<li><em>ЕÑли целевой Ñкран, как правило, доÑтигаетÑÑ Ð¸Ð· одного конкретного Ñкрана +<li><em>ЕÑли целевой Ñкран, как правило, доÑтигаетÑÑ Ð¸Ð· одного конкретного Ñкрана приложениÑ</em>, кнопка "Вверх" должна оÑущеÑтвлÑть переход на Ñтот Ñкран.</li> <li><em>Ð’ противном Ñлучае</em> кнопка "Вверх" должна оÑущеÑтвлÑть переход на Ñамый верхний (главный) Ñкран приложениÑ.</li> </ul> -<p>Что каÑаетÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ "Ðазад", необходимо обеÑпечить более предÑказуемую навигацию, вÑтавив в +<p>Что каÑаетÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ "Ðазад", необходимо обеÑпечить более предÑказуемую навигацию, вÑтавив в Ñтек переходов назад полный путь навигации вверх к Ñамому верхнему Ñкрану приложениÑ. Ðто позволит пользователÑм, забывшим, как они вошли в приложение, перейти к его главному Ñкрану перед выходом из приложениÑ.</p> @@ -139,7 +139,7 @@ page.image=/design/media/navigation_between_siblings_gmail.png <p><em>Ð’Ñплывающие уведомлениÑ</em> поÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенно перед пользователем, в обход панели уведомлений. Они иÑпользуютÑÑ Ñ€ÐµÐ´ÐºÐ¾ и <strong>должны быть зарезервированы Ð´Ð»Ñ Ñитуаций, в которых требуетÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ -Ñ€ÐµÐ°ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, и прерывание его дейÑтвий оправдано</strong>. Ðапример, +Ñ€ÐµÐ°ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, и прерывание его дейÑтвий оправдано</strong>. Ðапример, приложение Talk Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ таких уведомлений извещает Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾ поÑтупившем от друга приглашении приÑоединитьÑÑ Ðº видеочату, поÑкольку Ñрок дейÑÑ‚Ð²Ð¸Ñ Ñтого Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¸Ñтекает через неÑколько Ñекунд.</p> @@ -153,7 +153,7 @@ page.image=/design/media/navigation_between_siblings_gmail.png <h2 id="between-apps">ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ приложениÑми</h2> <p>Одним из фундаментальных доÑтоинÑтв ÑиÑтемы Android ÑвлÑетÑÑ ÑпоÑобноÑть взаимного запуÑка приложений, -что дает пользователю возможноÑть переходить непоÑредÑтвенно из одного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² другое. Ðапример, +что дает пользователю возможноÑть переходить непоÑредÑтвенно из одного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² другое. Ðапример, приложение, которому нужно Ñделать Ñнимок, может активировать приложение Camera, которое передаÑÑ‚ фотографию вызвавшему его приложению. Ðто огромное преимущеÑтво как Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ°, имеющего возможноÑть без проблем воÑпользоватьÑÑ ÐºÐ¾Ð´Ð¾Ð¼ других приложений, так и Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, получающего ÑоглаÑованный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ Ñ‡Ð°Ñто выполнÑемых @@ -182,7 +182,7 @@ page.image=/design/media/navigation_between_siblings_gmail.png <p>Чтобы понÑть, как дейÑтвиÑ, задачи и Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹Ñтвуют друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼, разберемÑÑ, как одно приложение позволÑет пользователÑм поделитьÑÑ Ñодержимым Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ другого приложениÑ. Ðапример, при запуÑке Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Play Store Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ Ñкрана ÑоздаетÑÑ Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°, Task A (Ñм. риÑунок ниже). Когда пользователь выполнит навигацию по Play Store и коÑнетÑÑ Ð¸Ð½Ñ‚ÐµÑ€ÐµÑующей его книги, -чтобы проÑмотреть информацию о ней, он оÑтаетÑÑ Ð² той же задаче, раÑширÑÑ ÐµÐµ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ добавленных дейÑтвий. ЗапуÑк +чтобы проÑмотреть информацию о ней, он оÑтаетÑÑ Ð² той же задаче, раÑширÑÑ ÐµÐµ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ добавленных дейÑтвий. ЗапуÑк дейÑÑ‚Ð²Ð¸Ñ "ПоделитьÑÑ" выводит перед пользователем диалоговое окно Ñо ÑпиÑком дейÑтвий (из разных приложений), зарегиÑтрированных Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ "ПоделитьÑÑ".</p> @@ -198,16 +198,16 @@ Store, пока, наконец, не вернетÑÑ Ð½Ð° главный ÑÐºÑ <img src="{@docRoot}design/media/navigation_between_apps_back.png"> -<p>Однако, коÑнувшиÑÑŒ кнопки "Вверх" во Ð²Ñ€ÐµÐ¼Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ "СоÑтавление ÑообщениÑ", пользователь выÑкажет пожелание оÑтатьÑÑ Ð² приложении +<p>Однако, коÑнувшиÑÑŒ кнопки "Вверх" во Ð²Ñ€ÐµÐ¼Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ "СоÑтавление ÑообщениÑ", пользователь выÑкажет пожелание оÑтатьÑÑ Ð² приложении Gmail. ОткроетÑÑ Ñкран дейÑÑ‚Ð²Ð¸Ñ "ПерепиÑка" Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Gmail, и Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ будет Ñоздана Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Task B. Ðовые задачи вÑегда имеют корень на главном Ñкране, поÑтому каÑание кнопки "Ðазад" на Ñкране перепиÑки возвращает Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ туда.</p> <img src="{@docRoot}design/media/navigation_between_apps_up.png"> -<p>Задача Task A оÑтаетÑÑ Ð² фоновом режиме, и пользователь может вернутьÑÑ Ðº ней впоÑледÑтвии (например, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ +<p>Задача Task A оÑтаетÑÑ Ð² фоновом режиме, и пользователь может вернутьÑÑ Ðº ней впоÑледÑтвии (например, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñкрана Ñ Ð¿Ð¾Ñледними приложениÑми). ЕÑли в фоновом режиме уже работает ÑобÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Gmail, она будет замещена задачей Task B. Произойдет отказ от предыдущего контекÑта ради новой цели пользователÑ.</p> <p>ЕÑли Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ намерений ваше приложение зарегиÑтрирует дейÑтвие, раÑположенное в глубине Ñвоей иерархии, -Ñледуйте инÑтрукциÑм по реализации навигации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки "Вверх", изложенным в разделе <a href="#into-your-app">ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ виджетов и +Ñледуйте инÑтрукциÑм по реализации навигации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки "Вверх", изложенным в разделе <a href="#into-your-app">ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ виджетов и уведомлений главного Ñкрана</a>.</p> diff --git a/docs/html-intl/intl/ru/design/patterns/notifications.jd b/docs/html-intl/intl/ru/design/patterns/notifications.jd index db46ad5051a2..4d339c29258d 100644 --- a/docs/html-intl/intl/ru/design/patterns/notifications.jd +++ b/docs/html-intl/intl/ru/design/patterns/notifications.jd @@ -103,15 +103,15 @@ Android можно найти в разделе <p>Разработчик может выбрать Ñтепень подробноÑти уведомлений, генерируемых его приложением. Уведомление может Ñодержать первые неÑколько Ñтрок ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ миниатюру изображениÑ. Ð’ качеÑтве дополнительной -информации можно предоÑтавлÑть пользователю +информации можно предоÑтавлÑть пользователю контекÑÑ‚ и, —в некоторых ÑлучаÑÑ…, —давать ему возможноÑть прочитать Ñообщение целиком. Чтобы переключатьÑÑ Ð¼ÐµÐ¶Ð´Ñƒ компактной и раÑширенной компоновкой, пользователь может применить жеÑÑ‚ ÑжатиÑ/маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ провеÑти пальцем по Ñкрану. Ð”Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹ о единичных ÑобытиÑÑ… Android предоÑтавлÑет - разработчику Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð¸ шаблона раÑширенной компоновки + разработчику Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð¸ шаблона раÑширенной компоновки (текÑÑ‚, входÑÑ‰Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° и изображениÑ). Ðиже приведены Ñкриншоты уведомлений о единичных -ÑобытиÑÑ… на мобильных уÑтройÑтвах (Ñлева) +ÑобытиÑÑ… на мобильных уÑтройÑтвах (Ñлева) и на ноÑимых уÑтройÑтвах (Ñправа).</p> <img style="margin-top:30px" @@ -158,7 +158,7 @@ src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" <ul> <li> неоднозначных; - <li> Ñовпадающих Ñ Ð´ÐµÐ¹ÑтвиÑми, выполнÑемыми Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию (например, "Прочитать" или + <li> Ñовпадающих Ñ Ð´ÐµÐ¹ÑтвиÑми, выполнÑемыми Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию (например, "Прочитать" или "Открыть"). </ul> @@ -189,7 +189,7 @@ src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" отображаетÑÑ Ð² раÑширенной компоновке, позволÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ допуÑтимые дейÑтвиÑ.</p> <p> Затем уведомление принимает обычный -вид. ЕÑли Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÑƒÑтановлен выÑокий, макÑимальный или полноÑкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a> +вид. ЕÑли Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÑƒÑтановлен выÑокий, макÑимальный или полноÑкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a> , оно ÑтановитÑÑ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ heads-up.</p> <p><b>Хорошими примерами Ñобытий Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹ heads-up ÑвлÑÑŽÑ‚ÑÑ</b></p> @@ -232,15 +232,15 @@ src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" Ñокращенное предÑтавление, еÑли накопилоÑÑŒ неÑколько уведомлений. ЕÑли приложение переводит Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° какой-либо уровень, отличный от верхнего, реализуйте навигацию в Ñтеке переходов назад в приложении, чтобы пользователь мог нажать ÑиÑтемную кнопку "Ðазад" и вернутьÑÑ Ð½Ð° верхний уровень. Дополнительную информацию можно найти в разделе -<em>ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ виджетов и уведомлений главного Ñкрана</em> в шаблоне Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +<em>ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ виджетов и уведомлений главного Ñкрана</em> в шаблоне Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <a href="{@docRoot}design/patterns/navigation.html#into-your-app">ÐавигациÑ</a>.</p> -<h3 id="correctly_set_and_manage_notification_priority">Правильно выполнÑйте раÑÑтановку приоритетов уведомлений и +<h3 id="correctly_set_and_manage_notification_priority">Правильно выполнÑйте раÑÑтановку приоритетов уведомлений и управление ими </h3> <p>Android поддерживает флаг приоритета Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹. Ðто флаг позволÑет -влиÑть на позицию ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñреди других уведомлений и +влиÑть на позицию ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñреди других уведомлений и гарантировать, что пользователь в первую очередь увидит Ñамые важные уведомлениÑ. При отправке ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выбрать один из @@ -315,7 +315,7 @@ src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" подходÑщий приоритет</strong></h4> -<p>При выдаче уведомлений Ñ Ð¿Ñ€Ð¸Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð°Ð¼Ð¸ <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> ÑущеÑтвует риÑк, что деÑтельноÑть +<p>При выдаче уведомлений Ñ Ð¿Ñ€Ð¸Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð°Ð¼Ð¸ <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> ÑущеÑтвует риÑк, что деÑтельноÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ прервана в Ñамом разгаре. Чтобы не раздражать пользователей вашего приложениÑ, применÑйте приоритеты Ñтих уровней Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹,</p> @@ -359,7 +359,7 @@ src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> </td> <td> -<p>ВходÑщий звонок (голоÑовой или по видеоÑвÑзи) или алогичный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñинхронной +<p>ВходÑщий звонок (голоÑовой или по видеоÑвÑзи) или алогичный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñинхронной ÑвÑзи</p> </td> </tr> @@ -568,7 +568,7 @@ href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS< предÑтавлÑть Ñобой изображение белого цвета на прозрачном фоне.</p> -<h3 id="pulse_the_notification_led_appropriately">Правильно иÑпользуйте индикатор +<h3 id="pulse_the_notification_led_appropriately">Правильно иÑпользуйте индикатор уведомлений</h3> <p>Ðа многих уÑтройÑтвах Android имеетÑÑ Ñветодиодный индикатор уведомлений, @@ -579,7 +579,7 @@ href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS< <code>MIN</code>) не должны.</p> <p>ВозможноÑти Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñть уведомлениÑми должны раÑпроÑтранÑтьÑÑ Ð½Ð° Ñветодиодный индикатор. Когда разработчик иÑпользует -DEFAULT_LIGHTS, +DEFAULT_LIGHTS, индикатор ÑветитÑÑ Ð±ÐµÐ»Ñ‹Ð¼ цветом. Ваши ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ должны вызывать Ñвечение другим цветом, еÑли пользователь не указал Ñтого Ñвным образом.</p> @@ -658,7 +658,7 @@ Android была разработана <li> Ðе отвлекайте пользователÑ, чтобы проинформировать его об ошибке, еÑли приложение может воÑÑтановитьÑÑ Ð¿Ð¾Ñле нее ÑамоÑтоÑтельно, не Ñ‚Ñ€ÐµÐ±ÑƒÑ Ð¾Ñ‚ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ… дейÑтвий.</li> - <li> Ðе Ñоздавайте уведомлениÑ, не имеющие оÑмыÑленного Ñодержимого и + <li> Ðе Ñоздавайте уведомлениÑ, не имеющие оÑмыÑленного Ñодержимого и вÑего лишь рекламирующие ваше приложение. Уведомление должно неÑти полезную, актуальную и новую информацию. Ðе Ñледует иÑпользовать его @@ -787,7 +787,7 @@ id="dialogs_and_toasts_are_for_feedback_not_notification">Диалоговые Рчтобы конфиденциальные данные не отображалиÑÑŒ на защищенном Ñкране блокировки. Ð’ Ñтом Ñлучае ÑиÑтемный пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑƒÑ‡Ð¸Ñ‚Ñ‹Ð²Ð°ÐµÑ‚ <em>уровень видимоÑти</em> уведомлениÑ, чтобы выÑÑнить, какую информацию можно отображать без риÑка.</p> -<p> Чтобы уÑтановить уровень видимоÑти, вызовите +<p> Чтобы уÑтановить уровень видимоÑти, вызовите <code><a href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code> и укажите одно из Ñледующих значений:</p> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/about.jd b/docs/html-intl/intl/ru/distribute/googleplay/about.jd index d5eaafe4eee8..1c2bc96b2ec2 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body - <div id="qv-wrapper"> + <div id="qv-wrapper"> <div id="qv"> <h2>О Google Play</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/auto.jd b/docs/html-intl/intl/ru/distribute/googleplay/auto.jd index 3fc82dd510b3..3550b36183af 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/auto.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/auto.jd @@ -133,7 +133,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <ul> <li>Ð’ манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть декларирована запиÑÑŒ метаданных <code>com.google.android.gms.car.application</code> Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ возможноÑÑ‚Ñми автомобилÑ, иÑпользуемыми приложением. Чтобы получить более подробную информацию - о конфигурации Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Android Auto, Ñм. + о конфигурации Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Android Auto, Ñм. <a href="{@docRoot}training/auto/start/index.html#auto-metadata">Ðачало работы Ñ Android Auto</a>. </li> </ul> @@ -152,7 +152,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐŸÐ¾Ñле принÑÑ‚Ð¸Ñ ÑƒÑловий и ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ вы можете загрузить и опубликовать Ñвое приложение в обычном порÑдке. Перед тем, как открыть доÑтуп к приложению пользователÑм Android Auto, Google Play передает приложение на проверку его ÑоответÑÑ‚Ð²Ð¸Ñ ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ñм <a href="{@docRoot}distribute/essentials/quality/auto.html">качеÑтва автоприложений</a> -и уведомлÑет о ее результатах. ЕÑли приложение было одобрено, Google Play делает его +и уведомлÑет о ее результатах. ЕÑли приложение было одобрено, Google Play делает его доÑтупным пользователÑм Android Auto. ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, как отÑлеживать ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, приведена в Ñледующем разделе. </p> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd index cb62c2f3d4a4..7510202ed4ba 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd @@ -4,8 +4,8 @@ page.image=/distribute/images/developer-console.jpg Xnonavpage=true @jd:body - - <div id="qv-wrapper"> + + <div id="qv-wrapper"> <div id="qv"> <h2>ВозможноÑти Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ приложений</h2> <ol> @@ -204,7 +204,7 @@ Xnonavpage=true <p> Ð’ Ñлучае Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ или иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ обновленный двоичный файл можно опубликовать в любое времÑ. ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñразу же ÑтановитÑÑ Ð´Ð¾Ñтупной, а ÑущеÑтвующие пользователи - получают уведомление о готовом к загрузке обновлении. Пользователи также могут + получают уведомление о готовом к загрузке обновлении. Пользователи также могут принимать автоматичеÑкие Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, которые будут передаватьÑÑ Ð¸ уÑтанавливатьÑÑ Ñразу поÑле публикации. Ð’Ñ‹ можете отменить публикацию Ñвоих приложений в любое времÑ. @@ -441,7 +441,7 @@ Xnonavpage=true <p> УправлÑйте раÑпроÑтранением Ñвоих приложений по Ñтранам и регионам. Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñтран можно указать операторов мобильной ÑвÑзи, на которых будут нацелены ваши продажи. Ð’Ñ‹ также можете проÑмотреть - ÑпиÑок уÑтройÑтв, которым доÑтупно ваше приложение, ÑоÑтавленный на оÑновании правил раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ + ÑпиÑок уÑтройÑтв, которым доÑтупно ваше приложение, ÑоÑтавленный на оÑновании правил раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð· файла манифеÑта приложениÑ. </p> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd index 955110803680..664539fa4558 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=ВопроÑÑ‹ и ответы по программе Дл font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>Содержание документа</h2> @@ -141,7 +141,7 @@ page.metaDescription=ВопроÑÑ‹ и ответы по программе Дл приложение Ñемейным пользователÑм. ЕÑли приложение удовлетворÑет вÑем требованиÑм программы, Ñрок его публикации будет не больше обычного. Однако еÑли в процеÑÑе проверки приложение было отклонено, Ñрок его публикации - задержитÑÑ. + задержитÑÑ. </dd> <dt> @@ -281,7 +281,7 @@ page.metaDescription=ВопроÑÑ‹ и ответы по программе Дл за Ñобой право отклонÑть приложениÑ, иÑпользующие излишне агреÑÑивные коммерчеÑкие методы. Продажа контента во вÑех приложениÑÑ… программы "Ð”Ð»Ñ Ð²Ñей Ñемьи", предназначенных в оÑновном Ð´Ð»Ñ Ð´ÐµÑ‚Ñкой аудитории, будет защищена паролем, чтобы покупки подтверждалиÑÑŒ - родителÑми, а не детьми. Следует отметить, что Ñта защита не раÑпроÑтранÑетÑÑ Ð½Ð° приложениÑ, + родителÑми, а не детьми. Следует отметить, что Ñта защита не раÑпроÑтранÑетÑÑ Ð½Ð° приложениÑ, предназначенные Ð´Ð»Ñ Ð¾Ð±Ñ‰ÐµÐ¹ аудитории. </dd> </dl> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd index fcb0d34cd35e..927473200b2c 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd @@ -78,7 +78,7 @@ Google Play. <p class="note"> <strong>Примечание</strong>. Опубликованные в рамках программы "Ð”Ð»Ñ Ð²Ñей Ñемьи" Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¶Ðµ доÑтупны Ð´Ð»Ñ - вÑех пользователей Google Play. + вÑех пользователей Google Play. </p> <p> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd index ca1b67154794..8af9d91220ad 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd @@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">СоответÑтвие требованиÑм Google Play</a></li> </ol> - + <h2>ТеÑтирование</h2> <ol> <li><a href="#test-environment">ÐаÑтройка Ñреды теÑтированиÑ</a></li> @@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">КачеÑтво приложений Ð´Ð»Ñ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚Ð½Ñ‹Ñ… ПК</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹</a></li> </ol> - + </div> </div> @@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ИД </th> - + <th> ОпиÑание @@ -182,7 +182,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg </td> <td> <p style="margin-bottom:.5em;"> - Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ ÑоответÑтвовать <a href="{@docRoot}design/patterns/notifications.html">рекомендациÑм</a> по дизайну Android. Ð’ + Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ ÑоответÑтвовать <a href="{@docRoot}design/patterns/notifications.html">рекомендациÑм</a> по дизайну Android. Ð’ чаÑтноÑти, должны быть Ñоблюдены Ñледующие правила. </p> @@ -290,7 +290,7 @@ data-maxresults="6"> <td> <p style="margin-bottom:.5em;"> Приложение не запрашивает прав доÑтупа к наиболее важным данным (например, - к контактам или ÑиÑтемному журналу), а также к платным ÑервиÑам + к контактам или ÑиÑтемному журналу), а также к платным ÑервиÑам (например, Ñлужбам дозвона или отправки СМС), еÑли Ñто не ÑвÑзано Ñ Ð¾Ñновной функциональноÑтью данного приложениÑ. </p> @@ -311,7 +311,7 @@ data-maxresults="6"> <p style="margin-bottom:.25em;"> Поддержка уÑтановки на SD-карту рекомендована Ð´Ð»Ñ Ð²Ñех больших приложений - (превышающих 10 МБ). См. в руководÑтве разработчика в разделе <a href="{@docRoot}guide/topics/data/install-location.html">МеÑто + (превышающих 10 МБ). См. в руководÑтве разработчика в разделе <a href="{@docRoot}guide/topics/data/install-location.html">МеÑто уÑтановки приложениÑ</a> информацию о том, какие типы приложений должны поддерживать уÑтановку на SD-карты. </p> @@ -490,7 +490,7 @@ data-maxresults="6"> его ÑоÑтоÑние должно быть воÑÑтановлено макÑимально близко к предыдущему ÑоÑтоÑнию. </li> - <li>При нажатии кнопки "Ðазад" приложение позволÑет Ñохранить Ñвое текущее ÑоÑтоÑние или + <li>При нажатии кнопки "Ðазад" приложение позволÑет Ñохранить Ñвое текущее ÑоÑтоÑние или ÑоÑтоÑние пользователÑ, которое в противном Ñлучае будет потерÑно при переходе назад. </li> </ol> @@ -1048,8 +1048,8 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6"> </p> <p style="margin-bottom:.25em;"> - Чтобы принудительно задейÑтвовать аппаратное уÑкорение (еÑли оно поддерживаетÑÑ - уÑтройÑтвом), добавьте параметр <code>hardware-accelerated="true"</code> к разделу + Чтобы принудительно задейÑтвовать аппаратное уÑкорение (еÑли оно поддерживаетÑÑ + уÑтройÑтвом), добавьте параметр <code>hardware-accelerated="true"</code> к разделу <code><application></code> в манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ выполните его повторную компилÑцию. </p> </td> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd index 4e0322f71b67..4c25d8875be4 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd @@ -56,7 +56,7 @@ Xnonavpage=true <p>Первым шагом к Ñозданию хорошего планшетного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ Ñоблюдение <em>оÑновных критериев качеÑтва</em> Ð´Ð»Ñ Ð²Ñех уÑтройÑтв - и форм-факторов, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… предназначаетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ. Полную информацию об Ñтом Ñм. в руководÑтве <a href="{@docRoot}distribute/essentials/quality/core.html">ОÑновные критерии качеÑтва приложений</a>. + и форм-факторов, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… предназначаетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ. Полную информацию об Ñтом Ñм. в руководÑтве <a href="{@docRoot}distribute/essentials/quality/core.html">ОÑновные критерии качеÑтва приложений</a>. </p> <p> @@ -174,7 +174,7 @@ style="font-weight:500;">Макеты Ñ Ð½ÐµÑколькими панелÑми <p>Планшеты обеÑпечивают значительно больше полезной площади Ñкрана Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ приложениÑ, оÑобенно в альбомной ориентации. ОÑобенно Ñтот прироÑÑ‚ заметен на 10-дюймовых планшетах, но даже 7-дюмовые - планшеты добавлÑÑŽÑ‚ значительное количеÑтво меÑта Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð° + планшеты добавлÑÑŽÑ‚ значительное количеÑтво меÑта Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð° и Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹. </p> <p>ÐŸÐ»Ð°Ð½Ð¸Ñ€ÑƒÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ на планшетах, убедитеÑÑŒ, что в нем будут @@ -196,20 +196,20 @@ style="font-weight:500;">Макеты Ñ Ð½ÐµÑколькими панелÑми <img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle"> <img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;"> <p class="image-caption" style="padding:.5em"><span -style="font-weight:500;">СоÑтавные предÑтавлениÑ</span> объединÑÑŽÑ‚ неÑколько проÑтых предÑтавлений из +style="font-weight:500;">СоÑтавные предÑтавлениÑ</span> объединÑÑŽÑ‚ неÑколько проÑтых предÑтавлений из интерфейÑа Ð´Ð»Ñ Ñмартфонов<em>(Ñм. верхнюю чаÑть риÑунка)</em> в информативном и более Ñффективном интерфейÑе Ð´Ð»Ñ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚Ð¾Ð² <em>(Ñм. нижнюю чаÑть риÑунка)</em>. </p> </div> </div> -<li>Ð¥Ð¾Ñ‚Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ñкраны реализуютÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ подклаÑÑа {@link android.app.Activity}, +<li>Ð¥Ð¾Ñ‚Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ñкраны реализуютÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ подклаÑÑа {@link android.app.Activity}, ÑтарайтеÑÑŒ реализовать отдельные ÑоÑтавные панели Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ подклаÑÑа {@link android.app.Fragment}. Ðто позволит повыÑить применимоÑть программного кода Ð´Ð»Ñ Ð¸Ñпользующих один и тот же контент Ñкранов, отличающихÑÑ Ñ„Ð¾Ñ€Ð¼-факторами и размерами.</li> <li>Примите решение, Ð´Ð»Ñ ÐºÐ°ÐºÐ¸Ñ… размеров Ñкранов будет иÑпользоватьÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ - неÑколькими панелÑми, а затем предложите разные макеты Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ñ… размеров Ñкранов (например, Ð´Ð»Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¹ -<code>large</code>/<code>xlarge</code>) или Ð´Ð»Ñ Ñкранов Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ шириной (таких, как категории + неÑколькими панелÑми, а затем предложите разные макеты Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ñ… размеров Ñкранов (например, Ð´Ð»Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¹ +<code>large</code>/<code>xlarge</code>) или Ð´Ð»Ñ Ñкранов Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ шириной (таких, как категории <code>sw600dp</code>/<code>sw720</code>).</li> </ul> @@ -496,7 +496,7 @@ android.app.Fragment}. Ðто позволит повыÑить которые <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">подразумевают наличие аппаратных возможноÑтей</a>, не применимых к планшетам. ЕÑли вы обнаружите декларацию таких прав доÑтупа, обÑзательно Ñвным образом задекларируйте ÑоответÑтвующий Ñлемент -<code><uses-feature></code> Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°ÐµÐ¼Ñ‹Ñ… возможноÑтей и включите в него атрибут +<code><uses-feature></code> Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°ÐµÐ¼Ñ‹Ñ… возможноÑтей и включите в него атрибут <code>android:required=â€falseâ€</code>.</li> </ul> @@ -539,11 +539,11 @@ android.app.Fragment}. Ðто позволит повыÑить <code>android:xlargeScreens="true"</code>.</li> </ul> -<p>ЕÑли в манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñлемент +<p>ЕÑли в манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñлемент <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a>, в нем должны быть атрибуты, указывающие <em>вÑе комбинации размеров и разрешений Ð´Ð»Ñ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚Ð½Ñ‹Ñ… Ñкранов</em>, - поддерживаемые приложением. Обратите внимание, что там, где Ñто возможно, вы должны избегать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлемента + поддерживаемые приложением. Обратите внимание, что там, где Ñто возможно, вы должны избегать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлемента <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a> Ð´Ð»Ñ Ñвоего приложениÑ.</p> @@ -804,7 +804,7 @@ android.app.Fragment}. Ðто позволит повыÑить <p> Сравнив <a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">рекомендуемую Ñреду теÑтированиÑ</a> Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ Ñ Ð¾Ñновными критериÑми качеÑтва приложениÑ, - включите в нее планшеты Ñреднего размера и планшеты Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ или меньшим количеÑтвом + включите в нее планшеты Ñреднего размера и планшеты Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ или меньшим количеÑтвом аппаратных или программных функциональных возможноÑтей. </p> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/tv.jd b/docs/html-intl/intl/ru/distribute/googleplay/tv.jd index 31a40ce3ef57..747c6d9b04ca 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/tv.jd @@ -78,7 +78,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <h3 id="develop_app">2. Создайте качеÑтвенное телеприложение</h3> <p> - КачеÑтвенное телеприложение предназначено Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° + КачеÑтвенное телеприложение предназначено Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° телевизионном Ñкране, в нем реализованы возможноÑти Android TV, а также ÑоответÑтвующих уÑтройÑтв ввода: джойÑтиков, навигационных кнопок и пультов диÑтанционного управлениÑ. Ðто приложение тщательно проработано, обладает отлаженным и качеÑтвенным интерфейÑом Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… Ñкранов, предлагает привлекательный Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ @@ -89,7 +89,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐžÐ±Ð´ÑƒÐ¼Ñ‹Ð²Ð°Ñ Ñвое будущее телеприложение, изучите <a href="{@docRoot}training/tv/start/index.html">документацию Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²</a> и рекомендации отноÑительно Ñргономики и поÑтарайтеÑÑŒ макÑимально их придерживатьÑÑ. ПозаботьтеÑÑŒ о макÑимальном удобÑтве работы Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и обеÑпечьте - его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñпециальной библиотеки Leanback, входÑщей в SDK. Возможно, потребуетÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ другие + его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñпециальной библиотеки Leanback, входÑщей в SDK. Возможно, потребуетÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ другие чаÑти вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° телеÑкране, правильно будет определить Ñто в начальной Ñтадии процеÑÑа разработки. </p> @@ -145,7 +145,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <li>ПредуÑмотрите Ñоблюдение критериев <a href="{@docRoot}distribute/essentials/quality/tv.html">КачеÑтва телеприложений</a>. <ul> - <li>ИÑпользуйте передовые + <li>ИÑпользуйте передовые методы <a href="{@docRoot}training/tv/index.html">разработки телеприложений</a>.</li> <li>УбедитеÑÑŒ в том, что приложение ÑоответÑтвует вÑем критериÑм <a href="{@docRoot}distribute/essentials/quality/tv.html">качеÑтва телеприложений</a>.</li> </ul> @@ -181,7 +181,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <ul> <li>Ð’ манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° Intent должен быть уÑтановлен тип <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a> - Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸ÐµÐ¹<a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"> + Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸ÐµÐ¹<a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"> <code>CATEGORY_LEANBACK_LAUNCHER</code></a>. Дополнительную информацию Ñм. <a href="{@docRoot}training/tv/start/start.html#tv-activity">здеÑÑŒ</a>. </li> @@ -261,7 +261,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑоответÑтвует критериÑм, вы получите <strong>уведомление на Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, указанный в учетной запиÑи разработчика</strong>, Ñ Ð¾Ð¿Ð¸Ñанием проблем, которые Ñледует уÑтранить. ПоÑле внеÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ñ… иÑправлений вы можете загрузить новую верÑию Ñвоего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² конÑоль - разработчика. + разработчика. </p> <p> @@ -282,7 +282,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <li> <em>Утверждено</em> – ваше приложение было проверено и утверждено. Приложение - ÑтановитÑÑ Ð´Ð¾Ñтупно пользователÑм программы Android TV. + ÑтановитÑÑ Ð´Ð¾Ñтупно пользователÑм программы Android TV. </li> <li> diff --git a/docs/html-intl/intl/ru/distribute/googleplay/wear.jd b/docs/html-intl/intl/ru/distribute/googleplay/wear.jd index 1c6b2703497b..92744012ce07 100644 --- a/docs/html-intl/intl/ru/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/ru/distribute/googleplay/wear.jd @@ -152,7 +152,7 @@ page.metaDescription=РаÑпроÑтранÑйте Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <p> Создав готовый к выпуÑку пакет APK и проверив его на ÑоответÑтвие вÑем критериÑм <a href="{@docRoot}distribute/essentials/quality/wear.html">качеÑтва приложений Android Wear</a>, загрузите пакет в конÑоль разработчика. Добавьте Ñнимки Ñкранов Android Wear на Ñтраницу Ñвоего каталога - и уÑтановите нужные параметры раÑпроÑтранениÑ. ЕÑли вы не знаете, как подготовить приложение к выпуÑку в Google Play, изучите + и уÑтановите нужные параметры раÑпроÑтранениÑ. ЕÑли вы не знаете, как подготовить приложение к выпуÑку в Google Play, изучите <a href="{@docRoot}distribute/googleplay/publish/preparing.html">контрольный ÑпиÑок при выпуÑке приложениÑ.</a> </p> diff --git a/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd index a62e3f1069df..303ab5bab5a0 100644 --- a/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd @@ -692,7 +692,7 @@ data-maxresults="6"> </div> <p> - Прежде чем выпуÑкать Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ñегда полезно получить отзывы + Прежде чем выпуÑкать Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ñегда полезно получить отзывы от наÑтоÑщих пользователей — даже в большем количеÑтве, чем при запуÑке новых приложений. ПоÑтому наÑтоÑтельно рекомендуетÑÑ Ñ€Ð°ÑпроÑтранить предварительную верÑию Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñреди таких теÑтирующих пользователей на ключевых Ð´Ð»Ñ Ð²Ð°Ñ Ñ€Ñ‹Ð½ÐºÐ°Ñ… и обеÑпечить Ð´Ð»Ñ Ð½Ð¸Ñ… удобный @@ -983,7 +983,7 @@ data-maxresults="6"> <li> <p> - Помимо окна автоматичеÑкого возмещениÑ, предлагаемого Google Play, будьте щедрыми + Помимо окна автоматичеÑкого возмещениÑ, предлагаемого Google Play, будьте щедрыми в Ñвоей ÑобÑтвенной политике возмещениÑ, удовлетворенные пользователи Ñкорее Ñовершат повторную покупку в будущем. </p> diff --git a/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd index 7aef25cdef41..dccfb1144907 100644 --- a/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd @@ -103,7 +103,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6"> ПоÑле Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ñ… Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñзыков оцените Ñвои потребноÑти Ð´Ð»Ñ Ð¸Ñ… поддержки в Ñвоих приложениÑÑ… и заранее Ñпланируйте работу. Следует учеÑть раÑширение лекÑики, Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº напиÑанию, ограничению интервалов между знаками и - переноÑа Ñлов, поддержку напиÑÐ°Ð½Ð¸Ñ Ñлева направо и Ñправа налево, а также другие + переноÑа Ñлов, поддержку напиÑÐ°Ð½Ð¸Ñ Ñлева направо и Ñправа налево, а также другие потенциальные факторы каждого Ñзыка. </p> diff --git a/docs/html-intl/intl/ru/google/play/filters.jd b/docs/html-intl/intl/ru/google/play/filters.jd index 0059a1ae5396..ccac3894b1e8 100644 --- a/docs/html-intl/intl/ru/google/play/filters.jd +++ b/docs/html-intl/intl/ru/google/play/filters.jd @@ -45,21 +45,21 @@ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></c </div> </div> -<p>Когда пользователь проÑматривает каталог Google Play или ищет там Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸, -отображаемые результаты фильтруютÑÑ Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ того, какие Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑовмеÑтимы Ñ ÐµÐ³Ð¾ уÑтройÑтвом. +<p>Когда пользователь проÑматривает каталог Google Play или ищет там Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸, +отображаемые результаты фильтруютÑÑ Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ того, какие Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑовмеÑтимы Ñ ÐµÐ³Ð¾ уÑтройÑтвом. Ðапример, еÑли Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ ÐºÐ°Ð¼ÐµÑ€Ð°, Google Play не отобразит его Ð´Ð»Ñ ÑƒÑтройÑтв, не оборудованных камерами. Ð¢Ð°ÐºÐ°Ñ <em>фильтрациÑ</em> помогает разработчикам управлÑть раÑпроÑтранением Ñвоих приложений, а также обеÑпечивает макÑимальный уровень удобÑтва Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹.</p> -<p>Ð”Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² Google Play иÑпользуетÑÑ Ð½ÐµÑколько типов метаданных приложений и +<p>Ð”Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² Google Play иÑпользуетÑÑ Ð½ÐµÑколько типов метаданных приложений и наÑтройки конфигурации, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ðµ в манифеÑте ÑведениÑ, необходимые библиотеки, архитектурные требованиÑ, и набор ÑредÑтв ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° раÑпроÑтранением, предуÑмотренный в конÑоли разработчика Google Play, например, геотаргетинг, ценообразование и Ñ‚. п.</p> <p>Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² Google Play чаÑтично оÑновываетÑÑ Ð½Ð° декларациÑÑ… в манифеÑте и прочих -аÑпектах платформы Android, но фактичеÑкие функции фильтрации определÑÑŽÑ‚ÑÑ -именно Ñамой платформой и не ÑвÑзаны Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ð¼Ð¸ уровнÑми API-интерфейÑов. Ð’ Ñтом документе +аÑпектах платформы Android, но фактичеÑкие функции фильтрации определÑÑŽÑ‚ÑÑ +именно Ñамой платформой и не ÑвÑзаны Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ð¼Ð¸ уровнÑми API-интерфейÑов. Ð’ Ñтом документе опиÑываютÑÑ Ð´ÐµÐ¹Ñтвующие ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° фильтрации в Google Play.</p> @@ -81,7 +81,7 @@ Play, например, геотаргетинг, ценообразование Ñпециально запрашивает данное приложение или пытаетÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ к нему по внешней ÑÑылке, прÑмо указывающей на идентификатор Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² Google Play.</p> -<p>Можно иÑпользовать любые комбинации доÑтупных фильтров Ð´Ð»Ñ Ñвоих приложений. Ðапример, можно уÑтановить Ð´Ð»Ñ +<p>Можно иÑпользовать любые комбинации доÑтупных фильтров Ð´Ð»Ñ Ñвоих приложений. Ðапример, можно уÑтановить Ð´Ð»Ñ <code>minSdkVersion</code> требуемое значение <code>"4"</code> и задать <code>smallScreens="false"</code> в Ñамом приложении, тогда при загрузке Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² Google Play можно будет нацелить приложение только на определенные европейÑкие Ñтраны (или операторов ÑвÑзи). Таким образом, фильтры Google Play делают приложение недоÑтупным на любом уÑтройÑтве, @@ -171,7 +171,7 @@ targetSdkVersion</a></code> уÑтановлено <strong>Результат</strong>: Google Play показывает Ñто приложение пользователÑм вÑех уÑтройÑтв, пока не будут применены другие фильтры. </p> <p><strong>Пример 3<br /> - </strong>Ð’ манифеÑте декларируетÑÑ <code><uses-sdk android:minSdkVersion="4"></code> + </strong>Ð’ манифеÑте декларируетÑÑ <code><uses-sdk android:minSdkVersion="4"></code> и не ÑодержитÑÑ Ñлемент <code><supports-screens></code>. <strong>Результат</strong>: Google Play показывает Ñто приложение вÑем пользователÑм, пока не будут применены другие фильтры. </p> @@ -268,7 +268,7 @@ OpenGL-ES (например, уÑтройÑтво Ñ Android 1.5 или боле <tr id="uses-permission-filtering"> <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code></td> <td valign="top"> </td> - <td valign="top">СобÑтвенно, Google Play не выполнÑет фильтрацию по Ñлементам + <td valign="top">СобÑтвенно, Google Play не выполнÑет фильтрацию по Ñлементам <code><uses-permission></code>. Однако Ñти Ñлементы ÑчитываютÑÑ Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð³Ð¾, еÑть ли у Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°ÐºÐ¸Ðµ-либо Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº аппаратным компонентам, которые, возможно, не были правильно задекларированы Ñлементами <code><uses-feature></code>. @@ -279,7 +279,7 @@ OpenGL-ES (например, уÑтройÑтво Ñ Android 1.5 или боле камеры.</p> <p>Ð’ целом, еÑли приложение запрашивает доÑтуп к каким-то аппаратным компонентам, Google Play Ñчитает, что Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ наличие -Ñтих компонентов, даже когда Ñто не отражено в ÑоответÑтвующих декларациÑÑ… +Ñтих компонентов, даже когда Ñто не отражено в ÑоответÑтвующих декларациÑÑ… <code><uses-feature></code>. Затем Google Play оÑущеÑтвлÑет фильтрацию Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ таких функциональных возможноÑтей, подразумеваемых декларациÑми <code><uses-feature></code> в манифеÑте.</p> diff --git a/docs/html-intl/intl/ru/guide/components/activities.jd b/docs/html-intl/intl/ru/guide/components/activities.jd index 5f55a3521350..3fab9701fc9e 100644 --- a/docs/html-intl/intl/ru/guide/components/activities.jd +++ b/docs/html-intl/intl/ru/guide/components/activities.jd @@ -50,8 +50,8 @@ page.tags=операциÑ,намерение отображаетÑÑ Ð²Ð¾ веÑÑŒ Ñкран, однако его размер может быть меньше, и оно может размещатьÑÑ Ð¿Ð¾Ð²ÐµÑ€Ñ… других окон.</p> -<p> Как правило, приложение ÑоÑтоит из неÑкольких операций, которые Ñлабо -ÑвÑзаны друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. Обычно одна из операций в приложении обозначаетÑÑ ÐºÐ°Ðº «оÑновнаÑ», +<p> Как правило, приложение ÑоÑтоит из неÑкольких операций, которые Ñлабо +ÑвÑзаны друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. Обычно одна из операций в приложении обозначаетÑÑ ÐºÐ°Ðº «оÑновнаÑ», Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ при первом запуÑке приложениÑ. Ð’ Ñвою очередь, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ запуÑтить другую операцию Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… дейÑтвий. Каждый раз, когда запуÑкаетÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ, Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾ÑтанавливаетÑÑ, однако ÑиÑтема ÑохранÑет ее @@ -115,11 +115,11 @@ setContentView()} Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÐµÑ‚Ð° пользоватРкнопка, нажатие на которую приводит к выполнению определенного дейÑтвиÑ.</p> <p>Ð’ Android предуÑмотрен набор уже готовых предÑтавлений, которые можно иÑпользовать Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð° макета и его -организации. Виджеты — Ñто предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ (и интерактивными) Ñлементами, например, +организации. Виджеты — Ñто предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ (и интерактивными) Ñлементами, например, кнопками, текÑтовыми полÑми, чекбокÑами или проÑто изображениÑми. Макеты — Ñто предÑтавлениÑ, полученные из клаÑÑа {@link android.view.ViewGroup}, обеÑпечивающие уникальную модель компоновки Ð´Ð»Ñ Ñвоих дочерних предÑтавлений, таких как линейный макет, Ñетка или отноÑительный макет. Также можно Ñоздать подклаÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов {@link android.view.View} и -{@link android.view.ViewGroup} (или воÑпользоватьÑÑ ÑущеÑтвующими подклаÑÑами), чтобы Ñоздать ÑобÑтвенные виджеты и +{@link android.view.ViewGroup} (или воÑпользоватьÑÑ ÑущеÑтвующими подклаÑÑами), чтобы Ñоздать ÑобÑтвенные виджеты и макеты, и затем применить их к макету Ñвоей операции.</p> <p>Чаще вÑего Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑ‚Ð° Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ предÑтавлений иÑпользуетÑÑ XML-файл макета, Ñохраненный в @@ -343,8 +343,8 @@ Android выполнÑет такое управление за ваÑ, поÑÑ‚ также иногда называетÑÑ Â«Ð’Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ».)</dd> <dt><i>ПриоÑтановлена</i></dt> - <dd>Ðа переднем фоне выполнÑетÑÑ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, однако Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾-прежнему не Ñкрыта. То еÑть -поверх текущей операции отображаетÑÑ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ, чаÑтично Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð¸Ð»Ð¸ не Ð·Ð°Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ + <dd>Ðа переднем фоне выполнÑетÑÑ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, однако Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾-прежнему не Ñкрыта. То еÑть +поверх текущей операции отображаетÑÑ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ, чаÑтично Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð¸Ð»Ð¸ не Ð·Ð°Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñтью веÑÑŒ Ñкран. ПриоÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñтью активна (объект {@link android.app.Activity} по-прежнему находитÑÑ Ð² памÑти, в нем ÑохранÑÑŽÑ‚ÑÑ Ð²Ñе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑоÑтоÑнии и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± Ñлементах, и он также оÑтаетÑÑ ÑвÑзанным Ñ Ð´Ð¸Ñпетчером окон), однако в Ñлучае оÑтрой нехватки памÑти ÑиÑтема может завершить ее.</dd> @@ -357,7 +357,7 @@ Android выполнÑет такое управление за ваÑ, поÑÑ‚ может завершить ее.</dd> </dl> -<p>ЕÑли Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð¾Ñтановлена или полноÑтью оÑтановлена, ÑиÑтема может очиÑтить ее из памÑти путем +<p>ЕÑли Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð¾Ñтановлена или полноÑтью оÑтановлена, ÑиÑтема может очиÑтить ее из памÑти путем Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñамой операции (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ метода {@link android.app.Activity#finish finish()}) или проÑто завершить ее процеÑÑ. Ð’ Ñлучае повторного Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ (поÑле ее завершениÑ) ее потребуетÑÑ Ñоздать полноÑтью.</p> @@ -366,7 +366,7 @@ Android выполнÑет такое управление за ваÑ, поÑÑ‚ <h3 id="ImplementingLifecycleCallbacks">Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ñ… вызовов жизненного цикла</h3> -<p>При переходе операции из одного вышеопиÑанного ÑоÑтоÑÐ½Ð¸Ñ Ð² другое, ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом +<p>При переходе операции из одного вышеопиÑанного ÑоÑтоÑÐ½Ð¸Ñ Ð² другое, ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом реализуютÑÑ Ñ‡ÐµÑ€ÐµÐ· различные методы обратного вызова. Ð’Ñе методы обратного вызова предÑтавлÑÑŽÑ‚ Ñобой привÑзки, которые можно переопределить Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñщего дейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ изменении ÑоÑтоÑÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸. Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð½Ð¸Ð¶Ðµ Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ каждый из оÑновных методов жизненного цикла.</p> @@ -431,7 +431,7 @@ android.app.Activity#onStop onStop()}. Ð’ течение Ñтого времен Ñохранить реÑурÑÑ‹, необходимые Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. Ðапример, можно зарегиÑтрировать объект {@link android.content.BroadcastReceiver} в методе {@link android.app.Activity#onStart onStart()} Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, влиÑющих на пользовательÑкий интерфейÑ, а затем отменить его региÑтрацию -в методе {@link android.app.Activity#onStop onStop()}, когда пользователь больше не видит +в методе {@link android.app.Activity#onStop onStop()}, когда пользователь больше не видит отображаемого. Ð’ течение вÑего жизненного цикла операции ÑиÑтема может неÑколько раз вызывать методы {@link android.app.Activity#onStart onStart()} и {@link android.app.Activity#onStop onStop()}, поÑкольку Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ð¾ отображаетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, то ÑкрываетÑÑ Ð¾Ñ‚ него.</p></li> @@ -629,7 +629,7 @@ android.os.Bundle} передаетÑÑ Ñ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ значением (Ñ <p class="note"><strong>Примечание.</strong> Ðет никаких гарантий, что метод {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} будет вызван до того, как ваша Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ уничтожена, поÑкольку ÑущеÑтвуют Ñлучаи, когда нет необходимоÑти ÑохранÑть ÑоÑтоÑние -(например, когда пользователь покидает вашу операцию нажатием кнопки <em>Ðазад</em>, +(например, когда пользователь покидает вашу операцию нажатием кнопки <em>Ðазад</em>, Ñвным образом Ð·Ð°ÐºÑ€Ñ‹Ð²Ð°Ñ ÐµÐµ). ЕÑли ÑиÑтема вызывает метод {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}, она делает Ñто до вызова метода {@link @@ -719,7 +719,7 @@ android.app.Activity#onCreate onCreate()}), как опиÑано в предыР<h3 id="CoordinatingActivities">СоглаÑование операций</h3> <p>Когда одна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкает другую, в жизненных циклах обеих из них проиÑходит переход из одного ÑоÑтоÑÐ½Ð¸Ñ Ð² другое. ÐŸÐµÑ€Ð²Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ -приоÑтанавливаетÑÑ Ð¸ заврешаетÑÑ (однако она не будет оÑтановлена, еÑли она по-прежнему видима на фоне), а Ð²Ñ‚Ð¾Ñ€Ð°Ñ +приоÑтанавливаетÑÑ Ð¸ заврешаетÑÑ (однако она не будет оÑтановлена, еÑли она по-прежнему видима на фоне), а Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑоздаетÑÑ. Ð’ Ñлучае, еÑли Ñти операции обмениваютÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¼, Ñохраненными на диÑке или в другом меÑте, важно понимать, что Ð¿ÐµÑ€Ð²Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ оÑтанавливаетÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñтью до тех пор, пока не будет Ñоздана Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ. Ðаоборот, процеÑÑ Ð·Ð°Ð¿ÑƒÑка второй операции накладываетÑÑ Ð½Ð° процеÑÑ Ð¾Ñтановки первой diff --git a/docs/html-intl/intl/ru/guide/components/bound-services.jd b/docs/html-intl/intl/ru/guide/components/bound-services.jd index ad690b776ef0..4b2ae2618240 100644 --- a/docs/html-intl/intl/ru/guide/components/bound-services.jd +++ b/docs/html-intl/intl/ru/guide/components/bound-services.jd @@ -46,9 +46,9 @@ parent.link=services.html IPC. ПривÑÐ·Ð°Ð½Ð½Ð°Ñ Ñлужба обычно работает, пока другой компонент Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ñзан к ней. Она не работает поÑтоÑнно в фоновом режиме.</p> -<p>Ð’ Ñтом документе раÑÑказываетÑÑ, как Ñоздать привÑзанную Ñлужбу, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзку +<p>Ð’ Ñтом документе раÑÑказываетÑÑ, как Ñоздать привÑзанную Ñлужбу, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзку Ñлужбы к другим компонентам приложениÑ. Также рекомендуем обратитьÑÑ Ðº Ñтатье <a href="{@docRoot}guide/components/services.html">Службы</a>, чтобы узнать подробнее -о Ñлужбах, например, об организации отправки уведомлений от Ñлужбы, наÑтройке Ñлужбы +о Ñлужбах, например, об организации отправки уведомлений от Ñлужбы, наÑтройке Ñлужбы на работу на переднем плане и Ñ‚. д.</p> @@ -91,7 +91,7 @@ android.content.Context#stopService stopService()}.</p> bindService()}. ПоÑле привÑзки он должен предоÑтавить реализацию метода {@link android.content.ServiceConnection}, который Ñлужит Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñлужбе. Метод {@link android.content.Context#bindService bindService()} возвращаетÑÑ Ð½ÐµÐ·Ð°Ð¼ÐµÐ´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ без значениÑ, однако -, когда ÑиÑтема Android уÑтанавливает подключение +, когда ÑиÑтема Android уÑтанавливает подключение клиент-Ñлужба, она вызывает метод {@link android.content.ServiceConnection#onServiceConnected onServiceConnected()} Ð´Ð»Ñ {@link android.content.ServiceConnection}, чтобы выдать объект {@link android.os.IBinder}, который @@ -127,7 +127,7 @@ android.content.ServiceConnection}, чтобы выдать объект {@link поÑле чего он может иÑпользовать его Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ñмого доÑтупа к общедоÑтупным методам, имеющимÑÑ Ð»Ð¸Ð±Ð¾ в реализации {@link android.os.Binder}, либо даже в {@link android.app.Service}. <p>Ðтот ÑпоÑоб ÑвлÑетÑÑ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼, когда Ñлужба проÑто выполнÑетÑÑ Ð² фоновом режиме Ð´Ð»Ñ -вашего приложениÑ. Ðтот ÑпоÑоб не подходит Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа только тогда, +вашего приложениÑ. Ðтот ÑпоÑоб не подходит Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа только тогда, когда ваша Ñлужба иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ приложениÑми или в отдельных процеÑÑах.</dd> <dt><a href="#Messenger">ИÑпользование объекта Messenger</a></dt> @@ -149,7 +149,7 @@ android.os.Messenger} организует очередь вÑех запроÑРпримитивы, которые Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема может раÑпознать и раÑпределить по процеÑÑам Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ взаимодейÑÑ‚Ð²Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ними (IPC). Предыдущий ÑпоÑоб Ñ Ð¸Ñпользованием объекта {@link android.os.Messenger} фактичеÑки оÑнован на AIDL, поÑкольку Ñто его Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ñтруктура. Как уже упоминалоÑÑŒ выше, объект {@link android.os.Messenger} Ñоздает очередь из вÑех -запроÑов клиентов в рамках одного потока, поÑтому Ñлужба одновременно получает только один запроÑ. Однако, +запроÑов клиентов в рамках одного потока, поÑтому Ñлужба одновременно получает только один запроÑ. Однако, еÑли необходимо, чтобы Ñлужба обрабатывала одновременно Ñразу неÑколько запроÑов, можно иÑпользовать AIDL напрÑмую. Ð’ таком Ñлучае ваша Ñлужба должна поддерживать многопоточноÑть и должна быть потокобезопаÑной. <p>Чтобы иÑпользовать AIDL напрÑмую, необходимо @@ -499,7 +499,7 @@ MessengerServiceActivities.java}</a> (клиент).</p> onBind()} Ñлужбы, который возвращает объект {@link android.os.IBinder} Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñо Ñлужбой.</p> <p>ПривÑзка выполнÑетÑÑ Ð°Ñинхронно. {@link android.content.Context#bindService -bindService()} возвращаетÑÑ Ñразу же и <em>не</em> возвращает клиенту объект +bindService()} возвращаетÑÑ Ñразу же и <em>не</em> возвращает клиенту объект {@link android.os.IBinder}. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° {@link android.os.IBinder} клиенту необходимо Ñоздать ÑкземплÑÑ€ {@link android.content.ServiceConnection} и передать его в метод {@link android.content.Context#bindService bindService()}. Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ {@link android.content.ServiceConnection} включает метод обратного вызова, @@ -608,7 +608,7 @@ android.app.Activity#onStop onStop()}.</li> во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² {@link android.app.Activity#onResume onResume()} и {@link android.app.Activity#onPause onPause()} вашей операции, поÑкольку такие обратные вызовы проиÑходÑÑ‚ при каждом переходе из одного ÑоÑтоÑÐ½Ð¸Ñ Ð² другое, а обработка данных, выполнÑÐµÐ¼Ð°Ñ Ð¿Ñ€Ð¸ таких переходах, должна быть минимальной. Кроме того, еÑли к одной и той же -Ñлужбе привÑзано неÑколько операций в вашем приложении, и имеетÑÑ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ между +Ñлужбе привÑзано неÑколько операций в вашем приложении, и имеетÑÑ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ между Ð´Ð²ÑƒÐ¼Ñ Ñтими операциÑми, Ñлужба может быть уничтожена и Ñоздана повторно, поÑкольку Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñет отмену привÑзки (во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¾Ñтановки) до того, как ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñлужба выполнит привÑзку (во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ). (Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑоглаÑовании жизненных циклов операций при таких переходах предÑтавлены в Ñтатье diff --git a/docs/html-intl/intl/ru/guide/components/fragments.jd b/docs/html-intl/intl/ru/guide/components/fragments.jd index b13fcc3da7ef..6fc39b7b019f 100644 --- a/docs/html-intl/intl/ru/guide/components/fragments.jd +++ b/docs/html-intl/intl/ru/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>См. также:</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Создание динамичеÑкого интерфейÑа Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ñпользованием фрагментов</a></li> @@ -56,10 +56,10 @@ parent.link=activities.html <p>Фрагмент вÑегда должен быть вÑтроен в операцию, и на его жизненный цикл напрÑмую влиÑет жизненный цикл операции. Ðапример, когда Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð¾Ñтановлена, в том же ÑоÑтоÑнии находÑÑ‚ÑÑ Ð¸ вÑе фрагменты внутри нее, а когда Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑƒÐ½Ð¸Ñ‡Ñ‚Ð¾Ð¶Ð°ÐµÑ‚ÑÑ, уничтожаютÑÑ Ð¸ вÑе фрагменты. Однако пока -Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ (Ñто ÑоответÑтвует ÑоÑтоÑнию <em>возобновлена</em> <a href="{@docRoot}guide/components/activities.html#Lifecycle">жизненного цикла</a>), можно +Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ (Ñто ÑоответÑтвует ÑоÑтоÑнию <em>возобновлена</em> <a href="{@docRoot}guide/components/activities.html#Lifecycle">жизненного цикла</a>), можно манипулировать каждым фрагментом незавиÑимо, например добавлÑть или удалÑть их. Когда разработчик выполнÑет такие транзакции Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸, он может также добавить их в Ñтек переходов назад, которым управлÑет -операциÑ. Каждый Ñлемент Ñтека переходов назад в операции ÑвлÑетÑÑ Ð·Ð°Ð¿Ð¸Ñью +операциÑ. Каждый Ñлемент Ñтека переходов назад в операции ÑвлÑетÑÑ Ð·Ð°Ð¿Ð¸Ñью выполненной транзакции Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼. Стек переходов назад позволÑет пользователю обратить транзакцию Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ (выполнить навигацию в обратном направлении), Ð½Ð°Ð¶Ð¸Ð¼Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÑƒ <em>Ðазад</em>.</p> @@ -96,7 +96,7 @@ android.view.ViewGroup} внутри иерархии предÑтавлений операции, как на планшете, изображенном на риÑунке 1.</p> <p>Следует разрабатывать каждый фрагмент как модульный и повторно иÑпользуемый компонент операции. ПоÑкольку - каждый фрагмент определÑет ÑобÑтвенный макет и ÑобÑтвенное поведение Ñо Ñвоими обратными вызовами жизненного цикла, разработчик может + каждый фрагмент определÑет ÑобÑтвенный макет и ÑобÑтвенное поведение Ñо Ñвоими обратными вызовами жизненного цикла, разработчик может включить один фрагмент в неÑколько операций. ПоÑтому он должен предуÑмотреть повторное иÑпользование фрагмента и не допуÑкать, чтобы один фрагмент непоÑредÑтвенно манипулировал другим. Ðто оÑобенно важно, потому что модульноÑть фрагментов позволÑет изменÑть их ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð² ÑоответÑтвии Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ размерами Ñкранов. ЕÑли @@ -335,7 +335,7 @@ fragmentTransaction.commit(); <p>Первый аргумент, передаваемый методу {@link android.app.FragmentTransaction#add(int,Fragment) add()}, предÑтавлÑет Ñобой контейнерный объект {@link android.view.ViewGroup} Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°, указанный при помощи идентификатора реÑурÑа. Второй параметр — Ñто фрагмент, который нужно добавить.</p> - <p>Выполнив Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ + <p>Выполнив Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link android.app.FragmentTransaction}, необходимо вызвать метод {@link android.app.FragmentTransaction#commit}, чтобы они вÑтупили в Ñилу.</p> </li> @@ -355,14 +355,14 @@ android.app.FragmentTransaction#add(Fragment,String)} (передав ему уРandroid.app.Fragment#onCreateView onCreateView()}. ПоÑтому в реализации Ñтого метода нет необходимоÑти.</p> <p>Передача Ñтрокового тега ÑвойÑтвенна не только фрагментам без пользовательÑкого интерфейÑа, поÑтому можно -передавать Ñтроковые теги и фрагментам, имеющим пользовательÑкий интерфейÑ. Однако, еÑли у фрагмента нет +передавать Ñтроковые теги и фрагментам, имеющим пользовательÑкий интерфейÑ. Однако, еÑли у фрагмента нет пользовательÑкого интерфейÑа, то Ñтроковый тег ÑвлÑетÑÑ ÐµÐ´Ð¸Ð½Ñтвенным ÑпоÑобом его идентификации. ЕÑли впоÑледÑтвии потребуетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ фрагмент от операции, нужно будет вызвать метод {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()}.</p> <p>Пример операции, иÑпользующей фрагмент в качеÑтве фонового потока, без пользовательÑкого интерфейÑа, приведен в образце кода {@code -FragmentRetainInstance.java}, входÑщем в чиÑло образцов в SDK (и доÑтупном при помощи -Android SDK Manager). Путь к нему в ÑиÑтеме — +FragmentRetainInstance.java}, входÑщем в чиÑло образцов в SDK (и доÑтупном при помощи +Android SDK Manager). Путь к нему в ÑиÑтеме — <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p> @@ -378,7 +378,7 @@ Android SDK Manager). Путь к нему в ÑиÑтеме — <li>получать фрагменты, имеющиеÑÑ Ð² операции, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ метода {@link android.app.FragmentManager#findFragmentById findFragmentById()} (Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð², предоÑтавлÑющих пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð² макете операции) или {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()} (как Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð², имеющих пользовательÑкий интерфейÑ, так и Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð² без него);</li> +findFragmentByTag()} (как Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð², имеющих пользовательÑкий интерфейÑ, так и Ð´Ð»Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð² без него);</li> <li>Ñнимать фрагменты Ñо Ñтека переходов назад методом {@link android.app.FragmentManager#popBackStack()} (Ð¸Ð¼Ð¸Ñ‚Ð¸Ñ€ÑƒÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ðµ кнопки <em>Ðазад</em> пользователем);</li> <li>региÑтрировать процеÑÑ-Ñлушатель изменений в Ñтеке переходов назад при помощи метода {@link @@ -475,7 +475,7 @@ addToBackStack()}, при фикÑации транзакции фрагмент <p>Вызов метода {@link android.app.FragmentTransaction#commit()} не приводит к немедленному выполнению транзакции. Метод запланирует ее выполнение в потоке пользовательÑкого интерфейÑа операции (в «главном» потоке), как только у потока поÑвитÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ñтого. Впрочем, при необходимоÑти можно вызвать {@link -android.app.FragmentManager#executePendingTransactions()} из потока пользовательÑкого интерфейÑа, чтобы +android.app.FragmentManager#executePendingTransactions()} из потока пользовательÑкого интерфейÑа, чтобы транзакции, запланированные методом {@link android.app.FragmentTransaction#commit()} были выполнены немедленно. Как правило, в Ñтом нет необходимоÑти, за иÑключением Ñлучаев, когда Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ ÑвлÑетÑÑ Ð·Ð°Ð²Ð¸ÑимоÑтью Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹ в других потоках.</p> @@ -600,7 +600,7 @@ href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->ДР<h3 id="ActionBar">Добавление Ñлементов в Ñтроку дейÑтвий</h3> -<p>Фрагменты могут добавлÑть пункты меню в <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Меню вариантов</a> операции (и, Ñледовательно, в <a href="{@docRoot}guide/topics/ui/actionbar.html">Строку дейÑтвий</a>), реализовав +<p>Фрагменты могут добавлÑть пункты меню в <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Меню вариантов</a> операции (и, Ñледовательно, в <a href="{@docRoot}guide/topics/ui/actionbar.html">Строку дейÑтвий</a>), реализовав {@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. Однако, чтобы Ñтот метод мог принимать вызовы, необходимо вызывать {@link android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° {@link @@ -639,7 +639,7 @@ android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}.</ фрагмента</p> </div> -<p>Управление жизненным циклом фрагмента во многом аналогично управлению жизненным циклом операции. Как и +<p>Управление жизненным циклом фрагмента во многом аналогично управлению жизненным циклом операции. Как и операциÑ, фрагмент может ÑущеÑтвовать в одном из трех ÑоÑтоÑний:</p> <dl> @@ -677,7 +677,7 @@ android.app.Fragment#onActivityCreated onActivityCreated()}. ДополнитеРandroid.app.FragmentTransaction#addToBackStack(String) addToBackStack()} во Ð²Ñ€ÐµÐ¼Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸, удалÑющей фрагмент.</p> -<p>Ð’ оÑтальном управление жизненным циклом фрагмента очень похоже на управление жизненным циклом +<p>Ð’ оÑтальном управление жизненным циклом фрагмента очень похоже на управление жизненным циклом операции. ПоÑтому практичеÑкие рекомендации по <a href="{@docRoot}guide/components/activities.html#Lifecycle">управлению жизненным циклом операций</a> применимы и к фрагментам. При Ñтом разработчику необходимо понимать, как жизненный цикл операции влиÑет на жизненный цикл фрагмента.</p> @@ -722,7 +722,7 @@ android.app.Activity#onCreate onCreate()}, фрагмент внутри ÑтоР{@link android.app.Fragment#onActivityCreated onActivityCreated()}.</p> <p>Когда Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð¸Ñ‚ в ÑоÑтоÑние «возобновлена», можно Ñвободно добавлÑть в нее фрагменты и удалÑть -их. Таким образом, жизненный цикл фрагмента может быть незавиÑимо изменен, только пока Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾ÑтаетÑÑ +их. Таким образом, жизненный цикл фрагмента может быть незавиÑимо изменен, только пока Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾ÑтаетÑÑ Ð² ÑоÑтоÑнии «возобновлена».</p> <p>Однако, когда Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ из Ñтого ÑоÑтоÑниÑ, продвижение фрагмента по его @@ -785,7 +785,7 @@ android.widget.FrameLayout}), либо запуÑкаетÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¾Ð¿ÐµÑ <p>Второй фрагмент, {@code DetailsFragment}, отображает краткое Ñодержание пьеÑÑ‹, выбранной в ÑпиÑке {@code TitlesFragment}:</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>Ð’Ñпомним код клаÑÑа {@code TitlesFragment}: еÑли пользователь нажимает на пункт ÑпиÑка, а @@ -798,7 +798,7 @@ android.widget.FrameLayout}), либо запуÑкаетÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¾Ð¿ÐµÑ {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>Обратите внимание, что в альбомной конфигурации Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑамоÑтоÑтельно завершаетÑÑ, чтобы Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð° принÑть управление и отобразить фрагмент {@code DetailsFragment} Ñ€Ñдом Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼{@code TitlesFragment}. Ðто может произойти, еÑли пользователь запуÑтит операцию {@code DetailsActivity} в книжной ориентации Ñкрана, а diff --git a/docs/html-intl/intl/ru/guide/components/fundamentals.jd b/docs/html-intl/intl/ru/guide/components/fundamentals.jd index 181cbbdfb107..07f001a545ad 100644 --- a/docs/html-intl/intl/ru/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/ru/guide/components/fundamentals.jd @@ -165,7 +165,7 @@ android.provider.ContactsContract.Data}), Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи Ñ <p>Уникальной оÑобенноÑтью ÑиÑтемы Android ÑвлÑетÑÑ Ñ‚Ð¾, что любое приложение может запуÑтить компонент другого приложениÑ. Ðапример, еÑли вы хотите дать пользователю возможноÑть фотографировать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ -камеру уÑтройÑтва, то, поÑкольку навернÑка имеетÑÑ Ð´Ñ€ÑƒÐ³Ð¾Ðµ приложение, которое может выполнить Ñто дейÑтвие, вмеÑто того чтобы разработать операцию Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Ñвоем приложении, вы можете вызвать +камеру уÑтройÑтва, то, поÑкольку навернÑка имеетÑÑ Ð´Ñ€ÑƒÐ³Ð¾Ðµ приложение, которое может выполнить Ñто дейÑтвие, вмеÑто того чтобы разработать операцию Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Ñвоем приложении, вы можете вызвать такое приложение. Вам не нужно внедрÑть код из Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹ или даже уÑтанавливать на него ÑÑылку. ВмеÑто Ñтого вы можете проÑто запуÑтить операцию Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ @@ -212,7 +212,7 @@ URI, указывающий на выбранный контакт).</p> Ñодержит только Ñтроку "аккумулÑтор разрÑжен").</p> <p>Компоненты четвертого типа – поÑтавщики контента – ÑообщениÑми Intent не активируютÑÑ. Они -активируютÑÑ Ð¿Ð¾ запроÑу от {@link android.content.ContentResolver}. Процедура Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ +активируютÑÑ Ð¿Ð¾ запроÑу от {@link android.content.ContentResolver}. Процедура Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð° (content resolver) обрабатывает вÑе прÑмые транзакции Ñ Ð¿Ð¾Ñтавщиком контента, Ñ Ñ‚ÐµÐ¼ чтобы Ñтого не пришлоÑÑŒ делать компоненту, который выполнÑет транзакции Ñ Ð¿Ð¾Ñтавщиком. ВмеÑто Ñтого он вызывает методы Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° {@link android.content.ContentResolver}. Ðто формирует Ñлой, абÑтрагирующий (в целÑÑ… безопаÑноÑти) поÑтавщика @@ -224,7 +224,7 @@ android.content.ContentResolver}. Ðто формирует Ñлой, абÑтр передав объект {@link android.content.Intent} методу {@link android.content.Context#startActivity startActivity()} или {@link android.app.Activity#startActivityForResult startActivityForResult()} (еÑли требуетÑÑ, чтобы Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²ÐµÑ€Ð½ÑƒÐ»Ð° результат).</li> - <li>Можно запуÑтить Ñлужбу (либо выдать работающей Ñлужбе новые инÑтрукции), + <li>Можно запуÑтить Ñлужбу (либо выдать работающей Ñлужбе новые инÑтрукции), передав объект {@link android.content.Intent} методу {@link android.content.Context#startService startService()}. Либо можно уÑтановить привÑзку к Ñлужбе, передав объект{@link android.content.Intent} методу {@link android.content.Context#bindService bindService()}.</li> @@ -236,7 +236,7 @@ android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li> android.content.ContentProvider#query query()} Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° {@link android.content.ContentResolver}.</li> </ul> -<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± иÑпользовании объектов Intent приведены в документе <a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent и +<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± иÑпользовании объектов Intent приведены в документе <a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent и фильтры объектов Intent</a>. Более Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± активации определенных компонентов также приведена в Ñледующих документах: <a href="{@docRoot}guide/components/activities.html">Операции</a>, <a href="{@docRoot}guide/components/services.html">Службы</a>, {@link android.content.BroadcastReceiver} и <a href="{@docRoot}guide/topics/providers/content-providers.html">ПоÑтавщики контента</a>.</p> @@ -312,7 +312,7 @@ href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a в манифеÑте, поÑтому они не могут быть запущены. Рвот приемники широковещательных Ñообщений можно либо объÑвить в манифеÑте, либо Ñоздать динамичеÑки в коде (как объекты -{@link android.content.BroadcastReceiver}) и зарегиÑтрировать в ÑиÑтеме путем вызова +{@link android.content.BroadcastReceiver}) и зарегиÑтрировать в ÑиÑтеме путем вызова {@link android.content.Context#registerReceiver registerReceiver()}.</p> <p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñтруктуризации файла манифеÑта Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñм. в документе <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">Файл AndroidManifest.xml</a> @@ -331,7 +331,7 @@ href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a дейÑтвие, и запуÑтить его. При наличии неÑкольких компонентов, которые могут выполнить дейÑтвие, опиÑанное в Ñообщении Intent, пользователь выбирает, какой из них будет иÑпользоватьÑÑ.</p> -<p>СиÑтема определÑет компоненты, которые могут ответить на Ñообщение Intent, путем ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ +<p>СиÑтема определÑет компоненты, которые могут ответить на Ñообщение Intent, путем ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Intent Ñ <i>фильтрами объектов Intent,</i> указанными в файле манифеÑта других приложений, имеющихÑÑ Ð½Ð° уÑтройÑтве.</p> @@ -373,13 +373,13 @@ startActivity()}, ÑиÑтема Ñможет запуÑтить вашу опе <p>СущеÑтвует огромное количеÑтво уÑтройÑтв, работающих под управлением Android, и не вÑе они имеют одинаковые функциональные возможноÑти. Чтобы ваше приложение не могло быть уÑтановлено на уÑтройÑтвах, в которых отÑутÑтвуют функции, необходимые приложению, важно четко определить профиль Ð´Ð»Ñ -типов уÑтройÑтв, поддерживаемых вашим приложением, указав Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº аппаратному и программному обеÑпечению в +типов уÑтройÑтв, поддерживаемых вашим приложением, указав Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº аппаратному и программному обеÑпечению в файле манифеÑта. Ðти объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ большей чаÑти ноÑÑÑ‚ информационный характер, ÑиÑтема их не читает. Однако их читают внешние Ñлужбы, например Google Play, Ñ Ñ†ÐµÐ»ÑŒÑŽ обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹, которые ищут Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñвоих уÑтройÑтв.</p> <p>Ðапример, еÑли вашему приложению требуетÑÑ ÐºÐ°Ð¼ÐµÑ€Ð° и оно иÑпользует API-интерфейÑÑ‹ из Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">уровень API</a> 7), -Ñти параметры Ñледует объÑвить в файле манифеÑта в качеÑтве требований Ñледующим образом:</p> +Ñти параметры Ñледует объÑвить в файле манифеÑта в качеÑтве требований Ñледующим образом:</p> <pre> <manifest ... > @@ -390,7 +390,7 @@ startActivity()}, ÑиÑтема Ñможет запуÑтить вашу опе </manifest> </pre> -<p>Теперь ваше приложение Ð½ÐµÐ»ÑŒÐ·Ñ Ð±ÑƒÐ´ÐµÑ‚ уÑтановить из Google Play на уÑтройÑтвах, в которых <em>нет</em> камеры, а также на уÑтройÑтвах, работающих под управлением +<p>Теперь ваше приложение Ð½ÐµÐ»ÑŒÐ·Ñ Ð±ÑƒÐ´ÐµÑ‚ уÑтановить из Google Play на уÑтройÑтвах, в которых <em>нет</em> камеры, а также на уÑтройÑтвах, работающих под управлением Android верÑии <em>ниже</em> 2.1.</p> <p>Однако можно также объÑвить, что приложение иÑпользует камеру, но Ð´Ð»Ñ ÐµÐ³Ð¾ работы она не ÑвлÑетÑÑ @@ -430,7 +430,7 @@ logo.png} (Ñохраненный в папке {@code res/drawable/}), инÑÑ‚ ÑоответÑтвующем Ñзыке.</p> <p>Android поддерживает разные <em>квалификаторы</em> Ð´Ð»Ñ ÑоответÑтвующих реÑурÑов. Квалификатор - предÑтавлÑет Ñобой короткую Ñтроку, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð² имена каталогов реÑурÑов Ñ Ñ†ÐµÐ»ÑŒÑŽ + предÑтавлÑет Ñобой короткую Ñтроку, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð² имена каталогов реÑурÑов Ñ Ñ†ÐµÐ»ÑŒÑŽ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ уÑтройÑтва, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñти реÑурÑÑ‹ Ñледует иÑпользовать. Ð’ качеÑтве другого примера можно Ñказать, что Ð´Ð»Ñ Ñвоих операций Ñледует Ñоздавать разные макеты, которые будут ÑоответÑтвовать размеру и ориентации Ñкрана уÑтройÑтва. Ðапример, когда Ñкран уÑтройÑтва имеет книжную @@ -469,7 +469,7 @@ logo.png} (Ñохраненный в папке {@code res/drawable/}), инÑÑ‚ <dl> <dt><a href="{@docRoot}guide/practices/compatibility.html">СовмеÑтимоÑть уÑтройÑтв</a></dt> <dd>Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, каким образом ÑиÑтема Android работает на уÑтройÑтвах разных типов, и общие ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, - как оптимизировать Ñвое приложение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ уÑтройÑтва или ограничить круг уÑтройÑтв, на которых может быть уÑтановлено + как оптимизировать Ñвое приложение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ уÑтройÑтва или ограничить круг уÑтройÑтв, на которых может быть уÑтановлено приложение.</dd> <dt><a href="{@docRoot}guide/topics/security/permissions.html">СиÑтемные разрешениÑ</a></dt> <dd>Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, как ÑиÑтема Android ограничивает доÑтуп приложений к определенным API-интерфейÑам Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑиÑтемы diff --git a/docs/html-intl/intl/ru/guide/components/index.jd b/docs/html-intl/intl/ru/guide/components/index.jd index 41d5a3491bf2..13050f262b79 100644 --- a/docs/html-intl/intl/ru/guide/components/index.jd +++ b/docs/html-intl/intl/ru/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=Компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ page.landing=true -page.landing.intro=Платформа приложений ÑиÑтемы Android позволÑет Ñоздавать функциональные и инновационные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ набора компонентов, которые можно иÑпользовать многократно. Ð’ Ñтом разделе раÑÑказываетÑÑ Ð¾ том, как Ñоздавать компоненты, определÑющие Ñлементы Ñтруктуры вашего приложениÑ, и как ÑвÑзывать их воедино Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ объектов Intent. -page.metaDescription=Платформа приложений ÑиÑтемы Android позволÑет Ñоздавать функциональные и инновационные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ набора компонентов, которые можно иÑпользовать многократно. Ð’ Ñтом разделе раÑÑказываетÑÑ Ð¾ том, как Ñоздавать компоненты, определÑющие Ñлементы Ñтруктуры вашего приложениÑ, и как ÑвÑзывать их воедино Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ объектов Intent. +page.landing.intro=Платформа приложений ÑиÑтемы Android позволÑет Ñоздавать функциональные и инновационные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ набора компонентов, которые можно иÑпользовать многократно. Ð’ Ñтом разделе раÑÑказываетÑÑ Ð¾ том, как Ñоздавать компоненты, определÑющие Ñлементы Ñтруктуры вашего приложениÑ, и как ÑвÑзывать их воедино Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ объектов Intent. +page.metaDescription=Платформа приложений ÑиÑтемы Android позволÑет Ñоздавать функциональные и инновационные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ набора компонентов, которые можно иÑпользовать многократно. Ð’ Ñтом разделе раÑÑказываетÑÑ Ð¾ том, как Ñоздавать компоненты, определÑющие Ñлементы Ñтруктуры вашего приложениÑ, и как ÑвÑзывать их воедино Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ объектов Intent. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Статьи блога</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>ИÑпользование клаÑÑа DialogFragment</h4> <p>Ð’ Ñтой Ñтатье Ñ Ñ€Ð°ÑÑкажу, как Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ DialogFragment Ñ Ð¸Ñпользованием вÑпомогательной библиотеки v4 (в целÑÑ… обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ÑовмеÑтимоÑти Ñ ÑƒÑтройÑтвами, работающими под управлением ÑиÑтемы Ñ Ð²ÐµÑ€Ñией ниже, чем Honeycomb) можно отобразить проÑтое диалоговое окно Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вернуть результат в вызывающую операцию Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ интерфейÑа.</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>Фрагменты Ð´Ð»Ñ Ð²Ñех</h4> <p>Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ð¼Ñ‹ выпуÑтили библиотеку ÑтатичеÑких Ñлементов, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑет доÑтуп к тому же Fragments API (а также новому клаÑÑу LoaderManager и неÑкольким другим клаÑÑам), Ñ Ñ‚ÐµÐ¼ чтобы приложениÑ, ÑовмеÑтимые Ñ Android 1.6 и более поздними верÑиÑми, могли иÑпользовать фрагменты Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких интерфейÑов Ð´Ð»Ñ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚Ð¾Ð². </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>МногопоточноÑть Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти</h4> <p>Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ñ‹Ñтро реагирующих приложений рекомендуетÑÑ, чтобы в оÑновном потоке пользовательÑкого интерфейÑа @@ -32,7 +32,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Обучение</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>Управление жизненным циклом операций</h4> <p>Ð’ Ñтом учебном курÑе разъÑÑнÑÑŽÑ‚ÑÑ Ð²Ð°Ð¶Ð½Ñ‹Ðµ методы обратного вызова жизненного цикла, которые получает каждый ÑкземплÑÑ€ diff --git a/docs/html-intl/intl/ru/guide/components/loaders.jd b/docs/html-intl/intl/ru/guide/components/loaders.jd index eea72a2296ee..a554067345f4 100644 --- a/docs/html-intl/intl/ru/guide/components/loaders.jd +++ b/docs/html-intl/intl/ru/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>ОÑновные клаÑÑÑ‹</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>Образцы кода по теме</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ android.app.Fragment}.</li> воÑÑоздании поÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸. Таким образом, им не требуетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ запрашивать Ñвои данные.</li> </ul> - + <h2 id="summary">Ð¡Ð²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± API-интерфейÑе загрузчика</h2> <p>ИмеетÑÑ Ð½ÐµÑколько клаÑÑов и интерфейÑов, которые могут иÑпользовать @@ -68,7 +68,7 @@ android.app.Fragment}.</li> {@link android.app.Fragment} Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколькими интерфейÑами {@link android.content.Loader}. Ðто позволÑет приложению управлÑть длительно выполнÑющимиÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñми вмеÑте Ñ Ð¶Ð¸Ð·Ð½ÐµÐ½Ð½Ñ‹Ð¼ циклом {@link android.app.Activity} -или {@link android.app.Fragment}; чаще вÑего Ñтот клаÑÑ Ð¸ÑпользуетÑÑ Ñ +или {@link android.app.Fragment}; чаще вÑего Ñтот клаÑÑ Ð¸ÑпользуетÑÑ Ñ {@link android.content.CursorLoader}, однако Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ пиÑать Ñвои ÑобÑтвенные загрузчики Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ типами данных. <br /> @@ -129,10 +129,10 @@ android.content.ContentProvider}. Ð’Ñ‹ также можете реализовРзагрузки данных из другого иÑточника;</li> <li>Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ {@link android.app.LoaderManager.LoaderCallbacks}. Именно здеÑÑŒ ÑоздаютÑÑ Ð½Ð¾Ð²Ñ‹Ðµ загрузчики и ведетÑÑ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ ÑÑылками на ÑущеÑтвующие -загрузчики;</li> +загрузчики;</li> <li>ÑпоÑоб Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… загрузчика, например {@link android.widget.SimpleCursorAdapter};</li> - <li>иÑточник данных, например {@link android.content.ContentProvider}, когда иÑпользуетÑÑ + <li>иÑточник данных, например {@link android.content.ContentProvider}, когда иÑпользуетÑÑ {@link android.content.CursorLoader}.</li> </ul> <h3 id="starting">ЗапуÑк загрузчика</h3> @@ -140,11 +140,11 @@ android.widget.SimpleCursorAdapter};</li> <p>{@link android.app.LoaderManager} управлÑет одним или неÑколькими ÑкземплÑрами {@link android.content.Loader} в {@link android.app.Activity} или {@link android.app.Fragment}. ИмеетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один {@link -android.app.LoaderManager} на каждую операцию или каждый фрагмент.</p> +android.app.LoaderManager} на каждую операцию или каждый фрагмент.</p> <p>{@link android.content.Loader} обычно инициализируетÑÑ Ð² методе {@link -android.app.Activity#onCreate onCreate()} операции или в методе фрагмента +android.app.Activity#onCreate onCreate()} операции или в методе фрагмента {@link android.app.Fragment#onActivityCreated onActivityCreated()}. ДелаетÑÑ Ñто Ñледующим образом:</p> @@ -157,13 +157,13 @@ getLoaderManager().initLoader(0, null, this);</pre> <ul> <li>уникальный идентификатор, обозначающий загрузчик. Ð’ данном примере идентификатором ÑвлÑетÑÑ 0;</li> <li>необÑзательные аргументы, которые передаютÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÑƒ при -поÑтроении (в данном примере Ñто <code>null</code>);</li> +поÑтроении (в данном примере Ñто <code>null</code>);</li> <li>Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ {@link android.app.LoaderManager.LoaderCallbacks}, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ клаÑÑ {@link android.app.LoaderManager} Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ñ‡Ð¸ Ñобытий загрузчика. Ð’ данном примере локальный клаÑÑ Ñ€ÐµÐ°Ð»Ð¸Ð·ÑƒÐµÑ‚ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ {@link android.app.LoaderManager.LoaderCallbacks}, поÑтому он передает ÑÑылку -Ñамому Ñебе: {@code this}.</li> +Ñамому Ñебе: {@code this}.</li> </ul> <p>Вызов {@link android.app.LoaderManager#initLoader initLoader()} обеÑпечивает инициализацию загрузчика. Возможен один из двух результатов:</p> @@ -193,7 +193,7 @@ onLoadFinished</a>.</p> начинает загрузку и заканчивает ее при необходимоÑти, а также поддерживает ÑоÑтоÑние загрузчика и ÑвÑзанного Ñ Ð½Ð¸Ð¼ контента. Ð Ñто подразумевает, что вы будете редко взаимодейÑтвовать Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°Ð¼Ð¸ напрÑмую (однако пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² загрузчика Ð´Ð»Ñ Ñ‚Ð¾Ð½ÐºÐ¾Ð¹ наÑтройки его -Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в образце кода <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). +Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в образце кода <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). Ð”Ð»Ñ Ð²Ð¼ÐµÑˆÐ°Ñ‚ÐµÐ»ÑŒÑтва в процеÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ при возникновении определенных Ñобытий обычно иÑпользуютÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ñ‹ {@link android.app.LoaderManager.LoaderCallbacks} . Более подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом Ñм. в разделе <a href="#callback">ИÑпользование обратных вызовов LoaderManager</a>.</p> @@ -343,8 +343,8 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <p>Ðтот метод вызываетÑÑ, когда ÑоÑтоÑние Ñозданного ранее загрузчика ÑбраÑываетÑÑ, в результате чего его данные терÑÑŽÑ‚ÑÑ. Ðтот обратный вызов позволÑет узнать, когда данные вот-вот будут выÑвобождены, Ñ Ñ‚ÐµÐ¼ чтобы можно было удалить Ñвою ÑÑылку на них.  </p> -<p>Ð”Ð°Ð½Ð½Ð°Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ -{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} +<p>Ð”Ð°Ð½Ð½Ð°Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ +{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} Ñо значением <code>null</code>:</p> <pre> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment}, который отображает {@link android.widget.ListView} Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð°Ð¼Ð¸ запроÑа к поÑтавщику такого контента, как контакты. Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñом к поÑтавщику иÑпользуетÑÑ ÐºÐ»Ð°ÑÑ {@link android.content.CursorLoader}.</p> - + <p>Чтобы приложение могло обращатьÑÑ Ðº контактам пользователÑ, как показано в Ñтом примере, в его манифеÑте должно приÑутÑтвовать разрешение {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p> diff --git a/docs/html-intl/intl/ru/guide/components/processes-and-threads.jd b/docs/html-intl/intl/ru/guide/components/processes-and-threads.jd index fd298e0d3c49..c9b7dbe62a36 100644 --- a/docs/html-intl/intl/ru/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/ru/guide/components/processes-and-threads.jd @@ -120,7 +120,7 @@ android.content.BroadcastReceiver#onReceive onReceive()}.</li> <ul> <li>Он Ñодержит дейÑтвие {@link android.app.Activity}, которое не находитÑÑ Ð½Ð° переднем плане, но -видно пользователю (вызван метод {@link android.app.Activity#onPause onPause()}). +видно пользователю (вызван метод {@link android.app.Activity#onPause onPause()}). Ðапример, Ñто может проиÑходить, еÑли дейÑтвие на переднем плане запуÑтило диалоговое окно, которое позволÑет видеть предыдущее дейÑтвие позади него.</li> @@ -142,7 +142,7 @@ android.content.Context#startService startService()}, и не попадает Ð </li> <li><b>Фоновый процеÑÑ</b> - <p>ПроцеÑÑ, Ñодержащий дейÑтвиÑ, которые не видны пользователю в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ (вызван метод + <p>ПроцеÑÑ, Ñодержащий дейÑтвиÑ, которые не видны пользователю в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ (вызван метод {@link android.app.Activity#onStop onStop()} дейÑтвиÑ). Ðти процеÑÑÑ‹ не оказывают непоÑредÑтвенного воздейÑÑ‚Ð²Ð¸Ñ Ð½Ð° работу пользователÑ, и ÑиÑтема может удалить их в любой момент, чтобы оÑвободить памÑть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов переднего плана, @@ -168,7 +168,7 @@ LRU (недавно иÑпользованные), чтобы процеÑÑÑ‹, компонентов, активных в процеÑÑе в текущее времÑ. Ðапример, еÑли процеÑÑ Ñодержит Ñлужебное и видимое дейÑтвие, процеÑÑ ÑчитаетÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñ‹Ð¼, а не Ñлужебным процеÑÑом.</p> - <p>Кроме того, уровень процеÑÑа может быть повышен, поÑкольку имеютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ðµ процеÑÑÑ‹, завиÑимые от него. + <p>Кроме того, уровень процеÑÑа может быть повышен, поÑкольку имеютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ðµ процеÑÑÑ‹, завиÑимые от него. Ðапример, процеÑÑ, обÑлуживающий другой процеÑÑ, не может иметь уровень ниже ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¾Ð±Ñлуживаемого процеÑÑа. Ðапример, еÑли поÑтавщик контента в процеÑÑе A обÑлуживает клиента в процеÑÑе B или Ñлужебный процеÑÑ A ÑвÑзан Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð¼ в процеÑÑе B, процеÑÑ A вÑегда ÑчитаетÑÑ Ð½Ðµ менее @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/ru/guide/components/services.jd b/docs/html-intl/intl/ru/guide/components/services.jd index 62a6a7ef9d15..28e9daa4edb3 100644 --- a/docs/html-intl/intl/ru/guide/components/services.jd +++ b/docs/html-intl/intl/ru/guide/components/services.jd @@ -291,7 +291,7 @@ android.app.Service#onStartCommand onStartCommand()}, отдельно от Ð¾Ñ <li>Создает рабочую очередь, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿ÐµÑ€ÐµÐ´Ð°ÐµÑ‚ Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ð¾ одному в вашу реализацию метода {@link android.app.IntentService#onHandleIntent onHandleIntent()}, поÑтому вы не должны беÑпокоитьÑÑ Ð¾Ñ‚Ð½Ð¾Ñительно многопоточноÑти.</li> - <li>ОÑтанавливает Ñлужбу поÑле обработки вÑех запроÑов запуÑка, поÑтому вам никогда не требуетÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ + <li>ОÑтанавливает Ñлужбу поÑле обработки вÑех запроÑов запуÑка, поÑтому вам никогда не требуетÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ {@link android.app.Service#stopSelf}.</li> <li>ПредоÑтавлÑет реализацию метода {@link android.app.IntentService#onBind onBind()} по умолчанию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ null.</li> @@ -668,7 +668,7 @@ android.app.Service#stopForeground stopForeground()}. Ðтот метод Ñод уделить приÑтальное внимание тому, как ваша Ñлужба ÑоздаетÑÑ Ð¸ уничтожаетÑÑ, так как Ñлужба может работать в фоновом режиме без ведома пользователÑ.</p> -<p>Жизненный цикл Ñлужбы от ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾ ÑƒÐ½Ð¸Ñ‡Ñ‚Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ Ñледовать двум +<p>Жизненный цикл Ñлужбы от ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾ ÑƒÐ½Ð¸Ñ‡Ñ‚Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ Ñледовать двум разным путÑм:</p> <ul> diff --git a/docs/html-intl/intl/ru/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/ru/guide/components/tasks-and-back-stack.jd index c9fdc0e069bb..8bdb39410ce4 100644 --- a/docs/html-intl/intl/ru/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/ru/guide/components/tasks-and-back-stack.jd @@ -29,7 +29,7 @@ parent.link=activities.html <ol> <li><a href="{@docRoot}design/patterns/navigation.html">Дизайн Android: навигациÑ</a></li> - <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Ðлемент манифеÑта + <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Ðлемент манифеÑта {@code <activity>}</a></li> <li><a href="{@docRoot}guide/components/recents.html">Ðкран обзора</a></li> </ol> @@ -43,7 +43,7 @@ parent.link=activities.html Когда пользователь выбирает Ñообщение, открываетÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтого ÑообщениÑ.</p> <p>ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ даже запуÑкать операции, ÑущеÑтвующие в других приложениÑÑ… на уÑтройÑтве. Ðапример, -еÑли ваше приложение хочет отправить Ñообщение Ñлектронной почты, вы можете определить намерение Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ +еÑли ваше приложение хочет отправить Ñообщение Ñлектронной почты, вы можете определить намерение Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Â«Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒÂ» и включить в него некоторые данные, например, Ð°Ð´Ñ€ÐµÑ Ñлектронной почты и текÑÑ‚ ÑообщениÑ. ПоÑле Ñтого открываетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð· другого приложениÑ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð±ÑŠÑвила, что она обрабатывает Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ типа. Ð’ Ñтом Ñлучае намерение ÑоÑтоит в том, чтобы отправить Ñообщение Ñлектронной почты, поÑтому в приложении Ñлектронной почты запуÑкаетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Â«ÑоÑтавить Ñообщение» (еÑли одно намерение @@ -127,7 +127,7 @@ class="img-caption"><strong>РиÑунок 3.</strong> СоздаетÑÑ Ð½ÐµÑ Ð² Ñвоем Ñтеке — две операции под текущей операцией. Пользователь нажимает кнопку <em>Домой</em>, затем запуÑкает новое приложение из ÑредÑтва запуÑка приложений. Когда поÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ñ‹Ð¹ Ñкран, Задача A переходит -в фоновый режим. Когда запуÑкаетÑÑ Ð½Ð¾Ð²Ð¾Ðµ приложение, ÑиÑтема запуÑкает задачу Ð´Ð»Ñ Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +в фоновый режим. Когда запуÑкаетÑÑ Ð½Ð¾Ð²Ð¾Ðµ приложение, ÑиÑтема запуÑкает задачу Ð´Ð»Ñ Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Задачу B) Ñо Ñвоим ÑобÑтвенным Ñтеком операций. ПоÑле взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ñтим приложением пользователь Ñнова возвращаетÑÑ Ð½Ð° главный Ñкран и выбирает изначально запущенную Задачу A. Теперь Задача A переходит на передний @@ -290,7 +290,7 @@ class="img-caption"><strong>РиÑунок 3.</strong> СоздаетÑÑ Ð½ÐµÑ <p>При объÑвлении операции в вашем файле манифеÑта вы можете указать, как Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть ÑвÑзана Ñ Ð·Ð°Ð´Ð°Ñ‡ÐµÐ¹ поÑредÑтвом атрибута <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code -launchMode}</a> +launchMode}</a> Ñлемента <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p> <p>Ðтрибут <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code @@ -351,7 +351,7 @@ android.app.Activity#onNewIntent onNewIntent()}, а не путем Ñоздан имеет задачу, работающую в фоновом режиме, Ñта задача переводитÑÑ Ð½Ð° передний план Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ нового намерениÑ.</p> -<p>И при запуÑке операции в новой задаче, и при запуÑке операции в ÑущеÑтвующей задаче, +<p>И при запуÑке операции в новой задаче, и при запуÑке операции в ÑущеÑтвующей задаче, кнопка <em>Ðазад</em> вÑегда возвращает Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ðº предыдущей операции. Однако, еÑли вы запуÑкаете операцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ режим запуÑка {@code singleTask}, вÑÑ Ð·Ð°Ð´Ð°Ñ‡Ð° переводитÑÑ Ð½Ð° передний план, еÑли ÑкземплÑÑ€ Ñтой операции ÑущеÑтвует в фоновой задаче. Ð’ Ñтот момент @@ -505,7 +505,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetain href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt> <dd>ЕÑли Ð´Ð»Ñ Ñтого атрибута уÑтановлено значение {@code "true"} в корневой операции задачи, Ñтек очищаетÑÑ Ð´Ð¾ корневой операции каждый раз, когда пользователь выходит из задачи -и возвращаетÑÑ Ð² нее. Другими Ñловами, Ñтот атрибут противоположен атрибуту +и возвращаетÑÑ Ð² нее. Другими Ñловами, Ñтот атрибут противоположен атрибуту <a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> {@code alwaysRetainTaskState}</a>. Пользователь вÑегда возвращаетÑÑ Ð² задачу в ее иÑходном ÑоÑтоÑнии, даже поÑле кратковременного выхода из нее.</dd> @@ -526,7 +526,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask <h3 id="Starting">ЗапуÑк задачи</h3> -<p>Ð’Ñ‹ можете Ñделать операцию точкой входа, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ ÐµÐ¹ фильтр намерений Ñо значением +<p>Ð’Ñ‹ можете Ñделать операцию точкой входа, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ ÐµÐ¹ фильтр намерений Ñо значением {@code "android.intent.action.MAIN"} в качеÑтве указанного дейÑÑ‚Ð²Ð¸Ñ Ð¸ {@code "android.intent.category.LAUNCHER"} в качеÑтве указанной категории. Ðапример:</p> diff --git a/docs/html-intl/intl/ru/guide/index.jd b/docs/html-intl/intl/ru/guide/index.jd index b0732722e1b8..703700b06475 100644 --- a/docs/html-intl/intl/ru/guide/index.jd +++ b/docs/html-intl/intl/ru/guide/index.jd @@ -4,7 +4,7 @@ page.title=Общие ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ платформе Android <div class="sidebox" style="width:220px"><!-- width to match col-4 below --> -<p>Чтобы узнать, как работают приложениÑ, начните Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° +<p>Чтобы узнать, как работают приложениÑ, начните Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° <a href="{@docRoot}guide/components/fundamentals.html">ОÑновы ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹</a>.</p> <p>Чтобы Ñразу приÑтупить к программированию, читайте раздел <a href="{@docRoot}training/basics/firstapp/index.html">Создание первого приложениÑ</a>.</p> </div> diff --git a/docs/html-intl/intl/ru/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/ru/guide/topics/manifest/manifest-intro.jd index f2c5a9e03590..63d3a46c6afa 100644 --- a/docs/html-intl/intl/ru/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/ru/guide/topics/manifest/manifest-intro.jd @@ -31,27 +31,27 @@ page.title=МанифеÑÑ‚ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ <li>Он задает Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Java Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ. Ðто Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Ñлужит уникальным идентификатором приложениÑ.</li> -<li>Он опиÑывает компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ — операции, +<li>Он опиÑывает компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ — операции, Ñлужбы, приемники широковещательных Ñообщений и поÑтавщиков контента, из которых ÑоÑтоит -приложение. Он Ñодержит имена клаÑÑов, которые реализуют каждый компонент, и -публикует их возможноÑти (указывает, например, какие ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ {@link android.content.Intent -Intent} они могут принимать). Ðа оÑновании Ñтих деклараций ÑиÑтема Android +приложение. Он Ñодержит имена клаÑÑов, которые реализуют каждый компонент, и +публикует их возможноÑти (указывает, например, какие ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ {@link android.content.Intent +Intent} они могут принимать). Ðа оÑновании Ñтих деклараций ÑиÑтема Android может определить, из каких компонентов ÑоÑтоит приложение и при каких уÑловиÑÑ… их можно запуÑкать.</li> -<li>Он определÑет, в каких процеÑÑах будут размещатьÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ приложениÑ.</li> +<li>Он определÑет, в каких процеÑÑах будут размещатьÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ приложениÑ.</li> -<li>Он объÑвлÑет, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть выданы приложению, чтобы оно могло получить -доÑтуп к защищенным чаÑÑ‚Ñм API-интерфейÑа и взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ приложениÑми.</li> +<li>Он объÑвлÑет, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть выданы приложению, чтобы оно могло получить +доÑтуп к защищенным чаÑÑ‚Ñм API-интерфейÑа и взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ приложениÑми.</li> -<li>Он также объÑвлÑет разрешениÑ, требуемые Ð´Ð»Ñ +<li>Он также объÑвлÑет разрешениÑ, требуемые Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°Ð¼Ð¸ данного приложениÑ.</li> -<li>Он Ñодержит ÑпиÑок клаÑÑов {@link android.app.Instrumentation}, которые при выполнении Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑÑŽÑ‚ -ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ профиле и прочую информацию. Ðти объÑÐ²Ð»ÐµÐ½Ð¸Ñ -приÑутÑтвуют в файле манифеÑта только во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ и отладки +<li>Он Ñодержит ÑпиÑок клаÑÑов {@link android.app.Instrumentation}, которые при выполнении Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑÑŽÑ‚ +ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ профиле и прочую информацию. Ðти объÑÐ²Ð»ÐµÐ½Ð¸Ñ +приÑутÑтвуют в файле манифеÑта только во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ и отладки Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ удалÑÑŽÑ‚ÑÑ Ð¿ÐµÑ€ÐµÐ´ его публикацией.</li> -<li>Он объÑвлÑет минимальный уровень API-интерфейÑа Android, который требуетÑÑ +<li>Он объÑвлÑет минимальный уровень API-интерфейÑа Android, который требуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÑŽ.</li> <li>Он Ñодержит ÑпиÑок библиотек, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ должно быть ÑвÑзано приложение.</li> @@ -61,12 +61,12 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h2 id="filestruct">Структура файла манифеÑта</h2> <p> -ÐŸÑ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ð°Ñ Ð´Ð°Ð»ÐµÐµ Ñхема позволÑет ознакомитьÑÑ Ñ Ð¾Ð±Ñ‰ÐµÐ¹ Ñтруктурой файла манифеÑта и -вÑеми Ñлементами, которые могут в нем ÑодержатьÑÑ. Каждый Ñлемент вмеÑте Ñо вÑеми Ñвоими -атрибутами, полноÑтью опиÑываетÑÑ Ð² отдельном файле. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра подробных -Ñведений о любом Ñлементе, щелкните Ð¸Ð¼Ñ Ñлемента на Ñхеме, -в алфавитном ÑпиÑке Ñлементов, приведенном поÑле Ñхемы, или -в любом другом меÑте, где Ñтот Ñлемент упоминаетÑÑ. +ÐŸÑ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ð°Ñ Ð´Ð°Ð»ÐµÐµ Ñхема позволÑет ознакомитьÑÑ Ñ Ð¾Ð±Ñ‰ÐµÐ¹ Ñтруктурой файла манифеÑта и +вÑеми Ñлементами, которые могут в нем ÑодержатьÑÑ. Каждый Ñлемент вмеÑте Ñо вÑеми Ñвоими +атрибутами, полноÑтью опиÑываетÑÑ Ð² отдельном файле. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра подробных +Ñведений о любом Ñлементе, щелкните Ð¸Ð¼Ñ Ñлемента на Ñхеме, +в алфавитном ÑпиÑке Ñлементов, приведенном поÑле Ñхемы, или +в любом другом меÑте, где Ñтот Ñлемент упоминаетÑÑ. </p> <pre> @@ -126,9 +126,9 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </pre> <p> -Далее приведен ÑпиÑок вÑех Ñлементов, раÑположенных в алфавитном порÑдке, которые могут +Далее приведен ÑпиÑок вÑех Ñлементов, раÑположенных в алфавитном порÑдке, которые могут приÑутÑтвовать в файле манифеÑта. Там могут находитьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñти Ñлементы, а никакие другие -Ñлементы или атрибуты добавлÑть нельзÑ. +Ñлементы или атрибуты добавлÑть нельзÑ. </p> <p style="margin-left: 2em"> @@ -158,74 +158,74 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </p> - + <h2 id="filec">Ð¡Ð¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¾ компонентах файла</h2> <p> -Ко вÑем Ñлементам и атрибутам +Ко вÑем Ñлементам и атрибутам из файла манифеÑта применÑетÑÑ Ñ€Ð°Ð´ Ñоглашений и правил: </p> <dl> <dt><b>Ðлементы</b></dt> -<dd>ОбÑзательными +<dd>ОбÑзательными ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñлементы<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> и -<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> +. Оба они должны приÑутÑтвовать в файле манифеÑта, при Ñтом указать их можно только один раз. +БольшинÑтво других Ñлементов можно указывать по неÑкольку раз или не указывать вовÑе — Ñ…Ð¾Ñ‚Ñ Ð¿Ð¾ +крайней мере некоторые из них нужны, чтобы файл манифеÑта был Ñколько-нибудь информативным. <p> -ЕÑли в Ñлементе и еÑть какое-то Ñодержимое, то Ñто другие Ñлементы. +ЕÑли в Ñлементе и еÑть какое-то Ñодержимое, то Ñто другие Ñлементы. Ð’Ñе Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°ÑŽÑ‚ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибутов, а не как Ñимвольные данные в Ñлементе. </p> <p> Ðлементы, находÑщиеÑÑ Ð½Ð° одном уровне, обычно не упорÑдочиваютÑÑ. Ðапример, - Ñлементы <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> и -<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></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> и +<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> +можно указать в любой поÑледовательноÑти. (Ðлемент <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> -ÑвлÑетÑÑ Ð¸Ñключением из Ñтого правила. Он должен Ñледовать за Ñлементом -<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>, пÑевдонимом которого он ÑвлÑетÑÑ.) </p></dd> <dt><b>Ðтрибуты</b></dt> -<dd>Формально вÑе атрибуты ÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ¾Ð±Ñзательными. Однако некоторые их них +<dd>Формально вÑе атрибуты ÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ¾Ð±Ñзательными. Однако некоторые их них указывать необходимо, чтобы файл мог выполнÑть Ñвое предназначение. Ð’ качеÑтве руководÑтва иÑпользуйте Ñту -документацию. Ð’ отношении атрибутов, которые ÑвлÑÑŽÑ‚ÑÑ Ð¸ вправду необÑзательными, в ней указываетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, +документацию. Ð’ отношении атрибутов, которые ÑвлÑÑŽÑ‚ÑÑ Ð¸ вправду необÑзательными, в ней указываетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, иÑпользуемое по умолчанию, или говоритÑÑ, что произойдет, еÑли такой атрибут не будет указан. -<p>За иÑключением некоторых атрибутов корневого Ñлемента -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -, имена вÑех атрибутов должны начинатьÑÑ Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑа {@code android:} — -например, {@code android:alwaysRetainTaskState}. ПоÑкольку Ñтот Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑвлÑетÑÑ -универÑальным, в документации при указании атрибутов по имени +<p>За иÑключением некоторых атрибутов корневого Ñлемента +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +, имена вÑех атрибутов должны начинатьÑÑ Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑа {@code android:} — +например, {@code android:alwaysRetainTaskState}. ПоÑкольку Ñтот Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑвлÑетÑÑ +универÑальным, в документации при указании атрибутов по имени он обычно опуÑкаетÑÑ.</p></dd> <dt><b>ОбъÑвление имен клаÑÑов</b></dt> -<dd>Многие Ñлементы ÑоответÑтвуют объектам Java, в том чиÑле Ñлементы Ð´Ð»Ñ Ñамого -Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Ñлемент +<dd>Многие Ñлементы ÑоответÑтвуют объектам Java, в том чиÑле Ñлементы Ð´Ð»Ñ Ñамого +Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Ñлемент <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -) и оÑновных его компонентов — операций -(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), -Ñлужб -(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), -приемников широковещательных Ñообщений -(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) -и поÑтавщиков контента -(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). +) и оÑновных его компонентов — операций +(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), +Ñлужб +(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), +приемников широковещательных Ñообщений +(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) +и поÑтавщиков контента +(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). <p> -ЕÑли вы определÑете подклаÑÑ, а Ñто практичеÑки вÑегда делаетÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов компонентов -({@link android.app.Activity}, {@link android.app.Service}, -{@link android.content.BroadcastReceiver} и {@link android.content.ContentProvider}), -выполнÑетÑÑ Ñто Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута {@code name}. Ð’ ÑоÑтав имени должно входить -полное обозначение пакета. +ЕÑли вы определÑете подклаÑÑ, а Ñто практичеÑки вÑегда делаетÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов компонентов +({@link android.app.Activity}, {@link android.app.Service}, +{@link android.content.BroadcastReceiver} и {@link android.content.ContentProvider}), +выполнÑетÑÑ Ñто Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута {@code name}. Ð’ ÑоÑтав имени должно входить +полное обозначение пакета. Ðапример, подклаÑÑ {@link android.app.Service} можно объÑвить Ñледующим образом: </p> @@ -239,12 +239,12 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </manifest></pre> <p> -Однако его можно укоротить. ЕÑли первым Ñимволом в Ñтроке указать точку, Ñта -Ñтрока будет добавлÑтьÑÑ Ðº имени пакета Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (указанного атрибутом -<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> -). Следующее назначение ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ же, как приведенное выше: +Однако его можно укоротить. ЕÑли первым Ñимволом в Ñтроке указать точку, Ñта +Ñтрока будет добавлÑтьÑÑ Ðº имени пакета Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (указанного атрибутом +<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> +). Следующее назначение ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ же, как приведенное выше: </p> <pre><manifest package="com.example.project" . . . > @@ -257,13 +257,13 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </manifest></pre> <p> -При запуÑке компонента Android Ñоздает ÑкземплÑÑ€ подклаÑÑа, указанного по имени. +При запуÑке компонента Android Ñоздает ÑкземплÑÑ€ подклаÑÑа, указанного по имени. ЕÑли подклаÑÑ Ð½Ðµ указан, ÑиÑтема Ñоздает ÑкземплÑÑ€ базового клаÑÑа. </p></dd> <dt><b>ÐеÑколько значений</b></dt> -<dd>ЕÑли можно указать неÑколько значений, Ñлемент почти вÑегда -приводитÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾. ДелаетÑÑ Ñто вмеÑто перечиÑÐ»ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких значений в одном Ñлементе. +<dd>ЕÑли можно указать неÑколько значений, Ñлемент почти вÑегда +приводитÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾. ДелаетÑÑ Ñто вмеÑто перечиÑÐ»ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких значений в одном Ñлементе. Ðапример, в фильтре Intent может быть перечиÑлено неÑколько дейÑтвий: <pre><intent-filter . . . > @@ -274,24 +274,24 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </intent-filter></pre></dd> <dt><b>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов</b></dt> -<dd>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… атрибутов могут отображатьÑÑ Ð½Ð° Ñкране — например, -метка и значок операции. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтих атрибутов -Ñледует локализовать, поÑтому они должны задаватьÑÑ Ð² реÑурÑе или теме. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ +<dd>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… атрибутов могут отображатьÑÑ Ð½Ð° Ñкране — например, +метка и значок операции. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтих атрибутов +Ñледует локализовать, поÑтому они должны задаватьÑÑ Ð² реÑурÑе или теме. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов выражаютÑÑ Ð² Ñледующем формате:</p> <p style="margin-left: 2em">{@code @[<i>пакет</i>:]<i>тип</i>:<i>имÑ</i>}</p> <p> -где <i>Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°</i> можно опуÑтить, еÑли реÑÑƒÑ€Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð² одном пакете -Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼, <i>тип —</i> Ñто тип реÑурÑа, — например "string" или -"drawable", — а <i>имÑ —</i> Ñто имÑ, определÑющее реÑурÑ. +где <i>Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°</i> можно опуÑтить, еÑли реÑÑƒÑ€Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð² одном пакете +Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼, <i>тип —</i> Ñто тип реÑурÑа, — например "string" или +"drawable", — а <i>имÑ —</i> Ñто имÑ, определÑющее реÑурÑ. Ðапример: </p> <pre><activity android:icon="@drawable/smallPic" . . . ></pre> <p> -Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· темы выражаютÑÑ Ñхожим образом, только в начале у них идет "{@code ?}", +Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· темы выражаютÑÑ Ñхожим образом, только в начале у них идет "{@code ?}", а не "{@code @}": </p> @@ -299,8 +299,8 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </p></dd> <dt><b>Строковые значениÑ</b></dt> -<dd>Когда значением атрибута ÑвлÑетÑÑ Ñтрока, Ñледует иÑпользовать двойную обратную коÑую черту ("{@code \\}") -Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñющей поÑледовательноÑти Ñимволов, — например "{@code \\n}" Ð´Ð»Ñ +<dd>Когда значением атрибута ÑвлÑетÑÑ Ñтрока, Ñледует иÑпользовать двойную обратную коÑую черту ("{@code \\}") +Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñющей поÑледовательноÑти Ñимволов, — например "{@code \\n}" Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки или "{@code \\uxxxx}" Ð´Ð»Ñ Ñимвола Юникода.</dd> </dl> @@ -308,7 +308,7 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h2 id="filef">Отображение функций в файле</h2> <p> -Ð’ Ñледующих разделах опиÑано, как некоторые функции Android отображаютÑÑ +Ð’ Ñледующих разделах опиÑано, как некоторые функции Android отображаютÑÑ Ð² файле манифеÑта. </p> @@ -316,37 +316,37 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h3 id="ifs">Фильтры объектов Intent</h3> <p> -Базовые компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (его операции, Ñлужбы и -приемники широковещательных Ñообщений) активируютÑÑ <i>объектами Intent</i>. Intent — -Ñто ÑовокупноÑть информации (объект {@link android.content.Intent}), опиÑывающей -требуемое дейÑтвие, — в том чиÑле в ней указаны данные, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ Ñледует выполнить Ñто дейÑтвие, ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ -компонентов, которые должны выполнÑть Ñто дейÑтвие, и другие умеÑтные инÑтрукции. -СиÑтема Android находит компонент, который отреагирует на объект Intent, запуÑкает -новый ÑкземплÑÑ€ компонента, еÑли он требуетÑÑ, и передает ему +Базовые компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (его операции, Ñлужбы и +приемники широковещательных Ñообщений) активируютÑÑ <i>объектами Intent</i>. Intent — +Ñто ÑовокупноÑть информации (объект {@link android.content.Intent}), опиÑывающей +требуемое дейÑтвие, — в том чиÑле в ней указаны данные, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ Ñледует выполнить Ñто дейÑтвие, ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ +компонентов, которые должны выполнÑть Ñто дейÑтвие, и другие умеÑтные инÑтрукции. +СиÑтема Android находит компонент, который отреагирует на объект Intent, запуÑкает +новый ÑкземплÑÑ€ компонента, еÑли он требуетÑÑ, и передает ему объект Intent. </p> <p> -Компоненты объÑвлÑÑŽÑ‚ Ñвои возможноÑти — виды объектов Intent, на которые они могут -реагировать, — Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <i>фильтров Intent</i>. ПоÑкольку ÑиÑтема Android -должна узнать, какие объекты Intent может обрабатывать тот или иной компонент, до того как она его запуÑтит, -фильтры Intent указываютÑÑ Ð² файле манифеÑта как -Ñлементы <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -. Компонент может иметь любое количеÑтво фильтров, каждый из которых опиÑывает +Компоненты объÑвлÑÑŽÑ‚ Ñвои возможноÑти — виды объектов Intent, на которые они могут +реагировать, — Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <i>фильтров Intent</i>. ПоÑкольку ÑиÑтема Android +должна узнать, какие объекты Intent может обрабатывать тот или иной компонент, до того как она его запуÑтит, +фильтры Intent указываютÑÑ Ð² файле манифеÑта как +Ñлементы <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> +. Компонент может иметь любое количеÑтво фильтров, каждый из которых опиÑывает отдельную возможноÑть компонента. </p> <p> -Объект Intent, в котором целевой компонент Ñвно указан по имени, активирует Ñтот компонент, -и фильтр при Ñтом не учитываетÑÑ. Ðо объект Intent, в котором Ð¸Ð¼Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ -компонента не указано, может активировать компонент, только еÑли он может пройти через один из фильтров +Объект Intent, в котором целевой компонент Ñвно указан по имени, активирует Ñтот компонент, +и фильтр при Ñтом не учитываетÑÑ. Ðо объект Intent, в котором Ð¸Ð¼Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ +компонента не указано, может активировать компонент, только еÑли он может пройти через один из фильтров компонента. </p> <p> -Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, каким образом объекты Intent проверÑÑŽÑ‚ÑÑ Ð¿Ð¾ фильтрам Intent, -Ñм. в отдельном документе -<a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent +Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, каким образом объекты Intent проверÑÑŽÑ‚ÑÑ Ð¿Ð¾ фильтрам Intent, +Ñм. в отдельном документе +<a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent и фильтры объектов Intent</a>. </p> @@ -354,42 +354,42 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h3 id="iconlabel">Значки и метки</h3> <p> -У Ñ€Ñда Ñлементов еÑть атрибуты {@code icon} и {@code label} Ð´Ð»Ñ -небольшого значка и текÑтовой метки, которые могут отображатьÑÑ Ð½Ð° Ñкране. У некоторых из них также еÑть атрибут -{@code description} Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ длинного опиÑательного текÑта, который также может -отображатьÑÑ Ð½Ð° Ñкране. Ðапример, Ñлемент +У Ñ€Ñда Ñлементов еÑть атрибуты {@code icon} и {@code label} Ð´Ð»Ñ +небольшого значка и текÑтовой метки, которые могут отображатьÑÑ Ð½Ð° Ñкране. У некоторых из них также еÑть атрибут +{@code description} Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ длинного опиÑательного текÑта, который также может +отображатьÑÑ Ð½Ð° Ñкране. Ðапример, Ñлемент <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -имеет вÑе три таких атрибута, поÑтому, когда пользователю задаетÑÑ Ð²Ð¾Ð¿Ñ€Ð¾Ñ, предоÑтавить ли -разрешение запроÑившему его приложению, на Ñкране может отображатьÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº, -предÑтавлÑющий разрешение, Ð¸Ð¼Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ опиÑание того, что оно +имеет вÑе три таких атрибута, поÑтому, когда пользователю задаетÑÑ Ð²Ð¾Ð¿Ñ€Ð¾Ñ, предоÑтавить ли +разрешение запроÑившему его приложению, на Ñкране может отображатьÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº, +предÑтавлÑющий разрешение, Ð¸Ð¼Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ опиÑание того, что оно за Ñобой влечет. </p> <p> -Ð’ любом Ñлучае значок и метка, заданные в Ñлементе-контейнере, ÑтановÑÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ -{@code icon} и {@code label}, иÑпользуемыми по умолчанию Ð´Ð»Ñ Ð²Ñех вложенных в Ñтот контейнер дочерних Ñлементов. -Так, значок и метка, заданные в Ñлементе -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>, -ÑвлÑÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð¼ и меткой, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компонента приложениÑ. -Точно так же, значок и метка, заданные Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, — например Ñлемента -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, — -ÑвлÑÑŽÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлемента -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> - компонента. ЕÑли в Ñлементе -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -задана метка, а в операции и ее фильтре Intent — нет, -метка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ ÑчитатьÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹ и Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, и Ð´Ð»Ñ +Ð’ любом Ñлучае значок и метка, заданные в Ñлементе-контейнере, ÑтановÑÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ +{@code icon} и {@code label}, иÑпользуемыми по умолчанию Ð´Ð»Ñ Ð²Ñех вложенных в Ñтот контейнер дочерних Ñлементов. +Так, значок и метка, заданные в Ñлементе +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>, +ÑвлÑÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð¼ и меткой, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компонента приложениÑ. +Точно так же, значок и метка, заданные Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, — например Ñлемента +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, — +ÑвлÑÑŽÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлемента +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> + компонента. ЕÑли в Ñлементе +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +задана метка, а в операции и ее фильтре Intent — нет, +метка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ ÑчитатьÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹ и Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, и Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° Intent. </p> <p> -Значок и метка, заданные Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° Intent, иÑпользуютÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, +Значок и метка, заданные Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° Intent, иÑпользуютÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, когда он предÑтавлÑетÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸, -которую анонÑирует фильтр. Ðапример, фильтр Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ -"{@code android.intent.action.MAIN}" и -"{@code android.intent.category.LAUNCHER}" Ñообщает, что Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ +которую анонÑирует фильтр. Ðапример, фильтр Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ +"{@code android.intent.action.MAIN}" и +"{@code android.intent.category.LAUNCHER}" Ñообщает, что Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð¸Ñ€ÑƒÐµÑ‚ приложение, — то еÑть он обозначает ее как - операцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть отображена в ÑредÑтве запуÑка приложений. ОтÑюда Ñледует, что значок и метка, + операцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть отображена в ÑредÑтве запуÑка приложений. ОтÑюда Ñледует, что значок и метка, заданные в фильтре, отображаютÑÑ Ð² ÑредÑтве запуÑка. </p> @@ -397,14 +397,14 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h3 id="perms">РазрешениÑ</h3> <p> -Разрешение <i>предÑтавлÑет</i> Ñобой ограничение на доÑтуп к чаÑти кода -или к данным, имеющимÑÑ Ð½Ð° уÑтройÑтве. Ðто ограничение накладываетÑÑ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ важных -данных и кода, ненадлежащее иÑпользование которых может пагубно ÑказатьÑÑ Ð½Ð° работе приложениÑ. +Разрешение <i>предÑтавлÑет</i> Ñобой ограничение на доÑтуп к чаÑти кода +или к данным, имеющимÑÑ Ð½Ð° уÑтройÑтве. Ðто ограничение накладываетÑÑ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ важных +данных и кода, ненадлежащее иÑпользование которых может пагубно ÑказатьÑÑ Ð½Ð° работе приложениÑ. </p> <p> -Каждое разрешение обозначаетÑÑ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ меткой. ЗачаÑтую метка обозначает -дейÑтвие, выполнение которого ограничиваетÑÑ. Ðапример, вот некоторые разрешениÑ, определенные +Каждое разрешение обозначаетÑÑ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ меткой. ЗачаÑтую метка обозначает +дейÑтвие, выполнение которого ограничиваетÑÑ. Ðапример, вот некоторые разрешениÑ, определенные ÑиÑтемой Android: </p> @@ -418,25 +418,25 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </p> <p> -ЕÑли приложению требуетÑÑ Ð´Ð¾Ñтуп к функции, защищенной разрешением, -оно должно объÑвить, что ему необходимо Ñто разрешение, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента -<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> -Приложение также может защищать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ разрешений ÑобÑтвенные компоненты (операции, Ñлужбы, -приемники широковещательных Ñообщений и поÑтавщиков контента). Оно может иÑпользовать -любые разрешениÑ, определенные ÑиÑтемой Android (они приведены в объекте -{@link android.Manifest.permission android.Manifest.permission}) или объÑвленные -другими приложениÑми. Либо оно может определить Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑамоÑтоÑтельно. Ðовое разрешение объÑвлÑетÑÑ -Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента +Приложение также может защищать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ разрешений ÑобÑтвенные компоненты (операции, Ñлужбы, +приемники широковещательных Ñообщений и поÑтавщиков контента). Оно может иÑпользовать +любые разрешениÑ, определенные ÑиÑтемой Android (они приведены в объекте +{@link android.Manifest.permission android.Manifest.permission}) или объÑвленные +другими приложениÑми. Либо оно может определить Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑамоÑтоÑтельно. Ðовое разрешение объÑвлÑетÑÑ +Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> . Ðапример, операцию можно защитить Ñледующим образом: </p> @@ -457,43 +457,43 @@ Intent} они могут принимать). Ðа оÑновании Ñтих </pre> <p> -Обратите внимание, что в Ñтом примере разрешение {@code DEBIT_ACCT} не только -объÑвлÑетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента +Обратите внимание, что в Ñтом примере разрешение {@code DEBIT_ACCT} не только +объÑвлÑетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, его иÑпользование также запрашиваетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента +, его иÑпользование также запрашиваетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> . Чтобы другие компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкали защищенную -операцию, ее иÑпользование должно быть запрошено, даже неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что защита -наложена Ñамим приложением. +операцию, ее иÑпользование должно быть запрошено, даже неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что защита +наложена Ñамим приложением. </p> <p> -Ð’ Ñтом же примере: еÑли атрибут {@code permission} был бы задан как -разрешение, объÑвленное где-то еще -(например, {@code android.permission.CALL_EMERGENCY_NUMBERS}), его бы не -нужно было объÑвлÑть еще раз Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента +Ð’ Ñтом же примере: еÑли атрибут {@code permission} был бы задан как +разрешение, объÑвленное где-то еще +(например, {@code android.permission.CALL_EMERGENCY_NUMBERS}), его бы не +нужно было объÑвлÑть еще раз Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -. Однако вÑе равно нужно было бы запрашивать его иÑпользование Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -<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> -Ðлемент -<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> +объÑвлÑет проÑтранÑтво имен Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разрешений, которые будут определены в +коде. Ð Ñлемент <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -определÑет метку Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° разрешений (как Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, объÑвленных в файле манифеÑта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлементов +определÑет метку Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° разрешений (как Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, объÑвленных в файле манифеÑта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлементов <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, так и Ð´Ð»Ñ Ð¾Ð±ÑŠÑвленных где-то еще). Ðто влиÑет только на то, каким образом Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -группируютÑÑ, когда отображаютÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ. Ðлемент +, так и Ð´Ð»Ñ Ð¾Ð±ÑŠÑвленных где-то еще). Ðто влиÑет только на то, каким образом Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ +группируютÑÑ, когда отображаютÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ. Ðлемент <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -не указывает, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾ÑÑÑ‚ÑÑ Ðº группе. +не указывает, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾ÑÑÑ‚ÑÑ Ðº группе. Он проÑто дает группе имÑ. Чтобы включить разрешение в группу, -атрибуту -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> - его Ñлемента -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +атрибуту +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> + его Ñлемента +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> необходимо приÑвоить Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹. </p> @@ -501,17 +501,17 @@ Intent} они могут принимать). Ðа оÑновании Ñтих <h3 id="libs">Библиотеки</h3> <p> -Каждое приложение ÑвÑзываетÑÑ Ñ Ð¸Ñпользуемой по умолчанию библиотекой Android, в которой -имеютÑÑ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ðµ пакеты Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ (Ñо Ñтандартными клаÑÑами, -например Activity, Service, Intent, View, Button, Application, ContentProvider +Каждое приложение ÑвÑзываетÑÑ Ñ Ð¸Ñпользуемой по умолчанию библиотекой Android, в которой +имеютÑÑ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ðµ пакеты Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ (Ñо Ñтандартными клаÑÑами, +например Activity, Service, Intent, View, Button, Application, ContentProvider и так далее). </p> <p> -Однако некоторые пакеты находÑÑ‚ÑÑ Ð² ÑобÑтвенных библиотеках. ЕÑли ваше приложение -иÑпользует код из одного из таких пакетов, оно должно в Ñвном виде потребовать, чтобы его ÑвÑзали -Ñ Ñтим пакетом. Файл манифеÑта должен Ñодержать отдельный Ñлемент -<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> -Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ каждой библиотеки. (Ð˜Ð¼Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ можно найти в +Однако некоторые пакеты находÑÑ‚ÑÑ Ð² ÑобÑтвенных библиотеках. ЕÑли ваше приложение +иÑпользует код из одного из таких пакетов, оно должно в Ñвном виде потребовать, чтобы его ÑвÑзали +Ñ Ñтим пакетом. Файл манифеÑта должен Ñодержать отдельный Ñлемент +<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> +Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ каждой библиотеки. (Ð˜Ð¼Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ можно найти в документации по пакету.) </p> diff --git a/docs/html-intl/intl/ru/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/ru/guide/topics/providers/calendar-provider.jd index 2d12e1261d93..3533ad00f6a1 100644 --- a/docs/html-intl/intl/ru/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/ru/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=ПоÑтавщик ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ <li><a href="#intent-view">ИÑпользование Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра данных календарÑ</a></li> </ol> </li> - + <li><a href="#sync-adapter">Ðдаптеры Ñинхронизации</a></li> </ol> @@ -113,26 +113,26 @@ URI имеют формат <code><em><class></em>.CONTENT_URI</code>. ÐÐ </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>Ð’ Ñтой таблице находитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ календарÑÑ…. Ð’ каждой Ñтроке Ñтой таблицы предÑтавлены ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± отдельном календаре, например, его название, цвет, Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñинхронизации и Ñ‚. д.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>Ð’ Ñтой таблице находитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑобытиÑÑ…. Ð’ каждой Ñтроке Ñтой таблицы ÑодержитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± отдельном Ñобытии —например, заголовок ÑобытиÑ, меÑто проведениÑ, Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¸ Ñ‚. д. Событие может быть однократным или повторÑющимÑÑ. Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± учаÑтниках, -напоминаниÑÑ… и раÑширенные ÑвойÑтва хранÑÑ‚ÑÑ Ð² отдельных таблицах. +напоминаниÑÑ… и раÑширенные ÑвойÑтва хранÑÑ‚ÑÑ Ð² отдельных таблицах. Ð’ каждой из них имеетÑÑ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑÑылаетÑÑ Ð½Ð° объект {@link android.provider.BaseColumns#_ID} в таблице Ñобытий.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>Ð’ Ñтой таблице ÑодержатÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ о времени начала и Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ ÑобытиÑ. Ð’ каждой Ñтроке Ñтой таблицы предÑтавлено одно повторение ÑобытиÑ. Однократные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÑопоÑтавлÑÑŽÑ‚ÑÑ Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñми @@ -141,7 +141,7 @@ URI имеют формат <code><em><class></em>.CONTENT_URI</code>. ÐÐ </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>Ð’ Ñтой таблице находитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± учаÑтниках (гоÑÑ‚ÑÑ…). Ð’ каждой Ñтроке Ñтой таблицы указан один гоÑть. Ð’ ней указываютÑÑ Ñ‚Ð¸Ð¿ гоÑÑ‚Ñ Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, @@ -149,7 +149,7 @@ URI имеют формат <code><em><class></em>.CONTENT_URI</code>. ÐÐ </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>Ð’ Ñтой таблице находÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ уведомлений или оповещений. Ð’ каждой Ñтроке Ñтой таблицы указано одно уведомление или оповещение. Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñоздать неÑколько напоминаний. МакÑимальное количеÑтво таких напоминаний Ð´Ð»Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ @@ -159,7 +159,7 @@ URI имеют формат <code><em><class></em>.CONTENT_URI</code>. ÐРуказанным календарем. ÐÐ°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°ÑŽÑ‚ÑÑ Ð² минутах до начала ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ имеют метод, который определÑет порÑдок ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ.</td> </tr> - + </table> <p>API поÑтавщика ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð¾Ð±ÐµÑпечивает доÑтаточную гибкоÑть и ÑффективноÑть. Ð’ то же Ð²Ñ€ÐµÐ¼Ñ @@ -211,7 +211,7 @@ android.Manifest.permission#READ_CALENDAR}. Также в него <p>Ð’ таблице {@link android.provider.CalendarContract.Calendars} ÑодержатÑÑ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ñ‹Ðµ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ каждом отдельном календаре. ВыполнÑть запиÑÑŒ в указанные ниже Ñтолбцы -Ñтой таблицы могут и приложение, и <a href="#sync-adapter">адаптер Ñинхронизации</a>. +Ñтой таблицы могут и приложение, и <a href="#sync-adapter">адаптер Ñинхронизации</a>. Полный ÑпиÑок поддерживаемых полей предÑтавлен в Ñправке по клаÑÑу {@link android.provider.CalendarContract.Calendars}.</p> <table> @@ -229,7 +229,7 @@ android.Manifest.permission#READ_CALENDAR}. Также в него </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>ЛогичеÑкое значение, обозначающее, выбран ли календарь Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ. Значение «0» указывает на то, что ÑобытиÑ, ÑвÑзанные Ñ Ñтим календарем, не отображаютÑÑ. Значение «1» указывает на то, что ÑобытиÑ, ÑвÑзанные Ñ @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances}.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>ЛогичеÑкое значение, обозначающее, Ñледует ли Ñинхронизировать календарь и хранить имеющиеÑÑ Ð² нем ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ð° уÑтройÑтве. Значение «0» указывает, что не Ñледует Ñинхронизировать Ñтот календарь или хранить имеющиеÑÑ Ð² нем ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ð° уÑтройÑтве. Значение «1» указывает, что Ñтот календарь Ñледует Ñинхронизировать и @@ -268,13 +268,13 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Зачем необходимо указывать параметр ACCOUNT_TYPE?</h3> <p>При Ñоздании запроÑа {@link @@ -289,7 +289,7 @@ Calendars.ACCOUNT_NAME} необходимо также android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. Он иÑпользуетÑÑ Ð´Ð»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÐµÐ¹, которые не ÑвÑзаны Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð¾Ð¼ уÑтройÑтва. Ðккаунты {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} не -ÑинхронизируютÑÑ.</p> </div> </div> +ÑинхронизируютÑÑ.</p> </div> </div> <p> Ð’ Ñледующей чаÑти примера ÑоздаетÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñ. С помощью выбора определÑÑŽÑ‚ÑÑ @@ -308,38 +308,38 @@ android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} не <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>Ð’ Ñледующем разделе кода выполнÑетÑÑ Ð¿Ð¾ÑˆÐ°Ð³Ð¾Ð²Ñ‹Ð¹ обзор набора результатов Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ курÑора. Ð’ нем иÑпользуютÑÑ ÐºÐ¾Ð½Ñтанты, которые были заданы в начале примера, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из полей.</p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">Изменение календарÑ</h3> <p>Чтобы обновить календарь, можно указать {@link @@ -350,7 +350,7 @@ android.provider.BaseColumns#_ID} календарÑ: либо в виде идРлибо в качеÑтве первого Ñлемента выделениÑ. Выделение должно начинатьÑÑ Ñ <code>"_id=?"</code>, а первым аргументом <code>selectionArg</code> должен быть {@link -android.provider.BaseColumns#_ID} календарÑ. +android.provider.BaseColumns#_ID} календарÑ. Также Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ð¹ можно закодировать идентификатор в URI. Ð’ Ñтом примере Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÐ¼Ð¾Ð³Ð¾ имени ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð¸ÑпользуетÑÑ Ð¿Ð¾Ð´Ñ…Ð¾Ð´ @@ -387,7 +387,7 @@ android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. в <a href="#manifest">файл манифеÑта</a> Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ включить разрешение {@link android.Manifest.permission#WRITE_CALENDAR}.</p> -<p>ВыполнÑть запиÑÑŒ в указанные ниже Ñтолбцы Ñтой таблицы могут и приложение, и +<p>ВыполнÑть запиÑÑŒ в указанные ниже Ñтолбцы Ñтой таблицы могут и приложение, и адаптер Ñинхронизации. Полный ÑпиÑок поддерживаемых полей предÑтавлен в Ñправке по клаÑÑу {@link android.provider.CalendarContract.Events}.</p> @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>ПродолжительноÑть ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² формате <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a>. Ðапример, значение <code>"PT1H"</code> обозначает, что Ñобытие должно длитьÑÑ Ð¾Ð´Ð¸Ð½ чаÑ, а значение <code>"P2W"</code> указывает на продолжительноÑть @@ -444,39 +444,39 @@ android.provider.CalendarContract.Events}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>Значение «1» обозначает, что Ñто Ñобытие занимает веÑÑŒ день по меÑтному чаÑовому поÑÑу. Значение «0» указывает на то, что Ñто регулÑрное Ñобытие, которое может начатьÑÑ Ð¸ завершитьÑÑ Ð² любое Ð²Ñ€ÐµÐ¼Ñ Ð² течение днÑ.</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>Правило Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° ÑобытиÑ. Ðапример, <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. С другими примерами можно ознакомитьÑÑ <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">здеÑÑŒ</a>.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>Даты Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ ÑобытиÑ. + <td>Даты Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ ÑобытиÑ. Обычно {@link android.provider.CalendarContract.EventsColumns#RDATE} иÑпользуетÑÑ Ð²Ð¼ÐµÑте Ñ {@link android.provider.CalendarContract.EventsColumns#RRULE} Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð°Ð³Ñ€ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ набора повторÑющихÑÑ Ñобытий. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлены в <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">Ñпецификации RFC5545</a>.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>ЕÑли Ñобытие ÑчитаетÑÑ ÐºÐ°Ðº занÑтое или как Ñвободное времÑ, доÑтупное Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}. Обратите внимание, что вÑтавке ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ {@link android.content.Intent#ACTION_INSERT INSERT}, как опиÑано в разделе <a href="#intent-insert">ИÑпользование Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñтавки ÑобытиÑ</a>, — в Ñтом Ñлучае иÑпользуетÑÑ Ñ‡Ð°Ñовой поÑÑ Ð¿Ð¾ умолчанию.</li> - + <li>Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ñ‹Ñ… Ñобытий необходимо указать {@link android.provider.CalendarContract.EventsColumns#DTEND}. </li> - - + + <li>Ð”Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑющихÑÑ Ñобытий необходимо указать {@link android.provider.CalendarContract.EventsColumns#DURATION} в дополнение к {@link android.provider.CalendarContract.EventsColumns#RRULE} или {@link @@ -528,7 +528,7 @@ android.content.Intent#ACTION_INSERT INSERT}, как опиÑано в раздРÑлучае можно иÑпользовать {@link android.provider.CalendarContract.EventsColumns#RRULE} в Ñочетании Ñ {@link android.provider.CalendarContract.EventsColumns#DTSTART} и {@link android.provider.CalendarContract.EventsColumns#DTEND}; кроме того, приложение «Календарь» автоматичеÑки преобразует указанный период в продолжительноÑть.</li> - + </ul> <p>Ðиже предÑтавлен пример вÑтавки ÑобытиÑ. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñтоты вÑе Ñто выполнÑетÑÑ Ð² потоке @@ -539,8 +539,8 @@ android.provider.CalendarContract.EventsColumns#RRULE} в Ñочетании Ñ <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,7 +625,7 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Таблица учаÑтников</h2> @@ -634,10 +634,10 @@ Log.i(DEBUG_TAG, "Rows deleted: " + rows); указан один учаÑтник или гоÑть ÑобытиÑ. При вызове метода {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} возвращаетÑÑ ÑпиÑок учаÑтников Ð´Ð»Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ -Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}. +Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}. Ðтот {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} должен ÑоответÑтвовать {@link -android.provider.BaseColumns#_ID} определенного ÑобытиÑ.</p> +android.provider.BaseColumns#_ID} определенного ÑобытиÑ.</p> <p>Ð’ таблице ниже указаны полÑ, доÑтупные Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи. При вÑтавке нового учаÑтника необходимо указать вÑе Ñти полÑ, кроме @@ -720,7 +720,7 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <p>Ð’ каждой Ñтроке таблицы {@link android.provider.CalendarContract.Reminders} указано одно напоминание о Ñобытии. При вызове метода {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}возвращаетÑÑ ÑпиÑок напоминаний Ð´Ð»Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ -Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ +Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}.</p> @@ -780,9 +780,9 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> возможноÑть запрашивать Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ Ñобытий. </p> <p>Ð’ таблице ниже перечиÑлены некоторые из полей, которые можно запроÑить Ð´Ð»Ñ ÑкземплÑра. Обратите внимание, -что чаÑовой поÑÑ Ð·Ð°Ð´Ð°ÐµÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -и +что чаÑовой поÑÑ Ð·Ð°Ð´Ð°ÐµÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} +и {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p> @@ -801,18 +801,18 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>День Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑкземплÑра по юлианÑкому календарю отноÑительно чаÑового поÑÑа -Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». - +Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>Минута Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑкземплÑра, вычиÑÐ»ÐµÐ½Ð½Ð°Ñ Ð¾Ñ‚ полуночи по чаÑовому поÑÑу Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ».</td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,27 +820,27 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>День начала ÑкземплÑра по юлианÑкому календарю отноÑительно чаÑового поÑÑа Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». + <td>День начала ÑкземплÑра по юлианÑкому календарю отноÑительно чаÑового поÑÑа Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>Минута начала ÑкземплÑра, вычиÑÐ»ÐµÐ½Ð½Ð°Ñ Ð¾Ñ‚ полуночи по чаÑовому поÑÑу -Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». +Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Â«ÐšÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒÂ». </td> - + </tr> </table> <h3 id="query-instances">Ð—Ð°Ð¿Ñ€Ð¾Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ ÑкземплÑров</h3> -<p>Чтобы запроÑить таблицу ÑкземплÑров, необходимо указать промежуток времени Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа в +<p>Чтобы запроÑить таблицу ÑкземплÑров, необходимо указать промежуток времени Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа в URI. Ð’ Ñтом примере {@link android.provider.CalendarContract.Instances} получает доÑтуп к полю {@link android.provider.CalendarContract.EventsColumns#TITLE} поÑредÑтвом Ñвоей реализации -интерфейÑа {@link android.provider.CalendarContract.EventsColumns}. +интерфейÑа {@link android.provider.CalendarContract.EventsColumns}. Другими Ñловами, {@link android.provider.CalendarContract.EventsColumns#TITLE} возвращаетÑÑ Ð¿Ð¾ÑредÑтвом Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº базе данных, а не путем запроÑа таблицы {@link @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -923,8 +923,8 @@ while (cur.moveToNext()) { {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> СоÑлатьÑÑ Ð½Ð° URI также можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. -Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен в разделе <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ИÑпользование намерений Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра данных календарÑ</a>. +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. +Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен в разделе <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ИÑпользование намерений Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра данных календарÑ</a>. </td> <td>Открытие ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð²Ð¾ времÑ, заданное параметром <code><ms_since_epoch></code>.</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + СоÑлатьÑÑ Ð½Ð° URI также можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен в разделе <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">ИÑпользование намерений Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра данных календарÑ</a>. - + </td> <td>ПроÑмотр ÑобытиÑ, указанного Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <code><event_id></code>.</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - + СоÑлатьÑÑ Ð½Ð° URI также можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен в разделе <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">ИÑпользование Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑобытиÑ</a>. - - + + </td> <td>Редактирование ÑобытиÑ, указанного Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <code><event_id></code>.</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - + СоÑлатьÑÑ Ð½Ð° URI также можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен в разделе <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">ИÑпользование Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑобытиÑ</a>. - + </td> <td>Создание ÑобытиÑ.</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>Ðазвание ÑобытиÑ.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>Ð’Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (в миллиÑекундах) от Ñпохи.</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>Ð’Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (в миллиÑекундах) от Ñпохи.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>ЛогичеÑкое значение, обозначающее, что Ñто Ñобытие на веÑÑŒ день. Значение может быть <code>true</code> или <code>false</code>.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>МеÑто Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑобытиÑ.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>ОпиÑание ÑобытиÑ.</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>Указывает на то, ÑвлÑетÑÑ Ð»Ð¸ Ñобытие общедоÑтупным или закрытым.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>ЕÑли Ñобытие ÑчитаетÑÑ ÐºÐ°Ðº занÑтое или как Ñвободное времÑ, доÑтупное Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ.</td> - -</table> + +</table> <p>Ð’ разделах ниже указан порÑдок иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтих намерений.</p> @@ -1059,14 +1059,14 @@ Events.AVAILABILITY}</td> Ð‘Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñтому в <a href="#manifest">файл манифеÑта</a> вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ нужно включать разрешение {@link android.Manifest.permission#WRITE_CALENDAR}.</p> - + <p>Когда пользователи работают Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼, в котором иÑпользуетÑÑ Ñ‚Ð°ÐºÐ¾Ð¹ подход, приложение отправлÑет их в «Календарь» Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑ. Ðамерение {@link android.content.Intent#ACTION_INSERT INSERT} иÑпользует дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð² форме Ñведений о Ñобытии в приложении «Календарь». ПоÑле Ñтого пользователи могут отменить Ñобытие, отредактировать форму или Ñохранить Ñобытие в Ñвоем календаре.</p> - + <p>Ðиже предÑтавлен фрагмент кода, в котором на 19 ÑнварÑ 2012 г. планируетÑÑ Ñобытие, которое будет проходить Ñ @@ -1075,7 +1075,7 @@ android.content.Intent#ACTION_INSERT INSERT} иÑпользует дополни <ul> <li>Ð’ качеÑтве URI в нем задаетÑÑ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.</li> - + <li>Ð’ нем иÑпользуютÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð¿Ð¾Ð»Ñ {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} и {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð² форме Ñведений о времени ÑобытиÑ. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ должны быть указаны в формате UTC и в миллиÑекундах от Ñпохи.</li> - + <li>Ð’ нем иÑпользуетÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ поле {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑпиÑка учаÑтников, разделенных запÑтыми (их адреÑа Ñл. почты).</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,12 +1158,12 @@ startActivity(intent); <ul> <li>Ðдаптеру Ñинхронизации необходимо указать, что он ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¾Ð²Ñ‹Ð¼, задав Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} значение <code>true</code>.</li> - - + + <li>Ðдаптеру Ñинхронизации необходимо предоÑтавить {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} и {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} в качеÑтве параметров запроÑа в URI. </li> - + <li>Ðдаптер Ñинхронизации имеет доÑтуп на запиÑÑŒ к большему чиÑлу Ñтолбцов, чем приложение или виджет. Ðапример, приложение может изменÑть только некоторые характериÑтики календарÑ, такие как название, отображаемое имÑ, наÑтройки видимоÑти и diff --git a/docs/html-intl/intl/ru/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/ru/guide/topics/providers/contacts-provider.jd index 4d07856f250e..151f75bc7e83 100644 --- a/docs/html-intl/intl/ru/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/ru/guide/topics/providers/contacts-provider.jd @@ -467,7 +467,7 @@ Email.CONTENT_ITEM_TYPE}, в которой в Ñтолбце </p> <p> При добавлении нового необработанного контакта, -который не ÑоответÑтвует ни одному из ÑущеÑтвующих контактов, поÑтавщик контактов Ñоздает новый контакт. ПоÑтавщик поÑтупает аналогично в Ñлучае, еÑли +который не ÑоответÑтвует ни одному из ÑущеÑтвующих контактов, поÑтавщик контактов Ñоздает новый контакт. ПоÑтавщик поÑтупает аналогично в Ñлучае, еÑли данные в Ñтроке ÑущеÑтвующего необработанного контакта изменÑÑŽÑ‚ÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ образом, что они больше не ÑоответÑтвуют контакту, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ они ранее были ÑвÑзаны. При Ñоздании приложением или адаптером Ñинхронизации нового контакта, который <em></em> ÑоответÑтвует ÑущеÑтвующему контакту, то новый контакт объединÑетÑÑ Ñ @@ -543,7 +543,7 @@ Email.CONTENT_ITEM_TYPE}, в которой в Ñтолбце </p> <p> ЕÑли необходимо передать данные из Ñлужбы в поÑтавщик контактов, необходимо Ñоздать -ÑобÑтвенный адаптер Ñинхронизации. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом предÑтавлены в разделе +ÑобÑтвенный адаптер Ñинхронизации. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом предÑтавлены в разделе <a href="#SyncAdapters">Ðдаптеры Ñинхронизации поÑтавщика контактов</a>. </p> <p> @@ -672,7 +672,7 @@ mProfileCursor = Android. <p> Ðдаптеры Ñинхронизации, которые вноÑÑÑ‚ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² необработанные контакты или таблицы данных, должны вÑегда добавлÑть к иÑпользуемому ими URI -контента Ñтроку +контента Ñтроку {@link android.provider.ContactsContract#CALLER_IS_SYNCADAPTER}. Ðто позволÑет предотвратить пометку таких Ñтрок поÑтавщиком как «грÑзных». Ð’ противном Ñлучае изменениÑ, внеÑенные адаптером Ñинхронизации, будут раÑÑматриватьÑÑ ÐºÐ°Ðº локальные изменениÑ, которые подлежат отправке на Ñервер, даже еÑли иÑточником таких изменений был Ñам Ñервер. @@ -1809,7 +1809,7 @@ URI веб-Ñлужбы Ð´Ð»Ñ Ñинхронизации Ñ Ð¿Ð¾ÑтавщикР<li> <strong>ÐеобÑзательно:</strong> Ñлемент <code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code> -Ð´Ð»Ñ Ñтруктуры проверки подлинноÑти указывает на файл XML +Ð´Ð»Ñ Ñтруктуры проверки подлинноÑти указывает на файл XML <code>res/xml/authenticator.xml</code>. Ð’ Ñвою очередь, в Ñтом файле задаетÑÑ Ñ‚Ð¸Ð¿ аккаунта, который поддерживает Ñтруктура проверки подлинноÑти, а также реÑурÑÑ‹ пользовательÑкого интерфейÑа, которые отображаютÑÑ Ð² процеÑÑе аутентификации. Тип аккаунта, указанный в Ñтом @@ -2022,7 +2022,7 @@ openAssetFileDescriptor()}, передав в него Ñтот URI, чтобы </ul> <p> РегулÑÑ€Ð½Ð°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñлементов потока Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика контактов выполнÑетÑÑ Ñ‚Ð°Ðº же, -как и Ð»ÑŽÐ±Ð°Ñ Ð´Ñ€ÑƒÐ³Ð°Ñ ÑинхронизациÑ. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñинхронизации предÑтавлены в разделе +как и Ð»ÑŽÐ±Ð°Ñ Ð´Ñ€ÑƒÐ³Ð°Ñ ÑинхронизациÑ. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñинхронизации предÑтавлены в разделе <a href="#SyncAdapters">Ðдаптеры Ñинхронизации поÑтавщика контактов</a>. РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹ и приглашение контактов раÑÑматриваютÑÑ Ð² Ñледующих двух разделах. </p> @@ -2092,7 +2092,7 @@ openAssetFileDescriptor()}, передав в него Ñтот URI, чтобы <h4>ВзаимодейÑтвие Ñо Ñлужбой Ñоциальной Ñети</h4> <p> ПользователÑм не обÑзательно выходить из Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°Ð¼Ð¸, которое имеетÑÑ Ð½Ð° уÑтройÑтве, чтобы приглаÑить контакт на Ñайт -Ñоциальной Ñети. ВмеÑто Ñтого приложение Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°Ð¼Ð¸ может отправить намерение Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ +Ñоциальной Ñети. ВмеÑто Ñтого приложение Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°Ð¼Ð¸ может отправить намерение Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð° в одну из ваших операций. Ð”Ð»Ñ Ñтого выполните указанные ниже дейÑтвиÑ. </p> <ol> diff --git a/docs/html-intl/intl/ru/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/ru/guide/topics/providers/content-provider-basics.jd index c912dbc03752..4d520e814dc0 100644 --- a/docs/html-intl/intl/ru/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/ru/guide/topics/providers/content-provider-basics.jd @@ -251,7 +251,7 @@ mCursor = getContentResolver().query( </pre> <p> Ð’ таблице 2 указано ÑоответÑтвие аргументов Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° -{@link android.content.ContentResolver#query +{@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} SQL-инÑтрукции SELECT. </p> <p class="table-caption"> @@ -701,7 +701,7 @@ if (mCursor != null) { Ð´Ð»Ñ Ð²Ñтавки, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. </p> <p> - Чтобы получить разрешениÑ, необходимые Ð´Ð»Ñ Ð´Ð¾Ñтупа к поÑтавщику, приложение запрашивает их Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента + Чтобы получить разрешениÑ, необходимые Ð´Ð»Ñ Ð´Ð¾Ñтупа к поÑтавщику, приложение запрашивает их Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> в файле манифеÑта. При уÑтановке менеджером пакетов Android Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ необходимо утвердить вÑе разрешениÑ, запрашиваемые приложением. Ð’ Ñлучае ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ñех разрешений diff --git a/docs/html-intl/intl/ru/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/ru/guide/topics/providers/content-provider-creating.jd index d8f787393eaa..d6697579b4a4 100644 --- a/docs/html-intl/intl/ru/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/ru/guide/topics/providers/content-provider-creating.jd @@ -485,7 +485,7 @@ public class ExampleProvider extends ContentProvider { <h3 id="RequiredAccess">Ðеобходимые методы</h3> <p> Ð’ абÑтрактном клаÑÑе {@link android.content.ContentProvider} определены шеÑть абÑтрактных методов, -которые необходимо реализовать в рамках вашего ÑобÑтвенного конкретного подклаÑÑа. Ð’Ñе указанные ниже методы, кроме +которые необходимо реализовать в рамках вашего ÑобÑтвенного конкретного подклаÑÑа. Ð’Ñе указанные ниже методы, кроме {@link android.content.ContentProvider#onCreate() onCreate()}, вызываютÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñким приложением, которое пытаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к вашему поÑтавщику контента. </p> @@ -777,7 +777,7 @@ URI контента. Ðргумент {@link android.net.Uri} может Ð²Ñ‹Ñ <p> Ð”Ð»Ñ Ð¾Ð±Ñ‰Ð¸Ñ… типов данных, таких как текÑÑ‚, HTML или JPEG, метод {@link android.content.ContentProvider#getType(Uri) getType()} должен возвращать Ñтандартный тип -MIME. Полный ÑпиÑок Ñтандартных типов предÑтавлен на +MIME. Полный ÑпиÑок Ñтандартных типов предÑтавлен на веб-Ñайте <a href="http://www.iana.org/assignments/media-types/index.htm">IANA MIME Media Types</a>. </p> @@ -870,8 +870,8 @@ ContentProvider.getStreamTypes()} при Ñтом должен Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°Ñ <p> КлаÑÑ-контракт предÑтавлÑет Ñобой клаÑÑ <code>public final</code>, в котором ÑодержатÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñтант Ð´Ð»Ñ URI, имен Ñтолбцов, типов MIME и других метаданных поÑтавщика. КлаÑÑ -уÑтанавливает контрактные Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ поÑтавщиком и другими приложениÑми путем обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ -прÑмого доÑтупа к поÑтавщику даже в Ñлучае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑких значений URI, имен Ñтолбцов и +уÑтанавливает контрактные Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ поÑтавщиком и другими приложениÑми путем обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ +прÑмого доÑтупа к поÑтавщику даже в Ñлучае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑких значений URI, имен Ñтолбцов и Ñ‚. д. </p> <p> @@ -928,7 +928,7 @@ Eclipse, могут автоматичеÑки заполнÑть имена кР<h3>Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹</h3> <p> Любое приложение может выполнÑть чтение данных в поÑтавщике или запиÑывать их, даже еÑли ÑоответÑтвующие данные -ÑвлÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼Ð¸, поÑкольку по умолчанию Ð´Ð»Ñ Ð¿Ð¾Ñтавщика не заданы разрешениÑ. Чтобы изменить Ñти наÑтройки, +ÑвлÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼Ð¸, поÑкольку по умолчанию Ð´Ð»Ñ Ð¿Ð¾Ñтавщика не заданы разрешениÑ. Чтобы изменить Ñти наÑтройки, задайте Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ñтавщика в файле манифеÑта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибутов Ñлемента <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> <provider></a></code> или его дочерних Ñлементов. Можно задать разрешениÑ, которые применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑему поÑтавщику diff --git a/docs/html-intl/intl/ru/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/ru/guide/topics/providers/document-provider.jd index c594968490d4..c394e60cbcb3 100644 --- a/docs/html-intl/intl/ru/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/ru/guide/topics/providers/document-provider.jd @@ -567,7 +567,7 @@ SAF, напиÑав ÑобÑтвенный поÑтавщик документо <li>Ðтрибут <code>android:exported</code>, уÑтановленный в значение <code>"true"</code>. Ðеобходимо ÑкÑпортировать поÑтавщик, чтобы он был виден другим приложениÑм.</li> -<li>Ðтрибут <code>android:grantUriPermissions</code>, уÑтановленный в значение +<li>Ðтрибут <code>android:grantUriPermissions</code>, уÑтановленный в значение <code>"true"</code>. Ðтот параметр позволÑет ÑиÑтеме предоÑтавлÑть другим приложениÑм доÑтуп к контенту поÑтавщика. ОбÑуждение того, как Ñледует удерживать права доÑтупа к конкретному документу Ñм. в разделе <a href="#permissions">Удержание прав доÑтупа</a>.</li> @@ -776,7 +776,7 @@ public Cursor queryRoots(String[] projection) throws FileNotFoundException { <h4 id="queryChildDocuments">Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° queryChildDocuments</h4> -<p>Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° +<p>Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° {@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()} должна возвращать объект{@link android.database.Cursor}, указывающий на вÑе файлы в заданном каталоге, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñтолбцы, определенные в diff --git a/docs/html-intl/intl/ru/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/ru/guide/topics/resources/accessing-resources.jd index 3d59ceb292a2..ccb7ad8f46f0 100644 --- a/docs/html-intl/intl/ru/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/ru/guide/topics/resources/accessing-resources.jd @@ -209,7 +209,7 @@ R.java} вручную — Ñтот файл ÑоздаетÑÑ Ð¸Ð½ÑÑ‚Ñ€Ñ <ul> <li>{@code <package_name>} — Ñто Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°, в котором находитÑÑ Ñ€ÐµÑÑƒÑ€Ñ (не требуетÑÑ Ð¿Ñ€Ð¸ Ñоздании ÑÑылок на реÑурÑÑ‹ из одного и того же пакета).</li> - <li>{@code <resource_type>} — Ñто подклаÑÑ + <li>{@code <resource_type>} — Ñто подклаÑÑ {@code R} Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° реÑурÑа.</li> <li>{@code <resource_name>} — Ñто либо Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° реÑурÑа (без раÑширениÑ), либо значение атрибута {@code android:name} в Ñлементе XML (Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтых @@ -222,7 +222,7 @@ R.java} вручную — Ñтот файл ÑоздаетÑÑ Ð¸Ð½ÑÑ‚Ñ€Ñ <h3>Примеры иÑпользованиÑ</h3> -<p>Ð’ некоторых ÑлучаÑÑ… реÑÑƒÑ€Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ иÑпользовать в качеÑтве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñлементе XML (например, чтобы применить графичеÑкое изображение к +<p>Ð’ некоторых ÑлучаÑÑ… реÑÑƒÑ€Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ иÑпользовать в качеÑтве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñлементе XML (например, чтобы применить графичеÑкое изображение к виджету), однако вы также можете иÑпользовать реÑÑƒÑ€Ñ Ð² любом фрагменте XML, где ожидаетÑÑ Ð¿Ñ€Ð¾Ñтое значение. Ðапример, еÑли имеетÑÑ Ñледующий файл реÑурÑа, включающий <a href="more-resources.html#Color">цветовой реÑурÑ</a> и <a href="string-resource.html">Ñтроковый реÑурÑ</a>:</p> @@ -260,13 +260,13 @@ R.java} вручную — Ñтот файл ÑоздаетÑÑ Ð¸Ð½ÑÑ‚Ñ€Ñ </pre> <p class="note"><strong>Примечание.</strong> Ð’Ñегда иÑпользуйте Ñтроковые реÑурÑÑ‹, -поÑкольку ваше приложение может потребоватьÑÑ Ð¿ÐµÑ€ÐµÐ²ÐµÑти на другие Ñзыки. +поÑкольку ваше приложение может потребоватьÑÑ Ð¿ÐµÑ€ÐµÐ²ÐµÑти на другие Ñзыки. Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñоздании альтернативных реÑурÑов (например, локализованных Ñтрок) предÑтавлены в разделе <a href="providing-resources.html#AlternativeResources">ПредоÑтавление альтернативных реÑурÑов</a>. Ð’ разделе <a href="localization.html">ЛокализациÑ</a> приведено полное руководÑтво по локализации приложениÑ.</p> -<p>Ð’Ñ‹ даже можете иÑпользовать реÑурÑÑ‹ в XML Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñевдонимов. Ðапример, можно Ñоздать +<p>Ð’Ñ‹ даже можете иÑпользовать реÑурÑÑ‹ в XML Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñевдонимов. Ðапример, можно Ñоздать Ñлемент дизайна, который будет Ñлужить пÑевдонимом Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñлемента дизайна:</p> <pre> diff --git a/docs/html-intl/intl/ru/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/ru/guide/topics/resources/providing-resources.jd index be0af952896e..6a287b8972aa 100644 --- a/docs/html-intl/intl/ru/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/ru/guide/topics/resources/providing-resources.jd @@ -495,7 +495,7 @@ android.content.res.Configuration#smallestScreenWidthDp}, которое ÑодРÑкрану VGA Ñредней плотноÑти. Минимальный размер макета Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ñкрана ÑоÑтавлÑет приблизительно 480x640 пикÑелов. Примерами ÑвлÑÑŽÑ‚ÑÑ Ñкраны VGA и WVGA Ñредней плотноÑти.</li> - <li>{@code xlarge}: Ðкраны значительно крупнее обычного + <li>{@code xlarge}: Ðкраны значительно крупнее обычного Ñкрана HVGA Ñредней плотноÑти. Минимальный размер макета Ð´Ð»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ большого Ñкрана ÑоÑтавлÑет приблизительно 720x960 пикÑелов. Ð’ большинÑтве Ñлучаев уÑтройÑтва Ñ Ð¾Ñ‡ÐµÐ½ÑŒ большими Ñкранами Ñлишком велики Ð´Ð»Ñ ÐºÐ°Ñ€Ð¼Ð°Ð½Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸, Ñкорее вÑего, @@ -510,7 +510,7 @@ android.content.res.Configuration#smallestScreenWidthDp}, которое ÑодРаварийно завершитÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (например, еÑли вÑе реÑурÑÑ‹ макета отмечены квалификатором {@code xlarge}, но уÑтройÑтво оÑнащено Ñкраном нормального размера).</p> <p><em>Добавлено в API ÑƒÑ€Ð¾Ð²Ð½Ñ 4.</em></p> - + <p>Дополнительную информацию Ñм. в разделе <a href="{@docRoot}guide/practices/screens_support.html">Поддержка неÑкольких Ñкранов</a>.</p> <p>См. также поле конфигурации {@link android.content.res.Configuration#screenLayout}, которое @@ -1088,7 +1088,7 @@ drawable-en-port/ чем чиÑло квалификаторов, которые точно ÑоответÑтвуют уÑтройÑтву. Ðапример, на шаге 4 выше, поÑледний вариант в ÑпиÑке Ñодержит три квалификатора, которые точно ÑоответÑтвуют уÑтройÑтву (ориентациÑ, тип ÑенÑорного Ñкрана и ÑпоÑоб ввода), в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº <code>drawable-en</code> Ñодержит только один подходÑщий параметр -(Ñзык). Однако Ñзык имеет более выÑокий приоритет, чем Ñти оÑтальные квалификаторы, поÑтому +(Ñзык). Однако Ñзык имеет более выÑокий приоритет, чем Ñти оÑтальные квалификаторы, поÑтому <code>drawable-port-notouch-12key</code> вычеркиваетÑÑ.</p> <p>Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации об иÑпользовании реÑурÑов в приложении перейдите к разделу <a href="accessing-resources.html">ДоÑтуп к реÑурÑам</a>.</p> diff --git a/docs/html-intl/intl/ru/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/ru/guide/topics/resources/runtime-changes.jd index 5dc59c81559f..51337514566b 100644 --- a/docs/html-intl/intl/ru/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/ru/guide/topics/resources/runtime-changes.jd @@ -125,7 +125,7 @@ android.graphics.drawable.Drawable}, {@link android.widget.Adapter}, {@link andr означает, что приложение удерживает их, и ÑиÑтема не может очиÑтить от них памÑть, поÑтому может терÑтьÑÑ Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ объем памÑти).</p> -<p>Затем иÑпользуйте {@link android.app.FragmentManager} Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð° в операцию. +<p>Затем иÑпользуйте {@link android.app.FragmentManager} Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð° в операцию. Можно получить объект данных из фрагмента, когда Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ запуÑкаетÑÑ Ð² результате Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ в режиме выполнениÑ. Ð’ качеÑтве примера Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ñледующим образом:</p> @@ -168,7 +168,7 @@ public class MyActivity extends Activity { <p>Ð’ Ñтом примере {@link android.app.Activity#onCreate(Bundle) onCreate()} добавлÑет фрагмент или воÑÑтанавливает ÑÑылку на него. Метод {@link android.app.Activity#onCreate(Bundle) onCreate()} также хранит объект, ÑохранÑющий ÑоÑтоÑние, внутри ÑкземплÑра фрагмента. -Метод {@link android.app.Activity#onDestroy() onDestroy()} обновлÑет объект, ÑохранÑющий ÑоÑтоÑние, внутри +Метод {@link android.app.Activity#onDestroy() onDestroy()} обновлÑет объект, ÑохранÑющий ÑоÑтоÑние, внутри Ñохраненного ÑкземплÑра фрагмента.</p> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/controls.jd b/docs/html-intl/intl/ru/guide/topics/ui/controls.jd index 62f4c76686f5..7e15a72c3e95 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ Android. Ð’Ñе они имеютÑÑ Ð² пакете {@link android.widget}. Е <tr> <td><a href="controls/radiobutton.html">Переключатель</a></td> <td>Ðтот Ñлемент ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡ÐµÐ½ флажку, за иÑключением того, что в группе Ñлементов можно выбрать только один вариант.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/ru/guide/topics/ui/declaring-layout.jd index 71428f6e1cdd..b5db656d0e60 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/declaring-layout.jd @@ -219,9 +219,9 @@ LayoutParams также включают дополнительные парам <p>Как правило, не рекомендуетÑÑ Ð·Ð°Ð´Ð°Ð²Ð°Ñ‚ÑŒ абÑолютные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ и выÑоты макета (например, в пикÑелах). ВмеÑто Ñтого иÑпользуйте отноÑительные единицы измерениÑ, такие как пикÑелы, не завиÑÑщие от Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñкрана (<var>dp</var>), <var>wrap_content</var>или -<var>match_parent</var>Ðто гарантирует одинаковое отображение +<var>match_parent</var>Ðто гарантирует одинаковое отображение вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° уÑтройÑтвах Ñ Ñкранами разных размеров. -ПринÑтые типы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ñ‹ в +ПринÑтые типы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ñ‹ в документе <a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">ДоÑтупные реÑурÑÑ‹</a>.</p> @@ -325,7 +325,7 @@ div.layout.first { Android.</p> <p class="note"><strong>Примечание.</strong> ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого интерфейÑа один -макет может Ñодержать один или неÑколько вложенных макетов, рекомендуетÑÑ Ð¸Ñпользовать как можно более проÑтую +макет может Ñодержать один или неÑколько вложенных макетов, рекомендуетÑÑ Ð¸Ñпользовать как можно более проÑтую иерархию макетов. Чем меньше в макете вложенных Ñлементов, тем быÑтрее выполнÑетÑÑ ÐµÐ³Ð¾ отриÑовка (Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлений намного лучше вертикальной).</p> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/ru/guide/topics/ui/dialogs.jd index 515ecc6a0130..7e5d9087894f 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>См. также:</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">РуководÑтво по дизайну диалоговых окон</a></li> @@ -235,8 +235,8 @@ AlertDialog dialog = builder.create(); </pre> <p>Методы <code>set...Button()</code> предполагают заголовок Ð´Ð»Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ (реализуемый -через <a href="{@docRoot}guide/topics/resources/string-resource.html">Ñтроковый реÑурÑ</a>) и -{@link android.content.DialogInterface.OnClickListener}, который определÑет дейÑтвие, +через <a href="{@docRoot}guide/topics/resources/string-resource.html">Ñтроковый реÑурÑ</a>) и +{@link android.content.DialogInterface.OnClickListener}, который определÑет дейÑтвие, Ñледующее за нажатием кнопки пользователем.</p> <p>Реализована возможноÑть добавлÑть три различных вида кнопок дейÑтвий:</p> @@ -248,7 +248,7 @@ AlertDialog dialog = builder.create(); <dt>Ðейтральные</dt> <dd>ИÑпользуютÑÑ Ð² ÑлучаÑÑ…, когда пользователь может не желать продолжить дейÑтвие, но при Ñтом необÑзательно хочет его отменить. ПоÑвлÑетÑÑ Ð¼ÐµÐ¶Ð´Ñƒ положительными и отрицательнымиI - кнопками. Примером такого дейÑÑ‚Ð²Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть «Ðапомнить позже».</dd> + кнопками. Примером такого дейÑÑ‚Ð²Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть «Ðапомнить позже».</dd> </dl> <p>Можно добавлÑть только одну кнопку каждого вида в {@link @@ -271,7 +271,7 @@ android.app.AlertDialog}. Ðто означает, что Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸ÑпоР<li>Интерактивный ÑпиÑок Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð¾Ð¼ неÑкольких вариантов (флажки)</li> </ul> -<p>Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑпиÑка Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð¾Ð¼ одного варианта, как на риÑунке 3, +<p>Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑпиÑка Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð¾Ð¼ одного варианта, как на риÑунке 3, иÑпользуйте метод{@link android.app.AlertDialog.Builder#setItems setItems()}:</p> <pre style="clear:right"> @@ -289,9 +289,9 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { } </pre> -<p>ПоÑкольку ÑпиÑок отображаетÑÑ Ð² облаÑти Ñодержимого диалогового окна, +<p>ПоÑкольку ÑпиÑок отображаетÑÑ Ð² облаÑти Ñодержимого диалогового окна, диалоговое окно не может показать одновременно Ñообщение и ÑпиÑок, поÑтому необходимо задать заголовок -диалогового окна Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link android.app.AlertDialog.Builder#setTitle setTitle()}. +диалогового окна Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link android.app.AlertDialog.Builder#setTitle setTitle()}. Ð”Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñлементов ÑпиÑка необходимо вызвать {@link android.app.AlertDialog.Builder#setItems setItems()}, передающий указатель. Ð’ качеÑтве другого варианта можно указать ÑпиÑок Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link @@ -320,8 +320,8 @@ android.app.AlertDialog.Builder#setAdapter setAdapter()}. Ðаполнение Ñ <p>Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑпиÑка Ñ Ð½ÐµÑколькими вариантами ответов (флажки) или ÑпиÑка Ñ Ð¾Ð´Ð½Ð¸Ð¼ вариантом ответа (переключатели) иÑпользуйте методы {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} или -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} или +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} ÑоответÑтвенно.</p> <p>Ðапример, таким образом можно Ñоздать ÑпиÑок Ñ Ð½ÐµÑколькими вариантами ответов, как на @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -371,9 +371,9 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { } </pre> -<p>ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что и традиционный ÑпиÑок, и ÑпиÑок Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñми +<p>ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что и традиционный ÑпиÑок, и ÑпиÑок Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñми предполагают дейÑтвие по выбору одного Ñлемента, вам необходимо иÑпользовать {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()}, чтобы Ñохранить выбор пользователÑ. Ðто значит, что при повторном открытии диалогового окна будет отображатьÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ выбор пользователÑ, а затем ÑоздаетÑÑ ÑпиÑок Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñми.</p> @@ -442,7 +442,7 @@ android.app.AlertDialog.Builder}.</p> одинаковые Ñтили шрифта.</p> <p>Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÐµÑ‚Ð° в вашем {@link android.support.v4.app.DialogFragment} -вам понадобитÑÑ {@link android.view.LayoutInflater} Ñ +вам понадобитÑÑ {@link android.view.LayoutInflater} Ñ {@link android.app.Activity#getLayoutInflater()} и вызов {@link android.view.LayoutInflater#inflate inflate()}, где первым параметром будет ÑвлÑтьÑÑ ID реÑурÑа макета, а вторым параметром — иÑходный вид макета. @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ public class NoticeDialogFragment extends DialogFragment { public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -638,7 +638,7 @@ android.support.v4.app.Fragment}.</p> <p>Тем не менее, в Ñтом Ñлучае Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать{@link android.app.AlertDialog.Builder AlertDialog.Builder} или другие объекты {@link android.app.Dialog} Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ð³Ð¾ окна. ЕÑли -необходимо Ñделать {@link android.support.v4.app.DialogFragment} +необходимо Ñделать {@link android.support.v4.app.DialogFragment} вÑтраиваемым, нужно определить пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ð³Ð¾ окна в макете методом обратного вызова {@link android.support.v4.app.DialogFragment#onCreateView onCreateView()}.</p> @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ public class CustomDialogFragment extends DialogFragment { public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -695,12 +695,12 @@ public void showDialog() { } </pre> -<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ выполнении операций Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ приведены в руководÑтве +<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ выполнении операций Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ приведены в руководÑтве <a href="{@docRoot}guide/components/fragments.html">Фрагменты</a>.</p> <p>Ð’ приведенном примере <code>mIsLargeLayout</code> булеан указывает, должно ли текущее уÑтройÑтво иÑпользовать большой макет Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (и отображать фрагмент как диалоговое окно, а не -в полноÑкранном режиме). Лучшим ÑпоÑобом уÑтановить такой вид булеана ÑвлÑетÑÑ Ð¾Ð±ÑŠÑвление +в полноÑкранном режиме). Лучшим ÑпоÑобом уÑтановить такой вид булеана ÑвлÑетÑÑ Ð¾Ð±ÑŠÑвление <a href="{@docRoot}guide/topics/resources/more-resources.html#Bool">Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±ÑƒÐ»ÐµÐ²Ð¾Ð¹ переменной</a> Ñ <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">альтернативным</a> значением Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… размеров Ñкранов. Ð’ качеÑтве примера приведены два варианта булевых реÑурÑов Ð´Ð»Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… размеров Ñкранов:</p> @@ -776,7 +776,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} в {@link android.support.v4.app.DialogFragment}.</p> <p>Также можно <em>отменить</em> диалоговое окно. Ðто оÑобое Ñобытие, возникающее, когда пользователь -покинул диалоговое окно, не завершив задачу. Так проиÑходит, когда пользователь нажимает кнопку +покинул диалоговое окно, не завершив задачу. Так проиÑходит, когда пользователь нажимает кнопку <em>Ðазад</em>, каÑаетÑÑ Ñкрана за облаÑтью диалогового окна, либо когда задано {@link android.app.Dialog#cancel()} в {@link android.app.Dialog} (например, в качеÑтве отклика на нажатие кнопки «Отмена» в диалоговом окне).</p> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/menus.jd b/docs/html-intl/intl/ru/guide/topics/ui/menus.jd index 2f3ce1eb9580..885918f3e58d 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/menus.jd @@ -66,13 +66,13 @@ parent.link=index.html <p>ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то что оформление и поведение некоторых пунктов меню изменилиÑÑŒ, Ñемантика Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° дейÑтвий и вариантов по-прежнему оÑнована на API-интерфейÑах клаÑÑа {@link android.view.Menu}. Ð’ Ñтом -руководÑтве раÑÑказываетÑÑ, как Ñоздавать три оÑновополагающих типа меню или предÑтавлений дейÑтвий в ÑиÑтеме +руководÑтве раÑÑказываетÑÑ, как Ñоздавать три оÑновополагающих типа меню или предÑтавлений дейÑтвий в ÑиÑтеме Android вÑех верÑий:</p> <dl> <dt><strong>Меню параметров и Ñтрока дейÑтвий</strong></dt> <dd>Пункты <a href="#options-menu">меню параметров</a> предÑтавлÑÑŽÑ‚ Ñобой оÑновные варианты выбора дейÑтвий в пределах -операции. Именно здеÑÑŒ Ñледует размещать дейÑтвиÑ, которые затрагивают приложение в целом, например: +операции. Именно здеÑÑŒ Ñледует размещать дейÑтвиÑ, которые затрагивают приложение в целом, например: "ПоиÑк", "СоÑтавить Ñообщение Ñл. почты" и "ÐаÑтройки". <p>При разработке приложений Ð´Ð»Ñ Ð²ÐµÑ€Ñии Android 2.3 или более ранних верÑий пользователи могут открыть панель меню параметров нажатием кнопки <em>Меню</em>.</p> @@ -83,9 +83,9 @@ Android вÑех верÑий:</p> Ñтроки дейÑтвий.</p> <p>См. раздел <a href="#options-menu">Создание меню параметров</a></p> </dd> - + <dt><strong>КонтекÑтное меню и режим контекÑтных дейÑтвий</strong></dt> - + <dd>КонтекÑтное меню ― Ñто <a href="#FloatingContextMenu">плавающее меню</a>, которое открываетÑÑ, когда пользователь длительно нажимает на Ñлемент. Ð’ нем ÑодержатÑÑ Ð´ÐµÐ¹ÑтвиÑ, которые затрагивают выбранный контент или контекÑтный кадр. @@ -94,11 +94,11 @@ Android вÑех верÑий:</p> выбрать Ñразу неÑколько Ñлементов.</p> <p>См. раздел <a href="#context-menu">Создание контекÑтного меню</a></p> </dd> - + <dt><strong>Ð’Ñплывающее меню</strong></dt> <dd>Во вÑплывающем меню отображаетÑÑ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ ÑпиÑок пунктов, который привÑзан к предÑтавлению, вызвавшему меню. Он хорошо подходит Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти дополнительных вариантов дейÑтвий, отноÑÑщихÑÑ Ðº определенному контенту или -Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ñ‡Ð¸ вариантов Ð´Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ чаÑти команды. ДейÑÑ‚Ð²Ð¸Ñ Ð²Ð¾ вÑплывающем меню +Ð´Ð»Ñ Ð²Ñ‹Ð´Ð°Ñ‡Ð¸ вариантов Ð´Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ чаÑти команды. ДейÑÑ‚Ð²Ð¸Ñ Ð²Ð¾ вÑплывающем меню <strong>не</strong> должны напрÑмую затрагивать ÑоответÑтвующий контент — Ð´Ð»Ñ Ñтого предназначены контекÑтные дейÑтвиÑ. Ð’Ñплывающее меню предназначено Ð´Ð»Ñ Ñ€Ð°Ñширенных дейÑтвий, отноÑÑщихÑÑ Ðº облаÑÑ‚Ñм контента в вашей операции. @@ -135,7 +135,7 @@ Android вÑех верÑий:</p> <dt><code><item></code></dt> <dd>Создает клаÑÑ {@link android.view.MenuItem}, который предÑтавлÑет один пункт меню. Ðтот Ñлемент может Ñодержать вложенный Ñлемент <code><menu></code> Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ñ… меню.</dd> - + <dt><code><group></code></dt> <dd>ÐеобÑзательный, невидимый контейнер Ð´Ð»Ñ Ñлементов {@code <item>}. Он позволÑет разделÑть пункты меню на категории и назначать им одинаковые ÑвойÑтва, такие как активное ÑоÑтоÑние и видимоÑть. Подробные @@ -322,7 +322,7 @@ android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} д должен быть общедоÑтупным и принимать один параметр {@link android.view.MenuItem}, — когда ÑиÑтема вызывает Ñтот метод, она передает ему выбранный пункт меню. Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ пример Ñм. в документе <a href="{@docRoot}guide/topics/resources/menu-resource.html">РеÑÑƒÑ€Ñ Ð¼ÐµÐ½ÑŽ</a>.</p> -<p class="note"><strong>Совет.</strong> ЕÑли в приложении предуÑмотрено неÑколько операций и +<p class="note"><strong>Совет.</strong> ЕÑли в приложении предуÑмотрено неÑколько операций и в некоторых из них имеютÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ðµ меню параметров, раÑÑмотрите возможноÑть ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользовать иÑключительно методы {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} и {@link android.app.Activity#onOptionsItemSelected(MenuItem) @@ -346,7 +346,7 @@ onCreateOptionsMenu()}, она Ñохранит заполненный вами android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} Ñледует иÑпользовать только Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑоÑтоÑÐ½Ð¸Ñ Ð¼ÐµÐ½ÑŽ, а не Ð´Ð»Ñ Ð²Ð½ÐµÑÐµÐ½Ð¸Ñ Ð² него изменений в течение жизненного цикла операции.</p> -<p>ЕÑли вам требуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñть меню параметров в завиÑимоÑти от +<p>ЕÑли вам требуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñть меню параметров в завиÑимоÑти от Ñобытий, которые возникают в течение жизненного цикла операции, Ñделать Ñто можно в методе{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Ðтот метод передает объект {@link android.view.Menu} в том виде, в котором он в данный момент ÑущеÑтвует. Его-то и можно изменить @@ -363,7 +363,7 @@ onPrepareOptionsMenu()} каждый раз, когда пользователь вызвать метод {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()}, чтобы запроÑить у ÑиÑтемы вызов метода {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p> -<p class="note"><strong>Примечание.</strong> +<p class="note"><strong>Примечание.</strong> Ðикогда не Ñледует изменÑть пункты меню параметров Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ клаÑÑа {@link android.view.View}, дейÑтвующего в данный момент. Ð’ ÑенÑорном режиме (когда пользователь не иÑпользует трекбол или кнопки Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ) Ñ„Ð¾ÐºÑƒÑ Ð½Ðµ может переводитьÑÑ Ð½Ð° предÑтавлениÑ, поÑтому никогда не Ñледует иÑпользовать Ñ„Ð¾ÐºÑƒÑ Ð² качеÑтве оÑновы Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ @@ -525,7 +525,7 @@ android.widget.ListView} или {@link android.widget.GridView} (что позв предÑтавлениÑ, то вам Ñледует:</p> <ol> <li>Реализовать Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ {@link android.view.ActionMode.Callback}. Ð’ его методах обратного вызова вы -можете указать дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ñтроки контекÑтных дейÑтвий, реагировать на Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð² дейÑтвий и +можете указать дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ñтроки контекÑтных дейÑтвий, реагировать на Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð² дейÑтвий и обрабатывать другие ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¶Ð¸Ð·Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ цикла Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° дейÑтвий.</li> <li>Вызывайте {@link android.app.Activity#startActionMode startActionMode()}, когда требуетÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ Ñтроку (например, когда пользователь выполнÑет длительное нажатие предÑтавлениÑ).</li> @@ -582,12 +582,12 @@ android.view.ActionMode} можно вноÑить различные измен android.view.ActionMode#setSubtitle setSubtitle()} (удобно Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтва выбранных Ñлементов).</p> -<p>Также обратите внимание, что приведенный выше образец кода задает Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ {@code mActionMode} значение null, когда +<p>Также обратите внимание, что приведенный выше образец кода задает Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ {@code mActionMode} значение null, когда режим дейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰Ð°ÐµÑ‚ Ñвое ÑущеÑтвование. Далее вы узнаете, каким образом он инициализируетÑÑ Ð¸ чем может быть полезно Ñохранение ÑоÑтавной переменной в операции или фрагменте.</p> </li> - <li>Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° контекÑтных дейÑтвий, когда Ñто необходимо, + <li>Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° контекÑтных дейÑтвий, когда Ñто необходимо, например, в ответ на длительное нажатие {@link android.view.View}, вызывайте {@link android.app.Activity#startActionMode startActionMode()}:</p> @@ -727,7 +727,7 @@ android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateAc <p>ЕÑли Ð´Ð»Ñ <a href="#xml">Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑŽ иÑпользуетÑÑ XML</a>, вот каким образом можно показать вÑплывающее меню:</p> <ol> - <li>Создайте ÑкземплÑÑ€ клаÑÑа {@link android.widget.PopupMenu} Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ его конÑтруктора, принимающий + <li>Создайте ÑкземплÑÑ€ клаÑÑа {@link android.widget.PopupMenu} Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ его конÑтруктора, принимающий текущие {@link android.content.Context} и {@link android.view.View} приложениÑ, к которым должно быть привÑзано меню.</li> <li>С помощью {@link android.view.MenuInflater} загрузите Ñвой реÑÑƒÑ€Ñ Ð¼ÐµÐ½ÑŽ в объект {@link @@ -742,8 +742,8 @@ android.widget.PopupMenu#getMenu() PopupMenu.getMenu()}. Ðа API ÑƒÑ€Ð¾Ð²Ð½Ñ 1 <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -901,7 +901,7 @@ android.view.MenuItem#setChecked(boolean) setChecked()}.</p> (например {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}). Именно здеÑÑŒ необходимо задать ÑоÑтоÑние флажка, поÑкольку флажок или переключатель не изменÑет Ñвое ÑоÑтоÑние автоматичеÑки. ЗапроÑить текущее ÑоÑтоÑние пункта (в котором он находилÑÑ Ð´Ð¾ того, как был -выбран пользователем) можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ{@link android.view.MenuItem#isChecked()}, а затем задать помеченное ÑоÑтоÑние Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ +выбран пользователем) можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ{@link android.view.MenuItem#isChecked()}, а затем задать помеченное ÑоÑтоÑние Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link android.view.MenuItem#setChecked(boolean) setChecked()}. Ðапример:</p> <pre> @@ -1023,9 +1023,9 @@ Intent. Ðапример:</p> </intent-filter> </pre> -<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ напиÑании фильтров Intent Ñм. в документе +<p>Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ напиÑании фильтров Intent Ñм. в документе <a href="/guide/components/intents-filters.html">Объекты Intent и фильтры объектов Intent</a>.</p> -<p>Образец приложениÑ, в котором иÑпользуетÑÑ Ñта методика, Ñм. в образце кода +<p>Образец приложениÑ, в котором иÑпользуетÑÑ Ñта методика, Ñм. в образце кода <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note Pad</a>.</p> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/ru/guide/topics/ui/notifiers/notifications.jd index d072b77eae24..c286431c00fe 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/notifiers/notifications.jd @@ -92,7 +92,7 @@ page.title=Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ <p>ПоÑкольку ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ ÐºÐ°Ðº важной ÑоÑтавной чаÑтью пользовательÑкого интерфейÑа Android, Ð´Ð»Ñ Ð½Ð¸Ñ… имеютÑÑ ÑобÑтвенные инÑтрукции по проектированию. ПоÑвившиеÑÑ Ð² Android 5.0 (уровень API 21) значительные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð° имеют оÑобо важное значение, поÑтому Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации вам Ñледует ознакомитьÑÑ Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ¾Ð¼ по интерфейÑу <a href="{@docRoot}training/material/index.html">Material Design</a> -. Чтобы узнать, как проектировать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ взаимодейÑтвие Ñ Ð½Ð¸Ð¼Ð¸, прочитайте руководÑтво по проектированию +. Чтобы узнать, как проектировать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ взаимодейÑтвие Ñ Ð½Ð¸Ð¼Ð¸, прочитайте руководÑтво по проектированию <a href="{@docRoot}design/patterns/notifications.html">УведомлениÑ</a>.</p> <h2 id="CreateNotification">Создание уведомлениÑ</h2> @@ -294,7 +294,7 @@ mBuilder.setStyle(inBoxStyle); ОбеÑпечьте доÑтуп к Ñтой функции операции {@link android.app.Activity} вÑех пользователей, Ñделав так, чтобы Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкалаÑÑŒ, когда пользователь нажимает уведомление. Ð”Ð»Ñ Ñтого Ñоздайте объект {@link android.app.PendingIntent} - Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ {@link android.app.Activity}. Вызовите + Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ {@link android.app.Activity}. Вызовите {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}, чтобы добавить объект {@link android.app.PendingIntent} в уведомление. </li> @@ -333,7 +333,7 @@ mBuilder.setStyle(inBoxStyle); вызова метода {@link android.app.NotificationManager#notify(int, android.app.Notification) NotificationManager.notify()}. Чтобы изменить Ñто уведомление, поÑле того как оно выдано, обновите или Ñоздайте объект {@link android.support.v4.app.NotificationCompat.Builder}, - поÑтройте на его оÑнове объект {@link android.app.Notification} и выдайте + поÑтройте на его оÑнове объект {@link android.app.Notification} и выдайте объект {@link android.app.Notification} Ñ Ñ‚ÐµÐ¼ же идентификатором, который иÑпользовалÑÑ Ñ€Ð°Ð½ÐµÐµ. ЕÑли предыдущее уведомление вÑе еще отображаетÑÑ Ð½Ð° Ñкране, ÑиÑтема обновит его Ñ Ð¸Ñпользованием Ñодержимого объекта{@link android.app.Notification}. ЕÑли предыдущее уведомление было закрыто, то @@ -451,14 +451,14 @@ numMessages = 0; Добавьте поддержку Ð´Ð»Ñ Ð²ÐµÑ€Ñии Android 4.0.3 и более ранних верÑий. Ð”Ð»Ñ Ñтого укажите родительÑкий объект операции {@link android.app.Activity}, которую запуÑкаете, добавив Ñлемент <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code> - в качеÑтве дочернего Ð´Ð»Ñ Ñлемента + в качеÑтве дочернего Ð´Ð»Ñ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>. <p> Ð”Ð»Ñ Ñтого Ñлемента задайте <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>. Задайте <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#val">android:value</a>="<parent_activity_name>"</code>, - где <code><parent_activity_name></code> ― Ñто значение + где <code><parent_activity_name></code> ― Ñто значение <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code> Ð´Ð»Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÑкого Ñлемента <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> @@ -466,7 +466,7 @@ numMessages = 0; </p> </li> <li> - Также добавьте поддержку Ð´Ð»Ñ Ð²ÐµÑ€Ñии Android 4.1 и более поздних верÑий. Ð”Ð»Ñ Ñтого добавьте атрибут + Также добавьте поддержку Ð´Ð»Ñ Ð²ÐµÑ€Ñии Android 4.1 и более поздних верÑий. Ð”Ð»Ñ Ñтого добавьте атрибут <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code> в Ñлемент <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> @@ -513,7 +513,7 @@ numMessages = 0; запуÑкает {@link android.app.Activity}. Ðтот метод также добавлÑет флаги, которые запуÑкают Ñтек в новой задаче. <p class="note"> - <strong>Примечание.</strong> ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то что аргумент + <strong>Примечание.</strong> ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то что аргумент {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} ÑвлÑетÑÑ ÑÑылкой на запуÑкаемую операцию {@link android.app.Activity}, при вызове Ñтого метода не добавлÑетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚ {@link android.content.Intent}, который запуÑкает операцию @@ -536,7 +536,7 @@ numMessages = 0; в нее Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ дейÑÑ‚Ð²Ð¸Ñ <i>"Ðазад"</i>. </li> <li> - Получите объект {@link android.app.PendingIntent} Ð´Ð»Ñ Ñтого Ñтека переходов назад путем вызова метода + Получите объект {@link android.app.PendingIntent} Ð´Ð»Ñ Ñтого Ñтека переходов назад путем вызова метода {@link android.support.v4.app.TaskStackBuilder#getPendingIntent getPendingIntent()}. Затем Ñтот объект {@link android.app.PendingIntent} можно будет иÑпользовать в качеÑтве аргумента Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent @@ -576,7 +576,7 @@ mNotificationManager.notify(id, builder.build()); ОÑобой операции {@link android.app.Activity} не требуетÑÑ Ñтек перехода назад, поÑтому не нужно определÑть иерархию объектов {@link android.app.Activity} в файле манифеÑта и вызывать - метод {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ + метод {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ñтека перехода назад. ВмеÑто Ñтого в файле манифеÑта задайте параметры задачи {@link android.app.Activity} и Ñоздайте объект {@link android.app.PendingIntent} путем вызова метода {@link android.app.PendingIntent#getActivity getActivity()}: @@ -597,7 +597,7 @@ mNotificationManager.notify(id, builder.build()); <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">android:taskAffinity</a>=""</code> </dt> <dd> - Ð’ Ñочетании Ñ + Ð’ Ñочетании Ñ Ñ„Ð»Ð°Ð³Ð¾Ð¼ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK}, который вы задали в коде, Ñто гарантирует, что Ð´Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ {@link android.app.Activity} не перейдет в задачу приложениÑ, иÑпользуемую по умолчанию. Любые ÑущеÑтвующие задачи, имеющие @@ -629,11 +629,11 @@ mNotificationManager.notify(id, builder.build()); ПоÑтроение и выдача уведомлениÑ: <ol style="list-style-type: lower-alpha;"> <li> - Создайте объект {@link android.content.Intent}, который запуÑкает операцию + Создайте объект {@link android.content.Intent}, который запуÑкает операцию {@link android.app.Activity}. </li> <li> - ÐаÑтройте операцию {@link android.app.Activity}, запуÑкаемую в новой пуÑтой задаче, путем вызова метода + ÐаÑтройте операцию {@link android.app.Activity}, запуÑкаемую в новой пуÑтой задаче, путем вызова метода {@link android.content.Intent#setFlags setFlags()} Ñ Ñ„Ð»Ð°Ð³Ð°Ð¼Ð¸ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} и @@ -714,7 +714,7 @@ mNotificationManager.notify(id, builder.build()); {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(max, progress, false)}, а затем выдайте уведомление. По мере Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°Ð¹Ñ‚Ðµ значение <code>progress</code> и обновлÑйте уведомление. По окончании операции - <code>progress</code> должен быть равен <code>max</code>. Стандартный ÑпоÑоб вызова метода + <code>progress</code> должен быть равен <code>max</code>. Стандартный ÑпоÑоб вызова метода {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()} заключаетÑÑ Ð² Ñледующем: задать значение <code>max</code> равным 100 Ñ Ð¿Ð¾Ñледующим увеличением <code>progress</code> в виде величины "процента выполнениÑ" операции. @@ -841,7 +841,7 @@ mNotifyManager.notify(0, mBuilder.build()); <p>Примеры Ñитуаций, в которых могут быть вызваны ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ heads-up:</p> <ul> - <li>Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ð² полноÑкранном режиме (приложение иÑпользует + <li>Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ð² полноÑкранном режиме (приложение иÑпользует {@link android.app.Notification#fullScreenIntent}) или;</li> <li>уведомление имеет выÑокий приоритет и иÑпользует рингтоны или вибрацию.</li> @@ -915,7 +915,7 @@ Notification notification = new Notification.Builder(context) </pre> <p class="note"><strong>Примечание.</strong> Прекращение иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»Ð°ÑÑа {@link android.media.RemoteControlClient} -имеет и другие поÑледÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð¼ÐµÐ´Ð¸Ð°. Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ новых API-интерфейÑах Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑеанÑами воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð¼ÐµÐ´Ð¸Ð° Ñм. в разделе +имеет и другие поÑледÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð¼ÐµÐ´Ð¸Ð°. Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ новых API-интерфейÑах Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑеанÑами воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð¼ÐµÐ´Ð¸Ð° Ñм. в разделе <a href="{@docRoot}about/versions/android-5.0.html#MediaPlaybackControl">Управление воÑпроизведением мультимедиа</a> .</p> diff --git a/docs/html-intl/intl/ru/guide/topics/ui/overview.jd b/docs/html-intl/intl/ru/guide/topics/ui/overview.jd index 0e9628b6d016..8bb953f80d01 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ XML позволÑет Ñоздавать удобочитаемую ÑÑ‚Ñ€ÑƒÐºÑ <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ XML позволÑет Ñоздавать удобочитаемую ÑÑ‚Ñ€ÑƒÐºÑ <p>Полное руководÑтво по Ñозданию макета пользовательÑкого интерфейÑа Ñм. в документе <a href="declaring-layout.html">Макеты XML</a>. - + <h2 id="UIComponents">Компоненты пользовательÑкого интерфейÑа</h2> <p>Ðе обÑзательно Ñоздавать вÑе Ñлементы пользовательÑкого интерфейÑа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ объектов {@link android.view.View} и {@link diff --git a/docs/html-intl/intl/ru/guide/topics/ui/settings.jd b/docs/html-intl/intl/ru/guide/topics/ui/settings.jd index 4325439721de..9adfd6230515 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/settings.jd @@ -82,7 +82,7 @@ API-интерфейÑÑ‹ {@link android.preference.Preference} ÑиÑтемы An <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> <p class="img-caption"><strong>РиÑунок 1.</strong> Снимки Ñкранов наÑтроек Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Android -Ð´Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° ÑообщениÑми. Выбор Ñлемента, заданного поÑредÑтвом {@link android.preference.Preference}, +Ð´Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° ÑообщениÑми. Выбор Ñлемента, заданного поÑредÑтвом {@link android.preference.Preference}, открывает Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ.</p> @@ -143,7 +143,7 @@ android.preference.PreferenceFragment} опиÑана в разделах <a hre <p>ÐšÐ°Ð¶Ð´Ð°Ñ Ð½Ð°Ñтройка Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлена конкретным подклаÑÑом клаÑÑа {@link android.preference.Preference}. Каждый подклаÑÑ Ñодержит набор оÑновных ÑвойÑтв, которые позволÑÑŽÑ‚ вам указывать, например, заголовок Ð´Ð»Ñ Ð½Ð°Ñтройки и ее значение по умолчанию. Каждый подклаÑÑ Ñ‚Ð°ÐºÐ¶Ðµ Ñодержит -ÑобÑтвенные Ñпециализированные ÑвойÑтва и пользовательÑкий интерфейÑ. Ð’ качеÑтве примера на риÑунке 1 показан Ñнимок Ñкрана наÑтроек +ÑобÑтвенные Ñпециализированные ÑвойÑтва и пользовательÑкий интерфейÑ. Ð’ качеÑтве примера на риÑунке 1 показан Ñнимок Ñкрана наÑтроек Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Android Ð´Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° ÑообщениÑми. Каждый Ñлемент ÑпиÑка на Ñкране наÑтроек возвращаетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¼ объектом {@link android.preference.Preference}.</p> @@ -226,7 +226,7 @@ android.preference.ListPreference}. Оба Ñодержат Ñледующие Ñ <dt>{@code android:key}</dt> <dd>Ðтот атрибут необходим Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ð¹, которые ÑохранÑÑŽÑ‚ значение данных. Он задает уникальный ключ (Ñтроку), который иÑпользует ÑиÑтема при Ñохранении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтой наÑтройки в {@link -android.content.SharedPreferences}. +android.content.SharedPreferences}. <p>Ðтот атрибут <em>не ÑвлÑетÑÑ Ð¾Ð±Ñзательным</em> только когда предпочтение предÑтавлÑет Ñобой {@link android.preference.PreferenceCategory} или {@link android.preference.PreferenceScreen}, либо предпочтение указывает намерение {@link android.content.Intent} Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° (поÑредÑтвом Ñлемента <a href="#Intents">{@code <intent>}</a>) или фрагмент {@link android.app.Fragment} Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code @@ -271,7 +271,7 @@ android.preference.PreferenceCategory <PreferenceCategory>}. <br/><b>2.</b </ul> <p>Ð’Ñ‹ можете пользоватьÑÑ Ð¾Ð´Ð½Ð¸Ð¼ или обоими из Ñтих методов группировки Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ наÑтроек в вашем приложении. ÐŸÑ€Ð¸Ð½Ð¸Ð¼Ð°Ñ -решение об иÑпользуемом варианте и о разделении наÑтроек на группы, вы должны Ñледовать инÑтрукциÑм в разделе +решение об иÑпользуемом варианте и о разделении наÑтроек на группы, вы должны Ñледовать инÑтрукциÑм в разделе <a href="{@docRoot}design/patterns/settings.html">ÐаÑтройки</a> руководÑтва «Дизайн Ð´Ð»Ñ Android».</p> @@ -285,7 +285,7 @@ android.preference.PreferenceCategory}.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -430,7 +430,7 @@ public class SettingsActivity extends PreferenceActivity { <p>При разработке приложений Ð´Ð»Ñ Android 3.0 (API ÑƒÑ€Ð¾Ð²Ð½Ñ 11) и более поздних верÑий необходимо иÑпользовать {@link android.preference.PreferenceFragment} Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑпиÑка -объектов {@link android.preference.Preference}. Ð’Ñ‹ можете добавить {@link android.preference.PreferenceFragment} в любую операцию, при Ñтом +объектов {@link android.preference.Preference}. Ð’Ñ‹ можете добавить {@link android.preference.PreferenceFragment} в любую операцию, при Ñтом необÑзательно иÑпользовать {@link android.preference.PreferenceActivity}.</p> <p><a href="{@docRoot}guide/components/fragments.html">Фрагменты</a> обеÑпечивают более @@ -588,11 +588,11 @@ android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()}, чтоб <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -636,7 +636,7 @@ public static class SettingsFragment extends PreferenceFragment { <h3 id="DisplayHeaders">Отображение заголовков</h3> <p>Чтобы отобразить заголовки предпочтений, вы должны реализовать метод обратного вызова {@link -android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} и вызвать +android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} и вызвать {@link android.preference.PreferenceActivity#loadHeadersFromResource loadHeadersFromResource()}. Ðапример:</p> @@ -672,38 +672,38 @@ android.preference.Preference <Preference>} отправлÑет Ð½Ð°Ð¼ÐµÑ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸.</p> <p>Ð’ качеÑтве примера приведен XML-файл Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² предпочтений, который иÑпользуетÑÑ Ð² Android верÑии 3.0 -и более поздних верÑий ({@code res/xml/preference_headers.xml}):</p> +и более поздних верÑий ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> </preference-headers> </pre> -<p>РздеÑÑŒ предÑтавлен файл предпочтений, который Ñодержит те же Ñамые заголовки Ð´Ð»Ñ Ð²ÐµÑ€Ñий Ñтарше +<p>РздеÑÑŒ предÑтавлен файл предпочтений, который Ñодержит те же Ñамые заголовки Ð´Ð»Ñ Ð²ÐµÑ€Ñий Ñтарше Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -975,11 +975,11 @@ android.preference.DialogPreference}, в котором объÑвлÑетÑÑ Ð public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -992,7 +992,7 @@ public class NumberPickerPreference extends DialogPreference { <p>Ð’Ñ‹ можете Ñохранить значение наÑтройки в любой момент, вызвав один из методов {@code persist*()} клаÑÑа {@link android.preference.Preference}, например, {@link -android.preference.Preference#persistInt persistInt()}, еÑли наÑтройка имеет целое значение, или +android.preference.Preference#persistInt persistInt()}, еÑли наÑтройка имеет целое значение, или {@link android.preference.Preference#persistBoolean persistBoolean()} Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкого значениÑ.</p> <p class="note"><strong>Примечание.</strong> Каждое предпочтение {@link android.preference.Preference} может ÑохранÑть только один @@ -1071,7 +1071,7 @@ android.preference.Preference#getPersistedInt getPersistedInt()} не может <h3 id="CustomDefault">ПредоÑтавление Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию</h3> -<p>ЕÑли ÑкземплÑÑ€ вашего клаÑÑа {@link android.preference.Preference} указывает значение по умолчанию +<p>ЕÑли ÑкземплÑÑ€ вашего клаÑÑа {@link android.preference.Preference} указывает значение по умолчанию (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута {@code android:defaultValue}), ÑиÑтема вызывает {@link android.preference.Preference#onGetDefaultValue onGetDefaultValue()}, когда она Ñоздает ÑкземплÑÑ€ объекта Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ. Ð’Ñ‹ должны реализовать @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/ru/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/ru/guide/topics/ui/ui-events.jd index cd2b4813cf83..9f3609bea789 100644 --- a/docs/html-intl/intl/ru/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/ru/guide/topics/ui/ui-events.jd @@ -30,7 +30,7 @@ parent.link=index.html которые называютÑÑ <a href="#EventListeners">приемниками Ñобытий</a>, и Ñлужат перехватчиками дейÑтвий Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼ пользовательÑким интерфейÑом.</p> <p>ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что вы будете чаще иÑпользовать приемники Ñобытий Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð²Ð°Ñ‚Ð° дейÑтвий пользователÑ, может -наÑтупить момент, когда вам не захочетÑÑ Ð½Ð°Ñледовать клаÑÑ View, чтобы Ñоздать неÑтандартный компонент. +наÑтупить момент, когда вам не захочетÑÑ Ð½Ð°Ñледовать клаÑÑ View, чтобы Ñоздать неÑтандартный компонент. Возможно, вы захотите наÑледовать клаÑÑ {@link android.widget.Button}, чтобы Ñделать нечто более необычное. Ð’ Ñтом Ñлучае вы Ñможете определить поведение ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿Ð¾ умолчанию Ð´Ð»Ñ Ñвоего клаÑÑа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <a href="#EventHandlers">обработчиков Ñобытий</a> клаÑÑа.</p> @@ -46,27 +46,27 @@ parent.link=index.html <dl> <dt><code>onClick()</code></dt> - <dd>Из объекта {@link android.view.View.OnClickListener}. + <dd>Из объекта {@link android.view.View.OnClickListener}. Ðтот метод вызываетÑÑ, когда пользователь каÑаетÑÑ Ñлемента (в режиме каÑаниÑ), или переводит Ñ„Ð¾ÐºÑƒÑ Ð½Ð° Ñлемент Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиш Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ трекбола и нажимает ÑоответÑтвующую клавишу «ввода» или нажимает на трекбол.</dd> <dt><code>onLongClick()</code></dt> - <dd>Из объекта {@link android.view.View.OnLongClickListener}. + <dd>Из объекта {@link android.view.View.OnLongClickListener}. Ðтот метод вызываетÑÑ, когда пользователь каÑаетÑÑ Ñлемента и удерживает его (в режиме каÑаниÑ), или переводит Ñ„Ð¾ÐºÑƒÑ Ð½Ð° Ñлемент Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиш Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ трекбола и нажимает и удерживает ÑоответÑтвующую клавишу «ввода» или трекбол (в течение одной Ñекунды).</dd> <dt><code>onFocusChange()</code></dt> - <dd>Из объекта {@link android.view.View.OnFocusChangeListener}. + <dd>Из объекта {@link android.view.View.OnFocusChangeListener}. Ðтот метод вызываетÑÑ, когда пользователь перемещаетÑÑ Ð² Ñлемент или из него Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиш Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ трекбола.</dd> <dt><code>onKey()</code></dt> - <dd>Из объекта {@link android.view.View.OnKeyListener}. + <dd>Из объекта {@link android.view.View.OnKeyListener}. Ðтот метод вызываетÑÑ, когда пользователь переноÑит Ñ„Ð¾ÐºÑƒÑ Ð½Ð° Ñлемент и нажимает или отпуÑкает аппаратную клавишу на уÑтройÑтве.</dd> <dt><code>onTouch()</code></dt> - <dd>Из объекта {@link android.view.View.OnTouchListener}. + <dd>Из объекта {@link android.view.View.OnTouchListener}. Ðтот метод вызываетÑÑ, когда пользователь выполнÑет дейÑтвие, ÑчитающееÑÑ Ñобытием каÑаниÑ, например, нажимает, отпуÑкает или выполнÑет любой жеÑÑ‚ на Ñкране (в пределах границ Ñлемента).</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>Из объекта {@link android.view.View.OnCreateContextMenuListener}. + <dd>Из объекта {@link android.view.View.OnCreateContextMenuListener}. Ðтот метод вызываетÑÑ, когда ÑоздаетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтное меню (в результате длительного «длительного нажатиÑ»). См. обÑуждение контекÑтных меню в руководÑтве Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð² <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Меню</a>.</dd> @@ -75,8 +75,8 @@ parent.link=index.html <p>Ðти методы ÑвлÑÑŽÑ‚ÑÑ ÐµÐ´Ð¸Ð½Ñтвенными ÑоÑтавными чаÑÑ‚Ñми ÑоответÑтвующих интерфейÑов. Чтобы определить один из Ñтих методов и обрабатывать ÑобытиÑ, реализуйте вложенный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð² вашем процеÑÑ Ð¸Ð»Ð¸ определите его, как анонимный клаÑÑ. Затем передайте ÑкземплÑÑ€ реализации -в ÑоответÑтвующий метод <code>View.set...Listener()</code>. (Ðапример, вызовите -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> +в ÑоответÑтвующий метод <code>View.set...Listener()</code>. (Ðапример, вызовите +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> и передайте ему Ñвою реализацию {@link android.view.View.OnClickListener OnClickListener}.)</p> <p>Ð’ Ñледующем примере показано, как зарегиÑтрировать приемник ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Â«Ð¿Ð¾ клику» (on-click) Ð´Ð»Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸. </p> @@ -122,7 +122,7 @@ public class ExampleActivity extends Activity implements OnClickListener { завиÑит от ÑобытиÑ. Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… методов, которые возвращают значениÑ, причина опиÑана ниже:</p> <ul> <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> — -Ñтот метод возвращает логичеÑкое значение, указывающее, что вы обработали Ñто Ñобытие и его более не Ñледует хранить. +Ñтот метод возвращает логичеÑкое значение, указывающее, что вы обработали Ñто Ñобытие и его более не Ñледует хранить. Рименно, верните значение <em>true</em>, чтобы указать, что вы обработали Ñобытие и его Ñледует оÑтановить; верните значение <em>false</em>, еÑли вы не обработали его и/или Ñобытие должно продолжатьÑÑ Ð´Ð»Ñ Ð»ÑŽÐ±Ñ‹Ñ… других приемников ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ on-click.</li> @@ -181,14 +181,14 @@ dispatchKeyEvent()}</code>. Ð’ качеÑтве альтернативы к пе макета, учитывайте и другие методы:</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> — Ñтот метод позволÑет вашей операции {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> — Ñтот метод позволÑет вашей операции {@link android.app.Activity} перехватывать вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÐºÐ°Ñаний перед их отправкой в окно.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> — Ñтот метод позволÑет объекту {@link android.view.ViewGroup} проÑматривать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´ их отправкой в дочерние отображаемые объекты.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> — вызовите Ñтот метод -в родительÑком отображаемом объекте, чтобы указать ему, что он не должен перехватывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÐºÐ°ÑÐ°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <code>{@link +в родительÑком отображаемом объекте, чтобы указать ему, что он не должен перехватывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÐºÐ°ÑÐ°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li> </ul> @@ -199,7 +199,7 @@ dispatchKeyEvent()}</code>. Ð’ качеÑтве альтернативы к пе какой Ñлемент будет принимать ввод. Однако, еÑли уÑтройÑтво поддерживает ÑенÑорный ввод, и пользователь начинает взаимодейÑтвовать Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом, прикаÑаÑÑÑŒ к его Ñлементам, иÑчезает необходимоÑть выделÑть Ñлементы или передавать Ñ„Ð¾ÐºÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð¾Ð¼Ñƒ отображаемому объекту. Следовательно, ÑущеÑтвует режим -взаимодейÑтвиÑ, который называетÑÑ Â«Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð¼ каÑаниÑ». +взаимодейÑтвиÑ, который называетÑÑ Â«Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð¼ каÑаниÑ». </p> <p> Как только пользователь каÑаетÑÑ Ñкрана, уÑтройÑтво, поддерживающее ÑенÑорный ввод, @@ -214,7 +214,7 @@ dispatchKeyEvent()}</code>. Ð’ качеÑтве альтернативы к пе Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑким интерфейÑом без каÑÐ°Ð½Ð¸Ñ Ñкрана. </p> <p> -СоÑтоÑние режима каÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ð²Ð¾ вÑей ÑиÑтеме (Ð´Ð»Ñ Ð²Ñех окон и операций). +СоÑтоÑние режима каÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ð²Ð¾ вÑей ÑиÑтеме (Ð´Ð»Ñ Ð²Ñех окон и операций). Чтобы узнать текущее ÑоÑтоÑние, можно вызвать {@link android.view.View#isInTouchMode} и поÑмотреть, находитÑÑ Ð»Ð¸ уÑтройÑтво в режиме каÑаниÑ. </p> @@ -282,7 +282,7 @@ dispatchKeyEvent()}</code>. Ð’ качеÑтве альтернативы к пе the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/ru/preview/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd index d4e60427a98a..887ea630e79c 100644 --- a/docs/html-intl/intl/ru/preview/api-overview.jd +++ b/docs/html-intl/intl/ru/preview/api-overview.jd @@ -456,7 +456,7 @@ API-Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹, который позволÑет пР<h2 id="android_for_work">Android for Work</h2> <p>Ð’ Android for Work добавлены много новых возможноÑтей и API-интерфейÑов Ð´Ð»Ñ ÑƒÑтройÑтв под управлением Android N. -Ðекоторые из них приведены ниже. Полный ÑпиÑок обновлений Android for Work, каÑающихÑÑ +Ðекоторые из них приведены ниже. Полный ÑпиÑок обновлений Android for Work, каÑающихÑÑ Android N, ÑодержитÑÑ Ð² ÑпиÑке изменений Android for Work.</p> <h3 id="work_profile_security_challenge">Пароль безопаÑноÑти Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ </h3> diff --git a/docs/html-intl/intl/ru/preview/download.jd b/docs/html-intl/intl/ru/preview/download.jd index b286cad7a7a9..3af4a5a80ac8 100644 --- a/docs/html-intl/intl/ru/preview/download.jd +++ b/docs/html-intl/intl/ru/preview/download.jd @@ -107,7 +107,7 @@ page.image=images/cards/card-n-downloads_2x.png 9.3. Google вправе в любое Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‚Ð¸Ñ‚ÑŒ дейÑтвие наÑтоÑщего Лицензионного ÑоглашениÑ, отправив предварительное уведомление или без него. 9.4 ДейÑтвие наÑтоÑщего Лицензионного ÑÐ¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки прекращаетÑÑ Ð±ÐµÐ· предварительного ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ‹Ñ… дейÑтвий Ñразу поÑле Ñледующего: -(A) ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Google прекращает предоÑтавление Preview или определенных чаÑтей Preview пользователÑм в той Ñтране, в которой вы проживаете или иÑпользуете уÑлуги компании; +(A) ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Google прекращает предоÑтавление Preview или определенных чаÑтей Preview пользователÑм в той Ñтране, в которой вы проживаете или иÑпользуете уÑлуги компании; (B) ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Google выпуÑкает окончательную верÑию Android SDK. 9.5 Ð’ Ñлучае Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð½Ð°ÑтоÑщего Лицензионного ÑÐ¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰Ð°ÐµÑ‚ÑÑ Ð´ÐµÐ¹Ñтвие лицензии, предоÑтавленной в рамках Лицензионного ÑоглашениÑ, и вам Ñледует незамедлительно прекратить любое иÑпользование Preview, тогда как положениÑ, изложенные в разделах 10, 11, 12 и 14 продолжают дейÑтвовать беÑÑрочно. @@ -264,7 +264,7 @@ Preview одним из Ñледующих ÑпоÑобов. вручную запиÑать его во флÑш-памÑть уÑтройÑтва. См. информацию в Ñледующей таблице, чтобы загрузить ÑиÑтемный образ Ð´Ð»Ñ Ñвоего теÑтового уÑтройÑтва. ЗапиÑÑŒ вручную во флÑш-памÑть уÑтройÑтва удобна, еÑли требуетÑÑ Ñ‚Ð¾Ñ‡Ð½Ð¾Ðµ управление Ñредой теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ чаÑÑ‚Ð°Ñ Ð¿ÐµÑ€ÐµÑƒÑтановка, -например при автоматичеÑком теÑтировании. +например при автоматичеÑком теÑтировании. </p> <!-- You can flash by ota or system image --><p> @@ -289,7 +289,7 @@ Preview одним из Ñледующих ÑпоÑобов. ЕÑли вы захотите получить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ беÑпроводной ÑвÑзи поÑле запиÑи на уÑтройÑтво вручную, вам нужно проÑто зарегиÑтрировать уÑтройÑтво в <a href="https://g.co/androidbeta">программе бета-теÑтировании Android</a>. Ð’Ñ‹ можете зарегиÑтрировать уÑтройÑтво в любое Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñледующего Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ верÑии -по беÑпроводной ÑвÑзи. +по беÑпроводной ÑвÑзи. </p> <table> @@ -300,64 +300,73 @@ Preview одним из Ñледующих ÑпоÑобов. <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npc56p-preview-6c877a3d.tgz</a><br> - MD5: b5cf874021023b398f5b983b24913f5d<br> - SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npc56p-preview-54b13c67.tgz</a><br> - MD5: af183638cf34e0eb944a1957d7696f60<br> - SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npc56p-preview-85ffc1b1.tgz</a><br> - MD5: bc4934ea7bd325753eee1606d3725a24<br> - SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npc56p-preview-0e8ec8ef.tgz</a><br> - MD5: c901334c6158351e945f188167ae56f4<br> - SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npc56p-preview-1bafdbfb.tgz</a><br> - MD5: 7bb95bebc478d7257cccb4652899d1b4<br> - SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npc56r-preview-7027d5b6.tgz</a><br> - MD5: f5d3d8f75836ccfe4c70e8162e498be4<br> - SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npc56p-preview-335a86a4.tgz</a><br> - MD5: 4e21fb183bbbf467bee91598d587fd2e<br> - SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> + <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npc56p-preview-82472ebc.tgz</a><br> - MD5: 983e083bc7cd0c4a2d39d6ebaa20202a<br> - SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html-intl/intl/ru/preview/features/direct-boot.jd b/docs/html-intl/intl/ru/preview/features/direct-boot.jd index b49624bf9216..3392c1355f8f 100644 --- a/docs/html-intl/intl/ru/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/ru/preview/features/direct-boot.jd @@ -103,7 +103,7 @@ FileInputStream inStream = directBootContext.openFileInput(appDataFilename); <p>Шифрованное хранилище уÑтройÑтва Ñледует иÑпользовать только Ð´Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть доÑтупна в режиме Direct Boot. Шифрованное хранилище уÑтройÑтва не Ñледует иÑпользовать в качеÑтве шифрованного хранилища общего назначениÑ. -Ð”Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ шифрованных данных, которые не требуютÑÑ Ð² режиме +Ð”Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ шифрованных данных, которые не требуютÑÑ Ð² режиме Direct Boot, Ñледует иÑпользовать шифрованное хранилище, требующее ввода учетных данных.</p> <h2 id="notification">Уведомление о разблокировке пользователем</h2> @@ -148,7 +148,7 @@ ACTION_BOOT_COMPLETED}, которое теперь указывает, что Ñ Direct Boot на поддерживаемых уÑтройÑтвах Ñ Android N, выполните одну из Ñледующих поÑледовательноÑтей дейÑтвий.</p> <ul> -<li>Включите на уÑтройÑтве параметры разработчика <b>Developer options</b>, еÑли вы еще не Ñделали Ñтого ранее. Ð”Ð»Ñ Ñтого +<li>Включите на уÑтройÑтве параметры разработчика <b>Developer options</b>, еÑли вы еще не Ñделали Ñтого ранее. Ð”Ð»Ñ Ñтого перейдите на Ñкран <b>Settings > About phone</b> и нажмите Ñемь раз <b>Build number</b>. Когда параметры разработчика Ñтанут доÑтупны, откройте раздел <b>Settings > Developer options</b> и выберите diff --git a/docs/html-intl/intl/ru/preview/features/multi-window.jd b/docs/html-intl/intl/ru/preview/features/multi-window.jd index f1a8ea603ddd..b45766c169a1 100644 --- a/docs/html-intl/intl/ru/preview/features/multi-window.jd +++ b/docs/html-intl/intl/ru/preview/features/multi-window.jd @@ -356,7 +356,7 @@ android:supportsPictureInPicture=["true" | "false"] <p> Чтобы перевеÑти операцию в режим "картинка в картинке", вызовите новый метод <code>Activity.enterPictureInPicture()</code>. Ðтот метод игнорируетÑÑ, еÑли - уÑтройÑтво не поддерживает режим "картинка в картинке". Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑодержитÑÑ Ð² документации + уÑтройÑтво не поддерживает режим "картинка в картинке". Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑодержитÑÑ Ð² документации <a href="picture-in-picture.html">Режим "картинка в картинке"</a>. </p> diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd index 83dd2b4d1545..83e9968f73da 100644 --- a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd +++ b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd @@ -208,7 +208,7 @@ it_IT<br> конечных пользователей. ПоÑтому при разработке приложений Ð´Ð»Ñ Android N Ñледует иÑпользовать ÑредÑтва форматированиÑ, а не жеÑткое кодирование Ñтрок Ñ Ñ‡Ð¸Ñлами и датами.</p> -<p>Ð’ качеÑтве наглÑдного примера можно привеÑти арабÑкий Ñзык, поддержка которого в Android N раÑширена +<p>Ð’ качеÑтве наглÑдного примера можно привеÑти арабÑкий Ñзык, поддержка которого в Android N раÑширена Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ {@code ar_EG} до 27 Ñзыковых Ñтандартов. БольшинÑтво реÑурÑов Ñтих Ñзыковых Ñтандартов общие, но в некоторых из них иÑпользуютÑÑ Ñ†Ð¸Ñ„Ñ€Ñ‹ формата ASCII, а в других — ÑобÑтвенные цифры. Ðапример, еÑли вы хотите Ñоздать предложение Ñ Ñ‡Ð¸Ñловой переменной diff --git a/docs/html-intl/intl/ru/preview/features/notification-updates.jd b/docs/html-intl/intl/ru/preview/features/notification-updates.jd index 9c7cb9347719..54b3bc36f5d4 100644 --- a/docs/html-intl/intl/ru/preview/features/notification-updates.jd +++ b/docs/html-intl/intl/ru/preview/features/notification-updates.jd @@ -203,7 +203,7 @@ Builder.setGroup()}.</p> </p> -<p>Добавление уведомлений в группу опиÑано в разделе +<p>Добавление уведомлений в группу опиÑано в разделе <a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Добавление каждого ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð² группу</a>.</p> diff --git a/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd index a39230c252fe..51a4c4d55f79 100644 --- a/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd +++ b/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd @@ -113,7 +113,7 @@ startActivityForResult(intent, request_code); <h2 id="best">Советы и рекомендации</h2> <p>По возможноÑти оÑтавлÑйте поÑтоÑнный URI Ð´Ð»Ñ Ð´Ð¾Ñтупа к внешнему каталогу, чтобы приложению не -приходилоÑÑŒ многократно запрашивать у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ на доÑтуп. ПоÑле предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа пользователем вызовите метод +приходилоÑÑŒ многократно запрашивать у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ на доÑтуп. ПоÑле предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа пользователем вызовите метод <code>getContentResolver().takePersistableUriPermssion()</code> Ð´Ð»Ñ URI доÑтупа к каталогу. СиÑтема Ñохранит поÑтоÑнный URI и при поÑледующих запроÑах доÑтупа будет возвращать ответ <code>RESULT_OK</code>. Таким образом, приложение не будет поÑтоÑнно выводить diff --git a/docs/html-intl/intl/ru/preview/features/security-config.jd b/docs/html-intl/intl/ru/preview/features/security-config.jd index de117d68a83e..5294a4f6bbbd 100644 --- a/docs/html-intl/intl/ru/preview/features/security-config.jd +++ b/docs/html-intl/intl/ru/preview/features/security-config.jd @@ -133,7 +133,7 @@ page.image=images/cards/card-nyc_2x.jpg </p> <p> - Добавьте Ñамозаверенный Ñертификат или Ñертификат закрытого ЦС в формате PEM или DER в + Добавьте Ñамозаверенный Ñертификат или Ñертификат закрытого ЦС в формате PEM или DER в {@code res/raw/my_ca}. </p> @@ -209,7 +209,7 @@ page.image=images/cards/card-nyc_2x.jpg При отладке приложениÑ, которое иÑпользует Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð» HTTPS, вам может потребоватьÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ к локальному Ñерверу разработки, у которого нет Ñертификата SSL Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñервера. Чтобы выполнить отладку без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° - приложениÑ, вы можете указать ЦС Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, + приложениÑ, вы можете указать ЦС Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, которые входÑÑ‚ в чиÑло доверенных, <i>только</i> еÑли Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° <a href="{@docRoot}guide/topics/manifest/application-element.html#debug"> android:debuggable</a> уÑтановлено значение {@code true} Ñ Ð¸Ñпользованием {@code debug-overrides}. Обычно Ñреды разработки и инÑтрументы diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd index b8de11ecea67..29f1730998e0 100644 --- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd @@ -34,12 +34,12 @@ startpage=true </div> </div> -<p>Во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ вашему приложению ÑкземплÑры +<p>Во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ вашему приложению ÑкземплÑры {@link android.app.Activity} внутри Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‚ÑÑ Ð¼ÐµÐ¶Ð´Ñƒ разными ÑоÑтоÑниÑми их жизненного цикла Ðапример, при первом запуÑке операции она получает выÑокий приоритет в ÑиÑтеме и привлекает внимание пользователÑ. Во Ð²Ñ€ÐµÐ¼Ñ Ñтого процеÑÑа ÑиÑтема Android вызывает Ñерию методов жизненного цикла -операции, позволÑÑ Ð½Ð°Ñтроить пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¸ другие компоненты. ЕÑли пользователь выполнÑет +операции, позволÑÑ Ð½Ð°Ñтроить пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¸ другие компоненты. ЕÑли пользователь выполнÑет дейÑтвие, запуÑкающее другую операцию, или переключаетÑÑ Ð½Ð° другое приложение, ÑиÑтема вызывает другой набор методов жизненного цикла Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, поÑкольку она переноÑитÑÑ Ð½Ð° фоновый уровень (Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не отображаетÑÑ, но ÑкземплÑÑ€ и ÑоÑтоÑние оÑтаютÑÑ Ð±ÐµÐ· изменений).</p> @@ -50,12 +50,12 @@ startpage=true а Ñетевое Ñоединение разрывалоÑÑŒ. ПоÑле возврата Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»ÑŒ может Ñнова подключитьÑÑ Ðº Ñети, и пользователь Ñможет возобновить воÑпроизведение видео Ñ Ñ‚Ð¾Ð³Ð¾ же Ñамого меÑта.</p> -<p>Ð’ Ñтом учебном курÑе разъÑÑнÑÑŽÑ‚ÑÑ Ð²Ð°Ð¶Ð½Ñ‹Ðµ методы обратного вызова жизненного цикла, которые получает каждый ÑкземплÑÑ€ {@link +<p>Ð’ Ñтом учебном курÑе разъÑÑнÑÑŽÑ‚ÑÑ Ð²Ð°Ð¶Ð½Ñ‹Ðµ методы обратного вызова жизненного цикла, которые получает каждый ÑкземплÑÑ€ {@link android.app.Activity}, и опиÑываетÑÑ ÐºÐ°Ðº их иÑпользовать, чтобы Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑлаÑÑŒ так, как Ñтого ожидает пользователь, и не потреблÑла ÑиÑтемные реÑурÑÑ‹, когда они ей не нужны.</p> <h2>Уроки</h2> - + <dl> <dt><b><a href="starting.html">ЗапуÑк операции</a></b></dt> <dd>Из Ñтого урока вы узнаете об оÑновах жизненного цикла операций, ÑпоÑобах запуÑка вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми и вариантах @@ -68,5 +68,5 @@ android.app.Activity}, и опиÑываетÑÑ ÐºÐ°Ðº их иÑпользовР<dt><b><a href="recreating.html">Повторное Ñоздание операции</a></b></dt> <dd>Ð’Ñ‹ узнаете, что проиÑходит при полном прекращении операции, и как можно воÑÑтановить ее ÑоÑтоÑние в Ñлучае необходимоÑти.</dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd index c4837809acf2..8d1ce9265511 100644 --- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Содержание Ñтого урока</h2> <ol> <li><a href="#Pause">ПриоÑтановка операции</a></li> <li><a href="#Resume">Возобновление операции</a></li> </ol> - + <h2>См. также:</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Операции</a> @@ -59,7 +59,7 @@ android.app.Activity#onPause()}, Ñто может указывать, что о <h2 id="Pause">ПриоÑтановка операции</h2> - + <p>Когда ÑиÑтема вызывает {@link android.app.Activity#onPause()} Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, Ñто техничеÑки означает, что Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾ÑтаетÑÑ Ñ‡Ð°Ñтично видимой. Однако чаще вÑего Ñто означает, что пользователь покидает операцию, и вÑкоре она войдет в ÑоÑтоÑние оÑтановки. Обратный вызов diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd index acb89fa29621..c36ccf4038d0 100644 --- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Содержание Ñтого урока</h2> <ol> <li><a href="#SaveState">Сохранение ÑоÑтоÑÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸</a></li> <li><a href="#RestoreState">ВоÑÑтановление ÑоÑтоÑÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸</a></li> </ol> - + <h2>См. также:</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Поддержка @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()}:</p> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, ÐºÐ¾Ñ‚Ð¾Ñ Ð¿Ð¾Ñле метода {@link android.app.Activity#onStart()}. СиÑтема вызывает {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} только при наличии Ñохраненного ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑтановлениÑ, и поÑтому вам не нужно проверÑть, имеет ли {@link android.os.Bundle} значение null:</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd index ef8be5b5347e..19f713469a70 100644 --- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Содержание Ñтого урока</h2> <ol> <li><a href="#lifecycle-states">Изучение обратных вызовов жизненного цикла</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">Создание нового ÑкземплÑра</a></li> <li><a href="#Destroy">Уничтожение операции</a></li> </ol> - + <h2>См. также:</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Операции</a></li> @@ -34,7 +34,7 @@ trainingnavtop=true </div> <p>Ð’ отличие от других парадигм программированиÑ, где Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкаютÑÑ Ñ Ð¸Ñпользованием метода {@code main()}, ÑиÑтема -Android запуÑкает код в {@link android.app.Activity}ÑкземплÑре поÑредÑтвом активации определенных +Android запуÑкает код в {@link android.app.Activity}ÑкземплÑре поÑредÑтвом активации определенных методов обратного вызова, ÑоответÑтвующих определенным Ñтапам его жизненного цикла. СущеÑтвует поÑледовательноÑть методов обратного вызова, которые запуÑкают операцию и поÑледовательноÑть методов обратного вызова, уничтожающих операцию.</p> @@ -83,7 +83,7 @@ Android запуÑкает код в {@link android.app.Activity}ÑÐºÐ·ÐµÐ¼Ð¿Ð»Ñ </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -138,7 +138,7 @@ android.app.Activity#onResume()}.</p> -<h2 id="launching-activity">Указание операции, запуÑкающей приложение</h2> +<h2 id="launching-activity">Указание операции, запуÑкающей приложение</h2> <p>Когда пользователь выбирает значок Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° главном Ñкране, ÑиÑтема вызывает метод {@link android.app.Activity#onCreate onCreate()} Ð´Ð»Ñ {@link android.app.Activity} в вашем приложении @@ -151,7 +151,7 @@ android.app.Activity#onCreate onCreate()} Ð´Ð»Ñ {@link android.app.Activity} в <p>ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° декларироватьÑÑ Ð² манифеÑте Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ фильтра <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>, включающего дейÑтвие {@link android.content.Intent#ACTION_MAIN MAIN} и категорию -{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Ðапример:</p> +{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Ðапример:</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -221,7 +221,7 @@ public void onCreate(Bundle savedInstanceState) { <p>ПоÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ {@link android.app.Activity#onCreate onCreate()} ÑиÑтема быÑтро вызывает методы {@link android.app.Activity#onStart()} и {@link android.app.Activity#onResume()} по очереди. ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не оÑтаетÑÑ Ð² ÑоÑтоÑнии ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ запуÑка. ТехничеÑки -Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑтановитÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ вызове {@link android.app.Activity#onStart()}, однако затем Ñразу же проиÑходит +Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑтановитÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ вызове {@link android.app.Activity#onStart()}, однако затем Ñразу же проиÑходит {@link android.app.Activity#onResume()} и Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾ÑтаетÑÑ Ð² ÑоÑтоÑнии возобновлениÑ, пока что-то не произойдет, например пока не поÑтупит телефонный звонок, пользователь не переключитÑÑ Ð½Ð° другую операцию или Ñкран уÑтройÑтва не выключитÑÑ.</p> @@ -268,7 +268,7 @@ android.app.Activity#onDestroy}.</p> @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd index 27c771f1ffe4..f78e4efb0c00 100644 --- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>Содержание Ñтого урока</h2> <ol> <li><a href="#Stop">ОÑтановка операции</a></li> <li><a href="#Start">ЗапуÑк/перезапуÑк операции</a></li> </ol> - + <h2>См. также:</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Операции</a> @@ -118,7 +118,7 @@ protected void onStop() { <p class="note"><strong>Примечание.</strong> Даже еÑли ÑиÑтема уничтожит операцию в период оÑтановки, она Ñохранит ÑоÑтоÑние объектов {@link android.view.View} (например, текÑта в {@link android.widget.EditText}) в {@link android.os.Bundle} (наборе пар "ключ-значение") и воÑÑтановит -их, еÑли пользователь вернетÑÑ Ð² тот же ÑкземплÑÑ€ операции (на <a href="recreating.html">Ñледующем уроке</a> мы более подробно поговорим об иÑпользовании {@link android.os.Bundle} Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ +их, еÑли пользователь вернетÑÑ Ð² тот же ÑкземплÑÑ€ операции (на <a href="recreating.html">Ñледующем уроке</a> мы более подробно поговорим об иÑпользовании {@link android.os.Bundle} Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… данных ÑоÑтоÑÐ½Ð¸Ñ Ð² Ñлучае ÑƒÐ½Ð¸Ñ‡Ñ‚Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ воÑÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ операции).</p> @@ -152,13 +152,13 @@ android.app.Activity#onStart()} как при Ñоздании операции, @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd b/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd index 418d28866eee..bd1a4b71ae10 100644 --- a/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd +++ b/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd @@ -118,11 +118,11 @@ private static final String SQL_DELETE_ENTRIES = по умолчанию недоÑтупна другим приложениÑм.</p> <p>Полезный набор API-интерфейÑов ÑодержитÑÑ Ð² клаÑÑе {@link -android.database.sqlite.SQLiteOpenHelper}. +android.database.sqlite.SQLiteOpenHelper}. ЕÑли вы иÑпользуете Ñтот клаÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑÑылок на Ñвою базу данных, ÑиÑтема выполнÑет потенциально долговременные операции ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных только тогда, когда Ñто -необходимо, а <em>не при запуÑке приложениÑ</em>. Ð”Ð»Ñ Ñтого нужно иÑпользовать вызов +необходимо, а <em>не при запуÑке приложениÑ</em>. Ð”Ð»Ñ Ñтого нужно иÑпользовать вызов {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} или {@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p> @@ -245,7 +245,7 @@ Cursor c = db.query( ); </pre> -<p>Чтобы поÑмотреть на Ñтроку в меÑте курÑора, иÑпользуйте один из методов Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ +<p>Чтобы поÑмотреть на Ñтроку в меÑте курÑора, иÑпользуйте один из методов Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ {@link android.database.Cursor}, которые вÑегда нужно вызывать перед Ñчитыванием значений. Обычно Ñледует начинать Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° {@link android.database.Cursor#moveToFirst}, который помещает "позицию чтениÑ" на первую запиÑÑŒ в результатах. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñтроки значение Ñтолбца можно прочитать, вызвав один из методов diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd index 61a00376d0b1..9a52e3eaf918 100644 --- a/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd +++ b/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd @@ -79,7 +79,7 @@ SharedPreferences sharedPref = context.getSharedPreferences( SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); </pre> -<p class="caution"><strong>Внимание!</strong> ЕÑли вы Ñоздадите общий файл наÑтроек +<p class="caution"><strong>Внимание!</strong> ЕÑли вы Ñоздадите общий файл наÑтроек Ñ {@link android.content.Context#MODE_WORLD_READABLE} или {@link android.content.Context#MODE_WORLD_WRITEABLE}, ваши данные будут доÑтупны вÑем другим приложениÑм, которым извеÑтен идентификатор файла.</p> diff --git a/docs/html-intl/intl/ru/training/basics/intents/result.jd b/docs/html-intl/intl/ru/training/basics/intents/result.jd index 8ab03d42cdaf..c413725e801d 100644 --- a/docs/html-intl/intl/ru/training/basics/intents/result.jd +++ b/docs/html-intl/intl/ru/training/basics/intents/result.jd @@ -37,7 +37,7 @@ startActivity()}).</p> результат отправлÑетÑÑ ÐºÐ°Ðº другой объект {@link android.content.Intent}. Ваша Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÐµÑ‚ его в обратном вызове {@link android.app.Activity#onActivityResult onActivityResult()}.</p> -<p class="note"><strong>Примечание.</strong> Ð’Ñ‹ можете иÑпользовать Ñвные и неÑвные результаты при вызове +<p class="note"><strong>Примечание.</strong> Ð’Ñ‹ можете иÑпользовать Ñвные и неÑвные результаты при вызове {@link android.app.Activity#startActivityForResult startActivityForResult()}. При запуÑке ÑобÑтвенной операции Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° вы должны иÑпользовать Ñвные результаты, чтобы получить именно ожидаемый результат.</p> @@ -104,7 +104,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { Android Контакты или Люди, предоÑтавлÑÑŽÑ‚ контент {@link android.net.Uri}, который идентифицирует выбранный пользователем контакт.</p> -<p>Ð”Ð»Ñ ÑƒÑпешной обработки результатов необходимо понимать, каким будет формат Ñтих результатов +<p>Ð”Ð»Ñ ÑƒÑпешной обработки результатов необходимо понимать, каким будет формат Ñтих результатов {@link android.content.Intent}. Ðто проÑто, еÑли результат возвращаетÑÑ Ð¾Ð´Ð½Ð¾Ð¹ из ваших ÑобÑтвенных операций. ПриложениÑ, входÑщие в ÑоÑтав платформы Android, имеют ÑобÑтвенные прикладные интерфейÑÑ‹, так что вы можете раÑÑчитывать на получение определенных результатов. Ðапример, приложение "Люди" (приложение "Контакты" в Ñтарых diff --git a/docs/html-intl/intl/ru/training/material/animations.jd b/docs/html-intl/intl/ru/training/material/animations.jd index 9808a9fc7af1..ab59ea534c02 100644 --- a/docs/html-intl/intl/ru/training/material/animations.jd +++ b/docs/html-intl/intl/ru/training/material/animations.jd @@ -173,7 +173,7 @@ anim.start(); </ul> <p>Любой переход, ÑвлÑющийÑÑ Ð½Ð°Ñледованием клаÑÑа {@link android.transition.Visibility}, поддерживаетÑÑ ÐºÐ°Ðº начальный или конечный переход. - Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлены в Ñправке по API Ð´Ð»Ñ ÐºÐ»Ð°ÑÑа + Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлены в Ñправке по API Ð´Ð»Ñ ÐºÐ»Ð°ÑÑа {@link android.transition.Transition}.</p> <p>Ð’ Android 5.0 (уровень API 21) также поддерживаютÑÑ Ñледующие переходы общих Ñлементов:</p> @@ -230,7 +230,7 @@ anim.start(); {@link android.transition.ChangeImageTransform}. Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлены в Ñправке по API Ð´Ð»Ñ {@link android.transition.Transition}. </p> -<p>Чтобы активировать в Ñвоем коде переходы Ñодержимого окна, вызовите метод +<p>Чтобы активировать в Ñвоем коде переходы Ñодержимого окна, вызовите метод {@link android.view.Window#requestFeature Window.requestFeature()}:</p> <pre> @@ -263,7 +263,7 @@ setSharedElementEnterTransition()} задают начальный перехоРВ противном Ñлучае Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿ÑƒÑтит конечный переход, однако будет выполнен переход окна (например, маÑштабирование или затемнение). </p> -<p>Чтобы запуÑтить начальный переход как можно раньше, иÑпользуйте в вызываемой операции метод +<p>Чтобы запуÑтить начальный переход как можно раньше, иÑпользуйте в вызываемой операции метод {@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()} . Ðто позволит Ñделать начальные переходы более Ñффектными.</p> @@ -289,7 +289,7 @@ startActivity(intent, <li>Ðктивируйте в Ñвоей теме переходы Ñодержимого окна.</li> <li>Ð’ определении ÑÑ‚Ð¸Ð»Ñ ÑƒÐºÐ°Ð¶Ð¸Ñ‚Ðµ переходы общих Ñлементов.</li> <li>Определите Ñвой переход как XML-реÑурÑ.</li> -<li>ПриÑвойте одинаковое Ð¸Ð¼Ñ Ð¾Ð±Ñ‰Ð¸Ð¼ Ñлементам в обоих макетах, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого атрибут +<li>ПриÑвойте одинаковое Ð¸Ð¼Ñ Ð¾Ð±Ñ‰Ð¸Ð¼ Ñлементам в обоих макетах, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого атрибут <code>android:transitionName</code>.</li> <li>ВоÑпользуйтеÑÑŒ методом {@link android.app.ActivityOptions#makeSceneTransitionAnimation ActivityOptions.makeSceneTransitionAnimation()}.</li> @@ -321,7 +321,7 @@ imgContainerView.setOnClickListener(new View.OnClickListener() { {@link android.view.View#setTransitionName View.setTransitionName()} Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð³Ð¾ имени Ñлемента в обеих операциÑÑ…. </p> -<p>Чтобы выполнить анимацию обратного перехода по завершении второй операции, вызовите метод +<p>Чтобы выполнить анимацию обратного перехода по завершении второй операции, вызовите метод {@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()} вмеÑто{@link android.app.Activity#finish Activity.finish()}.</p> @@ -414,15 +414,15 @@ android.animation.StateListAnimator} в качеÑтве XML-реÑурÑа:</p> </selector> </pre> -<p>Чтобы приÑоединить к предÑтавлению наÑтраиваемые анимации ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑтавлениÑ, определите аниматор, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñлемент +<p>Чтобы приÑоединить к предÑтавлению наÑтраиваемые анимации ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑтавлениÑ, определите аниматор, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñлемент <code>selector</code> в файле XML-реÑурÑа (как в Ñтом примере), а затем назначьте его Ñвоему предÑтавлению Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута <code>android:stateListAnimator</code>. Чтобы в Ñвоем коде назначить предÑтавлению аниматор ÑпиÑка ÑоÑтоÑний, иÑпользуйте метод {@link android.animation.AnimatorInflater#loadStateListAnimator -AnimationInflater.loadStateListAnimator()}, а затем назначьте аниматор Ñвоему предÑтавлению Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ метода +AnimationInflater.loadStateListAnimator()}, а затем назначьте аниматор Ñвоему предÑтавлению Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ метода {@link android.view.View#setStateListAnimator View.setStateListAnimator()}.</p> <p>ЕÑли ваша тема ÑвлÑетÑÑ Ñ€Ð°Ñширением темы Material Design, по умолчанию у кнопок имеетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть анимации по оÑи Z. Чтобы отключить -такое поведение кнопок, задайте Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° <code>android:stateListAnimator</code> значение +такое поведение кнопок, задайте Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° <code>android:stateListAnimator</code> значение <code>@null</code>.</p> <p>С помощью клаÑÑа {@link android.graphics.drawable.AnimatedStateListDrawable} можно Ñоздавать Ñлементы, которые Ñлужат Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸ между изменениÑми ÑоÑтоÑÐ½Ð¸Ñ ÑвÑзанного предÑтавлениÑ. diff --git a/docs/html-intl/intl/ru/training/material/drawables.jd b/docs/html-intl/intl/ru/training/material/drawables.jd index 2554f0717290..c1924e37945e 100644 --- a/docs/html-intl/intl/ru/training/material/drawables.jd +++ b/docs/html-intl/intl/ru/training/material/drawables.jd @@ -38,7 +38,7 @@ page.title=Работа Ñ Ñлементами дизайна <p>Тонирование можно применить к объектам {@link android.graphics.drawable.BitmapDrawable} и {@link android.graphics.drawable.NinePatchDrawable} Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ метода {@code setTint()}. Также можно -задать цвет и ÑпоÑоб Ñ‚Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² макетах, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого атрибуты <code>android:tint</code> и +задать цвет и ÑпоÑоб Ñ‚Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² макетах, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого атрибуты <code>android:tint</code> и <code>android:tintMode</code>.</p> diff --git a/docs/html-intl/intl/ru/training/material/get-started.jd b/docs/html-intl/intl/ru/training/material/get-started.jd index 476de7f1bcf5..6a0340d1ef78 100644 --- a/docs/html-intl/intl/ru/training/material/get-started.jd +++ b/docs/html-intl/intl/ru/training/material/get-started.jd @@ -59,7 +59,7 @@ page.title=Ðачало работы <h2 id="ApplyTheme">Применение темы Material Design</h2> -<p>Чтобы применить тему Material Design в Ñвоем приложении, укажите Ñтиль, который наÑледует от +<p>Чтобы применить тему Material Design в Ñвоем приложении, укажите Ñтиль, который наÑледует от <code>android:Theme.Material</code>:</p> <pre> diff --git a/docs/html-intl/intl/ru/training/material/index.jd b/docs/html-intl/intl/ru/training/material/index.jd index 0b3f1c4fc0ba..e609557490cd 100644 --- a/docs/html-intl/intl/ru/training/material/index.jd +++ b/docs/html-intl/intl/ru/training/material/index.jd @@ -1,7 +1,7 @@ -page.title=Создание приложений Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Material Design -page.type=проектирование +page.title=Создание приложений Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Material Design +page.type=проектирование page.image=images/cards/material_2x.png -page.metaDescription=ÐаучитеÑÑŒ применÑть Material Design к Ñвоим приложениÑм. +page.metaDescription=ÐаучитеÑÑŒ применÑть Material Design к Ñвоим приложениÑм. @jd:body diff --git a/docs/html-intl/intl/ru/training/material/lists-cards.jd b/docs/html-intl/intl/ru/training/material/lists-cards.jd index 44ff1601734f..fa0db14989b7 100644 --- a/docs/html-intl/intl/ru/training/material/lists-cards.jd +++ b/docs/html-intl/intl/ru/training/material/lists-cards.jd @@ -90,7 +90,7 @@ android.support.v7.widget.RecyclerView}. Ð”Ð»Ñ Ð½Ð°Ñтройки такой а <h3 id="RVExamples">Примеры</h3> -<p>Ð’ Ñледующем примере демонÑтрируетÑÑ, как включить в макет виджет +<p>Ð’ Ñледующем примере демонÑтрируетÑÑ, как включить в макет виджет {@link android.support.v7.widget.RecyclerView}:</p> <pre> @@ -253,7 +253,7 @@ android.support.v7.widget.CardView} могут отбраÑывать тени Ð <p> Виджеты {@link android.support.v7.widget.RecyclerView} и {@link android.support.v7.widget.CardView} входÑÑ‚ во <a href="{@docRoot}tools/support-library/features.html#v7">вÑпомогательные -библиотеки v7</a>. Чтобы иÑпользовать Ñти виджеты в Ñвоем проекте, добавьте в модуль Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñледующие +библиотеки v7</a>. Чтобы иÑпользовать Ñти виджеты в Ñвоем проекте, добавьте в модуль Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñледующие <a href="{@docRoot}sdk/installing/studio-build.html#dependencies">завиÑимоÑти Gradle</a>: </p> diff --git a/docs/html-intl/intl/ru/training/material/shadows-clipping.jd b/docs/html-intl/intl/ru/training/material/shadows-clipping.jd index a1c41fcd93d8..293b525854cf 100644 --- a/docs/html-intl/intl/ru/training/material/shadows-clipping.jd +++ b/docs/html-intl/intl/ru/training/material/shadows-clipping.jd @@ -31,7 +31,7 @@ page.title=Определение теней и обрезка предÑтавР<p>УÑтановка выÑоты также полезна Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸, когда виджеты временно поднимаютÑÑ Ð²Ñ‹ÑˆÐµ плоÑкоÑти предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ выполнении какого-либо дейÑтвиÑ. </p> -<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± уÑтановке выÑоты в Material Design предÑтавлены на Ñтранице +<p>Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± уÑтановке выÑоты в Material Design предÑтавлены на Ñтранице <a href="http://www.google.com/design/spec/what-is-material/objects-in-3d-space.html">Объекты в трехмерном проÑтранÑтве</a>. </p> @@ -59,13 +59,13 @@ View.setTranslationZ()}.</p> <p>Ðовые методы {@link android.view.ViewPropertyAnimator#z ViewPropertyAnimator.z()} и {@link android.view.ViewPropertyAnimator#translationZ ViewPropertyAnimator.translationZ()} позволÑÑŽÑ‚ Ñ Ð»ÐµÐ³ÐºÐ¾Ñтью анимировать изменение выÑоты предÑтавлений. - Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в Ñправке по API Ð´Ð»Ñ + Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в Ñправке по API Ð´Ð»Ñ {@link android.view.ViewPropertyAnimator}, а также в руководÑтве по <a href="{@docRoot}guide/topics/graphics/prop-animation.html">анимации ÑвойÑтв</a> Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð². </p> <p>Также можно иÑпользовать клаÑÑ {@link android.animation.StateListAnimator} Ð´Ð»Ñ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтих анимаций. Ðто оÑобенно полезно в тех ÑлучаÑÑ…, когда Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкаетÑÑ Ð¿Ñ€Ð¸ изменении ÑоÑтоÑниÑ, например, когда пользователь нажимает на кнопку. - Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе + Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. в разделе <a href="{@docRoot}training/material/animations.html#ViewState">ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑтавлениÑ</a>.</p> <p>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Z измерÑÑŽÑ‚ÑÑ Ð² dp (пикÑели, не завиÑÑщие от плотноÑти).</p> @@ -110,7 +110,7 @@ android.view.ViewPropertyAnimator#translationZ ViewPropertyAnimator.translationZ android.view.View#setOutlineProvider View.setOutlineProvider()}.</li> </ol> -<p>Можно Ñоздавать овальные и прÑмоугольные контуры Ñо Ñкругленными углами, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого методы клаÑÑа +<p>Можно Ñоздавать овальные и прÑмоугольные контуры Ñо Ñкругленными углами, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого методы клаÑÑа {@link android.graphics.Outline}. Стандартный иÑточник контуров получает контуры из фона предÑтавлениÑ. Чтобы предÑтавление не отбраÑывало тень, задайте Ð´Ð»Ñ Ð¸Ñточника контуров значение <code>null</code>. </p> diff --git a/docs/html-intl/intl/ru/training/material/theme.jd b/docs/html-intl/intl/ru/training/material/theme.jd index 320f308312bf..62c310f7dc7f 100644 --- a/docs/html-intl/intl/ru/training/material/theme.jd +++ b/docs/html-intl/intl/ru/training/material/theme.jd @@ -42,7 +42,7 @@ page.title=ИÑпользование темы Material Design <li><code>@android:style/Theme.Material.Light.DarkActionBar</code>.</li> </ul> -<p>СпиÑок доÑтупных Ñтилей Material Design Ñм. в Ñправке по API Ð´Ð»Ñ +<p>СпиÑок доÑтупных Ñтилей Material Design Ñм. в Ñправке по API Ð´Ð»Ñ {@link android.R.style R.style}.</p> <!-- two columns, dark/light material theme example --> @@ -66,7 +66,7 @@ page.title=ИÑпользование темы Material Design <strong>Примечание.</strong> Темы Material Design доÑтупны только в ОС Android 5.0 (уровень API 21) и более поздних верÑий. Во <a href="{@docRoot}tools/support-library/features.html#v7">вÑпомогательных библиотеках v7</a> предÑтавлены темы Ñо ÑтилÑми Material Design Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… виджетов. Ðти библиотеки также обеÑпечивают поддержку наÑтройки цветовой палитры. - Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. на Ñтранице + Дополнительные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñм. на Ñтранице <a href="{@docRoot}training/material/compatibility.html">ОбеÑпечение ÑовмеÑтимоÑти</a>. </p> @@ -108,7 +108,7 @@ page.title=ИÑпользование темы Material Design <p>Кроме того, можно ÑамоÑтоÑтельно размеÑтить Ñлемент за Ñтрокой ÑоÑтоÑниÑ. Ðапример, еÑли требуетÑÑ Ð½Ð°Ð»Ð¾Ð¶Ð¸Ñ‚ÑŒ прозрачную Ñтроку ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÑ€Ñ… фотографии, применив еле уловимый темный градиент, чтобы были видны белые значки ÑоÑтоÑниÑ. - Ð”Ð»Ñ Ñтого задайте Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° <code>android:statusBarColor</code> значение + Ð”Ð»Ñ Ñтого задайте Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° <code>android:statusBarColor</code> значение <code>@android:color/transparent</code> и наÑтройте флаги окна требуемым образом. Также можно воÑпользоватьÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼ {@link android.view.Window#setStatusBarColor Window.setStatusBarColor()} Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸ или Ñффекта поÑтепенного иÑчезаниÑ. </p> diff --git a/docs/html-intl/intl/ru/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/intl/ru/training/monitoring-device-state/battery-monitoring.jd index 26daf04bd1ce..a8e5843aee61 100644 --- a/docs/html-intl/intl/ru/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html-intl/intl/ru/training/monitoring-device-state/battery-monitoring.jd @@ -7,8 +7,8 @@ next.title=Determining and Monitoring the Docking State and Type next.link=docking-monitoring.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>Содержание урока</h2> @@ -24,9 +24,9 @@ next.link=docking-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ÐÐ°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸ фильтры намерений</a> </ul> -</div> </div> - +</div> + <p>ЕÑли вы хотите изменить чаÑтоту фоновых обновлений, чтобы продлить Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ уÑтройÑтва от батареи, Ñначала рекомендуетÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÑŒ текущий уровень зарÑда и ÑоÑтоÑние зарÑдки.</p> <p>Именно от Ñтих двух факторов завиÑит, как Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²Ð»Ð¸ÑÑŽÑ‚ на Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ уÑтройÑтва от батареи. Когда уÑтройÑтво подключено к Ñети переменного тока, приложение можно обновлÑть макÑимально чаÑто, поÑкольку процеÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ будет ÑказыватьÑÑ Ð½Ð° уровне зарÑда батареи. ЕÑли уÑтройÑтво не подключено к Ñети, Ñледует воздержатьÑÑ Ð¾Ñ‚ обновлений, чтобы продлить Ð²Ñ€ÐµÐ¼Ñ ÐµÐ³Ð¾ работы от батареи.</p> @@ -34,8 +34,8 @@ next.link=docking-monitoring.html <p>ЕÑли зарÑд батареи практичеÑки иÑчерпан, можно Ñнизить чаÑтоту обновлений (вплоть до их полного прекращениÑ).</p> -<h2 id="DetermineChargeState">Определение текущего ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки</h2> - +<h2 id="DetermineChargeState">Определение текущего ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки</h2> + <p>Ðачните Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки. {@link android.os.BatteryManager} передает вÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ батарее и зарÑдке в закрепленном намерении {@link android.content.Intent}, которое Ñодержит также информацию о ÑоÑтоÑнии зарÑдки.</p> <p>ПоÑкольку Ñто намерение ÑвлÑетÑÑ Ð·Ð°ÐºÑ€ÐµÐ¿Ð»ÐµÐ½Ð½Ñ‹Ð¼, региÑтрировать {@link android.content.BroadcastReceiver} не нужно. Чтобы получить текущее ÑоÑтоÑние батареи в виде намерениÑ, нужно вызвать {@code registerReceiver}, передав {@code null} в качеÑтве приемника, как показано в коде ниже. Можно также передать фактичеÑкий объект {@link android.content.BroadcastReceiver}, но Ñто необÑзательно, поÑкольку обработка обновлений будет выполнÑтьÑÑ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.</p> @@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <p>Как правило, еÑли уÑтройÑтво подключено к Ñети переменного тока, фоновые Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выполнÑть Ñ Ð¼Ð°ÐºÑимальной чаÑтотой. ЕÑли уÑтройÑтво зарÑжаетÑÑ Ñ‡ÐµÑ€ÐµÐ· USB, чаÑтоту можно неÑколько Ñократить, а еÑли уÑтройÑтво не подключено к Ñети – Ñократить еще больше.</p> -<h2 id="MonitorChargeState">ОтÑлеживание изменений ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки</h2> +<h2 id="MonitorChargeState">ОтÑлеживание изменений ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки</h2> <p>СоÑтоÑние зарÑдки изменÑетÑÑ Ð²ÑÑкий раз, когда пользователь подключает уÑтройÑтво к иÑточнику питаниÑ. ПоÑкольку Ñто ÑлучаетÑÑ Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾ чаÑто, важно отÑлеживать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтого ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ÑоответÑтвующим образом корректировать чаÑтоту Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ.</p> @@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <pre>public class PowerConnectionReceiver extends BroadcastReceiver { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; - + int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; @@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> }</pre> -<h2 id="CurrentLevel">Определение текущего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð·Ð°Ñ€Ñда батареи</h2> +<h2 id="CurrentLevel">Определение текущего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð·Ð°Ñ€Ñда батареи</h2> <p>Ð’ некоторых ÑлучаÑÑ… целеÑообразно определÑть текущий уровень зарÑда батареи. ЕÑли он ниже определенного значениÑ, чаÑтоту фоновых обновлений Ñледует уменьшить.</p> @@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> -<h2 id="MonitorLevel">ОтÑлеживание ÑущеÑтвенных изменений ÑƒÑ€Ð¾Ð²Ð½Ñ Ð·Ð°Ñ€Ñда батареи</h2> +<h2 id="MonitorLevel">ОтÑлеживание ÑущеÑтвенных изменений ÑƒÑ€Ð¾Ð²Ð½Ñ Ð·Ð°Ñ€Ñда батареи</h2> <p>ОтÑлеживать ÑоÑтоÑние батареи непрерывно не Ñледует,</p> diff --git a/docs/html-intl/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd index ca1a9423692f..d37243193e9e 100644 --- a/docs/html-intl/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html-intl/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>Содержание урока</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">ÐÐ°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸ фильтры намерений</a> </ul> -</div> +</div> </div> <p>Чаще вÑего повторÑющиеÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ фоновые Ñлужбы иÑпользуютÑÑ Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· Интернета, кÑÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ загрузки больших объемов данных. Однако еÑли подключение к Интернету не уÑтановлено или ÑкороÑть ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñлишком низкаÑ, выполнÑть загрузку не имеет ÑмыÑла.</p> @@ -35,18 +35,18 @@ next.link=manifest-receivers.html <p>Проверить наличие Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету и его тип можно Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ {@link android.net.ConnectivityManager}.</p> -<h2 id="DetermineConnection">Определение Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету</h2> - +<h2 id="DetermineConnection">Определение Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету</h2> + <p>ЕÑли подключение отÑутÑтвует, нет ÑмыÑла планировать обновление из Интернета. Ð’ приведенном ниже коде показано, как иÑпользовать {@link android.net.ConnectivityManager} Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ запроÑов об активной Ñети и определÑть возможноÑти подключениÑ.</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">Определение типа Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету</h2> +<h2 id="DetermineType">Определение типа Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету</h2> <p>Также можно определить тип доÑтупного в наÑтоÑщий момент Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Интернету.</p> @@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> <p>Когда Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹, необходимо отÑлеживать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупных Ñоединений, чтобы возобновить их Ñразу поÑле Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÑтройÑтва к Интернету.</p> -<h2 id="MonitorChanges">ОтÑлеживание Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтей подключениÑ</h2> +<h2 id="MonitorChanges">ОтÑлеживание Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтей подключениÑ</h2> <p>{@link android.net.ConnectivityManager} передает дейÑтвие {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) при каждом изменении Ñведений о подключении. ЗарегиÑтрируйте в манифеÑте приемник широковещательных намерений, чтобы отÑлеживать Ñти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ запуÑкать (или приоÑтанавливать) фоновые Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоответÑтвующим образом.</p> diff --git a/docs/html-intl/intl/ru/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/intl/ru/training/monitoring-device-state/docking-monitoring.jd index d94f3570458c..002f35155a22 100644 --- a/docs/html-intl/intl/ru/training/monitoring-device-state/docking-monitoring.jd +++ b/docs/html-intl/intl/ru/training/monitoring-device-state/docking-monitoring.jd @@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>Содержание урока</h2> @@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ÐÐ°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸ фильтры намерений</a> </ul> -</div> +</div> </div> <p>УÑтройÑтва под управлением ОС Android можно подключать к неÑкольким типам док-Ñтанций: наÑтольным, которые делÑÑ‚ÑÑ Ð½Ð° цифровые и аналоговые, и автомобильным. Ð’ большинÑтве Ñлучаев уÑтройÑтва зарÑжаютÑÑ Ð¿Ñ€Ð¸ подключении к док-Ñтанции, поÑтому ÑоÑтоÑние Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции чаÑто ÑвÑзано Ñ ÑоÑтоÑнием зарÑдки.</p> @@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html <p>СоÑтоÑние Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции также передаетÑÑ Ð² виде закрепленного Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ {@link android.content.Intent}, что позволÑет запрашивать ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ наличии Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции и ее типе.</p> -<h2 id="CurrentDockState">Определение текущего ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции</h2> - +<h2 id="CurrentDockState">Определение текущего ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции</h2> + <p>Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑоÑтоÑнии Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции передаютÑÑ Ð² качеÑтве дополнительных данных в закрепленном оповещении дейÑÑ‚Ð²Ð¸Ñ {@link android.content.Intent#ACTION_DOCK_EVENT}. ПоÑкольку Ñто закрепленное намерение, региÑтрировать {@link android.content.BroadcastReceiver} не требуетÑÑ. ДоÑтаточно вызвать {@link android.content.Context#registerReceiver registerReceiver()}, передав {@code null} в качеÑтве приемника широковещательных намерений, как показано в коде ниже.</p> <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); @@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre> boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> -<h2 id="DockType">Определение типа док-Ñтанции</h2> +<h2 id="DockType">Определение типа док-Ñтанции</h2> -<p>Док-ÑтанциÑ, к которой подключено уÑтройÑтво, может быть одного из четырех типов: +<p>Док-ÑтанциÑ, к которой подключено уÑтройÑтво, может быть одного из четырех типов: <ul><li>автомобильнаÑ;</li> <li>наÑтольнаÑ;</li> <li>наÑÑ‚Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼ набором функций (аналоговаÑ);</li> @@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> <p>Обратите внимание, что поÑледние два типа поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на уровне API 11, поÑтому, даже еÑли Ð²Ð°Ñ Ð½Ðµ интереÑует, ÑвлÑетÑÑ Ð»Ð¸ док-ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ð¾Ð¹ или аналоговой, а интереÑует только ее тип, рекомендуетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñть проверку по вÑем трем типам:</p> <pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; -boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || +boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;</pre> -<h2 id="MonitorDockState">ОтÑлеживание изменений ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции и ее типа</h2> +<h2 id="MonitorDockState">ОтÑлеживание изменений ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции и ее типа</h2> <p>При каждом подключении уÑтройÑтва к док-Ñтанции или отключении от нее передаетÑÑ Ð´ÐµÐ¹Ñтвие {@link android.content.Intent#ACTION_DOCK_EVENT}. Чтобы отÑлеживать ÑоÑтоÑние Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº док-Ñтанции, доÑтаточно зарегиÑтрировать в манифеÑте Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ÐµÐ¼Ð½Ð¸Ðº широковещательных намерений, как показано ниже.</p> diff --git a/docs/html-intl/intl/ru/training/monitoring-device-state/index.jd b/docs/html-intl/intl/ru/training/monitoring-device-state/index.jd index c87d9af5da4d..e26af09a9c2b 100644 --- a/docs/html-intl/intl/ru/training/monitoring-device-state/index.jd +++ b/docs/html-intl/intl/ru/training/monitoring-device-state/index.jd @@ -7,10 +7,10 @@ next.link=battery-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>ТребованиÑ</h2> +<h2>ТребованиÑ</h2> <ul> <li>Android 2.0 (API ÑƒÑ€Ð¾Ð²Ð½Ñ 5) или более поздней верÑии</li> <li>Опыт работы Ñ <a href="{@docRoot}guide/components/intents-filters.html">намерениÑми и фильтрами намерений</a></li> @@ -21,19 +21,19 @@ next.link=battery-monitoring.html <li><a href="{@docRoot}guide/components/services.html">Службы</a> </ul> -</div> +</div> </div> <p>КачеÑтвенное приложение должно оказывать минимальное влиÑние на Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ уÑтройÑтва от батареи. Ð’ Ñтом уроке вы научитеÑÑŒ Ñоздавать приложениÑ, ÑпоÑобные изменÑть функционал и режим работы в завиÑимоÑти от ÑоÑтоÑÐ½Ð¸Ñ ÑƒÑтройÑтва.</p> <p>Отключение Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… фоновых Ñлужб при потере Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸ Ñнижение чаÑтоты Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ низком зарÑде батареи позволÑет Ñнизить раÑход Ñнергии и продлить работу уÑтройÑтва без подзарÑдки.</p> -<h2>Уроки</h2> - +<h2>Уроки</h2> + <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="battery-monitoring.html">ОтÑлеживание ÑƒÑ€Ð¾Ð²Ð½Ñ Ð·Ð°Ñ€Ñда батареи и ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки</a></b></dt> <dd>Ð’Ñ‹ узнаете, как изменÑть чаÑтоту Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, определÑÑ Ð¸ отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ уровень зарÑда батареи и изменение ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ñ€Ñдки.</dd> @@ -46,4 +46,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="manifest-receivers.html">Операции Ñ Ð¿Ñ€Ð¸ÐµÐ¼Ð½Ð¸ÐºÐ°Ð¼Ð¸ широковещательных намерений по запроÑу</a></b></dt> <dd>Приемники широковещательных намерений, объÑвленные в манифеÑте, можно включать и отключать во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ приложениÑ. Ðто позволÑет отключать ненужные приемники в завиÑимоÑти от ÑоÑтоÑÐ½Ð¸Ñ ÑƒÑтройÑтва. Ð’Ñ‹ узнаете, как повыÑить ÑффективноÑть путем включениÑ, Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ каÑÐºÐ°Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ÐµÐ¼Ð½Ð¸ÐºÐ¾Ð² Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð¸ как отложить дейÑтвие до момента перехода уÑтройÑтва в заданное ÑоÑтоÑние.</dd> -</dl>
\ No newline at end of file +</dl>
\ No newline at end of file diff --git a/docs/html-intl/intl/ru/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/intl/ru/training/monitoring-device-state/manifest-receivers.jd index 724ee93e2822..2bd0fb93658e 100644 --- a/docs/html-intl/intl/ru/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html-intl/intl/ru/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>Содержание урока</h2> @@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">ÐÐ°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸ фильтры намерений</a> </ul> -</div> +</div> </div> <p>Самый проÑтой ÑпоÑоб отÑлеживать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ ÑƒÑтройÑтва – Ñоздать приемники {@link android.content.BroadcastReceiver} Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ отÑлеживаемого ÑоÑтоÑÐ½Ð¸Ñ Ð¸ зарегиÑтрировать их в манифеÑте приложениÑ. Затем в каждом из Ñтих приемников можно переопределÑть график повторÑющихÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ð¹ в завиÑимоÑти от текущего ÑоÑтоÑÐ½Ð¸Ñ ÑƒÑтройÑтва.</p> @@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html <p>Ðтот ÑпоÑоб имеет недоÑтатки: приложение активирует уÑтройÑтво при каждом запуÑке любого из Ñтих приемников, что далеко не вÑегда оправданно.</p> <p>Оптимальный вариант – включать и выключать приемники широковещательных намерений во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ приложениÑ. Ðто позволÑет иÑпользовать приемники, объÑвленные в манифеÑте, как паÑÑивные оповещениÑ, которые инициируютÑÑ ÑиÑтемными ÑобытиÑми только в Ñлучае необходимоÑти.</p> - -<h2 id="ToggleReceivers">Включение, отключение и каÑкадирование приемников Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ ÑффективноÑти </h2> - + +<h2 id="ToggleReceivers">Включение, отключение и каÑкадирование приемников Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ ÑффективноÑти </h2> + <p>{@link android.content.pm.PackageManager} позволÑет включать и выключать любые компоненты, определенные в манифеÑте, в том чиÑле вÑе приемники широковещательных намерений:</p> <pre>ComponentName receiver = new ComponentName(context, myReceiver.class); diff --git a/docs/html-intl/intl/ru/training/multiscreen/adaptui.jd b/docs/html-intl/intl/ru/training/multiscreen/adaptui.jd index 490a64ad2de6..ee1dd9dcd167 100644 --- a/docs/html-intl/intl/ru/training/multiscreen/adaptui.jd +++ b/docs/html-intl/intl/ru/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>Содержание урока</h2> <ol> @@ -27,17 +27,17 @@ previous.link=screendensities.html <ul> <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Поддержка планшетных ПК и мобильных телефонов</a></li> </ul> - + <h2>Упражнение</h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>Ðлгоритм пользовательÑкого интерфейÑа завиÑит от макета, который в данный момент отображаетÑÑ. Ðапример, еÑли приложение работает в двухпанельном режиме, то при нажатии на Ñлемент в левой панели Ñодержание отобразитÑÑ Ð² правой. Ð’ однопанельном режиме Ñодержание откроетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾ (в другой активноÑти).</p> @@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment { public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html-intl/intl/ru/training/multiscreen/index.jd b/docs/html-intl/intl/ru/training/multiscreen/index.jd index 84b9b8b5bdf0..66cf968edf9b 100644 --- a/docs/html-intl/intl/ru/training/multiscreen/index.jd +++ b/docs/html-intl/intl/ru/training/multiscreen/index.jd @@ -7,10 +7,10 @@ next.link=screensizes.html @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>ТребованиÑ</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>ТребованиÑ</h2> <ul> <li>Android 1.6 или более поздней верÑии (Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка учебного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ð²ÐµÑ€ÑÐ¸Ñ 2.1 или более позднÑÑ)</li> @@ -27,17 +27,17 @@ href="{@docRoot}tools/support-library/index.html">вÑпомогательной <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка неÑкольких Ñкранов</a></li> </ul> - -<h2>Упражнение</h2> - -<div class="download-box"> + +<h2>Упражнение</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Ðа платформе Android работают уÑтройÑтва Ñ Ñамыми разными размерами Ñкрана: от телефонов до телевизоров. Чтобы Ñ Ð²Ð°ÑˆÐ¸Ð¼ приложением могли работать как можно больше пользователей, оно должно корректно отображатьÑÑ Ð½Ð° вÑех Ñтих уÑтройÑтвах.</p> <p>Однако ÑовмеÑтимоÑть Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼Ð¸ типами уÑтройÑтв – Ñто еще не вÑе. От размера Ñкрана завиÑит, какие возможноÑти будет иметь пользователь при работе Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼. Чтобы пользователи дейÑтвительно оÑталиÑÑŒ довольны вашим приложением, оно должно не проÑто <em>поддерживать</em> разные Ñкраны, но и быть <em>оптимизировано</em> Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из них.</p> @@ -48,17 +48,17 @@ href="{@docRoot}tools/support-library/index.html">вÑпомогательной <p class="note"><strong>Примечание</strong>. Ð’ Ñтом модуле и в учебном приложении иÑпользуетÑÑ <a href="{@docRoot}tools/support-library/index.html">вÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°</a>, позволÑÑŽÑ‰Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ API <PH>{@link android.app.Fragment}</PH> в верÑиÑÑ… до Android 3.0. Чтобы иметь возможноÑть иÑпользовать вÑе необходимые API, загрузите библиотеку и добавьте ее в Ñвое приложение.</p> - - -<h2>Уроки</h2> - -<dl> - <dt><b><a href="screensizes.html">Поддержка разных размеров Ñкрана</a></b></dt> - <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как Ñоздать макет, который адаптируетÑÑ Ðº разным размерам Ñкрана, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð°Ñштабируемые предÑтавлениÑ, объекты <PH>{@link android.widget.RelativeLayout}</PH>, квалификаторы размера и ориентации, фильтры пÑевдонимов и раÑтровые изображений формата nine-patch.</dd> - - <dt><b><a href="screendensities.html">Поддержка разных разрешений Ñкрана</a></b></dt> - <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как работать Ñ Ñкранами разного Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ не завиÑÑщих от Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ð¸ÐºÑелей и как подготовить раÑтровые Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из них.</dd> - - <dt><b><a href="adaptui.html">Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð´Ð°Ð¿Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… алгоритмов работы пользовательÑкого интерфейÑа</a></b></dt> - <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как реализовать алгоритм работы интерфейÑа, адаптирующийÑÑ Ðº размеру и разрешению Ñкрана, то еÑть ÑпоÑобный определÑть активный макет во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, выбирать дальнейшие дейÑÑ‚Ð²Ð¸Ñ Ð½Ð° оÑнове текущего макета и обрабатывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ Ñкрана.</dd> -</dl> + + +<h2>Уроки</h2> + +<dl> + <dt><b><a href="screensizes.html">Поддержка разных размеров Ñкрана</a></b></dt> + <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как Ñоздать макет, который адаптируетÑÑ Ðº разным размерам Ñкрана, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð°Ñштабируемые предÑтавлениÑ, объекты <PH>{@link android.widget.RelativeLayout}</PH>, квалификаторы размера и ориентации, фильтры пÑевдонимов и раÑтровые изображений формата nine-patch.</dd> + + <dt><b><a href="screendensities.html">Поддержка разных разрешений Ñкрана</a></b></dt> + <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как работать Ñ Ñкранами разного Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ не завиÑÑщих от Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ð¸ÐºÑелей и как подготовить раÑтровые Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из них.</dd> + + <dt><b><a href="adaptui.html">Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð´Ð°Ð¿Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… алгоритмов работы пользовательÑкого интерфейÑа</a></b></dt> + <dd>Ð’ Ñтом уроке раÑÑказываетÑÑ, как реализовать алгоритм работы интерфейÑа, адаптирующийÑÑ Ðº размеру и разрешению Ñкрана, то еÑть ÑпоÑобный определÑть активный макет во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, выбирать дальнейшие дейÑÑ‚Ð²Ð¸Ñ Ð½Ð° оÑнове текущего макета и обрабатывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ Ñкрана.</dd> +</dl> diff --git a/docs/html-intl/intl/ru/training/multiscreen/screendensities.jd b/docs/html-intl/intl/ru/training/multiscreen/screendensities.jd index cfd472462824..ffcdbbca2327 100644 --- a/docs/html-intl/intl/ru/training/multiscreen/screendensities.jd +++ b/docs/html-intl/intl/ru/training/multiscreen/screendensities.jd @@ -12,8 +12,8 @@ next.link=adaptui.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>Содержание урока</h2> <ol> @@ -29,15 +29,15 @@ next.link=adaptui.html </ul> <h2>Упражнение</h2> - -<div class="download-box"> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>Ð’ Ñтом уроке раÑÑказываетÑÑ, как Ñоздать интерфейÑ, поддерживающий разные Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñкрана, за Ñчет иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… реÑурÑов и не завиÑÑщих от Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ† измерениÑ.</p> @@ -48,8 +48,8 @@ next.link=adaptui.html <p>Ðапример, еÑли вы задаете раÑÑтоÑние между Ð´Ð²ÑƒÐ¼Ñ Ð¿Ñ€ÐµÐ´ÑтавлениÑми, рекомендуетÑÑ Ð¸Ñпользовать <code>dp</code>, а не <code>px</code>:</p> <pre> -<Button android:layout_width="wrap_content" - android:layout_height="wrap_content" +<Button android:layout_width="wrap_content" + android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> @@ -57,8 +57,8 @@ next.link=adaptui.html <p>Ð”Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° шрифта вÑегда иÑпользуйте <code>sp</code>:</p> <pre> -<TextView android:layout_width="match_parent" - android:layout_height="wrap_content" +<TextView android:layout_width="match_parent" + android:layout_height="wrap_content" android:textSize="20sp" /> </pre> diff --git a/docs/html-intl/intl/ru/training/multiscreen/screensizes.jd b/docs/html-intl/intl/ru/training/multiscreen/screensizes.jd index 9684d77486dd..57496d9b18bf 100644 --- a/docs/html-intl/intl/ru/training/multiscreen/screensizes.jd +++ b/docs/html-intl/intl/ru/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>Содержание урока</h2> <ol> @@ -30,26 +30,26 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка неÑкольких Ñкранов</a></li> </ul> -<h2>Упражнение</h2> - -<div class="download-box"> +<h2>Упражнение</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>Ð’ Ñтом уроке опиÑаны Ñледующие аÑпекты обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ÑовмеÑтимоÑти интерфейÑа Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼Ð¸ Ñкранами:</p> -<ul> - <li>обеÑпечение ÑпоÑобноÑти макета адаптироватьÑÑ Ðº размеру Ñкрана;</li> - <li>выбор макета интерфейÑа, отвечающего конфигурации Ñкрана;</li> +<ul> + <li>обеÑпечение ÑпоÑобноÑти макета адаптироватьÑÑ Ðº размеру Ñкрана;</li> + <li>выбор макета интерфейÑа, отвечающего конфигурации Ñкрана;</li> <li>контроль правильноÑти применÑемого макета;</li> - <li>иÑпользование маÑштабируемых раÑтровых изображений.</li> -</ul> + <li>иÑпользование маÑштабируемых раÑтровых изображений.</li> +</ul> -<h2 id="TaskUseWrapMatchPar">ИÑпользование параметров wrap_content и match_parent</h2> +<h2 id="TaskUseWrapMatchPar">ИÑпользование параметров wrap_content и match_parent</h2> <p>Чтобы Ñоздать маÑштабируемый макет, ÑпоÑобный адаптироватьÑÑ Ðº разным Ñкранам, иÑпользуйте в качеÑтве значений ширины и выÑоты отдельных компонентов предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ <code>"wrap_content"</code> и <code>"match_parent"</code>. ЕÑли иÑпользуетÑÑ <code>"wrap_content"</code>, Ð´Ð»Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ или выÑоты предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑтанавливаетÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ значение, позволÑющее умеÑтить Ñодержание на Ñкран, а параметр <code>"match_parent"</code> (извеÑтный как <code>"fill_parent"</code> в API до 8 уровнÑ) Ñлужит Ð´Ð»Ñ Ñ€Ð°ÑÑ‚ÑÐ³Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð° по размеру родительÑкого предÑтавлениÑ.</p> @@ -65,7 +65,7 @@ next.link=screendensities.html <p class="img-caption"><strong>РиÑунок 1</strong>. Приложение News Reader при вертикальной (Ñлева) и горизонтальной (Ñправа) ориентации.</p> -<h2 id="TaskUseRelativeLayout">ИÑпользование объекта RelativeLayout</h2> +<h2 id="TaskUseRelativeLayout">ИÑпользование объекта RelativeLayout</h2> <p>С помощью вложенных ÑкземплÑров объекта <PH>{@link android.widget.LinearLayout}</PH> и параметров <code>"wrap_content"</code> и <code>"match_parent"</code> можно Ñоздавать доÑтаточно Ñложные макеты. Однако <PH>{@link android.widget.LinearLayout}</PH> не дает возможноÑти точно управлÑть взаимным раÑположением дочерних предÑтавлений: в <PH>{@link android.widget.LinearLayout}</PH> они проÑто помещаютÑÑ Ð² Ñ€Ñд друг за другом. ЕÑли необходимо раÑположить дочерние предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ‹Ð¼ образом, иÑпользуйте объект <PH>{@link android.widget.RelativeLayout}</PH>, позволÑющий задать отноÑительные позиции компонентов. Ðапример, одно дочернее предÑтавление можно выровнÑть по левому краю Ñкрана, а другое – по правому.</p> @@ -115,8 +115,8 @@ next.link=screendensities.html <p>Обратите внимание: неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° изменение размера компонентов их взаимное раÑположение оÑтаетÑÑ Ð¿Ñ€ÐµÐ¶Ð½Ð¸Ð¼, так как оно задано объектом <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p> - -<h2 id="TaskUseSizeQuali">ИÑпользование квалификаторов размера</h2> + +<h2 id="TaskUseSizeQuali">ИÑпользование квалификаторов размера</h2> <p>МаÑштабируемые или отноÑительные макеты, один из которых продемонÑтрирован выше, имеют Ñвои ограничениÑ. Ð¥Ð¾Ñ‚Ñ Ð¾Ð½Ð¸ позволÑÑŽÑ‚ Ñоздать интерфейÑ, ÑпоÑобный адаптироватьÑÑ Ðº разным Ñкранам за Ñчет раÑÑ‚ÑÐ³Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÑтранÑтва внутри и вокруг компонентов, пользователю может оказатьÑÑ Ð½Ðµ Ñлишком удобно работать Ñ Ñ‚Ð°ÐºÐ¸Ð¼ интерфейÑом. ПоÑтому в приложении должен иÑпользоватьÑÑ Ð½Ðµ один маÑштабируемый макет, а неÑколько альтернативных вариантов Ð´Ð»Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… конфигураций Ñкрана. Их можно Ñоздать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">квалификаторов конфигураций</a>, которые позволÑÑŽÑ‚ оперативно выбирать реÑурÑÑ‹, отвечающие текущим параметрам Ñкрана (например, разные варианты макетов Ð´Ð»Ñ Ñкранов разных размеров).</p> @@ -158,7 +158,7 @@ next.link=screendensities.html <p>Следует учеÑть, что на Android-уÑтройÑтвах до верÑии 3.2 квалификатор <code>sw600dp</code> не будет работать, поÑтому Ð´Ð»Ñ Ð½Ð¸Ñ… по-прежнему нужно иÑпользовать <code>large</code>. Таким образом, вам потребуетÑÑ ÐµÑ‰Ðµ один файл Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ <code>res/layout-large/main.xml</code>, идентичный файлу <code>res/layout-sw600dp/main.xml</code>. Ð’ Ñледующем разделе вы познакомитеÑÑŒ Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼, который позволÑет избежать Ð´ÑƒÐ±Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð°ÐºÐ¸Ñ… файлов макета.</p> -<h2 id="TaskUseAliasFilters">ИÑпользование пÑевдонимов макетов</h2> +<h2 id="TaskUseAliasFilters">ИÑпользование пÑевдонимов макетов</h2> <p>Квалификатор Smallest-width работает только на уÑтройÑтвах Android 3.2 или более поздних верÑий. Ð”Ð»Ñ ÑовмеÑтимоÑти Ñ Ð±Ð¾Ð»ÐµÐµ ранними уÑтройÑтвами по-прежнему Ñледует иÑпользовать абÑтрактные размеры (small, normal, large и xlarge). Ðапример, чтобы Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°Ð»ÑÑ Ð² однопанельном режиме на телефонах и в многопанельном на планшетных ПК Ñ 7-дюймовым Ñкраном, телевизорах и других крупных уÑтройÑтвах, подготовьте Ñледующие файлы:</p> @@ -202,7 +202,7 @@ next.link=screendensities.html <PH>{@code large}</PH>, а Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ новых – <code>sw600dp</code>).</p> -<h2 id="TaskUseOriQuali">ИÑпользование квалификаторов ориентации</h2> +<h2 id="TaskUseOriQuali">ИÑпользование квалификаторов ориентации</h2> <p>Ð¥Ð¾Ñ‚Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ макеты одинаково хорошо ÑмотрÑÑ‚ÑÑ Ð² вертикальной и горизонтальной ориентациÑÑ…, в большинÑтве Ñлучаев Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ñе же приходитÑÑ Ð°Ð´Ð°Ð¿Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ. Ðиже показано, как изменÑетÑÑ Ð¼Ð°ÐºÐµÑ‚ в приложении News Reader в завиÑимоÑти от размера и ориентации Ñкрана.</p> diff --git a/docs/html-intl/intl/vi/design/patterns/navigation.jd b/docs/html-intl/intl/vi/design/patterns/navigation.jd index 98490db0e5b6..a3d6003dd416 100644 --- a/docs/html-intl/intl/vi/design/patterns/navigation.jd +++ b/docs/html-intl/intl/vi/design/patterns/navigation.jd @@ -168,7 +168,7 @@ cần chụp ảnh có thể kÃch hoạt ứng dụng Camera, ứng dụng nà y thông tin và tất cả hà nh động liên kết mà ngưá»i dùng có thể thá»±c hiện. Ứng dụng cá»§a bạn là táºp hợp cá»§a nhiá»u hoạt động, bao gồm cả hoạt động do bạn tạo và hoạt động mà bạn sá» dụng lại từ các ứng dụng khác.</p> -<p><strong>Tác vụ</strong> là trình tá»± các hoạt động mà má»™t ngưá»i dùng tuân theo để hoà n thà nh má»™t mục tiêu. +<p><strong>Tác vụ</strong> là trình tá»± các hoạt động mà má»™t ngưá»i dùng tuân theo để hoà n thà nh má»™t mục tiêu. Tác vụ đơn có thể sá» dụng các hoạt động từ chỉ má»™t ứng dụng, hoặc có thể dá»±a trên hoạt động từ nhiá»u ứng dụng khác nhau.</p> diff --git a/docs/html-intl/intl/vi/guide/components/activities.jd b/docs/html-intl/intl/vi/guide/components/activities.jd index 83e7669a7f76..304b73c87995 100644 --- a/docs/html-intl/intl/vi/guide/components/activities.jd +++ b/docs/html-intl/intl/vi/guide/components/activities.jd @@ -57,7 +57,7 @@ hoạt động có thể bắt đầu má»™t hoạt động khác để thá»±c hi má»›i bắt đầu, hoạt động trước đó sẽ bị dừng lại, nhưng hệ thống vẫn giữ nguyên hoạt động trong má»™t ngăn xếp ("back stack"). Khi má»™t hoạt động má»›i bắt đầu, nó được đẩy lên ngăn xếp và chiếm lấy tiêu Ä‘iểm cá»§a ngưá»i dùng. Ngăn xếp sẽ tuân theo cÆ¡ chế xếp chồng cÆ¡ bản "và o cuối, ra đầu", -vì thế, khi ngưá»i dùng kết thúc hoạt động hiện tại và nhấn nút <em>Quay lại</em>, nó +vì thế, khi ngưá»i dùng kết thúc hoạt động hiện tại và nhấn nút <em>Quay lại</em>, nó sẽ được đẩy ra khá»i ngăn xếp (và bị há»§y) và hoạt động trước đó sẽ tiếp tục. (Ngăn xếp được đỠcáºp kỹ hÆ¡n trong tà i liệu <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tác vụ và Ngăn Xếp</a>.)</p> @@ -139,7 +139,7 @@ setContentView()}.</p> <h3 id="Declaring">Khai báo hoạt động trong bản kê khai</h3> <p>Bạn phải khai báo hoạt động cá»§a mình trong tệp bản kê khai để hoạt động -có thể truy cáºp được và o hệ thống. Äể khai báo hoạt động cá»§a mình, hãy mở tệp bản kê khai cá»§a bạn và thêm má»™t phần tá» <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> +có thể truy cáºp được và o hệ thống. Äể khai báo hoạt động cá»§a mình, hãy mở tệp bản kê khai cá»§a bạn và thêm má»™t phần tá» <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> là m con cá»§a phần tá» <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> . Và dụ:</p> @@ -161,7 +161,7 @@ bạn phát hà nh ứng dụng cá»§a mình, bạn không nên thay đổi tên n má»™t số tÃnh năng, chẳng hạn như các lối tắt cá»§a ứng dụng (hãy Ä‘á»c bà i đăng trên blog, <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Những Äiá»u Không Thay Äổi ÄÆ°á»£c</a>).</p> -<p>Xem tà i liệu tham khảo phần tá» <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> +<p>Xem tà i liệu tham khảo phần tá» <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> để biết thêm thông tin vá» việc khai báo hoạt động cá»§a bạn trong bản kê khai.</p> @@ -200,7 +200,7 @@ tá»± mình bắt đầu chúng bằng cách sá» dụng các ý định rõ rà n <p>Tuy nhiên, nếu bạn muốn hoạt động cá»§a mình phản hồi lại những ý định ngầm mà được chuyển giao từ các ứng dụng khác (và chÃnh bạn), thì bạn phải định nghÄ©a các bá»™ lá»c ý định bổ sung cho hoạt động cá»§a mình. Vá»›i má»—i loại ý định mà bạn muốn phản hồi, bạn phải nêu má»™t <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code -<intent-filter>}</a> bao gồm má»™t phần tá» +<intent-filter>}</a> bao gồm má»™t phần tá» <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> và , không bắt buá»™c, má»™t phần tá» <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> và /hoặc má»™t phần tá» <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code @@ -324,7 +324,7 @@ finish()} cá»§a nó. Bạn cÅ©ng có thể tắt má»™t hoạt động riêng mà bằng cách sá» dụng những phương pháp nà y. Như đỠcáºp trong phần sau vá» vòng Ä‘á»i cá»§a hoạt động, hệ thống Android quản lý tuổi thá» cá»§a má»™t hoạt động cho bạn, vì váºy bạn không cần kết thúc các hoạt động cá»§a chÃnh mình. Việc gá»i những phương pháp nà y có thể ảnh hưởng tiêu cá»±c tá»›i trải nghiệm ngưá»i dùng -kỳ vá»ng và chỉ nên được sá» dụng khi bạn tuyệt đối không muốn ngưá»i dùng quay lại thá»±c thể nà y cá»§a +kỳ vá»ng và chỉ nên được sá» dụng khi bạn tuyệt đối không muốn ngưá»i dùng quay lại thá»±c thể nà y cá»§a hoạt động.</p> @@ -350,7 +350,7 @@ che toà n bá»™ mà n hình. Trạng thái tạm dừng hoà n toà n Ä‘ang hoạt Ä trình quản lý cá»a sổ), nhưng có thể bị hệ thống tắt bá» trong trưá»ng hợp bá»™ nhá»› cá»±c kỳ thấp.</dd> <dt><i>Dừng</i></dt> - <dd>Hoạt động bị che khuất hoà n toà n bởi má»™t hoạt động khác (hoạt động hiện Ä‘ang + <dd>Hoạt động bị che khuất hoà n toà n bởi má»™t hoạt động khác (hoạt động hiện Ä‘ang “dưới ná»n"). Hoạt động dừng cÅ©ng vẫn Ä‘ang hoạt động ({@link android.app.Activity} đối tượng được giữ lại trong bộ nhá»›, nó duy trì tất cả thông tin vá» trạng thái và thà nh viên, nhưng <em>không</em> gắn vá»›i trình quản lý cá»a sổ). Tuy nhiên, hoạt động không còn hiển thị vá»›i ngưá»i dùng nữa và hệ thống @@ -608,7 +608,7 @@ android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p> <p>Hệ thống gá»i {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} trước khi khiến hoạt động dá»… bị há»§y. Hệ thống chuyển cho phương pháp nà y -má»™t {@link android.os.Bundle} trong đó bạn có thể lưu +má»™t {@link android.os.Bundle} trong đó bạn có thể lưu thông tin trạng thái vá» hoạt động như cặp tên giá trị, bằng cách sá» dụng các phương pháp như {@link android.os.Bundle#putString putString()} và {@link android.os.Bundle#putInt putInt()}. Sau đó, nếu hệ thống tắt bá» tiến trình ứng dụng cá»§a bạn diff --git a/docs/html-intl/intl/vi/guide/components/bound-services.jd b/docs/html-intl/intl/vi/guide/components/bound-services.jd index 7a2ddbaf6321..9d19e05513ee 100644 --- a/docs/html-intl/intl/vi/guide/components/bound-services.jd +++ b/docs/html-intl/intl/vi/guide/components/bound-services.jd @@ -357,7 +357,7 @@ handleMessage()}.</li> <p>Theo cách nà y, không có "phương pháp" nà o để máy khách gá»i đối vá»›i dịch vụ. Thay và o đó, máy khách -gá»i “thông báo†(đối tượng {@link android.os.Message}) mà dịch vụ nháºn được trong +gá»i “thông báo†(đối tượng {@link android.os.Message}) mà dịch vụ nháºn được trong {@link android.os.Handler} cá»§a mình.</p> <p>Sau đây là má»™t dịch vụ và dụ đơn giản sá» dụng má»™t giao diện {@link android.os.Messenger}:</p> @@ -539,7 +539,7 @@ kỹ hÆ¡n ở bên dưới.)</p> </ol> <p>Và dụ, Ä‘oạn mã HTML sau sẽ kết nối máy khách vá»›i dịch vụ được tạo bên trên bằng cách -<a href="#Binder">mở rá»™ng lá»›p Trình gắn kết</a>, vì váºy tất cả những việc mà nó phải là m là đổi kiểu +<a href="#Binder">mở rá»™ng lá»›p Trình gắn kết</a>, vì váºy tất cả những việc mà nó phải là m là đổi kiểu {@link android.os.IBinder} được trả vá» thà nh lá»›p {@code LocalService} và yêu cầu thá»±c thể {@code LocalService}:</p> diff --git a/docs/html-intl/intl/vi/guide/components/fragments.jd b/docs/html-intl/intl/vi/guide/components/fragments.jd index 95d9c76337fc..7b6346c4d6fd 100644 --- a/docs/html-intl/intl/vi/guide/components/fragments.jd +++ b/docs/html-intl/intl/vi/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>Xem thêm</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Xây dá»±ng má»™t UI Äá»™ng bằng các Phân Ä‘oạn</a></li> @@ -148,7 +148,7 @@ cá»§a bạn.</p> khởi tạo các thà nh phần thiết yếu cá»§a phân Ä‘oạn mà bạn muốn giữ lại khi phân Ä‘oạn bị tạm dừng hoặc dừng hẳn, sau đó tiếp tục.</dd> <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt> - <dd>Hệ thống sẽ gá»i phương pháp nà y khi đến lúc phân Ä‘oạn vẽ giao diện ngưá»i dùng cá»§a nó + <dd>Hệ thống sẽ gá»i phương pháp nà y khi đến lúc phân Ä‘oạn vẽ giao diện ngưá»i dùng cá»§a nó lần đầu tiên. Äể vẽ má»™t UI cho phân Ä‘oạn cá»§a mình, bạn phải trả vá» má»™t {@link android.view.View} từ phương pháp nà y, đây là gốc cá»§a bố trà phân Ä‘oạn cá»§a bạn. Bạn có thể trả vá» giá trị rá»—ng nếu phân Ä‘oạn không cung cấp UI.</dd> @@ -303,7 +303,7 @@ phân Ä‘oạn:</p> <ul> <li>Cung cấp thuá»™c tÃnh {@code android:id} vá»›i má»™t ID duy nhất.</li> <li>Cung cấp thuá»™c tÃnh {@code android:tag} vá»›i má»™t xâu duy nhất.</li> - <li>Nếu bạn không cung cấp được thuá»™c tÃnh nà o, hệ thống sẽ sá» dụng ID cá»§a dạng xem + <li>Nếu bạn không cung cấp được thuá»™c tÃnh nà o, hệ thống sẽ sá» dụng ID cá»§a dạng xem cá»§a bá»™ chứa.</li> </ul> </div> @@ -362,7 +362,7 @@ findFragmentByTag()}.</p> <p>Äể biết và dụ vá» hoạt động sá» dụng phân Ä‘oạn như má»™t trình thá»±c hiện ná»n, không có UI, hãy xem mẫu {@code FragmentRetainInstance.java}, mẫu nà y có trong các mẫu SDK (có sẵn thông qua -Trình quản lý SDK Android) và nằm trên hệ thống cá»§a bạn như là +Trình quản lý SDK Android) và nằm trên hệ thống cá»§a bạn như là <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p> @@ -378,7 +378,7 @@ có nó, hãy gá»i {@link android.app.Activity#getFragmentManager()} từ hoạ <li>Nháºn các phân Ä‘oạn tồn tại trong hoạt động, bằng {@link android.app.FragmentManager#findFragmentById findFragmentById()} (đối vá»›i các phân Ä‘oạn cung cấp UI trong bố trà hoạt động) hoặc {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()} (đối vá»›i các phân Ä‘oạn có hoặc không cung cấp UI).</li> +findFragmentByTag()} (đối vá»›i các phân Ä‘oạn có hoặc không cung cấp UI).</li> <li>Lấy phân Ä‘oạn ra khá»i ngăn xếp, bằng {@link android.app.FragmentManager#popBackStack()} (mô phá»ng má»™t câu lệnh <em>Quay lại</em> cá»§a ngưá»i dùng).</li> <li>Äăng ký má»™t đối tượng theo dõi cho những thay đổi đối vá»›i ngăn xếp, bằng {@link @@ -562,9 +562,9 @@ public static class FragmentA extends ListFragment { } </pre> -<p>Nếu hoạt động chưa triển khai giao diện, khi đó phân Ä‘oạn sẽ đưa ra lá»—i +<p>Nếu hoạt động chưa triển khai giao diện, khi đó phân Ä‘oạn sẽ đưa ra lá»—i {@link java.lang.ClassCastException}. -Nếu thà nh công, thà nh viên {@code mListener} giữ má»™t tham chiếu tá»›i triển khai +Nếu thà nh công, thà nh viên {@code mListener} giữ má»™t tham chiếu tá»›i triển khai {@code OnArticleSelectedListener}cá»§a hoạt động, sao cho phân Ä‘oạn A có thể chia sẻ sá»± kiện vá»›i hoạt động bằng cách gá»i các phương pháp được định nghÄ©a bởi giao diện {@code OnArticleSelectedListener}. Và dụ, nếu phân Ä‘oạn A là má»™t phần mở rá»™ng cá»§a {@link android.app.ListFragment}, má»—i lần @@ -785,7 +785,7 @@ android.widget.FrameLayout}), hoặc bắt đầu má»™t hoạt động má»›i (tá <p>Phân Ä‘oạn thứ hai, {@code DetailsFragment} sẽ hiển thị tóm tắt vở kịch cho mục được chá»n từ danh sách trong {@code TitlesFragment}:</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>Nhá»› lại ở lá»›p {@code TitlesFragment} rằng, nếu ngưá»i dùng nhấp và o má»™t mục danh sách và bố trà @@ -798,7 +798,7 @@ tóm tắt vở kịch được chá»n khi mà n hình ở hướng đứng:</p> {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>Lưu ý rằng hoạt động nà y tá»± kết thúc nếu cấu hình là khổ ngang, sao cho hoạt động chÃnh có thể chiếm lấy và hiển thị {@code DetailsFragment} bên cạnh {@code TitlesFragment}. Äiá»u nà y có thể xảy ra nếu ngưá»i dùng bắt đầu {@code DetailsActivity} ở dạng hướng đứng, nhưng diff --git a/docs/html-intl/intl/vi/guide/components/fundamentals.jd b/docs/html-intl/intl/vi/guide/components/fundamentals.jd index 4b70140723d9..725c68dacb68 100644 --- a/docs/html-intl/intl/vi/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/vi/guide/components/fundamentals.jd @@ -295,16 +295,16 @@ android.app.Activity} và các thuá»™c tÃnh {@code android:label} quy định m <p>Bạn phải khai báo tất cả thà nh phần cá»§a ứng dụng như sau:</p> <ul> <li>Các phần tá» <code><a -href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> cho hoạt động</li> <li>Các phần tá» <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> cho dịch vụ</li> <li>Các phần tá» <code><a -href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> +href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> cho hà m nháºn quảng bá</li> <li>Các phần tá» <code><a -href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> +href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> cho trình cung cấp ná»™i dung</li> </ul> @@ -379,7 +379,7 @@ chúng, nhưng các dịch vụ bên ngoà i như Google Play thì có Ä‘á»c Ä‘á cho ngưá»i dùng khi há» tìm kiếm ứng dụng từ thiết bị cá»§a mình.</p> <p>Và dụ, nếu ứng dụng cá»§a bạn yêu cầu máy ảnh và sá» dụng các API được giá»›i thiệu trong Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Mức</a> 7), -bạn cần khai báo những Ä‘iá»u nà y như yêu cầu trong tệp bản kê khai cá»§a mình như sau:</p> +bạn cần khai báo những Ä‘iá»u nà y như yêu cầu trong tệp bản kê khai cá»§a mình như sau:</p> <pre> <manifest ... > diff --git a/docs/html-intl/intl/vi/guide/components/index.jd b/docs/html-intl/intl/vi/guide/components/index.jd index 966597d999c2..87b51c2849b0 100644 --- a/docs/html-intl/intl/vi/guide/components/index.jd +++ b/docs/html-intl/intl/vi/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=Thà nh phần Ứng dụng page.landing=true -page.landing.intro=Khuôn khổ ứng dụng cá»§a Android cho phép bạn tạo láºp nhiá»u ứng dụng Ä‘a dạng và sáng tạo bằng cách sá» dụng má»™t táºp hợp các thà nh phần có thể tái sá» dụng. Phần nà y giải thÃch cách bạn có thể xây dá»±ng các thà nh phần định nghÄ©a các khối dá»±ng cho ứng dụng cá»§a mình và cách kết nối chúng vá»›i nhau bằng cách sá» dụng ý định. -page.metaDescription=Khuôn khổ ứng dụng cá»§a Android cho phép bạn tạo láºp nhiá»u ứng dụng Ä‘a dạng và sáng tạo bằng cách sá» dụng má»™t táºp hợp các thà nh phần có thể tái sá» dụng. Phần nà y giải thÃch cách bạn có thể xây dá»±ng các thà nh phần định nghÄ©a các khối dá»±ng cho ứng dụng cá»§a mình và cách kết nối chúng vá»›i nhau bằng cách sá» dụng ý định. +page.landing.intro=Khuôn khổ ứng dụng cá»§a Android cho phép bạn tạo láºp nhiá»u ứng dụng Ä‘a dạng và sáng tạo bằng cách sá» dụng má»™t táºp hợp các thà nh phần có thể tái sá» dụng. Phần nà y giải thÃch cách bạn có thể xây dá»±ng các thà nh phần định nghÄ©a các khối dá»±ng cho ứng dụng cá»§a mình và cách kết nối chúng vá»›i nhau bằng cách sá» dụng ý định. +page.metaDescription=Khuôn khổ ứng dụng cá»§a Android cho phép bạn tạo láºp nhiá»u ứng dụng Ä‘a dạng và sáng tạo bằng cách sá» dụng má»™t táºp hợp các thà nh phần có thể tái sá» dụng. Phần nà y giải thÃch cách bạn có thể xây dá»±ng các thà nh phần định nghÄ©a các khối dá»±ng cho ứng dụng cá»§a mình và cách kết nối chúng vá»›i nhau bằng cách sá» dụng ý định. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Bà i viết Blog</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>Sá» dụng DialogFragments</h4> <p>Trong bà i viết nà y, tôi sẽ trình bà y cách sá» dụng DialogFragments bằng thư viện há»— trợ v4 (cho khả năng tương thÃch ngược trên các thiết bị chạy phiên bản trước Honeycomb) để hiển thị má»™t há»™p thoại chỉnh sá»a đơn giản và trả vá» má»™t kết quả cho lệnh gá»i Hoạt động bằng cách sá» dụng má»™t giao diện.</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>Phân Ä‘oạn cho Tất cả</h4> <p>Hôm nay, chúng tôi đã phát hà nh má»™t thư viện tÄ©nh giá»›i thiệu API Phân Ä‘oạn (cÅ©ng như LoaderManager má»›i và má»™t và i lá»›p khác) tương tá»± sao cho các ứng dụng tương thÃch vá»›i phiên bản Android 1.6 hoặc má»›i hÆ¡n có thể sá» dụng phân Ä‘oạn để tạo các giao diện ngưá»i dùng tương thÃch vá»›i máy tÃnh bảng. </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>Tạo Ä‘a luồng cho Hiệu năng</h4> <p>Má»™t cách là m hay trong khi tạo các ứng dụng hồi đáp đó là đảm bảo luồng UI chÃnh cá»§a bạn @@ -32,7 +32,7 @@ xá» lý trong má»™t luồng khác.</p> <div class="col-6"> <h3>Äà o tạo</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>Quản lý Vòng Ä‘á»i cá»§a Hoạt động</h4> <p>Lá»›p nà y giải thÃch các phương pháp gá»i lại vòng Ä‘á»i quan trá»ng mà má»—i thá»±c thể diff --git a/docs/html-intl/intl/vi/guide/components/loaders.jd b/docs/html-intl/intl/vi/guide/components/loaders.jd index b6d277f3d527..0585076cedbc 100644 --- a/docs/html-intl/intl/vi/guide/components/loaders.jd +++ b/docs/html-intl/intl/vi/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>Lá»›p khóa</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>Các mẫu liên quan</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ thay đổi.</li> tạo lại sau khi cấu hình thay đổi. Vì thế, chúng không cần truy vấn lại dữ liệu cá»§a mình.</li> </ul> - + <h2 id="summary">Tổng quan vá» API Trình tải</h2> <p>Có nhiá»u lá»›p và giao diện có thể có liên quan trong khi sá» dụng @@ -129,10 +129,10 @@ cá»§a {@link android.content.Loader} hoặc {@link android.content.AsyncTaskLoad dữ liệu từ má»™t số nguồn khác.</li> <li>Má»™t triển khai cho {@link android.app.LoaderManager.LoaderCallbacks}. Äây là nÆ¡i bạn tạo trình tải má»›i và quản lý các tham chiếu cá»§a mình tá»›i các -trình tải hiện có.</li> +trình tải hiện có.</li> <li>Má»™t cách để hiển thị dữ liệu cá»§a trình tải, chẳng hạn như {@link android.widget.SimpleCursorAdapter}.</li> - <li>Má»™t nguồn dữ liệu, chẳng hạn như má»™t {@link android.content.ContentProvider}, khi sá» dụng má»™t + <li>Má»™t nguồn dữ liệu, chẳng hạn như má»™t {@link android.content.ContentProvider}, khi sá» dụng má»™t {@link android.content.CursorLoader}.</li> </ul> <h3 id="starting">Khởi động má»™t Trình tải</h3> @@ -140,7 +140,7 @@ android.widget.SimpleCursorAdapter}.</li> <p>{@link android.app.LoaderManager} quản lý má»™t hoặc nhiá»u thá»±c thể {@link android.content.Loader} trong má»™t {@link android.app.Activity} hoặc {@link android.app.Fragment}. Chỉ có má»™t {@link -android.app.LoaderManager} trên má»—i hoạt động hoặc phân Ä‘oạn.</p> +android.app.LoaderManager} trên má»—i hoạt động hoặc phân Ä‘oạn.</p> <p>Thông thưá»ng, bạn sẽ khởi tạo má»™t {@link android.content.Loader} bên trong phương pháp {@link @@ -157,13 +157,13 @@ tham số sau:</p> <ul> <li>Má»™t ID duy nhất xác định trình tải. Trong và dụ nà y, ID là 0.</li> <li>Các tham đối tùy chá»n để cung cấp cho trình tải khi -xây dá»±ng (<code>null</code> trong và dụ nà y).</li> +xây dá»±ng (<code>null</code> trong và dụ nà y).</li> -<li>Triển khai {@link android.app.LoaderManager.LoaderCallbacks}, phương pháp mà +<li>Triển khai {@link android.app.LoaderManager.LoaderCallbacks}, phương pháp mà {@link android.app.LoaderManager} gá»i để báo cáo các sá»± kiện trình tải. Trong và dụ nà y , lá»›p cuÌ£c bộ triển khai giao diện {@link android.app.LoaderManager.LoaderCallbacks}, vì thế nó chuyển má»™t tham chiếu -tá»›i chÃnh nó, {@code this}.</li> +tá»›i chÃnh nó, {@code this}.</li> </ul> <p>Lệnh gá»i {@link android.app.LoaderManager#initLoader initLoader()} đảm bảo rằng má»™t trình tải được khởi tạo và hiện hoạt. Nó có hai kết quả có thể xảy ra:</p> @@ -193,7 +193,7 @@ vòng Ä‘á»i cá»§a trình tải. {@link android.app.LoaderManager} khởi động và dừng tải khi cần và duy trì trạng thái cá»§a trình tải và ná»™i dung Ä‘i kèm cá»§a nó. Như hà m ý, bạn hiếm khi tương tác trá»±c tiếp vá»›i các trình tải (thông qua má»™t và dụ vá» việc sá» dụng các phương pháp trình tải để tinh chỉnh hà nh vi -cá»§a má»™t trình tải, hãy xem và dụ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). +cá»§a má»™t trình tải, hãy xem và dụ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>). Bạn thưá»ng sá» dụng nhất là các phương pháp {@link android.app.LoaderManager.LoaderCallbacks} để can thiệp và o tiến trình tải khi diá»…n ra má»™t sá»± kiện đặc biệt. Äể thảo luáºn thêm vá» chá»§ đỠnà y, hãy xem phần <a href="#callback">Sá» dụng Phương pháp Gá»i lại LoaderManager</a>.</p> @@ -245,7 +245,7 @@ Khởi tạo và trả vá» má»™t {@link android.content.Loader} má»›i cho ID Ä‘ — ÄÆ°á»£c gá»i khi má»™t trình tải được tạo trước đó đã hoà n tất việc tải. </li></ul> <ul> - <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} + <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} — ÄÆ°á»£c gá»i khi má»™t trình tải được tạo trước đó Ä‘ang được đặt lại, vì thế mà khiến dữ liệu cá»§a nó không sẵn có. </li> @@ -315,7 +315,7 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { <p>Phương pháp nà y được gá»i khi má»™t trình tải được tạo trước đó đã hoà n thà nh việc tải cá»§a mình. Phương pháp nà y được bảo đảm sẽ được gá»i trước khi giải phóng dữ liệu cuối cùng được cung cấp cho trình tải nà y. Tại Ä‘iểm nà y, bạn nên loại bá» má»i trưá»ng hợp sá» dụng -dữ liệu cÅ© (do nó sẽ được giải phóng sá»›m), nhưng không nên +dữ liệu cÅ© (do nó sẽ được giải phóng sá»›m), nhưng không nên tá»± mình giải phóng dữ liệu do trình tải sở hữu dữ liệu và sẽ đảm nháºn việc nà y.</p> @@ -340,11 +340,11 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <h4 id="onLoaderReset">onLoaderReset</h4> -<p>Phương pháp nà y được gá»i khi má»™t trình tải được tạo trước đó Ä‘ang được đặt lại, vì thế mà khiến +<p>Phương pháp nà y được gá»i khi má»™t trình tải được tạo trước đó Ä‘ang được đặt lại, vì thế mà khiến dữ liệu cá»§a nó không sẵn có. Lệnh gá»i lại nà y cho phép bạn tìm hiểu xem khi nà o thì dữ liệu sẽ được giải phóng để bạn có thể loại bá» tham chiếu cá»§a mình tá»›i nó.  </p> -<p>Sá»± triển khai nà y gá»i ra -{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} +<p>Sá»± triển khai nà y gá»i ra +{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} vá»›i má»™t giá trị <code>null</code>:</p> <pre> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} có chức năng hiển thị má»™t {@link android.widget.ListView} chứa kết quả cá»§a má»™t truy vấn đối vá»›i trình cung cấp ná»™i dung danh bạ. Nó sá» dụng má»™t {@link android.content.CursorLoader} để quản lý truy vấn trên trình cung cấp.</p> - + <p>Äể má»™t ứng dụng truy cáºp danh bạ cá»§a má»™t ngưá»i dùng, như minh há»a trong và dụ nà y, bản kê khai cá»§a nó phải bao gồm quyá»n {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p> diff --git a/docs/html-intl/intl/vi/guide/components/processes-and-threads.jd b/docs/html-intl/intl/vi/guide/components/processes-and-threads.jd index 390ca156a1f0..b9933edc07fe 100644 --- a/docs/html-intl/intl/vi/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/vi/guide/components/processes-and-threads.jd @@ -120,7 +120,7 @@ bắt buá»™c để đảm bảo giao diện ngưá»i dùng có phản hồi.</p> <ul> <li>Nó lưu trữ má»™t {@link android.app.Activity} mà không nằm trong tiá»n cảnh, nhưng vẫn -hiển thị vá»›i ngưá»i dùng (phương pháp {@link android.app.Activity#onPause onPause()} cá»§a nó đã được gá»i). +hiển thị vá»›i ngưá»i dùng (phương pháp {@link android.app.Activity#onPause onPause()} cá»§a nó đã được gá»i). Äiá»u nà y có thể xảy ra, và dụ, nếu hoạt động tiá»n cảnh đã bắt đầu má»™t há»™p thoại, nó cho phép hoạt động trước được nhìn thấy phÃa sau nó.</li> @@ -202,7 +202,7 @@ gá»i lại cá»§a hệ thống (chẳng hạn như {@link android.view.View#onKe hoặc má»™t phương pháp gá»i lại vòng Ä‘á»i) sẽ luôn chạy trong luồng UI cá»§a tiến trình.</p> <p>Và dụ, khi ngưá»i dùng chạm và o má»™t nút trên mà n hình, luồng UI cá»§a ứng dụng cá»§a bạn sẽ phân phối -sá»± kiện chạm tá»›i widget, đến lượt mình, widget sẽ đặt trạng thái được nhấn và đăng má»™t yêu cầu vô hiệu hóa tá»›i +sá»± kiện chạm tá»›i widget, đến lượt mình, widget sẽ đặt trạng thái được nhấn và đăng má»™t yêu cầu vô hiệu hóa tá»›i hà ng đợi sá»± kiện. Luồng UI loại yêu cầu khá»i hà ng đợi và thông báo vá»›i widget rằng nó nên tá»± vẽ lại .</p> @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/vi/guide/components/recents.jd b/docs/html-intl/intl/vi/guide/components/recents.jd index 0a176145f9ca..271c05d9142e 100644 --- a/docs/html-intl/intl/vi/guide/components/recents.jd +++ b/docs/html-intl/intl/vi/guide/components/recents.jd @@ -180,7 +180,7 @@ sau khi ngưá»i dùng mở má»™t tà i liệu bằng ứng dụng:</p> bất kỳ hoạt động nà o mà ngưá»i dùng đã gá»i ra cuối cùng.</dd> </dl> -<p class="note"><strong>Lưu ý:</strong> Äối vá»›i những giá trị ngoà i {@code none} và {@code never} +<p class="note"><strong>Lưu ý:</strong> Äối vá»›i những giá trị ngoà i {@code none} và {@code never} hoạt động phải được định nghÄ©a bằng {@code launchMode="standard"}. Nếu thuá»™c tÃnh nà y không được quy định thì {@code documentLaunchMode="none"} sẽ được sá» dụng.</p> @@ -191,7 +191,7 @@ hoà n thà nh. Bạn có thể khống chế hà nh vi nà y bằng lá»›p {@link an bằng má»™t cá» {@link android.content.Intent}, hoặc bằng má»™t thuá»™c tÃnh<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> <activity></a></code>.</p> -<p>Bạn có thể luôn loại trừ hoà n toà n má»™t tác vụ khá»i mà n hình tổng quan bằng cách thiết đặt thuá»™c tÃnh +<p>Bạn có thể luôn loại trừ hoà n toà n má»™t tác vụ khá»i mà n hình tổng quan bằng cách thiết đặt thuá»™c tÃnh <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> , <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude"> {@code android:excludeFromRecents}</a> thà nh {@code true}.</p> diff --git a/docs/html-intl/intl/vi/guide/components/services.jd b/docs/html-intl/intl/vi/guide/components/services.jd index 9e3e6c75eccf..fc2a7eaeb77f 100644 --- a/docs/html-intl/intl/vi/guide/components/services.jd +++ b/docs/html-intl/intl/vi/guide/components/services.jd @@ -199,7 +199,7 @@ con cá»§a phần tá» <a href="{@docRoot}guide/topics/manifest/application-eleme </manifest> </pre> -<p>Xem tham chiếu phần tá» <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> +<p>Xem tham chiếu phần tá» <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> để biết thêm thông tin vá» việc khai báo dịch vụ cá»§a bạn trong bản kê khai.</p> <p>Có các thuá»™c tÃnh khác mà bạn có thể bao gồm trong phần tá» <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> để @@ -605,7 +605,7 @@ tà i liệu riêng vá» <a href="{@docRoot}guide/components/bound-services.html" <p>Sau khi chạy, má»™t dịch vụ có thể thông báo cho ngưá»i dùng vá» sá»± kiện bằng cách sá» dụng <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Thông báo Cá»a sổ</a> hoặc <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Thông báo Thanh Trạng thái</a>.</p> -<p>Thông báo cá»a sổ là má»™t thông báo xuất hiện má»™t lúc trên bá» mặt cá»§a cá»a sổ hiện tại +<p>Thông báo cá»a sổ là má»™t thông báo xuất hiện má»™t lúc trên bá» mặt cá»§a cá»a sổ hiện tại rồi biến mất, trong khi thông báo thanh trạng thái cung cấp má»™t biểu tượng trong thanh trạng thái cùng má»™t thông báo, ngưá»i dùng có thể chá»n nó để thá»±c hiện má»™t hà nh động (chẳng hạn như bắt đầu má»™t hoạt động).</p> diff --git a/docs/html-intl/intl/vi/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/vi/guide/components/tasks-and-back-stack.jd index 85afffff5ba5..76df1dd2e075 100644 --- a/docs/html-intl/intl/vi/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/vi/guide/components/tasks-and-back-stack.jd @@ -190,7 +190,7 @@ trạng thái cá»§a các hoạt động cá»§a mình bằng cách sá» dụng cá <p>Khi hệ thống dừng má»™t trong các hoạt động cá»§a bạn (chẳng hạn như khi má»™t hoạt động má»›i bắt đầu hoặc tác vụ di chuyển vá» ná»n), hệ thống có thể hoà n toà n há»§y hoạt động đó nếu nó cần khôi phục -bộ nhá»› hệ thống. Khi Ä‘iá»u nà y xảy ra, thông tin vá» trạng thái cá»§a hoạt động sẽ bị mất. Nếu Ä‘iá»u nà y xảy ra, +bộ nhá»› hệ thống. Khi Ä‘iá»u nà y xảy ra, thông tin vá» trạng thái cá»§a hoạt động sẽ bị mất. Nếu Ä‘iá»u nà y xảy ra, hệ thống vẫn biết rằng hoạt động có má»™t vị trà trong ngăn xếp, nhưng khi hoạt động được đưa tá»›i vị trà trên cùng cá»§a chồng, hệ thống phải tạo lại nó (thay vì tiếp tục). Äể tránh @@ -314,7 +314,7 @@ hoạt động nằm trên cùng cá»§a ngăn xếp <em>không</em> phải là má <p>Và dụ, giả sá» ngăn xếp cá»§a má»™t tác vụ bao gồm hoạt động gốc A vá»›i các hoạt động B, C, và D ở trên cùng (chồng là A-B-C-D; D ở trên cùng). Má»™t ý định đến cho loại hoạt động D. Nếu D có chế độ khởi chạy {@code "standard"} mặc định, má»™t thá»±c thể má»›i cá»§a lá»›p sẽ được khởi chạy và -chồng trở thà nh A-B-C-D-D. Tuy nhiên, nếu chế độ khởi chạy cá»§a D là {@code "singleTop"}, thá»±c thể hiện tại +chồng trở thà nh A-B-C-D-D. Tuy nhiên, nếu chế độ khởi chạy cá»§a D là {@code "singleTop"}, thá»±c thể hiện tại cá»§a D sẽ nháºn ý định thông qua {@link android.app.Activity#onNewIntent onNewIntent()}, bởi nó nằm ở vị trà trên cùng cá»§a chồng—chồng vẫn là A-B-C-D. Tuy nhiên, nếu má»™t ý định đến cho hoạt động loại B, khi đó má»™t thá»±c thể @@ -557,9 +557,9 @@ tác vụ má»›i và ngưá»i dùng dà nh má»™t khoảng thá»i gian là m việc . Lúc nà y, tác vụ được gá»i tá»›i ná»n và không hiển thị. Bây giá», ngưá»i dùng không có cách nà o để quay lại tác vụ bởi nó không được biểu diá»…n trong trình khởi chạy ứng dụng.</p> -<p>Äối vá»›i những trưá»ng hợp mà bạn không muốn ngưá»i dùng có thể quay lại má»™t hoạt động, hãy đặt giá trị cá»§a phần tá» +<p>Äối vá»›i những trưá»ng hợp mà bạn không muốn ngưá»i dùng có thể quay lại má»™t hoạt động, hãy đặt giá trị cá»§a phần tá» <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -, +, <a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a> thà nh {@code "true"} (xem <a href="#Clearing">Xóa chồng</a>).</p> diff --git a/docs/html-intl/intl/vi/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/vi/guide/topics/manifest/manifest-intro.jd index ca2ed26270f2..06668b4c685c 100644 --- a/docs/html-intl/intl/vi/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/vi/guide/topics/manifest/manifest-intro.jd @@ -31,27 +31,27 @@ page.title=Bản kê khai Ứng dụng <li>Nó đặt tên gói Java cho ứng dụng. Tên gói đóng vai trò như má»™t mã nháºn diện duy nhất cho ứng dụng.</li> -<li>Nó mô tả các thà nh phần cá»§a ứng dụng — hoạt động, -dịch vụ, hà m nháºn quảng bá, và trình cung cấp ná»™i dung mà ứng dụng -được soạn bởi. Nó đặt tên các lá»›p triển khai từng thà nh phần và -công bố các khả năng cá»§a chúng (và dụ, những tin nhắn {@link android.content.Intent -Intent} mà chúng có thể xá» lý). Những khai báo nà y cho phép hệ thống Android +<li>Nó mô tả các thà nh phần cá»§a ứng dụng — hoạt động, +dịch vụ, hà m nháºn quảng bá, và trình cung cấp ná»™i dung mà ứng dụng +được soạn bởi. Nó đặt tên các lá»›p triển khai từng thà nh phần và +công bố các khả năng cá»§a chúng (và dụ, những tin nhắn {@link android.content.Intent +Intent} mà chúng có thể xá» lý). Những khai báo nà y cho phép hệ thống Android biết các thà nh phần là gì và chúng có thể được khởi chạy trong những Ä‘iá»u kiện nà o.</li> -<li>Nó xác định những tiến trình nà o sẽ lưu trữ các thà nh phần ứng dụng.</li> +<li>Nó xác định những tiến trình nà o sẽ lưu trữ các thà nh phần ứng dụng.</li> -<li>Nó khai báo các quyá»n mà ứng dụng phải có để -truy cáºp các phần được bảo vệ cá»§a API và tương tác vá»›i các ứng dụng khác.</li> +<li>Nó khai báo các quyá»n mà ứng dụng phải có để +truy cáºp các phần được bảo vệ cá»§a API và tương tác vá»›i các ứng dụng khác.</li> -<li>Nó cÅ©ng khai báo các quyá»n mà ứng dụng khác phải có để +<li>Nó cÅ©ng khai báo các quyá»n mà ứng dụng khác phải có để tương tác vá»›i các thà nh phần cá»§a ứng dụng.</li> -<li>Nó liệt kê các lá»›p {@link android.app.Instrumentation} cung cấp -tÃnh năng tạo hồ sÆ¡ và các thông tin khác khi ứng dụng Ä‘ang chạy. Những khai báo nà y -chỉ xuất hiện trong bản kê khai khi ứng dụng Ä‘ang được phát triển và +<li>Nó liệt kê các lá»›p {@link android.app.Instrumentation} cung cấp +tÃnh năng tạo hồ sÆ¡ và các thông tin khác khi ứng dụng Ä‘ang chạy. Những khai báo nà y +chỉ xuất hiện trong bản kê khai khi ứng dụng Ä‘ang được phát triển và thá» nghiệm; chúng bị loại bá» trước khi ứng dụng được công bố.</li> -<li>Nó khai báo mức tối thiểu cá»§a API Android mà ứng dụng +<li>Nó khai báo mức tối thiểu cá»§a API Android mà ứng dụng yêu cầu.</li> <li>Nó liệt kê các thư viện mà ứng dụng phải được liên kết vá»›i.</li> @@ -61,12 +61,12 @@ yêu cầu.</li> <h2 id="filestruct">Cấu trúc cá»§a Tệp Bản kê khai</h2> <p> -SÆ¡ đồ bên dưới minh há»a cấu trúc chung cá»§a tệp bản kê khai và má»i -phần tá» mà nó có thể chứa. Từng phần tá», cùng vá»›i tất cả thuá»™c tÃnh -cá»§a mình, sẽ được láºp tà i liệu theo dõi đầy đủ và o má»™t tệp riêng. Äể xem thông tin -chi tiết vá» má»i phần tá», hãy nhấp và o tên phần tá» trong sÆ¡ đồ, +SÆ¡ đồ bên dưới minh há»a cấu trúc chung cá»§a tệp bản kê khai và má»i +phần tá» mà nó có thể chứa. Từng phần tá», cùng vá»›i tất cả thuá»™c tÃnh +cá»§a mình, sẽ được láºp tà i liệu theo dõi đầy đủ và o má»™t tệp riêng. Äể xem thông tin +chi tiết vá» má»i phần tá», hãy nhấp và o tên phần tá» trong sÆ¡ đồ, trong danh sách các phần tá» theo thứ tá»± chữ cái mà tuân theo sÆ¡ đồ, hoặc trên bất kỳ -ná»™i dung nà o khác đỠcáºp tá»›i tên phần tá». +ná»™i dung nà o khác đỠcáºp tá»›i tên phần tá». </p> <pre> @@ -126,9 +126,9 @@ ná»™i dung nà o khác đỠcáºp tá»›i tên phần tá». </pre> <p> -Tất cả phần tá» có thể xuất hiện trong tệp bản kê khai được liệt kê ở bên dưới -theo thứ tá»± chữ cái. Äây là những phần tá» hợp pháp duy nhất; bạn không thể -thêm các phần tá» hay thuá»™c tÃnh cá»§a chÃnh mình. +Tất cả phần tá» có thể xuất hiện trong tệp bản kê khai được liệt kê ở bên dưới +theo thứ tá»± chữ cái. Äây là những phần tá» hợp pháp duy nhất; bạn không thể +thêm các phần tá» hay thuá»™c tÃnh cá»§a chÃnh mình. </p> <p style="margin-left: 2em"> @@ -158,74 +158,74 @@ thêm các phần tá» hay thuá»™c tÃnh cá»§a chÃnh mình. </p> - + <h2 id="filec">Các Quy ước Tệp</h2> <p> -Má»™t số quy ước và quy tắc áp dụng chung cho tất cả các phần tá» và thuá»™c tÃnh +Má»™t số quy ước và quy tắc áp dụng chung cho tất cả các phần tá» và thuá»™c tÃnh trong bản kê khai: </p> <dl> <dt><b>Phần tá»</b></dt> -<dd>Chỉ các phần tá» +<dd>Chỉ các phần tá» <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> và -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -là bắt buá»™c phải có, chúng Ä‘á»u phải có mặt và chỉ có thể xảy ra má»™t lần. -Hầu hết các phần tá» khác có thể xảy ra nhiá»u lần hoặc không xảy ra — mặc dù Ãt -nhất má»™t và i trong số chúng phải có mặt để bản kê khai thá»±c sá»± có +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +là bắt buá»™c phải có, chúng Ä‘á»u phải có mặt và chỉ có thể xảy ra má»™t lần. +Hầu hết các phần tá» khác có thể xảy ra nhiá»u lần hoặc không xảy ra — mặc dù Ãt +nhất má»™t và i trong số chúng phải có mặt để bản kê khai thá»±c sá»± có ý nghÄ©a nà o đó. <p> -Nếu má»™t phần tá» chứa bất kỳ ná»™i dung nà o, nó có thể chứa các phần tá» khác. +Nếu má»™t phần tá» chứa bất kỳ ná»™i dung nà o, nó có thể chứa các phần tá» khác. Tất cả giá trị sẽ được đặt thông qua thuá»™c tÃnh, chứ không phải là dữ liệu ký tá»± trong má»™t phần tá». </p> <p> Các phần tá» cùng cấp thưá»ng không theo thứ tá»±. Và dụ, các phần tá» -<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>, và -<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> -có thể được trá»™n lẫn vá»›i nhau theo bất kỳ trình tá»± nà o. (Phần tá» +<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>, và +<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> +có thể được trá»™n lẫn vá»›i nhau theo bất kỳ trình tá»± nà o. (Phần tá» <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> -là trưá»ng hợp ngoại lệ đối vá»›i quy tắc nà y: Nó phải tuân theo -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +là trưá»ng hợp ngoại lệ đối vá»›i quy tắc nà y: Nó phải tuân theo +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> , đối tượng mà nó là bà danh cho.) </p></dd> <dt><b>Thuá»™c tÃnh</b></dt> -<dd>Theo cách hiểu thông thưá»ng, tất cả thuá»™c tÃnh Ä‘á»u mang tÃnh tùy chá»n. Tuy nhiên, có má»™t số thuá»™c tÃnh -phải được quy định cho má»™t phần tỠđể hoà n thà nh mục Ä‘Ãch cá»§a nó. Sá» dụng +<dd>Theo cách hiểu thông thưá»ng, tất cả thuá»™c tÃnh Ä‘á»u mang tÃnh tùy chá»n. Tuy nhiên, có má»™t số thuá»™c tÃnh +phải được quy định cho má»™t phần tỠđể hoà n thà nh mục Ä‘Ãch cá»§a nó. Sá» dụng tà i liệu là m hướng dẫn. Äối vá»›i những thuá»™c tÃnh thá»±c sá»± tùy chá»n, nó đỠcáºp tá»›i má»™t giá trị mặc định hoặc thông báo Ä‘iá»u gì sẽ xảy ra nếu không có má»™t đặc tả. -<p>Ngoà i má»™t số thuá»™c tÃnh cá»§a phần tá» -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -gốc, tất cả tên thuá»™c tÃnh Ä‘á»u bắt đầu bằng má»™t tiá»n tố {@code android:}— -và dụ, {@code android:alwaysRetainTaskState}. Do tiá»n tố nà y -phổ dụng, tà i liệu thưá»ng bá» sót nó khi tham chiếu tá»›i các thuá»™c tÃnh +<p>Ngoà i má»™t số thuá»™c tÃnh cá»§a phần tá» +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +gốc, tất cả tên thuá»™c tÃnh Ä‘á»u bắt đầu bằng má»™t tiá»n tố {@code android:}— +và dụ, {@code android:alwaysRetainTaskState}. Do tiá»n tố nà y +phổ dụng, tà i liệu thưá»ng bá» sót nó khi tham chiếu tá»›i các thuá»™c tÃnh theo tên.</p></dd> <dt><b>Khai báo tên lá»›p</b></dt> -<dd>Nhiá»u thuá»™c tÃnh tương ứng vá»›i các đối tượng Java, bao gồm các phần tá» cho -chÃnh ứng dụng (phần tá» -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -) và các thà nh phần chÃnh cá»§a nó — hoạt động -(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), -dịch vụ -(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), -hà m nháºn quảng bá -(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>), -và trình cung cấp ná»™i dung -(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). +<dd>Nhiá»u thuá»™c tÃnh tương ứng vá»›i các đối tượng Java, bao gồm các phần tá» cho +chÃnh ứng dụng (phần tá» +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +) và các thà nh phần chÃnh cá»§a nó — hoạt động +(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), +dịch vụ +(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), +hà m nháºn quảng bá +(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>), +và trình cung cấp ná»™i dung +(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). <p> -Nếu bạn định nghÄ©a má»™t lá»›p con như vẫn luôn là m đối vá»›i lá»›p thà nh phần -({@link android.app.Activity}, {@link android.app.Service}, -{@link android.content.BroadcastReceiver}, và {@link android.content.ContentProvider}), -lá»›p con sẽ được khai báo thông qua má»™t thuá»™c tÃnh {@code name}. Tên phải bao gồm -chỉ định gói đầy đủ. +Nếu bạn định nghÄ©a má»™t lá»›p con như vẫn luôn là m đối vá»›i lá»›p thà nh phần +({@link android.app.Activity}, {@link android.app.Service}, +{@link android.content.BroadcastReceiver}, và {@link android.content.ContentProvider}), +lá»›p con sẽ được khai báo thông qua má»™t thuá»™c tÃnh {@code name}. Tên phải bao gồm +chỉ định gói đầy đủ. Và dụ, má»™t lá»›p con {@link android.app.Service} có thể được khai báo như sau: </p> @@ -239,12 +239,12 @@ Và dụ, má»™t lá»›p con {@link android.app.Service} có thể được khai bà </manifest></pre> <p> -Tuy nhiên, do cách viết tốc ký, nếu ký tá»± đầu tiên cá»§a xâu là má»™t dấu chấm, -xâu sẽ được nối vá»›i tên gói cá»§a ứng dụng (như được quy định bởi -thuá»™c tÃnh cá»§a phần tá» <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> +Tuy nhiên, do cách viết tốc ký, nếu ký tá»± đầu tiên cá»§a xâu là má»™t dấu chấm, +xâu sẽ được nối vá»›i tên gói cá»§a ứng dụng (như được quy định bởi +thuá»™c tÃnh cá»§a phần tá» <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> -<code>, <a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> -). Cách gán sau cÅ©ng giống như trên: +<code>, <a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> +). Cách gán sau cÅ©ng giống như trên: </p> <pre><manifest package="com.example.project" . . . > @@ -257,13 +257,13 @@ thuá»™c tÃnh cá»§a phần tá» <code><a href="{@docRoot}guide/topics/manifest/m </manifest></pre> <p> -Khi khởi động má»™t thà nh phần, Android sẽ tạo má»™t thá»±c thể cá»§a lá»›p con được nêu tên. +Khi khởi động má»™t thà nh phần, Android sẽ tạo má»™t thá»±c thể cá»§a lá»›p con được nêu tên. Nếu lá»›p con không được quy định, nó sẽ tạo má»™t thá»±c thể cá»§a lá»›p cÆ¡ sở. </p></dd> <dt><b>Nhiá»u giá trị</b></dt> -<dd>Nếu có thể quy định nhiá»u hÆ¡n má»™t giá trị, phần tá» gần như luôn -được lặp lại, thay vì liệt kê nhiá»u giá trị trong má»™t phần tá» duy nhất. +<dd>Nếu có thể quy định nhiá»u hÆ¡n má»™t giá trị, phần tá» gần như luôn +được lặp lại, thay vì liệt kê nhiá»u giá trị trong má»™t phần tá» duy nhất. Và dụ, má»™t bá»™ lá»c ý định có thể liệt kê và i hà nh động: <pre><intent-filter . . . > @@ -274,24 +274,24 @@ Và dụ, má»™t bá»™ lá»c ý định có thể liệt kê và i hà nh động: </intent-filter></pre></dd> <dt><b>Giá trị tà i nguyên</b></dt> -<dd>Má»™t số thuá»™c tÃnh có các giá trị có thể được hiển thị vá»›i ngưá»i dùng — và -dụ, má»™t nhãn và má»™t biểu tượng cho má»™t hoạt động. Giá trị cá»§a những thuá»™c tÃnh nà y -cần được cục bá»™ hóa và vì thế phải được thiết đặt từ má»™t tà i nguyên hoặc chá»§ Ä‘á». Giá trị +<dd>Má»™t số thuá»™c tÃnh có các giá trị có thể được hiển thị vá»›i ngưá»i dùng — và +dụ, má»™t nhãn và má»™t biểu tượng cho má»™t hoạt động. Giá trị cá»§a những thuá»™c tÃnh nà y +cần được cục bá»™ hóa và vì thế phải được thiết đặt từ má»™t tà i nguyên hoặc chá»§ Ä‘á». Giá trị tà i nguyên được biểu diá»…n theo định dạng sau,</p> <p style="margin-left: 2em">{@code @[<i>gói</i>:]<i>kiểu</i>:<i>tên</i>}</p> <p> -trong đó <i>gói</i> có thể được bá» qua nếu tà i nguyên nằm trong cùng gói -vá»›i ứng dụng, <i>kiểu</i> là kiểu cá»§a tà i nguyên — chẳng hạn như "xâu" hoặc -— "vẽ được" và <i>tên</i> là tên nháºn biết tà i nguyên cụ thể. +trong đó <i>gói</i> có thể được bá» qua nếu tà i nguyên nằm trong cùng gói +vá»›i ứng dụng, <i>kiểu</i> là kiểu cá»§a tà i nguyên — chẳng hạn như "xâu" hoặc +— "vẽ được" và <i>tên</i> là tên nháºn biết tà i nguyên cụ thể. Và dụ: </p> <pre><activity android:icon="@drawable/smallPic" . . . ></pre> <p> -Các giá trị từ má»™t chá»§ đỠđược biểu diá»…n theo cách tương tá»±, nhưng vá»›i má»™t '{@code ?}' +Các giá trị từ má»™t chá»§ đỠđược biểu diá»…n theo cách tương tá»±, nhưng vá»›i má»™t '{@code ?}' thay vì '{@code @}' ở đầu: </p> @@ -299,8 +299,8 @@ thay vì '{@code @}' ở đầu: </p></dd> <dt><b>Giá trị xâu</b></dt> -<dd>Trưá»ng hợp giá trị cá»§a má»™t thuá»™c tÃnh là má»™t xâu, phải sá» dụng hai dấu xuyệc ngược ('{@code \\}') -để thoát các ký tá»± — và dụ, '{@code \\n}' đối vá»›i +<dd>Trưá»ng hợp giá trị cá»§a má»™t thuá»™c tÃnh là má»™t xâu, phải sá» dụng hai dấu xuyệc ngược ('{@code \\}') +để thoát các ký tá»± — và dụ, '{@code \\n}' đối vá»›i má»™t dòng tin tức hoặc '{@code \\uxxxx}' đối vá»›i má»™t ký tá»± Unicode.</dd> </dl> @@ -308,7 +308,7 @@ má»™t dòng tin tức hoặc '{@code \\uxxxx}' đối vá»›i má»™t ký tá»± Unico <h2 id="filef">Các TÃnh năng Tệp</h2> <p> -Phần sau đây mô tả cách phản ánh má»™t số tÃnh năng cá»§a Android +Phần sau đây mô tả cách phản ánh má»™t số tÃnh năng cá»§a Android trong tệp bản kê khai. </p> @@ -316,23 +316,23 @@ trong tệp bản kê khai. <h3 id="ifs">Bá»™ lá»c à định</h3> <p> -Các thà nh phần cốt lõi cá»§a má»™t ứng dụng (hoạt động, dịch vụ và hà m nháºn -quảng bá) được kÃch hoạt bởi <i>ý định</i>. à định là má»™t -gói thông tin (má»™t đối tượng {@link android.content.Intent}) mô tả má»™t -hà nh động mong muốn — bao gồm dữ liệu sẽ được dá»±a trên, thể loại cá»§a -thà nh phần mà sẽ thá»±c hiện hà nh động, và các chỉ dẫn thÃch hợp khác. -Android định vị má»™t thà nh phần phù hợp để hồi đáp ý định, khởi chạy -má»™t thá»±c thể má»›i cá»§a thà nh phần nếu cần, và chuyển cho nó đối tượng đó +Các thà nh phần cốt lõi cá»§a má»™t ứng dụng (hoạt động, dịch vụ và hà m nháºn +quảng bá) được kÃch hoạt bởi <i>ý định</i>. à định là má»™t +gói thông tin (má»™t đối tượng {@link android.content.Intent}) mô tả má»™t +hà nh động mong muốn — bao gồm dữ liệu sẽ được dá»±a trên, thể loại cá»§a +thà nh phần mà sẽ thá»±c hiện hà nh động, và các chỉ dẫn thÃch hợp khác. +Android định vị má»™t thà nh phần phù hợp để hồi đáp ý định, khởi chạy +má»™t thá»±c thể má»›i cá»§a thà nh phần nếu cần, và chuyển cho nó đối tượng đó à định. </p> <p> -Các thà nh phần sẽ quảng cáo khả năng cá»§a mình — các kiểu ý định mà chúng có thể -hồi đáp — thông qua <i>các bá»™ lá»c ý định</i>. Do hệ thống Android phải -tìm hiểu má»™t thà nh phần có thể xá» lý những ý định nà o trước khi khởi chạy thà nh phần đó, -bá»™ lá»c ý định được quy định trong bản kê khai như là các phần tá» +Các thà nh phần sẽ quảng cáo khả năng cá»§a mình — các kiểu ý định mà chúng có thể +hồi đáp — thông qua <i>các bá»™ lá»c ý định</i>. Do hệ thống Android phải +tìm hiểu má»™t thà nh phần có thể xá» lý những ý định nà o trước khi khởi chạy thà nh phần đó, +bá»™ lá»c ý định được quy định trong bản kê khai như là các phần tá» <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> -. Má»™t thà nh phần có thể có nhiá»u bá»™ lá»c, má»—i bá»™ lá»c lại mô tả +. Má»™t thà nh phần có thể có nhiá»u bá»™ lá»c, má»—i bá»™ lá»c lại mô tả má»™t khả năng khác nhau. </p> @@ -344,9 +344,9 @@ thà nh phần. </p> <p> -Äể biết thông tin vá» cách các đối tượng à định được kiểm tra thông qua bá»™ lá»c ý định, -hãy xem tà i liệu riêng có tiêu đỠ-<a href="{@docRoot}guide/components/intents-filters.html">à định +Äể biết thông tin vá» cách các đối tượng à định được kiểm tra thông qua bá»™ lá»c ý định, +hãy xem tà i liệu riêng có tiêu đỠ+<a href="{@docRoot}guide/components/intents-filters.html">à định và Bá»™ lá»c à định</a>. </p> @@ -354,42 +354,42 @@ và Bá»™ lá»c à định</a>. <h3 id="iconlabel">Biểu tượng và Nhãn</h3> <p> -Nhiá»u phần tá» có thuá»™c tÃnh {@code icon} và {@code label} cho má»™t -biểu tượng nhá» và nhãn văn bản mà có thể được hiển thị vá»›i ngưá»i dùng. Má»™t số cÅ©ng có thuá»™c tÃnh -{@code description} cho văn bản giải trình dà i hÆ¡n mà cÅ©ng có thể -được hiển thị trên mà n hình. Và dụ, phần tá» +Nhiá»u phần tá» có thuá»™c tÃnh {@code icon} và {@code label} cho má»™t +biểu tượng nhá» và nhãn văn bản mà có thể được hiển thị vá»›i ngưá»i dùng. Má»™t số cÅ©ng có thuá»™c tÃnh +{@code description} cho văn bản giải trình dà i hÆ¡n mà cÅ©ng có thể +được hiển thị trên mà n hình. Và dụ, phần tá» <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -có cả ba thuá»™c tÃnh nà y, vì thế khi ngưá»i dùng được há»i xem có -cấp quyá»n cho má»™t ứng dụng yêu cầu hay không, biểu tượng thể hiện +có cả ba thuá»™c tÃnh nà y, vì thế khi ngưá»i dùng được há»i xem có +cấp quyá»n cho má»™t ứng dụng yêu cầu hay không, biểu tượng thể hiện quyá»n, tên cá»§a quyá»n, và mô tả ná»™i dung cá»§a quyá»n đó Ä‘á»u có thể được trình bà y cho ngưá»i dùng xem. </p> <p> -Trong má»i trưá»ng hợp, biểu tượng và nhãn được đặt trong má»™t phần tá» chứa sẽ trở thà nh các thiết đặt -{@code icon} và {@code label} mặc định cho tất cả phần tá» con cá»§a bá»™ chứa đó. -Vì thế, biểu tượng và nhãn được đặt trong phần tá» -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -là biểu tượng và nhãn mặc định cho từng thà nh phần cá»§a ứng dụng. -Tương tá»±, biểu tượng và nhãn được đặt cho má»™t thà nh phần — và dụ, má»™t phần tá» -<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> -— sẽ là các cà i đặt mặc định cho từng phần tá» -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> +Trong má»i trưá»ng hợp, biểu tượng và nhãn được đặt trong má»™t phần tá» chứa sẽ trở thà nh các thiết đặt +{@code icon} và {@code label} mặc định cho tất cả phần tá» con cá»§a bá»™ chứa đó. +Vì thế, biểu tượng và nhãn được đặt trong phần tá» +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +là biểu tượng và nhãn mặc định cho từng thà nh phần cá»§a ứng dụng. +Tương tá»±, biểu tượng và nhãn được đặt cho má»™t thà nh phần — và dụ, má»™t phần tá» +<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> +— sẽ là các cà i đặt mặc định cho từng phần tá» +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> cá»§a thà nh phần đó. Nếu má»™t phần tá» -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> -thiết đặt má»™t nhãn, nhưng hoạt động và bá»™ lá»c ý định cá»§a nó thì không, -nhãn ứng dụng sẽ được coi là nhãn cá»§a cả hoạt động và +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +thiết đặt má»™t nhãn, nhưng hoạt động và bá»™ lá»c ý định cá»§a nó thì không, +nhãn ứng dụng sẽ được coi là nhãn cá»§a cả hoạt động và bá»™ lá»c ý định. </p> <p> -Biểu tượng và nhãn được đặt cho má»™t bá»™ lá»c ý định sẽ được sá» dụng để biểu diá»…n má»™t thà nh phần +Biểu tượng và nhãn được đặt cho má»™t bá»™ lá»c ý định sẽ được sá» dụng để biểu diá»…n má»™t thà nh phần bất cứ khi nà o thà nh phần đó được trình bà y vá»›i ngưá»i dùng để thá»±c hiện chức năng -mà bá»™ lá»c đã quảng cáo. Và dụ, má»™t bá»™ lá»c vá»›i các thiết đặt -"{@code android.intent.action.MAIN}" và -"{@code android.intent.category.LAUNCHER}" quảng cáo má»™t hoạt động +mà bá»™ lá»c đã quảng cáo. Và dụ, má»™t bá»™ lá»c vá»›i các thiết đặt +"{@code android.intent.action.MAIN}" và +"{@code android.intent.category.LAUNCHER}" quảng cáo má»™t hoạt động là hoạt động khởi đầu má»™t ứng dụng — cụ thể, là -hoạt động sẽ được hiển thị trong trình khởi chạy ứng dụng. Vì thế, biểu tượng và nhãn +hoạt động sẽ được hiển thị trong trình khởi chạy ứng dụng. Vì thế, biểu tượng và nhãn được đặt trong bá»™ lá»c là những ná»™i dung được hiển thị trong trình khởi chạy. </p> @@ -397,14 +397,14 @@ hoạt động sẽ được hiển thị trong trình khởi chạy ứng dụn <h3 id="perms">Quyá»n</h3> <p> -Má»™t <i>quyá»n</i> là sá»± hạn chế giá»›i hạn truy cáºp và o má»™t phần cá»§a mã -hoặc và o dữ liệu trên thiết bị. Giá»›i hạn nà y được áp đặt nhằm bảo vệ dữ liệu -và mã trá»ng yếu, có thể bị lạm dụng để bóp méo hoặc là m há»ng trải nghiệm ngưá»i dùng. +Má»™t <i>quyá»n</i> là sá»± hạn chế giá»›i hạn truy cáºp và o má»™t phần cá»§a mã +hoặc và o dữ liệu trên thiết bị. Giá»›i hạn nà y được áp đặt nhằm bảo vệ dữ liệu +và mã trá»ng yếu, có thể bị lạm dụng để bóp méo hoặc là m há»ng trải nghiệm ngưá»i dùng. </p> <p> -Má»—i quyá»n được nháºn biết bằng má»™t nhãn duy nhất. Thông thưá»ng, nhãn cho biết -hà nh động bị hạn chế. Và dụ, sau đây là má»™t số quyá»n được định nghÄ©a +Má»—i quyá»n được nháºn biết bằng má»™t nhãn duy nhất. Thông thưá»ng, nhãn cho biết +hà nh động bị hạn chế. Và dụ, sau đây là má»™t số quyá»n được định nghÄ©a bởi Android: </p> @@ -418,25 +418,25 @@ Má»™t tÃnh năng có thể được bảo vệ bởi nhiá»u nhất má»™t quyá» </p> <p> -Nếu má»™t ứng dụng cần truy cáºp và o má»™t tÃnh năng được bảo vệ bởi má»™t quyá»n, -nó phải khai báo rằng nó yêu cầu quyá»n đó cùng vá»›i má»™t phần tá» -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -trong bản kê khai. Lúc đó, khi ứng dụng được cà i đặt trên -thiết bị, trình cà i đặt sẽ xác định xem có cấp quyá»n -được yêu cầu hay không bằng cách kiểm tra các thẩm quyá»n đã ký chứng chỉ -cá»§a ứng dụng và trong má»™t số trưá»ng hợp, bằng cách há»i ngưá»i dùng. -Nếu quyá»n được cấp, ứng dụng có thể sá» dụng các tÃnh năng +Nếu má»™t ứng dụng cần truy cáºp và o má»™t tÃnh năng được bảo vệ bởi má»™t quyá»n, +nó phải khai báo rằng nó yêu cầu quyá»n đó cùng vá»›i má»™t phần tá» +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> +trong bản kê khai. Lúc đó, khi ứng dụng được cà i đặt trên +thiết bị, trình cà i đặt sẽ xác định xem có cấp quyá»n +được yêu cầu hay không bằng cách kiểm tra các thẩm quyá»n đã ký chứng chỉ +cá»§a ứng dụng và trong má»™t số trưá»ng hợp, bằng cách há»i ngưá»i dùng. +Nếu quyá»n được cấp, ứng dụng có thể sá» dụng các tÃnh năng được bảo vệ. Nếu không, việc thá» truy cáºp những tÃnh năng đó sẽ thất bại -mà không có bất kỳ thông báo nà o cho ngưá»i dùng. +mà không có bất kỳ thông báo nà o cho ngưá»i dùng. </p> <p> -Má»™t ứng dụng cÅ©ng có thể bảo vệ các thà nh phần cá»§a chÃnh nó (hoạt động, dịch vụ, -hà m nháºn quảng bá và trình cung cấp ná»™i dung) bằng các quyá»n. Nó có thể sá» dụng -bất kỳ quyá»n nà o được định nghÄ©a bởi Android (được liệt kê trong -{@link android.Manifest.permission android.Manifest.permission}) hoặc được khai báo -bởi các ứng dụng khác. Hoặc nó có thể tá»± định nghÄ©a quyá»n cá»§a mình. Má»™t quyá»n má»›i được khai báo -bằng phần tá» +Má»™t ứng dụng cÅ©ng có thể bảo vệ các thà nh phần cá»§a chÃnh nó (hoạt động, dịch vụ, +hà m nháºn quảng bá và trình cung cấp ná»™i dung) bằng các quyá»n. Nó có thể sá» dụng +bất kỳ quyá»n nà o được định nghÄ©a bởi Android (được liệt kê trong +{@link android.Manifest.permission android.Manifest.permission}) hoặc được khai báo +bởi các ứng dụng khác. Hoặc nó có thể tá»± định nghÄ©a quyá»n cá»§a mình. Má»™t quyá»n má»›i được khai báo +bằng phần tá» <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> . Và dụ, má»™t hoạt động có thể được bảo vệ như sau: </p> @@ -457,43 +457,43 @@ bằng phần tá» </pre> <p> -Lưu ý rằng trong và dụ nà y, quyá»n {@code DEBIT_ACCT} không chỉ -được khai báo bằng phần tá» +Lưu ý rằng trong và dụ nà y, quyá»n {@code DEBIT_ACCT} không chỉ +được khai báo bằng phần tá» <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, việc sá» dụng quyá»n cÅ©ng được yêu cầu bằng phần tá» -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> -. Phải yêu cầu sá» dụng quyá»n để các thà nh phần khác cá»§a -ứng dụng nhằm khởi chạy hoạt động được bảo vệ, mặc dù việc bảo vệ -do chÃnh ứng dụng áp đặt. +, việc sá» dụng quyá»n cÅ©ng được yêu cầu bằng phần tá» +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> +. Phải yêu cầu sá» dụng quyá»n để các thà nh phần khác cá»§a +ứng dụng nhằm khởi chạy hoạt động được bảo vệ, mặc dù việc bảo vệ +do chÃnh ứng dụng áp đặt. </p> <p> -Trong cùng và dụ nà y, nếu thuá»™c tÃnh {@code permission} được đặt thà nh má»™t quyá»n -được khai báo ở nÆ¡i khác -(chẳng hạn như {@code android.permission.CALL_EMERGENCY_NUMBERS}, sẽ không -cần phải khai báo lại nó bằng má»™t phần tá» +Trong cùng và dụ nà y, nếu thuá»™c tÃnh {@code permission} được đặt thà nh má»™t quyá»n +được khai báo ở nÆ¡i khác +(chẳng hạn như {@code android.permission.CALL_EMERGENCY_NUMBERS}, sẽ không +cần phải khai báo lại nó bằng má»™t phần tá» <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -. Tuy nhiên, sẽ vẫn cần phải yêu cầu sá» dụng nó bằng -<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. +. Tuy nhiên, sẽ vẫn cần phải yêu cầu sá» dụng nó bằng +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. </p> <p> -Phần tá» -<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> -sẽ khai báo má»™t vùng tên cho nhóm quyá»n mà sẽ được định nghÄ©a trong -mã. Và +Phần tá» +<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> +sẽ khai báo má»™t vùng tên cho nhóm quyá»n mà sẽ được định nghÄ©a trong +mã. Và <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -sẽ định nghÄ©a má»™t nhãn cho má»™t táºp hợp quyá»n (cả được khai báo trong bản kê khai bằng phần tá» -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -và được khai báo ở chá»— khác). Nó chỉ ảnh hưởng tá»›i cách các quyá»n được -nhóm lại khi được trình bà y vá»›i ngưá»i dùng. Phần tá» +sẽ định nghÄ©a má»™t nhãn cho má»™t táºp hợp quyá»n (cả được khai báo trong bản kê khai bằng phần tá» +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +và được khai báo ở chá»— khác). Nó chỉ ảnh hưởng tá»›i cách các quyá»n được +nhóm lại khi được trình bà y vá»›i ngưá»i dùng. Phần tá» <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> -không quy định những quyá»n nà o thuá»™c vá» nhóm; +không quy định những quyá»n nà o thuá»™c vá» nhóm; nó chỉ đặt cho nhóm má»™t cái tên. Má»™t quyá»n được đặt và o nhóm bằng cách gán tên nhóm vá»›i thuá»™c tÃnh cá»§a phần tá» -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -, -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +, +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> . </p> @@ -501,17 +501,17 @@ bằng cách gán tên nhóm vá»›i thuá»™c tÃnh cá»§a phần tá» <h3 id="libs">Thư viện</h3> <p> -Má»i ứng dụng Ä‘á»u được liên kết vá»›i thư viện Android mặc định, nó -bao gồm các gói cÆ¡ bản để xây dá»±ng ứng dụng (bằng các lá»›p thông dụng -chẳng hạn như Hoạt động, Dịch vụ, à định, Dạng xem, Nút, Ứng dụng, Trình cung cấp Ná»™i dung, +Má»i ứng dụng Ä‘á»u được liên kết vá»›i thư viện Android mặc định, nó +bao gồm các gói cÆ¡ bản để xây dá»±ng ứng dụng (bằng các lá»›p thông dụng +chẳng hạn như Hoạt động, Dịch vụ, à định, Dạng xem, Nút, Ứng dụng, Trình cung cấp Ná»™i dung, v.v.). </p> <p> -Tuy nhiên, má»™t số gói nằm trong thư viện cá»§a chÃnh mình. Nếu ứng dụng cá»§a bạn -sá» dụng mã từ bất kỳ gói nà o trong những gói nà y, nó phải công khai yêu cầu được liên kết -vá»›i chúng. Bản kê khai phải chứa má»™t phần tá» -<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> -riêng để đặt tên cho từng thư viện. (Tên thư viện có thể được tìm thấy trong tà i liệu +Tuy nhiên, má»™t số gói nằm trong thư viện cá»§a chÃnh mình. Nếu ứng dụng cá»§a bạn +sá» dụng mã từ bất kỳ gói nà o trong những gói nà y, nó phải công khai yêu cầu được liên kết +vá»›i chúng. Bản kê khai phải chứa má»™t phần tá» +<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> +riêng để đặt tên cho từng thư viện. (Tên thư viện có thể được tìm thấy trong tà i liệu cá»§a gói.) </p> diff --git a/docs/html-intl/intl/vi/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/vi/guide/topics/providers/calendar-provider.jd index e2ecdb32b2e8..c9d779b11483 100644 --- a/docs/html-intl/intl/vi/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/vi/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=Trình cung cấp Lịch <li><a href="#intent-view">Sá» dụng ý định để xem dữ liệu lịch</a></li> </ol> </li> - + <li><a href="#sync-adapter">Trình Ä‘iá»u hợp Äồng bá»™</a></li> </ol> @@ -63,8 +63,8 @@ các thao tác trên lịch, sá»± kiện, ngưá»i dá»±, nhắc nhở, v.v.</p> <p>API Trình cung cấp Lịch có thể được sá» dụng bởi các ứng dụng và trình Ä‘iá»u hợp đồng bá»™. Các quy tắc thay đổi tùy và o loại chương trình Ä‘ang thá»±c hiện lệnh gá»i. Tà i liệu nà y -táºp trung chá»§ yếu và o việc sá» dụng API Trình cung cấp Lịch như má»™t ứng dụng. Äể bà n -vá» việc các trình Ä‘iá»u hợp đồng bá»™ khác nhau như thế nà o, hãy xem phần +táºp trung chá»§ yếu và o việc sá» dụng API Trình cung cấp Lịch như má»™t ứng dụng. Äể bà n +vá» việc các trình Ä‘iá»u hợp đồng bá»™ khác nhau như thế nà o, hãy xem phần <a href="#sync-adapter">Trình Ä‘iá»u hợp Äồng bá»™</a>.</p> @@ -79,17 +79,17 @@ và cÅ©ng không cần cung cấp má»™t giao diện ngưá»i dùng để xem hoá <h2 id="overview">Ná»™i dung CÆ¡ bản</h2> -<p><a href="{@docRoot}guide/topics/providers/content-providers.html">Các trình cung cấp ná»™i dung</a> sẽ lưu trữ dữ liệu và cho phép truy cáºp +<p><a href="{@docRoot}guide/topics/providers/content-providers.html">Các trình cung cấp ná»™i dung</a> sẽ lưu trữ dữ liệu và cho phép truy cáºp ứng dụng. Trình cung cấp ná»™i dung được ná»n tảng Android giá»›i thiệu (bao gồm Trình cung cấp Lịch) thưá»ng trình bà y dữ liệu như má»™t táºp hợp gồm nhiá»u bảng dá»±a trên má»™t mô hình cÆ¡ sở dữ liệu quan hệ, trong đó má»—i hà ng là má»™t bản ghi và má»—i cá»™t là dữ liệu thuá»™c má»™t loại và có ý nghÄ©a cụ thể. Thông qua API Trình cung cấp Lịch, các ứng dụng và trình Ä‘iá»u hợp đồng bá»™ có thể nháºn được quyá»n truy cáºp Ä‘á»c/ghi và o các bảng trong cÆ¡ sở dữ liệu là nÆ¡i chứa dữ liệu lịch cá»§a ngưá»i dùng.</p> -<p>Má»i trình cung cấp ná»™i dung Ä‘á»u đưa ra má»™t URI công khai (được bẻ dòng như má»™t đối tượng +<p>Má»i trình cung cấp ná»™i dung Ä‘á»u đưa ra má»™t URI công khai (được bẻ dòng như má»™t đối tượng {@link android.net.Uri} ) để xác định táºp dữ liệu cá»§a nó má»™t cách duy nhất. Trình cung cấp ná»™i dung mà kiểm soát nhiá»u - táºp dữ liệu (nhiá»u bảng) sẽ đưa ra má»™t URI riêng cho từng bảng. Tất cả + táºp dữ liệu (nhiá»u bảng) sẽ đưa ra má»™t URI riêng cho từng bảng. Tất cả URI cho trình cung cấp Ä‘á»u bắt đầu bằng xâu "content://". Äiá»u nà y sẽ xác định dữ liệu là đang được kiểm soát bởi má»™t trình cung cấp ná»™i dung. Trình cung cấp Lịch định nghÄ©a các hằng số cho URI đối vá»›i từng lá»›p (bảng) cá»§a nó. Những URI @@ -113,26 +113,26 @@ các bảng chÃnh và các trưá»ng liên kết chúng vá»›i nhau.</p> </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - - <td>Bảng nà y chứa + + <td>Bảng nà y chứa thông tin riêng cá»§a lịch. Má»—i hà ng trong bảng nà y chứa chi tiết cá»§a má»™t lịch duy nhất, chẳng hạn như tên, mà u, thông tin đồng bá»™, v.v.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>Bảng nà y chứa thông tin riêng theo sá»± kiện. Má»—i hà ng trong bảng có thông tin cho má»™t sá»± kiện duy nhất—và dụ: tiêu đỠsá»± kiện, địa Ä‘iểm, thá»i gian bắt đầu , thá»i gian kết thúc, v.v. Sá»± kiện có thể xảy ra má»™t lần hoặc lặp lại nhiá»u lần. Ngưá»i dá»±, -nhắc nhở, và các tÃnh chất mở rá»™ng được lưu trữ trong các bảng riêng. -Má»—i mục Ä‘á»u có má»™t {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +nhắc nhở, và các tÃnh chất mở rá»™ng được lưu trữ trong các bảng riêng. +Má»—i mục Ä‘á»u có má»™t {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} tham chiếu tá»›i {@link android.provider.BaseColumns#_ID} trong bảng Sá»± kiện.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>Bảng nà y chứa thá»i gian bắt đầu và thá»i gian kết thúc cá»§a má»—i lần xảy ra má»™t sá»± kiện. Má»—i hà ng trong bảng nà y đại diện cho má»™t lần xảy ra sá»± kiện. Vá»›i các sá»± kiện xảy ra má»™t lần thì có má»™t ánh xạ 1:1 @@ -141,7 +141,7 @@ cá»§a thá»±c thể tá»›i sá»± kiện. Äối vá»›i các sá»± kiện định kỳ </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>Bảng nà y chứa thông tin vá» ngưá»i dá»± (khách) cá»§a sá»± kiện. Má»—i hà ng đại diện má»™t khách duy nhất cá»§a má»™t sá»± kiện. Nó quy định loại khách và phản hồi tham dá»± cá»§a khách @@ -149,17 +149,17 @@ cho má»™t sá»± kiện.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>Bảng nà y chứa dữ liệu vá» cảnh báo/thông báo. Má»—i hà ng đại diện má»™t cảnh báo duy nhất cho má»™t sá»± kiện. Má»™t sá»± kiện có thể có nhiá»u nhắc nhở. Số nhắc nhở tối Ä‘a cá»§a má»™t sá»± kiện -được quy định trong -{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, +được quy định trong +{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, được đặt bởi trình Ä‘iá»u hợp đồng bá»™ Ä‘ang sở hữu lịch đã cho. Nhắc nhở được quy định bằng số phút trước khi diá»…n ra sá»± kiện và có má»™t phương pháp để xác định cách ngưá»i dùng sẽ được cảnh báo.</td> </tr> - + </table> <p>API Trình cung cấp Lịch được thiết kế để linh hoạt và mạnh mẽ. Äồng @@ -178,9 +178,9 @@ Lịch</a>.</p> <li><strong>Trình Ä‘iá»u hợp đồng bá»™.</strong> Trình Ä‘iá»u hợp đồng bá»™ có chức năng đồng bá»™ dữ liệu lịch -lên thiết bị cá»§a má»™t ngưá»i dùng bằng má»™t máy chá»§ hoặc nguồn dữ liệu khác. Trong bảng +lên thiết bị cá»§a má»™t ngưá»i dùng bằng má»™t máy chá»§ hoặc nguồn dữ liệu khác. Trong bảng {@link android.provider.CalendarContract.Calendars} và -{@link android.provider.CalendarContract.Events}, +{@link android.provider.CalendarContract.Events}, có các cá»™t để cho trình Ä‘iá»u hợp đồng bá»™ sá» dụng. Trình cung cấp và ứng dụng không nên sá»a đổi chúng. Trên thá»±c tế, chúng không hiển thị trừ khi được truy cáºp như má»™t trình Ä‘iá»u hợp đồng bá»™. Äể biết thêm thông tin vá» @@ -209,9 +209,9 @@ phải bao gồm quyá»n {@link android.Manifest.permission#WRITE_CALENDAR} <h2 id="calendar">Bảng Lịch</h2> -<p>Bảng {@link android.provider.CalendarContract.Calendars} chứa thông tin chi tiết +<p>Bảng {@link android.provider.CalendarContract.Calendars} chứa thông tin chi tiết cho từng lịch. Các cá»™t -Lịch sau có thể ghi được bởi cả ứng dụng và <a href="#sync-adapter">trình Ä‘iá»u hợp đồng bá»™</a>. +Lịch sau có thể ghi được bởi cả ứng dụng và <a href="#sync-adapter">trình Ä‘iá»u hợp đồng bá»™</a>. Äể xem danh sách đầy đủ vá» các trưá»ng được há»— trợ, hãy xem tà i liệu tham khảo {@link android.provider.CalendarContract.Calendars}.</p> <table> @@ -229,7 +229,7 @@ Lịch sau có thể ghi được bởi cả ứng dụng và <a href="#sync-ada </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>Má»™t boolean cho biết lịch có được chá»n để hiển thị hay không. Giá trị bằng 0 cho biết các sá»± kiện liên kết vá»›i lịch nà y sẽ không được hiển thị. Giá trị bằng 1 cho biết các sá»± kiện liên kết vá»›i lịch nà y sẽ được @@ -240,10 +240,10 @@ android.provider.CalendarContract.Instances}.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>Má»™t boolean cho biết lịch sẽ được đồng bá»™ và có các sá»± kiện cá»§a mình được lưu trữ trên thiết bị hay không. Giá trị bằng 0 tức là không đồng bá»™ lịch nà y hay -lưu giữ các sá»± kiện cá»§a nó lên thiết bị. Giá trị bằng 1 tức là đồng bá»™ các sá»± kiện cho lịch nà y +lưu giữ các sá»± kiện cá»§a nó lên thiết bị. Giá trị bằng 1 tức là đồng bá»™ các sá»± kiện cho lịch nà y và lưu trữ các sá»± kiện cá»§a nó lên thiết bị.</td> </tr> </table> @@ -253,8 +253,8 @@ và lưu trữ các sá»± kiện cá»§a nó lên thiết bị.</td> <p>Sau đây là má»™t và dụ vá» cách nháºn được lịch do má»™t ngưá»i dùng cụ thể sở hữu. Äể đơn giản, trong và dụ nà y, thao tác truy vấn được thể hiện trong luồng giao diện ngưá»i dùng ("luồng chÃnh"). Trong thá»±c hà nh, nên là m Ä‘iá»u nà y trong má»™t luồng -không đồng bá»™ thay vì trên luồng chÃnh. Äể bà n thêm, hãy xem phần -<a href="{@docRoot}guide/components/loaders.html">Trình tải</a>. Nếu bạn Ä‘ang không chỉ +không đồng bá»™ thay vì trên luồng chÃnh. Äể bà n thêm, hãy xem phần +<a href="{@docRoot}guide/components/loaders.html">Trình tải</a>. Nếu bạn Ä‘ang không chỉ Ä‘á»c dữ liệu mà còn sá»a đổi nó, hãy xem {@link android.content.AsyncQueryHandler}. </p> @@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Tại sao bạn phải nêu ACCOUNT_TYPE?</h3> <p>Nếu bạn truy vấn trên má»™t {@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME -Calendars.ACCOUNT_NAME}, bạn cÅ©ng phải nêu +Calendars.ACCOUNT_NAME}, bạn cÅ©ng phải nêu {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE} trong lá»±a chá»n. Äó là vì má»™t tà i khoản đã cho chỉ được coi là duy nhất nếu có cả <code>ACCOUNT_NAME</code> và @@ -289,7 +289,7 @@ trình xác thá»±c tà i khoản mà đã được sá» dụng khi tà i khoản Ä android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} dà nh cho các lịch không liên kết vá»›i má»™t tà i khoản thiết bị. Tà i khoản {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} không được -đồng bá»™.</p> </div> </div> +đồng bá»™.</p> </div> </div> <p> Trong phần tiếp theo cá»§a và dụ, bạn sẽ xây dá»±ng truy vấn cá»§a mình. Lá»±a chá»n @@ -301,58 +301,58 @@ các lịch có <code>ACCOUNT_NAME</code> đã xem, không chỉ các lịch mà ngưá»i dùng sở hữu, hãy bá» qua <code>OWNER_ACCOUNT</code>. Truy vấn sẽ trả vỠđối tượng {@link android.database.Cursor} mà bạn có thể sá» dụng để xem xét táºp kết quả được trả vá» bởi truy vấn -cÆ¡ sở dữ liệu. Äể bà n thêm vá» việc sá» dụng các truy vấn trong trình cung cấp ná»™i dung, +cÆ¡ sở dữ liệu. Äể bà n thêm vá» việc sá» dụng các truy vấn trong trình cung cấp ná»™i dung, hãy xem phần <a href="{@docRoot}guide/topics/providers/content-providers.html">Trình cung cấp Ná»™i dung</a>.</p> <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>Phần tiếp theo sá» dụng con chạy để duyệt qua táºp kết quả. Nó sá» dụng các hằng số được thiết láºp ngay từ đầu và dụ để trả vá» các giá trị cho má»—i trưá»ng.</p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">Sá»a đổi má»™t lịch</h3> <p>Äể thá»±c hiện cáºp nháºt má»™t lịch, bạn có thể cung cấp {@link android.provider.BaseColumns#_ID} cá»§a lịch hoặc dưới dạng ID được nối và o cho -Uri +Uri -({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) hoặc dưới dạng mục chá»n đầu tiên. Lá»±a chá»n nên bắt đầu bằng <code>"_id=?"</code>, và <code>selectionArg</code> đầu tiên sẽ là {@link -android.provider.BaseColumns#_ID} cá»§a lịch. +android.provider.BaseColumns#_ID} cá»§a lịch. Bạn cÅ©ng có thể thá»±c hiện cáºp nháºt bằng cách mã hoÌa ID trong URI. Và dụ nà y thay đổi tên hiển thị -cá»§a má»™t lịch bằng cách sá» dụng phương pháp +cá»§a má»™t lịch bằng cách sá» dụng phương pháp ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) :</p> @@ -375,7 +375,7 @@ má»™t ứng dụng cần tạo má»™t lịch cục bá»™, nó có thể là m Ä‘iá» chèn lịch dưới dạng má»™t trình Ä‘iá»u hợp đồng bá»™, sá» dụng {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} cá»§a {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. -{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} +{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} là má»™t loại tà i khoản đặc biệt dà nh cho các lịch không liên kết vá»›i má»™t tà i khoản thiết bị. Các lịch loại nà y không được đồng bá»™ vá»›i má»™t máy chá»§. Äể bà n vá» trình Ä‘iá»u hợp đồng bá»™, hãy xem phần <a href="#sync-adapter">Trình Ä‘iá»u hợp Äồng bá»™</a>.</p> @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events}.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>Thá»i lượng cá»§a sá»± kiện theo định dạng <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a>. Và dụ, giá trị bằng <code>"PT1H"</code> cho biết sá»± kiện sẽ kéo dà i má»™t giá» và giá trị bằng <code>"P2W"</code> cho biết @@ -444,39 +444,39 @@ thá»i lượng là 2 tuần. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>Giá trị bằng 1 cho biết sá»± kiện nà y chiếm cả ngà y, được xác định bởi múi giá» tại địa phương. Giá trị bằng 0 cho biết đó là má»™t sá»± kiện thưá»ng xuyên mà có thể bắt đầu và kết thúc và o bất cứ lúc nà o trong má»™t ngà y.</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>Quy tắc lặp lại đối vá»›i định dạng sá»± kiện. Và dụ, <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Bạn có thể tìm thêm nhiá»u và dụ hÆ¡n <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">ở đây</a>.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>Ngà y lặp lại đối vá»›i sá»± kiện. - Bạn thưá»ng sá» dụng {@link android.provider.CalendarContract.EventsColumns#RDATE} - cùng vá»›i {@link android.provider.CalendarContract.EventsColumns#RRULE} + <td>Ngà y lặp lại đối vá»›i sá»± kiện. + Bạn thưá»ng sá» dụng {@link android.provider.CalendarContract.EventsColumns#RDATE} + cùng vá»›i {@link android.provider.CalendarContract.EventsColumns#RRULE} để định nghÄ©a má»™t táºp tổng hợp các trưá»ng hợp xảy ra lặp lại. Äể bà n thêm, hãy xem phần <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 spec</a>.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - - <td>Xem sá»± kiện nà y được tÃnh là thá»i gian báºn hay là thá»i gian rảnh có thể được + + <td>Xem sá»± kiện nà y được tÃnh là thá»i gian báºn hay là thá»i gian rảnh có thể được xếp lại lịch. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}. Lưu ý rằng quy tắc nà y không áp bạn Ä‘ang chèn má»™t sá»± kiện thông qua à định {@link android.content.Intent#ACTION_INSERT INSERT} như được mô tả trong <a href="#intent-insert">Sá» dụng ý định để chèn má»™t sá»± kiện</a>—trong kịch bản đó, má»™t múi giá» mặc định sẽ được cung cấp.</li> - + <li>Äối vá»›i các sá»± kiện không định kỳ, bạn phải đưa và o {@link android.provider.CalendarContract.EventsColumns#DTEND}. </li> - - + + <li>Äối vá»›i các sá»± kiện định kỳ, bạn phải đưa và o má»™t {@link android.provider.CalendarContract.EventsColumns#DURATION} bên cạnh {@link android.provider.CalendarContract.EventsColumns#RRULE} hay {@link @@ -526,9 +526,9 @@ android.provider.CalendarContract.EventsColumns#RDATE}. Lưu ý rằng quy tắc bạn Ä‘ang chèn má»™t sá»± kiện thông qua à định {@link android.content.Intent#ACTION_INSERT INSERT} như được mô tả trong <a href="#intent-insert">Sá» dụng ý định để chèn má»™t sá»± kiện</a>—trong kịch bản đó, bạn có thể sá» dụng má»™t {@link -android.provider.CalendarContract.EventsColumns#RRULE} cùng vá»›i {@link android.provider.CalendarContract.EventsColumns#DTSTART} và {@link android.provider.CalendarContract.EventsColumns#DTEND}, và ứng dụng Lịch +android.provider.CalendarContract.EventsColumns#RRULE} cùng vá»›i {@link android.provider.CalendarContract.EventsColumns#DTSTART} và {@link android.provider.CalendarContract.EventsColumns#DTEND}, và ứng dụng Lịch sẽ tá»± động chuyển nó thà nh má»™t thá»i lượng.</li> - + </ul> <p>Sau đây là má»™t và dụ vá» cách chèn má»™t sá»± kiện. Và dụ nà y Ä‘ang được thá»±c hiện trong luồng @@ -539,8 +539,8 @@ thông tin, hãy xem phần {@link android.content.AsyncQueryHandler}.</p> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -578,14 +578,14 @@ ngưá»i dá»± hoặc nhắc nhở và o má»™t sá»± kiện.</p> bạn nên sá» dụng má»™t à định {@link android.content.Intent#ACTION_EDIT EDIT} như được mô tả trong <a href="#intent-edit">Sá» dụng ý định để chỉnh sá»a má»™t sá»± kiện</a>. Tuy nhiên, nếu cần, bạn có thể chỉnh sá»a sá»± kiện trá»±c tiếp. Äể thá»±c hiện cáºp nháºt -má»™t Sá»± kiện, bạn có thể cung cấp <code>_ID</code> cá»§a sá»± kiện +má»™t Sá»± kiện, bạn có thể cung cấp <code>_ID</code> cá»§a sá»± kiện hoặc dưới dạng ID được nối và o cho Uri ({@link -android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) -hoặc dưới dạng mục chá»n đầu tiên. +android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +hoặc dưới dạng mục chá»n đầu tiên. Lá»±a chá»n nên bắt đầu bằng <code>"_id=?"</code>, và <code>selectionArg</code> đầu tiên nên là <code>_ID</code> cá»§a sá»± kiện. Bạn cÅ©ng có thể thá»±c hiện cáºp nháºt bằng cách sá» dụng má»™t lá»±a chá»n không có ID. Sau đây là má»™t và dụ vá» cách cáºp nháºt má»™t -sá»± kiện. Nó thay đổi tiêu đỠcá»§a sá»± kiện bằng cách sá» dụng phương pháp +sá»± kiện. Nó thay đổi tiêu đỠcá»§a sá»± kiện bằng cách sá» dụng phương pháp {@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()} :</p> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,22 +625,22 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Bảng Ngưá»i dá»±</h2> <p>Má»—i hà ng cá»§a bảng {@link android.provider.CalendarContract.Attendees} đại diện -cho má»™t ngưá»i dá»± hoặc khách duy nhất cá»§a má»™t sá»± kiện. Gá»i -{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} +cho má»™t ngưá»i dá»± hoặc khách duy nhất cá»§a má»™t sá»± kiện. Gá»i +{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} sẽ trả vá» má»™t danh sách ngưá»i dá»± cho sá»± kiện -vá»›i {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} đã cho. +vá»›i {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} đã cho. {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} nà y phải khá»›p vá»›i {@link -android.provider.BaseColumns#_ID} cá»§a má»™t sá»± kiện cụ thể.</p> +android.provider.BaseColumns#_ID} cá»§a má»™t sá»± kiện cụ thể.</p> <p>Bảng sau liệt kê các trưá»ng -có thể ghi được. Khi chèn má»™t ngưá»i dá»± má»›i, bạn phải Ä‘iá»n tất cả +có thể ghi được. Khi chèn má»™t ngưá»i dá»± má»›i, bạn phải Ä‘iá»n tất cả ngoại trừ <code>ATTENDEE_NAME</code>. </p> @@ -698,7 +698,7 @@ ngoại trừ <code>ATTENDEE_NAME</code>. <h3 id="add-attendees">Thêm Ngưá»i dá»±</h3> <p>Sau đây là má»™t và dụ vá» cách thêm má»™t ngưá»i dá»± và o má»™t sá»± kiện. Lưu ý rằng -{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} là bắt buá»™c:</p> <pre> @@ -718,17 +718,17 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">Bảng Nhắc nhở</h2> <p>Má»—i hà ng cá»§a bảng {@link android.provider.CalendarContract.Reminders} đại diện -cho má»™t nhắc nhở cá»§a má»™t sá»± kiện. Gá»i +cho má»™t nhắc nhở cá»§a má»™t sá»± kiện. Gá»i {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} sẽ trả vá» má»™t danh sách nhắc nhở cho -sá»± kiện vá»›i +sá»± kiện vá»›i {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} đã cho.</p> <p>Bảng sau liệt kê các trưá»ng ghi được đối vá»›i nhắc nhở. Tất cả Ä‘á»u phải được đưa và o khi chèn má»™t nhắc nhở má»›i. Lưu ý rằng các trình Ä‘iá»u hợp đồng bá»™ quy định các loại nhắc nhở chúng há»— trợ trong bảng {@link -android.provider.CalendarContract.Calendars}. Xem -{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} +android.provider.CalendarContract.Calendars}. Xem +{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} để biết chi tiết.</p> @@ -773,16 +773,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <h2 id="instances">Bảng Thá»±c thể</h2> -<p>Bảng +<p>Bảng {@link android.provider.CalendarContract.Instances} chứa thá»i gian bắt đầu và thá»i gian kết thúc cá»§a các lần xảy ra má»™t sá»± kiện. Má»—i hà ng trong bảng nà y đại diện cho má»™t lần xảy ra sá»± kiện. Bảng thá»±c thể không ghi được và chỉ đưa ra má»™t cách để truy vấn các lần xảy ra sá»± kiện. </p> -<p>Bảng sau liệt kê má»™t số trưá»ng mà bạn có thể truy vấn đối vá»›i má»™t thá»±c thể. Lưu ý -rằng múi giỠđược định nghÄ©a bởi -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -và +<p>Bảng sau liệt kê má»™t số trưá»ng mà bạn có thể truy vấn đối vá»›i má»™t thá»±c thể. Lưu ý +rằng múi giỠđược định nghÄ©a bởi +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} +và {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p> @@ -801,18 +801,18 @@ và </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>Ngà y kết thúc theo lịch Julian cá»§a thá»±c thể theo múi giá» -cá»§a Lịch. - +cá»§a Lịch. + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>Phút kết thúc cá»§a thá»±c thể được xác định từ ná»a đêm theo múi giá» cá»§a Lịch.</td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ cá»§a Lịch.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>Ngà y bắt đầu theo lịch Julian cá»§a thá»±c thể theo múi giá» cá»§a Lịch. + <td>Ngà y bắt đầu theo lịch Julian cá»§a thá»±c thể theo múi giá» cá»§a Lịch. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>Phút bắt đầu cá»§a thá»±c thể được xác định từ ná»a đêm theo múi giá» -cá»§a Lịch. +cá»§a Lịch. </td> - + </tr> </table> @@ -840,7 +840,7 @@ cá»§a Lịch. trong URI. Trong và dụ nà y, {@link android.provider.CalendarContract.Instances} có quyá»n truy cáºp trưá»ng {@link android.provider.CalendarContract.EventsColumns#TITLE} thông qua việc -triển khai giao diện {@link android.provider.CalendarContract.EventsColumns} cá»§a nó. +triển khai giao diện {@link android.provider.CalendarContract.EventsColumns} cá»§a nó. Nói cách khác, {@link android.provider.CalendarContract.EventsColumns#TITLE} được trả vá» qua má»™t chế độ xem cÆ¡ sở dữ liệu, chứ không qua việc truy vấn bảng {@link @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -922,9 +922,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - Bạn cÅ©ng có thể tham khảo tá»›i URI bằng -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. -Äể xem má»™t và dụ vá» cách sá» dụng ý định nà y, hãy xem <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Sá» dụng ý định để xem dữ liệu lịch</a>. + Bạn cÅ©ng có thể tham khảo tá»›i URI bằng +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. +Äể xem má»™t và dụ vá» cách sá» dụng ý định nà y, hãy xem <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Sá» dụng ý định để xem dữ liệu lịch</a>. </td> <td>Mở lịch đến thá»i gian được chỉ định bởi <code><ms_since_epoch></code>.</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - Bạn cÅ©ng có thể tham khảo tá»›i URI bằng -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Bạn cÅ©ng có thể tham khảo tá»›i URI bằng +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Äể xem má»™t và dụ vá» cách sá» dụng ý định nà y, hãy xem <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Sá» dụng ý định để xem dữ liệu lịch</a>. - + </td> <td>Xem sá»± kiện được chỉ định bởi <code><event_id></code>.</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - Bạn cÅ©ng có thể tham khảo tá»›i URI bằng -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Bạn cÅ©ng có thể tham khảo tá»›i URI bằng +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Äể xem má»™t và dụ vá» cách sá» dụng ý định nà y, hãy xem <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Sá» dụng ý định để chỉnh sá»a má»™t sá»± kiện</a>. - - + + </td> <td>Chỉnh sá»a sá»± kiện được chỉ định bởi <code><event_id></code>.</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - Bạn cÅ©ng có thể tham khảo tá»›i URI bằng -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + Bạn cÅ©ng có thể tham khảo tá»›i URI bằng +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. Äể xem má»™t và dụ vá» cách sá» dụng ý định nà y, hãy xem <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Sá» dụng ý định để chèn má»™t sá»± kiện</a>. - + </td> <td>Tạo má»™t sá»± kiện.</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>Tên cho sá»± kiện.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>Thá»i gian bắt đầu sá»± kiện tÃnh bằng mili giây trôi qua kể từ giá» epoch.</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>Thá»i gian kết thúc sá»± kiện tÃnh bằng mili giây trôi qua kể từ giá» epoch.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>Má»™t boolean cho biết đó là má»™t sá»± kiện cả ngà y. Giá trị có thể bằng <code>true</code> hoặc <code>false</code>.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>Äịa Ä‘iểm cá»§a sá»± kiện.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>Mô tả sá»± kiện.</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>Sá»± kiện là riêng tư hay công khai.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>Xem sá»± kiện nà y tÃnh là thá»i gian báºn hay là thá»i gian rảnh có thể được xếp lại lịch.</td> - -</table> + +</table> <p>Các phần sau mô tả cách sá» dụng những ý định nà y.</p> @@ -1059,23 +1059,23 @@ Events.AVAILABILITY}</td> Bằng cách nà y, ứng dụng cá»§a bạn tháºm chà không cần phải có quyá»n {@link android.Manifest.permission#WRITE_CALENDAR} được bao gồm trong <a href="#manifest">tệp bản kê khai</a> cá»§a mình.</p> - + <p>Khi ngưá»i dùng chạy má»™t ứng dụng mà sá» dụng cách nà y, ứng dụng sẽ gá»i chúng tá»›i Lịch để hoà n thà nh việc thêm má»™t sá»± kiện. à định {@link android.content.Intent#ACTION_INSERT INSERT} sá» dụng các trưá»ng phụ thêm để Ä‘iá»n trước và o má»™t mẫu bằng các chi tiết cá»§a sá»± kiện trong Lịch. Khi đó, ngưá»i dùng có thể há»§y bá» sá»± kiện, chỉnh sá»a mẫu nếu cần, hoặc lưu sá»± kiện và o lịch cá»§a mình.</p> - + <p>Sau đây là má»™t Ä‘oạn mã HTML láºp biểu má»™t sá»± kiện và o ngà y 19/1/2012, diá»…n ra từ 7:30 sáng đến 8:30 sáng. Lưu ý Ä‘iá»u sau đây vá» Ä‘oạn mã HTML nà y:</p> <ul> - <li>Nó quy định {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} + <li>Nó quy định {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} là Uri.</li> - + <li>Nó sá» dụng các trưá»ng phụ {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} và {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} để Ä‘iá»n trước thá»i gian cá»§a sá»± kiện và o mẫu. Các giá trị đối vá»›i những thá»i gian nà y phải tÃnh bằng mili giây UTC trôi qua kể từ giá» epoch.</li> - + <li>Nó sá» dụng trưá»ng phụ {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} để cung cấp má»™t danh sách ngưá»i được má»i phân cách bằng dấu phẩy, được chỉ định theo địa chỉ e-mail.</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,18 +1158,18 @@ truy cáºp Trình cung cấp Lịch:</p> <ul> <li>Trình Ä‘iá»u hợp đồng bá»™ cần chỉ định rằng nó là má»™t trình Ä‘iá»u hợp đồng bá»™ bằng cách đặt {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} thà nh <code>true</code>.</li> - - + + <li>Trình Ä‘iá»u hợp đồng bá»™ cần cung cấp má»™t {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} và má»™t {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} là m tham số truy vấn trong URI. </li> - + <li>Trình Ä‘iá»u hợp đồng bá»™ có quyá»n truy nháºp ghi và o nhiá»u cá»™t hÆ¡n ứng dụng hay widget. - Và dụ, má»™t ứng dụng chỉ có thể sá»a đổi má»™t và i đặc Ä‘iểm cá»§a má»™t lịch, + Và dụ, má»™t ứng dụng chỉ có thể sá»a đổi má»™t và i đặc Ä‘iểm cá»§a má»™t lịch, chẳng hạn như tên lịch, tên hiển thị, thiết đặt hiển thị, và lịch có được đồng bá»™ hay không. Nếu so sánh, má»™t trình Ä‘iá»u hợp đồng bá»™ có thể truy cáºp không chỉ những cá»™t đó, mà còn nhiá»u cá»™t khác, chẳng hạn như mà u lịch, múi giá», mức truy nháºp, địa Ä‘iểm, v.v. -Tuy nhiên, trình Ä‘iá»u hợp đồng bá»™ bị hạn chế đối vá»›i <code>ACCOUNT_NAME</code> và +Tuy nhiên, trình Ä‘iá»u hợp đồng bá»™ bị hạn chế đối vá»›i <code>ACCOUNT_NAME</code> và <code>ACCOUNT_TYPE</code> mà nó quy định.</li> </ul> <p>Sau đây là má»™t phương pháp hữu Ãch hÆ¡n mà bạn có thể sá» dụng để trả vá» má»™t URI để dùng vá»›i má»™t trình Ä‘iá»u hợp đồng bá»™:</p> @@ -1180,5 +1180,5 @@ Tuy nhiên, trình Ä‘iá»u hợp đồng bá»™ bị hạn chế đối vá»›i <cod .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>Äể biết việc triển khai mẫu trình Ä‘iá»u hợp đồng bá»™ (không liên quan cụ thể tá»›i Lịch), hãy xem phần +<p>Äể biết việc triển khai mẫu trình Ä‘iá»u hợp đồng bá»™ (không liên quan cụ thể tá»›i Lịch), hãy xem phần <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>. diff --git a/docs/html-intl/intl/vi/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/vi/guide/topics/providers/contacts-provider.jd index 2fa2ed3c9bdf..2d94e10c7ab8 100644 --- a/docs/html-intl/intl/vi/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/vi/guide/topics/providers/contacts-provider.jd @@ -253,7 +253,7 @@ page.title=Trình cung cấp Danh bạ Và dụ, nếu bạn muốn ứng dụng cá»§a mình duy trì dữ liệu danh bạ cho dịch vụ dá»±a trên ná»n web cá»§a mình vá»›i miá»n {@code com.example.dataservice}, và tà i khoản cá»§a ngưá»i dùng cho dịch vụ cá»§a bạn là {@code becky.sharp@dataservice.example.com}, trước tiên, ngưá»i dùng phải thêm - "loại" tà i khoản ({@code com.example.dataservice}) và "tên" tà i khoản + "loại" tà i khoản ({@code com.example.dataservice}) và "tên" tà i khoản ({@code becky.smart@dataservice.example.com}) trước khi ứng dụng cá»§a bạn có thể thêm hà ng liên lạc thô. Bạn có thể giải thÃch yêu cầu nà y vá»›i ngưá»i dùng bằng tà i liệu, hoặc bạn có thể nhắc ngưá»i dùng thêm loại và tên nà y, hoặc cả hai. Loại tà i khoản và tên tà i khoản @@ -1697,7 +1697,7 @@ startActivity(insertIntent); <p> Nếu dịch vụ chấp nháºn thông tin xác thá»±c, trình xác thá»±c có thể lưu giữ thông tin xác thá»±c đó để sá» dụng sau. Vì khuôn khổ trình xác thá»±c bổ trợ, - {@link android.accounts.AccountManager} có thể cung cấp quyá»n truy cáºp bất kỳ token xác thá»±c nà o mà má»™t trình xác thá»±c + {@link android.accounts.AccountManager} có thể cung cấp quyá»n truy cáºp bất kỳ token xác thá»±c nà o mà má»™t trình xác thá»±c há»— trợ và chá»n hiện ra, chẳng hạn như token xác thá»±c OAuth2. </p> <p> @@ -1821,7 +1821,7 @@ mà cung cấp dữ liệu cụ thể cho </dl> <h2 id="SocialStream">Dữ liệu từ Luồng Xã há»™i</h2> <p> - Các bảng {@code android.provider.ContactsContract.StreamItems} và + Các bảng {@code android.provider.ContactsContract.StreamItems} và {@code android.provider.ContactsContract.StreamItemPhotos} quản lý dữ liệu đến từ các mạng xã há»™i. Bạn có thể ghi má»™t trình Ä‘iá»u hợp đồng bá»™ mà thêm dữ liệu luồng từ mạng cá»§a chÃnh mình và o những bảng nà y, hoặc bạn có thể Ä‘á»c dữ liệu luồng từ những bảng nà y và @@ -1830,7 +1830,7 @@ mà cung cấp dữ liệu cụ thể cho </p> <h3 id="StreamText">Văn bản từ luồng xã há»™i</h3> <p> - Các mục dòng dữ liệu luôn được liên kết vá»›i má»™t liên lạc thô. + Các mục dòng dữ liệu luôn được liên kết vá»›i má»™t liên lạc thô. {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID} liên kết vá»›i giá trị <code>_ID</code> cá»§a liên lạc thô má»›i. Loại tà i khoản và tên tà i khoản cá»§a liên lạc thô cÅ©ng được lưu giữ trong hà ng mục dòng. @@ -1934,7 +1934,7 @@ mà cung cấp dữ liệu cụ thể cho Cá»™t nà y có sẵn để tương thÃch ngược vá»›i các phiên bản trước cá»§a Trình cung cấp Danh bạ mà đã sá» dụng nó để lưu giữ ảnh. Tuy nhiên, trong phiên bản hiện tại bạn không nên sá» dụng cá»™t nà y để lưu giữ ảnh. Thay và o đó, hãy sá» dụng - hoặc {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} hoặc + hoặc {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} hoặc {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI} (cả hai Ä‘á»u được mô tả trong các Ä‘iểm sau) để lưu giữ ảnh trong má»™t tệp. Lúc nà y, cá»™t nà y chứa má»™t hình thu nhá» cá»§a ảnh sẵn sà ng để Ä‘á»c. @@ -2344,7 +2344,7 @@ mà cung cấp dữ liệu cụ thể cho việc truy xuất thông tin ảnh. Không có lá»›p thuáºn tiện cho việc truy xuất hình thu nhá» chÃnh đối vá»›i má»™t liên lạc thô, nhưng bạn có thể gá»i má»™t truy vấn tá»›i bảng {@link android.provider.ContactsContract.Data}, chá»n - {@code android.provider.BaseColumns#_ID} cá»§a liên lạc thô, + {@code android.provider.BaseColumns#_ID} cá»§a liên lạc thô, {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE Photo.CONTENT_ITEM_TYPE}, và cá»™t {@link android.provider.ContactsContract.Data#IS_PRIMARY} để tìm hà ng ảnh chÃnh cá»§a liên lạc thô. diff --git a/docs/html-intl/intl/vi/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/vi/guide/topics/providers/content-provider-basics.jd index 5f868cacf5ae..808c0f712a34 100644 --- a/docs/html-intl/intl/vi/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/vi/guide/topics/providers/content-provider-basics.jd @@ -236,7 +236,7 @@ page.title=Ná»™i dung CÆ¡ bản vá» Trình cung cấp Ná»™i dung Và dụ, để có má»™t danh sách các từ và ná»™i dung bản địa cá»§a chúng từ Trình cung cấp Từ Ä‘iển Ngưá»i dùng, bạn hãy gá»i {@link android.content.ContentResolver#query ContentResolver.query()}. Phương pháp {@link android.content.ContentResolver#query query()} sẽ gá»i phương pháp - {@link android.content.ContentProvider#query ContentProvider.query()} được định nghÄ©a bởi + {@link android.content.ContentProvider#query ContentProvider.query()} được định nghÄ©a bởi Trình cung cấp Từ Ä‘iển Ngưá»i dùng. Các dòng mã sau thể hiện má»™t lệnh gá»i {@link android.content.ContentResolver#query ContentResolver.query()}: <p> @@ -251,7 +251,7 @@ mCursor = getContentResolver().query( </pre> <p> Bảng 2 cho biết các tham đối tá»›i - {@link android.content.ContentResolver#query + {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} khá»›p vá»›i má»™t câu lệnh SQL SELECT như thế nà o: </p> <p class="table-caption"> @@ -292,7 +292,7 @@ mCursor = getContentResolver().query( <td align="center"><code>sortOrder</code></td> <td align="center"><code>ORDER BY <em>col,col,...</em></code></td> <td> - <code>sortOrder</code> quy định thứ tá»± các hà ng xuất hiện trong + <code>sortOrder</code> quy định thứ tá»± các hà ng xuất hiện trong {@link android.database.Cursor} được trả vá». </td> </tr> @@ -344,7 +344,7 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </p> <p class="note"> <strong>Lưu ý:</strong> Các lá»›p {@link android.net.Uri} và {@link android.net.Uri.Builder} - chứa các phương pháp thuáºn tiện để xây dá»±ng đối tượng URI định dạng tốt từ các xâu. + chứa các phương pháp thuáºn tiện để xây dá»±ng đối tượng URI định dạng tốt từ các xâu. {@link android.content.ContentUris} chứa các phương pháp thuáºn tiện để nối các giá trị id vá»›i má»™t URI. Äoạn mã HTML trước sá» dụng {@link android.content.ContentUris#withAppendedId withAppendedId()} để nối má»™t id vá»›i URI ná»™i dung Từ Ä‘iển Ngưá»i dùng. @@ -359,8 +359,8 @@ withAppendedId()} để nối má»™t id vá»›i URI ná»™i dung Từ Ä‘iển NgưỠ</p> <p class="note"> Äể giải thÃch rõ, Ä‘oạn mã HTML trong phần nà y gá»i - {@link android.content.ContentResolver#query ContentResolver.query()} trên "luồng UI"". Tuy nhiên, trong - mã thá»±c sá»±, bạn nên thá»±c hiện các truy vấn không đồng bá»™ trên má»™t luồng riêng. Má»™t cách để là m + {@link android.content.ContentResolver#query ContentResolver.query()} trên "luồng UI"". Tuy nhiên, trong + mã thá»±c sá»±, bạn nên thá»±c hiện các truy vấn không đồng bá»™ trên má»™t luồng riêng. Má»™t cách để là m Ä‘iá»u nà y đó là sá» dụng lá»›p {@link android.content.CursorLoader}, nó được mô tả chi tiết hÆ¡n trong hướng dẫn <a href="{@docRoot}guide/components/loaders.html"> Trình tải</a>. Bênh cạnh đó, các dòng mã chỉ là đoạn mã HTML; chúng không thể hiện má»™t ứng dụng @@ -428,7 +428,7 @@ String[] mSelectionArgs = {""}; <p> Äoạn mã HTML tiếp theo cho biết cách sá» dụng {@link android.content.ContentResolver#query ContentResolver.query()}, bằng cách sá» dụng Trình cung cấp Từ Ä‘iển - Ngưá»i dùng như má»™t và dụ. Truy vấn máy khách trình cung cấp tương tá»± như má»™t truy vấn SQL, và nó chứa má»™t + Ngưá»i dùng như má»™t và dụ. Truy vấn máy khách trình cung cấp tương tá»± như má»™t truy vấn SQL, và nó chứa má»™t táºp hợp các cá»™t để trả vá», má»™t táºp hợp các tiêu chà lá»±a chá»n, và má»™t thứ tá»± sắp xếp. </p> <p> @@ -438,8 +438,8 @@ String[] mSelectionArgs = {""}; <p> Biểu thức để chỉ định các hà ng cần truy xuất sẽ được chia thà nh má»™t mệnh đỠlá»±a chá»n và tham đối lá»±a chá»n. Mệnh đỠlá»±a chá»n là sá»± kết hợp giữa các biểu thức lô-gic và biểu thức Boolean, - tên cá»™t, và giá trị (biến <code>mSelectionClause</code>). Nếu bạn chỉ định - tham số thay thế được <code>?</code> thay vì má»™t giá trị, phương pháp truy vấn sẽ truy xuất giá trị + tên cá»™t, và giá trị (biến <code>mSelectionClause</code>). Nếu bạn chỉ định + tham số thay thế được <code>?</code> thay vì má»™t giá trị, phương pháp truy vấn sẽ truy xuất giá trị từ mảng tham đối lá»±a chá»n (biến <code>mSelectionArgs</code>). </p> <p> @@ -565,14 +565,14 @@ selectionArgs[0] = mUserInput; <!-- Displaying the results --> <h3 id="DisplayResults">Hiển thị các kết quả truy vấn</h3> <p> - Phương pháp máy khách {@link android.content.ContentResolver#query ContentResolver.query()} luôn trả vá» - má»™t {@link android.database.Cursor} chứa các cá»™t được chỉ định bởi dá»± thảo cá»§a - truy vấn cho các hà ng khá»›p vá»›i các tiêu chà lá»±a chá»n cá»§a truy vấn. Má»™t đối tượng - {@link android.database.Cursor} cung cấp truy cáºp Ä‘á»c ngẫu nhiên và o các hà ng và cá»™t mà nó - chứa. Bằng cách sá» dụng phương pháp {@link android.database.Cursor}, bạn có thể lặp lại các hà ng trong + Phương pháp máy khách {@link android.content.ContentResolver#query ContentResolver.query()} luôn trả vá» + má»™t {@link android.database.Cursor} chứa các cá»™t được chỉ định bởi dá»± thảo cá»§a + truy vấn cho các hà ng khá»›p vá»›i các tiêu chà lá»±a chá»n cá»§a truy vấn. Má»™t đối tượng + {@link android.database.Cursor} cung cấp truy cáºp Ä‘á»c ngẫu nhiên và o các hà ng và cá»™t mà nó + chứa. Bằng cách sá» dụng phương pháp {@link android.database.Cursor}, bạn có thể lặp lại các hà ng trong kết quả, xác định kiểu dữ liệu cá»§a từng cá»™t, lấy dữ liệu ra khá»i cá»™t, và kiểm tra các tÃnh chất khác - cá»§a kết quả. Má»™t số triển khai {@link android.database.Cursor} sẽ tá»± động - cáºp nháºt đối tượng khi dữ liệu cá»§a trình cung cấp thay đổi, hoặc kÃch khởi các phương pháp trong má»™t đối tượng quan sát + cá»§a kết quả. Má»™t số triển khai {@link android.database.Cursor} sẽ tá»± động + cáºp nháºt đối tượng khi dữ liệu cá»§a trình cung cấp thay đổi, hoặc kÃch khởi các phương pháp trong má»™t đối tượng quan sát khi {@link android.database.Cursor} thay đổi, hoặc cả hai. </p> <p class="note"> @@ -703,14 +703,14 @@ if (mCursor != null) { <p> Äể nháºn các quyá»n cần để truy cáºp má»™t trình cung cấp, ứng dụng yêu cầu chúng bằng má»™t phần tá» <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> - trong tệp bản kê khai cá»§a nó. Khi Trình quản lý Gói Android cà i đặt các ứng dụng, ngưá»i dùng + trong tệp bản kê khai cá»§a nó. Khi Trình quản lý Gói Android cà i đặt các ứng dụng, ngưá»i dùng phải phê chuẩn tất cả quyá»n mà ứng dụng yêu cầu. Nếu ngưá»i dùng phê chuẩn tất cả quyá»n, khi đó Trình quản lý Gói sẽ tiếp tục cà i đặt; nếu ngưá»i dùng không phê chuẩn chúng, Trình quản lý Gói sẽ há»§y bá» việc cà i đặt. </p> <p> Phần tá» -<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> sau yêu cầu quyá»n truy cáºp Ä‘á»c và o Trình cung cấp Từ Ä‘iển Ngưá»i dùng: </p> <pre> @@ -793,8 +793,8 @@ content://user_dictionary/words/<id_value> Äể cáºp nháºt má»™t hà ng, bạn sá» dụng má»™t đối tượng {@link android.content.ContentValues} vá»›i các giá trị được cáºp nhật giống như cách bạn là m vá»›i việc chèn, và các tiêu chà lá»±a chá»n giống như cách bạn là m vá»›i truy vấn. Phương pháp máy khách mà bạn sá» dụng là - {@link android.content.ContentResolver#update ContentResolver.update()}. Bạn chỉ cần thêm - các giá trị và o đối tượng {@link android.content.ContentValues} cho các cá»™t mà bạn Ä‘ang cáºp nháºt. Nếu bạn + {@link android.content.ContentResolver#update ContentResolver.update()}. Bạn chỉ cần thêm + các giá trị và o đối tượng {@link android.content.ContentValues} cho các cá»™t mà bạn Ä‘ang cáºp nháºt. Nếu bạn muốn xóa các ná»™i dung cá»§a má»™t cá»™t, hãy đặt giá trị thà nh <code>null</code>. </p> <p> @@ -828,7 +828,7 @@ mRowsUpdated = getContentResolver().update( </pre> <p> Bạn cÅ©ng nên thanh lá»c thông tin đầu và o cá»§a ngưá»i dùng khi gá»i - {@link android.content.ContentResolver#update ContentResolver.update()}. Äể tìm hiểu thêm vá» + {@link android.content.ContentResolver#update ContentResolver.update()}. Äể tìm hiểu thêm vá» Ä‘iá»u nà y, hãy Ä‘á»c phần <a href="#Injection">Bảo vệ trước mục nháºp độc hại</a>. </p> <h3 id="Deleting">Xóa dữ liệu</h3> @@ -858,7 +858,7 @@ mRowsDeleted = getContentResolver().delete( </pre> <p> Bạn cÅ©ng nên thanh lá»c thông tin đầu và o cá»§a ngưá»i dùng khi gá»i - {@link android.content.ContentResolver#delete ContentResolver.delete()}. Äể tìm hiểu thêm vá» + {@link android.content.ContentResolver#delete ContentResolver.delete()}. Äể tìm hiểu thêm vá» Ä‘iá»u nà y, hãy Ä‘á»c phần <a href="#Injection">Bảo vệ trước mục nháºp độc hại</a>. </p> <!-- Provider Data Types --> @@ -929,7 +929,7 @@ mRowsDeleted = getContentResolver().delete( </li> <li> <a href="#Intents">Truy cáºp dữ liệu thông qua ý định</a>: Mặc dù không thể gá»i má»™t ý định - trá»±c tiếp tá»›i má»™t trình cung cấp, bạn có thể gá»i má»™t ý định tá»›i ứng dụng cá»§a trình cung cấp đó, + trá»±c tiếp tá»›i má»™t trình cung cấp, bạn có thể gá»i má»™t ý định tá»›i ứng dụng cá»§a trình cung cấp đó, đây thưá»ng là cách tốt nhất để sá»a đổi dữ liệu cá»§a trình cung cấp. </li> </ul> @@ -947,14 +947,14 @@ mRowsDeleted = getContentResolver().delete( bạn tạo má»™t mảng đối tượng {@link android.content.ContentProviderOperation} rồi phân phối chúng tá»›i má»™t trình cung cấp ná»™i dung bằng {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Bạn chuyển - <em>quyá»n</em> cá»§a trình cung cấp ná»™i dung cho phương pháp nà y thay vì má»™t URI ná»™i dung cụ thể. + <em>quyá»n</em> cá»§a trình cung cấp ná»™i dung cho phương pháp nà y thay vì má»™t URI ná»™i dung cụ thể. Äiá»u nà y cho phép đối tượng {@link android.content.ContentProviderOperation} trong mảng có tác dụng đối vá»›i má»™t bảng khác. Má»™t lệnh gá»i tá»›i {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()} trả vá» má»™t mảng kết quả. </p> <p> Mô tả lá»›p hợp đồng {@link android.provider.ContactsContract.RawContacts} - bao gồm má»™t Ä‘oạn mã HTML thể hiện việc chèn hà ng loạt. Ứng dụng mẫu + bao gồm má»™t Ä‘oạn mã HTML thể hiện việc chèn hà ng loạt. Ứng dụng mẫu <a href="{@docRoot}resources/samples/ContactManager/index.html">Trình quản lý Danh bạ</a> có má»™t và dụ vá» truy cáºp hà ng loạt trong tệp nguồn <code>ContactAdder.java</code> cá»§a nó. @@ -1053,7 +1053,7 @@ mRowsDeleted = getContentResolver().delete( trả kiểm soát vỠứng dụng cá»§a bạn. </li> <li> - Hoạt động cá»§a bạn trả vá» tiá»n cảnh, và hệ thống sẽ gá»i phương pháp + Hoạt động cá»§a bạn trả vá» tiá»n cảnh, và hệ thống sẽ gá»i phương pháp {@link android.app.Activity#onActivityResult onActivityResult()} cá»§a hoạt động cá»§a bạn. Phương pháp nà y nháºn được ý định kết quả do hoạt động lá»±a chá»n tạo trong ứng dụng Danh bạ. diff --git a/docs/html-intl/intl/vi/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/vi/guide/topics/providers/content-provider-creating.jd index 2e8579a1e92e..fcc9b0eb60ef 100644 --- a/docs/html-intl/intl/vi/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/vi/guide/topics/providers/content-provider-creating.jd @@ -221,7 +221,7 @@ page.title=Tạo má»™t Trình cung cấp Ná»™i dung có má»™t trình cung cấp cho phép kết hợp dữ liệu bảng và các tệp. </li> <li> - Äể là m việc vá»›i dữ liệu trên ná»n mạng, hãy sá» dụng các lá»›p trong {@link java.net} và + Äể là m việc vá»›i dữ liệu trên ná»n mạng, hãy sá» dụng các lá»›p trong {@link java.net} và {@link android.net}. Bạn cÅ©ng có thể đồng bá»™ hoá dữ liệu trên ná»n mạng vá»›i má»™t kho lưu trữ dữ liệu cục bá»™ chẳng hạn như má»™t cÆ¡ sở dữ liệu, rồi cung cấp dữ liệu dưới dạng bảng hoặc tệp. Ứng dụng mẫu <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"> @@ -381,7 +381,7 @@ page.title=Tạo má»™t Trình cung cấp Ná»™i dung </dt> <dd> Khá»›p vá»›i má»™t URI ná»™i dung cho các bảng <code>dataset1</code> - và <code>dataset2</code>, nhưng không khá»›p vá»›i URI ná»™i dung cho <code>table1</code> hoặc + và <code>dataset2</code>, nhưng không khá»›p vá»›i URI ná»™i dung cho <code>table1</code> hoặc <code>table3</code>. </dd> <dt> @@ -614,7 +614,7 @@ public class ExampleProvider extends ContentProvider { </p> <h3 id="Delete">Triển khai phương pháp delete()</h3> <p> - Phương pháp {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} + Phương pháp {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} không cần phải xóa hà ng thá»±c chất khá»i kho lưu trữ dữ liệu cá»§a bạn. Nếu bạn Ä‘ang sá» dụng má»™t trình Ä‘iá»u hợp đồng bá»™ vá»›i trình cung cấp cá»§a mình, bạn nên cân nhắc đánh dấu má»™t hà ng đã xóa bằng cá» "xóa" thay vì gỡ bá» hà ng má»™t cách hoà n toà n. Trình Ä‘iá»u hợp đồng bá»™ có thể @@ -626,7 +626,7 @@ public class ExampleProvider extends ContentProvider { update()} lấy cùng tham đối {@link android.content.ContentValues} được sá» dụng bởi {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()}, và cùng tham đối <code>selection</code> và <code>selectionArgs</code> được sá» dụng bởi - {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} và + {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} và {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) ContentProvider.query()}. Äiá»u nà y có thể cho phép bạn sá» dụng lại mã giữa những phương pháp nà y. </p> diff --git a/docs/html-intl/intl/vi/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/vi/guide/topics/providers/document-provider.jd index 30844d7c277e..7948fc259409 100644 --- a/docs/html-intl/intl/vi/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/vi/guide/topics/providers/document-provider.jd @@ -146,7 +146,7 @@ không thay đổi giữa các lần khởi động lại thiết bị.</li> <li>Tà i liệu có thể là má»™t tệp mở được (có má»™t kiểu MIME cụ thể), hoặc má»™t -thư mục chứa các tà i liệu bổ sung (có kiểu MIME +thư mục chứa các tà i liệu bổ sung (có kiểu MIME {@link android.provider.DocumentsContract.Document#MIME_TYPE_DIR}).</li> <li>Má»—i tà i liệu có thể có các khả năng khác nhau như được mô tả bởi @@ -177,7 +177,7 @@ có thể sá» dụng kho lưu trữ đám mây dá»±a trên tag cho dữ liệu trá»±c tiếp vá»›i nhau. Má»™t máy khách yêu cầu quyá»n để tương tác vá»›i tệp (cụ thể là quyá»n Ä‘á»c, chỉnh sá»a, tạo hoặc xóa tệp).</li> -<li>Tương tác bắt đầu khi má»™t ứng dụng (trong và dụ nà y nà y má»™t ứng dụng ảnh) thể hiện ý định +<li>Tương tác bắt đầu khi má»™t ứng dụng (trong và dụ nà y nà y má»™t ứng dụng ảnh) thể hiện ý định {@link android.content.Intent#ACTION_OPEN_DOCUMENT} hoặc {@link android.content.Intent#ACTION_CREATE_DOCUMENT}. à định có thể bao gồm các bá»™ lá»c để cụ thể hÆ¡n các tiêu ch×và dụ, "cấp cho tôi tất cả tệp mở được có kiểu MIME là 'image'."</li> diff --git a/docs/html-intl/intl/vi/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/vi/guide/topics/resources/accessing-resources.jd index b5491dcdee2c..0054562cde1a 100644 --- a/docs/html-intl/intl/vi/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/vi/guide/topics/resources/accessing-resources.jd @@ -259,8 +259,8 @@ tham chiếu má»™t tà i nguyên hệ thống, bạn sẽ cần đưa và o tên g android:text="@string/hello" /> </pre> -<p class="note"><strong>Lưu ý:</strong> Bạn nên sá» dụng các tà i nguyên xâu -và o má»i lúc, để ứng dụng cá»§a bạn có thể được bản địa hóa cho các ngôn ngữ khác. +<p class="note"><strong>Lưu ý:</strong> Bạn nên sá» dụng các tà i nguyên xâu +và o má»i lúc, để ứng dụng cá»§a bạn có thể được bản địa hóa cho các ngôn ngữ khác. Äể biết thông tin vá» việc tạo các tà i nguyên thay thế (chẳng hạn như xâu được bản địa hóa), hãy xem phần <a href="providing-resources.html#AlternativeResources">Cung cấp Tà i nguyên Thay thế</a>. Äể được hướng dẫn đầy đủ vá» việc bản địa hóa ứng dụng cá»§a bạn cho các ngôn ngữ khác, diff --git a/docs/html-intl/intl/vi/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/vi/guide/topics/resources/providing-resources.jd index b733643e75cd..ef1c6b6d4c77 100644 --- a/docs/html-intl/intl/vi/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/vi/guide/topics/resources/providing-resources.jd @@ -190,7 +190,7 @@ phải được lưu ở đây, chẳng hạn như má»™t <a href="{@docRoot}guid </tr> </table> -<p class="caution"><strong>Chú ý:</strong> Không được lưu tệp tà i nguyên trá»±c tiếp và o trong thư mục +<p class="caution"><strong>Chú ý:</strong> Không được lưu tệp tà i nguyên trá»±c tiếp và o trong thư mục {@code res/}—nó sẽ gây ra lá»—i vá»›i trình biên dịch.</p> <p>Äể biết thêm thông tin vá» các loại tà i nguyên, hãy xem tà i liệu <a href="available-resources.html">Các Loại Tà i nguyên</a>.</p> @@ -312,7 +312,7 @@ mã mạng di động hiện tại.</p> v.v. </td> <td><p>Ngôn ngữ được định nghÄ©a bằng má»™t mã ngôn ngữ <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO - 639-1</a> gồm hai chữ cái, có thể theo sau là má»™t mã khu vá»±c + 639-1</a> gồm hai chữ cái, có thể theo sau là má»™t mã khu vá»±c <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 3166-1-alpha-2</a> dà i hai chữ cái (đằng trước là "{@code r}" chữ thưá»ng). </p><p> @@ -498,7 +498,7 @@ Nhiá»u Mà n hình</a>.</p> <li>{@code xlarge}: Các mà n hình lá»›n hÆ¡n đáng kể so vá»›i mà n hình HVGA máºt độ trung bình truyá»n thống. KÃch cỡ bố trà tối thiểu đối vá»›i má»™t mà n hình siêu lá»›n bằng xấp xỉ 720x960 đơn vị dp. Trong hầu hết trưá»ng hợp, những thiết bị có mà n hình - siêu lá»›n sẽ quá lá»›n để mang trong túi và gần như là + siêu lá»›n sẽ quá lá»›n để mang trong túi và gần như là thiết bị kiểu máy tÃnh bảng. <em>ÄÆ°á»£c thêm trong API mức 9.</em></li> </ul> <p class="note"><strong>Lưu ý:</strong> Việc sá» dụng má»™t hạn định kÃch cỡ không hà m ý rằng các @@ -510,7 +510,7 @@ bất kỳ tà i nguyên nà o <a href="#BestMatch">phù hợp nhất</a>.</p> ứng dụng cá»§a bạn sẽ bị lá»—i và o thá»i gian chạy (và dụ, nếu tất cả tà i nguyên bố trà được gắn thẻ hạn định {@code xlarge} nhưng thiết bị lại có mà n hình kÃch cỡ bình thưá»ng).</p> <p><em>ÄÆ°á»£c thêm trong API mức 4.</em></p> - + <p>Xem <a href="{@docRoot}guide/practices/screens_support.html">Há»— trợ Nhiá»u Mà n hình</a> để biết thêm thông tin.</p> <p>Xem thêm trưá»ng cấu hình {@link android.content.res.Configuration#screenLayout}, @@ -530,7 +530,7 @@ hay lá»›n.</p> <li>{@code notlong}: Mà n hình không dà i, chẳng hạn như QVGA, HVGA và VGA</li> </ul> <p><em>ÄÆ°á»£c thêm trong API mức 4.</em></p> - <p>Giá trị nà y thuần túy được dá»±a trên tá»· lệ khung ảnh cá»§a mà n hình (mà n hình "dà i" sẽ rá»™ng hÆ¡n). Nó + <p>Giá trị nà y thuần túy được dá»±a trên tá»· lệ khung ảnh cá»§a mà n hình (mà n hình "dà i" sẽ rá»™ng hÆ¡n). Nó không liên quan tá»›i hướng cá»§a mà n hình.</p> <p>Xem thêm trưá»ng cấu hình {@link android.content.res.Configuration#screenLayout}, ở đó cho biết mà n hình có dà i không.</p> @@ -628,7 +628,7 @@ Mức 8</em></li> <li>{@code xxhdpi}: Mà n hình máºt độ siêu siêu cao; xấp xỉ 480dpi. <em>ÄÆ°á»£c thêm trong API Mức 16</em></li> <li>{@code xxxhdpi}: Máºt độ siêu siêu siêu cao sá» dụng (chỉ biểu tượng trình khởi chạy, xem - <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">ghi chú</a> + <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">ghi chú</a> trong <em>Há»— trợ Nhiá»u Mà n hình</em>); xấp xỉ 640dpi. <em>ÄÆ°á»£c thêm trong API Mức 18</em></li> <li>{@code nodpi}: Loại nà y có thể được sá» dụng cho tà i nguyên bitmap mà bạn không muốn được định cỡ @@ -950,7 +950,7 @@ layout-land/} cho khổ ngang và {@code layout-port/} cho khổ dá»c, hãy Ä‘á cấu hình mà bạn chưa nghÄ© đến, mà còn bởi các phiên bản Android má»›i đôi khi thêm hạn định cấu hình mà những phiên bản cÅ© hÆ¡n không há»— trợ. Nếu bạn sá» dụng má»™t hạn định tà i nguyên má»›i, nhưng vẫn duy trì tÃnh tương thÃch vá» mã vá»›i các phiên bản cÅ© hÆ¡n cá»§a Android thì khi má»™t phiên bản cÅ© hÆ¡n cá»§a -Android chạy trên ứng dụng cá»§a bạn, nó sẽ bị lá»—i nếu bạn không cung cấp tà i nguyên mặc định, do nó +Android chạy trên ứng dụng cá»§a bạn, nó sẽ bị lá»—i nếu bạn không cung cấp tà i nguyên mặc định, do nó không thể sá» dụng tà i nguyên được đặt tên bằng hạn định má»›i. Và dụ, nếu <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> cá»§a bạn được đặt bằng 4, và bạn xác định tất cả tà i nguyên vẽ được cá»§a mình bằng cách sá» dụng <a href="#NightQualifier">chế độ ban đêm</a> ({@code night} hoặc {@code notnight}, đã được thêm trong API Mức 8), khi đó má»™t thiết bị API mức 4 sẽ không thể truy cáºp tà i nguyên vẽ được cá»§a bạn và sẽ bị lá»—i. Trong trưá»ng hợp diff --git a/docs/html-intl/intl/vi/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/vi/guide/topics/resources/runtime-changes.jd index 4a9c38ccfe60..328b8ec3ad8e 100644 --- a/docs/html-intl/intl/vi/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/vi/guide/topics/resources/runtime-changes.jd @@ -82,12 +82,12 @@ hoạt động cá»§a mình để giữ lại các đối tượng có trạng th <p>Äể giữ lại các đối tượng có trạng thái trong má»™t phân Ä‘oạn trong khi thay đổi cấu hình thá»i gian chạy:</p> <ol> - <li>Mở rá»™ng lá»›p {@link android.app.Fragment} và khai báo các tham chiếu tá»›i đối tượng + <li>Mở rá»™ng lá»›p {@link android.app.Fragment} và khai báo các tham chiếu tá»›i đối tượng có trạng thái cá»§a bạn.</li> <li>Gá»i {@link android.app.Fragment#setRetainInstance(boolean)} khi phân Ä‘oạn được tạo. </li> <li>Thêm phân Ä‘oạn và o hoạt động cá»§a bạn.</li> - <li>Sá» dụng {@link android.app.FragmentManager} để truy xuất phân Ä‘oạn khi hoạt động + <li>Sá» dụng {@link android.app.FragmentManager} để truy xuất phân Ä‘oạn khi hoạt động được khởi động lại.</li> </ol> @@ -125,8 +125,8 @@ rò rỉ tất cả dạng xem và tà i nguyên cá»§a thá»±c thể hoạt độn có nghÄ©a là ứng dụng cá»§a bạn duy trì việc lưu giữ tà i nguyên và chúng không thể được thu dá»n bá»™ nhá»› rác, vì thế rất nhiá»u bá»™ nhá»› có thể bị mất.)</p> -<p>Khi đó, hãy sá» dụng {@link android.app.FragmentManager} để thêm phân Ä‘oạn và o hoạt động. -Bạn có thể thu được đối tượng dữ liệu từ phân Ä‘oạn khi hoạt động bắt đầu lại trong khi +<p>Khi đó, hãy sá» dụng {@link android.app.FragmentManager} để thêm phân Ä‘oạn và o hoạt động. +Bạn có thể thu được đối tượng dữ liệu từ phân Ä‘oạn khi hoạt động bắt đầu lại trong khi thay đổi cấu hình thá»i gian chạy. Và dụ, định nghÄ©a hoạt động cá»§a bạn như sau:</p> <pre> @@ -168,7 +168,7 @@ public class MyActivity extends Activity { <p>Trong và dụ nà y, {@link android.app.Activity#onCreate(Bundle) onCreate()} thêm má»™t phân Ä‘oạn hoặc khôi phục má»™t tham chiếu đến nó. {@link android.app.Activity#onCreate(Bundle) onCreate()} cÅ©ng lưu trữ đối tượng có trạng thái bên trong thá»±c thể phân Ä‘oạn đó. -{@link android.app.Activity#onDestroy() onDestroy()} cáºp nháºt đối tượng có trạng thái bên trong +{@link android.app.Activity#onDestroy() onDestroy()} cáºp nháºt đối tượng có trạng thái bên trong thá»±c thể phân Ä‘oạn được giữ lại.</p> diff --git a/docs/html-intl/intl/vi/guide/topics/ui/controls.jd b/docs/html-intl/intl/vi/guide/topics/ui/controls.jd index 37fe81c8c73a..eda00506d0af 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ kiểu Ä‘iá»u khiển nháºp liệu cụ thể, bạn có thể xây dá»±ng <a <tr> <td><a href="controls/radiobutton.html">Nút chá»n má»™t</a></td> <td>Tương tá»± như há»™p kiểm, chỉ khác ở chá»— chỉ có thể chá»n má»™t tùy chá»n trong nhóm.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/vi/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/vi/guide/topics/ui/declaring-layout.jd index 6add812d89f7..54852000a50f 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/declaring-layout.jd @@ -107,7 +107,7 @@ trong thư mục dá»± án <code>res/layout/</code> Android cá»§a bạn để bià <h2 id="load">Nạp Tà i nguyên XML</h2> -<p>Khi bạn biên dịch ứng dụng cá»§a mình, từng tệp bố trà XML được biên dịch thà nh má»™t tà i nguyên +<p>Khi bạn biên dịch ứng dụng cá»§a mình, từng tệp bố trà XML được biên dịch thà nh má»™t tà i nguyên {@link android.view.View}. Bạn nên nạp tà i nguyên bố trà từ mã ứng dụng cá»§a mình, trong triển khai gá»i lại {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} cá»§a bạn. Là m váºy bằng cách gá»i <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>, @@ -260,7 +260,7 @@ Tà i nguyên Có sẵn</a>.</p> </p> <p> - Cặp thứ nhất được gá»i là <em>chiá»u rá»™ng Ä‘o được</em> và + Cặp thứ nhất được gá»i là <em>chiá»u rá»™ng Ä‘o được</em> và <em>chiá»u cao Ä‘o được</em>. Những kÃch thước nà y xác định má»™t dạng xem muốn phóng lá»›n bao nhiêu trong dạng xem mẹ cá»§a nó. Các kÃch thước Ä‘o được có thể thu được bằng cách gá»i {@link android.view.View#getMeasuredWidth()} diff --git a/docs/html-intl/intl/vi/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/vi/guide/topics/ui/dialogs.jd index 1fa45508ef0c..00d523014a64 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>Xem thêm</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">Hướng dẫn thiết kế há»™p thoại</a></li> @@ -235,8 +235,8 @@ AlertDialog dialog = builder.create(); </pre> <p>Các phương pháp <code>set...Button()</code> yêu cầu má»™t tiêu đỠcho nút (được cung cấp -bởi má»™t <a href="{@docRoot}guide/topics/resources/string-resource.html">tà i nguyên xâu</a>) và má»™t -{@link android.content.DialogInterface.OnClickListener} có chức năng định nghÄ©a hà nh động sẽ tiến hà nh +bởi má»™t <a href="{@docRoot}guide/topics/resources/string-resource.html">tà i nguyên xâu</a>) và má»™t +{@link android.content.DialogInterface.OnClickListener} có chức năng định nghÄ©a hà nh động sẽ tiến hà nh khi ngưá»i dùng nhấn nút.</p> <p>Có ba nút hà nh động khác nhau mà bạn có thể thêm:</p> @@ -248,7 +248,7 @@ khi ngưá»i dùng nhấn nút.</p> <dt>Trung láºp</dt> <dd>Bạn nên sá» dụng nút nà y khi ngưá»i dùng có thể không muốn tiếp tục vá»›i hà nh động, nhưng không hẳn muốn há»§y bá». Nó nằm ở giữa nút - tÃch cá»±c và tiêu cá»±c. Và dụ, hà nh động có thể là "Nhắc tôi sau."</dd> + tÃch cá»±c và tiêu cá»±c. Và dụ, hà nh động có thể là "Nhắc tôi sau."</dd> </dl> <p>Bạn chỉ có thể thêm má»™t nút má»—i loại và o má»™t {@link @@ -271,7 +271,7 @@ Há»™p thoại có tiêu đỠvà danh sách.</p> <li>Danh sách nhiá»u lá»±a chá»n cố định (há»™p kiểm)</li> </ul> -<p>Äể tạo danh sách má»™t lá»±a chá»n như danh sách trong hình 3, +<p>Äể tạo danh sách má»™t lá»±a chá»n như danh sách trong hình 3, hãy sá» dụng phương pháp {@link android.app.AlertDialog.Builder#setItems setItems()}:</p> <pre style="clear:right"> @@ -291,7 +291,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Vì danh sách xuất hiện trong vùng ná»™i dung cá»§a há»™p thoại, há»™p thoại không thể hiển thị cả thông báo và danh sách và bạn nên đặt má»™t tiêu đỠcho há»™p thoại -bằng {@link android.app.AlertDialog.Builder#setTitle setTitle()}. +bằng {@link android.app.AlertDialog.Builder#setTitle setTitle()}. Äể chỉ định các mục cho danh sách, hãy gá»i {@link android.app.AlertDialog.Builder#setItems setItems()}, chuyển má»™t mảng. Hoặc, bạn có thể chỉ định má»™t danh sách bằng cách sá» dụng {@link @@ -317,11 +317,11 @@ Danh sách nhiá»u mục lá»±a chá»n.</p> <h4 id="Checkboxes">Thêm má»™t danh sách nhiá»u lá»±a chá»n hoặc má»™t lá»±a chá»n cố định</h4> -<p>Äể thêm má»™t danh sách nhiá»u lá»±a chá»n (há»™p kiểm) hoặc +<p>Äể thêm má»™t danh sách nhiá»u lá»±a chá»n (há»™p kiểm) hoặc má»™t lá»±a chá»n (nút chá»n má»™t), hãy sá» dụng các phương pháp {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} hoặc -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} hoặc +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} tương ứng.</p> <p>Và dụ, sau đây là cách bạn có thể tạo má»™t danh sách nhiá»u lá»±a chá»n như @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Mặc dù cả danh sách truyá»n thống và danh sách có nút chá»n má»™t Ä‘á»u cung cấp hà nh động "má»™t lá»±a chá»n", bạn nên sá» dụng {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} nếu bạn muốn cố định lá»±a chá»n cá»§a ngưá»i dùng. Cụ thể, nếu việc mở há»™p thoại lại sau nà y báo hiệu lá»±a chá»n hiện tại cá»§a ngưá»i dùng, khi đó bạn hãy tạo má»™t danh sách vá»›i các nút chá»n má»™t.</p> @@ -442,7 +442,7 @@ bạn nên đổi há» phông thà nh {@code "sans-serif"} sao cho cả hai trưá má»™t kiểu phông thống nhất.</p> <p>Äể bung bố trà ra trong {@link android.support.v4.app.DialogFragment} cá»§a bạn, -hãy lấy má»™t {@link android.view.LayoutInflater} vá»›i +hãy lấy má»™t {@link android.view.LayoutInflater} vá»›i {@link android.app.Activity#getLayoutInflater()} và gá»i {@link android.view.LayoutInflater#inflate inflate()}, trong đó tham số đầu tiên là ID tà i nguyên bố trà và tham số thứ hai là má»™t dạng xem mẹ cho bố trÃ. @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ giao diện mà thông qua đó, nó sẽ chuyển các sá»± kiện lại cho ho <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ cá»§a há»™p thoại thông qua triển khai giao diện {@code NoticeDialogListe public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ hay UI toà n mà n hình, dá»±a và o kÃch cỡ mà n hình:</p> public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -776,7 +776,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} trong {@link android.support.v4.app.DialogFragment} cá»§a mình.</p> <p>Bạn cÅ©ng có thể <em>há»§y bá»</em> má»™t há»™p thoại. Äây là má»™t sá»± kiện đặc biệt chỉ báo ngưá»i dùng -chá»§ ý rá»i khá»i há»™p thoại mà không hoà n thà nh tác vụ. Äiá»u nà y xảy ra nếu ngưá»i dùng nhấn nút +chá»§ ý rá»i khá»i há»™p thoại mà không hoà n thà nh tác vụ. Äiá»u nà y xảy ra nếu ngưá»i dùng nhấn nút <em>Quay lại</em>, chạm và o mà n hình ngoà i vùng há»™p thoại, hoặc nếu bạn công khai gá»i {@link android.app.Dialog#cancel()} trên {@link android.app.Dialog} (chẳng hạn như khi hồi đáp lại má»™t nút "Há»§y bá»" trong há»™p thoại).</p> diff --git a/docs/html-intl/intl/vi/guide/topics/ui/menus.jd b/docs/html-intl/intl/vi/guide/topics/ui/menus.jd index 8e9e1c412c5a..7950907d88bb 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/menus.jd @@ -83,9 +83,9 @@ không có), vì thế bạn nên chuyển sang sá» dụng thanh hà nh động các tùy chá»n khác.</p> <p>Xem phần vá» <a href="#options-menu">Tạo má»™t Menu Tùy chá»n</a>.</p> </dd> - + <dt><strong>Menu ngữ cảnh và chế độ hà nh động theo ngữ cảnh</strong></dt> - + <dd>Menu ngữ cảnh là má»™t <a href="#FloatingContextMenu">menu nổi</a> xuất hiện khi ngưá»i dùng thá»±c hiện nhấp giữ trên má»™t phần tá». Nó cung cấp các hà nh động ảnh hưởng tá»›i ná»™i dung hoặc khung ngữ cảnh được chá»n. @@ -94,7 +94,7 @@ các mục hà nh động ảnh hưởng tá»›i ná»™i dung được chá»n trong m chá»n nhiá»u mục.</p> <p>Xem phần nói vá» <a href="#context-menu">Tạo Menu Ngữ cảnh</a>.</p> </dd> - + <dt><strong>Menu báºt lên</strong></dt> <dd>Menu báºt lên sẽ hiển thị danh sách các mục trong má»™t danh sách thẳng đứng được neo và o dạng xem đã gá»i ra menu. Nên cung cấp má»™t phần trà n gồm các hà nh động liên quan tá»›i ná»™i dung cụ thể hoặc @@ -128,14 +128,14 @@ kÃch cỡ mà n hình khác nhau và các cấu hình khác bằng cách táºn d dá»± án cá»§a bạn và xây dá»±ng menu vá»›i các phần tá» sau:</p> <dl> <dt><code><menu></code></dt> - <dd>Äịnh nghÄ©a má»™t {@link android.view.Menu}, đó là má»™t bá»™ chứa các mục menu. Phần tá» + <dd>Äịnh nghÄ©a má»™t {@link android.view.Menu}, đó là má»™t bá»™ chứa các mục menu. Phần tá» <code><menu></code> phải là má»™t nút gốc cho tệp và có thể giữ má»™t hoặc nhiá»u phần tá» <code><item></code> và <code><group></code>.</dd> <dt><code><item></code></dt> <dd>Tạo má»™t {@link android.view.MenuItem}, nó biểu diá»…n má»™t mục đơn trong má»™t menu. Phần tá» nà y có thể chứa má»™t phần tá» <code><menu></code> được lồng nhau để tạo má»™t menu con.</dd> - + <dt><code><group></code></dt> <dd>Má»™t bá»™ chứa tùy chá»n, vô hình cho các phần tá» {@code <item>}. Nó cho phép bạn phân loại các mục menu sao cho chúng chia sẻ các tÃnh chất như trạng thái hiện hoạt và khả năng hiển thị. Äể biết thêm @@ -273,7 +273,7 @@ tÃnh chất cá»§a chúng bằng các API {@link android.view.MenuItem}.</p> <p>Nếu bạn phát triển ứng dụng cá»§a mình cho phiên bản Android 2.3.x và thấp hÆ¡n, hệ thống gá»i {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} để tạo menu tùy chá»n -khi ngưá»i dùng mở menu lần đầu tiên. Nếu bạn phát triển cho phiên bản Android 3.0 và o cao hÆ¡n, +khi ngưá»i dùng mở menu lần đầu tiên. Nếu bạn phát triển cho phiên bản Android 3.0 và o cao hÆ¡n, hệ thống sẽ gá»i {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} khi bắt đầu hoạt động để hiển thị các mục cho thanh hà nh động.</p> @@ -346,7 +346,7 @@ trừ khi menu bị vô hiệu hóa vì lý do nà o đó. Tuy nhiên, bạn chá» android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} để tạo trạng thái menu ban đầu chứ không phải để thá»±c hiện thay đổi trong vòng Ä‘á»i cá»§a hoạt động.</p> -<p>Nếu bạn muốn sá»a đổi menu tùy chá»n dá»±a trên +<p>Nếu bạn muốn sá»a đổi menu tùy chá»n dá»±a trên các sá»± kiện xảy ra trong vòng Ä‘á»i cá»§a hoạt động, bạn có thể là m váºy trong phương pháp {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Phương pháp nà y chuyển cho bạn đối tượng {@link android.view.Menu} như hiện Ä‘ang có để bạn có thể sá»a đổi nó, @@ -363,7 +363,7 @@ trình bà y trong thanh hà nh động. Khi má»™t sá»± kiện xảy ra và bạn gá»i {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} để yêu cầu hệ thống gá»i {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p> -<p class="note"><strong>Lưu ý:</strong> +<p class="note"><strong>Lưu ý:</strong> Bạn không nên thay đổi các mục trong menu tùy chá»n dá»±a trên {@link android.view.View} Ä‘ang trong tiêu Ä‘iểm. Khi ở chế độ cảm ứng (khi ngưá»i dùng không sá» dụng bi xoay hay d-pad), các dạng xem không thể lấy tiêu Ä‘iểm, vì thế bạn không nên sá» dụng tiêu Ä‘iểm là m cÆ¡ sở để sá»a đổi @@ -609,7 +609,7 @@ someView.setOnLongClickListener(new View.OnLongClickListener() { <p>Khi bạn gá»i {@link android.app.Activity#startActionMode startActionMode()}, hệ thống sẽ trả vá» {@link android.view.ActionMode} được tạo. Bằng cách lưu Ä‘iá»u nà y trong má»™t biến thà nh viên, bạn có thể -thá»±c hiện thay đổi thanh hà nh động theo ngữ cảnh để hồi đáp những sá»± kiện khác. Trong mẫu trên, +thá»±c hiện thay đổi thanh hà nh động theo ngữ cảnh để hồi đáp những sá»± kiện khác. Trong mẫu trên, {@link android.view.ActionMode} được sá» dụng để đảm bảo rằng thá»±c thể {@link android.view.ActionMode} không được tạo lại nếu nó đã hiện hoạt, bằng cách kiểm tra xem thà nh viên có rá»—ng không trước khi khởi động chế độ hà nh động.</p> @@ -742,8 +742,8 @@ hiển thị má»™t menu báºt lên:</p> <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -1026,6 +1026,6 @@ bá»™ lá»c ý định. Và dụ:</p> <p>Tìm hiểu thêm vá» việc ghi các bá»™ lá»c ý định trong tà i liệu <a href="/guide/components/intents-filters.html">à định và Bá»™ lá»c à định</a>.</p> -<p>Äể tham khảo má»™t ứng dụng mẫu sá» dụng kỹ thuáºt nà y, hãy xem mã mẫu +<p>Äể tham khảo má»™t ứng dụng mẫu sá» dụng kỹ thuáºt nà y, hãy xem mã mẫu <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note Pad</a>.</p> diff --git a/docs/html-intl/intl/vi/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/vi/guide/topics/ui/notifiers/notifications.jd index 5890cb331b96..8b6e1c8458c9 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/notifiers/notifications.jd @@ -150,7 +150,7 @@ thông báo, bạn chuyển đối tượng {@link android.app.Notification} tá» {@link android.app.PendingIntent} chứa má»™t {@link android.content.Intent} có chức năng bắt đầu má»™t {@link android.app.Activity} trong ứng dụng cá»§a bạn. Äể liên kết - {@link android.app.PendingIntent} vá»›i má»™t cá» chỉ, hãy gá»i phương pháp + {@link android.app.PendingIntent} vá»›i má»™t cá» chỉ, hãy gá»i phương pháp {@link android.support.v4.app.NotificationCompat.Builder} phù hợp. Và dụ, nếu bạn muốn bắt đầu {@link android.app.Activity} khi ngưá»i dùng nhấp và o văn bản thông báo trong ngăn kéo thông báo, bạn hãy thêm {@link android.app.PendingIntent} bằng cách gá»i @@ -449,7 +449,7 @@ numMessages = 0; <ol style="list-style-type: lower-alpha;"> <li> Thêm há»— trợ cho phiên bản Android 4.0.3 và trước đó. Äể là m Ä‘iá»u nà y, hãy quy định mẹ cá»§a - {@link android.app.Activity} mà bạn Ä‘ang bắt đầu bằng cách thêm phần tá» + {@link android.app.Activity} mà bạn Ä‘ang bắt đầu bằng cách thêm phần tá» <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code> là m con cá»§a <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>. @@ -466,9 +466,9 @@ numMessages = 0; </p> </li> <li> - CÅ©ng thêm há»— trợ cho phiên bản Android 4.1 và sau đó. Äể là m Ä‘iá»u nà y, hãy thêm thuá»™c tÃnh + CÅ©ng thêm há»— trợ cho phiên bản Android 4.1 và sau đó. Äể là m Ä‘iá»u nà y, hãy thêm thuá»™c tÃnh <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code> - và o phần tá» + và o phần tá» <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> cá»§a {@link android.app.Activity} mà bạn Ä‘ang bắt đầu. </li> diff --git a/docs/html-intl/intl/vi/guide/topics/ui/overview.jd b/docs/html-intl/intl/vi/guide/topics/ui/overview.jd index 7bd45527c7b4..260b40d9e19c 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ và má»™t phần tá» <code><LinearLayout></code> tạo ra má»™t nhóm dẠ<pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ bố trÃ.</p> <p>Äể xem hướng dẫn đầy đủ vá» tạo bố trà UI, hãy xem phần <a href="declaring-layout.html">Bố trà XML</a>. - + <h2 id="UIComponents">Thà nh phần Giao diện Ngưá»i dùng</h2> <p>Bạn không phải xây dá»±ng tất cả UI cá»§a mình bằng cách sá» dụng các đối tượng {@link android.view.View} và {@link diff --git a/docs/html-intl/intl/vi/guide/topics/ui/settings.jd b/docs/html-intl/intl/vi/guide/topics/ui/settings.jd index 8e19b979d0ac..47a5c27d1f08 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/settings.jd @@ -82,7 +82,7 @@ cách xây dá»±ng thiết đặt ứng dụng cá»§a bạn bằng cách sá» dụ <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> <p class="img-caption"><strong>Hình 1.</strong> Ảnh chụp mà n hình từ thiết đặt cá»§a ứng dụng -Messaging trên Android. Chá»n má»™t mục được định nghÄ©a bởi má»™t {@link android.preference.Preference} +Messaging trên Android. Chá»n má»™t mục được định nghÄ©a bởi má»™t {@link android.preference.Preference} sẽ mở ra má»™t giao diện để thay đổi thiết đặt.</p> @@ -121,7 +121,7 @@ sau:</p> <p>Vì thiết đặt cá»§a ứng dụng cá»§a bạn được xây dá»±ng bằng cách sá» dụng các đối tượng {@link android.preference.Preference} thay vì đối tượng -{@link android.view.View}, bạn nên sá» dụng má»™t lá»›p con {@link android.app.Activity} hoặc +{@link android.view.View}, bạn nên sá» dụng má»™t lá»›p con {@link android.app.Activity} hoặc {@link android.app.Fragment} chuyên dụng để hiển thị thiết đặt danh sách:</p> <ul> @@ -226,7 +226,7 @@ android.preference.ListPreference}. Cả hai mục Ä‘á»u bao gồm ba thuá»™c t <dt>{@code android:key}</dt> <dd>Thuá»™c tÃnh nà y được yêu cầu cho các tùy chá»n duy trì má»™t giá trị dữ liệu. Nó quy định khóa (xâu) duy nhất mà hệ thống sá» dụng khi lưu giá trị cá»§a thiết đặt nà y trong {@link -android.content.SharedPreferences}. +android.content.SharedPreferences}. <p>Các thá»±c thể duy nhất mà thuá»™c tÃnh nà y không <em>được yêu cầu</em> là khi tùy chá»n là má»™t {@link android.preference.PreferenceCategory} hoặc {@link android.preference.PreferenceScreen}, hoặc tùy chá»n quy định má»™t {@link android.content.Intent} để gá»i ra (bằng phần tá» <a href="#Intents">{@code <intent>}</a>) hoặc {@link android.app.Fragment} để hiển thị (bằng thuá»™c tÃnh <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code @@ -285,7 +285,7 @@ android.preference.PreferenceCategory}.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory}.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -569,7 +569,7 @@ cÅ© hÆ¡n (xem phần nói vá» <a href="#BackCompatHeaders">Há»— trợ các phià vá»›i tiêu đỠtùy chá»n</a>).</p> <img src="{@docRoot}images/ui/settings/settings-headers-tablet.png" alt="" /> -<p class="img-caption"><strong>Hình 4.</strong> Bố trà có hai bảng vá»›i tiêu Ä‘á». <br/><b>1.</b> +<p class="img-caption"><strong>Hình 4.</strong> Bố trà có hai bảng vá»›i tiêu Ä‘á». <br/><b>1.</b> Tiêu đỠđược định nghÄ©a trong má»™t tệp tiêu đỠXML. <br/><b>2.</b> Má»—i nhóm thiết đặt được định nghÄ©a bởi má»™t {@link android.preference.PreferenceFragment}, được quy định bởi má»™t phần tá» {@code <header>} trong tệp tiêu đỠ.</p> @@ -588,11 +588,11 @@ tiêu Ä‘á».</p> <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -672,15 +672,15 @@ android.preference.Preference <Preference>} sẽ gá»i má»™t {@link androi tải.</p> <p>Và dụ, sau đây là má»™t tệp XML cho các tiêu đỠtùy chá»n được sá» dụng trên Android 3.0 -trở lên ({@code res/xml/preference_headers.xml}):</p> +trở lên ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -834,7 +834,7 @@ android.preference.Preference#setSummary setSummary()} khi thiết đặt thay Ä trạng thái hiện tại (chẳng hạn như thiết đặt Ngá»§ như minh há»a trong hình 5).</p> <p class="note"><strong>Lưu ý:</strong> Như đã mô tả trong tà i liệu Thiết kế Android vá» <a href="{@docRoot}design/patterns/settings.html">Thiết đặt</a>, chúng tôi khuyên bạn nên cáºp nháºt -tóm tắt cho {@link android.preference.ListPreference} má»—i khi ngưá»i dùng thay đổi tùy chá»n để +tóm tắt cho {@link android.preference.ListPreference} má»—i khi ngưá»i dùng thay đổi tùy chá»n để mô tả thiết đặt hiện tại.</p> <p>Äể quản lý vòng Ä‘á»i trong hoạt động cho phù hợp, chúng tôi khuyên rằng bạn nên đăng ký và bỠđăng ký @@ -902,7 +902,7 @@ cá»§a ứng dụng cá»§a bạn từ dưới ná»n, bạn nên sá» dụng kết ngưá»i dùng tinh chỉnh mức sá» dụng dữ liệu cho ứng dụng cá»§a bạn thông qua thiết đặt ứng dụng.<p> <p>Và dụ, bạn có thể cho phép ngưá»i dùng kiểm soát tần suất ứng dụng cá»§a bạn đồng bá»™ dữ liệu, ứng dụng cá»§a bạn -chỉ được thá»±c hiện tải lên/tải xuống khi trên Wi-Fi, ứng dụng cá»§a bạn sá» dụng dữ liệu trong khi Ä‘ang chuyển vùng dữ liệu, v.v... hay không. Vá»›i +chỉ được thá»±c hiện tải lên/tải xuống khi trên Wi-Fi, ứng dụng cá»§a bạn sá» dụng dữ liệu trong khi Ä‘ang chuyển vùng dữ liệu, v.v... hay không. Vá»›i những kiểm soát nà y, ngưá»i dùng sẽ Ãt có khả năng vô hiệu hóa truy cáºp dữ liệu cá»§a ứng dụng cá»§a bạn hÆ¡n nhiá»u khi hỠđạt gần mức giá»›i hạn đặt ra trong Thiết đặt hệ thống, vì thay và o đó, há» có thể kiểm soát chÃnh xác lượng dữ liệu mà ứng dụng cá»§a bạn sá» dụng.</p> @@ -946,7 +946,7 @@ mà bạn cần là m:</p> <ul> <li>Quy định giao diện ngưá»i dùng sẽ xuất hiện khi ngưá»i dùng chá»n thiết đặt.</li> <li>Lưu giá trị cá»§a thiết đặt khi phù hợp.</li> - <li>Khởi tạo {@link android.preference.Preference} bằng giá trị hiện tại (hoặc mặc định) + <li>Khởi tạo {@link android.preference.Preference} bằng giá trị hiện tại (hoặc mặc định) khi xét tá»›i dạng xem.</li> <li>Cung cấp giá trị mặc định khi hệ thống yêu cầu.</li> <li>Nếu {@link android.preference.Preference} cung cấp UI cá»§a chÃnh mình (chẳng hạn như má»™t há»™p thoại), hãy lưu @@ -975,11 +975,11 @@ các nút há»™p thoại tÃch cá»±c và tiêu cá»±c mặc định:</p> public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1034,7 +1034,7 @@ vá»›i bạn xem thiết đặt có giá trị được duy trì hay không. Nế cho bạn giá trị mặc định.</p> <p>Phương pháp {@link android.preference.Preference#onSetInitialValue onSetInitialValue()} chuyển má»™t -boolean, <code>restorePersistedValue</code>, để cho biết liệu giá trị đã được duy trì +boolean, <code>restorePersistedValue</code>, để cho biết liệu giá trị đã được duy trì cho thiết đặt hay không. Nếu nó là <code>true</code>, khi đó bạn nên truy xuất giá trị được duy trì bằng cách gá»i má»™t trong các phương pháp cá»§a lá»›p {@link android.preference.Preference}, {@code getPersisted*()}, chẳng hạn như {@link @@ -1060,7 +1060,7 @@ protected void onSetInitialValue(boolean restorePersistedValue, Object defaultVa </pre> <p>Má»—i phương pháp {@code getPersisted*()} sẽ lấy má»™t tham đối quy định -giá trị mặc định sẽ sá» dụng trong trưá»ng hợp thá»±c sá»± không có giá trị được duy trì hoặc khóa không tồn tại. Trong +giá trị mặc định sẽ sá» dụng trong trưá»ng hợp thá»±c sá»± không có giá trị được duy trì hoặc khóa không tồn tại. Trong và dụ trên, má»™t hằng số cục bá»™ được sá» dụng để quy định giá trị mặc định trong trưá»ng hợp {@link android.preference.Preference#getPersistedInt getPersistedInt()} không thể trả vá» má»™t giá trị được duy trì.</p> @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/vi/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/vi/guide/topics/ui/ui-events.jd index b4d1635d1caa..c2b337ce7870 100644 --- a/docs/html-intl/intl/vi/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/vi/guide/topics/ui/ui-events.jd @@ -20,8 +20,8 @@ parent.link=index.html Khi xem xét các sá»± kiện trong giao diện ngưá»i dùng cá»§a bạn, cách tiếp cáºn là chụp lại sá»± kiện từ đối tượng Dạng xem cụ thể mà ngưá»i dùng tương tác vá»›i. Lá»›p Dạng xem sẽ cung cấp phương thức để là m việc nà y.</p> -<p>Trong các lá»›p Dạng xem khác nhau mà bạn sẽ sá» dụng để soạn bố trà cá»§a mình, bạn có thể thấy má»™t và i phương pháp gá»i lại -công khai dưá»ng như hữu Ãch đối vá»›i sá»± kiện UI. Những phương pháp nà y được khuôn khổ Android gá»i khi +<p>Trong các lá»›p Dạng xem khác nhau mà bạn sẽ sá» dụng để soạn bố trà cá»§a mình, bạn có thể thấy má»™t và i phương pháp gá»i lại +công khai dưá»ng như hữu Ãch đối vá»›i sá»± kiện UI. Những phương pháp nà y được khuôn khổ Android gá»i khi xảy ra hà nh động tương ứng trên đối tượng đó. Và dụ, khi má»™t Dạng xem (chẳng hạn như má»™t Nút) được chạm và o, phương pháp <code>onTouchEvent()</code> được gá»i trên đối tượng đó. Tuy nhiên, để can thiệp và o Ä‘iá»u nà y, bạn phải mở rá»™ng lá»›p và khống chế phương pháp đó. Tuy nhiên, việc mở rá»™ng má»i đối tượng Dạng xem @@ -30,7 +30,7 @@ má»™t táºp hợp giao diện lồng nhau cùng các phương pháp gá»i lại được gá»i là <a href="#EventListeners">đối tượng theo dõi sá»± kiện</a>, là tấm vé để bạn chụp lại tương tác giữa ngưá»i dùng vá»›i UI cá»§a bạn.</p> <p>Trong khi các đối tượng theo dõi sá»± kiện sẽ thưá»ng được sá» dụng để theo dõi tương tác cá»§a ngưá»i dùng, có thể -có lúc bạn muốn mở rá»™ng má»™t lá»›p Dạng xem để xây dá»±ng má»™t thà nh phần tùy chỉnh. +có lúc bạn muốn mở rá»™ng má»™t lá»›p Dạng xem để xây dá»±ng má»™t thà nh phần tùy chỉnh. Có thể là bạn muốn mở rá»™ng lá»›p {@link android.widget.Button} để khiến cái gì đó trông ấn tượng hÆ¡n. Trong trưá»ng hợp nà y, bạn sẽ có thể định nghÄ©a các hà nh vi sá»± kiện mặc định cho lá»›p cá»§a mình bằng cách sá» dụng <a href="#EventHandlers">bá»™ xá» lý sá»± kiện</a> cá»§a lá»›p.</p> @@ -38,7 +38,7 @@ cá»§a mình bằng cách sá» dụng <a href="#EventHandlers">bá»™ xá» lý sá»± <h2 id="EventListeners">Äối tượng theo dõi Sá»± kiện</h2> -<p>Äối tượng theo dõi sá»± kiện là má»™t giao diện trong lá»›p {@link android.view.View} chứa má»™t phương pháp gá»i lại +<p>Äối tượng theo dõi sá»± kiện là má»™t giao diện trong lá»›p {@link android.view.View} chứa má»™t phương pháp gá»i lại đơn lẻ. Những phương pháp nà y sẽ được khuôn khổ Android gá»i khi Dạng xem mà đối tượng theo dõi đã được đăng ký vá»›i bị kÃch khởi bởi tương tác giữa ngưá»i dùng vá»›i mục trong UI.</p> @@ -46,27 +46,27 @@ cá»§a mình bằng cách sá» dụng <a href="#EventHandlers">bá»™ xá» lý sá»± <dl> <dt><code>onClick()</code></dt> - <dd>Từ {@link android.view.View.OnClickListener}. - Phương pháp nà y được gá»i khi ngưá»i dùng chạm và o mục + <dd>Từ {@link android.view.View.OnClickListener}. + Phương pháp nà y được gá»i khi ngưá»i dùng chạm và o mục (khi ở chế độ cảm ứng), hoặc lấy tiêu Ä‘iểm và o má»™t mục bằng phÃm Ä‘iá»u hướng hoặc bi xoay và nhấn phÃm "enter" phù hợp hoặc nhấn bi xoay.</dd> <dt><code>onLongClick()</code></dt> - <dd>Từ {@link android.view.View.OnLongClickListener}. - Phương pháp nà y được gá»i khi ngưá»i gá»i chạm và giữ mục (khi ở chế độ cảm ứng), hoặc + <dd>Từ {@link android.view.View.OnLongClickListener}. + Phương pháp nà y được gá»i khi ngưá»i gá»i chạm và giữ mục (khi ở chế độ cảm ứng), hoặc lấy tiêu Ä‘iểm và o má»™t mục bằng phÃm Ä‘iá»u hướng hoặc bi xoay và nhấn và giữ phÃm "enter" phù hợp hoặc nhấn và giữ bi xoay (trong má»™t giây).</dd> <dt><code>onFocusChange()</code></dt> - <dd>Từ {@link android.view.View.OnFocusChangeListener}. + <dd>Từ {@link android.view.View.OnFocusChangeListener}. Phương pháp nà y được gá»i khi ngưá»i dùng Ä‘iá»u hướng lên hoặc ra khá»i má»™t mục bằng cách sá» dụng các phÃm Ä‘iá»u hướng hoặc bi xoay.</dd> <dt><code>onKey()</code></dt> - <dd>Từ {@link android.view.View.OnKeyListener}. + <dd>Từ {@link android.view.View.OnKeyListener}. Phương pháp nà y được gá»i khi ngưá»i dùng được lấy tiêu Ä‘iểm và o má»™t mục và nhấn hoặc nhả phÃm cứng trên thiết bị.</dd> <dt><code>onTouch()</code></dt> - <dd>Từ {@link android.view.View.OnTouchListener}. + <dd>Từ {@link android.view.View.OnTouchListener}. Phương pháp nà y được gá»i khi ngưá»i dùng thá»±c hiện má»™t hà nh động được coi như má»™t sá»± kiện chạm, bao gồm nhấn, nhả, hoặc bất kỳ động tác chuyển động nà o trên mà n hình (trong đưá»ng biên cá»§a mục đó).</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>Từ {@link android.view.View.OnCreateContextMenuListener}. + <dd>Từ {@link android.view.View.OnCreateContextMenuListener}. Phương pháp nà y được gá»i khi má»™t Menu Ngữ cảnh Ä‘ang được xây dá»±ng (kết quả cá»§a má»™t sá»± kiện "nhấp giữ" kéo dà i). Xem phần thảo luáºn vá» menu ngữ cảnh trong hướng dẫn dà nh cho nhà phát triển <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menu</a> .</dd> @@ -75,8 +75,8 @@ cá»§a mình bằng cách sá» dụng <a href="#EventHandlers">bá»™ xá» lý sá»± <p>Những phương pháp nà y là phương pháp duy nhất nằm trong giao diện tương ứng cá»§a chúng. Äể định nghÄ©a má»™t trong những phương pháp nà y và xá» lý sá»± kiện cá»§a bạn, hãy triển khai giao diện lồng nhau trong Hoạt động cá»§a bạn hoặc định nghÄ©a nó thà nh má»™t lá»›p vô danh. Sau đó, chuyển má»™t thá»±c thể triển khai cá»§a bạn -tá»›i phương pháp <code>View.set...Listener()</code> tương ứng. (Và dụ, gá»i -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> +tá»›i phương pháp <code>View.set...Listener()</code> tương ứng. (Và dụ, gá»i +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> và chuyển cho nó triển khai {@link android.view.View.OnClickListener OnClickListener} cá»§a bạn.)</p> <p>Và dụ bên dưới cho biết cách đăng ký má»™t đối tượng theo dõi khi nhấp cho má»™t Nút. </p> @@ -121,17 +121,17 @@ public class ExampleActivity extends Activity implements OnClickListener { trả vá», nhưng má»™t số phương pháp đối tượng theo dõi sá»± kiện khác phải trả vá» má»™t boolean. Lý do nà y phụ thuá»™c và o sá»± kiện. Vá»›i số Ãt sá»± kiện thá»±c hiện như váºy, sau đây là lý do:</p> <ul> - <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - - Trả vá» má»™t boolean cho biết bạn đã xá» lý sá»± kiện và sá»± kiện không nên được tiếp tục hay không. - Cụ thể, trả vá» <em>true</em> để cho biết rằng bạn đã xá» lý sá»± kiện và nó nên dừng ở đây; + <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - + Trả vá» má»™t boolean cho biết bạn đã xá» lý sá»± kiện và sá»± kiện không nên được tiếp tục hay không. + Cụ thể, trả vá» <em>true</em> để cho biết rằng bạn đã xá» lý sá»± kiện và nó nên dừng ở đây; trả vá» <em>false</em> nếu bạn chưa xá» lý nó và /hoặc sá»± kiện sẽ tiếp tục đối vá»›i bất kỳ đối tượng theo dõi khi nhấp nà o khác.</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> - Trả vá» má»™t boolean cho biết bạn đã xá» lý sá»± kiện và sá»± kiện không nên được tiếp tục hay không. - Cụ thể, trả vá» <em>true</em> sẽ cho biết rằng bạn đã xá» lý sá»± kiện và nó nên dừng ở đây; + Cụ thể, trả vá» <em>true</em> sẽ cho biết rằng bạn đã xá» lý sá»± kiện và nó nên dừng ở đây; trả vá» <em>false</em> nếu bạn chưa xá» lý nó và /hoặc sá»± kiện sẽ tiếp tục đối vá»›i bất kỳ đối tượng theo dõi trên phÃm nà o khác.</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> - Trả vá» má»™t boolean cho biết đối tượng theo dõi cá»§a bạn có xá» lý sá»± kiện nà y hay không. Äiá»u quan trá»ng đó là sá»± kiện nà y có thể có nhiá»u hà nh động nối tiếp nhau. Vì váºy, nếu bạn trả vá» <em>false</em> khi nháºn được sá»± kiện hà nh động hướng xuống, bạn sẽ cho biết rằng mình chưa xá» lý sá»± kiện và cÅ©ng @@ -176,19 +176,19 @@ bao gồm:</p> <li><code>{@link android.view.View#onTouchEvent}</code> - ÄÆ°á»£c gá»i khi xảy ra má»™t sá»± kiện chuyển động mà n hình cảm ứng.</li> <li><code>{@link android.view.View#onFocusChanged}</code> - ÄÆ°á»£c gá»i khi dạng xem có hoặc mất tiêu Ä‘iểm.</li> </ul> -<p>Có má»™t số phương pháp khác mà bạn cần lưu ý, chúng không thuá»™c lá»›p Dạng xem, -nhưng có thể tác động trá»±c tiếp tá»›i cách bạn có thể xá» lý sá»± kiện. Vì thế, khi quản lý các sá»± kiện phức tạp hÆ¡n bên trong +<p>Có má»™t số phương pháp khác mà bạn cần lưu ý, chúng không thuá»™c lá»›p Dạng xem, +nhưng có thể tác động trá»±c tiếp tá»›i cách bạn có thể xá» lý sá»± kiện. Vì thế, khi quản lý các sá»± kiện phức tạp hÆ¡n bên trong má»™t bố trÃ, hãy xét những phương pháp khác sau:</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> - Phương pháp nà y cho phép {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> - Phương pháp nà y cho phép {@link android.app.Activity} cá»§a bạn can thiệp và o tất cả sá»± kiện chạm trước khi chúng được phân phối tá»›i cá»a sổ.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Phương pháp nà y cho phép má»™t {@link android.view.ViewGroup} xem sá»± kiện khi chúng được phân phối tá»›i Dạng xem con.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Gá»i phương pháp - nà y trên Dạng xem mẹ để cho biết rằng nó sẽ không can thiệp và o các sá»± kiện chạm bằng <code>{@link + nà y trên Dạng xem mẹ để cho biết rằng nó sẽ không can thiệp và o các sá»± kiện chạm bằng <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li> </ul> @@ -199,7 +199,7 @@ lấy tiêu Ä‘iểm tá»›i các mục có thể hà nh động (như nút) sao cho mục nà o sẽ chấp nháºn nháºp liệu. Tuy nhiên, nếu thiết bị có khả năng cảm ứng, và ngưá»i dùng bắt đầu tương tác vá»›i giao diện bằng cách chạm và o nó, khi đó không còn cần tô sáng mục hay lấy tiêu Ä‘iểm tá»›i má»™t Dạng xem cụ thể nữa. Do đó, có má»™t chế độ cho -tương tác có tên là "chế độ cảm ứng." +tương tác có tên là "chế độ cảm ứng." </p> <p> Äối vá»›i thiết bị có khả năng cảm ứng, sau khi ngưá»i dùng chạm và o mà n hình, thiết bị @@ -214,7 +214,7 @@ thoát chế độ cảm ứng, và tìm má»™t dạng xem để lấy tiêu Ä‘iá vá»›i giao diện ngưá»i dùng mà không chạm và o mà n hình. </p> <p> -Trạng thái chế độ cảm ứng sẽ được duy trì trên toà n bá»™ hệ thống (tất cả cá»a sổ và hoạt động). +Trạng thái chế độ cảm ứng sẽ được duy trì trên toà n bá»™ hệ thống (tất cả cá»a sổ và hoạt động). Äể truy vấn trạng thái hiện tại, bạn có thể gá»i {@link android.view.View#isInTouchMode} để xem liệu thiết bị có Ä‘ang ở trong chế độ cảm ứng hay không. </p> @@ -254,10 +254,10 @@ tiêu Ä‘iểm Ä‘ang rá»i khá»i. Äịnh nghÄ©a giá trị cá»§a thuá»™c tÃnh <p>Thông thưởng, trong bố trà thẳng đứng nà y, việc Ä‘iá»u hướng lên từ Nút đầu tiên sẽ không Ä‘i tá»›i đâu hết và việc Ä‘iá»u hướng xuống từ Nút thứ hai cÅ©ng váºy. Giá» thì khi Nút trên cùng -đã định nghÄ©a Nút dưới cùng là <var>nextFocusUp</var> (và ngược lại), tiêu Ä‘iểm Ä‘iá»u hướng sẽ +đã định nghÄ©a Nút dưới cùng là <var>nextFocusUp</var> (và ngược lại), tiêu Ä‘iểm Ä‘iá»u hướng sẽ luân chuyển từ trên-xuống-dưới và dưới-lên-trên.</p> -<p>Nếu bạn muốn khai báo má»™t Dạng xem là có thể lấy tiêu Ä‘iểm trong UI cá»§a mình (thông thưá»ng thì không), +<p>Nếu bạn muốn khai báo má»™t Dạng xem là có thể lấy tiêu Ä‘iểm trong UI cá»§a mình (thông thưá»ng thì không), hãy thêm thuá»™c tÃnh XML <code>android:focusable</code> và o Dạng xem, trong khai báo bố trà cá»§a bạn. Äặt giá trị <var>true</var>. Bạn cÅ©ng có thể khai báo má»™t Dạng xem là có thể lấy tiêu Ä‘iểm trong khi ở Chế độ Cảm ứng bằng <code>android:focusableInTouchMode</code>.</p> @@ -282,7 +282,7 @@ như được đỠcáºp trong phần <a href="#EventListeners">Äối tượng the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/vi/preview/api-overview.jd b/docs/html-intl/intl/vi/preview/api-overview.jd index 0e2c35e0e228..5abc2f8829b9 100644 --- a/docs/html-intl/intl/vi/preview/api-overview.jd +++ b/docs/html-intl/intl/vi/preview/api-overview.jd @@ -336,7 +336,7 @@ cá»§a chúng — ngưá»i dùng chỉ cần kéo và thả để thêm hoặ <h2 id="number-blocking">Chặn số</h2> <p>Android N đã há»— trợ chặn số Ä‘iện thoại trong ná»n tảng nà y và cung cấp má»™t - API khuôn khổ cho phép các nhà cung cấp dịch vụ duy trì má»™t danh sách số bị chặn. + API khuôn khổ cho phép các nhà cung cấp dịch vụ duy trì má»™t danh sách số bị chặn. Ứng dụng SMS mặc định, ứng dụng gá»i Ä‘iện mặc định và các ứng dụng cá»§a nhà cung cấp có thể Ä‘á»c và ghi và o danh sách số bị chặn. Các ứng dụng khác không thể truy cáºp và o danh sách nà y.</p> diff --git a/docs/html-intl/intl/vi/preview/behavior-changes.jd b/docs/html-intl/intl/vi/preview/behavior-changes.jd index 2c287504190c..3060fbfe734f 100644 --- a/docs/html-intl/intl/vi/preview/behavior-changes.jd +++ b/docs/html-intl/intl/vi/preview/behavior-changes.jd @@ -67,7 +67,7 @@ page.image=images/cards/card-n-changes_2x.png <p> ÄÆ°á»£c đưa và o Android 6.0 (Mức API 23), Chế độ Ngá»§ sâu cải thiện thá»i lượng pin bằng cách trì hoãn các hoạt động cá»§a CPU và mạng khi ngưá»i dùng không cắm sạc, - không di chuyển và tắt mà n hình thiết bị. Android N + không di chuyển và tắt mà n hình thiết bị. Android N thêm các cải tiến cho Chế độ Ngá»§ sâu bằng cách sá» dụng má»™t táºp con các hạn chế cá»§a CPU và mạng khi thiết bị không được cắm sạc vá»›i mà n hình bị tắt, nhưng không nhất thiết phải để má»™t chá»—, và dụ như má»™t thiết bị cầm tay di chuyển trong túi cá»§a ngưá»i dùng. @@ -250,7 +250,7 @@ page.image=images/cards/card-n-changes_2x.png <ul> <li>Nếu má»™t ứng dụng nhắm mục tiêu mức API 23 hoặc thấp hÆ¡n thì hệ thống sẽ tá»± động tắt tất cả các tiến trình chạy ngầm cá»§a ứng dụng đó. Äiá»u nà y có nghÄ©a là nếu má»™t ngưá»i dùng rá»i khá»i - ứng dụng đó để mở mà n hình <em>Settings</em> và thay đổi + ứng dụng đó để mở mà n hình <em>Settings</em> và thay đổi <strong>Display size</strong> thì hệ thống sẽ tắt ứng dụng giống như trong trưá»ng hợp thiết bị thiếu bá»™ nhá»›. Nếu ứng dụng đó có bất kỳ tiến trình nà o chạy ở tiá»n cảnh thì hệ thống sẽ thông báo cho các tiến trình đó vá» thay đổi cấu hình như @@ -418,7 +418,7 @@ JavaVM::AttachCurrentThread from <jni.h>. <li>GiỠđây các hạn chế đặt lại máºt khẩu cho ngưá»i quản lý thiết bị sẽ áp dụng vá»›i ngưá»i sở hữu cấu hình. Ngưá»i quản lý thiết bị không thể sá» dụng - <code>DevicePolicyManager.resetPassword()</code> được nữa để xóa máºt khẩu hoặc thay đổi + <code>DevicePolicyManager.resetPassword()</code> được nữa để xóa máºt khẩu hoặc thay đổi các máºt khẩu đã đặt. Ngưá»i quản lý thiết bị vẫn có thể đặt má»™t máºt khẩu nhưng chỉ khi thiết bị không có máºt khẩu, mã PIN hoặc mẫu hình. </li> diff --git a/docs/html-intl/intl/vi/preview/download.jd b/docs/html-intl/intl/vi/preview/download.jd index f6aa7ccc67e9..8b2a272a9a92 100644 --- a/docs/html-intl/intl/vi/preview/download.jd +++ b/docs/html-intl/intl/vi/preview/download.jd @@ -209,7 +209,7 @@ page.image=images/cards/card-n-downloads_2x.png <h2 id="device-preview">Thiết láºp thiết bị phần cứng</h2> <p> - Bản N Developer Preview cung cấp các cáºp nháºt hệ thống cho má»™t loạt các thiết bị phần cứng + Bản N Developer Preview cung cấp các cáºp nháºt hệ thống cho má»™t loạt các thiết bị phần cứng mà bạn có thể sá» dụng để kiểm thỠứng dụng cá»§a bạn, từ Ä‘iện thoại tá»›i máy tÃnh bảng và TV. </p> @@ -220,8 +220,8 @@ page.image=images/cards/card-n-downloads_2x.png <ul> <li><strong>Äăng ký cáºp nháºt hệ thống tá»± động qua vô tuyến cho thiết bị</strong> thông qua - <a href="https://g.co/androidbeta">Chương trình Android Beta</a>. Sau khi đăng ký, thiết bị cá»§a bạn sẽ nháºn được - qua sóng vô tuyến các cáºp nháºt định kỳ vá» tất cả bản dá»±ng theo mốc trong bản N Developer Preview. Cách tiếp cáºn nà y + <a href="https://g.co/androidbeta">Chương trình Android Beta</a>. Sau khi đăng ký, thiết bị cá»§a bạn sẽ nháºn được + qua sóng vô tuyến các cáºp nháºt định kỳ vá» tất cả bản dá»±ng theo mốc trong bản N Developer Preview. Cách tiếp cáºn nà y được khuyến khÃch bởi nó cho phép bạn chuyển tiếp liá»n mạch từ môi trưá»ng hiện tại cá»§a bạn qua nhiá»u bản phát hà nh khác nhau cá»§a N Developer Preview.</li> <li><strong>Tải xuống ảnh hệ thống cá»§a Developer Preview và flash thiết bị</strong>. @@ -264,7 +264,7 @@ page.image=images/cards/card-n-downloads_2x.png flash thá»§ công nó và o thiết bị cá»§a bạn. Xem bảng dưới đây để tải xuống ảnh hệ thống cho thiết bị kiểm thá» cá»§a bạn. Việc flash thá»§ công thiết bị sẽ hữu Ãch nếu bạn cần kiểm soát chÃnh xác môi trưá»ng kiểm thá» hoặc cần phải cà i đặt lại thưá»ng xuyên, - chẳng hạn như cho kiểm thá» tá»± động. + chẳng hạn như cho kiểm thá» tá»± động. </p> <!-- You can flash by ota or system image --><p> @@ -286,10 +286,10 @@ page.image=images/cards/card-n-downloads_2x.png </p> <p> - Nếu bạn quyết định muốn nháºn cáºp nháºt qua vô tuyến sau khi đã flash thá»§ công thiết bị, + Nếu bạn quyết định muốn nháºn cáºp nháºt qua vô tuyến sau khi đã flash thá»§ công thiết bị, tất cả những gì bạn cần là m là đăng ký <a href="https://g.co/androidbeta">Chương trình Android Beta</a> cho thiết bị. Bạn có thể đăng ký thiết bị bất cứ lúc nà o để nháºn được - bản cáºp nháºt qua vô tuyến tiếp theo cá»§a Preview. + bản cáºp nháºt qua vô tuyến tiếp theo cá»§a Preview. </p> <table> @@ -300,64 +300,73 @@ page.image=images/cards/card-n-downloads_2x.png <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npc56p-preview-6c877a3d.tgz</a><br> - MD5: b5cf874021023b398f5b983b24913f5d<br> - SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npc56p-preview-54b13c67.tgz</a><br> - MD5: af183638cf34e0eb944a1957d7696f60<br> - SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npc56p-preview-85ffc1b1.tgz</a><br> - MD5: bc4934ea7bd325753eee1606d3725a24<br> - SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npc56p-preview-0e8ec8ef.tgz</a><br> - MD5: c901334c6158351e945f188167ae56f4<br> - SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npc56p-preview-1bafdbfb.tgz</a><br> - MD5: 7bb95bebc478d7257cccb4652899d1b4<br> - SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npc56r-preview-7027d5b6.tgz</a><br> - MD5: f5d3d8f75836ccfe4c70e8162e498be4<br> - SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npc56p-preview-335a86a4.tgz</a><br> - MD5: 4e21fb183bbbf467bee91598d587fd2e<br> - SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> + <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npc56p-preview-82472ebc.tgz</a><br> - MD5: 983e083bc7cd0c4a2d39d6ebaa20202a<br> - SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> @@ -423,7 +432,7 @@ bá»™ giả láºp.</p> <li>Nhấp và o tab <strong>SDK Tools</strong>, rồi chá»n <strong>Android SDK Build Tools</strong>, <strong>Android SDK - Platform-Tools</strong>, và các há»™p kiểm <strong>Android SDK Tools</strong> + Platform-Tools</strong>, và các há»™p kiểm <strong>Android SDK Tools</strong> . </li> @@ -464,7 +473,7 @@ Android Studio 1.5.</p> <p class="note"><strong>Lưu ý:</strong> Nếu bạn hiện Ä‘ang sá» dụng Android Studio 2.0 Beta, má»™t vấn đỠđã được biết đến - sẽ ngăn cản bạn tạo AVD bằng ảnh hệ thống cá»§a N Preview, vì váºy + sẽ ngăn cản bạn tạo AVD bằng ảnh hệ thống cá»§a N Preview, vì váºy hiện bạn cần sá» dụng preview cá»§a Android Studio 2.1 để tạo các AVD. </p> diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd index 9554725f25a3..39e1c15b7a8b 100644 --- a/docs/html-intl/intl/vi/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/vi/preview/features/background-optimization.jd @@ -60,7 +60,7 @@ page.image=images/cards/card-nyc_2x.jpg <ul> <li>Các ứng dụng nhắm đến Preview không nháºn được truyá»n phát {@link - android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng + android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng đăng ký nháºn truyá»n phát trong bản kê khai cá»§a chúng. Các ứng dụng Ä‘ang chạy ở tiá»n cảnh vẫn có thể theo dõi {@code CONNECTIVITY_CHANGE} trên luồng chÃnh cá»§a chúng bằng cách đăng ký{@link android.content.BroadcastReceiver} vá»›i {@link @@ -119,7 +119,7 @@ page.image=images/cards/card-nyc_2x.jpg </h3> <p> - Khi sá» dụng lá»›p{@link android.app.job.JobInfo.Builder JobInfo.Builder} + Khi sá» dụng lá»›p{@link android.app.job.JobInfo.Builder JobInfo.Builder} để xây dá»±ng đối tượng {@link android.app.job.JobInfo} cá»§a bạn, hãy áp dụng phương thức {@link android.app.job.JobInfo.Builder#setRequiredNetworkType setRequiredNetworkType()} và chuyển {@link android.app.job.JobInfo @@ -145,7 +145,7 @@ public static void scheduleJob(Context context) { </pre> <p> - Khi các Ä‘iá»u kiện cho tác vụ cá»§a bạn đã được đáp ứng, ứng dụng cá»§a bạn sẽ nháºn được lệnh gá»i lại để chạy + Khi các Ä‘iá»u kiện cho tác vụ cá»§a bạn đã được đáp ứng, ứng dụng cá»§a bạn sẽ nháºn được lệnh gá»i lại để chạy phương thức{@link android.app.job.JobService#onStartJob onStartJob()}trong {@code JobService.class} được chỉ định. Äể xem thêm các và dụ vá» triển khai {@link android.app.job.JobScheduler} , hãy xem <a href="{@docRoot}samples/JobScheduler/index.html">ứng dụng mẫu JobScheduler</a>. @@ -243,7 +243,7 @@ public static void scheduleJob(Context context) { </dl> <p class="note"> - <strong>Lưu ý:</strong> {@code TriggerContentUri()} không thể được sá» dụng + <strong>Lưu ý:</strong> {@code TriggerContentUri()} không thể được sá» dụng kết hợp vá»›i {@link android.app.job.JobInfo.Builder#setPeriodic setPeriodic()} hoặc {@link android.app.job.JobInfo.Builder#setPersisted setPersisted()}. Äể tiếp tục theo dõi các thay đổi ná»™i dung, hãy lên lịch má»™t @@ -313,7 +313,7 @@ public static void scheduleJob(Context context) { <p> Mã mẫu sau sẽ ghi đè lên phương thức {@link - android.app.job.JobService#onStartJob JobService.onStartJob()} và + android.app.job.JobService#onStartJob JobService.onStartJob()} và và ghi lại các thẩm quyá»n ná»™i dung và URI đã kÃch hoạt tác vụ. </p> @@ -357,7 +357,7 @@ public boolean onStartJob(JobParameters params) { bá»™ nhá»› Ãt có thể cải thiện hiệu suất và trải nghiệm cá»§a ngưá»i dùng. Loại bá» các thà nh phần phụ thuá»™c trên các dịch vụ chạy ngầm và bá»™ thu truyá»n phát không biểu thị đã đăng ký tÄ©nh có thể giúp ứng dụng cá»§a bạn chạy tốt hÆ¡n trên các thiết bị như váºy. Mặc dù - N Developer Preview thá»±c hiện các bước để giảm bá»›t má»™t và i trong số các vấn đỠnà y, nhưng chúng tôi + N Developer Preview thá»±c hiện các bước để giảm bá»›t má»™t và i trong số các vấn đỠnà y, nhưng chúng tôi khuyến nghị bạn nên tối ưu ứng dụng cá»§a bạn để chạy hoà n toà n không cần sá» dụng các tiến trình chạy ngầm nà y. </p> diff --git a/docs/html-intl/intl/vi/preview/features/direct-boot.jd b/docs/html-intl/intl/vi/preview/features/direct-boot.jd index d95d83103b15..9b2a557c2b16 100644 --- a/docs/html-intl/intl/vi/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/vi/preview/features/direct-boot.jd @@ -81,7 +81,7 @@ bá»™ lá»c ý định cho <code>LOCKED_BOOT_COMPLETED</code> trong bản kê kha </receiver> </pre> -<p>Khi ngưá»i dùng đã mở khóa thiết bị thì má»i thà nh phần có thể truy cáºp +<p>Khi ngưá»i dùng đã mở khóa thiết bị thì má»i thà nh phần có thể truy cáºp cả bá»™ nhá»› lưu trữ mã hóa thiết bị lẫn bá»™ nhá»› lưu trữ mã hóa thông tin xác thá»±c.</p> <h2 id="access">Truy cáºp Bá»™ nhá»› Lưu trữ Mã hóa cá»§a Thiết bị</h2> @@ -89,7 +89,7 @@ cả bá»™ nhá»› lưu trữ mã hóa thiết bị lẫn bá»™ nhá»› lưu trữ mã <p>Äể truy cáºp bá»™ nhá»› lưu trữ mã hóa thiết bị, hãy tạo má»™t thá»±c thể {@link android.content.Context} thứ hai bằng cách gá»i <code>Context.createDeviceEncryptedStorageContext()</code>. Tất cả các lệnh gá»i -API bá»™ nhá»› lưu trữ Ä‘á»u sá» dụng bối cảnh nà y để truy cáºp bá»™ nhá»› lưu trữ mã hóa thiết bị. +API bá»™ nhá»› lưu trữ Ä‘á»u sá» dụng bối cảnh nà y để truy cáºp bá»™ nhá»› lưu trữ mã hóa thiết bị. Và dụ sau sẽ truy cáºp bá»™ nhá»› lưu trữ mã hóa cá»§a thiết bị và mở má»™t tệp dữ liệu ứng dụng có sẵn:</p> diff --git a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd index 63f6825df8ba..ffb57994a881 100644 --- a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd +++ b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd @@ -51,7 +51,7 @@ page.image=images/cards/card-nyc_2x.jpg <p> Android N cung cấp má»™t táºp nhá» các API ICU4J thông qua - gói <code>android.icu</code> thay vì gói <code>com.ibm.icu</code>. + gói <code>android.icu</code> thay vì gói <code>com.ibm.icu</code>. Khuôn khổ Android có thể chá»n không cung cấp các API ICU4J vì nhiá»u lý do; và dụ, Android N không cung cấp má»™t số API bị loại bá» hoặc những API chưa được đội ngÅ© ICU công bố là @@ -79,7 +79,7 @@ Khuôn khổ Android có thể chá»n không <ul> <li>Các API khuôn khổ Android ICU4J không có tất cả các API cá»§a ICU4J.</li> <li>Các nhà phát triển NDK cần biết rằng ICU4C Android không được há»— trợ.</li> -<li>Các API trong khuôn khổ Android không thay thế há»— trợ cá»§a Android cho +<li>Các API trong khuôn khổ Android không thay thế há»— trợ cá»§a Android cho <a href="{@docRoot}guide/topics/resources/localization.html">việc bản địa hóa bằng các tà i nguyên</a>.</li> </ul> @@ -87,7 +87,7 @@ các tà i nguyên</a>.</li> <h2 id="migration">Chuyển nháºp sang gói android.icu từ com.ibm.icu</h2> <p> - Nếu bạn đã sá» dụng các API ICU4J trong ứng dụng và + Nếu bạn đã sá» dụng các API ICU4J trong ứng dụng và các API <code>android.icu</code> đáp ứng yêu cầu cá»§a bạn thì việc chuyển nháºp sang các API cá»§a khuôn khổ đòi há»i bạn phải thay đổi thà nh phần nháºp và o cá»§a Java từ <code>com.ibm.icu</code> sang <code>android.icu</code>. Khi đó bạn có thể diff --git a/docs/html-intl/intl/vi/preview/features/multi-window.jd b/docs/html-intl/intl/vi/preview/features/multi-window.jd index 485bc284786f..5b2cb54cbc1c 100644 --- a/docs/html-intl/intl/vi/preview/features/multi-window.jd +++ b/docs/html-intl/intl/vi/preview/features/multi-window.jd @@ -33,7 +33,7 @@ page.keywords="multi-window", "android N", "split screen", "free-form" <p> Nếu bạn dá»±ng ứng dụng cá»§a bạn bằng N Preview SDK, bạn có thể cấu hình cách ứng dụng cá»§a bạn - xá» lý hiển thị Ä‘a cá»a sổ. Và dụ, bạn có thể quy định + xá» lý hiển thị Ä‘a cá»a sổ. Và dụ, bạn có thể quy định các kÃch thước tối thiểu cho phép cá»§a hoạt động cá»§a bạn. Bạn cÅ©ng có thể vô hiệu hóa hiển thị Ä‘a cá»a sổ cho ứng dụng cá»§a bạn, đảm bảo rằng hệ thống chỉ hiển thị ứng dụng cá»§a bạn trong chế độ toà n mà n hình. @@ -117,7 +117,7 @@ page.keywords="multi-window", "android N", "split screen", "free-form" <p class="note"> <strong>Lưu ý:</strong> Trong chế độ Ä‘a cá»a sổ, má»™t ứng dụng có thể trong trạng thái - tạm dừng và vẫn hiển thị vá»›i ngưá»i dùng. Ứng dụng có thể cần tiếp tục + tạm dừng và vẫn hiển thị vá»›i ngưá»i dùng. Ứng dụng có thể cần tiếp tục các hoạt động cá»§a nó tháºm chà trong khi Ä‘amg bị tạm dừng. Và dụ, má»™t ứng dụng phát video Ä‘ang ở trong chế độ tạm dừng nhưng vẫn hiển thị thì sẽ tiếp tục hiển thị video cá»§a nó. Vì lý do nà y, chúng tôi đỠnghị các hoạt động phát video <em>không</em> tạm dừng @@ -129,13 +129,13 @@ page.keywords="multi-window", "android N", "split screen", "free-form" <p> Khi ngưá»i dùng đặt má»™t ứng dụng và o trong chế độ Ä‘a cá»a sổ, hệ thống sẽ thông báo vá» - hoạt động thay đổi cấu hình đó, như được quy định trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xá» lý Thay đổi + hoạt động thay đổi cấu hình đó, như được quy định trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xá» lý Thay đổi Thá»i gian chạy</a>. Vá» cÆ¡ bản, thay đổi nà y có ngụ ý vá» vòng Ä‘á»i hoạt động tương tá»± vì khi hệ thống thông báo cho ứng dụng rằng thiết bị đã chuyển từ chế độ hướng dá»c sang chế độ ngang, ngoại trừ trưá»ng hợp các kÃch thước cá»§a thiết bị đã được thay đổi thay vì chỉ bị hoán đổi. Như đã thảo luáºn trong phần <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xá» lý Thay đổi Thá»i gian chạy</a>, hoạt động cá»§a bạn có thể tá»± xá» lý thay đổi cấu hình nà y, hoặc nó - có thể cho phép hệ thống há»§y hoạt động nà y và tạo lại nó vá»›i + có thể cho phép hệ thống há»§y hoạt động nà y và tạo lại nó vá»›i các kÃch thước má»›i. </p> @@ -207,7 +207,7 @@ android:supportsPictureInPicture=["true" | "false"] <h3 id="layout">Thuá»™c tÃnh bố trÃ</h3> <p> - Vá»›i Android N, phần tá» bản kê khai <code><layout></code> + Vá»›i Android N, phần tá» bản kê khai <code><layout></code> có há»— trợ má»™t số thuá»™c tÃnh sẽ ảnh hưởng đến cách hoạt động có hà nh vi như thế nà o trong chế độ Ä‘a cá»a sổ: </p> @@ -244,7 +244,7 @@ android:supportsPictureInPicture=["true" | "false"] <dd> Chiá»u cao và chiá»u rá»™ng tối thiểu cho hoạt động trong cả chế độ chia mà n hình - và chế độ hình dạng tá»± do. Nếu ngưá»i dùng di chuyển thanh phân chia trong chế độ chia mà n hình + và chế độ hình dạng tá»± do. Nếu ngưá»i dùng di chuyển thanh phân chia trong chế độ chia mà n hình để là m cho hoạt động nhá» hÆ¡n mức tối thiểu quy định, hệ thống sẽ cắt xén hoạt động đó thà nh kÃch cỡ mà ngưá»i dùng yêu cầu. </dd> @@ -295,7 +295,7 @@ android:supportsPictureInPicture=["true" | "false"] <p> Các phương thức má»›i sau đây đã được thêm và o lá»›p {@link android.app.Activity} - để há»— trợ hiển thị Ä‘a cá»a sổ. Äể biết chi tiết vá» má»—i phương thức, xem + để há»— trợ hiển thị Ä‘a cá»a sổ. Äể biết chi tiết vá» má»—i phương thức, xem <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N Preview SDK</a>. </p> @@ -560,7 +560,7 @@ android:supportsPictureInPicture=["true" | "false"] </li> <li>Thá»±c hiện má»™t và i thao tác thay đổi kÃch cỡ nối tiếp nhau tháºt nhanh. Xác minh rằng ứng dụng - cá»§a bạn không bị lá»—i hoặc bị rò rỉ bá»™ nhá»›. Äể biết thông tin vá» kiểm tra việc sá» dụng bá»™ nhá»› cá»§a + cá»§a bạn không bị lá»—i hoặc bị rò rỉ bá»™ nhá»›. Äể biết thông tin vá» kiểm tra việc sá» dụng bá»™ nhá»› cá»§a ứng dụng, xem <a href="{@docRoot}tools/debugging/debugging-memory.html"> Kiểm tra Sá» dụng RAM cá»§a bạn</a>. </li> diff --git a/docs/html-intl/intl/vi/preview/features/notification-updates.jd b/docs/html-intl/intl/vi/preview/features/notification-updates.jd index d80cf6c08f5e..f60646a46f43 100644 --- a/docs/html-intl/intl/vi/preview/features/notification-updates.jd +++ b/docs/html-intl/intl/vi/preview/features/notification-updates.jd @@ -37,7 +37,7 @@ hiện có để há»— trợ trả lá»i giữa dòng trên thiết bị cầm ta thông báo, từng thông báo má»™t từ khu vá»±c hiển thị thông báo. </p> -<p>Cuối cùng, Android N cÅ©ng thêm các API má»›i cho phép bạn táºn dụng các trang trà +<p>Cuối cùng, Android N cÅ©ng thêm các API má»›i cho phép bạn táºn dụng các trang trà cá»§a hệ thống trong các dạng xem thông báo tùy chỉnh cá»§a ứng dụng cá»§a bạn. Các API nà y giúp đảm bảo rằng dạng xem thông báo có chung má»™t cách trình bà y nhất quán vá»›i các mẫu tiêu chuẩn.</p> @@ -69,9 +69,9 @@ cá»§a thông báo. Trên thiết bị cầm tay, hà nh động trả lá»i giữ </p> <ol> -<li>Tạo thá»±c thể{@link android.support.v4.app.RemoteInput.Builder} +<li>Tạo thá»±c thể{@link android.support.v4.app.RemoteInput.Builder} mà bạn có thể thêm và o hà nh động -thông báo cá»§a bạn. Hà m dá»±ng cá»§a lá»›p nà y sẽ chấp nháºn xâu mà hệ thống sá» dụng là m khóa +thông báo cá»§a bạn. Hà m dá»±ng cá»§a lá»›p nà y sẽ chấp nháºn xâu mà hệ thống sá» dụng là m khóa cho nháºp liệu văn bản. Sau đó, ứng dụng cầm tay cá»§a bạn sá» dụng khóa đó để truy xuất văn bản nháºp liệu. diff --git a/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd b/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd index 4b3cb400f72e..65799dbb0ca3 100644 --- a/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd +++ b/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd @@ -128,7 +128,7 @@ các hà nh động ở chế độ PIP trên thanh Ä‘iá»u khiển và sá» dụ video. Hãy xóa các phần tá» UI trước khi hoạt động cá»§a bạn và o chế độ PIP, và khôi phục các phần tá» nà y khi hoạt động quay lại chế độ toà n mà n hình. Ghi đè phương thức <code>Activity.onPictureInPictureChanged()</code> hoặc -<code>Fragment.onPictureInPictureChanged()</code> và báºt hoặc +<code>Fragment.onPictureInPictureChanged()</code> và báºt hoặc tắt các phần tá» UI khi cần thiết, và dụ:</p> <pre> @@ -150,7 +150,7 @@ public void onPictureInPictureChanged(boolean inPictureInPicture) { <p>Khi hoạt động cá»§a bạn chuyển sang chế độ PIP thì hệ thống sẽ coi hoạt động đó Ä‘ang ở trong trạng thái tạm dừng và sẽ gá»i phương thức <code>onPause()</code> cá»§a hoạt động. Việc phát lại video không nên được tạm dừng và cần được tiếp tục phát nếu hoạt động -bị tạm dừng do chế độ PIP. Hãy kiểm tra chế độ PIP trong phương thức +bị tạm dừng do chế độ PIP. Hãy kiểm tra chế độ PIP trong phương thức <code>onPause()</code> cá»§a hoạt động và xá» lý việc phát lại cho phù hợp, và dụ:</p> diff --git a/docs/html-intl/intl/vi/preview/overview.jd b/docs/html-intl/intl/vi/preview/overview.jd index a71bf61b34ab..f7094896a4e4 100644 --- a/docs/html-intl/intl/vi/preview/overview.jd +++ b/docs/html-intl/intl/vi/preview/overview.jd @@ -175,7 +175,7 @@ page.tags="preview", "developer", "android" </p> <p> - Tại <strong>Preview 4 và 5</strong> bạn sẽ được sá» dụng <strong>các + Tại <strong>Preview 4 và 5</strong> bạn sẽ được sá» dụng <strong>các API và SDK N cuối cùng</strong> để phát triển, và cả các ảnh hệ thống gần hoà n thiện để kiểm thá» các hà nh vi, tÃnh năng cá»§a hệ thống. Android N sẽ cung cấp má»™t mức API chuẩn và o thá»i Ä‘iểm nà y. Bạn có thể tiến hà nh kiểm thá» khả năng tương thÃch cuối cùng đối vá»›i các ứng dụng @@ -321,7 +321,7 @@ Android N</a> có Hà nh vi</a> chỉ ra cho bạn các phần chÃnh yếu để kiểm thá».</li> <li> Tổng quan vá» các API má»›i, bao gồm má»™t phần <a href="{@docRoot}preview/api-overview.html">Tổng quan vá» API</a>, bản tải xuống được <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo - API</a> và các hướng dẫn chi tiết cho nhà phát triển đối vá»›i các tÃnh năng quan trá»ng như + API</a> và các hướng dẫn chi tiết cho nhà phát triển đối vá»›i các tÃnh năng quan trá»ng như há»— trợ Ä‘a cá»a sổ, thông báo gá»™p, há»— trợ Ä‘a bản địa và các tÃnh năng khác. <li> <a href="{@docRoot}preview/samples.html">Mã mẫu</a> trong đó minh há»a cách há»— trợ các quyá»n và tÃnh năng má»›i. diff --git a/docs/html-intl/intl/vi/training/material/animations.jd b/docs/html-intl/intl/vi/training/material/animations.jd index e93c99d64508..9299d3c931a8 100644 --- a/docs/html-intl/intl/vi/training/material/animations.jd +++ b/docs/html-intl/intl/vi/training/material/animations.jd @@ -21,7 +21,7 @@ page.title=Äịnh nghÄ©a Hoạt hình Tùy chỉnh </div> -<p>Hoạt hình theo phong cách material design phản hồi hà nh động cá»§a ngưá»i dùng và cung cấp +<p>Hoạt hình theo phong cách material design phản hồi hà nh động cá»§a ngưá»i dùng và cung cấp tÃnh liên tục trá»±c quan khi ngưá»i dùng tương tác vá»›i ứng dụng cá»§a bạn. Giao diện material cung cấp má»™t số hoạt hình mặc định cho các nút và chuyển tiếp hoạt động, và Android 5.0 (API mức 21) và cao hÆ¡n cho phép bạn tùy chỉnh những hoạt hình nà y và tạo các hoạt hình má»›i:</p> @@ -160,7 +160,7 @@ trung tâm.</li> <li>Chuyển tiếp <strong>phần tá» chung</strong> xác định các dạng xem chung giữa hai hoạt động sẽ chuyển tiếp như thế nà o giữa những hoạt động nà y. Và dụ, nếu hai hoạt động có cùng -hình ảnh ở các vị trà và kÃch cỡ khác nhau, chuyển tiếp phần tá» chung <em>changeImageTransform</em> +hình ảnh ở các vị trà và kÃch cỡ khác nhau, chuyển tiếp phần tá» chung <em>changeImageTransform</em> sẽ thể hiện và co giãn hình ảnh má»™t cách mượt mà giữa những hoạt động nà y.</li> </ul> @@ -329,7 +329,7 @@ thay vì {@link android.app.Activity#finish Activity.finish()}.</p> <p>Äể tạo má»™t hoạt hình chuyển tiếp cảnh giữa hai hoạt động có nhiá»u hÆ¡n má»™t phần tá» chung, hãy định nghÄ©a các phần tá» chung trong cả hai bố trà bằng thuá»™c tÃnh <code>android:transitionName</code> - (hoặc sá» dụng phương thức {@link android.view.View#setTransitionName View.setTransitionName()} + (hoặc sá» dụng phương thức {@link android.view.View#setTransitionName View.setTransitionName()} trong cả hai hoạt động), và tạo má»™t đối tượng {@link android.app.ActivityOptions} như sau:</p> <pre> diff --git a/docs/html-intl/intl/vi/training/material/compatibility.jd b/docs/html-intl/intl/vi/training/material/compatibility.jd index e19a745dd9b9..2f5c0160f675 100644 --- a/docs/html-intl/intl/vi/training/material/compatibility.jd +++ b/docs/html-intl/intl/vi/training/material/compatibility.jd @@ -94,7 +94,7 @@ r21 và cao hÆ¡n gồm những tÃnh năng material design sau:</p> <h3>Bảng mà u</h3> -<p>Äể có được các kiểu phong cách material design và tùy chỉnh bảng mà u bằng Thư viện Há»— trợ v7 +<p>Äể có được các kiểu phong cách material design và tùy chỉnh bảng mà u bằng Thư viện Há»— trợ v7 cá»§a Android, hãy áp dụng má»™t trong các chá»§ đỠ<code>Theme.AppCompat</code>:</p> <pre> diff --git a/docs/html-intl/intl/vi/training/material/drawables.jd b/docs/html-intl/intl/vi/training/material/drawables.jd index 175e77d629e8..db69412c544e 100644 --- a/docs/html-intl/intl/vi/training/material/drawables.jd +++ b/docs/html-intl/intl/vi/training/material/drawables.jd @@ -57,7 +57,7 @@ Lá»›p nà y trÃch xuất những mà u nổi báºt sau:</p> <li>Sáng lặng</li> </ul> -<p>Äể trÃch xuất những mà u nà y, hãy chuyển má»™t đối tượng {@link android.graphics.Bitmap} cho phương thức tÄ©nh +<p>Äể trÃch xuất những mà u nà y, hãy chuyển má»™t đối tượng {@link android.graphics.Bitmap} cho phương thức tÄ©nh {@link android.support.v7.graphics.Palette#generate Palette.generate()} trong luồng chạy ngầm nÆ¡i bạn tải hình ảnh cá»§a mình. Nếu bạn không thể sá» dụng luồng đó, hãy gá»i phương thức {@link android.support.v7.graphics.Palette#generateAsync Palette.generateAsync()} và diff --git a/docs/html-intl/intl/vi/training/material/get-started.jd b/docs/html-intl/intl/vi/training/material/get-started.jd index 9e612ad10c07..45d7c09e3e0b 100644 --- a/docs/html-intl/intl/vi/training/material/get-started.jd +++ b/docs/html-intl/intl/vi/training/material/get-started.jd @@ -94,7 +94,7 @@ bố trà cá»§a bạn, hãy đặc biệt chú ý tá»›i Ä‘iá»u sau đây:</p> <h2 id="Depth">Quy định Äá»™ cao trong Dạng xem cá»§a Bạn</h2> -<p>Dạng xem có thể đổ bóng và giá trị độ cao cá»§a má»™t dạng xem +<p>Dạng xem có thể đổ bóng và giá trị độ cao cá»§a má»™t dạng xem xác định kÃch cỡ bóng và thứ tá»± vẽ cá»§a nó. Äể đặt độ cao cá»§a má»™t dạng xem, hãy sá» dụng thuá»™c tÃnh <code>android:elevation</code> trong bố trà cá»§a bạn:</p> @@ -122,7 +122,7 @@ chạm</a>.</p> <p>{@link android.support.v7.widget.RecyclerView} là má»™t phiên bản dá»… ghép nối hÆ¡n cá»§a {@link android.widget.ListView} có há»— trợ các kiểu bố trà khác nhau và cung cấp những cải tiến vá» hiệu năng. {@link android.support.v7.widget.CardView} cho phép bạn hiện các mẩu thông tin bên trong thẻ vá»›i -má»™t diện mạo nhất quán giữa các ứng dụng. Và dụ vá» mã sau đây minh há»a cách thêm +má»™t diện mạo nhất quán giữa các ứng dụng. Và dụ vá» mã sau đây minh há»a cách thêm {@link android.support.v7.widget.CardView} và o bố trà cá»§a bạn:</p> <pre> diff --git a/docs/html-intl/intl/vi/training/material/index.jd b/docs/html-intl/intl/vi/training/material/index.jd index 44b74e1826fd..eb489457e7c2 100644 --- a/docs/html-intl/intl/vi/training/material/index.jd +++ b/docs/html-intl/intl/vi/training/material/index.jd @@ -17,7 +17,7 @@ page.metaDescription=Tìm hiểu cách áp dụng material design cho ứng dụ <p>Material design là má»™t hướng dẫn toà n diện vá» thiết kế trá»±c quan, chuyển động và tương tác giữa nhiá»u ná»n tảng và thiết bị. Äể sá» dụng material design trong ứng dụng Androi cá»§a mình, hãy là m theo hướng dẫn -mô tả trong +mô tả trong <a href="http://www.google.com/design/spec/material-design/introduction.html">đặc tả material design</a> và sá» dụng những thà nh phần và tÃnh năng má»›i sẵn có trong Android 5.0 (API mức 21).</p> diff --git a/docs/html-intl/intl/vi/training/material/lists-cards.jd b/docs/html-intl/intl/vi/training/material/lists-cards.jd index 7127649bda83..47a7d6f8f3b4 100644 --- a/docs/html-intl/intl/vi/training/material/lists-cards.jd +++ b/docs/html-intl/intl/vi/training/material/lists-cards.jd @@ -210,7 +210,7 @@ android.support.v7.widget.CardView} có thể có đổ bóng và góc bo tròn. Äể biết thêm thông tin, hãy xem phần <a href="{@docRoot}training/material/compatibility.html">Duy trì TÃnh tương thÃch</a>.</p> -<p>Sá» dụng những thuá»™c tÃnh sau để tùy chỉnh diện mạo cá»§a widget +<p>Sá» dụng những thuá»™c tÃnh sau để tùy chỉnh diện mạo cá»§a widget {@link android.support.v7.widget.CardView}:</p> <ul> diff --git a/docs/html-intl/intl/vi/training/material/shadows-clipping.jd b/docs/html-intl/intl/vi/training/material/shadows-clipping.jd index e9091f289fcb..f4ce4025963f 100644 --- a/docs/html-intl/intl/vi/training/material/shadows-clipping.jd +++ b/docs/html-intl/intl/vi/training/material/shadows-clipping.jd @@ -22,7 +22,7 @@ page.title=Äịnh nghÄ©a Äổ bóng và Dạng xem Cắt hình tầm quan trá»ng tương đối cá»§a từng phần tá» và táºp chung sá»± chú ý cá»§a há» và o tác vụ hiện có.</p> <p>Äá»™ cao cá»§a má»™t dạng xem, được biểu diá»…n bằng thuá»™c tÃnh Z, sẽ xác định diện mạo trá»±c quan cá»§a -bóng đổ: dạng xem có giá trị Z cao hÆ¡n sẽ đổ bóng lá»›n hÆ¡n, má»m hÆ¡n. Dạng xem có giá trị Z cao hÆ¡n sẽ che khuất dạng xem +bóng đổ: dạng xem có giá trị Z cao hÆ¡n sẽ đổ bóng lá»›n hÆ¡n, má»m hÆ¡n. Dạng xem có giá trị Z cao hÆ¡n sẽ che khuất dạng xem có giá trị Z thấp hÆ¡n; tuy nhiên, giá trị Z cá»§a má»™t dạng xem không ảnh hưởng tá»›i kÃch cỡ cá»§a dạng xem.</p> <p>Äổ bóng được vẽ bởi dạng xem mẹ cá»§a dạng xem cao hÆ¡n, do váºy nó phụ thuá»™c và o tiêu chuẩn cắt dạng xem, @@ -51,7 +51,7 @@ trong không gian 3D</a>.</p> <p class="img-caption"><strong>Hình 1</strong> - Äổ bóng cho các độ cao dạng xem khác nhau.</p> <p>Äể đặt độ cao cá»§a dạng xem trong má»™t định nghÄ©a bố trÃ, hãy sá» dụng thuá»™c tÃnh <code>android:elevation</code> -. Äể đặt độ cao cá»§a dạng xem trong mã cá»§a má»™t hoạt động, hãy sá» dụng phương thức +. Äể đặt độ cao cá»§a dạng xem trong mã cá»§a má»™t hoạt động, hãy sá» dụng phương thức {@link android.view.View#setElevation View.setElevation()}.</p> <p>Äể đặt độ dịch cá»§a dạng xem, hãy sá» dụng phương thức {@link android.view.View#setTranslationZ @@ -59,7 +59,7 @@ View.setTranslationZ()}.</p> <p>Các phương thức {@link android.view.ViewPropertyAnimator#z ViewPropertyAnimator.z()} và {@link android.view.ViewPropertyAnimator#translationZ ViewPropertyAnimator.translationZ()} má»›i cho phép -bạn dá»… dà ng tạo hiệu ứng hoạt hình cho độ cao cá»§a dạng xem. Äể biết thêm thông tin, hãy xem tà i liệu tham khảo API cho +bạn dá»… dà ng tạo hiệu ứng hoạt hình cho độ cao cá»§a dạng xem. Äể biết thêm thông tin, hãy xem tà i liệu tham khảo API cho {@link android.view.ViewPropertyAnimator} và hướng dẫn cho nhà phát triển vá» <a href="{@docRoot}guide/topics/graphics/prop-animation.html">Hoạt hình Thuá»™c tÃnh</a> .</p> diff --git a/docs/html-intl/intl/zh-cn/about/versions/android-5.0.jd b/docs/html-intl/intl/zh-cn/about/versions/android-5.0.jd index 8e20975eb512..81591450ec8f 100644 --- a/docs/html-intl/intl/zh-cn/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/zh-cn/about/versions/android-5.0.jd @@ -430,7 +430,7 @@ sdk.platform.apiLevel=21 <p>当系统检测到åˆé€‚的网络时,它将连接到该网络并调用 {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()} 回调。您å¯ä»¥åœ¨å›žè°ƒä¸ä½¿ç”¨ {@link android.net.Network} 对象æ¥èŽ·å–关于该网络的更多信æ¯ï¼Œæˆ–者指示通信使用选定的网络。</p> <h3 id="BluetoothBroadcasting">低功耗è“牙</h3> -<p>Android 4.3 ä¸ä½œä¸ºé‡å¤´æˆå¼•入了对<a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">低功耗è“牙</a>(“低功耗è“牙â€<em></em>ï¼‰çš„å¹³å°æ”¯æŒã€‚在 Android 5.0 ä¸ï¼ŒAndroid 设备现在å¯ä»¥ç”¨ä½œä½ŽåŠŸè€—è“牙<em>外围设备</em>。应用å¯ä»¥ä½¿ç”¨æ¤åŠŸèƒ½ä½¿é™„è¿‘çš„è®¾å¤‡çŸ¥é“它的å˜åœ¨ã€‚例如,您å¯ä»¥æž„建相应的应用æ¥å…许设备用作计æ¥å™¨æˆ–å¥åº·æ£€æµ‹å™¨å¹¶ä¸Žå¦ä¸€ä½ŽåŠŸè€—è“牙设备交æ¢å…¶æ•°æ®ã€‚</p> +<p>Android 4.3 ä¸ä½œä¸ºé‡å¤´æˆå¼•入了对<a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">低功耗è“牙</a>(“低功耗è“牙â€<em></em>ï¼‰çš„å¹³å°æ”¯æŒã€‚在 Android 5.0 ä¸ï¼ŒAndroid 设备现在å¯ä»¥ç”¨ä½œä½ŽåŠŸè€—è“牙<em>外围设备</em>。应用å¯ä»¥ä½¿ç”¨æ¤åŠŸèƒ½ä½¿é™„è¿‘çš„è®¾å¤‡çŸ¥é“它的å˜åœ¨ã€‚例如,您å¯ä»¥æž„建相应的应用æ¥å…许设备用作计æ¥å™¨æˆ–å¥åº·æ£€æµ‹å™¨å¹¶ä¸Žå¦ä¸€ä½ŽåŠŸè€—è“牙设备交æ¢å…¶æ•°æ®ã€‚</p> <p>æ–°çš„ {@link android.bluetooth.le} API å…许您的应用对公告进行广æ’,扫æå“应,以åŠä¸Žé™„近的低功能è“牙设备建立连接。è¦ä½¿ç”¨æ–°çš„公告和扫æåŠŸèƒ½ï¼Œè¯·åœ¨æ‚¨çš„æ¸…å•䏿·»åŠ {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} æƒé™ã€‚当用户从 Play å•†åº—æ›´æ–°æˆ–ä¸‹è½½æ‚¨çš„åº”ç”¨æ—¶ï¼Œä¼šè¦æ±‚他们呿‚¨çš„应用授予以下æƒé™ï¼šâ€œè“牙连接信æ¯ï¼šå…许应用控制è“牙,包括å‘附近的è“牙设备进行广æ’以åŠèŽ·å–关于这些设备的信æ¯ã€‚â€</p> <p>è¦å¼€å§‹ä½ŽåŠŸè€—è“牙公告以便其他设备å¯ä»¥å‘现您的应用,请调用 {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} å¹¶ä¼ å…¥ {@link android.bluetooth.le.AdvertiseCallback} 类的一个实施。回调对象将收到关于公告æ“作æˆåŠŸæˆ–å¤±è´¥çš„æŠ¥å‘Šã€‚</p> diff --git a/docs/html-intl/intl/zh-cn/design/style/writing.jd b/docs/html-intl/intl/zh-cn/design/style/writing.jd index 7944c24c1ed2..c0c3e5408897 100644 --- a/docs/html-intl/intl/zh-cn/design/style/writing.jd +++ b/docs/html-intl/intl/zh-cn/design/style/writing.jd @@ -174,7 +174,7 @@ page.type=设计 <li>使用缩写è¯ã€‚</li> <li>ä½¿ç”¨â€œæ‚¨â€æˆ–â€œä½ â€ç›´æŽ¥ä¸Žè¯»è€…对è¯ã€‚</li> <li>è¯æ°”应轻æ¾è‡ªç„¶ï¼Œä½†è¦é¿å…使用俚è¯ã€‚</li> - + </ul> <p><em>é¿å…使用令人困惑或令人厌烦的表达</em></p> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd index bfdb210ee0d9..382c4c729515 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body - <div id="qv-wrapper"> + <div id="qv-wrapper"> <div id="qv"> <h2>关于 Google Play</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd index 7d0bd55ca307..d9255662f762 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd @@ -4,8 +4,8 @@ page.image=/distribute/images/developer-console.jpg Xnonavpage=true @jd:body - - <div id="qv-wrapper"> + + <div id="qv-wrapper"> <div id="qv"> <h2>å‘布功能</h2> <ol> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd index ea8bb613cda3..7b0cf1db1e2f 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=“为家åºè®¾è®¡â€è®¡åˆ’çš„é—®ç” font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>本文内容</h2> @@ -141,7 +141,7 @@ page.metaDescription=“为家åºè®¾è®¡â€è®¡åˆ’çš„é—®ç” å‡è®¾æ‚¨çš„应用符åˆè¯¥è®¡åˆ’çš„æ‰€æœ‰è¦æ±‚,我们预计å‘布时间ä¸ä¼šè¶…过æ£å¸¸æ—¶é—´ï¼›ä½†æ˜¯ï¼Œå¦‚果在“为家åºè®¾è®¡â€å®¡æŸ¥æ—¶è¢«æ‹’ç»ï¼Œåˆ™åº”用的å‘布å¯èƒ½ä¼šå»¶è¿Ÿã€‚ - + </dd> <dt> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd index aab4b5aaa95b..e81bac5843fe 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd @@ -78,7 +78,7 @@ ESRB 10+ 分级的应用åªèƒ½é€‰æ‹©ä¸€ä¸ªç›®æ ‡å¹´é¾„:9-12 岿ˆ–一般å—ä¼— <p class="note"> <strong>注æ„</strong>:在“为家åºè®¾è®¡â€è®¡åˆ’ä¸å‘布的应用也å¯ä¾› - Google Play 上的所有用户使用。 + Google Play 上的所有用户使用。 </p> <p> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd index b70bcb5c79ee..7b280cf1baea 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd @@ -18,7 +18,7 @@ page.image=distribute/images/play_dev_guide.png <ul> <li> <strong>在 Google Play 上å‘布</strong> —使用 Google Play - 的开å‘者控制å°ï¼Œå°†æ‚¨çš„应用分å‘给全çƒè¶…过 10 亿 + 的开å‘者控制å°ï¼Œå°†æ‚¨çš„应用分å‘给全çƒè¶…过 10 亿 Android 用户。 </li> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd index a590446f4dfb..9f61a35a0113 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd @@ -162,7 +162,7 @@ page.image=/distribute/images/gp-auto-quality.png <tr> <td rowspan="3" id="layout"> - 布局 + 布局 </td> <td id="AU-SC"> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd index 0dae9e170e58..793d110e6f87 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd @@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>测试</h2> <ol> <li><a href="#test-environment">设置测试环境</a></li> @@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">å¹³æ¿ç”µè„‘应用的质é‡</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">优化您的应用</a></li> </ol> - + </div> </div> @@ -84,7 +84,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> 说明 @@ -746,7 +746,7 @@ data-cardsizes="6x3" data-maxresults="6"> <li>应用商å“详情包括高å“质的置顶大图。 </li> - <li>置顶大图ä¸èƒ½åŒ…å«è®¾å¤‡å›¾ç‰‡ã€å±å¹•截图,也ä¸èƒ½åŒ…å«ç¼©å°åŽä»¥åŠåœ¨åº”用适é…的最å°å°ºå¯¸å±å¹•ä¸Šæ˜¾ç¤ºæ—¶éš¾ä»¥è¾¨è®¤çš„å°æ–‡å—。 + <li>置顶大图ä¸èƒ½åŒ…å«è®¾å¤‡å›¾ç‰‡ã€å±å¹•截图,也ä¸èƒ½åŒ…å«ç¼©å°åŽä»¥åŠåœ¨åº”用适é…的最å°å°ºå¯¸å±å¹•ä¸Šæ˜¾ç¤ºæ—¶éš¾ä»¥è¾¨è®¤çš„å°æ–‡å—。 </li> @@ -1049,7 +1049,7 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6"> <p style="margin-bottom:.25em;"> è¦å¼ºåˆ¶å¯åŠ¨ç¡¬ä»¶åŠ é€Ÿï¼ˆåœ¨è®¾å¤‡æ”¯æŒçš„æƒ…况下),请将 - <code>hardware-accelerated="true"</code>æ·»åŠ åˆ°åº”ç”¨æ¸…å•æ–‡ä»¶ä¸çš„<code><application></code>并釿–°ç¼–译。 + <code>hardware-accelerated="true"</code>æ·»åŠ åˆ°åº”ç”¨æ¸…å•æ–‡ä»¶ä¸çš„<code><application></code>并釿–°ç¼–译。 </p> </td> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd index 1d9d620fca35..3df311aa7612 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd @@ -48,7 +48,7 @@ Xnonavpage=true </p> <p> - æœ¬æ–‡æ¡£ä¸æä¾›äº†ç›¸å…³èµ„æºçš„链接,这些资æºå¯å¸®åŠ©æ‚¨äº†è§£æ–‡ä¸ç»™å‡ºçš„儿¡å»ºè®®ã€‚ + æœ¬æ–‡æ¡£ä¸æä¾›äº†ç›¸å…³èµ„æºçš„链接,这些资æºå¯å¸®åŠ©æ‚¨äº†è§£æ–‡ä¸ç»™å‡ºçš„儿¡å»ºè®®ã€‚ </p> @@ -56,7 +56,7 @@ Xnonavpage=true <p>ä¸ºäº†æ‰“é€ ä¸Šä½³çš„å¹³æ¿ç”µè„‘åº”ç”¨ä½“éªŒï¼Œé¦–å…ˆè¦æ ¹æ®åº”用适é…çš„æ‰€æœ‰è®¾å¤‡å’Œæœºåž‹ï¼Œç¡®ä¿æ‚¨çš„应用满足相应的<em>åº”ç”¨æ ¸å¿ƒè´¨é‡æ ‡å‡†</em>。 -有关完整信æ¯ï¼Œè¯·å‚阅<a href="{@docRoot}distribute/essentials/quality/core.html">åº”ç”¨æ ¸å¿ƒè´¨é‡å‡†åˆ™</a>。 +有关完整信æ¯ï¼Œè¯·å‚阅<a href="{@docRoot}distribute/essentials/quality/core.html">åº”ç”¨æ ¸å¿ƒè´¨é‡å‡†åˆ™</a>。 </p> <p> @@ -116,7 +116,7 @@ style="font-weight:500;">èˆå¼ƒæ‹‰ä¼¸å˜å½¢çš„界é¢ï¼šåœ¨å¹³æ¿ç”µè„‘上,å•ç <ul> - <li>æ ¹æ®éœ€è¦ï¼Œé’ˆå¯¹ <code>large</code> å’Œ + <li>æ ¹æ®éœ€è¦ï¼Œé’ˆå¯¹ <code>large</code> å’Œ <code>xlarge</code> å±å¹•æä¾›è‡ªå®šä¹‰å¸ƒå±€ã€‚您还å¯ä»¥æä¾›å¯æ ¹æ®å±å¹•çš„<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最çŸå°ºå¯¸</a>或<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最å°å¯ç”¨å®½åº¦å’Œé«˜åº¦</a>åŠ è½½çš„å¸ƒå±€ã€‚ @@ -207,8 +207,8 @@ style="font-weight:500;">å¤åˆè§†å›¾å°†æ‰‹æœºç•Œé¢çš„多个å•一视图<em>( android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥åœ¨å…±ç”¨å†…容的ä¸åŒæœºåž‹å’Œä¸åŒå±å¹•间最大程度地é‡å¤ä½¿ç”¨ä»£ç 。 </li> -<li>确定è¦åœ¨å“ªäº›å±å¹•å°ºå¯¸ä¸Šä½¿ç”¨å¤šçª—æ ¼ç•Œé¢ï¼Œç„¶åŽåœ¨ç›¸åº”çš„å±å¹•尺寸å•元(例如 -<code>large</code>/<code>xlarge</code>ï¼‰ä¸æä¾›ä¸åŒçš„布局,或最å°å±å¹•宽度(例如 +<li>确定è¦åœ¨å“ªäº›å±å¹•å°ºå¯¸ä¸Šä½¿ç”¨å¤šçª—æ ¼ç•Œé¢ï¼Œç„¶åŽåœ¨ç›¸åº”çš„å±å¹•尺寸å•元(例如 +<code>large</code>/<code>xlarge</code>ï¼‰ä¸æä¾›ä¸åŒçš„布局,或最å°å±å¹•宽度(例如 <code>sw600dp</code>/<code>sw720</code>)。 </li> </ul> @@ -309,7 +309,7 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å data-cardSizes="9x3" data-maxResults="6"></div> -<div class="headerLine"><h2 id="adjust-font-sizes">5. +<div class="headerLine"><h2 id="adjust-font-sizes">5. 调整å—体大å°å’Œè§¦æŽ§ç›®æ ‡</h2></div> <p>è¦ç¡®ä¿æ‚¨çš„应用在平æ¿ç”µè„‘上易于使用,请花些时间针对您è¦é€‚é…çš„å„ç§å±å¹•é…置调整平æ¿ç”µè„‘界é¢ä¸çš„å—体大å°å’Œè§¦æŽ§ç›®æ ‡ã€‚ @@ -345,7 +345,7 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å <div class="headerLine"><h2 id="adjust-widgets">6. 调整主å±å¹•å°éƒ¨ä»¶çš„尺寸</h2></div> -<p>如果您的应用ä¸åŒ…å«ä¸»å±å¹•å°éƒ¨ä»¶ï¼Œéœ€è¦æ³¨æ„ä»¥ä¸‹å‡ ç‚¹ï¼Œä»¥ç¡®ä¿ç”¨æˆ·åœ¨å¹³æ¿ç”µè„‘å±å¹•上获得良好体验: +<p>如果您的应用ä¸åŒ…å«ä¸»å±å¹•å°éƒ¨ä»¶ï¼Œéœ€è¦æ³¨æ„ä»¥ä¸‹å‡ ç‚¹ï¼Œä»¥ç¡®ä¿ç”¨æˆ·åœ¨å¹³æ¿ç”µè„‘å±å¹•上获得良好体验: </p> <ul> @@ -411,7 +411,7 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å 为确ä¿åˆ†å‘到尽å¯èƒ½å¤šçš„å¹³æ¿ç”µè„‘,务必让应用适é…å„ç§æ”¯æŒå¹³æ¿ç”µè„‘çš„ Android 版本。 对平æ¿ç”µè„‘çš„æ”¯æŒæ˜¯ä»Ž <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a>(API 级别 11)开始的。 - 对平æ¿ç”µè„‘ã€æ‰‹æœºåŠå…¶ä»–è®¾å¤‡çš„ç»Ÿä¸€ç•Œé¢æ¡†æž¶æ”¯æŒæ˜¯ä»Ž <a href="{@docRoot}about/versions/android-4.0.html">Android + 对平æ¿ç”µè„‘ã€æ‰‹æœºåŠå…¶ä»–è®¾å¤‡çš„ç»Ÿä¸€ç•Œé¢æ¡†æž¶æ”¯æŒæ˜¯ä»Ž <a href="{@docRoot}about/versions/android-4.0.html">Android 4.0</a> 开始的 </p> @@ -494,8 +494,8 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å <li>与æ¤ç±»ä¼¼ï¼Œè¿˜è¯·æ£€æŸ¥æ¸…啿–‡ä»¶ï¼Œæ‰¾å‡º <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">è¡¨æ˜Žç¡¬ä»¶åŠŸèƒ½è¦æ±‚</a>ä¸é€‚用于平æ¿ç”µè„‘çš„ <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> å…ƒç´ ã€‚ -å¦‚æžœæ‚¨æ‰¾åˆ°è¿™æ ·çš„æƒé™ï¼Œè¯·åŠ¡å¿…ä¸ºåŠŸèƒ½æ˜Žç¡®å£°æ˜Žå¯¹åº”çš„ -<code><uses-feature></code> å…ƒç´ å¹¶åŠ å…¥ +å¦‚æžœæ‚¨æ‰¾åˆ°è¿™æ ·çš„æƒé™ï¼Œè¯·åŠ¡å¿…ä¸ºåŠŸèƒ½æ˜Žç¡®å£°æ˜Žå¯¹åº”çš„ +<code><uses-feature></code> å…ƒç´ å¹¶åŠ å…¥ <code>android:required=â€falseâ€</code> 属性。 </li> </ul> @@ -529,21 +529,21 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å </p> <ul> - <li>如果声明 + <li>如果声明 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> å…ƒç´ ï¼Œå°±ä¸è¦æŒ‡å®š <code>android:largeScreens="false"</code> 或 <code>android:xlargeScreens="false"</code>。</li> - <li>如果应用适é…çš„ <code>minSdkVersion</code> 值å°äºŽ 13,必须使用 + <li>如果应用适é…çš„ <code>minSdkVersion</code> 值å°äºŽ 13,必须使用 <code>android:largeScreens="true"</code> å’Œ <code>android:xlargeScreens="true"</code> 声明 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> å…ƒç´ ã€‚</li> </ul> -<p>å¦‚æžœåº”ç”¨åœ¨æ¸…å•æ–‡ä»¶ä¸å£°æ˜Žäº† +<p>å¦‚æžœåº”ç”¨åœ¨æ¸…å•æ–‡ä»¶ä¸å£°æ˜Žäº† <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a> å…ƒç´ ï¼Œè¯¥å…ƒç´ åº”åŒ…å«ç›¸å…³å±žæ€§ï¼Œ 以列举应用支æŒçš„<em>å¹³æ¿ç”µè„‘å±å¹•的所有尺寸和密度组åˆ</em>。 -请注æ„,如果å¯èƒ½ï¼Œæ‚¨åº”é¿å…在应用ä¸ä½¿ç”¨ +请注æ„,如果å¯èƒ½ï¼Œæ‚¨åº”é¿å…在应用ä¸ä½¿ç”¨ <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a> å…ƒç´ ã€‚</p> @@ -586,7 +586,7 @@ android.app.Fragment} å类实现å„ä¸ªå†…å®¹é¢æ¿ã€‚è¿™æ ·ä¸€æ¥ï¼Œæ‚¨å¯ä»¥å <li>æ·»åŠ åœ¨ 7 英寸和 10 英寸平æ¿ç”µè„‘上截å–çš„å±å¹•截图。 </li> - <li>如果å¯èƒ½ï¼Œæ·»åŠ æ¨ªå±å’Œç«–屿ˆªå–çš„å±å¹•截图。 + <li>如果å¯èƒ½ï¼Œæ·»åŠ æ¨ªå±å’Œç«–屿ˆªå–çš„å±å¹•截图。 </li> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd index 6a609457bc58..99a12d585b7e 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd @@ -133,7 +133,7 @@ page.image=/distribute/images/gp-tv-quality.png <tr> <td rowspan="5" id="layout"> - 布局 + 布局 </td> <td id="TV-LO"> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd index 99483eccc760..eb9166de7b04 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd @@ -91,7 +91,7 @@ page.image=/distribute/images/gp-wear-quality.png <td> <p style="margin-bottom:.5em;"> 手æŒç±»åº”用包括具有å¯ç©¿æˆ´è®¾å¤‡ç‰¹æœ‰åŠŸèƒ½çš„é€šçŸ¥æˆ–ç›´æŽ¥åœ¨ç©¿æˆ´è®¾å¤‡ä¸Šè¿è¡Œçš„å¯ç©¿æˆ´ç±»åº”用。 - + (<a href="{@docRoot}training/building-wearables.html">了解方法</a>) </p> </td> @@ -441,7 +441,7 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> <p style="margin-top:30px;"> - <strong>如果我的应用ä¸ç¬¦åˆç©¿æˆ´è®¾å¤‡çš„è¦æ±‚,是å¦ä»ä¼šåœ¨ Google Play + <strong>如果我的应用ä¸ç¬¦åˆç©¿æˆ´è®¾å¤‡çš„è¦æ±‚,是å¦ä»ä¼šåœ¨ Google Play ä¸Šå‘æ‰‹æœºå’Œå¹³æ¿ç”µè„‘显示我的新应用或更新版本并且ä»å¯åœ¨å¯ç©¿æˆ´è®¾å¤‡ä¸Šå®‰è£…?</strong> </p> <p> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd index e557024186a9..a1b2f4c22a16 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd @@ -88,7 +88,7 @@ Android TV çš„ Google Play 体验仅<strong>展示å¯åœ¨ç”µè§†ä¸Šä½¿ç”¨çš„应用 <p> 在考虑您的电视应用时,请查看<a href="{@docRoot}training/tv/start/index.html">å¼€å‘者文档</a>å’Œå¯ç”¨æ€§å‡†åˆ™ï¼Œå¹¶ä¸”å°½å¯èƒ½æ”¯æŒè¿™äº›å‡†åˆ™ã€‚ -ç¡®ä¿ä¸ºç”¨æˆ·è®¾è®¡ä¸€ç§å‡ºè‰² Leanback 观看体验,并使用 SDK ä¸éšé™„çš„ +ç¡®ä¿ä¸ºç”¨æˆ·è®¾è®¡ä¸€ç§å‡ºè‰² Leanback 观看体验,并使用 SDK ä¸éšé™„çš„ Leanback åº“æ¥æ‰“é€ è¿™ç§ä½“验。您想针对电视用例优化应用的其他部分,最好在开å‘过程的早期确定这些部分。 @@ -261,7 +261,7 @@ Google Play 将展示优质应用,以便用户能够在 Google Play ä¸è½»æ¾å 当您进行必è¦çš„调整åŽï¼Œå°±å¯ä»¥å°†åº”ç”¨çš„æ–°ç‰ˆæœ¬ä¸Šä¼ åˆ°å¼€å‘者控制å°ã€‚ - + </p> <p> @@ -282,7 +282,7 @@ Google Play 将展示优质应用,以便用户能够在 Google Play ä¸è½»æ¾å <li> <em>已批准</em> — 您的应用已被审查并获得批准。该应用将直接æä¾›ç»™ Android TV 用户。 - + </li> <li> diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd index 182abdf81d1f..480ce5db33a9 100644 --- a/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd @@ -60,7 +60,7 @@ page.metaDescription=å°†æ‚¨çš„åº”ç”¨ã€æ¸¸æˆå’Œå†…容分å‘到 Android Wear。 <p> 为了åšå¥½å‡†å¤‡ï¼Œä»¥ä¾¿åœ¨ Android Wear 上æˆåŠŸæŽ¨å‡ºåº”ç”¨ï¼Œé¦–å…ˆè¦æŸ¥é˜…在穿戴设备上æä¾›å‡ºè‰²åº”用体验的准则。 -请å‚考 <a href="{@docRoot}design/wear/index.html">Android +请å‚考 <a href="{@docRoot}design/wear/index.html">Android Wear 设计准则</a>ï¼Œäº†è§£æœ‰å…³é’ˆå¯¹ç©¿æˆ´è®¾å¤‡æ‰©å±•åº”ç”¨çš„å»ºè®®ï¼Œä»¥åŠæœ‰å…³è®¾è®¡å’Œå¯ç”¨æ€§çš„详情。 </p> @@ -120,7 +120,7 @@ Wear 设计准则</a>ï¼Œäº†è§£æœ‰å…³é’ˆå¯¹ç©¿æˆ´è®¾å¤‡æ‰©å±•åº”ç”¨çš„å»ºè®®ï¼Œä» <p> 您的穿戴设备应用应表现出色,在 Android Wear 上看起æ¥å¼•人入胜,并且æä¾›å°½å¯èƒ½æœ€ä½³çš„用户体验。 Google Play 将展示精选的优质穿戴设备应用,以便用户轻æ¾å‘现。 -ä»¥ä¸‹è¯´æ˜Žäº†æ‚¨å¦‚ä½•åŠ å…¥å¹³å°ï¼Œæäº¤ç”¨æˆ·å–œçˆ±çš„ +ä»¥ä¸‹è¯´æ˜Žäº†æ‚¨å¦‚ä½•åŠ å…¥å¹³å°ï¼Œæäº¤ç”¨æˆ·å–œçˆ±çš„ Android Wear 应用: </p> diff --git a/docs/html-intl/intl/zh-cn/distribute/resources.jd b/docs/html-intl/intl/zh-cn/distribute/resources.jd index 71bd4665a23e..4c5644c9dda2 100644 --- a/docs/html-intl/intl/zh-cn/distribute/resources.jd +++ b/docs/html-intl/intl/zh-cn/distribute/resources.jd @@ -8,7 +8,7 @@ page.metaDescription=我们翻译了以下一些网站资æºï¼Œå¸Œæœ›èƒ½å¸®åŠ©ä½ @jd:body <div class="jd-descr" itemprop="articleBody"> - <div class="resource-widget resource-carousel-layout col-16" + <div class="resource-widget resource-carousel-layout col-16" style="height:420px;margin-top:0px;padding-top:0" data-query="collection:overview/carousel/zhcn" data-sortOdrder="-timestamp" diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd index 19a25c5cf9f8..900dc0d75c34 100644 --- a/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd @@ -79,8 +79,8 @@ page.image=/distribute/images/launch-checklist.jpg </p> <p> - 当您基本熟悉å‘布æµç¨‹åŽï¼Œè¯·ç»§ç»é˜…读以了解在 -Google Play 上å‘布应用时应考虑哪些问题。 + 当您基本熟悉å‘布æµç¨‹åŽï¼Œè¯·ç»§ç»é˜…读以了解在 +Google Play 上å‘布应用时应考虑哪些问题。 </p> @@ -334,7 +334,7 @@ Google Play ä¼šæ ¹æ®è¯¥è®¾ç½®æ¥ç›é€‰åº”ç”¨ï¼Œå› æ¤æ‚¨é€‰æ‹©çš„内容分级å </div> <p> - å‘布应用之å‰ï¼Œè¯·åŠ¡å¿…ç¡®ä¿æ‚¨çš„应用å¯åœ¨ç›®æ ‡ Android å¹³å°ç‰ˆæœ¬å’Œè®¾å¤‡å±å¹•尺寸上æ£å¸¸è¿è¡Œã€‚ + å‘布应用之å‰ï¼Œè¯·åŠ¡å¿…ç¡®ä¿æ‚¨çš„应用å¯åœ¨ç›®æ ‡ Android å¹³å°ç‰ˆæœ¬å’Œè®¾å¤‡å±å¹•尺寸上æ£å¸¸è¿è¡Œã€‚ </p> @@ -400,7 +400,7 @@ Google Play ä¼šæ ¹æ®è¯¥è®¾ç½®æ¥ç›é€‰åº”ç”¨ï¼Œå› æ¤æ‚¨é€‰æ‹©çš„内容分级å <li> <p> 将应用å‘布为å…费应用åŽï¼Œæ‚¨æ— 法å†å°†å…¶æ”¹æˆä»˜è´¹åº”用。 -ä¸è¿‡ï¼Œæ‚¨ä»èƒ½é€šè¿‡ Google Play +ä¸è¿‡ï¼Œæ‚¨ä»èƒ½é€šè¿‡ Google Play çš„<a href="{@docRoot}google/play/billing/index.html">应用内结算</a>æœåС销售<a href="{@docRoot}google/play/billing/billing_overview.html#products">应用内商å“</a> å’Œ<a href="{@docRoot}google/play/billing/billing_subscriptions.html">订阅</a>。 </p> @@ -449,9 +449,9 @@ Google Play ä¼šæ ¹æ®è¯¥è®¾ç½®æ¥ç›é€‰åº”ç”¨ï¼Œå› æ¤æ‚¨é€‰æ‹©çš„内容分级å <p> å¦‚æžœæ‚¨å¸Œæœ›æ‰¾åˆ°æ›´å¤šæ–¹æ³•é€šè¿‡åº”ç”¨èŽ·åˆ©å¹¶å»ºç«‹ä¸Žç”¨æˆ·çš„äº’åŠ¨ï¼Œåˆ™åº”è€ƒè™‘ä½¿ç”¨â€œåº”ç”¨å†…ç»“ç®—â€æˆ–â€œå³æ—¶è´ä¹°â€ã€‚ 这些æœåŠ¡æ·±å—用户和开å‘者的欢迎。 -è¦ä½¿ç”¨â€œåº”ç”¨å†…ç»“ç®—â€æˆ–â€œå³æ—¶è´ä¹°â€ï¼Œæ‚¨éœ€è¦å¯¹åº”ç”¨çš„äºŒè¿›åˆ¶æ–‡ä»¶è¿›è¡Œæ›´æ”¹ï¼Œå› æ¤ï¼Œæ‚¨éœ€è¦å…ˆå®Œæˆæ›´æ”¹å¹¶æµ‹è¯•å®žçŽ°æ–¹æ³•ï¼Œç„¶åŽæ‰èƒ½åˆ›å»ºå‘布版 APK。 +è¦ä½¿ç”¨â€œåº”ç”¨å†…ç»“ç®—â€æˆ–â€œå³æ—¶è´ä¹°â€ï¼Œæ‚¨éœ€è¦å¯¹åº”ç”¨çš„äºŒè¿›åˆ¶æ–‡ä»¶è¿›è¡Œæ›´æ”¹ï¼Œå› æ¤ï¼Œæ‚¨éœ€è¦å…ˆå®Œæˆæ›´æ”¹å¹¶æµ‹è¯•å®žçŽ°æ–¹æ³•ï¼Œç„¶åŽæ‰èƒ½åˆ›å»ºå‘布版 APK。 + - </p> <h3 class="rel-resources clearfloat">相关资æº</h3> @@ -955,7 +955,7 @@ Google Play 团队会为用户æä¾›ä¸‹è½½ã€å®‰è£…和付款方é¢çš„æ”¯æŒï¼Œä½ <ul> <li> <p> - ç»å¸¸æŸ¥çœ‹æ‚¨åº”用的商å“详情页上的评分和评论。 + ç»å¸¸æŸ¥çœ‹æ‚¨åº”用的商å“详情页上的评分和评论。 注æ„åå¤å‡ºçŽ°çš„ä¸»é¢˜ï¼Œè¿™å¯èƒ½è¡¨ç¤ºå˜åœ¨é”™è¯¯æˆ–其他问题。 </p> </li> @@ -991,7 +991,7 @@ Google Play 团队会为用户æä¾›ä¸‹è½½ã€å®‰è£…和付款方é¢çš„æ”¯æŒï¼Œä½ <li> <p> - ç¡®è®¤å¹¶ä¿®æ£æ‚¨åº”用ä¸å‡ºçŽ°çš„é—®é¢˜ã€‚ä¿æŒå…¬å¼€é€æ˜Žå¹¶ä¸»åŠ¨åœ¨å•†å“详情页上列出已知问题是有益之举。 + ç¡®è®¤å¹¶ä¿®æ£æ‚¨åº”用ä¸å‡ºçŽ°çš„é—®é¢˜ã€‚ä¿æŒå…¬å¼€é€æ˜Žå¹¶ä¸»åŠ¨åœ¨å•†å“详情页上列出已知问题是有益之举。 </p> </li> diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd index 522b7f5e4d4d..e37f04337fbf 100644 --- a/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd @@ -62,7 +62,7 @@ page.image=/distribute/images/localization-checklist.jpg 用户å¯ä»¥æŽ§åˆ¶å…¶ Android 设备上使用的è¯è¨€å’Œè¯è¨€åŒºåŸŸï¼Œå过æ¥è¿™äº›å› ç´ ä¹Ÿä¼šå½±å“应用的显示方å¼ã€‚ - + </p> <p> @@ -820,7 +820,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> </h4> <p> - 如果您æ£åœ¨å‡†å¤‡å›½é™…化è¥é”€ï¼Œè¯·åŠ¡å¿…åŠ å…¥<a href="{@docRoot}distribute/tools/promote/badges.html">本地化的 Google Play + 如果您æ£åœ¨å‡†å¤‡å›½é™…化è¥é”€ï¼Œè¯·åŠ¡å¿…åŠ å…¥<a href="{@docRoot}distribute/tools/promote/badges.html">本地化的 Google Play å¾½ç« </a>ï¼Œè®©ç”¨æˆ·çŸ¥é“æ‚¨æ˜¯åœ¨ Google Play 上å‘布应用的。您å¯ä»¥ä½¿ç”¨å¾½ç« 生æˆå™¨å¿«é€Ÿæž„å»ºæœ¬åœ°åŒ–çš„å¾½ç« ï¼Œç„¶åŽç”¨åˆ°æ‚¨çš„网站或è¥é”€ææ–™ä¸ã€‚ 您还å¯ä»¥èŽ·å¾—é«˜åˆ†è¾¨çŽ‡çš„èµ„æºã€‚ diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/promote/linking.jd b/docs/html-intl/intl/zh-cn/distribute/tools/promote/linking.jd index c7cf7cf700b1..e9b13c02f002 100644 --- a/docs/html-intl/intl/zh-cn/distribute/tools/promote/linking.jd +++ b/docs/html-intl/intl/zh-cn/distribute/tools/promote/linking.jd @@ -13,7 +13,7 @@ page.metaDescription=了解如何构建链接,把用户从æµè§ˆæˆ–æœç´¢å¸¦åˆ </div> </div> - <p>Google Play æä¾›å¤šç§é“¾æŽ¥æ ¼å¼ï¼Œå¯è®©ä½ 按自己需è¦çš„æ–¹å¼å°†ç”¨æˆ·ä»Ž Android 应用ã€ç½‘页ã€å¹¿å‘Šã€è¯„è®ºã€æ–‡ç« ã€ç¤¾äº¤åª’体帖åç‰é“¾æŽ¥åˆ°ä½ 的商å“。</p> + <p>Google Play æä¾›å¤šç§é“¾æŽ¥æ ¼å¼ï¼Œå¯è®©ä½ 按自己需è¦çš„æ–¹å¼å°†ç”¨æˆ·ä»Ž Android 应用ã€ç½‘页ã€å¹¿å‘Šã€è¯„è®ºã€æ–‡ç« ã€ç¤¾äº¤åª’体帖åç‰é“¾æŽ¥åˆ°ä½ 的商å“。</p> <p>è¿™äº›é“¾æŽ¥æ ¼å¼å¯è®©ä½ :</p> <ul> diff --git a/docs/html-intl/intl/zh-cn/google/play/billing/api.jd b/docs/html-intl/intl/zh-cn/google/play/billing/api.jd index fbdbac6c2843..ba1d63760e11 100644 --- a/docs/html-intl/intl/zh-cn/google/play/billing/api.jd +++ b/docs/html-intl/intl/zh-cn/google/play/billing/api.jd @@ -32,7 +32,7 @@ parent.link=index.html <h2>å¦è¯·å‚è§</h2> <ol> <li><a href="{@docRoot}training/in-app-billing/index.html">销售应用内商å“</a></li> - </ol> + </ol> </div> </div> @@ -68,7 +68,7 @@ parent.link=index.html <ol type="a"> <li>Google Play 返回的 <code>Bundle</code> ä¸åŒ…å« <code>PendingIntent</code>,您的应用å¯ç”¨å®ƒæ¥å¯åЍè´ä¹°ç»“å¸ç•Œé¢ã€‚</li> <li>您的应用通过调用 <code>startIntentSenderForResult</code> 方法æ¥å¯åЍ PendingIntent。</li> - <li>å½“ç»“å¸æµç¨‹ç»“æŸåŽï¼ˆå³ç”¨æˆ·æˆåŠŸè´ä¹°å•†å“æˆ–å–æ¶ˆè´ä¹°ï¼‰ï¼ŒGoogle Play ä¼šå‘æ‚¨çš„ <code>onActivityResult</code> 方法å‘é€å“应 <code>Intent</code>。<code>onActivityResult</code> 的结果代ç 䏿œ‰ä¸€ä¸ªä»£ç 将用于表明用户是完æˆäº†è´ä¹°è¿˜æ˜¯å–消了è´ä¹°ã€‚å“应 <code>Intent</code> ä¸ä¼šåŒ…嫿‰€è´å•†å“的相关信æ¯ï¼Œå…¶ä¸åŒ…括 Google Play ä¸ºäº†å”¯ä¸€æ ‡è¯†æ¤æ¬¡è´ä¹°äº¤æ˜“而生æˆçš„ <code>purchaseToken</code> å—符串。<code>Intent</code> ä¸è¿˜åŒ…å«ä½¿ç”¨æ‚¨çš„ç§äººå¼€å‘者密钥ç¾ç½²çš„è´ä¹°ç¾å。</li> + <li>å½“ç»“å¸æµç¨‹ç»“æŸåŽï¼ˆå³ç”¨æˆ·æˆåŠŸè´ä¹°å•†å“æˆ–å–æ¶ˆè´ä¹°ï¼‰ï¼ŒGoogle Play ä¼šå‘æ‚¨çš„ <code>onActivityResult</code> 方法å‘é€å“应 <code>Intent</code>。<code>onActivityResult</code> 的结果代ç 䏿œ‰ä¸€ä¸ªä»£ç 将用于表明用户是完æˆäº†è´ä¹°è¿˜æ˜¯å–消了è´ä¹°ã€‚å“应 <code>Intent</code> ä¸ä¼šåŒ…嫿‰€è´å•†å“的相关信æ¯ï¼Œå…¶ä¸åŒ…括 Google Play ä¸ºäº†å”¯ä¸€æ ‡è¯†æ¤æ¬¡è´ä¹°äº¤æ˜“而生æˆçš„ <code>purchaseToken</code> å—符串。<code>Intent</code> ä¸è¿˜åŒ…å«ä½¿ç”¨æ‚¨çš„ç§äººå¼€å‘者密钥ç¾ç½²çš„è´ä¹°ç¾å。</li> </ol> </li> </ol> diff --git a/docs/html-intl/intl/zh-cn/google/play/billing/billing_admin.jd b/docs/html-intl/intl/zh-cn/google/play/billing/billing_admin.jd index 989c0e7d59a2..50e2fe3f226d 100644 --- a/docs/html-intl/intl/zh-cn/google/play/billing/billing_admin.jd +++ b/docs/html-intl/intl/zh-cn/google/play/billing/billing_admin.jd @@ -15,7 +15,7 @@ parent.link=index.html <li><a href="#billing-support">获å–相关支æŒ</a></li> </ol> - + <h2>å¦è¯·å‚è§</h2> <ol> <li><a href="{@docRoot}google/play/billing/billing_overview.html">应用内结算概述</a></li> diff --git a/docs/html-intl/intl/zh-cn/google/play/filters.jd b/docs/html-intl/intl/zh-cn/google/play/filters.jd index 9d68faf41bdf..87df676bfe2b 100644 --- a/docs/html-intl/intl/zh-cn/google/play/filters.jd +++ b/docs/html-intl/intl/zh-cn/google/play/filters.jd @@ -166,7 +166,7 @@ targetSdkVersion</a></code> 设置为 4 或更大时,所有属性的默认值å </p> <p><strong>示例 2<br /> </strong>æ¸…å•æ–‡ä»¶å£°æ˜Ž <code><uses-sdk android:minSdkVersion="3" - android:targetSdkVersion="4"></code> 并且ä¸åŒ…括 + android:targetSdkVersion="4"></code> 并且ä¸åŒ…括 <code><supports-screens></code> å…ƒç´ ã€‚ <strong>结果</strong>:Google Play 将呿‰€æœ‰è®¾å¤‡çš„用户显示该应用,除éžè¿˜æœ‰å…¶ä»–ç›é€‰å™¨ã€‚ </p> @@ -400,10 +400,10 @@ Google Play ç„¶åŽæ ¹æ® è¿™æ ·ï¼Œæ‚¨å¯ä»¥åªåŒ…括æ¯ç§è®¾å¤‡é…置所需的纹ç†ï¼Œä»Žè€Œå‡å° APK 文件的大å°ã€‚ -æ ¹æ®æ¯ä¸ªè®¾å¤‡æ˜¯å¦æ”¯æŒæ‚¨çš„纹ç†åŽ‹ç¼©æ ¼å¼ï¼ŒGoogle Play +æ ¹æ®æ¯ä¸ªè®¾å¤‡æ˜¯å¦æ”¯æŒæ‚¨çš„纹ç†åŽ‹ç¼©æ ¼å¼ï¼ŒGoogle Play å°†å‘å…¶æä¾›æ‚¨å·²å£°æ˜Žæ”¯æŒè¯¥è®¾å¤‡çš„ APK。</p> -<p>ç›®å‰ï¼Œåªæœ‰åœ¨æ¯ä¸ª APK æ ¹æ®ä»¥ä¸‹é…ç½®æä¾›ä¸åŒç›é€‰æ—¶ï¼ŒGoogle Play +<p>ç›®å‰ï¼Œåªæœ‰åœ¨æ¯ä¸ª APK æ ¹æ®ä»¥ä¸‹é…ç½®æä¾›ä¸åŒç›é€‰æ—¶ï¼ŒGoogle Play æ‰å…许您为åŒä¸€åº”用å‘布多个 APK:</p> <ul> <li>OpenGL 纹ç†åŽ‹ç¼©æ ¼å¼ diff --git a/docs/html-intl/intl/zh-cn/guide/components/activities.jd b/docs/html-intl/intl/zh-cn/guide/components/activities.jd index efc1fb1ba711..0e7c4fda89a9 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/activities.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/activities.jd @@ -1,5 +1,5 @@ page.title=Activity -page.tags=Activity, Intent +page.tags=Activity, Intent @jd:body <div id="qv-wrapper"> @@ -215,7 +215,7 @@ That Cannot Change</a> <h2 id="StartingAnActivity">å¯åЍ Activity</h2> <p>您å¯ä»¥é€šè¿‡è°ƒç”¨ {@link android.app.Activity#startActivity - startActivity()}ï¼Œå¹¶å°†å…¶ä¼ é€’ç»™æè¿°æ‚¨æƒ³å¯åŠ¨çš„ Activity çš„ {@link android.content.Intent} + startActivity()}ï¼Œå¹¶å°†å…¶ä¼ é€’ç»™æè¿°æ‚¨æƒ³å¯åŠ¨çš„ Activity çš„ {@link android.content.Intent} æ¥å¯åЍå¦ä¸€ä¸ª Activity。Intent 对象会指定您想å¯åŠ¨çš„å…·ä½“ Activity 或æè¿°æ‚¨æƒ³æ‰§è¡Œçš„æ“ä½œç±»åž‹ï¼ˆç³»ç»Ÿä¼šä¸ºæ‚¨é€‰æ‹©åˆé€‚çš„ Activity,甚至是æ¥è‡ªå…¶ä»–应用的 Activity)。 @@ -608,7 +608,7 @@ android.app.Activity#onSaveInstanceState onSaveInstanceState()}。 <p>系统会先调用 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()},然åŽå†ä½¿ Activity å˜å¾—易于销æ¯ã€‚系统会å‘è¯¥æ–¹æ³•ä¼ é€’ä¸€ä¸ª -{@link android.os.Bundle},您å¯ä»¥åœ¨å…¶ä¸ä½¿ç”¨ +{@link android.os.Bundle},您å¯ä»¥åœ¨å…¶ä¸ä½¿ç”¨ {@link android.os.Bundle#putString putString()} å’Œ {@link android.os.Bundle#putInt putInt()} ç‰æ–¹æ³•以åç§°-值对形å¼ä¿å˜æœ‰å…³ Activity 状æ€çš„ä¿¡æ¯ã€‚ç„¶åŽï¼Œå¦‚æžœç³»ç»Ÿç»ˆæ¢æ‚¨çš„应用进程,并且用户返回您的 Activity,则系统会é‡å»ºè¯¥ Activity,并将 diff --git a/docs/html-intl/intl/zh-cn/guide/components/bound-services.jd b/docs/html-intl/intl/zh-cn/guide/components/bound-services.jd index ed6aaf6ecbf8..fda6ba704506 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/bound-services.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/bound-services.jd @@ -636,7 +636,7 @@ onStartCommand()} android.content.Context#stopService stopService()} 为æ¢ï¼Œæ— 论其是å¦ç»‘定到任何客户端。</p> -<p>æ¤å¤–,如果您的æœåС已å¯åŠ¨å¹¶æŽ¥å—绑定,则当系统调用您的 {@link android.app.Service#onUnbind onUnbind()} 方法时,如果您想在客户端下一次绑定到æœåŠ¡æ—¶æŽ¥æ”¶ +<p>æ¤å¤–,如果您的æœåС已å¯åŠ¨å¹¶æŽ¥å—绑定,则当系统调用您的 {@link android.app.Service#onUnbind onUnbind()} 方法时,如果您想在客户端下一次绑定到æœåŠ¡æ—¶æŽ¥æ”¶ {@link android.app.Service#onRebind onRebind()} è°ƒç”¨ï¼ˆè€Œä¸æ˜¯æŽ¥æ”¶ {@link android.app.Service#onBind onBind()} 调用),则å¯é€‰æ‹©è¿”回 diff --git a/docs/html-intl/intl/zh-cn/guide/components/fragments.jd b/docs/html-intl/intl/zh-cn/guide/components/fragments.jd index a4c2cbb82499..12a26e25863a 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/fragments.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>å¦è¯·å‚阅</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">åˆ©ç”¨ç‰‡æ®µæž„å»ºåŠ¨æ€ UI</a></li> @@ -362,7 +362,7 @@ findFragmentByTag()}。</p> <p>如需查看将没有 UI 的片段用作åŽå°å·¥ä½œçº¿ç¨‹çš„示例 Activity,请å‚阅 {@code FragmentRetainInstance.java} 示例,该示例包括在 SDK 示例(通过 -Android SDK 管ç†å™¨æä¾›ï¼‰ä¸ï¼Œä»¥ +Android SDK 管ç†å™¨æä¾›ï¼‰ä¸ï¼Œä»¥ <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code> å½¢å¼ä½äºŽæ‚¨çš„系统ä¸ã€‚</p> @@ -378,7 +378,7 @@ Android SDK 管ç†å™¨æä¾›ï¼‰ä¸ï¼Œä»¥ <li>通过 {@link android.app.FragmentManager#findFragmentById findFragmentById()}(对于在 Activity å¸ƒå±€ä¸æä¾› UI 的片段)或 {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()}(对于æä¾›æˆ–䏿供 UI çš„ç‰‡æ®µï¼‰èŽ·å– Activity ä¸å˜åœ¨çš„片段</li> +findFragmentByTag()}(对于æä¾›æˆ–䏿供 UI çš„ç‰‡æ®µï¼‰èŽ·å– Activity ä¸å˜åœ¨çš„片段</li> <li>通过 {@link android.app.FragmentManager#popBackStack()}(模拟用户å‘出的 <em>Back</em> å‘½ä»¤ï¼‰å°†ç‰‡æ®µä»Žè¿”å›žæ ˆä¸å¼¹å‡º</li> <li>通过 {@link @@ -785,7 +785,7 @@ android.widget.FrameLayout}),也å¯èƒ½ä¼šå¯åŠ¨ä¸€ä¸ªæ–°æ´»åŠ¨ï¼ˆåœ¨è¯¥æ´»åŠ <p>第二个片段 {@code DetailsFragment} 显示从 {@code TitlesFragment} 的列表ä¸é€‰æ‹©çš„项目的æˆå‰§æ‘˜è¦ï¼š</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>从 {@code TitlesFragment} ç±»ä¸é‡æ–°è°ƒç”¨ï¼Œå¦‚果用户点击æŸä¸ªåˆ—表项,且当å‰å¸ƒå±€â€œæ ¹æœ¬ä¸â€<em></em>包括 {@code R.id.details} @@ -798,7 +798,7 @@ Activity 以显示该项目的内容。</p> {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>请注æ„,如果é…置为横å‘ï¼Œåˆ™æ¤ Activity 会自行完æˆï¼Œä»¥ä¾¿ä¸» Activity å¯ä»¥æŽ¥ç®¡å¹¶æ²¿ {@code TitlesFragment} 显示 {@code DetailsFragment}ã€‚å¦‚æžœç”¨æˆ·åœ¨çºµå‘æ˜¾ç¤ºæ—¶å¯åЍ diff --git a/docs/html-intl/intl/zh-cn/guide/components/fundamentals.jd b/docs/html-intl/intl/zh-cn/guide/components/fundamentals.jd index 4ff22b64acbe..faaa0a3ffb6f 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/fundamentals.jd @@ -379,7 +379,7 @@ Google Play ç‰å¤–部æœåŠ¡ä¼šè¯»å–å®ƒä»¬ï¼Œä»¥ä¾¿å½“ç”¨æˆ·åœ¨å…¶è®¾å¤‡ä¸æœç´¢åº”用时为用户æä¾›è¿‡æ»¤åŠŸèƒ½ã€‚</p> <p>例如,如果您的应用需è¦ç›¸æœºï¼Œå¹¶ä½¿ç”¨ Android 2.1(<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API</a> 7 级)ä¸å¼•入的 -API,您应该åƒä¸‹é¢è¿™æ ·åœ¨æ¸…啿–‡ä»¶ä¸ä»¥è¦æ±‚å½¢å¼å£°æ˜Žè¿™äº›ä¿¡æ¯ï¼š</p> +API,您应该åƒä¸‹é¢è¿™æ ·åœ¨æ¸…啿–‡ä»¶ä¸ä»¥è¦æ±‚å½¢å¼å£°æ˜Žè¿™äº›ä¿¡æ¯ï¼š</p> <pre> <manifest ... > @@ -390,7 +390,7 @@ API,您应该åƒä¸‹é¢è¿™æ ·åœ¨æ¸…啿–‡ä»¶ä¸ä»¥è¦æ±‚å½¢å¼å£°æ˜Žè¿™äº›ä¿¡æ </manifest> </pre> -<p>现在,<em>没有</em>相机且 +<p>现在,<em>没有</em>相机且 Android 版本<em>低于</em> 2.1 çš„è®¾å¤‡å°†æ— æ³•ä»Ž Google Play 安装您的应用。</p> <p>ä¸è¿‡ï¼Œæ‚¨ä¹Ÿå¯ä»¥å£°æ˜Žæ‚¨çš„应用使用相机,但并ä¸<em>è¦æ±‚</em>必须使用。 diff --git a/docs/html-intl/intl/zh-cn/guide/components/index.jd b/docs/html-intl/intl/zh-cn/guide/components/index.jd index 53e81849c550..73c1bdf2d7b2 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/index.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/index.jd @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>åšå®¢æ–‡ç« </h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>使用 DialogFragments</h4> <p>在这篇帖åä¸ï¼Œæˆ‘将介ç»å¦‚何使用带有 v4 支æŒåº“ï¼ˆæ—¨åœ¨æ”¯æŒ Honeycomb 之å‰çš„设备实现å‘åŽå…¼å®¹ï¼‰çš„ DialogFragments 显示一个简å•çš„ç¼–è¾‘å¯¹è¯æ¡†ï¼Œå¹¶ä½¿ç”¨ä¸€ä¸ªæŽ¥å£å‘调用 Activity 返回一个结果。</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>通用片段</h4> <p>今天,我们已å‘å¸ƒä¸€ä¸ªå±•ç¤ºç›¸åŒ Fragments API çš„é™æ€åº“ï¼ˆä»¥åŠæ–°çš„ LoaderManager å’Œå…¶ä»–å‡ ä¸ªç±»ï¼‰ã€‚å› æ¤ï¼Œä¸Ž Android 1.6 或更高版本兼容的应用å¯ä»¥ä½¿ç”¨ Fragment 创建与平æ¿ç”µè„‘兼容的用户界é¢ã€‚ </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>多线程处ç†ï¼Œæ€§èƒ½å“è¶Š</h4> <p>创建快速å“åº”çš„åº”ç”¨çš„æœ‰æ•ˆæ–¹æ³•æ˜¯ï¼šç¡®ä¿æœ€å¤§ç¨‹åº¦åœ°å‡å°‘主 UI @@ -32,7 +32,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>培è®</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>ç®¡ç† Activity 生命周期</h4> <p>æœ¬è¯¾ç¨‹ä»‹ç»æ¯ä¸ª Activity 实例将收到的é‡è¦ç”Ÿå‘½å‘¨æœŸå›žè°ƒæ–¹æ³•,é˜è¿°å¯ä»¥å¦‚何利用这些方法使 Activity 达到用户预期,且é¿å…它们在 Activity ä¸éœ€è¦ä½¿ç”¨æ—¶æ¶ˆè€—系统资æºã€‚ diff --git a/docs/html-intl/intl/zh-cn/guide/components/loaders.jd b/docs/html-intl/intl/zh-cn/guide/components/loaders.jd index d8427b0cd109..d7681887a3ce 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/loaders.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>关键类</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>相关示例</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html"> @@ -51,7 +51,7 @@ android.app.Fragment}。</li> å› æ¤ï¼Œå®ƒä»¬æ— éœ€é‡æ–°æŸ¥è¯¢å…¶æ•°æ®ã€‚ </li> </ul> - + <h2 id="summary">Loader API 摘è¦</h2> <p>在应用ä¸ä½¿ç”¨åŠ è½½å™¨æ—¶ï¼Œå¯èƒ½ä¼šæ¶‰åŠåˆ°å¤šä¸ªç±»å’ŒæŽ¥å£ã€‚ @@ -129,7 +129,7 @@ android.content.ContentProvider} 支æŒçš„æ•°æ®ã€‚您也å¯ä»¥å®žçŽ°è‡ªå·±çš„ 或 {@link android.content.AsyncTaskLoader} å类,从其他æºä¸åŠ è½½æ•°æ®ã€‚</li> <li>一个 {@link android.app.LoaderManager.LoaderCallbacks} -实现。您å¯ä»¥ä½¿ç”¨å®ƒæ¥åˆ›å»ºæ–°åŠ è½½å™¨ï¼Œå¹¶ç®¡ç†å¯¹çŽ°æœ‰åŠ è½½å™¨çš„å¼•ç”¨ã€‚</li> +实现。您å¯ä»¥ä½¿ç”¨å®ƒæ¥åˆ›å»ºæ–°åŠ è½½å™¨ï¼Œå¹¶ç®¡ç†å¯¹çŽ°æœ‰åŠ è½½å™¨çš„å¼•ç”¨ã€‚</li> <li>ä¸€ç§æ˜¾ç¤ºåŠ è½½å™¨æ•°æ®çš„æ–¹æ³•,如 {@link android.widget.SimpleCursorAdapter}。</li> <li>使用 @@ -140,11 +140,11 @@ android.widget.SimpleCursorAdapter}。</li> <p>{@link android.app.LoaderManager} å¯åœ¨ {@link android.app.Activity} 或 {@link android.app.Fragment} 内管ç†ä¸€ä¸ªæˆ–多个 {@link android.content.Loader} 实例。æ¯ä¸ª Activity æˆ–ç‰‡æ®µåªæœ‰ä¸€ä¸ª {@link -android.app.LoaderManager}。</p> +android.app.LoaderManager}。</p> <p>通常,您会使用 Activity çš„ {@link android.app.Activity#onCreate onCreate()} 方法或片段的 -{@link android.app.Fragment#onActivityCreated onActivityCreated()} +{@link android.app.Fragment#onActivityCreated onActivityCreated()} 方法åˆå§‹åŒ– {@link android.content.Loader}。您执行æ“作如下: </p> @@ -157,13 +157,13 @@ getLoaderManager().initLoader(0, null, this);</pre> <ul> <li>ç”¨äºŽæ ‡è¯†åŠ è½½å™¨çš„å”¯ä¸€ ID。在æ¤ç¤ºä¾‹ä¸ï¼ŒID 为 0。</li> <li>在构建时æä¾›ç»™åŠ è½½å™¨çš„å¯é€‰å‚数(在æ¤ç¤ºä¾‹ä¸ä¸º <code>null</code> -)。</li> +)。</li> <li>{@link android.app.LoaderManager.LoaderCallbacks} 实现, {@link android.app.LoaderManager} 将调用æ¤å®žçŽ°æ¥æŠ¥å‘ŠåŠ è½½å™¨äº‹ä»¶ã€‚åœ¨æ¤ç¤ºä¾‹ä¸ï¼Œæœ¬åœ°ç±»å®žçް {@link android.app.LoaderManager.LoaderCallbacks} -接å£ï¼Œå› æ¤å®ƒä¼šå°†å¼•用 {@code this} ä¼ é€’ç»™è‡ªå·±ã€‚</li> +接å£ï¼Œå› æ¤å®ƒä¼šå°†å¼•用 {@code this} ä¼ é€’ç»™è‡ªå·±ã€‚</li> </ul> <p>{@link android.app.LoaderManager#initLoader initLoader()} 调用确ä¿åŠ è½½å™¨å·²åˆå§‹åŒ–且处于Activity状æ€ã€‚è¿™å¯èƒ½ä¼šå‡ºçް䏤ç§ç»“果:</p> @@ -362,11 +362,11 @@ public void onLoaderReset(Loader<Cursor> loader) { <h2 id="example">示例</h2> -<p>以下是一个 +<p>以下是一个 {@link android.app.Fragment} 完整实现示例。它展示了一个 {@link android.widget.ListView},其ä¸åŒ…å«é’ˆå¯¹è”系人内容æä¾›ç¨‹åºçš„æŸ¥è¯¢ç»“果。它使用 {@link android.content.CursorLoader} ç®¡ç†æä¾›ç¨‹åºçš„æŸ¥è¯¢ã€‚</p> - + <p>应用如需访问用户è”系人(æ£å¦‚æ¤ç¤ºä¾‹ä¸æ‰€ç¤ºï¼‰ï¼Œå…¶æ¸…啿–‡ä»¶å¿…须包括æƒé™ {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}。 </p> diff --git a/docs/html-intl/intl/zh-cn/guide/components/processes-and-threads.jd b/docs/html-intl/intl/zh-cn/guide/components/processes-and-threads.jd index c88ecf4b81e8..3f7c3cfa6d90 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/processes-and-threads.jd @@ -47,7 +47,7 @@ Linux 进程。默认情况下,åŒä¸€åº”用的所有组件在相åŒçš„è¿›ç¨‹å’ <activity>}</a>ã€<a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>ã€<a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code <receiver>}</a> å’Œ <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code -<provider>}</a>—凿”¯æŒ +<provider>}</a>—凿”¯æŒ {@code android:process} 属性,æ¤å±žæ€§å¯ä»¥æŒ‡å®šè¯¥ç»„件应在哪个进程è¿è¡Œã€‚您å¯ä»¥è®¾ç½®æ¤å±žæ€§ï¼Œä½¿æ¯ä¸ªç»„ä»¶å‡åœ¨å„自的进程ä¸è¿è¡Œï¼Œæˆ–者使一些组件共享一个进程,而其他组件则ä¸å…±äº«ã€‚ æ¤å¤–,您还å¯ä»¥è®¾ç½® {@code android:process},使ä¸åŒåº”用的组件在相åŒçš„进程ä¸è¿è¡Œï¼Œä½†å‰ææ˜¯è¿™äº›åº”用共享相åŒçš„ Linux 用户 ID 并使用相åŒçš„è¯ä¹¦è¿›è¡Œç¾ç½²ã€‚ @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/zh-cn/guide/components/recents.jd b/docs/html-intl/intl/zh-cn/guide/components/recents.jd index 2bf1a5bd4ff3..bc218f44d072 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/recents.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/recents.jd @@ -118,7 +118,7 @@ public void createNewDocument(View view) { 如果未找到任务或者 Intent åŒ…å« {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} æ ‡å¿—ï¼Œåˆ™ä¼šä»¥è¯¥ Activity ä½œä¸ºå…¶æ ¹åˆ›å»ºæ–°ä»»åŠ¡ã€‚å¦‚æžœæ‰¾åˆ°çš„è¯ï¼Œåˆ™ä¼šå°†è¯¥ä»»åŠ¡è½¬åˆ°å‰å°å¹¶å°†æ–° - Intent + Intent ä¼ é€’ç»™ {@link android.app.Activity#onNewIntent onNewIntent()}。新 Activity 将获得 Intent 并在概览å±å¹•ä¸åˆ›å»ºæ–°æ–‡æ¡£ï¼Œå¦‚下例所示:</p> @@ -176,7 +176,7 @@ protected void onNewIntent(Intent intent) { <dd>该 Activity ä¸ä¼šä¸ºæ–‡æ¡£åˆ›å»ºæ–°ä»»åŠ¡ã€‚è®¾ç½®æ¤å€¼ä¼šæ›¿ä»£ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} å’Œ {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} æ ‡å¿—çš„è¡Œä¸ºï¼ˆå¦‚æžœåœ¨ - Intent + Intent ä¸è®¾ç½®äº†å…¶ä¸ä¸€ä¸ªæ ‡å¿—),并且概览å±å¹•将为应用显示å•ä¸ªä»»åŠ¡ï¼Œè¯¥ä»»åŠ¡å°†ä»Žç”¨æˆ·ä¸Šæ¬¡è°ƒç”¨çš„ä»»æ„ Activity å¼€å§‹ç»§ç»æ‰§è¡Œã€‚</dd> </dl> diff --git a/docs/html-intl/intl/zh-cn/guide/components/services.jd b/docs/html-intl/intl/zh-cn/guide/components/services.jd index 9a00e704fa38..c7c848b75e39 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/services.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/services.jd @@ -244,7 +244,7 @@ android.content.Context#startService startService()} æ–¹æ³•å¹¶ä¼ é€’ {@link andr {@link android.app.Service#onStartCommand onStartCommand()} æ–¹æ³•æŽ¥æ”¶æ¤ {@link android.content.Intent}。</p> -<p>例如,å‡è®¾æŸ Activity 需è¦å°†ä¸€äº›æ•°æ®ä¿å˜åˆ°åœ¨çº¿æ•°æ®åº“ä¸ã€‚该 Activity å¯ä»¥å¯åŠ¨ä¸€ä¸ªååŒæœåŠ¡ï¼Œå¹¶é€šè¿‡å‘ +<p>例如,å‡è®¾æŸ Activity 需è¦å°†ä¸€äº›æ•°æ®ä¿å˜åˆ°åœ¨çº¿æ•°æ®åº“ä¸ã€‚该 Activity å¯ä»¥å¯åŠ¨ä¸€ä¸ªååŒæœåŠ¡ï¼Œå¹¶é€šè¿‡å‘ {@link android.content.Context#startService startService()} ä¼ é€’ä¸€ä¸ª Intent,为该æœåŠ¡æä¾›è¦ä¿å˜çš„æ•°æ®ã€‚æœåŠ¡é€šè¿‡ {@link diff --git a/docs/html-intl/intl/zh-cn/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/zh-cn/guide/components/tasks-and-back-stack.jd index 07fdf6e80a02..88aa78ebb516 100644 --- a/docs/html-intl/intl/zh-cn/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/zh-cn/guide/components/tasks-and-back-stack.jd @@ -45,7 +45,7 @@ Android 多任务è¿è¡Œæœºåˆ¶</a></li> <p>一个 Activity 甚至å¯ä»¥å¯åŠ¨è®¾å¤‡ä¸Šå…¶ä»–åº”ç”¨ä¸å˜åœ¨çš„ Activity。例如,如果应用想è¦å‘é€ç”µå邮件,则å¯å°† Intent 定义为执行“å‘é€â€æ“ä½œå¹¶åŠ å…¥ä¸€äº›æ•°æ®ï¼Œå¦‚电å邮件地å€å’Œç”µå邮件。 ç„¶åŽï¼Œç³»ç»Ÿå°†æ‰“开其他应用ä¸å£°æ˜Žè‡ªå·±å¤„ç†æ¤ç±» - Intent çš„ Activityã€‚åœ¨è¿™ç§æƒ…况下, Intent + Intent çš„ Activityã€‚åœ¨è¿™ç§æƒ…况下, Intent 是è¦å‘é€ç”µåé‚®ä»¶ï¼Œå› æ¤å°†å¯åŠ¨ç”µå邮件应用的“撰写â€Activity(如果多个 Activity 支æŒç›¸åŒ Intent,则系统会让用户选择è¦ä½¿ç”¨çš„ Activity)。å‘é€ç”µå邮件时,Activity å°†æ¢å¤ï¼Œçœ‹èµ·æ¥å¥½åƒç”µå邮件 Activity 是您的应用的一部分。 å³ä½¿è¿™ä¸¤ä¸ª Activity å¯èƒ½æ¥è‡ªä¸åŒçš„应用,但是 @@ -246,7 +246,7 @@ B)。与该应用交互之åŽï¼Œç”¨æˆ·å†æ¬¡è¿”回主å±å¹•并选择最åˆå¯å <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li> </ul> -<p>在下文ä¸ï¼Œæ‚¨å°†äº†è§£å¦‚ä½•ä½¿ç”¨è¿™äº›æ¸…å•æ–‡ä»¶å±žæ€§å’Œ Intent +<p>在下文ä¸ï¼Œæ‚¨å°†äº†è§£å¦‚ä½•ä½¿ç”¨è¿™äº›æ¸…å•æ–‡ä»¶å±žæ€§å’Œ Intent æ ‡å¿—å®šä¹‰ Activity ä¸Žä»»åŠ¡çš„å…³è”æ–¹å¼ï¼Œä»¥åŠ Activity åœ¨è¿”å›žæ ˆä¸çš„行为方å¼ã€‚</p> <p>æ¤å¤–,我们还å•独介ç»äº†æœ‰å…³å¦‚何在概览å±å¹•䏿˜¾ç¤ºå’Œç®¡ç†ä»»åŠ¡ä¸Ž Activity 的注æ„事项。 @@ -282,7 +282,7 @@ A å¯åЍ Activity B,则 Activity B å¯ä»¥åœ¨å…¶æ¸…啿–‡ä»¶ä¸å®šä¹‰å®ƒåº”该å B çš„è¯·æ±‚ï¼ˆå¦‚å…¶æ¸…å•æ–‡ä»¶ä¸æ‰€å®šä¹‰ï¼‰ã€‚</p> <p class="note"><strong>注:</strong>æŸäº›é€‚ç”¨äºŽæ¸…å•æ–‡ä»¶çš„å¯åЍ -模å¼ä¸å¯ç”¨ä½œ Intent æ ‡å¿—ï¼ŒåŒæ ·ï¼ŒæŸäº›å¯ç”¨ä½œ Intent +模å¼ä¸å¯ç”¨ä½œ Intent æ ‡å¿—ï¼ŒåŒæ ·ï¼ŒæŸäº›å¯ç”¨ä½œ Intent æ ‡å¿—çš„å¯åŠ¨æ¨¡å¼æ— æ³•åœ¨æ¸…å•æ–‡ä»¶ä¸å®šä¹‰ã€‚</p> @@ -370,7 +370,7 @@ Android æµè§ˆå™¨çš„ å±žæ€§å’Œå¯æŽ¥å—的值。</p> <p class="note"><strong>注:</strong>使用 <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> -属性为 Activity 指定的行为å¯ç”± Intent +属性为 Activity 指定的行为å¯ç”± Intent 附带的 Activity å¯åŠ¨æ ‡å¿—æ›¿ä»£ï¼Œä¸‹æ–‡å°†å¯¹æ¤è¿›è¡Œè®¨è®ºã€‚</p> @@ -378,7 +378,7 @@ Android æµè§ˆå™¨çš„ <h4 id="#IntentFlagsForTasks">使用 Intent æ ‡å¿—</h4> <p>å¯åЍ Activity 时,您å¯ä»¥é€šè¿‡åœ¨ä¼ 递给 {@link -android.app.Activity#startActivity startActivity()} çš„ Intent +android.app.Activity#startActivity startActivity()} çš„ Intent ä¸åŠ å…¥ç›¸åº”çš„æ ‡å¿—ï¼Œä¿®æ”¹ Activity ä¸Žå…¶ä»»åŠ¡çš„é»˜è®¤å…³è”æ–¹å¼ã€‚å¯ç”¨äºŽä¿®æ”¹é»˜è®¤è¡Œä¸ºçš„æ ‡å¿—包括: </p> @@ -404,7 +404,7 @@ android.app.Activity#startActivity startActivity()} çš„ Intent 属性没有值。</p> <p>{@code FLAG_ACTIVITY_CLEAR_TOP} 通常与 {@code FLAG_ACTIVITY_NEW_TASK} -结åˆä½¿ç”¨ã€‚ä¸€èµ·ä½¿ç”¨æ—¶ï¼Œé€šè¿‡è¿™äº›æ ‡å¿—ï¼Œå¯ä»¥æ‰¾åˆ°å…¶ä»–任务ä¸çš„现有 Activity,并将其放入å¯ä»Žä¸å“应 Intent +结åˆä½¿ç”¨ã€‚ä¸€èµ·ä½¿ç”¨æ—¶ï¼Œé€šè¿‡è¿™äº›æ ‡å¿—ï¼Œå¯ä»¥æ‰¾åˆ°å…¶ä»–任务ä¸çš„现有 Activity,并将其放入å¯ä»Žä¸å“应 Intent çš„ä½ç½®ã€‚ </p> <p class="note"><strong>注:</strong>如果指定 Activity çš„å¯åŠ¨æ¨¡å¼ä¸º {@code "standard"},则该 Activity ä¹Ÿä¼šä»Žå †æ ˆä¸åˆ 除,并在其ä½ç½®å¯åŠ¨ä¸€ä¸ªæ–°å®žä¾‹ï¼Œä»¥ä¾¿å¤„ç†ä¼ 入的 Intent。 diff --git a/docs/html-intl/intl/zh-cn/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/zh-cn/guide/topics/manifest/manifest-intro.jd index c7ade4f392db..65b3b232df42 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/manifest/manifest-intro.jd @@ -34,14 +34,14 @@ Android 系统æä¾›æœ‰å…³æ‚¨çš„应用的基本信æ¯ï¼Œç³»ç»Ÿå¿…须获得这些 <li>æè¿°åº”用的å„个组件,å³ï¼šæž„æˆåº”用的 Activityã€æœåŠ¡ã€å¹¿æ’接收器和内容æä¾›ç¨‹åºã€‚ 为实现æ¯ä¸ªç»„件的类命åå¹¶å‘布其功能(例如,它们å¯ä»¥å¤„ç†çš„ -{@link android.content.Intent +{@link android.content.Intent Intent} 消æ¯ï¼‰ã€‚æ ¹æ®è¿™äº›å£°æ˜Žï¼ŒAndroid 系统å¯ä»¥äº†è§£è¿™ç»„件具体是什么,以åŠåœ¨ä»€ä¹ˆæ¡ä»¶ä¸‹å¯ä»¥å¯åŠ¨å®ƒä»¬</li> -<li>确定将托管应用组件的进程</li> +<li>确定将托管应用组件的进程</li> <li>声明应用必须具备哪些æƒé™æ‰èƒ½è®¿é—® -API ä¸å—ä¿æŠ¤çš„éƒ¨åˆ†å¹¶ä¸Žå…¶ä»–åº”ç”¨äº¤äº’</li> +API ä¸å—ä¿æŠ¤çš„éƒ¨åˆ†å¹¶ä¸Žå…¶ä»–åº”ç”¨äº¤äº’</li> <li>还声明其他应用与该应用组件交互所需具备的æƒé™ </li> @@ -66,7 +66,7 @@ API ä¸å—ä¿æŠ¤çš„éƒ¨åˆ†å¹¶ä¸Žå…¶ä»–åº”ç”¨äº¤äº’</li> è¦æŸ¥çœ‹æœ‰å…³ä»»ä½•å…ƒç´ çš„è¯¦ç»†ä¿¡æ¯ï¼Œè¯·ç‚¹å‡»è¯¥å›¾ä¸æˆ–å…¶åŽæŒ‰å—æ¯é¡ºåºæŽ’åˆ—çš„å…ƒç´ åˆ—è¡¨ä¸ç›¸åº”çš„å…ƒç´ å称,或者点击任何其他地方æåˆ°çš„ç›¸åº”å…ƒç´ å称。 - + </p> <pre> @@ -128,7 +128,7 @@ API ä¸å—ä¿æŠ¤çš„éƒ¨åˆ†å¹¶ä¸Žå…¶ä»–åº”ç”¨äº¤äº’</li> <p> å¯å‡ºçŽ°åœ¨æ¸…å•æ–‡ä»¶ä¸çš„æ‰€æœ‰å…ƒç´ æŒ‰å—æ¯é¡ºåºç½—列如下。 è¿™äº›æ˜¯ä»…æœ‰çš„åˆæ³•å…ƒç´ ï¼›æ‚¨æ— æ³•æ·»åŠ è‡ªå·±çš„å…ƒç´ æˆ–å±žæ€§ã€‚ - + </p> <p style="margin-left: 2em"> @@ -158,7 +158,7 @@ API ä¸å—ä¿æŠ¤çš„éƒ¨åˆ†å¹¶ä¸Žå…¶ä»–åº”ç”¨äº¤äº’</li> </p> - + <h2 id="filec">文件约定</h2> @@ -218,7 +218,7 @@ Activity (<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>)ã€å¹¿æ’接收器 (<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) 以åŠå†…容æä¾›ç¨‹åº -(<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> 如果按照您针对组件类({@link android.app.Activity}ã€{@link android.app.Service}ã€{@link android.content.BroadcastReceiver} @@ -244,7 +244,7 @@ Activity å…ƒç´ çš„ <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> å±žæ€§ä¸æ‰€æŒ‡å®šï¼‰ã€‚ -以下赋值与上述方法相åŒï¼š +以下赋值与上述方法相åŒï¼š </p> <pre><manifest package="com.example.project" . . . > @@ -339,7 +339,7 @@ Android 系统在å¯åЍæŸç»„件之å‰å¿…须了解该组件å¯ä»¥å¤„ç†å“ªäº› In <p> 显å¼å‘½åç›®æ ‡ç»„ä»¶çš„ Intent 将激活该组件;过滤器ä¸èµ·ä½œç”¨ã€‚ä½†æ˜¯ï¼Œä¸æŒ‰åç§°æŒ‡å®šç›®æ ‡çš„ - Intent + Intent åªæœ‰åœ¨èƒ½å¤Ÿé€šè¿‡ç»„件的一个过滤器时æ‰å¯æ¿€æ´»è¯¥ç»„件。 </p> @@ -399,7 +399,7 @@ Android 系统在å¯åЍæŸç»„件之å‰å¿…须了解该组件å¯ä»¥å¤„ç†å“ªäº› In <p> <i>æƒé™</i> 是一ç§é™åˆ¶ï¼Œç”¨äºŽé™åˆ¶å¯¹éƒ¨åˆ†ä»£ç 或设备上数æ®çš„访问。 æ–½åŠ é™åˆ¶æ˜¯ä¸ºäº†ä¿æŠ¤å¯èƒ½è¢«è¯¯ç”¨ä»¥è‡´ç ´å或æŸå®³ç”¨æˆ·ä½“验的关键数æ®å’Œä»£ç 。 - + </p> <p> @@ -427,7 +427,7 @@ Android 定义的一些æƒé™ï¼š 如果授予æƒé™ï¼Œåˆ™åº”用能够使用å—ä¿æŠ¤çš„åŠŸèƒ½ã€‚ å¦åˆ™ï¼Œå…¶è®¿é—®è¿™äº›åŠŸèƒ½çš„å°è¯•将会失败,并且ä¸ä¼šå‘用户å‘é€ä»»ä½•通知。 - + </p> <p> @@ -464,7 +464,7 @@ Android <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> å…ƒç´ æ¥è¯·æ±‚。è¦è®©åº”用的其他组件也能够å¯åЍå—ä¿æŠ¤çš„ Activity,就必须请求其使用æƒé™ï¼Œå³ä¾¿ä¿æŠ¤æ˜¯ç”±åº”ç”¨æœ¬èº«æ–½åŠ çš„äº¦å¦‚æ¤ã€‚ - + </p> <p> @@ -474,7 +474,7 @@ Android <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> å…ƒç´ å†æ¬¡å£°æ˜Žã€‚ ä½†æ˜¯ï¼Œä»æœ‰å¿…è¦é€šè¿‡ -<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> diff --git a/docs/html-intl/intl/zh-cn/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/zh-cn/guide/topics/providers/calendar-provider.jd index 59682843897d..b34cd8bf2891 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=日历æä¾›ç¨‹åº <li><a href="#intent-view">使用 Intent 对象查看日历数æ®</a></li> </ol> </li> - + <li><a href="#sync-adapter">åŒæ¥é€‚é…器</a></li> </ol> @@ -113,14 +113,14 @@ URI çš„æ ¼å¼ä¸º <code><em><class></em>.CONTENT_URI</code>。例如,{@li </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>æ¤è¡¨å‚¨å˜æ—¥åŽ†ç‰¹å®šä¿¡æ¯ã€‚ æ¤è¡¨ä¸çš„æ¯ä¸€è¡Œéƒ½åŒ…å«ä¸€ä¸ªæ—¥åŽ†çš„è¯¦ç»†ä¿¡æ¯ï¼Œä¾‹å¦‚åç§°ã€é¢œè‰²ã€åŒæ¥ä¿¡æ¯ç‰ã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>æ¤è¡¨å‚¨å˜äº‹ä»¶ç‰¹å®šä¿¡æ¯ã€‚ æ¤è¡¨ä¸çš„æ¯ä¸€è¡Œéƒ½åŒ…å«ä¸€ä¸ªäº‹ä»¶çš„信毗例如事件åç§°ã€åœ°ç‚¹ã€å¼€å§‹æ—¶é—´ã€ç»“æŸæ—¶é—´ç‰ã€‚ @@ -132,7 +132,7 @@ URI çš„æ ¼å¼ä¸º <code><em><class></em>.CONTENT_URI</code>。例如,{@li </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>æ¤è¡¨å‚¨å˜æ¯ä¸ªäº‹ä»¶å®žä¾‹çš„å¼€å§‹æ—¶é—´å’Œç»“æŸæ—¶é—´ã€‚ æ¤è¡¨ä¸çš„æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºä¸€ä¸ªäº‹ä»¶å®žä¾‹ã€‚ 对于一次性事件,实例与事件为 1:1 @@ -141,7 +141,7 @@ URI çš„æ ¼å¼ä¸º <code><em><class></em>.CONTENT_URI</code>。例如,{@li </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>æ¤è¡¨å‚¨å˜äº‹ä»¶å‚åŠ è€…ï¼ˆæ¥å®¾ï¼‰ä¿¡æ¯ã€‚ æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºäº‹ä»¶çš„䏀使¥å®¾ã€‚ 它指定æ¥å®¾çš„类型以åŠäº‹ä»¶çš„æ¥å®¾å‡ºå¸å“应。 @@ -149,7 +149,7 @@ URI çš„æ ¼å¼ä¸º <code><em><class></em>.CONTENT_URI</code>。例如,{@li </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>æ¤è¡¨å‚¨å˜æé†’/通知数æ®ã€‚ æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºäº‹ä»¶çš„一个æé†’。一个事件å¯ä»¥æœ‰å¤šä¸ªæé†’。 æ¯ä¸ªäº‹ä»¶çš„æœ€å¤§æé†’æ•°é‡åœ¨ @@ -159,7 +159,7 @@ URI çš„æ ¼å¼ä¸º <code><em><class></em>.CONTENT_URI</code>。例如,{@li 䏿Œ‡å®šï¼ŒåŽè€…ç”±æ‹¥æœ‰ç»™å®šæ—¥åŽ†çš„åŒæ¥é€‚é…器设置。æé†’以事件å‘生å‰çš„åˆ†é’Ÿæ•°å½¢å¼æŒ‡å®šï¼Œå…¶å…·æœ‰ä¸€ä¸ªå¯å†³å®šç”¨æˆ·æé†’æ–¹å¼çš„æ–¹æ³•。 </td> </tr> - + </table> <p>Calendar Provider API ä»¥çµæ´»ã€å¼ºå¤§ä¸ºè®¾è®¡å®—旨。æä¾›è‰¯å¥½çš„æœ€ç»ˆç”¨æˆ·ä½“验以åŠä¿æŠ¤æ—¥åކåŠå…¶æ•°æ®çš„å®Œæ•´æ€§ä¹ŸåŒæ ·é‡è¦ã€‚ @@ -229,7 +229,7 @@ android.Manifest.permission#READ_CALENDAR} æƒé™ã€‚文件ä¸å¿…须包括用于å </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>表示是å¦é€‰æ‹©æ˜¾ç¤ºè¯¥æ—¥åŽ†çš„å¸ƒå°”å€¼ã€‚å€¼ä¸º 0 表示ä¸åº”显示与该日历关è”的事件。 值为 1 @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances} 表ä¸è¡Œçš„生æˆã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>一个布尔值,表示是å¦åº”åŒæ¥æ—¥åŽ†å¹¶å°†å…¶äº‹ä»¶å˜å‚¨åœ¨è®¾å¤‡ä¸Šã€‚ 值为 0 表示ä¸åŒæ¥è¯¥æ—¥åŽ†ï¼Œä¹Ÿä¸å°†å…¶äº‹ä»¶å˜å‚¨åœ¨è®¾å¤‡ä¸Šã€‚值为 1 @@ -268,13 +268,13 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>ä¸ºä½•å¿…é¡»åŠ å…¥ ACCOUNT_TYPE?</h3> <p>如果您查询 {@link @@ -289,7 +289,7 @@ Calendars.ACCOUNT_NAME},还必须将 android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} çš„ç‰¹æ®Šå¸æˆ·ç±»åž‹ï¼Œç”¨äºŽæœªå…³è”è®¾å¤‡å¸æˆ·çš„æ—¥åŽ†ã€‚{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} -叿ˆ·ä¸ä¼šè¿›è¡ŒåŒæ¥ã€‚</p> </div> </div> +叿ˆ·ä¸ä¼šè¿›è¡ŒåŒæ¥ã€‚</p> </div> </div> <p> åœ¨ç¤ºä¾‹çš„ä¸‹ä¸€éƒ¨åˆ†ï¼Œæ‚¨éœ€è¦æž„建查询。选定范围指定查询的æ¡ä»¶ã€‚ @@ -308,38 +308,38 @@ android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>以下åŽç»éƒ¨åˆ†ä½¿ç”¨æ¸¸æ ‡å•æ¥è°ƒè¯•ç»“æžœé›†ã€‚å®ƒä½¿ç”¨åœ¨ç¤ºä¾‹å¼€å¤´è®¾ç½®çš„å¸¸é‡æ¥è¿”回æ¯ä¸ªå—段的值。 </p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">修改日历</h3> <p>如需执行日历更新,您å¯ä»¥é€šè¿‡ @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events} å‚考资料。</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td><a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a> æ ¼å¼çš„事件æŒç»æ—¶é—´ã€‚例如,值为 <code>"PT1H"</code> 表示事件应æŒç»ä¸€å°æ—¶ï¼Œå€¼ä¸º @@ -444,39 +444,39 @@ android.provider.CalendarContract.Events} å‚考资料。</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>值为 1 表示æ¤äº‹ä»¶å 用一整天(按照本地时区的定义)。值为 0 表示它是常规事件,å¯åœ¨ä¸€å¤©å†…的任何时间开始和结æŸã€‚</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>事件的é‡å¤å‘ç”Ÿè§„åˆ™æ ¼å¼ã€‚例如,<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>。 您å¯ä»¥åœ¨<a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">æ¤å¤„</a>找到更多示例。 </td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> <td>事件的é‡å¤å‘生日期。 -{@link android.provider.CalendarContract.EventsColumns#RDATE} -与 {@link android.provider.CalendarContract.EventsColumns#RRULE} +{@link android.provider.CalendarContract.EventsColumns#RDATE} +与 {@link android.provider.CalendarContract.EventsColumns#RRULE} 通常è”åˆç”¨äºŽå®šä¹‰ä¸€ç»„èšåˆé‡å¤å®žä¾‹ã€‚ 如需查看更详细的介ç»ï¼Œè¯·å‚阅 <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 规范</a>。</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>å°†æ¤äº‹ä»¶è§†ä¸ºå¿™ç¢Œæ—¶é—´è¿˜æ˜¯å¯è°ƒåº¦çš„空闲时间。 </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}。请注æ„,如果您按<a href="#intent {@link android.content.Intent#ACTION_INSERT INSERT} Intent 对象æ’入事件,则æ¤è§„则ä¸é€‚用—在该情形下,系统会æä¾›é»˜è®¤æ—¶åŒºã€‚ </li> - + <li>对于éžé‡å¤äº‹ä»¶ï¼Œæ‚¨å¿…é¡»åŠ å…¥ {@link android.provider.CalendarContract.EventsColumns#DTEND}。 </li> - - + + <li>对于é‡å¤äº‹ä»¶ï¼Œæ‚¨å¿…é¡»åŠ å…¥ {@link android.provider.CalendarContract.EventsColumns#DURATION} ä»¥åŠ {@link android.provider.CalendarContract.EventsColumns#RRULE} 或 {@link @@ -528,7 +528,7 @@ android.content.Intent#ACTION_INSERT INSERT} Intent 对象æ’入事件,则æ¤è android.provider.CalendarContract.EventsColumns#RRULE} 与 {@link android.provider.CalendarContract.EventsColumns#DTSTART} å’Œ {@link android.provider.CalendarContract.EventsColumns#DTEND} è”用,日历应用会自动将其转æ¢ä¸ºæŒç»æ—¶é—´ã€‚ </li> - + </ul> <p>以下是一个æ’入事件的示例。为了简便起è§ï¼Œæ¤æ“作是在 UI @@ -539,8 +539,8 @@ android.provider.CalendarContract.EventsColumns#RRULE} 与 {@link android.provid <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,19 +625,19 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">å‚åŠ è€…è¡¨</h2> <p>{@link android.provider.CalendarContract.Attendees} -表的æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºäº‹ä»¶çš„一ä½å‚åŠ è€…æˆ–æ¥å®¾ã€‚调用 -{@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()} 会返回一个å‚åŠ è€…åˆ—è¡¨ï¼Œå…¶ä¸åŒ…å«å…·æœ‰ç»™å®š {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} 的事件的å‚åŠ è€…ã€‚ -æ¤ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +æ¤ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} 必须匹é…特定事件的 {@link -android.provider.BaseColumns#_ID}。</p> +android.provider.BaseColumns#_ID}。</p> <p>下表列出了å¯å†™å…¥çš„å—æ®µã€‚ æ’入新å‚åŠ è€…æ—¶ï¼Œæ‚¨å¿…é¡»åŠ å…¥é™¤ <code>ATTENDEE_NAME</code> ä¹‹å¤–çš„æ‰€æœ‰å—æ®µã€‚ @@ -718,7 +718,7 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">æé†’表</h2> <p>{@link android.provider.CalendarContract.Reminders} -表的æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºäº‹ä»¶çš„一个æé†’。调用 +表的æ¯ä¸€è¡Œéƒ½è¡¨ç¤ºäº‹ä»¶çš„一个æé†’。调用 {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} 会返回一个æé†’列表,其ä¸åŒ…å«å…·æœ‰ç»™å®š {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} 的事件的æé†’。 </p> @@ -727,7 +727,7 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <p>下表列出了æé†’çš„å¯å†™å…¥å—段。æ’入新æé†’æ—¶ï¼Œå¿…é¡»åŠ å…¥æ‰€æœ‰å—æ®µã€‚ 请注æ„ï¼ŒåŒæ¥é€‚é…器指定它们在 {@link -android.provider.CalendarContract.Calendars} è¡¨ä¸æ”¯æŒçš„æé†’类型。详情请å‚阅 +android.provider.CalendarContract.Calendars} è¡¨ä¸æ”¯æŒçš„æé†’类型。详情请å‚阅 {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} 。</p> @@ -780,9 +780,9 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </p> <p>下表列出了一些您å¯ä»¥æ‰§è¡Œå®žä¾‹æŸ¥è¯¢çš„å—æ®µã€‚请注æ„, -时区由 -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -å’Œ +时区由 +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} +å’Œ {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES} 定义。</p> @@ -801,18 +801,18 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>ä¸Žæ—¥åŽ†æ—¶åŒºç›¸åº”çš„å®žä¾‹å„’ç•¥åŽ†ç»“æŸæ—¥ã€‚ - - + + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>从日历时区åˆå¤œå¼€å§‹è®¡ç®—çš„å®žä¾‹ç»“æŸæ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰ã€‚ </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>与日历时区相应的实例儒略历开始日。 + <td>与日历时区相应的实例儒略历开始日。 </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>从日历时区åˆå¤œå¼€å§‹è®¡ç®—的实例开始时间(分钟)。 - + </td> - + </tr> </table> @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -922,9 +922,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - 您还å¯ä»¥é€šè¿‡ + 您还å¯ä»¥é€šè¿‡ {@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI} 引用 URI。 -如需查看使用该 Intent 对象的示例,请å‚阅<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">使用 Intent 对象查看日历数æ®</a>。 +如需查看使用该 Intent 对象的示例,请å‚阅<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">使用 Intent 对象查看日历数æ®</a>。 </td> <td>打开日历åŽå®šä½åˆ° <code><ms_since_epoch></code> 指定的时间。</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - 您还å¯ä»¥é€šè¿‡ + + 您还å¯ä»¥é€šè¿‡ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} 引用 URI。 如需查看使用该 Intent 对象的示例,请å‚阅<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">使用 Intent 对象查看日历数æ®</a>。 - + </td> <td>查看 <code><event_id></code> 指定的事件。</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - 您还å¯ä»¥é€šè¿‡ + + 您还å¯ä»¥é€šè¿‡ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} 引用 URI。 如需查看使用该 Intent 对象的示例,请å‚阅<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">使用 Intent 对象编辑事件</a>。 - - + + </td> <td>编辑 <code><event_id></code> 指定的事件。</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - 您还å¯ä»¥é€šè¿‡ + + 您还å¯ä»¥é€šè¿‡ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} 引用 URI。 如需查看使用该 Intent 对象的示例,请å‚阅<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">使用 Intent 对象æ’入事件</a>。 - + </td> <td>创建事件。</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>事件的å称。</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>事件开始时间,以从公元纪年开始计算的毫秒数表示。</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>äº‹ä»¶ç»“æŸæ—¶é—´ï¼Œä»¥ä»Žå…¬å…ƒçºªå¹´å¼€å§‹è®¡ç®—的毫秒数表示。</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>一个布尔值,表示事件属于全天事件。值å¯ä»¥æ˜¯ <code>true</code> 或 <code>false</code>。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>事件的地点。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>事件æè¿°ã€‚</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>事件是ç§äººæ€§è´¨è¿˜æ˜¯å…¬å…±æ€§è´¨ã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>å°†æ¤äº‹ä»¶è§†ä¸ºå¿™ç¢Œæ—¶é—´è¿˜æ˜¯å¯è°ƒåº¦çš„空闲时间。</td> - -</table> + +</table> <p>下文æè¿°å¦‚何使用这些 Intent 对象。</p> @@ -1059,23 +1059,23 @@ Events.AVAILABILITY}</td> {@link android.Manifest.permission#WRITE_CALENDAR} æƒé™ã€‚</p> - + <p>当用户è¿è¡Œä½¿ç”¨æ¤æ–¹æ³•的应用时,应用会将其转到日历æ¥å®Œæˆäº‹ä»¶æ·»åŠ æ“作。 {@link android.content.Intent#ACTION_INSERT INSERT} Intent 利用 extra å—æ®µä¸ºè¡¨å•预填充日历ä¸äº‹ä»¶çš„详细信æ¯ã€‚用户éšåŽå¯å–æ¶ˆäº‹ä»¶ã€æ ¹æ®éœ€è¦ç¼–è¾‘è¡¨å•æˆ–将事件ä¿å˜åˆ°æ—¥åކä¸ã€‚ </p> - + <p>ä»¥ä¸‹æ˜¯ä¸€ä¸ªä»£ç æ®µï¼Œç”¨äºŽå®‰æŽ’一个在 2012 å¹´ 1 月 19 æ—¥ä¸Šåˆ 7:30 开始ã€8:30 结æŸçš„事件。请注æ„è¯¥ä»£ç æ®µä¸çš„以下内容:</p> <ul> - <li>它将 {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} + <li>它将 {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} 指定为 URI。</li> - + <li>它使用 {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} å’Œ {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} extra å—æ®µä¸ºè¡¨å•预填充事件的时间。这些时间的值必须以从公元纪年开始计算的å调世界时毫秒数表示。 </li> - + <li>它使用 {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} extra å—æ®µæä¾›ä»¥é€—å·åˆ†éš”çš„å—邀者电å邮件地å€åˆ—表。</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,18 +1158,18 @@ startActivity(intent); <ul> <li>åŒæ¥é€‚é…器需è¦é€šè¿‡å°† {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} 设置为 <code>true</code> æ¥è¡¨æ˜Žå®ƒæ˜¯åŒæ¥é€‚é…器。</li> - - + + <li>åŒæ¥é€‚é…å™¨éœ€è¦æä¾› {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} å’Œ {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} 作为 URI ä¸çš„æŸ¥è¯¢å‚数。 </li> - + <li>与应用或å°å·¥å…·ç›¸æ¯”ï¼ŒåŒæ¥é€‚é…器拥有写入æƒé™çš„列更多。 例如,应用åªèƒ½ä¿®æ”¹æ—¥åŽ†çš„å°‘æ•°å‡ ç§ç‰¹æ€§ï¼Œ 例如其åç§°ã€æ˜¾ç¤ºåç§°ã€èƒ½è§åº¦è®¾ç½®ä»¥åŠæ˜¯å¦åŒæ¥æ—¥åŽ†ã€‚ ç›¸æ¯”ä¹‹ä¸‹ï¼ŒåŒæ¥é€‚é…器ä¸ä»…å¯ä»¥è®¿é—®è¿™äº›åˆ—,还能访问许多其他列, ä¾‹å¦‚æ—¥åŽ†é¢œè‰²ã€æ—¶åŒºã€è®¿é—®çº§åˆ«ã€åœ°ç‚¹ç‰ç‰ã€‚ä¸è¿‡ï¼ŒåŒæ¥é€‚é…器å—é™äºŽå®ƒæŒ‡å®šçš„ -<code>ACCOUNT_NAME</code> å’Œ +<code>ACCOUNT_NAME</code> å’Œ <code>ACCOUNT_TYPE</code>。</li> </ul> <p>您å¯ä»¥åˆ©ç”¨ä»¥ä¸‹ helper æ–¹æ³•è¿”å›žä¾›ä¸ŽåŒæ¥é€‚é…器一起使用的 URI:</p> @@ -1180,5 +1180,5 @@ android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} 作为 URI ä¸çš„æŸ¥ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>å¦‚éœ€æŸ¥çœ‹åŒæ¥é€‚é…器的实现示例(并éžä»…é™ä¸Žæ—¥åŽ†æœ‰å…³çš„å®žçŽ°ï¼‰ï¼Œè¯·å‚阅 +<p>å¦‚éœ€æŸ¥çœ‹åŒæ¥é€‚é…器的实现示例(并éžä»…é™ä¸Žæ—¥åŽ†æœ‰å…³çš„å®žçŽ°ï¼‰ï¼Œè¯·å‚阅 <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>。 diff --git a/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-basics.jd index 4c91d3a19c96..b1a1c5ab49c8 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-basics.jd @@ -251,7 +251,7 @@ mCursor = getContentResolver().query( </pre> <p> 表 2 显示了 - {@link android.content.ContentResolver#query + {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} çš„å‚æ•°å¦‚ä½•åŒ¹é… SQL SELECT è¯å¥ï¼š </p> <p class="table-caption"> @@ -717,7 +717,7 @@ if (mCursor != null) { <uses-permission android:name="android.permission.READ_USER_DICTIONARY"> </pre> <p> - + <a href="{@docRoot}guide/topics/security/security.html">安全与æƒé™</a>指å—ä¸è¯¦ç»†ä»‹ç»äº†æƒé™å¯¹æä¾›ç¨‹åºè®¿é—®çš„å½±å“。 </p> @@ -944,7 +944,7 @@ mRowsDeleted = getContentResolver().delete( </p> <p> è¦åœ¨â€œæ‰¹é‡æ¨¡å¼â€ä¸‹è®¿é—®æä¾›ç¨‹åºï¼Œ -您å¯ä»¥åˆ›å»º {@link android.content.ContentProviderOperation} 对象数组,然åŽä½¿ç”¨ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()} +您å¯ä»¥åˆ›å»º {@link android.content.ContentProviderOperation} 对象数组,然åŽä½¿ç”¨ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()} 将其分派给内容æä¾›ç¨‹åºã€‚ 您需将内容æä¾›ç¨‹åºçš„<em>授æƒ</em>ä¼ é€’ç»™æ¤æ–¹æ³•ï¼Œè€Œä¸æ˜¯ç‰¹å®šå†…容 URIã€‚è¿™æ ·å¯ä½¿æ•°ç»„ä¸çš„æ¯ä¸ª {@link android.content.ContentProviderOperation} 对象都能适用于其他表。 @@ -1191,6 +1191,6 @@ vnd.android.cursor.<strong>item</strong>/vnd.example.line2 </p> <p> - + <a href="#ContentURIs">内容 URI</a> 部分介ç»äº†å•个行的内容 URI。 </p> diff --git a/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-creating.jd index 6da57435f43d..329754e1c5d8 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/providers/content-provider-creating.jd @@ -277,7 +277,7 @@ page.title=创建内容æä¾›ç¨‹åº </p> <p> - + <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">内容æä¾›ç¨‹åºåŸºç¡€çŸ¥è¯†</a>ä¸»é¢˜ä¸æè¿°äº†å†…å®¹ URI 的基础知识。 </p> @@ -569,7 +569,7 @@ public class ExampleProvider extends ContentProvider { </ul> <h3 id="Query">实现 query() 方法</h3> <p> - + {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) ContentProvider.query()} 方法必须返回 {@link android.database.Cursor} å¯¹è±¡ã€‚å¦‚æžœå¤±è´¥ï¼Œåˆ™ä¼šå¼•å‘ {@link java.lang.Exception}。 如果您使用 SQLite æ•°æ®åº“作为数æ®å˜å‚¨ï¼Œåˆ™åªéœ€è¿”回由 {@link android.database.sqlite.SQLiteDatabase} 类的其ä¸ä¸€ä¸ª @@ -831,7 +831,7 @@ vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1 </pre> <h3 id="FileMIMETypes">文件的 MIME 类型</h3> <p> - 如果您的æä¾›ç¨‹åºæä¾›æ–‡ä»¶ï¼Œè¯·å®žçް + 如果您的æä¾›ç¨‹åºæä¾›æ–‡ä»¶ï¼Œè¯·å®žçް {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}。 该方法会为您的æä¾›ç¨‹åºå¯ä»¥ä¸ºç»™å®šå†…容 URI 返回的文件返回一个 MIME 类型 {@link java.lang.String} 数组。您应该通过 MIME ç±»åž‹è¿‡æ»¤å™¨å‚æ•°è¿‡æ»¤æ‚¨æä¾›çš„ MIME 类型,以便åªè¿”回客户端想处ç†çš„那些 MIME 类型。 diff --git a/docs/html-intl/intl/zh-cn/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/zh-cn/guide/topics/providers/document-provider.jd index fd36e2963606..db5b1a4f09d0 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/providers/document-provider.jd @@ -177,7 +177,7 @@ URI 授æƒï¼›</li> ä¸ï¼Œæä¾›ç¨‹åºå’Œå®¢æˆ·ç«¯å¹¶ä¸ç›´æŽ¥äº¤äº’。客户端请求与文件交互(å³è¯»å–ã€ç¼–辑ã€åˆ›å»ºæˆ–åˆ é™¤æ–‡ä»¶ï¼‰çš„æƒé™ï¼› </li> -<li>交互在应用(在本示例ä¸ä¸ºç…§ç‰‡åº”ç”¨ï¼‰è§¦å‘ Intent +<li>交互在应用(在本示例ä¸ä¸ºç…§ç‰‡åº”ç”¨ï¼‰è§¦å‘ Intent {@link android.content.Intent#ACTION_OPEN_DOCUMENT} 或 {@link android.content.Intent#ACTION_CREATE_DOCUMENT} åŽå¼€å§‹ã€‚Intent å¯èƒ½åŒ…括进一æ¥ç»†åŒ–æ¡ä»¶çš„过滤器—例如,“为我æä¾›æ‰€æœ‰ MIME 类型为‘图åƒâ€™çš„坿‰“开文件â€ï¼› </li> @@ -460,7 +460,7 @@ DocumentsContract.deleteDocument(getContentResolver(), uri); <p>您å¯ä»¥ä½¿ç”¨ SAF å°±åœ°ç¼–è¾‘æ–‡æœ¬æ–‡æ¡£ã€‚ä»¥ä¸‹ä»£ç æ®µä¼šè§¦å‘ -{@link android.content.Intent#ACTION_OPEN_DOCUMENT} Intent +{@link android.content.Intent#ACTION_OPEN_DOCUMENT} Intent 并使用类别 {@link android.content.Intent#CATEGORY_OPENABLE} 以仅显示å¯ä»¥æ‰“开的文档。它会进一æ¥è¿‡æ»¤ä»¥ä»…显示文本文件:</p> @@ -589,7 +589,7 @@ SAF </ul></li> <li>一个包括 -{@code android.content.action.DOCUMENTS_PROVIDER} æ“作的 Intent +{@code android.content.action.DOCUMENTS_PROVIDER} æ“作的 Intent 过滤器,以便在系统æœç´¢æä¾›ç¨‹åºæ—¶è®©æ‚¨çš„æä¾›ç¨‹åºå‡ºçŽ°åœ¨é€‰å–器ä¸ã€‚</li> </ul> @@ -623,7 +623,7 @@ SAF Android 4.4 åŠæ›´é«˜ç‰ˆæœ¬çš„è®¾å¤‡ã€‚å¦‚æžœæ‚¨æƒ³è®©åº”ç”¨æ”¯æŒ {@link android.content.Intent#ACTION_GET_CONTENT} 以适应è¿è¡Œ Android 4.3 åŠæ›´ä½Žç‰ˆæœ¬çš„è®¾å¤‡ï¼Œåˆ™åº”åœ¨æ‚¨çš„æ¸…å•æ–‡ä»¶ä¸ä¸ºè¿è¡Œ Android 4.4 -或更高版本的设备ç¦ç”¨ {@link android.content.Intent#ACTION_GET_CONTENT} Intent +或更高版本的设备ç¦ç”¨ {@link android.content.Intent#ACTION_GET_CONTENT} Intent 过滤器。应将文档æä¾›ç¨‹åºå’Œ {@link android.content.Intent#ACTION_GET_CONTENT} è§†ä¸ºå…·æœ‰äº’æ–¥æ€§ã€‚å¦‚æžœæ‚¨åŒæ—¶æ”¯æŒè¿™ä¸¤è€…,您的应用将在系统选å–器 @@ -631,7 +631,7 @@ UI ä¸å‡ºçŽ°ä¸¤æ¬¡ï¼Œæä¾›ä¸¤ç§ä¸åŒçš„æ–¹å¼æ¥è®¿é—®æ‚¨å˜å‚¨çš„æ•°æ®ã€‚è¿™ä¼šç»™ç”¨æˆ·é€ æˆå›°æƒ‘。</p> <p>建议按照以下æ¥éª¤ä¸ºè¿è¡Œ Android 4.4 版或更高版本的设备ç¦ç”¨ -{@link android.content.Intent#ACTION_GET_CONTENT} Intent +{@link android.content.Intent#ACTION_GET_CONTENT} Intent 过滤器:</p> <ol> @@ -643,7 +643,7 @@ UI <li>æ·»åŠ ä¸€ä¸ª<a href="{@docRoot}guide/topics/manifest/activity-alias-element.html">Activity别å</a>,为 4.4 版(API 19 -级)或更高版本ç¦ç”¨ {@link android.content.Intent#ACTION_GET_CONTENT} Intent +级)或更高版本ç¦ç”¨ {@link android.content.Intent#ACTION_GET_CONTENT} Intent 过滤器。例如: <pre> diff --git a/docs/html-intl/intl/zh-cn/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/zh-cn/guide/topics/resources/providing-resources.jd index ea46d86152a4..1516814ccf47 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/resources/providing-resources.jd @@ -398,7 +398,7 @@ UIã€‚å› æ¤ï¼Œä½¿ç”¨çš„值应该是布局所需è¦<em></em>的实际最å°å°ºå¯¸ <li>600,适用于 600x1024 mdpi 之类的å±å¹•(7 英寸平æ¿ç”µè„‘)。</li> <li>720,适用于 720x1280 mdpi 之类的å±å¹•(10 英寸平æ¿ç”µè„‘)。</li> </ul> - <p>应用为多个资æºç›®å½•æä¾›ä¸åŒçš„ + <p>应用为多个资æºç›®å½•æä¾›ä¸åŒçš„ smallestWidth é™å®šç¬¦å€¼æ—¶ï¼Œç³»ç»Ÿä¼šä½¿ç”¨æœ€æŽ¥è¿‘(但未超出)设备 smallestWidth 的值。 </p> <p><em>æ¤é¡¹ä¸º API 级别 13 䏿–°å¢žé…置。</em></p> @@ -428,7 +428,7 @@ smallestWidth 值。</p> <p>应用为多个资æºç›®å½•æä¾›ä¸åŒçš„æ¤é…置值时,系统会使用最接近(但未超出)设备当å‰å±å¹•宽度的值。 æ¤å¤„的值考虑到了å±å¹•è£…é¥°å…ƒç´ ï¼Œå› æ¤å¦‚果设备显示å±çš„左边缘或å³è¾¹ç¼˜ä¸Šæœ‰ä¸€äº›æ°¸ä¹…性 UI -å…ƒç´ ï¼Œè€ƒè™‘åˆ°è¿™äº› UI +å…ƒç´ ï¼Œè€ƒè™‘åˆ°è¿™äº› UI å…ƒç´ ï¼Œå®ƒä¼šä½¿ç”¨å°äºŽå®žé™…å±å¹•å°ºå¯¸çš„å®½åº¦å€¼ï¼Œè¿™æ ·ä¼šå‡å°‘应用的å¯ç”¨ç©ºé—´ã€‚ </p> @@ -456,7 +456,7 @@ smallestWidth 值。</p> <p>应用为多个资æºç›®å½•æä¾›ä¸åŒçš„æ¤é…置值时,系统会使用最接近(但未超出)设备当å‰å±å¹•高度的值。 æ¤å¤„的值考虑到了å±å¹•è£…é¥°å…ƒç´ ï¼Œå› æ¤å¦‚果设备显示å±çš„上边缘或下边缘有一些永久性 UI -å…ƒç´ ï¼Œè€ƒè™‘åˆ°è¿™äº› UI +å…ƒç´ ï¼Œè€ƒè™‘åˆ°è¿™äº› UI å…ƒç´ ï¼ŒåŒæ—¶ä¸ºå‡å°‘应用的å¯ç”¨ç©ºé—´ï¼Œå®ƒä¼šä½¿ç”¨å°äºŽå®žé™…å±å¹•尺寸的高度值。 éžå›ºå®šçš„å±å¹•è£…é¥°å…ƒç´ ï¼ˆä¾‹å¦‚ï¼Œå…¨å±æ—¶å¯éšè—çš„æ‰‹æœºçŠ¶æ€æ )并ä¸<em></em>åœ¨è€ƒè™‘èŒƒå›´å†…ï¼Œæ ‡é¢˜æ æˆ–æ“作æ ç‰çª—å£è£…饰也ä¸åœ¨è€ƒè™‘èŒƒå›´å†…ï¼Œå› æ¤åº”用必须准备好处ç†ç¨å°äºŽå…¶æ‰€æŒ‡å®šå€¼çš„空间。 @@ -510,7 +510,7 @@ xlarge} é™å®šç¬¦æ ‡è®°ï¼Œä½†è®¾å¤‡æ˜¯æ ‡å‡†å°ºå¯¸çš„å±å¹•)。 </p> <p><em>æ¤é¡¹ä¸º API 级别 4 䏿–°å¢žé…置。</em></p> - + <p>如需了解详细信æ¯ï¼Œè¯·å‚阅<a href="{@docRoot}guide/practices/screens_support.html">支æŒå¤šä¸ªå±å¹•</a>。 </p> <p>å¦è¯·å‚阅 {@link android.content.res.Configuration#screenLayout} é…ç½®å—æ®µï¼Œè¯¥å—段表示å±å¹•是å°å°ºå¯¸ã€æ ‡å‡†å°ºå¯¸è¿˜æ˜¯å¤§å°ºå¯¸ã€‚ diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/controls.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/controls.jd index 0f1a543d1f66..3d78bdc57259 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ parent.link=index.html <tr> <td><a href="controls/radiobutton.html">å•选按钮</a></td> <td>与å¤é€‰æ¡†ç±»ä¼¼ï¼Œä¸åŒçš„æ˜¯åªèƒ½é€‰æ‹©ç»„ä¸çš„一个选项。</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/dialogs.jd index 84922b40e445..595407d87d25 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=æé†’å¯¹è¯æ¡†,å¯¹è¯æ¡†ç‰‡æ®µ <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>å¦è¯·å‚阅</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">å¯¹è¯æ¡†è®¾è®¡æŒ‡å—</a></li> @@ -248,7 +248,7 @@ AlertDialog dialog = builder.create(); <dt>䏿€§</dt> <dd>您应该在用户å¯èƒ½ä¸æƒ³ç»§ç»æ‰§è¡Œæ“作,但也ä¸ä¸€å®šæƒ³è¦å–消æ“ä½œæ—¶ä½¿ç”¨æ¤æŒ‰é’®ã€‚ 它出现在肯定按钮和å¦å®šæŒ‰é’®ä¹‹é—´ã€‚ -例如,实际æ“作å¯èƒ½æ˜¯â€œç¨åŽæé†’æˆ‘â€ã€‚</dd> +例如,实际æ“作å¯èƒ½æ˜¯â€œç¨åŽæé†’æˆ‘â€ã€‚</dd> </dl> <p>对于æ¯ç§æŒ‰é’®ç±»åž‹ï¼Œæ‚¨åªèƒ½ä¸º {@link @@ -317,10 +317,10 @@ android.app.AlertDialog.Builder#setAdapter setAdapter()} æŒ‡å®šä¸€ä¸ªåˆ—è¡¨ã€‚è¿ <h4 id="Checkboxes">æ·»åŠ æ°¸ä¹…æ€§å¤šé€‰åˆ—è¡¨æˆ–å•选列表</h4> -<p>è¦æƒ³æ·»åŠ å¤šé€‰é¡¹ï¼ˆå¤é€‰æ¡†ï¼‰æˆ–å•选项(å•选按钮)列表,请分别使用 +<p>è¦æƒ³æ·»åŠ å¤šé€‰é¡¹ï¼ˆå¤é€‰æ¡†ï¼‰æˆ–å•选项(å•选按钮)列表,请分别使用 {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} 或 -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} 或 +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} 方法。</p> @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -373,7 +373,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>å°½ç®¡ä¼ ç»Ÿåˆ—è¡¨å’Œå…·æœ‰å•选按钮的列表都能æä¾›â€œå•é€‰â€æ“作,但如果您想æŒä¹…ä¿å˜ç”¨æˆ·çš„选择,则应使用 {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()}。也就是说,如果ç¨åŽå†æ¬¡æ‰“å¼€å¯¹è¯æ¡†æ—¶ç³»ç»Ÿåº”指示用户的当å‰é€‰æ‹©ï¼Œé‚£ä¹ˆæ‚¨å°±éœ€è¦åˆ›å»ºä¸€ä¸ªå…·æœ‰å•选按钮的列表。 </p> @@ -442,7 +442,7 @@ android.app.AlertDialog.Builder#setView setView()} å°†å…¶æ·»åŠ åˆ° {@link androi {@code "sans-serif"}ï¼Œä»¥ä¾¿ä¸¤ä¸ªæ–‡æœ¬å—æ®µéƒ½ä½¿ç”¨åŒ¹é…çš„å—ä½“æ ·å¼ã€‚</p> <p>è¦æ‰©å±• {@link android.support.v4.app.DialogFragment} -ä¸çš„布局,请通过 {@link android.app.Activity#getLayoutInflater()} +ä¸çš„布局,请通过 {@link android.app.Activity#getLayoutInflater()} 获å–一个 {@link android.view.LayoutInflater} 并调用 {@link android.view.LayoutInflater#inflate inflate()},其ä¸ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯å¸ƒå±€èµ„æº IDï¼Œç¬¬äºŒä¸ªå‚æ•°æ˜¯å¸ƒå±€çš„父视图。然åŽï¼Œæ‚¨å¯ä»¥è°ƒç”¨ @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -505,7 +505,7 @@ API。 <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ public class NoticeDialogFragment extends DialogFragment { public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ UI:</p> public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/menus.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/menus.jd index b77f3bf497da..bafbc65e7167 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/menus.jd @@ -83,9 +83,9 @@ Android 3.0 åŠæ›´é«˜ç‰ˆæœ¬çš„系统ä¸ï¼Œ<a href="{@docRoot}guide/topics/ui/act </p> <p>请å‚阅<a href="#options-menu">创建选项èœå•</a>部分。</p> </dd> - + <dt><strong>上下文èœå•和上下文æ“作模å¼</strong></dt> - + <dd>上下文èœå•是用户长按æŸä¸€å…ƒç´ 时出现的<a href="#FloatingContextMenu">浮动èœå•</a>。 它æä¾›çš„æ“ä½œå°†å½±å“æ‰€é€‰å†…容或上下文框架。 @@ -94,7 +94,7 @@ Android 3.0 åŠæ›´é«˜ç‰ˆæœ¬çš„系统ä¸ï¼Œ<a href="{@docRoot}guide/topics/ui/act </p> <p>请å‚阅<a href="#context-menu">创建上下文èœå•</a>部分。</p> </dd> - + <dt><strong>弹出èœå•</strong></dt> <dd>弹出èœå•å°†ä»¥åž‚ç›´åˆ—è¡¨å½¢å¼æ˜¾ç¤ºä¸€ç³»åˆ—项目,这些项目将锚定到调用该èœå•的视图ä¸ã€‚ 它特别适用于æä¾›ä¸Žç‰¹å®šå†…å®¹ç›¸å…³çš„å¤§é‡æ“作,或者为命令的å¦ä¸€éƒ¨åˆ†æä¾›é€‰é¡¹ã€‚ @@ -135,7 +135,7 @@ XML <a href="{@docRoot}guide/topics/resources/menu-resource.html">èœå•资æº</ <dt><code><item></code></dt> <dd>创建 {@link android.view.MenuItem},æ¤å…ƒç´ 表示èœå•ä¸çš„一项,å¯èƒ½åŒ…å«åµŒå¥—çš„ <code><menu></code> å…ƒç´ ï¼Œä»¥ä¾¿åˆ›å»ºåèœå•。</dd> - + <dt><code><group></code></dt> <dd>{@code <item>} å…ƒç´ çš„ä¸å¯è§å®¹å™¨ï¼ˆå¯é€‰ï¼‰ã€‚å®ƒæ”¯æŒæ‚¨å¯¹èœå•项进行分类,使其共享活动状æ€å’Œå¯è§æ€§ç‰å±žæ€§ã€‚ 如需了解详细信æ¯ï¼Œè¯·å‚阅<a href="#groups">创建èœå•组</a>部分。 @@ -742,8 +742,8 @@ android.view.Menu} 对象ä¸ã€‚在 API 级别 14 åŠæ›´é«˜ç‰ˆæœ¬ä¸ï¼Œæ‚¨å¯ä»¥æ <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/notifiers/notifications.jd index c0bd74cdd3ac..890831841457 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/notifiers/notifications.jd @@ -321,7 +321,7 @@ Android 4.1 åŠæ›´é«˜ç‰ˆæœ¬çš„系统ä¸å¯ç”¨ã€‚ </p> <p class="note"> - <strong>注:</strong>æ¤ + <strong>注:</strong>æ¤ Gmail 功能需è¦â€œæ”¶ä»¶ç®±â€æ‰©å±•布局,该布局是自 Android 4.1 版本起å¯ç”¨çš„æ‰©å±•通知功能的一部分。 </p> <p> @@ -409,7 +409,7 @@ numMessages = 0; 您è¦å¯åŠ¨çš„ {@link android.app.Activity} 是应用的æ£å¸¸å·¥ä½œæµçš„ä¸€éƒ¨åˆ†ã€‚åœ¨è¿™ç§æƒ…况下,请设置 {@link android.app.PendingIntent} 以å¯åŠ¨å…¨æ–°ä»»åŠ¡å¹¶ä¸º -{@link android.app.PendingIntent}æä¾›è¿”å›žæ ˆï¼Œè¿™å°†é‡çŽ°åº”ç”¨çš„æ£å¸¸â€œè¿”回â€è¡Œä¸ºã€‚ <i> </i> +{@link android.app.PendingIntent}æä¾›è¿”å›žæ ˆï¼Œè¿™å°†é‡çŽ°åº”ç”¨çš„æ£å¸¸â€œè¿”回â€è¡Œä¸ºã€‚ <i> </i> <p> Gmail 应用ä¸çš„通知演示了这一点。点击一å°ç”µå邮件消æ¯çš„通知时,您将看到消æ¯å…·ä½“内容。 触摸<b>返回</b>将使您从 @@ -533,7 +533,7 @@ Gmail 䏿’°å†™æ¶ˆæ¯æ—¶ç‚¹å‡»äº†ä¸€å°ç”µå邮件的通知,则会立å³è½¬åˆ TaskStackBuilder.editIntentAt()} å‘å †æ ˆä¸çš„ {@link android.content.Intent} å¯¹è±¡æ·»åŠ å‚æ•°ã€‚有时,需è¦ç¡®ä¿ç›®æ ‡ {@link android.app.Activity} 在用户使用“返回â€å¯¼èˆªå›žå®ƒæ—¶ä¼šæ˜¾ç¤ºæœ‰æ„义的数æ®ã€‚ - <i> </i> + <i> </i> </li> <li> 通过调用 diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/overview.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/overview.jd index 5097c76e4027..78f4734fde59 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ UI <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ UI <p>有关创建 UI 布局的完整指å—,请å‚阅 <a href="declaring-layout.html">XML 布局</a>。 - + <h2 id="UIComponents">用户界é¢ç»„ä»¶</h2> <p>æ‚¨æ— éœ€ä½¿ç”¨ {@link android.view.View} å’Œ {@link diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/settings.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/settings.jd index f9be97be8c2e..71b185da2ba2 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/settings.jd @@ -226,7 +226,7 @@ android.preference.ListPreference}。这两项å‡åŒ…括以下三个属性:</p> <dt>{@code android:key}</dt> <dd>对于è¦ä¿ç•™æ•°æ®å€¼çš„首选项,必须拥有æ¤å±žæ€§ã€‚它指定系统在将æ¤è®¾ç½®çš„值ä¿å˜åœ¨ {@link -android.content.SharedPreferences} 䏿—¶æ‰€ç”¨çš„唯一键(å—符串)。 +android.content.SharedPreferences} 䏿—¶æ‰€ç”¨çš„唯一键(å—符串)。 <p>ä¸éœ€è¦æ¤å±žæ€§çš„仅有情形是:首选项是 {@link android.preference.PreferenceCategory} 或{@link android.preference.PreferenceScreen},或者首选项指定è¦è°ƒç”¨çš„ {@link android.content.Intent}(使用 <a href="#Intents">{@code <intent>}</a> å…ƒç´ ï¼‰æˆ–è¦æ˜¾ç¤ºçš„ {@link android.app.Fragment}(使用 <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code @@ -285,7 +285,7 @@ android.preference.PreferenceCategory} 内。</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory} 内。</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -588,11 +588,11 @@ XML æ ‡å¤´æ–‡ä»¶å®šä¹‰ã€‚ <br/><b>2.</b>æ¯ç»„设置å‡ç”± <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -672,15 +672,15 @@ android.preference.Preference <Preference>} å…ƒç´ å‡ä¼šå‘ {@link android </p> <p>例如,下é¢å°±æ˜¯ä¸€ä¸ªç”¨äºŽ Android 3.0 -åŠæ›´é«˜ç‰ˆæœ¬ç³»ç»Ÿçš„é¦–é€‰é¡¹æ ‡å¤´ XML 文件 ({@code res/xml/preference_headers.xml}):</p> +åŠæ›´é«˜ç‰ˆæœ¬ç³»ç»Ÿçš„é¦–é€‰é¡¹æ ‡å¤´ XML 文件 ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ Android 3.0 版本的系统æä¾›ç›¸åŒæ ‡å¤´çš„首选项文件 ({@code res/xml/ <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -920,7 +920,7 @@ android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} æ·»åŠ Intent è¿‡æ»¤å™¨ã€‚ä¾ </activity> </pre> -<p>æ¤ Intent +<p>æ¤ Intent è¿‡æ»¤å™¨æŒ‡ç¤ºç³»ç»Ÿæ¤ Activity 控制应用的数æ®ä½¿ç”¨æƒ…å†µã€‚å› æ¤ï¼Œå½“用户从系统的“设置â€åº”用检查应用所使用的数æ®é‡æ—¶ï¼Œå¯ä»¥ä½¿ç”¨â€œæŸ¥çœ‹åº”ç”¨è®¾ç½®â€æŒ‰é’®å¯åЍ {@link android.preference.PreferenceActivity}ï¼Œè¿™æ ·ï¼Œç”¨æˆ·å°±èƒ½å¤Ÿä¼˜åŒ–åº”ç”¨ä½¿ç”¨çš„æ•°æ®é‡ã€‚ @@ -975,11 +975,11 @@ android.preference.DialogPreference} public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/ui-events.jd index f9e976302d34..faa294d0e6b4 100644 --- a/docs/html-intl/intl/zh-cn/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/ui-events.jd @@ -181,14 +181,14 @@ dispatchKeyEvent()}</code> 方法的分派过程。除了通过视图æ•èŽ·æŒ‰é” </p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code>ï¼šæ¤æ–¹æ³•å…许 {@link + Activity.dispatchTouchEvent(MotionEvent)}</code>ï¼šæ¤æ–¹æ³•å…许 {@link android.app.Activity} 在分派给窗å£ä¹‹å‰æˆªèŽ·æ‰€æœ‰è§¦æ‘¸äº‹ä»¶ã€‚</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code>ï¼šæ¤æ–¹æ³•å…许 {@link android.view.ViewGroup} 监视分派给å视图的事件。</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code>: -å¯¹çˆ¶è§†å›¾è°ƒç”¨æ¤æ–¹æ³•表明ä¸åº”使用 <code>{@link +å¯¹çˆ¶è§†å›¾è°ƒç”¨æ¤æ–¹æ³•表明ä¸åº”使用 <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code> 截获触摸事件。</li> </ul> @@ -199,7 +199,7 @@ dispatchKeyEvent()}</code> 方法的分派过程。除了通过视图æ•èŽ·æŒ‰é” ä½†æ˜¯ï¼Œå¦‚æžœè®¾å¤‡å…·æœ‰è§¦æ‘¸åŠŸèƒ½ä¸”ç”¨æˆ·å¼€å§‹é€šè¿‡è§¦æ‘¸ç•Œé¢ä¸Žä¹‹äº¤äº’,则ä¸å†éœ€è¦çªå‡ºæ˜¾ç¤ºé¡¹ç›®æˆ–èšç„¦åˆ°ç‰¹å®šè§†å›¾å¯¹è±¡ä¸Šã€‚ å› æ¤ï¼Œæœ‰ä¸€ç§äº¤äº’模å¼ç§°ä¸ºâ€œè§¦æ‘¸æ¨¡å¼â€ã€‚ - + </p> <p> 对于支æŒè§¦æ‘¸åŠŸèƒ½çš„è®¾å¤‡ï¼Œå½“ç”¨æˆ·è§¦æ‘¸å±å¹•时,设备会立å³è¿›å…¥è§¦æ‘¸æ¨¡å¼ã€‚ @@ -282,7 +282,7 @@ ID。<em></em>例如:</p> the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/zh-cn/preview/api-overview.jd b/docs/html-intl/intl/zh-cn/preview/api-overview.jd index 495692ac2d85..f4f889d18021 100644 --- a/docs/html-intl/intl/zh-cn/preview/api-overview.jd +++ b/docs/html-intl/intl/zh-cn/preview/api-overview.jd @@ -762,7 +762,7 @@ Android 扩展包</a></a> (AEP) 的所有扩展(<code>EXT_texture_sRGB_decode< <p> 虽然我们建议您对您的应用采用 APK Signature Scheme v2,但这项新方案并éžå¼ºåˆ¶æ€§çš„。 如果您的应用在使用 APK Signature Scheme v2 æ—¶ä¸èƒ½æ£ç¡®æž„建,您å¯ä»¥åœç”¨è¿™é¡¹æ–°æ–¹æ¡ˆã€‚ -ç¦ç”¨è¿‡ç¨‹ä¼šå¯¼è‡´ Android Studio 2.2 å’Œ Android Gradle 2.2 æ’ä»¶ä»…ä½¿ç”¨ä¼ ç»Ÿç¾å方案æ¥ç¾ç½²æ‚¨çš„应用。 +ç¦ç”¨è¿‡ç¨‹ä¼šå¯¼è‡´ Android Studio 2.2 å’Œ Android Gradle 2.2 æ’ä»¶ä»…ä½¿ç”¨ä¼ ç»Ÿç¾å方案æ¥ç¾ç½²æ‚¨çš„应用。 è‹¥è¦ä»…ç”¨ä¼ ç»Ÿæ–¹æ¡ˆç¾ç½²ï¼Œæ‰“开多层 <code>build.gradle</code> 文件,然åŽå°†è¡Œ <code>v2SigningEnabled false</code> æ·»åŠ åˆ°æ‚¨çš„ç‰ˆæœ¬ç¾åé…ç½®ä¸ï¼š @@ -970,7 +970,7 @@ API æä¾›äº†ä¸€ä¸ªåŒ…å«è®¡æ—¶æ•°æ®çš„ {@code FrameMetrics} 对象,其渲染 <em></em>虚拟文件功能å¯ä»¥è®©æ‚¨çš„ {@link android.provider.DocumentsProvider} 返回å¯ä¸Ž {@link android.content.Intent#ACTION_VIEW}Intent 使用的文件 URI,å³ä½¿å®ƒä»¬æ²¡æœ‰ç›´æŽ¥å—节ç 表示。 -Android N 还å…许您为用户文件(虚拟或其他类)æä¾›å¤‡ç”¨æ ¼å¼ã€‚ +Android N 还å…许您为用户文件(虚拟或其他类)æä¾›å¤‡ç”¨æ ¼å¼ã€‚ </p> diff --git a/docs/html-intl/intl/zh-cn/preview/download-ota.jd b/docs/html-intl/intl/zh-cn/preview/download-ota.jd index ab1408f38753..5d17abcc1efa 100644 --- a/docs/html-intl/intl/zh-cn/preview/download-ota.jd +++ b/docs/html-intl/intl/zh-cn/preview/download-ota.jd @@ -202,65 +202,73 @@ page.title=应用设备 OTA æ˜ åƒ <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-ota-npd35k-b8cfbd80.zip</a><br> - MD5:15fe2eba9b01737374196bdf0a792fe9<br> - SHA-1:5014b2bba77f9e1a680ac3f90729621c85a14283 + <td><a href="#top" onclick="onDownload(this)" + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-ota-npd35k-078e6fa5.zip</a><br> - MD5: e8b12f7721c53af9a450f7058928a5fc<br> - SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a + <td><a href="#top" onclick="onDownload(this)" + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-ota-npd35k-88457699.zip</a><br> - MD5:3fac09fef759dde26e57cb80b20b6477<br> - SHA-1:27d6caa786577d8a38b2da5bf94b33b4524a1a1c + <td><a href="#top" onclick="onDownload(this)" + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-ota-npd35k-51dbae76.zip</a><br> - MD5:58312c4a5971818ef5c77a3f446003da<br> - SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921 + <td><a href="#top" onclick="onDownload(this)" + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-ota-npd35k-834f047f.zip</a><br> - MD5:92b7d1fa252f7394e70f957c72d4aac8<br> - SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-ota-npd35k-6ac91298.zip</a><br> - MD5:1461622ad53ea842b2722fa7b49b8172<br> - SHA-1:409c061668ab270774877d7f3eae44fa48d2b931 + <td><a href="#top" onclick="onDownload(this)" + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-ota-npd35k-a0b2347f.zip</a><br> - MD5: c60117f3640cc6db12386fd632289c7d<br> - SHA-1:87349c767c69efb4172c90ce1d88cf578c3d28b3 + <td><a href="#top" onclick="onDownload(this)" + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-ota-npd35k-09897a1d.zip</a><br> - MD5: a55cf94f7cce0393ec6c0b35041766b7<br> - SHA-1:6f33742290eb46f2561891f38ca2e754b4e50c6a + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html-intl/intl/zh-cn/preview/download.jd b/docs/html-intl/intl/zh-cn/preview/download.jd index 0aa115fbf35f..2d3b88373282 100644 --- a/docs/html-intl/intl/zh-cn/preview/download.jd +++ b/docs/html-intl/intl/zh-cn/preview/download.jd @@ -300,72 +300,73 @@ page.image=images/cards/card-n-downloads_2x.png <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npd35k-factory-5ba40535.tgz</a><br> - MD5: b6c5d79a21815ee21db41822dcf61e9f<br> - SHA-1:5ba4053577007d15c96472206e3a79bc80ab194c + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npd35k-factory-a33bf20c.tgz</a><br> - MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br> - SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npd35k-factory-81c341d5.tgz</a><br> - MD5: e93de7949433339856124c3729c15ebb<br> - SHA-1:81c341d57ef2cd139569b055d5d59e9e592a7abd + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npd35k-factory-2b50e19d.tgz</a><br> - MD5:565be87ebb2d5937e2abe1a42645864b<br> - SHA-1:2b50e19dae2667b27f911e3c61ed64860caf43e1 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npd35k-factory-2e89ebe6.tgz</a><br> - MD5: a8464e15c6683fe2afa378a63e205fda<br> - SHA-1:2e89ebe67a46b2f3beb050746c13341cd11fa678 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npd35k-factory-1de74874.tgz</a><br> - MD5: c0dbb7db671f61b2785da5001cedefcb<br> - SHA-1:1de74874f8d83e14d642f13b5a2130fc2aa55873 + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npd35k-factory-b4eed85d.tgz</a><br> - MD5: bdcb6f770e753668b5fadff2a6678e0d<br> - SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npd35k-factory-5ab1212b.tgz</a><br> - MD5:7d34a9774fdd6e025d485ce6cfc23c4c<br> - SHA-1:5ab1212bc9417269d391aacf1e672fff24b4ecc5 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 å’Œ D6653)</td> - <td>下载:<a class="external-link" href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - 如需了解详细信æ¯ï¼Œè¯·å‚阅<a class="external-link" href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">为 Xperia Z3 å°è¯• Android N Developer Preview</a>。 + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html-intl/intl/zh-cn/preview/features/afw.jd b/docs/html-intl/intl/zh-cn/preview/features/afw.jd index 04e680224fbe..0d4c56268e79 100644 --- a/docs/html-intl/intl/zh-cn/preview/features/afw.jd +++ b/docs/html-intl/intl/zh-cn/preview/features/afw.jd @@ -127,7 +127,7 @@ page.keywords="android for work", "android N", "enterprise", "QR code" android.app.admin.DevicePolicyManager#setPasswordMinimumLength setPasswordMinimumLength()}。 -个人资料所有者还能通过使用由新的 <code>DevicePolicyManager.getParentProfileInstance()</code> 方法返回的 {@link android.app.admin.DevicePolicyManager} 实例æ¥è®¾ç½®è®¾å¤‡é”定, +个人资料所有者还能通过使用由新的 <code>DevicePolicyManager.getParentProfileInstance()</code> 方法返回的 {@link android.app.admin.DevicePolicyManager} 实例æ¥è®¾ç½®è®¾å¤‡é”定, æ¤å¤–,个人资料所有者å¯ä»¥ä½¿ç”¨ {@link android.app.admin.DevicePolicyManager} 类的新 <code>setOrganizationColor()</code> å’Œ <code>setOrganizationName()</code> 方法æ¥è‡ªå®šä¹‰å·¥ä½œæŒ‘æˆ˜çš„å‡æ®å±å¹•。 @@ -286,7 +286,7 @@ page.keywords="android for work", "android N", "enterprise", "QR code" <ul> <li> - æ–°ç±» <code>android.app.admin.SecurityLog</code> 和它的方法 + æ–°ç±» <code>android.app.admin.SecurityLog</code> 和它的方法 </li> @@ -539,7 +539,7 @@ Location Settings ä¸çš„一个å•独的ä½ç½®è®¿é—®å¼€å…³å…许用户拒ç»å¯¹å· <h2 id="lock-user-icon">é”å®šç”¨æˆ·å›¾æ ‡</h2> <p> - 新的用户é™åˆ¶ (<code>DISALLOW_SET_USER_ICON</code>) 阻æ¢ç”¨æˆ·æ›´æ”¹å…¶ç”¨æˆ·å›¾æ ‡ã€‚ + 新的用户é™åˆ¶ (<code>DISALLOW_SET_USER_ICON</code>) 阻æ¢ç”¨æˆ·æ›´æ”¹å…¶ç”¨æˆ·å›¾æ ‡ã€‚ 用户的设备所有者或个人资料所有者ä»å¯ä»¥æ›´æ”¹å›¾æ ‡ã€‚ 但是个人资料所有者åªèƒ½æ›´æ”¹å…¶æŽ§åˆ¶çš„ä¸ªäººèµ„æ–™çš„ç”¨æˆ·å›¾æ ‡ã€‚ diff --git a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd index 5392329e2a77..4ce58aa0e933 100644 --- a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd @@ -61,7 +61,7 @@ page.image=images/cards/card-nyc_2x.jpg <ul> <li>é¢å‘ Preview 的应用ä¸ä¼šæ”¶åˆ° {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广æ’,å³ä½¿å®ƒä»¬åœ¨æ¸…å•䏿³¨å†ŒæŽ¥æ”¶è¿™äº›å¹¿æ’。 -è¿è¡Œçš„应用如果使用 {@link android.content.Context#registerReceiver Context.registerReceiver()} 注册 +è¿è¡Œçš„应用如果使用 {@link android.content.Context#registerReceiver Context.registerReceiver()} 注册 {@link android.content.BroadcastReceiver},则ä»å¯åœ¨ä¸»çº¿ç¨‹ä¸Šä¾¦å¬ {@code CONNECTIVITY_CHANGE}。 diff --git a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd index ca20c44b379c..e029a035ca06 100644 --- a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd +++ b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd @@ -739,7 +739,7 @@ CA è¯ä¹¦çš„æ¥æºï¼Œå¯ä»¥æ˜¯ </dt> <dd> - ç”¨äºŽç”Ÿæˆ PKP 的摘è¦ç®—法。目å‰ä»…æ”¯æŒ + ç”¨äºŽç”Ÿæˆ PKP 的摘è¦ç®—法。目å‰ä»…æ”¯æŒ {@code "SHA-256"}。 </dd> </dl> diff --git a/docs/html-intl/intl/zh-cn/preview/overview.jd b/docs/html-intl/intl/zh-cn/preview/overview.jd index 06a905ff2235..8bbd120f9393 100644 --- a/docs/html-intl/intl/zh-cn/preview/overview.jd +++ b/docs/html-intl/intl/zh-cn/preview/overview.jd @@ -117,7 +117,7 @@ page.tags="preview", "developer", "android" <p> 使用 <a href="{@docRoot}preview/bug">Issue Tracker</a> 呿ˆ‘们报告问题并æä¾›å馈。 -与 +与 <a href="{@docRoot}preview/dev-community">N å¼€å‘者社区</a>ä¸çš„å…¶ä»–å¼€å‘者建立è”系。 </p> @@ -381,7 +381,7 @@ page.tags="preview", "developer", "android" </p> <p> - Android N Developer Preview æä¾›<strong>预览版 API</strong> 功能 + Android N Developer Preview æä¾›<strong>预览版 API</strong> 功能 — 在最终的 SDK å‘布之å‰ï¼Œè¿™äº› API éƒ½ä¸æ˜¯æ£å¼çš„ API。目å‰ï¼Œæœ€ç»ˆçš„ SDK 计划于 2016 年第三å£åº¦å‘布。 è¿™æ„味ç€ä¸€æ®µæ—¶æœŸå†…,特别是该计划的最åˆå‡ 周内, <strong>API å¯èƒ½ä¼šå‡ºçŽ°ç»†å¾®å˜åŒ–</strong>。 diff --git a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd index 872ad7c9e14e..c629cd9c4ecc 100644 --- a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd +++ b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd @@ -55,7 +55,7 @@ page.image=images/cards/card-n-sdk_2x.png </p> <ol> - <li>点击 <strong>Tools >Android > + <li>点击 <strong>Tools >Android > SDK Manager</strong> æ¥æ‰“å¼€ SDK 管ç†å™¨ã€‚</li> <li>在 <strong>SDK Platforms</strong> 选项å¡ä¸é€‰ä¸ <strong>Android N Preview</strong> å¤é€‰æ¡†ã€‚ @@ -92,7 +92,7 @@ SDK Manager</strong> æ¥æ‰“å¼€ SDK 管ç†å™¨ã€‚</li> <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td> <td width="100%"> MD5:19bcfd057a1f9dd01ffbb3d8ff7b8d81<br> - SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7 + SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7 </td> </tr> <table> diff --git a/docs/html-intl/intl/zh-cn/preview/support.jd b/docs/html-intl/intl/zh-cn/preview/support.jd index 9efb5b22c83c..353a71ddd513 100644 --- a/docs/html-intl/intl/zh-cn/preview/support.jd +++ b/docs/html-intl/intl/zh-cn/preview/support.jd @@ -223,7 +223,7 @@ WebView 团队æ£åœ¨å¯»æ±‚关于 N ä¸çš„兼容性和è¿è¡Œæ—¶æ€§èƒ½çš„å馈, <dd> 系统现在使用 Activity çš„å…ƒæ•°æ®æ¥å†³å®šå›¾å—模å¼ã€‚ (之å‰å¹³é“ºæ¨¡å¼æ˜¯ç”± <code>TileService.onTileAdded()</code> 的返回值决定。) -如需了解详细信æ¯ï¼Œè¯·å‚阅å¯ä¸‹è½½çš„ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API å‚考</a> ä¸çš„ +如需了解详细信æ¯ï¼Œè¯·å‚阅å¯ä¸‹è½½çš„ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API å‚考</a> ä¸çš„ <code>TileService.META_DATA_ACTIVE_TILE</code>。 </dd> </dl> @@ -334,7 +334,7 @@ WebView 团队æ£åœ¨å¯»æ±‚关于 N ä¸çš„兼容性和è¿è¡Œæ—¶æ€§èƒ½çš„å馈, </h4> <ul> - <li>在将一个è¿è¡Œ Android 6.0 或更早版本的设备更新到 N Developer Preview 时,Google 键盘ä¸ä¼šä¿ç•™é¦–选项数æ®ï¼Œå¦‚最近的表情符å·å’Œå£°éŸ³è®¾ç½®ã€‚ + <li>在将一个è¿è¡Œ Android 6.0 或更早版本的设备更新到 N Developer Preview 时,Google 键盘ä¸ä¼šä¿ç•™é¦–选项数æ®ï¼Œå¦‚最近的表情符å·å’Œå£°éŸ³è®¾ç½®ã€‚ </li> diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd index dad22089fc92..e401aae783d4 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd @@ -55,7 +55,7 @@ android.app.Activity} 实例接收的é‡è¦ç”Ÿå‘½å‘¨æœŸå›žè°ƒæ–¹æ³•ä»¥åŠæ‚¨å¦‚ä </p> <h2>课程</h2> - + <dl> <dt><b><a href="starting.html">开始Activity</a></b></dt> <dd>å¦ä¹ 有关Activity生命周期ã€ç”¨æˆ·å¦‚何å¯åŠ¨æ‚¨çš„åº”ç”¨ä»¥åŠå¦‚何执行基本Activity创建æ“作的基础知识。 @@ -68,5 +68,5 @@ android.app.Activity} 实例接收的é‡è¦ç”Ÿå‘½å‘¨æœŸå›žè°ƒæ–¹æ³•ä»¥åŠæ‚¨å¦‚ä <dt><b><a href="recreating.html">釿–°åˆ›å»ºActivity</a></b></dt> <dd>å¦ä¹ 您的Activityè¢«é”€æ¯æ—¶çš„æƒ…å†µä»¥åŠæ‚¨å¦‚ä½•èƒ½å¤Ÿæ ¹æ®éœ€è¦é‡æ–°æž„建Activity。 </dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd index ef5b0d57a4ec..c73a9e83708d 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>æœ¬è¯¾ç¨‹å°†å‘æ‚¨å±•示如何</h2> <ol> <li><a href="#Pause">æš‚åœActivity</a></li> <li><a href="#Resume">ç»§ç»Activity</a></li> </ol> - + <h2>您还应阅读</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activity</a> @@ -59,7 +59,7 @@ android.app.Activity#onPause()} 的调用时,å¯èƒ½æ„味ç€Activityå°†æš‚åœ <h2 id="Pause">æš‚åœActivity</h2> - + <p>当系统为您的Activity调用 {@link android.app.Activity#onPause()} 时,它从技术角度看æ„å‘³ç€æ‚¨çš„Activityä»ç„¶å¤„于部分å¯è§çжæ€ï¼Œä½†å¾€å¾€è¯´æ˜Žç”¨æˆ·å³å°†ç¦»å¼€Activity并且它很快就è¦è¿›å…¥â€œåœæ¢â€çжæ€ã€‚ 您通常应使用 diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd index a7971d80a53e..76afe17f1d57 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>æœ¬è¯¾ç¨‹å°†å‘æ‚¨å±•示如何</h2> <ol> <li><a href="#SaveState">ä¿å˜Activity状æ€</a></li> <li><a href="#RestoreState">æ¢å¤Activity状æ€</a></li> </ol> - + <h2>您还应阅读</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">支æŒä¸åŒå±å¹•</a> @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()} 䏿¢å¤ä¸€äº›çŠ¶æ€æ•°æ®ï¼š</p> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} ï¼Œè€Œä¸æ 系统åªåœ¨å˜åœ¨è¦æ¢å¤çš„å·²ä¿å˜çŠ¶æ€æ—¶è°ƒç”¨ {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} ï¼Œå› æ¤æ‚¨æ— 需检查 {@link android.os.Bundle} 是å¦ä¸º null:</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd index cebd7484d179..04f380d7d0db 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>æœ¬è¯¾ç¨‹å°†å‘æ‚¨å±•示如何</h2> <ol> <li><a href="#lifecycle-states">了解生命周期回调</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">创建一个新实例</a></li> <li><a href="#Destroy">销æ¯Activity</a></li> </ol> - + <h2>您还应阅读</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activity</a></li> @@ -83,7 +83,7 @@ Activity还å¯ä»¥ä»Žâ€œæš‚åœâ€å’Œâ€œåœæ¢â€çжæ€å›žåˆ°ç»§ç»çжæ€ã€‚ </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -128,7 +128,7 @@ methods.</p> </dl> <p>其他状æ€ï¼ˆâ€œåˆ›å»ºâ€å’Œâ€œå¼€å§‹â€ï¼‰æ˜¯çž¬æ€ï¼Œç³»ç»Ÿä¼šé€šè¿‡è°ƒç”¨ä¸‹ä¸€ä¸ªç”Ÿå‘½å‘¨æœŸå›žè°ƒæ–¹æ³•从这些状æ€å¿«é€Ÿç§»åˆ°ä¸‹ä¸€ä¸ªçжæ€ã€‚ -也就是说,在系统调用 +也就是说,在系统调用 {@link android.app.Activity#onCreate onCreate()} 之åŽï¼Œå®ƒä¼šå¿«é€Ÿè°ƒç”¨ {@link android.app.Activity#onStart()},紧接ç€å¿«é€Ÿè°ƒç”¨ {@link android.app.Activity#onResume()}。</p> @@ -138,7 +138,7 @@ android.app.Activity#onResume()}。</p> -<h2 id="launching-activity">指定您的应用的å¯åЍ噍Activity</h2> +<h2 id="launching-activity">指定您的应用的å¯åЍ噍Activity</h2> <p>当用户从主å±å¹•é€‰æ‹©æ‚¨çš„åº”ç”¨å›¾æ ‡æ—¶ï¼Œç³»ç»Ÿä¼šä¸ºæ‚¨å·²å£°æ˜Žä¸ºâ€œå¯åЍ噍â€ï¼ˆ 或“主è¦â€ï¼‰Activity的应用ä¸çš„ {@link android.app.Activity} 调用 {@link android.app.Activity#onCreate onCreate()} 方法。 @@ -151,7 +151,7 @@ android.app.Activity#onCreate onCreate()} 方法。 <p>您的应用的主Activity必须使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>(包括 {@link android.content.Intent#ACTION_MAIN MAIN} æ“作和 -{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别)在宣示说明ä¸å£°æ˜Žã€‚例如:</p> +{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别)在宣示说明ä¸å£°æ˜Žã€‚例如:</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -214,7 +214,7 @@ public void onCreate(Bundle savedInstanceState) { } </pre> -<p class="caution"><strong>注æ„:</strong>使用 {@link android.os.Build.VERSION#SDK_INT} +<p class="caution"><strong>注æ„:</strong>使用 {@link android.os.Build.VERSION#SDK_INT} å¯é˜²æ¢æ—§ç‰ˆç³»ç»Ÿä»¥è¿™ç§æ–¹å¼ä»…在 Android 2.0 (API 级别5)和更高级别执行新 API 工作。 较旧版本会é‡åˆ°è¿è¡Œæ—¶å¼‚常。</p> @@ -268,7 +268,7 @@ android.app.Activity#onDestroy} 期间终æ¢å®ƒä»¬ã€‚ @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd index 630817cbd85b..dd6d4a649d59 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>æœ¬è¯¾ç¨‹å°†å‘æ‚¨å±•示如何</h2> <ol> <li><a href="#Stop">åœæ¢Activity</a></li> <li><a href="#Start">开始/釿–°å¼€å§‹Activity</a></li> </ol> - + <h2>您还应阅读</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activity</a> @@ -152,13 +152,13 @@ android.app.Activity#onStart()} 。 @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd index a6c919350121..78fa2f393207 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd @@ -201,7 +201,7 @@ newRowId = db.insert( </pre> <p>{@link android.database.sqlite.SQLiteDatabase#insert insert()} -çš„ç¬¬ä¸€ä¸ªå‚æ•°å³ä¸ºè¡¨æ ¼åç§°ã€‚ç¬¬äºŒä¸ªå‚æ•°æŒ‡å®šåœ¨ +çš„ç¬¬ä¸€ä¸ªå‚æ•°å³ä¸ºè¡¨æ ¼åç§°ã€‚ç¬¬äºŒä¸ªå‚æ•°æŒ‡å®šåœ¨ {@link android.content.ContentValues} 为空的情况下框架å¯åœ¨å…¶ä¸æ’å…¥ NULL 的列的å称(如果您将其设置为 {@code "null"}, 那么框架将ä¸ä¼šåœ¨æ²¡æœ‰å€¼æ—¶æ’入行。) </p> diff --git a/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd b/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd index 51a4e278e5bc..1ef1662753fd 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd @@ -4,7 +4,7 @@ page.type=åŸ¹è® @jd:body <div id="tb-wrapper"> - <div id="tb"> + <div id="tb"> <h2>本课程所教授的内容:</h2> <ol> <li><a href="#AddAtRuntime">在è¿è¡Œæ—¶å‘ Activity æ·»åŠ Fragment</a></li> @@ -39,7 +39,7 @@ page.type=åŸ¹è® - <h2 id="AddAtRuntime">在è¿è¡Œæ—¶å‘ Activity æ·»åŠ Fragment</h2> + <h2 id="AddAtRuntime">在è¿è¡Œæ—¶å‘ Activity æ·»åŠ Fragment</h2> <p>ä½ å¯ä»¥åœ¨ Activity è¿è¡Œæ—¶å‘å…¶æ·»åŠ Fragment,而ä¸ç”¨åƒ<a href="creating.html">上一课</a>ä¸ä»‹ç»çš„é‚£æ ·ï¼Œä½¿ç”¨ <code><fragment></code> å…ƒç´ åœ¨å¸ƒå±€æ–‡ä»¶ä¸ä¸º Activity 定义 Fragmentã€‚å¦‚æžœä½ æ‰“ç®—åœ¨ Activity è¿è¡Œå‘¨æœŸå†…更改 Fragmentï¼Œå°±å¿…é¡»è¿™æ ·åšã€‚</p> @@ -88,11 +88,11 @@ page.type=åŸ¹è® return; } - // åˆ›å»ºä¸€ä¸ªè¦æ”¾å…¥ Activity 布局ä¸çš„æ–° Fragment + // åˆ›å»ºä¸€ä¸ªè¦æ”¾å…¥ Activity 布局ä¸çš„æ–° Fragment HeadlinesFragment firstFragment = new HeadlinesFragment(); // å¦‚æžœæ¤ Activity 是通过 Intent å‘出的特殊指令æ¥å¯åŠ¨çš„ï¼Œ - // 请将该 Intent çš„ extras 以傿•°å½¢å¼ä¼ 递给该 Fragment + // 请将该 Intent çš„ extras 以傿•°å½¢å¼ä¼ 递给该 Fragment firstFragment.setArguments(getIntent().getExtras()); // 将该 Fragment æ·»åŠ åˆ°â€œfragment_containerâ€FrameLayout ä¸ diff --git a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd index 0e1ccb739168..42b3c89fe07f 100644 --- a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd @@ -7,8 +7,8 @@ next.title=确定和监控基座对接状æ€å’Œç±»åž‹ next.link=docking-monitoring.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>本教程将指导您</h2> @@ -24,9 +24,9 @@ next.link=docking-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">intent å’Œ intent 过滤器</a> </ul> -</div> </div> - +</div> + <p>å¦‚æžœæ‚¨è¦æ›´æ”¹åŽå°æ›´æ–°é¢‘率,从而å‡å°‘æ›´æ–°å¯¹ç”µæ± ä½¿ç”¨æ—¶é—´çš„å½±å“,最好先查看当å‰çš„ç”µæ± ç”µé‡å’Œå……电状æ€ã€‚</p> <p>对应用进行更新会影å“ç”µæ± ä½¿ç”¨æ—¶é—´ï¼Œå…·ä½“å–å†³äºŽè®¾å¤‡çš„ç”µæ± ç”µé‡å’Œå……电状æ€ã€‚如果用户æ£åœ¨é€šè¿‡äº¤æµç”µæºä¸ºè®¾å¤‡å……电,更新应用的影å“å°±å¯ä»¥å¿½ç•¥ä¸è®¡ã€‚å› æ¤ï¼Œåœ¨å¤§å¤šæ•°æƒ…况下,åªè¦è®¾å¤‡è¿žæŽ¥äº†å……电器,您就å¯ä»¥æœ€å¤§ç¨‹åº¦åœ°æé«˜åˆ·æ–°é¢‘率。相åï¼Œå¦‚æžœè®¾å¤‡åœ¨æ¶ˆè€—ç”µæ± ç”µé‡ï¼Œé‚£ä¹ˆé™ä½Žæ›´æ–°é¢‘率就å¯ä»¥å»¶é•¿ç”µæ± 使用时间。</p> @@ -34,8 +34,8 @@ next.link=docking-monitoring.html <p>åŒæ ·ï¼Œæ‚¨ä¹Ÿå¯ä»¥æŸ¥çœ‹ç”µæ± 电é‡ï¼Œå¦‚果电é‡å³å°†è€—尽,您就å¯ä»¥é™ä½Žæ›´æ–°é¢‘çŽ‡ï¼Œç”šè‡³åœæ¢æ›´æ–°ã€‚</p> -<h2 id="DetermineChargeState">确定当å‰çš„充电状æ€</h2> - +<h2 id="DetermineChargeState">确定当å‰çš„充电状æ€</h2> + <p>请先确定当å‰çš„充电状æ€ã€‚{@link android.os.BatteryManager} 会通过一个包å«å……电状æ€çš„æŒç» {@link android.content.Intent} å¹¿æ’æ‰€æœ‰çš„ç”µæ± è¯¦æƒ…å’Œå……ç”µè¯¦æƒ…ã€‚</p> <p>由于这是个æŒç» intentï¼Œå› æ¤æ‚¨æ— éœ€é€šè¿‡å°†ä¼ å…¥ {@code null} çš„ {@code registerReceiver} ä½œä¸ºæŽ¥æ”¶å™¨ç›´æŽ¥è°ƒç”¨ï¼ˆå¦‚ä¸‹ä¸€ä»£ç æ®µæ‰€ç¤ºï¼‰æ¥æ³¨å†Œ {@link android.content.BroadcastReceiver},系统会返回当å‰ç”µæ± çŠ¶æ€ intent。您å¯ä»¥åœ¨æ¤å¤„ä¼ å…¥å®žé™…çš„ {@link android.content.BroadcastReceiver} 对象,ä¸è¿‡æˆ‘们会在下文ä¸ä»‹ç»å¦‚ä½•å¤„ç†æ›´æ–°ï¼Œå› æ¤æ‚¨ä¸ä¸€å®šè¦æ‰§è¡Œæ¤æ“作。</p> @@ -58,7 +58,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <p>通常,如果设备连接了交æµå……电器,您就应最大程度地æé«˜åŽå°æ›´æ–°é¢‘率;如果设备通过 USB 充电,请é™ä½Žæ›´æ–°é¢‘çŽ‡ï¼›å¦‚æžœç”µæ± åœ¨è€—ç”µï¼Œè¯·è¿›ä¸€æ¥é™ä½Žæ›´æ–°é¢‘率。</p> -<h2 id="MonitorChargeState">监控充电状æ€çš„å˜åŒ–</h2> +<h2 id="MonitorChargeState">监控充电状æ€çš„å˜åŒ–</h2> <p>充电状æ€çš„æ”¹å˜å°±åƒè®¾å¤‡è¿žæŽ¥ç”µæºé‚£æ ·å®¹æ˜“ï¼Œå› æ¤ç›‘控充电状æ€çš„å˜åŒ–并相应地调整刷新频率就很é‡è¦äº†ã€‚</p> @@ -75,11 +75,11 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> <pre>public class PowerConnectionReceiver extends BroadcastReceiver { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; - + int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; @@ -87,7 +87,7 @@ boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> }</pre> -<h2 id="CurrentLevel">确定当å‰çš„ç”µæ± ç”µé‡</h2> +<h2 id="CurrentLevel">确定当å‰çš„ç”µæ± ç”µé‡</h2> <p>在æŸäº›æƒ…况下,确定当å‰çš„ç”µæ± ç”µé‡ä¼šå¯¹æ‚¨æœ‰æ‰€å¸®åŠ©ã€‚å¦‚æžœç”µæ± ç”µé‡ä½ŽäºŽä¸€å®šæ°´å¹³ï¼Œæ‚¨å¯ä»¥é™ä½ŽåŽå°æ›´æ–°é¢‘率。</p> @@ -99,7 +99,7 @@ int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> -<h2 id="MonitorLevel">ç›‘æŽ§ç”µæ± ç”µé‡çš„æ˜¾è‘—å˜åŒ–</h2> +<h2 id="MonitorLevel">ç›‘æŽ§ç”µæ± ç”µé‡çš„æ˜¾è‘—å˜åŒ–</h2> <p>æ‚¨æ— æ³•è½»æ¾åœ°å¯¹ç”µæ± 状æ€è¿›è¡ŒæŒç»ç›‘控,ä¸è¿‡ä¹Ÿæ— 需这么åšã€‚</p> diff --git a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd index 8313e089b908..b5f48a9e9a0d 100644 --- a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>本教程将指导您</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">intent å’Œ intent 过滤器</a> </ul> -</div> +</div> </div> <p>é‡å¤æé†’å’ŒåŽå°æœåŠ¡æœ€å¸¸è§çš„用途之一,就是为æ¥è‡ªäº’è”网资æºçš„应用数æ®ã€ç¼“å˜æ•°æ®å®‰æŽ’定期更新或执行长时间è¿è¡Œçš„下载任务。但是,如果您没有连接互è”ç½‘ï¼Œæˆ–å› è¿žæŽ¥è¿‡æ…¢è€Œæ— æ³•å®Œæˆä¸‹è½½ï¼Œé‚£å°±æ ¹æœ¬æ²¡å¿…è¦å”¤é†’设备并安排更新了。</p> @@ -35,18 +35,18 @@ next.link=manifest-receivers.html <p>您å¯ä»¥ä½¿ç”¨ {@link android.net.ConnectivityManager} 查看是å¦ç¡®å®žå·²è¿žæŽ¥äº’è”网,如果已连接,您还å¯ä»¥äº†è§£å½“å‰çš„连接类型。</p> -<h2 id="DetermineConnection">确定是å¦å·²è¿žæŽ¥äº’è”网</h2> - +<h2 id="DetermineConnection">确定是å¦å·²è¿žæŽ¥äº’è”网</h2> + <p>如果设备未连接互è”ç½‘ï¼Œå°±æ²¡æœ‰å¿…è¦æ ¹æ®äº’è”网资æºå®‰æŽ’æ›´æ–°äº†ã€‚ä»¥ä¸‹ä»£ç æ®µè¯´æ˜Žå¦‚何使用 {@link android.net.ConnectivityManager} 查询有效网络并确定该网络是å¦å·²è¿žæŽ¥äº’è”网。</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">确定互è”网连接的类型</h2> +<h2 id="DetermineType">确定互è”网连接的类型</h2> <p>您也å¯ä»¥ç¡®å®šå½“å‰å¯ç”¨çš„互è”网连接的类型。</p> @@ -59,7 +59,7 @@ boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre> <p>åœç”¨æ›´æ–°åŽï¼Œè¯·åŠ¡å¿…ä¾¦å¬è¿žæŽ¥æƒ…况的å˜åŒ–,以便在建立互è”ç½‘è¿žæŽ¥åŽæ¢å¤æ›´æ–°ã€‚</p> -<h2 id="MonitorChanges">监控连接情况的å˜åŒ–</h2> +<h2 id="MonitorChanges">监控连接情况的å˜åŒ–</h2> <p>åªè¦è¿žæŽ¥çš„具体情况å‘生å˜åŒ–,{@link android.net.ConnectivityManager} å°±ä¼šå¹¿æ’ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) æ“作。您å¯ä»¥åœ¨æ¸…å•䏿³¨å†Œå¹¿æ’接收器,以便侦å¬è¿™äº›å˜åŒ–并相应地æ¢å¤ï¼ˆæˆ–æš‚åœï¼‰åŽå°æ›´æ–°ã€‚</p> diff --git a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd index 53b951dd584e..c5ed38e78e8e 100644 --- a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd +++ b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd @@ -10,7 +10,7 @@ next.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>本教程将指导您</h2> @@ -26,7 +26,7 @@ next.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">intent å’Œ intent 过滤器</a> </ul> -</div> +</div> </div> <p>Android 设备支æŒå‡ ç§ä¸åŒç±»åž‹çš„åŸºåº§ã€‚è¿™äº›ç±»åž‹åŒ…æ‹¬è½¦è½½æˆ–å®¶ç”¨åŸºåº§ä»¥åŠæ•°å—和模拟基座。许多基座å¯ç”¨äºŽä¸ºæ’å…¥çš„è®¾å¤‡å……ç”µï¼Œå› æ¤åŸºåº§çжæ€é€šå¸¸ä¸Žå……电状æ€ç´§å¯†ç›¸å…³ã€‚</p> @@ -36,8 +36,8 @@ next.link=connectivity-monitoring.html <p>系统是以æŒç» {@link android.content.Intent} 的形å¼å¹¿æ’基座状æ€çš„ï¼Œè¿™æ ·æ‚¨å°±å¯ä»¥æŸ¥è¯¢è®¾å¤‡æ˜¯å¦æ’入了基座,如果已æ’入,您还å¯ä»¥æŸ¥è¯¢åŸºåº§ç±»åž‹ã€‚</p> -<h2 id="CurrentDockState">确定当å‰çš„基座状æ€</h2> - +<h2 id="CurrentDockState">确定当å‰çš„基座状æ€</h2> + <p>基座状æ€è¯¦æƒ…æ˜¯ä»¥é™„åŠ ä¿¡æ¯çš„å½¢å¼åŒ…å«åœ¨ {@link android.content.Intent#ACTION_DOCK_EVENT} æ“作的æŒç»å¹¿æ’ä¸çš„。由于这属于æŒç»å¹¿æ’ï¼Œå› æ¤æ‚¨æ— 需注册 {@link android.content.BroadcastReceiver}。您å¯ä»¥å°†ä¼ å…¥ {@code null} çš„ {@link android.content.Context#registerReceiver registerReceiver()} ä½œä¸ºå¹¿æ’æŽ¥æ”¶å™¨ç›´æŽ¥è°ƒç”¨ï¼Œå…·ä½“å¦‚ä¸‹ä¸€ä»£ç æ®µæ‰€ç¤ºã€‚</p> <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); @@ -49,9 +49,9 @@ Intent dockStatus = context.registerReceiver(null, ifilter);</pre> boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> -<h2 id="DockType">确定当å‰çš„基座类型</h2> +<h2 id="DockType">确定当å‰çš„基座类型</h2> -<p>用户å¯ä»¥å°†è®¾å¤‡æ’入以下四ç§ç±»åž‹çš„基座: +<p>用户å¯ä»¥å°†è®¾å¤‡æ’入以下四ç§ç±»åž‹çš„基座: <ul><li>车载基座</li> <li>桌é¢åŸºåº§</li> <li>低端(模拟)桌é¢åŸºåº§</li> @@ -60,12 +60,12 @@ boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre> <p>请注æ„,åŽä¸¤ç§ç±»åž‹ä»…适用于 API 级别为 11 åŠä»¥ä¸Šçš„ Androidï¼Œå› æ¤å¦‚果您åªå…³æ³¨åŸºåº§ç±»åž‹ï¼Œè€Œä¸åœ¨æ„基座究竟是数å—的还是模拟的,那么比较åˆé€‚çš„åšæ³•就是查看全部三ç§ç±»åž‹ï¼š</p> <pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; -boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || +boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;</pre> -<h2 id="MonitorDockState">ç›‘æŽ§åŸºåº§çŠ¶æ€æˆ–类型的å˜åŒ–</h2> +<h2 id="MonitorDockState">ç›‘æŽ§åŸºåº§çŠ¶æ€æˆ–类型的å˜åŒ–</h2> <p>æ— è®ºè®¾å¤‡æ˜¯å¦æ’å…¥äº†åŸºåº§ï¼Œç³»ç»Ÿéƒ½ä¼šå¹¿æ’ {@link android.content.Intent#ACTION_DOCK_EVENT} æ“作。è¦ç›‘控设备基座状æ€çš„å˜åŒ–,您åªéœ€åœ¨åº”用清å•䏿³¨å†Œå¹¿æ’接收器å³å¯ï¼Œå…·ä½“å¦‚ä»¥ä¸‹ä»£ç æ®µæ‰€ç¤ºï¼š</p> diff --git a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/index.jd b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/index.jd index 308ad7b8a9f5..2efed8b6c05c 100644 --- a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/index.jd +++ b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/index.jd @@ -7,10 +7,10 @@ next.link=battery-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>ä¾å˜å…³ç³»å’Œå‰ææ¡ä»¶</h2> +<h2>ä¾å˜å…³ç³»å’Œå‰ææ¡ä»¶</h2> <ul> <li>Android 2.0(API 级别 5)或更高版本</li> <li><a href="{@docRoot}guide/components/intents-filters.html">intent å’Œ intent 过滤器</a>的使用ç»éªŒ</li> @@ -21,19 +21,19 @@ next.link=battery-monitoring.html <li><a href="{@docRoot}guide/components/services.html">æœåŠ¡</a> </ul> -</div> +</div> </div> <p>ä¸ºäº†æ‰“é€ ä¸€ä¸ªä¼˜ç§€çš„åº”ç”¨ï¼Œæ‚¨åº”è®¾æ³•é™ä½Žåº”ç”¨å¯¹ç”µæ± ä½¿ç”¨æ—¶é—´çš„å½±å“。阅读完本教程åŽï¼Œæ‚¨å°±å¯ä»¥è®©è‡ªå·±æž„å»ºçš„åº”ç”¨æ ¹æ®å…¶æ‰€åœ¨è®¾å¤‡çš„çŠ¶æ€æ¥ç›‘控和调整自身的功能和行为。</p> <p>è¦ç¡®ä¿åœ¨ä¸å½±å“用户体验的情况下最大程度地é™ä½Žåº”ç”¨å¯¹ç”µæ± ä½¿ç”¨æ—¶é—´çš„å½±å“,您å¯ä»¥é‡‡å–一些措施,例如在网络连接æ–开时åœç”¨åŽå°æœåŠ¡æ›´æ–°ï¼Œæˆ–åœ¨ç”µæ± ç”µé‡è¾ƒä½Žæ—¶é™ä½Žæ¤ç±»æ›´æ–°çš„频率。</p> -<h2>教程</h2> - +<h2>教程</h2> + <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="battery-monitoring.html">ç›‘æŽ§ç”µæ± ç”µé‡å’Œå……电状æ€</a></b></dt> <dd>了解如何通过确定和监控当å‰çš„ç”µæ± ç”µé‡å’Œå……电状æ€çš„å˜åŒ–æ¥ç›¸åº”地调整应用的更新频率。</dd> @@ -46,4 +46,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="manifest-receivers.html">æ ¹æ®éœ€è¦æ“ä½œå¹¿æ’æŽ¥æ”¶å™¨</a></b></dt> <dd>您å¯ä»¥åœ¨è¿è¡Œæ—¶åˆ‡æ¢è‡ªå·±åœ¨æ¸…å•ä¸å£°æ˜Žçš„å¹¿æ’æŽ¥æ”¶å™¨ï¼Œä»¥ä¾¿æ ¹æ®å½“å‰è®¾å¤‡çжæ€åœç”¨ä¸éœ€è¦çš„æŽ¥æ”¶å™¨ã€‚了解如何在设备未处于特定状æ€çš„æƒ…况下切æ¢å’Œå±‚å 状æ€å˜åŒ–接收器和延迟æ“作,以便æé«˜æ•ˆçŽ‡ã€‚</dd> -</dl>
\ No newline at end of file +</dl>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd index 07c014f10a31..ed1b6ceb0354 100644 --- a/docs/html-intl/intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html-intl/intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>本教程将指导您</h2> @@ -23,7 +23,7 @@ previous.link=connectivity-monitoring.html <li><a href="{@docRoot}guide/components/intents-filters.html">intent å’Œ intent 过滤器</a> </ul> -</div> +</div> </div> <p>监控设备状æ€å˜åŒ–çš„æœ€ç®€å•æ–¹æ³•就是,为您监控的æ¯ç§çжæ€åˆ›å»º {@link android.content.BroadcastReceiver} 并在应用清å•ä¸é€ä¸€è¿›è¡Œæ³¨å†Œã€‚ç„¶åŽï¼Œæ‚¨åªéœ€æ ¹æ®å½“å‰è®¾å¤‡çжæ€åœ¨æ¯ä¸ªæŽ¥æ”¶å™¨ä¸é‡æ–°å®‰æŽ’é‡å¤æé†’å³å¯ã€‚</p> @@ -31,10 +31,10 @@ previous.link=connectivity-monitoring.html <p>æ¤æ–¹æ³•的负é¢å½±å“在于,åªè¦ç³»ç»Ÿè§¦å‘了这些接收器ä¸çš„任何一个,相关应用就会唤醒设备,其频率å¯èƒ½ä¼šè¿œè¿œè¶…过所需的水平。</p> <p>更好的方法是在è¿è¡Œæ—¶åœç”¨æˆ–å¯ç”¨å¹¿æ’æŽ¥æ”¶å™¨ã€‚è¿™æ ·çš„è¯ï¼Œæ‚¨å°±å¯ä»¥å°†è‡ªå·±åœ¨æ¸…å•ä¸å£°æ˜Žçš„æŽ¥æ”¶å™¨ç”¨ä½œè¢«åЍæé†’ï¼Œåªæœ‰åœ¨éœ€è¦æ—¶æ‰ä¼šç”±ç³»ç»Ÿäº‹ä»¶è§¦å‘。</p> - -<h2 id="ToggleReceivers">切æ¢å’Œå±‚å 状æ€å˜åŒ–接收器以æé«˜æ•ˆçއ </h2> - + +<h2 id="ToggleReceivers">切æ¢å’Œå±‚å 状æ€å˜åŒ–接收器以æé«˜æ•ˆçއ </h2> + <p>您å¯ä»¥ä½¿ç”¨ {@link android.content.pm.PackageManager} åˆ‡æ¢æ¸…å•ä¸å®šä¹‰çš„ä»»æ„组件的å¯ç”¨çжæ€ï¼ˆåŒ…括您è¦å¯ç”¨æˆ–åœç”¨çš„ä»»æ„å¹¿æ’æŽ¥æ”¶å™¨ï¼‰ï¼Œå…·ä½“å¦‚ä»¥ä¸‹ç‰‡æ®µæ‰€ç¤ºï¼š</p> <pre>ComponentName receiver = new ComponentName(context, myReceiver.class); diff --git a/docs/html-intl/intl/zh-cn/training/multiscreen/adaptui.jd b/docs/html-intl/intl/zh-cn/training/multiscreen/adaptui.jd index 89908fe46ef9..f9e32258f716 100644 --- a/docs/html-intl/intl/zh-cn/training/multiscreen/adaptui.jd +++ b/docs/html-intl/intl/zh-cn/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>本教程将指导您</h2> <ol> @@ -27,17 +27,17 @@ previous.link=screendensities.html <ul> <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">支æŒå¹³æ¿ç”µè„‘和手æŒè®¾å¤‡</a></li> </ul> - + <h2>试试看</h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>æ ¹æ®æ‚¨çš„åº”ç”¨å½“å‰æ˜¾ç¤ºçš„å¸ƒå±€ï¼Œç”¨æˆ·ç•Œé¢æµç¨‹å¯èƒ½ä¼šæœ‰æ‰€ä¸åŒã€‚例如,如果您的应用处于åŒé¢æ¿æ¨¡å¼ä¸‹ï¼Œç‚¹å‡»å·¦ä¾§é¢æ¿ä¸Šçš„项å³å¯ç›´æŽ¥åœ¨å³ä¾§é¢æ¿ä¸Šæ˜¾ç¤ºç›¸å…³å†…容;如果该应用处于å•颿¿æ¨¡å¼ä¸‹ï¼Œç›¸å…³å†…容就应以其他活动的形å¼åœ¨åŒä¸€é¢æ¿ä¸Šæ˜¾ç¤ºã€‚</p> @@ -56,7 +56,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -116,7 +116,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -168,7 +168,7 @@ public class HeadlinesFragment extends ListFragment { public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html-intl/intl/zh-cn/training/multiscreen/index.jd b/docs/html-intl/intl/zh-cn/training/multiscreen/index.jd index 02c687aaaef8..5ac0d8c4ae00 100644 --- a/docs/html-intl/intl/zh-cn/training/multiscreen/index.jd +++ b/docs/html-intl/intl/zh-cn/training/multiscreen/index.jd @@ -7,10 +7,10 @@ next.link=screensizes.html @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>ä¾å˜å…³ç³»å’Œå‰ææ¡ä»¶</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>ä¾å˜å…³ç³»å’Œå‰ææ¡ä»¶</h2> <ul> <li>Android 1.6 æˆ–æ›´é«˜ç‰ˆæœ¬ï¼ˆç¤ºä¾‹åº”ç”¨åˆ™éœ€è¦ 2.1 或更高版本)</li> @@ -27,17 +27,17 @@ href="{@docRoot}tools/support-library/index.html">支æŒåº“</a></li> <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">支æŒå¤šç§å±å¹•</a></li> </ul> - -<h2>试试看</h2> - -<div class="download-box"> + +<h2>试试看</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Android æ”¯æŒæ•°ç™¾ç§å±å¹•尺寸ä¸åŒçš„设备,包括å°åž‹æ‰‹æœºå’Œå¤§åž‹ç”µè§†æœºã€‚å› æ¤ï¼Œè¯·åŠ¡å¿…å°†æ‚¨çš„åº”ç”¨è®¾è®¡ä¸ºä¸Žæ‰€æœ‰çš„å±å¹•尺寸兼容,以便让尽å¯èƒ½å¤šçš„用户使用该应用。</p> <p>ä¸è¿‡ï¼Œä¸Žå„ç§ç±»åž‹çš„设备兼容还远远ä¸å¤Ÿã€‚由于å„ç§å±å¹•尺寸对用户互动产生的利弊有所ä¸åŒï¼Œå› æ¤è¦çœŸæ£æ»¡è¶³ç”¨æˆ·éœ€æ±‚并广获好评,您的应用ä¸ä»…éœ€è¦æ”¯æŒå¤šç§å±å¹•,还应针对å„ç±»å±å¹•é…置的用户体验进行优化。<em></em><em></em></p> @@ -48,17 +48,17 @@ href="{@docRoot}tools/support-library/index.html">支æŒåº“</a></li> <p class="note"><strong>请注æ„</strong>:本教程和相关的示例使用了<a href="{@docRoot}tools/support-library/index.html">支æŒåº“</a>,以便在 3.0 版以下的 Android 上使用 <PH>{@link android.app.Fragment}</PH> APIã€‚å› æ¤ï¼Œæ‚¨éœ€è¦ä¸‹è½½è¯¥åº“å¹¶å°†å…¶æ·»åŠ åˆ°æ‚¨çš„åº”ç”¨ï¼Œæ‰èƒ½ä½¿ç”¨æœ¬æ•™ç¨‹ä¸æ¶‰åŠçš„æ‰€æœ‰ API。</p> - - -<h2>教程</h2> - -<dl> - <dt><b><a href="screensizes.html">支æŒå„ç§å±å¹•尺寸</a></b></dt> - <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何设计å¯é€‚应多ç§å±å¹•å°ºå¯¸çš„å¸ƒå±€ï¼ˆä½¿ç”¨çµæ´»çš„视图尺寸〠<PH>{@link android.widget.RelativeLayout}</PH>ã€å±å¹•尺寸和å±å¹•æ–¹å‘é™å®šç¬¦ã€åˆ«å过滤器以åŠè‡ªåŠ¨æ‹‰ä¼¸ä½å›¾ï¼‰ã€‚</dd> - - <dt><b><a href="screendensities.html">支æŒå„ç§å±å¹•密度</a></b></dt> - <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何支æŒå…·æœ‰ä¸åŒåƒç´ 密度的å±å¹•(使用éžå¯†åº¦åˆ¶çº¦åƒç´ å¹¶æä¾›å„ç§å¯†åº¦çš„相应ä½å›¾ï¼‰ã€‚</dd> - - <dt><b><a href="adaptui.html">å®žæ–½è‡ªé€‚åº”ç”¨æˆ·ç•Œé¢æµç¨‹</a></b></dt> - <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何以å¯é€‚应多ç§å±å¹•尺寸/å±å¹•密度组åˆçš„æ–¹å¼å®žæ–½ç”¨æˆ·ç•Œé¢æµç¨‹ï¼ˆè¿è¡Œæ—¶å¯¹å½“å‰å¸ƒå±€çš„æ£€æµ‹ï¼Œæ ¹æ®å½“å‰å¸ƒå±€åšå‡ºå“应,处ç†å±å¹•é…ç½®å˜åŒ–)。</dd> -</dl> + + +<h2>教程</h2> + +<dl> + <dt><b><a href="screensizes.html">支æŒå„ç§å±å¹•尺寸</a></b></dt> + <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何设计å¯é€‚应多ç§å±å¹•å°ºå¯¸çš„å¸ƒå±€ï¼ˆä½¿ç”¨çµæ´»çš„视图尺寸〠<PH>{@link android.widget.RelativeLayout}</PH>ã€å±å¹•尺寸和å±å¹•æ–¹å‘é™å®šç¬¦ã€åˆ«å过滤器以åŠè‡ªåŠ¨æ‹‰ä¼¸ä½å›¾ï¼‰ã€‚</dd> + + <dt><b><a href="screendensities.html">支æŒå„ç§å±å¹•密度</a></b></dt> + <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何支æŒå…·æœ‰ä¸åŒåƒç´ 密度的å±å¹•(使用éžå¯†åº¦åˆ¶çº¦åƒç´ å¹¶æä¾›å„ç§å¯†åº¦çš„相应ä½å›¾ï¼‰ã€‚</dd> + + <dt><b><a href="adaptui.html">å®žæ–½è‡ªé€‚åº”ç”¨æˆ·ç•Œé¢æµç¨‹</a></b></dt> + <dd>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何以å¯é€‚应多ç§å±å¹•尺寸/å±å¹•密度组åˆçš„æ–¹å¼å®žæ–½ç”¨æˆ·ç•Œé¢æµç¨‹ï¼ˆè¿è¡Œæ—¶å¯¹å½“å‰å¸ƒå±€çš„æ£€æµ‹ï¼Œæ ¹æ®å½“å‰å¸ƒå±€åšå‡ºå“应,处ç†å±å¹•é…ç½®å˜åŒ–)。</dd> +</dl> diff --git a/docs/html-intl/intl/zh-cn/training/multiscreen/screendensities.jd b/docs/html-intl/intl/zh-cn/training/multiscreen/screendensities.jd index cdb9b7fe54c6..342ee9519bbd 100644 --- a/docs/html-intl/intl/zh-cn/training/multiscreen/screendensities.jd +++ b/docs/html-intl/intl/zh-cn/training/multiscreen/screendensities.jd @@ -12,8 +12,8 @@ next.link=adaptui.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>本教程将指导您</h2> <ol> @@ -29,15 +29,15 @@ next.link=adaptui.html </ul> <h2>试试看</h2> - -<div class="download-box"> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>æœ¬æ•™ç¨‹å°†å‘æ‚¨ä»‹ç»å¦‚何通过æä¾›ä¸åŒèµ„æºå’Œä½¿ç”¨ç‹¬ç«‹äºŽåˆ†è¾¨çŽ‡çš„æµ‹é‡å•使¥æ”¯æŒä¸åŒå±å¹•密度。</p> @@ -48,8 +48,8 @@ next.link=adaptui.html <p>例如,请使用 <code>dp</code>ï¼ˆè€Œéž <code>px</code>)指定两个视图间的间è·ï¼š</p> <pre> -<Button android:layout_width="wrap_content" - android:layout_height="wrap_content" +<Button android:layout_width="wrap_content" + android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> @@ -57,8 +57,8 @@ next.link=adaptui.html <p>请务必使用 <code>sp</code> 指定文å—大å°ï¼š</p> <pre> -<TextView android:layout_width="match_parent" - android:layout_height="wrap_content" +<TextView android:layout_width="match_parent" + android:layout_height="wrap_content" android:textSize="20sp" /> </pre> diff --git a/docs/html-intl/intl/zh-cn/training/multiscreen/screensizes.jd b/docs/html-intl/intl/zh-cn/training/multiscreen/screensizes.jd index 904d09790a21..2d47d1d33cf9 100644 --- a/docs/html-intl/intl/zh-cn/training/multiscreen/screensizes.jd +++ b/docs/html-intl/intl/zh-cn/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>本教程将指导您</h2> <ol> @@ -30,26 +30,26 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">支æŒå¤šç§å±å¹•</a></li> </ul> -<h2>试试看</h2> - -<div class="download-box"> +<h2>试试看</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>æ¤æ•™ç¨‹å°†å‘您介ç»å¦‚何通过以下方法支æŒå„ç§å°ºå¯¸çš„å±å¹•:</p> -<ul> - <li>ç¡®ä¿ç³»ç»Ÿå¯ä»¥é€‚当地调整您布局的尺寸以便适应å±å¹•</li> - <li>æ ¹æ®å±å¹•é…ç½®æä¾›åˆé€‚的用户界é¢å¸ƒå±€</li> +<ul> + <li>ç¡®ä¿ç³»ç»Ÿå¯ä»¥é€‚当地调整您布局的尺寸以便适应å±å¹•</li> + <li>æ ¹æ®å±å¹•é…ç½®æä¾›åˆé€‚的用户界é¢å¸ƒå±€</li> <li>ç¡®ä¿æ£ç¡®çš„布局应用到了æ£ç¡®çš„å±å¹•上</li> - <li>æä¾›å¯æ£ç¡®ç¼©æ”¾çš„ä½å›¾</li> -</ul> + <li>æä¾›å¯æ£ç¡®ç¼©æ”¾çš„ä½å›¾</li> +</ul> -<h2 id="TaskUseWrapMatchPar">使用“wrap_contentâ€å’Œâ€œmatch_parentâ€</h2> +<h2 id="TaskUseWrapMatchPar">使用“wrap_contentâ€å’Œâ€œmatch_parentâ€</h2> <p>è¦ç¡®ä¿å¸ƒå±€çš„çµæ´»æ€§å¹¶é€‚应å„ç§å°ºå¯¸çš„å±å¹•,您应使用 <code>"wrap_content"</code> å’Œ <code>"match_parent"</code> 控制æŸäº›è§†å›¾ç»„件的宽度和高度。如果您使用 <code>"wrap_content"</code>ï¼Œç³»ç»Ÿå°±ä¼šå°†è§†å›¾çš„å®½åº¦æˆ–é«˜åº¦è®¾ç½®æˆæ‰€éœ€çš„æœ€å°å°ºå¯¸ä»¥é€‚应视图ä¸çš„内容,而 <code>"match_parent"</code>(在低于 API 级别 8 的级别ä¸ç§°ä¸º <code>"fill_parent"</code>)则会展开组件以匹é…其父视图的尺寸。</p> @@ -65,7 +65,7 @@ next.link=screendensities.html <p class="img-caption"><strong>图 1</strong>ã€‚çºµå‘æ¨¡å¼ï¼ˆå·¦ï¼‰å’Œæ¨ªå‘模å¼ï¼ˆå³ï¼‰ä¸‹çš„æ–°é—»é˜…读器示例应用。</p> -<h2 id="TaskUseRelativeLayout">使用相对布局</h2> +<h2 id="TaskUseRelativeLayout">使用相对布局</h2> <p>您å¯ä»¥ä½¿ç”¨ <PH>{@link android.widget.LinearLayout}</PH> çš„åµŒå¥—å®žä¾‹å¹¶ç»“åˆ <code>"wrap_content"</code> å’Œ <code>"match_parent"</code> å°ºå¯¸ï¼Œä»¥ä¾¿æž„å»ºç›¸å½“å¤æ‚的布局。ä¸è¿‡ï¼Œæ‚¨æ— 法通过 <PH>{@link android.widget.LinearLayout}</PH> 精确控制å视图的特殊关系;系统会将 <PH>{@link android.widget.LinearLayout}</PH> ä¸çš„视图直接并排列出。如果您需è¦å°†å视图排列出å„ç§æ•ˆæžœè€Œä¸æ˜¯ä¸€æ¡ç›´çº¿ï¼Œé€šå¸¸æ›´åˆé€‚的解决方法是使用 <PH>{@link android.widget.RelativeLayout}</PH>ï¼Œè¿™æ ·æ‚¨å°±å¯ä»¥æ ¹æ®å„组件之间的特殊关系指定布局了。例如,您å¯ä»¥å°†æŸä¸ªå视图对é½åˆ°å±å¹•å·¦ä¾§ï¼ŒåŒæ—¶å°†å¦ä¸€ä¸ªè§†å›¾å¯¹é½åˆ°å±å¹•å³ä¾§ã€‚</p> @@ -115,8 +115,8 @@ next.link=screendensities.html <p>请注æ„,虽然组件的尺寸有所å˜åŒ–,但它们的空间关系ä»ä¼šä¿ç•™ï¼Œå…·ä½“ç”± <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH> 指定。</p> - -<h2 id="TaskUseSizeQuali">使用尺寸é™å®šç¬¦</h2> + +<h2 id="TaskUseSizeQuali">使用尺寸é™å®šç¬¦</h2> <p>ä¸Šæ–‡æ‰€è¿°çš„çµæ´»å¸ƒå±€æˆ–相对布局å¯ä»¥ä¸ºæ‚¨å¸¦æ¥çš„ä¼˜åŠ¿å°±åªæœ‰è¿™ä¹ˆå¤šäº†ã€‚虽然这些布局å¯ä»¥æ‹‰ä¼¸ç»„件内外的空间以适应å„ç§å±å¹•,但它们ä¸ä¸€å®šèƒ½ä¸ºæ¯ç§å±å¹•都æä¾›æœ€ä½³çš„ç”¨æˆ·ä½“éªŒã€‚å› æ¤ï¼Œæ‚¨çš„应用ä¸ä»…åº”å®žæ–½çµæ´»å¸ƒå±€ï¼Œè¿˜åº”针对å„ç§å±å¹•é…ç½®æä¾›ä¸€äº›å¤‡ç”¨å¸ƒå±€ã€‚è¦åšåˆ°è¿™ä¸€ç‚¹ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">é…ç½®é™å®šç¬¦</a>ï¼Œè¿™æ ·å°±å¯ä»¥åœ¨è¿è¡Œæ—¶æ ¹æ®å½“å‰çš„设备é…置自动选择åˆé€‚的资æºäº†ï¼ˆä¾‹å¦‚æ ¹æ®å„ç§å±å¹•尺寸选择ä¸åŒçš„布局)。</p> @@ -158,7 +158,7 @@ next.link=screendensities.html <p>但 Android 版本低于 3.2 çš„è®¾å¤‡ä¸æ”¯æŒæ¤æŠ€æœ¯ï¼ŒåŽŸå› æ˜¯è¿™äº›è®¾å¤‡æ— æ³•å°† <code>sw600dp</code> 识别为尺寸é™å®šç¬¦ï¼Œå› æ¤æ‚¨ä»éœ€ä½¿ç”¨ <code>large</code> é™å®šç¬¦ã€‚è¿™æ ·ä¸€æ¥ï¼Œå°±ä¼šæœ‰ä¸€ä¸ªå称为 <code>res/layout-large/main.xml</code> 的文件(与 <code>res/layout-sw600dp/main.xml</code> ä¸€æ ·ï¼‰ã€‚æ‚¨å°†åœ¨ä¸‹ä¸€æ•™ç¨‹ä¸äº†è§£åˆ°é¿å…æ¤ç±»å¸ƒå±€æ–‡ä»¶å‡ºçްé‡å¤çš„æŠ€æœ¯ã€‚</p> -<h2 id="TaskUseAliasFilters">使用布局别å</h2> +<h2 id="TaskUseAliasFilters">使用布局别å</h2> <p>最å°å®½åº¦é™å®šç¬¦ä»…适用于 Android 3.2 åŠæ›´é«˜ç‰ˆæœ¬ã€‚å› æ¤ï¼Œæ‚¨ä»éœ€ä½¿ç”¨ä¸Žè¾ƒä½Žç‰ˆæœ¬å…¼å®¹çš„æ¦‚括尺寸范围(å°ã€æ£å¸¸ã€å¤§å’Œç‰¹å¤§ï¼‰ã€‚例如,如果您è¦å°†ç”¨æˆ·ç•Œé¢è®¾è®¡æˆåœ¨æ‰‹æœºä¸Šæ˜¾ç¤ºå•颿¿ï¼Œä½†åœ¨ 7 英寸平æ¿ç”µè„‘ã€ç”µè§†å’Œå…¶ä»–è¾ƒå¤§çš„è®¾å¤‡ä¸Šæ˜¾ç¤ºå¤šé¢æ¿ï¼Œè¯·æä¾›ä»¥ä¸‹æ–‡ä»¶ï¼š</p> @@ -198,11 +198,11 @@ next.link=screendensities.html </li> </ul></p> -<p>åŽä¸¤ä¸ªæ–‡ä»¶çš„内容相åŒï¼Œä½†å®ƒä»¬å¹¶æœªå®žé™…å®šä¹‰å¸ƒå±€ã€‚å®ƒä»¬åªæ˜¯å°† <PH>{@code main}</PH> 设置æˆäº† <PH>{@code main_twopanes}</PH> 的别åã€‚ç”±äºŽè¿™äº›æ–‡ä»¶åŒ…å« <code>large</code> å’Œ <code>sw600dp</code> é€‰æ‹©å™¨ï¼Œå› æ¤æ— 论 Android 版本如何,系统都会将这些文件应用到平æ¿ç”µè„‘和电视上(版本低于 3.2 的平æ¿ç”µè„‘å’Œç”µè§†ä¼šåŒ¹é… +<p>åŽä¸¤ä¸ªæ–‡ä»¶çš„内容相åŒï¼Œä½†å®ƒä»¬å¹¶æœªå®žé™…å®šä¹‰å¸ƒå±€ã€‚å®ƒä»¬åªæ˜¯å°† <PH>{@code main}</PH> 设置æˆäº† <PH>{@code main_twopanes}</PH> 的别åã€‚ç”±äºŽè¿™äº›æ–‡ä»¶åŒ…å« <code>large</code> å’Œ <code>sw600dp</code> é€‰æ‹©å™¨ï¼Œå› æ¤æ— 论 Android 版本如何,系统都会将这些文件应用到平æ¿ç”µè„‘和电视上(版本低于 3.2 的平æ¿ç”µè„‘å’Œç”µè§†ä¼šåŒ¹é… <PH>{@code large}</PH>,版本低于 3.2 的平æ¿ç”µè„‘å’Œç”µè§†åˆ™ä¼šåŒ¹é… <code>sw600dp</code>)。</p> -<h2 id="TaskUseOriQuali">使用å±å¹•æ–¹å‘é™å®šç¬¦</h2> +<h2 id="TaskUseOriQuali">使用å±å¹•æ–¹å‘é™å®šç¬¦</h2> <p>æŸäº›å¸ƒå±€ä¼šåŒæ—¶æ”¯æŒæ¨ªå‘模å¼å’Œçºµå‘模å¼ï¼Œä½†æ‚¨å¯ä»¥é€šè¿‡è°ƒæ•´ä¼˜åŒ–å…¶ä¸å¤§éƒ¨åˆ†å¸ƒå±€çš„æ•ˆæžœã€‚在新闻阅读器示例应用ä¸ï¼Œæ¯ç§å±å¹•尺寸和å±å¹•æ–¹å‘下的布局行为方å¼å¦‚下所示:</p> diff --git a/docs/html-intl/intl/zh-tw/about/versions/android-5.0.jd b/docs/html-intl/intl/zh-tw/about/versions/android-5.0.jd index 6b3637bd3c6b..8952a359954d 100644 --- a/docs/html-intl/intl/zh-tw/about/versions/android-5.0.jd +++ b/docs/html-intl/intl/zh-tw/about/versions/android-5.0.jd @@ -428,7 +428,7 @@ sdk.platform.apiLevel=21 <p>ç•¶ç³»çµ±åµæ¸¬åˆ°é©ç”¨ç¶²è·¯æ™‚,就會自動連線並å«ç”¨ {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()} 回呼。您å¯ä»¥ä½¿ç”¨å›žå‘¼çš„ {@link android.net.Network} 物件,以å–得網路的é¡å¤–資訊,或是將æµé‡å°Žå‘所é¸çš„網路。</p> <h3 id="BluetoothBroadcasting">è—牙低功耗技術</h3> -<p>Android 4.3 å¹³å°é¦–度導入了<a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">è—牙低功耗技術</a> (<em>Bluetooth LE</em>) 支æ´åŠŸèƒ½ï¼Œè®“è£ç½®ä»¥ä¸»æ©Ÿè§’色建立連線。在 Android 5.0 ä¸ï¼ŒAndroid è£ç½®å‰‡å¯ä»¥æ‰®æ¼” Bluetooth LE「周邊è£ç½®ã€<em></em>的角色。應用程å¼å¯ä»¥é€éŽé€™é …功能,輕鬆讓附近的è£ç½®åµæ¸¬åˆ°ã€‚舉例來說,您å¯ä»¥æ‰“é€ æ‡‰ç”¨ç¨‹å¼ï¼Œè®“è£ç½®åŒ–身為計æ¥å™¨æˆ–å¥åº·ç›£æ¸¬å™¨ï¼Œä¸¦å°‡è³‡æ–™å‚³é€çµ¦å¦ä¸€å° Bluetooth LE è£ç½®ã€‚</p> +<p>Android 4.3 å¹³å°é¦–度導入了<a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">è—牙低功耗技術</a> (<em>Bluetooth LE</em>) 支æ´åŠŸèƒ½ï¼Œè®“è£ç½®ä»¥ä¸»æ©Ÿè§’色建立連線。在 Android 5.0 ä¸ï¼ŒAndroid è£ç½®å‰‡å¯ä»¥æ‰®æ¼” Bluetooth LE「周邊è£ç½®ã€<em></em>的角色。應用程å¼å¯ä»¥é€éŽé€™é …功能,輕鬆讓附近的è£ç½®åµæ¸¬åˆ°ã€‚舉例來說,您å¯ä»¥æ‰“é€ æ‡‰ç”¨ç¨‹å¼ï¼Œè®“è£ç½®åŒ–身為計æ¥å™¨æˆ–å¥åº·ç›£æ¸¬å™¨ï¼Œä¸¦å°‡è³‡æ–™å‚³é€çµ¦å¦ä¸€å° Bluetooth LE è£ç½®ã€‚</p> <p>全新的 {@link android.bluetooth.le} API å¯è®“æ‚¨çš„æ‡‰ç”¨ç¨‹å¼æ’é€å»£å‘Šã€æŽƒæå›žæ‡‰ï¼Œä»¥åŠèˆ‡é™„è¿‘çš„ Bluetooth LE è£ç½®å»ºç«‹é€£ç·šã€‚如è¦ä½¿ç”¨å…¨æ–°çš„廣告和掃æåŠŸèƒ½ï¼Œè«‹åœ¨æ‚¨çš„è³‡è¨Šæ¸…å–®ä¸æ–°å¢ž {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} 權é™ã€‚當使用者從 Play å•†åº—æ›´æ–°æˆ–ä¸‹è¼‰æ‚¨çš„æ‡‰ç”¨ç¨‹å¼æ™‚,會看到以下的權é™è¦æ±‚æç¤ºï¼šã€Œè—牙連線資訊:å…è¨±æ‡‰ç”¨ç¨‹å¼æŽ§åˆ¶è—牙功能,包括å°é™„è¿‘çš„è—牙è£ç½®æ’é€è³‡è¨Šï¼Œæˆ–是從附近的è—牙è£ç½®å–得資訊。ã€</p> <p>如è¦é–‹å§‹ Bluetooth LE 廣告功能,以便其他è£ç½®ç™¼æŽ˜æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ï¼Œè«‹å‘¼å« {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} ä¸¦å‚³éž {@link android.bluetooth.le.AdvertiseCallback} é¡žåˆ¥å¯¦ä½œã€‚å›žå‘¼ç‰©ä»¶æœƒæ”¶åˆ°å»£å‘Šä½œæ¥æˆåŠŸæˆ–å¤±æ•—çš„å ±å‘Šã€‚</p> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd index f63501f5a204..5e0eec3957c5 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd @@ -6,7 +6,7 @@ page.image=/distribute/images/about-play.jpg @jd:body -<div id="qv-wrapper"> +<div id="qv-wrapper"> <div id="qv"> <h2>關於 Google Play</h2> <ol style="list-style-type:none;"> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd index 8fe944d9a7a3..88236c195044 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd @@ -160,4 +160,4 @@ page.metaDescription=將您的應用程å¼èˆ‡å…§å®¹æ•£ä½ˆè‡³ Android Auto。 data-query="collection:autolanding" data-cardSizes="9x6, 6x3x2" data-maxResults="6"> - </div> + </div> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd index a0093bb729af..b14095b9274f 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd @@ -5,7 +5,7 @@ Xnonavpage=true @jd:body -<div id="qv-wrapper"> +<div id="qv-wrapper"> <div id="qv"> <h2>發行功能</h2> <ol> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd index b362ae9bd33e..38c2ac1370f2 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd @@ -36,4 +36,4 @@ page.tags="families" <div class="paging-links" style="padding-top:.75em;"> <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">å¾ŒçºŒå…§å®¹ï¼šé¸æ“‡</a> -</div> +</div> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd index 696478900894..057e58373e67 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=有關 Designed for Families çš„å•é¡Œèˆ‡å›žç” font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>本文件內容</h2> @@ -106,7 +106,7 @@ page.metaDescription=有關 Designed for Families çš„å•é¡Œèˆ‡å›žç” </dt> <dd> - åœ¨æ‚¨é¸æ“‡åŠ å…¥ Designed for Families 後,Google Play 會檢閱您的應用程å¼ï¼Œä»¥ç¢ºèªå…¶æ˜¯å¦é©åˆå®¶åºä½¿ç”¨ã€‚若您的應用程å¼ç¬¦åˆæ‰€æœ‰è¨ˆåŠƒéœ€æ±‚ï¼Œé è¨ˆç™¼è¡Œæ™‚é–“ä¸æœƒé•·æ–¼ä¸€èˆ¬ç™¼è¡Œæ™‚間;但是,若在 Designed for Families 檢閱期間拒絕應用程å¼ï¼Œå‰‡è©²æ‡‰ç”¨ç¨‹å¼çš„發行å¯èƒ½æœƒå‡ºç¾å»¶é²ã€‚ + åœ¨æ‚¨é¸æ“‡åŠ å…¥ Designed for Families 後,Google Play 會檢閱您的應用程å¼ï¼Œä»¥ç¢ºèªå…¶æ˜¯å¦é©åˆå®¶åºä½¿ç”¨ã€‚若您的應用程å¼ç¬¦åˆæ‰€æœ‰è¨ˆåŠƒéœ€æ±‚ï¼Œé è¨ˆç™¼è¡Œæ™‚é–“ä¸æœƒé•·æ–¼ä¸€èˆ¬ç™¼è¡Œæ™‚間;但是,若在 Designed for Families 檢閱期間拒絕應用程å¼ï¼Œå‰‡è©²æ‡‰ç”¨ç¨‹å¼çš„發行å¯èƒ½æœƒå‡ºç¾å»¶é²ã€‚ </dd> <dt> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd index bf7a7259739f..ca44a282178a 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd @@ -51,7 +51,7 @@ page.metaDescription=åªéœ€å¹¾å€‹ç°¡æ˜“æ¥é©Ÿå³å¯åŠ å…¥ Designed for Familiesã </p> <p class="note"> - <strong>注æ„:</strong>Designed for Families 計劃ä¸å·²ç™¼è¡Œçš„æ‡‰ç”¨ç¨‹å¼ä¹Ÿå¯ä¾› Google Play 上的所有使用者使用。 + <strong>注æ„:</strong>Designed for Families 計劃ä¸å·²ç™¼è¡Œçš„æ‡‰ç”¨ç¨‹å¼ä¹Ÿå¯ä¾› Google Play 上的所有使用者使用。 </p> <p> @@ -67,4 +67,4 @@ page.metaDescription=åªéœ€å¹¾å€‹ç°¡æ˜“æ¥é©Ÿå³å¯åŠ å…¥ Designed for Familiesã <div class="paging-links" style="padding-top:.75em;"> <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">後續內容:常見å•題</a> -</div>
\ No newline at end of file +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd index 0165279f6898..e70eaa3e25c8 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd @@ -54,4 +54,4 @@ page.image=distribute/images/play_dev_guide.png data-query="collection:play_dev_guide" data-cardSizes="9x6" data-maxResults="1"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd index bf7b702e6852..d724869350a6 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd @@ -431,4 +431,4 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> <p class="caution"> <strong>é‡è¦èªªæ˜Žï¼š</strong>由於å˜åœ¨é€™ä¸€é™åˆ¶ï¼Œå› æ¤æ‚¨ä¸æ‡‰å°‡ç”Ÿç”¢ APK 用於 Auto 支æ´åŽŸåž‹è¨è¨ˆã€‚ -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd index feabc2002fda..3435ec2a4e19 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd @@ -13,7 +13,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>測試</h2> <ol> <li><a href="#test-environment">è¨å®šæ¸¬è©¦ç’°å¢ƒ</a></li> @@ -25,7 +25,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">å¹³æ¿é›»è…¦æ‡‰ç”¨ç¨‹å¼å“質</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程å¼</a></li> </ol> - + </div> </div> @@ -70,7 +70,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> æè¿° @@ -1011,4 +1011,4 @@ data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6"> <p> 請確ä¿ä½¿ç”¨{@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()}é‡å° <code>ThreadPolicy</code> 啟用政ç–é•犯的<strong>視覺通知</strong>。 -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd index 3c16f9daa50b..d584e5375095 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd @@ -46,7 +46,7 @@ Xnonavpage=true <div class="headerLine"><h2 id="core-app-quality">1.測試基本平æ¿é›»è…¦æ‡‰ç”¨ç¨‹å¼å“質</h2></div> -<p>æä¾›å¹³æ¿é›»è…¦æ‡‰ç”¨ç¨‹å¼çµ•佳體驗的第一æ¥ï¼Œæ˜¯ç¢ºä¿å…¶ç¬¦åˆæ‡‰ç”¨ç¨‹å¼æ‰€é‡å°æ‰€æœ‰è£ç½®åŠå°ºå¯¸è¦æ ¼çš„<em>æ ¸å¿ƒæ‡‰ç”¨ç¨‹å¼å“質準則</em>。如需完備資訊,請åƒé–±<a href="{@docRoot}distribute/essentials/quality/core.html">æ ¸å¿ƒæ‡‰ç”¨ç¨‹å¼å“質指導方é‡</a>。 +<p>æä¾›å¹³æ¿é›»è…¦æ‡‰ç”¨ç¨‹å¼çµ•佳體驗的第一æ¥ï¼Œæ˜¯ç¢ºä¿å…¶ç¬¦åˆæ‡‰ç”¨ç¨‹å¼æ‰€é‡å°æ‰€æœ‰è£ç½®åŠå°ºå¯¸è¦æ ¼çš„<em>æ ¸å¿ƒæ‡‰ç”¨ç¨‹å¼å“質準則</em>。如需完備資訊,請åƒé–±<a href="{@docRoot}distribute/essentials/quality/core.html">æ ¸å¿ƒæ‡‰ç”¨ç¨‹å¼å“質指導方é‡</a>。 </p> <p> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd index 47a2d916a604..6dc85e856b5d 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd @@ -395,4 +395,4 @@ data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> </p> <p> 是。上述需求僅判斷在 Google Play 上是å¦å°‡æ‚¨çš„æ‡‰ç”¨ç¨‹å¼è¦–為 Android Wear 應用程å¼ï¼Œä»¥åŠè©²æ‡‰ç”¨ç¨‹å¼æ˜¯å¦å¯ä¾› Android Wear ä½¿ç”¨è€…æ›´è¼•é¬†åœ°æŽ¢å°‹ã€‚è‹¥æœªæŽ¥å—æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ç‚º Wear 應用程å¼ï¼Œä»æœƒå‘å…¶ä»–è£ç½®é¡žåž‹ (例如手機或平æ¿é›»è…¦) æä¾›è©²æ‡‰ç”¨ç¨‹å¼ï¼Œä¸¦ä¸”仿œƒå®‰è£åœ¨ç©¿æˆ´å¼è£ç½®ä¸Šã€‚ -</p>
\ No newline at end of file +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd index 3364e49bbdca..8bff67d02eb7 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd @@ -134,4 +134,4 @@ href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=e data-query="collection:distribute/googleplay/gettingstarted" data-sortOrder="-timestamp" data-cardSizes="9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd index c4f7a7cd089c..aa2096ad4cdd 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd @@ -173,7 +173,7 @@ page.metaDescription=將您的應用程å¼ã€éŠæˆ²èˆ‡å…§å®¹æ•£ä½ˆè‡³ Android é› <h3 id="track_review">5.è¿½è¹¤æ‚¨çš„æª¢é–±èˆ‡æ ¸å‡†</h3> <p> - 若您的應用程å¼ç¬¦åˆ Android 電視的技術與å“質準則 (如上所述)ï¼Œå‰‡æœƒå‘ Android 電視的使用者æä¾›æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ã€‚若您的應用程å¼ä¸ç¬¦åˆè©²æº–則,您將收到<strong>傳é€è‡³æ‚¨é–‹ç™¼äººå“¡å¸³æˆ¶åœ°å€çš„通知電å郵件</strong>,內å«éœ€è¦ä¿®æ£çš„é ˜åŸŸçš„æ‘˜è¦ã€‚若您已進行所需調整,å¯ä»¥å°‡æ–°ç‰ˆæœ¬çš„æ‡‰ç”¨ç¨‹å¼ä¸Šå‚³è‡³ Developer Console。 + 若您的應用程å¼ç¬¦åˆ Android 電視的技術與å“質準則 (如上所述)ï¼Œå‰‡æœƒå‘ Android 電視的使用者æä¾›æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ã€‚若您的應用程å¼ä¸ç¬¦åˆè©²æº–則,您將收到<strong>傳é€è‡³æ‚¨é–‹ç™¼äººå“¡å¸³æˆ¶åœ°å€çš„通知電å郵件</strong>,內å«éœ€è¦ä¿®æ£çš„é ˜åŸŸçš„æ‘˜è¦ã€‚若您已進行所需調整,å¯ä»¥å°‡æ–°ç‰ˆæœ¬çš„æ‡‰ç”¨ç¨‹å¼ä¸Šå‚³è‡³ Developer Console。 </p> <p> @@ -190,7 +190,7 @@ page.metaDescription=將您的應用程å¼ã€éŠæˆ²èˆ‡å…§å®¹æ•£ä½ˆè‡³ Android é› </li> <li> - <em>å·²æ ¸å‡†</em> - å·²æª¢é–±ä¸¦æ ¸å‡†æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ã€‚æœƒç›´æŽ¥å‘ Android 電視使用者æä¾›è©²æ‡‰ç”¨ç¨‹å¼ã€‚ + <em>å·²æ ¸å‡†</em> - å·²æª¢é–±ä¸¦æ ¸å‡†æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ã€‚æœƒç›´æŽ¥å‘ Android 電視使用者æä¾›è©²æ‡‰ç”¨ç¨‹å¼ã€‚ </li> <li> @@ -207,4 +207,4 @@ page.metaDescription=將您的應用程å¼ã€éŠæˆ²èˆ‡å…§å®¹æ•£ä½ˆè‡³ Android é› data-query="collection:tvlanding" data-cardSizes="9x6, 6x3x2" data-maxResults="6"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd index 19a48f56a5b5..f4aca5cca51a 100644 --- a/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd @@ -196,4 +196,4 @@ page.metaDescription=將您的應用程å¼ã€éŠæˆ²èˆ‡å…§å®¹æ•£ä½ˆè‡³ Android We data-query="collection:wearlanding" data-cardSizes="6x2" data-maxResults="3"> - </div>
\ No newline at end of file + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd index 6e974174849b..167c4f10d5ac 100644 --- a/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd +++ b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd @@ -789,4 +789,4 @@ data-maxresults="6"> data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch" data-sortOrder="-timestamp" data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd index 1b95d0b3458d..c34fcee498bc 100644 --- a/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd +++ b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd @@ -713,4 +713,4 @@ data-maxresults="6"> data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch" data-sortOrder="-timestamp" data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3" - data-maxResults="6"></div>
\ No newline at end of file + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/google/play/filters.jd b/docs/html-intl/intl/zh-tw/google/play/filters.jd index e96b9ddcacd8..eec87ac75156 100644 --- a/docs/html-intl/intl/zh-tw/google/play/filters.jd +++ b/docs/html-intl/intl/zh-tw/google/play/filters.jd @@ -263,4 +263,4 @@ href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-featur <p class="caution"><strong>注æ„:</strong>é‡å°åŒä¸€æ‡‰ç”¨ç¨‹å¼ç™¼è¡Œå¤šå€‹ APK 是進階功能,<strong>å¤šæ•¸æ‡‰ç”¨ç¨‹å¼æ‡‰åƒ…發行為諸多è£ç½®çµ„æ…‹æä¾›æ”¯æ´çš„單一 APK</strong>。發行多個 APK éœ€è¦æ‚¨éµå¾ªç¯©é¸å™¨ä¸çš„特定è¦å‰‡ï¼Œä¸¦æ ¼å¤–æ³¨æ„æ¯å€‹ APK çš„ç‰ˆæœ¬ä»£ç¢¼ï¼Œä»¥ç¢ºä¿æ¯å€‹çµ„態使用æ£ç¢ºçš„æ›´æ–°è·¯å¾‘。</p> -<p>è‹¥æ‚¨éœ€è¦æœ‰é—œå¦‚何在 Google Play 上發行多個 APK 的詳細資訊,請åƒé–±<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支æ´</a>。</p>
\ No newline at end of file +<p>è‹¥æ‚¨éœ€è¦æœ‰é—œå¦‚何在 Google Play 上發行多個 APK 的詳細資訊,請åƒé–±<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支æ´</a>。</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/guide/components/bound-services.jd b/docs/html-intl/intl/zh-tw/guide/components/bound-services.jd index da47634b894f..e26e993fd672 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/bound-services.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/bound-services.jd @@ -303,7 +303,7 @@ public class BindingActivity extends Activity { } </pre> -<p>上述範例顯示:用戶端如何使用 +<p>上述範例顯示:用戶端如何使用 {@link android.content.ServiceConnection} 的實作和 {@link android.content.ServiceConnection#onServiceConnected onServiceConnected()} 回呼,繫çµè‡³æœå‹™ã€‚下一節æä¾›é—œæ–¼ç¹«çµè‡³æœå‹™è™•ç†ç¨‹åºçš„詳細資訊。 </p> @@ -334,7 +334,7 @@ android.os.Messenger} 讓æœå‹™ä¸€æ¬¡è™•ç†ä¸€å€‹å‘¼å«ã€‚如果您的æœå‹™å¿…é </div> </div> -<p>如果æœå‹™è¦å’Œé 端處ç†ç¨‹åºæºé€šï¼Œå‰‡å¯ä»¥ä½¿ç”¨ +<p>如果æœå‹™è¦å’Œé 端處ç†ç¨‹åºæºé€šï¼Œå‰‡å¯ä»¥ä½¿ç”¨ {@link android.os.Messenger} 為您的æœå‹™æä¾›ä»‹é¢ã€‚æ¤æŠ€è¡“è®“æ‚¨ä¸éœ€è¦ä½¿ç”¨ AIDL,就å¯ä»¥åŸ·è¡Œè™•ç†ç¨‹åºé–“通訊 (IPC)。 </p> @@ -636,7 +636,7 @@ android.content.Context#stopService stopService()} åŠ ä»¥åœæ¢ï¼Œå¦å‰‡æœå‹™æœ </p> -<p>æ¤å¤–,如果您的æœå‹™å·²å•Ÿå‹•並且接å—繫çµï¼Œç•¶ç³»çµ±å‘¼å«æ‚¨çš„ {@link android.app.Service#onUnbind onUnbind()} 方法時,å¯ä»¥é¸æ“‡å‚³å›ž +<p>æ¤å¤–,如果您的æœå‹™å·²å•Ÿå‹•並且接å—繫çµï¼Œç•¶ç³»çµ±å‘¼å«æ‚¨çš„ {@link android.app.Service#onUnbind onUnbind()} 方法時,å¯ä»¥é¸æ“‡å‚³å›ž {@code true} (如果您希望用戶端下次繫çµè‡³æœå‹™æ™‚,å¯ä»¥æŽ¥æ”¶ {@link android.app.Service#onRebind onRebind()} 呼å«ï¼Œè€Œä¸æ˜¯æŽ¥æ”¶ {@link android.app.Service#onBind onBind()} 的呼å«)。{@link android.app.Service#onRebind diff --git a/docs/html-intl/intl/zh-tw/guide/components/fragments.jd b/docs/html-intl/intl/zh-tw/guide/components/fragments.jd index e54769b0c88b..dfef8f1ffaa9 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/fragments.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>å¦è«‹åƒé–±</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">使用片段建置動態 UI</a></li> @@ -46,7 +46,7 @@ parent.link=activities.html </div> </div> -<p>{@link android.app.Fragment} 代表一種行為或 +<p>{@link android.app.Fragment} 代表一種行為或 {@link android.app.Activity} ä¸çš„一部分使用者介é¢ã€‚您å¯ä»¥åˆä½µå–®ä¸€ Activity ä¸çš„多個片段,藉æ¤å»ºç½® å¤šçª—æ ¼ UI 以åŠåœ¨å¤šå€‹ Activity ä¸é‡è¤‡ä½¿ç”¨ç‰‡æ®µã€‚您å¯ä»¥å°‡ç‰‡æ®µæƒ³æˆæ˜¯ Activity çš„æ¨¡çµ„åŒ–å€æ®µï¼Œç‰‡æ®µæ“æœ‰è‡ªå·±çš„ç”Ÿå‘½é€±æœŸã€æŽ¥æ”¶è‡ªå·±çš„è¼¸å…¥äº‹ä»¶ï¼Œè€Œä¸”æ‚¨å¯ä»¥åœ¨ Activity 執行時新增或移除片段 (æœ‰é»žåƒæ˜¯æ‚¨å¯ä»¥åœ¨ä¸åŒ Activity ä¸é‡è¤‡ä½¿ç”¨çš„「å Activityã€)。 @@ -204,11 +204,11 @@ android.app.ListFragment} çš„å類別,則實作完畢後系統é è¨æœƒå‚³å›ž {@link android.widget.ListView}ï¼Œå› æ¤æ‚¨ä¸å¿…åŠ ä»¥å¯¦ä½œã€‚</p> <p>如è¦å¾ž {@link -android.app.Fragment#onCreateView onCreateView()} 傳回版é¢é…置,您å¯ä»¥å¾ž XML ä¸å®šç¾©çš„<a href="{@docRoot}guide/topics/resources/layout-resource.html">l版é¢é…置資æº</a>擴大它。為å”助您完æˆé€™é …作æ¥ï¼Œ{@link android.app.Fragment#onCreateView onCreateView()} æä¾›äº† +android.app.Fragment#onCreateView onCreateView()} 傳回版é¢é…置,您å¯ä»¥å¾ž XML ä¸å®šç¾©çš„<a href="{@docRoot}guide/topics/resources/layout-resource.html">l版é¢é…置資æº</a>擴大它。為å”助您完æˆé€™é …作æ¥ï¼Œ{@link android.app.Fragment#onCreateView onCreateView()} æä¾›äº† {@link android.view.LayoutInflater} 物件。 </p> -<p>例如,以下是 {@link android.app.Fragment} çš„å類別,å¯å¾ž +<p>例如,以下是 {@link android.app.Fragment} çš„å類別,å¯å¾ž {@code example_fragment.xml} 檔案載入版é¢é…置:</p> <pre> @@ -378,7 +378,7 @@ FragmentRetainInstance.java} 範例 (å¯é€éŽ Android SDK Manager å˜å–)<code> <li>使用 {@link android.app.FragmentManager#findFragmentById findFragmentById()} (é‡å°åœ¨ Activity 版é¢é…ç½®ä¸æä¾› UI 的片段) 或 {@link android.app.FragmentManager#findFragmentByTag findFragmentByTag()} (é‡å°æœªæä¾› UI 的片段) å–å¾— Activity ä¸çš„ç¾æœ‰ç‰‡æ®µã€‚ -</li> +</li> <li>使用 {@link android.app.FragmentManager#popBackStack()} (模擬使用者的「返回ã€<em></em>命令) å°‡ç‰‡æ®µå¾žè¿”å›žå †ç–Šä¸æŽ¨å‡ºã€‚</li> <li>使用 {@link @@ -563,7 +563,7 @@ public static class FragmentA extends ListFragment { </pre> <p>如果 Activity 並未實作介é¢ï¼Œé‚£éº¼ç‰‡æ®µæœƒæ“²å›ž -{@link java.lang.ClassCastException}。æˆåŠŸæ“²å›žæ™‚ï¼Œ{@code mListener} æˆå“¡æœƒä¿ç•™ Activity 所實作 +{@link java.lang.ClassCastException}。æˆåŠŸæ“²å›žæ™‚ï¼Œ{@code mListener} æˆå“¡æœƒä¿ç•™ Activity 所實作 {@code OnArticleSelectedListener} çš„åƒç…§è³‡æ–™ï¼Œä»¥ä¾¿ç‰‡æ®µ A å‘¼å« {@code OnArticleSelectedListener} 介é¢å®šç¾©çš„æ–¹æ³•與 Activity 分享事件。 例如,å‡è¨ç‰‡æ®µ A 是 @@ -739,7 +739,7 @@ android.app.Activity#onCreate onCreate()} 回呼後,Activity ä¸çš„ç‰‡æ®µå°±ä¸ é€™å€‹ Activity ç¯„ä¾‹åŒæ™‚ç¤ºç¯„äº†å¦‚ä½•æ ¹æ“šèž¢å¹•è¨å®šæä¾›ä¸åŒçš„片段è¨å®šã€‚ </p> -<p class="note"><strong>注æ„:</strong>如需這個 Activity 的完整原始碼,請查閱 +<p class="note"><strong>注æ„:</strong>如需這個 Activity 的完整原始碼,請查閱 <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code FragmentLayout.java}</a>。</p> @@ -785,7 +785,7 @@ android.widget.FrameLayout}),或是啟動新的 Activity (è—‰æ¤é¡¯ç¤ºç‰‡æ®µ)ã <p>第二個片段 {@code DetailsFragment} 則會é‡å° {@code TitlesFragment} ä¸ï¼Œä½¿ç”¨è€…æ‰€é¸æ¸…å–®é …ç›®çš„åŠ‡æœ¬æ‘˜è¦ï¼š</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>é‡å° {@code TitlesFragment} é¡žåˆ¥ç™¼å‡ºçš„å›žå‘¼ï¼Œå¦‚æžœä½¿ç”¨è€…é»žæ“Šæ¸…å–®é …ç›®ï¼Œè€Œä¸”ç›®å‰çš„版é¢é…置「並未ã€<em></em>åŒ…å« {@code R.id.details} 檢視 ({@code DetailsFragment} 所屬的檢視)ï¼Œå‰‡æ‡‰ç”¨ç¨‹å¼æœƒåŸ·è¡Œ {@code DetailsActivity} Activity ä¾†é¡¯ç¤ºé …ç›®å…§å®¹ã€‚ @@ -798,7 +798,7 @@ android.widget.FrameLayout}),或是啟動新的 Activity (è—‰æ¤é¡¯ç¤ºç‰‡æ®µ)ã {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>請注æ„,這個 Activity 會在螢幕採用橫å‘版é¢é…置的情æ³ä¸‹è‡ªè¡ŒçµæŸï¼Œå› æ¤ä¸»è¦ Activity 會接續顯示 {@code TitlesFragment} æ—çš„ {@code DetailsFragment}。如果使用者在採用直å‘版é¢é…置的è£ç½®ä¸ŠåŸ·è¡Œ {@code DetailsActivity},然後將該è£ç½®æ—‹è½‰æˆæ©«å‘ (é€™æœƒé‡æ–°åŸ·è¡Œç›®å‰çš„ Activity),就å¯èƒ½æœƒç™¼ç”Ÿé€™ç¨®æƒ…æ³ã€‚ diff --git a/docs/html-intl/intl/zh-tw/guide/components/fundamentals.jd b/docs/html-intl/intl/zh-tw/guide/components/fundamentals.jd index d3b3c2899614..9e4079e5e35e 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/fundamentals.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/fundamentals.jd @@ -309,7 +309,7 @@ href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a </ul> <p>系統看ä¸åˆ°æ‚¨ç´å…¥ä¾†æºä½†æœªåœ¨å®£ç¤ºèªªæ˜Žä¸å®£å‘Šçš„ Activityã€æœå‹™å’Œå…§å®¹ä¾›æ‡‰ç¨‹å¼ï¼Œå› æ¤ç³»çµ±ç„¡æ³•åŸ·è¡Œé€™äº›é …ç›®ã€‚ -ä¸éŽï¼Œæ‚¨å¯åœ¨å®£ç¤ºèªªæ˜Žå®£å‘Šå»£æ’接收器,或是é€éŽç¨‹å¼ç¢¼ä»¥å‹•æ…‹æ–¹å¼å»ºç«‹å»£æ’接收器 (å°‡å»£æ’æŽ¥æ”¶å™¨å»ºç«‹ç‚º +ä¸éŽï¼Œæ‚¨å¯åœ¨å®£ç¤ºèªªæ˜Žå®£å‘Šå»£æ’接收器,或是é€éŽç¨‹å¼ç¢¼ä»¥å‹•æ…‹æ–¹å¼å»ºç«‹å»£æ’接收器 (å°‡å»£æ’æŽ¥æ”¶å™¨å»ºç«‹ç‚º {@link android.content.BroadcastReceiver} 物件)ï¼Œç„¶å¾Œå‘¼å« {@link android.content.Context#registerReceiver registerReceiver()} å‘ç³»çµ±è¨»å†Šå»£æ’æŽ¥æ”¶å™¨ã€‚ @@ -379,7 +379,7 @@ startActivity()},系統就å¯èƒ½æœƒå•Ÿå‹•您的 Activity è®“ä½¿ç”¨è€…æ’°å¯«åŠ </p> <p>例如,å‡è¨æ‚¨çš„æ‡‰ç”¨ç¨‹å¼éœ€è¦ç›¸æ©Ÿä¸”採用 Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API 級別</a> 7) 導入的 APIï¼Œå»ºè°æ‚¨ç”¨ä¸‹åˆ—æ–¹å¼åœ¨å®£ç¤ºèªªæ˜Žæª”案ä¸å®£å‘Šé€™äº›éœ€æ±‚: -</p> +</p> <pre> <manifest ... > diff --git a/docs/html-intl/intl/zh-tw/guide/components/index.jd b/docs/html-intl/intl/zh-tw/guide/components/index.jd index f34c7120e8ad..a59bcd465cb9 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/index.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/index.jd @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>éƒ¨è½æ ¼æ–‡ç« </h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>使用 DialogFragments</h4> <p>本文示範如何æé… v4 支æ´ç¨‹å¼åº« (å¯é‡å° Honeycomb 以下版本è£ç½®æä¾›å‘下相容性支æ´) 使用 DialogFragments 來顯示簡易的編輯å°è©±æ–¹å¡Šï¼Œä»¥åŠé€éŽä»‹é¢å°‡çµæžœå›žå‚³çµ¦å‘¼å«ã€ŒActivityã€ã€‚</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>é©ç”¨æ–¼å„種è£ç½®çš„片段</h4> <p>æˆ‘å€‘æ–¼ä»Šæ—¥æŽ¨å‡ºçš„éœæ…‹ç¨‹å¼åº«å¯åˆ—出相åŒçš„ Fragments API (ä»¥åŠæ–°çš„ LoaderManager 和些許其他類別),讓與 Android 1.6 以下版本相容的應用程å¼èƒ½å¤ 使用片段來建立相容於平æ¿é›»è…¦çš„使用者介é¢ã€‚ </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>é‹ç”¨å¤šå€‹åŸ·è¡Œç·’來æå‡æ•ˆèƒ½</h4> <p>å»ºç«‹å›žæ‡‰å¼æ‡‰ç”¨ç¨‹å¼çš„建è°åšæ³•æ˜¯ï¼Œæœ€å°åŒ–æ‚¨çš„ä¸»è¦ UI 執行緒所執行的工作數。 @@ -32,7 +32,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>培訓</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>ç®¡ç† Activity 生命週期</h4> <p>本課程說明æ¯å€‹ã€ŒActivityã€åŸ·è¡Œå€‹é«”都會接收的生命週期é‡è¦å›žå‘¼æ–¹æ³•,並且說明如何使用這些方法,讓 Activity çš„é‹ä½œèƒ½ç¬¦åˆä½¿ç”¨è€…çš„é æœŸï¼Œä»¥åŠè®“ Activity 在ä¸éœ€è¦ç³»çµ±è³‡æºæ™‚ä¸è€—用這類資æºã€‚ diff --git a/docs/html-intl/intl/zh-tw/guide/components/loaders.jd b/docs/html-intl/intl/zh-tw/guide/components/loaders.jd index 89bfc80744d9..112993a66085 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/loaders.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>é‡è¦é¡žåˆ¥</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>相關範例</h2> <ol> <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor @@ -51,7 +51,7 @@ android.app.Fragment} 。</li> å› æ¤ä¸éœ€è¦é‡æ–°æŸ¥è©¢è³‡æ–™ã€‚ </li> </ul> - + <h2 id="summary">載入器 API 摘è¦</h2> <p>有多個類別和介é¢å¯èƒ½èˆ‡åœ¨æ‡‰ç”¨ç¨‹å¼ä¸ä½¿ç”¨è¼‰å…¥å™¨æœ‰é—œã€‚ @@ -129,7 +129,7 @@ android.content.ContentProvider} 所備份資料的 {@link android.content.Curso </li> <li>{@link android.app.LoaderManager.LoaderCallbacks} 的實作。 您å¯ä»¥åœ¨é€™è£¡å»ºç«‹æ–°çš„載入器和管ç†å°ç¾æœ‰è¼‰å…¥å™¨çš„åƒç…§ã€‚ -</li> +</li> <li>顯示載入器資料的一種方å¼ï¼Œä¾‹å¦‚ {@link android.widget.SimpleCursorAdapter}。</li> <li>使用 {@link android.content.CursorLoader} 時的資料來æºï¼Œä¾‹å¦‚ {@link android.content.ContentProvider}。 @@ -140,7 +140,7 @@ android.widget.SimpleCursorAdapter}。</li> <p>{@link android.app.LoaderManager} å¯åœ¨ {@link android.app.Activity} 或 {@link android.app.Fragment} 內管ç†ä¸€æˆ–多個 {@link android.content.Loader} 執行個體。 æ¯å€‹ Activity 或片段åªèƒ½æœ‰ä¸€å€‹ {@link -android.app.LoaderManager}。</p> +android.app.LoaderManager}。</p> <p>您通常會在 Activity çš„ {@link android.app.Activity#onCreate onCreate()} 方法內或在片段的 {@link android.app.Fragment#onActivityCreated onActivityCreated()} 方法內,åˆå§‹åŒ– {@link android.content.Loader}, @@ -157,13 +157,13 @@ getLoaderManager().initLoader(0, null, this);</pre> <ul> <li>å¯è˜åˆ¥è¼‰å…¥å™¨çš„ä¸é‡è¤‡ ID。在本範例ä¸ï¼Œæ¤ ID 為 0。</li> <li>å¯åœ¨å»ºæ§‹æ™‚æä¾›çµ¦è¼‰å…¥å™¨çš„é¸ç”¨å¼•數 (在本範例ä¸ç‚º<code>null</code>)。 -</li> +</li> <li>{@link android.app.LoaderManager.LoaderCallbacks} 實作, {@link android.app.LoaderManager} æœƒå‘¼å«æ¤å¯¦ä½œä¾†å›žå ±è¼‰å…¥å™¨äº‹ä»¶ã€‚在本範例ä¸ï¼Œæœ¬æ©Ÿé¡žåˆ¥æœƒå¯¦ä½œ {@link android.app.LoaderManager.LoaderCallbacks} 執行個體,以將åƒç…§å‚³é€çµ¦å®ƒè‡ªå·± ({@code this})。 -</li> +</li> </ul> <p>{@link android.app.LoaderManager#initLoader initLoader()} 呼å«å¯ç¢ºä¿è¼‰å…¥å™¨å·²åˆå§‹åŒ–且處於有效狀態。 å¯èƒ½æœƒæœ‰å…©ç¨®çµæžœï¼š</p> @@ -343,7 +343,7 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <p>這個方法是在æ£è¦é‡è¨å…ˆå‰å»ºç«‹çš„載入器時呼å«ï¼Œä»¥ä¾¿ä½¿å…¶è³‡æ–™ç„¡æ³•使用。 æ¤å›žå‘¼æ–¹æ³•å¯è®“您知é“å³å°‡è¦ç™¼ä½ˆè³‡æ–™ï¼Œè€Œèƒ½å…ˆè¡Œå°‡å…¶åƒç…§ç§»é™¤ã€‚  </p> -<p>æ¤å¯¦ä½œæœƒä»¥ <code>null</code> çš„å€¼å‘¼å« +<p>æ¤å¯¦ä½œæœƒä»¥ <code>null</code> çš„å€¼å‘¼å« {@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}: </p> @@ -366,7 +366,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} 的完整實作, 其顯示的 {@link android.widget.ListView} 包å«è¯çµ¡äººå…§å®¹ä¾›æ‡‰ç¨‹å¼çš„æŸ¥è©¢çµæžœã€‚它使用 {@link android.content.CursorLoader} 管ç†å°ä¾›æ‡‰ç¨‹å¼çš„æŸ¥è©¢ã€‚</p> - + <p>如本範例所示,é‡å°è¦å˜å–使用者è¯çµ¡äººçš„æ‡‰ç”¨ç¨‹å¼ï¼Œå®ƒçš„å®£ç¤ºèªªæ˜Žå¿…é ˆåŒ…å« {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS} 權é™ã€‚ </p> diff --git a/docs/html-intl/intl/zh-tw/guide/components/processes-and-threads.jd b/docs/html-intl/intl/zh-tw/guide/components/processes-and-threads.jd index 74dbb8ebb3f1..56027ceb88a3 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/processes-and-threads.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/processes-and-threads.jd @@ -49,7 +49,7 @@ page.tags=生命週期ã€èƒŒæ™¯ <receiver>}</a> å’Œ <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}</a> — çš„å®£ç¤ºèªªæ˜Žé …ç›®éƒ½æ”¯æ´ {@code android:process} å±¬æ€§ï¼Œé€™é …å±¬æ€§èƒ½æŒ‡å®šå…ƒä»¶æ‡‰åœ¨å“ªå€‹è™•ç†ç¨‹åºåŸ·è¡Œã€‚ 您å¯ä»¥è¨å®šæ¤å±¬æ€§è®“æ¯å€‹å…ƒä»¶éƒ½ä»¥è‡ªå·±çš„處ç†ç¨‹åºåŸ·è¡Œï¼Œæˆ–åªè®“ç•¶ä¸çš„部分元件共用åŒä¸€è™•ç†ç¨‹åºã€‚ -您也å¯ä»¥è¨å®š +您也å¯ä»¥è¨å®š {@code android:process},讓ä¸åŒæ‡‰ç”¨ç¨‹å¼çš„元件以相åŒçš„處ç†ç¨‹åºåŸ·è¡Œï¼Œåªè¦é€™äº›æ‡‰ç”¨ç¨‹å¼åˆ†äº«ç›¸åŒçš„ Linux 使用者 ID 並以相åŒçš„æ†‘è‰ç°½ç½²ã€‚ </p> @@ -142,7 +142,7 @@ android.content.Context#startService startService()} 方法啟動的æœå‹™çš„處 </li> <li><b>背景處ç†ç¨‹åº</b> - <p>這種處ç†ç¨‹åºæœƒä¿ç•™ä½¿ç”¨è€…ç›®å‰çœ‹ä¸è¦‹çš„ Activity (å·²å‘¼å« Activity çš„ + <p>這種處ç†ç¨‹åºæœƒä¿ç•™ä½¿ç”¨è€…ç›®å‰çœ‹ä¸è¦‹çš„ Activity (å·²å‘¼å« Activity çš„ {@link android.app.Activity#onStop onStop()} 方法)。這些處ç†ç¨‹åºæœƒé–“接影響使用者體驗,且系統能隨時將其終æ¢ï¼Œè—‰æ¤å›žæ”¶è¨˜æ†¶é«”以供剿™¯ã€å¯è¦‹æˆ–æœå‹™è™•ç†ç¨‹åºä½¿ç”¨ã€‚ @@ -319,7 +319,7 @@ private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } - + /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { diff --git a/docs/html-intl/intl/zh-tw/guide/components/recents.jd b/docs/html-intl/intl/zh-tw/guide/components/recents.jd index d56c12c0e87b..5ac0e2625bef 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/recents.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/recents.jd @@ -181,7 +181,7 @@ protected void onNewIntent(Intent intent) { </dl> <p class="note"><strong>注æ„:</strong>å¦‚æžœå€¼ä¸æ˜¯ {@code none} 與 {@code never},則 Activity å¿…é ˆä½¿ç”¨ {@code launchMode="standard"} 定義。 -如果沒有指定æ¤å±¬æ€§ï¼Œå‰‡æœƒä½¿ç”¨ +如果沒有指定æ¤å±¬æ€§ï¼Œå‰‡æœƒä½¿ç”¨ {@code documentLaunchMode="none"}。</p> <h2 id="removing">移除工作</h2> diff --git a/docs/html-intl/intl/zh-tw/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/zh-tw/guide/components/tasks-and-back-stack.jd index e23301d641bc..e3ce58f7770d 100644 --- a/docs/html-intl/intl/zh-tw/guide/components/tasks-and-back-stack.jd +++ b/docs/html-intl/intl/zh-tw/guide/components/tasks-and-back-stack.jd @@ -440,13 +440,13 @@ android.app.Activity#startActivity startActivity()} çš„æ„圖ä¸åŒ…嫿——標,ä <p>在兩種情æ³ä¸‹æœƒç”¨åˆ°è¦ªå’Œæ€§ï¼š</p> <ul> - <li>當啟動 Activity çš„æ„åœ–åŒ…å« + <li>當啟動 Activity çš„æ„åœ–åŒ…å« {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} 旗標。 <p>æ ¹æ“šé è¨ï¼Œæ–°çš„ Activity 會啟動至 Activity (å為 {@link android.app.Activity#startActivity startActivity()}) 的工作ä¸ã€‚ 系統會將它推入至與呼å«ç«¯ç›¸åŒçš„è¿”å›žå †ç–Šã€‚ -ä¸éŽï¼Œå¦‚果傳é€è‡³ +ä¸éŽï¼Œå¦‚果傳é€è‡³ {@link android.app.Activity#startActivity startActivity()} çš„æ„åœ–åŒ…å« {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} 旗標,則系統會找尋ä¸åŒçš„工作來放置新的 Activity。 這通常是新工作。 @@ -455,7 +455,7 @@ android.app.Activity#startActivity startActivity()} çš„æ„圖ä¸åŒ…嫿——標,ä <p>å¦‚æžœæ¤æ——標導致 Activity 開始新的工作,而使用者按 [首é ] æŒ‰éˆ•é›¢é–‹å®ƒï¼Œå¿…é ˆè¦æœ‰æ–¹æ³•å¯ä»¥è®“使用者回來ç€è¦½é€™å€‹å·¥ä½œã€‚<em></em> -有些實體 (例如,通知管ç†å“¡) 總是從外部工作開始 Activity,從來ä¸ä½¿ç”¨è‡ªå·±çš„å·¥ä½œï¼Œå› æ¤ä»–們都會將 {@code FLAG_ACTIVITY_NEW_TASK} 放入傳é€åˆ° +有些實體 (例如,通知管ç†å“¡) 總是從外部工作開始 Activity,從來ä¸ä½¿ç”¨è‡ªå·±çš„å·¥ä½œï¼Œå› æ¤ä»–們都會將 {@code FLAG_ACTIVITY_NEW_TASK} 放入傳é€åˆ° {@link android.app.Activity#startActivity startActivity()} çš„æ„圖。 如果您的 Activity å¯ä»¥ç”±å¤–部實體呼å«ä¸”å¯èƒ½ä½¿ç”¨æ¤æ——æ¨™ï¼Œè¨˜å¾—è¦æä¾›ä½¿ç”¨è€…ç¨ç«‹çš„æ–¹æ³•回到啟動的工作,例如,é€éŽå•Ÿå‹•組件圖示 (å·¥ä½œçš„æ ¹ Activity 有一個 {@link android.content.Intent#CATEGORY_LAUNCHER} æ„圖篩é¸å™¨ï¼›è«‹åƒé–±ä¸‹æ–¹çš„<a href="#Starting">開始工作</a>)。 @@ -505,7 +505,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetain href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt> <dd>å¦‚æžœé€™é …å±¬æ€§åœ¨å·¥ä½œçš„æ ¹ Activity ä¸è¨ç‚º {@code "true"},則剛æè¿°çš„é è¨è¡Œç‚ºä¸æœƒç™¼ç”Ÿã€‚ å³ä½¿éŽäº†å¾ˆé•·çš„一段時間,工作ä»ç„¶æœƒåœ¨å †ç–Šä¿ç•™æ‰€æœ‰çš„ Activity。 -æ›å¥è©±èªªï¼Œå®ƒèˆ‡ +æ›å¥è©±èªªï¼Œå®ƒèˆ‡ <a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> {@code alwaysRetainTaskState}</a> 相å。å³ä¾¿ä½¿ç”¨è€…åªé›¢é–‹å·¥ä½œä¸€å°æ®µæ™‚間,使用者還是會回到工作的起始狀態。 </dd> @@ -526,8 +526,8 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask <h3 id="Starting">開始工作</h3> -<p>您å¯ä»¥çµ¦äºˆ Activity 一個æ„圖篩é¸å™¨ï¼Œå°‡ -{@code "android.intent.action.MAIN"} è¨å®šç‚ºæŒ‡å®šçš„動作, +<p>您å¯ä»¥çµ¦äºˆ Activity 一個æ„圖篩é¸å™¨ï¼Œå°‡ +{@code "android.intent.action.MAIN"} è¨å®šç‚ºæŒ‡å®šçš„動作, {@code "android.intent.category.LAUNCHER"} è¨å®šç‚ºæŒ‡å®šçš„類別,以便將該 Activity è¨å®šç‚ºå·¥ä½œçš„進入點。 例如:</p> @@ -547,7 +547,7 @@ href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTask </p> <p>ç¬¬äºŒé …åŠŸèƒ½å¾ˆé‡è¦ï¼šä½¿ç”¨è€…å¿…é ˆèƒ½å¤ åœ¨é›¢é–‹å·¥ä½œå¾Œï¼Œä½¿ç”¨æ¤ Activity 啟動組件回到æ¤å·¥ä½œã€‚ -ç”±æ–¼é€™å€‹åŽŸå› ï¼Œå…©å€‹å°‡ Activity 標示為一律啟動工作的<a href="#LaunchModes">啟動模å¼</a> {@code "singleTask"} å’Œ +ç”±æ–¼é€™å€‹åŽŸå› ï¼Œå…©å€‹å°‡ Activity 標示為一律啟動工作的<a href="#LaunchModes">啟動模å¼</a> {@code "singleTask"} å’Œ {@code "singleInstance"},應åªèƒ½åœ¨ Activity 有 {@link android.content.Intent#ACTION_MAIN} å’Œ {@link android.content.Intent#CATEGORY_LAUNCHER} 篩é¸å™¨æ™‚æ‰èƒ½ä½¿ç”¨ã€‚ diff --git a/docs/html-intl/intl/zh-tw/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/zh-tw/guide/topics/manifest/manifest-intro.jd index 5e42e37d91fc..77a2b80d49f4 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/manifest/manifest-intro.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/manifest/manifest-intro.jd @@ -33,15 +33,15 @@ page.title=應用程å¼å®£ç¤ºèªªæ˜Ž <li>æè¿°æ‡‰ç”¨ç¨‹å¼çš„元件 — çµ„æˆæ‡‰ç”¨ç¨‹å¼çš„ Activityã€æœå‹™ã€å»£æ’接收器和內容供應程å¼ã€‚ -為實作æ¯å€‹å…ƒä»¶çš„類別命å以åŠç™¼ä½ˆé¡žåˆ¥çš„功能 (例如,類別å¯è™•ç†çš„ {@link android.content.Intent +為實作æ¯å€‹å…ƒä»¶çš„類別命å以åŠç™¼ä½ˆé¡žåˆ¥çš„功能 (例如,類別å¯è™•ç†çš„ {@link android.content.Intent Intent} 訊æ¯)。 這些宣告å¯è®“ Android 系統çžè§£å…ƒä»¶ç‚ºä½•以åŠå¯åœ¨å“ªäº›æƒ…æ³ä¸‹å•Ÿå‹•。 </li> -<li>決定代管應用程å¼å…ƒä»¶çš„程åºã€‚</li> +<li>決定代管應用程å¼å…ƒä»¶çš„程åºã€‚</li> <li>宣告應用程å¼å¿…é ˆæ“æœ‰å“ªäº›æ¬Šé™ï¼Œæ‰èƒ½å˜å– API å—ä¿è·çš„部分以åŠèˆ‡å…¶ä»–應用程å¼äº’動。 -</li> +</li> <li>宣示說明亦å¯å®£å‘Šå…¶ä»–é …ç›®å¿…é ˆæ“æœ‰å“ªäº›æ¬Šé™ï¼Œæ‰èƒ½èˆ‡æ‡‰ç”¨ç¨‹å¼çš„元件互動。 </li> @@ -66,7 +66,7 @@ Intent} 訊æ¯)。 å¦‚è¦æŸ¥çœ‹ä»»ä¸€å…ƒç´ 的詳細資訊,åªè¦æŒ‰ä¸€ä¸‹åœ–表ä¸çš„å…ƒç´ å稱ã€åœ–è¡¨å¾Œæ–¹æŒ‰å—æ¯é †åºåˆ—å‡ºçš„å…ƒç´ æ¸…å–®ï¼Œæˆ–åœ¨ä»–è™•æåŠçš„ä»»ä½•å…ƒç´ å稱。 - + </p> <pre> @@ -128,7 +128,7 @@ Intent} 訊æ¯)。 <p> ä¸‹æ–¹æŒ‰å—æ¯é †åºåˆ—出å¯å‡ºç¾åœ¨å®£ç¤ºèªªæ˜Žæª”案ä¸çš„æ‰€æœ‰å…ƒç´ 。 åªæœ‰é€™äº›æ‰æ˜¯ç¬¦åˆè³‡æ ¼çš„å…ƒç´ ï¼Œæ‚¨ç„¡æ³•æ–°å¢žè‡ªå·±çš„å…ƒç´ æˆ–å±¬æ€§ã€‚ - + </p> <p style="margin-left: 2em"> @@ -158,7 +158,7 @@ Intent} 訊æ¯)。 </p> - + <h2 id="filec">檔案轉æ›</h2> @@ -185,7 +185,7 @@ Intent} 訊æ¯)。 <p> ç³»çµ±é€šå¸¸ä¸æœƒå°‡ä½æ–¼ç›¸åŒå±¤ç´šçš„å…ƒç´ æŽ’åºã€‚例如, <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> å’Œ +<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> å’Œ <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> å…ƒç´ èƒ½ä»¥ä»»ä½•é †åºæŽ’åˆ—çµ„åˆã€‚ ( <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> å…ƒç´ æ˜¯é€™é …è¦å‰‡çš„例外狀æ³ï¼š @@ -218,7 +218,7 @@ Intent} 訊æ¯)。 - + <p> 如果您一如往常定義元件類別 ({@link android.app.Activity}ã€{@link android.app.Service}〠@@ -244,7 +244,7 @@ Intent} 訊æ¯)。 <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> 屬性指定)。 -ä¸‹åˆ—çš„æŒ‡æ´¾çµæžœæœƒå’Œä¸Šè¿°ç›¸åŒï¼š +ä¸‹åˆ—çš„æŒ‡æ´¾çµæžœæœƒå’Œä¸Šè¿°ç›¸åŒï¼š </p> <pre><manifest package="com.example.project" . . . > @@ -375,7 +375,7 @@ Android 會找出é©ç•¶çš„元件來回應æ„圖ã€è¦–需è¦å•Ÿå‹•元件的新執 <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> å…ƒç´ é è¨å€¼ã€‚ -如果 +如果 <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> å…ƒç´ è¨æœ‰ä¸€å€‹æ¨™ç±¤ï¼Œä½† Activity 與其æ„圖篩é¸å™¨ä¸¦æœªè¨å®šè©²æ¨™ç±¤ï¼Œç³»çµ±æœƒå°‡æ‡‰ç”¨ç¨‹å¼æ¨™ç±¤è¦–為 Activity å’Œæ„圖篩é¸å™¨çš„æ¨™ç±¤ã€‚ @@ -399,7 +399,7 @@ Android 會找出é©ç•¶çš„元件來回應æ„圖ã€è¦–需è¦å•Ÿå‹•元件的新執 <p> 單一 <i>權é™</i> æ˜¯æŒ‡ä¸€é …é™åˆ¶ï¼Œå¯é™åˆ¶æŸéƒ¨åˆ†ç¨‹å¼ç¢¼æˆ–è£ç½®ä¸Šè³‡æ–™çš„å˜å–權。 ç³»çµ±æœƒå¼·åˆ¶å¯¦æ–½é€™é …é™åˆ¶ï¼Œä»¥ä¿è·æœƒéåˆ°èª¤ç”¨è€Œæ‰æ›²æˆ–æå®³ä½¿ç”¨è€…體驗的é‡è¦è³‡æ–™èˆ‡ç¨‹å¼ç¢¼ã€‚ - + </p> <p> @@ -427,12 +427,12 @@ Android 會找出é©ç•¶çš„元件來回應æ„圖ã€è¦–需è¦å•Ÿå‹•元件的新執 如果授予權é™ï¼Œè©²æ‡‰ç”¨ç¨‹å¼å°±èƒ½å¤ 使用å—ä¿è·çš„功能。 å¦‚æžœä¸æŽˆäºˆæ¬Šé™ï¼Œå˜å–ç›¸é—œåŠŸèƒ½çš„å˜—è©¦å°±æœƒå¤±æ•—ï¼Œä½†ä½¿ç”¨è€…ä¸æœƒæ”¶åˆ°ä»»ä½•通知。 - + </p> <p> 應用程å¼ä¹Ÿèƒ½åˆ©ç”¨æ¬Šé™ä¾†ä¿è·è‡ªå·±çš„元件 (Activityã€æœå‹™ã€å»£æ’接收器和內容供應程å¼)。 -它能使用 Android å®šç¾©çš„ä»»ä½•æ¬Šé™ (列於 +它能使用 Android å®šç¾©çš„ä»»ä½•æ¬Šé™ (列於 {@link android.Manifest.permission android.Manifest.permission}) 或其他應用程å¼å®£å‘Šçš„任何權é™ã€‚ æ¤å¤–,應用程å¼ä¹Ÿèƒ½è‡ªè¡Œå®šç¾©æ¬Šé™ã€‚æ–°çš„æ¬Šé™æ˜¯ä»¥ @@ -458,13 +458,13 @@ Android 會找出é©ç•¶çš„元件來回應æ„圖ã€è¦–需è¦å•Ÿå‹•元件的新執 <p> 請注æ„,在本範例ä¸ï¼Œä¸åªä»¥ -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> å…ƒç´ å®£å‘Š {@code DEBIT_ACCT} 權é™ï¼Œé‚„使用 +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> å…ƒç´ å®£å‘Š {@code DEBIT_ACCT} 權é™ï¼Œé‚„使用 <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> å…ƒç´ ä¾†è¦æ±‚ä½¿ç”¨æ¤æ¬Šé™ã€‚ å³ä½¿ä¿è·æ˜¯ç”±æ‡‰ç”¨ç¨‹å¼æœ¬èº«å¼·åˆ¶æ–½è¡Œï¼Œé‚„æ˜¯å¿…é ˆè¦æ±‚使用該權é™ï¼Œæ‡‰ç”¨ç¨‹å¼çš„其他元件æ‰èƒ½å•Ÿå‹•å—ä¿è·çš„ Activity。 - + </p> <p> @@ -474,7 +474,7 @@ Android 會找出é©ç•¶çš„元件來回應æ„圖ã€è¦–需è¦å•Ÿå‹•元件的新執 ä¸éŽï¼Œé‚„æ˜¯å¿…é ˆåˆ©ç”¨ -<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> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/zh-tw/guide/topics/providers/calendar-provider.jd index 42434e4b30e8..682e82de8071 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/providers/calendar-provider.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ <li><a href="#intent-view">使用æ„圖檢視日曆資料</a></li> </ol> </li> - + <li><a href="#sync-adapter">åŒæ¥é…接器</a></li> </ol> @@ -86,7 +86,7 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ </p> -<p>æ¯å€‹å…§å®¹ä¾›æ‡‰ç¨‹å¼éƒ½æœƒå…¬é–‹ä¸€å€‹å…¬ç”¨ URI (包è£ç‚º +<p>æ¯å€‹å…§å®¹ä¾›æ‡‰ç¨‹å¼éƒ½æœƒå…¬é–‹ä¸€å€‹å…¬ç”¨ URI (包è£ç‚º {@link android.net.Uri} 物件),å¯å”¯ä¸€è˜åˆ¥å…¶è³‡æ–™é›†ã€‚ 控制多個資料集 (å¤šå€‹è¡¨æ ¼) çš„å…§å®¹ä¾›æ‡‰ç¨‹å¼æœƒç‚ºæ¯å€‹è³‡æ–™é›†å…¬é–‹å€‹åˆ¥çš„ URI。 ä¾›æ‡‰ç¨‹å¼æ‰€æœ‰ URI 的開é å—串為「content://ã€ã€‚ @@ -113,14 +113,14 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - + <td>æ¤è¡¨æ ¼å…§å«æ—¥æ›†ç‰¹å®šçš„資訊。 æ¤è¡¨æ ¼ä¸çš„æ¯ä¸€åˆ—åŒ…å«å–®ä¸€æ—¥æ›†çš„詳細資訊,例如å稱ã€è‰²å½©ã€åŒæ¥è³‡è¨Šç‰ç‰ã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>æ¤è¡¨æ ¼å…§å«æ´»å‹•特定的資訊。 æ¤è¡¨æ ¼ä¸çš„æ¯ä¸€åˆ—åŒ…å«å–®ä¸€æ´»å‹•的資訊 — 例如,活動標題ã€ä½ç½®ã€é–‹å§‹æ™‚é–“ã€çµæŸæ™‚é–“ç‰ç‰ã€‚ @@ -132,7 +132,7 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>æ¤è¡¨æ ¼å…§å«æ´»å‹•æ¯æ¬¡ç™¼ç”Ÿçš„é–‹å§‹å’ŒçµæŸæ™‚間。 æ¤è¡¨æ ¼çš„æ¯ä¸€åˆ—ä»£è¡¨å–®ä¸€æ´»å‹•ç™¼ç”Ÿã€‚ å–®æ¬¡æ´»å‹•åŸ·è¡Œå€‹é«”å’Œæ´»å‹•çš„å°æ‡‰ç‚º 1:1。 @@ -141,7 +141,7 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>æ¤è¡¨æ ¼å…§å«æ´»å‹•åƒèˆ‡è€… (邀請å°è±¡) 的資訊。 æ¯ä¸€åˆ—代表一個活動的單一邀請å°è±¡ã€‚ 其䏿œƒæŒ‡å‡ºé‚€è«‹å°è±¡é¡žåž‹ï¼Œä»¥åŠé‚€è«‹å°è±¡æ˜¯å¦å‡ºå¸è©²æ´»å‹•的回應。 @@ -149,17 +149,17 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>æ¤è¡¨æ ¼å…§å«è¦ç¤º/通知資訊。 æ¯ä¸€åˆ—代表一個活動的單一è¦ç¤ºã€‚一個活動å¯ä»¥è¨å®šå¤šå€‹æé†’。 -æ¯å€‹æ´»å‹•çš„æœ€å¤§æ•¸é‡æé†’æŒ‡å®šæ–¼ +æ¯å€‹æ´»å‹•çš„æœ€å¤§æ•¸é‡æé†’æŒ‡å®šæ–¼ {@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},æ¤é …æ˜¯ç”±æ“æœ‰æŒ‡å®šæ—¥æ›†çš„åŒæ¥é…接器所è¨å®šã€‚ æé†’æ˜¯ä»¥åˆ†é˜æ•¸æŒ‡å®šæ´»å‹•發生å‰çš„æ™‚間,而且有一個方法用於決定通知使用者的方å¼ã€‚ </td> </tr> - + </table> <p>「日曆供應程å¼ã€API çš„è¨è¨ˆå…·å‚™å½ˆæ€§ä¸”功能強大。æä¾›è‰¯å¥½çš„使用者體驗,以åŠä¿è·æ—¥æ›†åŠå…¶è³‡æ–™çš„完整性,兩者一樣é‡è¦ã€‚ @@ -178,7 +178,7 @@ page.title=æ—¥æ›†ä¾›æ‡‰ç¨‹å¼ <li><strong>åŒæ¥é…接器。</strong>åŒæ¥é…接器會將使用者è£ç½®çš„æ—¥æ›†è³‡æ–™èˆ‡å¦ä¸€å°ä¼ºæœå™¨æˆ–資料來æºé€²è¡ŒåŒæ¥ã€‚ -在 +在 {@link android.provider.CalendarContract.Calendars} å’Œ {@link android.provider.CalendarContract.Events} è¡¨æ ¼ä¸ï¼Œæœƒä¿ç•™æŸäº›æ¬„è®“åŒæ¥é…接器使用。供應程å¼å’Œæ‡‰ç”¨ç¨‹å¼ä¸æ‡‰åŠ ä»¥ä¿®æ”¹ã€‚ @@ -229,7 +229,7 @@ android.Manifest.permission#READ_CALENDAR} 權é™ã€‚å®£ç¤ºèªªæ˜Žæª”æ¡ˆå¿…é ˆåŒ…å </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>指出是å¦é¸æ“‡è¦é¡¯ç¤ºæ—¥æ›†çš„布林值。值 0 è¡¨ç¤ºèˆ‡æ¤æ—¥æ›†é—œè¯çš„æ´»å‹•䏿‡‰é¡¯ç¤ºã€‚ 值 1 è¡¨ç¤ºèˆ‡æ¤æ—¥æ›†é—œè¯çš„æ´»å‹•應顯示。 @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances} è¡¨æ ¼ä¸åˆ—的產生。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>æŒ‡å‡ºæ—¥æ›†æ˜¯å¦æ‡‰åŒæ¥ï¼Œä¸¦ä¸”讓日曆的活動儲å˜åœ¨è£ç½®ä¸Šçš„布林值。 值 0 表示ä¸åŒæ¥æ¤æ—¥æ›†ï¼Œä¸¦ä¸”ä¸è¦åœ¨è£ç½®ä¸Šå„²å˜å…¶æ´»å‹•。 值 1 è¡¨ç¤ºåŒæ¥æ¤æ—¥æ›†çš„æ´»å‹•,並且在è£ç½®ä¸Šå„²å˜å…¶æ´»å‹•。 @@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>為什麼一定è¦åŒ…å« ACCOUNT_TYPE? </h3> <p>如果您è¦é‡å° {@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME -Calendars.ACCOUNT_NAME} é€²è¡ŒæŸ¥è©¢ï¼Œä¹Ÿå¿…é ˆåœ¨é¸é …ä¸åŒ…å« +Calendars.ACCOUNT_NAME} é€²è¡ŒæŸ¥è©¢ï¼Œä¹Ÿå¿…é ˆåœ¨é¸é …ä¸åŒ…å« {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE}。 é€™æ˜¯å› ç‚ºåªæœ‰åŒæ™‚æä¾›æŒ‡å®šå¸³æˆ¶çš„ <code>ACCOUNT_NAME</code> å’Œ <code>ACCOUNT_TYPE</code> 情æ³ä¸‹ï¼Œæ¤å¸³æˆ¶æ‰æœƒè¦–為唯一的。 @@ -289,7 +289,7 @@ Calendars.ACCOUNT_NAME} é€²è¡ŒæŸ¥è©¢ï¼Œä¹Ÿå¿…é ˆåœ¨é¸é …ä¸åŒ…å« android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}。{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} å¸³æˆ¶ä¸æœƒé€²è¡ŒåŒæ¥ã€‚ -</p> </div> </div> +</p> </div> </div> <p> 在範例的下一個部分,您將建構查詢。é¸é …會指定查詢的æ¢ä»¶ã€‚ @@ -308,49 +308,49 @@ android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} å¸³æˆ¶ä¸æœƒé€²è¡ŒåŒæ¥ã€ <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>ä¸‹ä¸€ç¯€æœƒä½¿ç”¨æ¸¸æ¨™é€æ¥æª¢è¦–çµæžœé›†ã€‚它會使用範例一開始è¨å®šå¥½çš„常數,傳回æ¯å€‹æ¬„ä½çš„值。 </p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">修改日曆</h3> <p>如è¦åŸ·è¡Œæ—¥æ›†çš„æ›´æ–°ï¼Œæ‚¨å¯ä»¥æä¾›æ—¥æ›†çš„ {@link -android.provider.BaseColumns#_ID},å¯ä»¥æ˜¯ URI çš„é™„åŠ ID +android.provider.BaseColumns#_ID},å¯ä»¥æ˜¯ URI çš„é™„åŠ ID ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) æˆ–ä»¥ç¬¬ä¸€å€‹é¸æ“‡é …ç›®æ–¹å¼æä¾›ã€‚ -é¸é …çš„é–‹é æ‡‰è©²æ˜¯ <code>"_id=?"</code>,而且第一個 +é¸é …çš„é–‹é æ‡‰è©²æ˜¯ <code>"_id=?"</code>,而且第一個 <code>selectionArg</code> 應該是日曆的 {@link android.provider.BaseColumns#_ID}。 -您也å¯ä»¥é€éŽå°‡ ID 編碼在 URI ä¸ï¼Œä»¥åŸ·è¡Œæ›´æ–°ã€‚æ¤ç¯„例會使用 +您也å¯ä»¥é€éŽå°‡ ID 編碼在 URI ä¸ï¼Œä»¥åŸ·è¡Œæ›´æ–°ã€‚æ¤ç¯„例會使用 ({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) æ–¹å¼è®Šæ›´æ—¥æ›†çš„顯示å稱: @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events} åƒç…§ã€‚</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>活動的æŒçºŒæœŸé–“,以 <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a> æ ¼å¼è¡¨ç¤ºã€‚例如,值 <code>"PT1H"</code> 表示活動æŒçºŒä¸€å°æ™‚,而值 <code>"P2W"</code> 指出æŒçºŒ 2 週。 @@ -444,24 +444,24 @@ android.provider.CalendarContract.Events} åƒç…§ã€‚</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>值 1 è¡¨ç¤ºæ¤æ´»å‹•éœ€è¦æ•´å¤©ï¼Œå¦‚åŒç•¶åœ°æ™‚倿‰€å®šç¾©ã€‚ 值 0 表示定期活動,會在一天ä¸çš„ä»»ä½•æ™‚é–“é–‹å§‹å’ŒçµæŸã€‚ </td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>活動的週期è¦å‰‡ã€‚例如,<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>。 您å¯ä»¥åœ¨<a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">這裡</a>查看更多範例。 </td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> <td>活動é‡è¤‡ç™¼ç”Ÿçš„æ—¥æœŸã€‚您通常會將 {@link android.provider.CalendarContract.EventsColumns#RDATE} å’Œ {@link android.provider.CalendarContract.EventsColumns#RRULE} 一起使用,以定義週期性活動的彙總集åˆã€‚ @@ -470,13 +470,13 @@ android.provider.CalendarContract.Events} åƒç…§ã€‚</p> 如需更多討論,請åƒé–± <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 è¦æ ¼</a>。</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - + <td>活動è¦è¦–為忙碌或有空 (å¯ä»¥å®‰æŽ’其他活動) 的時間。 </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -494,7 +494,7 @@ android.provider.CalendarContract.Events} åƒç…§ã€‚</p> <h3 id="add-event">新增活動</h3> -<p>æ‚¨çš„æ‡‰ç”¨ç¨‹å¼æ’å…¥æ–°æ´»å‹•æ™‚ï¼Œæˆ‘å€‘å»ºè°æ‚¨ä½¿ç”¨ +<p>æ‚¨çš„æ‡‰ç”¨ç¨‹å¼æ’å…¥æ–°æ´»å‹•æ™‚ï¼Œæˆ‘å€‘å»ºè°æ‚¨ä½¿ç”¨ {@link android.content.Intent#ACTION_INSERT INSERT} æ„圖 (如åŒ<a href="#intent-insert">使用æ„圖æ’入活動</a>所述)。ä¸éŽï¼Œå¦‚果需è¦ï¼Œæ‚¨ä¹Ÿå¯ä»¥ç›´æŽ¥æ’入活動。 本節將æè¿°å¦‚何執行æ¤å‹•作。 </p> @@ -514,11 +514,11 @@ java.util.TimeZone#getAvailableIDs()}。 android.content.Intent#ACTION_INSERT INSERT} æ„圖 (如åŒ<a href="#intent-insert">使用æ„圖æ’入活動</a> — 所æè¿°çš„æ¡ˆä¾‹) æ’入活動,則ä¸é©ç”¨æ¤è¦å‰‡ï¼Œå°‡æœƒæä¾›é è¨æ™‚å€ã€‚ </li> - + <li>å°æ–¼éžé€±æœŸæ€§æ´»å‹•ï¼Œæ‚¨å¿…é ˆåŒ…æ‹¬ {@link android.provider.CalendarContract.EventsColumns#DTEND}。 </li> - - + + <li>å°æ–¼é€±æœŸæ€§æ´»å‹•ï¼Œæ‚¨å¿…é ˆåŒ…æ‹¬ {@link android.provider.CalendarContract.EventsColumns#DURATION}ï¼Œä»¥åŠ {@link android.provider.CalendarContract.EventsColumns#RRULE} 或 {@link @@ -528,7 +528,7 @@ android.provider.CalendarContract.EventsColumns#RRULE} æé… {@link android.pro </li> - + </ul> <p>以下是æ’入活動的範例。為了簡化,會在 UI 執行緒ä¸åŸ·è¡Œæ¤ç¤ºç¯„。 @@ -539,8 +539,8 @@ android.provider.CalendarContract.EventsColumns#RRULE} æé… {@link android.pro <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -561,7 +561,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -581,11 +581,11 @@ long eventID = Long.parseLong(uri.getLastPathSegment()); android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) æˆ–ä»¥ç¬¬ä¸€å€‹é¸æ“‡é …ç›®æ–¹å¼æä¾›ã€‚ -é¸é …çš„é–‹é æ‡‰è©²æ˜¯ <code>"_id=?"</code>,而且第一個 +é¸é …çš„é–‹é æ‡‰è©²æ˜¯ <code>"_id=?"</code>,而且第一個 <code>selectionArg</code> 應該是活動的 <code>_ID</code>。 您也å¯ä»¥ä½¿ç”¨ä¸å« ID çš„é¸é …進行更新。以下是更新活動的範例。 -它使用 +它使用 {@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()} æ–¹å¼è®Šæ›´æ´»å‹•的標題: </p> @@ -598,7 +598,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -625,19 +625,19 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">åƒèˆ‡è€…è¡¨æ ¼</h2> <p>{@link android.provider.CalendarContract.Attendees} è¡¨æ ¼çš„æ¯ä¸€åˆ—都代表活動的單一åƒèˆ‡è€…或邀請å°è±¡ã€‚ -å‘¼å« +å‘¼å« {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} 會傳回指定 {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} 活動的åƒèˆ‡è€…清單。 æ¤ {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} å¿…é ˆç¬¦åˆç‰¹å®šæ´»å‹•çš„ {@link android.provider.BaseColumns#_ID}。 -</p> +</p> <p>下表列出å¯å¯«å…¥çš„æ¬„ä½ã€‚ æ’入新的åƒèˆ‡è€…æ™‚ï¼Œæ‚¨å¿…é ˆåŒ…æ‹¬ <code>ATTENDEE_NAME</code> ä»¥å¤–çš„æ‰€æœ‰é …ç›®ã€‚ @@ -718,8 +718,8 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">æé†’è¡¨æ ¼</h2> <p>{@link android.provider.CalendarContract.Reminders} è¡¨æ ¼çš„æ¯ä¸€åˆ—都代表活動的單一æé†’。 -å‘¼å« -{@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()} 會傳回指定 {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} 活動的æé†’清單。 </p> @@ -727,7 +727,7 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <p>下表列出æé†’å¯å¯«å…¥çš„æ¬„ä½ã€‚æ’入新的æé†’æ™‚ï¼Œå¿…é ˆåŒ…æ‹¬æ‰€æœ‰é …ç›®ã€‚ 請注æ„ï¼ŒåŒæ¥é…接器會在 {@link android.provider.CalendarContract.Calendars} è¡¨æ ¼ä¸æŒ‡å‡ºåŒæ¥é…接器支æ´çš„æé†’類型。 -如需詳細資料,請åƒé–± +如需詳細資料,請åƒé–± {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}。 </p> @@ -779,8 +779,8 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> åŸ·è¡Œå€‹é«”è¡¨æ ¼ç„¡æ³•å¯«å…¥ï¼Œåƒ…ä¾›æŸ¥è©¢æ´»å‹•çš„ç™¼ç”Ÿã€‚ </p> -<p>下表列出您å¯ä»¥é‡å°åŸ·è¡Œå€‹é«”查詢的欄ä½ã€‚請注æ„ï¼Œæ™‚å€æ˜¯ç”± -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} å’Œ +<p>下表列出您å¯ä»¥é‡å°åŸ·è¡Œå€‹é«”查詢的欄ä½ã€‚請注æ„ï¼Œæ™‚å€æ˜¯ç”± +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} å’Œ {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES} 所定義。 </p> @@ -801,18 +801,18 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>åŸ·è¡Œå€‹é«”çš„å‡±æ’’æ›†çµæŸæ—¥ï¼Œèˆ‡ã€Œæ—¥æ›†ã€çš„æ™‚å€ç›¸é—œã€‚ - - + + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>åŸ·è¡Œå€‹é«”çš„çµæŸåˆ†é˜ï¼Œå¾žã€Œæ—¥æ›†ã€æ™‚å€çš„åˆå¤œé–‹å§‹è¨ˆç®—。 </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -820,16 +820,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>執行個體的凱撒曆開始日,與「日曆ã€çš„æ™‚å€ç›¸é—œã€‚ + <td>執行個體的凱撒曆開始日,與「日曆ã€çš„æ™‚å€ç›¸é—œã€‚ </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>執行個體的開始分é˜ï¼Œå¾žåˆå¤œé–‹å§‹è¨ˆç®—,與「日曆ã€çš„æ™‚å€ç›¸é—œã€‚ - + </td> - + </tr> </table> @@ -853,7 +853,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -868,7 +868,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -883,28 +883,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -922,9 +922,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - 您也å¯ä»¥ä½¿ç”¨ + 您也å¯ä»¥ä½¿ç”¨ {@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI} åƒç…§ URIã€‚å¦‚éœ€ä½¿ç”¨æ¤æ„圖的範例,請åƒé–±<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">使用æ„圖檢視日曆資料</a>。 - + </td> <td>開啟日曆到 <code><ms_since_epoch></code> 指定的時間。</td> @@ -935,11 +935,11 @@ while (cur.moveToNext()) { </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - 您也å¯ä»¥ä½¿ç”¨ + + 您也å¯ä»¥ä½¿ç”¨ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} åƒç…§ URIã€‚å¦‚éœ€ä½¿ç”¨æ¤æ„圖的範例,請åƒé–±<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">使用æ„圖檢視日曆資料</a>。 - + </td> <td>檢視 <code><event_id></code> 指定的活動。</td> @@ -952,12 +952,12 @@ while (cur.moveToNext()) { <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - 您也å¯ä»¥ä½¿ç”¨ + + 您也å¯ä»¥ä½¿ç”¨ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} åƒç…§ URIã€‚å¦‚éœ€ä½¿ç”¨æ¤æ„圖的範例,請åƒé–±<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">使用æ„圖編輯活動</a>。 - - + + </td> <td>編輯 <code><event_id></code> 指定的活動。</td> @@ -972,11 +972,11 @@ while (cur.moveToNext()) { <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - 您也å¯ä»¥ä½¿ç”¨ + + 您也å¯ä»¥ä½¿ç”¨ {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} åƒç…§ URIã€‚å¦‚éœ€ä½¿ç”¨æ¤æ„圖的範例,請åƒé–±<a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">使用æ„圖æ’入活動</a>。 - + </td> <td>建立活動。</td> @@ -996,7 +996,7 @@ while (cur.moveToNext()) { <td>活動的å稱。</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>活動開始時間,以紀元元年 1 月 1 日零時起算經éŽçš„æ¯«ç§’數為單ä½ã€‚</td> @@ -1004,25 +1004,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>æ´»å‹•çµæŸæ™‚間,以紀元元年 1 月 1 日零時起算經éŽçš„æ¯«ç§’數為單ä½ã€‚</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - - <td>指出活動為整天的布林值。值å¯ä»¥æ˜¯ + + <td>指出活動為整天的布林值。值å¯ä»¥æ˜¯ <code>true</code> 或 <code>false</code>。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>活動的地點。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>活動æè¿°ã€‚</td> </tr> <tr> @@ -1039,16 +1039,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>活動為ç§äººæˆ–公開性質。</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>活動è¦è¦–為忙碌或有空 (å¯ä»¥å®‰æŽ’其他活動) 的時間。</td> - -</table> + +</table> <p>以下å„節說明如何使用這些æ„圖。</p> @@ -1059,14 +1059,14 @@ android.Manifest.permission#WRITE_CALENDAR} 權é™åŒ…括在其<a href="#manifest </p> - + <p>ä½¿ç”¨è€…åŸ·è¡ŒæŽ¡ç”¨æ¤æ–¹å¼çš„æ‡‰ç”¨ç¨‹å¼æ™‚ï¼Œæ¤æ‡‰ç”¨ç¨‹å¼æœƒå°‡ä½¿ç”¨è€… 傳é€åˆ°ã€Œæ—¥æ›†ã€ä»¥å®Œæˆæ–°å¢žæ´»å‹•çš„æ“作。{@link android.content.Intent#ACTION_INSERT INSERT} æ„圖會使用é¡å¤–的欄ä½å°‡ã€Œæ—¥æ›†ã€ä¸æ´»å‹•的詳細資訊,é 先填入表單。 然後,使用者å¯ä»¥å–消活動ã€è¦–需è¦ç·¨è¼¯è¡¨å–®æˆ–將活動儲å˜åˆ°å…¶æ—¥æ›†ã€‚ </p> - + <p>以下的程å¼ç¢¼ç‰‡æ®µæœƒåœ¨ 2012 å¹´ 1 月 19 æ—¥å®‰æŽ’æ´»å‹•ï¼Œæ¤æ´»å‹•çš„æœŸé–“æ˜¯å¾žä¸Šåˆ 7:30 åˆ°ä¸Šåˆ 8:30。 @@ -1075,7 +1075,7 @@ android.content.Intent#ACTION_INSERT INSERT} æ„圖會使用é¡å¤–的欄ä½å°‡ã€ <ul> <li>它指定 {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} 作為 URI。 </li> - + <li>它使用 {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} å’Œ {@link @@ -1083,10 +1083,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} é¡å¤–欄ä½ï¼Œå°‡æ´»å‹•的時間é 先填入表單。 é€™äº›æ™‚é–“å€¼å¿…é ˆä»¥è‡ªç´€å…ƒå…ƒå¹´ 1 月 1 日零時起算經éŽçš„ UTC 毫秒數為單ä½ã€‚ </li> - + <li>它使用 {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} é¡å¤–æ¬„ä½æä¾›é€—è™Ÿåˆ†éš”çš„å—邀者清單 (以電åéƒµä»¶åœ°å€æŒ‡å®š)。 </li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1158,16 +1158,16 @@ startActivity(intent); <ul> <li>åŒæ¥é…接器需è¦é€éŽå°‡ {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} è¨å®šç‚º <code>true</code>ï¼Œä»¥æŒ‡å‡ºé€™æ˜¯åŒæ¥é…接器。</li> - - + + <li>åŒæ¥é…接器需è¦åœ¨ URI 䏿供 {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} å’Œ {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} ä½œç‚ºæŸ¥è©¢åƒæ•¸ã€‚ </li> - + <li>åŒæ¥é…æŽ¥å™¨èˆ‡æ‡‰ç”¨ç¨‹å¼æˆ–å°å·¥å…·ç›¸æ¯”,有更多欄的寫入權é™ã€‚ 例如,應用程å¼åªèƒ½ä¿®æ”¹æ—¥æ›†çš„一些特性,例如å稱ã€é¡¯ç¤ºå稱ã€èƒ½è¦‹åº¦è¨å®šï¼Œä»¥åŠæ—¥æ›†æ˜¯å¦åŒæ¥ã€‚ -ç›¸è¼ƒä¹‹ä¸‹ï¼ŒåŒæ¥é…接器ä¸åªèƒ½å˜å–這些欄,還å¯ä»¥å˜å–å¾ˆå¤šå…¶ä»–æ¬„ï¼Œä¾‹å¦‚æ—¥æ›†è‰²å½©ã€æ™‚å€ã€å˜å–級別ã€ä½ç½®ç‰ç‰ã€‚ç„¶è€Œï¼ŒåŒæ¥é…接器å—陿–¼æ‰€æŒ‡å®šçš„ <code>ACCOUNT_NAME</code> å’Œ +ç›¸è¼ƒä¹‹ä¸‹ï¼ŒåŒæ¥é…接器ä¸åªèƒ½å˜å–這些欄,還å¯ä»¥å˜å–å¾ˆå¤šå…¶ä»–æ¬„ï¼Œä¾‹å¦‚æ—¥æ›†è‰²å½©ã€æ™‚å€ã€å˜å–級別ã€ä½ç½®ç‰ç‰ã€‚ç„¶è€Œï¼ŒåŒæ¥é…接器å—陿–¼æ‰€æŒ‡å®šçš„ <code>ACCOUNT_NAME</code> å’Œ <code>ACCOUNT_TYPE</code>。 </li> </ul> @@ -1180,5 +1180,5 @@ android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} ä½œç‚ºæŸ¥è©¢åƒæ•¸ã€ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>å¦‚éœ€å¯¦ä½œåŒæ¥é…接器的範例 (並éžèˆ‡ã€Œæ—¥æ›†ã€ç‰¹åˆ¥ç›¸é—œ),請åƒé–± +<p>å¦‚éœ€å¯¦ä½œåŒæ¥é…接器的範例 (並éžèˆ‡ã€Œæ—¥æ›†ã€ç‰¹åˆ¥ç›¸é—œ),請åƒé–± <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>。 diff --git a/docs/html-intl/intl/zh-tw/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/zh-tw/guide/topics/providers/contacts-provider.jd index b5f888012eed..2bcc3e62b3d3 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/providers/contacts-provider.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/providers/contacts-provider.jd @@ -614,7 +614,7 @@ Email.CONTENT_ITEM_TYPE} (å…§å«ä½¿ç”¨è€…åç¨±ï¼Œè€Œä¸æ˜¯é›»å郵件地å€) ç <p> å¦‚è¦æ“·å–å…§å«ä½¿ç”¨è€…çš„è¨å®šæª”çš„è¯çµ¡äººåˆ—ï¼Œè«‹å‘¼å« {@link android.content.ContentResolver#query(Uri,String[], String, String[], String) ContentResolver.query()}。 -將內容 URI è¨ç‚º +將內容 URI è¨ç‚º {@link android.provider.ContactsContract.Profile#CONTENT_URI},並且ä¸è¦æä¾›ä»»ä½•é¸å–æ¢ä»¶ã€‚ 您也å¯ä»¥ä½¿ç”¨æ¤å…§å®¹ URI åšç‚ºæ“·å–原始è¯çµ¡äººæˆ–è¨å®šæª”資料的基礎 URI。 例如,以下程å¼ç¢¼ç‰‡æ®µæœƒæ“·å–è¨å®šæª”資料: @@ -932,7 +932,7 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { 您應該儘å¯èƒ½é€éŽå»ºç«‹ {@link android.content.ContentProviderOperation} 物件的{@link java.util.ArrayList}ï¼Œç„¶å¾Œå‘¼å« {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()},以「批次模å¼ã€åœ¨è¯çµ¡äººä¾›æ‡‰ç¨‹å¼ä¸é€²è¡Œè³‡æ–™çš„æ’å…¥ã€æ›´æ–°ä»¥åŠåˆªé™¤ã€‚ -å› ç‚ºè¯çµ¡äººä¾›æ‡‰ç¨‹å¼æœƒåœ¨å–®ä¸€äº¤æ˜“ä¸åŸ·è¡Œ +å› ç‚ºè¯çµ¡äººä¾›æ‡‰ç¨‹å¼æœƒåœ¨å–®ä¸€äº¤æ˜“ä¸åŸ·è¡Œ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} 的所有æ“作,所以您所åšçš„ä¿®æ”¹ä¸æœƒè®“è¯çµ¡äººå˜æ”¾åº«è™•æ–¼ä¸ä¸€è‡´çš„狀態。 @@ -1004,7 +1004,7 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) { <code>previousResult</code> </dt> <dd> - + {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} ä¸çš„ {@link android.content.ContentProviderResult} 物件以 0 開始的陣列索引值。套用批次æ“ä½œæ™‚ï¼Œæ¯æ¬¡æ“ä½œçµæžœéƒ½æœƒå„²å˜åœ¨çµæžœçš„ä¸ç¹¼é™£åˆ—。 @@ -1758,7 +1758,7 @@ onPerformSync()} 方法完æˆã€‚ <dd> {@link android.accounts.AccountManager} æœƒå•Ÿå‹•æ¤æœä»¥é–‹å§‹é©—è‰ç¨‹åºã€‚ æœå‹™çš„ {@link android.app.Service#onCreate()} 方法會具ç¾åŒ–為驗è‰å™¨ç‰©ä»¶ã€‚ -ç³»çµ±éœ€é©—è‰æ‡‰ç”¨ç¨‹å¼åŒæ¥é…æŽ¥å™¨çš„ä½¿ç”¨è€…å¸³æˆ¶æ™‚ï¼Œæœƒå‘¼å«æœå‹™çš„ +ç³»çµ±éœ€é©—è‰æ‡‰ç”¨ç¨‹å¼åŒæ¥é…æŽ¥å™¨çš„ä½¿ç”¨è€…å¸³æˆ¶æ™‚ï¼Œæœƒå‘¼å«æœå‹™çš„ {@link android.app.Service#onBind(Intent) onBind()} 方法以å–å¾—é©—è‰å™¨çš„ {@link android.os.IBinder}。 這樣å¯ä»¥è®“系統以跨處ç†ç¨‹åºçš„æ–¹å¼å‘¼å«é©—è‰å™¨çš„æ–¹æ³•。 @@ -2115,7 +2115,7 @@ openAssetFileDescriptor()} å¯å–得相片檔案的控制代碼。 </ul> <code><em>activityclass</em></code> 值是 Activity 的完整類別åç¨±ï¼Œä»¥æ¤ Activity 接收æ„圖。 <code><em>invite_action_label</em></code> 值是顯示在è£ç½®è¯çµ¡äººæ‡‰ç”¨ç¨‹å¼å…§ [新增連線]<strong></strong> é¸å–®ä¸çš„æ–‡å—å—串。 - + </li> </ol> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-basics.jd index 78314784ba9e..a00caed1f435 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-basics.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-basics.jd @@ -237,7 +237,7 @@ page.title=內容供應程å¼åŸºæœ¬æ¦‚念 {@link android.content.ContentResolver#query query()} 方法會呼å«ä½¿ç”¨è€…å—å…¸ä¾›æ‡‰ç¨‹å¼æ‰€å®šç¾©çš„ {@link android.content.ContentProvider#query ContentProvider.query()} 方法。 -以下是 +以下是 {@link android.content.ContentResolver#query ContentResolver.query()} 呼å«çš„程å¼ç¢¼ï¼š <p> <pre> @@ -250,7 +250,7 @@ mCursor = getContentResolver().query( mSortOrder); // The sort order for the returned rows </pre> <p> - 表 2 列出 + 表 2 列出 {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} 的引數åŠç›¸å°æ‡‰çš„ SQL SELECT 陳述å¼ï¼š </p> @@ -284,7 +284,7 @@ query(Uri,projection,selection,selectionArgs,sortOrder)} 的引數åŠç›¸å°æ‡‰çš <tr> <td align="center"><code>selectionArgs</code></td> <td align="center"> - (æ²’æœ‰ä»»ä½•ç›¸å°æ‡‰çš„é—œéµå—/åƒæ•¸ã€‚é¸å–引數會å–代é¸å–åå¥ä¸çš„ + (æ²’æœ‰ä»»ä½•ç›¸å°æ‡‰çš„é—œéµå—/åƒæ•¸ã€‚é¸å–引數會å–代é¸å–åå¥ä¸çš„ <code>?</code> é ç•™ä½ç½®ã€‚) </td> </tr> @@ -581,7 +581,7 @@ selectionArgs[0] = mUserInput; </p> <p> - 如果沒有任何資料欄符åˆé¸å–æ¢ä»¶ï¼Œå‰‡ä¾›æ‡‰ç¨‹å¼æœƒå‚³å›ž {@link android.database.Cursor#getCount Cursor.getCount()} 為 0 çš„ + 如果沒有任何資料欄符åˆé¸å–æ¢ä»¶ï¼Œå‰‡ä¾›æ‡‰ç¨‹å¼æœƒå‚³å›ž {@link android.database.Cursor#getCount Cursor.getCount()} 為 0 çš„ {@link android.database.Cursor} 物件 (峿²’有任何內容的游標)。 </p> @@ -595,7 +595,7 @@ selectionArgs[0] = mUserInput; </p> <p> - 以下程å¼ç¢¼ç‰‡æ®µæ˜¯ä¸Šä¸€å€‹ç¨‹å¼ç¢¼ç‰‡æ®µçš„å»¶ä¼¸ã€‚å®ƒæœƒå»ºç«‹å…§å«æŸ¥è©¢æ‰€æ“·å– {@link android.database.Cursor} çš„ + 以下程å¼ç¢¼ç‰‡æ®µæ˜¯ä¸Šä¸€å€‹ç¨‹å¼ç¢¼ç‰‡æ®µçš„å»¶ä¼¸ã€‚å®ƒæœƒå»ºç«‹å…§å«æŸ¥è©¢æ‰€æ“·å– {@link android.database.Cursor} çš„ {@link android.widget.SimpleCursorAdapter} 物件,並將該物件è¨å®šç‚º {@link android.widget.ListView} çš„é…æŽ¥å™¨ï¼š @@ -674,7 +674,7 @@ if (mCursor != null) { <p> {@link android.database.Cursor} å¯¦ä½œæ–¹æ³•åŒ…å«æ•¸å€‹ç”¨æ–¼å¾žç‰©ä»¶æ“·å–ä¸åŒè³‡æ–™é¡žåž‹çš„「getã€æ–¹æ³•。 例如,上方程å¼ç¢¼ç‰‡æ®µä½¿ç”¨äº† {@link android.database.Cursor#getString getString()}。 -æ¤å¤–,這種實作方法還包括 +æ¤å¤–,這種實作方法還包括 {@link android.database.Cursor#getType getType()} 方法,å¯å‚³å›žæŒ‡å®šè³‡æ–™æ¬„資料類型的值。 </p> @@ -709,7 +709,7 @@ if (mCursor != null) { </p> <p> - 以下的 + 以下的 <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> å…ƒç´ æœƒè¦æ±‚使用者å—典供應程å¼çš„讀å–å˜å–權: </p> @@ -733,7 +733,7 @@ if (mCursor != null) { </p> <h3 id="Inserting">æ’入資料</h3> <p> - 如è¦åœ¨ä¾›æ‡‰ç¨‹å¼ä¸æ’å…¥è³‡æ–™ï¼Œè«‹å‘¼å« + 如è¦åœ¨ä¾›æ‡‰ç¨‹å¼ä¸æ’å…¥è³‡æ–™ï¼Œè«‹å‘¼å« {@link android.content.ContentResolver#insert ContentResolver.insert()} 方法。 這個方法會在供應程å¼ä¸æ’入新的資料列,並傳回該列的內容 URI。 以下程å¼ç¢¼ç‰‡æ®µç¤ºç¯„如何在使用者å—典供應程å¼ä¸æ’入新的å—詞: @@ -785,14 +785,14 @@ content://user_dictionary/words/<id_value> </p> <p> - 如è¦å¾žå‚³å›žçš„ {@link android.net.Uri} å–å¾— <code>_ID</code> çš„å€¼ï¼Œè«‹å‘¼å« + 如è¦å¾žå‚³å›žçš„ {@link android.net.Uri} å–å¾— <code>_ID</code> çš„å€¼ï¼Œè«‹å‘¼å« {@link android.content.ContentUris#parseId ContentUris.parseId()}。 </p> <h3 id="Updating">更新資料</h3> <p> å¦‚è¦æ›´æ–°è³‡æ–™åˆ—,請使用內å«ç¶“éŽæ›´æ–°çš„值 (與您在æ’入資料時所使用的值相åŒ) 以åŠé¸å–æ¢ä»¶ (與您在建立查詢時所使用的é¸å–æ¢ä»¶ç›¸åŒ) çš„ {@link android.content.ContentValues} 物件。 - 您所使用的用戶端方法為 + 您所使用的用戶端方法為 {@link android.content.ContentResolver#update ContentResolver.update()}。您åªéœ€é‡å°è¦æ›´æ–°çš„è³‡æ–™æ¬„ï¼Œå°‡ç›¸é—œå€¼åŠ åˆ° {@link android.content.ContentValues} 物件å³å¯ã€‚ 如果您想清除資料欄的內容,請將值è¨å®šç‚º <code>null</code>。 @@ -901,7 +901,7 @@ Cursor.getType()} 來確èªå¯ç”¨çš„資料類型。 例如,è¯çµ¡äººä¾›æ‡‰ç¨‹å¼ä¸çš„ {@link android.provider.ContactsContract.Data} è¡¨æ ¼æœƒä½¿ç”¨ MIME 類型為æ¯å€‹è³‡æ–™åˆ—ä¸å„²å˜çš„è¯çµ¡äººè³‡æ–™åŠ ä¸Šæ¨™ç±¤ã€‚ -如è¦å–得與內容 URI ç›¸å°æ‡‰çš„ MIME é¡žåž‹ï¼Œè«‹å‘¼å« +如è¦å–得與內容 URI ç›¸å°æ‡‰çš„ MIME é¡žåž‹ï¼Œè«‹å‘¼å« {@link android.content.ContentResolver#getType ContentResolver.getType()}。 </p> <p> @@ -1009,13 +1009,13 @@ ContentResolver.applyBatch()}ï¼Œå‰‡ç³»çµ±æœƒå‚³å›žä¸€ç³»åˆ—çµæžœã€‚ </p> <p> - ä¾›æ‡‰ç¨‹å¼æœƒä½¿ç”¨ + ä¾›æ‡‰ç¨‹å¼æœƒä½¿ç”¨ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> - å…ƒç´ çš„ + å…ƒç´ çš„ <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"><provider></a></code> - å…ƒç´ çš„ + å…ƒç´ çš„ <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> åå…ƒç´ åœ¨æœ¬èº«çš„å®£ç¤ºèªªæ˜Žä¸ç‚ºå…§å®¹ URI 定義 URI 權é™ã€‚如è¦é€²ä¸€æ¥çžè§£ URI 權é™çš„é‹ä½œæ©Ÿåˆ¶ï¼Œè«‹åƒé–±<a href="{@docRoot}guide/topics/security/security.html">安全性和權é™</a>指å—的「URI 權é™ã€ã€‚ @@ -1032,8 +1032,8 @@ ContentResolver.applyBatch()}ï¼Œå‰‡ç³»çµ±æœƒå‚³å›žä¸€ç³»åˆ—çµæžœã€‚ <ol> <li> 您的應用程å¼ä½¿ç”¨ {@link android.app.Activity#startActivityForResult -startActivityForResult()} 方法,傳é€äº†å…§å« -{@link android.content.Intent#ACTION_PICK} 動作的æ„圖以åŠã€Œè¯çµ¡äººã€MIME 類型 +startActivityForResult()} 方法,傳é€äº†å…§å« +{@link android.content.Intent#ACTION_PICK} 動作的æ„圖以åŠã€Œè¯çµ¡äººã€MIME 類型 {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE}。 </li> @@ -1043,9 +1043,9 @@ startActivityForResult()} 方法,傳é€äº†å…§å« </li> <li> 在é¸å– Activity ä¸ï¼Œä½¿ç”¨è€…é¸å–äº†è¦æ›´æ–°çš„è¯çµ¡äººã€‚ -ä¸€æ—¦ä½¿ç”¨è€…é€²è¡Œé€™é …å‹•ä½œï¼Œé¸å– Activity ä¾¿æœƒå‘¼å« +ä¸€æ—¦ä½¿ç”¨è€…é€²è¡Œé€™é …å‹•ä½œï¼Œé¸å– Activity ä¾¿æœƒå‘¼å« {@link android.app.Activity#setResult setResult(resultcode, intent)} 來è¨å®šè¦å‚³å›žæ‚¨æ‡‰ç”¨ç¨‹å¼çš„æ„åœ–ã€‚ -該æ„圖包å«ä½¿ç”¨è€…所é¸è¯çµ¡äººçš„內容 URI,以åŠã€Œé¡å¤–ã€çš„æ——標 +該æ„圖包å«ä½¿ç”¨è€…所é¸è¯çµ¡äººçš„內容 URI,以åŠã€Œé¡å¤–ã€çš„æ——標 {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}。 這些旗標å¯å°‡ URI æ¬Šé™æŽˆäºˆæ‚¨çš„æ‡‰ç”¨ç¨‹å¼ï¼Œä»¥ä¾¿å…¶è®€å–內容 URI 指å‘çš„è¯çµ¡äººè³‡æ–™ã€‚é¸å– Activity éš¨å¾Œæœƒå‘¼å« {@link android.app.Activity#finish()} 來傳回您應用程å¼çš„æŽ§åˆ¶æ¬Šã€‚ @@ -1053,7 +1053,7 @@ startActivityForResult()} 方法,傳é€äº†å…§å« </li> <li> - 您的 Activity è¿”å›žå‰æ™¯ï¼Œè€Œç³»çµ±å‘¼å«æ‚¨ Activity çš„ + 您的 Activity è¿”å›žå‰æ™¯ï¼Œè€Œç³»çµ±å‘¼å«æ‚¨ Activity çš„ {@link android.app.Activity#onActivityResult onActivityResult()} 方法。 é€™å€‹æ–¹æ³•å¯æŽ¥æ”¶è¯çµ¡äººæ‡‰ç”¨ç¨‹å¼ä¸çš„é¸å– Activity æ‰€å»ºç«‹çš„çµæžœæ„圖。 @@ -1071,7 +1071,7 @@ startActivityForResult()} 方法,傳é€äº†å…§å« </p> <p> - ä¾‹å¦‚ï¼Œæ—¥æ›†æ‡‰ç”¨ç¨‹å¼æŽ¥å—å¯è®“æ‚¨å•Ÿç”¨æ‡‰ç”¨ç¨‹å¼æ’å…¥ UI çš„ + ä¾‹å¦‚ï¼Œæ—¥æ›†æ‡‰ç”¨ç¨‹å¼æŽ¥å—å¯è®“æ‚¨å•Ÿç”¨æ‡‰ç”¨ç¨‹å¼æ’å…¥ UI çš„ {@link android.content.Intent#ACTION_INSERT} æ„圖。您å¯ä»¥åœ¨è©²æ„圖ä¸å‚³å…¥ã€Œé¡å¤–ã€çš„資料,供應用程å¼ç”¨æ–¼é 先填入使用者介é¢ã€‚ç”±æ–¼é€±æœŸæ€§æ´»å‹•çš„èªžæ³•è¼ƒç‚ºè¤‡é›œï¼Œå› æ¤å»ºè°æ‚¨åˆ©ç”¨ {@link android.content.Intent#ACTION_INSERT} 啟用日曆應用程å¼ï¼Œç„¶å¾Œè®“使用者é€éŽè©²æ‡‰ç”¨ç¨‹å¼å°‡æ´»å‹•æ’入日曆供應程å¼ã€‚ @@ -1089,7 +1089,7 @@ Android å¹³å°å…§å»ºçš„大多數供應程å¼éƒ½å¯åœ¨ {@link android.provider} å </p> <p> 例如,使用者å—å…¸ä¾›æ‡‰ç¨‹å¼æœ‰ä¸€å€‹å…§å«å…§å®¹ URI 和欄å稱常數的 {@link android.provider.UserDictionary} åˆç´„類別。 -「å—詞ã€è¡¨æ ¼çš„內容 URI 是在 +「å—詞ã€è¡¨æ ¼çš„內容 URI 是在 {@link android.provider.UserDictionary.Words#CONTENT_URI UserDictionary.Words.CONTENT_URI} 常數ä¸å®šç¾©ã€‚ æ¤å¤–,{@link android.provider.UserDictionary.Words} é¡žåˆ¥ä¹ŸåŒ…å«æ¬„å稱常數,å¯ç”¨æ–¼æœ¬æŒ‡å—ä¸çš„程å¼ç¢¼ç‰‡æ®µç¯„例。 @@ -1106,7 +1106,7 @@ String[] mProjection = </pre> <p> è¯çµ¡äººä¾›æ‡‰ç¨‹å¼çš„å¦ä¸€å€‹åˆç´„類別為 {@link android.provider.ContactsContract}。 - æ¤é¡žåˆ¥çš„åƒè€ƒæ–‡ä»¶é™„有程å¼ç¢¼ç‰‡æ®µç¯„例。其ä¸ä¸€å€‹ + æ¤é¡žåˆ¥çš„åƒè€ƒæ–‡ä»¶é™„有程å¼ç¢¼ç‰‡æ®µç¯„例。其ä¸ä¸€å€‹ {@link android.provider.ContactsContract.Intents.Insert} åé¡žåˆ¥ç‚ºå…§å«æ„圖常數和æ„圖資料的åˆç´„類別。 </p> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-creating.jd index 3d46ee4b4c80..9f1ca3176af1 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-creating.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/providers/content-provider-creating.jd @@ -239,7 +239,7 @@ page.title=å»ºç«‹å…§å®¹ä¾›æ‡‰ç¨‹å¼ è¡¨æ ¼è³‡æ–™ä¸€å¾‹éœ€åŒ…å«ã€Œä¸»ç´¢å¼•éµã€æ¬„,方便供應程å¼ä¿å˜æ¯å€‹è³‡æ–™åˆ—的數值。 您å¯ä»¥ä½¿ç”¨é€™äº›å€¼å°‡è³‡æ–™åˆ—連çµè‡³å…¶ä»–è¡¨æ ¼ä¸çš„相關資料列 (也就是將這些值當作「外部索引éµã€ä½¿ç”¨)。 事實上,您也å¯ä»¥ä½¿ç”¨æ¤è³‡æ–™æ¬„的任何å稱進行連çµï¼Œä½†ä½¿ç”¨ {@link android.provider.BaseColumns#_ID BaseColumns._ID} æ˜¯æœ€ä½³åšæ³•ï¼Œé€™æ˜¯å› ç‚ºå°‡ä¾›æ‡‰ç¨‹å¼çš„æŸ¥è©¢çµæžœé€£çµè‡³ -{@link android.widget.ListView} 時需è¦å°‡æŸå€‹æ“·å–出的資料列命å為 +{@link android.widget.ListView} 時需è¦å°‡æŸå€‹æ“·å–出的資料列命å為 <code>_ID</code>。 @@ -288,14 +288,14 @@ MIME 類型欄ä¸çš„值會決定 BLOB 欄的資料定義, æ¤å¤–,也請é‡å° Android 套件åç¨±æŽ¡å–æ¤å»ºè°åšæ³•ï¼›æ‚¨å¯ä»¥å°‡ä¾›æ‡‰ç¨‹å¼æŽˆæ¬Šå®šç¾©ç‚ºå…§å«ä¾›æ‡‰ç¨‹å¼çš„套件å稱的副檔å。 例如,å‡è¨æ‚¨ Android 套件的å稱為 - <code>com.example.<appname></code>,則請將供應程å¼çš„æŽˆæ¬Šå®šç¾©ç‚º + <code>com.example.<appname></code>,則請將供應程å¼çš„æŽˆæ¬Šå®šç¾©ç‚º <code>com.example.<appname>.provider</code>。 </p> <h3>è¨è¨ˆè·¯å¾‘çµæ§‹</h3> <p> 開發人員通常åªè¦é™„åŠ æŒ‡å‘å€‹åˆ¥è¡¨æ ¼çš„è·¯å¾‘ï¼Œå³å¯å¾žæŽˆæ¬Šå»ºç«‹å…§å®¹ URI。 -例如,å‡è¨æ‚¨æœ‰ã€Œtable1ã€<em></em>和「table2ã€<em></em>é€™å…©å€‹è¡¨æ ¼ï¼Œå‰‡æ‚¨å¯ä»¥çµåˆä¸Šè¿°ç¯„例ä¸çš„æŽˆæ¬Šä¾†ç”¢ç”Ÿå…§å®¹ URI -<code>com.example.<appname>.provider/table1</code> å’Œ +例如,å‡è¨æ‚¨æœ‰ã€Œtable1ã€<em></em>和「table2ã€<em></em>é€™å…©å€‹è¡¨æ ¼ï¼Œå‰‡æ‚¨å¯ä»¥çµåˆä¸Šè¿°ç¯„例ä¸çš„æŽˆæ¬Šä¾†ç”¢ç”Ÿå…§å®¹ URI +<code>com.example.<appname>.provider/table1</code> å’Œ <code>com.example.<appname>.provider/table2</code>。 路徑並ä¸ä¾·é™æ–¼å–®ä¸€å€éš”,而您也ä¸å¿…為æ¯å€‹è·¯å¾‘å±¤ç´šç”¢ç”Ÿè¡¨æ ¼ã€‚ @@ -350,11 +350,11 @@ MIME 類型欄ä¸çš„值會決定 BLOB 欄的資料定義, <code>content://com.example.app.provider/table1</code>:å稱為 <code>table1</code> çš„è¡¨æ ¼ã€‚ </li> <li> - <code>content://com.example.app.provider/table2/dataset1</code>:å稱為 + <code>content://com.example.app.provider/table2/dataset1</code>:å稱為 <code>dataset1</code> çš„è¡¨æ ¼ã€‚ </li> <li> - <code>content://com.example.app.provider/table2/dataset2</code>:å稱為 + <code>content://com.example.app.provider/table2/dataset2</code>:å稱為 <code>dataset2</code> çš„è¡¨æ ¼ã€‚ </li> <li> @@ -380,7 +380,7 @@ MIME 類型欄ä¸çš„值會決定 BLOB 欄的資料定義, <code>content://com.example.app.provider/table2/*</code>: </dt> <dd> - 與 <code>dataset1</code> å’Œ <code>dataset2</code> è¡¨æ ¼çš„å…§å®¹ URI 相符,但與 <code>table1</code> 或 + 與 <code>dataset1</code> å’Œ <code>dataset2</code> è¡¨æ ¼çš„å…§å®¹ URI 相符,但與 <code>table1</code> 或 <code>table3</code> 的內容 URI ä¸ç¬¦ã€‚ </dd> @@ -393,8 +393,8 @@ MIME 類型欄ä¸çš„值會決定 BLOB 欄的資料定義, </dl> <p> 以下程å¼ç¢¼ç‰‡æ®µèªªæ˜Žå„種方法在 {@link android.content.UriMatcher} ä¸çš„é‹ä½œæ–¹å¼ã€‚ - 這個程å¼ç¢¼æœƒä»¥ä¸åŒæ–¹å¼è™•ç†æ•´å€‹è¡¨æ ¼çš„ URI 以åŠå–®ä¸€è³‡æ–™åˆ—çš„ URIï¼›é‡å°è¡¨æ ¼ä½¿ç”¨å…§å®¹ URI æ¨¡å¼ -<code>content://<authority>/<path></code>,é‡å°å–®ä¸€è³‡æ–™åˆ—則使用 + 這個程å¼ç¢¼æœƒä»¥ä¸åŒæ–¹å¼è™•ç†æ•´å€‹è¡¨æ ¼çš„ URI 以åŠå–®ä¸€è³‡æ–™åˆ—çš„ URIï¼›é‡å°è¡¨æ ¼ä½¿ç”¨å…§å®¹ URI æ¨¡å¼ +<code>content://<authority>/<path></code>,é‡å°å–®ä¸€è³‡æ–™åˆ—則使用 <code>content://<authority>/<path>/<id></code>。 </p> @@ -469,8 +469,8 @@ public class ExampleProvider extends ContentProvider { </pre> <p> å¦ä¸€å€‹ {@link android.content.ContentUris} é¡žåˆ¥å¯æä¾›ä½¿ç”¨å…§å®¹ URI çš„ <code>id</code> 部分的簡便方法。 -{@link android.net.Uri} å’Œ -{@link android.net.Uri.Builder} é¡žåˆ¥å‰‡å¯æä¾›å‰–æžç¾æœ‰ +{@link android.net.Uri} å’Œ +{@link android.net.Uri.Builder} é¡žåˆ¥å‰‡å¯æä¾›å‰–æžç¾æœ‰ {@link android.net.Uri} 物件åŠå»ºç½®æ–°ç‰©ä»¶çš„簡便方法。 </p> @@ -485,7 +485,7 @@ public class ExampleProvider extends ContentProvider { <h3 id="RequiredAccess">å¿…è¦æ–¹æ³•</h3> <p> 抽象類別 {@link android.content.ContentProvider} 會定義 6 ç¨®æ–¹æ³•ï¼Œè€Œæ‚¨å¿…é ˆå°‡é€™äº›æ–¹æ³•å¯¦ä½œæˆæ‚¨æ‰€æ“有å類別的一部分。 -嘗試å˜å–您內容供應程å¼çš„ç”¨æˆ¶ç«¯æ‡‰ç”¨ç¨‹å¼æœƒå‘¼å«ä»¥ä¸‹æ‰€æœ‰æ–¹æ³• +嘗試å˜å–您內容供應程å¼çš„ç”¨æˆ¶ç«¯æ‡‰ç”¨ç¨‹å¼æœƒå‘¼å«ä»¥ä¸‹æ‰€æœ‰æ–¹æ³• ({@link android.content.ContentProvider#onCreate() onCreate()} 除外): </p> @@ -539,7 +539,7 @@ public class ExampleProvider extends ContentProvider { </dd> </dl> <p> - 請注æ„,上述方法採用的簽å與åŒåçš„ + 請注æ„,上述方法採用的簽å與åŒåçš„ {@link android.content.ContentResolver} 方法相åŒã€‚ </p> <p> @@ -641,7 +641,7 @@ Android å¯ä»¥é‡å°ä¸‹åˆ—例外狀æ³åŸ·è¡Œé€™é …動作,藉æ¤å”助解決查 </p> <p> - 例如,如果您採用 SQLite 資料庫,您å¯ä»¥é€éŽ + 例如,如果您採用 SQLite 資料庫,您å¯ä»¥é€éŽ {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} 建立新的 {@link android.database.sqlite.SQLiteOpenHelper} ç‰©ä»¶ï¼Œç„¶å¾Œåœ¨åˆæ¬¡é–‹å•Ÿè³‡æ–™åº«æ™‚建立 SQL è¡¨æ ¼ã€‚ ç‚ºäº†åŠ å¿«é€™å€‹ç¨‹åºï¼Œç•¶æ‚¨åˆæ¬¡å‘¼å« {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase @@ -651,10 +651,10 @@ SQLiteOpenHelper.onCreate()} 方法。 </p> <p> - 以下兩個程å¼ç¢¼ç‰‡æ®µå±•示了 + 以下兩個程å¼ç¢¼ç‰‡æ®µå±•示了 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} 與 {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) SQLiteOpenHelper.onCreate()} 之間的互動éŽç¨‹ã€‚ -而第一個程å¼ç¢¼ç‰‡æ®µæ˜¯ç”¨æ–¼å¯¦ä½œ +而第一個程å¼ç¢¼ç‰‡æ®µæ˜¯ç”¨æ–¼å¯¦ä½œ {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()}: </p> <pre class="prettyprint"> @@ -808,7 +808,7 @@ protected static final class MainDatabaseHelper extends SQLiteOpenHelper { <code><name></code> å¿…é ˆæ˜¯å…¨åŸŸå”¯ä¸€å€¼ï¼Œè€Œ <code><type></code> å¿…é ˆç‚ºç›¸å°æ‡‰ URI 模å¼çš„專屬值。 å»ºè°æ‚¨ä½¿ç”¨è²´å…¬å¸çš„å稱或您應用程å¼çš„部分 Android 套件å稱åšç‚º <code><name></code>。 -é‡å° +é‡å° <code><type></code>ï¼Œå‰‡å»ºè°æ‚¨ä½¿ç”¨å¯è˜åˆ¥èˆ‡ URI ç›¸é—œçš„è¡¨æ ¼çš„å—串。 </p> @@ -816,8 +816,8 @@ protected static final class MainDatabaseHelper extends SQLiteOpenHelper { </li> </ul> <p> - 例如,å‡è¨ä¾›æ‡‰ç¨‹å¼çš„æŽˆæ¬Šç‚º -<code>com.example.app.provider</code>ï¼Œè€Œè©²æŽˆæ¬Šå¯æä¾› + 例如,å‡è¨ä¾›æ‡‰ç¨‹å¼çš„æŽˆæ¬Šç‚º +<code>com.example.app.provider</code>ï¼Œè€Œè©²æŽˆæ¬Šå¯æä¾› <code>table1</code> é€™å€‹è¡¨æ ¼ï¼Œå‰‡ <code>table1</code> ä¸å¤šå€‹è³‡æ–™åˆ—çš„ MIME 類型會如下所示: </p> <pre> @@ -940,7 +940,7 @@ ContentProvider.getStreamTypes()} 會傳回如下所示的陣列: 為了將權é™è¨ç‚ºåƒ…é©ç”¨æ–¼æ‚¨çš„供應程å¼ï¼Œè«‹é‡å° <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#nm"> android:name</a></code> 屬性使用 Java å¼ç¯„åœã€‚ -ä¾‹å¦‚ï¼Œè«‹å°‡è®€å–æ¬Šé™å‘½å為 +ä¾‹å¦‚ï¼Œè«‹å°‡è®€å–æ¬Šé™å‘½å為 <code>com.example.app.provider.permission.READ_PROVIDER</code>。 </p> @@ -955,7 +955,7 @@ ContentProvider.getStreamTypes()} 會傳回如下所示的陣列: </dt> <dd> é€™é …æ¬Šé™æ˜¯ç”± <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> - <provider></a></code> å…ƒç´ çš„ + <provider></a></code> å…ƒç´ çš„ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> android:permission</a></code> å±¬æ€§æ‰€æŒ‡å®šï¼Œå¯æŽ§åˆ¶æ•´å€‹ä¾›æ‡‰ç¨‹å¼çš„讀å–åŠå¯«å…¥å˜å–權。 @@ -967,10 +967,10 @@ ContentProvider.getStreamTypes()} 會傳回如下所示的陣列: 整個供應程å¼çš„è®€å–æ¬Šé™åŠå¯«å…¥æ¬Šé™ã€‚您å¯ä»¥ä½¿ç”¨ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> <provider></a></code> å…ƒç´ çš„ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn"> - android:readPermission</a></code> å’Œ + android:readPermission</a></code> å’Œ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn"> android:writePermission</a></code> å±¬æ€§æŒ‡å®šé€™å…©é …æ¬Šé™ã€‚ -這些權é™çš„優先ç‰ç´šæ¯” +這些權é™çš„優先ç‰ç´šæ¯” <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> android:permission</a></code> 所需的權é™ä¾†å¾—高。 </dd> @@ -1037,9 +1037,9 @@ Context.revokeUriPermission()}。 </p> <p> - 如è¦å°‡è‡¨æ™‚å˜å–æ¬Šå§”æ´¾çµ¦æŸæ¬¾æ‡‰ç”¨ç¨‹å¼ï¼Œæ‚¨å°±å¿…é ˆåœ¨æ„圖ä¸åŠ å…¥ -{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} 或 -{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} æ——æ¨™ï¼Œæˆ–æ˜¯åŒæ™‚åŠ å…¥ä»¥ä¸Šå…©è€…ã€‚è«‹ä½¿ç”¨ + 如è¦å°‡è‡¨æ™‚å˜å–æ¬Šå§”æ´¾çµ¦æŸæ¬¾æ‡‰ç”¨ç¨‹å¼ï¼Œæ‚¨å°±å¿…é ˆåœ¨æ„圖ä¸åŠ å…¥ +{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} 或 +{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} æ——æ¨™ï¼Œæˆ–æ˜¯åŒæ™‚åŠ å…¥ä»¥ä¸Šå…©è€…ã€‚è«‹ä½¿ç”¨ {@link android.content.Intent#setFlags(int) setFlags()} 方法è¨å®šé€™äº›æ——標。 </p> <p> @@ -1187,7 +1187,7 @@ Context.revokeUriPermission()}。 <h2 id="Intents">æ„圖和資料å˜å–權</h2> <p> 應用程å¼å¯é€éŽ {@link android.content.Intent} 以間接方å¼å˜å–內容供應程å¼ã€‚ - 利用這種å˜å–æ–¹å¼çš„æ‡‰ç”¨ç¨‹å¼ä¸æœƒå‘¼å« {@link android.content.ContentResolver} 或 + 利用這種å˜å–æ–¹å¼çš„æ‡‰ç”¨ç¨‹å¼ä¸æœƒå‘¼å« {@link android.content.ContentResolver} 或 {@link android.content.ContentProvider} 的任何方法,而是會傳é€å¯å•Ÿå‹• Activity (æ¤ Activity é€šå¸¸å±¬æ–¼ä¾›æ‡‰ç¨‹å¼æœ¬èº«çš„æ‡‰ç”¨ç¨‹å¼) çš„æ„圖。 目標 Activity æœƒè² è²¬æ“·å–資料並在本身的 UI ä¸é¡¯ç¤ºè©²è³‡æ–™ã€‚視æ„圖ä¸çš„動作而定,目標 Activity 也å¯èƒ½æœƒæç¤ºä½¿ç”¨è€…修改供應程å¼çš„資料。 diff --git a/docs/html-intl/intl/zh-tw/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/zh-tw/guide/topics/providers/document-provider.jd index 1dc7c46f4387..a6af7586b884 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/providers/document-provider.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/providers/document-provider.jd @@ -213,7 +213,7 @@ Android 4.4 儲å˜ç©ºé–“å˜å–架構:用戶端</a></li> </p> -<p>é‡å°æè¼‰ Android 4.4 以上版本的è£ç½®ï¼Œæ‚¨çš„æ‡‰ç”¨ç¨‹å¼é‚„å¯ä»¥å‘¼å« +<p>é‡å°æè¼‰ Android 4.4 以上版本的è£ç½®ï¼Œæ‚¨çš„æ‡‰ç”¨ç¨‹å¼é‚„å¯ä»¥å‘¼å« {@link android.content.Intent#ACTION_OPEN_DOCUMENT} æ„圖,以顯示系統所控管的挑é¸å™¨ UI,方便使用者ç€è¦½å…¶ä»–æ‡‰ç”¨ç¨‹å¼æä¾›çš„æ‰€æœ‰æª”æ¡ˆã€‚ é€éŽé€™å€‹å–®ä¸€ UI,使用者å¯ä»¥å¾žä»»ä½•å—æ”¯æ´çš„æ‡‰ç”¨ç¨‹å¼æŒ‘鏿ª”案。 @@ -560,7 +560,7 @@ getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre> <li>供應程å¼çš„å稱 (也就是供應程å¼çš„類別å稱),包括套件å稱。範例:<code>com.example.android.storageprovider.MyCloudProvider</code>。 </li> -<li>授權的å稱 (也就是套件的å稱;在æ¤ç¯„例ä¸ç‚º +<li>授權的å稱 (也就是套件的å稱;在æ¤ç¯„例ä¸ç‚º <code>com.example.android.storageprovider</code>) 以åŠå…§å®¹ä¾›æ‡‰ç¨‹å¼çš„類型 (<code>documents</code>)。範例:{@code com.example.android.storageprovider.documents}。</li> @@ -588,7 +588,7 @@ getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre> <pre><bool name="atLeastKitKat">true</bool></pre></li> </ul></li> -<li>å…§å« +<li>å…§å« {@code android.content.action.DOCUMENTS_PROVIDER} 動作的æ„圖篩é¸å™¨ï¼Œè®“您的供應程å¼èƒ½å¤ 在系統æœå°‹ä¾›æ‡‰ç¨‹å¼æ™‚顯示在挑é¸å™¨ä¸ã€‚ </li> @@ -618,7 +618,7 @@ getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre> <h4 id="43">æ”¯æ´æè¼‰ Android 4.3 以下版本的è£ç½®</h4> -<p>åªæœ‰æè¼‰ Android 4.4 以上版本的è£ç½®å¯ä½¿ç”¨ +<p>åªæœ‰æè¼‰ Android 4.4 以上版本的è£ç½®å¯ä½¿ç”¨ {@link android.content.Intent#ACTION_OPEN_DOCUMENT} æ„åœ–ã€‚å¦‚æžœæ‚¨æƒ³è®“æ‡‰ç”¨ç¨‹å¼æ”¯æ´ {@link android.content.Intent#ACTION_GET_CONTENT} 以便與æè¼‰ Android 4.3 以下版本的è£ç½®ç›¸å®¹ï¼Œè«‹é‡å°æè¼‰ Android 4.4 以上版本的è£ç½®åœç”¨å®£ç¤ºèªªæ˜Žä¸çš„ {@link android.content.Intent#ACTION_GET_CONTENT} æ„圖篩é¸å™¨ã€‚ @@ -833,7 +833,7 @@ public Cursor queryDocument(String documentId, String[] projection) throws <h4 id="openDocument">實作 openDocument</h4> <p>æ‚¨å¿…é ˆå¯¦ä½œ {@link android.provider.DocumentsProvider#openDocument -openDocument()} 來傳回代表特定檔案的 +openDocument()} 來傳回代表特定檔案的 {@link android.os.ParcelFileDescriptor}。其他應用程å¼å¯åˆ©ç”¨å‚³å›žçš„ {@link android.os.ParcelFileDescriptor} 傳輸資料。 使用者é¸å–檔案而且用戶端應用程å¼å‘¼å« {@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()} è¦æ±‚å˜å–該檔案後,系統就會呼å«é€™å€‹æ–¹æ³•。範例: diff --git a/docs/html-intl/intl/zh-tw/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/zh-tw/guide/topics/resources/accessing-resources.jd index 3a5a96121d94..d1ac69cde5db 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/resources/accessing-resources.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/resources/accessing-resources.jd @@ -101,12 +101,12 @@ android.content.res.Resources} (以 {@link android.content.Context#getResources( <div class="sidebox"> <h2>å˜å–原始檔案</h2> -<p>é›–ç„¶ä¸å¸¸è¦‹ï¼Œä½†æ‚¨æœ‰æ™‚需è¦å˜å–原始檔案和目錄。如果有æ¤éœ€æ±‚,則ä¸èƒ½å°‡æª”案儲å˜åœ¨ {@code res/}ï¼Œå› ç‚ºè¦å¾ž -{@code res/} 讀å–資æºçš„å”¯ä¸€æ–¹å¼æ˜¯é€éŽè³‡æº ID。ä¸éŽï¼Œæ‚¨å¯ä»¥å°‡è³‡æºå„²å˜åœ¨ +<p>é›–ç„¶ä¸å¸¸è¦‹ï¼Œä½†æ‚¨æœ‰æ™‚需è¦å˜å–原始檔案和目錄。如果有æ¤éœ€æ±‚,則ä¸èƒ½å°‡æª”案儲å˜åœ¨ {@code res/}ï¼Œå› ç‚ºè¦å¾ž +{@code res/} 讀å–資æºçš„å”¯ä¸€æ–¹å¼æ˜¯é€éŽè³‡æº ID。ä¸éŽï¼Œæ‚¨å¯ä»¥å°‡è³‡æºå„²å˜åœ¨ {@code assets/} 目錄。 </p> <p>儲å˜åœ¨ {@code assets/} 目錄ä¸çš„æª”æ¡ˆã€Œä¸æœƒã€<em></em>æŒ‡å®šè³‡æº IDï¼Œå› æ¤æ‚¨ç„¡æ³•é€éŽ {@code R} 類別或從 XML 資æºåƒç…§é€™äº›æª”案。 -您å¯ä»¥æ”¹ç‚ºæŸ¥è©¢ {@code assets/} 目錄ä¸çš„æª”案,就åƒä¸€èˆ¬æª”案系統一樣,並使用 +您å¯ä»¥æ”¹ç‚ºæŸ¥è©¢ {@code assets/} 目錄ä¸çš„æª”案,就åƒä¸€èˆ¬æª”案系統一樣,並使用 {@link android.content.res.AssetManager} 讀å–原始資料。 </p> <p>ä¸éŽï¼Œå¦‚æžœæ‚¨åªæ˜¯è¦è®€å–原始資料 (例如影片或音訊檔案),å¯ä»¥å°‡æª”案儲å˜åœ¨ {@code res/raw/} 目錄,然後使用 {@link diff --git a/docs/html-intl/intl/zh-tw/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/zh-tw/guide/topics/resources/providing-resources.jd index 0938dc00e12d..01e0d9ccfb86 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/resources/providing-resources.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/resources/providing-resources.jd @@ -510,7 +510,7 @@ xlarge} é™å®šè©žï¼Œä½†è£ç½®ç‚ºä¸€èˆ¬å¤§å°èž¢å¹•)。 </p> <p>已新增至 API 級別 4。<em></em></p> - + <p>è«‹åƒé–±<a href="{@docRoot}guide/practices/screens_support.html">支æ´å¤šå€‹èž¢å¹•</a>以å–得詳細資訊。 </p> <p>å¦è«‹æŸ¥çœ‹ {@link android.content.res.Configuration#screenLayout} è¨å®šæ¬„ä½ï¼Œè©²æ¬„使œƒæŒ‡å‡ºèž¢å¹•為å°èž¢å¹•ã€ä¸€èˆ¬èž¢å¹•或大螢幕。 @@ -824,7 +824,7 @@ orientation" described above.</p> å稱ä¸çš„ä»»ä½•å¤§å¯«åªæ˜¯ç‚ºäº†æ–¹ä¾¿é–±è®€ã€‚</li> <li>æ¯å€‹é™å®šè©žé¡žåž‹åªæ”¯æ´ä¸€å€‹å€¼ã€‚例如,如果您想在西ç牙文和法文使用相åŒçš„å¯ç¹ªé …目檔案,則ä¸èƒ½å°‡ç›®éŒ„命å為 <em></em> <code>drawable-rES-rFR/</code>。 -æ‚¨å¿…é ˆæœ‰å…©å€‹è³‡æºç›®éŒ„,例如 +æ‚¨å¿…é ˆæœ‰å…©å€‹è³‡æºç›®éŒ„,例如 <code>drawable-rES/</code> å’Œ <code>drawable-rFR/</code>,這兩個目錄è¦åŒ…å«é©ç•¶çš„æª”案。 但是,您ä¸éœ€è¦å¯¦éš›å°‡ç›¸åŒçš„æª”案複製到這兩ä½ç½®ã€‚您å¯ä»¥ç‚ºè³‡æºå»ºç«‹åˆ¥å。 è«‹åƒé–±ä¸‹æ–¹çš„ @@ -877,7 +877,7 @@ res/drawable-en-rCA/} 建立一個 {@code icon.xml} 檔案,以åŠå»ºç«‹ {@code android:src="@drawable/icon_ca" /> </pre> -<p>å¦‚æžœæ‚¨å°‡æ¤æª”æ¡ˆå„²å˜æˆ {@code icon.xml} (在替代資æºç›®éŒ„ä¸ï¼Œåƒæ˜¯ +<p>å¦‚æžœæ‚¨å°‡æ¤æª”æ¡ˆå„²å˜æˆ {@code icon.xml} (在替代資æºç›®éŒ„ä¸ï¼Œåƒæ˜¯ {@code res/drawable-en-rCA/})ï¼Œç³»çµ±æœƒå°‡å®ƒç·¨è¯æˆå¯ç•¶ä½œ {@code R.drawable.icon} åƒç…§çš„資æºï¼Œä½†å®ƒå¯¦éš›ä¸Šæ˜¯ {@code R.drawable.icon_ca} è³‡æº (儲å˜åœ¨ {@code res/drawable/}) 的別å。 </p> @@ -1025,7 +1025,7 @@ drawable-port-ldpi/ drawable-port-notouch-12key/ </pre> <p class="note"><strong>例外狀æ³ï¼š</strong>螢幕åƒç´ å¯†åº¦æ˜¯å”¯ä¸€æ²’æœ‰å› ç‚ºè¡çªè€Œè¢«æŽ’除的é™å®šè©žã€‚ -å³ä½¿è£ç½®çš„螢幕密度是 hdpi 但ä»ç„¶æ²’有排除 +å³ä½¿è£ç½®çš„螢幕密度是 hdpi 但ä»ç„¶æ²’有排除 <code>drawable-port-ldpi/</code>ï¼Œå› ç‚ºæ¤åˆ»æ¯å€‹èž¢å¹•密度都視為相符。 如需詳細資訊,請åƒé–±<a href="{@docRoot}guide/practices/screens_support.html">支æ´å¤šå€‹èž¢å¹•</a>文件。 </p></li> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/zh-tw/guide/topics/resources/runtime-changes.jd index 7a8b3ae7fc3a..817844458422 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/resources/runtime-changes.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/resources/runtime-changes.jd @@ -22,7 +22,7 @@ page.tags=Activityã€ç”Ÿå‘½é€±æœŸ </div> <p>有些è£ç½®è¨å®šå¯ä»¥åœ¨åŸ·è¡ŒéšŽæ®µæœŸé–“進行變更 (例如,螢幕方å‘ã€éµç›¤å¯ç”¨æ€§å’Œèªžè¨€)。 -進行這類變更時,Android æœƒé‡æ–°å•Ÿå‹•執行ä¸çš„ +進行這類變更時,Android æœƒé‡æ–°å•Ÿå‹•執行ä¸çš„ {@link android.app.Activity} (å‘¼å« {@link android.app.Activity#onDestroy()},後é¢åŠ ä¸Š {@link android.app.Activity#onCreate(Bundle) onCreate()})。 釿–°å•Ÿå‹•行為的è¨è¨ˆæ˜¯ä»¥ç¬¦åˆæ–°è£ç½®è¨å®šçš„æ›¿ä»£è³‡æºè‡ªå‹•釿–°è¼‰å…¥æ‚¨çš„æ‡‰ç”¨ç¨‹å¼ï¼Œä»¥å”助您的應用程å¼é©æ‡‰æ–°çš„è¨å®šã€‚ diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/controls.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/controls.jd index 0f27ae4e8803..1ab66c3f12f3 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/controls.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/controls.jd @@ -69,7 +69,7 @@ parent.link=index.html <tr> <td><a href="controls/radiobutton.html">圓形按鈕</a></td> <td>åŠŸç”¨èˆ‡æ ¸å–æ–¹å¡Šé¡žä¼¼ï¼Œä½†æœƒé™åˆ¶ä½¿ç”¨è€…åªèƒ½å¾žä¸€çµ„é¸é …ä¸é¸å–一個é¸é …。</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/declaring-layout.jd index 72755715e3a2..580ee230363a 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/declaring-layout.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/declaring-layout.jd @@ -272,7 +272,7 @@ android.view.ViewGroup.LayoutParams} 的巢狀類別。這個å類別包å«å®šç å¯å®šç¾©æª¢è¦–在螢幕ä¸çš„å¯¦éš›å¤§å° (æç¹ªæœŸé–“以åŠç‰ˆé¢é…置之後)。 這些值å¯èƒ½ (但未必) 會與寬度和高度測é‡å€¼ä¸åŒã€‚ -您å¯ä»¥å‘¼å« +您å¯ä»¥å‘¼å« {@link android.view.View#getWidth()} å’Œ {@link android.view.View#getHeight()} 來å–得尺寸æç¹ªå€¼ã€‚ </p> @@ -421,7 +421,7 @@ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, <li>嫿œ‰é™£åˆ—䏿‰€æœ‰å—串的 {@link android.widget.TextView} 的版é¢é…ç½®</li> <li>å—串陣列</li> </ul> -<p>接著,é‡å°æ‚¨çš„ {@link android.widget.ListView} å‘¼å« +<p>接著,é‡å°æ‚¨çš„ {@link android.widget.ListView} å‘¼å« {@link android.widget.ListView#setAdapter setAdapter()}:</p> <pre> ListView listView = (ListView) findViewById(R.id.listview); diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/dialogs.jd index b0ae12ea3a19..6e6db354ee77 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/dialogs.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>å¦è«‹åƒé–±</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">å°è©±æ–¹å¡Šè¨è¨ˆæŒ‡å—</a></li> @@ -248,7 +248,7 @@ AlertDialog dialog = builder.create(); <dt>ä¸ç«‹</dt> <dd>å¦‚æžœä½¿ç”¨è€…ä¸æƒ³ç¹¼çºŒé€²è¡Œç‰¹å®šå‹•作,但並éžè¦å–消動作,請使用這種按鈕。 這種按鈕會顯示在æ£é¢å’Œè² 颿Œ‰éˆ•之間。 -範例:[ç¨å¾Œæé†’我] 按鈕。</dd> +範例:[ç¨å¾Œæé†’我] 按鈕。</dd> </dl> <p>您å¯ä»¥å°‡ä»¥ä¸Šå…¶ä¸ä¸€ç¨®æŒ‰éˆ•åŠ å…¥ {@link @@ -320,7 +320,7 @@ android.app.AlertDialog.Builder#setAdapter setAdapter()} 指定清單。 <p>如è¦åŠ å…¥å¤šé‡é¸é … (æ ¸å–æ–¹å¡Š) 或單一é¸é … (圓形按鈕),請使用 {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} 或 -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} 方法。 </p> @@ -346,7 +346,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -372,7 +372,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { </pre> <p>雖然傳統清單和包å«åœ“å½¢æŒ‰éˆ•çš„æ¸…å–®éƒ½å¯æä¾›ã€Œå–®é¸ã€å‹•作,但如果您想ä¿ç•™ä½¿ç”¨è€…çš„é¸æ“‡ï¼Œè«‹ä½¿ç”¨ {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()}。也就是說,如果您想讓å°è©±æ–¹å¡Šå†æ¬¡é–‹å•Ÿæ™‚é¡¯ç¤ºä½¿ç”¨è€…ç›®å‰æ‰€é¸çš„é¸é …,請建立包å«åœ“形按鈕的清單。 @@ -470,7 +470,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -479,7 +479,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p><strong>æç¤ºï¼š</strong>如果您想自訂å°è©±æ–¹å¡Šï¼Œè«‹æ”¹ç‚ºå°‡ {@link android.app.Activity} 顯示為å°è©±æ–¹å¡Šï¼Œè€Œä¸æ˜¯ä½¿ç”¨ {@link android.app.Dialog} API。 方法很簡單,åªè¦å»ºç«‹ Activity 然後在 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code -<activity>}</a> å®£ç¤ºèªªæ˜Žå…ƒç´ ä¸å°‡å…¶ä¸»é¡Œè¨ç‚º +<activity>}</a> å®£ç¤ºèªªæ˜Žå…ƒç´ ä¸å°‡å…¶ä¸»é¡Œè¨ç‚º {@link android.R.style#Theme_Holo_Dialog Theme.Holo.Dialog} å³å¯ï¼š </p> @@ -505,7 +505,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -513,10 +513,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -543,7 +543,7 @@ public class NoticeDialogFragment extends DialogFragment { public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -656,7 +656,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -678,7 +678,7 @@ public class CustomDialogFragment extends DialogFragment { public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/menus.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/menus.jd index be1fa7f0dfda..6f7405bc00ef 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/menus.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/menus.jd @@ -83,9 +83,9 @@ parent.link=index.html </p> <p>è«‹åƒé–±<a href="#options-menu">建立é¸é …é¸å–®</a>。</p> </dd> - + <dt><strong>內容é¸å–®å’Œå…§å®¹é—œè¯å‹•作模å¼</strong></dt> - + <dd>內容é¸å–®æ˜¯æœƒåœ¨ä½¿ç”¨è€…長按æŸå…ƒç´ 時顯示的<a href="#FloatingContextMenu">浮動é¸å–®</a>。 它æä¾›çš„動作會影響所é¸å–內容或內容畫é¢ã€‚ @@ -94,7 +94,7 @@ parent.link=index.html </p> <p>è«‹åƒé–±<a href="#context-menu">建立內容關è¯é¸å–®</a>。</p> </dd> - + <dt><strong>彈出å¼é¸å–®</strong></dt> <dd>彈出å¼é¸å–®é¡¯ç¤ºçš„é …ç›®æ¸…å–®æœƒä»¥åž‚ç›´æ¸…å–®çš„æ–¹å¼ï¼ŒéŒ¨å®šåœ¨å‘¼å«è©²é¸å–®çš„æª¢è¦–。 它很é©åˆç”¨ä¾†æä¾›èˆ‡ç‰¹å®šå…§å®¹æœ‰é—œçš„動作溢出,或é‡å°ç¬¬äºŒéƒ¨åˆ†çš„命令æä¾›é¸é …。 @@ -135,7 +135,7 @@ parent.link=index.html <dt><code><item></code></dt> <dd>建立代表é¸å–®ä¸å–®ä¸€é …目的 {@link android.view.MenuItem}。æ¤å…ƒç´ å¯ä»¥åŒ…å«å·¢ç‹€ <code><menu></code> å…ƒç´ ä»¥å»ºç«‹åé¸å–®ã€‚</dd> - + <dt><code><group></code></dt> <dd>å¯ä¾› {@code <item>} å…ƒç´ é¸ç”¨çš„ä¸å¯è¦‹å®¹å™¨ã€‚它å¯è®“您將é¸å–®é …目分類,以便分享屬性,例如有效狀態與å¯è¦‹åº¦ã€‚ 如需詳細資訊,請åƒé–±<a href="#groups">建立é¸å–®ç¾¤çµ„</a>。 @@ -742,8 +742,8 @@ android.widget.PopupMenu#getMenu() PopupMenu.getMenu()} 所傳回的 {@link andr <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -900,7 +900,7 @@ android.view.MenuItem#setChecked(boolean) setChecked()} 方法在程å¼ç¢¼ä¸è®Š <p>å·²é¸å–å¯å‹¾é¸é …ç›®æ™‚ï¼Œç³»çµ±æœƒå‘¼å«æ‰€é¸å–å€‹åˆ¥é …ç›®çš„å›žå‘¼æ–¹æ³• (例如 {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()})。 æ‚¨å¿…é ˆåœ¨é€™è£¡è¨å®šæ ¸å–æ–¹å¡Šçš„ç‹€æ…‹ï¼ŒåŽŸå› æ˜¯æ ¸å–æ–¹å¡Šæˆ–é¸é …æŒ‰éˆ•ä¸¦ä¸æœƒè‡ªå‹•變更其狀態。 -您å¯ä»¥åˆ©ç”¨ +您å¯ä»¥åˆ©ç”¨ {@link android.view.MenuItem#isChecked()} ä¾†æŸ¥è©¢é …ç›®çš„ç›®å‰ç‹€æ…‹ (使用者é¸å–它之å‰çš„狀態),然後利用 {@link android.view.MenuItem#setChecked(boolean) setChecked()} 來è¨å®šå‹¾é¸ç‹€æ…‹ã€‚例如:</p> @@ -1010,7 +1010,7 @@ addIntentOptions()} æ™‚ï¼Œå®ƒæœƒè¦†å¯«ç¬¬ä¸€å€‹å¼•æ•¸ä¸æ‰€æŒ‡å®šé¸å–®ç¾¤çµ„ä¸ <p>您也能å‘å…¶ä»–æ‡‰ç”¨ç¨‹å¼æä¾› Activity çš„æœå‹™ï¼Œé€™æ¨£å³å¯åœ¨å…¶ä»–應用程å¼çš„é¸å–®ä¸åŒ…嫿‚¨çš„æ‡‰ç”¨ç¨‹å¼ (與上述的角色顛倒)。 </p> -<p>如è¦åŒ…å«åœ¨å…¶ä»–應用程å¼é¸å–®ä¸ï¼Œæ‚¨å¿…é ˆç…§å¸¸å®šç¾©æ„圖篩é¸å™¨ï¼Œä½†å‹™å¿…為æ„圖篩é¸å™¨é¡žåˆ¥ç´å…¥ +<p>如è¦åŒ…å«åœ¨å…¶ä»–應用程å¼é¸å–®ä¸ï¼Œæ‚¨å¿…é ˆç…§å¸¸å®šç¾©æ„圖篩é¸å™¨ï¼Œä½†å‹™å¿…為æ„圖篩é¸å™¨é¡žåˆ¥ç´å…¥ {@link android.content.Intent#CATEGORY_ALTERNATIVE} å’Œ/或 {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} 值。 例如:</p> diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/notifiers/notifications.jd index b8537445cff0..d7bf46997853 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/notifiers/notifications.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/notifiers/notifications.jd @@ -81,7 +81,7 @@ page.title=通知 <strong>圖 2.</strong>通知匣ä¸çš„通知。 </p> -<p class="note"><strong>注æ„:</strong>除éžå¦å¤–註明,å¦å‰‡æœ¬æŒ‡å—åƒç…§<a href="{@docRoot}tools/support-library/index.html">支æ´ç¨‹å¼åº«</a> 4 版ä¸çš„ +<p class="note"><strong>注æ„:</strong>除éžå¦å¤–註明,å¦å‰‡æœ¬æŒ‡å—åƒç…§<a href="{@docRoot}tools/support-library/index.html">支æ´ç¨‹å¼åº«</a> 4 版ä¸çš„ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} 類別。類別 {@link android.app.Notification.Builder Notification.Builder} 是在 Android 3.0 (API 級別 11) 新增。 @@ -97,10 +97,10 @@ page.title=通知 <h2 id="CreateNotification">建立通知</h2> -<p>您會為 +<p>您會為 {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} 物件ä¸çš„通知指定 UI 資訊與動作。 -如è¦å»ºç«‹é€šçŸ¥æœ¬èº«ï¼Œæ‚¨å¯ä»¥å‘¼å« -{@link android.support.v4.app.NotificationCompat.Builder#build NotificationCompat.Builder.build()},其傳回的 +如è¦å»ºç«‹é€šçŸ¥æœ¬èº«ï¼Œæ‚¨å¯ä»¥å‘¼å« +{@link android.support.v4.app.NotificationCompat.Builder#build NotificationCompat.Builder.build()},其傳回的 {@link android.app.Notification} ç‰©ä»¶æœƒåŒ…å«æ‚¨çš„è¦æ ¼ã€‚如è¦ç™¼å‡ºé€šçŸ¥ï¼Œæ‚¨å¯ä»¥å‘¼å« {@link android.app.NotificationManager#notify NotificationManager.notify()} å°‡ {@link android.app.Notification} 物件傳é€è‡³ç³»çµ±ã€‚ </p> @@ -149,7 +149,7 @@ page.title=通知 在 {@link android.app.Notification} 內,動作本身是由 {@link android.app.PendingIntent} 完æˆå®šç¾©ï¼Œå…¶ä¸åŒ…å«çš„ {@link android.content.Intent} 會啟動您應用程å¼ä¸çš„ -{@link android.app.Activity}。如è¦å°‡ +{@link android.app.Activity}。如è¦å°‡ {@link android.app.PendingIntent} 與手勢關è¯ï¼Œå¯å‘¼å« {@link android.support.v4.app.NotificationCompat.Builder} çš„é©ç•¶æ–¹æ³•。例如,如果當使用者按一下通知匣ä¸çš„é€šçŸ¥æ–‡å—æ™‚,您希望啟動 {@link android.app.Activity},å¯å‘¼å« @@ -394,7 +394,7 @@ numMessages = 0; <h2 id="NotificationResponse">啟動 Activity 時ä¿ç•™å°Žè¦½</h2> <p> 當您從通知啟動 {@link android.app.Activity} æ™‚ï¼Œæ‚¨å¿…é ˆä¿ç•™ä½¿ç”¨è€…é æœŸçš„導覽體驗。 -按一下 <i>[返回]</i> 應å¯å°‡ä½¿ç”¨è€…從應用程å¼çš„一般工作æµç¨‹å¸¶å›žä¸»èž¢å¹•,而按一下 +按一下 <i>[返回]</i> 應å¯å°‡ä½¿ç”¨è€…從應用程å¼çš„一般工作æµç¨‹å¸¶å›žä¸»èž¢å¹•,而按一下 <i>[近期記錄]</i> 應會將 {@link android.app.Activity} 顯示為個別的工作。如è¦ä¿ç•™å°Žè¦½é«”驗,請以全新的工作啟動 {@link android.app.Activity}。您該如何è¨å®š @@ -466,7 +466,7 @@ numMessages = 0; </p> </li> <li> - æ¤å¤–æ‚¨é‚„éœ€è¦æ–°å¢ž Android 4.1 以上版本的支æ´ã€‚為æ¤ï¼Œè«‹å°‡ + æ¤å¤–æ‚¨é‚„éœ€è¦æ–°å¢ž Android 4.1 以上版本的支æ´ã€‚為æ¤ï¼Œè«‹å°‡ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code> 屬性新增到您è¦å•Ÿå‹• {@link android.app.Activity} çš„ <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> å…ƒç´ ã€‚ @@ -722,7 +722,7 @@ setProgress(max, progress, false)} 將該列新增至您的通知,然後發出 <p> ç•¶æ“ä½œå®Œæˆæ™‚,您å¯ä»¥ç¹¼çºŒé¡¯ç¤ºé€²åº¦åˆ—或將其移除。ä¸è«–是任何一種情æ³ï¼Œéƒ½å‹™å¿…更新通知文å—來指出æ“作已完æˆã€‚ - 如è¦ç§»é™¤é€²åº¦åˆ—ï¼Œè«‹å‘¼å« + 如è¦ç§»é™¤é€²åº¦åˆ—ï¼Œè«‹å‘¼å« {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)}。例如: </p> @@ -933,7 +933,7 @@ Notification notification = new Notification.Builder(context) </p> <p> - 如è¦å®šç¾©è‡ªè¨‚通知版é¢é…置,請從具ç¾åŒ–坿“´å¤§ XML é…置檔案的 + 如è¦å®šç¾©è‡ªè¨‚通知版é¢é…置,請從具ç¾åŒ–坿“´å¤§ XML é…置檔案的 {@link android.widget.RemoteViews} ç‰©ä»¶è‘—æ‰‹ã€‚æŽ¥è‘—ï¼Œæ”¹ç‚ºå‘¼å« {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}ï¼Œè€Œä¸æ˜¯å‘¼å«åƒæ˜¯ {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()} 的方法。 diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/overview.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/overview.jd index 44d05a82ebc2..0ac4002cf424 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/overview.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ XML æä¾›é¡žä¼¼æ–¼ HTML 且人類看得懂的版é¢é…ç½®çµæ§‹ã€‚</p> <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ XML æä¾›é¡žä¼¼æ–¼ HTML 且人類看得懂的版é¢é…ç½®çµæ§‹ã€‚</p> <p>如需建立 UI 版é¢é…置的完整指å—,請åƒé–± <a href="declaring-layout.html">XML 版é¢é…ç½®</a>。 - + <h2 id="UIComponents">使用者介é¢å…ƒä»¶</h2> <p>您ä¸å¿…使用 {@link android.view.View} 與 {@link diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/settings.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/settings.jd index 91ac929e0fa1..7a7ff9b7973c 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/settings.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/settings.jd @@ -226,7 +226,7 @@ android.preference.ListPreference}ã€‚é€™å…©å€‹é …ç›®éƒ½åŒ…å«ä¸‹åˆ—三個屬性ï <dt>{@code android:key}</dt> <dd>需è¦é€™å€‹å±¬æ€§æ‰èƒ½ä¿ç•™è³‡æ–™å€¼çš„å好è¨å®šã€‚它會指定當系統將æ¤è¨å®šå€¼å„²å˜æ–¼ {@link android.content.SharedPreferences} 時è¦ä½¿ç”¨çš„å”¯ä¸€ç´¢å¼•éµ (å—串)。 - + <p>åªæœ‰åœ¨ä¸‹åˆ—情æ³ä¸‹ä¸éœ€è¦æ¤å±¬æ€§ï¼š<em></em>å好è¨å®šç‚º {@link android.preference.PreferenceCategory} 或 {@link android.preference.PreferenceScreen},或者å好è¨å®šæŒ‡å®š {@link android.content.Intent} é€²è¡Œå‘¼å« (æé… <a href="#Intents">{@code <intent>}</a> å…ƒç´ ) 或 {@link android.app.Fragment} 進行顯示 (æé… <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code android:fragment}</a> 屬性)。 @@ -285,7 +285,7 @@ android.preference.PreferenceCategory}。 <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -293,12 +293,12 @@ android.preference.PreferenceCategory}。 android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -588,11 +588,11 @@ android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} 回呼以 <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -672,15 +672,15 @@ android.preference.Preference <Preference>} å…ƒç´ æœƒå‚³é€ä¸€å€‹ {@link a </p> <p>例如,下列為使用 Android 3.0åŠæ›´æ–°ç‰ˆæœ¬çš„å好è¨å®šæ¨™é XML 檔案 ({@code res/xml/preference_headers.xml}): -</p> +</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -692,18 +692,18 @@ android.preference.Preference <Preference>} å…ƒç´ æœƒå‚³é€ä¸€å€‹ {@link a <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -975,11 +975,11 @@ android.preference.DialogPreference} 的建構函å¼ï¼Œè©²å好è¨å®šå®£å‘Šç‰ˆé public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1194,7 +1194,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/ui-events.jd index 68714e8b2b59..8e009e0d3bea 100644 --- a/docs/html-intl/intl/zh-tw/guide/topics/ui/ui-events.jd +++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/ui-events.jd @@ -187,7 +187,7 @@ android.app.Activity} 能在發é€è‡³è¦–çª—ä¹‹å‰æ””截所有輕觸事件。</li ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - 這讓 {@link android.view.ViewGroup} 在發é€è‡³å檢視時能監控事件。</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) - ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - 呼å«é€™å€‹çˆ¶æª¢è¦–ä»¥æŒ‡å‡ºä¸æ‡‰è©²ä½¿ç”¨ <code>{@link + ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - 呼å«é€™å€‹çˆ¶æª¢è¦–ä»¥æŒ‡å‡ºä¸æ‡‰è©²ä½¿ç”¨ <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code> 攔截輕觸事件。 </li> </ul> @@ -199,11 +199,11 @@ android.view.ViewGroup} 在發é€è‡³å檢視時能監控事件。</li> ä¸éŽï¼Œå¦‚æžœè£ç½®å…·æœ‰è¼•觸功能,而且使用者é€éŽè¼•觸方å¼é–‹å§‹èˆ‡ä»‹é¢äº’動,就ä¸éœ€è¦å†å°‡é …ç›®å白顯示,或是å°ç‰¹å®šæª¢è¦–æä¾›ç„¦é»žã€‚ å› æ¤ï¼Œé€™å°±æ˜¯å稱為「輕觸模å¼ã€çš„互動模å¼ã€‚ - + </p> <p> 如果是具備輕觸功能的è£ç½®ï¼Œä½¿ç”¨è€…輕觸螢幕之後,è£ç½®å°±æœƒé€²å…¥è¼•觸模å¼ã€‚ -從這點以æ¤é¡žæŽ¨ï¼Œåªæœ‰ +從這點以æ¤é¡žæŽ¨ï¼Œåªæœ‰ {@link android.view.View#isFocusableInTouchMode} 為 true 的檢視æ‰å¯è¨å®šç„¦é»žï¼Œä¾‹å¦‚æ–‡å—編輯å°å·¥å…·ã€‚ å…¶ä»–å¯è¼•è§¸çš„æª¢è¦–ï¼Œä¾‹å¦‚æŒ‰éˆ•ï¼Œåœ¨è¼•è§¸æ™‚ä¸æœƒæˆç‚ºç„¦é»žï¼›æŒ‰ä¸‹æ™‚ï¼Œåªæœƒè§¸ç™¼ on-click 接è½å™¨ã€‚ @@ -214,7 +214,7 @@ android.view.ViewGroup} 在發é€è‡³å檢視時能監控事件。</li> </p> <p> -整個系統 (所有視窗和 Activity) 都會ä¿ç•™è¼•觸模å¼çš„ç‹€æ…‹ã€‚å¦‚è¦æŸ¥è©¢ç›®å‰çš„狀態,您å¯ä»¥å‘¼å« +整個系統 (所有視窗和 Activity) 都會ä¿ç•™è¼•觸模å¼çš„ç‹€æ…‹ã€‚å¦‚è¦æŸ¥è©¢ç›®å‰çš„狀態,您å¯ä»¥å‘¼å« {@link android.view.View#isInTouchMode} 以查看è£ç½®ç›®å‰æ˜¯å¦è™•於輕觸模å¼ã€‚ </p> @@ -282,7 +282,7 @@ android.view.ViewGroup} 在發é€è‡³å檢視時能監控事件。</li> the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd index aeace5bdddb2..e5fdf8d6d61b 100644 --- a/docs/html-intl/intl/zh-tw/preview/api-overview.jd +++ b/docs/html-intl/intl/zh-tw/preview/api-overview.jd @@ -414,7 +414,7 @@ android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 鬧é˜å’Œ GP - + </p> <p> diff --git a/docs/html-intl/intl/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd index a98000a61bbf..caa2a55588e2 100644 --- a/docs/html-intl/intl/zh-tw/preview/download.jd +++ b/docs/html-intl/intl/zh-tw/preview/download.jd @@ -264,7 +264,7 @@ page.image=images/cards/card-n-downloads_2x.png - + </p> <!-- You can flash by ota or system image --><p> @@ -289,7 +289,7 @@ page.image=images/cards/card-n-downloads_2x.png 如果您決定手動更新è£ç½®å¾Œè¦æŽ¥æ”¶ OTA 更新,您唯一è¦åšçš„事是在 <a href="https://g.co/androidbeta">Android Beta 計劃</a>ä¸è¨»å†Šè£ç½®ã€‚您å¯ä»¥éš¨æ™‚註冊è£ç½®ï¼Œä»¥éš”ç©ºå‚³è¼¸æ–¹å¼æŽ¥æ”¶ä¸‹ä¸€å€‹ã€ŒPreviewã€æ›´æ–°ã€‚ - + </p> <table> @@ -300,64 +300,73 @@ page.image=images/cards/card-n-downloads_2x.png <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> - <td><a href="#top" onclick="onDownload(this)">bullhead-npc56p-preview-6c877a3d.tgz</a><br> - MD5:b5cf874021023b398f5b983b24913f5d<br> - SHA-1:6c877a3d9fae7ec8a1678448e325b77b7a7b143a + <td><a href="#top" onclick="onDownload(this)" + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)">shamu-npc56p-preview-54b13c67.tgz</a><br> - MD5:af183638cf34e0eb944a1957d7696f60<br> - SHA-1:54b13c6703d369cc79a8fd8728fe4103c6343973 + <td><a href="#top" onclick="onDownload(this)" + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> - <td><a href="#top" onclick="onDownload(this)">angler-npc56p-preview-85ffc1b1.tgz</a><br> - MD5:bc4934ea7bd325753eee1606d3725a24<br> - SHA-1:85ffc1b1be402b1b96f9ba10929e86bba6c6c588 + <td><a href="#top" onclick="onDownload(this)" + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)">volantis-npc56p-preview-0e8ec8ef.tgz</a><br> - MD5:c901334c6158351e945f188167ae56f4<br> - SHA-1:0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 + <td><a href="#top" onclick="onDownload(this)" + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> - <td><a href="#top" onclick="onDownload(this)">volantisg-npc56p-preview-1bafdbfb.tgz</a><br> - MD5:7bb95bebc478d7257cccb4652899d1b4<br> - SHA-1:1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 + <td><a href="#top" onclick="onDownload(this)" + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)">fugu-npc56r-preview-7027d5b6.tgz</a><br> - MD5:f5d3d8f75836ccfe4c70e8162e498be4<br> - SHA-1:7027d5b662bceda4c80a91a0a14ef0e5a7ba795b + <td><a href="#top" onclick="onDownload(this)" + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> - <td><a href="#top" onclick="onDownload(this)">ryu-npc56p-preview-335a86a4.tgz</a><br> - MD5:4e21fb183bbbf467bee91598d587fd2e<br> - SHA-1:335a86a435ee51f18464de343ad2e071c38f0e92 + <td><a href="#top" onclick="onDownload(this)" + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> + <tr id="seed"> - <td>一般行動è£ç½® 4G (Android One) <br>"seed"</td> - <td><a href="#top" onclick="onDownload(this)">seed_l8150-npc56p-preview-82472ebc.tgz</a><br> - MD5:983e083bc7cd0c4a2d39d6ebaa20202a<br> - SHA-1:82472ebc9a6054a103f53cb400a1351913c95127 + <td>General Mobile 4G (Android One) <br>"seed"</td> + <td><a href="#top" onclick="onDownload(this)" + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd index d0883810fed0..123498b08b89 100644 --- a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd +++ b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd @@ -88,7 +88,7 @@ page.image=images/cards/card-nyc_2x.jpg </p> <p> - åœ¨æ¤æ–‡ä»¶ä¸ï¼Œæˆ‘們將å¸ç¿’如何使用替代方法 (例如 + åœ¨æ¤æ–‡ä»¶ä¸ï¼Œæˆ‘們將å¸ç¿’如何使用替代方法 (例如 {@link android.app.job.JobScheduler}) 改寫您的應用程å¼ä»¥é…åˆé€™äº›æ–°çš„é™åˆ¶ã€‚ </p> diff --git a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd index a42ec11b940d..7e4ea732b244 100644 --- a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd +++ b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd @@ -87,7 +87,7 @@ page.image=images/cards/card-nyc_2x.jpg <h2 id="access">å˜å–è£ç½®åŠ å¯†çš„å„²å˜ç©ºé–“</h2> <p>如果è¦å˜å–è£ç½®åŠ å¯†çš„å„²å˜ç©ºé–“,請é€éŽå‘¼å« -<code>Context.createDeviceEncryptedStorageContext()</code> 以建立第二個 +<code>Context.createDeviceEncryptedStorageContext()</code> 以建立第二個 {@link android.content.Context} 實例。使用æ¤å…§å®¹å»ºç«‹çš„æ‰€æœ‰å„²å˜ API 呼å«éƒ½å¯ä»¥å˜å–è£ç½®åŠ å¯†çš„å„²å˜ç©ºé–“。 下列範例會å˜å–è£ç½®åŠ å¯†çš„å„²å˜ç©ºé–“ä¸¦é–‹å•Ÿç¾æœ‰çš„æ‡‰ç”¨ç¨‹å¼è³‡æ–™æª”案: diff --git a/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd b/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd index 788951c8fb98..5ea247bd4b5e 100644 --- a/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd +++ b/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd @@ -170,7 +170,7 @@ page.keywords="multi-window", "android N", "split screen", "free-form" <h4 id="resizeableActivity">android:resizeableActivity</h4> <p> - 在宣示說明的 <code><activity></code> 或 + 在宣示說明的 <code><activity></code> 或 <code><application></code> 節點ä¸ï¼Œè¨å®šæ¤å±¬æ€§ä»¥å•Ÿç”¨æˆ–åœç”¨å¤šè¦–窗顯示: </p> diff --git a/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd b/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd index b0ee8b8360cb..6b8a17805fa5 100644 --- a/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd +++ b/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd @@ -150,7 +150,7 @@ public void onPictureInPictureChanged(boolean inPictureInPicture) { <p>當您的活動切æ›åˆ° PIP 時,系統會將活動視為暫åœç‹€æ…‹ä¸¦å‘¼å«æ‚¨æ´»å‹•çš„ <code>onPause()</code> 方法。 å½±ç‰‡æ’æ”¾ä¸æ‡‰è©²æš«åœï¼Œè€Œä¸”æ´»å‹•å› ç‚º PIP 模å¼è€Œæš«åœæ™‚ï¼Œå½±ç‰‡æ‡‰è©²ç¹¼çºŒæ’æ”¾ã€‚ -查看您活動的 +查看您活動的 <code>onPause()</code> 方法ä¸çš„ PIP 並é©ç•¶åœ°è™•ç†æ’放,例如: </p> diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd index 4225184c8021..acee1d421fc4 100644 --- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd @@ -55,7 +55,7 @@ android.app.Activity} 執行個體都會接收的生命週期é‡è¦å›žå‘¼æ–¹æ³•ï </p> <h2>課程</h2> - + <dl> <dt><b><a href="starting.html">啟動應用行為顯示</a></b></dt> <dd>了解應用行為顯示生命週期的有關基本概念ã€ä½¿ç”¨è€…啟動應用程å¼çš„æ–¹å¼ï¼Œä»¥åŠå»ºç«‹åŸºæœ¬æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºçš„執行方å¼ã€‚ @@ -68,5 +68,5 @@ android.app.Activity} 執行個體都會接收的生命週期é‡è¦å›žå‘¼æ–¹æ³•ï <dt><b><a href="recreating.html">釿–°å»ºç«‹æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤º</a></b></dt> <dd>了解在應用行為顯示éçµ‚çµæ™‚的狀æ³ï¼Œä»¥åŠå¦‚ä½•åœ¨éœ€è¦æ™‚釿–°å»ºç½®æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºç‹€æ…‹ã€‚ </dd> -</dl> +</dl> diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd index 8c0843da6a3a..f47768a68c9d 100644 --- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>本課程示範</h2> <ol> <li><a href="#Pause">æš«åœæ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤º</a></li> <li><a href="#Resume">繼續您的應用行為顯示</a></li> </ol> - + <h2>您也應該閱讀</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a> @@ -59,7 +59,7 @@ android.app.Activity#onPause()} 的呼å«ï¼Œå¯èƒ½è¡¨ç¤ºè©²æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºå°‡ <h2 id="Pause">æš«åœæ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤º</h2> - + <p>è‹¥ç³»çµ±ç‚ºæ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºå‘¼å« {@link android.app.Activity#onPause()}ï¼Œåš´æ ¼ä¾†èªªæ„å‘³è‘—æ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºä»æ˜¯éƒ¨åˆ†å¯è¦‹ï¼Œä½†å¤šæ•¸æƒ…æ³ä¸‹è¡¨ç¤ºä½¿ç”¨è€…é›¢é–‹æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºï¼Œè©²æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºå¾ˆå¿«å°‡é€²å…¥ã€Œå·²åœæ¢ã€ç‹€æ…‹ã€‚ 通常,您應使用 {@link android.app.Activity#onPause()} 回呼執行以下æ“作: diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd index 4b0efdaa3d85..ad23786584f5 100644 --- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>本課程示範</h2> <ol> <li><a href="#SaveState">å„²å˜æ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºç‹€æ…‹</a></li> <li><a href="#RestoreState">還原您的應用行為顯示狀態</a></li> </ol> - + <h2>您也應該閱讀</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">支æ´ä¸åŒçš„螢幕</a> @@ -105,7 +105,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -138,7 +138,7 @@ onCreate()} ä¸é‚„原æŸäº›ç‹€æ…‹è³‡æ–™ï¼š</p> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -157,12 +157,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}ï¼Œç³»çµ±æœ åªæœ‰å˜åœ¨è¦é‚„原的已儲å˜ç‹€æ…‹æ™‚ï¼Œç³»çµ±æ‰æœƒå‘¼å« {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}ï¼Œå› æ¤æ‚¨ç„¡éœ€æª¢æŸ¥ {@link android.os.Bundle} 是å¦ç‚º null: </p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd index fae2fa35091d..b03f22be9200 100644 --- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>本課程示範</h2> <ol> <li><a href="#lifecycle-states">了解生命週期回呼</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">建立新執行個體</a></li> <li><a href="#Destroy">çµ‚çµæ‡‰ç”¨è¡Œç‚ºé¡¯ç¤º</a></li> </ol> - + <h2>您也應該閱讀</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a></li> @@ -83,7 +83,7 @@ trainingnavtop=true </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -138,7 +138,7 @@ android.app.Activity#onResume()}。 -<h2 id="launching-activity">指定您應用程å¼çš„啟動器應用行為顯示</h2> +<h2 id="launching-activity">指定您應用程å¼çš„啟動器應用行為顯示</h2> <p>若使用者從主螢幕ä¸é¸å–您的應用程å¼åœ–示,系統會é‡å°æ‡‰ç”¨ç¨‹å¼ä¸æ‚¨å·²å®£å‘Šä½œç‚ºã€Œå•Ÿå‹•器ã€(或「主程å¼ã€) 應用行為顯示的 {@link android.app.Activity}ï¼Œå‘¼å« {@link android.app.Activity#onCreate onCreate()} 方法。 @@ -151,7 +151,7 @@ android.app.Activity#onCreate onCreate()} 方法。 <p>å¿…é ˆåœ¨å®£ç¤ºèªªæ˜Žä¸ä½¿ç”¨ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> (包括 {@link android.content.Intent#ACTION_MAIN MAIN} 行為與 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別) 宣告您應用程å¼çš„ä¸»è¦æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤ºã€‚ -例如:</p> +例如:</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -200,10 +200,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -268,7 +268,7 @@ android.app.Activity#onDestroy} 期間終æ¢é€™äº›åŸ·è¡Œç·’或資æºã€‚ @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd index a2da5cab11b1..9d9ea5d95410 100644 --- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>本課程示範</h2> <ol> <li><a href="#Stop">åœæ¢æ‚¨çš„æ‡‰ç”¨è¡Œç‚ºé¡¯ç¤º</a></li> <li><a href="#Start">啟動/釿–°å•Ÿå‹•您的應用行為顯示</a></li> </ol> - + <h2>您也應該閱讀</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a> @@ -152,13 +152,13 @@ android.app.Activity#onStart()}。 @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -169,8 +169,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml index 4a9cab6d239f..4cfe8087a1ef 100644 --- a/docs/html/_redirects.yaml +++ b/docs/html/_redirects.yaml @@ -1146,47 +1146,47 @@ redirects: # Android Studio help button redirects - from: /r/studio-ui/vector-asset-studio.html - to: /studio/write/vector-asset-studio.html + to: /studio/write/vector-asset-studio.html?utm_medium=android-studio - from: /r/studio-ui/image-asset-studio.html - to: /studio/write/image-asset-studio.html + to: /studio/write/image-asset-studio.html?utm_medium=android-studio - from: /r/studio-ui/project-structure.html - to: /studio/projects/index.html + to: /studio/projects/index.html?utm_medium=android-studio - from: /r/studio-ui/android-monitor.html - to: /studio/profile/android-monitor.html + to: /studio/profile/android-monitor.html?utm_medium=android-studio - from: /r/studio-ui/am-logcat.html - to: /studio/debug/am-logcat.html + to: /studio/debug/am-logcat.html?utm_medium=android-studio - from: /r/studio-ui/am-memory.html - to: /studio/profile/am-memory.html + to: /studio/profile/am-memory.html?utm_medium=android-studio - from: /r/studio-ui/am-cpu.html - to: /studio/profile/am-cpu.html + to: /studio/profile/am-cpu.html?utm_medium=android-studio - from: /r/studio-ui/am-gpu.html - to: /studio/profile/am-gpu.html + to: /studio/profile/am-gpu.html?utm_medium=android-studio - from: /r/studio-ui/am-network.html - to: /studio/profile/am-network.html + to: /studio/profile/am-network.html?utm_medium=android-studio - from: /r/studio-ui/am-hprof.html - to: /studio/profile/am-hprof.html + to: /studio/profile/am-hprof.html?utm_medium=android-studio - from: /r/studio-ui/am-allocation.html - to: /studio/profile/am-allocation.html + to: /studio/profile/am-allocation.html?utm_medium=android-studio - from: /r/studio-ui/am-methodtrace.html - to: /studio/profile/am-methodtrace.html + to: /studio/profile/am-methodtrace.html?utm_medium=android-studio - from: /r/studio-ui/am-sysinfo.html - to: /studio/profile/am-sysinfo.html + to: /studio/profile/am-sysinfo.html?utm_medium=android-studio - from: /r/studio-ui/am-screenshot.html - to: /studio/debug/am-screenshot.html + to: /studio/debug/am-screenshot.html?utm_medium=android-studio - from: /r/studio-ui/am-video.html - to: /studio/debug/am-video.html + to: /studio/debug/am-video.html?utm_medium=android-studio - from: /r/studio-ui/avd-manager.html - to: /studio/run/managing-avds.html + to: /studio/run/managing-avds.html?utm_medium=android-studio - from: /r/studio-ui/rundebugconfig.html - to: /studio/run/rundebugconfig.html + to: /studio/run/rundebugconfig.html?utm_medium=android-studio - from: /r/studio-ui/devicechooser.html - to: /studio/run/emulator.html + to: /studio/run/emulator.html?utm_medium=android-studio - from: /r/studio-ui/virtualdeviceconfig.html - to: /studio/run/managing-avds.html + to: /studio/run/managing-avds.html?utm_medium=android-studio - from: /r/studio-ui/emulator.html - to: /studio/run/emulator.html + to: /studio/run/emulator.html?utm_medium=android-studio - from: /r/studio-ui/instant-run.html - to: /studio/run/index.html#instant-run + to: /studio/run/index.html?utm_medium=android-studio#instant-run - from: /r/studio-ui/test-recorder.html to: http://tools.android.com/tech-docs/test-recorder - from: /r/studio-ui/export-licenses.html @@ -1194,6 +1194,10 @@ redirects: - from: /r/studio-ui/experimental-to-stable-gradle.html to: http://tools.android.com/tech-docs/new-build-system/gradle-experimental/experimental-to-stable-gradle - from: /r/studio-ui/sdk-manager.html - to: https://developer.android.com/studio/intro/update.html#sdk-manager + to: /studio/intro/update.html?utm_medium=android-studio#sdk-manager - from: /r/studio-ui/newjclass.html - to: /studio/write/index.html + to: /studio/write/index.html?utm_medium=android-studio +- from: /r/studio-ui/menu-help.html + to: /studio/intro/index.html?utm_medium=android-studio +- from: /r/studio-ui/menu-start.html + to: /training/index.html?utm_medium=android-studio diff --git a/docs/html/about/android.jd b/docs/html/about/android.jd index e3b6958db73e..6e573906c728 100644 --- a/docs/html/about/android.jd +++ b/docs/html/about/android.jd @@ -26,11 +26,11 @@ the fastest-growing mobile OS.</p> <blockquote>Every day more than a million new Android devices are activated worldwide.</blockquote> <p>Android’s openness has made it a favorite for consumers and developers alike, -driving strong growth in app consumption. Android users download +driving strong growth in app consumption. Android users download billions of apps and games from Google Play each month. </p> <p>With its partners, Android is continuously pushing the boundaries of hardware and software -forward to bring new capabilities to users and developers. For developers, +forward to bring new capabilities to users and developers. For developers, Android innovation lets you build powerful, differentiated applications that use the latest mobile technologies.</p> @@ -59,7 +59,7 @@ devices—from phones to tablets and beyond.</p> advantage of the hardware capabilities available on each device. It automatically adapts your UI to look its best on each device, while giving you as much control as you want over your UI on different device -types. </p> +types. </p> <p>For example, you can create a single app binary that's optimized for both phone and tablet form factors. You declare your UI in lightweight sets of XML @@ -70,7 +70,7 @@ density, locale, and so on.</p> -<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android +<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android Developer Tools</a> offer a full Java IDE with advanced features for developing, debugging, and packaging Android apps. Using the IDE, you can develop on any available Android diff --git a/docs/html/about/index.jd b/docs/html/about/index.jd index 22f504edc408..274a5115c612 100644 --- a/docs/html/about/index.jd +++ b/docs/html/about/index.jd @@ -34,11 +34,11 @@ the fastest-growing mobile OS.</p> <blockquote>Every day more than 1 million new Android devices are activated worldwide.</blockquote> <p>Android’s openness has made it a favorite for consumers and developers alike, -driving strong growth in app consumption. Android users download more than +driving strong growth in app consumption. Android users download more than 1.5 billion apps and games from Google Play each month. </p> <p>With its partners, Android is continuously pushing the boundaries of hardware and software -forward to bring new capabilities to users and developers. For developers, +forward to bring new capabilities to users and developers. For developers, Android innovation lets you build powerful, differentiated applications that use the latest mobile technologies.</p> @@ -68,7 +68,7 @@ devices—from phones to tablets and beyond.</p> advantage of the hardware capabilities available on each device. It automatically adapts your UI to look its best on each device, while giving you as much control as you want over your UI on different device -types. </p> +types. </p> <p>For example, you can create a single app binary that's optimized for both phone and tablet form factors. You declare your UI in lightweight sets of XML @@ -79,7 +79,7 @@ density, locale, and so on.</p> -<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android +<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android Developer Tools</a> offer a full Java IDE with advanced features for developing, debugging, and packaging Android apps. Using the IDE, you can develop on any available Android diff --git a/docs/html/about/versions/android-1.1.jd b/docs/html/about/versions/android-1.1.jd index b2a16153e294..e7d059e1f27b 100644 --- a/docs/html/about/versions/android-1.1.jd +++ b/docs/html/about/versions/android-1.1.jd @@ -9,7 +9,7 @@ sys.date=February 2009 <em>API Level:</em> <strong>2</strong></p> -<p>This document provides version notes for the Android 1.1 system image included in the SDK. +<p>This document provides version notes for the Android 1.1 system image included in the SDK. <ul> <li><a href="#overview">Overview</a> @@ -29,7 +29,7 @@ counterpart to the Android 1.1 production system image, deployable to Android-powered handsets starting in February 2009. </p> <p>The Android 1.1 system image delivers an updated version of the framework -API. As with the Android 1.0 API, the Android 1.1 API +API. As with the Android 1.0 API, the Android 1.1 API is assigned an integer identifier — <strong>2</strong> — that is stored in the system itself. This identifier, called the "API Level", allows the system to correctly determine whether an application is compatible with @@ -37,8 +37,8 @@ the system, prior to installing the application. </p> <p>Applications indicate the lowest system API Level that they are compatible with by adding a value to the <code>android:minSdkVersion</code> attribute. -The value of the attribute is an integer corresponding to an API Level -identifier. Prior to installing an application, the system checks the value of +The value of the attribute is an integer corresponding to an API Level +identifier. Prior to installing an application, the system checks the value of <code>android:minSdkVersion</code> and allows the install only if the referenced integer is less than or equal to the API Level integer stored in the system itself. </p> @@ -139,7 +139,7 @@ listed below.</p> <li>German (de) </li> </ul> -<p>Localized UI strings match the locales that are displayable in +<p>Localized UI strings match the locales that are displayable in the emulator, accessible through the device Settings application.</p> <h2 id="resolved-issues">Resolved Issues</h2> diff --git a/docs/html/about/versions/android-1.5-highlights.jd b/docs/html/about/versions/android-1.5-highlights.jd index dd4d218365b7..e0bae48b4a99 100644 --- a/docs/html/about/versions/android-1.5-highlights.jd +++ b/docs/html/about/versions/android-1.5-highlights.jd @@ -7,7 +7,7 @@ excludeFromSuggestions=true </p> -<p>The Android 1.5 platform introduces many new features for users and developers. +<p>The Android 1.5 platform introduces many new features for users and developers. The list below provides an overview of the changes. </p> <ul> @@ -65,7 +65,7 @@ The list below provides an overview of the changes. </p> <ul> <li>Widgets <ul> - <li>Bundled home screen widgets include: analog clock, calendar, + <li>Bundled home screen widgets include: analog clock, calendar, music player, picture frame, and search</li> </ul></li> <li>Live folders</li> @@ -121,7 +121,7 @@ The list below provides an overview of the changes. </p> <li>Google applications (not available in the Android 1.5 System Image that is included in the Android SDK) <ul> - <li>View Google Talk friends' status in Contacts, SMS, MMS, GMail, and + <li>View Google Talk friends' status in Contacts, SMS, MMS, GMail, and Email applications</li> <li>Batch actions such as archive, delete, and label on Gmail messages</li> <li>Upload videos to Youtube</li> @@ -165,7 +165,7 @@ framework</a> on the Android Developer's Blog.</li> </ul> </li> -<li>Input Method framework +<li>Input Method framework <ul> <li>{@link android.inputmethodservice.InputMethodService Input Method Service} framework</li> diff --git a/docs/html/about/versions/android-1.5.jd b/docs/html/about/versions/android-1.5.jd index 775561bffe8b..45a27eefb733 100644 --- a/docs/html/about/versions/android-1.5.jd +++ b/docs/html/about/versions/android-1.5.jd @@ -55,7 +55,7 @@ download the platform into your Android 1.6 or later SDK.</p> <h2 id="features">Platform Highlights</h2> <p>For a list of new user features and platform highlights, see the <a -href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android +href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android {@sdkPlatformVersion} Platform Highlights</a> document.</p> <h2 id="relnotes">Revisions</h2> @@ -119,10 +119,10 @@ function toggleDiv(link) { <dt>Tools:</dt> <dd> -<ul> +<ul> <li>Adds support for library projects in the Ant build system.</li> <li>Fixes test project build in the Ant build system.</li> -</ul> +</ul> </dd> </dl> @@ -256,8 +256,8 @@ android.speech.RecognizerIntent RecognizerIntent}.</li> <h3 id="api-diff">API differences report</h3> -<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to -the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API +<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to +the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p> @@ -300,8 +300,8 @@ built-in applications:</p> <p>The system image included in the downloadable platform provides a variety of built-in locales. In some cases, region-specific strings are available for the locales. In other cases, a default version of the language is used. The -languages that are available in the Android {@sdkPlatformVersion} system -image are listed below (with <em>language</em>_<em>country/region</em> +languages that are available in the Android {@sdkPlatformVersion} system +image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p> <table style="border:0;padding-bottom:0;margin-bottom:0;"> @@ -341,7 +341,7 @@ locale descriptor).</p> </tr> </table> -<p>Localized UI strings match the locales that are accessible +<p>Localized UI strings match the locales that are accessible through Settings.</p> <h2 id="skins">Emulator Skins</h2> diff --git a/docs/html/about/versions/android-1.6-highlights.jd b/docs/html/about/versions/android-1.6-highlights.jd index 88c0f55c8fc1..91795798bb00 100644 --- a/docs/html/about/versions/android-1.6-highlights.jd +++ b/docs/html/about/versions/android-1.6-highlights.jd @@ -28,13 +28,13 @@ sdk.date=September 2009 <object width="278" height="180"> <param name="movie" value="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&"></param> <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param> -<embed src="//www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" +<embed src="//www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed> </object> </div> -<p>The Android 1.6 platform introduces new features for users and developers. +<p>The Android 1.6 platform introduces new features for users and developers. This page provides an overview of some new features and technologies.</p> <ul> @@ -44,7 +44,7 @@ This page provides an overview of some new features and technologies.</p> </ul> - + <h2 id="UserFeatures" style="clear:right">New User Features</h2> <!-- screenshots float right --> @@ -53,7 +53,7 @@ This page provides an overview of some new features and technologies.</p> <img src="{@docRoot}sdk/images/search.png" class="screenshot" alt="" /><br/> Quick Search Box </div> - + <div class="screenshot"> <img src="{@docRoot}sdk/images/camera.png" class="screenshot" alt="" /><br/> New Camera/Camcorder UI @@ -67,32 +67,32 @@ Battery Usage Indicator <h3 id="QuickSearchBox">Quick Search Box for Android</h3> -<p>Android 1.6 includes a redesigned search framework that provides a quick, -effective, and consistent way for users to search across multiple sources—such as -browser bookmarks & history, contacts, and the web—directly from +<p>Android 1.6 includes a redesigned search framework that provides a quick, +effective, and consistent way for users to search across multiple sources—such as +browser bookmarks & history, contacts, and the web—directly from the home screen.</p> -<p>The system constantly learns which search results are more relevant based on what is -clicked. So popular contacts or apps that have previously been picked will bubble up to +<p>The system constantly learns which search results are more relevant based on what is +clicked. So popular contacts or apps that have previously been picked will bubble up to the top when a user types the first few letters of a relevant query.</p> -<p>The search framework also provides developers a way to easily expose relevant +<p>The search framework also provides developers a way to easily expose relevant content from their applications in Quick Search Box.</p> <h3 id="Camera">Camera, Camcorder, and Gallery</h3> -<p>An updated user interface provides an integrated camera, camcorder, and gallery experience. -Users can quickly toggle between still and video capture modes. Additionally, the gallery +<p>An updated user interface provides an integrated camera, camcorder, and gallery experience. +Users can quickly toggle between still and video capture modes. Additionally, the gallery enables users to select multiple photos for deletion.</p> <p>Android 1.6 also provides a much faster camera experience. -Compared to the previous release, launching the camera is now 39% faster, +Compared to the previous release, launching the camera is now 39% faster, and there is a 28% improvement in the time from completing one shot to the next.</p> <h3 id="VPN">VPN, 802.1x</h3> -<p>A new Virtual Private Network (VPN) control panel in Settings allows users +<p>A new Virtual Private Network (VPN) control panel in Settings allows users to configure and connect to the following types of VPNs:</p> <ul> @@ -105,8 +105,8 @@ to configure and connect to the following types of VPNs:</p> <h3 id="Battery">Battery usage indicator</h3> -<p>A new battery usage screen lets users see which apps and services are consuming -battery power. If the user determines that a particular service or application is +<p>A new battery usage screen lets users see which apps and services are consuming +battery power. If the user determines that a particular service or application is using too much power, they can take action to save the battery by adjusting settings, stopping the application, or uninstalling the application.</p> @@ -132,11 +132,11 @@ it easier for users to discover great apps and games from developers.</p> <ul> <li>At the homescreen, users can choose among <em>Apps</em>, <em>Games</em>, and <em>Downloads</em>.</li> <li>Inside a category, users can explore titles that are <em>Top paid</em>, <em>Top free</em>, and <em>Just in</em>.</li> - <li>For each title, users can now see screenshots submitted by developers in addition to + <li>For each title, users can now see screenshots submitted by developers in addition to reviews from other users.</li> </ul> - - + + <h2 id="PlatformTechnologies" style="clear:right">New Platform Technologies</h2> @@ -145,44 +145,44 @@ it easier for users to discover great apps and games from developers.</p> <p>The Android search framework has been redesigned and expanded to provide third-party applications the opportunity to surface -content from their applications in Quick Search Box, the global search tool. -To do this, developers will need to make their app "searchable" and provide +content from their applications in Quick Search Box, the global search tool. +To do this, developers will need to make their app "searchable" and provide suggestions in response to user queries. -To enable application search suggestions, users simply select each application from which +To enable application search suggestions, users simply select each application from which they'd like to receive suggestions, under Searchable items in the Search settings.</p> <h3 id="TTS">Text-to-speech engine</h3> -<p>Android 1.6 features a multi-lingual speech synthesis engine called Pico. -It allows any Android application to "speak" a string of text with an accent that matches the language. -The engine supports the following languages: English (American and British accents), French, -Italian, German and Spanish. If you're using a T-Mobile G1 or Dream device, you'll need to download the -SpeechSynthesis Data Installer from Google Play, which includes the "voices" needed by the +<p>Android 1.6 features a multi-lingual speech synthesis engine called Pico. +It allows any Android application to "speak" a string of text with an accent that matches the language. +The engine supports the following languages: English (American and British accents), French, +Italian, German and Spanish. If you're using a T-Mobile G1 or Dream device, you'll need to download the +SpeechSynthesis Data Installer from Google Play, which includes the "voices" needed by the text-to-speech engine.</p> <h3 id="Gestures">Gestures</h3> -<p>A new gestures framework provides application developers with a framework for creating, storing, +<p>A new gestures framework provides application developers with a framework for creating, storing, loading, and recognizing gestures and associating them with specific actions.</p> -<p>Developers can use the new GestureBuilder tool included in the Android 1.6 SDK to generate libraries +<p>Developers can use the new GestureBuilder tool included in the Android 1.6 SDK to generate libraries of gestures to include with their application.</p> <h3 id="A11y">Accessibility</h3> -<p>Android 1.6 provides a new accessibility framework. -With this framework, developers can create accessibility plugins that respond to user input, -such as making a sound when a new window is shown, vibrating when navigating to the top of +<p>Android 1.6 provides a new accessibility framework. +With this framework, developers can create accessibility plugins that respond to user input, +such as making a sound when a new window is shown, vibrating when navigating to the top of a list, and providing spoken feedback.</p> <h3 id="Screens">Expanded support for screen densities and resolutions</h3> -<p>Android 1.6 adds screen support that enables applications to be rendered properly on different -display resolutions and densities. Developers can also specify the types of screens supported by their +<p>Android 1.6 adds screen support that enables applications to be rendered properly on different +display resolutions and densities. Developers can also specify the types of screens supported by their application.</p> @@ -208,7 +208,7 @@ application.</p> <h3 id="DeveloperAPIs">New Framework APIs</h3> -<p>For a detailed overview of new APIs, see the -<a href="{@docRoot}about/versions/android-1.6.html#api-changes">Version Notes</a>. -For a complete report of all API changes, see the +<p>For a detailed overview of new APIs, see the +<a href="{@docRoot}about/versions/android-1.6.html#api-changes">Version Notes</a>. +For a complete report of all API changes, see the <a href="{@docRoot}sdk/api_diff/4/changes.html">API Differences Report</a>. diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd index c16088ad8021..3f7e1c8cd238 100644 --- a/docs/html/about/versions/android-2.0-highlights.jd +++ b/docs/html/about/versions/android-2.0-highlights.jd @@ -33,7 +33,7 @@ sdk.date=October 2009 <object width="278 height="180"> <param name="movie" value="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&"></param> <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param> -<embed src="//www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" +<embed src="//www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed> </object> </div> @@ -49,7 +49,7 @@ and technologies in Android 2.0.</p> </ul> - + <h2 id="UserFeatures" style="clear:right">New User Features</h2> <!-- screenshots float right --> @@ -99,10 +99,10 @@ when you touch a contact photo or status icon.</li> <!-- <ul> - <li>Sync support for contacts from multiple data sources including Exchange. - Handset manufacturers can choose whether or not to include Exchange support + <li>Sync support for contacts from multiple data sources including Exchange. + Handset manufacturers can choose whether or not to include Exchange support in their devices.</li> - <li>New way to hover on a person to see more info and select communication + <li>New way to hover on a person to see more info and select communication mode (for example, phone, SMS, email).</li> </ul> --> @@ -150,7 +150,7 @@ when you touch a contact photo or status icon.</li> <h3 id="Browser">Browser</h3> <ul> - <li>Refreshed UI with actionable browser URL bar enables users to directly + <li>Refreshed UI with actionable browser URL bar enables users to directly tap the address bar for instant searches and navigation.</li> <li>Bookmarks with web page thumbnails.</li> <li>Support for double-tap zoom.</li> @@ -192,10 +192,10 @@ hardware acceleration.</p> <h3 id="DeveloperAPIs">New Framework APIs</h3> <p>Android 2.0 includes several new developer APIs. -For an overview of new APIs, see the +For an overview of new APIs, see the <a href="{@docRoot}about/versions/android-2.0.html#api">Android 2.0 version notes</a>.</p> -<p>For a complete report of all API changes, see the +<p>For a complete report of all API changes, see the <a href="{@docRoot}sdk/api_diff/5/changes.html">API Differences Report</a>.</p> diff --git a/docs/html/about/versions/android-2.0.1.jd b/docs/html/about/versions/android-2.0.1.jd index 48f7ae892fa7..b0f4db6c9e83 100644 --- a/docs/html/about/versions/android-2.0.1.jd +++ b/docs/html/about/versions/android-2.0.1.jd @@ -162,8 +162,8 @@ third-party sync adapters.</p> <p>The system image included in the downloadable platform provides a variety of built-in locales. In some cases, region-specific strings are available for the locales. In other cases, a default version of the language is used. The -languages that are available in the Android {@sdkPlatformVersion} system -image are listed below (with <em>language</em>_<em>country/region</em> locale +languages that are available in the Android {@sdkPlatformVersion} system +image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p> <table style="border:0;padding-bottom:0;margin-bottom:0;"> @@ -203,7 +203,7 @@ descriptor).</p> </tr> </table> -<p>Localized UI strings match the locales that are accessible +<p>Localized UI strings match the locales that are accessible through Settings.</p> <h2 id="skins">Emulator Skins</h2> @@ -263,8 +263,8 @@ stored in the system itself. This identifier, called the "API Level", allows the system to correctly determine whether an application is compatible with the system, prior to installing the application. </p> -<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to -set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code><uses-sdk></code> +<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to +set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code><uses-sdk></code> element in your application's manifest. </p> <p>For more information about how to use API Level, see the <a @@ -345,10 +345,10 @@ package name, rather than the process name.</li> <h3 id="api-diff">API differences report</h3> -<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to +<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to API Level 5, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API -Differences Report</a>. There are very few API changes in API Level 6, +Differences Report</a>. There are very few API changes in API Level 6, so you might also be interested in reviewing the <a href="{@docRoot}sdk/api_diff/5/changes.html">API differences between 4 and 5</a>.</p> diff --git a/docs/html/about/versions/android-2.0.jd b/docs/html/about/versions/android-2.0.jd index 329af3cf1d69..03236860c5f3 100644 --- a/docs/html/about/versions/android-2.0.jd +++ b/docs/html/about/versions/android-2.0.jd @@ -50,7 +50,7 @@ download the platform into your SDK.</p> <h2 id="features">Platform Highlights</h2> <p>For a list of new user features and platform highlights, see the <a -href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android +href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android {@sdkPlatformVersion} Platform Highlights</a> document.</p> <h2 id="relnotes">Revisions</h2> @@ -151,8 +151,8 @@ built-in applications:</p> <p>The system image included in the downloadable platform provides a variety of built-in locales. In some cases, region-specific strings are available for the locales. In other cases, a default version of the language is used. The -languages that are available in the Android {@sdkPlatformVersion} system -image are listed below (with <em>language</em>_<em>country/region</em> locale +languages that are available in the Android {@sdkPlatformVersion} system +image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p> <table style="border:0;padding-bottom:0;margin-bottom:0;"> @@ -192,7 +192,7 @@ descriptor).</p> </tr> </table> -<p>Localized UI strings match the locales that are accessible +<p>Localized UI strings match the locales that are accessible through Settings.</p> <h2 id="skins">Emulator Skins</h2> @@ -242,14 +242,14 @@ through Settings.</p> <h3 id="api-level">API level</h3> <p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework -API. As with previous versions, the Android {@sdkPlatformVersion} API +API. As with previous versions, the Android {@sdkPlatformVersion} API is assigned an integer identifier — <strong>{@sdkPlatformApiLevel}</strong> — that is stored in the system itself. This identifier, called the "API Level", allows the system to correctly determine whether an application is compatible with the system, prior to installing the application. </p> -<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to -set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code><uses-sdk></code> +<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to +set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code><uses-sdk></code> element in your application's manifest. </p> <p>For more information about how to use API Level, see the <a @@ -319,8 +319,8 @@ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level <p>Android 2.0 is designed to run on devices that use virtual keys for HOME, MENU, BACK, and SEARCH, rather than physical keys. To support the best user experience on those devices, the Android platform now executes these buttons at -key-up, for a key-down/key-up pair, rather than key-down. This helps prevent -accidental button events and lets the user press the button area and then drag +key-up, for a key-down/key-up pair, rather than key-down. This helps prevent +accidental button events and lets the user press the button area and then drag out of it without generating an event. </p> <p>This change in behavior should only affect your application if it is @@ -332,7 +332,7 @@ make sure that your application is handling the key events properly. </p> however, if your application is doing so and it invokes some action on key-down, rather than key-up, you should modify your code. </p> -<p>If your application will use APIs introduced in Android 2.0 (API Level 5), +<p>If your application will use APIs introduced in Android 2.0 (API Level 5), you can take advantage of new APIs for managing key-event pairs:</p> <ul> @@ -363,16 +363,16 @@ method), then invoke the action at key up. Here's a pattern you can use:</li> </ul> <p>If you want to update a legacy application so that its handling of the BACK -key works properly for both Android 2.0 and older platform versions, you +key works properly for both Android 2.0 and older platform versions, you can use an approach similar to that shown above. Your code can catch the -target button event on key-down, set a flag to track the key event, and -then also catch the event on key-up, executing the desired action if the tracking -flag is set. You'll also want to watch for focus changes and clear the tracking +target button event on key-down, set a flag to track the key event, and +then also catch the event on key-up, executing the desired action if the tracking +flag is set. You'll also want to watch for focus changes and clear the tracking flag when gaining/losing focus.</p> <h3 id="api-diff">API differences report</h3> -<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to +<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p> diff --git a/docs/html/about/versions/android-2.1.jd b/docs/html/about/versions/android-2.1.jd index ce6f1b20516c..5f8f6240c1cc 100644 --- a/docs/html/about/versions/android-2.1.jd +++ b/docs/html/about/versions/android-2.1.jd @@ -113,10 +113,10 @@ class="toggle-content-img" alt="" /> <dt>Tools:</dt> <dd> -<ul> +<ul> <li>Adds support for library projects in the Ant build system.</li> <li>Adds improved layout rendering in ADT’s visual layout editor.</li> -</ul> +</ul> </dd> </dl> diff --git a/docs/html/about/versions/android-2.3.3.jd b/docs/html/about/versions/android-2.3.3.jd index eec0735b0842..91f1d282d1f6 100644 --- a/docs/html/about/versions/android-2.3.3.jd +++ b/docs/html/about/versions/android-2.3.3.jd @@ -81,7 +81,7 @@ tag technologies, based on two new intent actions — <code>android.nfc.action.NDEF_DISCOVERED</code> and <code>android.nfc.action.TECH_DISCOVERED</code>.</p> -<p>The NFC API is available in the {@link android.nfc} and +<p>The NFC API is available in the {@link android.nfc} and {@link android.nfc.tech} packages. The key classes are: </p> <ul> @@ -89,7 +89,7 @@ tag technologies, based on two new intent actions — <li>{@link android.nfc.NdefMessage}, which represents an NDEF data message, the standard format in which "records" carrying data are transmitted between devices and tags. An NDEF message certain many NDEF records of different types. -Applications can receive these messages from +Applications can receive these messages from {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED NDEF_DISCOVERED}, {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED TECH_DISCOVERED}, or {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED TAG_DISCOVERED} Intents.</li> @@ -124,15 +124,15 @@ NFC. To request filtering, add <code><uses-feature android:name="android.hardware.nfc" android:required="true"></code> to the application's manifest.</p> -<p class="note">For more information, read the +<p class="note">For more information, read the <a href="{@docRoot}guide/topics/connectivity/nfc/index.html">NFC</a> developer guide.</p> <h3 id="bluetooth">Bluetooth</h3> <p>Android 2.3.3 adds platform and API support for Bluetooth nonsecure socket connections. This lets applications communicate with simple devices that may not -offer a UI for authentication. See -{@link android.bluetooth.BluetoothDevice#createInsecureRfcommSocketToServiceRecord(java.util.UUID)} and +offer a UI for authentication. See +{@link android.bluetooth.BluetoothDevice#createInsecureRfcommSocketToServiceRecord(java.util.UUID)} and {@link android.bluetooth.BluetoothAdapter#listenUsingInsecureRfcommWithServiceRecord(java.lang.String, java.util.UUID)} for more information. </p> @@ -183,7 +183,7 @@ the system, prior to installing the application. </p> <p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the application against the Android library that is provided in -the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might +the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the <code><uses-sdk></code> element in the application's manifest. If your application is designed to run only on Android 2.3 and higher, diff --git a/docs/html/about/versions/android-2.3.4.jd b/docs/html/about/versions/android-2.3.4.jd index 963df9a7f51c..8705d1d50dec 100644 --- a/docs/html/about/versions/android-2.3.4.jd +++ b/docs/html/about/versions/android-2.3.4.jd @@ -31,7 +31,7 @@ Differences Report »</a> </li> <p>Android 2.3.4 ({@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}) is a maintenance release that adds several bug fixes and patches -to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, +to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, Android 2.3.4 brings support for the Open Accessory API to mobile devices, through the optional <a href="#usb">Open Accessory Library</a>. </p> diff --git a/docs/html/about/versions/android-2.3.jd b/docs/html/about/versions/android-2.3.jd index 34fdb526a7e8..bc549035f486 100644 --- a/docs/html/about/versions/android-2.3.jd +++ b/docs/html/about/versions/android-2.3.jd @@ -240,7 +240,7 @@ reboots. </p> <li>Applications can obtain an instance of the {@link android.app.DownloadManager} class by calling {@link android.content.Context#getSystemService(String)} and passing -{@link android.content.Context#DOWNLOAD_SERVICE}. Applications that request +{@link android.content.Context#DOWNLOAD_SERVICE}. Applications that request downloads through this API should register a broadcast receiver for {@link android.app.DownloadManager#ACTION_NOTIFICATION_CLICKED}, to appropriately handle when the user clicks on a running download in a notification or from the @@ -690,7 +690,7 @@ the system, prior to installing the application. </p> <p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the application against the Android library that is provided in -the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might +the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the <code><uses-sdk></code> element in the application's manifest. If your application is designed to run only on Android 2.3 and higher, diff --git a/docs/html/about/versions/android-3.0-highlights.jd b/docs/html/about/versions/android-3.0-highlights.jd index 21dbda6af4ce..e9d2b392ed98 100644 --- a/docs/html/about/versions/android-3.0-highlights.jd +++ b/docs/html/about/versions/android-3.0-highlights.jd @@ -40,7 +40,7 @@ page.title=Honeycomb <p>Welcome to Android 3.0!</p> -<p>The Android 3.0 platform introduces many new and exciting features for users and developers. +<p>The Android 3.0 platform introduces many new and exciting features for users and developers. This document provides a glimpse of some of the new features and technologies, as delivered in Android 3.0. For a more detailed look at new developer APIs, see the <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0 Platform</a> document.</p> @@ -61,7 +61,7 @@ src="{@docRoot}sdk/images/3.0/home_hero1.png" alt="" height="280" /></a></div> <p>Android 3.0 is a new version of the Android platform that is specifically optimized for devices with larger screen sizes, particularly tablets. It introduces a brand new, truly virtual and “holographic†UI design, as well as an elegant, content-focused interaction model.</p> -<p>Android 3.0 builds on the things people love most about Android — refined multitasking, rich notifications, Home screen customization, widgets, and more — and transforms them with a vibrant, 3D experience and deeper interactivity, making them familiar but even better than before.</p> +<p>Android 3.0 builds on the things people love most about Android — refined multitasking, rich notifications, Home screen customization, widgets, and more — and transforms them with a vibrant, 3D experience and deeper interactivity, making them familiar but even better than before.</p> <p>The new UI brings fresh paradigms for interaction, navigation, and customization and makes them available to all applications — even those built for earlier versions of the platform. Applications written for Android 3.0 are able to use an extended set of UI objects, powerful graphics, and media capabilities to engage users in new ways.</p> diff --git a/docs/html/about/versions/android-3.0.jd b/docs/html/about/versions/android-3.0.jd index 51847433f50a..3175d3ca3afa 100644 --- a/docs/html/about/versions/android-3.0.jd +++ b/docs/html/about/versions/android-3.0.jd @@ -392,7 +392,7 @@ Demos</a> application.</p> <h3>Extended UI framework</h3> <ul> - + <li><b>Multiple-choice selection for ListView and GridView</b> <p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link @@ -419,9 +419,9 @@ java</a> class in the API Demos sample application.</p> </li> - + <li><b>New APIs to transform views</b> - + <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity layout. New transformations are made possible with a set of object properties that define the view's layout position, orientation, transparency and more.</p> @@ -452,7 +452,7 @@ animator.start(); </pre> </li> - + <li><b>New holographic themes</b> <p>The standard system widgets and overall look have been redesigned and incorporate a new @@ -475,55 +475,55 @@ href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based o version</a>.</p> </li> - - + + <li><b>New widgets</b> <ul> <li>{@link android.widget.AdapterViewAnimator} <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching between its views.</p></li> - + <li>{@link android.widget.AdapterViewFlipper} <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have been added to it. Only one child is shown at a time. If requested, it can automatically flip between each child at a regular interval.</p></li> - + <li>{@link android.widget.CalendarView} <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the calendar to a desired date. You can configure the range of dates available in the widget.</p></li> - + <li>{@link android.widget.ListPopupWindow} <p>Anchors itself to a host view and displays a list of choices, such as for a list of suggestions when typing into an {@link android.widget.EditText} view.</p></li> - + <li>{@link android.widget.NumberPicker} <p>Enables the user to select a number from a predefined range. The widget presents an input field and up and down buttons for selecting a number. Touching the input field allows the user to scroll through values or touch again to directly edit the current value. It also allows you to map positions to strings, so that the corresponding string is displayed instead of the index position.</p></li> - + <li>{@link android.widget.PopupMenu} <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft keyboard) is visible, the popup does not overlap the IME it until the user touches the menu.</p></li> - + <li>{@link android.widget.SearchView} <p>Provides a search box that you can configure to deliver search queries to a specified activity and display search suggestions (in the same manner as the traditional search dialog). This widget is particularly useful for offering a search widget in the Action Bar. For more information, see <a href="{@docRoot}guide/topics/search/search-dialog.html">Creating a Search Interface.</p></li> - + <li>{@link android.widget.StackView} <p>A view that displays its children in a 3D stack and allows users to swipe through views like a rolodex.</p></li> - + </ul> </li> - + </ul> @@ -545,7 +545,7 @@ smoother scrolling, and overall better performance and response to user interact <li><b>View support for hardware and software layers</b> - + <p>By default, a {@link android.view.View} has no layer specified. You can specify that the view be backed by either a hardware or software layer, specified by values {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using @@ -563,7 +563,7 @@ software layer, which can potentially be slow.</p> <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p> </li> - + <li><b>Renderscript 3D graphics engine</b> @@ -591,7 +591,7 @@ android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at wh should be captured.</p></li> <li><b>Texture support for image streams</b> - + <p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your {@link android.hardware.Camera} instance, you can specify the {@link @@ -599,7 +599,7 @@ android.graphics.SurfaceTexture} upon which to draw video playback or preview fr camera.</p></li> <li><b>HTTP Live streaming</b> - + <p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live streaming session. The media framework supports most of the HTTP Live streaming specification, including adaptive bit rate. See the <a @@ -607,7 +607,7 @@ href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> d more information.</p></li> <li><b>EXIF data</b> - + <p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure time.</p></li> @@ -810,7 +810,7 @@ expressed with acceleration and rotation rate data. A web page can register for events by calling {@code window.addEventListener} with event type {@code "deviceorientation"} and register for motion events by registering the {@code "devicemotion"} event type.</p> </li> - + <li><b>CSS 3D Transforms</b> <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three @@ -967,7 +967,7 @@ the system, prior to installing the application. </p> <p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the application against the Android library that is provided in -the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might +the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the <code><uses-sdk></code> element in the application's manifest. If your application is designed to run only on Android 2.3 and higher, diff --git a/docs/html/about/versions/android-3.1-highlights.jd b/docs/html/about/versions/android-3.1-highlights.jd index 5283c2a45861..2a706989f471 100644 --- a/docs/html/about/versions/android-3.1-highlights.jd +++ b/docs/html/about/versions/android-3.1-highlights.jd @@ -93,7 +93,7 @@ device.</p> <p>The platform also adds new support for USB accessories — external hardware devices designed to attach to Android-powered devices as USB hosts. When an accessory is attached, the framework will look for a corresponding application -and offer to launch it for the user. The accessory can also present a URL +and offer to launch it for the user. The accessory can also present a URL to the user, for downloading an appropriate application if one is not already installed. Users can interact with the application to control powered accessories such as robotics controllers; docking stations; diagnostic and musical equipment; @@ -215,7 +215,7 @@ indicator to let users see how much space is available.</p> <div style="padding-top:0em;"> <div style="margin-right:1em;float:left;margin-left:0em;"><img src="{@docRoot}sdk/images/3.1/resizeable.png" alt="" width="170" target="_android" style="margin-bottom:0;" /> -<div style="padding-left:1.4em;padding-bottom:1em;width:180px;font-size:.9em"><strong>Figure +<div style="padding-left:1.4em;padding-bottom:1em;width:180px;font-size:.9em"><strong>Figure 4.</strong> Home screen widgets can now be resized.</div></div> <p><strong>Calendar</strong></p> diff --git a/docs/html/about/versions/android-3.1.jd b/docs/html/about/versions/android-3.1.jd index cdcf51eee629..e1486bef7da8 100644 --- a/docs/html/about/versions/android-3.1.jd +++ b/docs/html/about/versions/android-3.1.jd @@ -240,7 +240,7 @@ and game controllers include android.view.MotionEvent#AXIS_HAT_Y}, {@link android.view.MotionEvent#AXIS_RTRIGGER}, {@link android.view.MotionEvent#AXIS_ORIENTATION}, {@link -android.view.MotionEvent#AXIS_THROTTLE}, and many others. +android.view.MotionEvent#AXIS_THROTTLE}, and many others. Existing {@link android.view.MotionEvent} axes are represented by {@link android.view.MotionEvent#AXIS_X}, {@link android.view.MotionEvent#AXIS_Y}, {@link android.view.MotionEvent#AXIS_PRESSURE}, {@link @@ -299,7 +299,7 @@ each axis value.</p> <p>Finally, since the motion events from joysticks, gamepads, mice, and trackballs are not touch events, the platform adds a new callback method for passing them to a {@link android.view.View} as "generic" motion events. -Specifically, it reports the non-touch motion events to +Specifically, it reports the non-touch motion events to {@link android.view.View}s through a call to {@link android.view.View#onGenericMotionEvent(android.view.MotionEvent) onGenericMotionEvent()}, rather than to {@link @@ -318,7 +318,7 @@ onGenericMotionEvent()} there instead.</p> <p class="note">To look at a sample application that uses joystick motion events, see <a -href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html">GameControllerInput</a> +href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html">GameControllerInput</a> and <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html">GameView</a>.</p> diff --git a/docs/html/about/versions/android-3.2.jd b/docs/html/about/versions/android-3.2.jd index 887755cfefb2..c6df7f5ddab6 100644 --- a/docs/html/about/versions/android-3.2.jd +++ b/docs/html/about/versions/android-3.2.jd @@ -132,7 +132,7 @@ provides these tools:</p> <ul> <li>New resource qualifiers for targeting layouts and other resources to a -minimum smallestWidth, width, or height, and</li> +minimum smallestWidth, width, or height, and</li> <li>New manifest attributes, for specifying the app's maximum screen compatibility range</li> </ul> @@ -201,7 +201,7 @@ the resource should be used, measured in "dp" units. As mentioned above, a screen's smallestWidth is constant, regardless of orientation. Examples: <code>sw320dp</code>, <code>sw720dp</code>, <code>sw720dp</code>.</li> -<li><code>wNNNdp</code> and <code>hNNNdp</code> — Specifies the minimum +<li><code>wNNNdp</code> and <code>hNNNdp</code> — Specifies the minimum width or height on which the resource should be used, measured in "dp" units. As mentioned above, a screen's width and height are relative to the orientation of the screen and change whenever the orientation changes. Examples: @@ -214,7 +214,7 @@ dp, others for wider than 600 dp, and others for wider than 720 dp. When multiple resource configurations are qualified for a given screen, the system selects the configuration that is the closest match. For precise control over which resources are loaded on a given screen, you can tag resources with one -qualifier or combine several new or existing qualifiers. +qualifier or combine several new or existing qualifiers. <p>Based on the typical dimensions listed earlier, here are some examples of how you could use the new qualifiers:</p> diff --git a/docs/html/about/versions/android-4.0.3.jd b/docs/html/about/versions/android-4.0.3.jd index 3be684df63b2..bcfa35c94bce 100644 --- a/docs/html/about/versions/android-4.0.3.jd +++ b/docs/html/about/versions/android-4.0.3.jd @@ -102,16 +102,16 @@ android:name="android.permission.WRITE_SOCIAL_STREAM"></code> in their manife <li>Adds the class {@link android.provider.CalendarContract.Colors} to represent a color table in the <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar Provider</a>. The class provides fields for accessing -colors available for a given account. Colors are referenced by +colors available for a given account. Colors are referenced by {@link android.provider.CalendarContract.ColorsColumns#COLOR_KEY COLOR_KEY} which must be unique for a given account name/type. These values can only be updated by the sync adapter.</li> <li>Adds {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_AVAILABILITY ALLOWED_AVAILABILITY} -and +and {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_ATTENDEE_TYPES ALLOWED_ATTENDEE_TYPES} for exchange/sync support.</li> <li>Adds {@link android.provider.CalendarContract.AttendeesColumns#TYPE_RESOURCE} -(such as conference rooms) for attendees and +(such as conference rooms) for attendees and {@link android.provider.CalendarContract.EventsColumns#AVAILABILITY_TENTATIVE}, as well as {@link android.provider.CalendarContract.EventsColumns#EVENT_COLOR_KEY} for events.</li> @@ -123,7 +123,7 @@ for events.</li> own padding. Instead, the system now automatically adds padding for each widget, based the characteristics of the current screen. This leads to a more uniform, consistent presentation of widgets in a grid. To assist applications that host -home screen widgets, the platform provides a new method +home screen widgets, the platform provides a new method {@link android.appwidget.AppWidgetHostView#getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect) getDefaultPaddingForWidget()}. Applications can call this method to get the system-defined padding and account for it when computing the number of cells to @@ -136,7 +136,7 @@ allocate to the widget.</p> android.view.textservice.SpellCheckerSession#cancel() cancel()} method cancels any pending and running spell-checker tasks in a session.</li> -<li>For spell-checker services, a new suggestions flag, +<li>For spell-checker services, a new suggestions flag, {@link android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS}, lets the services distinguish higher-confidence suggestions from lower-confidence ones. For example, a spell-checker could set the flag if an @@ -206,8 +206,8 @@ the inflated layout.</li> allow apps to get and set the maximum scroll offset for an {@link android.view.accessibility.AccessibilityRecord} object.</li> -<li>When touch-exploration mode is enabled, a new secure setting -{@link android.provider.Settings.Secure#ACCESSIBILITY_SPEAK_PASSWORD} +<li>When touch-exploration mode is enabled, a new secure setting +{@link android.provider.Settings.Secure#ACCESSIBILITY_SPEAK_PASSWORD} indicates whether the user requests the IME to speak text entered in password fields, even when a headset is not in use. By default, no password text is spoken unless a headset is in use.</li> diff --git a/docs/html/about/versions/android-4.0.jd b/docs/html/about/versions/android-4.0.jd index 43185827b4f6..48afcd48164f 100644 --- a/docs/html/about/versions/android-4.0.jd +++ b/docs/html/about/versions/android-4.0.jd @@ -99,7 +99,7 @@ device.</p> <h4>User Profile</h4> <p>Android now includes a personal profile that represents the device owner, as defined by the -{@link android.provider.ContactsContract.Profile} table. Social apps that maintain a user identity +{@link android.provider.ContactsContract.Profile} table. Social apps that maintain a user identity can contribute to the user's profile data by creating a new {@link android.provider.ContactsContract.RawContacts} entry within the {@link android.provider.ContactsContract.Profile}. That is, raw contacts that represent the device user do @@ -210,7 +210,7 @@ used by the sync adapter. The provider takes no action with items in this table them when their related events are deleted.</li> </ul> -<p>To access a user’s calendar data with the Calendar Provider, your application must request +<p>To access a user’s calendar data with the Calendar Provider, your application must request the {@link android.Manifest.permission#READ_CALENDAR} permission (for read access) and {@link android.Manifest.permission#WRITE_CALENDAR} (for write access).</p> @@ -850,7 +850,7 @@ android.view.accessibility.AccessibilityRecord} (there may be several records at event).</li> <li>From either {@link android.view.accessibility.AccessibilityEvent} or an individual {@link -android.view.accessibility.AccessibilityRecord}, you can call {@link +android.view.accessibility.AccessibilityRecord}, you can call {@link android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link android.view.accessibility.AccessibilityNodeInfo} object. <p>An {@link android.view.accessibility.AccessibilityNodeInfo} represents a single node diff --git a/docs/html/about/versions/android-4.1.jd b/docs/html/about/versions/android-4.1.jd index 4131c36fe1ca..4d7cb85f4335 100644 --- a/docs/html/about/versions/android-4.1.jd +++ b/docs/html/about/versions/android-4.1.jd @@ -103,8 +103,8 @@ useful new APIs for app developers.</p> <div class="sidebox-wrapper"> -<div class="sidebox"> - +<div class="sidebox"> + <h3 id="ApiLevel">Declare your app API Level</h3> <p>To better optimize your app for devices running Android {@sdkPlatformVersion}, @@ -117,7 +117,7 @@ test it, then publish an update with this change.</p> can use APIs in Android {@sdkPlatformVersion} while also supporting older versions by adding conditions to your code that check for the system API level before executing APIs not supported by your <a -href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>. +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>. To learn more about maintaining backward-compatibility, read <a href="{@docRoot}training/backward-compatible-ui/index.html">Creating Backward-Compatible @@ -148,15 +148,15 @@ app on Android 4.1.</p> <h3 id="Isolated">Isolated services</h3> -<p>By specifying <a href="{@docRoot}guide/topics/manifest/service-element.html#isolated">{@code android:isolatedProcess="true"}</a> in the +<p>By specifying <a href="{@docRoot}guide/topics/manifest/service-element.html#isolated">{@code android:isolatedProcess="true"}</a> in the <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> tag, your {@link android.app.Service} will run under its own isolated user ID process that has no permissions of its own.</p> <h3 id="Memory">Memory management</h3> -<p>New {@link android.content.ComponentCallbacks2} constants such as {@link -android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_LOW} and {@link +<p>New {@link android.content.ComponentCallbacks2} constants such as {@link +android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_LOW} and {@link android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_CRITICAL} provide foreground processes more information about memory state before the system calls {@link android.app.Activity#onLowMemory()}.</p> @@ -178,7 +178,7 @@ app.</p> <h3 id="LiveWallpapers">Live Wallpapers</h3> <p>New intent protocol to directly launch the live wallpaper preview activity so you can help - users easily select your live wallpaper without forcing them to leave + users easily select your live wallpaper without forcing them to leave your app and navigate through the Home wallpaper picker.</p> <p>To launch the live wallpaper picker, call {@link android.content.Context#startActivity @@ -207,7 +207,7 @@ creates the appropriate activity.</p> <p>This is particularly powerful for scenarios in which the user enters one of your app's activities through a "deep dive" intent such as from a notification or an intent from -different app (as described in the design guide for <a +different app (as described in the design guide for <a href="{@docRoot}design/patterns/navigation.html#between-apps">Navigating Between Apps</a>). When the user enters your activity this way, your app may not naturally have a back stack of activities that can be resumed as the user navigates up. However, when you supply the <a @@ -216,12 +216,12 @@ android:parentActivityName}</a> attribute for your activities, the system recogn whether or not your app already contains a back stack of parent activities and, if not, constructs a synthetic back stack that contains all parent activities.</p> -<p class="note"><strong>Note:</strong> When the user enters a deep activity in your app and - it creates a new task for your app, the system actually inserts the stack of parent activities +<p class="note"><strong>Note:</strong> When the user enters a deep activity in your app and + it creates a new task for your app, the system actually inserts the stack of parent activities into the task. As such, pressing the Back button also navigates back through the stack of parent activities.</p> -<p>When the system creates a synthetic back stack for your app, it builds a basic {@link +<p>When the system creates a synthetic back stack for your app, it builds a basic {@link android.content.Intent} to create a new instance of each parent activity. So there's no saved state for the parent activities the way you'd expect had the user naturally navigated through @@ -251,9 +251,9 @@ you want to modify the {@link android.content.Intent} for the activity's parent, the length of the array with {@link android.app.TaskStackBuilder#getIntentCount()} and pass that value to {@link android.app.TaskStackBuilder#editIntentAt editIntentAt()}.</p> -<p>If your app structure is more complex, there are several other APIs +<p>If your app structure is more complex, there are several other APIs available that allow you to handle the behavior of Up navigation and - fully customize the synthetic back stack. Some of the APIs that give you additional + fully customize the synthetic back stack. Some of the APIs that give you additional control include:</p> <dl> <dt>{@link android.app.Activity#onNavigateUp}</dt> @@ -342,7 +342,7 @@ android.media.MediaCodec#queueInputBuffer queueInputBuffer()}.</p> <!-- <h3 id="Routing">Media routing</h3> -<p>The new {@link android.media.MediaRouter} class allows you to route media channels and +<p>The new {@link android.media.MediaRouter} class allows you to route media channels and streams from the current device to external speakers and other devices. You can acquire an instance of {@link android.media.MediaRouter} by calling {@link android.content.Context#getSystemService getSystemService(}{@link @@ -354,7 +354,7 @@ android.content.Context#MEDIA_ROUTER_SERVICE MEDIA_ROUTER_SERVICE)}.</p> <p>New method {@link android.media.AudioRecord#startRecording startRecording()} allows you to begin audio recording based on a cue defined by a {@link android.media.MediaSyncEvent}. -The {@link android.media.MediaSyncEvent} specifies an audio session +The {@link android.media.MediaSyncEvent} specifies an audio session (such as one defined by {@link android.media.MediaPlayer}), which when complete, triggers the audio recorder to begin recording. For example, you can use this functionality to play an audio tone that indicates the beginning of a recording session and recording @@ -423,7 +423,7 @@ standard mechanisms and UI for choosing where to play media. for changes to the auto focus movement. You can register your interface with {@link android.hardware.Camera#setAutoFocusMoveCallback setAutoFocusMoveCallback()}. Then when the camera is in a continuous autofocus mode ({@link -android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO} or +android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO} or {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}), you'll receive a call to {@link android.hardware.Camera.AutoFocusMoveCallback#onAutoFocusMoving onAutoFocusMoving()}, which tells you whether auto focus has started moving or has stopped moving.</p> @@ -434,7 +434,7 @@ which tells you whether auto focus has started moving or has stopped moving.</p> standard sounds made by the camera or other media actions. You should use these APIs to play the appropriate sound when building a custom still or video camera.</p> -<p>To play a sound, simply instantiate a {@link android.media.MediaActionSound} object, call +<p>To play a sound, simply instantiate a {@link android.media.MediaActionSound} object, call {@link android.media.MediaActionSound#load load()} to pre-load the desired sound, then at the appropriate time, call {@link android.media.MediaActionSound#play play()}.</p> @@ -483,7 +483,7 @@ connect to devices.</p> <p>To register your service, you must first create an {@link android.net.nsd.NsdServiceInfo} object and define the various properties of your service with methods such as - {@link android.net.nsd.NsdServiceInfo#setServiceName setServiceName()}, + {@link android.net.nsd.NsdServiceInfo#setServiceName setServiceName()}, {@link android.net.nsd.NsdServiceInfo#setServiceType setServiceType()}, and {@link android.net.nsd.NsdServiceInfo#setPort setPort()}. </p> @@ -498,7 +498,7 @@ with your {@link android.net.nsd.NsdServiceInfo}.</p> <p>When your {@link android.net.nsd.NsdManager.DiscoveryListener} receives callbacks about services -found, you need to resolve the service by calling +found, you need to resolve the service by calling {@link android.net.nsd.NsdManager#resolveService resolveService()}, passing it an implementation of {@link android.net.nsd.NsdManager.ResolveListener} that receives an {@link android.net.nsd.NsdServiceInfo} object that contains information about the @@ -515,13 +515,13 @@ Discovery allows you to discover a service on an existing connected network (suc network).</p> <p>To broadcast your app as a service over Wi-Fi so that other devices can discover - your app and connect to it, call {@link + your app and connect to it, call {@link android.net.wifi.p2p.WifiP2pManager#addLocalService addLocalService()} with a {@link android.net.wifi.p2p.nsd.WifiP2pServiceInfo} object that describes your app services.</p> <p>To initiate discover of nearby devices over Wi-Fi, you need to first decide whether you'll communicate using Bonjour or Upnp. To use Bonjour, first set up some callback listeners with - {@link android.net.wifi.p2p.WifiP2pManager#setDnsSdResponseListeners setDnsSdResponseListeners()}, which takes both a {@link android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener} and {@link android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener}. To use Upnp, call + {@link android.net.wifi.p2p.WifiP2pManager#setDnsSdResponseListeners setDnsSdResponseListeners()}, which takes both a {@link android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener} and {@link android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener}. To use Upnp, call {@link android.net.wifi.p2p.WifiP2pManager#setUpnpServiceResponseListener setUpnpServiceResponseListener()}, which takes a {@link android.net.wifi.p2p.WifiP2pManager.UpnpServiceResponseListener}.</p> <p>Before you can start discovering services on local devices, you also need to call {@link android.net.wifi.p2p.WifiP2pManager#addServiceRequest addServiceRequest()}. When the {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} you pass to this method receives a @@ -644,7 +644,7 @@ deprecated.</p> <h3 id="ActivityOptions">Activity launch animations</h3> <p>You can now launch an {@link android.app.Activity} using zoom animations or -your own custom animations. To specify the animation you want, use the {@link +your own custom animations. To specify the animation you want, use the {@link android.app.ActivityOptions} APIs to build a {@link android.os.Bundle} that you can then pass to any of the methods that start an activity, such as {@link @@ -659,8 +659,8 @@ type of animation you may want to show as your activity opens:</p> Android 4.1 uses this when opening an app.</dd> <dt>{@link android.app.ActivityOptions#makeThumbnailScaleUpAnimation makeThumbnailScaleUpAnimation()}</dt> - <dd>Creates an animation that scales up the activity window starting from a specified - position and a provided thumbnail image. For example, the Recent Apps window in + <dd>Creates an animation that scales up the activity window starting from a specified + position and a provided thumbnail image. For example, the Recent Apps window in Android 4.1 uses this when returning to an app.</dd> <dt>{@link android.app.ActivityOptions#makeCustomAnimation makeCustomAnimation()}</dt> @@ -672,7 +672,7 @@ type of animation you may want to show as your activity opens:</p> <h3 id="TimeAnimator">Time animator</h3> -<p>The new {@link android.animation.TimeAnimator} provides a simple callback +<p>The new {@link android.animation.TimeAnimator} provides a simple callback mechanism with the {@link android.animation.TimeAnimator.TimeListener} that notifies you upon every frame of the animation. There is no duration, interpolation, or object value-setting with this Animator. The listener's callback receives information for each frame including total elapsed time and the elapsed time since the previous animation frame.</p> @@ -692,7 +692,7 @@ type of animation you may want to show as your activity opens:</p> <p>The new method {@link android.app.Notification.Builder#setStyle setStyle()} allows you to specify one of three new styles for your notification that each offer a larger content region. To -specify the style for your large content region, pass {@link +specify the style for your large content region, pass {@link android.app.Notification.Builder#setStyle setStyle()} one of the following objects:</p> <dl> <dt>{@link android.app.Notification.BigPictureStyle}</dt> @@ -720,7 +720,7 @@ android.app.Notification.Builder#setStyle setStyle()} one of the following objec order of your notification in the list by setting the priority with {@link android.app.Notification.Builder#setPriority setPriority()}. You can pass this one of five different priority levels defined by {@code PRIORITY_*} constants -in the {@link android.app.Notification} class. The default is {@link +in the {@link android.app.Notification} class. The default is {@link android.app.Notification#PRIORITY_DEFAULT}, and there's two levels higher and two levels lower.</p> <p>High priority notifications are things that users generally want to respond to quickly, @@ -738,17 +738,17 @@ and passing the following flags:</p> <dl> <dt>{@link android.view.View#SYSTEM_UI_FLAG_FULLSCREEN}</dt> - <dd>Hides non-critical system UI (such as the status bar). + <dd>Hides non-critical system UI (such as the status bar). If your activity uses the action bar in overlay mode (by enabling <a href="{@docRoot}reference/android/R.attr.html#windowActionBarOverlay">{@code android:windowActionBarOverlay}</a>), then this flag also hides the action bar and does so with a coordinated animation when both hiding and showing the two.</dd> - + <dt>{@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}</dt> <dd>Sets your activity layout to use the same screen area that's available when you've enabled {@link android.view.View#SYSTEM_UI_FLAG_FULLSCREEN} even if the system UI elements are still visible. Although parts of your layout will be overlayed by the - system UI, this is useful if your app often hides and shows the system UI with + system UI, this is useful if your app often hides and shows the system UI with {@link android.view.View#SYSTEM_UI_FLAG_FULLSCREEN}, because it avoids your layout from adjusting to the new layout bounds each time the system UI hides or appears.</dd> @@ -779,7 +779,7 @@ and passing the following flags:</p> <h3 id="RemoteViews">Remote views</h3> -<p>{@link android.widget.GridLayout} and {@link android.view.ViewStub} +<p>{@link android.widget.GridLayout} and {@link android.view.ViewStub} are now remotable views so you can use them in layouts for your app widgets and notification custom layouts.</p> @@ -787,7 +787,7 @@ and passing the following flags:</p> <h3 id="Fonts">Font families</h3> -<p>Android 4.1 adds several more variants of the Roboto font style for a total of 10 variants, +<p>Android 4.1 adds several more variants of the Roboto font style for a total of 10 variants, and they're all usable by apps. Your apps now have access to the full set of both light and condensed variants.</p> @@ -820,14 +820,14 @@ condensed variants.</p> {@code "bold"} and {@code "italic"}. You can apply both like so: {@code android:textStyle="bold|italic"}.</p> -<p>You can also use {@link android.graphics.Typeface#create Typeface.create()}. +<p>You can also use {@link android.graphics.Typeface#create Typeface.create()}. For example, {@code Typeface.create("sans-serif-light", Typeface.NORMAL)}.</p> - + <h2 id="Input">Input Framework</h2> @@ -864,7 +864,7 @@ by calling {@link android.view.InputDevice#getVibrator()} on the {@link android. <dl> <dt>{@link android.Manifest.permission#READ_EXTERNAL_STORAGE}</dt> - <dd>Provides protected read access to external storage. In Android 4.1 by + <dd>Provides protected read access to external storage. In Android 4.1 by default all applications still have read access. This will be changed in a future release to require that applications explicitly request read access using this permission. If your application already requests write access, it will @@ -898,9 +898,9 @@ a television interface, declare this feature in your manifest file with the <a h </manifest> </pre> -<p>This feature defines "television" to be a typical living room television experience: - displayed on a big screen, where the user is sitting far away and the dominant form of - input is be something like a d-pad, and generally not through touch or a +<p>This feature defines "television" to be a typical living room television experience: + displayed on a big screen, where the user is sitting far away and the dominant form of + input is be something like a d-pad, and generally not through touch or a mouse/pointer-device.</p> diff --git a/docs/html/about/versions/android-4.2.jd b/docs/html/about/versions/android-4.2.jd index c26d4a2b552b..34fa1d4f4bdb 100755 --- a/docs/html/about/versions/android-4.2.jd +++ b/docs/html/about/versions/android-4.2.jd @@ -6,7 +6,7 @@ sdk.platform.apiLevel=17 <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#Behaviors">Important Behavior Changes</a></li> @@ -46,8 +46,8 @@ Then build your apps against the Android 4.2 platform to begin using the latest <div class="sidebox-wrapper"> -<div class="sidebox"> - +<div class="sidebox"> + <h3 id="ApiLevel">Declare your app API Level</h3> <p>To better optimize your app for devices running Android {@sdkPlatformVersion}, @@ -60,7 +60,7 @@ test it, then publish an update with this change.</p> can use APIs in Android {@sdkPlatformVersion} while also supporting older versions by adding conditions to your code that check for the system API level before executing APIs not supported by your <a -href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>. +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>. To learn more about maintaining backward-compatibility, read <a href="{@docRoot}training/backward-compatible-ui/index.html">Creating Backward-Compatible @@ -94,7 +94,7 @@ android:targetSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-s android:minSdkVersion}</a> to 17 or higher. Otherwise, the default value is still {@code “true"} even when running on Android 4.2 and higher.</p> </li> - + <li>Compared to previous versions of Android, <b>user location</b> results may be less accurate if your app requests the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} permission but does not request the {@link android.Manifest.permission#ACCESS_FINE_LOCATION} permission. @@ -102,7 +102,7 @@ does not request the {@link android.Manifest.permission#ACCESS_FINE_LOCATION} pe coarse location (and not fine location), the system will not provide a user location estimate that’s more accurate than a city block.</p> </li> - + <li>Some <b>device settings</b> defined by {@link android.provider.Settings.System} are now read-only. If your app attempts to write changes to settings defined in {@link android.provider.Settings.System} that have moved to {@link android.provider.Settings.Global}, @@ -410,7 +410,7 @@ there are two basic levels of optimization:</p> <ol> <li>Convert left- and right-oriented layout properties to start- and end-oriented layout -properties. +properties. <p>For example, use {@link android.R.attr#layout_marginStart android:layout_marginStart} in place of {@code android:layout_marginLeft} and {@link android.R.attr#layout_marginEnd android:layout_marginEnd} in place of {@code android:layout_marginRight}. @@ -526,7 +526,7 @@ add all the scripts, create the connections between the scripts by calling {@link android.renderscript.ScriptGroup.Builder#addConnection addConnection()}. When you are done adding the connections, call {@link android.renderscript.ScriptGroup.Builder#create create()} to create the script group. Before executing the script group, specify the input -{@link android.renderscript.Allocation} and initial script to run with the +{@link android.renderscript.Allocation} and initial script to run with the {@link android.renderscript.ScriptGroup#setInput} method and provide the output {@link android.renderscript.Allocation} where the result will be written to and final script to run with {@link android.renderscript.ScriptGroup#setOutput setOutput()}. Finally, call diff --git a/docs/html/about/versions/android-4.4.jd b/docs/html/about/versions/android-4.4.jd index b898fe35c67f..cbc8e6eb261d 100644 --- a/docs/html/about/versions/android-4.4.jd +++ b/docs/html/about/versions/android-4.4.jd @@ -318,7 +318,7 @@ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targe <h3 id="Ratings">Ratings from remote controllers</h3> -<p>Android 4.4 builds upon the existing capabilities for remote control clients (apps that receive media control events with the {@link android.media.RemoteControlClient}) by adding the ability for users to rate the current track from the remote controller.</p> +<p>Android 4.4 builds upon the existing capabilities for remote control clients (apps that receive media control events with the {@link android.media.RemoteControlClient}) by adding the ability for users to rate the current track from the remote controller.</p> <p>The new {@link android.media.Rating} class encapsulates information about a user rating. A rating is defined by its rating style (either {@link android.media.Rating#RATING_HEART}, {@link android.media.Rating#RATING_THUMB_UP_DOWN}, {@link android.media.Rating#RATING_3_STARS}, {@link android.media.Rating#RATING_4_STARS}, {@link android.media.Rating#RATING_5_STARS} or {@link android.media.Rating#RATING_PERCENTAGE}) and the rating value that's appropriate for that style.</p> diff --git a/docs/html/about/versions/jelly-bean.jd b/docs/html/about/versions/jelly-bean.jd index 25f88e3eb2b5..82cac2b14159 100644 --- a/docs/html/about/versions/jelly-bean.jd +++ b/docs/html/about/versions/jelly-bean.jd @@ -21,13 +21,13 @@ function revealSection(hashy) { link = $("#title-tabs a[href$="+sectionId+"]"); link.parent().addClass("selected"); link.parent().siblings().removeClass("selected"); - + sectionDiv = $(".version-section"+link.attr("href")); if (sectionDiv.length) { $(".version-section").hide(); sectionDiv.show(); } - + $('html, body').animate({ scrollTop: $(hashy).offset().top }, 100); @@ -672,7 +672,7 @@ this GPU integration <strong>without recompiling</strong>.</p> <div style="float:left;margin:16px 24px 12px 0px;"> <a href="" target="_android"> <img src="{@docRoot}images/jb-nexus10-1.png" alt="10-inch tablet running Android 4.2" width="380" height="281" /></a> -</div> +</div> <h2 id="42-ui" style="margin-top:2em;">Refined, refreshed UI</h2> @@ -902,7 +902,7 @@ equivalents. The system then handles the mirroring and display of your UI as appropriate.</p> <p>For precise control over your app UI, Android 4.2 includes new APIs that let -you manage layout direction, text direction, text alignment, gravity, and +you manage layout direction, text direction, text alignment, gravity, and locale direction in View components. You can even create custom versions of layout, drawables, and other resources for display when a right-to-left script is in use.</p> @@ -1005,7 +1005,7 @@ compatibility and improved optimization across CPUs, GPUs, and DSPs.</p> <p>Filterscript is ideal for hardware-accelerating simple image-processing and computation operations such as those that might be written for OpenGL ES fragment shaders. Because it places a relaxed set of constraints on hardware, -your operations are optimized and accelerated on more types of device chipsets. +your operations are optimized and accelerated on more types of device chipsets. Any app targeting API level 17 or higher can make use of Filterscript.</p> <h3 id="42-rs-intrinsics">Script intrinsics</h3> @@ -1028,7 +1028,7 @@ could not do if the scripts were executed individually.</p> <div style="float:right;padding-top:1em;width:400px;margin-left:2em;"> <img src="{@docRoot}images/jb-rs-chart-versions.png" alt="Renderscipt optimizations chart" width="360" height="252" style="border:1px solid #ddd;border-radius: 6px;" /> -<p style="image-caption">Renderscript image-processing +<p style="image-caption">Renderscript image-processing benchmarks run on different Android platform versions (Android 4.0, 4.1, and 4.2) in CPU only on a Galaxy Nexus device.</p> <img src="{@docRoot}images/jb-rs-chart-gpu.png" style="border:1px solid #ddd;border-radius: 6px; alt="" width="360" height="252" /> @@ -1143,7 +1143,7 @@ validation failure if the certificate does not chain to a set of expected certificates. This protects against possible compromise of Certificate Authorities.</li> <li><strong>Improved display of Android permissions</strong> — Permissions -have been organized into groups that are more easily understood by users. +have been organized into groups that are more easily understood by users. During review of the permissions, the user can click on the permission to see more detailed information about the permission.</li> <li><strong>installd hardening</strong> — The installd daemon does not run @@ -1196,7 +1196,7 @@ such as burst mode capture with processing controls. Android 4.2 introduces support for controllers based on the NCI standard from the NFC-Forum. NCI provides a standard communication protocol between an NFC Controller (NFCC) and a device Host, and the new NFC stack developed in -collaboration between Google and Broadcom supports it. +collaboration between Google and Broadcom supports it. <h3 id="42-dalvik">Dalvik runtime optimizations</h3> @@ -1248,7 +1248,7 @@ a wider range of architectures:</p> </div> <p>Welcome to Android 4.1 the first version of Jelly Bean!</p> -<p>Android 4.1 is the fastest and smoothest version of Android yet. We’ve made +<p>Android 4.1 is the fastest and smoothest version of Android yet. We’ve made improvements throughout the platform and added great new features for users and developers. This document provides a glimpse of what's new for developers. @@ -1552,7 +1552,7 @@ data and sessions, even where there is no cell network or Wi-Fi available.</p> <h3 id="gps">Google Play services</h3> -<p>Google Play services helps developers to <strong>integrate Google services</strong> such as authentication and Google+ into their apps delivered through Google Play.</p> +<p>Google Play services helps developers to <strong>integrate Google services</strong> such as authentication and Google+ into their apps delivered through Google Play.</p> <p>Google Play services is automatically provisioned to end user devices by Google Play, so all you need is a <strong>thin client library</strong> in your apps.</p> diff --git a/docs/html/about/versions/kitkat.jd b/docs/html/about/versions/kitkat.jd index 2987bd491440..b73e70d1364f 100644 --- a/docs/html/about/versions/kitkat.jd +++ b/docs/html/about/versions/kitkat.jd @@ -13,13 +13,13 @@ function revealSection(hashy) { link = $("#title-tabs a[href$="+sectionId+"]"); link.parent().addClass("selected"); link.parent().siblings().removeClass("selected"); - + sectionDiv = $(".version-section"+link.attr("href")); if (sectionDiv.length) { $(".version-section").hide(); sectionDiv.show(); } - + $('html, body').animate({ scrollTop: $(hashy).offset().top }, 100); diff --git a/docs/html/auto/images/logos/auto/borgward.png b/docs/html/auto/images/logos/auto/borgward.png Binary files differnew file mode 100644 index 000000000000..90298d49a043 --- /dev/null +++ b/docs/html/auto/images/logos/auto/borgward.png diff --git a/docs/html/auto/images/logos/auto/lada.png b/docs/html/auto/images/logos/auto/lada.png Binary files differnew file mode 100644 index 000000000000..d1724601a98e --- /dev/null +++ b/docs/html/auto/images/logos/auto/lada.png diff --git a/docs/html/auto/index.jd b/docs/html/auto/index.jd index 5b67641c8a83..167ed7b8bd45 100644 --- a/docs/html/auto/index.jd +++ b/docs/html/auto/index.jd @@ -372,6 +372,12 @@ nonavpage=true </a> </div> <div class="col-5"> + <a href="http://www.borgward.com/en/"> + <img src="{@docRoot}auto/images/logos/auto/borgward.png" + width="120" height="120" class="img-logo" /> + </a> + </div> + <div class="col-5"> <a href="http://www.buick.com/"> <img src="{@docRoot}auto/images/logos/auto/buick.png" width="120" height="120" class="img-logo" /> @@ -383,15 +389,15 @@ nonavpage=true width="120" height="120" class="img-logo" /> </a> </div> + </div> + + <div class="cols cols-leftp"> <div class="col-5"> <a href="http://www.chevrolet.com/"> <img src="{@docRoot}auto/images/logos/auto/chevrolet.png" width="120" height="120" class="img-logo" /> </a> </div> - </div> - - <div class="cols cols-leftp"> <div class="col-5"> <a href="http://www.chrysler.com/"> <img src="{@docRoot}auto/images/logos/auto/chrysler.png" @@ -410,15 +416,15 @@ nonavpage=true width="120" height="120" class="img-logo" /> </a> </div> + </div> + + <div class="cols cols-leftp"> <div class="col-5"> <a href="http://www.driveds.com/"> <img src="{@docRoot}auto/images/logos/auto/citroen_ds.png" width="120" height="120" class="img-logo" /> </a> </div> - </div> - - <div class="cols cols-leftp"> <div class="col-5"> <a href="http://www.fiat.com/"> <img src="{@docRoot}auto/images/logos/auto/fiat.png" @@ -437,23 +443,20 @@ nonavpage=true width="120" height="120" class="img-logo" /> </a> </div> - - <div class="col-5"> - <a href="http://www.gmc.com/"> + </div> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.gmc.com/"> <img src="{@docRoot}auto/images/logos/auto/gmc.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> + </a> + </div> <div class="col-5"> <a href="http://www.holden.com/"> <img src="{@docRoot}auto/images/logos/auto/holden.png" width="120" height="120" class="img-logo" /> </a> </div> - - <div class="col-5"> <a href="http://www.honda.com/"> <img src="{@docRoot}auto/images/logos/auto/honda.png" @@ -466,196 +469,197 @@ nonavpage=true width="120" height="120" class="img-logo" /> </a> </div> - <div class="col-5"> - <a href="http://www.infiniti.com/"> + </div> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.infiniti.com/"> <img src="{@docRoot}auto/images/logos/auto/infinity.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.jaguar.com/index.html"> + </a> + </div> + <div class="col-5"> + <a href="http://www.jaguar.com/index.html"> <img src="{@docRoot}auto/images/logos/auto/jaguar.png" width="120" height="120" class="img-logo" /> - </a> - </div> - <div class="col-5"> - <a href="http://www.jeep.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.jeep.com/"> <img src="{@docRoot}auto/images/logos/auto/jeep.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.kia.com/worldwide/"> + <div class="col-5"> + <a href="http://www.kia.com/worldwide/"> <img src="{@docRoot}auto/images/logos/auto/kia.png" width="120" height="120" class="img-logo" /> - </a> + </a> + </div> </div> - <div class="col-5"> - <a href=" http://www.lamborghini.com/"> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href=" http://www.lada.ru/en/"> + <img src="{@docRoot}auto/images/logos/auto/lada.png" + width="120" height="120" class="img-logo" /> + </a> + </div> + <div class="col-5"> + <a href=" http://www.lamborghini.com/"> <img src="{@docRoot}auto/images/logos/auto/lambo.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href=" http://www.landrover.com/"> + </a> + </div> + <div class="col-5"> + <a href=" http://www.landrover.com/"> <img src="{@docRoot}auto/images/logos/auto/landrover.png" width="120" height="120" class="img-logo" /> - </a> - </div> - <div class="col-5"> - <a href=" http://www.lincoln.com/"> - <img src="{@docRoot}auto/images/logos/auto/lincoln.png" + </a> + </div> + <div class="col-5"> + <a href=" http://www.lincoln.com/"> + <img src="{@docRoot}auto/images/logos/auto/lincoln.png" width="120" height="120" class="img-logo" /> - </a> + </a> + </div> </div> - <div class="col-5"> - <a href="http://www.mahindra.com/"> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.mahindra.com/"> <img src="{@docRoot}auto/images/logos/auto/mahindra.png" width="120" height="120" class="img-logo" /> - </a> - </div> - <div class="col-5"> - <a href="http://www.maserati.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.maserati.com/"> <img src="{@docRoot}auto/images/logos/auto/maserati.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.mazda.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.mazda.com/"> <img src="{@docRoot}auto/images/logos/auto/mazda.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.mercedes-benz.com/"> + <div class="col-5"> + <a href="http://www.mercedes-benz.com/"> <img src="{@docRoot}auto/images/logos/auto/mbenz.png" width="120" height="120" class="img-logo" /> - </a> - </div> - <div class="col-5"> - <a href="http://www.mitsubishi-motors.com/"> + </a> + </div> + </div> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.mitsubishi-motors.com/"> <img src="{@docRoot}auto/images/logos/auto/mitsubishi.png" width="120" height="120" class="img-logo" /> - </a> - </div> - - <div class="col-5"> - <a href="http://www.nissan-global.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.nissan-global.com/"> <img src="{@docRoot}auto/images/logos/auto/nissan.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.opel.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.opel.com/"> <img src="{@docRoot}auto/images/logos/auto/opel.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.peugeot.com/"> + <div class="col-5"> + <a href="http://www.peugeot.com/"> <img src="{@docRoot}auto/images/logos/auto/peugeot.png" width="120" height="120" class="img-logo" /> - </a> + </a> + </div> </div> - - <div class="col-5"> - <a href="http://www.ramtrucks.com/"> + + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.ramtrucks.com/"> <img src="{@docRoot}auto/images/logos/auto/ram.png" width="120" height="120" class="img-logo" /> - </a> - </div> - - <div class="col-5"> - <a href="http://www.renault.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.renault.com/"> <img src="{@docRoot}auto/images/logos/auto/renault.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.renaultsamsungm.com/ "> + </a> + </div> + <div class="col-5"> + <a href="http://www.renaultsamsungm.com/ "> <img src="{@docRoot}auto/images/logos/auto/rsm.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.seat.com/"> + <div class="col-5"> + <a href="http://www.seat.com/"> <img src="{@docRoot}auto/images/logos/auto/seat.png" width="120" height="120" class="img-logo" /> - </a> + </a> + </div> </div> - - <div class="col-5"> - <a href="http://www.skoda-auto.com/"> + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.skoda-auto.com/"> <img src="{@docRoot}auto/images/logos/auto/skoda.png" width="120" height="120" class="img-logo" /> - </a> - </div> - - <div class="col-5"> - <a href="http://www.smotor.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.smotor.com/"> <img src="{@docRoot}auto/images/logos/auto/ssangyong.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.subaru-global.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.subaru-global.com/"> <img src="{@docRoot}auto/images/logos/auto/subaru.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.globalsuzuki.com/automobile/"> + <div class="col-5"> + <a href="http://www.globalsuzuki.com/automobile/"> <img src="{@docRoot}auto/images/logos/auto/suzuki.png" width="120" height="120" class="img-logo" /> - </a> + </a> + </div> </div> - - <div class="col-5"> - <a href="http://www.tatamotors.com/"> + + <div class="cols cols-leftp"> + <div class="col-5"> + <a href="http://www.tatamotors.com/"> <img src="{@docRoot}auto/images/logos/auto/tata.png" width="120" height="120" class="img-logo" /> - </a> - </div> - - <div class="col-5"> - <a href="http://www.vauxhall.co.uk/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.vauxhall.co.uk/"> <img src="{@docRoot}auto/images/logos/auto/vauxhall.png" width="120" height="120" class="img-logo" /> - </a> - </div> - </div> - <div class="cols cols-leftp"> - <div class="col-5"> - <a href="http://www.volkswagen.com/"> + </a> + </div> + <div class="col-5"> + <a href="http://www.volkswagen.com/"> <img src="{@docRoot}auto/images/logos/auto/volkswagen.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> - <div class="col-5"> - <a href="http://www.volvocars.com/intl"> + <div class="col-5"> + <a href="http://www.volvocars.com/intl"> <img src="{@docRoot}auto/images/logos/auto/volvo.png" width="120" height="120" class="img-logo" /> - </a> - </div> + </a> + </div> </div> </div> </div> diff --git a/docs/html/design/index.jd b/docs/html/design/index.jd index b4e909f4db15..1a0c1257ad67 100644 --- a/docs/html/design/index.jd +++ b/docs/html/design/index.jd @@ -18,7 +18,7 @@ nonavpage=true <h1 class="dac-hero-title">Up and running with material design</h1> <p class="dac-hero-description"> Android uses a new design metaphor inspired by paper and ink that provides a reassuring - sense of tactility. Visit the <a href="https://www.google.com/design/spec/material-design/introduction.html">material design</a> site for more resources. + sense of tactility. Visit the <a href="https://www.google.com/design/spec/material-design/introduction.html">material design</a> site for more resources. </p> <a class="dac-hero-cta" href="https://www.google.com/design/spec/material-design/introduction.html"> <span class="dac-sprite dac-auto-chevron"></span> diff --git a/docs/html/design/patterns/help.jd b/docs/html/design/patterns/help.jd index 6ef155a2c894..b5ee05ec3026 100644 --- a/docs/html/design/patterns/help.jd +++ b/docs/html/design/patterns/help.jd @@ -76,7 +76,7 @@ page.tags=settings,preferences </div> <div class="col-5"> <img src="{@docRoot}design/media/help_evenbetter.png"> - </div> + </div> </div> <div class="cols"> diff --git a/docs/html/distribute/analyze/build-better-apps.jd b/docs/html/distribute/analyze/build-better-apps.jd index 823562aa5abd..d0db3924465d 100644 --- a/docs/html/distribute/analyze/build-better-apps.jd +++ b/docs/html/distribute/analyze/build-better-apps.jd @@ -108,7 +108,7 @@ page.tags="analytics, user behavior" </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/analyzebuild" data-sortorder="-timestamp" data-cardsizes="6x3" diff --git a/docs/html/distribute/analyze/google-services.jd b/docs/html/distribute/analyze/google-services.jd index 0d82c8a1c39a..44eed8efcb2d 100644 --- a/docs/html/distribute/analyze/google-services.jd +++ b/docs/html/distribute/analyze/google-services.jd @@ -109,7 +109,7 @@ page.tags="analytics, user behavior" </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/analyzeact" data-sortorder="-timestamp" data-cardsizes="6x3" diff --git a/docs/html/distribute/analyze/improve-roi.jd b/docs/html/distribute/analyze/improve-roi.jd index 6c0596213958..95c4db5df176 100644 --- a/docs/html/distribute/analyze/improve-roi.jd +++ b/docs/html/distribute/analyze/improve-roi.jd @@ -155,7 +155,7 @@ page.tags="analytics, user behavior" </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/analyzeimprove" data-sortorder="-timestamp" data-cardsizes="6x3" diff --git a/docs/html/distribute/analyze/measure.jd b/docs/html/distribute/analyze/measure.jd index 5b29e95b51cd..4cb9bde9d405 100644 --- a/docs/html/distribute/analyze/measure.jd +++ b/docs/html/distribute/analyze/measure.jd @@ -82,7 +82,7 @@ dimensions you can break down your analysis by: <li>Analyze how far shoppers get in the shopping funnel and where they drop off</li> <li>Understand which products are viewed most, which are frequently abandoned -in cart, and which ones convert well</li> +in cart, and which ones convert well</li> <li>Upload rich product metadata to slice and dice your data</li> <li>Create rich user segments to delve deeper into your users’ shopping behavior and the products they interact with</li> diff --git a/docs/html/distribute/analyze/start.jd b/docs/html/distribute/analyze/start.jd index 0221f72ef65f..0a90b4fa4d04 100644 --- a/docs/html/distribute/analyze/start.jd +++ b/docs/html/distribute/analyze/start.jd @@ -36,7 +36,7 @@ page.image=images/cards/card-analytics_2x.png <li><a href="https://accounts.google.com/SignUp?continue=https%3A%2F%2Fwww.google.com%2Fanalytics%2Fmobile%2F&hl=en">Create your Google Analytics account</a>.</li> <li>Write down your tracking ID. </li> -<li>Initialize Google Analytics in your app to start measuring activity immediately.</li> +<li>Initialize Google Analytics in your app to start measuring activity immediately.</li> </ul> <p> @@ -97,7 +97,7 @@ your Google Analytics account</a>.</li> </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/analyzestart" data-sortorder="-timestamp" data-cardsizes="6x3" diff --git a/docs/html/distribute/analyze/understand-user-value.jd b/docs/html/distribute/analyze/understand-user-value.jd index 99fd11a1cda8..6bc192deac39 100644 --- a/docs/html/distribute/analyze/understand-user-value.jd +++ b/docs/html/distribute/analyze/understand-user-value.jd @@ -45,7 +45,7 @@ page.tags="analytics, user behavior" </p> -<h2 id="audiencereporting">Know your users with Audience Reporting and Demographic +<h2 id="audiencereporting">Know your users with Audience Reporting and Demographic and Interest reports</h2> <p> @@ -230,7 +230,7 @@ customers, to help you understand what drives users to become loyal customers.</ </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/analyzeunderstand" data-sortorder="-timestamp" data-cardsizes="6x3" diff --git a/docs/html/distribute/engage/ads.jd b/docs/html/distribute/engage/ads.jd index 10dbea63a5c2..8cfbdf2548db 100644 --- a/docs/html/distribute/engage/ads.jd +++ b/docs/html/distribute/engage/ads.jd @@ -54,7 +54,7 @@ conversions in your app. <h2 id="related_resources">Related resources</h2> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/engage/reengage" data-sortorder="-timestamp" data-cardsizes="9x3" diff --git a/docs/html/distribute/engage/analytics.jd b/docs/html/distribute/engage/analytics.jd index 5f7cade1dbb9..0343def45c83 100644 --- a/docs/html/distribute/engage/analytics.jd +++ b/docs/html/distribute/engage/analytics.jd @@ -42,7 +42,7 @@ page.image=/images/gp-analytics.jpg </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/engage/analytics" data-sortorder="-timestamp" data-cardsizes="9x3" diff --git a/docs/html/distribute/engage/deep-linking.jd b/docs/html/distribute/engage/deep-linking.jd index 713bfbb413e9..510fa5c4fa8e 100644 --- a/docs/html/distribute/engage/deep-linking.jd +++ b/docs/html/distribute/engage/deep-linking.jd @@ -8,7 +8,7 @@ page.tags="engagement", "app indexing", "search", "deep linking" Users who have your app installed might overlook it as a way to get the answers they need. With App Indexing, deep links to your Android app appear in Google Search results so users can get to your native mobile experience quickly, landing exactly - on the right content within the app. + on the right content within the app. </p> <p> diff --git a/docs/html/distribute/engage/easy-signin.jd b/docs/html/distribute/engage/easy-signin.jd index 924c5b448b70..5c04064e7fbe 100644 --- a/docs/html/distribute/engage/easy-signin.jd +++ b/docs/html/distribute/engage/easy-signin.jd @@ -1,70 +1,66 @@ -page.title=Add Quick and Secure Google Sign-in +page.title=Add Quick and Secure Google Sign-In page.metaDescription=Increase conversion rates while helping users minimize typing by letting users sign in with Google+. page.tags="google", "identity", "signin" page.image=images/cards/google-sign-in_2x.png @jd:body -<p>Get people into your apps quickly and securely, using a registration system they -already use and trust – their Google account. With minimal effort, you can increase -registration and sign-in conversion by adding trusted registration system that's -familiar to users, consistent across devices, and quick and easy to use.</p> +<div class="figure"> + <img src="{@docRoot}images/distribute/google-sign-in-banner.png" style="width:512px;"> +</div> +<p> + Get customers into your apps quickly and securely using a registration system that they + already use and trust – their Google account. With minimal effort, you can increase + registration and sign-in conversion by adding a trusted registration system that's familiar + to users, consistent across devices, and quick and easy to use. +</p> -<p>Get started <a href="https://developers.google.com/identity/sign-in/">integrating -Google sign-in into your apps and games</a>.</p> +<h2 id="tips">Benefits</h2> -<div class="wrap"> - <div class="cols" style="margin-top:2em;"> - <div class="col-3of12"> - <h3>Quick and secure app access</h3> - <p>A secure authentication system that makes sign-in easy for your users by - letting them use their Google account, which they already use with Gmail, - Play, Google+, and other Google services.</p> - </div> - <div class="col-8of12 col-push-1of12"> - <img src="{@docRoot}images/distribute/signin-secure.png" style="padding-top:1em;"> - </div> - </div> +<p>These are some of the ways Sign-In can improve your app:</p> - <div class="cols" style="margin-top:2em;"> - <div class="col-3of12"> - <h3>Seamless experience across screens</h3> - <p>Keep your users engaged, no matter what device they pick up or sit down at. - Offer a seamless app experience across devices and into your website, securely - from a one-time consent. </p> - </div> - <div class="col-8of12 col-push-1of12"> - <img src="{@docRoot}images/distribute/signin-seamless.png" style="padding-top:1em;"> - </div> - </div> +<ul> + <li> + <strong>Quick and secure app access</strong>: Google Sign-In is a secure authentication + system that makes sign-in easy for your users by letting them use their Google account, + which they already use with Gmail, Google Play, Google+, and other Google services. + </li> - <div class="cols" style="margin-top:2em;"> - <div class="col-3of12"> - <h3>Help your users take action with Google</h3> - <p>Securely connect users with Google services and let them pay with Google - Wallet, share with Google contacts, save files to Drive, add events to - Calendar, and more.</p> - </div> - <div class="col-8of12 col-push-1of12"> - <img src="{@docRoot}images/distribute/signin-apps.png" style="padding-top:1em;"> - </div> - </div> -</div> + <li> + <strong>Seamless experience across screens</strong>: Keep your users engaged, no matter + what device they choose. Offer a secure and seamless app experience across devices and + into your website, from a one-time consent. + </li> + + <li> + <strong>Convenient access to Google services</strong>: Securely connect users with + Google services and let them pay with Google Wallet, share with Google Contacts, save files + to Google Drive, and add events to Google Calendar. + </li> +</ul> +<p>Get started integrating<a href="https://developers.google.com/identity/sign-in/"> +Google Sign-In</a> into your apps and games.</p> -<h2>Tips</h2> +<h2 id="tips">Tips</h2> + +<p>Here are some suggestions for enhancing the Sign-In user experience:</p> <ul> -<li>Add <strong>over-the-air installs</strong> to your website. After signing in with Google - on the web, users will have the option to send your Android app to their device instantly, - without them ever leaving your website.</li> - <li>With Google sign-in, you can take advantage of other <strong>Google+ platform - features</strong> like adding a +1 button so users can make recommendations and the ability - to share rich content to the Google+ stream.</li> -</ul> + <li> + Add <strong>over-the-air installs</strong> to your website. After signing in with Google + on the web, users have the option to send your Android app to their device instantly, + without ever leaving your website. + </li> + <li> + With Google Sign-In, you can take advantage of other <strong>Google+ platform + features</strong>, like adding a +1 button so users can make recommendations and have + the ability to share rich content to their Google+ streams. + </li> +</ul> -<h2 style="clear:both" id="related-resources">Related Resources</h2> +<h2 style="clear:both" id="related-resources">Related resources</h2> <div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/engage/gplus" @@ -72,5 +68,3 @@ Google sign-in into your apps and games</a>.</p> data-cardsizes="9x3" data-maxresults="4"> </div> - - diff --git a/docs/html/distribute/engage/gcm.jd b/docs/html/distribute/engage/gcm.jd index 55bd40ab11d1..9fa9d5f00777 100644 --- a/docs/html/distribute/engage/gcm.jd +++ b/docs/html/distribute/engage/gcm.jd @@ -43,7 +43,7 @@ page.image=/images/cards/card-google-cloud-messaging_16-9_2x.png </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/engage/gcm" data-sortorder="-timestamp" data-cardsizes="9x3" diff --git a/docs/html/distribute/engage/intents.jd b/docs/html/distribute/engage/intents.jd index 07791e8d7d30..33ed1259a877 100644 --- a/docs/html/distribute/engage/intents.jd +++ b/docs/html/distribute/engage/intents.jd @@ -1,5 +1,5 @@ page.title=Increase Usage with Android Intents -page.metaDescription=Use Android Intents to make your app available to users as they perform tasks in other apps. +page.metaDescription=Use Android Intents to make your app available to users as they perform tasks in other apps. page.tags="engagement, intents" @jd:body diff --git a/docs/html/distribute/engage/notifications.jd b/docs/html/distribute/engage/notifications.jd index 1aa0637e5564..c38f649a25a0 100644 --- a/docs/html/distribute/engage/notifications.jd +++ b/docs/html/distribute/engage/notifications.jd @@ -51,7 +51,7 @@ page.image=/design/media/notifications_pattern_anatomy.png </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/getusers/notifications" data-sortorder="-timestamp" data-cardsizes="9x3" diff --git a/docs/html/distribute/engage/video.jd b/docs/html/distribute/engage/video.jd index c5a4997c4970..cf06ce0730de 100644 --- a/docs/html/distribute/engage/video.jd +++ b/docs/html/distribute/engage/video.jd @@ -1,5 +1,5 @@ page.title=Delight Users with Videos -page.metaDescription=Videos are one of the most effective ways to get users excited about your apps. +page.metaDescription=Videos are one of the most effective ways to get users excited about your apps. page.tags="engagement" page.image=/images/gp-engage-smule.jpg diff --git a/docs/html/distribute/engage/widgets.jd b/docs/html/distribute/engage/widgets.jd index 6adb55cb7f5b..a6623ba99a45 100644 --- a/docs/html/distribute/engage/widgets.jd +++ b/docs/html/distribute/engage/widgets.jd @@ -37,7 +37,7 @@ page.image=/images/gp-engage-0.jpg </h2> </div> -<div class="resource-widget resource-flow-layout col-13" +<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/engage/widgets" data-sortorder="-timestamp" data-cardsizes="9x3" diff --git a/docs/html/distribute/essentials/optimizing-your-app.jd b/docs/html/distribute/essentials/optimizing-your-app.jd index 696ef53a3621..09c52d4ca2b9 100644 --- a/docs/html/distribute/essentials/optimizing-your-app.jd +++ b/docs/html/distribute/essentials/optimizing-your-app.jd @@ -4,7 +4,7 @@ page.image=/distribute/images/gp-optimize-card.jpg @jd:body -<div id="qv-wrapper"> +<div id="qv-wrapper"> <div id="qv"> <h2>Strategies</h2> <ol> diff --git a/docs/html/distribute/essentials/quality/billions.jd b/docs/html/distribute/essentials/quality/billions.jd index 70421433e0bb..2e14b37e393a 100644 --- a/docs/html/distribute/essentials/quality/billions.jd +++ b/docs/html/distribute/essentials/quality/billions.jd @@ -1,5 +1,5 @@ page.title=Building for Billions -page.metaDescription=Best practices on how to optimize Android apps for low- and no-bandwidth and low-cost devices. +page.metaDescription=Best practices on how to optimize Android apps for low- and no-bandwidth and low-cost devices. page.image=/distribute/images/billions-guidelines.png @jd:body @@ -18,7 +18,7 @@ page.image=/distribute/images/billions-guidelines.png <li><a href="#compatibility">Backward compatibility</a></li> <li><a href="#memory">Efficient memory usage</a></li> </ol> - + <h2><a href="#cost">Data Cost</a></h2> <ol> <li><a href="#appsize">Reduce app size</a></li> @@ -42,14 +42,14 @@ page.image=/distribute/images/billions-guidelines.png <!-- intro --> <p>Internet use—and smartphone penetration—is growing fastest in markets with - low, intermittent, or expensive connectivity. Successful apps in these - markets need to perform across a variety of speeds and devices, as well as + low, intermittent, or expensive connectivity. Successful apps in these + markets need to perform across a variety of speeds and devices, as well as conserve and share information about battery and data consumption.</p> <p>To help you address these important considerations, we’ve compiled the - following checklist. These do not follow a particular order, and as - always it's a good idea to research particularities of any market or country - you're targeting. + following checklist. These do not follow a particular order, and as + always it's a good idea to research particularities of any market or country + you're targeting. </p> <!-- connectivity --> @@ -67,40 +67,40 @@ page.image=/distribute/images/billions-guidelines.png <h4 id="images-format">Serve WebP images</h4> <ul> <li>Serve <a - href="https://developers.google.com/speed/webp/">WebP</a> files over the - network. WebP reduces image load times, saves network bandwidth, and often - results in smaller file sizes than its PNG and JPG counterparts, with at - least the same image quality. Even at lossy settings, WebP can produce a - nearly identical image. Android has had lossy <a - href="{@docRoot}guide/appendix/media-formats.html">WebP support</a> since - Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless / + href="https://developers.google.com/speed/webp/">WebP</a> files over the + network. WebP reduces image load times, saves network bandwidth, and often + results in smaller file sizes than its PNG and JPG counterparts, with at + least the same image quality. Even at lossy settings, WebP can produce a + nearly identical image. Android has had lossy <a + href="{@docRoot}guide/appendix/media-formats.html">WebP support</a> since + Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless / transparent WebP since Android 4.2 (API level 17: Jelly Bean).</li> </ul> <h4 id="images-sizing">Dynamic image sizing</h4> <ul> <li>Have your apps request images at the targeted rendering size, and have - your server provide those images to fit; the target rendering size will - vary based on device specifications. Doing this minimizes the network - overhead and reduces the amount of memory needed to hold each image, + your server provide those images to fit; the target rendering size will + vary based on device specifications. Doing this minimizes the network + overhead and reduces the amount of memory needed to hold each image, resulting in improved performance and user satisfaction.</li> <li>Your user experience degrades when users are waiting for images to - download. Using appropriate image sizes helps to address these issues. - Consider making image size requests based on network type or network + download. Using appropriate image sizes helps to address these issues. + Consider making image size requests based on network type or network quality; this size could be smaller than the target rendering size.</li> <li>Dynamic placeholders like <a href="{@docRoot}reference/android/support/v7/graphics/Palette.html"> - pre-computed palette values</a> or low-resolution thumbnails can improve + pre-computed palette values</a> or low-resolution thumbnails can improve the user experience while the image is being fetched.</li> </ul> <h4 id="images-libraries">Use image loading libraries</h4> <ul> <li>Your app should not have to fetch any image more than once. Image - loading libraries such as <a class="external-link" - href="https://github.com/bumptech/glide">Glide</a> and <a - class="external-link" href="http://square.github.io/picasso/">Picasso</a> - fetch the image, cache it, and provide hooks into your Views to show - placeholder images until the actual images are ready. Because images are - cached, these libraries return the local copy the next time they are + loading libraries such as <a class="external-link" + href="https://github.com/bumptech/glide">Glide</a> and <a + class="external-link" href="http://square.github.io/picasso/">Picasso</a> + fetch the image, cache it, and provide hooks into your Views to show + placeholder images until the actual images are ready. Because images are + cached, these libraries return the local copy the next time they are requested.</li> <li>Image-loading libraries manage their cache, holding onto the most recent images so that your app storage doesn’t grow indefinitely.</li> @@ -110,59 +110,59 @@ page.image=/distribute/images/billions-guidelines.png <h4 id="network-offline">Make your app usable offline</h4> <ul> <li>In places like subways, planes, elevators, and parking garages, it is - common for devices to lose network connectivity. Creating a useful offline - state results in users being able to interact with the app at all times, by - presenting cached information. Ensure that your app is usable offline or - when network connectivity is poor by storing data locally, caching data, + common for devices to lose network connectivity. Creating a useful offline + state results in users being able to interact with the app at all times, by + presenting cached information. Ensure that your app is usable offline or + when network connectivity is poor by storing data locally, caching data, and queuing outbound requests for when connectivity is restored.</li> <li>Where possible, apps should not notify users that connectivity has - been lost. It is only when the user performs an operation where connectivity + been lost. It is only when the user performs an operation where connectivity is essential that the user needs to be notified.</li> <li>When a device lacks connectivity, your app should batch up network - requests—on behalf of the user—that can be executed when - connectivity is restored. An example of this is an email client that allows - users to compose, send, read, move, and delete existing mails even when the - device is offline. These operations can be cached and executed when - connectivity is restored. In doing so, the app is able to provide a similar + requests—on behalf of the user—that can be executed when + connectivity is restored. An example of this is an email client that allows + users to compose, send, read, move, and delete existing mails even when the + device is offline. These operations can be cached and executed when + connectivity is restored. In doing so, the app is able to provide a similar user experience whether the device is online or offline.</li> </ul> <h4 id="network-arch">Use GcmNetworkManager and/or Content Providers</h4> <ul> <li>Ensure that your app stores all data on disk via a database or similar - structure so that it performs optimally regardless of network conditions - (for example, via SQLite + ContentProvider). The <a + structure so that it performs optimally regardless of network conditions + (for example, via SQLite + ContentProvider). The <a href="https://developers.google.com/cloud-messaging/network-manager"> - GCM Network Manager</a> + GCM Network Manager</a> (<a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> - <code>GcmNetworkManager</code></a>) can result in a robust mechanism to - sync data with servers while <a - href="{@docRoot}guide/topics/providers/content-providers.html">content - providers</a> ({@link android.content.ContentProvider}) cache that data, + <code>GcmNetworkManager</code></a>) can result in a robust mechanism to + sync data with servers while <a + href="{@docRoot}guide/topics/providers/content-providers.html">content + providers</a> ({@link android.content.ContentProvider}) cache that data, combining to provide an architecture that enables a useful offline state.</li> <li>Apps should cache content that is fetched from the network. Before making - subsequent requests, apps should display locally cached data. This ensures - that the app is functional regardless of whether the device is offline or + subsequent requests, apps should display locally cached data. This ensures + that the app is functional regardless of whether the device is offline or on a slow/unreliable network.</li> </ul> <h4 id="network-duplicate">Deduplicate network requests</h4> <ul> <li>An offline-first architecture initially tries to fetch data from local - storage and, failing that, requests the data from the network. After being - retrieved from the network, the data is cached locally for future - retrieval. This helps to ensure that network requests for the same piece of - data only occur once—the rest of the requests are satisfied locally. To - achieve this, use a local database for long-lived data (usually - {@link android.database.sqlite} or + storage and, failing that, requests the data from the network. After being + retrieved from the network, the data is cached locally for future + retrieval. This helps to ensure that network requests for the same piece of + data only occur once—the rest of the requests are satisfied locally. To + achieve this, use a local database for long-lived data (usually + {@link android.database.sqlite} or {@link android.content.SharedPreferences}).</li> <li>An offline-first architecture always looks for data locally first, then - makes the request over the network. The response is cached and then returned - locally. Such an architecture simplifies an app’s flow between offline and - online states as one side fetches from the network to the cache, while the + makes the request over the network. The response is cached and then returned + locally. Such an architecture simplifies an app’s flow between offline and + online states as one side fetches from the network to the cache, while the other retrieves data from the cache to present to the user.</li> <li>For transitory data, use a bounded disk cache such as a <a class="external-link" href="https://github.com/JakeWharton/DiskLruCache"><code>DiskLruCache</code> - </a>. Data that doesn’t typically change should only be requested once over - the network and cached for future use. Examples of such data are images and + </a>. Data that doesn’t typically change should only be requested once over + the network and cached for future use. Examples of such data are images and non-temporal documents like news articles or social posts.</li> </ul> @@ -170,29 +170,29 @@ page.image=/distribute/images/billions-guidelines.png <h4 id="transfer-prioritize">Prioritize bandwidth</h4> <ul> <li>Writers of apps should not assume that any network that the device is - connected to is long-lasting or reliable. For this reason, apps should - prioritize network requests to display the most useful information to the + connected to is long-lasting or reliable. For this reason, apps should + prioritize network requests to display the most useful information to the user as soon as possible.</li> <li>Presenting users with visible and relevant information immediately is a - better user experience than making them wait for information that might not - be necessary. This reduces the time that the user has to wait and + better user experience than making them wait for information that might not + be necessary. This reduces the time that the user has to wait and increases the usefulness of the app on slow networks.</li> <li>To achieve this, sequence your network requests such that text is - fetched before rich media. Text requests tend to be smaller, compress - better, and hence transfer faster, meaning that your app can display useful - content quickly. For more information on managing network requests, visit - the Android training on <a - href="{@docRoot}training/basics/network-ops/managing.html">Managing Network + fetched before rich media. Text requests tend to be smaller, compress + better, and hence transfer faster, meaning that your app can display useful + content quickly. For more information on managing network requests, visit + the Android training on <a + href="{@docRoot}training/basics/network-ops/managing.html">Managing Network Usage</a>.</li> </ul> <h4 id="network-bandwidth">Use less bandwidth on slower connections</h4> <ul> <li>The ability for your app to transfer data in a timely fashion is - dependent on the network connection. Detecting the quality of the network - and adjusting the way your app uses it can help provide an excellent user + dependent on the network connection. Detecting the quality of the network + and adjusting the way your app uses it can help provide an excellent user experience.</li> <li>You can use the following methods to detect the underlying network - quality. Using the data from these methods, your app should tailor its use + quality. Using the data from these methods, your app should tailor its use of the network to continue to provide a timely response to user actions: <ul> <li>{@link android.net.ConnectivityManager}> @@ -206,27 +206,27 @@ page.image=/distribute/images/billions-guidelines.png </ul> </li> <li>On slower connections, consider downloading only lower-resolution media - or perhaps none at all. This ensures that your users are still able to use - the app on slow connections. Where you don’t have an image or the image is - still loading, you should always show a placeholder. You can create a - dynamic placeholder by using the <a + or perhaps none at all. This ensures that your users are still able to use + the app on slow connections. Where you don’t have an image or the image is + still loading, you should always show a placeholder. You can create a + dynamic placeholder by using the <a href="{@docRoot}tools/support-library/features.html#v7-palette"> - Palette library</a> to generate placeholder colors that match the target + Palette library</a> to generate placeholder colors that match the target image.</li> <li>Prioritize network requests such that text is fetched before rich media. - Text requests tend to be smaller, compress better, and hence transfer - faster, meaning that your app can display useful content quickly. For more - information on adjusting bandwidth based on network connection, see the - Android training on <a - href="{@docRoot}training/basics/network-ops/managing.html">Managing Network + Text requests tend to be smaller, compress better, and hence transfer + faster, meaning that your app can display useful content quickly. For more + information on adjusting bandwidth based on network connection, see the + Android training on <a + href="{@docRoot}training/basics/network-ops/managing.html">Managing Network Usage</a>.</li> </ul> <h4 id="network-behavior">Detect network changes, then change app behavior</h4> <ul> <li>Network quality is not static; it changes based on location, network - traffic, and local population density. Apps should detect changes in - network and adjust bandwidth accordingly. By doing so, your app can tailor - the user experience to the network quality. Detect network state using + traffic, and local population density. Apps should detect changes in + network and adjust bandwidth accordingly. By doing so, your app can tailor + the user experience to the network quality. Detect network state using these methods: <ul> <li>{@link android.net.ConnectivityManager}> @@ -238,26 +238,26 @@ page.image=/distribute/images/billions-guidelines.png </ul> </li> <li>As the network quality degrades, scale down the number and size of - requests. As the connection quality improves, you can scale up your + requests. As the connection quality improves, you can scale up your requests to optimal levels.</li> <li>On higher quality, unmetered networks, consider <a href="{@docRoot}training/efficient-downloads/efficient-network-access.html#PrefetchData"> - prefetching data</a> to make it available ahead of time. From a user - experience standpoint, this might mean that news reader apps only fetch - three articles at a time on 2G but fetch twenty articles at a time on - Wi-Fi. For more information on adjusting app behavior based on network changes, - visit the Android training on <a + prefetching data</a> to make it available ahead of time. From a user + experience standpoint, this might mean that news reader apps only fetch + three articles at a time on 2G but fetch twenty articles at a time on + Wi-Fi. For more information on adjusting app behavior based on network changes, + visit the Android training on <a href="{@docRoot}training/monitoring-device-state/connectivity-monitoring.html"> Monitoring the Connectivity Status</a>.</li> <li>The broadcast <a href="{@docRoot}reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION"> - <code>CONNECTIVITY_CHANGE</code></a> is sent when a change in network - connectivity occurs. When your app is in the foreground, you can call <a + <code>CONNECTIVITY_CHANGE</code></a> is sent when a change in network + connectivity occurs. When your app is in the foreground, you can call <a href="{@docRoot}reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter)"> - <code>registerReceiver</code></a> to receive this broadcast. After receiving - the broadcast, you should reevaluate the current network state and adjust - your UI and network usage appropriately. You should not declare this receiver - in your manifest, as it will no longer function beginning with Android N. + <code>registerReceiver</code></a> to receive this broadcast. After receiving + the broadcast, you should reevaluate the current network state and adjust + your UI and network usage appropriately. You should not declare this receiver + in your manifest, as it will no longer function beginning with Android N. For more details see <a href="{@docRoot}preview/behavior-changes.html"> Android N behavior changes</a>.</li> </ul> @@ -274,55 +274,55 @@ page.image=/distribute/images/billions-guidelines.png <h2 id="capability">Device Capability</h2> </div> <p>Reaching new users means supporting an increasing variety of Android - platform versions and device specifications. Optimize for common RAM and + platform versions and device specifications. Optimize for common RAM and screen sizes and resolutions to improve the user experience. </p> <h3 id="screens">Support varying screen sizes</h3> <h4 id="screens-dp">Use density-independent pixels (dp)</h4> <ul> <li>Defining layout dimensions with pixels is a problem because different - screens have different pixel densities, so the same number of pixels may - correspond to different physical sizes on different devices. The - density-independent pixel (dp) corresponds to the physical size of a pixel + screens have different pixel densities, so the same number of pixels may + correspond to different physical sizes on different devices. The + density-independent pixel (dp) corresponds to the physical size of a pixel at 160 dots per inch (mdpi density).</li> <li>Defining layouts with dp ensures that the physical size of your user - interface is consistent regardless of device. Visit the Android - guide on <a + interface is consistent regardless of device. Visit the Android + guide on <a href="https://developer.android.com/guide/practices/screens_support.html"> - Supporting Multiple Screens</a> for best practices using + Supporting Multiple Screens</a> for best practices using density-independent pixels.</li> </ul> <h4 id="screens-density">Test graphics on ldpi/mdpi screen densities</h4> <ul> <li>Ensure that your app layouts work well on low- and medium-density - (ldpi/mdpi) screens because these are <a + (ldpi/mdpi) screens because these are <a href="https://developer.android.com/about/dashboards/index.html#Screens"> - common densities</a>, especially in lower-cost devices. Testing on - lower-density screens helps to validate that your layouts are legible on + common densities</a>, especially in lower-cost devices. Testing on + lower-density screens helps to validate that your layouts are legible on lower-density screens.</li> <li>Lower-density screens can result in unclear text where the finer details - aren't visible. The Material Design guidelines describe <a + aren't visible. The Material Design guidelines describe <a class="external-link" href="https://www.google.com/design/spec/layout/metrics-keylines.html"> - metrics and keylines</a> to ensure that your layouts can scale across + metrics and keylines</a> to ensure that your layouts can scale across screen densities.</li> <li>Devices with lower-density screens tend to have lower hardware - specifications. To ensure that your app performs well on these devices, - consider reducing or eliminating heavy loads, such as animations and - transitions. For more information on supporting different densities, see - the Android training on <a + specifications. To ensure that your app performs well on these devices, + consider reducing or eliminating heavy loads, such as animations and + transitions. For more information on supporting different densities, see + the Android training on <a href="https://developer.android.com/training/multiscreen/screendensities.html"> Supporting Different Densities</a>.</li> </ul> <h4 id="screens-sizes">Test layouts on small/medium screen sizes</h4> <ul> <li>Validate that your layouts scale down by testing on smaller screens. As - screen sizes shrink, be very selective about visible UI elements, because + screen sizes shrink, be very selective about visible UI elements, because there is limited space for them.</li> <li>Devices with smaller screens tend to have lower hardware specifications. - To ensure that your app performs well on these devices, try reducing or - eliminating heavy loads, such as animations or transitions. For more - information on supporting different screen sizes, see the Android - training on <a + To ensure that your app performs well on these devices, try reducing or + eliminating heavy loads, such as animations or transitions. For more + information on supporting different screen sizes, see the Android + training on <a href="https://developer.android.com/training/multiscreen/screendensities.html"> Supporting Different Screen Sizes</a>.</li> </ul> @@ -332,57 +332,57 @@ page.image=/distribute/images/billions-guidelines.png appropriately</h4> <ul> <li>Apps should build and target a recent version of Android to ensure most - current behavior across a broad range of devices; this still provides - backward compatibility to older versions. Here are the best practices for + current behavior across a broad range of devices; this still provides + backward compatibility to older versions. Here are the best practices for targeting API levels appropriately: <ul> <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"> - {@code targetSdkVersion}</a> should be the latest version of Android. - Targeting the most recent version ensures that your app inherits newer - runtime behaviors when running newer versions of Android. Be sure to - test your app on newer Android versions when updating the + {@code targetSdkVersion}</a> should be the latest version of Android. + Targeting the most recent version ensures that your app inherits newer + runtime behaviors when running newer versions of Android. Be sure to + test your app on newer Android versions when updating the targetSdkVersion as it can affect app behavior.</li> <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"> - {@code minSdkVersion}</a> sets the minimum supported Android version. - Use Android 4.0 (API level 14: Ice Cream Sandwich) or Android 4.1 (API - level 16: Jelly Bean)—these versions give maximum coverage for modern - devices. Setting {@code minSdkVersion} also results in the Android build - tools reporting incorrect use of new APIs that might not be available in - older versions of the platform. By doing so, developers are protected + {@code minSdkVersion}</a> sets the minimum supported Android version. + Use Android 4.0 (API level 14: Ice Cream Sandwich) or Android 4.1 (API + level 16: Jelly Bean)—these versions give maximum coverage for modern + devices. Setting {@code minSdkVersion} also results in the Android build + tools reporting incorrect use of new APIs that might not be available in + older versions of the platform. By doing so, developers are protected from inadvertently breaking backward compatibility.</li> </ul> </li> <li>Consult the <a href="https://developer.android.com/about/dashboards/index.html#Platform"> - Android dashboards</a>, the <a class="external-link" - href="https://play.google.com/apps/publish/">Google Play Developer - Console</a> for your app, and industry research in your target markets to + Android dashboards</a>, the <a class="external-link" + href="https://play.google.com/apps/publish/">Google Play Developer + Console</a> for your app, and industry research in your target markets to gauge which versions of Android to target, based on your target users.</li> </ul> <h4 id="compatibility-libraries">Use the Android Support libraries</h4> <ul> <li>Ensure your app provides a consistent experience across OS versions by using the Google-provided support libraries such as AppCompat and the Design - Support Library. The Android Support Library package is a set of code - libraries that provides backward-compatible versions of Android framework + Support Library. The Android Support Library package is a set of code + libraries that provides backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs. </li> <li>Some of the the highlights include: <ul> <li>v4 & v7 support library: Many framework APIs for older versions of - Android such as {@link android.support.v4.view.ViewPager}, - {@link android.app.ActionBar}, - {@link android.support.v7.widget.RecyclerView}, and + Android such as {@link android.support.v4.view.ViewPager}, + {@link android.app.ActionBar}, + {@link android.support.v7.widget.RecyclerView}, and {@link android.support.v7.graphics.Palette}.</li> <li><a href="{@docRoot}tools/support-library/features.html#design">Design - Support</a> library: APIs to support adding Material Design components + Support</a> library: APIs to support adding Material Design components and patterns to your apps.</li> <li><a href="{@docRoot}tools/support-library/features.html#multidex"> - Multidex Support</a> library: provides support for large apps that have - more than 65K methods. This can happen if your app is using many - libraries.</li> + Multidex Support</a> library: provides support for large apps that have + more than 65K methods. This can happen if your app is using many + libraries.</li> </ul> </li> <li>For more information on the available support libraries, see the <a @@ -392,14 +392,14 @@ page.image=/distribute/images/billions-guidelines.png <h4 id="compatibility-playservices">Use Google Play services</h4> <ul> <li>Google Play services brings the best of Google APIs independent of - Android platform version. Consider using features from Google Play services + Android platform version. Consider using features from Google Play services to offer the most streamlined Google experience on Android devices.</li> - <li>Google Play services also include useful APIs such as <a + <li>Google Play services also include useful APIs such as <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> - <code>GcmNetworkManager</code></a>, which provides much of Android 5.0’s + <code>GcmNetworkManager</code></a>, which provides much of Android 5.0’s {@link android.app.job.JobScheduler} API for older versions of Android. </li> <li>Updates to Google Play services are distributed automatically by the - Google Play Store, and new versions of the client library are delivered + Google Play Store, and new versions of the client library are delivered through the Android SDK Manager. </li> </ul> <h3 id="memory">Efficient memory usage</h3> @@ -408,44 +408,44 @@ page.image=/distribute/images/billions-guidelines.png <li>Adjusting your memory footprint dynamically helps to ensure compatibility across devices with different RAM configurations.</li> <li>Methods such as {@link android.app.ActivityManager#isLowRamDevice} and - {@link android.app.ActivityManager#getMemoryClass()} help determine memory - constraints at runtime. Based on this information, you can scale down your - memory usage. As an example, you can use lower resolution images on low memory + {@link android.app.ActivityManager#getMemoryClass()} help determine memory + constraints at runtime. Based on this information, you can scale down your + memory usage. As an example, you can use lower resolution images on low memory devices.</li> <li>For more information on managing your app’s memory, see the Android - training on <a href="{@docRoot}training/articles/memory.html">Managing + training on <a href="{@docRoot}training/articles/memory.html">Managing Your App's Memory</a>.</li> </ul> <h4 id="memory-longprocesses">Avoid long-running processes</h4> <ul> <li>Long-running processes stay resident in memory and can result in slowing - down the device. In most situations, your app should wake up for a given - event, process data, and shut down. You should use <a - href="https://developers.google.com/cloud-messaging">Google Cloud Messaging - (GCM)</a> and/or <a + down the device. In most situations, your app should wake up for a given + event, process data, and shut down. You should use <a + href="https://developers.google.com/cloud-messaging">Google Cloud Messaging + (GCM)</a> and/or <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> - <code>GcmNetworkManager</code></a> to avoid long running background + <code>GcmNetworkManager</code></a> to avoid long running background services and reduce memory pressure on the user’s device.</li> </ul> <h4 id="memory-benchmark">Benchmark memory usage</h4> <ul> <li>Android Studio provides memory benchmarking and profiling tools, enabling you to measure memory usage at run time. Benchmarking your app’s memory - footprint enables you to monitor memory usage over multiple versions of - the app. This can help catch unintentional memory footprint growth. These + footprint enables you to monitor memory usage over multiple versions of + the app. This can help catch unintentional memory footprint growth. These tools can be used in the following ways: <ul> <li>Use the <a - href="{@docRoot}tools/performance/memory-monitor/index.html">Memory - Monitor</a> tool to find out whether undesirable garbage collection (GC) - event patterns might be causing performance problems.</li> + href="{@docRoot}tools/performance/memory-monitor/index.html">Memory + Monitor</a> tool to find out whether undesirable garbage collection (GC) + event patterns might be causing performance problems.</li> <li>Run <a href="{@docRoot}tools/performance/heap-viewer/index.html">Heap Viewer</a> - to identify object types that get or stay allocated unexpectedly or + to identify object types that get or stay allocated unexpectedly or unnecessarily.</li> <li>Use <a href="{@docRoot}tools/performance/allocation-tracker/index.html"> - Allocation Tracker</a> to identify where in your code the problem might + Allocation Tracker</a> to identify where in your code the problem might be.</li> </ul> </li> @@ -466,35 +466,35 @@ page.image=/distribute/images/billions-guidelines.png <h2 id="cost">Data Cost</h2> </div> <p>Data plans in some countries can cost upwards of 10% of monthly income. - Conserve data and give control to optimize user experience. Reduce data + Conserve data and give control to optimize user experience. Reduce data consumption and give users control over your app’s use of data.</p> <h3 id="appsize">Reduce app size</h3> <h4 id="appsize-graphics">Reduce APK graphical asset size</h4> <ul> <li>Graphical assets are often the largest contributor to the size of the - APK. Optimizing these can result in smaller downloads and thus faster + APK. Optimizing these can result in smaller downloads and thus faster installation times for users.</li> <li>For graphical assets like icons, use Scalable Vector Graphics (SVG) - format. SVG images are relatively tiny in size and can be rendered at - runtime to any resolution. The <a - href="{@docRoot}tools/support-library/index.html">Android Support</a> - library provides a backward-compatible implementation for vector resources as - far back as Android 2.1 (API level 7). Get started with vectors with <a - class="external-link" + format. SVG images are relatively tiny in size and can be rendered at + runtime to any resolution. The <a + href="{@docRoot}tools/support-library/index.html">Android Support</a> + library provides a backward-compatible implementation for vector resources as + far back as Android 2.1 (API level 7). Get started with vectors with <a + class="external-link" href="https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88"> this Medium post</a>. </li> <li>For non-vector images, like photos, use <a - href="https://developers.google.com/speed/webp/">WebP</a>. WebP reduces - image load times, saves network bandwidth, and is proven to result in - smaller file sizes than its PNG and JPG counterparts, with at least the - same image quality. Even at lossy settings, WebP can produce a nearly - identical image. Android has had lossy WebP support since Android 4.0 (API + href="https://developers.google.com/speed/webp/">WebP</a>. WebP reduces + image load times, saves network bandwidth, and is proven to result in + smaller file sizes than its PNG and JPG counterparts, with at least the + same image quality. Even at lossy settings, WebP can produce a nearly + identical image. Android has had lossy WebP support since Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless / transparent WebP since Android 4.2 (API level 17: Jelly Bean).</li> <li>If you have many large images across multiple densities, consider - using <a href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple - APK support</a> to split your APK by density. This results in builds - targeted for specific densities, meaning users with low-density devices + using <a href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple + APK support</a> to split your APK by density. This results in builds + targeted for specific densities, meaning users with low-density devices won’t have to incur the penalty of unused high-density assets.</li> <li>A detailed guide on reducing your APK size can be found in <a class="external-link" href="https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006"> @@ -503,84 +503,84 @@ page.image=/distribute/images/billions-guidelines.png <h4 id="appsize-code">Reduce code size</h4> <ul> <li>Be careful about using external libraries because not all libraries are - meant to be used in mobile apps. Ensure that the libraries your app is + meant to be used in mobile apps. Ensure that the libraries your app is using are optimized for mobile use.</li> <li>Every library in your Android project is adding potentially unused code - to your APK. There are also some libraries that aren’t designed with mobile - development in mind. These libraries can end up contributing to significant + to your APK. There are also some libraries that aren’t designed with mobile + development in mind. These libraries can end up contributing to significant APK bloat.</li> <li>Consider optimizing your compiled code using a tool such as <a - href="{@docRoot}tools/help/proguard.html">ProGuard</a>. ProGuard identifies - code that isn’t being used and removes it from your APK. Also <a - class="external-link" + href="{@docRoot}tools/help/proguard.html">ProGuard</a>. ProGuard identifies + code that isn’t being used and removes it from your APK. Also <a + class="external-link" href="http://tools.android.com/tech-docs/new-build-system/resource-shrinking"> - enable resource shrinking</a> at build time by setting - <code>minifyEnabled=true</code>, <code>shrinkResources=true</code> in - <code>build.gradle</code>—this automatically removes unused resources from + enable resource shrinking</a> at build time by setting + <code>minifyEnabled=true</code>, <code>shrinkResources=true</code> in + <code>build.gradle</code>—this automatically removes unused resources from your APK.</li> <li>When using Google Play services, you should <a href="{@docRoot}google/play-services/setup.html#add_google_play_services_to_your_project"> selectively include</a> only the necessary APIs into your APK.</li> <li>For more information on reducing code size in your APK, see the Android - training on how to <a - href="{@docRoot}training/articles/memory.html#DependencyInjection">Avoid + training on how to <a + href="{@docRoot}training/articles/memory.html#DependencyInjection">Avoid dependency injection frameworks</a>.</li> </ul> <h4 id="appsize-external">Allow app to be moved to external (SD) storage</h4> <ul> <li>Low-cost devices often come with little on-device storage. Users can - extend this with SD cards; however, apps need to explicitly declare that + extend this with SD cards; however, apps need to explicitly declare that they support being installed to external storage before users can move them. </li> <li>Allow your app to be installed to external storage using the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install"><code> - android:installLocation</code></a> flag in your AndroidManifest. For more - information on enabling your app to be moved to external storage, see the - Android guide on <a - href="{@docRoot}guide/topics/data/install-location.html">App Install + android:installLocation</code></a> flag in your AndroidManifest. For more + information on enabling your app to be moved to external storage, see the + Android guide on <a + href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a>.</li> </ul> <h4 id="appsize-postinstall">Reduce post-install app disk usage</h4> <ul> <li>Keeping your app’s disk usage low means that users are less likely to - uninstall your app when the device is low on free space. When using caches, - it’s important to apply bounds around your caches—this prevents your app’s - disk usage from growing indefinitely. Be sure you put your cached data in - {@link android.content.Context#getCacheDir()}—the system can delete files - placed here as needed, so they won’t show up as storage committed to the + uninstall your app when the device is low on free space. When using caches, + it’s important to apply bounds around your caches—this prevents your app’s + disk usage from growing indefinitely. Be sure you put your cached data in + {@link android.content.Context#getCacheDir()}—the system can delete files + placed here as needed, so they won’t show up as storage committed to the app.</li> </ul> <h3 id="configurablenetwork">Offer configurable network usage</h3> -<h4 id="configurablenetwork-onboarding">Provide onboarding experiences for +<h4 id="configurablenetwork-onboarding">Provide onboarding experiences for subjective user choices</h4> <ul> <li>Apps that allow users to reduce data usage are well received, even if - they demand heavy data requirements. If your app uses a considerable amount - of bandwidth (for example, video streaming apps), you can provide an - onboarding experience for users to configure network usage. For example, - you could allow the user to force lower-bitrate video streams on cellular + they demand heavy data requirements. If your app uses a considerable amount + of bandwidth (for example, video streaming apps), you can provide an + onboarding experience for users to configure network usage. For example, + you could allow the user to force lower-bitrate video streams on cellular networks. </li> <li>Additional settings for users to control data syncing, prefetching, and - network usage behavior (for example, prefetch all starred news categories on + network usage behavior (for example, prefetch all starred news categories on Wi-Fi only), also help users tailor your app’s behavior to their needs.</li> <li>For more information on managing network usage, see the Android training - on <a href="{@docRoot}training/basics/network-ops/managing.html">Managing + on <a href="{@docRoot}training/basics/network-ops/managing.html">Managing Network Usage</a>.</li> </ul> -<h4 id="configurablenetwork-preferences">Provide a network preferences +<h4 id="configurablenetwork-preferences">Provide a network preferences screen</h4> <ul> <li>You can navigate to the app’s network settings from outside the app by - means of a network preferences screen. You can invoke this screen from + means of a network preferences screen. You can invoke this screen from either the system settings screen or the system data usage screen.</li> <li>To provide a network preferences screen that users can access from within - your app as well as from the system settings, in your app include an - activity that supports the + your app as well as from the system settings, in your app include an + activity that supports the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action.</li> <li>For further information on adding a network preferences screen, see the - Android training on <a + Android training on <a href="{@docRoot}training/basics/network-ops/managing.html#prefs"> Implementing a Preferences Activity</a>.</li> </ul> @@ -599,57 +599,57 @@ screen</h4> <div class="headerLine"> <h2 id="consumption">Battery Consumption</h2> </div> -<p>Access to reliable power supplies varies, and outages can disrupt planned -charges. Defend your users' batteries against unnecessary drain by benchmarking -your battery use, avoiding wakelocks, scheduling tasks, and monitoring sensor +<p>Access to reliable power supplies varies, and outages can disrupt planned +charges. Defend your users' batteries against unnecessary drain by benchmarking +your battery use, avoiding wakelocks, scheduling tasks, and monitoring sensor requests.</p> <h3 id="consumption-reduce">Reduce battery consumption</h3> <ul> <li>Your app should do minimal activity when in the background and when the device is running on battery power.</li> <li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">Wake - locks</a> are mechanisms to keep devices on so that they can perform - background activities. Avoid using wake locks because they prevent the + locks</a> are mechanisms to keep devices on so that they can perform + background activities. Avoid using wake locks because they prevent the device from going into low-power states.</li> <li>To reduce the number of device wake-ups, batch network activity. For more - information on batching, see the Android training on <a + information on batching, see the Android training on <a href="{@docRoot}training/efficient-downloads/efficient-network-access.html"> Optimizing Downloads for Efficient Network Access</a>.</li> - <li><a + <li><a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> - <code>GcmNetworkManager</code></a> schedules tasks and lets Google Play - services batch operations across the system. This greatly - simplifies the implementation of common patterns, such as waiting for - network connectivity, device charging state, retries, and backoff. Use - <code>GcmNetworkManager</code> to perform non-essential background activity + <code>GcmNetworkManager</code></a> schedules tasks and lets Google Play + services batch operations across the system. This greatly + simplifies the implementation of common patterns, such as waiting for + network connectivity, device charging state, retries, and backoff. Use + <code>GcmNetworkManager</code> to perform non-essential background activity when the device is charging and is connected to an unmetered network.</li> <li>Sensors, like GPS, can also have a significant drain on the battery. The - recommended way to request location is to use the FusedLocationProvider API. - The <a - href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi">FusedLocationProvider</a> API manages the - underlying location technology and provides a simple API so that you can - specify requirements—like high accuracy or low power—at a high - level. It also optimizes the device's use of battery power by caching - locations and batching requests across apps. For more information on the - ideal ways to request location, see the <a - href="{@docRoot}training/location/retrieve-current.html">Getting the Last + recommended way to request location is to use the FusedLocationProvider API. + The <a + href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi">FusedLocationProvider</a> API manages the + underlying location technology and provides a simple API so that you can + specify requirements—like high accuracy or low power—at a high + level. It also optimizes the device's use of battery power by caching + locations and batching requests across apps. For more information on the + ideal ways to request location, see the <a + href="{@docRoot}training/location/retrieve-current.html">Getting the Last Known Location</a> training guide. </li> </ul> <h3 id="consumption-benchmark">Benchmark battery usage</h3> <ul> <li>Benchmarking your app’s usage in a controlled environment helps you - understand the battery-heavy tasks in your app. It is a good practice to - benchmark your app’s battery usage to gauge efficiency and track changes + understand the battery-heavy tasks in your app. It is a good practice to + benchmark your app’s battery usage to gauge efficiency and track changes over time. </li> <li><a href="{@docRoot}tools/performance/batterystats-battery-historian/index.html"> - Batterystats</a> collects battery data about your apps, and <a + Batterystats</a> collects battery data about your apps, and <a href="{@docRoot}tools/performance/batterystats-battery-historian/index.html"> - Battery Historian</a> converts that data into an HTML visualization. For - more information on reducing battery usage, see the Android training on <a - href="{@docRoot}training/monitoring-device-state/index.html">Optimizing + Battery Historian</a> converts that data into an HTML visualization. For + more information on reducing battery usage, see the Android training on <a + href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a>.</li> </ul> @@ -665,55 +665,55 @@ requests.</p> <h2 id="contentsection">Content</h2> </div> <p>Make sure that your app works well on a variety of screens: offering good, - crisp graphics and appropriate layouts on low resolution and physically small - screens. Ensure that your app is designed to be easily localized by - accommodating the variations between languages: allow for spacing, density, - order, emphasis, and wording variations. Also make sure that date, time, and - the like are internationalized and displayed according to the phone’s + crisp graphics and appropriate layouts on low resolution and physically small + screens. Ensure that your app is designed to be easily localized by + accommodating the variations between languages: allow for spacing, density, + order, emphasis, and wording variations. Also make sure that date, time, and + the like are internationalized and displayed according to the phone’s settings.</p> <h3 id="content-responsive">Fast and responsive UI</h3> <h4 id="content-feedback">Touch feedback on all touchable items</h4> <ul> <li>Touch feedback adds a tactile feeling to the user interface. You should - ensure your app provides touch feedback on all touchable elements to reduce + ensure your app provides touch feedback on all touchable elements to reduce the perceived app latency as much as possible. </li> <li><a href="https://www.google.com/design/spec/animation/responsive-interaction.html"> - Responsive interaction</a> encourages deeper exploration of an app by - creating timely, logical, and delightful screen reactions to user input. - Responsive interaction elevates an app from an information-delivery service - to an experience that communicates using multiple visual and tactile + Responsive interaction</a> encourages deeper exploration of an app by + creating timely, logical, and delightful screen reactions to user input. + Responsive interaction elevates an app from an information-delivery service + to an experience that communicates using multiple visual and tactile responses.</li> <li>For more information, see the Android training on <a - href="{@docRoot}training/material/animations.html#Touch">Customizing Touch + href="{@docRoot}training/material/animations.html#Touch">Customizing Touch Feedback</a>.</li> </ul> <h4 id="content-interactive">UI should always be interactive</h4> <ul> <li>Apps that are unresponsive when performing background activity feel slow - and reduce user satisfaction. Ensure your app always has a responsive UI - regardless of any background activity. Achieve this by performing network - operations or any heavy-duty operations in a background thread—keep the UI + and reduce user satisfaction. Ensure your app always has a responsive UI + regardless of any background activity. Achieve this by performing network + operations or any heavy-duty operations in a background thread—keep the UI thread as idle as you can.</li> <li>Material Design apps use minimal visual changes when your app is loading - content by representing each operation with a single activity indicator. - Avoid blocking dialogs with <a + content by representing each operation with a single activity indicator. + Avoid blocking dialogs with <a href="https://www.google.com/design/spec/components/progress-activity.html"> loading indicators</a>.</li> <li><a - href="http://www.google.com/design/spec/patterns/empty-states.html">Empty - states</a> occur when the regular content of a view can’t be shown. It might - be a list that has no items or a search that returns no results. Avoid - completely empty states. The most basic empty state displays a - non-interactive image and a text tagline. Where you don’t have an image, or - the image is still loading, you should always show either a static - placeholder, or create a dynamic placeholder by using the <a - href="{@docRoot}tools/support-library/features.html#v7-palette">Palette + href="http://www.google.com/design/spec/patterns/empty-states.html">Empty + states</a> occur when the regular content of a view can’t be shown. It might + be a list that has no items or a search that returns no results. Avoid + completely empty states. The most basic empty state displays a + non-interactive image and a text tagline. Where you don’t have an image, or + the image is still loading, you should always show either a static + placeholder, or create a dynamic placeholder by using the <a + href="{@docRoot}tools/support-library/features.html#v7-palette">Palette library</a> to generate placeholder colors that match the target image.</li> <li>For more information, see the Android training on <a - href="{@docRoot}training/articles/perf-anr.html">Keeping Your App + href="{@docRoot}training/articles/perf-anr.html">Keeping Your App Responsive</a>.</li> </ul> <h4 id="content-60fps">Target 60 frames per second on low-cost devices</h4> @@ -721,34 +721,34 @@ requests.</p> <li>Ensure that your app always runs fast and smoothly, even on low-cost devices.</li> <li>Overdraw can significantly slow down your app—it occurs when the pixels - are being drawn more than once per pass. An example of this is when you have - an image with a button placed on top of it. While some overdraw is - unavoidable, it should be minimized to ensure a smooth frame rate. Perform - <a href="{@docRoot}tools/performance/debug-gpu-overdraw/index.html">Debug + are being drawn more than once per pass. An example of this is when you have + an image with a button placed on top of it. While some overdraw is + unavoidable, it should be minimized to ensure a smooth frame rate. Perform + <a href="{@docRoot}tools/performance/debug-gpu-overdraw/index.html">Debug GPU overdraw</a> on your app to ensure it is minimized.</li> <li>Android devices refresh the screen at 60 frames per second (fps), meaning - your app has to update the screen within roughly 16 milliseconds. <a - href="{@docRoot}tools/performance/profile-gpu-rendering/index.html">Profile - your app</a> using on-device tools to see if and when your app is not + your app has to update the screen within roughly 16 milliseconds. <a + href="{@docRoot}tools/performance/profile-gpu-rendering/index.html">Profile + your app</a> using on-device tools to see if and when your app is not meeting this 16-ms average.</li> <li>Reduce or remove animations on low-cost devices to lessen the burden on - the device’s CPU and GPU. For more information, see the Android training on - <a href="{@docRoot}training/improving-layouts/index.html">Improving Layout + the device’s CPU and GPU. For more information, see the Android training on + <a href="{@docRoot}training/improving-layouts/index.html">Improving Layout Performance</a>. </li> </ul> -<h4 id="content-firstload">If anticipated start speed is low, use launch screen +<h4 id="content-firstload">If anticipated start speed is low, use launch screen on first load</h4> <ul> <li>The launch screen is a user’s first experience of your application. - Launching your app while displaying a blank canvas increases its perceived - loading time, so consider using a placeholder UI or a branded launch screen + Launching your app while displaying a blank canvas increases its perceived + loading time, so consider using a placeholder UI or a branded launch screen to reduce the perceived loading time.</li> <li>A<a href="https://www.google.com/design/spec/patterns/launch-screens.html#launch-screens-types-of-launch-screens"> - placeholder UI</a> is the most seamless launch transition, appropriate for + placeholder UI</a> is the most seamless launch transition, appropriate for both app launches and in-app activity transitions.</li> <li><a href="https://www.google.com/design/spec/patterns/launch-screens.html#launch-screens-placeholder-ui"> - Branded launch screens</a> provide momentary brand exposure, freeing the UI + Branded launch screens</a> provide momentary brand exposure, freeing the UI to focus on content.</li> <li>For more information on implementing splash screens, see the <a href="https://www.google.com/design/spec/patterns/launch-screens.html"> @@ -758,24 +758,24 @@ on first load</h4> <ul> <li><a href="https://www.google.com/design/spec/material-design/introduction.html"> - Material Design</a> is a visual language that synthesizes the classic - principles of good design with the innovation and possibility of technology - and science. Material Design aims to develop a single underlying system that - allows for a unified experience across platforms and device sizes. Consider - using key Material Design components so that users intuitively know how to + Material Design</a> is a visual language that synthesizes the classic + principles of good design with the innovation and possibility of technology + and science. Material Design aims to develop a single underlying system that + allows for a unified experience across platforms and device sizes. Consider + using key Material Design components so that users intuitively know how to use your app.</li> <li>Ready-to-use Material Design components are available via the <a - href="{@docRoot}tools/support-library/features.html#design">Design Support - library</a>. These components are supported in Android 2.1 (API level 7) and + href="{@docRoot}tools/support-library/features.html#design">Design Support + library</a>. These components are supported in Android 2.1 (API level 7) and above.</li> </ul> <h3 id="localization">Localization</h3> <ul> <li>Your users could be from any part of the world and their first language - may not be yours. If you don’t present your app in a language that your - users can read, it is a missed opportunity. You should therefore + may not be yours. If you don’t present your app in a language that your + users can read, it is a missed opportunity. You should therefore localize your app for key regional languages.</li> - <li>To learn more, visit the Android training on <a + <li>To learn more, visit the Android training on <a href="{@docRoot}training/basics/supporting-devices/languages.html"> Supporting Different Languages</a>.</li> </ul> diff --git a/docs/html/distribute/essentials/quality/core.jd b/docs/html/distribute/essentials/quality/core.jd index 0ff44eb97e00..637eaac56ce4 100644 --- a/docs/html/distribute/essentials/quality/core.jd +++ b/docs/html/distribute/essentials/quality/core.jd @@ -12,7 +12,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="#listing">Google Play</a></li> </ol> - + <h2>Testing</h2> <ol> <li><a href="#test-environment">Setting Up a Test Environment</a></li> @@ -24,7 +24,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Tablet App Quality</a></li> <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimize Your App</a></li> </ol> - + </div> </div> @@ -85,7 +85,7 @@ page.image=/distribute/images/core-quality-guidelines.jpg <th style="width:54px;"> ID </th> - + <th> Description diff --git a/docs/html/distribute/essentials/quality/tablets.jd b/docs/html/distribute/essentials/quality/tablets.jd index 2b2a5ae2d6ae..3ff35f751842 100644 --- a/docs/html/distribute/essentials/quality/tablets.jd +++ b/docs/html/distribute/essentials/quality/tablets.jd @@ -57,7 +57,7 @@ Xnonavpage=true <p>The first step in delivering a great tablet app experience is making sure that it meets the <em>core app quality criteria</em> for all of the devices and form factors that the app is targeting. For complete information, see the <a -href="{@docRoot}distribute/essentials/quality/core.html">Core App Quality Guidelines</a>. +href="{@docRoot}distribute/essentials/quality/core.html">Core App Quality Guidelines</a>. </p> <p> @@ -73,7 +73,7 @@ Before publishing, also ensure that your app passes the basic technical checks a </ul> <p>If your app is already uploaded to the Google Play Developer Console, you - can see how it is doing against these checks + can see how it is doing against these checks by visiting the <a href="#google-play-optimization-tips">Optimization Tips page</a>.</p> @@ -505,7 +505,7 @@ attribute. <pre><uses-feature android:name="android.hardware.telephony" android:required="false" /></pre></li> -<li>Similarly, check the manifest for <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> elements that +<li>Similarly, check the manifest for <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> elements that <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">imply hardware feature requirements</a> that not be appropriate for tablets. If you find such permissions, make sure to explicitly declare a corresponding diff --git a/docs/html/distribute/googleplay/cast.jd b/docs/html/distribute/googleplay/cast.jd index 937ab58901a6..3112f8100c3e 100644 --- a/docs/html/distribute/googleplay/cast.jd +++ b/docs/html/distribute/googleplay/cast.jd @@ -26,7 +26,7 @@ take full advantage of multiscreen experiences via Cast. <p> <a href="https://developers.google.com/cast/">Find out how to get your app Google - Cast-ready</a>. + Cast-ready</a>. </p> <h2 id="tips">Tips</h2> diff --git a/docs/html/distribute/googleplay/families/faq.jd b/docs/html/distribute/googleplay/families/faq.jd index 363dc91c114b..663850f54df1 100644 --- a/docs/html/distribute/googleplay/families/faq.jd +++ b/docs/html/distribute/googleplay/families/faq.jd @@ -10,7 +10,7 @@ page.metaDescription=Questions and answers about Designed for Families font-weight:bold; } </style> - + <div id="qv-wrapper"> <ol id="qv"> <h2>In this document</h2> @@ -84,7 +84,7 @@ page.metaDescription=Questions and answers about Designed for Families <dd> No, you do not need to translate your privacy policy. However, if you distribute your apps in a few select countries, it is advised that you do - translate your privacy policy. + translate your privacy policy. </dd> <dt> @@ -173,7 +173,7 @@ page.metaDescription=Questions and answers about Designed for Families confirm that it is appropriate for families. Assuming your app complies with all program requirements, we expect that publishing time should not take any longer than normal; however, there may be a delay in publishing the app if it is - rejected during the Designed for Families review. + rejected during the Designed for Families review. </dd> <dt> @@ -301,7 +301,7 @@ page.metaDescription=Questions and answers about Designed for Families <dd> House ads are allowed, but they must comply with <a - href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">ads policies</a>. + href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">ads policies</a>. </dd> <dt> diff --git a/docs/html/distribute/googleplay/families/start.jd b/docs/html/distribute/googleplay/families/start.jd index 0e773bd11c3a..f174dae26da2 100644 --- a/docs/html/distribute/googleplay/families/start.jd +++ b/docs/html/distribute/googleplay/families/start.jd @@ -86,7 +86,7 @@ page.metaDescription=Join Designed for Families in just a few simple steps. <p class="note"> <strong>Note</strong>: Published apps in the Designed for Families program - are also available to all users on Google Play. + are also available to all users on Google Play. </p> <p> diff --git a/docs/html/distribute/googleplay/tv.jd b/docs/html/distribute/googleplay/tv.jd index a35edbc45470..981ba510dd76 100644 --- a/docs/html/distribute/googleplay/tv.jd +++ b/docs/html/distribute/googleplay/tv.jd @@ -275,7 +275,7 @@ page.metaDescription=Distribute your apps, games, and content to Android TV. the criteria, you’ll receive a <strong>notification email sent to your developer account address</strong>, with a summary of the areas that you need to address. When you’ve made the necessary adjustments, you can upload a new version of your app to the Developer - Console. + Console. </p> <p> @@ -296,7 +296,7 @@ page.metaDescription=Distribute your apps, games, and content to Android TV. <li> <em>Approved</em> — Your app was reviewed and approved. The app will be - made available directly to Android TV users. + made available directly to Android TV users. </li> <li> diff --git a/docs/html/distribute/tools/promote/device-art.jd b/docs/html/distribute/tools/promote/device-art.jd index 9b4dd1481aeb..7fef02ff11e5 100644 --- a/docs/html/distribute/tools/promote/device-art.jd +++ b/docs/html/distribute/tools/promote/device-art.jd @@ -221,7 +221,7 @@ feature image or screenshots for your Google Play app listing.</p> landOffset: [489,327], portRes: ['shadow', 'back', 'fore'], portOffset: [327,489], - portSize: [1440, 2560], + portSize: [1440, 2560], archived: true }, { diff --git a/docs/html/distribute/tools/promote/linking.jd b/docs/html/distribute/tools/promote/linking.jd index 025480b1f1bd..13b15744d405 100644 --- a/docs/html/distribute/tools/promote/linking.jd +++ b/docs/html/distribute/tools/promote/linking.jd @@ -18,7 +18,7 @@ page.metaDescription=Learn how to build links that take users to your published <p>Google Play provides several link formats that let you bring users to your products in the way you want, from Android apps, web pages, ads, reviews, -articles, social media posts, and more.</p> +articles, social media posts, and more.</p> <p>The link formats let you:</p> <ul> diff --git a/docs/html/google/backup/signup.jd b/docs/html/google/backup/signup.jd index 598003dbe23b..86518b6458f9 100644 --- a/docs/html/google/backup/signup.jd +++ b/docs/html/google/backup/signup.jd @@ -105,7 +105,7 @@ This is the terms of service for the Android Backup Service. 8.4 You agree that you shall not remove, obscure, or alter any proprietary rights notices (including copyright, trade mark notices) which may be affixed to or contained within the Service. <h3>9. License from Google</h3> -9.1 Subject to terms and conditions of these Terms, Google gives you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the Service as provided to you by Google. This license is for the sole purpose of enabling you to use and enjoy the benefit of the Service as provided by Google, in the manner permitted by the Terms. +9.1 Subject to terms and conditions of these Terms, Google gives you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the Service as provided to you by Google. This license is for the sole purpose of enabling you to use and enjoy the benefit of the Service as provided by Google, in the manner permitted by the Terms. 9.2 You may not (and you may not permit anyone else to) copy, modify, create a derivative work of, reverse engineer, decompile or otherwise attempt to extract the source code from the Service or any part thereof, unless this is expressly permitted or required by law, or unless you have been specifically told that you may do so by Google, in writing. @@ -208,7 +208,7 @@ with the Android Backup Service Terms of Service</label> <input id="pname" type="text" name="pname" size="47" value="" onkeyup="onFormInput()" onfocus="boxFocusChanged(this,true)" onblur="boxFocusChanged(this,false)"/> </p> -<p><a href="" class="dac-button dac-raised dac-primary disabled ndk" id="registerButton" +<p><a href="" class="dac-button dac-raised dac-primary disabled ndk" id="registerButton" onclick="onRegister(); return false;" >Register with Android Backup Service</a></p> </div> @@ -234,7 +234,7 @@ onclick="onRegister(); return false;" >Register with Android Backup Service</a>< ); } } - + function boxFocusChanged(obj, focused) { if (focused) { if(obj.value == DEFAULT_TEXT){ @@ -248,14 +248,14 @@ onclick="onRegister(); return false;" >Register with Android Backup Service</a>< } } } - - + + function onFormInput() { /* verify that the TOS is agreed and a bit version is chosen */ var packagename = $("#pname").val(); if ($("input#agree").is(":checked") && packagename.length - && packagename != DEFAULT_TEXT) { + && packagename != DEFAULT_TEXT) { /* reveal the button */ $("a#registerButton").removeClass('disabled'); } else { diff --git a/docs/html/google/index.jd b/docs/html/google/index.jd index 027ba23a6e5b..9b7ff0b8b48f 100644 --- a/docs/html/google/index.jd +++ b/docs/html/google/index.jd @@ -53,7 +53,7 @@ footer.hide=1 <section class="dac-section dac-invert dac-darken-bg" style="background-image: url(/images/distribute/google-play-bg.jpg)"><div class="wrap"> <h1 class="dac-section-title">Google Play developer tools</h1> <div class="dac-section-subtitle"> - Scale your publishing, manage your catalog, build revenue using Google Play developer tools. + Scale your publishing, manage your catalog, build revenue using Google Play developer tools. </div> <div class="resource-widget resource-flow-layout col-16" data-query="collection:google/landing/googleplay" diff --git a/docs/html/google/play/billing/api.jd b/docs/html/google/play/billing/api.jd index 6816ff16264f..62f3367752a9 100644 --- a/docs/html/google/play/billing/api.jd +++ b/docs/html/google/play/billing/api.jd @@ -34,7 +34,7 @@ page.tags="billing, inapp, iap" <h2>See also</h2> <ol> <li><a href="{@docRoot}training/in-app-billing/index.html">Selling In-app Products</a></li> - </ol> + </ol> </div> </div> diff --git a/docs/html/google/play/billing/billing_admin.jd b/docs/html/google/play/billing/billing_admin.jd index 05f3ad593b9d..292cfcce0c36 100644 --- a/docs/html/google/play/billing/billing_admin.jd +++ b/docs/html/google/play/billing/billing_admin.jd @@ -748,10 +748,9 @@ you at the conclusion of the purchase flow, as the value of the intent.</p> <p class="note"> - <strong>Note:</strong> When a user completes a test purchase, the - <code>orderId</code> field remains blank. To track test transactions, use - the <code>purchaseToken</code> field instead. For more information about - working with test purchases, see <a + <strong>Note:</strong> Test purchases don't have an <code>orderId</code> + field. To track test transactions, you use the <code>purchaseToken</code> + field instead. For more information about working with test purchases, see <a href="{@docRoot}google/play/billing/billing_testing.html">Testing In-app Billing</a>. </p> @@ -766,14 +765,14 @@ assigned and managed by Google.</p> <p>For transactions dated 5 December 2012 or later, Google payments assigns a Merchant Order Number (rather than a Google Order Number) and reports the Merchant -Order Number as the value of <code>orderID</code>. Here's an +Order Number as the value of <code>orderId</code>. Here's an example:</p> <pre>"orderId" : "GPA.1234-5678-9012-34567"</pre> <p>For transactions dated previous to 5 December 2012, Google checkout assigned a Google Order Number and reported that number as the value of -<code>orderID</code>. Here's an example of an <code>orderID</code> holding a +<code>orderId</code>. Here's an example of an <code>orderId</code> holding a Google Order Number:</p> <pre>"orderId" : "556515565155651"</pre> diff --git a/docs/html/google/play/billing/billing_testing.jd b/docs/html/google/play/billing/billing_testing.jd index 755f3ffd6220..44b7ad3081cf 100644 --- a/docs/html/google/play/billing/billing_testing.jd +++ b/docs/html/google/play/billing/billing_testing.jd @@ -81,8 +81,8 @@ accounts.</p> <p> Once authorized for testing access, those users can make purchases without - being charged. The <code>orderId</code> field for test purchases remains - blank, ensuring that there are no actual charges to user accounts. + being charged. Test purchases don't have an <code>orderId</code> field, which + ensures that there are no actual charges to user accounts. </p> <p class="note"> @@ -127,11 +127,11 @@ account. Users can confirm the account that is making a purchase by expanding th purchase dialog.</p> <p class="note"> - <strong>Note:</strong> For test purchases, leave the {@code orderId} field - blank. You can use the {@code purchaseToken} field to identify test purchases. + <strong>Note:</strong> Test purchases don't have an <code>orderId</code> + field. To track test purchases, you use the <code>purchaseToken</code> field + instead. </p> - <h4 id="tp-account">Test purchases and developer account</h4> <p>Authorized license test accounts are associated with your developer account in Google Play, rather than with a specific APK or package name. Identifying an diff --git a/docs/html/google/play/licensing/adding-licensing.jd b/docs/html/google/play/licensing/adding-licensing.jd index 3bf4c1a61333..bfd4f91d83a1 100644 --- a/docs/html/google/play/licensing/adding-licensing.jd +++ b/docs/html/google/play/licensing/adding-licensing.jd @@ -7,7 +7,7 @@ parent.link=index.html <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#manifest-permission">Adding the Licensing Permission</a></li> @@ -42,7 +42,7 @@ to close IPC connections</a></li> <li><a href="#app-publishing">Publishing a Licensed Application</a></li> <li><a href="#support">Where to Get Support</a></li> </ol> - + </div> </div> @@ -572,7 +572,7 @@ the <code>dontAllow()</code> method on {@code LicenseCheckerCallback}. </li> </li> <li>In case of a recoverable local or server error, such as when the network is not available to send the request, {@code LicenseChecker} passes a {@code RETRY} response to -your {@code Policy} object's <code>processServerResponse()</code> method. +your {@code Policy} object's <code>processServerResponse()</code> method. <p>Also, both the {@code allow()} and {@code dontAllow()} callback methods receive a <code>reason</code> argument. The {@code allow()} method's reason is usually {@code Policy.LICENSED} or {@code Policy.RETRY} and the {@code dontAllow()} reason is usually {@code @@ -672,7 +672,7 @@ private class MyLicenseCheckerCallback implements LicenseCheckerCallback { return; } displayResult(getString(R.string.dont_allow)); - + if (reason == Policy.RETRY) { // If the reason received from the policy is RETRY, it was probably // due to a loss of connection with the service, so we should give the @@ -854,9 +854,9 @@ sample application calls <code>checkAccess()</code> from a <h3 id="account-key">Embed your public key for licensing</h3> <p>For each application, the Google Play service automatically -generates a 2048-bit RSA public/private key pair that is used for -licensing and in-app billing. The key pair is uniquely associated with the -application. Although associated with the application, the key pair is +generates a 2048-bit RSA public/private key pair that is used for +licensing and in-app billing. The key pair is uniquely associated with the +application. Although associated with the application, the key pair is <em>not</em> the same as the key that you use to sign your applications (or derived from it).</p> <p>The Google Play Developer Console exposes the public key for licensing to any @@ -876,11 +876,11 @@ your application's public key for licensing:</p> href="http://play.google.com/apps/publish">Developer Console</a> and sign in. Make sure that you sign in to the account from which the application you are licensing is published (or will be published). </li> -<li>In the application details page, locate the <strong>Services & APIs</strong> +<li>In the application details page, locate the <strong>Services & APIs</strong> link and click it. </li> -<li>In the <strong>Services & APIs</strong> page, locate the -<strong>Licensing & In-App Billing</strong> section. Your public key for -licensing is given in the +<li>In the <strong>Services & APIs</strong> page, locate the +<strong>Licensing & In-App Billing</strong> section. Your public key for +licensing is given in the <strong>Your License Key For This Application</strong> field. </li> </ol> diff --git a/docs/html/google/play/licensing/licensing-reference.jd b/docs/html/google/play/licensing/licensing-reference.jd index d4ca79a77cb8..2b16299448c9 100644 --- a/docs/html/google/play/licensing/licensing-reference.jd +++ b/docs/html/google/play/licensing/licensing-reference.jd @@ -7,7 +7,7 @@ parent.link=index.html <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#lvl-summary">LVL Classes and Interfaces</a></li> @@ -418,7 +418,7 @@ responses in the <code>allow()</code> method. The count of {@code RETRY} respons maintained in the <code>processServerResponse()</code> method, not shown. </p> -<pre> +<pre> public boolean allowAccess() { long ts = System.currentTimeMillis(); if (mLastResponse == LicenseResponse.LICENSED) { diff --git a/docs/html/google/play/licensing/overview.jd b/docs/html/google/play/licensing/overview.jd index ecb384dc74ed..8d7977e1cb00 100755 --- a/docs/html/google/play/licensing/overview.jd +++ b/docs/html/google/play/licensing/overview.jd @@ -6,14 +6,14 @@ parent.link=index.html <div id="qv-wrapper"> <div id="qv"> - + <h2>Quickview</h2> <ul> <li>Licensing allows you to verify your app was purchased from Google Play</li> <li>Your app maintains control of how it enforces its licensing status</li> <li>The service is free for all developers who publish on Google Play</li> </ul> - + <h2>In this document</h2> <ol> <li><a href="#Secure">License Responses are Secure</a></li> @@ -21,7 +21,7 @@ parent.link=index.html <li><a href="#Reqs">Requirements and Limitations</a></li> <li><a href="#CopyProtection">Replacement for Copy Protection</a></li> </ol> - + </div> </div> @@ -107,10 +107,10 @@ response data using an RSA key pair that is shared exclusively between the Googl server and you.</p> <p>The licensing service generates a single licensing key pair for each -application and exposes the public key in your application's -<strong>Services & APIs</strong> page in the Developer Console. You must copy -the public key from the Developer Console and embed it in your application -source code. The server retains the private key internally and uses it to sign +application and exposes the public key in your application's +<strong>Services & APIs</strong> page in the Developer Console. You must copy +the public key from the Developer Console and embed it in your application +source code. The server retains the private key internally and uses it to sign license responses for the applications you publish with that account.</p> <p>When your application receives a signed response, it uses the embedded public @@ -209,7 +209,7 @@ practices in the following documents, you can help ensure that your implementati secure.</li> <li>Adding licensing to an application does not affect the way the application functions when run on a device that does not offer Google Play.</li> -<li>You can implement licensing controls for a free app, but only if you're using the service to +<li>You can implement licensing controls for a free app, but only if you're using the service to provide <a href="{@docRoot}google/play/expansion-files.html">APK expansion files</a>.</li> </ul> diff --git a/docs/html/google/play/publishing/multiple-apks.jd b/docs/html/google/play/publishing/multiple-apks.jd index fd4481dc076a..a878fb3ab1ad 100644 --- a/docs/html/google/play/publishing/multiple-apks.jd +++ b/docs/html/google/play/publishing/multiple-apks.jd @@ -250,11 +250,11 @@ If you can't avoid using both, be aware that for any conflicts in agreement betw </li> <li><strong>Device feature sets</strong> - <p>This is based on your manifest file's <a + <p>This is based on your manifest file's <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element(s).</p> <p>For example, you can provide one APK for devices that support multitouch and another -APK for devices that do not support multitouch. See +APK for devices that do not support multitouch. See <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#features-reference">Features Reference</a> for a list of features supported by the platform.</p> <br/> diff --git a/docs/html/guide/appendix/app-intents.jd b/docs/html/guide/appendix/app-intents.jd index 8898927f240f..5fb004fff856 100644 --- a/docs/html/guide/appendix/app-intents.jd +++ b/docs/html/guide/appendix/app-intents.jd @@ -89,13 +89,13 @@ excludeFromSuggestions=true <tr><td>pitch</td><td>Panorama center-of-view in degrees from -90 (look straight up) to 90 (look straight down.)</td></tr> <tr><td>zoom</td><td>Panorama zoom. 1.0 = normal zoom, 2.0 = zoomed in 2x, 3.0 = zoomed in 4x, and so on.<br /> - A zoom of 1.0 is 90 degree horizontal FOV for a nominal - landscape mode 4 x 3 aspect ratio display. - Android phones in portrait mode will adjust the zoom so that - the vertical FOV is approximately the same as the landscape vertical - FOV. This means that the horizontal FOV of an Android phone in portrait - mode is much narrower than in landscape mode. This is done to minimize - the fisheye lens effect that would be present if a 90 degree horizontal + A zoom of 1.0 is 90 degree horizontal FOV for a nominal + landscape mode 4 x 3 aspect ratio display. + Android phones in portrait mode will adjust the zoom so that + the vertical FOV is approximately the same as the landscape vertical + FOV. This means that the horizontal FOV of an Android phone in portrait + mode is much narrower than in landscape mode. This is done to minimize + the fisheye lens effect that would be present if a 90 degree horizontal FOV was used in portrait mode.</td></tr> <tr><td>mapZoom</td><td>The map zoom of the map location associated with this panorama. This value is passed on to the Maps activity when the Street View "Go to Maps" menu item is chosen. It corresponds to the <em>z</em> parameter in diff --git a/docs/html/guide/appendix/g-app-intents.jd b/docs/html/guide/appendix/g-app-intents.jd index 9ec72db2411f..21c927b913b7 100644 --- a/docs/html/guide/appendix/g-app-intents.jd +++ b/docs/html/guide/appendix/g-app-intents.jd @@ -83,7 +83,7 @@ href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filter </td> </tr> <tr> - <td>Google Streetview</td> + <td>Google Streetview</td> <td>google.streetview:cbll=<em>lat</em>,<em>lng</em>&cbp=1,<em>yaw</em>,,<em>pitch</em>,<em>zoom</em>&mz=<em>mapZoom</em> </td> <td>VIEW</td> diff --git a/docs/html/guide/appendix/glossary.jd b/docs/html/guide/appendix/glossary.jd index a200a6c0ff0e..75a533ad9084 100755 --- a/docs/html/guide/appendix/glossary.jd +++ b/docs/html/guide/appendix/glossary.jd @@ -15,7 +15,7 @@ excludeFromSuggestions=true </dd> <dt id="dex">.dex file </dt> - <dd>Compiled Android application code file. + <dd>Compiled Android application code file. <p>Android programs are compiled into .dex (Dalvik Executable) files, which are in turn zipped into a single .apk file on the device. .dex files can be created by automatically translating compiled applications written in @@ -26,7 +26,7 @@ excludeFromSuggestions=true a string value assigned to an Intent. Action strings can be defined by Android or by a third-party developer. For example, android.intent.action.VIEW for a Web URL, or com.example.rumbler.SHAKE_PHONE for a custom application - to vibrate the phone. + to vibrate the phone. <p>Related: <a href="#intent">Intent</a>.</p> </dd> @@ -41,8 +41,8 @@ excludeFromSuggestions=true <dt id="adb">adb</dt> <dd>Android Debug Bridge, a command-line debugging application included with the SDK. It provides tools to browse the device, copy tools on the device, and - forward ports for debugging. If you are developing in Android Studio, - adb is integrated into your development environment. See + forward ports for debugging. If you are developing in Android Studio, + adb is integrated into your development environment. See <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> for more information. </dd> @@ -90,7 +90,7 @@ excludeFromSuggestions=true <dt id="ddms">DDMS</dt> <dd>Dalvik Debug Monitor Service, a GUI debugging application included with the SDK. It provides screen capture, log dump, and process - examination capabilities. If you are developing in Android Studio, + examination capabilities. If you are developing in Android Studio, DDMS is integrated into your development environment. See <a href="{@docRoot}tools/debugging/ddms.html">Using DDMS</a> to learn more about the program.</dd> @@ -100,7 +100,7 @@ excludeFromSuggestions=true is not intended to persist in the history stack, contain complex layout, or perform complex actions. Android provides a default simple dialog for you with optional buttons, though you can define your own dialog layout. - The base class for dialogs is {@link android.app.Dialog Dialog}. + The base class for dialogs is {@link android.app.Dialog Dialog}. <p>Related: <a href="#activity">Activity</a>.</p></dd> <dt id="drawable">Drawable</dt> @@ -113,7 +113,7 @@ excludeFromSuggestions=true — xml or bitmap files that describe the image. Drawable resources are compiled into subclasses of {@link android.graphics.drawable}. For more information about drawables and other resources, see <a - href="{@docRoot}guide/topics/resources/resources-i18n.html">Resources</a>. + href="{@docRoot}guide/topics/resources/resources-i18n.html">Resources</a>. <p>Related: <a href="#resources">Resources</a>, <a href="#canvas">Canvas </a></p></dd> @@ -133,7 +133,7 @@ excludeFromSuggestions=true based on the criteria supplied in the Intent and the Intent Filters defined by other applications. For more information, see <a href="{@docRoot}guide/components/intents-filters.html">Intents and - Intent Filters</a>. + Intent Filters</a>. <p>Related: <a href="#intentfilter">Intent Filter</a>, <a href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd> @@ -147,7 +147,7 @@ excludeFromSuggestions=true application/activity that best matches the Intent and criteria. For more information, see <a href="{@docRoot}guide/components/intents-filters.html">Intents and - Intent Filters</a>. + Intent Filters</a>. <p>Related: <a href="#intent">Intent</a>, <a href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd> @@ -155,12 +155,12 @@ excludeFromSuggestions=true <dd>An application class that listens for Intents that are broadcast, rather than being sent to a single target application/activity. The system delivers a broadcast Intent to all interested broadcast receivers, which - handle the Intent sequentially. - <p>Related: <a href="#intent">Intent</a>, <a href="#intentfilter">Intent + handle the Intent sequentially. + <p>Related: <a href="#intent">Intent</a>, <a href="#intentfilter">Intent Filter</a>.</p> </dd> - + <dt id="layoutresource">Layout Resource</dt> - <dd>An XML file that describes the layout of an Activity screen. + <dd>An XML file that describes the layout of an Activity screen. <p>Related: <a href="#resources">Resources</a></p></dd> <dt id="manifest">Manifest File</dt> @@ -175,15 +175,15 @@ excludeFromSuggestions=true <dd>A resizeable bitmap resource that can be used for backgrounds or other images on the device. See <a href="{@docRoot}guide/topics/resources/available-resources.html#ninepatch"> - Nine-Patch Stretchable Image</a> for more information. + Nine-Patch Stretchable Image</a> for more information. <p>Related: <a href="#resources">Resources</a>.</p></dd> <dt id="opengles">OpenGL ES</dt> <dd> Android provides OpenGL ES libraries that you can use for fast, complex 3D images. It is harder to use than a Canvas object, but - better for 3D objects. The {@link android.opengl} and - {@link javax.microedition.khronos.opengles} packages expose - OpenGL ES functionality. + better for 3D objects. The {@link android.opengl} and + {@link javax.microedition.khronos.opengles} packages expose + OpenGL ES functionality. <p>Related: <a href="#canvas">Canvas</a>, <a href="#surface">Surface</a></p></dd> <dt id="resources">Resources</dt> @@ -205,15 +205,15 @@ excludeFromSuggestions=true <dt id="service">Service</dt> <dd>An object of class {@link android.app.Service} that runs in the background (without any UI presence) to perform various persistent - actions, such as playing music or monitoring network activity. + actions, such as playing music or monitoring network activity. <p>Related: <a href="#activity">Activity</a></p></dd> <dt id="surface">Surface</dt> <dd>An object of type {@link android.view.Surface} representing a block of memory that gets composited to the screen. A Surface holds a Canvas object for drawing, and provides various helper methods to draw layers and resize - the surface. You should not use this class directly; use - {@link android.view.SurfaceView} instead. + the surface. You should not use this class directly; use + {@link android.view.SurfaceView} instead. <p>Related: <a href="#canvas">Canvas</a></p></dd> <dt id="surfaceview">SurfaceView</dt> @@ -249,7 +249,7 @@ excludeFromSuggestions=true windows, and so on). It receives calls from its parent object (see viewgroup, below)to draw itself, and informs its parent object about where and how big it would like to be (which may or may not be respected by the - parent). For more information, see {@link android.view.View}. + parent). For more information, see {@link android.view.View}. <p>Related: <a href="#viewgroup">Viewgroup</a>, <a href="#widget">Widget </a></p></dd> @@ -259,18 +259,18 @@ excludeFromSuggestions=true they can be, as well as for calling each to draw itself when appropriate. Some viewgroups are invisible and are for layout only, while others have an intrinsic UI (for instance, a scrolling list box). Viewgroups are all - in the {@link android.widget widget} package, but extend - {@link android.view.ViewGroup ViewGroup}. + in the {@link android.widget widget} package, but extend + {@link android.view.ViewGroup ViewGroup}. <p>Related: <a href="#view">View</a></p></dd> <dt id="widget">Widget</dt> <dd>One of a set of fully implemented View subclasses that render form elements and other UI components, such as a text box or popup menu. Because a widget is fully implemented, it handles measuring and drawing - itself and responding to screen events. Widgets are all in the + itself and responding to screen events. Widgets are all in the {@link android.widget} package. </dd> - <!-- + <!-- <dt id="panel">Panel</dt> <dd> A panel is a concept not backed by a specific class. It is a View of some sort that is tied in closely to a parent window, but can handle diff --git a/docs/html/guide/components/activities.jd b/docs/html/guide/components/activities.jd index 070154d805e7..e757288424d8 100644 --- a/docs/html/guide/components/activities.jd +++ b/docs/html/guide/components/activities.jd @@ -622,7 +622,7 @@ android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p> <p>The system calls {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} before making the activity vulnerable to destruction. The system passes this method -a {@link android.os.Bundle} in which you can save +a {@link android.os.Bundle} in which you can save state information about the activity as name-value pairs, using methods such as {@link android.os.Bundle#putString putString()} and {@link android.os.Bundle#putInt putInt()}. Then, if the system kills your application diff --git a/docs/html/guide/components/fragments.jd b/docs/html/guide/components/fragments.jd index f9c2a26d62e9..951d04211bde 100644 --- a/docs/html/guide/components/fragments.jd +++ b/docs/html/guide/components/fragments.jd @@ -36,7 +36,7 @@ parent.link=activities.html <li>{@link android.app.FragmentManager}</li> <li>{@link android.app.FragmentTransaction}</li> </ol> - + <h2>See also</h2> <ol> <li><a href="{@docRoot}training/basics/fragments/index.html">Building a Dynamic UI with Fragments</a></li> @@ -306,7 +306,7 @@ ID for a fragment:</p> <ul> <li>Supply the {@code android:id} attribute with a unique ID.</li> <li>Supply the {@code android:tag} attribute with a unique string.</li> - <li>If you provide neither of the previous two, the system uses the ID of the container + <li>If you provide neither of the previous two, the system uses the ID of the container view.</li> </ul> </div> @@ -365,7 +365,7 @@ findFragmentByTag()}.</p> <p>For an example activity that uses a fragment as a background worker, without a UI, see the {@code FragmentRetainInstance.java} sample, which is included in the SDK samples (available through the -Android SDK Manager) and located on your system as +Android SDK Manager) and located on your system as <code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p> @@ -381,7 +381,7 @@ get it, call {@link android.app.Activity#getFragmentManager()} from your activit <li>Get fragments that exist in the activity, with {@link android.app.FragmentManager#findFragmentById findFragmentById()} (for fragments that provide a UI in the activity layout) or {@link android.app.FragmentManager#findFragmentByTag -findFragmentByTag()} (for fragments that do or don't provide a UI).</li> +findFragmentByTag()} (for fragments that do or don't provide a UI).</li> <li>Pop fragments off the back stack, with {@link android.app.FragmentManager#popBackStack()} (simulating a <em>Back</em> command by the user).</li> <li>Register a listener for changes to the back stack, with {@link @@ -568,7 +568,7 @@ public static class FragmentA extends ListFragment { <p>If the activity has not implemented the interface, then the fragment throws a {@link java.lang.ClassCastException}. -On success, the {@code mListener} member holds a reference to activity's implementation of +On success, the {@code mListener} member holds a reference to activity's implementation of {@code OnArticleSelectedListener}, so that fragment A can share events with the activity by calling methods defined by the {@code OnArticleSelectedListener} interface. For example, if fragment A is an extension of {@link android.app.ListFragment}, each time @@ -798,7 +798,7 @@ android.widget.FrameLayout}), or start a new activity (where the fragment can be <p>The second fragment, {@code DetailsFragment} shows the play summary for the item selected from the list from {@code TitlesFragment}:</p> - + {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details} <p>Recall from the {@code TitlesFragment} class, that, if the user clicks a list item and the @@ -811,7 +811,7 @@ the selected play summary when the screen is in portrait orientation:</p> {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details_activity} - + <p>Notice that this activity finishes itself if the configuration is landscape, so that the main activity can take over and display the {@code DetailsFragment} alongside the {@code TitlesFragment}. This can happen if the user begins the {@code DetailsActivity} while in portrait orientation, but diff --git a/docs/html/guide/components/index.jd b/docs/html/guide/components/index.jd index 811d015b82bc..d596b3be3462 100644 --- a/docs/html/guide/components/index.jd +++ b/docs/html/guide/components/index.jd @@ -1,7 +1,7 @@ page.title=App Components page.landing=true -page.landing.intro=Android's application framework lets you create rich and innovative apps using a set of reusable components. This section explains how you can build the components that define the building blocks of your app and how to connect them together using intents. -page.metaDescription=Android's application framework lets you create rich and innovative apps using a set of reusable components. This section explains how you can build the components that define the building blocks of your app and how to connect them together using intents. +page.landing.intro=Android's application framework lets you create rich and innovative apps using a set of reusable components. This section explains how you can build the components that define the building blocks of your app and how to connect them together using intents. +page.metaDescription=Android's application framework lets you create rich and innovative apps using a set of reusable components. This section explains how you can build the components that define the building blocks of your app and how to connect them together using intents. page.landing.image=images/develop/app_components.png page.image=images/develop/app_components.png @@ -11,7 +11,7 @@ page.image=images/develop/app_components.png <div class="col-6"> <h3>Blog Articles</h3> - + <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html"> <h4>Using DialogFragments</h4> <p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p> @@ -21,7 +21,7 @@ page.image=images/develop/app_components.png <h4>Fragments For All</h4> <p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p> </a> - + <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"> <h4>Multithreading for Performance</h4> @@ -33,7 +33,7 @@ handled in a different thread.</p> <div class="col-6"> <h3>Training</h3> - + <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html"> <h4>Managing the Activity Lifecycle</h4> <p>This class explains important lifecycle callback methods that each Activity diff --git a/docs/html/guide/components/loaders.jd b/docs/html/guide/components/loaders.jd index ddd513b2a2c5..7c4baa846ae3 100644 --- a/docs/html/guide/components/loaders.jd +++ b/docs/html/guide/components/loaders.jd @@ -21,14 +21,14 @@ parent.link=activities.html </ol> </li> </ol> - + <h2>Key classes</h2> <ol> <li>{@link android.app.LoaderManager}</li> <li>{@link android.content.Loader}</li> - </ol> - + </ol> + <h2>Related samples</h2> <ol> <li> <a @@ -53,7 +53,7 @@ content changes.</li> recreated after a configuration change. Thus, they don't need to re-query their data.</li> </ul> - + <h2 id="summary">Loader API Summary</h2> <p>There are multiple classes and interfaces that may be involved in using @@ -131,10 +131,10 @@ of {@link android.content.Loader} or {@link android.content.AsyncTaskLoader} to load data from some other source.</li> <li>An implementation for {@link android.app.LoaderManager.LoaderCallbacks}. This is where you create new loaders and manage your references to existing -loaders.</li> +loaders.</li> <li>A way of displaying the loader's data, such as a {@link android.widget.SimpleCursorAdapter}.</li> - <li>A data source, such as a {@link android.content.ContentProvider}, when using a + <li>A data source, such as a {@link android.content.ContentProvider}, when using a {@link android.content.CursorLoader}.</li> </ul> <h3 id="starting">Starting a Loader</h3> @@ -142,7 +142,7 @@ android.widget.SimpleCursorAdapter}.</li> <p>The {@link android.app.LoaderManager} manages one or more {@link android.content.Loader} instances within an {@link android.app.Activity} or {@link android.app.Fragment}. There is only one {@link -android.app.LoaderManager} per activity or fragment.</p> +android.app.LoaderManager} per activity or fragment.</p> <p>You typically initialize a {@link android.content.Loader} within the activity's {@link @@ -159,13 +159,13 @@ the following parameters:</p> <ul> <li>A unique ID that identifies the loader. In this example, the ID is 0.</li> <li>Optional arguments to supply to the loader at -construction (<code>null</code> in this example).</li> +construction (<code>null</code> in this example).</li> <li>A {@link android.app.LoaderManager.LoaderCallbacks} implementation, which the {@link android.app.LoaderManager} calls to report loader events. In this example, the local class implements the {@link android.app.LoaderManager.LoaderCallbacks} interface, so it passes a reference -to itself, {@code this}.</li> +to itself, {@code this}.</li> </ul> <p>The {@link android.app.LoaderManager#initLoader initLoader()} call ensures that a loader is initialized and active. It has two possible outcomes:</p> @@ -196,7 +196,7 @@ the life of the loader automatically. The {@link android.app.LoaderManager} starts and stops loading when necessary, and maintains the state of the loader and its associated content. As this implies, you rarely interact with loaders directly (though for an example of using loader methods to fine-tune a loader's -behavior, see the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> sample). +behavior, see the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> sample). You most commonly use the {@link android.app.LoaderManager.LoaderCallbacks} methods to intervene in the loading process when particular events occur. For more discussion of this topic, see <a @@ -249,7 +249,7 @@ Instantiate and return a new {@link android.content.Loader} for the given ID. — Called when a previously created loader has finished its load. </li></ul> <ul> - <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} + <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()} — Called when a previously created loader is being reset, thus making its data unavailable. </li> @@ -344,11 +344,11 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor data) { <h4 id="onLoaderReset">onLoaderReset</h4> -<p>This method is called when a previously created loader is being reset, thus +<p>This method is called when a previously created loader is being reset, thus making its data unavailable. This callback lets you find out when the data is about to be released so you can remove your reference to it.  </p> -<p>This implementation calls -{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} +<p>This implementation calls +{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()} with a value of <code>null</code>:</p> <pre> @@ -370,7 +370,7 @@ public void onLoaderReset(Loader<Cursor> loader) { android.app.Fragment} that displays a {@link android.widget.ListView} containing the results of a query against the contacts content provider. It uses a {@link android.content.CursorLoader} to manage the query on the provider.</p> - + <p>For an application to access a user's contacts, as shown in this example, its manifest must include the permission {@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p> diff --git a/docs/html/guide/components/processes-and-threads.jd b/docs/html/guide/components/processes-and-threads.jd index 7bb3c65a373b..250799853c92 100644 --- a/docs/html/guide/components/processes-and-threads.jd +++ b/docs/html/guide/components/processes-and-threads.jd @@ -121,7 +121,7 @@ required to keep the user interface responsive.</p></li> <ul> <li>It hosts an {@link android.app.Activity} that is not in the foreground, but is still -visible to the user (its {@link android.app.Activity#onPause onPause()} method has been called). +visible to the user (its {@link android.app.Activity#onPause onPause()} method has been called). This might occur, for example, if the foreground activity started a dialog, which allows the previous activity to be seen behind it.</li> diff --git a/docs/html/guide/practices/index.jd b/docs/html/guide/practices/index.jd index b61272b91ad7..f34a6ba2eef4 100644 --- a/docs/html/guide/practices/index.jd +++ b/docs/html/guide/practices/index.jd @@ -1,7 +1,7 @@ page.title=Best Practices excludeFromSuggestions=true page.landing=true -page.landing.intro=Design and build apps the right way. Learn how to create apps that look great and perform well on as many devices as possible, from phones to tablets and more. +page.landing.intro=Design and build apps the right way. Learn how to create apps that look great and perform well on as many devices as possible, from phones to tablets and more. page.landing.image= @jd:body @@ -10,20 +10,20 @@ page.landing.image= <div class="col-12"> <h3>Blog Articles</h3> - + <a href="http://android-developers.blogspot.com/2010/10/improving-app-quality.html"> <h4>Improving App Quality</h4> <p>One way of improving your app’s visibility in the ecosystem is by deploying well-targeted mobile advertising campaigns and cross-app promotions. However, there’s another time-tested method of fueling the impression-install-ranking cycle: improve the product!</p> </a> - + <a href="http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html"> <h4>Say Goodbye to the Menu Button</h4> <p>As Ice Cream Sandwich rolls out to more devices, it's important that you begin to migrate your designs to the action bar in order to promote a consistent Android user experience.</p> </a> - + <a href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html"> <h4>New Tools For Managing Screen Sizes</h4> <p>Android 3.2 includes new tools for supporting devices with a wide range of screen sizes. @@ -31,14 +31,14 @@ One important result is better support for a new size of screen; what is typical tablet. This release also offers several new APIs to simplify developers’ work in adjusting to different screen sizes.</p> </a> - + <a href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html"> <h4>Identifying App Installations</h4> <p>It is very common, and perfectly reasonable, for a developer to want to track individual installations of their apps. It sounds plausible just to call TelephonyManager.getDeviceId() and use that value to identify the installation. There are problems with this</p> </a> - + <a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html"> <h4>Making Android Games that Play Nice</h4> @@ -46,7 +46,7 @@ href="http://android-developers.blogspot.com/2011/11/making-android-games-that-p often multi-core, multi-purpose system like Android is trickier. Even the best developers frequently make mistakes in the way they interact with the Android system and with other applications</p> </a> - + </div> diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd index 8d07eb9847d8..db45e19ce0da 100644 --- a/docs/html/guide/practices/optimizing-for-3.0.jd +++ b/docs/html/guide/practices/optimizing-for-3.0.jd @@ -4,7 +4,7 @@ excludeFromSuggestions=true <div id="deprecatedSticker"> - <a href="#" + <a href="#" onclick="$('#naMessage').show();$('#deprecatedSticker').hide();return false"> <strong>This doc is deprecated</strong></a> </div> @@ -181,7 +181,7 @@ larger screens.</p> <li>Perform your usual tests to be sure everything works and looks as expected.</li> </ol> </li> - + <li><b>Apply the new "holographic" theme to your application</b> <ol> <li>Open your manifest file and update the <a @@ -191,7 +191,7 @@ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code android:targetSdkVersion}</a> to {@code "11"}. For example: <pre> <manifest ... > - <uses-sdk android:minSdkVersion="4" + <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /> <application ... > ... @@ -446,7 +446,7 @@ Multi-choice List</a>: An example of how to provide multiple-choice selection fo GridView.</li> <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> -Content Loaders</a>: An example using new Loader APIs to asynchronously load data.</li> +Content Loaders</a>: An example using new Loader APIs to asynchronously load data.</li> <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html"> Property Animation</a>: Several samples using the new animation APIs to animate object @@ -624,7 +624,7 @@ landscape orientation and that is how most users will use them. So, you should e application can function in landscape. Even if you want to avoid rotating the screen while your application is running, you should not assume that portrait is the device's default orientation. You should either ensure that your layout is usable in both portrait and landscape orientations or -provide an <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources" +provide an <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources" >alternative layout resource</a> for landscape orientation.</p> <p>If you believe your application or game provides its best experience when the screen is tall, diff --git a/docs/html/guide/practices/screen-compat-mode.jd b/docs/html/guide/practices/screen-compat-mode.jd index 34580ba824cf..18a089e1d119 100644 --- a/docs/html/guide/practices/screen-compat-mode.jd +++ b/docs/html/guide/practices/screen-compat-mode.jd @@ -75,7 +75,7 @@ android:targetSdkVersion}</a> to {@code "4"} or higher, or set <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#resizeable">{@code android:resizeable}</a> to {@code "true"}.</p> </dd> - + <dt>Version 2 (Android 3.2 and greater)</dt> <dd>The system draws the application's layout the same as it would on a normal size handset (approximately emulating a 320dp x 480dp screen), then scales it @@ -151,9 +151,9 @@ android:xlargeScreens}</a> attribute to {@code "true"}:</p> system will always resize your layout to fit the screen. This works regardless of what values you've set in the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> -attributes.</p> +attributes.</p> </li> - + <li><strong>Easy but has other effects:</strong> <p>In your manifest's <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> diff --git a/docs/html/guide/practices/screens_support.jd b/docs/html/guide/practices/screens_support.jd index 2223dbf3096d..ea9f988daac7 100644 --- a/docs/html/guide/practices/screens_support.jd +++ b/docs/html/guide/practices/screens_support.jd @@ -139,7 +139,7 @@ or position in a density-independent way. <p>The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the -screen in use. The conversion of dp units to screen pixels is simple: +screen in use. The conversion of dp units to screen pixels is simple: <nobr><code>px = dp * (dpi / 160)</code></nobr>. For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different @@ -214,7 +214,7 @@ changes in screen density.</p> </ul> <p class="note"><strong>Note:</strong> These minimum screen sizes were not as well defined prior to -Android 3.0, so you may encounter some devices that are mis-classified between normal and large. +Android 3.0, so you may encounter some devices that are mis-classified between normal and large. These are also based on the physical resolution of the screen, so may vary across devices—for example a 1024x720 tablet with a system bar actually has a bit less space available to the application due to it being used by the system bar.</p> @@ -904,7 +904,7 @@ href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><support manifest element:</p> <dl> - + <dt><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest"> {@code android:requiresSmallestWidthDp}</a></dt> diff --git a/docs/html/guide/practices/tablets-and-handsets.jd b/docs/html/guide/practices/tablets-and-handsets.jd index 85327b6d7036..a1bafd3d7dec 100644 --- a/docs/html/guide/practices/tablets-and-handsets.jd +++ b/docs/html/guide/practices/tablets-and-handsets.jd @@ -89,7 +89,7 @@ href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.< </li> - <li><strong>Use the action bar</strong>, but follow best practices and ensure your design + <li><strong>Use the action bar</strong>, but follow best practices and ensure your design is flexible enough for the system to adjust the action bar layout based on the screen size. <p>The {@link android.app.ActionBar} is a UI component for activities that replaces the traditional diff --git a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd index f6669e4f36b4..b66fdd42a1f4 100644 --- a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd +++ b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd @@ -8,7 +8,7 @@ parent.link=index.html <div id="deprecatedSticker"> - <a href="#" + <a href="#" onclick="$('#naMessage').show();$('#deprecatedSticker').hide();return false"> <strong>This doc is deprecated</strong></a> </div> @@ -105,7 +105,7 @@ need to</a></li> <p> It illustrates activities and tasks with examples, and describes some of their underlying principles and mechanisms, such as navigation, - multitasking, activity re-use, intents, and the activity stack. + multitasking, activity re-use, intents, and the activity stack. The document also highlights design decisions that are available to you and what control they give you over the UI of your application. </p> @@ -146,7 +146,7 @@ document), <p> An Android <em>application</em> typically consists of one or more - related, loosely bound activities <!--(and possibly + related, loosely bound activities <!--(and possibly <a href=#services_broadcast_receivers title="other components">other components</a>)--> for the user to interact with, typically bundled up in a single file (with an .apk suffix). Android ships with a rich set @@ -186,10 +186,10 @@ document), seamless, activity after activity, <a href="#tasks">task</a> after task. </p> - + <p> An activity handles a particular type of content (data) and accepts a - set of related user actions. Each activity has a + set of related user actions. Each activity has a <a href="{@docRoot}guide/components/activities.html#Lifecycle">lifecycle</a> that is independent of the other activities in its application or task — each activity is @@ -283,7 +283,7 @@ independent of the other to the activity stack, so that pressing <em>Back</em> displays the previous activity on the stack. However, the user cannot use the <em>Back</em> button to go back further than the last visit to Home. The adding of an activity to - the current stack happens whether or not that activity begins a new + the current stack happens whether or not that activity begins a new <a href=#tasks title=task>task</a> (as long as that task was started without going Home), so going back can let the user go back to activities in previous tasks. The user can get to tasks earlier than @@ -297,7 +297,7 @@ independent of the other designing the navigation, if you have screen A and you want the user to be able go to a subsequent screen B and then use the <em>Back</em> button to go back to screen A, then the screen A needs to be implemented as an - activity. The one exception to this rule is if your application + activity. The one exception to this rule is if your application <a href="#taking_over_back_key">takes control of the <em>Back</em> button</a> and manages the navigation itself. @@ -340,7 +340,7 @@ itself. Send a text message with an attachment </li> <li> - View a YouTube video and share it by email with someone else + View a YouTube video and share it by email with someone else </li> </ul> @@ -666,7 +666,7 @@ itself. mailto:info@example.com link, they are actually initiating an Intent object, or just an <em>intent</em>, which then gets resolved to a particular component (we consider only activity components here). - So, the result of a user touching a mailto: link is an Intent object + So, the result of a user touching a mailto: link is an Intent object that the system tries to match to an activity. If that Intent object was written explicitly naming an activity (an <em>explicit intent</em>), then the system immediately launches that activity in response to the user @@ -925,7 +925,7 @@ href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filter For instance, you could disable the user control that initiates the Intent object, or display a message to the user that lets them go to a location, such as Google Play, to download its application. - In this way, your code can start the activity (using either startActivity() + In this way, your code can start the activity (using either startActivity() or startActivityForResult()) only if the intent has tested to resolve to an activity that is actually present. </p> @@ -947,7 +947,7 @@ href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filter launcher</em> (typically implemented as a sliding drawer on the Home screen), or from a shortcut icon on the Home screen, or from the task switcher. (The mechanism for this is for the - activity to have an + activity to have an <a href={@docRoot}guide/components/intents-filters.html>intent filter</a> with action MAIN and category LAUNCHER.) @@ -1103,7 +1103,7 @@ MAIN and activity to be run. </p> - + <h3 id="notifications_get_back_tip">Notifications and App Widgets should provide consistent back behavior</h3> <p> Notifications and app widgets are two common ways that a user can launch diff --git a/docs/html/guide/practices/ui_guidelines/icon_design.jd b/docs/html/guide/practices/ui_guidelines/icon_design.jd index 07266607ed4c..6b546c9fd21d 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design.jd @@ -58,7 +58,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> @@ -72,13 +72,13 @@ professional to users.</p> <p>This document provides information to help you create icons for various parts of your application’s user interface that match the general styles used by the -Android 2.x framework. Following these guidelines will help you to create a +Android 2.x framework. Following these guidelines will help you to create a polished and unified experience for the user.</p> <p>The following documents discuss detailed guidelines for the common types of icons used throughout Android applications:</p> -<dl> +<dl> <dt><strong><a href="icon_design_launcher.html">Launcher Icons</a></strong></dt> <dd>A Launcher icon is a graphic that represents your application on the device's Home screen and in the Launcher window.</dd> @@ -103,7 +103,7 @@ icons used throughout Android applications:</p> graphically represent list items. An example is the Settings application.</dd> </dl> -<p>To get started creating your icons more quickly, you can download +<p>To get started creating your icons more quickly, you can download the Android Icon Templates Pack.</p> @@ -142,7 +142,7 @@ section in the box at the top-right corner of this page.</p> <p>Android is designed to run on a variety of devices that offer a range of screen sizes and resolutions. When you design the icons for your application, it's important keep in mind that your application may be installed on any of -those devices. As described in the <a +those devices. As described in the <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> document, the Android platform makes it straightforward for you to provide icons in such a way that they will be displayed properly on any device, @@ -158,7 +158,7 @@ your application, see <a href="{@docRoot}guide/practices/screens_support.html#qualifiers">Resource directory qualifiers for screen size and density</a>. </p> -<p>For tips on how to create and manage icon sets for multiple densities, see +<p>For tips on how to create and manage icon sets for multiple densities, see <a href="#design-tips">Tips for Designers</a>.</p> @@ -290,7 +290,7 @@ initially draw launcher icons on an 864x864 artboard, it will be easier and cleaner to tweak the icons when you scale the artboard down to the target sizes for final asset creation.</p> - + <h3>When scaling, redraw bitmap layers as needed</h3> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd index 831de4569edd..37657f4d1ecc 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_action_bar.jd @@ -31,7 +31,7 @@ Screens</a></li> </div> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd index c958ed9a655e..a7ee73f41a78 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_dialog.jd @@ -29,7 +29,7 @@ Screens</a></li> </div> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd index f47e186790a9..3bb1a627c85c 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd @@ -28,7 +28,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd index 2df3a2250ef5..483e076ac52f 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd @@ -95,7 +95,7 @@ but rather they are meant to emphasize the common approaches that your icons can share with others on the device. Figure 1, at right, provides examples. </p> <div class="figure"> - <img src="{@docRoot}images/icon_design/IconGraphic_Icons_i.png" + <img src="{@docRoot}images/icon_design/IconGraphic_Icons_i.png" width="340"> <p class="img-caption"> <strong>Figure 1.</strong> Example launcher icons for Android 2.0 and diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd index 29e1a9380de7..fa350bc2b6a7 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_list.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_list.jd @@ -30,7 +30,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd index a5b35977fc0e..25b23d0f628c 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_menu.jd @@ -34,7 +34,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> @@ -267,7 +267,7 @@ menu icon <a href="#palette1">color palette</a>. </li> appropriate. For example, in Figure 3 the logical place for rounded corners is the roof and not the rest of the building.</span></li> -<li>All dimensions specified on this page are based on a 48x48 pixel artboard +<li>All dimensions specified on this page are based on a 48x48 pixel artboard size with a 6 pixel safeframe.</li> <li>The menu icon effect (the outer glow) described in <a @@ -277,7 +277,7 @@ safeframe.</li> <li><strong>Final art must be exported as a transparent PNG file.</strong></li> -<li>Templates for creating menu icons in Adobe Photoshop are available in the +<li>Templates for creating menu icons in Adobe Photoshop are available in the Icon Templates Pack.</li> </ul> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd index 4993adb0328b..27df450e1673 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_status_bar.jd @@ -42,7 +42,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd index cbe6706fb067..308e6d092c1e 100644 --- a/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd +++ b/docs/html/guide/practices/ui_guidelines/icon_design_tab.jd @@ -34,7 +34,7 @@ Screens</a></li> <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>, including more guidelines for <a href="{@docRoot}design/style/iconography.html">Iconography</a>.</p> @@ -291,10 +291,10 @@ your application. </p> the Android platform.</p> <p class="warning"><strong>Warning:</strong> -Because these resources can change between platform versions, you +Because these resources can change between platform versions, you should not reference the system's copy of the resources. If you want to use any icons or other internal drawable resources, you should store a -local copy of those icons or drawables in your application resources, +local copy of those icons or drawables in your application resources, then reference the local copy from your application code. In that way, you can maintain control over the appearance of your icons, even if the system's copy changes. Note that the grid below is not intended to be complete.</p> diff --git a/docs/html/guide/practices/ui_guidelines/index.jd b/docs/html/guide/practices/ui_guidelines/index.jd index 91a0725b82e3..713109cf2bcf 100644 --- a/docs/html/guide/practices/ui_guidelines/index.jd +++ b/docs/html/guide/practices/ui_guidelines/index.jd @@ -7,7 +7,7 @@ excludeFromSuggestions=true <div class="note design" style="background:none;overflow:auto;padding:10px 5px"> <a href="{@docRoot}design/index.html"><img src="{@docRoot}images/home/android-design.png" alt="" style="float:left;margin:0 1em 0 0;"/></a> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>The Android UX team has put together a set of guidelines for the interaction and visual design of Android applications. The new collection provides an overview of Android styles, design patterns, building blocks for exceptional Android designs, and more.</p> diff --git a/docs/html/guide/practices/ui_guidelines/menu_design.jd b/docs/html/guide/practices/ui_guidelines/menu_design.jd index bf87bdd124e7..949752588a12 100644 --- a/docs/html/guide/practices/ui_guidelines/menu_design.jd +++ b/docs/html/guide/practices/ui_guidelines/menu_design.jd @@ -8,7 +8,7 @@ parent.link=index.html <div id="deprecatedSticker"> - <a href="#" + <a href="#" onclick="$('#naMessage').show();$('#deprecatedSticker').hide();return false"> <strong>This doc is deprecated</strong></a> </div> @@ -16,7 +16,7 @@ parent.link=index.html <div id="naMessage" style="display:block"> <div><p><strong>This document has been deprecated.</strong></p> - <p>For design guidelines about adding user actions and other options, read the design guidelines + <p>For design guidelines about adding user actions and other options, read the design guidelines for <a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a> or the developer guide about <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a>.</p> @@ -25,7 +25,7 @@ for <a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a> or the dev onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> </div> </div> - + @@ -37,7 +37,7 @@ onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> <div id="qv-wrapper"> <div id="qv"> - + <h2>Quickview</h2> <ul> @@ -85,15 +85,15 @@ onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> </ol> </div> -</div> +</div> <p> A menu holds a set of commands (user actions) that are normally hidden, and are accessible by a button, key, or gesture. Menu commands provide a means - for performing operations and for navigating to other parts of your + for performing operations and for navigating to other parts of your application or other applications. Menus are useful for freeing screen space, as an alternative to placing functionality and navigation, in buttons or other - user controls in the content area of your application. + user controls in the content area of your application. </p> <p> @@ -102,7 +102,7 @@ onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> the functionality and navigation for your application. Briefly: <ul> <li>The <em>Options menu</em> contains primary functionality that applies - globally to the current activity or starts a related activity. + globally to the current activity or starts a related activity. It is typically invoked by a user pressing a hard button, often labeled <em>Menu</em>.</li> <li>The <em>Context menu</em> contains secondary functionality for the currently selected item. It is typically invoked by a user's touch & hold @@ -113,11 +113,11 @@ onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> <p> All but the simplest applications have menus. The system automatically - lays the menus out and provides standard ways for users to access them. + lays the menus out and provides standard ways for users to access them. In this sense, they are familiar and dependable ways for users to access functionality across all applications. All menus are panels that "float" on top of the activity screen and are smaller than full screen, so that the - application is still visible around its edges. This is a visual reminder + application is still visible around its edges. This is a visual reminder that a menu is an intermediary operation that disappears once it's used. </p> @@ -127,8 +127,8 @@ onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" /> <h2 id="tour_of_the_menus">Tour of the Menus</h2> -<p class="note"><strong>Note:</strong> Your menus and screens might not look -like those shown in this document; they may vary from one version of Android +<p class="note"><strong>Note:</strong> Your menus and screens might not look +like those shown in this document; they may vary from one version of Android or device to another. </p> @@ -137,13 +137,13 @@ or device to another. <p> The Options menu contains commands that apply globally across the current activity, or can start another activity. They do not apply to a selected - item in the content (a <a href="#context_menu">Context menu</a> does that). + item in the content (a <a href="#context_menu">Context menu</a> does that). </p> <p> - On most devices, a user presses the <em>Menu</em> button to access the Options menu, - as shown in the screenshot below. To close the menu, the user presses - <em>Menu</em> again, or presses the <em>Back</em> button. + On most devices, a user presses the <em>Menu</em> button to access the Options menu, + as shown in the screenshot below. To close the menu, the user presses + <em>Menu</em> again, or presses the <em>Back</em> button. In fact, to cancel out of any menu, press the <em>Back</em> button. (Pressing the <em>Menu</em> button or touching outside the menu also works.) Note that how to invoke this menu may be different on different devices. @@ -153,15 +153,15 @@ or device to another. Each <a href="{@docRoot}guide/practices/ui_guidelines/activity_task_design.html#activities">activity</a> activity has its own set of operations and therefore its own Options menu. - An application with multiple activities would have a different Options menu - for each activity. + An application with multiple activities would have a different Options menu + for each activity. </p> <p> For example, in the message list view of an email program, the Options menu - might let you search the messages, compose a new message, refresh the list, - or change the email settings. The compose view of an email program would - have a different Options menu, such as adding a CC field, attaching a file, + might let you search the messages, compose a new message, refresh the list, + or change the email settings. The compose view of an email program would + have a different Options menu, such as adding a CC field, attaching a file, or discarding the message. </p> @@ -179,7 +179,7 @@ or device to another. <li> <b>Options expanded menu</b> - If the activity has more menu items than will fit on the icon menu, then the last icon is labeled "More" — selecting it - displays a list that can contain any number of menu items and will scroll + displays a list that can contain any number of menu items and will scroll as necessary. </li> </ul> @@ -202,18 +202,18 @@ or device to another. <p> A user can touch & hold on content on the screen to - access a Context menu (if one exists), as shown in the screenshot below. + access a Context menu (if one exists), as shown in the screenshot below. A Context menu is a list of menu items (commands) that can operate on the selected content. The command can either be part of the current - activity, or the system can pass the selected content along to - an operation in another activity (by way of an + activity, or the system can pass the selected content along to + an operation in another activity (by way of an <a href="{@docRoot}guide/practices/ui_guidelines/activity_task_design.html#intents">intent</a>). </p> <p> For example, in an email message list, a user can touch & hold on an email message to open a Context menu containing commands to read, - archive, or delete the message. + archive, or delete the message. </p> <p id="location"> @@ -231,7 +231,7 @@ or device to another. In the above example, if the user performs touch & hold on the contact "Obi Wan Kenobi", a Context menu opens. The commands provided in this Context menu are the complete set of actions that can be performed - on this contact. + on this contact. </p> <p> @@ -246,7 +246,7 @@ or device to another. <p> Also note, as shown in the following screenshot, the Context menu and the next screen both hold the same complete set of commands that can be performed - on this contact. The Context menu displays the commands in a list, + on this contact. The Context menu displays the commands in a list, while the "View contact" activity splits them into various items in the Options menu, icon buttons and list items. </p> @@ -268,10 +268,10 @@ or device to another. <h4>Text Commands in Context Menu</h4> <p> - Text links and text fields in the content both have system-provided operations + Text links and text fields in the content both have system-provided operations that are common across all applications: operations such as "Select all", "Select text", - "Copy all", and "Add to dictionary". If the text field is editable, it also - has other operations, such as "Cut all" and "Input Method", and if text + "Copy all", and "Add to dictionary". If the text field is editable, it also + has other operations, such as "Cut all" and "Input Method", and if text is also on the clipboard, it has "Paste". The system automatically inserts the appropriate menu items into the Context menu of text links and text fields, as shown in the following screenshot. @@ -342,7 +342,7 @@ or device to another. An example of a selection-specific Context menu is when a user performs a touch & hold on a person's name in a list view of a contacts application. The Context menu would typically contain commands "View contact", "Call contact", - and "Edit contact". + and "Edit contact". </p> <h3 id="most_frequently_used">Place the most frequently used operations first</h3> @@ -365,7 +365,7 @@ or device to another. <h3 id="dont_put_commands">Don't put commands <em>only</em> in a Context menu</h3> <p> - If a user can fully access your application without using Context menus, + If a user can fully access your application without using Context menus, then it's designed properly! In general, if part of your application is inaccessible without using Context menus, then you need to duplicate those commands elsewhere. </p> @@ -373,8 +373,8 @@ or device to another. <p> Before opening a Context menu, it has no visual representation that identifies its presence (whereas the Options menu has the <em>Menu</em> button), and so is not - particularly discoverable. - Therefore, in general, a Context menu should <em>duplicate</em> commands + particularly discoverable. + Therefore, in general, a Context menu should <em>duplicate</em> commands found in the corresponding activity screen. For example, while it's useful to let the user call a phone number from a Context menu invoked by touch & hold on a name in a list of contacts, that operation should <em>also</em> @@ -388,7 +388,7 @@ or device to another. As described under <a href="#context_menu_shortcut">shortcut</a>, touching on an item in the content should activate the same command as touching the first item in the Context menu. Both cases should be the most intuitive - operation for that item. + operation for that item. </p> <h3 id="selecting_content_item">Selecting an item in the content should perform the most intuitive operation</h3> @@ -427,13 +427,13 @@ or device to another. <h3 id="context_menu_should_identify">A Context menu should identify the selected item</h3> <p> - When a user does touch & hold on an item, the Context menu should - contain the name of the selected item. Therefore, + When a user does touch & hold on an item, the Context menu should + contain the name of the selected item. Therefore, when creating a Context menu, be sure to include a title and the name of the - selected item so that it's clear to the user what the context is. + selected item so that it's clear to the user what the context is. For example, if a user selects a contact "Joan of Arc", put that name in the title of the Context menu (using - {@link android.view.ContextMenu#setHeaderTitle(java.lang.CharSequence) setHeaderTitle}). + {@link android.view.ContextMenu#setHeaderTitle(java.lang.CharSequence) setHeaderTitle}). Likewise, a command to edit the contact should be called "Edit contact", not just "Edit". </p> @@ -442,7 +442,7 @@ or device to another. <h3 id="most_important_commands">Put only the most important commands fixed on the screen</h3> <p> - By putting commands in menus, you free up the screen to hold more content. + By putting commands in menus, you free up the screen to hold more content. On the other hand, fixing commands in the content area of an activity makes them more prominent and easy to use. </p> @@ -456,7 +456,7 @@ or device to another. To give a command the highest prominence, ensuring the command is obvious and won't be overlooked.<br> Example: A "Buy" button in a store application. </li> - <li> + <li> When quick access to the command is important and going to the menu would be tedious or slow.<br> Example: Next/Previous buttons or Zoom In/Out buttons in an image viewing application. @@ -494,7 +494,7 @@ or device to another. When a dialog is displayed, pressing the <em>Menu</em> button should do nothing. This also holds true for activities that look like dialogs. A dialog box is recognizable by being - smaller than full-screen, having zero to three buttons, is non-scrollable, and + smaller than full-screen, having zero to three buttons, is non-scrollable, and possibly a list of selectable items that can include checkboxes or radio buttons. <!--For examples of dialogs, see Text Guidelines.--> </p> @@ -520,12 +520,12 @@ true <p> Sometimes a menu item's action cannot be performed — for example, - the "Forward" button in a browser cannot work until after the "Back" + the "Forward" button in a browser cannot work until after the "Back" button has been pressed. We recommend: </p> <ul> - <li> + <li> <b>In Options menu</b> - disable the menu item, which dims the text and icon, turning it gray. This applies to menu items in both the icon menu and the "More" menu. It would be disorienting for the icon menu to change from 6 diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd index cf2cd64d483a..95c594dba972 100644 --- a/docs/html/guide/practices/ui_guidelines/widget_design.jd +++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd @@ -46,7 +46,7 @@ parent.link=index.html <div class="note design"> -<p><strong>New Guides for App Designers!</strong></p> +<p><strong>New Guides for App Designers!</strong></p> <p>Check out the new documents for designers at <strong><a href="{@docRoot}design/index.html">Android Design</a></strong>.</p> </div> diff --git a/docs/html/guide/topics/admin/device-admin.jd b/docs/html/guide/topics/admin/device-admin.jd index e2fef04b7537..2a8583a83e7d 100644 --- a/docs/html/guide/topics/admin/device-admin.jd +++ b/docs/html/guide/topics/admin/device-admin.jd @@ -135,60 +135,60 @@ can require PIN or passwords to have at least six characters. </td> </tr> combination of letters and numbers. They may include symbolic characters. </td> </tr> - + <tr> <td>Complex password required</td> <td>Requires that passwords must contain at least a letter, a numerical digit, and a special symbol. Introduced in Android 3.0. </td> </tr> - -<tr> + +<tr> <td>Minimum letters required in password</td> <td>The minimum number of -letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> +letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> - - - <tr> - <td>Minimum lowercase letters required in password</td> - <td>The minimum number of lowercase -letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> + + + <tr> + <td>Minimum lowercase letters required in password</td> + <td>The minimum number of lowercase +letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> - - <tr> - <td>Minimum non-letter characters required in password</td> + + <tr> + <td>Minimum non-letter characters required in password</td> <td>The minimum number of -non-letter characters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> +non-letter characters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> - -<tr> - <td>Minimum numerical digits required in password</td> - <td>The minimum number of numerical digits required in the password for all admins or a particular one. Introduced in Android 3.0.</td> + +<tr> + <td>Minimum numerical digits required in password</td> + <td>The minimum number of numerical digits required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> -<tr> - <td>Minimum symbols required in password</td> - <td>The minimum number of symbols required in the password for all admins or a particular one. Introduced in Android 3.0.</td> +<tr> + <td>Minimum symbols required in password</td> + <td>The minimum number of symbols required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> -<tr> - <td>Minimum uppercase letters required in password</td> - <td>The minimum number of uppercase letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> +<tr> + <td>Minimum uppercase letters required in password</td> + <td>The minimum number of uppercase letters required in the password for all admins or a particular one. Introduced in Android 3.0.</td> </tr> -<tr> - <td>Password expiration timeout</td> - <td>When the password will expire, expressed as a delta in milliseconds from when a device admin sets the expiration timeout. Introduced in Android 3.0.</td> +<tr> + <td>Password expiration timeout</td> + <td>When the password will expire, expressed as a delta in milliseconds from when a device admin sets the expiration timeout. Introduced in Android 3.0.</td> </tr> -<tr> - <td>Password history restriction</td> +<tr> + <td>Password history restriction</td> <td>This policy prevents users from reusing the last <em>n</em> unique passwords. This policy is typically used in conjunction with {@link android.app.admin.DevicePolicyManager#setPasswordExpirationTimeout(android.content.ComponentName,long) setPasswordExpirationTimeout()}, which forces users to update their passwords after a specified amount of time has elapsed. -Introduced in Android 3.0.</td> +Introduced in Android 3.0.</td> </tr> - + <tr> <td>Maximum failed password attempts </td> <td>Specifies how many times a user can enter the wrong password before the @@ -203,18 +203,18 @@ pressed a button before the device locks the screen. When this happens, users need to enter their PIN or passwords again before they can use their devices and access data. The value can be between 1 and 60 minutes.</td> </tr> -<tr> -<td>Require storage encryption</td> -<td>Specifies that the storage area should be encrypted, if the device supports it. +<tr> +<td>Require storage encryption</td> +<td>Specifies that the storage area should be encrypted, if the device supports it. Introduced in Android 3.0.</td> </tr> <tr> <td>Disable camera</td> - + <td>Specifies that the camera should be disabled. Note that this doesn't have to be a permanent disabling. The camera can be enabled/disabled dynamically based on context, time, and so on. Introduced in Android 4.0.</td> - + </tr> @@ -234,7 +234,7 @@ Administration API lets you do the following:</p> <ul> <p>The examples used in this document are based on the Device Administration API sample, which is included in the SDK samples (available through the -Android SDK Manager) and located on your system as +Android SDK Manager) and located on your system as <code><sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java</code>.</p> <p>The sample application offers a demo of device admin features. It presents users @@ -250,8 +250,8 @@ policies, the system returns an error.</li> <li>Set how many failed password attempts can occur before the device is wiped (that is, restored to factory settings).</li> <li>Set how long from now the password will expire.</li> -<li>Set the password history length (<em>length</em> refers to number of old passwords stored in the history). -This prevents users from reusing +<li>Set the password history length (<em>length</em> refers to number of old passwords stored in the history). +This prevents users from reusing one of the last <em>n</em> passwords they previously used.</li> <li>Specify that the storage area should be encrypted, if the device supports it.</li> <li>Set the maximum amount of inactive time that can elapse before the device @@ -259,7 +259,7 @@ locks.</li> <li>Make the device lock immediately.</li> <li>Wipe the device's data (that is, restore factory settings).</li> <li>Disable the camera.</li> - + </ul> @@ -454,8 +454,8 @@ changes to prompt the user to activate the device admin application, as shown in <img src="{@docRoot}images/admin/device-admin-activate-prompt.png"/> <p class="img-caption"><strong>Figure 2.</strong> Sample Application: Activating the Application</p> -<p>Below is the code that gets executed when the user clicks the <strong>Enable Admin</strong> checkbox. This has the effect of triggering the -{@link android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object) onPreferenceChange()} +<p>Below is the code that gets executed when the user clicks the <strong>Enable Admin</strong> checkbox. This has the effect of triggering the +{@link android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object) onPreferenceChange()} callback. This callback is invoked when the value of this {@link android.preference.Preference} has been changed by the user and is about to be set and/or persisted. If the user is enabling the application, the display changes to prompt the user to activate the device admin application, as shown in figure 2. Otherwise, the device admin application is disabled. </p> @@ -556,7 +556,7 @@ containing at least numeric characters.</dd> <dt>{@link android.app.admin.DevicePolicyManager#PASSWORD_QUALITY_COMPLEX}</dt><dd>The user must have entered a password containing at least a letter, a numerical digit and -a special symbol.</dd> +a special symbol.</dd> <dt>{@link android.app.admin.DevicePolicyManager#PASSWORD_QUALITY_SOMETHING}</dt><dd>The policy requires some kind @@ -581,7 +581,7 @@ example, you could set a policy that states that passwords must contain at least contents:</p> <ul> -<li>{@link android.app.admin.DevicePolicyManager#setPasswordMinimumLetters(android.content.ComponentName,int) setPasswordMinimumLetters()}</li> +<li>{@link android.app.admin.DevicePolicyManager#setPasswordMinimumLetters(android.content.ComponentName,int) setPasswordMinimumLetters()}</li> <li>{@link android.app.admin.DevicePolicyManager#setPasswordMinimumLowerCase(android.content.ComponentName,int) setPasswordMinimumLowerCase()}</li> @@ -622,8 +622,8 @@ int maxFailedPw; mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);</pre> <h5 id="expiration">Set password expiration timeout</h5> -<p>Beginning with Android 3.0, you can use the -{@link android.app.admin.DevicePolicyManager#setPasswordExpirationTimeout(android.content.ComponentName,long) setPasswordExpirationTimeout()} +<p>Beginning with Android 3.0, you can use the +{@link android.app.admin.DevicePolicyManager#setPasswordExpirationTimeout(android.content.ComponentName,long) setPasswordExpirationTimeout()} method to set when a password will expire, expressed as a delta in milliseconds from when a device admin sets the expiration timeout. For example:</p> <pre>DevicePolicyManager mDPM; @@ -632,18 +632,18 @@ long pwExpiration; ... mDPM.setPasswordExpirationTimeout(mDeviceAdminSample, pwExpiration); </pre> - + <h5 id="history">Restrict password based on history</h5> -<p>Beginning with Android 3.0, you can use the -{@link android.app.admin.DevicePolicyManager#setPasswordHistoryLength(android.content.ComponentName,int) setPasswordHistoryLength()} +<p>Beginning with Android 3.0, you can use the +{@link android.app.admin.DevicePolicyManager#setPasswordHistoryLength(android.content.ComponentName,int) setPasswordHistoryLength()} method to limit users' ability to reuse old passwords. This method takes a <em>length</em> parameter, which specifies how many old passwords are stored. When this policy is active, users cannot enter a new password that matches the last <em>n</em> passwords. This prevents users from using the same password over and over. This policy is typically used -in conjunction with +in conjunction with {@link android.app.admin.DevicePolicyManager#setPasswordExpirationTimeout(android.content.ComponentName,long) setPasswordExpirationTimeout()}, which forces users to update their passwords after a specified amount of time has elapsed. </p> @@ -705,7 +705,7 @@ mDPM.setCameraDisabled(mDeviceAdminSample, mDisableCameraCheckbox.isChecked());< <h4 id="storage">Storage encryption</h4> <p>Beginning with Android 3.0, you can use the -{@link android.app.admin.DevicePolicyManager#setStorageEncryption(android.content.ComponentName,boolean) setStorageEncryption()} +{@link android.app.admin.DevicePolicyManager#setStorageEncryption(android.content.ComponentName,boolean) setStorageEncryption()} method to set a policy requiring encryption of the storage area, where supported.</p> <p>For example:</p> diff --git a/docs/html/guide/topics/appwidgets/host.jd b/docs/html/guide/topics/appwidgets/host.jd index 169e388918e2..7b00019239be 100644 --- a/docs/html/guide/topics/appwidgets/host.jd +++ b/docs/html/guide/topics/appwidgets/host.jd @@ -4,7 +4,7 @@ page.tags=AppWidgetHost,home screen,launcher <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#host-binding">Binding App Widgets</a> @@ -32,58 +32,58 @@ to embed <a href="{@docRoot}guide/topics/appwidgets/index.html">app widgets</a> access to content. If you're building a Home replacement or a similar app, you can also allow the user to embed app widgets by implementing an {@link android.appwidget.AppWidgetHost}. -This is not something that most apps will ever need to do, but if you are -creating your own host, it's important to understand the contractual obligations +This is not something that most apps will ever need to do, but if you are +creating your own host, it's important to understand the contractual obligations a host implicitly agrees to.</p> -<p>This document focuses on the responsibilities involved in implementing a custom -{@link android.appwidget.AppWidgetHost}. For an example of how to implement an +<p>This document focuses on the responsibilities involved in implementing a custom +{@link android.appwidget.AppWidgetHost}. For an example of how to implement an {@link android.appwidget.AppWidgetHost}, see the source code for the -Android Home screen +Android Home screen <a href="https://android.googlesource.com/platform/packages/apps/Launcher2/+/master/src/com/android/launcher2/Launcher.java"> -Launcher</a>. +Launcher</a>. -<p>Here is an overview of key classes and concepts involved in implementing a custom +<p>Here is an overview of key classes and concepts involved in implementing a custom {@link android.appwidget.AppWidgetHost}:</p> <ul> - <li><strong>App Widget Host</strong>— - The {@link android.appwidget.AppWidgetHost} provides the interaction -with the AppWidget service for apps, like the home screen, that want to embed -app widgets in their UI. An {@link android.appwidget.AppWidgetHost} must have -an ID that is unique within the host's own package. This ID remains persistent + <li><strong>App Widget Host</strong>— + The {@link android.appwidget.AppWidgetHost} provides the interaction +with the AppWidget service for apps, like the home screen, that want to embed +app widgets in their UI. An {@link android.appwidget.AppWidgetHost} must have +an ID that is unique within the host's own package. This ID remains persistent across all uses of the host. The ID is typically a hard-coded value that you assign in your application.</li> - + <li><strong>App Widget ID</strong>— - Each app widget instance is assigned a unique ID at the time of binding -(see {@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed bindAppWidgetIdIfAllowed()}, -discussed in more detail in <a href="#binding">Binding app widgets</a>). -The unique ID is obtained by the host using {@link android.appwidget.AppWidgetHost#allocateAppWidgetId() allocateAppWidgetId()}. This ID is persistent across the lifetime of the widget, -that is, until it is deleted from the host. Any host-specific state (such as the -size and location of the widget) should be persisted by the hosting package and + Each app widget instance is assigned a unique ID at the time of binding +(see {@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed bindAppWidgetIdIfAllowed()}, +discussed in more detail in <a href="#binding">Binding app widgets</a>). +The unique ID is obtained by the host using {@link android.appwidget.AppWidgetHost#allocateAppWidgetId() allocateAppWidgetId()}. This ID is persistent across the lifetime of the widget, +that is, until it is deleted from the host. Any host-specific state (such as the +size and location of the widget) should be persisted by the hosting package and associated with the app widget ID. </li> - - <li><strong>App Widget Host View</strong>— - {@link android.appwidget.AppWidgetHostView} can be thought of as a frame -that the widget is wrapped in whenever it needs to be displayed. An app widget -is assigned to an {@link android.appwidget.AppWidgetHostView} every time the + + <li><strong>App Widget Host View</strong>— + {@link android.appwidget.AppWidgetHostView} can be thought of as a frame +that the widget is wrapped in whenever it needs to be displayed. An app widget +is assigned to an {@link android.appwidget.AppWidgetHostView} every time the widget is inflated by the host. </li> <li><strong>Options Bundle</strong>— -The {@link android.appwidget.AppWidgetHost} uses the options bundle to communicate -information to the {@link android.appwidget.AppWidgetProvider} about how the -widget is being displayed (for example, size range, and whether the widget is on -a lockscreen or the home screen). This information allows the -{@link android.appwidget.AppWidgetProvider} to tailor the widget's contents +The {@link android.appwidget.AppWidgetHost} uses the options bundle to communicate +information to the {@link android.appwidget.AppWidgetProvider} about how the +widget is being displayed (for example, size range, and whether the widget is on +a lockscreen or the home screen). This information allows the +{@link android.appwidget.AppWidgetProvider} to tailor the widget's contents and appearance based on how and where it is displayed. -You use +You use {@link android.appwidget.AppWidgetHostView#updateAppWidgetOptions(android.os.Bundle) updateAppWidgetOptions()} -and +and {@link android.appwidget.AppWidgetHostView#updateAppWidgetSize updateAppWidgetSize()} -to modify an app widget's -bundle. Both of these methods trigger a callback to the +to modify an app widget's +bundle. Both of these methods trigger a callback to the {@link android.appwidget.AppWidgetProvider}.</p></li> </ul> @@ -98,15 +98,15 @@ app is running on.</p> <h3 id="binding-pre">Binding app widgets on Android 4.0 and lower</h3> -<p>On devices running Android version 4.0 and lower, users add app widgets -via a system activity that allows users to select a widget. This implicitly -does a permission check—that is, by adding the app widget, the user is -implicitly granting permission to your app to add app widgets to the host. -Here is an example that illustrates -this approach, taken from the original -<a href="https://android.googlesource.com/platform/packages/apps/Launcher/+/master/src/com/android/launcher/Launcher.java">Launcher</a>. In this snippet, an event handler invokes -{@link android.app.Activity#startActivityForResult(android.content.Intent,int) startActivityForResult()} -with the request code {@code REQUEST_PICK_APPWIDGET} in response to a +<p>On devices running Android version 4.0 and lower, users add app widgets +via a system activity that allows users to select a widget. This implicitly +does a permission check—that is, by adding the app widget, the user is +implicitly granting permission to your app to add app widgets to the host. +Here is an example that illustrates +this approach, taken from the original +<a href="https://android.googlesource.com/platform/packages/apps/Launcher/+/master/src/com/android/launcher/Launcher.java">Launcher</a>. In this snippet, an event handler invokes +{@link android.app.Activity#startActivityForResult(android.content.Intent,int) startActivityForResult()} +with the request code {@code REQUEST_PICK_APPWIDGET} in response to a user action:</p> <pre> @@ -118,9 +118,9 @@ public void onClick(DialogInterface dialog, int which) { ... case AddAdapter.ITEM_APPWIDGET: { ... - int appWidgetId = + int appWidgetId = Launcher.this.mAppWidgetHost.allocateAppWidgetId(); - Intent pickIntent = + Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); pickIntent.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); @@ -135,7 +135,7 @@ public void onClick(DialogInterface dialog, int which) { app widget to your activity. In the following example, the activity responds by calling {@code addAppWidget()} to add the app widget:</p> -<pre>public final class Launcher extends Activity +<pre>public final class Launcher extends Activity implements View.OnClickListener, OnLongClickListener { ... @Override @@ -152,7 +152,7 @@ by calling {@code addAppWidget()} to add the app widget:</p> completeAddAppWidget(data, mAddItemCellInfo, !mDesktopLocked); break; } - } + } ... } }</pre> @@ -164,7 +164,7 @@ needs to be configured before it's added:</p> int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); String customWidget = data.getStringExtra(EXTRA_CUSTOM_WIDGET); - AppWidgetProviderInfo appWidget = + AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId); if (appWidget.configure != null) { @@ -183,7 +183,7 @@ see <a href="{@docRoot}guide/topics/appwidgets/index.html#Configuring">Creating App Widget Configuration Activity</a>.</p> <p>Once the app widget is ready, the next step is to do the -actual work of adding it to the workspace. The +actual work of adding it to the workspace. The <a href="https://android.googlesource.com/platform/packages/apps/Launcher/+/master/src/com/android/launcher/Launcher.java">original Launcher</a> uses a method called {@code completeAddAppWidget()} to do this.</p> @@ -201,12 +201,12 @@ binding. To use this improved process, your app must declare the <p>But this is just the first step. At runtime the user must explicitly grant permission to your app to allow it to add app widgets to the host. To test whether your app has permission to add the widget, -you use the -{@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed bindAppWidgetIdIfAllowed()} -method. +you use the +{@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed bindAppWidgetIdIfAllowed()} +method. If {@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed bindAppWidgetIdIfAllowed()} returns {@code false}, your app must display a dialog prompting the -user to grant permission +user to grant permission ("allow" or "always allow," to cover all future app widget additions). This snippet gives an example of how to display the dialog:</p> @@ -218,9 +218,9 @@ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET); </pre> -<p>The host also has to check whether the user added +<p>The host also has to check whether the user added an app widget that needs configuration. For more discussion of this topic, -see +see <a href="{@docRoot}guide/topics/appwidgets/index.html#Configuring">Creating an App Widget Configuration Activity</a>.</p> @@ -229,23 +229,23 @@ an App Widget Configuration Activity</a>.</p> <div class="sidebox-wrapper"> <div class="sidebox"> <h2>What Version are You Targeting?</h2> - <p>The approach you use in implementing your host should depend on what Android version -you're targeting. Many of the features described in this section were introduced + <p>The approach you use in implementing your host should depend on what Android version +you're targeting. Many of the features described in this section were introduced in 3.0 or later. For example:</p> <ul> <li>Android 3.0 (API Level 11) introduces auto-advance behavior for widgets.</li> <li>Android 3.1 (API Level 12) introduces the ability to resize widgets.</li> <li>Android 4.0 (API Level 15) introduces a change in padding policy that -puts the responsibility on the +puts the responsibility on the host to manage padding.</li> <li>Android 4.1 (API Level 16) adds an API that allows the widget provider to get more detailed information about the environment in which its widget instances are being hosted.</li> -<li>Android 4.2 (API Level 17) introduces the options bundle and the -{@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed(int,android.content.ComponentName,android.os.Bundle) bindAppWidgetIdIfAllowed()} +<li>Android 4.2 (API Level 17) introduces the options bundle and the +{@link android.appwidget.AppWidgetManager#bindAppWidgetIdIfAllowed(int,android.content.ComponentName,android.os.Bundle) bindAppWidgetIdIfAllowed()} method. It also introduces lockscreen widgets.</li> </ul> -<p>If you are targeting earlier devices, refer to the original +<p>If you are targeting earlier devices, refer to the original <a href="https://android.googlesource.com/platform/packages/apps/Launcher/+/master/src/com/android/launcher/Launcher.java">Launcher</a> as an example. </div> </div> @@ -273,7 +273,7 @@ from the Configuration Activity</a>. This is a necessary step for many app widge they can be properly displayed.</li> <li>Every app widget specifies a minimum width and height in dps, as defined in the {@link android.appwidget.AppWidgetProviderInfo} metadata -(using {@link android.appwidget.AppWidgetProviderInfo#minWidth android:minWidth} and +(using {@link android.appwidget.AppWidgetProviderInfo#minWidth android:minWidth} and {@link android.appwidget.AppWidgetProviderInfo#minHeight android:minHeight}). Make sure that the widget is laid out with at least this many dps. For example, many hosts align icons and widgets in a grid. In this scenario, @@ -379,7 +379,7 @@ so it is not explicitly required to set this for a home screen host.</p> for your app—for example, if your host is a home screen, ensure that the {@link android.appwidget.AppWidgetProviderInfo#widgetCategory android:widgetCategory} -attribute in the +attribute in the {@link android.appwidget.AppWidgetProviderInfo} metadata includes the flag {@link android.appwidget.AppWidgetProviderInfo#WIDGET_CATEGORY_HOME_SCREEN}. Similarly, for the lockscreen, ensure that field includes the flag {@link android.appwidget.AppWidgetProviderInfo#WIDGET_CATEGORY_KEYGUARD}. For more diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd index c9575e025f05..7d555ed2d8d8 100644 --- a/docs/html/guide/topics/appwidgets/index.jd +++ b/docs/html/guide/topics/appwidgets/index.jd @@ -4,7 +4,7 @@ page.tags=home,AppWidgetProvider <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#Basics">The Basics</a></li> @@ -21,7 +21,7 @@ Intents</a></li> Activity</a> <ol> <li><a href="#UpdatingFromTheConfiguration">Updating the App Widget -from +from the Configuration Activity</a></li> </ol> </li> @@ -33,7 +33,7 @@ from collections </a></li> <li><a href="#fresh">Keeping Collection Data Fresh</a></li> - </ol> + </ol> </li> </ol> @@ -50,10 +50,10 @@ collections <p>App Widgets are miniature application views that can be embedded in other applications (such as the Home screen) and receive periodic updates. These views are -referred +referred to as Widgets in the user interface, and you can publish one with an App Widget provider. An application component -that is +that is able to hold other App Widgets is called an App Widget host. The screenshot below shows the Music App Widget.</p> @@ -85,14 +85,14 @@ update frequency, <dd>Defines the basic methods that allow you to programmatically interface with the App Widget, based on broadcast events. Through it, you will receive broadcasts when the -App Widget is updated, +App Widget is updated, enabled, disabled and deleted.</dd> <dt>View layout</dt> <dd>Defines the initial layout for the App Widget, defined in XML.</dd> </dl> <p>Additionally, you can implement an App Widget configuration Activity. This is -an optional +an optional {@link android.app.Activity} that launches when the user adds your App Widget and allows him or her to modify App Widget settings at create-time.</p> @@ -117,7 +117,7 @@ application's </pre> <p>The <code><receiver></code> element requires the -<code>android:name</code> +<code>android:name</code> attribute, which specifies the {@link android.appwidget.AppWidgetProvider} used by the App Widget.</p> @@ -133,7 +133,7 @@ automatically sends all other App Widget broadcasts to the AppWidgetProvider as necessary.</p> <p>The <code><meta-data></code> element specifies the -{@link android.appwidget.AppWidgetProviderInfo} resource and requires the +{@link android.appwidget.AppWidgetProviderInfo} resource and requires the following attributes:</p> <ul> <li><code>android:name</code> - Specifies the metadata name. Use @@ -141,21 +141,21 @@ following attributes:</p> to identify the data as the {@link android.appwidget.AppWidgetProviderInfo} descriptor.</li> <li><code>android:resource</code> - Specifies the {@link -android.appwidget.AppWidgetProviderInfo} +android.appwidget.AppWidgetProviderInfo} resource location.</li> </ul> <h2 id="MetaData">Adding the AppWidgetProviderInfo Metadata</h2> -<p>The {@link android.appwidget.AppWidgetProviderInfo} defines the essential +<p>The {@link android.appwidget.AppWidgetProviderInfo} defines the essential qualities of an App Widget, such as its minimum layout dimensions, its initial layout resource, how often to update the App Widget, and (optionally) a configuration Activity to launch at create-time. Define the AppWidgetProviderInfo object in an XML resource using a single <code><appwidget-provider></code> element and save it in the project's -<code>res/xml/</code> +<code>res/xml/</code> folder.</p> <p>For example:</p> @@ -167,7 +167,7 @@ folder.</p> android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" - android:configure="com.example.android.ExampleAppWidgetConfigure" + android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen"> </appwidget-provider> @@ -206,33 +206,33 @@ folder.</p> <li>The <code>updatePeriodMillis</code> attribute defines how often the App Widget framework should request an update from the {@link -android.appwidget.AppWidgetProvider} by calling the -{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context,android.appwidget.AppWidgetManager,int[]) onUpdate()} +android.appwidget.AppWidgetProvider} by calling the +{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context,android.appwidget.AppWidgetManager,int[]) onUpdate()} callback method. The actual update is not guaranteed to occur exactly on time with this value and we suggest updating as infrequently as possible—perhaps no more than once an hour to conserve the battery. You might also allow the user to adjust the frequency in a configuration—some people might want a stock ticker to update every 15 -minutes, or maybe only four times a day. +minutes, or maybe only four times a day. <p class="note"><strong>Note:</strong> If the device is asleep when it -is time for an update +is time for an update (as defined by <code>updatePeriodMillis</code>), then the device will -wake up in order +wake up in order to perform the update. If you don't update more than once per hour, this -probably won't +probably won't cause significant problems for the battery life. If, however, you need -to update more +to update more frequently and/or you do not need to update while the device is asleep, -then you can instead +then you can instead perform updates based on an alarm that will not wake the device. To do -so, set an alarm with +so, set an alarm with an Intent that your AppWidgetProvider receives, using the {@link -android.app.AlarmManager}. +android.app.AlarmManager}. Set the alarm type to either {@link -android.app.AlarmManager#ELAPSED_REALTIME} or +android.app.AlarmManager#ELAPSED_REALTIME} or {@link android.app.AlarmManager#RTC}, which will only deliver the alarm when the device is awake. Then set -<code>updatePeriodMillis</code> to +<code>updatePeriodMillis</code> to zero (<code>"0"</code>).</p> </li> <li>The <code>initialLayout</code> attribute points to the layout resource @@ -244,7 +244,7 @@ android.app.Activity} to launch when Widget properties. This is optional (read <a href="#Configuring">Creating an App Widget Configuration Activity</a> below).</li> - + <li>The <code>previewImage</code> attribute specifies a preview of what the app widget will look like after it's configured, which the user sees when selecting the app widget. If not supplied, the user instead sees your @@ -255,7 +255,7 @@ using <code>previewImage</code>, see <a href="#preview">Setting a Preview Image</a>. Introduced in Android 3.0.</li> <li>The <code>autoAdvanceViewId</code> attribute specifies the view ID of the -app widget subview that should be auto-advanced by the widget's host. Introduced in Android 3.0.</li> +app widget subview that should be auto-advanced by the widget's host. Introduced in Android 3.0.</li> <li>The <code>resizeMode</code> attribute specifies the rules by which a widget can be resized. You use this attribute to make homescreen widgets @@ -264,7 +264,7 @@ widget to show its resize handles, then drag the horizontal and/or vertical handles to change the size on the layout grid. Values for the <code>resizeMode</code> attribute include "horizontal", "vertical", and "none". To declare a widget as resizeable horizontally and vertically, supply the value -"horizontal|vertical". Introduced in Android 3.1.</li> +"horizontal|vertical". Introduced in Android 3.1.</li> <li>The <code>minResizeHeight</code> attribute specifies the minimum height (in dps) to which the widget can be resized. This field has no effect if it is greater than {@code minHeight} or if @@ -296,7 +296,7 @@ View objects listed below, but before you begin designing your App Widget, please read and understand the <a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget -Design +Design Guidelines</a>.</p> <p>Creating the App Widget layout is simple if you're @@ -306,7 +306,7 @@ However, you must be aware that App Widget layouts are based on {@link android.widget.RemoteViews}, which do not support every kind of layout or view widget.</p> -<p>A RemoteViews object (and, consequently, an App Widget) can support the +<p>A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:</p> <ul class="nolist"> @@ -334,7 +334,7 @@ following layout classes:</p> <p>Descendants of these classes are not supported.</p> -<p>RemoteViews also supports {@link android.view.ViewStub}, which is an invisible, zero-sized View you can use +<p>RemoteViews also supports {@link android.view.ViewStub}, which is an invisible, zero-sized View you can use to lazily inflate layout resources at runtime.</p> @@ -386,7 +386,7 @@ to lazily inflate layout resources at runtime.</p> <div class="sidebox-wrapper"> <div class="sidebox"> <p>You must declare your AppWidgetProvider class implementation as a -broadcast receiver +broadcast receiver using the <code><receiver></code> element in the AndroidManifest (see <a href="#Manifest">Declaring an App Widget in the Manifest</a> above).</p> </div> @@ -403,11 +403,11 @@ method calls:</p> <dl> <dt> - {@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context,android.appwidget.AppWidgetManager,int[]) onUpdate()} + {@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context,android.appwidget.AppWidgetManager,int[]) onUpdate()} </dt> <dd>This is called to update the App Widget at intervals defined by the <code>updatePeriodMillis</code> - attribute in the AppWidgetProviderInfo (see <a href="#MetaData">Adding the + attribute in the AppWidgetProviderInfo (see <a href="#MetaData">Adding the AppWidgetProviderInfo Metadata</a> above). This method is also called when the user adds the App Widget, so it should perform the essential setup, such as define event handlers for Views and start a temporary @@ -415,25 +415,25 @@ method calls:</p> configuration Activity, <strong>this method is not called</strong> when the user adds the App Widget, - but is called for the subsequent updates. It is the responsibility of the + but is called for the subsequent updates. It is the responsibility of the configuration Activity to perform the first update when configuration is done. (See <a href="#Configuring">Creating an App Widget Configuration -Activity</a> below.)</dd> +Activity</a> below.)</dd> <dt> - {@link android.appwidget.AppWidgetProvider#onAppWidgetOptionsChanged onAppWidgetOptionsChanged()} + {@link android.appwidget.AppWidgetProvider#onAppWidgetOptionsChanged onAppWidgetOptionsChanged()} </dt> <dd> This is called when the widget is first placed and any time the widget is resized. You can use this callback to show or hide content based on the widget's size ranges. You get the size ranges by calling {@link android.appwidget.AppWidgetManager#getAppWidgetOptions getAppWidgetOptions()}, which returns a {@link android.os.Bundle} that includes the following:<br /><br /> <ul> - <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_WIDTH}—Contains + <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_WIDTH}—Contains the lower bound on the current width, in dp units, of a widget instance.</li> - <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_HEIGHT}—Contains + <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_HEIGHT}—Contains the lower bound on the current height, in dp units, of a widget instance.</li> <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MAX_WIDTH}—Contains the upper bound on the current width, in dp units, of a widget instance.</li> - <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MAX_HEIGHT}—Contains + <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MAX_HEIGHT}—Contains the upper bound on the current width, in dp units, of a widget instance.</li> </ul> @@ -444,34 +444,34 @@ This callback was introduced in API Level 16 (Android 4.1). If you implement thi host.</dd> <dt>{@link android.appwidget.AppWidgetProvider#onEnabled(Context)}</dt> <dd>This is called when an instance the App Widget is created for the first -time. For example, if the user +time. For example, if the user adds two instances of your App Widget, this is only called the first time. If you need to open a new database or perform other setup that only needs to -occur once - for all App Widget instances, then this is a good place to do it.</dd> +occur once + for all App Widget instances, then this is a good place to do it.</dd> <dt>{@link android.appwidget.AppWidgetProvider#onDisabled(Context)}</dt> <dd>This is called when the last instance of your App Widget is deleted from -the App Widget host. - This is where you should clean up any work done in - {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}, - such as delete a temporary database.</dd> +the App Widget host. + This is where you should clean up any work done in + {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}, + such as delete a temporary database.</dd> <dt>{@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)}</dt> <dd>This is called for every broadcast and before each of the above callback methods. You normally don't need to implement this method because the default -AppWidgetProvider - implementation filters all App Widget broadcasts and calls the above - methods as appropriate.</dd> +AppWidgetProvider + implementation filters all App Widget broadcasts and calls the above + methods as appropriate.</dd> </dl> -<p>The most important AppWidgetProvider callback is -{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +<p>The most important AppWidgetProvider callback is +{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} because it is called when each App Widget is added to a host (unless you use a configuration Activity). If your App Widget accepts any user interaction events, then you need to register the event handlers in this callback. If your App Widget doesn't create temporary -files or databases, or perform other work that requires clean-up, then -{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +files or databases, or perform other work that requires clean-up, then +{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} may be the only callback method you need to define. For example, if you want an App Widget with a button that launches an Activity when clicked, you could use the following @@ -503,9 +503,9 @@ public class ExampleAppWidgetProvider extends AppWidgetProvider { } </pre> -<p>This AppWidgetProvider defines only the +<p>This AppWidgetProvider defines only the {@link -android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} method for the purpose of defining a {@link android.app.PendingIntent} that launches an {@link android.app.Activity} and attaching it to the App Widget's button with {@link @@ -528,8 +528,8 @@ running after the callback methods return (see {@link android.content.BroadcastReceiver} for information about the broadcast lifecycle). If your App Widget setup process can take several seconds (perhaps while performing web requests) and you require that your process continues, -consider starting a {@link android.app.Service} in the -{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} +consider starting a {@link android.app.Service} in the +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} method. From within the Service, you can perform your own updates to the App Widget without worrying about the AppWidgetProvider closing down due to an <a href="{@docRoot}guide/practices/responsiveness.html">Application @@ -537,7 +537,7 @@ Not Responding</a> (ANR) error. See the <a href="http://code.google.com/p/wiktionary-android/source/browse/trunk/Wiktionary/src/com/example/android/wiktionary/WordWidget.java">Wiktionary sample's AppWidgetProvider</a> for an example of an App Widget running a {@link android.app.Service}.</p> -<p>Also see the <a +<p>Also see the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html">ExampleAppWidgetProvider.java</a> sample class.</p> @@ -546,9 +546,9 @@ sample class.</p> <p>{@link android.appwidget.AppWidgetProvider} is just a convenience class. If you would like -to receive the App Widget broadcasts directly, you can implement your own -{@link android.content.BroadcastReceiver} or override the -{@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)} callback. +to receive the App Widget broadcasts directly, you can implement your own +{@link android.content.BroadcastReceiver} or override the +{@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)} callback. The Intents you need to care about are as follows:</p> <ul> <li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE}</li> @@ -565,11 +565,11 @@ The Intents you need to care about are as follows:</p> <p>If you would like the user to configure settings when he or she adds a new App Widget, you can create an App Widget configuration Activity. This {@link -android.app.Activity} +android.app.Activity} will be automatically launched by the App Widget host and allows the user to configure available settings for the App Widget at create-time, such as the App Widget -color, size, +color, size, update period or other functionality settings.</p> <p>The configuration Activity should be declared as a normal Activity in the @@ -588,8 +588,8 @@ so the Activity needs to accept this Intent. For example:</p> </pre> <p>Also, the Activity must be declared in the AppWidgetProviderInfo XML file, -with the -<code>android:configure</code> attribute (see <a href="#MetaData">Adding +with the +<code>android:configure</code> attribute (see <a href="#MetaData">Adding the AppWidgetProviderInfo Metadata</a> above). For example, the configuration Activity can be declared like this:</p> @@ -597,13 +597,13 @@ can be declared like this:</p> <pre> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... - android:configure="com.example.android.ExampleAppWidgetConfigure" + android:configure="com.example.android.ExampleAppWidgetConfigure" ... > </appwidget-provider> </pre> <p>Notice that the Activity is declared with a fully-qualified namespace, -because +because it will be referenced from outside your package scope.</p> <p>That's all you need to get started with a configuration Activity. Now all you @@ -612,21 +612,21 @@ Activity. There are, however, two important things to remember when you implement the Activity:</p> <ul> <li>The App Widget host calls the configuration Activity and the configuration -Activity should always +Activity should always return a result. The result should include the App Widget ID passed by the Intent that launched the Activity (saved in the Intent extras as {@link android.appwidget.AppWidgetManager#EXTRA_APPWIDGET_ID}).</li> - <li>The - {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} + <li>The + {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} method <strong>will not be called</strong> when the App Widget is created (the system will not send the ACTION_APPWIDGET_UPDATE broadcast when a configuration Activity is launched). It is the responsibility of the configuration Activity to -request an update from the - AppWidgetManager when the App Widget is first created. However, -{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} +request an update from the + AppWidgetManager when the App Widget is first created. However, +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} will be called for subsequent updates—it is only skipped the first time.</li> </ul> @@ -641,8 +641,8 @@ configuration Activity</h3> <p>When an App Widget uses a configuration Activity, it is the responsibility of the Activity -to update the App Widget when configuration is complete. -You can do so by requesting an update directly from the +to update the App Widget when configuration is complete. +You can do so by requesting an update directly from the {@link android.appwidget.AppWidgetManager}.</p> <p>Here's a summary of the procedure to properly update the App Widget and close @@ -655,7 +655,7 @@ Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt( - AppWidgetManager.EXTRA_APPWIDGET_ID, + AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } </pre> @@ -696,7 +696,7 @@ reaching the end, the App Widget host is notified that the configuration was cancelled and the App Widget will not be added.</p> -<p>See the <a +<p>See the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html">ExampleAppWidgetConfigure.java</a> sample class in ApiDemos for an example.</p> @@ -708,7 +708,7 @@ sample class in ApiDemos for an example.</p> android.appwidget.AppWidgetProviderInfo#previewImage} field, which specifies a preview of what the app widget looks like. This preview is shown to the user from the widget picker. If this field is not supplied, the app widget's icon is used for -the preview.</p> +the preview.</p> <p>This is how you specify this setting in XML:</p> @@ -742,12 +742,12 @@ list. For an example, see the Gmail app widget. </dd> <dt>{@link android.widget.GridView}</dt> <dd>A view that shows items in two-dimensional scrolling grid. For an example, see the Bookmarks app -widget.</dd> +widget.</dd> <dt>{@link android.widget.StackView}</dt> <dd>A stacked card view (kind of like a rolodex), where the user can flick the front card up/down to see the previous/next card, respectively. Examples include -the YouTube and Books app widgets. </dd> +the YouTube and Books app widgets. </dd> <dt>{@link android.widget.AdapterViewFlipper}</dt> <dd>An adapter-backed simple {@link @@ -764,7 +764,7 @@ must include extra architecture to support their use in app widgets. In the context of an app widget, the {@link android.widget.Adapter} is replaced by a {@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}, which is simply a thin wrapper around the {@link android.widget.Adapter} -interface. +interface. When requested for a specific item in the collection, the {@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} creates @@ -782,7 +782,7 @@ interface for an adapter between a collection view (such as {@link android.widget.ListView}, {@link android.widget.GridView}, and so on) and the underlying data for that view. From the <a href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget -sample</a>, here is an example of the boilerplate code you use to implement +sample</a>, here is an example of the boilerplate code you use to implement this service and interface: </p> @@ -813,13 +813,13 @@ sample</a>:</p> <p>This sample consists of a stack of 10 views, which display the values <code>"0!"</code> through <code>"9!"</code> The sample -app widget has these primary behaviors:</p> +app widget has these primary behaviors:</p> <ul> <li>The user can vertically fling the top view in the app widget to display the next or previous view. This is a built-in StackView -behavior.</li> +behavior.</li> <li>Without any user interaction, the app widget automatically advances through @@ -828,17 +828,17 @@ its views in sequence, like a slide show. This is due to the setting <code>res/xml/stackwidgetinfo.xml</code> file. This setting applies to the view ID, which in this case is the view ID of the stack view.</li> - + <li>If the user touches the top view, the app widget displays the {@link android.widget.Toast} message "Touched view <em>n</em>," where <em>n</em> is the index (position) of the touched view. For more discussion of -how this is implemented, see +how this is implemented, see <a href="#behavior">Adding behavior to individual items</a>.</li> </ul> <h3 id="implementing_collections">Implementing app widgets with collections</h3> -<p>To implement an app widget with collections, you follow the same basic steps +<p>To implement an app widget with collections, you follow the same basic steps you would use to implement any app widget. The following sections describe the additional steps you need to perform to implement an app widget with collections.</p> @@ -940,7 +940,7 @@ collection:</p> int[] appWidgetIds) { // update each of the app widgets with the remote adapter for (int i = 0; i < appWidgetIds.length; ++i) { - + // Set up the intent that starts the StackViewService, which will // provide the views for this collection. Intent intent = new Intent(context, StackWidgetService.class); @@ -949,13 +949,13 @@ int[] appWidgetIds) { intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); // Instantiate the RemoteViews object for the app widget layout. RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); - // Set up the RemoteViews object to use a RemoteViews adapter. + // Set up the RemoteViews object to use a RemoteViews adapter. // This adapter connects // to a RemoteViewsService through the specified intent. // This is how you populate the data. rv.setRemoteAdapter(appWidgetIds[i], R.id.stack_view, intent); - - // The empty view is displayed when the collection has no items. + + // The empty view is displayed when the collection has no items. // It should be in the same layout used to instantiate the RemoteViews // object above. rv.setEmptyView(R.id.stack_view, R.id.empty_view); @@ -963,12 +963,12 @@ int[] appWidgetIds) { // // Do additional processing specific to this app widget... // - - appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } super.onUpdate(context, appWidgetManager, appWidgetIds); }</pre> - + <h4>RemoteViewsService class</h4> <div class="sidebox-wrapper"> @@ -984,7 +984,7 @@ lifecycle.</p> </div> <p>As described above, your {@link android.widget.RemoteViewsService} subclass provides the {@link android.widget.RemoteViewsService.RemoteViewsFactory -RemoteViewsFactory} used to populate the remote collection view.</p> +RemoteViewsFactory} used to populate the remote collection view.</p> <p>Specifically, you need to perform these steps:</p> @@ -993,7 +993,7 @@ perform these steps:</p> <li>Subclass {@link android.widget.RemoteViewsService}. {@link android.widget.RemoteViewsService} is the service through which a remote adapter can request {@link android.widget.RemoteViews}. </li> - + <li>In your {@link android.widget.RemoteViewsService} subclass, include a class that implements the {@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} @@ -1027,12 +1027,12 @@ functions as an adapter to glue the data to the remote collection view.</p> <p>The two most important methods you need to implement for your {@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} -subclass are +subclass are {@link android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} and {@link android.widget.RemoteViewsService.RemoteViewsFactory#getViewAt(int) getViewAt()} -.</p> +.</p> <p>The system calls {@link android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} when @@ -1047,7 +1047,7 @@ array and the text they contain is displayed </p> <p>Here is an excerpt from the <a href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget</a> -sample's +sample's {@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} implementation that shows portions of the {@link android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} @@ -1081,7 +1081,7 @@ RemoteViewsService.RemoteViewsFactory { RemoteViewsFactory} method {@link android.widget.RemoteViewsService.RemoteViewsFactory#getViewAt(int) getViewAt()} returns a {@link android.widget.RemoteViews} object corresponding to the data at -the specified <code>position</code> in the data set. Here is an excerpt from +the specified <code>position</code> in the data set. Here is an excerpt from the <a href="http://developer.android.com/resources/samples/StackWidget/index.html"> StackView Widget</a> sample's {@link @@ -1089,8 +1089,8 @@ android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} implementation:</p> <pre>public RemoteViews getViewAt(int position) { - - // Construct a remote views item based on the app widget item XML file, + + // Construct a remote views item based on the app widget item XML file, // and set the text based on the position. RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item); rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text); @@ -1104,7 +1104,7 @@ implementation:</p> <p>The above sections show you how to bind your data to your app widget collection. But what if you want to add dynamic behavior to the individual items -in your collection view?</p> +in your collection view?</p> <p> As described in <a href="#AppWidgetProvider">Using the AppWidgetProvider Class</a>, you normally use {@link @@ -1122,7 +1122,7 @@ android.widget.RemoteViews#setOnClickFillInIntent(int, android.content.Intent) setOnClickFillInIntent()}. This entails setting up up a pending intent template for your collection view, and then setting a fill-in intent on each item in the collection via your {@link android.widget.RemoteViewsService.RemoteViewsFactory -RemoteViewsFactory}.</p> +RemoteViewsFactory}.</p> <p>This section uses the <a href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget sample</a> to describe how to add behavior to individual items. In the <a @@ -1138,7 +1138,7 @@ android.appwidget.AppWidgetProvider} subclass) creates a pending intent that has a custom action called <code>TOAST_ACTION</code>.</li> <li>When the user touches a view, the intent is fired and it broadcasts <code>TOAST_ACTION</code>.</li> - + <li>This broadcast is intercepted by the <code>StackWidgetProvider</code>'s {@link android.appwidget.AppWidgetProvider#onReceive(android.content.Context, android.content.Intent) onReceive()} method, and the app widget displays the @@ -1154,7 +1154,7 @@ href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget sample</a> uses a broadcast, but typically an app widget would simply launch an activity in a scenario like this one.</p> -<h5>Setting up the pending intent template</h5> +<h5>Setting up the pending intent template</h5> <p>The <code>StackWidgetProvider</code> ({@link android.appwidget.AppWidgetProvider} subclass) sets up a pending intent. @@ -1162,7 +1162,7 @@ Individuals items of a collection cannot set up their own pending intents. Instead, the collection as a whole sets up a pending intent template, and the individual items set a fill-in intent to create unique behavior on an item-by-item -basis.</p> +basis.</p> <p>This class also receives the broadcast that is sent when the user touches a view. It processes this event in its {@link @@ -1179,7 +1179,7 @@ message for the current view.</p>   ... // Called when the BroadcastReceiver receives an Intent broadcast. - // Checks to see whether the intent's action is TOAST_ACTION. If it is, the app widget + // Checks to see whether the intent's action is TOAST_ACTION. If it is, the app widget // displays a Toast message for the current item. @Override public void onReceive(Context context, Intent intent) { @@ -1192,12 +1192,12 @@ message for the current view.</p>   }   super.onReceive(context, intent); } - + @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // update each of the app widgets with the remote adapter   for (int i = 0; i < appWidgetIds.length; ++i) { - +   // Sets up the intent that points to the StackViewService that will   // provide the views for this collection.   Intent intent = new Intent(context, StackWidgetService.class); @@ -1207,7 +1207,7 @@ message for the current view.</p>   intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));   RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);   rv.setRemoteAdapter(appWidgetIds[i], R.id.stack_view, intent); - +   // The empty view is displayed when the collection has no items. It should be a sibling   // of the collection view.   rv.setEmptyView(R.id.stack_view, R.id.empty_view); @@ -1227,13 +1227,13 @@ message for the current view.</p>   PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,   PendingIntent.FLAG_UPDATE_CURRENT);   rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent); - +   appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } super.onUpdate(context, appWidgetManager, appWidgetIds); } }</pre> - + <h5><strong>Setting the fill-in Intent</strong></h5> <p>Your {@link android.widget.RemoteViewsService.RemoteViewsFactory @@ -1274,17 +1274,17 @@ class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {     ...   }   ... - - // Given the position (index) of a WidgetItem in the array, use the item's text value in + + // Given the position (index) of a WidgetItem in the array, use the item's text value in // combination with the app widget item XML file to construct a RemoteViews object.   public RemoteViews getViewAt(int position) {     // position will always range from 0 to getCount() - 1. - +     // Construct a RemoteViews item based on the app widget item XML file, and set the     // text based on the position.     RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);     rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text); - +     // Next, set a fill-intent, which will be used to fill in the pending intent template     // that is set on the collection view in StackWidgetProvider.     Bundle extras = new Bundle(); @@ -1294,9 +1294,9 @@ class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { // Make it possible to distinguish the individual on-click // action of a given item   rv.setOnClickFillInIntent(R.id.widget_item, fillInIntent); - +   ... - +   // Return the RemoteViews object.   return rv; } diff --git a/docs/html/guide/topics/connectivity/bluetooth-le.jd b/docs/html/guide/topics/connectivity/bluetooth-le.jd index 3d606863052a..ba742eeef8a2 100644 --- a/docs/html/guide/topics/connectivity/bluetooth-le.jd +++ b/docs/html/guide/topics/connectivity/bluetooth-le.jd @@ -171,7 +171,7 @@ include the following in your app's manifest:</p> </pre> <p>However, if you want to make your app available to devices that don't support BLE, -you should still include this element in your app's manifest, but set {@code required="false"}. +you should still include this element in your app's manifest, but set {@code required="false"}. Then at run-time you can determine BLE availability by using {@link android.content.pm.PackageManager#hasSystemFeature PackageManager.hasSystemFeature()}: diff --git a/docs/html/guide/topics/connectivity/bluetooth.jd b/docs/html/guide/topics/connectivity/bluetooth.jd index 96008c5c5701..07fcd09a751c 100644 --- a/docs/html/guide/topics/connectivity/bluetooth.jd +++ b/docs/html/guide/topics/connectivity/bluetooth.jd @@ -4,55 +4,55 @@ page.tags=wireless,bluetoothadapter,bluetoothdevice <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> - <ol> + <ol> <li><a href="#TheBasics">The Basics</a></li> <li><a href="#Permissions">Bluetooth Permissions</a></li> - <li><a href="#SettingUp">Setting Up Bluetooth</a></li> - <li><a href="#FindingDevices">Finding Devices</a> - <ol> - <li><a href="#QueryingPairedDevices">Querying paired devices</a></li> - <li><a href="#DiscoveringDevices">Discovering devices</a></li> - </ol></li> - <li><a href="#ConnectingDevices">Connecting Devices</a> - <ol> - <li><a href="#ConnectingAsAServer">Connecting as a server</a></li> - <li><a href="#ConnectingAsAClient">Connecting as a client</a></li> - </ol></li> + <li><a href="#SettingUp">Setting Up Bluetooth</a></li> + <li><a href="#FindingDevices">Finding Devices</a> + <ol> + <li><a href="#QueryingPairedDevices">Querying paired devices</a></li> + <li><a href="#DiscoveringDevices">Discovering devices</a></li> + </ol></li> + <li><a href="#ConnectingDevices">Connecting Devices</a> + <ol> + <li><a href="#ConnectingAsAServer">Connecting as a server</a></li> + <li><a href="#ConnectingAsAClient">Connecting as a client</a></li> + </ol></li> <li><a href="#ManagingAConnection">Managing a Connection</a></li> - <li><a href="#Profiles">Working with Profiles</a> + <li><a href="#Profiles">Working with Profiles</a> <ol> <li><a href="#AT-Commands">Vendor-specific AT commands</a> <li><a href="#HDP">Health Device Profile</a> </ol></li> - </ol> - - <h2>Key classes</h2> - <ol> - <li>{@link android.bluetooth.BluetoothAdapter}</li> - <li>{@link android.bluetooth.BluetoothDevice}</li> - <li>{@link android.bluetooth.BluetoothSocket}</li> - <li>{@link android.bluetooth.BluetoothServerSocket}</li> - </ol> - - <h2>Related samples</h2> - <ol> - <li><a href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat</a></li> + </ol> + + <h2>Key classes</h2> + <ol> + <li>{@link android.bluetooth.BluetoothAdapter}</li> + <li>{@link android.bluetooth.BluetoothDevice}</li> + <li>{@link android.bluetooth.BluetoothSocket}</li> + <li>{@link android.bluetooth.BluetoothServerSocket}</li> + </ol> + + <h2>Related samples</h2> + <ol> + <li><a href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat</a></li> <li><a href="{@docRoot}resources/samples/BluetoothHDP/index.html">Bluetooth HDP (Health Device Profile)</a></li> - </ol> - -</div> -</div> - - + </ol> + +</div> +</div> + + <p>The Android platform includes support for the Bluetooth network stack, which allows a device to wirelessly exchange data with other Bluetooth devices. The application framework provides access to the Bluetooth functionality through the Android Bluetooth APIs. These APIs let applications wirelessly connect to other Bluetooth devices, enabling point-to-point and multipoint -wireless features.</p> - +wireless features.</p> + <p>Using the Bluetooth APIs, an Android application can perform the following:</p> <ul> @@ -75,14 +75,14 @@ see <a href="{@docRoot}guide/topics/connectivity/bluetooth-le.html">Bluetooth Lo <p>This document describes how to use the Android Bluetooth APIs to accomplish the four major tasks necessary to communicate using Bluetooth: setting up Bluetooth, finding devices that are either paired or available in the local -area, connecting devices, and transferring data between devices.</p> - +area, connecting devices, and transferring data between devices.</p> + <p>All of the Bluetooth APIs are available in the {@link android.bluetooth} package. Here's a summary of the classes and interfaces you will need to create Bluetooth -connections:</p> - -<dl> -<dt>{@link android.bluetooth.BluetoothAdapter}</dt> +connections:</p> + +<dl> +<dt>{@link android.bluetooth.BluetoothAdapter}</dt> <dd>Represents the local Bluetooth adapter (Bluetooth radio). The {@link android.bluetooth.BluetoothAdapter} is the entry-point for all Bluetooth interaction. Using this, @@ -90,49 +90,49 @@ you can discover other Bluetooth devices, query a list of bonded (paired) devices, instantiate a {@link android.bluetooth.BluetoothDevice} using a known MAC address, and create a {@link android.bluetooth.BluetoothServerSocket} to listen for communications -from other devices.</dd> - -<dt>{@link android.bluetooth.BluetoothDevice}</dt> +from other devices.</dd> + +<dt>{@link android.bluetooth.BluetoothDevice}</dt> <dd>Represents a remote Bluetooth device. Use this to request a connection with a remote device through a {@link android.bluetooth.BluetoothSocket} or query information about the -device such as its name, address, class, and bonding state.</dd> - -<dt>{@link android.bluetooth.BluetoothSocket}</dt> +device such as its name, address, class, and bonding state.</dd> + +<dt>{@link android.bluetooth.BluetoothSocket}</dt> <dd>Represents the interface for a Bluetooth socket (similar to a TCP {@link java.net.Socket}). This is the connection point that allows an application to exchange data with another Bluetooth device via InputStream -and OutputStream.</dd> - -<dt>{@link android.bluetooth.BluetoothServerSocket}</dt> +and OutputStream.</dd> + +<dt>{@link android.bluetooth.BluetoothServerSocket}</dt> <dd>Represents an open server socket that listens for incoming requests (similar to a TCP {@link java.net.ServerSocket}). In order to connect two Android devices, one device must open a server socket with this class. When a remote Bluetooth device makes a connection request to the this device, the {@link android.bluetooth.BluetoothServerSocket} will return a connected {@link android.bluetooth.BluetoothSocket} when the -connection is accepted.</dd> - -<dt>{@link android.bluetooth.BluetoothClass}</dt> +connection is accepted.</dd> + +<dt>{@link android.bluetooth.BluetoothClass}</dt> <dd>Describes the general characteristics and capabilities of a Bluetooth device. This is a read-only set of properties that define the device's major and minor device classes and its services. However, this does not reliably describe all Bluetooth profiles and services supported by the device, but is useful as a -hint to the device type.</dd> - +hint to the device type.</dd> + <dt>{@link android.bluetooth.BluetoothProfile}</dt> <dd>An interface that represents a Bluetooth profile. A <em>Bluetooth profile</em> is a wireless interface specification for Bluetooth-based communication between devices. An example is the Hands-Free profile. For more discussion of profiles, see <a -href="#Profiles">Working with Profiles</a></dd> +href="#Profiles">Working with Profiles</a></dd> <dt>{@link android.bluetooth.BluetoothHeadset}</dt> <dd>Provides support for Bluetooth headsets to be used with mobile phones. This includes both Bluetooth -Headset and Hands-Free (v1.5) profiles.</dd> +Headset and Hands-Free (v1.5) profiles.</dd> <dt>{@link android.bluetooth.BluetoothA2dp}</dt> <dd> Defines how high quality audio can be streamed from one device to another over a Bluetooth connection. -"A2DP" stands for Advanced Audio Distribution Profile.</dd> +"A2DP" stands for Advanced Audio Distribution Profile.</dd> <dt>{@link android.bluetooth.BluetoothHealth}</dt> <dd> Represents a Health Device Profile proxy that controls the Bluetooth service.</dd> @@ -146,23 +146,23 @@ application’s registration state and Bluetooth channel state.</dd> <dt>{@link android.bluetooth.BluetoothHealthAppConfiguration}</dt> -<dd>Represents an application configuration that the Bluetooth Health third-party +<dd>Represents an application configuration that the Bluetooth Health third-party application registers to communicate with a remote Bluetooth health -device.</dd> +device.</dd> <dt>{@link android.bluetooth.BluetoothProfile.ServiceListener}</dt> <dd>An interface that notifies {@link android.bluetooth.BluetoothProfile} IPC clients when they have been connected to or disconnected from the service (that is, the internal service that runs a particular profile). </dd> - -</dl> - - - - -<h2 id="Permissions">Bluetooth Permissions</h2> - + +</dl> + + + + +<h2 id="Permissions">Bluetooth Permissions</h2> + <p>In order to use Bluetooth features in your application, you must declare the Bluetooth permission {@link android.Manifest.permission#BLUETOOTH}. You need this permission to perform any Bluetooth communication, @@ -175,40 +175,40 @@ ability to discover local Bluetooth devices. The other abilities granted by this permission should not be used, unless the application is a "power manager" that will modify Bluetooth settings upon user request. <strong>Note:</strong> If you use {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission, then you must -also have the {@link android.Manifest.permission#BLUETOOTH} permission.</p> - +also have the {@link android.Manifest.permission#BLUETOOTH} permission.</p> + <p>Declare the Bluetooth permission(s) in your application manifest file. For -example:</p> - -<pre> +example:</p> + +<pre> <manifest ... > <uses-permission android:name="android.permission.BLUETOOTH" /> ... </manifest> -</pre> - +</pre> + <p>See the <a -href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a> -reference for more information about declaring application permissions.</p> - - -<h2 id="SettingUp">Setting Up Bluetooth</h2> - -<div class="figure" style="width:200px"> -<img src="{@docRoot}images/bt_enable_request.png" /> +href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a> +reference for more information about declaring application permissions.</p> + + +<h2 id="SettingUp">Setting Up Bluetooth</h2> + +<div class="figure" style="width:200px"> +<img src="{@docRoot}images/bt_enable_request.png" /> <strong>Figure 1:</strong> The enabling Bluetooth dialog. -</div> - +</div> + <p>Before your application can communicate over Bluetooth, you need to verify -that Bluetooth is supported on the device, and if so, ensure that it is enabled.</p> - +that Bluetooth is supported on the device, and if so, ensure that it is enabled.</p> + <p>If Bluetooth is not supported, then you should gracefully disable any Bluetooth features. If Bluetooth is supported, but disabled, then you can request that the user enable Bluetooth without leaving your application. This setup is -accomplished in two steps, using the {@link android.bluetooth.BluetoothAdapter}.</p> - - -<ol> +accomplished in two steps, using the {@link android.bluetooth.BluetoothAdapter}.</p> + + +<ol> <li>Get the {@link android.bluetooth.BluetoothAdapter} <p>The {@link android.bluetooth.BluetoothAdapter} is required for any and all Bluetooth activity. To get the {@link android.bluetooth.BluetoothAdapter}, call the static {@link @@ -217,15 +217,15 @@ android.bluetooth.BluetoothAdapter#getDefaultAdapter()} method. This returns a Bluetooth adapter (the Bluetooth radio). There's one Bluetooth adapter for the entire system, and your application can interact with it using this object. If {@link android.bluetooth.BluetoothAdapter#getDefaultAdapter()} returns null, -then the device does not support Bluetooth and your story ends here. For example:</p> -<pre> +then the device does not support Bluetooth and your story ends here. For example:</p> +<pre> BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { // Device does not support Bluetooth } -</pre> -</li> - +</pre> +</li> + <li>Enable Bluetooth <p>Next, you need to ensure that Bluetooth is enabled. Call {@link android.bluetooth.BluetoothAdapter#isEnabled()} to check whether Bluetooth is @@ -234,17 +234,17 @@ request that Bluetooth be enabled, call {@link android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()} with the {@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} action Intent. This will issue a request to enable Bluetooth through the system settings (without -stopping your application). For example:</p> -<pre> +stopping your application). For example:</p> +<pre> if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } -</pre> - +</pre> + <p>A dialog will appear requesting user permission to enable Bluetooth, as shown in Figure 1. If the user responds "Yes," the system will begin to enable Bluetooth -and focus will return to your application once the process completes (or fails).</p> +and focus will return to your application once the process completes (or fails).</p> <p>The {@code REQUEST_ENABLE_BT} constant passed to {@link android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()} is a locally @@ -259,9 +259,9 @@ android.app.Activity#onActivityResult(int,int,Intent) onActivityResult()} callback. If Bluetooth was not enabled due to an error (or the user responded "No") then the result code is {@link android.app.Activity#RESULT_CANCELED}.</p> -</li> -</ol> - +</li> +</ol> + <p>Optionally, your application can also listen for the {@link android.bluetooth.BluetoothAdapter#ACTION_STATE_CHANGED} broadcast Intent, which the system will broadcast whenever the Bluetooth state has changed. This broadcast contains @@ -273,21 +273,21 @@ android.bluetooth.BluetoothAdapter#STATE_ON}, {@link android.bluetooth.BluetoothAdapter#STATE_TURNING_OFF}, and {@link android.bluetooth.BluetoothAdapter#STATE_OFF}. Listening for this broadcast can be useful to detect changes made to the Bluetooth state while your -app is running.</p> - +app is running.</p> + <p class="note"><strong>Tip:</strong> Enabling discoverability will automatically enable Bluetooth. If you plan to consistently enable device discoverability before performing Bluetooth activity, you can skip step 2 above. Read about <a href="#EnablingDiscoverability">enabling discoverability</a>, -below.</p> - - -<h2 id="FindingDevices">Finding Devices</h2> - +below.</p> + + +<h2 id="FindingDevices">Finding Devices</h2> + <p>Using the {@link android.bluetooth.BluetoothAdapter}, you can find remote Bluetooth devices either through device discovery or by querying the list of paired (bonded) -devices.</p> - +devices.</p> + <p>Device discovery is a scanning procedure that searches the local area for Bluetooth enabled devices and then requesting some information about each one (this is sometimes referred to as "discovering," "inquiring" or "scanning"). @@ -296,15 +296,15 @@ request only if it is currently enabled to be discoverable. If a device is discoverable, it will respond to the discovery request by sharing some information, such as the device name, class, and its unique MAC address. Using this information, the device performing discovery can then choose to initiate a -connection to the discovered device.</p> - +connection to the discovered device.</p> + <p>Once a connection is made with a remote device for the first time, a pairing request is automatically presented to the user. When a device is paired, the basic information about that device (such as the device name, class, and MAC address) is saved and can be read using the Bluetooth APIs. Using the known MAC address for a remote device, a connection can be initiated with it at -any time without performing discovery (assuming the device is within range).</p> - +any time without performing discovery (assuming the device is within range).</p> + <p>Remember there is a difference between being paired and being connected. To be paired means that two devices are aware of each other's existence, have a shared link-key that can be used for authentication, and are capable of @@ -312,28 +312,28 @@ establishing an encrypted connection with each other. To be connected means that the devices currently share an RFCOMM channel and are able to transmit data with each other. The current Android Bluetooth API's require devices to be paired before an RFCOMM connection can be established. (Pairing is automatically performed -when you initiate an encrypted connection with the Bluetooth APIs.)</p> - +when you initiate an encrypted connection with the Bluetooth APIs.)</p> + <p>The following sections describe how to find devices that have been paired, or -discover new devices using device discovery.</p> - +discover new devices using device discovery.</p> + <p class="note"><strong>Note:</strong> Android-powered devices are not discoverable by default. A user can make the device discoverable for a limited time through the system settings, or an application can request that the user enable discoverability without leaving the -application. How to <a href="#EnablingDiscoverability">enable discoverability</a> -is discussed below.</p> - - -<h3 id="QueryingPairedDevices">Querying paired devices</h3> - +application. How to <a href="#EnablingDiscoverability">enable discoverability</a> +is discussed below.</p> + + +<h3 id="QueryingPairedDevices">Querying paired devices</h3> + <p>Before performing device discovery, its worth querying the set of paired devices to see if the desired device is already known. To do so, call {@link android.bluetooth.BluetoothAdapter#getBondedDevices()}. This will return a Set of {@link android.bluetooth.BluetoothDevice}s representing paired devices. For example, you can query all paired devices and then -show the name of each device to the user, using an ArrayAdapter:</p> -<pre> +show the name of each device to the user, using an ArrayAdapter:</p> +<pre> Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // If there are paired devices if (pairedDevices.size() > 0) { @@ -343,24 +343,24 @@ if (pairedDevices.size() > 0) { mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); } } -</pre> - +</pre> + <p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object in order to initiate a connection is the MAC address. In this example, it's saved as a part of an ArrayAdapter that's shown to the user. The MAC address can later be extracted in order to initiate the connection. You can learn more about creating -a connection in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> - - -<h3 id="DiscoveringDevices">Discovering devices</h3> - +a connection in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> + + +<h3 id="DiscoveringDevices">Discovering devices</h3> + <p>To start discovering devices, simply call {@link android.bluetooth.BluetoothAdapter#startDiscovery()}. The process is asynchronous and the method will immediately return with a boolean indicating whether discovery has successfully started. The discovery process usually involves an inquiry scan of about 12 seconds, followed by a page scan of -each found device to retrieve its Bluetooth name.</p> - +each found device to retrieve its Bluetooth name.</p> + <p>Your application must register a BroadcastReceiver for the {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent in order to receive information about each @@ -371,8 +371,8 @@ Intent carries the extra fields {@link android.bluetooth.BluetoothDevice#EXTRA_CLASS}, containing a {@link android.bluetooth.BluetoothDevice} and a {@link android.bluetooth.BluetoothClass}, respectively. For example, here's how you can -register to handle the broadcast when devices are discovered:</p> -<pre> +register to handle the broadcast when devices are discovered:</p> +<pre> // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { @@ -389,15 +389,15 @@ private final BroadcastReceiver mReceiver = new BroadcastReceiver() { // Register the BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy -</pre> - +</pre> + <p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object in order to initiate a connection is the MAC address. In this example, it's saved as a part of an ArrayAdapter that's shown to the user. The MAC address can later be extracted in order to initiate the connection. You can learn more about creating a connection -in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> - +in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> + <p class="caution"><strong>Caution:</strong> Performing device discovery is a heavy procedure for the Bluetooth adapter and will consume a lot of its resources. Once you have found a device to @@ -406,10 +406,10 @@ connect, be certain that you always stop discovery with attempting a connection. Also, if you already hold a connection with a device, then performing discovery can significantly reduce the bandwidth available for the connection, so you should -not perform discovery while connected.</p> - -<h4 id="EnablingDiscoverability">Enabling discoverability</h4> - +not perform discovery while connected.</p> + +<h4 id="EnablingDiscoverability">Enabling discoverability</h4> + <p>If you would like to make the local device discoverable to other devices, call {@link android.app.Activity#startActivityForResult(Intent,int)} with the {@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE} action @@ -420,30 +420,30 @@ discoverable for 120 seconds. You can define a different duration by adding the extra. The maximum duration an app can set is 3600 seconds, and a value of 0 means the device is always discoverable. Any value below 0 or above 3600 is automatically set to 120 secs). For example, this snippet sets the duration to -300:</p> +300:</p> <pre>Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent); -</pre> - -<div class="figure" style="width:200px"> -<img src="{@docRoot}images/bt_enable_discoverable.png" /> +</pre> + +<div class="figure" style="width:200px"> +<img src="{@docRoot}images/bt_enable_discoverable.png" /> <strong>Figure 2:</strong> The enabling discoverability dialog. -</div> - +</div> + <p>A dialog will be displayed, requesting user permission to make the device discoverable, as shown in Figure 2. If the user responds "Yes," then the device will become discoverable for the specified amount of time. Your activity will then receive a call to the {@link android.app.Activity#onActivityResult(int,int,Intent) onActivityResult())} callback, with the result code equal to the duration that the device is discoverable. If the user responded "No" or if an error occurred, the result code will -be {@link android.app.Activity#RESULT_CANCELED}.</p> - +be {@link android.app.Activity#RESULT_CANCELED}.</p> + <p class="note"><strong>Note:</strong> If Bluetooth has not been enabled on the device, -then enabling device discoverability will automatically enable Bluetooth.</p> - +then enabling device discoverability will automatically enable Bluetooth.</p> + <p>The device will silently remain in discoverable mode for the allotted time. If you would like to be notified when the discoverable mode has changed, you can register a BroadcastReceiver for the {@link @@ -457,18 +457,18 @@ new and old scan mode, respectively. Possible values for each are android.bluetooth.BluetoothAdapter#SCAN_MODE_NONE}, which indicate that the device is either in discoverable mode, not in discoverable mode but still able to receive connections, or not in discoverable -mode and unable to receive connections, respectively.</p> - +mode and unable to receive connections, respectively.</p> + <p>You do not need to enable device discoverability if you will be initiating the connection to a remote device. Enabling discoverability is only necessary when you want your application to host a server socket that will accept incoming connections, because the remote devices must be able to discover the device -before it can initiate the connection.</p> - - - -<h2 id="ConnectingDevices">Connecting Devices</h2> - +before it can initiate the connection.</p> + + + +<h2 id="ConnectingDevices">Connecting Devices</h2> + <p>In order to create a connection between your application on two devices, you must implement both the server-side and client-side mechanisms, because one device must open a server socket and the other one must initiate the connection @@ -478,36 +478,36 @@ client are considered connected to each other when they each have a connected point, each device can obtain input and output streams and data transfer can begin, which is discussed in the section about <a href="#ManagingAConnection">Managing a Connection</a>. This section describes how -to initiate the connection between two devices.</p> - +to initiate the connection between two devices.</p> + <p>The server device and the client device each obtain the required {@link android.bluetooth.BluetoothSocket} in different ways. The server will receive it when an incoming connection is accepted. The client will receive it when it -opens an RFCOMM channel to the server.</p> - -<div class="figure" style="width:200px"> -<img src="{@docRoot}images/bt_pairing_request.png" /> +opens an RFCOMM channel to the server.</p> + +<div class="figure" style="width:200px"> +<img src="{@docRoot}images/bt_pairing_request.png" /> <strong>Figure 3:</strong> The Bluetooth pairing dialog. -</div> - +</div> + <p>One implementation technique is to automatically prepare each device as a server, so that each one has a server socket open and listening for connections. Then either device can initiate a connection with the other and become the client. Alternatively, one device can explicitly "host" the connection and open a server socket on demand and the other device can simply initiate the -connection.</p> - +connection.</p> + <p class="note"><strong>Note:</strong> If the two devices have not been previously paired, then the Android framework will automatically show a pairing request notification or dialog to the user during the connection procedure, as shown in Figure 3. So when attempting to connect devices, your application does not need to be concerned about whether or not the devices are paired. Your RFCOMM connection attempt will block until the user has successfully paired, -or will fail if the user rejects pairing, or if pairing fails or times out. </p> - - -<h3 id="ConnectingAsAServer">Connecting as a server</h3> - +or will fail if the user rejects pairing, or if pairing fails or times out. </p> + + +<h3 id="ConnectingAsAServer">Connecting as a server</h3> + <p>When you want to connect two devices, one must act as a server by holding an open {@link android.bluetooth.BluetoothServerSocket}. The purpose of the server socket is to listen for incoming connection requests and when one is accepted, @@ -515,26 +515,26 @@ provide a connected {@link android.bluetooth.BluetoothSocket}. When the {@link android.bluetooth.BluetoothSocket} is acquired from the {@link android.bluetooth.BluetoothServerSocket}, the {@link android.bluetooth.BluetoothServerSocket} can (and should) be -discarded, unless you want to accept more connections.</p> - -<div class="sidebox-wrapper"> -<div class="sidebox"> -<h2>About UUID</h2> - +discarded, unless you want to accept more connections.</p> + +<div class="sidebox-wrapper"> +<div class="sidebox"> +<h2>About UUID</h2> + <p>A Universally Unique Identifier (UUID) is a standardized 128-bit format for a string ID used to uniquely identify information. The point of a UUID is that it's big enough that you can select any random and it won't clash. In this case, it's used to uniquely identify your application's Bluetooth service. To get a UUID to use with your application, you can use one of the many random UUID generators on the web, then initialize a {@link java.util.UUID} with {@link -java.util.UUID#fromString(String)}.</p> -</div> -</div> - +java.util.UUID#fromString(String)}.</p> +</div> +</div> + <p>Here's the basic procedure to set up a server socket and accept a -connection:</p> - -<ol> +connection:</p> + +<ol> <li>Get a {@link android.bluetooth.BluetoothServerSocket} by calling the {@link android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String, @@ -546,9 +546,9 @@ UUID is also included in the SDP entry and will be the basis for the connection agreement with the client device. That is, when the client attempts to connect with this device, it will carry a UUID that uniquely identifies the service with which it wants to connect. These UUIDs must match in order for the connection to -be accepted (in the next step).</p> -</li> - +be accepted (in the next step).</p> +</li> + <li>Start listening for connection requests by calling {@link android.bluetooth.BluetoothServerSocket#accept()}. <p>This is a blocking call. It will return when either a connection has been @@ -556,9 +556,9 @@ accepted or an exception has occurred. A connection is accepted only when a remote device has sent a connection request with a UUID matching the one registered with this listening server socket. When successful, {@link android.bluetooth.BluetoothServerSocket#accept()} will -return a connected {@link android.bluetooth.BluetoothSocket}.</p> -</li> - +return a connected {@link android.bluetooth.BluetoothSocket}.</p> +</li> + <li>Unless you want to accept additional connections, call {@link android.bluetooth.BluetoothServerSocket#close()}. <p>This releases the server socket and all its resources, but does <em>not</em> close the @@ -567,10 +567,10 @@ android.bluetooth.BluetoothServerSocket#accept()}. Unlike TCP/IP, RFCOMM only al connected client per channel at a time, so in most cases it makes sense to call {@link android.bluetooth.BluetoothServerSocket#close()} on the {@link android.bluetooth.BluetoothServerSocket} immediately after accepting a connected -socket.</p> -</li> -</ol> - +socket.</p> +</li> +</ol> + <p>The {@link android.bluetooth.BluetoothServerSocket#accept()} call should not be executed in the main activity UI thread because it is a blocking call and will prevent any other interaction with the application. It usually makes @@ -583,16 +583,16 @@ android.bluetooth.BluetoothServerSocket} (or {@link android.bluetooth.BluetoothSocket}) from another thread and the blocked call will immediately return. Note that all methods on a {@link android.bluetooth.BluetoothServerSocket} or {@link android.bluetooth.BluetoothSocket} -are thread-safe.</p> - -<h4>Example</h4> - +are thread-safe.</p> + +<h4>Example</h4> + <p>Here's a simplified thread for the server component that accepts incoming -connections:</p> -<pre> +connections:</p> +<pre> private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket; - + public AcceptThread() { // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final @@ -603,7 +603,7 @@ private class AcceptThread extends Thread { } catch (IOException e) { } mmServerSocket = tmp; } - + public void run() { BluetoothSocket socket = null; // Keep listening until exception occurs or a socket is returned @@ -622,7 +622,7 @@ private class AcceptThread extends Thread { } } } - + /** Will cancel the listening socket, and cause the thread to finish */ public void cancel() { try { @@ -630,37 +630,37 @@ private class AcceptThread extends Thread { } catch (IOException e) { } } } -</pre> - +</pre> + <p>In this example, only one incoming connection is desired, so as soon as a connection is accepted and the {@link android.bluetooth.BluetoothSocket} is acquired, the application sends the acquired {@link android.bluetooth.BluetoothSocket} to a separate thread, closes the -{@link android.bluetooth.BluetoothServerSocket} and breaks the loop.</p> - +{@link android.bluetooth.BluetoothServerSocket} and breaks the loop.</p> + <p>Note that when {@link android.bluetooth.BluetoothServerSocket#accept()} returns the {@link android.bluetooth.BluetoothSocket}, the socket is already connected, so you should <em>not</em> call {@link android.bluetooth.BluetoothSocket#connect()} (as you do from the -client-side).</p> - +client-side).</p> + <p><code>manageConnectedSocket()</code> is a fictional method in the application that will initiate the thread for transferring data, which is discussed in the section -about <a href="#ManagingAConnection">Managing a Connection</a>.</p> - +about <a href="#ManagingAConnection">Managing a Connection</a>.</p> + <p>You should usually close your {@link android.bluetooth.BluetoothServerSocket} as soon as you are done listening for incoming connections. In this example, {@link android.bluetooth.BluetoothServerSocket#close()} is called as soon as the {@link android.bluetooth.BluetoothSocket} is acquired. You may also want to provide a public method in your thread that can close the private {@link android.bluetooth.BluetoothSocket} in the event that you need to stop listening on the -server socket.</p> - - -<h3 id="ConnectingAsAClient">Connecting as a client</h3> - +server socket.</p> + + +<h3 id="ConnectingAsAClient">Connecting as a client</h3> + <p>In order to initiate a connection with a remote device (a device holding an open server socket), you must first obtain a {@link @@ -669,11 +669,11 @@ android.bluetooth.BluetoothDevice} object that represents the remote device. section about <a href="#FindingDevices">Finding Devices</a>.) You must then use the {@link android.bluetooth.BluetoothDevice} to acquire a {@link -android.bluetooth.BluetoothSocket} and initiate the connection.</p> - -<p>Here's the basic procedure:</p> - -<ol> +android.bluetooth.BluetoothSocket} and initiate the connection.</p> + +<p>Here's the basic procedure:</p> + +<ol> <li>Using the {@link android.bluetooth.BluetoothDevice}, get a {@link android.bluetooth.BluetoothSocket} by calling {@link android.bluetooth.BluetoothDevice#createRfcommSocketToServiceRecord(UUID)}. @@ -684,9 +684,9 @@ must match the UUID used by the server device when it opened its android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String, UUID)}). Using the same UUID is simply a matter of hard-coding the UUID string into your application and then referencing it from both the server and client -code.</p> -</li> - +code.</p> +</li> + <li>Initiate the connection by calling {@link android.bluetooth.BluetoothSocket#connect()}. <p>Upon this call, the system will perform an SDP lookup on the remote device in @@ -697,34 +697,34 @@ android.bluetooth.BluetoothSocket#connect()} will return. This method is a blocking call. If, for any reason, the connection fails or the {@link android.bluetooth.BluetoothSocket#connect()} method times out (after about -12 seconds), then it will throw an exception.</p> +12 seconds), then it will throw an exception.</p> <p>Because {@link android.bluetooth.BluetoothSocket#connect()} is a blocking call, this connection procedure should always be performed in a thread separate from the main activity -thread.</p> +thread.</p> <p class="note">Note: You should always ensure that the device is not performing device discovery when you call {@link android.bluetooth.BluetoothSocket#connect()}. If discovery is in progress, then the -connection attempt will be significantly slowed and is more likely to fail.</p> -</li> -</ol> - -<h4>Example</h4> - +connection attempt will be significantly slowed and is more likely to fail.</p> +</li> +</ol> + +<h4>Example</h4> + <p>Here is a basic example of a thread that initiates a Bluetooth -connection:</p> -<pre> +connection:</p> +<pre> private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; - + public ConnectThread(BluetoothDevice device) { // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null; mmDevice = device; - + // Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code @@ -732,11 +732,11 @@ private class ConnectThread extends Thread { } catch (IOException e) { } mmSocket = tmp; } - + public void run() { // Cancel discovery because it will slow down the connection mBluetoothAdapter.cancelDiscovery(); - + try { // Connect the device through the socket. This will block // until it succeeds or throws an exception @@ -748,11 +748,11 @@ private class ConnectThread extends Thread { } catch (IOException closeException) { } return; } - + // Do work to manage the connection (in a separate thread) manageConnectedSocket(mmSocket); } - + /** Will cancel an in-progress connection, and close the socket */ public void cancel() { try { @@ -760,42 +760,42 @@ private class ConnectThread extends Thread { } catch (IOException e) { } } } -</pre> - +</pre> + <p>Notice that {@link android.bluetooth.BluetoothAdapter#cancelDiscovery()} is called before the connection is made. You should always do this before connecting and it is safe to call without actually checking whether it is running or not (but if you do want to -check, call {@link android.bluetooth.BluetoothAdapter#isDiscovering()}).</p> - +check, call {@link android.bluetooth.BluetoothAdapter#isDiscovering()}).</p> + <p><code>manageConnectedSocket()</code> is a fictional method in the application that will initiate the thread for transferring data, which is discussed in the section -about <a href="#ManagingAConnection">Managing a Connection</a>.</p> - +about <a href="#ManagingAConnection">Managing a Connection</a>.</p> + <p>When you're done with your {@link android.bluetooth.BluetoothSocket}, always call {@link android.bluetooth.BluetoothSocket#close()} to clean up. Doing so will immediately close the connected socket and clean up all internal -resources.</p> - - -<h2 id="ManagingAConnection">Managing a Connection</h2> - +resources.</p> + + +<h2 id="ManagingAConnection">Managing a Connection</h2> + <p>When you have successfully connected two (or more) devices, each one will have a connected {@link android.bluetooth.BluetoothSocket}. This is where the fun begins because you can share data between devices. Using the {@link android.bluetooth.BluetoothSocket}, the general procedure to transfer arbitrary data is -simple:</p> -<ol> +simple:</p> +<ol> <li>Get the {@link java.io.InputStream} and {@link java.io.OutputStream} that handle transmissions through the socket, via {@link android.bluetooth.BluetoothSocket#getInputStream()} and -{@link android.bluetooth.BluetoothSocket#getOutputStream}, respectively.</li> - +{@link android.bluetooth.BluetoothSocket#getOutputStream}, respectively.</li> + <li>Read and write data to the streams with {@link -java.io.InputStream#read(byte[])} and {@link java.io.OutputStream#write(byte[])}.</li> -</ol> - -<p>That's it.</p> - +java.io.InputStream#read(byte[])} and {@link java.io.OutputStream#write(byte[])}.</li> +</ol> + +<p>That's it.</p> + <p>There are, of course, implementation details to consider. First and foremost, you should use a dedicated thread for all stream reading and writing. This is important because both {@link java.io.InputStream#read(byte[])} and {@link @@ -806,37 +806,37 @@ block, but can block for flow control if the remote device is not calling {@link java.io.InputStream#read(byte[])} quickly enough and the intermediate buffers are full. So, your main loop in the thread should be dedicated to reading from the {@link java.io.InputStream}. A separate public method in the thread can be used to initiate -writes to the {@link java.io.OutputStream}.</p> - -<h4>Example</h4> - -<p>Here's an example of how this might look:</p> -<pre> +writes to the {@link java.io.OutputStream}.</p> + +<h4>Example</h4> + +<p>Here's an example of how this might look:</p> +<pre> private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; - + public ConnectedThread(BluetoothSocket socket) { mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; - + // Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream(); } catch (IOException e) { } - + mmInStream = tmpIn; mmOutStream = tmpOut; } - + public void run() { byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() - + // Keep listening to the InputStream until an exception occurs while (true) { try { @@ -850,14 +850,14 @@ private class ConnectedThread extends Thread { } } } - + /* Call this from the main activity to send data to the remote device */ public void write(byte[] bytes) { try { mmOutStream.write(bytes); } catch (IOException e) { } } - + /* Call this from the main activity to shutdown the connection */ public void cancel() { try { @@ -865,44 +865,44 @@ private class ConnectedThread extends Thread { } catch (IOException e) { } } } -</pre> - +</pre> + <p>The constructor acquires the necessary streams and once executed, the thread will wait for data to come through the InputStream. When {@link java.io.InputStream#read(byte[])} returns with bytes from the stream, the data is sent to the main activity using a member Handler from the parent class. Then it goes back and waits for more bytes from -the stream.</p> - +the stream.</p> + <p>Sending outgoing data is as simple as calling the thread's <code>write()</code> method from the main activity and passing in the bytes to be sent. This method then simply calls {@link -java.io.OutputStream#write(byte[])} to send the data to the remote device.</p> - +java.io.OutputStream#write(byte[])} to send the data to the remote device.</p> + <p>The thread's <code>cancel()</code> method is important so that the connection can be terminated at any time by closing the {@link android.bluetooth.BluetoothSocket}. This should always be called when you're done using the Bluetooth -connection.</p> - -<div class="special"> +connection.</p> + +<div class="special"> <p>For a demonstration of using the Bluetooth APIs, see the <a -href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample app</a>.</p> -</div> +href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample app</a>.</p> +</div> -<h2 id="Profiles">Working with Profiles</h2> +<h2 id="Profiles">Working with Profiles</h2> <p>Starting in Android 3.0, the Bluetooth API includes support for working with Bluetooth profiles. A <em>Bluetooth profile</em> is a wireless interface specification for Bluetooth-based communication between devices. An example is the Hands-Free profile. For a mobile phone to connect to a wireless headset, -both devices must support the Hands-Free profile. </p> +both devices must support the Hands-Free profile. </p> <p>You can implement the interface {@link android.bluetooth.BluetoothProfile} to write your own classes to support a particular Bluetooth profile. The Android Bluetooth API provides implementations for the following Bluetooth -profiles:</p> -<ul> +profiles:</p> +<ul> <li><strong>Headset</strong>. The Headset profile provides support for Bluetooth headsets to be used with mobile phones. Android provides the {@link @@ -917,7 +917,7 @@ For more discussion of this topic, see <a href="#AT-Commands">Vendor-specific AT profile defines how high quality audio can be streamed from one device to another over a Bluetooth connection. Android provides the {@link android.bluetooth.BluetoothA2dp} class, which is a proxy for controlling -the Bluetooth A2DP Service via IPC.</li> +the Bluetooth A2DP Service via IPC.</li> <li><strong>Health Device</strong>. Android 4.0 (API level 14) introduces support for the Bluetooth Health Device Profile (HDP). This lets you create @@ -928,50 +928,50 @@ specialization codes, refer to <strong>Bluetooth Assigned Numbers</strong> at <a href="http://www.bluetooth.org">www.bluetooth.org</a>. Note that these values are also referenced in the ISO/IEEE 11073-20601 [7] specification as MDC_DEV_SPEC_PROFILE_* in the Nomenclature Codes Annex. For more discussion of -HDP, see <a href="#HDP">Health Device Profile</a>.</li> +HDP, see <a href="#HDP">Health Device Profile</a>.</li> -</ul> +</ul> -<p>Here are the basic steps for working with a profile:</p> -<ol> +<p>Here are the basic steps for working with a profile:</p> +<ol> <li>Get the default adapter, as described in <a href="{@docRoot}guide/topics/connectivity/bluetooth.html#SettingUp">Setting Up - Bluetooth</a>.</li> + Bluetooth</a>.</li> <li>Use {@link android.bluetooth.BluetoothAdapter#getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int) getProfileProxy()} to establish a connection to the profile proxy object associated with the profile. In the example below, the profile proxy object is an instance of {@link -android.bluetooth.BluetoothHeadset}. </li> +android.bluetooth.BluetoothHeadset}. </li> <li>Set up a {@link android.bluetooth.BluetoothProfile.ServiceListener}. This listener notifies {@link android.bluetooth.BluetoothProfile} IPC clients when -they have been connected to or disconnected from the service.</li> +they have been connected to or disconnected from the service.</li> <li>In {@link android.bluetooth.BluetoothProfile.ServiceListener#onServiceConnected(int, android.bluetooth.BluetoothProfile) onServiceConnected()}, get a handle -to the profile proxy object.</li> +to the profile proxy object.</li> <li>Once you have the profile proxy object, you can use it to monitor the state of the connection and perform other operations that are relevant to that -profile.</li> -</ol> +profile.</li> +</ol> <p> For example, this code snippet shows how to connect to a {@link android.bluetooth.BluetoothHeadset} proxy object so that you can control the -Headset profile:</p> +Headset profile:</p> <pre>BluetoothHeadset mBluetoothHeadset; - + // Get the default adapter BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - + // Establish connection to the proxy. mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET); - + private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() { public void onServiceConnected(int profile, BluetoothProfile proxy) { if (profile == BluetoothProfile.HEADSET) { @@ -984,16 +984,16 @@ private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile } } }; - + // ... call functions on mBluetoothHeadset - + // Close proxy connection after use. mBluetoothAdapter.closeProfileProxy(mBluetoothHeadset); -</pre> +</pre> -<h3 id="AT-Commands">Vendor-specific AT commands</h3> +<h3 id="AT-Commands">Vendor-specific AT commands</h3> <p>Starting in Android 3.0, applications can register to receive system broadcasts of pre-defined vendor-specific AT commands sent by headsets (such as @@ -1060,7 +1060,7 @@ android.bluetooth.BluetoothProfile.ServiceListener#HEALTH} profile type to establish a connection with the profile proxy object.</p> </li> <li>Create a {@link android.bluetooth.BluetoothHealthCallback} and register an -application configuration +application configuration ({@link android.bluetooth.BluetoothHealthAppConfiguration}) that acts as a health sink.</li> diff --git a/docs/html/guide/topics/connectivity/nfc/index.jd b/docs/html/guide/topics/connectivity/nfc/index.jd index f12facf75ecc..bc4f075c71f7 100644 --- a/docs/html/guide/topics/connectivity/nfc/index.jd +++ b/docs/html/guide/topics/connectivity/nfc/index.jd @@ -17,12 +17,12 @@ page.title=Near Field Communication <p>Android-powered devices with NFC simultaneously support three main modes of operation:</p> <ol> -<li><strong>Reader/writer mode</strong>, allowing the NFC device to read and/or write +<li><strong>Reader/writer mode</strong>, allowing the NFC device to read and/or write passive NFC tags and stickers.</li> -<li><strong>P2P mode</strong>, allowing the NFC device to exchange data with other NFC +<li><strong>P2P mode</strong>, allowing the NFC device to exchange data with other NFC peers; this operation mode is used by Android Beam.</li> -<li><strong>Card emulation mode</strong>, allowing the NFC device itself to act as an NFC -card. The emulated NFC card can then be accessed by an external NFC reader, +<li><strong>Card emulation mode</strong>, allowing the NFC device itself to act as an NFC +card. The emulated NFC card can then be accessed by an external NFC reader, such as an NFC point-of-sale terminal.</li> </ol> diff --git a/docs/html/guide/topics/connectivity/sip.jd b/docs/html/guide/topics/connectivity/sip.jd index d754894741e7..d8d6d277bbf9 100755 --- a/docs/html/guide/topics/connectivity/sip.jd +++ b/docs/html/guide/topics/connectivity/sip.jd @@ -12,10 +12,10 @@ page.tags=sipmanager,sipprofile,sipaudiocall,telephony <li><a href="#manager">Creating a SIP Manager</a></li> <li><a href="#profiles">Registering with a SIP Server</a></li> <li><a href="#audio">Making an Audio Call</a></li> - <li><a href="#receiving">Receiving Calls</a></li> + <li><a href="#receiving">Receiving Calls</a></li> <li><a href="#testing">Testing SIP Applications</a></li> </ol> - + <h2>Key classes</h2> <ol> <li>{@link android.net.sip.SipManager}</li> @@ -23,7 +23,7 @@ page.tags=sipmanager,sipprofile,sipaudiocall,telephony <li>{@link android.net.sip.SipAudioCall}</li> </ol> - + <h2>Related samples</h2> <ol> <li> <a href="{@docRoot}resources/samples/SipDemo/index.html"> SipDemo</a></li> @@ -46,9 +46,9 @@ record or playback directly.</p> <h2 id="requirements">Requirements and Limitations</h2> <p>Here are the requirements for developing a SIP application:</p> <ul> - + <li>You must have a mobile device that is running Android 2.3 or higher. </li> - + <li>SIP runs over a wireless data connection, so your device must have a data connection (with a mobile data service or Wi-Fi)</span>. This means that you can't test on AVD—you can only test on a physical device. For details, see @@ -139,7 +139,7 @@ capable of supporting SIP, add the following to your application's manifest:</p> <ul> - <li><code><uses-sdk android:minSdkVersion="9" /></code>. This + <li><code><uses-sdk android:minSdkVersion="9" /></code>. This indicates that your application requires Android 2.3 or higher. For more information, see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> and the documentation for the <a @@ -162,7 +162,7 @@ may also be needed, depending on your implementation. For more information, see the documentation for the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses- feature></a> element.</li> - + </ul> <p>If your application is designed to receive calls, you must also define a receiver ({@link android.content.BroadcastReceiver} subclass) in the application's manifest: </p> @@ -261,7 +261,7 @@ public void onRegistering(String localProfileUri) { public void onRegistrationDone(String localProfileUri, long expiryTime) { updateStatus("Ready"); } - + public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) { updateStatus("Registration failed. Please check settings."); @@ -291,8 +291,8 @@ example:</p> <li>A {@link android.net.sip.SipProfile} that is making the call (the "local profile"), and a valid SIP address to receive the call (the -"peer profile"). - +"peer profile"). + <li>A {@link android.net.sip.SipManager} object. </li> </ul> @@ -304,7 +304,7 @@ established:</p> <pre> SipAudioCall.Listener listener = new SipAudioCall.Listener() { - + @Override public void onCallEstablished(SipAudioCall call) { call.startAudio(); @@ -312,7 +312,7 @@ SipAudioCall.Listener listener = new SipAudioCall.Listener() { call.toggleMute(); ... } - + @Override public void onCallEnded(SipAudioCall call) { // Do something. @@ -326,12 +326,12 @@ make the call. The {@link android.net.sip.SipManager} method <ul> <li>A local SIP profile (the caller).</li> <li>A peer SIP profile (the user being called).</li> - + <li>A {@link android.net.sip.SipAudioCall.Listener} to listen to the call events from {@link android.net.sip.SipAudioCall}. This can be <code>null</code>, but as shown above, the listener is used to set things up once the call is established.</li> - + <li>The timeout value, in seconds.</li> </ul> <p>For example:</p> @@ -349,15 +349,15 @@ your application:</p> <code><receiver></code>. In <strong>SipDemo</strong>, this is <code><receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/></code>.</li> - + <li>Implement the receiver, which is a subclass of {@link android.content.BroadcastReceiver}. In <strong>SipDemo</strong>, this is <code>IncomingCallReceiver</code>.</li> - + <li>Initialize the local profile ({@link android.net.sip.SipProfile}) with a pending intent that fires your receiver when someone calls the local profile. </li> - + <li>Set up an intent filter that filters by the action that represents an incoming call. In <strong>SipDemo</strong>, this action is <code>android.SipDemo.INCOMING_CALL</code>. </li> @@ -427,16 +427,16 @@ action string provided by the application. In SipDemo, this action string is android.net.sip.SipProfile} object gets created with a pending intent based on the action string <code>android.SipDemo.INCOMING_CALL</code>. The <code>PendingIntent</code> object will perform a broadcast when the {@link -android.net.sip.SipProfile} receives a call:</p> +android.net.sip.SipProfile} receives a call:</p> <pre> public SipManager mSipManager = null; public SipProfile mSipProfile = null; ... -Intent intent = new Intent(); -intent.setAction("android.SipDemo.INCOMING_CALL"); -PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); +Intent intent = new Intent(); +intent.setAction("android.SipDemo.INCOMING_CALL"); +PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); mSipManager.open(mSipProfile, pendingIntent, null);</pre> <p>The broadcast will be intercepted by the intent filter, which will then fire @@ -485,8 +485,8 @@ href="{@docRoot}tools/device.html">Developing on a Device</a>.</li> href="{@docRoot}tools/device.html">Developing on a Device</a>.</li> <li>If you are using Android Studio, you can view the application log output by -opening the Event Log console (<strong>View > Tool Windows > Event Log</strong>). -<li>Ensure your application is configured to launch Logcat automatically when it runs: +opening the Event Log console (<strong>View > Tool Windows > Event Log</strong>). +<li>Ensure your application is configured to launch Logcat automatically when it runs: <ol TYPE=a> <li>Select <strong>Run > Edit Configurations</strong>. <li>Select the <strong>Miscellaneous</strong> tab in the <strong>Run/Debug Configurations</strong> window. diff --git a/docs/html/guide/topics/connectivity/usb/accessory.jd b/docs/html/guide/topics/connectivity/usb/accessory.jd index a2177678fc56..3942b3a951b9 100644 --- a/docs/html/guide/topics/connectivity/usb/accessory.jd +++ b/docs/html/guide/topics/connectivity/usb/accessory.jd @@ -169,7 +169,7 @@ UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXT include a <code><uses-feature></code> element that declares that your application uses the <code>android.hardware.usb.accessory</code> feature.</li> - <li>If you are using the + <li>If you are using the <a href="http://code.google.com/android/add-ons/google-apis/index.html">add-on library</a>, add the <code><uses-library></code> element specifying <code>com.android.future.usb.accessory</code> for the library.</li> @@ -347,7 +347,7 @@ UsbAccessory[] accessoryList = manager.getAcccessoryList(); private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { - + public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { @@ -444,7 +444,7 @@ private void openAccessory() { <pre> BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); + String action = intent.getAction(); if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) { UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); diff --git a/docs/html/guide/topics/connectivity/usb/host.jd b/docs/html/guide/topics/connectivity/usb/host.jd index d2194e6d6f6d..856027d09d7f 100644 --- a/docs/html/guide/topics/connectivity/usb/host.jd +++ b/docs/html/guide/topics/connectivity/usb/host.jd @@ -263,7 +263,7 @@ UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE obtain a device from the map.</p> <pre> UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); -... +... HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); UsbDevice device = deviceList.get("deviceName"); </pre> @@ -317,7 +317,7 @@ private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { if(device != null){ //call method to set up device communication } - } + } else { Log.d(TAG, "permission denied for device " + device); } @@ -396,7 +396,7 @@ private boolean forceClaim = true; UsbInterface intf = device.getInterface(0); UsbEndpoint endpoint = intf.getEndpoint(0); -UsbDeviceConnection connection = mUsbManager.openDevice(device); +UsbDeviceConnection connection = mUsbManager.openDevice(device); connection.claimInterface(intf, forceClaim); connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another thread </pre> @@ -422,7 +422,7 @@ connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another <pre> BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); + String action = intent.getAction(); if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); diff --git a/docs/html/guide/topics/connectivity/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd index d7e1269696cf..b8eb40ea5014 100644 --- a/docs/html/guide/topics/connectivity/wifip2p.jd +++ b/docs/html/guide/topics/connectivity/wifip2p.jd @@ -66,7 +66,7 @@ a photo sharing application.</p> methods. A {@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION} intent is also broadcast if the {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()} method discovers that the peers list has changed.</p> - + <h2 id="api">API Overview</h2> <p>The {@link android.net.wifi.p2p.WifiP2pManager} class provides methods to allow you to interact with @@ -135,7 +135,7 @@ a photo sharing application.</p> are described in the following table:</p> <p class="table-caption"><strong>Table 2.</strong> Wi-Fi P2P Listeners</p> - + <table> <tr> <th>Listener interface</th> @@ -395,7 +395,7 @@ protected void onPause() { available peers that are in range. The call to this function is asynchronous and a success or failure is communicated to your application with {@link android.net.wifi.p2p.WifiP2pManager.ActionListener#onSuccess onSuccess()} and {@link - android.net.wifi.p2p.WifiP2pManager.ActionListener#onFailure onFailure()} if you created a + android.net.wifi.p2p.WifiP2pManager.ActionListener#onFailure onFailure()} if you created a {@link android.net.wifi.p2p.WifiP2pManager.ActionListener}. The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener#onSuccess onSuccess()} method only notifies you that the discovery process succeeded and does not provide any information about the actual peers diff --git a/docs/html/guide/topics/data/index.jd b/docs/html/guide/topics/data/index.jd index 1e082b3fef95..169fc223d555 100644 --- a/docs/html/guide/topics/data/index.jd +++ b/docs/html/guide/topics/data/index.jd @@ -1,6 +1,6 @@ page.title=Data Storage page.landing=true -page.landing.intro=Store application data in databases, files, or preferences, in internal or removeable storage. You can also add a data backup service to let users store and recover application and system data. +page.landing.intro=Store application data in databases, files, or preferences, in internal or removeable storage. You can also add a data backup service to let users store and recover application and system data. page.landing.image= @jd:body @@ -10,14 +10,14 @@ page.landing.image= <div class="col-12"> <h3>Training</h3> - + <a href="http://developer.android.com/training/cloudsync/index.html"> <h4>Syncing to the Cloud</h4> <p>This class covers different strategies for cloud enabled applications. It covers syncing data with the cloud using your own back-end web application, and backing up data using the cloud so that users can restore their data when installing your application on a new device.</p> </a> - + </div> </div>
\ No newline at end of file diff --git a/docs/html/guide/topics/graphics/index.jd b/docs/html/guide/topics/graphics/index.jd index 17f630994952..a87e404503ed 100644 --- a/docs/html/guide/topics/graphics/index.jd +++ b/docs/html/guide/topics/graphics/index.jd @@ -17,7 +17,7 @@ support hardware acceleration on tablets. With this new pipeline, all drawing op by the UI toolkit are carried out using the GPU. You’ll be happy to hear that Android 4.0, Ice Cream Sandwich, brings an improved version of the hardware-accelerated 2D rendering pipeline.</p> </a> - + <a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html"> <h4>Introducing ViewPropertyAnimator</h4> @@ -25,7 +25,7 @@ href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyani including the new properties added to the View class in 3.0. In the 3.1 release, we added a small utility class that makes animating these properties even easier.</p> </a> - + <a href="http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html"> <h4>Android 3.0 Hardware Acceleration</h4> @@ -43,7 +43,7 @@ applications can benefit from an extra boost in performance.</p> that keeps your user interface (UI) components responsive and avoids exceeding your application memory limit.</p> </a> - + </div> </div>
\ No newline at end of file diff --git a/docs/html/guide/topics/graphics/overview.jd b/docs/html/guide/topics/graphics/overview.jd index 66a675dc6491..98d80a0f51bf 100644 --- a/docs/html/guide/topics/graphics/overview.jd +++ b/docs/html/guide/topics/graphics/overview.jd @@ -6,7 +6,7 @@ page.title=Animation and Graphics Overview and help you decide with approach is best for your needs.</p> <h3 id="animation">Animation</h3> - + <p>The Android framework provides two animation systems: property animation and view animation. Both animation systems are viable options, but the property animation system, in general, is the preferred method to use, because it diff --git a/docs/html/guide/topics/graphics/prop-animation.jd b/docs/html/guide/topics/graphics/prop-animation.jd index aed533de16ca..2be2b09ffea3 100755 --- a/docs/html/guide/topics/graphics/prop-animation.jd +++ b/docs/html/guide/topics/graphics/prop-animation.jd @@ -165,9 +165,9 @@ page.tags=valueanimator,objectanimator,layouttransition,ViewPropertyAnimator "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API Demos</a> sample project provides many examples on how to use the property animation system.</p> - + <h2 id="property-vs-view">How Property Animation Differs from View Animation</h2> - + <p>The view animation system provides the capability to only animate {@link android.view.View} objects, so if you wanted to animate non-{@link android.view.View} objects, you have to implement your own code to do so. The view animation system is also constrained in the fact that it only @@ -594,7 +594,7 @@ implementations of the methods that you can choose to override.</p> for just the {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()} callback:</p> <pre> -ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f); +ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f); fadeAnim.setDuration(250); fadeAnim.addListener(new AnimatorListenerAdapter() { public void onAnimationEnd(Animator animation) { diff --git a/docs/html/guide/topics/location/strategies.jd b/docs/html/guide/topics/location/strategies.jd index 32be463e687c..2dfed2ce6e8e 100755 --- a/docs/html/guide/topics/location/strategies.jd +++ b/docs/html/guide/topics/location/strategies.jd @@ -411,12 +411,12 @@ data to work.</p> <h3 id="MockAVD">Using Android Studio</h3> <p>Select <b>Tools</b> > <b>Android</b> > <b>AVD Manager</b>. In the Android Virtual -Device Manager window, choose your AVD and launch it in the emulator by selecting the green +Device Manager window, choose your AVD and launch it in the emulator by selecting the green play arrow in the Actions column.</p> <p>Then, select <b>Tools</b> > <b>Android</b> > <b>Android Device Monitor</b>. -Select the Emulator Control tab in the Android Device Monitor window, and enter GPS coordinates -under Location Controls as individual lat/long coordinates, with a GPX file for route playback, +Select the Emulator Control tab in the Android Device Monitor window, and enter GPS coordinates +under Location Controls as individual lat/long coordinates, with a GPX file for route playback, or a KML file for multiple place marks. </p> diff --git a/docs/html/guide/topics/manifest/action-element.jd b/docs/html/guide/topics/manifest/action-element.jd index fc6ce440579d..f3b340e2737a 100644 --- a/docs/html/guide/topics/manifest/action-element.jd +++ b/docs/html/guide/topics/manifest/action-element.jd @@ -13,10 +13,10 @@ parent.link=manifest-intro.html <p> <dt>description:</dt> <dd itemprop="description">Adds an action to an intent filter. -An <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element must contain +An <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element must contain one or more {@code <action>} elements. If it doesn't contain any, no -Intent objects will get through the filter. See -<a href="{@docRoot}guide/components/intents-filters.html">Intents and +Intent objects will get through the filter. See +<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> for details on intent filters and the role of action specifications within a filter. </dd> @@ -25,16 +25,16 @@ specifications within a filter. <dd><dl class="attr"> <dt><a name="nm"></a>{@code android:name}</dt> <dd>The name of the action. Some standard actions are defined in the -{@link android.content.Intent#ACTION_CHOOSER Intent} class as +{@link android.content.Intent#ACTION_CHOOSER Intent} class as <code>ACTION_<i>string</i></code> constants. To assign one of these actions to -this attribute, prepend "{@code android.intent.action.}" to the +this attribute, prepend "{@code android.intent.action.}" to the <code><i>string</i></code> that follows {@code ACTION_}. For example, for {@code ACTION_MAIN}, use "{@code android.intent.action.MAIN}" and for {@code ACTION_WEB_SEARCH}, use "{@code android.intent.action.WEB_SEARCH}". <p> For actions you define, it's best to use the package name as a prefix to -ensure uniqueness. For example, a {@code TRANSMOGRIFY} action might be specified +ensure uniqueness. For example, a {@code TRANSMOGRIFY} action might be specified as follows: </p> diff --git a/docs/html/guide/topics/manifest/activity-alias-element.jd b/docs/html/guide/topics/manifest/activity-alias-element.jd index 1427b55219bd..adb9937899fd 100644 --- a/docs/html/guide/topics/manifest/activity-alias-element.jd +++ b/docs/html/guide/topics/manifest/activity-alias-element.jd @@ -29,62 +29,62 @@ alias and it must be declared before the alias in the manifest. <p> The alias presents the target activity as a independent entity. -It can have its own set of intent filters, and they, rather than the -intent filters on the target activity itself, determine which intents +It can have its own set of intent filters, and they, rather than the +intent filters on the target activity itself, determine which intents can activate the target through the alias and how the system -treats the alias. For example, the intent filters on the alias may -specify the "<code>{@link android.content.Intent#ACTION_MAIN -android.intent.action.MAIN}</code>" -and "<code>{@link android.content.Intent#CATEGORY_LAUNCHER -android.intent.category.LAUNCHER}</code>" flags, causing it to be -represented in the application launcher, even though none of the +treats the alias. For example, the intent filters on the alias may +specify the "<code>{@link android.content.Intent#ACTION_MAIN +android.intent.action.MAIN}</code>" +and "<code>{@link android.content.Intent#CATEGORY_LAUNCHER +android.intent.category.LAUNCHER}</code>" flags, causing it to be +represented in the application launcher, even though none of the filters on the target activity itself set these flags. </p> <p> With the exception of {@code targetActivity}, {@code <activity-alias>} -attributes are a subset of <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> attributes. +attributes are a subset of <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> attributes. For attributes in the subset, none of the values set for the target carry over -to the alias. However, for attributes not in the subset, the values set for +to the alias. However, for attributes not in the subset, the values set for the target activity also apply to the alias. </p></dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="enabled"></a>{@code android:enabled}</dt> -<dd>Whether or not the target activity can be instantiated by the system through -this alias — "{@code true}" if it can be, and "{@code false}" if not. +<dd>Whether or not the target activity can be instantiated by the system through +this alias — "{@code true}" if it can be, and "{@code false}" if not. The default value is "{@code true}". <p> -The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all -application components, including activity aliases. The +The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all +application components, including activity aliases. The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <activity-alias>} -attributes must both be "{@code true}" for the system to be able to instantiate -the target activity through the alias. If either is "{@code false}", the alias +attributes must both be "{@code true}" for the system to be able to instantiate +the target activity through the alias. If either is "{@code false}", the alias does not work. </p></dd> <dt><a name="exported"></a>{@code android:exported}</dt> -<dd>Whether or not components of other applications can launch the target activity -through this alias — "{@code true}" if they can, and "{@code false}" if not. -If "{@code false}", the target activity can be launched through the alias only by -components of the same application as the alias or applications with the same user ID. +<dd>Whether or not components of other applications can launch the target activity +through this alias — "{@code true}" if they can, and "{@code false}" if not. +If "{@code false}", the target activity can be launched through the alias only by +components of the same application as the alias or applications with the same user ID. <p> -The default value depends on whether the alias contains intent filters. The +The default value depends on whether the alias contains intent filters. The absence of any filters means that the activity can be invoked through the alias -only by specifying the exact name of the alias. This implies that the alias -is intended only for application-internal use (since others would not know its name) +only by specifying the exact name of the alias. This implies that the alias +is intended only for application-internal use (since others would not know its name) — so the default value is "{@code false}". -On the other hand, the presence of at least one filter implies that the alias +On the other hand, the presence of at least one filter implies that the alias is intended for external use — so the default value is "{@code true}". </p></dd> <dt><a name="icon"></a>{@code android:icon}</dt> -<dd>An icon for the target activity when presented to users through the alias. -See the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> element's +<dd>An icon for the target activity when presented to users through the alias. +See the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#icon">icon</a></code> attribute for more information. <dt><a name="label"></a>{@code android:label}</dt> @@ -95,31 +95,31 @@ See the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&l <dt><a name="nm">{@code android:name}</dt> <dd>A unique name for the alias. The name should resemble a fully -qualified class name. But, unlike the name of the target activity, -the alias name is arbitrary; it does not refer to an actual class. +qualified class name. But, unlike the name of the target activity, +the alias name is arbitrary; it does not refer to an actual class. </p></dd> <dt><a name="prmsn"></a>{@code android:permission}</dt> -<dd>The name of a permission that clients must have to launch the target activity -or get it to do something via the alias. If a caller of +<dd>The name of a permission that clients must have to launch the target activity +or get it to do something via the alias. If a caller of <code>{@link android.content.Context#startActivity startActivity()}</code> or <code>{@link android.app.Activity#startActivityForResult startActivityForResult()}</code> has not been granted the specified permission, the target activity will not be -activated. +activated. <p>This attribute supplants any permission set for the target activity itself. If it is not set, a permission is not needed to activate the target through the alias. </p> <p> -For more information on permissions, see the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a> +For more information on permissions, see the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a> section in the introduction. </p></dd> <dt><a name="trgt"></a>{@code android:targetActivity}</dt> <dd>The name of the activity that can be activated through the alias. -This name must match the {@code name} attribute of an +This name must match the {@code name} attribute of an <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> element that precedes the alias in the manifest. </p></dd> diff --git a/docs/html/guide/topics/manifest/category-element.jd b/docs/html/guide/topics/manifest/category-element.jd index 0034119fe7b2..d0f0edf6dd8c 100644 --- a/docs/html/guide/topics/manifest/category-element.jd +++ b/docs/html/guide/topics/manifest/category-element.jd @@ -12,19 +12,19 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Adds a category name to an intent filter. See -<a href="{@docRoot}guide/components/intents-filters.html">Intents and +<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> for details on intent filters and the role of category specifications within a filter.</dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the category. Standard categories are defined in the +<dd>The name of the category. Standard categories are defined in the {@link android.content.Intent} class as <code>CATEGORY_<i>name</i></code> -constants. The name assigned here can be derived from those constants -by prefixing "{@code android.intent.category.}" to the +constants. The name assigned here can be derived from those constants +by prefixing "{@code android.intent.category.}" to the <code><i>name</i></code> that follows {@code CATEGORY_}. For example, -the string value for {@code CATEGORY_LAUNCHER} is +the string value for {@code CATEGORY_LAUNCHER} is "{@code android.intent.category.LAUNCHER}". <p class="note"><strong>Note:</strong> In order to receive implicit intents, you must include the @@ -39,7 +39,7 @@ your activity.</p> Custom categories should use the package name as a prefix, to ensure that they are unique. </p></dd> -</dl></dd> +</dl></dd> <!-- ##api level indication## --> <dt>introduced in:</dt> diff --git a/docs/html/guide/topics/manifest/grant-uri-permission-element.jd b/docs/html/guide/topics/manifest/grant-uri-permission-element.jd index b2d9bb7a104e..a464e552c47d 100644 --- a/docs/html/guide/topics/manifest/grant-uri-permission-element.jd +++ b/docs/html/guide/topics/manifest/grant-uri-permission-element.jd @@ -14,24 +14,24 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Specifies which data subsets of the parent content provider permission -can be granted for. Data subsets are indicated by the path part of a +can be granted for. Data subsets are indicated by the path part of a {@code content:} URI. (The authority part of the URI identifies the -content provider.) -Granting permission is a way of enabling clients of the provider that don't -normally have permission to access its data to overcome that restriction on +content provider.) +Granting permission is a way of enabling clients of the provider that don't +normally have permission to access its data to overcome that restriction on a one-time basis. -<p> -If a content provider's <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmns">grantUriPermissions</a></code> -attribute is "{@code true}", permission can be granted for any the data under -the provider's purview. However, if that attribute is "{@code false}", permission -can be granted only to data subsets that are specified by this element. +<p> +If a content provider's <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmns">grantUriPermissions</a></code> +attribute is "{@code true}", permission can be granted for any the data under +the provider's purview. However, if that attribute is "{@code false}", permission +can be granted only to data subsets that are specified by this element. A provider can contain any number of {@code <grant-uri-permission>} elements. Each one can specify only one path (only one of the three possible attributes). </p> <p> -For information on how permission is granted, see the +For information on how permission is granted, see the <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">grantUriPermissions</a></code> attribute. </p></dd> @@ -41,34 +41,34 @@ For information on how permission is granted, see the <dt><a name="path"></a>{@code android:path} <br/>{@code android:pathPrefix} <br/>{@code android:pathPattern}</dt> -<dd>A path identifying the data subset or subsets that permission can be -granted for. The {@code path} attribute specifies a complete path; -permission can be granted only to the particular data subset identified -by that path. -The {@code pathPrefix} attribute specifies the initial part of a path; -permission can be granted to all data subsets with paths that share that -initial part. -The {@code pathPattern} attribute specifies a complete path, but one +<dd>A path identifying the data subset or subsets that permission can be +granted for. The {@code path} attribute specifies a complete path; +permission can be granted only to the particular data subset identified +by that path. +The {@code pathPrefix} attribute specifies the initial part of a path; +permission can be granted to all data subsets with paths that share that +initial part. +The {@code pathPattern} attribute specifies a complete path, but one that can contain the following wildcards: <ul> <li>An asterisk ('{@code *}') matches a sequence of 0 to many occurrences of the immediately preceding character.</li> -<li><p>A period followed by an asterisk ("{@code .*}") matches any sequence of +<li><p>A period followed by an asterisk ("{@code .*}") matches any sequence of 0 to many characters.</p></li> </ul> <p> -Because '{@code \}' is used as an escape character when the string is read -from XML (before it is parsed as a pattern), you will need to double-escape: -For example, a literal '{@code *}' would be written as "{@code \\*}" and a -literal '{@code \}' would be written as "{@code \\\\}". This is basically +Because '{@code \}' is used as an escape character when the string is read +from XML (before it is parsed as a pattern), you will need to double-escape: +For example, a literal '{@code *}' would be written as "{@code \\*}" and a +literal '{@code \}' would be written as "{@code \\\\}". This is basically the same as what you would need to write if constructing the string in Java code. </p> <p> -For more information on these types of patterns, see the descriptions of +For more information on these types of patterns, see the descriptions of {@link android.os.PatternMatcher#PATTERN_LITERAL}, {@link android.os.PatternMatcher#PATTERN_PREFIX}, and {@link android.os.PatternMatcher#PATTERN_SIMPLE_GLOB} in the @@ -81,10 +81,10 @@ For more information on these types of patterns, see the descriptions of <dd>API Level 1</dd> <dt>see also:</dt> -<dd>the +<dd>the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmns">grantUriPermissions</a></code> -attribute of the -<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> +attribute of the +<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> element</dd> diff --git a/docs/html/guide/topics/manifest/instrumentation-element.jd b/docs/html/guide/topics/manifest/instrumentation-element.jd index 74be559db137..a476be3b72f1 100644 --- a/docs/html/guide/topics/manifest/instrumentation-element.jd +++ b/docs/html/guide/topics/manifest/instrumentation-element.jd @@ -23,15 +23,15 @@ object is instantiated before any of the application's components.</dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="ftest"></a>{@code android:functionalTest}</dt> -<dd>Whether or not the Instrumentation class should run as a functional test +<dd>Whether or not the Instrumentation class should run as a functional test — "{@code true}" if it should, and "{@code false}" if not. The default value is "{@code false}".</dd> <dt><a name="hprof"></a>{@code android:handleProfiling}</dt> -<dd>Whether or not the Instrumentation object will turn profiling on and -off — "{@code true}" if it determines when profiling starts and -stops, and "{@code false}" if profiling continues the entire time it is -running. A value of "{@code true}" enables the object to target profiling +<dd>Whether or not the Instrumentation object will turn profiling on and +off — "{@code true}" if it determines when profiling starts and +stops, and "{@code false}" if profiling continues the entire time it is +running. A value of "{@code true}" enables the object to target profiling at a specific set of operations. The default value is "{@code false}".</dd> <dt><a name="icon"></a>{@code android:icon}</dt> @@ -43,11 +43,11 @@ be set as a reference to a drawable resource.</dd> be set as a raw string or a reference to a string resource.</dd> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the {@link android.app.Instrumentation} subclass. -This should be a fully qualified class name (such as, -"{@code com.example.project.StringInstrumentation}"). However, as a shorthand, -if the first character of the name is a period, it is appended to the package -name specified in the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. +<dd>The name of the {@link android.app.Instrumentation} subclass. +This should be a fully qualified class name (such as, +"{@code com.example.project.StringInstrumentation}"). However, as a shorthand, +if the first character of the name is a period, it is appended to the package +name specified in the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. <p> There is no default. The name must be specified. diff --git a/docs/html/guide/topics/manifest/intent-filter-element.jd b/docs/html/guide/topics/manifest/intent-filter-element.jd index 14b4e03b64a8..13956c9ad430 100644 --- a/docs/html/guide/topics/manifest/intent-filter-element.jd +++ b/docs/html/guide/topics/manifest/intent-filter-element.jd @@ -27,23 +27,23 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Specifies the types of intents that an activity, service, or broadcast receiver can respond to. An intent filter declares the capabilities of its -parent component — what an activity or service can do and what types -of broadcasts a receiver can handle. It opens the component to receiving -intents of the advertised type, while filtering out those that are not +parent component — what an activity or service can do and what types +of broadcasts a receiver can handle. It opens the component to receiving +intents of the advertised type, while filtering out those that are not meaningful for the component. <p> -Most of the contents of the filter are described by its -<code><a href="{@docRoot}guide/topics/manifest/action-element.html"><action></a></code>, +Most of the contents of the filter are described by its +<code><a href="{@docRoot}guide/topics/manifest/action-element.html"><action></a></code>, <code><a href="{@docRoot}guide/topics/manifest/category-element.html"><category></a></code>, and <code><a href="{@docRoot}guide/topics/manifest/data-element.html"><data></a></code> subelements. </p> <p> -For a more detailed discussion of filters, see the separate -<a href="{@docRoot}guide/components/intents-filters.html">Intents -and Intent Filters</a> document, as well as the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#ifs">Intents Filters</a> +For a more detailed discussion of filters, see the separate +<a href="{@docRoot}guide/components/intents-filters.html">Intents +and Intent Filters</a> document, as well as the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#ifs">Intents Filters</a> section in the introduction. </p></dd> @@ -51,19 +51,19 @@ section in the introduction. <dd><dl class="attr"> <dt><a name="icon"></a>{@code android:icon}</dt> <dd>An icon that represents the parent activity, service, or broadcast -receiver when that component is presented to the user as having the +receiver when that component is presented to the user as having the capability described by the filter. <p> -This attribute must be set as a reference to a drawable resource -containing the image definition. The default value is the icon set -by the parent component's {@code icon} attribute. If the parent +This attribute must be set as a reference to a drawable resource +containing the image definition. The default value is the icon set +by the parent component's {@code icon} attribute. If the parent does not specify an icon, the default is the icon set by the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element. </p> <p> -For more on intent filter icons, see +For more on intent filter icons, see <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#iconlabel">Icons and Labels</a> in the introduction. </p></dd> @@ -75,44 +75,44 @@ to the user as having the capability described by the filter. <p> The label should be set as a reference to a string resource, so that -it can be localized like other strings in the user interface. -However, as a convenience while you're developing the application, +it can be localized like other strings in the user interface. +However, as a convenience while you're developing the application, it can also be set as a raw string. </p> <p> -The default value is the label set by the parent component. If the +The default value is the label set by the parent component. If the parent does not specify a label, the default is the label set by the -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#label"> label</a></code> attribute. </p> <p> -For more on intent filter labels, see +For more on intent filter labels, see <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#iconlabel">Icons and Labels</a> in the introduction. </p></dd> <dt><a name="priority"></a>{@code android:priority}</dt> <dd>The priority that should be given to the parent component with regard -to handling intents of the type described by the filter. This attribute has +to handling intents of the type described by the filter. This attribute has meaning for both activities and broadcast receivers: <ul> -<li>It provides information about how able an activity is to respond to +<li>It provides information about how able an activity is to respond to an intent that matches the filter, relative to other activities that could -also respond to the intent. When an intent could be handled by multiple +also respond to the intent. When an intent could be handled by multiple activities with different priorities, Android will consider only those with higher priority values as potential targets for the intent.</li> <li><p>It controls the order in which broadcast receivers are executed to -receive broadcast messages. Those with higher priority -values are called before those with lower values. (The order applies only +receive broadcast messages. Those with higher priority +values are called before those with lower values. (The order applies only to synchronous messages; it's ignored for asynchronous messages.)</p></li> </ul> <p> -Use this attribute only if you really need to impose a specific order in +Use this attribute only if you really need to impose a specific order in which the broadcasts are received, or want to force Android to prefer one activity over others. </p> diff --git a/docs/html/guide/topics/manifest/meta-data-element.jd b/docs/html/guide/topics/manifest/meta-data-element.jd index d3b41c391195..2d1bdfe59259 100644 --- a/docs/html/guide/topics/manifest/meta-data-element.jd +++ b/docs/html/guide/topics/manifest/meta-data-element.jd @@ -19,18 +19,18 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">A name-value pair for an item of additional, arbitrary data that can -be supplied to the parent component. A component element can contain any +be supplied to the parent component. A component element can contain any number of {@code <meta-data>} subelements. The values from all of -them are collected in a single {@link android.os.Bundle} object and made -available to the component as the -{@link android.content.pm.PackageItemInfo#metaData +them are collected in a single {@link android.os.Bundle} object and made +available to the component as the +{@link android.content.pm.PackageItemInfo#metaData PackageItemInfo.metaData} field. <p> -Ordinary values are specified through the <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#value">value</a></code> -attribute. However, to assign a resource ID as the value, use the -<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#resource">resource</a></code> attribute instead. For example, -the following code assigns whatever value is stored in the {@code @string/kangaroo} +Ordinary values are specified through the <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#value">value</a></code> +attribute. However, to assign a resource ID as the value, use the +<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#resource">resource</a></code> attribute instead. For example, +the following code assigns whatever value is stored in the {@code @string/kangaroo} resource to the "{@code zoo}" name: </p> @@ -44,22 +44,22 @@ the numeric ID of the resource, not the value stored in the resource: <pre><meta-data android:name="zoo" android:resource="@string/kangaroo" /></pre> <p> -It is highly recommended that you avoid supplying related data as +It is highly recommended that you avoid supplying related data as multiple separate {@code <meta-data>} entries. Instead, if you -have complex data to associate with a component, store it as a resource and +have complex data to associate with a component, store it as a resource and use the {@code resource} attribute to inform the component of its ID. </p></dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>A unique name for the item. To ensure that the name is unique, use a -Java-style naming convention — for example, +<dd>A unique name for the item. To ensure that the name is unique, use a +Java-style naming convention — for example, "{@code com.example.project.activity.fred}".</dd> <dt><a name="rsrc"></a>{@code android:resource}</dt> -<dd>A reference to a resource. The ID of the resource is the value assigned -to the item. The ID can be retrieved from the meta-data Bundle by the +<dd>A reference to a resource. The ID of the resource is the value assigned +to the item. The ID can be retrieved from the meta-data Bundle by the {@link android.os.Bundle#getInt Bundle.getInt()} method.</dd> <dt><a name="val"></a>{@code android:value}</dt> @@ -70,7 +70,7 @@ to the item. The ID can be retrieved from the meta-data Bundle by the <th>Type</th> <th>Bundle method</th> </tr><tr> - <td>String value, using double backslashes ({@code \\}) to escape characters + <td>String value, using double backslashes ({@code \\}) to escape characters — such as "{@code \\n}" and "{@code \\uxxxxx}" for a Unicode character.</td> <td>{@link android.os.Bundle#getString(String) getString()}</td> </tr><tr> @@ -80,7 +80,7 @@ to the item. The ID can be retrieved from the meta-data Bundle by the <td>Boolean value, either "{@code true}" or "{@code false}"</td> <td>{@link android.os.Bundle#getBoolean(String) getBoolean()}</td> </tr><tr> - <td>Color value, in the form "{@code #rgb}", "{@code #argb}", + <td>Color value, in the form "{@code #rgb}", "{@code #argb}", "{@code #rrggbb}", or "{@code #aarrggbb}"</td> <td>{@link android.os.Bundle#getInt(String) getInt()}</td> </tr><tr> diff --git a/docs/html/guide/topics/manifest/path-permission-element.jd b/docs/html/guide/topics/manifest/path-permission-element.jd index cdaf82b00f29..477470733151 100644 --- a/docs/html/guide/topics/manifest/path-permission-element.jd +++ b/docs/html/guide/topics/manifest/path-permission-element.jd @@ -33,9 +33,9 @@ specified multiple times to supply multiple paths. <dd><dl class="attr"> <dt><a name="path"></a>{@code android:path}</dt> -<dd>A complete URI path for a subset of content provider data. -Permission can be granted only to the particular data identified by this path. -When used to provide search suggestion content, it must be appended +<dd>A complete URI path for a subset of content provider data. +Permission can be granted only to the particular data identified by this path. +When used to provide search suggestion content, it must be appended with "/search_suggest_query". </dd> @@ -47,24 +47,24 @@ Permission can be granted to all data subsets with paths that share this initial <dt><a name="pathPattern"></a>{@code android:pathPattern}</dt> <dd>A complete URI path for a subset of content provider data, but one that can use the following wildcards: - -<ul> + +<ul> <li>An asterisk ('<code class="Code prettyprint">*</code>'). This matches a sequence of 0 to many occurrences of -the immediately preceding character.</li> - -<li>A period followed by an asterisk ("<code class="Code prettyprint">.*</code>"). This matches any sequence of -0 or more characters.</li> -</ul> - -<p> -Because '<code class="Code prettyprint">\</code>' is used as an escape character when the string is read +the immediately preceding character.</li> + +<li>A period followed by an asterisk ("<code class="Code prettyprint">.*</code>"). This matches any sequence of +0 or more characters.</li> +</ul> + +<p> +Because '<code class="Code prettyprint">\</code>' is used as an escape character when the string is read from XML (before it is parsed as a pattern), you will need to double-escape. -For example, a literal '<code class="Code prettyprint">*</code>' would be written as "<code class="Code prettyprint">\\*</code>" and a -literal '<code class="Code prettyprint">\</code>' would be written as "<code class="Code prettyprint">\\</code>". This is basically +For example, a literal '<code class="Code prettyprint">*</code>' would be written as "<code class="Code prettyprint">\\*</code>" and a +literal '<code class="Code prettyprint">\</code>' would be written as "<code class="Code prettyprint">\\</code>". This is basically the same as what you would need to write if constructing the string in Java code. -</p> -<p> -For more information on these types of patterns, see the descriptions of +</p> +<p> +For more information on these types of patterns, see the descriptions of <a href="/reference/android/os/PatternMatcher.html#PATTERN_LITERAL">PATTERN_LITERAL</a>, <a href="/reference/android/os/PatternMatcher.html#PATTERN_PREFIX">PATTERN_PREFIX</a>, and <a href="/reference/android/os/PatternMatcher.html#PATTERN_SIMPLE_GLOB">PATTERN_SIMPLE_GLOB</a> in the @@ -74,20 +74,20 @@ For more information on these types of patterns, see the descriptions of <dt><a name="permission"></a>{@code android:permission}</dt> <dd>The name of a permission that clients must have in order to read or write the -content provider's data. This attribute is a convenient way of setting a -single permission for both reading and writing. However, the -<code>readPermission</code> and +content provider's data. This attribute is a convenient way of setting a +single permission for both reading and writing. However, the +<code>readPermission</code> and <code>writePermission</code> attributes take precedence over this one. -</dd> +</dd> <dt><a name="readPermission"></a>{@code android:readPermission}</dt> <dd>A permission that clients must have in order to query the content provider. -</dd> +</dd> <dt><a name="writePermission"></a>{@code android:writePermission}</dt> <dd>A permission that clients must have in order to make changes to the data controlled by the content provider. -</dd> +</dd> diff --git a/docs/html/guide/topics/manifest/permission-group-element.jd b/docs/html/guide/topics/manifest/permission-group-element.jd index 3221d4b68c36..85452b534fcf 100644 --- a/docs/html/guide/topics/manifest/permission-group-element.jd +++ b/docs/html/guide/topics/manifest/permission-group-element.jd @@ -20,17 +20,17 @@ permission join the group through the {@code permissionGroup} attribute of the presented together in the user interface. <p> -Note that this element does not declare a permission itself, only a category in -which permissions can be placed. See the -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> element for element for information +Note that this element does not declare a permission itself, only a category in +which permissions can be placed. See the +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> element for element for information on declaring permissions and assigning them to groups. </p></dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="desc"></a>{@code android:description}</dt> -<dd>User-readable text that describes the group. The text should be -longer and more explanatory than the label. This attribute must be +<dd>User-readable text that describes the group. The text should be +longer and more explanatory than the label. This attribute must be set as a reference to a string resource. Unlike the {@code label} attribute, it cannot be a raw string.</dd> @@ -39,10 +39,10 @@ attribute, it cannot be a raw string.</dd> as a reference to a drawable resource containing the image definition.</dd> <dt><a name="label"></a>{@code android:label}</dt> -<dd>A user-readable name for the group. As a convenience, the label can -be directly set as a raw string while you're developing the application. -However, when the application is ready to be published, it should be set -as a reference to a string resource, so that it can be localized like other +<dd>A user-readable name for the group. As a convenience, the label can +be directly set as a raw string while you're developing the application. +However, when the application is ready to be published, it should be set +as a reference to a string resource, so that it can be localized like other strings in the user interface.</dd> <dt><a name="nm"></a>{@code android:name}</dt> diff --git a/docs/html/guide/topics/manifest/permission-tree-element.jd b/docs/html/guide/topics/manifest/permission-tree-element.jd index 21d7352331f3..cbfd72cd8465 100644 --- a/docs/html/guide/topics/manifest/permission-tree-element.jd +++ b/docs/html/guide/topics/manifest/permission-tree-element.jd @@ -14,7 +14,7 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Declares the base name for a tree of permissions. The application takes -ownership of all names within the tree. It can dynamically add new permissions +ownership of all names within the tree. It can dynamically add new permissions to the tree by calling <code>{@link android.content.pm.PackageManager#addPermission PackageManager.addPermission()}</code>. Names within the tree are separated by periods ('{@code .}'). For example, if the base name is {@code com.example.project.taxes}, permissions like the following might be @@ -25,30 +25,30 @@ added: <br/>{@code com.example.project.taxes.deductions.EXAGGERATE}</p> <p> -Note that this element does not declare a permission itself, only a -namespace in which further permissions can be placed. See the -<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +Note that this element does not declare a permission itself, only a +namespace in which further permissions can be placed. See the +<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> element for information on declaring permissions. <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="icon"></a>{@code android:icon}</dt> -<dd>An icon representing all the permissions in the tree. This attribute -must be set as a reference to a drawable resource containing the image +<dd>An icon representing all the permissions in the tree. This attribute +must be set as a reference to a drawable resource containing the image definition.</dd> <dt><a name="label"></a>{@code android:label}</dt> -<dd>A user-readable name for the group. As a convenience, the label can -be directly set as a raw string for quick and dirty programming. However, -when the application is ready to be published, it should be set as a -reference to a string resource, so that it can be localized like other +<dd>A user-readable name for the group. As a convenience, the label can +be directly set as a raw string for quick and dirty programming. However, +when the application is ready to be published, it should be set as a +reference to a string resource, so that it can be localized like other strings in the user interface.</dd> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name that's at the base of the permission tree. It serves as -a prefix to all permission names in the tree. Java-style scoping should -be used to ensure that the name is unique. The name must have more than -two period-separated segments in its path — for example, +<dd>The name that's at the base of the permission tree. It serves as +a prefix to all permission names in the tree. Java-style scoping should +be used to ensure that the name is unique. The name must have more than +two period-separated segments in its path — for example, {@code com.example.base} is OK, but {@code com.example} is not.</dd> </dl></dd> diff --git a/docs/html/guide/topics/manifest/provider-element.jd b/docs/html/guide/topics/manifest/provider-element.jd index 4b5c0c35bc2c..1947849e56f8 100644 --- a/docs/html/guide/topics/manifest/provider-element.jd +++ b/docs/html/guide/topics/manifest/provider-element.jd @@ -37,41 +37,41 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description"> - Declares a content provider component. A content provider is a subclass of - {@link android.content.ContentProvider} that supplies structured access to data managed by the - application. All content providers in your application must be defined in a + Declares a content provider component. A content provider is a subclass of + {@link android.content.ContentProvider} that supplies structured access to data managed by the + application. All content providers in your application must be defined in a {@code <provider>} element in the manifest file; otherwise, the system is unaware of them and doesn't run them. <p> You only declare content providers that are part of your application. Content providers in other applications that you use in your application should not be declared. - </p> + </p> <p> The Android system stores references to content providers according to an <b>authority</b> - string, part of the provider's <b>content URI</b>. For example, suppose you want to + string, part of the provider's <b>content URI</b>. For example, suppose you want to access a content provider that stores information about health care professionals. To do - this, you call the method + this, you call the method {@link android.content.ContentResolver#query ContentResolver.query()}, which among other arguments takes a URI that identifies the provider: - </p> + </p> <pre> content://com.example.project.healthcareprovider/nurses/rn </pre> <p> The <code>content:</code> <b>scheme</b> identifies the URI as a content URI pointing to - an Android content provider. The authority + an Android content provider. The authority <code>com.example.project.healthcareprovider</code> identifies the provider itself; the - Android system looks up the authority in its list of known providers and their authorities. - The substring <code>nurses/rn</code> is a <b>path</b>, which the content provider can use + Android system looks up the authority in its list of known providers and their authorities. + The substring <code>nurses/rn</code> is a <b>path</b>, which the content provider can use to identify subsets of the provider data. </p> <p> - Notice that when you define your provider in the <code><provider></code> element, you + Notice that when you define your provider in the <code><provider></code> element, you don't include the scheme or the path in the <code>android:name</code> argument, only the - authority. + authority. </p> <p> - For information on using and developing content providers, see the API Guide, + For information on using and developing content providers, see the API Guide, <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>. </p> </dd> @@ -82,8 +82,8 @@ content://com.example.project.healthcareprovider/nurses/rn <dt><a name="auth"></a>{@code android:authorities}</dt> <dd> A list of one or more URI authorities that identify data offered by the content provider. - Multiple authorities are listed by separating their names with a semicolon. - To avoid conflicts, authority names should use a Java-style naming convention + Multiple authorities are listed by separating their names with a semicolon. + To avoid conflicts, authority names should use a Java-style naming convention (such as {@code com.example.provider.cartoonprovider}). Typically, it's the name of the {@link android.content.ContentProvider} subclass that implements the provider <p> @@ -92,92 +92,92 @@ content://com.example.project.healthcareprovider/nurses/rn </dd> <dt><a name="enabled"></a>{@code android:enabled}</dt> - <dd>Whether or not the content provider can be instantiated by the system — - "{@code true}" if it can be, and "{@code false}" if not. The default value + <dd>Whether or not the content provider can be instantiated by the system — + "{@code true}" if it can be, and "{@code false}" if not. The default value is "{@code true}". <p> -The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all -application components, including content providers. The +The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all +application components, including content providers. The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <provider>} attributes must both be "{@code true}" (as they both -are by default) for the content provider to be enabled. If either is +are by default) for the content provider to be enabled. If either is "{@code false}", the provider is disabled; it cannot be instantiated. </p></dd> <dt><a name="exported"></a>{@code android:exported}</dt> <dd> Whether the content provider is available for other applications to use: - <ul> + <ul> <li> <code>true</code>: The provider is available to other applications. Any application can use the provider's content URI to access it, subject to the permissions specified for the provider. </li> <li> - <code>false</code>: The provider is not available to other applications. Set + <code>false</code>: The provider is not available to other applications. Set <code>android:exported="false"</code> to limit access to the provider to your applications. Only applications that have the same user ID (UID) as the provider will have access to it. </li> </ul> <p> - The default value is <code>"true"</code> for applications that set either + The default value is <code>"true"</code> for applications that set either <code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:minSdkVersion</a></code> - or -<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:targetSdkVersion</a></code> to + or +<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:targetSdkVersion</a></code> to <code>"16"</code> or lower. For applications that - set either of these attributes to <code>"17"</code> or higher, the default is + set either of these attributes to <code>"17"</code> or higher, the default is <code>"false"</code>. </p> <p> You can set <code>android:exported="false"</code> and still limit access to your - provider by setting permissions with the + provider by setting permissions with the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code> attribute. </p> -</dd> +</dd> <dt><a name="gprmsn"></a>{@code android:grantUriPermissions}</dt> -<dd>Whether or not those who ordinarily would not have permission to +<dd>Whether or not those who ordinarily would not have permission to access the content provider's data can be granted permission to do so, temporarily overcoming the restriction imposed by the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">readPermission</a></code>, -<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn">writePermission</a></code>, and -<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code> attributes -— -"{@code true}" if permission can be granted, and "{@code false}" if not. -If "{@code true}", permission can be granted to any of the content -provider's data. If "{@code false}", permission can be granted only -to the data subsets listed in -<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> subelements, +<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn">writePermission</a></code>, and +<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code> attributes +— +"{@code true}" if permission can be granted, and "{@code false}" if not. +If "{@code true}", permission can be granted to any of the content +provider's data. If "{@code false}", permission can be granted only +to the data subsets listed in +<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> subelements, if any. The default value is "{@code false}". <p> -Granting permission is a way of giving an application component one-time -access to data protected by a permission. For example, when an e-mail -message contains an attachment, the mail application may call upon the -appropriate viewer to open it, even though the viewer doesn't have general -permission to look at all the content provider's data. +Granting permission is a way of giving an application component one-time +access to data protected by a permission. For example, when an e-mail +message contains an attachment, the mail application may call upon the +appropriate viewer to open it, even though the viewer doesn't have general +permission to look at all the content provider's data. </p> -<p> -In such cases, permission is granted by -<code>{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}</code> -and <code>{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}</code> -flags in the Intent object that activates the component. For example, the -mail application might put {@code FLAG_GRANT_READ_URI_PERMISSION} in the -Intent passed to {@code Context.startActivity()}. The permission is specific -to the URI in the Intent. +<p> +In such cases, permission is granted by +<code>{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}</code> +and <code>{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}</code> +flags in the Intent object that activates the component. For example, the +mail application might put {@code FLAG_GRANT_READ_URI_PERMISSION} in the +Intent passed to {@code Context.startActivity()}. The permission is specific +to the URI in the Intent. </p> <p> If you enable this feature, either by setting this attribute to "{@code true}" -or by defining <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> -subelements, you must call -<code>{@link android.content.Context#revokeUriPermission -Context.revokeUriPermission()}</code> when a covered URI is deleted from +or by defining <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> +subelements, you must call +<code>{@link android.content.Context#revokeUriPermission +Context.revokeUriPermission()}</code> when a covered URI is deleted from the provider. </p> @@ -187,52 +187,52 @@ element. </p></dd> <dt><a name="icon"></a>{@code android:icon}</dt> -<dd>An icon representing the content provider. -This attribute must be set as a reference to a drawable resource containing -the image definition. If it is not set, the icon specified for the application -as a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +<dd>An icon representing the content provider. +This attribute must be set as a reference to a drawable resource containing +the image definition. If it is not set, the icon specified for the application +as a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#icon">icon</a></code> attribute).</dd> <dt><a name="init"></a>{@code android:initOrder}</dt> -<dd>The order in which the content provider should be instantiated, -relative to other content providers hosted by the same process. -When there are dependencies among content providers, setting this -attribute for each of them ensures that they are created in the order -required by those dependencies. The value is a simple integer, +<dd>The order in which the content provider should be instantiated, +relative to other content providers hosted by the same process. +When there are dependencies among content providers, setting this +attribute for each of them ensures that they are created in the order +required by those dependencies. The value is a simple integer, with higher numbers being initialized first.</dd> <dt><a name="label"></a>{@code android:label}</dt> -<dd>A user-readable label for the content provided. -If this attribute is not set, the label set for the application as a whole is -used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<dd>A user-readable label for the content provided. +If this attribute is not set, the label set for the application as a whole is +used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#label">label</a></code> attribute). <p> The label should be set as a reference to a string resource, so that -it can be localized like other strings in the user interface. -However, as a convenience while you're developing the application, +it can be localized like other strings in the user interface. +However, as a convenience while you're developing the application, it can also be set as a raw string. </p></dd> <dt><a name="multi"></a>{@code android:multiprocess}</dt> -<dd>Whether or not an instance of the content provider can be created in +<dd>Whether or not an instance of the content provider can be created in every client process — "{@code true}" if instances can run in multiple processes, and "{@code false}" if not. The default value is "{@code false}". <p> -Normally, a content provider is instantiated in the process of the -application that defined it. However, if this flag is set to "{@code true}", -the system can create an instance in every process where there's a client -that wants to interact with it, thus avoiding the overhead of interprocess +Normally, a content provider is instantiated in the process of the +application that defined it. However, if this flag is set to "{@code true}", +the system can create an instance in every process where there's a client +that wants to interact with it, thus avoiding the overhead of interprocess communication. </p></dd> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the class that implements the content provider, a subclass of -{@link android.content.ContentProvider}. This should be a fully qualified -class name (such as, "{@code com.example.project.TransportationProvider}"). -However, as a shorthand, if the first character of the name is a period, -it is appended to the package name specified in the +<dd>The name of the class that implements the content provider, a subclass of +{@link android.content.ContentProvider}. This should be a fully qualified +class name (such as, "{@code com.example.project.TransportationProvider}"). +However, as a shorthand, if the first character of the name is a period, +it is appended to the package name specified in the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. <p> @@ -242,58 +242,58 @@ There is no default. The name must be specified. <dt><a name="prmsn"></a>{@code android:permission}</dt> <dd>The name of a permission that clients must have to read or write the -content provider's data. This attribute is a convenient way of setting a -single permission for both reading and writing. However, the -<code><a href="#rprmsn">readPermission</a></code> and +content provider's data. This attribute is a convenient way of setting a +single permission for both reading and writing. However, the +<code><a href="#rprmsn">readPermission</a></code> and <code><a href="#wprmsn">writePermission</a></code> attributes take precedence -over this one. If the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">readPermission</a></code> +over this one. If the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">readPermission</a></code> attribute is also set, it controls access for querying the content provider. And if the <code><a href="#wprmsn">writePermission</a></code> attribute is set, it controls access for modifying the provider's data. <p> -For more information on permissions, see the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> -section in the introduction and a separate document, +For more information on permissions, see the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> +section in the introduction and a separate document, <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>. </p></dd> <dt><a name="proc"></a>{@code android:process}</dt> -<dd>The name of the process in which the content provider should run. Normally, -all components of an application run in the default process created for the -application. It has the same name as the application package. The -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> -attribute can set a different +<dd>The name of the process in which the content provider should run. Normally, +all components of an application run in the default process created for the +application. It has the same name as the application package. The +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> +attribute can set a different default for all components. But each component can override the default -with its own {@code process} attribute, allowing you to spread your +with its own {@code process} attribute, allowing you to spread your application across multiple processes. <p> -If the name assigned to this attribute begins with a colon (':'), a new -process, private to the application, is created when it's needed and +If the name assigned to this attribute begins with a colon (':'), a new +process, private to the application, is created when it's needed and the activity runs in that process. -If the process name begins with a lowercase character, the activity will run +If the process name begins with a lowercase character, the activity will run in a global process of that name, provided that it has permission to do so. -This allows components in different applications to share a process, reducing +This allows components in different applications to share a process, reducing resource usage. </p></dd> <dt><a name="rprmsn"></a>{@code android:readPermission}</dt> -<dd>A permission that clients must have to query the content provider. -See also the <code><a href="#prmsn">permission</a></code> and +<dd>A permission that clients must have to query the content provider. +See also the <code><a href="#prmsn">permission</a></code> and <code><a href="#wprmsn">writePermission</a></code> attributes.</dd> <dt><a name="sync"></a>{@code android:syncable}</dt> -<dd>Whether or not the data under the content provider's control -is to be synchronized with data on a server — "{@code true}" +<dd>Whether or not the data under the content provider's control +is to be synchronized with data on a server — "{@code true}" if it is to be synchronized, and "{@code false}" if not.</dd> <dt><a name="wprmsn"></a>{@code android:writePermission}</dt> -<dd>A permission that clients must have to make changes to the data -controlled by the content provider. -See also the <code><a href="#prmsn">permission</a></code> and +<dd>A permission that clients must have to make changes to the data +controlled by the content provider. +See also the <code><a href="#prmsn">permission</a></code> and <code><a href="#rprmsn">readPermission</a></code> attributes.</dd> </dl></dd> diff --git a/docs/html/guide/topics/manifest/receiver-element.jd b/docs/html/guide/topics/manifest/receiver-element.jd index 081a191c38e1..800ee8a6e4c7 100644 --- a/docs/html/guide/topics/manifest/receiver-element.jd +++ b/docs/html/guide/topics/manifest/receiver-element.jd @@ -24,14 +24,14 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Declares a broadcast receiver (a {@link android.content.BroadcastReceiver} -subclass) as one of the application's components. Broadcast receivers enable -applications to receive intents that are broadcast by the system or by other +subclass) as one of the application's components. Broadcast receivers enable +applications to receive intents that are broadcast by the system or by other applications, even when other components of the application are not running. <p> There are two ways to make a broadcast receiver known to the system: One is declare it in the manifest file with this element. The other is to create -the receiver dynamically in code and register it with the <code>{@link +the receiver dynamically in code and register it with the <code>{@link android.content.Context#registerReceiver Context.registerReceiver()}</code> method. See the {@link android.content.BroadcastReceiver} class description for more on dynamically created receivers. @@ -40,14 +40,14 @@ for more on dynamically created receivers. <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="enabled"></a>{@code android:enabled}</dt> -<dd>Whether or not the broadcast receiver can be instantiated by the system — -"{@code true}" if it can be, and "{@code false}" if not. The default value +<dd>Whether or not the broadcast receiver can be instantiated by the system — +"{@code true}" if it can be, and "{@code false}" if not. The default value is "{@code true}". <p> -The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all -application components, including broadcast receivers. The +The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all +application components, including broadcast receivers. The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <receiver>} attributes must both be "{@code true}" for the broadcast receiver to be enabled. If either is "{@code false}", it is @@ -55,72 +55,72 @@ disabled; it cannot be instantiated. </p></dd> <dt><a name="exported"></a>{@code android:exported}</dt> -<dd>Whether or not the broadcast receiver can receive messages from sources -outside its application — "{@code true}" if it can, and "{@code false}" -if not. If "{@code false}", the only messages the broadcast receiver can -receive are those sent by components of the same application or applications -with the same user ID. +<dd>Whether or not the broadcast receiver can receive messages from sources +outside its application — "{@code true}" if it can, and "{@code false}" +if not. If "{@code false}", the only messages the broadcast receiver can +receive are those sent by components of the same application or applications +with the same user ID. <p> -The default value depends on whether the broadcast receiver contains intent filters. +The default value depends on whether the broadcast receiver contains intent filters. The absence of any filters means that it can be invoked only by Intent objects that -specify its exact class name. This implies that the receiver is intended only for -application-internal use (since others would not normally know the class name). +specify its exact class name. This implies that the receiver is intended only for +application-internal use (since others would not normally know the class name). So in this case, the default value is "{@code false}". -On the other hand, the presence of at least one filter implies that the broadcast -receiver is intended to receive intents broadcast by the system or other applications, +On the other hand, the presence of at least one filter implies that the broadcast +receiver is intended to receive intents broadcast by the system or other applications, so the default value is "{@code true}". </p> <p> -This attribute is not the only way to limit a broadcast receiver's external exposure. -You can also use a permission to limit the external entities that can send it messages +This attribute is not the only way to limit a broadcast receiver's external exposure. +You can also use a permission to limit the external entities that can send it messages (see the <code><a href="{@docRoot}guide/topics/manifest/receiver-element.html#prmsn">permission</a></code> attribute). </p></dd> <dt><a name="icon"></a>{@code android:icon}</dt> -<dd>An icon representing the broadcast receiver. This attribute must be set -as a reference to a drawable resource containing the image definition. -If it is not set, the icon specified for the application as a whole is used -instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +<dd>An icon representing the broadcast receiver. This attribute must be set +as a reference to a drawable resource containing the image definition. +If it is not set, the icon specified for the application as a whole is used +instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#icon">icon</a></code> attribute). <p> -The broadcast receiver's icon — whether set here or by the -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the -default icon for all the receiver's intent filters (see the -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#icon">icon</a></code> attribute). +The broadcast receiver's icon — whether set here or by the +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the +default icon for all the receiver's intent filters (see the +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#icon">icon</a></code> attribute). </p></dd> <dt><a name="label"></a>{@code android:label}</dt> -<dd>A user-readable label for the broadcast receiver. If this attribute is not -set, the label set for the application as a whole is -used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<dd>A user-readable label for the broadcast receiver. If this attribute is not +set, the label set for the application as a whole is +used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#label">label</a></code> attribute). <p> -The broadcast receiver's label — whether set here or by the -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the -default label for all the receiver's intent filters (see the -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#label">label</a></code> attribute). +The broadcast receiver's label — whether set here or by the +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the +default label for all the receiver's intent filters (see the +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#label">label</a></code> attribute). </p> <p> The label should be set as a reference to a string resource, so that -it can be localized like other strings in the user interface. -However, as a convenience while you're developing the application, +it can be localized like other strings in the user interface. +However, as a convenience while you're developing the application, it can also be set as a raw string. </p></dd> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the class that implements the broadcast receiver, a subclass of -{@link android.content.BroadcastReceiver}. This should be a fully qualified -class name (such as, "{@code com.example.project.ReportReceiver}"). However, -as a shorthand, if the first character of the name is a period (for example, -"{@code . ReportReceiver}"), it is appended to the package name specified in -the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. +<dd>The name of the class that implements the broadcast receiver, a subclass of +{@link android.content.BroadcastReceiver}. This should be a fully qualified +class name (such as, "{@code com.example.project.ReportReceiver}"). However, +as a shorthand, if the first character of the name is a period (for example, +"{@code . ReportReceiver}"), it is appended to the package name specified in +the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. <p>Once you publish your application, you <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">should not @@ -132,38 +132,38 @@ There is no default. The name must be specified. </p></dd> <dt><a name="prmsn"></a>{@code android:permission}</dt> -<dd>The name of a permission that broadcasters must have to send a +<dd>The name of a permission that broadcasters must have to send a message to the broadcast receiver. -If this attribute is not set, the permission set by the +If this attribute is not set, the permission set by the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#prmsn">permission</a></code> attribute applies -to the broadcast receiver. If neither attribute is set, the receiver +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#prmsn">permission</a></code> attribute applies +to the broadcast receiver. If neither attribute is set, the receiver is not protected by a permission. <p> -For more information on permissions, see the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> -section in the introduction and a separate document, +For more information on permissions, see the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> +section in the introduction and a separate document, <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>. </p></dd> <dt><a name="proc"></a>{@code android:process}</dt> -<dd>The name of the process in which the broadcast receiver should run. -Normally, all components of an application run in the default process created -for the application. It has the same name as the application package. The -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> attribute can set a different +<dd>The name of the process in which the broadcast receiver should run. +Normally, all components of an application run in the default process created +for the application. It has the same name as the application package. The +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> attribute can set a different default for all components. But each component can override the default -with its own {@code process} attribute, allowing you to spread your +with its own {@code process} attribute, allowing you to spread your application across multiple processes. <p> -If the name assigned to this attribute begins with a colon (':'), a new -process, private to the application, is created when it's needed and +If the name assigned to this attribute begins with a colon (':'), a new +process, private to the application, is created when it's needed and the broadcast receiver runs in that process. -If the process name begins with a lowercase character, the receiver will run +If the process name begins with a lowercase character, the receiver will run in a global process of that name, provided that it has permission to do so. -This allows components in different applications to share a process, reducing +This allows components in different applications to share a process, reducing resource usage. </p></dd> </dl></dd> diff --git a/docs/html/guide/topics/manifest/service-element.jd b/docs/html/guide/topics/manifest/service-element.jd index fca85f5793c8..9197a7f03435 100644 --- a/docs/html/guide/topics/manifest/service-element.jd +++ b/docs/html/guide/topics/manifest/service-element.jd @@ -25,108 +25,108 @@ parent.link=manifest-intro.html <dt>description:</dt> <dd itemprop="description">Declares a service (a {@link android.app.Service} subclass) as one -of the application's components. Unlike activities, services lack a -visual user interface. They're used to implement long-running background -operations or a rich communications API that can be called by other +of the application's components. Unlike activities, services lack a +visual user interface. They're used to implement long-running background +operations or a rich communications API that can be called by other applications. <p> All services must be represented by {@code <service>} elements in -the manifest file. Any that are not declared there will not be seen +the manifest file. Any that are not declared there will not be seen by the system and will never be run. </p></dd> <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="enabled"></a>{@code android:enabled}</dt> -<dd>Whether or not the service can be instantiated by the system — -"{@code true}" if it can be, and "{@code false}" if not. The default value +<dd>Whether or not the service can be instantiated by the system — +"{@code true}" if it can be, and "{@code false}" if not. The default value is "{@code true}". <p> -The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all -application components, including services. The +The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all +application components, including services. The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <service>} attributes must both be "{@code true}" (as they both -are by default) for the service to be enabled. If either is +are by default) for the service to be enabled. If either is "{@code false}", the service is disabled; it cannot be instantiated. </p></dd> <dt><a name="exported"></a>{@code android:exported}</dt> -<dd>Whether or not components of other applications can invoke -the service or interact with it — "{@code true}" if they can, and -"{@code false}" if not. When the value is "{@code false}", only -components of the same application or applications +<dd>Whether or not components of other applications can invoke +the service or interact with it — "{@code true}" if they can, and +"{@code false}" if not. When the value is "{@code false}", only +components of the same application or applications with the same user ID can start the service or bind to it. <p> -The default value depends on whether the service contains intent filters. The -absence of any filters means that it can be invoked only by specifying -its exact class name. This implies that the service is intended only for -application-internal use (since others would not know the class name). So in +The default value depends on whether the service contains intent filters. The +absence of any filters means that it can be invoked only by specifying +its exact class name. This implies that the service is intended only for +application-internal use (since others would not know the class name). So in this case, the default value is "{@code false}". -On the other hand, the presence of at least one filter implies that the service +On the other hand, the presence of at least one filter implies that the service is intended for external use, so the default value is "{@code true}". </p> <p> This attribute is not the only way to limit the exposure of a service to other -applications. You can also use a permission to limit the external entities that -can interact with the service (see the <code><a href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">permission</a></code> +applications. You can also use a permission to limit the external entities that +can interact with the service (see the <code><a href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">permission</a></code> attribute). </p></dd> <dt><a name="icon"></a>{@code android:icon}</dt> -<dd>An icon representing the service. This attribute must be set as a -reference to a drawable resource containing the image definition. -If it is not set, the icon specified for the application -as a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> +<dd>An icon representing the service. This attribute must be set as a +reference to a drawable resource containing the image definition. +If it is not set, the icon specified for the application +as a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#icon">icon</a></code> attribute). </p> <p> -The service's icon — whether set here or by the -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the -default icon for all the service's intent filters (see the -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's +The service's icon — whether set here or by the +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the +default icon for all the service's intent filters (see the +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#icon">icon</a></code> attribute). -</p></dd> +</p></dd> <dt><a name="isolated"></a>{@code android:isolatedProcess}</dt> <dd>If set to true, this service will run under a special process that is isolated from the rest of the system and has no permissions of its own. - The only communication with it is through the Service API + The only communication with it is through the Service API (binding and starting).</dd> <dt><a name="label"></a>{@code android:label}</dt> -<dd>A name for the service that can be displayed to users. -If this attribute is not set, the label set for the application as a whole is -used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<dd>A name for the service that can be displayed to users. +If this attribute is not set, the label set for the application as a whole is +used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#label">label</a></code> attribute). <p> -The service's label — whether set here or by the -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the -default label for all the service's intent filters (see the -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#label">label</a></code> attribute). +The service's label — whether set here or by the +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element — is also the +default label for all the service's intent filters (see the +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#label">label</a></code> attribute). </p> <p> The label should be set as a reference to a string resource, so that -it can be localized like other strings in the user interface. -However, as a convenience while you're developing the application, +it can be localized like other strings in the user interface. +However, as a convenience while you're developing the application, it can also be set as a raw string. </p></dd> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the {@link android.app.Service} subclass that implements -the service. This should be a fully qualified class name (such as, -"{@code com.example.project.RoomService}"). However, as a shorthand, if +<dd>The name of the {@link android.app.Service} subclass that implements +the service. This should be a fully qualified class name (such as, +"{@code com.example.project.RoomService}"). However, as a shorthand, if the first character of the name is a period (for example, "{@code .RoomService}"), -it is appended to the package name specified in the -<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. +it is appended to the package name specified in the +<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> element. <p>Once you publish your application, you <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">should not @@ -138,8 +138,8 @@ There is no default. The name must be specified. </p></dd> <dt><a name="prmsn"></a>{@code android:permission}</dt> -<dd>The name of a permission that an entity must have in order to -launch the service or bind to it. If a caller of +<dd>The name of a permission that an entity must have in order to +launch the service or bind to it. If a caller of <code>{@link android.content.Context#startService startService()}</code>, <code>{@link android.content.Context#bindService bindService()}</code>, or <code>{@link android.content.Context#stopService stopService()}</code>, @@ -147,38 +147,38 @@ has not been granted this permission, the method will not work and the Intent object will not be delivered to the service. <p> -If this attribute is not set, the permission set by the +If this attribute is not set, the permission set by the <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#prmsn">permission</a></code> +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#prmsn">permission</a></code> attribute applies to the service. If neither attribute is set, the service is not protected by a permission. </p> <p> -For more information on permissions, see the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a> -section in the introduction and a separate document, +For more information on permissions, see the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a> +section in the introduction and a separate document, <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>. </p></dd> <dt><a name="proc"></a>{@code android:process}</dt> -<dd>The name of the process where the service is to run. Normally, -all components of an application run in the default process created for the -application. It has the same name as the application package. The -<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's -<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> -attribute can set a different +<dd>The name of the process where the service is to run. Normally, +all components of an application run in the default process created for the +application. It has the same name as the application package. The +<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element's +<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> +attribute can set a different default for all components. But component can override the default -with its own {@code process} attribute, allowing you to spread your +with its own {@code process} attribute, allowing you to spread your application across multiple processes. <p> -If the name assigned to this attribute begins with a colon (':'), a new -process, private to the application, is created when it's needed and +If the name assigned to this attribute begins with a colon (':'), a new +process, private to the application, is created when it's needed and the service runs in that process. -If the process name begins with a lowercase character, the service will run +If the process name begins with a lowercase character, the service will run in a global process of that name, provided that it has permission to do so. -This allows components in different applications to share a process, reducing +This allows components in different applications to share a process, reducing resource usage. </p></dd> </dl></dd> diff --git a/docs/html/guide/topics/manifest/supports-gl-texture-element.jd b/docs/html/guide/topics/manifest/supports-gl-texture-element.jd index ab751c217f05..a72fc818b74b 100644 --- a/docs/html/guide/topics/manifest/supports-gl-texture-element.jd +++ b/docs/html/guide/topics/manifest/supports-gl-texture-element.jd @@ -3,16 +3,16 @@ parent.title=The AndroidManifest.xml File parent.link=manifest-intro.html @jd:body - <div class="sidebox-wrapper"> + <div class="sidebox-wrapper"> <div class="sidebox"> - <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> - <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> + <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> + <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> <p style="padding-top:1em;">Google Play filters applications according to the texture compression formats that they support, to ensure that they can be installed only on devices that can handle their textures properly. You can use texture compression filtering as a way of targeting specific device types, based on GPU platform.</p> - + <p style="margin-top:1em;">For important information about how Google Play uses <code><supports-gl-texture></code> elements as the basis for filtering, please read <a href="#market-texture-filtering">Google diff --git a/docs/html/guide/topics/manifest/supports-screens-element.jd b/docs/html/guide/topics/manifest/supports-screens-element.jd index a4546fa98f12..ce2bb8d20fd0 100644 --- a/docs/html/guide/topics/manifest/supports-screens-element.jd +++ b/docs/html/guide/topics/manifest/supports-screens-element.jd @@ -74,7 +74,7 @@ screens.</p> transition from Android 1.5 to 1.6, when support for multiple screens was first introduced. You should not use it.</p> </dd> - + <dt><a name="small"></a>{@code android:smallScreens}</dt> <dd>Indicates whether the application supports smaller screen form-factors. A small screen is defined as one with a smaller aspect ratio than @@ -84,14 +84,14 @@ should not use it.</p> the platform can do to make such an application work on a smaller screen. This is {@code "true"} by default. </dd> - + <dt><a name="normal"></a>{@code android:normalScreens}</dt> <dd>Indicates whether an application supports the "normal" screen form-factors. Traditionally this is an HVGA medium density screen, but WQVGA low density and WVGA high density are also considered to be normal. This attribute is "true" by default. </dd> - + <dt><a name="large"></a>{@code android:largeScreens}</dt> <dd>Indicates whether the application supports larger screen form-factors. A large screen is defined as a screen that is significantly larger @@ -116,7 +116,7 @@ generally enable <a href="{@docRoot}guide/practices/screen-compat-mode.html">scr compatibility mode</a>.</p> <p>This attribute was introduced in API level 9.</p> </dd> - + <dt><a name="any"></a>{@code android:anyDensity}</dt> <dd>Indicates whether the application includes resources to accommodate any screen density. @@ -127,14 +127,14 @@ is if your app directly manipulates bitmaps (see the <a href="{@docRoot}guide/practices/screens_support.html#DensityConsiderations">Supporting Multiple Screens</a> document for more information).</p> </dd> - + <dt id="requiresSmallest">{@code android:requiresSmallestWidthDp}</dt> <dd>Specifies the minimum smallestWidth required. The smallestWidth is the shortest dimension of the screen space (in {@code dp} units) that must be available to your application UI—that is, the shortest of the available screen's two dimensions. So, in order for a device to be considered compatible with your application, the device's smallestWidth must be equal to or greater than this value. (Usually, the value you supply for this is the "smallest width" that your layout supports, -regardless of the screen's current orientation.) +regardless of the screen's current orientation.) <p>For example, a typical handset screen has a smallestWidth of 320dp, a 7" tablet has a smallestWidth of 600dp, and a 10" tablet has a smallestWidth of 720dp. These values are generally @@ -209,7 +209,7 @@ screens with a 320dp width, so screen compatibility mode is not applied if your android:largestWidthLimitDp} is larger than 320.</p> <p>This attribute was introduced in API level 13.</p> </dd> - + </dl></dd> diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd index 5d163c0d5d56..06703486e914 100755 --- a/docs/html/guide/topics/manifest/uses-feature-element.jd +++ b/docs/html/guide/topics/manifest/uses-feature-element.jd @@ -33,7 +33,7 @@ page.tags=filtering,features,google play filters,permissions <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> <p style="padding-top:1em;">Google Play uses the <code><uses-feature></code> elements declared in your app manifest to filter your app from devices - that do not meet it's hardware and software feature requirements. </p> + that do not meet its hardware and software feature requirements. </p> <p style="margin-top:1em;">By specifying the features that your application requires, you enable Google Play to present your application only to users whose @@ -150,23 +150,21 @@ device compatibility.</p> <dd> Boolean value that indicates whether the application requires the feature specified in <code>android:name</code>. - </dd> -</dl> -<ul> -<li>When you declare <code>android:required="true"</code> for a feature, -you are specifying that the application <em>cannot function, or is not -designed to function</em>, when the specified feature is not present on the -device. </li> + <ul> + <li>When you declare <code>android:required="true"</code> for a feature, + you are specifying that the application <em>cannot function, or is not + designed to function</em>, when the specified feature is not present on the + device. </li> -<li>When you declare <code>android:required="false"</code> for a feature, it -means that the application <em>prefers to use the feature</em> if present on -the device, but that it <em>is designed to function without the specified -feature</em>, if necessary. </li> + <li>When you declare <code>android:required="false"</code> for a feature, it + means that the application <em>prefers to use the feature</em> if present on + the device, but that it <em>is designed to function without the specified + feature</em>, if necessary. </li> -</ul> + </ul> -<p>The default value for <code>android:required</code> if not declared is -<code>"true"</code>.</p> + <p>The default value for <code>android:required</code> if not declared is + <code>"true"</code>.</p> </dd> <dt><a name="glEsVersion"></a><code>android:glEsVersion</code></dt> diff --git a/docs/html/guide/topics/manifest/uses-library-element.jd b/docs/html/guide/topics/manifest/uses-library-element.jd index aa7ca8287eda..f8d8e62faf58 100644 --- a/docs/html/guide/topics/manifest/uses-library-element.jd +++ b/docs/html/guide/topics/manifest/uses-library-element.jd @@ -3,10 +3,10 @@ parent.title=The AndroidManifest.xml File parent.link=manifest-intro.html @jd:body -<div class="sidebox-wrapper"> +<div class="sidebox-wrapper"> <div class="sidebox"> - <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> - <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> + <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> + <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> <p style="padding-top:1em;">Google Play uses the <uses-library> elements declared in your app manifest to filter your app from devices that do not meet it's library requirements. For more information about filtering, see the topic diff --git a/docs/html/guide/topics/manifest/uses-permission-element.jd b/docs/html/guide/topics/manifest/uses-permission-element.jd index 32fe21eb89ea..03a0dc15d75f 100644 --- a/docs/html/guide/topics/manifest/uses-permission-element.jd +++ b/docs/html/guide/topics/manifest/uses-permission-element.jd @@ -5,10 +5,10 @@ parent.link=manifest-intro.html <dl class="xml"> -<div class="sidebox-wrapper"> +<div class="sidebox-wrapper"> <div class="sidebox"> -<img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> -<p style="color:#669999;padding-top:1em;">Google Play Filtering</p> +<img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> +<p style="color:#669999;padding-top:1em;">Google Play Filtering</p> <p style="clear:left;">In some cases, the permissions that you request through <code><uses-permission></code> can affect how @@ -43,24 +43,24 @@ href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-feat <dt>description:</dt> <dd itemprop="description">Requests a permission that the application must be granted in -order for it to operate correctly. Permissions are granted by the user when the +order for it to operate correctly. Permissions are granted by the user when the application is installed (on devices running Android 5.1 and lower) or while the app is running (on devices running Android 6.0 and higher). <p> -For more information on permissions, see the -<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a></code> +For more information on permissions, see the +<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a></code> section in the introduction and the separate <a href="{@docRoot}guide/topics/security/permissions.html">System Permissions</a> API guide. -A list of permissions defined by the base platform can be found at +A list of permissions defined by the base platform can be found at {@link android.Manifest.permission android.Manifest.permission}. <dt>attributes:</dt> <dd><dl class="attr"> <dt><a name="nm"></a>{@code android:name}</dt> -<dd>The name of the permission. It can be a permission defined by the -application with the <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> -element, a permission defined by another application, or one of the +<dd>The name of the permission. It can be a permission defined by the +application with the <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> +element, a permission defined by another application, or one of the standard system permissions (such as {@link android.Manifest.permission#CAMERA "android.permission.CAMERA"} or {@link android.Manifest.permission#READ_CONTACTS diff --git a/docs/html/guide/topics/media/index.jd b/docs/html/guide/topics/media/index.jd index a750c9a8809f..c66ab309515c 100644 --- a/docs/html/guide/topics/media/index.jd +++ b/docs/html/guide/topics/media/index.jd @@ -1,6 +1,6 @@ page.title=Media and Camera page.landing=true -page.landing.intro=Add video, audio, and photo capabilities to your app with Android's robust APIs for playing and recording media. +page.landing.intro=Add video, audio, and photo capabilities to your app with Android's robust APIs for playing and recording media. page.landing.image= @jd:body diff --git a/docs/html/guide/topics/media/jet/jetcreator_manual.jd b/docs/html/guide/topics/media/jet/jetcreator_manual.jd index 214c79eed7b3..c2df25b1a435 100644 --- a/docs/html/guide/topics/media/jet/jetcreator_manual.jd +++ b/docs/html/guide/topics/media/jet/jetcreator_manual.jd @@ -21,7 +21,7 @@ format, that respond in real-time to game play events and user interaction.</p> <p>JET works in conjunction with SONiVOX's Embedded Audio Synthesizer (EAS) which is the MIDI playback device for Android. Both the -JET and EAS engines are integrated into the Android embedded platform through the +JET and EAS engines are integrated into the Android embedded platform through the {@link android.media.JetPlayer} class, as well as inherent in the JET Creator application. As such, the JET content author can be sure that the playback will sound exactly the same in both the JET Creator @@ -387,34 +387,34 @@ JET Creator projects to other people.</p> you first launch JET Creator you are presented with an open dialog like the following.</p> - + <p><img border=0 width=450 height=285 src="{@docRoot}images/jet/jc_open_dlg.png" </p> - - + + <p> <b>Open</b> will open an existing .jtc (JET Creator file) file. Use the browser button to browse to the directory where you have saved your .jtc file.</p> - + <p> <b>New</b> will create a new .jtc file.</p> - + <p> <b>Import</b> will import a JET Archive (.zip) file.</p> - + <p> <b>Cancel</b> will cancel the dialog and exit the application.</p> - - + + <h1>5 Main Window </h1> @@ -457,16 +457,16 @@ Creator Main Window<o:p></o:p></i></p> <p>The buttons along the left side of main window do the following:</p> -<p>Add: +<p>Add: Displays the segment or event window for adding a new segment or event</p> -<p>Revise: +<p>Revise: Displays the segment or event window for updating an existing segment or event</p> -<p>Delete: +<p>Delete: Deletes the selected segment or event (will ask for confirmation)</p> -<p>Move: +<p>Move: Displays the move window which allows you to move selected segments or events in time</p> @@ -476,11 +476,11 @@ in time</p> <p>Dequeue All: Dequeues (deselects) all segments</p> -<p>Play: +<p>Play: Starts playback of all queued segments. This button changes to Stop if any segments are playing</p> -<p>Audition: +<p>Audition: Displays the Audition window (see below)</p> diff --git a/docs/html/guide/topics/media/jetplayer.jd b/docs/html/guide/topics/media/jetplayer.jd index f3d55f90f4ae..0f3212188c6f 100644 --- a/docs/html/guide/topics/media/jetplayer.jd +++ b/docs/html/guide/topics/media/jetplayer.jd @@ -1,5 +1,5 @@ page.title=JetPlayer -parent.title=Multimedia and Camera +parent.title=Multimedia and Camera parent.link=index.html @jd:body diff --git a/docs/html/guide/topics/processes/process-lifecycle.jd b/docs/html/guide/topics/processes/process-lifecycle.jd index 0380f945aef0..47ca1ec8912b 100644 --- a/docs/html/guide/topics/processes/process-lifecycle.jd +++ b/docs/html/guide/topics/processes/process-lifecycle.jd @@ -48,7 +48,7 @@ following conditions hold: at the top of the screen that the user is interacting with (its {@link android.app.Activity#onResume} method has been called).</li> <li> It has a {@link android.content.BroadcastReceiver} that is currently running - (its {@link android.content.BroadcastReceiver#onReceive + (its {@link android.content.BroadcastReceiver#onReceive BroadcastReceiver.onReceive()} method is executing).</li> <li>It has a {@link android.app.Service} that is currently executing code in one of its callbacks ({@link android.app.Service#onCreate Service.onCreate()}, diff --git a/docs/html/guide/topics/providers/calendar-provider.jd b/docs/html/guide/topics/providers/calendar-provider.jd index 3cd4511de9b0..485f3c167630 100644 --- a/docs/html/guide/topics/providers/calendar-provider.jd +++ b/docs/html/guide/topics/providers/calendar-provider.jd @@ -42,7 +42,7 @@ page.title=Calendar Provider <li><a href="#intent-view">Using intents to view calendar data</a></li> </ol> </li> - + <li><a href="#sync-adapter">Sync Adapters</a></li> </ol> @@ -63,8 +63,8 @@ operations on calendars, events, attendees, reminders, and so on.</p> <p>The Calender Provider API can be used by applications and sync adapters. The rules vary depending on what type of program is making the calls. This document -focuses primarily on using the Calendar Provider API as an application. For -a discussion of how sync adapters are different, see +focuses primarily on using the Calendar Provider API as an application. For +a discussion of how sync adapters are different, see <a href="#sync-adapter">Sync Adapters</a>.</p> @@ -79,17 +79,17 @@ nor does it need to provide a user interface to view or create events.</p> <h2 id="overview">Basics</h2> -<p><a href="{@docRoot}guide/topics/providers/content-providers.html">Content providers</a> store data and make it accessible to +<p><a href="{@docRoot}guide/topics/providers/content-providers.html">Content providers</a> store data and make it accessible to applications. The content providers offered by the Android platform (including the Calendar Provider) typically expose data as a set of tables based on a relational database model, where each row is a record and each column is data of a particular type and meaning. Through the Calendar Provider API, applications and sync adapters can get read/write access to the database tables that hold a user's calendar data.</p> -<p>Every content provider exposes a public URI (wrapped as a -{@link android.net.Uri} +<p>Every content provider exposes a public URI (wrapped as a +{@link android.net.Uri} object) that uniquely identifies its data set. A content provider that controls - multiple data sets (multiple tables) exposes a separate URI for each one. All + multiple data sets (multiple tables) exposes a separate URI for each one. All URIs for providers begin with the string "content://". This identifies the data as being controlled by a content provider. The Calendar Provider defines constants for the URIs for each of its classes (tables). These @@ -113,26 +113,26 @@ main tables and the fields that link them to each other.</p> </tr> <tr> <td><p>{@link android.provider.CalendarContract.Calendars}</p></td> - - <td>This table holds + + <td>This table holds the calendar-specific information. Each row in this table contains the details for a single calendar, such as the name, color, sync information, and so on.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Events}</td> - + <td>This table holds the event-specific information. Each row in this table has the information for a single event—for example, event title, location, start time, end time, and so on. The event can occur one-time or can recur multiple times. Attendees, -reminders, and extended properties are stored in separate tables. -They each have an {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +reminders, and extended properties are stored in separate tables. +They each have an {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} that references the {@link android.provider.BaseColumns#_ID} in the Events table.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances}</td> - + <td>This table holds the start and end time for each occurrence of an event. Each row in this table represents a single event occurrence. For one-time events there is a 1:1 mapping @@ -141,7 +141,7 @@ of instances to events. For recurring events, multiple rows are automatically </tr> <tr> <td>{@link android.provider.CalendarContract.Attendees}</td> - + <td>This table holds the event attendee (guest) information. Each row represents a single guest of an event. It specifies the type of guest and the guest's attendance response @@ -149,17 +149,17 @@ for the event.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Reminders}</td> - + <td>This table holds the alert/notification data. Each row represents a single alert for an event. An event can have multiple reminders. The maximum number of reminders per event is -specified in -{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, +specified in +{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS}, which is set by the sync adapter that owns the given calendar. Reminders are specified in minutes before the event and have a method that determines how the user will be alerted.</td> </tr> - + </table> <p>The Calendar Provider API is designed to be flexible and powerful. At the @@ -178,9 +178,9 @@ Intents</a>.</p> <li><strong>Sync adapters.</strong> A sync adapter synchronizes the calendar data -on a user's device with another server or data source. In the +on a user's device with another server or data source. In the {@link android.provider.CalendarContract.Calendars} and -{@link android.provider.CalendarContract.Events} tables, +{@link android.provider.CalendarContract.Events} tables, there are columns that are reserved for the sync adapters to use. The provider and applications should not modify them. In fact, they are not visible unless they are accessed as a sync adapter. For more information about @@ -209,9 +209,9 @@ to delete, insert or update calendar data:</p> <h2 id="calendar">Calendars Table</h2> -<p>The {@link android.provider.CalendarContract.Calendars} table contains details +<p>The {@link android.provider.CalendarContract.Calendars} table contains details for individual calendars. The following -Calendars columns are writable by both an application and a <a href="#sync-adapter">sync adapter</a>. +Calendars columns are writable by both an application and a <a href="#sync-adapter">sync adapter</a>. For a full list of supported fields, see the {@link android.provider.CalendarContract.Calendars} reference.</p> <table> @@ -229,7 +229,7 @@ For a full list of supported fields, see the </tr> <tr> <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td> - + <td>A boolean indicating whether the calendar is selected to be displayed. A value of 0 indicates that events associated with this calendar should not be shown. A value of 1 indicates that events associated with this calendar should @@ -240,7 +240,7 @@ android.provider.CalendarContract.Instances} table.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td> - + <td>A boolean indicating whether the calendar should be synced and have its events stored on the device. A value of 0 says do not sync this calendar or store its events on the device. A value of 1 says sync events for this calendar @@ -253,8 +253,8 @@ and store its events on the device.</td> <p>Here is an example that shows how to get the calendars that are owned by a particular user. For simplicity's sake, in this example the query operation is shown in the user interface thread ("main thread"). In practice, this should be done in an asynchronous -thread instead of on the main thread. For more discussion, see -<a href="{@docRoot}guide/components/loaders.html">Loaders</a>. If you are not just +thread instead of on the main thread. For more discussion, see +<a href="{@docRoot}guide/components/loaders.html">Loaders</a>. If you are not just reading data but modifying it, see {@link android.content.AsyncQueryHandler}. </p> @@ -268,18 +268,18 @@ public static final String[] EVENT_PROJECTION = new String[] { Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre> - + <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Why must you include ACCOUNT_TYPE?</h3> <p>If you query on a {@link android.provider.CalendarContract.Calendars#ACCOUNT_NAME -Calendars.ACCOUNT_NAME}, you must also include +Calendars.ACCOUNT_NAME}, you must also include {@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE} in the selection. That is because a given account is only considered unique given both its <code>ACCOUNT_NAME</code> and its @@ -289,7 +289,7 @@ account authenticator that was used when the account was registered with the android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} for calendars not associated with a device account. {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} accounts do not get -synced.</p> </div> </div> +synced.</p> </div> </div> <p> In the next part of the example, you construct your query. The selection @@ -301,59 +301,59 @@ calendars that have the <code>ACCOUNT_NAME</code> has viewed, not just calendars the user owns, omit the <code>OWNER_ACCOUNT</code>. The query returns a {@link android.database.Cursor} object that you can use to traverse the result set returned by the database -query. For more discussion of using queries in content providers, +query. For more discussion of using queries in content providers, see <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p> <pre>// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); -Uri uri = Calendars.CONTENT_URI; -String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" +Uri uri = Calendars.CONTENT_URI; +String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google", - "sampleuser@gmail.com"}; -// Submit the query and get a Cursor object back. + "sampleuser@gmail.com"}; +// Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre> <p>This next section uses the cursor to step through the result set. It uses the constants that were set up at the beginning of the example to return the values for each field.</p> - + <pre>// Use the cursor to step through the returned records while (cur.moveToNext()) { long calID = 0; String displayName = null; String accountName = null; String ownerName = null; - + // Get the field values calID = cur.getLong(PROJECTION_ID_INDEX); displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX); accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX); ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX); - + // Do something with the values... ... } </pre> - + <h3 id="modify-calendar">Modifying a calendar</h3> <p>To perform an update of an calendar, you can provide the {@link android.provider.BaseColumns#_ID} of the calendar either as an appended ID to -the Uri +the Uri -({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) or as the first selection item. The selection should start with <code>"_id=?"</code>, and the first <code>selectionArg</code> should be the {@link -android.provider.BaseColumns#_ID} of the calendar. +android.provider.BaseColumns#_ID} of the calendar. You can also do updates by encoding the ID in the URI. This example changes a -calendar's display name using the -({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +calendar's display name using the +({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) approach:</p> <pre>private static final String DEBUG_TAG = "MyActivity"; @@ -375,7 +375,7 @@ an application needs to create a local calendar, it can do this by performing the calendar insertion as a sync adapter, using an {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} of {@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}. -{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} +{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} is a special account type for calendars that are not associated with a device account. Calendars of this type are not synced to a server. For a discussion of sync adapters, see <a href="#sync-adapter">Sync Adapters</a>.</p> @@ -434,7 +434,7 @@ android.provider.CalendarContract.Events} reference.</p> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td> - + <td>The duration of the event in <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a> format. For example, a value of <code>"PT1H"</code> states that the event @@ -445,41 +445,41 @@ duration of 2 weeks. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td> - + <td>A value of 1 indicates this event occupies the entire day, as defined by the local time zone. A value of 0 indicates it is a regular event that may start and end at any time during a day.</td> - + </tr> - - + + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td> - + <td>The recurrence rule for the event format. For example, <code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. You can find more examples <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">here</a>.</td> - + </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td> - <td>The recurrence dates for the event. - You typically use {@link android.provider.CalendarContract.EventsColumns#RDATE} - in conjunction with {@link android.provider.CalendarContract.EventsColumns#RRULE} + <td>The recurrence dates for the event. + You typically use {@link android.provider.CalendarContract.EventsColumns#RDATE} + in conjunction with {@link android.provider.CalendarContract.EventsColumns#RRULE} to define an aggregate set of repeating occurrences. For more discussion, see the <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">RFC5545 spec</a>.</td> </tr> - + <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td> - - <td>If this event counts as busy time or is free time that can be + + <td>If this event counts as busy time or is free time that can be scheduled over. </td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td> @@ -519,11 +519,11 @@ you're inserting an event through the {@link android.content.Intent#ACTION_INSERT INSERT} Intent, described in <a href="#intent-insert">Using an intent to insert an event</a>—in that scenario, a default time zone is supplied.</li> - + <li>For non-recurring events, you must include {@link android.provider.CalendarContract.EventsColumns#DTEND}. </li> - - + + <li>For recurring events, you must include a {@link android.provider.CalendarContract.EventsColumns#DURATION} in addition to {@link android.provider.CalendarContract.EventsColumns#RRULE} or {@link @@ -532,9 +532,9 @@ you're inserting an event through the {@link android.content.Intent#ACTION_INSERT INSERT} Intent, described in <a href="#intent-insert">Using an intent to insert an event</a>—in that scenario, you can use an {@link -android.provider.CalendarContract.EventsColumns#RRULE} in conjunction with {@link android.provider.CalendarContract.EventsColumns#DTSTART} and {@link android.provider.CalendarContract.EventsColumns#DTEND}, and the Calendar application +android.provider.CalendarContract.EventsColumns#RRULE} in conjunction with {@link android.provider.CalendarContract.EventsColumns#DTSTART} and {@link android.provider.CalendarContract.EventsColumns#DTEND}, and the Calendar application converts it to a duration automatically.</li> - + </ul> <p>Here is an example of inserting an event. This is being performed in the UI @@ -545,8 +545,8 @@ information, see {@link android.content.AsyncQueryHandler}.</p> <pre> long calID = 3; -long startMillis = 0; -long endMillis = 0; +long startMillis = 0; +long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); @@ -567,7 +567,7 @@ Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); -// +// // ... do something with event ID // //</pre> @@ -584,14 +584,14 @@ attendees or reminders to an event.</p> that you use an {@link android.content.Intent#ACTION_EDIT EDIT} Intent, as described in <a href="#intent-edit">Using an intent to edit an event</a>. However, if you need to, you can edit events directly. To perform an update of -an Event, you can provide the <code>_ID</code> of the +an Event, you can provide the <code>_ID</code> of the event either as an appended ID to the Uri ({@link -android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) -or as the first selection item. +android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}) +or as the first selection item. The selection should start with <code>"_id=?"</code>, and the first <code>selectionArg</code> should be the <code>_ID</code> of the event. You can also do updates using a selection with no ID. Here is an example of updating an -event. It changes the title of the event using the +event. It changes the title of the event using the {@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()} approach:</p> @@ -604,7 +604,7 @@ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri updateUri = null; // The new title for the event -values.put(Events.TITLE, "Kickboxing"); +values.put(Events.TITLE, "Kickboxing"); updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().update(updateUri, values, null, null); Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre> @@ -631,22 +631,22 @@ ContentValues values = new ContentValues(); Uri deleteUri = null; deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); int rows = getContentResolver().delete(deleteUri, null, null); -Log.i(DEBUG_TAG, "Rows deleted: " + rows); +Log.i(DEBUG_TAG, "Rows deleted: " + rows); </pre> <h2 id="attendees">Attendees Table</h2> <p>Each row of the {@link android.provider.CalendarContract.Attendees} table -represents a single attendee or guest of an event. Calling -{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} +represents a single attendee or guest of an event. Calling +{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} returns a list of attendees for the -event with the given {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}. -This {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +event with the given {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}. +This {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} must match the {@link -android.provider.BaseColumns#_ID} of a particular event.</p> +android.provider.BaseColumns#_ID} of a particular event.</p> <p>The following table lists the -writable fields. When inserting a new attendee, you must include all of them +writable fields. When inserting a new attendee, you must include all of them except <code>ATTENDEE_NAME</code>. </p> @@ -704,7 +704,7 @@ except <code>ATTENDEE_NAME</code>. <h3 id="add-attendees">Adding Attendees</h3> <p>Here is an example that adds a single attendee to an event. Note that the -{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} +{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} is required:</p> <pre> @@ -724,17 +724,17 @@ Uri uri = cr.insert(Attendees.CONTENT_URI, values); <h2 id="reminders">Reminders Table</h2> <p>Each row of the {@link android.provider.CalendarContract.Reminders} table -represents a single reminder for an event. Calling +represents a single reminder for an event. Calling {@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} returns a list of reminders for the -event with the given +event with the given {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}.</p> <p>The following table lists the writable fields for reminders. All of them must be included when inserting a new reminder. Note that sync adapters specify the types of reminders they support in the {@link -android.provider.CalendarContract.Calendars} table. See -{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} +android.provider.CalendarContract.Calendars} table. See +{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS} for details.</p> @@ -779,16 +779,16 @@ Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre> <h2 id="instances">Instances Table</h2> -<p>The +<p>The {@link android.provider.CalendarContract.Instances} table holds the start and end time for occurrences of an event. Each row in this table represents a single event occurrence. The instances table is not writable and only provides a way to query event occurrences. </p> -<p>The following table lists some of the fields you can query on for an instance. Note -that time zone is defined by -{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} -and +<p>The following table lists some of the fields you can query on for an instance. Note +that time zone is defined by +{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE} +and {@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p> @@ -807,18 +807,18 @@ and </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td> - + <td>The Julian end day of the instance, relative to the Calendar's time -zone. - +zone. + </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td> - + <td>The end minute of the instance measured from midnight in the Calendar's time zone.</td> - + </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td> @@ -826,16 +826,16 @@ Calendar's time zone.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td> - <td>The Julian start day of the instance, relative to the Calendar's time zone. + <td>The Julian start day of the instance, relative to the Calendar's time zone. </td> </tr> <tr> <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td> - + <td>The start minute of the instance measured from midnight, relative to the -Calendar's time zone. +Calendar's time zone. </td> - + </tr> </table> @@ -846,7 +846,7 @@ Calendar's time zone. in the URI. In this example, {@link android.provider.CalendarContract.Instances} gets access to the {@link android.provider.CalendarContract.EventsColumns#TITLE} field through its -implementation of the {@link android.provider.CalendarContract.EventsColumns} interface. +implementation of the {@link android.provider.CalendarContract.EventsColumns} interface. In other words, {@link android.provider.CalendarContract.EventsColumns#TITLE} is returned through a database view, not through querying the raw {@link @@ -859,7 +859,7 @@ public static final String[] INSTANCE_PROJECTION = new String[] { Instances.BEGIN, // 1 Instances.TITLE // 2 }; - + // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; @@ -874,7 +874,7 @@ long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2011, 10, 24, 8, 0); long endMillis = endTime.getTimeInMillis(); - + Cursor cur = null; ContentResolver cr = getContentResolver(); @@ -889,28 +889,28 @@ ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query -cur = cr.query(builder.build(), - INSTANCE_PROJECTION, - selection, - selectionArgs, +cur = cr.query(builder.build(), + INSTANCE_PROJECTION, + selection, + selectionArgs, null); - + while (cur.moveToNext()) { String title = null; long eventID = 0; - long beginVal = 0; - + long beginVal = 0; + // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); - - // Do something with the values. - Log.i(DEBUG_TAG, "Event: " + title); + + // Do something with the values. + Log.i(DEBUG_TAG, "Event: " + title); Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(beginVal); + calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); - Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); + Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime())); } }</pre> @@ -928,9 +928,9 @@ while (cur.moveToNext()) { <td><br> {@link android.content.Intent#ACTION_VIEW VIEW} <br></td> <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p> - You can also refer to the URI with -{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. -For an example of using this intent, see <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Using intents to view calendar data</a>. + You can also refer to the URI with +{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}. +For an example of using this intent, see <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Using intents to view calendar data</a>. </td> <td>Open calendar to the time specified by <code><ms_since_epoch></code>.</td> @@ -941,11 +941,11 @@ For an example of using this intent, see <a href="{@docRoot}guide/topics/provide </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - You can also refer to the URI with -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + You can also refer to the URI with +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. For an example of using this intent, see <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Using intents to view calendar data</a>. - + </td> <td>View the event specified by <code><event_id></code>.</td> @@ -958,12 +958,12 @@ For an example of using this intent, see <a href="{@docRoot}guide/topics/provide <tr> <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td> <td><p><code>content://com.android.calendar/events/<event_id></code></p> - - You can also refer to the URI with -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + You can also refer to the URI with +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. For an example of using this intent, see <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Using an intent to edit an event</a>. - - + + </td> <td>Edit the event specified by <code><event_id></code>.</td> @@ -978,11 +978,11 @@ For an example of using this intent, see <a href="{@docRoot}guide/topics/provide <br> {@link android.content.Intent#ACTION_INSERT INSERT} </td> <td><p><code>content://com.android.calendar/events</code></p> - - You can also refer to the URI with -{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. + + You can also refer to the URI with +{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}. For an example of using this intent, see <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Using an intent to insert an event</a>. - + </td> <td>Create an event.</td> @@ -1002,7 +1002,7 @@ For an example of using this intent, see <a href="{@docRoot}guide/topics/provide <td>Name for the event.</td> </tr> <tr> - + <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <td>Event begin time in milliseconds from the epoch.</td> @@ -1010,25 +1010,25 @@ CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td> - + <td>Event end time in milliseconds from the epoch.</td> </tr> <tr> <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY CalendarContract.EXTRA_EVENT_ALL_DAY}</td> - + <td>A boolean that indicates that an event is all day. Value can be <code>true</code> or <code>false</code>.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}</td> - + <td>Location of the event.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}</td> - + <td>Event description.</td> </tr> <tr> @@ -1045,16 +1045,16 @@ Events.DESCRIPTION}</td> <td> {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}</td> - + <td>Whether the event is private or public.</td> </tr> <tr> <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}</td> - + <td>If this event counts as busy time or is free time that can be scheduled over.</td> - -</table> + +</table> <p>The following sections describe how to use these intents.</p> @@ -1066,23 +1066,23 @@ With this approach, your application doesn't even need to have the {@link android.Manifest.permission#WRITE_CALENDAR} permission included in its <a href="#manifest">manifest file</a>.</p> - + <p>When users run an application that uses this approach, the application sends them to the Calendar to finish adding the event. The {@link android.content.Intent#ACTION_INSERT INSERT} Intent uses extra fields to pre-populate a form with the details of the event in the Calendar. Users can then cancel the event, edit the form as needed, or save the event to their calendars.</p> - + <p>Here is a code snippet that schedules an event on January 19, 2012, that runs from 7:30 a.m. to 8:30 a.m. Note the following about this code snippet:</p> <ul> - <li>It specifies {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} + <li>It specifies {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} as the Uri.</li> - + <li>It uses the {@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME} and {@link @@ -1090,10 +1090,10 @@ android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME} extra fields to pre-populate the form with the time of the event. The values for these times must be in UTC milliseconds from the epoch.</li> - + <li>It uses the {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL} extra field to provide a comma-separated list of invitees, specified by email address.</li> - + </ul> <pre> Calendar beginTime = Calendar.getInstance(); @@ -1166,18 +1166,18 @@ access the Calendar Provider:</p> <ul> <li>A sync adapter needs to specify that it's a sync adapter by setting {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} to <code>true</code>.</li> - - + + <li>A sync adapter needs to provide an {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} and an {@link android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} as query parameters in the URI. </li> - + <li>A sync adapter has write access to more columns than an application or widget. - For example, an application can only modify a few characteristics of a calendar, + For example, an application can only modify a few characteristics of a calendar, such as its name, display name, visibility setting, and whether the calendar is synced. By comparison, a sync adapter can access not only those columns, but many others, such as calendar color, time zone, access level, location, and so on. -However, a sync adapter is restricted to the <code>ACCOUNT_NAME</code> and +However, a sync adapter is restricted to the <code>ACCOUNT_NAME</code> and <code>ACCOUNT_TYPE</code> it specified.</li> </ul> <p>Here is a helper method you can use to return a URI for use with a sync adapter:</p> @@ -1188,5 +1188,5 @@ However, a sync adapter is restricted to the <code>ACCOUNT_NAME</code> and .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } </pre> -<p>For a sample implementation of a sync adapter (not specifically related to Calendar), see +<p>For a sample implementation of a sync adapter (not specifically related to Calendar), see <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>. diff --git a/docs/html/guide/topics/providers/content-provider-basics.jd b/docs/html/guide/topics/providers/content-provider-basics.jd index b7ae3d2cb85c..37df4e92c66e 100644 --- a/docs/html/guide/topics/providers/content-provider-basics.jd +++ b/docs/html/guide/topics/providers/content-provider-basics.jd @@ -238,7 +238,7 @@ page.title=Content Provider Basics For example, to get a list of the words and their locales from the User Dictionary Provider, you call {@link android.content.ContentResolver#query ContentResolver.query()}. The {@link android.content.ContentResolver#query query()} method calls the - {@link android.content.ContentProvider#query ContentProvider.query()} method defined by the + {@link android.content.ContentProvider#query ContentProvider.query()} method defined by the User Dictionary Provider. The following lines of code show a {@link android.content.ContentResolver#query ContentResolver.query()} call: <p> @@ -253,7 +253,7 @@ mCursor = getContentResolver().query( </pre> <p> Table 2 shows how the arguments to - {@link android.content.ContentResolver#query + {@link android.content.ContentResolver#query query(Uri,projection,selection,selectionArgs,sortOrder)} match an SQL SELECT statement: </p> <p class="table-caption"> @@ -361,8 +361,8 @@ Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4); </p> <p class="note"> For the sake of clarity, the code snippets in this section call - {@link android.content.ContentResolver#query ContentResolver.query()} on the "UI thread"". In - actual code, however, you should do queries asynchronously on a separate thread. One way to do + {@link android.content.ContentResolver#query ContentResolver.query()} on the "UI thread"". In + actual code, however, you should do queries asynchronously on a separate thread. One way to do this is to use the {@link android.content.CursorLoader} class, which is described in more detail in the <a href="{@docRoot}guide/components/loaders.html"> Loaders</a> guide. Also, the lines of code are snippets only; they don't show a complete @@ -430,7 +430,7 @@ String[] mSelectionArgs = {""}; <p> The next snippet shows how to use {@link android.content.ContentResolver#query ContentResolver.query()}, using the User Dictionary - Provider as an example. A provider client query is similar to an SQL query, and it contains a + Provider as an example. A provider client query is similar to an SQL query, and it contains a set of columns to return, a set of selection criteria, and a sort order. </p> <p> @@ -440,8 +440,8 @@ String[] mSelectionArgs = {""}; <p> The expression that specifies the rows to retrieve is split into a selection clause and selection arguments. The selection clause is a combination of logical and Boolean expressions, - column names, and values (the variable <code>mSelectionClause</code>). If you specify the - replaceable parameter <code>?</code> instead of a value, the query method retrieves the value + column names, and values (the variable <code>mSelectionClause</code>). If you specify the + replaceable parameter <code>?</code> instead of a value, the query method retrieves the value from the selection arguments array (the variable <code>mSelectionArgs</code>). </p> <p> @@ -567,14 +567,14 @@ selectionArgs[0] = mUserInput; <!-- Displaying the results --> <h3 id="DisplayResults">Displaying query results</h3> <p> - The {@link android.content.ContentResolver#query ContentResolver.query()} client method always - returns a {@link android.database.Cursor} containing the columns specified by the query's - projection for the rows that match the query's selection criteria. A - {@link android.database.Cursor} object provides random read access to the rows and columns it - contains. Using {@link android.database.Cursor} methods, you can iterate over the rows in the + The {@link android.content.ContentResolver#query ContentResolver.query()} client method always + returns a {@link android.database.Cursor} containing the columns specified by the query's + projection for the rows that match the query's selection criteria. A + {@link android.database.Cursor} object provides random read access to the rows and columns it + contains. Using {@link android.database.Cursor} methods, you can iterate over the rows in the results, determine the data type of each column, get the data out of a column, and examine other - properties of the results. Some {@link android.database.Cursor} implementations automatically - update the object when the provider's data changes, or trigger methods in an observer object + properties of the results. Some {@link android.database.Cursor} implementations automatically + update the object when the provider's data changes, or trigger methods in an observer object when the {@link android.database.Cursor} changes, or both. </p> <p class="note"> @@ -705,14 +705,14 @@ if (mCursor != null) { <p> To get the permissions needed to access a provider, an application requests them with a <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> - element in its manifest file. When the Android Package Manager installs the application, a user - must approve all of the permissions the application requests. If the user approves all of them, + element in its manifest file. When the Android Package Manager installs the application, a user + must approve all of the permissions the application requests. If the user approves all of them, Package Manager continues the installation; if the user doesn't approve them, Package Manager aborts the installation. </p> <p> The following -<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> element requests read access to the User Dictionary Provider: </p> <pre> @@ -795,8 +795,8 @@ content://user_dictionary/words/<id_value> To update a row, you use a {@link android.content.ContentValues} object with the updated values just as you do with an insertion, and selection criteria just as you do with a query. The client method you use is - {@link android.content.ContentResolver#update ContentResolver.update()}. You only need to add - values to the {@link android.content.ContentValues} object for columns you're updating. If you + {@link android.content.ContentResolver#update ContentResolver.update()}. You only need to add + values to the {@link android.content.ContentValues} object for columns you're updating. If you want to clear the contents of a column, set the value to <code>null</code>. </p> <p> @@ -830,7 +830,7 @@ mRowsUpdated = getContentResolver().update( </pre> <p> You should also sanitize user input when you call - {@link android.content.ContentResolver#update ContentResolver.update()}. To learn more about + {@link android.content.ContentResolver#update ContentResolver.update()}. To learn more about this, read the section <a href="#Injection">Protecting against malicious input</a>. </p> <h3 id="Deleting">Deleting data</h3> @@ -860,7 +860,7 @@ mRowsDeleted = getContentResolver().delete( </pre> <p> You should also sanitize user input when you call - {@link android.content.ContentResolver#delete ContentResolver.delete()}. To learn more about + {@link android.content.ContentResolver#delete ContentResolver.delete()}. To learn more about this, read the section <a href="#Injection">Protecting against malicious input</a>. </p> <!-- Provider Data Types --> @@ -948,9 +948,9 @@ mRowsDeleted = getContentResolver().delete( To access a provider in "batch mode", you create an array of {@link android.content.ContentProviderOperation} objects and then dispatch them to a content provider with - {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. You pass the - content provider's <em>authority</em> to this method, rather than a particular content URI. - This allows each {@link android.content.ContentProviderOperation} object in the array to work + {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. You pass the + content provider's <em>authority</em> to this method, rather than a particular content URI. + This allows each {@link android.content.ContentProviderOperation} object in the array to work against a different table. A call to {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()} returns an array of results. </p> @@ -1013,7 +1013,7 @@ mRowsDeleted = getContentResolver().delete( <p> A provider defines URI permissions for content URIs in its manifest, using the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">android:grantUriPermission</a></code> - attribute of the + attribute of the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> element, as well as the <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code> diff --git a/docs/html/guide/topics/providers/content-provider-creating.jd b/docs/html/guide/topics/providers/content-provider-creating.jd index baa92e131dc7..ec6909c89136 100755 --- a/docs/html/guide/topics/providers/content-provider-creating.jd +++ b/docs/html/guide/topics/providers/content-provider-creating.jd @@ -422,7 +422,7 @@ public class ExampleProvider extends ContentProvider { * in the path */ sUriMatcher.addURI("com.example.app.provider", "table3", 1); - + /* * Sets the code for a single row to 2. In this case, the "#" wildcard is * used. "content://com.example.app.provider/table3/3" matches, but @@ -881,7 +881,7 @@ vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1 A contract class also helps developers because it usually has mnemonic names for its constants, so developers are less likely to use incorrect values for column names or URIs. Since it's a class, it can contain Javadoc documentation. Integrated development environments such as - Android Studio can auto-complete constant names from the contract class and display Javadoc for + Android Studio can auto-complete constant names from the contract class and display Javadoc for the constants. </p> <p> diff --git a/docs/html/guide/topics/renderscript/compute.jd b/docs/html/guide/topics/renderscript/compute.jd index fc795ff6a63f..861c9258f2c2 100755 --- a/docs/html/guide/topics/renderscript/compute.jd +++ b/docs/html/guide/topics/renderscript/compute.jd @@ -167,7 +167,7 @@ precision (such as SIMD CPU instructions).</p> </ul> <p>We strongly recommend using the Support Library APIs for accessing RenderScript because they - provide a wider range of device compatibility. Developers targeting specific versions of + provide a wider range of device compatibility. Developers targeting specific versions of Android can use {@link android.renderscript} if necessary.</p> diff --git a/docs/html/guide/topics/resources/accessing-resources.jd b/docs/html/guide/topics/resources/accessing-resources.jd index b971238c1773..953b27418efc 100644 --- a/docs/html/guide/topics/resources/accessing-resources.jd +++ b/docs/html/guide/topics/resources/accessing-resources.jd @@ -264,8 +264,8 @@ reference a system resource, you would need to include the package name. For exa android:text="@string/hello" /> </pre> -<p class="note"><strong>Note:</strong> You should use string resources at -all times, so that your application can be localized for other languages. +<p class="note"><strong>Note:</strong> You should use string resources at +all times, so that your application can be localized for other languages. For information about creating alternative resources (such as localized strings), see <a href="providing-resources.html#AlternativeResources">Providing Alternative diff --git a/docs/html/guide/topics/resources/animation-resource.jd b/docs/html/guide/topics/resources/animation-resource.jd index e5cac8874afb..05582f0e366d 100644 --- a/docs/html/guide/topics/resources/animation-resource.jd +++ b/docs/html/guide/topics/resources/animation-resource.jd @@ -12,7 +12,7 @@ parent.link=available-resources.html <ol> <li><a href="#Tween">Tween animation</a></li> <li><a href="#Frame">Frame animation</a></li> - </ol> + </ol> </li> </ol> <h2>See also</h2> @@ -94,7 +94,7 @@ In XML: <code>@[<em>package</em>:]animator/<em>filename</em></code> </set> </pre> -<p>The file must have a single root element: either +<p>The file must have a single root element: either <code><set></code>, <code><objectAnimator></code>, or <code><valueAnimator></code>. You can group animation elements together inside the <code><set></code> element, including other <code><set></code> elements. @@ -109,7 +109,7 @@ group animation elements together inside the <code><set></code> element, i <code><valueAnimator></code>, or other <code><set></code> elements). Represents an {@link android.animation.AnimatorSet}. <p>You can specify nested <code><set></code> tags to further - group animations together. Each <code><set></code> can define its own + group animations together. Each <code><set></code> can define its own <code>ordering</code> attribute.</p> <p class="caps">attributes:</p> @@ -119,11 +119,11 @@ group animation elements together inside the <code><set></code> element, i </dt> <dd> <em>Keyword</em>. Specifies the play ordering of animations in this set. - <table> - <tr><th>Value</th><th>Description</th></tr> - <tr><td><code>sequentially</code></td><td>Play animations in this set sequentially</td></tr> - <tr><td><code>together</code> (default)</td><td>Play animations in this set at the same time.</td></tr> - </table> + <table> + <tr><th>Value</th><th>Description</th></tr> + <tr><td><code>sequentially</code></td><td>Play animations in this set sequentially</td></tr> + <tr><td><code>together</code> (default)</td><td>Play animations in this set at the same time.</td></tr> + </table> </dd> </dl> </dd> @@ -131,11 +131,11 @@ group animation elements together inside the <code><set></code> element, i <dt id="obj-animator-element"><code><objectAnimator></code></dt> <dd>Animates a specific property of an object over a specific amount of time. Represents an {@link android.animation.ObjectAnimator}.</p> - + <p class="caps">attributes:</p> <dl class="atn-list"> <dt> - <code>android:propertyName</code> + <code>android:propertyName</code> </dt> <dd> <em>String</em>. <strong>Required</strong>. The object's property to animate, referenced by its name. For example you can specify @@ -206,11 +206,11 @@ group animation elements together inside the <code><set></code> element, i <dd> <em>Keyword</em>. Do not specify this attribute if the value is a color. The animation framework automatically handles color values - <table> - <tr><th>Value</th><th>Description</th></tr> - <tr><td><code>intType</code></td><td>Specifies that the animated values are integers</td></tr> - <tr><td><code>floatType</code> (default)</td><td>Specifies that the animated values are floats</td></tr> - </table> + <table> + <tr><th>Value</th><th>Description</th></tr> + <tr><td><code>intType</code></td><td>Specifies that the animated values are integers</td></tr> + <tr><td><code>floatType</code> (default)</td><td>Specifies that the animated values are floats</td></tr> + </table> </dd> </dl> @@ -279,11 +279,11 @@ group animation elements together inside the <code><set></code> element, i <dd> <em>Keyword</em>. Do not specify this attribute if the value is a color. The animation framework automatically handles color values. - <table> - <tr><th>Value</th><th>Description</th></tr> - <tr><td><code>intType</code></td><td>Specifies that the animated values are integers</td></tr> - <tr><td><code>floatType</code> (default)</td><td>Specifies that the animated values are floats</td></tr> - </table> + <table> + <tr><th>Value</th><th>Description</th></tr> + <tr><td><code>intType</code></td><td>Specifies that the animated values are integers</td></tr> + <tr><td><code>floatType</code> (default)</td><td>Specifies that the animated values are floats</td></tr> + </table> </dd> </dl> @@ -320,7 +320,7 @@ group animation elements together inside the <code><set></code> element, i before starting the animation set. Calling {@link android.animation.AnimatorSet#setTarget setTarget()} sets a single target object for all children of the {@link android.animation.AnimatorSet} as a convenience. The following code shows how to do this:</p> - + <pre> AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator); diff --git a/docs/html/guide/topics/resources/more-resources.jd b/docs/html/guide/topics/resources/more-resources.jd index 1afbf70731e4..8488cdee7620 100644 --- a/docs/html/guide/topics/resources/more-resources.jd +++ b/docs/html/guide/topics/resources/more-resources.jd @@ -760,7 +760,7 @@ int color = colors.{@link android.content.res.TypedArray#getColor(int,int) getCo </dd> </dl> -</dd> +</dd> <dt>example:</dt> <dd> @@ -781,7 +781,7 @@ int color = colors.{@link android.content.res.TypedArray#getColor(int,int) getCo </dd> </dl> -</dd> +</dd> <dt>see also:</dt> diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd index c919ed5e777d..80a989a57e28 100644 --- a/docs/html/guide/topics/resources/providing-resources.jd +++ b/docs/html/guide/topics/resources/providing-resources.jd @@ -523,7 +523,7 @@ is <em>larger</em> than the current screen, the system will <strong>not</strong> application will crash at runtime (for example, if all layout resources are tagged with the {@code xlarge} qualifier, but the device is a normal-size screen).</p> <p><em>Added in API level 4.</em></p> - + <p>See <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> for more information.</p> <p>Also see the {@link android.content.res.Configuration#screenLayout} configuration field, @@ -608,7 +608,7 @@ which indicates the current device orientation.</p> </ul> <p><em>Added in API level 8, television added in API 13, watch added in API 20.</em></p> <p>For information about how your app can respond when the device is inserted into or - removed from a dock, read <a + removed from a dock, read <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Determining and Monitoring the Docking State and Type</a>.</p> <p>This can change during the life of your application if the user places the device in a @@ -659,8 +659,8 @@ application during runtime.</p> Level 8</em></li> <li>{@code xxhdpi}: Extra-extra-high-density screens; approximately 480dpi. <em>Added in API Level 16</em></li> - <li>{@code xxxhdpi}: Extra-extra-extra-high-density uses (launcher icon only, see the - <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">note</a> + <li>{@code xxxhdpi}: Extra-extra-extra-high-density uses (launcher icon only, see the + <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">note</a> in <em>Supporting Multiple Screens</em>); approximately 640dpi. <em>Added in API Level 18</em></li> <li>{@code nodpi}: This can be used for bitmap resources that you do not want to be scaled diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd index 8781d208d6ea..2e6f9b765edf 100644 --- a/docs/html/guide/topics/resources/runtime-changes.jd +++ b/docs/html/guide/topics/resources/runtime-changes.jd @@ -84,12 +84,12 @@ your activity to preserve stateful objects.</p> <p>To retain stateful objects in a fragment during a runtime configuration change:</p> <ol> - <li>Extend the {@link android.app.Fragment} class and declare references to your stateful + <li>Extend the {@link android.app.Fragment} class and declare references to your stateful objects.</li> <li>Call {@link android.app.Fragment#setRetainInstance(boolean)} when the fragment is created. </li> <li>Add the fragment to your activity.</li> - <li>Use {@link android.app.FragmentManager} to retrieve the fragment when the activity is + <li>Use {@link android.app.FragmentManager} to retrieve the fragment when the activity is restarted.</li> </ol> @@ -127,8 +127,8 @@ leak all the views and resources of the original activity instance. (Leaking res means that your application maintains a hold on them and they cannot be garbage-collected, so lots of memory can be lost.)</p> -<p>Then use {@link android.app.FragmentManager} to add the fragment to the activity. -You can obtain the data object from the fragment when the activity starts again during runtime +<p>Then use {@link android.app.FragmentManager} to add the fragment to the activity. +You can obtain the data object from the fragment when the activity starts again during runtime configuration changes. For example, define your activity as follows:</p> <pre> @@ -170,7 +170,7 @@ public class MyActivity extends Activity { <p>In this example, {@link android.app.Activity#onCreate(Bundle) onCreate()} adds a fragment or restores a reference to it. {@link android.app.Activity#onCreate(Bundle) onCreate()} also stores the stateful object inside the fragment instance. -{@link android.app.Activity#onDestroy() onDestroy()} updates the stateful object inside the +{@link android.app.Activity#onDestroy() onDestroy()} updates the stateful object inside the retained fragment instance.</p> diff --git a/docs/html/guide/topics/sensors/index.jd b/docs/html/guide/topics/sensors/index.jd index 09d27e7a9bd5..36d3adcb48a3 100644 --- a/docs/html/guide/topics/sensors/index.jd +++ b/docs/html/guide/topics/sensors/index.jd @@ -1,7 +1,7 @@ page.title=Location and Sensors APIs page.landing=true page.tags=location,sensors -page.landing.intro=Use sensors on the device to add rich location and motion capabilities to your app, from GPS or network location to accelerometer, gyroscope, temperature, barometer, and more. +page.landing.intro=Use sensors on the device to add rich location and motion capabilities to your app, from GPS or network location to accelerometer, gyroscope, temperature, barometer, and more. page.landing.image= @jd:body @@ -10,7 +10,7 @@ page.landing.image= <div class="col-6"> <h3>Blog Articles</h3> - + <a href="http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html"> <h4>One Screen Turn Deserves Another</h4> <p>However, there’s a new wrinkle: recently, a few devices have shipped (see here and here) @@ -18,7 +18,7 @@ that run Android on screens that are naturally landscape in their orientation. T the default position, the screens are wider than they are tall. This introduces a few fairly subtle issues that we’ve noticed causing problems in some apps.</p> </a> - + <a href="http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html"> <h4>A Deep Dive Into Location</h4> <p>I’ve written an open-source reference app that incorporates all of the tips, tricks, and @@ -29,7 +29,7 @@ venues - as well as providing a reasonable level of offline support</p> <div class="col-6"> <h3>Training</h3> - + <a href="http://developer.android.com/training/location/index.html"> <h4>Making Your App Location Aware</h4> <p>This class teaches you how to incorporate location based services in your Android diff --git a/docs/html/guide/topics/text/index.jd b/docs/html/guide/topics/text/index.jd index 3865f25aee71..2bf46967339e 100644 --- a/docs/html/guide/topics/text/index.jd +++ b/docs/html/guide/topics/text/index.jd @@ -9,7 +9,7 @@ page.landing.image= <div class="col-12"> <h3>Blog Articles</h3> - + <a href="http://android-developers.blogspot.com/2011/12/add-voice-typing-to-your-ime.html"> <h4>Add Voice Typing To Your IME</h4> <p>A new feature available in Android 4.0 is voice typing: the difference for users is that diff --git a/docs/html/guide/topics/text/spell-checker-framework.jd b/docs/html/guide/topics/text/spell-checker-framework.jd index a5d9932b26a7..7c059ce157cb 100644 --- a/docs/html/guide/topics/text/spell-checker-framework.jd +++ b/docs/html/guide/topics/text/spell-checker-framework.jd @@ -6,7 +6,7 @@ page.tags=input,spellcheckerservice <h2>In This Document</h2> <ol> <li> - <a href="#SpellCheckLifeCycle">Spell Check Lifecycle</a> + <a href="#SpellCheckLifeCycle">Spell Check Lifecycle</a> </li> <li> <a href="#SpellCheckImplementation">Implementing a Spell Checker Service</a> @@ -30,12 +30,12 @@ page.tags=input,spellcheckerservice </div> <p> - The Android platform offers a spelling checker framework that lets you implement - and access spell checking in your application. The framework is one of the + The Android platform offers a spelling checker framework that lets you implement + and access spell checking in your application. The framework is one of the Text Service APIs offered by the Android platform. </p> <p> - To use the framework in your app, you create a special type of Android service that + To use the framework in your app, you create a special type of Android service that generates a spelling checker <strong>session</strong> object. Based on text you provide, the session object returns spelling suggestions generated by the spelling checker. </p> diff --git a/docs/html/guide/topics/ui/accessibility/apps.jd b/docs/html/guide/topics/ui/accessibility/apps.jd index eb639e37027d..26fb3cca9dc3 100644 --- a/docs/html/guide/topics/ui/accessibility/apps.jd +++ b/docs/html/guide/topics/ui/accessibility/apps.jd @@ -458,7 +458,7 @@ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { // Call the super implementation to populate its text to the event, which // calls onPopulateAccessibilityEvent() on API Level 14 and up. boolean completed = super.dispatchPopulateAccessibilityEvent(event); - + // In case this is running on a API revision earlier that 14, check // the text content of the event and add an appropriate text // description for this custom view: diff --git a/docs/html/guide/topics/ui/binding.jd b/docs/html/guide/topics/ui/binding.jd index a4fd25c2825e..48a1d409ef21 100644 --- a/docs/html/guide/topics/ui/binding.jd +++ b/docs/html/guide/topics/ui/binding.jd @@ -16,7 +16,7 @@ parent.link=index.html <pre> -// Get a Spinner and bind it to an ArrayAdapter that +// Get a Spinner and bind it to an ArrayAdapter that // references a String array. Spinner s1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( @@ -31,7 +31,7 @@ private static String[] PROJECTION = new String[] { Spinner s2 = (Spinner) findViewById(R.id.spinner2); Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null); - + SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, // Use a template // that displays a @@ -41,7 +41,7 @@ SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, // people database to... new int[] {android.R.id.text1}); // The "text1" view defined in // the XML template - + adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s2.setAdapter(adapter2); </pre> @@ -70,7 +70,7 @@ private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() { // Now hook into our object and set its onItemClickListener member // to our class handler object. mHistoryView = (ListView)findViewById(R.id.history); -mHistoryView.setOnItemClickListener(mMessageClickedHandler); +mHistoryView.setOnItemClickListener(mMessageClickedHandler); </pre> <div class="special"> diff --git a/docs/html/guide/topics/ui/controls.jd b/docs/html/guide/topics/ui/controls.jd index a58d9f9b380f..bb8c1a779588 100644 --- a/docs/html/guide/topics/ui/controls.jd +++ b/docs/html/guide/topics/ui/controls.jd @@ -71,7 +71,7 @@ href="{@docRoot}guide/topics/ui/custom-components.html">custom components</a>.</ <tr> <td><a href="controls/radiobutton.html">Radio button</a></td> <td>Similar to checkboxes, except that only one option can be selected in the group.</td> - <td>{@link android.widget.RadioGroup RadioGroup} + <td>{@link android.widget.RadioGroup RadioGroup} <br>{@link android.widget.RadioButton RadioButton} </td> </tr> <tr> diff --git a/docs/html/guide/topics/ui/controls/button.jd b/docs/html/guide/topics/ui/controls/button.jd index 295044f0b55d..a529d533de79 100644 --- a/docs/html/guide/topics/ui/controls/button.jd +++ b/docs/html/guide/topics/ui/controls/button.jd @@ -214,7 +214,7 @@ pressed (activated).</li> <li>The second <code><item></code> defines the bitmap to use when the button is focused (when the button is highlighted using the trackball or directional pad).</li> - <li>The third <code><item></code> defines the bitmap to use when the button is in the + <li>The third <code><item></code> defines the bitmap to use when the button is in the default state (it's neither pressed nor focused).</li> </ul> <p class="note"><strong>Note:</strong> The order of the <code><item></code> elements is diff --git a/docs/html/guide/topics/ui/controls/checkbox.jd b/docs/html/guide/topics/ui/controls/checkbox.jd index 2a64e38d3bf4..f5feeb106a38 100644 --- a/docs/html/guide/topics/ui/controls/checkbox.jd +++ b/docs/html/guide/topics/ui/controls/checkbox.jd @@ -65,7 +65,7 @@ click event for both checkboxes:</p> public void onCheckboxClicked(View view) { // Is the view now checked? boolean checked = ((CheckBox) view).isChecked(); - + // Check which checkbox was clicked switch(view.getId()) { case R.id.checkbox_meat: diff --git a/docs/html/guide/topics/ui/controls/pickers.jd b/docs/html/guide/topics/ui/controls/pickers.jd index c0667add65aa..9788f084022a 100644 --- a/docs/html/guide/topics/ui/controls/pickers.jd +++ b/docs/html/guide/topics/ui/controls/pickers.jd @@ -123,15 +123,15 @@ android.support.v4.app.DialogFragment#show show()}.</p> <p>For example, here's a button that, when clicked, calls a method to show the dialog:</p> <pre> -<Button - android:layout_width="wrap_content" +<Button + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/pick_time" + android:text="@string/pick_time" android:onClick="showTimePickerDialog" /> </pre> <p>When the user clicks this button, the system calls the following method:</p> - + <pre> public void showTimePickerDialog(View v) { DialogFragment newFragment = new TimePickerFragment(); @@ -224,15 +224,15 @@ android.support.v4.app.DialogFragment#show show()}.</p> <p>For example, here's a button that, when clicked, calls a method to show the dialog:</p> <pre> -<Button - android:layout_width="wrap_content" +<Button + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/pick_date" + android:text="@string/pick_date" android:onClick="showDatePickerDialog" /> </pre> <p>When the user clicks this button, the system calls the following method:</p> - + <pre> public void showDatePickerDialog(View v) { DialogFragment newFragment = new DatePickerFragment(); diff --git a/docs/html/guide/topics/ui/controls/radiobutton.jd b/docs/html/guide/topics/ui/controls/radiobutton.jd index b2556e1956ab..e1441d3f5fbf 100644 --- a/docs/html/guide/topics/ui/controls/radiobutton.jd +++ b/docs/html/guide/topics/ui/controls/radiobutton.jd @@ -72,7 +72,7 @@ click event for both radio buttons:</p> public void onRadioButtonClicked(View view) { // Is the button now checked? boolean checked = ((RadioButton) view).isChecked(); - + // Check which radio button was clicked switch(view.getId()) { case R.id.radio_pirates: diff --git a/docs/html/guide/topics/ui/controls/spinner.jd b/docs/html/guide/topics/ui/controls/spinner.jd index 3b8aaad4613c..00b0432f9f70 100644 --- a/docs/html/guide/topics/ui/controls/spinner.jd +++ b/docs/html/guide/topics/ui/controls/spinner.jd @@ -4,7 +4,7 @@ page.tags=adapterview,spinneradapter <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#Populate">Populate the Spinner with User Choices</a></li> @@ -113,8 +113,8 @@ For example, here's an implementation of the interface in an {@link android.app. <pre> public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... - - public void onItemSelected(AdapterView<?> parent, View view, + + public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. You can retrieve the selected item using // parent.getItemAtPosition(pos) diff --git a/docs/html/guide/topics/ui/controls/text.jd b/docs/html/guide/topics/ui/controls/text.jd index f4d72b2a80f6..f5c2a4251788 100644 --- a/docs/html/guide/topics/ui/controls/text.jd +++ b/docs/html/guide/topics/ui/controls/text.jd @@ -4,7 +4,7 @@ page.tags=edittext,autocompletetextview <div id="qv-wrapper"> <div id="qv"> - + <h2>In this document</h2> <ol> <li><a href="#Keyboard">Specifying the Keyboard Type</a> @@ -279,7 +279,7 @@ that provides suggestions from an array, using {@link android.widget.ArrayAdapte layout with only the text field: <pre> <?xml version="1.0" encoding="utf-8"?> -<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" +<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/autocomplete_country" android:layout_width="fill_parent" android:layout_height="wrap_content" /> @@ -313,8 +313,8 @@ code to specify the adapter that supplies the suggestions: AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country); // Get the string array String[] countries = getResources().getStringArray(R.array.countries_array); -// Create the adapter and set it to the AutoCompleteTextView -ArrayAdapter<String> adapter = +// Create the adapter and set it to the AutoCompleteTextView +ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries); textView.setAdapter(adapter); </pre> diff --git a/docs/html/guide/topics/ui/custom-components.jd b/docs/html/guide/topics/ui/custom-components.jd index b7249c56ea0b..bd3de1c29a24 100755 --- a/docs/html/guide/topics/ui/custom-components.jd +++ b/docs/html/guide/topics/ui/custom-components.jd @@ -14,37 +14,37 @@ page.tags=view,widget </div> </div> -<p>Android offers a sophisticated and powerful componentized model for building your UI, -based on the fundamental layout classes: {@link android.view.View} and -{@link android.view.ViewGroup}. To start with, the platform includes a variety of prebuilt -View and ViewGroup subclasses — called widgets and layouts, respectively — +<p>Android offers a sophisticated and powerful componentized model for building your UI, +based on the fundamental layout classes: {@link android.view.View} and +{@link android.view.ViewGroup}. To start with, the platform includes a variety of prebuilt +View and ViewGroup subclasses — called widgets and layouts, respectively — that you can use to construct your UI.</p> -<p>A partial list of available widgets includes {@link android.widget.Button Button}, -{@link android.widget.TextView TextView}, -{@link android.widget.EditText EditText}, +<p>A partial list of available widgets includes {@link android.widget.Button Button}, +{@link android.widget.TextView TextView}, +{@link android.widget.EditText EditText}, {@link android.widget.ListView ListView}, -{@link android.widget.CheckBox CheckBox}, -{@link android.widget.RadioButton RadioButton}, -{@link android.widget.Gallery Gallery}, -{@link android.widget.Spinner Spinner}, and the more special-purpose -{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, +{@link android.widget.CheckBox CheckBox}, +{@link android.widget.RadioButton RadioButton}, +{@link android.widget.Gallery Gallery}, +{@link android.widget.Spinner Spinner}, and the more special-purpose +{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, {@link android.widget.ImageSwitcher ImageSwitcher}, and {@link android.widget.TextSwitcher TextSwitcher}. </p> -<p>Among the layouts available are {@link android.widget.LinearLayout LinearLayout}, -{@link android.widget.FrameLayout FrameLayout}, {@link android.widget.RelativeLayout RelativeLayout}, +<p>Among the layouts available are {@link android.widget.LinearLayout LinearLayout}, +{@link android.widget.FrameLayout FrameLayout}, {@link android.widget.RelativeLayout RelativeLayout}, and others. For more examples, see <a href="layout-objects.html">Common Layout Objects</a>.</p> -<p>If none of the prebuilt widgets or layouts meets your needs, you can create your own View subclass. -If you only need to make small adjustments to an existing widget or layout, you can simply subclass +<p>If none of the prebuilt widgets or layouts meets your needs, you can create your own View subclass. +If you only need to make small adjustments to an existing widget or layout, you can simply subclass the widget or layout and override its methods. </p> -<p>Creating your own View subclasses gives you precise control over the appearance and function -of a screen element. To give an idea of the control you get with custom views, here are some +<p>Creating your own View subclasses gives you precise control over the appearance and function +of a screen element. To give an idea of the control you get with custom views, here are some examples of what you could do with them:</p> - + <ul> <li> You could create a completely custom-rendered View type, for example a "volume @@ -60,7 +60,7 @@ examples of what you could do with them:</p> </li> <li> You could override the way that an EditText component is rendered on the screen - (the <a href="{@docRoot}resources/samples/NotePad/index.html">Notepad Tutorial</a> uses this to good effect, + (the <a href="{@docRoot}resources/samples/NotePad/index.html">Notepad Tutorial</a> uses this to good effect, to create a lined-notepad page). </li> <li> @@ -69,7 +69,7 @@ examples of what you could do with them:</p> </li> </ul> <p> -The sections below explain how to create custom Views and use them in your application. +The sections below explain how to create custom Views and use them in your application. For detailed reference information, see the {@link android.view.View} class. </p> @@ -77,26 +77,26 @@ For detailed reference information, see the {@link android.view.View} class. </p <p>Here is a high level overview of what you need to know to get started in creating your own View components:</p> - + <ol> <li> - Extend an existing {@link android.view.View View} class or subclass + Extend an existing {@link android.view.View View} class or subclass with your own class. </li> <li> - Override some of the methods from the superclass. The superclass methods + Override some of the methods from the superclass. The superclass methods to override start with '<code>on</code>', for - example, {@link android.view.View#onDraw onDraw()}, - {@link android.view.View#onMeasure onMeasure()}, and + example, {@link android.view.View#onDraw onDraw()}, + {@link android.view.View#onMeasure onMeasure()}, and {@link android.view.View#onKeyDown onKeyDown()}. - This is similar to the <code>on...</code> events in {@link android.app.Activity Activity} + This is similar to the <code>on...</code> events in {@link android.app.Activity Activity} or {@link android.app.ListActivity ListActivity} that you override for lifecycle and other functionality hooks. <li> - Use your new extension class. Once completed, your new extension class + Use your new extension class. Once completed, your new extension class can be used in place of the view upon which it was based. </li> -</ol> +</ol> <p class="note"><strong>Tip:</strong> Extension classes can be defined as inner classes inside the activities that use them. This is useful because it controls access to them but @@ -119,7 +119,7 @@ way you like, limited perhaps only by your imagination, the size of the screen, and the available processing power (remember that ultimately your application might have to run on something with significantly less power than your desktop workstation).</p> -<p>To create a fully customized component:</p> +<p>To create a fully customized component:</p> <ol> <li> The most generic view you can extend is, unsurprisingly, {@link @@ -170,11 +170,11 @@ slightly more complex by the requirements of limits from the parent (which are passed in to the <code>onMeasure()</code> method) and by the requirement to call the <code>setMeasuredDimension()</code> method with the measured width and height once they have been calculated. If you fail to -call this method from an overridden <code>onMeasure()</code> method, the +call this method from an overridden <code>onMeasure()</code> method, the result will be an exception at measurement time.</p> -<p>At a high level, implementing <code>onMeasure()</code> looks something +<p>At a high level, implementing <code>onMeasure()</code> looks something like this:</p> - + <ol> <li> The overridden <code>onMeasure()</code> method is called with width and @@ -193,7 +193,7 @@ result will be an exception at measurement time.</p> measurement width and height which will be required to render the component. It should try to stay within the specifications passed in, although it can choose to exceed them (in this case, the parent can - choose what to do, including clipping, scrolling, throwing an exception, + choose what to do, including clipping, scrolling, throwing an exception, or asking the <code>onMeasure()</code> to try again, perhaps with different measurement specifications). </li> @@ -212,7 +212,7 @@ Here's a summary of some of the other standard methods that the framework calls <thead> <tr><th>Category</th> <th>Methods</th> <th>Description</th></tr> </thead> - + <tbody> <tr> <td rowspan="2">Creation</td> @@ -228,7 +228,7 @@ Here's a summary of some of the other standard methods that the framework calls <td>Called after a view and all of its children has been inflated from XML.</td> </tr> - + <tr> <td rowspan="3">Layout</td> <td><code>{@link android.view.View#onMeasure}</code></td> @@ -247,14 +247,14 @@ Here's a summary of some of the other standard methods that the framework calls <td>Called when the size of this view has changed. </td> </tr> - + <tr> <td>Drawing</td> <td><code>{@link android.view.View#onDraw}</code></td> <td>Called when the view should render its content. </td> </tr> - + <tr> <td rowspan="4">Event processing</td> <td><code>{@link android.view.View#onKeyDown}</code></td> @@ -265,58 +265,58 @@ Here's a summary of some of the other standard methods that the framework calls <td><code>{@link android.view.View#onKeyUp}</code></td> <td>Called when a key up event occurs. </td> - </tr> + </tr> <tr> <td><code>{@link android.view.View#onTrackballEvent}</code></td> <td>Called when a trackball motion event occurs. </td> - </tr> + </tr> <tr> <td><code>{@link android.view.View#onTouchEvent}</code></td> <td>Called when a touch screen motion event occurs. </td> - </tr> - + </tr> + <tr> <td rowspan="2">Focus</td> <td><code>{@link android.view.View#onFocusChanged}</code></td> <td>Called when the view gains or loses focus. </td> </tr> - + <tr> <td><code>{@link android.view.View#onWindowFocusChanged}</code></td> <td>Called when the window containing the view gains or loses focus. </td> </tr> - + <tr> <td rowspan="3">Attaching</td> <td><code>{@link android.view.View#onAttachedToWindow()}</code></td> <td>Called when the view is attached to a window. </td> </tr> - + <tr> <td><code>{@link android.view.View#onDetachedFromWindow}</code></td> <td>Called when the view is detached from its window. </td> - </tr> - + </tr> + <tr> <td><code>{@link android.view.View#onWindowVisibilityChanged}</code></td> <td>Called when the visibility of the window containing the view has changed. </td> - </tr> + </tr> </tbody> - + </table> <h3 id="customexample">A Custom View Example</h3> -<p>The CustomView sample in the +<p>The CustomView sample in the <a href="{@docRoot}resources/samples/ApiDemos/index.html">API Demos</a> provides an example of a customized View. The custom View is defined in the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html">LabelView</a> @@ -359,9 +359,9 @@ combination of a single line EditText field and an adjacent button with an attac something from the list, it populates the EditText field, but the user can also type something directly into the EditText if they prefer.</p> <p>In Android, there are actually two other Views readily available to do -this: {@link android.widget.Spinner Spinner} and -{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, but -regardless, the concept of a Combo Box makes an easy-to-understand +this: {@link android.widget.Spinner Spinner} and +{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, but +regardless, the concept of a Combo Box makes an easy-to-understand example.</p> <p>To create a compound component:</p> <ol> @@ -397,7 +397,7 @@ example.</p> <li> In the case of extending a Layout, you don't need to override the <code>onDraw()</code> and <code>onMeasure()</code> methods since the - layout will have default behavior that will likely work just fine. However, + layout will have default behavior that will likely work just fine. However, you can still override them if you need to. </li> <li> @@ -409,7 +409,7 @@ example.</p> <p> To summarize, the use of a Layout as the basis for a Custom Control has a number of advantages, including:</p> - + <ul> <li> You can specify the layout using the declarative XML files just like @@ -433,7 +433,7 @@ number of advantages, including:</p> SpeechView which extends LinearLayout to make a component for displaying Speech quotes. The corresponding classes in the sample code are <code>List4.java</code> and <code>List6.java</code>.</p> - + <h2 id="modifying">Modifying an Existing View Type</h2> @@ -450,7 +450,7 @@ samples. This demonstrates many aspects of using the Android platform, among them is extending an EditText View to make a lined notepad. This is not a perfect example, and the APIs for doing this might change from this early preview, but it does demonstrate the principles.</p> -<p>If you haven't done so already, import the +<p>If you haven't done so already, import the NotePad sample into Android Studio (or just look at the source using the link provided). In particular look at the definition of <code>MyEditText</code> in the <a @@ -462,7 +462,7 @@ file.</p> <strong>The Definition</strong> <p>The class is defined with the following line:<br/> <code>public static class MyEditText extends EditText</code></p> - + <ul> <li> It is defined as an inner class within the <code>NoteEditor</code> @@ -488,7 +488,7 @@ file.</p> </li> <li> <strong>Class Initialization</strong> - <p>As always, the super is called first. Furthermore, + <p>As always, the super is called first. Furthermore, this is not a default constructor, but a parameterized one. The EditText is created with these parameters when it is inflated from an XML layout file, thus, our constructor needs to both take them and pass them @@ -496,7 +496,7 @@ file.</p> </li> <li> <strong>Overridden Methods</strong> - <p>In this example, there is only one method to be overridden: + <p>In this example, there is only one method to be overridden: <code>onDraw()</code> — but there could easily be others needed when you create your own custom components.</p> <p>For the NotePad sample, overriding the <code>onDraw()</code> method allows @@ -513,7 +513,7 @@ file.</p> <code>res/layout</code> folder.</p> <pre> <view - class="com.android.notepad.NoteEditor$MyEditText" + class="com.android.notepad.NoteEditor$MyEditText" id="@+id/note" android:layout_width="fill_parent" android:layout_height="fill_parent" @@ -522,7 +522,7 @@ file.</p> android:scrollbars="vertical" android:fadingEdge="vertical" /> </pre> - + <ul> <li> The custom component is created as a generic view in the XML, and @@ -531,7 +531,7 @@ file.</p> <code>NoteEditor$MyEditText</code> notation which is a standard way to refer to inner classes in the Java programming language. <p>If your custom View component is not defined as an inner class, then you can, - alternatively, declare the View component + alternatively, declare the View component with the XML element name, and exclude the <code>class</code> attribute. For example:</p> <pre> <com.android.notepad.MyEditText diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd index e4469eae4e29..7ab4ca552b4d 100644 --- a/docs/html/guide/topics/ui/dialogs.jd +++ b/docs/html/guide/topics/ui/dialogs.jd @@ -32,7 +32,7 @@ page.tags=alertdialog,dialogfragment <li>{@link android.app.DialogFragment}</li> <li>{@link android.app.AlertDialog}</li> </ol> - + <h2>See also</h2> <ol> <li><a href="{@docRoot}design/building-blocks/dialogs.html">Dialogs design guide</a></li> @@ -238,8 +238,8 @@ AlertDialog dialog = builder.create(); </pre> <p>The <code>set...Button()</code> methods require a title for the button (supplied -by a <a href="{@docRoot}guide/topics/resources/string-resource.html">string resource</a>) and a -{@link android.content.DialogInterface.OnClickListener} that defines the action to take +by a <a href="{@docRoot}guide/topics/resources/string-resource.html">string resource</a>) and a +{@link android.content.DialogInterface.OnClickListener} that defines the action to take when the user presses the button.</p> <p>There are three different action buttons you can add:</p> @@ -251,7 +251,7 @@ when the user presses the button.</p> <dt>Neutral</dt> <dd>You should use this when the user may not want to proceed with the action, but doesn't necessarily want to cancel. It appears between the positive and negative - buttons. For example, the action might be "Remind me later."</dd> + buttons. For example, the action might be "Remind me later."</dd> </dl> <p>You can add only one of each button type to an {@link @@ -274,7 +274,7 @@ A dialog with a title and list.</p> <li>A persistent multiple-choice list (checkboxes)</li> </ul> -<p>To create a single-choice list like the one in figure 3, +<p>To create a single-choice list like the one in figure 3, use the {@link android.app.AlertDialog.Builder#setItems setItems()} method:</p> <pre style="clear:right"> @@ -294,7 +294,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Because the list appears in the dialog's content area, the dialog cannot show both a message and a list and you should set a title for the -dialog with {@link android.app.AlertDialog.Builder#setTitle setTitle()}. +dialog with {@link android.app.AlertDialog.Builder#setTitle setTitle()}. To specify the items for the list, call {@link android.app.AlertDialog.Builder#setItems setItems()}, passing an array. Alternatively, you can specify a list using {@link @@ -320,11 +320,11 @@ A list of multiple-choice items.</p> <h4 id="Checkboxes">Adding a persistent multiple-choice or single-choice list</h4> -<p>To add a list of multiple-choice items (checkboxes) or +<p>To add a list of multiple-choice items (checkboxes) or single-choice items (radio buttons), use the {@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String, -DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} or -{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} or +{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} methods, respectively.</p> <p>For example, here's how you can create a multiple-choice list like the @@ -349,7 +349,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // If the user checked the item, add it to the selected items mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { - // Else, if the item is already in the array, remove it + // Else, if the item is already in the array, remove it mSelectedItems.remove(Integer.valueOf(which)); } } @@ -376,7 +376,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { <p>Although both a traditional list and a list with radio buttons provide a "single choice" action, you should use {@link -android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) +android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener) setSingleChoiceItems()} if you want to persist the user's choice. That is, if opening the dialog again later should indicate what the user's current choice is, then you create a list with radio buttons.</p> @@ -445,7 +445,7 @@ you should change its font family to {@code "sans-serif"} so that both text fiel a matching font style.</p> <p>To inflate the layout in your {@link android.support.v4.app.DialogFragment}, -get a {@link android.view.LayoutInflater} with +get a {@link android.view.LayoutInflater} with {@link android.app.Activity#getLayoutInflater()} and call {@link android.view.LayoutInflater#inflate inflate()}, where the first parameter is the layout resource ID and the second parameter is a parent view for the layout. @@ -473,7 +473,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } - }); + }); return builder.create(); } </pre> @@ -508,7 +508,7 @@ interface through which it delivers the events back to the host activity:</p> <pre> public class NoticeDialogFragment extends DialogFragment { - + /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ @@ -516,10 +516,10 @@ public class NoticeDialogFragment extends DialogFragment { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } - + // Use this instance of the interface to deliver action events NoticeDialogListener mListener; - + // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { @@ -546,7 +546,7 @@ events through an implementation of the {@code NoticeDialogListener} interface:< public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... - + public void showNoticeDialog() { // Create an instance of the dialog fragment and show it DialogFragment dialog = new NoticeDialogFragment(); @@ -659,7 +659,7 @@ public class CustomDialogFragment extends DialogFragment { // Inflate the layout to use as dialog or embedded fragment return inflater.inflate(R.layout.purchase_items, container, false); } - + /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -681,7 +681,7 @@ or a fullscreen UI, based on the screen size:</p> public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); - + if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a dialog newFragment.show(fragmentManager, "dialog"); @@ -781,7 +781,7 @@ android.support.v4.app.DialogFragment#onDismiss onDismiss()} method in your {@li android.support.v4.app.DialogFragment}.</p> <p>You can also <em>cancel</em> a dialog. This is a special event that indicates the user -explicitly left the dialog without completing the task. This occurs if the user presses the +explicitly left the dialog without completing the task. This occurs if the user presses the <em>Back</em> button, touches the screen outside the dialog area, or if you explicitly call {@link android.app.Dialog#cancel()} on the {@link android.app.Dialog} (such as in response to a "Cancel" button in the dialog).</p> diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd index 4eb54f232568..8871c87f4f25 100644 --- a/docs/html/guide/topics/ui/drag-drop.jd +++ b/docs/html/guide/topics/ui/drag-drop.jd @@ -978,7 +978,7 @@ protected class myDragEventListener implements View.OnDragListener { Log.e("DragDrop Example","Unknown action type received by OnDragListener."); break; } - + return false; } }; diff --git a/docs/html/guide/topics/ui/how-android-draws.jd b/docs/html/guide/topics/ui/how-android-draws.jd index 168f77b265cf..79563692d493 100644 --- a/docs/html/guide/topics/ui/how-android-draws.jd +++ b/docs/html/guide/topics/ui/how-android-draws.jd @@ -4,18 +4,18 @@ parent.link=index.html @jd:body -<p>When an {@link android.app.Activity} receives focus, it will be requested to +<p>When an {@link android.app.Activity} receives focus, it will be requested to draw its layout. -The Android framework will handle the procedure for drawing, but the +The Android framework will handle the procedure for drawing, but the {@link android.app.Activity} must provide the root node of its layout hierarchy.</p> -<p>Drawing begins with the root node of the layout. It is requested to measure and -draw the layout tree. Drawing is handled by walking the tree and rendering each -{@link android.view.View} that intersects the invalid region. In turn, each +<p>Drawing begins with the root node of the layout. It is requested to measure and +draw the layout tree. Drawing is handled by walking the tree and rendering each +{@link android.view.View} that intersects the invalid region. In turn, each {@link android.view.ViewGroup} is responsible for requesting -each of its children to be drawn -(with the {@link android.view.View#draw(Canvas) draw()} method) +each of its children to be drawn +(with the {@link android.view.View#draw(Canvas) draw()} method) and each {@link android.view.View} is responsible for drawing itself. Because the tree is traversed in-order, this means that parents will be drawn before (i.e., behind) their children, with @@ -24,55 +24,55 @@ and each {@link android.view.View} is responsible for drawing itself. <div class="sidebox-wrapper"> <div class="sidebox"> - <p>The framework will not draw {@link android.view.View} objects that are not -in the invalid region, and also + <p>The framework will not draw {@link android.view.View} objects that are not +in the invalid region, and also will take care of drawing the {@link android.view.View} background for you.</p> - <p>You can force a {@link android.view.View} to draw, by calling + <p>You can force a {@link android.view.View} to draw, by calling {@link android.view.View#invalidate()}. </p> </div> </div> <p> - Drawing the layout is a two pass process: a measure pass and a layout pass. -The measuring pass is implemented in {@link android.view.View#measure(int, int)} -and is a top-down traversal of the {@link android.view.View} tree. Each {@link android.view.View} + Drawing the layout is a two pass process: a measure pass and a layout pass. +The measuring pass is implemented in {@link android.view.View#measure(int, int)} +and is a top-down traversal of the {@link android.view.View} tree. Each {@link android.view.View} pushes dimension specifications down the tree - during the recursion. At the end of the measure pass, every + during the recursion. At the end of the measure pass, every {@link android.view.View} has stored its measurements. The second pass happens in {@link android.view.View#layout(int,int,int,int)} and is also top-down. During this pass each parent is responsible for positioning all of its children using the sizes computed in the measure pass. </p> - + <p> - When a {@link android.view.View} object's -{@link android.view.View#measure(int, int) measure()} method + When a {@link android.view.View} object's +{@link android.view.View#measure(int, int) measure()} method returns, its {@link android.view.View#getMeasuredWidth()} and - {@link android.view.View#getMeasuredHeight()} values must be set, along - with those for all of that {@link android.view.View} object's descendants. -A {@link android.view.View} object's measured width and -measured height values must respect the constraints imposed by the + {@link android.view.View#getMeasuredHeight()} values must be set, along + with those for all of that {@link android.view.View} object's descendants. +A {@link android.view.View} object's measured width and +measured height values must respect the constraints imposed by the {@link android.view.View} object's parents. This guarantees that at the end of the measure pass, all parents accept all of their - children's measurements. A parent {@link android.view.View} may call + children's measurements. A parent {@link android.view.View} may call {@link android.view.View#measure(int, int) measure()} more than once on its children. For example, the parent may measure each child once with unspecified dimensions to find out how big they want to be, then call - {@link android.view.View#measure(int, int) measure()} on them again with + {@link android.view.View#measure(int, int) measure()} on them again with actual numbers if the sum of all the children's - unconstrained sizes is too big or too small (that is, if the children + unconstrained sizes is too big or too small (that is, if the children don't agree among themselves - as to how much space they each get, the parent will intervene and set + as to how much space they each get, the parent will intervene and set the rules on the second pass). </p> - + <div class="sidebox-wrapper"> <div class="sidebox"><p> - To initiate a layout, call {@link android.view.View#requestLayout}. + To initiate a layout, call {@link android.view.View#requestLayout}. This method is typically - called by a {@link android.view.View} on itself + called by a {@link android.view.View} on itself when it believes that is can no longer fit within its current bounds.</p> </div> @@ -80,54 +80,54 @@ when it believes that is can no longer fit within <p> The measure pass uses two classes to communicate dimensions. The - {@link android.view.ViewGroup.LayoutParams} class is used by + {@link android.view.ViewGroup.LayoutParams} class is used by {@link android.view.View} objects to tell their parents how they - want to be measured and positioned. The base + want to be measured and positioned. The base {@link android.view.ViewGroup.LayoutParams} class just - describes how big the {@link android.view.View} wants to be for both + describes how big the {@link android.view.View} wants to be for both width and height. For each dimension, it can specify one of:</p> <ul> <li> an exact number - <li>{@link android.view.ViewGroup.LayoutParams#MATCH_PARENT MATCH_PARENT}, + <li>{@link android.view.ViewGroup.LayoutParams#MATCH_PARENT MATCH_PARENT}, which means the {@link android.view.View} wants to be as big as its parent (minus padding)</li> - <li>{@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT WRAP_CONTENT}, + <li>{@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT WRAP_CONTENT}, which means that the {@link android.view.View} wants to be just big enough to enclose its content (plus padding).</li> </ul> - <p>There are subclasses of {@link android.view.ViewGroup.LayoutParams} for + <p>There are subclasses of {@link android.view.ViewGroup.LayoutParams} for different subclasses of {@link android.view.ViewGroup}. - For example, {@link android.widget.RelativeLayout} has its own subclass of + For example, {@link android.widget.RelativeLayout} has its own subclass of {@link android.view.ViewGroup.LayoutParams}, which includes - the ability to center child {@link android.view.View} objects + the ability to center child {@link android.view.View} objects horizontally and vertically. </p> - + <p> - {@link android.view.View.MeasureSpec MeasureSpec} objects are used to push + {@link android.view.View.MeasureSpec MeasureSpec} objects are used to push requirements down the tree from parent to - child. A {@link android.view.View.MeasureSpec MeasureSpec} can be in one of + child. A {@link android.view.View.MeasureSpec MeasureSpec} can be in one of three modes:</p> <ul> - <li>{@link android.view.View.MeasureSpec#UNSPECIFIED UNSPECIFIED}: This is + <li>{@link android.view.View.MeasureSpec#UNSPECIFIED UNSPECIFIED}: This is used by a parent to determine the desired dimension - of a child {@link android.view.View}. For example, a -{@link android.widget.LinearLayout} may call + of a child {@link android.view.View}. For example, a +{@link android.widget.LinearLayout} may call {@link android.view.View#measure(int, int) measure()} on its child - with the height set to {@link android.view.View.MeasureSpec#UNSPECIFIED UNSPECIFIED} -and a width of {@link android.view.View.MeasureSpec#EXACTLY EXACTLY} 240 to -find out how tall the child {@link android.view.View} wants to be given a + with the height set to {@link android.view.View.MeasureSpec#UNSPECIFIED UNSPECIFIED} +and a width of {@link android.view.View.MeasureSpec#EXACTLY EXACTLY} 240 to +find out how tall the child {@link android.view.View} wants to be given a width of 240 pixels.</li> - <li>{@link android.view.View.MeasureSpec#EXACTLY EXACTLY}: This is used + <li>{@link android.view.View.MeasureSpec#EXACTLY EXACTLY}: This is used by the parent to impose an exact size on the child. The child must use this size, and guarantee that all of its descendants will fit within this size.</li> - <li>{@link android.view.View.MeasureSpec#AT_MOST AT MOST}: This is used by + <li>{@link android.view.View.MeasureSpec#AT_MOST AT MOST}: This is used by the parent to impose a maximum size on the child. The child must guarantee that it and all of its descendants will fit within this size.</li> </ul> - + diff --git a/docs/html/guide/topics/ui/index.jd b/docs/html/guide/topics/ui/index.jd index 0725eb73defc..ccdf200ecac6 100644 --- a/docs/html/guide/topics/ui/index.jd +++ b/docs/html/guide/topics/ui/index.jd @@ -1,6 +1,6 @@ page.title=User Interface page.landing=true -page.landing.intro=Your app's user interface is everything that the user can see and interact with. Android provides a variety of pre-built UI components such as structured layout objects and UI controls that allow you to build the graphical user interface for your app. Android also provides other UI modules for special interfaces such as dialogs, notifications, and menus. +page.landing.intro=Your app's user interface is everything that the user can see and interact with. Android provides a variety of pre-built UI components such as structured layout objects and UI controls that allow you to build the graphical user interface for your app. Android also provides other UI modules for special interfaces such as dialogs, notifications, and menus. page.landing.image=images/ui/ui_index.png page.landing.next=overview.html diff --git a/docs/html/guide/topics/ui/layout/grid.jd b/docs/html/guide/topics/ui/layout/grid.jd index 3474f48c9d86..31f9b9ca4ead 100644 --- a/docs/html/guide/topics/ui/layout/grid.jd +++ b/docs/html/guide/topics/ui/layout/grid.jd @@ -32,7 +32,7 @@ cells empty, but cells cannot span columns, as they can in HTML.</p> Each row has zero or more cells, each of which is defined by any kind of other View. So, the cells of a row may be composed of a variety of View objects, like ImageView or TextView objects. A cell may also be a ViewGroup object (for example, you can nest another TableLayout as a cell).</p> -<p>The following sample layout has two rows and two cells in each. The accompanying screenshot shows the +<p>The following sample layout has two rows and two cells in each. The accompanying screenshot shows the result, with cell borders displayed as dotted lines (added for visual effect). </p> <table class="columns"> @@ -71,7 +71,7 @@ result, with cell borders displayed as dotted lines (added for visual effect). < <p>Columns can be hidden, marked to stretch and fill the available screen space, or can be marked as shrinkable to force the column to shrink until the table - fits the screen. See the {@link android.widget.TableLayout TableLayout reference} + fits the screen. See the {@link android.widget.TableLayout TableLayout reference} documentation for more details. </p> diff --git a/docs/html/guide/topics/ui/layout/linear.jd b/docs/html/guide/topics/ui/layout/linear.jd index 7441782f5e6f..4224d17d07a7 100644 --- a/docs/html/guide/topics/ui/layout/linear.jd +++ b/docs/html/guide/topics/ui/layout/linear.jd @@ -59,7 +59,7 @@ href="{@docRoot}reference/android/widget/LinearLayout.LayoutParams.html#attr_and >{@code android:layout_weight}</a> attribute. This attribute assigns an "importance" value to a view in terms of how much space it should occupy on the screen. A larger weight value allows it to expand -to fill any remaining space in the parent view. +to fill any remaining space in the parent view. Child views can specify a weight value, and then any remaining space in the view group is assigned to children in the proportion of their declared weight. Default weight is zero.</p> diff --git a/docs/html/guide/topics/ui/layout/listview.jd b/docs/html/guide/topics/ui/layout/listview.jd index 3c6e32ca41cf..e6e5578e6fd8 100644 --- a/docs/html/guide/topics/ui/layout/listview.jd +++ b/docs/html/guide/topics/ui/layout/listview.jd @@ -80,7 +80,7 @@ public class ListViewLoader extends ListActivity ContactsContract.Data.DISPLAY_NAME}; // This is the select criteria - static final String SELECTION = "((" + + static final String SELECTION = "((" + ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" + ContactsContract.Data.DISPLAY_NAME + " != '' ))"; @@ -105,7 +105,7 @@ public class ListViewLoader extends ListActivity // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() - mAdapter = new SimpleCursorAdapter(this, + mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, fromColumns, toViews, 0); setListAdapter(mAdapter); @@ -138,7 +138,7 @@ public class ListViewLoader extends ListActivity mAdapter.swapCursor(null); } - @Override + @Override public void onListItemClick(ListView l, View v, int position, long id) { // Do something when a list item is clicked } diff --git a/docs/html/guide/topics/ui/layout/relative.jd b/docs/html/guide/topics/ui/layout/relative.jd index ca5cb4838036..92735ae808bf 100644 --- a/docs/html/guide/topics/ui/layout/relative.jd +++ b/docs/html/guide/topics/ui/layout/relative.jd @@ -38,7 +38,7 @@ make one below another, centered in the screen, centered left, and so on. By def views are drawn at the top-left of the layout, so you must define the position of each view using the various layout properties available from {@link android.widget.RelativeLayout.LayoutParams}.</p> - + <p>Some of the many layout properties available to views in a {@link android.widget.RelativeLayout} include:</p> <dl> diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd index ad2aa9b8bf29..73dec2095dca 100644 --- a/docs/html/guide/topics/ui/menus.jd +++ b/docs/html/guide/topics/ui/menus.jd @@ -77,9 +77,9 @@ activity. It's where you should place actions that have a global impact on the a "Search," "Compose email," and "Settings." <p>See the section about <a href="#options-menu">Creating an Options Menu</a>.</p> </dd> - + <dt><strong>Context menu and contextual action mode</strong></dt> - + <dd>A context menu is a <a href="#FloatingContextMenu">floating menu</a> that appears when the user performs a long-click on an element. It provides actions that affect the selected content or context frame. @@ -88,7 +88,7 @@ action items that affect the selected content in a bar at the top of the screen to select multiple items.</p> <p>See the section about <a href="#context-menu">Creating Contextual Menus</a>.</p> </dd> - + <dt><strong>Popup menu</strong></dt> <dd>A popup menu displays a list of items in a vertical list that's anchored to the view that invoked the menu. It's good for providing an overflow of actions that relate to specific content or @@ -130,7 +130,7 @@ directory and build the menu with the following elements:</p> <dt><code><item></code></dt> <dd>Creates a {@link android.view.MenuItem}, which represents a single item in a menu. This element may contain a nested <code><menu></code> element in order to create a submenu.</dd> - + <dt><code><group></code></dt> <dd>An optional, invisible container for {@code <item>} elements. It allows you to categorize menu items so they share properties such as active state and visibility. For more @@ -224,7 +224,7 @@ the sixth item and the rest into the overflow menu, which the user can open by s <em>More</em>.</li> <li>If you've developed your application for <strong>Android 3.0 (API level 11) and -higher</strong>, items from the options menu are available in the +higher</strong>, items from the options menu are available in the app bar. By default, the system places all items in the action overflow, which the user can reveal with the action overflow icon on the right side of the app bar (or by pressing the device <em>Menu</em> button, if available). To @@ -343,7 +343,7 @@ again unless the menu is invalidated for some reason. However, you should use {@ android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} only to create the initial menu state and not to make changes during the activity lifecycle.</p> -<p>If you want to modify the options menu based on +<p>If you want to modify the options menu based on events that occur during the activity lifecycle, you can do so in the {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()} method. This method passes you the {@link android.view.Menu} object as it currently exists so you can modify it, @@ -360,7 +360,7 @@ presented in the app bar. When an event occurs and you want to perform a menu up call {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} to request that the system call {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p> -<p class="note"><strong>Note:</strong> +<p class="note"><strong>Note:</strong> You should never change items in the options menu based on the {@link android.view.View} currently in focus. When in touch mode (when the user is not using a trackball or d-pad), views cannot take focus, so you should never use focus as the basis for modifying @@ -738,8 +738,8 @@ that shows a popup menu:</p> <pre> <ImageButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:src="@drawable/ic_overflow_holo_dark" android:contentDescription="@string/descr_overflow_button" android:onClick="showPopup" /> @@ -1023,6 +1023,6 @@ category. For example:</p> <p>Read more about writing intent filters in the <a href="/guide/components/intents-filters.html">Intents and Intent Filters</a> document.</p> -<p>For a sample application using this technique, see the +<p>For a sample application using this technique, see the <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note Pad</a> sample code.</p> diff --git a/docs/html/guide/topics/ui/notifiers/toasts.jd b/docs/html/guide/topics/ui/notifiers/toasts.jd index e5d4a0a35651..d9627274fa3e 100644 --- a/docs/html/guide/topics/ui/notifiers/toasts.jd +++ b/docs/html/guide/topics/ui/notifiers/toasts.jd @@ -2,14 +2,14 @@ page.title=Toasts @jd:body <div id="qv-wrapper"> - <div id="qv"> + <div id="qv"> <h2>In this document</h2> <ol> <li><a href="#Basics">The Basics</a></li> <li><a href="#Positioning">Positioning your Toast</a></li> <li><a href="#CustomToastView">Creating a Custom Toast View</a></li> </ol> - + <h2>Key classes</h2> <ol> <li>{@link android.widget.Toast}</li> @@ -19,14 +19,14 @@ page.title=Toasts <p>A toast provides simple feedback about an operation in a small popup. It only fills the amount of space required for the message and the current -activity remains visible and interactive. -For example, navigating away from an email before you send it triggers a -"Draft saved" toast to let you know that you can continue editing later. +activity remains visible and interactive. +For example, navigating away from an email before you send it triggers a +"Draft saved" toast to let you know that you can continue editing later. Toasts automatically disappear after a timeout.</p> <img src="{@docRoot}images/toast.png" alt="" /> -<p>If user response to a status message is required, consider instead using a +<p>If user response to a status message is required, consider instead using a <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Notification</a>.</p> @@ -49,8 +49,8 @@ toast.show(); </pre> <p>This example demonstrates everything you need for most toast notifications. -You should rarely need anything else. You may, however, want to position the -toast differently or even use your own layout instead of a simple text message. +You should rarely need anything else. You may, however, want to position the +toast differently or even use your own layout instead of a simple text message. The following sections describe how you can do these things.</p> <p>You can also chain your methods and avoid holding on to the Toast object, like this:</p> @@ -61,7 +61,7 @@ The following sections describe how you can do these things.</p> <p>A standard toast notification appears near the bottom of the screen, centered horizontally. You can change this position with the {@link android.widget.Toast#setGravity(int,int,int)} -method. This accepts three parameters: a {@link android.view.Gravity} constant, +method. This accepts three parameters: a {@link android.view.Gravity} constant, an x-position offset, and a y-position offset.</p> <p>For example, if you decide that the toast should appear in the top-left corner, you can set the @@ -70,7 +70,7 @@ gravity like this:</p> toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); </pre> -<p>If you want to nudge the position to the right, increase the value of the second parameter. +<p>If you want to nudge the position to the right, increase the value of the second parameter. To nudge it down, increase the value of the last parameter. @@ -103,7 +103,7 @@ with the following XML (saved as <em>toast_layout.xml</em>):</p> android:textColor="#FFF" /> </LinearLayout> -</pre> +</pre> <p>Notice that the ID of the LinearLayout element is "toast_layout_root". You must use this ID to inflate the layout from the XML, as shown here:</p> @@ -123,21 +123,21 @@ toast.setView(layout); toast.show(); </pre> -<p>First, retrieve the {@link android.view.LayoutInflater} with -{@link android.app.Activity#getLayoutInflater()} +<p>First, retrieve the {@link android.view.LayoutInflater} with +{@link android.app.Activity#getLayoutInflater()} (or {@link android.content.Context#getSystemService(String) getSystemService()}), -and then inflate the layout from XML using +and then inflate the layout from XML using {@link android.view.LayoutInflater#inflate(int, ViewGroup)}. The first parameter is the layout resource ID and the second is the root View. You can use -this inflated layout to find more View objects in the layout, so now capture and +this inflated layout to find more View objects in the layout, so now capture and define the content for the ImageView and TextView elements. Finally, create a new Toast with {@link android.widget.Toast#Toast(Context)} and set some properties of the toast, such as the gravity and duration. Then call {@link android.widget.Toast#setView(View)} and pass it the inflated layout. -You can now display the toast with your custom layout by calling +You can now display the toast with your custom layout by calling {@link android.widget.Toast#show()}.</p> -<p class="note"><strong>Note:</strong> Do not use the public constructor for a Toast +<p class="note"><strong>Note:</strong> Do not use the public constructor for a Toast unless you are going to define the layout with {@link android.widget.Toast#setView(View)}. If you do not have a custom layout to use, you must use {@link android.widget.Toast#makeText(Context,int,int)} to create the Toast.</p> diff --git a/docs/html/guide/topics/ui/overview.jd b/docs/html/guide/topics/ui/overview.jd index 85c5756de35c..f323d6c4926d 100644 --- a/docs/html/guide/topics/ui/overview.jd +++ b/docs/html/guide/topics/ui/overview.jd @@ -39,7 +39,7 @@ group. </p> <pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" + android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" @@ -60,7 +60,7 @@ layout.</p> <p>For a complete guide to creating a UI layout, see <a href="declaring-layout.html">XML Layouts</a>. - + <h2 id="UIComponents">User Interface Components</h2> <p>You don't have to build all of your UI using {@link android.view.View} and {@link diff --git a/docs/html/guide/topics/ui/settings.jd b/docs/html/guide/topics/ui/settings.jd index 243c1c340eb3..9e304a3f603c 100644 --- a/docs/html/guide/topics/ui/settings.jd +++ b/docs/html/guide/topics/ui/settings.jd @@ -84,7 +84,7 @@ href="{@docRoot}design/patterns/settings.html">Settings</a> design guide.</p> <img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" /> <p class="img-caption"><strong>Figure 1.</strong> Screenshots from the Android Messaging app's -settings. Selecting an item defined by a {@link android.preference.Preference} +settings. Selecting an item defined by a {@link android.preference.Preference} opens an interface to change the setting.</p> @@ -230,7 +230,7 @@ android.preference.ListPreference}. Both items include the following three attri <dt>{@code android:key}</dt> <dd>This attribute is required for preferences that persist a data value. It specifies the unique key (a string) the system uses when saving this setting's value in the {@link -android.content.SharedPreferences}. +android.content.SharedPreferences}. <p>The only instances in which this attribute is <em>not required</em> is when the preference is a {@link android.preference.PreferenceCategory} or {@link android.preference.PreferenceScreen}, or the preference specifies an {@link android.content.Intent} to invoke (with an <a @@ -291,7 +291,7 @@ android.preference.PreferenceCategory}.</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory + <PreferenceCategory android:title="@string/pref_sms_storage_title" android:key="pref_key_storage_settings"> <CheckBoxPreference @@ -299,12 +299,12 @@ android.preference.PreferenceCategory}.</p> android:summary="@string/pref_summary_auto_delete" android:title="@string/pref_title_auto_delete" android:defaultValue="false"... /> - <Preference + <Preference android:key="pref_key_sms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" android:title="@string/pref_title_sms_delete"... /> - <Preference + <Preference android:key="pref_key_mms_delete_limit" android:dependency="pref_key_auto_delete" android:summary="@string/pref_summary_delete_limit" @@ -594,11 +594,11 @@ element inside a root {@code <preference-headers>} element. For example:</p> <pre> <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > @@ -678,15 +678,15 @@ the {@link android.preference.PreferenceActivity} that specifies which preferenc load.</p> <p>For example, here's an XML file for preference headers that is used on Android 3.0 -and higher ({@code res/xml/preference_headers.xml}):</p> +and higher ({@code res/xml/preference_headers.xml}):</p> <pre> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> - <header + <header android:fragment="com.example.prefs.SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> - <header + <header android:fragment="com.example.prefs.SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" /> @@ -698,18 +698,18 @@ Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p> <pre> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference + <Preference android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_ONE" /> </Preference> - <Preference + <Preference android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > - <intent + <intent android:targetPackage="com.example.prefs" android:targetClass="com.example.prefs.SettingsActivity" android:action="com.example.prefs.PREFS_TWO" /> @@ -982,11 +982,11 @@ default positive and negative dialog buttons:</p> public class NumberPickerPreference extends DialogPreference { public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); - + setDialogLayoutResource(R.layout.numberpicker_dialog); setPositiveButtonText(android.R.string.ok); setNegativeButtonText(android.R.string.cancel); - + setDialogIcon(null); } ... @@ -1201,7 +1201,7 @@ protected void onRestoreInstanceState(Parcelable state) { // Cast state to custom BaseSavedState and pass to superclass SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); - + // Set this Preference's widget to reflect the restored state mNumberPicker.setValue(myState.value); } diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd index f932dbdec191..436b789ea51f 100644 --- a/docs/html/guide/topics/ui/themes.jd +++ b/docs/html/guide/topics/ui/themes.jd @@ -177,7 +177,7 @@ You're probably familiar with some already, such as {@link android.R.attr#layout <p>The best place to find properties that apply to a specific {@link android.view.View} is the corresponding class reference, which lists all of the supported XML attributes. For example, all of the attributes listed in the table of -<a href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML +<a href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML attributes</a> can be used in a style definition for a {@link android.widget.TextView} element (or one of its subclasses). One of the attributes listed in the reference is <a href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code @@ -279,14 +279,14 @@ does <em>not</em> use the <code>android:</code> namespace prefix.</p> <h3 id="ApplyATheme">Apply a theme to an Activity or application</h3> <p>To set a theme for all the activities of your application, open the {@code AndroidManifest.xml} file and -edit the <code><application></code> tag to include the <code>android:theme</code> attribute with the +edit the <code><application></code> tag to include the <code>android:theme</code> attribute with the style name. For example:</p> <pre> <application android:theme="@style/CustomTheme"> </pre> -<p>If you want a theme applied to just one Activity in your application, then add the +<p>If you want a theme applied to just one Activity in your application, then add the <code>android:theme</code> attribute to the <code><activity></code> tag instead.</p> <p>Just as Android provides other built-in resources, there are many pre-defined themes that you can use, to avoid @@ -374,9 +374,9 @@ keeps your program code focused on application functionality, rather than style. for you to change your theme programatically (perhaps based on a user preference), you can.</p> <p>To set the theme in your program code, use the {@link android.content.ContextWrapper#setTheme(int)} -method and pass it the theme resource ID. Note that, when doing so, you must be sure to set the theme <em>before</em> -instantiating any Views in the context, for example, before calling -<code>setContentView(View)</code> or <code>inflate(int, ViewGroup)</code>. This ensures that +method and pass it the theme resource ID. Note that, when doing so, you must be sure to set the theme <em>before</em> +instantiating any Views in the context, for example, before calling +<code>setContentView(View)</code> or <code>inflate(int, ViewGroup)</code>. This ensures that the system applies the same theme for all of your UI screens. Here's an example:</p> <pre> @@ -391,7 +391,7 @@ the system applies the same theme for all of your UI screens. Here's an example: <p>If you are considering loading a theme programmatically for the main screen of your application, note that the theme would not be applied in any animations the system would use to start the activity, which -would take place before your application opens. In most cases, if +would take place before your application opens. In most cases, if you want to apply a theme to your main screen, doing so in XML is a better approach. </p> diff --git a/docs/html/guide/topics/ui/ui-events.jd b/docs/html/guide/topics/ui/ui-events.jd index 6d41b15f6c17..7dd24a44fa89 100644 --- a/docs/html/guide/topics/ui/ui-events.jd +++ b/docs/html/guide/topics/ui/ui-events.jd @@ -20,8 +20,8 @@ parent.link=index.html When considering events within your user interface, the approach is to capture the events from the specific View object that the user interacts with. The View class provides the means to do so.</p> -<p>Within the various View classes that you'll use to compose your layout, you may notice several public callback -methods that look useful for UI events. These methods are called by the Android framework when the +<p>Within the various View classes that you'll use to compose your layout, you may notice several public callback +methods that look useful for UI events. These methods are called by the Android framework when the respective action occurs on that object. For instance, when a View (such as a Button) is touched, the <code>onTouchEvent()</code> method is called on that object. However, in order to intercept this, you must extend the class and override the method. However, extending every View object @@ -30,7 +30,7 @@ a collection of nested interfaces with callbacks that you can much more easily d called <a href="#EventListeners">event listeners</a>, are your ticket to capturing the user interaction with your UI.</p> <p>While you will more commonly use the event listeners to listen for user interaction, there may -come a time when you do want to extend a View class, in order to build a custom component. +come a time when you do want to extend a View class, in order to build a custom component. Perhaps you want to extend the {@link android.widget.Button} class to make something more fancy. In this case, you'll be able to define the default event behaviors for your class using the class <a href="#EventHandlers">event handlers</a>.</p> @@ -38,7 +38,7 @@ class using the class <a href="#EventHandlers">event handlers</a>.</p> <h2 id="EventListeners">Event Listeners</h2> -<p>An event listener is an interface in the {@link android.view.View} class that contains a single +<p>An event listener is an interface in the {@link android.view.View} class that contains a single callback method. These methods will be called by the Android framework when the View to which the listener has been registered is triggered by user interaction with the item in the UI.</p> @@ -46,27 +46,27 @@ been registered is triggered by user interaction with the item in the UI.</p> <dl> <dt><code>onClick()</code></dt> - <dd>From {@link android.view.View.OnClickListener}. - This is called when the user either touches the item + <dd>From {@link android.view.View.OnClickListener}. + This is called when the user either touches the item (when in touch mode), or focuses upon the item with the navigation-keys or trackball and presses the suitable "enter" key or presses down on the trackball.</dd> <dt><code>onLongClick()</code></dt> - <dd>From {@link android.view.View.OnLongClickListener}. - This is called when the user either touches and holds the item (when in touch mode), or + <dd>From {@link android.view.View.OnLongClickListener}. + This is called when the user either touches and holds the item (when in touch mode), or focuses upon the item with the navigation-keys or trackball and presses and holds the suitable "enter" key or presses and holds down on the trackball (for one second).</dd> <dt><code>onFocusChange()</code></dt> - <dd>From {@link android.view.View.OnFocusChangeListener}. + <dd>From {@link android.view.View.OnFocusChangeListener}. This is called when the user navigates onto or away from the item, using the navigation-keys or trackball.</dd> <dt><code>onKey()</code></dt> - <dd>From {@link android.view.View.OnKeyListener}. + <dd>From {@link android.view.View.OnKeyListener}. This is called when the user is focused on the item and presses or releases a hardware key on the device.</dd> <dt><code>onTouch()</code></dt> - <dd>From {@link android.view.View.OnTouchListener}. + <dd>From {@link android.view.View.OnTouchListener}. This is called when the user performs an action qualified as a touch event, including a press, a release, or any movement gesture on the screen (within the bounds of the item).</dd> <dt><code>onCreateContextMenu()</code></dt> - <dd>From {@link android.view.View.OnCreateContextMenuListener}. + <dd>From {@link android.view.View.OnCreateContextMenuListener}. This is called when a Context Menu is being built (as the result of a sustained "long click"). See the discussion on context menus in the <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menus</a> developer guide.</dd> @@ -75,8 +75,8 @@ been registered is triggered by user interaction with the item in the UI.</p> <p>These methods are the sole inhabitants of their respective interface. To define one of these methods and handle your events, implement the nested interface in your Activity or define it as an anonymous class. Then, pass an instance of your implementation -to the respective <code>View.set...Listener()</code> method. (E.g., call -<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> +to the respective <code>View.set...Listener()</code> method. (E.g., call +<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code> and pass it your implementation of the {@link android.view.View.OnClickListener OnClickListener}.)</p> <p>The example below shows how to register an on-click listener for a Button. </p> @@ -121,17 +121,17 @@ public class ExampleActivity extends Activity implements OnClickListener { no return value, but some other event listener methods must return a boolean. The reason depends on the event. For the few that do, here's why:</p> <ul> - <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - - This returns a boolean to indicate whether you have consumed the event and it should not be carried further. - That is, return <em>true</em> to indicate that you have handled the event and it should stop here; + <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> - + This returns a boolean to indicate whether you have consumed the event and it should not be carried further. + That is, return <em>true</em> to indicate that you have handled the event and it should stop here; return <em>false</em> if you have not handled it and/or the event should continue to any other on-click listeners.</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> - This returns a boolean to indicate whether you have consumed the event and it should not be carried further. - That is, return <em>true</em> to indicate that you have handled the event and it should stop here; + That is, return <em>true</em> to indicate that you have handled the event and it should stop here; return <em>false</em> if you have not handled it and/or the event should continue to any other on-key listeners.</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> - This returns a boolean to indicate whether your listener consumes this event. The important thing is that this event can have multiple actions that follow each other. So, if you return <em>false</em> when the down action event is received, you indicate that you have not consumed the event and are also @@ -142,7 +142,7 @@ depends on the event. For the few that do, here's why:</p> <p>Remember that hardware key events are always delivered to the View currently in focus. They are dispatched starting from the top of the View hierarchy, and then down, until they reach the appropriate destination. If your View (or a child of your View) currently has focus, then you can see the event travel through the <code>{@link android.view.View#dispatchKeyEvent(KeyEvent) -dispatchKeyEvent()}</code> method. As an alternative to capturing key events through your View, you can also receive +dispatchKeyEvent()}</code> method. As an alternative to capturing key events through your View, you can also receive all of the events inside your Activity with <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code> and <code>{@link android.app.Activity#onKeyUp(int,KeyEvent) onKeyUp()}</code>.</p> @@ -176,19 +176,19 @@ including:</p> <li><code>{@link android.view.View#onTouchEvent}</code> - Called when a touch screen motion event occurs.</li> <li><code>{@link android.view.View#onFocusChanged}</code> - Called when the view gains or loses focus.</li> </ul> -<p>There are some other methods that you should be aware of, which are not part of the View class, -but can directly impact the way you're able to handle events. So, when managing more complex events inside +<p>There are some other methods that you should be aware of, which are not part of the View class, +but can directly impact the way you're able to handle events. So, when managing more complex events inside a layout, consider these other methods:</p> <ul> <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent) - Activity.dispatchTouchEvent(MotionEvent)}</code> - This allows your {@link + Activity.dispatchTouchEvent(MotionEvent)}</code> - This allows your {@link android.app.Activity} to intercept all touch events before they are dispatched to the window.</li> <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent) ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - This allows a {@link android.view.ViewGroup} to watch events as they are dispatched to child Views.</li> <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean) ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Call this - upon a parent View to indicate that it should not intercept touch events with <code>{@link + upon a parent View to indicate that it should not intercept touch events with <code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li> </ul> @@ -199,7 +199,7 @@ necessary to give focus to actionable items (like buttons) so the user can see what will accept input. If the device has touch capabilities, however, and the user begins interacting with the interface by touching it, then it is no longer necessary to highlight items, or give focus to a particular View. Thus, there is a mode -for interaction named "touch mode." +for interaction named "touch mode." </p> <p> For a touch-capable device, once the user touches the screen, the device @@ -214,7 +214,7 @@ exit touch mode, and find a view to take focus. Now, the user may resume interac with the user interface without touching the screen. </p> <p> -The touch mode state is maintained throughout the entire system (all windows and activities). +The touch mode state is maintained throughout the entire system (all windows and activities). To query the current state, you can call {@link android.view.View#isInTouchMode} to see whether the device is currently in touch mode. </p> @@ -254,10 +254,10 @@ the focus is leaving. Define the value of the attribute to be the id of the View <p>Ordinarily, in this vertical layout, navigating up from the first Button would not go anywhere, nor would navigating down from the second Button. Now that the top Button has -defined the bottom one as the <var>nextFocusUp</var> (and vice versa), the navigation focus will +defined the bottom one as the <var>nextFocusUp</var> (and vice versa), the navigation focus will cycle from top-to-bottom and bottom-to-top.</p> -<p>If you'd like to declare a View as focusable in your UI (when it is traditionally not), +<p>If you'd like to declare a View as focusable in your UI (when it is traditionally not), add the <code>android:focusable</code> XML attribute to the View, in your layout declaration. Set the value <var>true</var>. You can also declare a View as focusable while in Touch Mode with <code>android:focusableInTouchMode</code>.</p> @@ -282,7 +282,7 @@ as discussed in the <a href="#EventListeners">Event Listeners</a> section, above the framework will take care of measuring, laying out, and drawing the tree as appropriate.</li> </ol> - + <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on the UI thread when calling any method on any View. If you are doing work on other threads and want to update the state of a View diff --git a/docs/html/guide/webapps/debugging.jd b/docs/html/guide/webapps/debugging.jd index a74797df3bd3..9e8e11337b73 100755 --- a/docs/html/guide/webapps/debugging.jd +++ b/docs/html/guide/webapps/debugging.jd @@ -92,7 +92,7 @@ expect from other web browsers.</p> <h2 id="WebView">Using Console APIs in WebView</h2> <p>All the console APIs shown above are also -supported when debugging in {@link android.webkit.WebView}. +supported when debugging in {@link android.webkit.WebView}. If you're targeting Android 2.1 (API level 7) and higher, you must provide a {@link android.webkit.WebChromeClient} that implements the {@link android.webkit.WebChromeClient#onConsoleMessage(String,int,String) diff --git a/docs/html/guide/webapps/targeting.jd b/docs/html/guide/webapps/targeting.jd index 4a2ea1773c95..10259b115b29 100644 --- a/docs/html/guide/webapps/targeting.jd +++ b/docs/html/guide/webapps/targeting.jd @@ -108,7 +108,7 @@ should exactly match the device screen's width and that the ability to zoom shou <p>When optimizing your site for mobile devices, you should usually set the width to -{@code "device-width"} so the size fits exactly on all devices, then use CSS media queries to +{@code "device-width"} so the size fits exactly on all devices, then use CSS media queries to flexibly adapt layouts to suit different screen sizes. <p class="note"><strong>Note:</strong> You should disable user scaling only when you're certain diff --git a/docs/html/images/distribute/google-sign-in-banner.png b/docs/html/images/distribute/google-sign-in-banner.png Binary files differnew file mode 100644 index 000000000000..ba046861a770 --- /dev/null +++ b/docs/html/images/distribute/google-sign-in-banner.png diff --git a/docs/html/jd_extras_en.js b/docs/html/jd_extras_en.js index 434f2116a0b4..5c4227781de2 100644 --- a/docs/html/jd_extras_en.js +++ b/docs/html/jd_extras_en.js @@ -2887,6 +2887,19 @@ METADATA['en'].extras = METADATA['en'].extras.concat([ "lang": "en", "group": "", "tags": [], + "url": "https://www.udacity.com/courses/ud876-3", + "timestamp": null, + "image": "distribute/images/advertising.jpg", + "title": "Learn how to show ads in your Android app", + "summary": "Take this online course to learn how to use AdMob to display ads in your Android app.", + "keywords": ["marketing", "analytics"], + "type": "distribute", + "titleFriendly": "" + }, + { + "lang": "en", + "group": "", + "tags": [], "url": "https://developers.google.com/mobile-ads-sdk/download", "timestamp": null, "image": "distribute/images/advertising.jpg", @@ -2969,7 +2982,7 @@ METADATA['en'].extras = METADATA['en'].extras.concat([ "url": "https://developers.google.com/identity/sign-in/android/people", "timestamp": 1383243492000, "image": "images/cards/google-sign-in_2x.png", - "title": "Get user profile details", + "title": "Get User Profile Details", "summary": "After users sign-in with Google, you can access their age range, language, and public profile information.", "keywords": ["signin", "identity", "google"], "type": "distribute", diff --git a/docs/html/license.jd b/docs/html/license.jd index 4f4036b41211..e843c6b35e07 100644 --- a/docs/html/license.jd +++ b/docs/html/license.jd @@ -9,7 +9,7 @@ excludeFromSuggestions=true <p>For the purposes of licensing, the content of this web site is divided into two categories:</p> <ul> - <li>Documentation content, including both static documentation and content extracted from source + <li>Documentation content, including both static documentation and content extracted from source code modules, as well as sample code, and </li> <li>All other site content</li> </ul> @@ -66,7 +66,7 @@ it as an audiobook for the visually impaired, or even translate it. </p> license, note that proprietary trademarks and brand features are not included in that license.</li> -<li>Google's trademarks and other brand features (including the +<li>Google's trademarks and other brand features (including the <img src="images/android-logo.png" alt="Android" style="margin:0;padding:0 2px;vertical-align:baseline" /> stylized typeface logo) are not included in the license. @@ -74,7 +74,7 @@ Please see <a href="{@docRoot}distribute/tools/promote/brand.html">Brand Guidelines</a> for information about this usage. </li> -<li>In some cases, a page may include content, such as an image, that is not +<li>In some cases, a page may include content, such as an image, that is not covered by the license. In that case, we will label the content that is not licensed. </li> <li>In addition, content linked from a page on this site is not covered @@ -92,22 +92,22 @@ Proper attribution is required when you reuse or create modified versions of content that appears on a page made available under the terms of the Creative Commons Attribution license. On this site, the requirement for attribution applies only to the non-documentation -content, as described earlier in this document. The complete -requirements for attribution can be found in section 4b of the +content, as described earlier in this document. The complete +requirements for attribution can be found in section 4b of the <a href="http://creativecommons.org/licenses/by/2.5/legalcode"> Creative Commons legal code</a>. </p> <p> In practice we ask that you provide attribution to the Android Open - Source project to the best of the ability of the medium in which you - are producing the work. There are several typical ways in which this + Source project to the best of the ability of the medium in which you + are producing the work. There are several typical ways in which this might apply: </p> <h3>Exact Reproductions</h3> <p> If your online work <em>exactly reproduces</em> text or images from this site, in whole or in part, please include a paragraph at the bottom - of your page that reads: + of your page that reads: </p> <p style="margin-left:20px;font-style:italic"> Portions of this page are reproduced from work created and <a diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd index 90b4e39d7ac2..c7ffb7a06b76 100644 --- a/docs/html/preview/api-overview.jd +++ b/docs/html/preview/api-overview.jd @@ -27,6 +27,7 @@ page.image=images/cards/card-n-apis_2x.png <li><a href="#multi-locale_languages">Locales and Languages</a></li> <li><a href="#emoji">New Emojis</a></li> <li><a href="#icu4">ICU4J APIs in Android</a></li> + <li><a href="#webview">WebView</a></li> <li><a href="#gles_32">OpenGL ES 3.2 API</a></li> <li><a href="#android_tv_recording">Android TV Recording</a></li> <li><a href="#android_for_work">Android for Work</a></li> @@ -573,7 +574,85 @@ should follow, see <a href="{@docRoot}preview/features/multilingual-support.html "{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>. </p> +<h2 id="webview">WebView</h2> +<h3>Chrome + WebView, Together</h3> + +<p> + Starting with Chrome version 51 on Android N and above, the Chrome APK on your device + is used to provide and render Android System WebViews. This approach improves memory + usage on the device itself and also reduces the bandwidth required to keep + WebView up to date (as the standalone WebView APK will no longer be updated + as long as Chrome remains enabled). +</p> + +<p> + You can choose your WebView provider by enabling Developer Options and + selecting <strong>WebView implementation</strong>. You can use any compatible + Chrome version (Dev, Beta or Stable) that is installed on your device or the + standalone Webview APK to act as the WebView implementation. +</p> + +<h3>Multiprocess</h3> + +<p> + Starting with Chrome version 51 in Android N, WebView will run web content in a + separate sandboxed process when the developer option "Multiprocess WebView" + is enabled. +</p> + +<p> + We're looking for feedback on compatibility and runtime performance in N + before enabling multiprocess WebView in a future version of Android. In this + version, regressions in startup time, total memory usage and software + rendering performance are expected. +</p> + +<p> + If you find unexpected issues in multiprocess mode we’d like to hear about + them. Please get in touch with the WebView team on the <a href= + "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs" + >Chromium bug tracker</a>. +</p> + +<h3>Javascript run before page load</h3> +<p> + Starting with apps targeting Android N, the Javascript context will be reset + when a new page is loaded. Currently, the context is carried over for the + first page loaded in a new WebView instance. +</p> + +<p> + Developers looking to inject Javascript into the WebView should execute the + script after the page has started to load. +</p> + +<h3>Geolocation on insecure origins</h3> + +<p> + Starting with apps targeting Android N, the geolocation API will only be + allowed on secure origins (over HTTPS.) This policy is designed to protect + users’ private information when they’re using an insecure connection. +</p> + +<h3>Testing with WebView Beta</h3> + +<p> + WebView is updated regularly, so we recommend that you test compatibility + with your app frequently using WebView’s beta channel. To get started testing + pre-release versions of WebView on Android N, download and install either + Chrome Dev or Chrome Beta, and select it as the WebView implementation under + developer options as described above. Please report issues via the <a href= + "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">Chromium + bug tracker</a> so that we can fix them before a new version of WebView is + released. +</p> + +<p> + If you have any other questions or issues, feel free to reach out to the + WebView team via our <a href= + "https://plus.google.com/communities/105434725573080290360">G+ community</a>. +</p> <h2 id="gles_32">OpenGL™ ES 3.2 API</h2> @@ -667,8 +746,9 @@ action <code>android.net.VpnService</code>. </p> <p> Users can also manually set Always on VPN clients that implement - <code>VPNService</code> methods in the primary user using - <strong>Settings>More>Vpn</strong>. + <code>VPNService</code> methods using + <strong>Settings>More>Vpn</strong>. The option to enable Always on VPN + from Settings is available only if VPN client targets API level 24. </p> <h3 id="custom_provisioning">Customized provisioning</h3> diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd index 3a3729534462..ba08d9b16411 100644 --- a/docs/html/preview/behavior-changes.jd +++ b/docs/html/preview/behavior-changes.jd @@ -748,6 +748,40 @@ JavaVM::AttachCurrentThread from <jni.h>. to the trusted credentials storage via Settings UI separately, with a DER-encoded format under a .crt or .cer file extension. </li> + + <li>Starting in Android N, fingerprint enrollment and storage are managed per user. + If a profile owner’s Device Policy Client (DPC) targets pre-N on an N device, + the user is still able to set fingerprint on the device, but work + applications cannot access device fingerprint. When the DPC targets N and + above, the user can set fingerprint specifically for work profile by going to + <strong>Settings > Security > Work profile security</strong>. + </li> + + <li>A new encryption status <code>ENCRYPTION_STATUS_ACTIVE_PER_USER</code> is + returned by <code>DevicePolicyManager.getStorageEncryptionStatus()</code>, to + indicate that encryption is active and the encryption key is tied to the + user. The new status is only returned if DPC targets API Level 24 and above. + For apps targeting earlier API levels, <code>ENCRYPTION_STATUS_ACTIVE</code> + is returned, even if the encryption key is specific to the user or profile. + </li> + + <li>In Android N, several methods that would ordinarily affect the entire + device behave differently if the device has a work profile installed with a + separate work challenge. Rather than affecting the entire device, these + methods apply only to the work profile. (The complete list of such methods is + in the {@link android.app.admin.DevicePolicyManager#getParentProfileInstance + DevicePolicyManager.getParentProfileInstance()} documentation.) For example, + {@link android.app.admin.DevicePolicyManager#lockNow + DevicePolicyManager.lockNow()} locks just the work profile, instead of + locking the entire device. For each of these methods, you can get the old + behavior by calling the method on the parent instance of the + {@link android.app.admin.DevicePolicyManager}; you can get this parent by + calling {@link android.app.admin.DevicePolicyManager#getParentProfileInstance + DevicePolicyManager.getParentProfileInstance()}. So for example, if you call + the parent instance's {@link android.app.admin.DevicePolicyManager#lockNow} + method, the entire device is locked. + </li> + </ul> <p> diff --git a/docs/html/preview/download-ota.jd b/docs/html/preview/download-ota.jd index 18f3e8d01f0a..65f7f9f746f2 100644 --- a/docs/html/preview/download-ota.jd +++ b/docs/html/preview/download-ota.jd @@ -203,72 +203,72 @@ This is the Android SDK Preview License Agreement (the “License Agreementâ€). <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> <td><a href="#top" onclick="onDownload(this)" - >bullhead-ota-npd56n-dd5c12ee.zip</a><br> - MD5: af9a82e9a78925ca9c1c7f5f6fb851ec<br> - SHA-1: e4aabd5634b7ebdeffa877cd9e49244c0be326e4 + >bullhead-ota-npd90g-0a874807.zip</a><br> + MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br> + SHA-1: a9920bcc8d475ce322cada097d085448512635e2 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> <td><a href="#top" onclick="onDownload(this)" - >shamu-ota-npd56n-2818fd62.zip</a><br> - MD5: d8df396b187a8667889260e5464bd676<br> - SHA-1: c03c8ef8be587a574565855d4faa526254794e03 + >shamu-ota-npd90g-06f5d23d.zip</a><br> + MD5: 513570bb3a91878c2d1a5807d2340420<br> + SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> <td><a href="#top" onclick="onDownload(this)" - >angler-ota-npd56n-d2f2611c.zip</a><br> - MD5: c3c206892d414d4fc7da892ff840eada<br> - SHA-1: 2bdc79409ace5e163ef014ae51977d0a71b83df5 + >angler-ota-npd90g-5baa69c2.zip</a><br> + MD5: 096fe26c5d50606a424d2f3326c0477b<br> + SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> <td><a href="#top" onclick="onDownload(this)" - >volantis-ota-npd56n-42228a60.zip</a><br> - MD5: c80cf483d8b3c014fc7b27f80957a158<br> - SHA-1: f437829320f47ea3aa5f8b70ce2f0bb3d30b3f4f + >volantis-ota-npd90g-c04785e1.zip</a><br> + MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br> + SHA-1: 31633180635b831e59271a7d904439f278586f49 </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> <td><a href="#top" onclick="onDownload(this)" - >volantisg-ota-npd56n-9b4dbaac.zip</a><br> - MD5: 9e55ac1650e4f07a662bafa7f082e91c<br> - SHA-1: b9982be56c2817d122664869a1fbe9b13e9c72f7 + >volantisg-ota-npd90g-c56aa1b0.zip</a><br> + MD5: 0493fa79763d67bcdde8007299e1888d<br> + SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494 </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> <td><a href="#top" onclick="onDownload(this)" - >fugu-ota-npd56n-b305968a.zip</a><br> - MD5: dfc980acad6772d8473ccaa9cbbb681a<br> - SHA-1: d7bf8192649dea970afda165d181b4eea07abd7d + >fugu-ota-npd90g-3a0643ae.zip</a><br> + MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br> + SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> <td><a href="#top" onclick="onDownload(this)" - >ryu-ota-npd56n-5bf2fd66.zip</a><br> - MD5: 1699e4bacfbef16a75ae6cf3f2e3d886<br> - SHA-1: e20f3a8e43fcdd6acef21da80894afc8f9474e33 + >ryu-ota-npd90g-ec931914.zip</a><br> + MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br> + SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> <td><a href="#top" onclick="onDownload(this)" - >seed_l8150-ota-npd56n-a322696c.zip</a><br> - MD5: afc0e363ad2fd7418423e189a339a8e9<br> - SHA-1: fc4d818878df51894eac29932dd0e9f6511329c6 + >seed_l8150-ota-npd90g-dcb0662d.zip</a><br> + MD5: f40ea6314a13ea6dd30d0e68098532a2<br> + SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865 </td> </tr> diff --git a/docs/html/preview/download.jd b/docs/html/preview/download.jd index ad82211d0e65..e4db8901b46f 100644 --- a/docs/html/preview/download.jd +++ b/docs/html/preview/download.jd @@ -219,14 +219,26 @@ This is the Android SDK Preview License Agreement (the “License Agreementâ€). </p> <ul> - <li><strong>Enroll the device in automatic OTA system updates</strong> through the - <a href="https://g.co/androidbeta">Android Beta Program</a>. Once enrolled, your device will receive regular - over-the-air (OTA) updates of all milestone builds in the N Developer Preview. This - approach is recommended because it lets you seamlessly transition from your current - environment through the various releases of the N Developer Preview.</li> - <li><strong>Download a Developer Preview system image and flash the device</strong>. - OTA updates are not provided automatically for devices that you flash manually, but - you can enroll those devices in Android Beta Program to get OTA updates. </li> + <li> + <strong>Enroll the device in automatic OTA system updates</strong> through + the <a href="https://g.co/androidbeta">Android Beta Program</a>. Once + enrolled, your device will receive regular over-the-air (OTA) updates of + all milestone builds in the N Developer Preview. When the next version of + Android is released, your device will automatically update to the final + version. This approach is recommended because it lets you seamlessly + transition from your current environment, through the various releases of + the N Developer Preview, to the release version. + </li> + + <li> + <strong>Download a Developer Preview system image and flash the + device</strong>. OTA updates are not provided automatically for devices + that you flash manually, but you can enroll those devices in Android Beta + Program to get OTA updates. When the next version of Android is released, + you can download the final device image from the <a href= + "https://developers.google.com/android/nexus/images" type= + "external-link">factory images</a> page. + </li> </ul> <h3 id="ota">Enroll the device in automatic OTA updates</h3> @@ -234,9 +246,11 @@ This is the Android SDK Preview License Agreement (the “License Agreementâ€). <p> If you have access to a supported device (see the list in the Downloads table), you can receive over-the-air updates to preview versions of Android - by enrolling that device in the <a href="https://g.co/androidbeta">Android Beta Program</a>. These updates are - automatically downloaded and will update your device just like official - system updates. + by enrolling that device in the <a href="https://g.co/androidbeta">Android + Beta Program</a>. These updates are automatically downloaded and will update + your device just like official system updates. When the next version of + Android is released, the device will automatically update to the production + version. </p> <p> @@ -282,7 +296,8 @@ This is the Android SDK Preview License Agreement (the “License Agreementâ€). <p> Manually flashed system images <strong>do not automatically receive OTA updates</strong> to later Developer Preview - milestone builds. Make sure to keep your environment up-to-date and flash a + milestone builds or the final, production version. Make sure to keep your + environment up-to-date and flash a new system image at each Developer Preview milestone. </p> @@ -302,81 +317,72 @@ This is the Android SDK Preview License Agreement (the “License Agreementâ€). <tr id="bullhead"> <td>Nexus 5X <br>"bullhead"</td> <td><a href="#top" onclick="onDownload(this)" - >bullhead-npd56n-factory-996cac57.tgz</a><br> - MD5: 5aadba91f60de00d58dc6198ef5cc3ba<br> - SHA-1: 996cac575d83bde573315290da8f52cecc4127d2 + >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br> + MD5: e7a9a3061335c1e0c8be2588f13290af<br> + SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1 </td> </tr> <tr id="shamu"> <td>Nexus 6 <br>"shamu"</td> <td><a href="#top" onclick="onDownload(this)" - >shamu-npd56n-factory-7936bf75.tgz</a><br> - MD5: b7ed0db569f3bc2d6655fe8d8cea0e13<br> - SHA-1: 7936bf75e6bfb771bd14485211a319b246311b96 + >shamu-npd90g-factory-f7a4e3a9.tgz</a><br> + MD5: 2fb572ddcfca67bb1d741be97492a9ed<br> + SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a </td> </tr> <tr id="angler"> <td>Nexus 6P <br>"angler"</td> <td><a href="#top" onclick="onDownload(this)" - >angler-npd56n-factory-1ce5ccad.tgz</a><br> - MD5: f296eccaed4e2526d6435df8cf0e8df1<br> - SHA-1: 1ce5ccad8a3eae143e0ecd9c7afbb1be2f1d41cc + >angler-npd90g-factory-cd9ac81e.tgz</a><br> + MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br> + SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054 </td> </tr> <tr id="volantis"> <td>Nexus 9 <br>"volantis"</td> <td><a href="#top" onclick="onDownload(this)" - >volantis-npd56n-factory-8b9f997e.tgz</a><br> - MD5: 111c2fe5777dd6aae71fb8ef35dda9d3<br> - SHA-1: 8b9f997ea39fdaf505527536bd346948ae1bae30 + >volantis-npd90g-factory-41b55406.tgz</a><br> + MD5: cefa78950141da2a7c75e887717e3c8f<br> + SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f </td> </tr> <tr id="volantisg"> <td>Nexus 9G <br>"volantisg"</td> <td><a href="#top" onclick="onDownload(this)" - >volantisg-npd56n-factory-ef05106a.tgz</a><br> - MD5: 3a6f4d47b385966347bd26b7a922cd6e<br> - SHA-1: ef05106a9e3becea5673ea67d6c0cc21a2ec09d4 + >volantisg-npd90g-factory-610492be.tgz</a><br> + MD5: 2f36dc0d0fab02ab78be500677ec239f<br> + SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad </td> </tr> <tr id="fugu"> <td>Nexus Player <br>"fugu"</td> <td><a href="#top" onclick="onDownload(this)" - >fugu-npd56n-factory-a51674a1.tgz</a><br> - MD5: b75dc745a64848ea24124db8fa9252ed<br> - SHA-1: a51674a1303b17fec0405d513f9c0fe9f225780f + >fugu-npd90g-factory-0fe95694.tgz</a><br> + MD5: f4cb48f919e4c29c631de21416c612e2<br> + SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4 </td> </tr> <tr id="ryu"> <td>Pixel C <br>"ryu"</td> <td><a href="#top" onclick="onDownload(this)" - >ryu-npd56n-factory-e36c49b1.tgz</a><br> - MD5: 0a2d660b09e19614a5b3573487b88066<br> - SHA-1: e36c49b184843cdfe10278aebc04ce50b6d670b6 + >ryu-npd90g-factory-f4da981c.tgz</a><br> + MD5: d9f0e40b6c20d274831e8a7d285fd887<br> + SHA-1: f4da981c70576133321e2858e52fe2c990e68a75 </td> </tr> <tr id="seed"> <td>General Mobile 4G (Android One) <br>"seed"</td> <td><a href="#top" onclick="onDownload(this)" - >seed_l8150-npd56n-factory-dd5d4fd2.tgz</a><br> - MD5: 3420581b969af777753141dacc7f73b9<br> - SHA-1: dd5d4fd203f9c5dad658434c0ff370c411b78835 - </td> - </tr> - - <tr id="xperia"> - <td>Sony Xperia Z3 <br> (D6603 and D6653)</td> - <td>Download: <a class="external-link" - href="http://support.sonymobile.com/xperiaz3/tools/xperia-companion/">Xperia Companion</a><br> - For more information, see <a class="external-link" - href="https://developer.sony.com/develop/smartphones-and-tablets/android-n-developer-preview/">Try Android N Developer Preview for Xperia Z3</a>. + >seed_l8150-npd90g-factory-48f59c99.tgz</a><br> + MD5: 0ed565c509594072822d71c65b48ec8e<br> + SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8 </td> </tr> diff --git a/docs/html/preview/features/notification-updates.jd b/docs/html/preview/features/notification-updates.jd index af449cbecb5f..fd65e120d9e5 100644 --- a/docs/html/preview/features/notification-updates.jd +++ b/docs/html/preview/features/notification-updates.jd @@ -395,5 +395,6 @@ Notification notification = new Notification.Builder() .addMessage("Hi", timestamp1, null) // Pass in null for user. .addMessage("What's up?", timestamp2, "Coworker") .addMessage("Not much", timestamp3, null) - .addMessage("How about lunch?", timestamp4, "Coworker")); + .addMessage("How about lunch?", timestamp4, "Coworker")) + .build(); </pre> diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd index faf48b8685fa..601442e95fef 100644 --- a/docs/html/preview/overview.jd +++ b/docs/html/preview/overview.jd @@ -157,7 +157,7 @@ page.tags="preview", "developer", "android" <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (incremental update, alpha)</li> <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong> (incremental update, beta)</li> <li><strong><a href="{@docRoot}preview/support.html#dp4">Preview 4</a></strong> (final APIs and official SDK, Play publishing)</li> - <li><strong>Preview 5</strong> (near-final system images for final testing)</li> + <li><strong><a href="{@docRoot}preview/support.html#dp5">Preview 5</a></strong> (near-final system images for final testing)</li> <li><strong>Final release</strong> to AOSP and ecosystem</li> </ul> @@ -433,8 +433,10 @@ Android N</a> has <li> Set up your environment by following the instructions for <a href="{@docRoot}preview/setup-sdk.html">Setting up the Preview SDK</a> and configuring test devices.</li> - <li> Follow the <a href="https://developers.google.com/android/nexus/images">flashing - instructions</a> to flash the latest Android N system image for your device. </li> + <li> Follow the <a href="{@docRoot}preview/download.html"> + instructions</a> to update your device to the latest build of the N Developer + Preview. The easiest way is to enroll your device in + <a href="https://www.google.com/android/beta">Android Beta</a> program. </li> <li> Review the <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a> and <a href="{@docRoot}preview/samples.html">Android N samples</a> to gain more insight into new API features and how to use them in your app. diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd index ef8a65293d47..0d0d9db2f1c8 100644 --- a/docs/html/preview/support.jd +++ b/docs/html/preview/support.jd @@ -12,14 +12,16 @@ page.image=images/cards/card-n-support_2x.png <h2>In this document</h2> <ul> - <li><a href="#dp4">Developer Preview 4</a> + <li><a href="#dp5">Developer Preview 5</a> <ul> <li><a href="#general">General advisories</a></li> - <li><a href="#new">New in DP4</a></li> + <li><a href="#new">New in DP5</a></li> <li><a href="#ki">Known issues</a></li> - <li><a href="#upgrade-notes">Notes on publishing apps that target API 24</a></li> + <li><a href="#upgrade-notes">Notes on publishing apps + that target API 24</a></li> </ul> </li> + <li><a href="#dp4">Developer Preview 4</a></li> <li><a href="#dp3">Developer Preview 3</a></li> <li><a href="#dp2">Developer Preview 2</a></li> <li><a href="#dp1">Developer Preview 1</a></li> @@ -50,6 +52,189 @@ page.image=images/cards/card-n-support_2x.png community</a>. </p> +<h2 id="dp5">Developer Preview 5</h2> + +<div class="cols"> + <div class="col-6of12"> + <p> + <em>Date: July 2016<br> + Build: NPD90G<br> + Emulator support: x86 & ARM (32/64-bit)<br> + Google Play services: 8.4</em> + </p> + </div> +</div> + +<h3 id="general">General advisories</h3> + +<p> + This Developer Preview release is for <strong>app developers and other early + adopters</strong> and is available for daily use, development, or + compatibility testing. Please be aware of these general notes about the + release: +</p> + +<ul> + <li>This release may have various <strong>stability issues</strong> on + supported devices. + </li> + + <li>Some apps <strong>may not function as expected</strong> on the new + platform version. This includes Google’s apps as well as other apps. + </li> + + <li>Developer Preview 5 is <strong>Compatibility Test Suite (CTS) + approved</strong> on these devices: Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, + and Pixel C. Apps that depend on CTS approved builds should work normally + on these devices (Android Pay for example). + </li> + + <li>Developer Preview 5 is <strong>available</strong> on Nexus 5X, Nexus 6, Nexus 6P, + Nexus 9, Nexus Player, Pixel C, and General Mobile 4G (Android One). + </li> +</ul> + + +<h3 id="new">New in DP5</h3> + +<h4>Updated system images for supported devices and emulator</h4> + +<p> + Developer Preview 5 includes <a href= + "{@docRoot}preview/download.html"><strong>near-final system + images</strong></a> for supported devices and the Android emulator. The + images include the final APIs (API level 24) for the upcoming Android N + platform. When you are done testing, you can publish apps using API + level 24 to Google Play, in alpha, beta, and production release channels. +</p> + + +<!-- + +<h4 id="api-changes">Feature and API changes</h4> + +<ul> + <li>TODO</li> +</ul> + +--> + +<h3 id="ki">Known Issues</h3> + +<h4>Stability</h4> + +<ul> + <li>Users may encounter system instability (such as kernel panics and + crashes). + </li> +</ul> + +<h4>Multi-window</h4> +<ul> + <li>MapView may be blank when resized in multi-window mode and not focused. + </li> +</ul> + +<h4>Do Not Disturb</h4> +<ul> + <li>Do Not Disturb mode may be set at device reboot. To work around + the issue, delete the existing rule for VR as follows: go to + <strong>Settings > Sound > Do not disturb > Automatic Rules</strong> + and tap the trash icon next to the VR rule. + </li> +</ul> + +<h4>Screen zoom and multiple APKs in Google Play</h4> +<ul> + <li>On devices running Developer Preview 5, Google Play services 9.0.83 + incorrectly reports the current screen density rather than the stable screen + density. When screen zoom is enabled on these devices, this can cause Google + Play to select a version of a multi-APK app that’s designed for smaller + screens. This issue is fixed in the next version of Google Play services. + </li> +</ul> + +<h4>Vulkan support and multiple APKs in Google Play</h4> +<ul> + <li>On devices running Developer Preview 5, Google Play services 9.0.83 + currently reports Vulkan support but not Vulkan version. This can cause + Google Play to select a version of a multi-APK app that’s designed for lower + Vulkan support on devices with higher version support. Currently, the Google + Play Store does not accept uploads of Apps which use Vulkan version + targeting. This support will be added to the Google Play Store in the + future any Android N devices using the Google Play services 9.0.83 will + continue to receive versions of Apps targeting basic Vulkan support. + </li> +</ul> + +<h4>Android Auto</h4> +<ul> + <li>The version of Google Maps included in Developer Preview 5 (9.30) + crashes when used with Android Auto. This issue will be fixed in the + next update to Google Maps (9.31), expected in the coming weeks. + </li> +</ul> + + + +<!-- TBA, if any +<h4>Device-specific issues</h4> + +<dl> + <dt> + <strong>Device Name</strong> + </dt> + + <dd> + Issue 1 + </dd> + + <dd> + Issue 2 + </dd> +</dl> + +--> +<!-- TBA, if any + +<h4 id="dp5-fixes">Fixes for issues reported by developers</h4> + +<p> + A number of issues reported by developers have been fixed, including: +</p> + +<ul> + <li>TODO</li> +</ul> + +--> + +<h3 id="upgrade-notes">Notes on publishing apps that target API 24</h3> + +<p> + Before publishing apps that target API 24 in Google Play, keep these points + in mind: +</p> + +<ul> + <li>If your app’s current <code>targetSdkVersion</code> is 22 or lower and + you want to target API 24, you’ll need to support <a href= + "{@docRoot}about/versions/marshmallow/android-6.0-changes.html">behaviors + introduced with Android 6.0 (Marshmallow)</a>, such as <a href= + "{@docRoot}training/permissions/requesting.html">runtime permissions</a>, in + addition to Android N behaviors. + </li> + + <li>Once you publish an app with <code>targetSdkVersion</code> set to 23 or + higher, you can't later publish a version of the app with a higher + <code>versionCode</code> that targets 22 or lower. This restriction applies + in alpha and beta channels as well as production channel. + </li> +</ul> + + +<!-- DP4 Release Notes Archive --> + <h2 id="dp4">Developer Preview 4</h2> <div class="wrap"> @@ -65,7 +250,7 @@ page.image=images/cards/card-n-support_2x.png </div> </div> -<h3 id="general">General advisories</h3> +<h3 id="dp4-general">General advisories</h3> <p> This Developer Preview release is for <strong>app developers and other early @@ -97,7 +282,7 @@ page.image=images/cards/card-n-support_2x.png </ul> -<h3 id="new">New in DP4</h3> +<h3 id="dp4-new">New in DP4</h3> <h4>Android N final APIs</h4> @@ -129,7 +314,7 @@ page.image=images/cards/card-n-support_2x.png your app ready for an update in the Play store. </p> -<h4 id="api-changes">Feature and API changes</h4> +<h4 id="dp4-api-changes">Feature and API changes</h4> <ul> <li>In previous versions of Android, an app activates with all of its locale @@ -156,7 +341,7 @@ page.image=images/cards/card-n-support_2x.png </li> </ul> -<h3 id="ki">Known Issues</h3> +<h3 id="dp4-ki">Known Issues</h3> <h4>Stability</h4> @@ -280,7 +465,7 @@ page.image=images/cards/card-n-support_2x.png </li> </ul> -<h4 id="">Android Auto</h4> +<h4>Android Auto</h4> <p> The version of Google Maps included in Developer Preview 4 (9.30) crashes @@ -344,7 +529,7 @@ page.image=images/cards/card-n-support_2x.png <p>For the full list of fixed issues, see <a href="https://goo.gl/6uCKtf">the issue tracker</a>.</p> -<h3 id="upgrade-notes">Notes on publishing apps that target API 24</h3> +<h3 id="dp4-upgrade-notes">Notes on publishing apps that target API 24</h3> <p> Before publishing apps that target API 24 in Google Play, keep these points diff --git a/docs/html/samples/index.jd b/docs/html/samples/index.jd index 5885086fec58..240a54cdadaa 100644 --- a/docs/html/samples/index.jd +++ b/docs/html/samples/index.jd @@ -35,7 +35,7 @@ recommended method to retrieve Android code samples.</p> from GitHub as a new project. </p> -<p>To view the Android code samples that you can import, see the +<p>To view the Android code samples that you can import, see the <a class="external-link" href="https://github.com/googlesamples/">Google Samples page</a> on GitHub.</p> <h2>Download Samples</h2> @@ -69,6 +69,6 @@ for your applications.</p> <p class="note"> <strong>Note:</strong> At this time, the downloadable projects are designed for use with Gradle - and Android Studio. + and Android Studio. </p> diff --git a/docs/html/sdk/OLD_RELEASENOTES.jd b/docs/html/sdk/OLD_RELEASENOTES.jd index b7fd12f7cc5b..dfbeaeb0895d 100644 --- a/docs/html/sdk/OLD_RELEASENOTES.jd +++ b/docs/html/sdk/OLD_RELEASENOTES.jd @@ -14,7 +14,7 @@ excludeFromSuggestions=true <a name="0.9_r1" id="0.9_r1"></a> <h2>Android 0.9 SDK Beta (r1)</h2> -<p>This beta SDK release contains a large number of bug fixes and improvements from the early-look SDKs. +<p>This beta SDK release contains a large number of bug fixes and improvements from the early-look SDKs. The sections below describe the highlights of the release. <h3>New Features and Notable Changes</h3> @@ -109,7 +109,7 @@ The sections below describe the highlights of the release. </ul> <p>Known issues/limitations for Graphical Layout Editor include:</p> - + <ul> <li>Font display is very close but not equals to on-device rendering since the font engine in Java slightly differs from the font engine in Android. This should not have any impact on your layouts. </li> @@ -123,7 +123,7 @@ The sections below describe the highlights of the release. </li> <li>No support for WebView, MapView and SurfaceView. </li> - <li>No UI support for <merge>, <include>, <ViewStub> elements. You can add these elements to your manifest using the xml editor only. + <li>No UI support for <merge>, <include>, <ViewStub> elements. You can add these elements to your manifest using the xml editor only. </li> <li>If a layout fails to render in a way that prevents the whole editor from opening, you can: @@ -221,7 +221,7 @@ specify which port the emulator should bind to for the console. <port> mus </li> <li>The DDMS utility has been refactored into library form. This is not of direct interest to application developers, but may be of interest to vendors interested in integrating the Android SDK into their products. Watch for more information about the ddmlib library soon. </li> - <li>For performance and maintainability reasons, some APIs were moved into separate modules that must be explicitly included in the application via a directive in AndroidManifest.xml. Notable APIs that fall into this category are the MapView, and the java.awt.* classes, which each now reside in separate modules that must be imported. Developers who overlook this requirement will see ClassNotFoundExceptions that seem spurious. + <li>For performance and maintainability reasons, some APIs were moved into separate modules that must be explicitly included in the application via a directive in AndroidManifest.xml. Notable APIs that fall into this category are the MapView, and the java.awt.* classes, which each now reside in separate modules that must be imported. Developers who overlook this requirement will see ClassNotFoundExceptions that seem spurious. </li> <li>Developers who use 'adb push' to install applications must now use 'adb install', since the full package manager is now implemented. 'adb push' will no longer work to install .apk files. </li> @@ -386,14 +386,14 @@ specify which port the emulator should bind to for the console. <port> mus <h4>Emulator Console</h4> <ul> -<li>Now provides support for emulating inbound SMS messages. The ADT plugin and DDMS provide integrated access to -this capability. For more information about how to emulate inbound SMS from the console, +<li>Now provides support for emulating inbound SMS messages. The ADT plugin and DDMS provide integrated access to +this capability. For more information about how to emulate inbound SMS from the console, see <a href="{@docRoot}tools/help/emulator.html#sms">SMS Emulation</a>. </li> </ul> <h4>Emulator</h4> -<ul><li>The default emulator skin has been changed to HVGA-P from QVGA-L. For information -about emulator skins and how to load a specific skin when starting the emulator, see +<ul><li>The default emulator skin has been changed to HVGA-P from QVGA-L. For information +about emulator skins and how to load a specific skin when starting the emulator, see <a href="{@docRoot}tools/help/emulator.html#skins">Using Emulator Skins</a>.</li> </ul> diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd index 8f124a5f9b44..d9df4063231a 100644 --- a/docs/html/sdk/RELEASENOTES.jd +++ b/docs/html/sdk/RELEASENOTES.jd @@ -64,13 +64,13 @@ changes include: </p> <li>Emulator support for multiple screen sizes/densities, including new skins. </li> <li>Android SDK and AVD Manager, a graphical UI to let you manage your -SDK and AVD environments more easily. The tool lets you create and manage +SDK and AVD environments more easily. The tool lets you create and manage your <a href="{@docRoot}tools/devices/managing-avds.html">Android Virtual -Devices</a> and download new SDK packages (such as platform versions and +Devices</a> and download new SDK packages (such as platform versions and add-ons) into your environment.</li> <li>Improved support for test packages in New Project Wizard</li> - <li>The reference documentation now offers a "Filter by API Level" -capability that lets you display only the parts of the API that are actually + <li>The reference documentation now offers a "Filter by API Level" +capability that lets you display only the parts of the API that are actually available to your application, based on the <code>android:minSdkVersion</code> value the application declares in its manifest. For more information, see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li> @@ -114,7 +114,7 @@ href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>. </p> <h3>Android SDK and AVD Manager</h3> -<p>The SDK offers a new tool called Android SDK and AVD Manager that lets you +<p>The SDK offers a new tool called Android SDK and AVD Manager that lets you manage your SDK and AVD environments more efficiently. </p> <p>Using the tool, you can quickly check what Android platforms, add-ons, @@ -129,15 +129,15 @@ environment that were not included in the SDK package.</p> <p>The tool also lets you quickly create new AVDs, manage their properties, and run a target AVD from a single window. </p> -<p>If you are developing in Eclipse with ADT, you can access the Android SDK +<p>If you are developing in Eclipse with ADT, you can access the Android SDK and AVD Manager from the <strong>Window</strong> menu. </p> -<p>If you are developing in another IDE, you can access the Android SDK and +<p>If you are developing in another IDE, you can access the Android SDK and AVD Manager through the <code>android</code> command-line tool, located in the <sdk>/tools directory. You can launch the tool with a graphical UI by using the <code>android</code> command without specifying any options. You can also simply double-click the android.bat (Windows) or android (OS X/Linux) file. -You can still use <code>android</code> commands to create and manage AVDs, +You can still use <code>android</code> commands to create and manage AVDs, including AVDs with custom hardware configurations.</p> <h3>Integration with zipalign</h3> @@ -160,9 +160,9 @@ manually from the command line if you choose. </p> <li>If you are developing in Eclipse with ADT, support for <code>zipalign</code> is integrated into the Export Wizard. When you use the Wizard to export a signed application package, ADT signs and then automatically -runs <code>zipalign</code> against the exported package. If you use the Wizard -to export an unsigned application package, then it will not zipalign the -package because zipalign must be performed only after the APK has been signed. +runs <code>zipalign</code> against the exported package. If you use the Wizard +to export an unsigned application package, then it will not zipalign the +package because zipalign must be performed only after the APK has been signed. You must manually sign and zipalign the package after export. </li> <li>If you are developing using Ant and are compiling in release mode, the build tools will automatically sign and then <code>zipalign</code> the @@ -182,14 +182,14 @@ alignment.</p> <h3>Support for Test Packages in New Project Wizard</h3> <p>The New Project Wizard available in the ADT 0.9.3 now lets you add a test -package containing Instrumentation or other classes of tests while you are +package containing Instrumentation or other classes of tests while you are creating or importing a new Android application project. </p> <h3>New USB Driver for Windows</h3> <p>If you are using Windows and want to develop or test your application on an Android-powered device (such as the T-Mobile G1), you need an appropriate USB -driver. +driver. <p>The Windows version of the Android 1.6 SDK includes a new, WinUSB-based driver that you can install. The driver is compatible with both 32- and 64-bit @@ -241,19 +241,19 @@ only) has been fixed.</li> <h2 id="1.5_r3">Android 1.5 SDK, Release 3</h2> <p>Provides an updated Android 1.5 system image that includes permissions -fixes, as described below, and a new application — an IME for Japanese -text input. Also provides the same set of developer tools included in the +fixes, as described below, and a new application — an IME for Japanese +text input. Also provides the same set of developer tools included in the previous SDK, but with bug fixes and several new features.</p> <h3>Permissions Fixes</h3> -<p>The latest version of the Android platform, deployable to +<p>The latest version of the Android platform, deployable to Android-powered devices, includes fixes to the permissions-checking in certain areas of the framework. Specifically, the Android system now properly checks and enforces several existing permissions where it -did not do so in the previous release. Because of these changes in -enforcement, you are strongly encouraged to test your application -against the new Android 1.5 system image included in this SDK, to ensure +did not do so in the previous release. Because of these changes in +enforcement, you are strongly encouraged to test your application +against the new Android 1.5 system image included in this SDK, to ensure that it functions normally. </p> <p>In particular, if your application uses any of the system areas listed below, @@ -292,14 +292,14 @@ Google APIs add-on and the library it provides, see: href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a> </p></li> <li>The SDK add-on architecture now lets device manufacturers specify a USB -Vendor ID in their add-ons. +Vendor ID in their add-ons. <li>The <code>android</code> tool provides a new command that scans SDK add-ons for their USB Vendor IDs and makes them available to adb (OS X and Linux versions of the SDK only). The command is <code>android update adb</code>. On Windows versions of the SDK, a custom USB driver is included that supports the "Google" and "HTC" Vendor IDs, which allow adb to recognize G1 and HTC -Magic devices. For other devices, contact the device manufacturer -to obtain a USB driver, especially if you have an SDK add-on that defines +Magic devices. For other devices, contact the device manufacturer +to obtain a USB driver, especially if you have an SDK add-on that defines a new USB Vendor ID.</li> <li>The telephony, sensor, and geo fix issues in the emulator are now fixed.</li> @@ -329,12 +329,12 @@ changes include: </p> <ul> <li>Multiple versions of the Android platform are included (Android 1.1, Android 1.5). The tools are updated to let you deploy your application -on any platform in the SDK, which helps you ensure forward-compatibility and, +on any platform in the SDK, which helps you ensure forward-compatibility and, if applicable, backward-compatibility.</li> <li>Introduces <a href="{@docRoot}tools/devices/managing-avds.html">Android Virtual Devices</a> — (AVD) configurations of options that you run in the emulator to better model actual devices. Each AVD gets its -own dedicated storage area, making it much easier to work with multiple emulators +own dedicated storage area, making it much easier to work with multiple emulators that are running concurrently.</li> <li>Support for SDK add-ons, which extend the Android SDK to give you access to one or more external Android libraries and/or @@ -383,13 +383,13 @@ is similar to any of the Android platform targets included in the SDK — it includes an external library, a system image, as well as custom emulator skins and system properties. The add-on differs in that the Android platform it provides may include customized UI, resources, or behaviors, a different set of -preinstalled applications, or other similar modifications. +preinstalled applications, or other similar modifications. <p>The SDK includes a single SDK add-on — the Google APIs add-on. The Google APIs add-on gives your application access to the com.google.android.maps -external library that is included on many (if not most) Android-powered devices. +external library that is included on many (if not most) Android-powered devices. The Google APIs add-on also includes a {@link android.location.Geocoder Geocoder} -backend service implementation. For more information, see the "Maps External +backend service implementation. For more information, see the "Maps External Library" section below. </p> <h3>Android Virtual Devices (AVDs)</h3> @@ -401,7 +401,7 @@ compatible system image. There are two types of targets:</p> <li>Targets that represent core Android platform versions. </li> <li>Targets that are SDK add-ons, which typically provide application access to one or more external libraries and/or a customized (but compliant) system image -that can run in the emulator. +that can run in the emulator. </ul> <p>A new tool called "android" lets you discover what targets and AVDs are @@ -427,7 +427,7 @@ href="http://code.google.com/android/add-ons/google-apis">http://code.google.com <p>For your convenience, the Google APIs add-on is included in the SDK. </p> -<p>For information about how to register for a Maps API Key, see +<p>For information about how to register for a Maps API Key, see <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API Key</a>.</p> @@ -566,8 +566,8 @@ service and receive a Maps API Key, which you then add to your MapView for authentication to the server.</p> <p>Developers should note that the registration service for MapView is now -active and Google Maps is actively enforcing the Maps API Key requirement. -For information about how to register for a Maps API Key, see +active and Google Maps is actively enforcing the Maps API Key requirement. +For information about how to register for a Maps API Key, see <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API Key</a>.</p> @@ -615,21 +615,21 @@ in Eclipse</a>.</li> <li>In some cases, you may encounter problems when using the browser on an emulator started with the command-line option <code>-http-proxy</code>. </li> <li>On the OSX platform, if you manually remove the ~/.android directory -using <code>rm -rf ~/.android</code>, then try to run -the emulator, it crashes. This happens because the emulator fails to create +using <code>rm -rf ~/.android</code>, then try to run +the emulator, it crashes. This happens because the emulator fails to create a new .android directory before attempting to create the child SDK1.0 directory. To work around this issue, manually create a new .android directory using -<code>mkdir ~/.android</code>, then run the emulator. The emulator +<code>mkdir ~/.android</code>, then run the emulator. The emulator creates the SDK1.0 directory and starts normally. </li> -<li>We regret to inform developers that Android 1.1 will not include support +<li>We regret to inform developers that Android 1.1 will not include support for ARCNet network interfaces.</li> <li>The final set of Intent patterns honored by Android 1.0 has not yet been fully documented. Documentation will be provided in future releases.</li> <li>In ADT Editor, you can add at most ten new resource values at a time, -in a given res/values/*.xml, using the form in the Android Resources pane. +in a given res/values/*.xml, using the form in the Android Resources pane. If you add more than ten, the Android Resources pane will not display the -attributes fields for the additional resource entries. To work around this -problem, you can close the file in the editor and open it again, or you +attributes fields for the additional resource entries. To work around this +problem, you can close the file in the editor and open it again, or you can edit the resource entries in the XML text mode. </li> <li>The emulator's battery-control commands (<code>power <option></code>) are not working in this release.</li> @@ -657,7 +657,7 @@ href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p> <p><strong>T-Mobile G1 Compatibility</strong></p> -<p>This version of the SDK has been tested for compatibility with the first +<p>This version of the SDK has been tested for compatibility with the first Android-powered mobile device, the T-Mobile G1. </p> @@ -679,7 +679,7 @@ href="http://code.google.com/android/add-ons/google-apis/mapkey.html">http://cod Android-powered device (such as the T-Mobile G1), you need an appropriate USB driver. For your convenience, the Windows version of the Android SDK includes a USB driver that you can install, to let you develop on the device. The USB -driver files are located in the <code><SDK>/usb_driver</code> directory. +driver files are located in the <code><SDK>/usb_driver</code> directory. </p> @@ -694,23 +694,23 @@ change across versions, so were not suitable for use by applications. You can still access the platform's styleable attributes from your resources or code. To do so, declare a custom resource element using a <code><declare-styleable></code> in your project's res/values/R.attrs -file, then declare the attribute inside. For examples, see +file, then declare the attribute inside. For examples, see <sdk>/samples/ApiDemos/res/values/attrs.xml. For more information about custom resources, see <a href="{@docRoot}guide/topics/resources/available-resources.html#customresources">Custom Layout Resources</a>. Note that the android.R.styleable documentation is still provided in the SDK, but only as a reference of the platform's styleable attributes for the various elements.</li> -<li>The VM now properly ensures that private classes are not +<li>The VM now properly ensures that private classes are not available to applications through reflection. If you were using reflection -to access private classes in a previous release, you will now get a run-time +to access private classes in a previous release, you will now get a run-time error. </li> <li>The Settings and Email applications are now included in the SDK and available in the emulator.</li> -<li>We regret to inform developers that SDK 1.0_r2 does not support MFM, RLL, +<li>We regret to inform developers that SDK 1.0_r2 does not support MFM, RLL, or Winchester hard disk drives.</li> -<li>In the emulator, the control key for enabling/disabling trackball mode +<li>In the emulator, the control key for enabling/disabling trackball mode is changed from Control-T to F6. You can also enter trackball mode temporarily using the Delete key. While the key is pressed, you can send trackball events.</li> </ul> @@ -783,19 +783,19 @@ emulator started with the command-line option <code>-http-proxy</code>. </li> <li>We regret to inform developers that Android 1.0 will not include support for dot-matrix printers.</li> <li>On the OSX platform, if you manually remove the ~/.android directory -using <code>rm -rf ~/.android</code>, then try to run -the emulator, it crashes. This happens because the emulator fails to create +using <code>rm -rf ~/.android</code>, then try to run +the emulator, it crashes. This happens because the emulator fails to create a new .android directory before attempting to create the child SDK1.0 directory. To work around this issue, manually create a new .android directory using -<code>mkdir ~/.android</code>, then run the emulator. The emulator +<code>mkdir ~/.android</code>, then run the emulator. The emulator creates the SDK1.0 directory and starts normally. </li> <li>The final set of Intent patterns honored by Android 1.0 has not yet been fully documented. Documentation will be provided in future releases.</li> <li>In ADT Editor, you can add at most ten new resource values at a time, -in a given res/values/*.xml, using the form in the Android Resources pane. +in a given res/values/*.xml, using the form in the Android Resources pane. If you add more than ten, the Android Resources pane will not display the -attributes fields for the additional resource entries. To work around this -problem, you can close the file in the editor and open it again, or you +attributes fields for the additional resource entries. To work around this +problem, you can close the file in the editor and open it again, or you can edit the resource entries in the XML text mode. </li> <li>The emulator's battery-control commands (<code>power <option></code>) are not working in this release.</li> diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd index bb64feb0fbc7..c4ed594779f2 100644 --- a/docs/html/sdk/older_releases.jd +++ b/docs/html/sdk/older_releases.jd @@ -74,7 +74,7 @@ sdk- linux_x86-1.6_r1.tgz</a> <td>238224860 bytes</td> <td>b4bf0e610ff6db2fb6fb09c49cba1e79</td> </tr> - + </table> @@ -119,7 +119,7 @@ sdk- linux_x86-1.5_r3.zip</a> <td>178117561 bytes</td> <td>350d0211678ced38da926b8c9ffa4fac</td> </tr> - + </table> @@ -167,7 +167,7 @@ linux_x86-1.1_r1.zip</a> <td>79345522 bytes</td> <td>ebcb16b0cd4aef198b4dd9a1418efbf1</td> </tr> - + </table> @@ -215,7 +215,7 @@ linux_x86-1.0_r2.zip</a> <td>94186463 bytes</td> <td>a1f3b6d854596f850f5008856d0f380e</td> </tr> - + </table> @@ -268,7 +268,7 @@ sdk- linux_x86-1.5_r2.zip</a> <td>165035130 bytes</td> <td>1d3c3d099e95a31c43a7b3e6ae307ed3</td> </tr> - + </table> @@ -313,7 +313,7 @@ sdk- linux_x86-1.5_r1.zip</a> <td>162938845 bytes</td> <td>2addfd315da0ad8b5bde6b09d5ff3b06</td> </tr> - + </table> @@ -358,7 +358,7 @@ sdk- linux_x86-1.0_r1.zip</a> <td>87.8 MB bytes</td> <td>2660b4029039b7d714e59827e9a9a11d</td> </tr> - + </table> diff --git a/docs/html/topic/libraries/data-binding/index.jd b/docs/html/topic/libraries/data-binding/index.jd index 293de51ea000..ec6e58c15ca1 100644 --- a/docs/html/topic/libraries/data-binding/index.jd +++ b/docs/html/topic/libraries/data-binding/index.jd @@ -515,8 +515,8 @@ If you need to use an expression with a predicate (e.g. ternary), you can use <h5>Avoid Complex Listeners</h5> Listener expressions are very powerful and can make your code very easy to read. -On the other hand, listeners containing complex expressions make your layouts hard to read and unmaintainable. -These expressions should be as simple as passing available data from your UI to your callback method. You should implement +On the other hand, listeners containing complex expressions make your layouts hard to read and unmaintainable. +These expressions should be as simple as passing available data from your UI to your callback method. You should implement any business logic inside the callback method that you invoked from the listener expression. <p> diff --git a/docs/html/topic/libraries/support-library/revisions.jd b/docs/html/topic/libraries/support-library/revisions.jd index 47d2ac18df01..7e78925e9587 100644 --- a/docs/html/topic/libraries/support-library/revisions.jd +++ b/docs/html/topic/libraries/support-library/revisions.jd @@ -6,9 +6,129 @@ page.metaDescription=This page provides details about the Support Library packag <p>This page provides details about the Support Library package releases.</p> <div class="toggle-content opened"> - <p id="rev24-0-0"> + <p id="rev24-1-0"> <a href="#" onclick="return toggleContent(this)"><img src= "{@docRoot}assets/images/styles/disclosure_up.png" class= + "toggle-content-img" alt="">Android Support Library, revision 24.1.0</a> + <em>(July 2016)</em> + </p> + + <div class="toggle-content-toggleme"> + <dl> + <dt> + Changes for <a href= + "{@docRoot}tools/support-library/features.html#v4">v4 Support + Library</a>: + </dt> + + <dd> + <ul> + <li>{@link android.support.v4.app.NotificationCompat.Action.WearableExtender} + has new <code>getHintDisplayActionInline()</code> and + <code>setHintDisplayActionInline()</code> methods for compatibility with + <a href="{@docRoot}wear/preview/index.html">Android Wear 2.0 Preview</a>. + These methods allow an application to specify that an action should be + displayed inline with the notification. + </li> + + <li>Calling {@link android.support.v4.app.Fragment#setUserVisibleHint + Fragment.setUserVisbileHint()} will no longer cause a fragment to become + <strong>started</strong> if the hint has been added to a {@link + android.support.v4.app.FragmentTransaction} that is not yet committed. This + affects users of {@link android.support.v4.app.FragmentPagerAdapter} that + override {@link android.support.v4.app.Fragment#setUserVisibleHint + setUserVisbileHint()} and assume a specific lifecycle state of the fragment + after calling <code>super.setUserVisibleHint()</code>. For more information, + see the reference page for docs for {@link + android.support.v4.app.Fragment#setUserVisibleHint + Fragment.setUserVisbileHint()}. + </li> + </ul> + + </dl> + <p>Fixed issues:</p> + + <ul> + <li>TabLayout.setCustomView(null) results in NullPointerException + (<a href="https://code.google.com/p/android/issues/detail?id=214753">AOSP + issue</a>) + </li> + + <li>TabLayout incorrectly highlights custom tabs (<a href= + "https://code.google.com/p/android/issues/detail?id=214316">AOSP issue 214316</a>) + </li> + + <li>AppCompatTextHelper uses incorrectly sorted attribute array (<a href= + "https://code.google.com/p/android/issues/detail?id=214366">AOSP issue 214366</a>) + </li> + + <li>Unable to reference VectorDrawable from drawable container XML when using + custom ContextWrapper (<a href= + "https://code.google.com/p/android/issues/detail?id=214055">AOSP issue 214055</a>) + </li> + + <li>ViewDragHelper.saveLastMotion() throws ArrayIndexOutOfBoundsException + (<a href="https://code.google.com/p/android/issues/detail?id=212945">AOSP + issue 212945</a>) + </li> + + <li>BottomSheetBehavior expands to old content height when using + setState(STATE_EXPANDED) (<a href= + "https://code.google.com/p/android/issues/detail?id=213660">AOSP issue + 213660</a>) + </li> + + <li>CollapsingToolbarLayout doesn’t handle pinnable children with top or + bottom margins (<a href= + "https://code.google.com/p/android/issues/detail?id=213001">AOSP issue + 213001</a>) + </li> + + <li>Leanback browse title does not support RTL alignment (<a href= + "https://code.google.com/p/android/issues/detail?id=213461">AOSP issue + 213461</a>) + </li> + + <li>PagerTabStrip disappears due to missing inherited annotation (<a href= + "https://code.google.com/p/android/issues/detail?id=213359">AOSP issue + 213359</a>) + </li> + + <li>Data binding throws NullPointerException when using Boolean to set + conditional flags (<a href= + "https://code.google.com/p/android/issues/detail?id=191841">AOSP issue + 191841</a>) + </li> + + <li>CoordinatorLayout does not respond to setFitsSystemWindows() (<a href= + "https://code.google.com/p/android/issues/detail?id=212720">AOSP issue + 212720</a>) + </li> + + <li>BottomSheetBehavior crashes when setting initial state (<a href= + "https://code.google.com/p/android/issues/detail?id=203114">AOSP issue + 203114</a>) + </li> + + <li>ViewPager skips pages if the page index is a large value (<a href= + "https://code.google.com/p/android/issues/detail?id=211734">AOSP issue + 211734</a>) + </li> + + <li>BottomSheetBehavior does not work with dynamic layouts (<a href= + "https://code.google.com/p/android/issues/detail?id=205226">AOSP issue + 205226</a>) + </li> + </ul> + </div> +</div> + +<!-- end of collapsible section: 24.1.0 --> + +<div class="toggle-content closed"> + <p id="rev24-0-0"> + <a href="#" onclick="return toggleContent(this)"><img src= + "{@docRoot}assets/images/styles/disclosure_down.png" class= "toggle-content-img" alt="">Android Support Library, revision 24.0.0</a> <em>(June 2016)</em> </p> @@ -120,7 +240,7 @@ page.metaDescription=This page provides details about the Support Library packag <div class="toggle-content closed"> <p id="rev23-4-0"> <a href="#" onclick="return toggleContent(this)"><img src= - "{@docRoot}assets/images/styles/disclosure_up.png" class= + "{@docRoot}assets/images/styles/disclosure_down.png" class= "toggle-content-img" alt="">Android Support Library, revision 23.4.0</a> <em>(May 2016)</em> </p> diff --git a/docs/html/topic/performance/optimizing-view-hierarchies.jd b/docs/html/topic/performance/optimizing-view-hierarchies.jd index 1738acb049d6..27d3d163f853 100644 --- a/docs/html/topic/performance/optimizing-view-hierarchies.jd +++ b/docs/html/topic/performance/optimizing-view-hierarchies.jd @@ -381,7 +381,7 @@ your hierarchy by switching over to an entirely different layout type. <p> For example, you may find that a {@link android.widget.TableLayout} provides the same functionality as a more complex layout with many -positional dependencies. In the N release of Android, the +positional dependencies. In the N release of Android, the <a href="http://tools.android.com/tech-docs/layout-editor">{@code ConstraintLayout}</a> class provides similar functionality to {@link android.widget.RelativeLayout}, but at a significantly lower cost. diff --git a/docs/html/topic/performance/scheduling.jd b/docs/html/topic/performance/scheduling.jd index b6f0fdc1b230..c11cf9b4a227 100644 --- a/docs/html/topic/performance/scheduling.jd +++ b/docs/html/topic/performance/scheduling.jd @@ -264,7 +264,7 @@ Regardless of the solution you adopt, keep the following points in mind: Internet-connectivity detection problems. A library or API may think the Internet is available, but your service may not be accessible. Fail gracefully and reschedule as few of your tasks as possible.</li> - <li>Depending on the conditions you assign for running a task, + <li>Depending on the conditions you assign for running a task, such as network availability, after the task is triggered, a change may occur so that those conditions are no longer met. In such a case, your operation may fail unexpectedly and repeatedly. diff --git a/docs/html/training/accessibility/accessible-app.jd b/docs/html/training/accessibility/accessible-app.jd index dd26febf0949..54c185c50529 100644 --- a/docs/html/training/accessibility/accessible-app.jd +++ b/docs/html/training/accessibility/accessible-app.jd @@ -55,7 +55,7 @@ href="https://play.google.com/store/apps/details?id=com.google.android.marvin.ta If you have a label that's likely not to change during the lifecycle of the application (such as "Pause" or "Purchase"), you can add it via the XML layout, by setting a UI element's <a - + href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription" >{@code android:contentDescription}</a> attribute, like in this example:</p> @@ -163,7 +163,7 @@ supported can be found in the {@link android.view.accessibility.AccessibilityEvent} reference documentation. <p>As an example, if you want to extend an image view such that you can write -captions by typing on the keyboard when it has focus, it makes sense to fire an +captions by typing on the keyboard when it has focus, it makes sense to fire an {@link android.view.accessibility.AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED} event, even though that's not normally built into image views. The code to generate that event would look like this:</p> diff --git a/docs/html/training/accessibility/service.jd b/docs/html/training/accessibility/service.jd index 5b99c46be67e..9935c97ba61f 100755 --- a/docs/html/training/accessibility/service.jd +++ b/docs/html/training/accessibility/service.jd @@ -67,7 +67,7 @@ public class MyAccessibilityService extends AccessibilityService { <p>Like any other service, you also declare it in the manifest file. Remember to specify that it handles the {@code android.accessibilityservice} intent, -so that the service is called when applications fire an +so that the service is called when applications fire an {@link android.view.accessibility.AccessibilityEvent}.</p> <pre> diff --git a/docs/html/training/animation/screen-slide.jd b/docs/html/training/animation/screen-slide.jd index a68d475f18ee..d953c0793f97 100644 --- a/docs/html/training/animation/screen-slide.jd +++ b/docs/html/training/animation/screen-slide.jd @@ -218,7 +218,7 @@ public class ScreenSlidePagerActivity extends FragmentActivity { position of the page on the screen, which is obtained from the <code>position</code> parameter of the {@link android.support.v4.view.ViewPager.PageTransformer#transformPage transformPage()} method.</p> -<p>The <code>position</code> parameter indicates where a given page is located relative to the center of the screen. +<p>The <code>position</code> parameter indicates where a given page is located relative to the center of the screen. It is a dynamic property that changes as the user scrolls through the pages. When a page fills the screen, its position value is <code>0</code>. When a page is drawn just off the right side of the screen, its position value is <code>1</code>. If the user scrolls halfway between pages one and two, page one has a position of -0.5 and page two has a position of 0.5. Based on the position of the pages on the screen, you can create custom slide animations by setting page properties with methods such as {@link android.view.View#setAlpha setAlpha()}, {@link android.view.View#setTranslationX setTranslationX()}, or {@link android.view.View#setScaleY setScaleY()}.</p> diff --git a/docs/html/training/animation/zoom.jd b/docs/html/training/animation/zoom.jd index 6a38e7d8c71d..60de70e8c02c 100644 --- a/docs/html/training/animation/zoom.jd +++ b/docs/html/training/animation/zoom.jd @@ -297,13 +297,13 @@ private void zoomImageFromThumb(final View thumbView, int imageResId) { set.play(ObjectAnimator .ofFloat(expandedImageView, View.X, startBounds.left)) .with(ObjectAnimator - .ofFloat(expandedImageView, + .ofFloat(expandedImageView, View.Y,startBounds.top)) .with(ObjectAnimator - .ofFloat(expandedImageView, + .ofFloat(expandedImageView, View.SCALE_X, startScaleFinal)) .with(ObjectAnimator - .ofFloat(expandedImageView, + .ofFloat(expandedImageView, View.SCALE_Y, startScaleFinal)); set.setDuration(mShortAnimationDuration); set.setInterpolator(new DecelerateInterpolator()); diff --git a/docs/html/training/app-indexing/deep-linking.jd b/docs/html/training/app-indexing/deep-linking.jd index 2c4a1310fbf1..a68e5a3cc4c1 100644 --- a/docs/html/training/app-indexing/deep-linking.jd +++ b/docs/html/training/app-indexing/deep-linking.jd @@ -69,7 +69,7 @@ in your manifest for deep linking. The URIs {@code “example://gizmosâ€} and <!-- Accepts URIs that begin with "example://gizmos†--> <data android:scheme="example" android:host="gizmos" /> - + </intent-filter> </activity> </pre> diff --git a/docs/html/training/articles/perf-anr.jd b/docs/html/training/articles/perf-anr.jd index bbebec5a83e1..2eda4fa679ca 100644 --- a/docs/html/training/articles/perf-anr.jd +++ b/docs/html/training/articles/perf-anr.jd @@ -64,10 +64,10 @@ concern.)</p> and Window Manager system services. Android will display the ANR dialog for a particular application when it detects one of the following conditions:</p> -<ul> - <li>No response to an input event (such as key press or screen touch events) +<ul> + <li>No response to an input event (such as key press or screen touch events) within 5 seconds.</li> - <li>A {@link android.content.BroadcastReceiver BroadcastReceiver} + <li>A {@link android.content.BroadcastReceiver BroadcastReceiver} hasn't finished executing within 10 seconds.</li> </ul> @@ -100,7 +100,7 @@ To post progress changes to the user, you can call {@link android.os.AsyncTask#onProgressUpdate onProgressUpdate()} callback method. From your implementation of {@link android.os.AsyncTask#onProgressUpdate onProgressUpdate()} (which runs on the UI thread), you can notify the user. For example:</p> - + <pre> private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { // Do the long-running work in here @@ -127,14 +127,14 @@ private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { } } </pre> - + <p>To execute this worker thread, simply create an instance and call {@link android.os.AsyncTask#execute execute()}:</p> - + <pre> new DownloadFilesTask().execute(url1, url2, url3); </pre> - + <p>Although it's more complicated than {@link android.os.AsyncTask}, you might want to instead create your own {@link java.lang.Thread} or {@link android.os.HandlerThread} class. If you do, @@ -143,7 +143,7 @@ android.os.Process#setThreadPriority Process.setThreadPriority()} and passing {@ android.os.Process#THREAD_PRIORITY_BACKGROUND}. If you don't set the thread to a lower priority this way, then the thread could still slow down your app because it operates at the same priority as the UI thread by default.</p> - + <p>If you implement {@link java.lang.Thread} or {@link android.os.HandlerThread}, be sure that your UI thread does not block while waiting for the worker thread to complete—do not call {@link java.lang.Thread#wait Thread.wait()} or @@ -183,16 +183,16 @@ make your application seem responsive to users:</p> <li>If your application is doing work in the background in response to user input, show that progress is being made (such as with a {@link android.widget.ProgressBar} in your UI).</li> - + <li>For games specifically, do calculations for moves in a worker thread.</li> - + <li>If your application has a time-consuming initial setup phase, consider showing a splash screen or rendering the main view as quickly as possible, indicate that loading is in progress and fill the information asynchronously. In either case, you should indicate somehow that progress is being made, lest the user perceive that the application is frozen.</li> - + <li>Use performance tools such as <a href="{@docRoot}tools/help/systrace.html">Systrace</a> and <a href="{@docRoot}tools/help/traceview.html">Traceview</a> to determine bottlenecks in your app's responsiveness.</li> diff --git a/docs/html/training/articles/perf-jni.jd b/docs/html/training/articles/perf-jni.jd index 5a9fa1e04b46..8d2fd9b2ebb6 100644 --- a/docs/html/training/articles/perf-jni.jd +++ b/docs/html/training/articles/perf-jni.jd @@ -564,9 +564,9 @@ be aware of:</p> that looked through the weak globals table, the arguments, the locals table, and the globals table in that order. The first time it found your direct pointer, it would report that your reference was of the type it - happened to be examining. This meant, for example, that if + happened to be examining. This meant, for example, that if you called <code>GetObjectRefType</code> on a global jclass that happened - to be the same as the jclass passed as an implicit argument to your static + to be the same as the jclass passed as an implicit argument to your static native method, you'd get <code>JNILocalRefType</code> rather than <code>JNIGlobalRefType</code>. </ul> diff --git a/docs/html/training/articles/smp.jd b/docs/html/training/articles/smp.jd index 0b45987558d6..a95931b536a9 100644 --- a/docs/html/training/articles/smp.jd +++ b/docs/html/training/articles/smp.jd @@ -75,7 +75,7 @@ page.article=true multiprocessor architectures. This document introduces issues that can arise when writing code for symmetric multiprocessor systems in C, C++, and the Java programming language (hereafter referred to simply as “Java†for the sake of -brevity). It's intended as a primer for Android app developers, not as a complete +brevity). It's intended as a primer for Android app developers, not as a complete discussion on the subject. The focus is on the ARM CPU architecture.</p> <p>If you’re in a hurry, you can skip the <a href="#theory">Theory</a> section diff --git a/docs/html/training/articles/user-data-overview.jd b/docs/html/training/articles/user-data-overview.jd index 8715d36cb76c..dc0df20fc06c 100644 --- a/docs/html/training/articles/user-data-overview.jd +++ b/docs/html/training/articles/user-data-overview.jd @@ -266,4 +266,4 @@ href="#references" style="color:#777;padding-left:.1em;">1</a></em></sup></span> href="http://stackoverflow.com/questions/24374701/alternative-to-read-phone-state-permission-for-getting-notified-of-call">source</a>)</em></p> <p>[2] <em>Using Personal Examples to Improve Risk Communication for Security and Privacy Decisions</em>, by M. Harbach, M. Hettig, S. Weber, and M. Smith. In Proceedings of ACM CHI 2014.</p> <p>[3] <em>Modeling Users’ Mobile App Privacy Preferences: Restoring Usability in a Sea of Permission Settings</em>, by J. Lin B. Liu, N. Sadeh and J. Hong. In Proceedings of SOUPS 2014.</p> -<p>[4] <em>Teens and Mobile Apps Privacy. (<a href="http://www.pewinternet.org/files/old-media/Files/Reports/2013/PIP_Teens%20and%20Mobile%20Apps%20Privacy.pdf">source</a>)</em></p> +<p>[4] <em>Teens and Mobile Apps Privacy. (<a href="http://www.pewinternet.org/files/old-media/Files/Reports/2013/PIP_Teens%20and%20Mobile%20Apps%20Privacy.pdf">source</a>)</em></p> diff --git a/docs/html/training/articles/user-data-permissions.jd b/docs/html/training/articles/user-data-permissions.jd index edc755884e53..ace5f7ff0d35 100644 --- a/docs/html/training/articles/user-data-permissions.jd +++ b/docs/html/training/articles/user-data-permissions.jd @@ -56,7 +56,7 @@ Working With</a></li> see <a href="{@docRoot}training/permissions/index.html">Working with System Permissions</a>. For best practices for working with unique identifiers, please see <a href= "{@docRoot}training/articles/user-data-ids.html">Best Practices for - Unique Identifiers</a>. + Unique Identifiers</a>. </p> <h2 id="tenets_of_working_with_android_permissions">Tenets of Working diff --git a/docs/html/training/basics/activity-lifecycle/index.jd b/docs/html/training/basics/activity-lifecycle/index.jd index afeab867860c..95ed21efe048 100644 --- a/docs/html/training/basics/activity-lifecycle/index.jd +++ b/docs/html/training/basics/activity-lifecycle/index.jd @@ -41,7 +41,7 @@ class="button">Download the demo</a> lifecycle. For instance, when your activity starts for the first time, it comes to the foreground of the system and receives user focus. During this process, the Android system calls a series of lifecycle methods on the -activity in which you set up the user interface and other components. If the user performs an +activity in which you set up the user interface and other components. If the user performs an action that starts another activity or switches to another app, the system calls another set of lifecycle methods on your activity as it moves into the background (where the activity is no longer visible, but the instance and its state remains intact).</p> @@ -57,7 +57,7 @@ android.app.Activity} instance receives and how you can use them so your activit user expects and does not consume system resources when your activity doesn't need them.</p> <h2>Lessons</h2> - + <dl> <dt><b><a href="starting.html">Starting an Activity</a></b></dt> <dd>Learn the basics about the activity lifecycle, how the user can launch your app, and how @@ -70,5 +70,5 @@ should do during these state changes.</dd> <dt><b><a href="recreating.html">Recreating an Activity</a></b></dt> <dd>Learn what happens when your activity is destroyed and how you can rebuild the activity state when necessary.</dd> -</dl> +</dl> diff --git a/docs/html/training/basics/activity-lifecycle/pausing.jd b/docs/html/training/basics/activity-lifecycle/pausing.jd index 223e41a2b8a0..7ca97aa2d292 100644 --- a/docs/html/training/basics/activity-lifecycle/pausing.jd +++ b/docs/html/training/basics/activity-lifecycle/pausing.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#Pause">Pause Your Activity</a></li> <li><a href="#Resume">Resume Your Activity</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activities</a> @@ -32,7 +32,7 @@ class="button">Download the demo</a> </div> </div> -<p>During normal app use, the foreground activity is sometimes obstructed by other +<p>During normal app use, the foreground activity is sometimes obstructed by other visual components that cause the activity to <em>pause</em>. For example, when a semi-transparent activity opens (such as one in the style of a dialog), the previous activity pauses. As long as the activity is still partially visible but currently not the activity in focus, it remains paused.</p> @@ -60,7 +60,7 @@ system calls {@link android.app.Activity#onResume onResume()} (2).</p> <h2 id="Pause">Pause Your Activity</h2> - + <p>When the system calls {@link android.app.Activity#onPause()} for your activity, it technically means your activity is still partially visible, but most often is an indication that the user is leaving the activity and it will soon enter the Stopped state. You should usually use diff --git a/docs/html/training/basics/activity-lifecycle/recreating.jd b/docs/html/training/basics/activity-lifecycle/recreating.jd index a52d5fd61f17..60a337742df7 100644 --- a/docs/html/training/basics/activity-lifecycle/recreating.jd +++ b/docs/html/training/basics/activity-lifecycle/recreating.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#SaveState">Save Your Activity State</a></li> <li><a href="#RestoreState">Restore Your Activity State</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Supporting @@ -106,7 +106,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(STATE_SCORE, mCurrentScore); savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); - + // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } @@ -139,7 +139,7 @@ onCreate()}:</p> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first - + // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state @@ -158,12 +158,12 @@ android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, which the after the {@link android.app.Activity#onStart()} method. The system calls {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} only if there is a saved state to restore, so you do not need to check whether the {@link android.os.Bundle} is null:</p> - + <pre> public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); - + // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(STATE_SCORE); mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); diff --git a/docs/html/training/basics/activity-lifecycle/starting.jd b/docs/html/training/basics/activity-lifecycle/starting.jd index 5b238b8b2b6e..06f3a6cfb943 100644 --- a/docs/html/training/basics/activity-lifecycle/starting.jd +++ b/docs/html/training/basics/activity-lifecycle/starting.jd @@ -9,7 +9,7 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#lifecycle-states">Understand the Lifecycle Callbacks</a></li> @@ -17,7 +17,7 @@ trainingnavtop=true <li><a href="#Create">Create a New Instance</a></li> <li><a href="#Destroy">Destroy the Activity</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activities</a></li> @@ -84,7 +84,7 @@ landscape and portrait orientation.</li> </ul> <!-- -<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback methods.</p> <table> <tr> @@ -139,7 +139,7 @@ specific lifecycle behaviors.</p> -<h2 id="launching-activity">Specify Your App's Launcher Activity</h2> +<h2 id="launching-activity">Specify Your App's Launcher Activity</h2> <p>When the user selects your app icon from the Home screen, the system calls the {@link android.app.Activity#onCreate onCreate()} method for the {@link android.app.Activity} in your app @@ -154,7 +154,7 @@ at the root of your project directory.</p> href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> that includes the {@link android.content.Intent#ACTION_MAIN MAIN} action and -{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} category. For example:</p> +{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} category. For example:</p> <pre> <activity android:name=".MainActivity" android:label="@string/app_name"> @@ -203,10 +203,10 @@ public void onCreate(Bundle savedInstanceState) { // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); - + // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); - + // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar @@ -271,7 +271,7 @@ android.app.Activity#onDestroy}.</p> @Override public void onDestroy() { super.onDestroy(); // Always call the superclass - + // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); } diff --git a/docs/html/training/basics/activity-lifecycle/stopping.jd b/docs/html/training/basics/activity-lifecycle/stopping.jd index 51c95ea6c97b..32463743ab52 100644 --- a/docs/html/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html/training/basics/activity-lifecycle/stopping.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#Stop">Stop Your Activity</a></li> <li><a href="#Start">Start/Restart Your Activity</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/components/activities.html">Activities</a> @@ -154,13 +154,13 @@ required system features are enabled:</p> @Override protected void onStart() { super.onStart(); // Always call the superclass method first - + // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled - LocationManager locationManager = + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - + if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action @@ -171,8 +171,8 @@ protected void onStart() { @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first - - // Activity being restarted from stopped state + + // Activity being restarted from stopped state } </pre> diff --git a/docs/html/training/basics/data-storage/databases.jd b/docs/html/training/basics/data-storage/databases.jd index 4a91d0d0a451..f42bf65d0aa6 100644 --- a/docs/html/training/basics/data-storage/databases.jd +++ b/docs/html/training/basics/data-storage/databases.jd @@ -119,11 +119,11 @@ application. Your data is secure, because by default this area is not accessible to other applications.</p> <p>A useful set of APIs is available in the {@link -android.database.sqlite.SQLiteOpenHelper} class. +android.database.sqlite.SQLiteOpenHelper} class. When you use this class to obtain references to your database, the system -performs the potentially +performs the potentially long-running operations of creating and updating the database only when -needed and <em>not during app startup</em>. All you need to do is call +needed and <em>not during app startup</em>. All you need to do is call {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} or {@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p> diff --git a/docs/html/training/basics/fragments/communicating.jd b/docs/html/training/basics/fragments/communicating.jd index 8c1ae21a7084..2e1207200068 100644 --- a/docs/html/training/basics/fragments/communicating.jd +++ b/docs/html/training/basics/fragments/communicating.jd @@ -7,14 +7,14 @@ trainingnavtop=true @jd:body <div id="tb-wrapper"> - <div id="tb"> + <div id="tb"> <h2>This lesson teaches you to</h2> <ol> <li><a href="#DefineInterface">Define an Interface</a></li> <li><a href="#Implement">Implement the Interface</a></li> <li><a href="#Deliver">Deliver a Message to a Fragment</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li> @@ -31,21 +31,21 @@ class="button">Download the sample</a> </div> </div> -<p>In order to reuse the Fragment UI components, you should build each as a completely -self-contained, modular component that defines its own layout and behavior. Once you -have defined these reusable Fragments, you can associate them with an Activity and +<p>In order to reuse the Fragment UI components, you should build each as a completely +self-contained, modular component that defines its own layout and behavior. Once you +have defined these reusable Fragments, you can associate them with an Activity and connect them with the application logic to realize the overall composite UI.</p> -<p>Often you will want one Fragment to communicate with another, for example to change -the content based on a user event. All Fragment-to-Fragment communication is done +<p>Often you will want one Fragment to communicate with another, for example to change +the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.</p> <h2 id="DefineInterface">Define an Interface</h2> -<p>To allow a Fragment to communicate up to its Activity, you can define an interface -in the Fragment class and implement it within the Activity. The Fragment captures -the interface implementation during its onAttach() lifecycle method and can then call +<p>To allow a Fragment to communicate up to its Activity, you can define an interface +in the Fragment class and implement it within the Activity. The Fragment captures +the interface implementation during its onAttach() lifecycle method and can then call the Interface methods in order to communicate with the Activity.</p> <p>Here is an example of Fragment to Activity communication:</p> @@ -62,7 +62,7 @@ public class HeadlinesFragment extends ListFragment { @Override public void onAttach(Activity activity) { super.onAttach(activity); - + // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { @@ -72,7 +72,7 @@ public class HeadlinesFragment extends ListFragment { + " must implement OnHeadlineSelectedListener"); } } - + ... } </pre> @@ -105,7 +105,7 @@ implement the interface defined in the fragment class.</p> public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... - + public void onArticleSelected(int position) { // The user selected the headline of an article from the HeadlinesFragment // Do something here to display that article @@ -118,12 +118,12 @@ public static class MainActivity extends Activity <h2 id="Deliver">Deliver a Message to a Fragment</h2> <p>The host activity can deliver messages to a fragment by capturing the {@link -android.support.v4.app.Fragment} instance +android.support.v4.app.Fragment} instance with {@link android.support.v4.app.FragmentManager#findFragmentById findFragmentById()}, then directly call the fragment's public methods.</p> <p>For instance, imagine that the activity shown above may contain another fragment that's used to -display the item specified by the data returned in the above callback method. In this case, +display the item specified by the data returned in the above callback method. In this case, the activity can pass the information received in the callback method to the other fragment that will display the item:</p> @@ -152,7 +152,7 @@ public static class MainActivity extends Activity Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); - + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, diff --git a/docs/html/training/basics/fragments/fragment-ui.jd b/docs/html/training/basics/fragments/fragment-ui.jd index c0bd0a45a2aa..4cfec76f2055 100644 --- a/docs/html/training/basics/fragments/fragment-ui.jd +++ b/docs/html/training/basics/fragments/fragment-ui.jd @@ -7,13 +7,13 @@ trainingnavtop=true @jd:body <div id="tb-wrapper"> - <div id="tb"> + <div id="tb"> <h2>This lesson teaches you to</h2> <ol> <li><a href="#AddAtRuntime">Add a Fragment to an Activity at Runtime</a></li> <li><a href="#Replace">Replace One Fragment with Another</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li> @@ -52,14 +52,14 @@ remove, and replace fragments to an activity at runtime in order to create a dyn -<h2 id="AddAtRuntime">Add a Fragment to an Activity at Runtime</h2> +<h2 id="AddAtRuntime">Add a Fragment to an Activity at Runtime</h2> <p>Rather than defining the fragments for an activity in the layout file—as shown in the <a href="creating.html">previous lesson</a> with the {@code <fragment>} element—you can add a fragment to the activity during the activity runtime. This is necessary if you plan to change fragments during the life of the activity.</p> -<p>To perform a transaction such as add or +<p>To perform a transaction such as add or remove a fragment, you must use the {@link android.support.v4.app.FragmentManager} to create a {@link android.support.v4.app.FragmentTransaction}, which provides APIs to add, remove, replace, and perform other fragment transactions.</p> @@ -126,11 +126,11 @@ public class MainActivity extends FragmentActivity { // Create a new Fragment to be placed in the activity layout HeadlinesFragment firstFragment = new HeadlinesFragment(); - + // In case this activity was started with special instructions from an // Intent, pass the Intent's extras to the fragment as arguments firstFragment.setArguments(getIntent().getExtras()); - + // Add the fragment to the 'fragment_container' FrameLayout getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, firstFragment).commit(); diff --git a/docs/html/training/basics/fragments/index.jd b/docs/html/training/basics/fragments/index.jd index aba645923fdb..4fb71e483848 100644 --- a/docs/html/training/basics/fragments/index.jd +++ b/docs/html/training/basics/fragments/index.jd @@ -56,7 +56,7 @@ app's user experience for devices with different screen sizes, all while continu devices running versions as old as Android 1.6.</p> <h2>Lessons</h2> - + <dl> <dt><b><a href="creating.html">Creating a Fragment</a></b></dt> <dd>Learn how to build a fragment and implement basic behaviors within its callback @@ -67,5 +67,5 @@ different screens.</dd> <dt><b><a href="communicating.html">Communicating with Other Fragments</a></b></dt> <dd>Learn how to set up communication paths from a fragment to the activity and other fragments.</dd> -</dl> +</dl> diff --git a/docs/html/training/basics/network-ops/connecting.jd b/docs/html/training/basics/network-ops/connecting.jd index 798a9ee718d7..9651269e8743 100644 --- a/docs/html/training/basics/network-ops/connecting.jd +++ b/docs/html/training/basics/network-ops/connecting.jd @@ -7,8 +7,8 @@ next.title=Managing Network Usage next.link=managing.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> @@ -20,7 +20,7 @@ next.link=managing.html <li><a href="#AsyncTask">Perform Network Operations on a Separate Thread</a></li> <li><a href="#download">Connect and Download Data</a></li> <li><a href="#stream">Convert the InputStream to a String</a></li> - + </ol> <h2>You should also read</h2> @@ -32,7 +32,7 @@ next.link=managing.html <li><a href="{@docRoot}guide/components/fundamentals.html">Application Fundamentals</a></li> </ul> -</div> +</div> </div> <p>This lesson shows you how to implement a simple application that connects to @@ -57,11 +57,11 @@ IPv6, and connection pooling.</p> <h2 id="connection">Check the Network Connection</h2> <p>Before your app attempts to connect to the network, it should check to see whether a -network connection is available using +network connection is available using {@link android.net.ConnectivityManager#getActiveNetworkInfo getActiveNetworkInfo()} -and {@link android.net.NetworkInfo#isConnected isConnected()}. +and {@link android.net.NetworkInfo#isConnected isConnected()}. Remember, the device may be out of range of a -network, or the user may have disabled both Wi-Fi and mobile data access. +network, or the user may have disabled both Wi-Fi and mobile data access. For more discussion of this topic, see the lesson <a href="{@docRoot}training/basics/network-ops/managing.html">Managing Network Usage</a>.</p> @@ -69,7 +69,7 @@ Usage</a>.</p> <pre> public void myClickHandler(View view) { ... - ConnectivityManager connMgr = (ConnectivityManager) + ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { @@ -98,28 +98,28 @@ android.os.AsyncTask}. <code>DownloadWebpageTask</code> implements the following {@link android.os.AsyncTask} methods:</p> <ul> - + <li>{@link android.os.AsyncTask#doInBackground doInBackground()} executes the method <code>downloadUrl()</code>. It passes the web page URL as a parameter. The method <code>downloadUrl()</code> fetches and processes the web page content. When it finishes, it passes back a result string.</li> - + <li>{@link android.os.AsyncTask#onPostExecute onPostExecute()} takes the returned string and displays it in the UI.</li> - - + + </ul> - + <pre> public class HttpExampleActivity extends Activity { private static final String DEBUG_TAG = "HttpExample"; private EditText urlText; private TextView textView; - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.main); + setContentView(R.layout.main); urlText = (EditText) findViewById(R.id.myUrl); textView = (TextView) findViewById(R.id.myText); } @@ -129,7 +129,7 @@ public class HttpExampleActivity extends Activity { public void myClickHandler(View view) { // Gets the URL from the UI's text field. String stringUrl = urlText.getText().toString(); - ConnectivityManager connMgr = (ConnectivityManager) + ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { @@ -139,7 +139,7 @@ public class HttpExampleActivity extends Activity { } } - // Uses AsyncTask to create a task away from the main UI thread. This task takes a + // Uses AsyncTask to create a task away from the main UI thread. This task takes a // URL string and uses it to create an HttpUrlConnection. Once the connection // has been established, the AsyncTask downloads the contents of the webpage as // an InputStream. Finally, the InputStream is converted into a string, which is @@ -147,7 +147,7 @@ public class HttpExampleActivity extends Activity { private class DownloadWebpageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { - + // params comes from the execute() call: params[0] is the url. try { return downloadUrl(urls[0]); @@ -167,28 +167,28 @@ public class HttpExampleActivity extends Activity { <p>The sequence of events in this snippet is as follows:</p> <ol> - <li>When users click the button that invokes {@code myClickHandler()}, + <li>When users click the button that invokes {@code myClickHandler()}, the app passes the specified URL to the {@link android.os.AsyncTask} subclass <code>DownloadWebpageTask</code>.</li> - + <li>The {@link android.os.AsyncTask} method {@link -android.os.AsyncTask#doInBackground doInBackground()} calls the +android.os.AsyncTask#doInBackground doInBackground()} calls the <code>downloadUrl()</code> method. </li> - + <li>The <code>downloadUrl()</code> method takes a URL string as a parameter and uses it to create a {@link java.net.URL} object.</li> - + <li>The {@link java.net.URL} object is used to establish an {@link java.net.HttpURLConnection}.</li> - + <li>Once the connection has been established, the {@link java.net.HttpURLConnection} object fetches the web page content as an {@link java.io.InputStream}.</li> - + <li>The {@link java.io.InputStream} is passed to the <code>readIt()</code> method, which converts the stream to a string.</li> - + <li>Finally, the {@link android.os.AsyncTask}'s {@link android.os.AsyncTask#onPostExecute onPostExecute()} method displays the string in the main activity's UI.</li> @@ -196,19 +196,19 @@ in the main activity's UI.</li> </ol> <h2 id="download">Connect and Download Data</h2> - - <p>In your thread that performs your network transactions, you can use - {@link java.net.HttpURLConnection} to perform a {@code GET} and download your data. - After you call {@code connect()}, you can get an {@link java.io.InputStream} of the data + + <p>In your thread that performs your network transactions, you can use + {@link java.net.HttpURLConnection} to perform a {@code GET} and download your data. + After you call {@code connect()}, you can get an {@link java.io.InputStream} of the data by calling {@code getInputStream()}. - + <p>In the following snippet, the {@link android.os.AsyncTask#doInBackground doInBackground()} method calls the method <code>downloadUrl()</code>. The <code>downloadUrl()</code> method takes the given URL and uses it to connect to the network via {@link java.net.HttpURLConnection}. Once a connection has been established, the app uses the method <code>getInputStream()</code> to retrieve the data as an {@link java.io.InputStream}.</p> - + <pre> // Given a URL, establishes an HttpUrlConnection and retrieves // the web page content as a InputStream, which it returns as @@ -218,7 +218,7 @@ private String downloadUrl(String myurl) throws IOException { // Only display the first 500 characters of the retrieved // web page content. int len = 500; - + try { URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); @@ -235,13 +235,13 @@ private String downloadUrl(String myurl) throws IOException { // Convert the InputStream into a string String contentAsString = readIt(is, len); return contentAsString; - + // Makes sure that the InputStream is closed after the app is // finished using it. } finally { if (is != null) { is.close(); - } + } } }</pre> @@ -252,7 +252,7 @@ code of 200 indicates success.</p> <h2 id="stream">Convert the InputStream to a String</h2> -<p>An {@link java.io.InputStream} is a readable source of bytes. Once you get an {@link java.io.InputStream}, +<p>An {@link java.io.InputStream} is a readable source of bytes. Once you get an {@link java.io.InputStream}, it's common to decode or convert it into a target data type. For example, if you were downloading image data, you might decode and display it like this:</p> @@ -271,7 +271,7 @@ a string so that the activity can display it in the UI:</p> <pre>// Reads an InputStream and converts it to a String. public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { Reader reader = null; - reader = new InputStreamReader(stream, "UTF-8"); + reader = new InputStreamReader(stream, "UTF-8"); char[] buffer = new char[len]; reader.read(buffer); return new String(buffer); diff --git a/docs/html/training/basics/network-ops/index.jd b/docs/html/training/basics/network-ops/index.jd index 1f6493f1e581..14345624cf23 100644 --- a/docs/html/training/basics/network-ops/index.jd +++ b/docs/html/training/basics/network-ops/index.jd @@ -42,7 +42,7 @@ class="button">Download the sample</a> <p>This class explains the basic tasks involved in connecting to the network, monitoring the network connection (including connection changes), and giving users control over an app's network usage. It also describes how to parse and -consume XML data.</p> +consume XML data.</p> <p>This class includes a sample application that illustrates how to perform common network operations. You can download the sample (to the right) and use it @@ -66,18 +66,18 @@ of your app's network operations.</p> <dl> <dt><b><a href="connecting.html">Connecting to the Network</a></b></dt> - + <dd>Learn how to connect to the network, choose an HTTP client, and perform network operations outside of the UI thread.</dd> <dt><b><a href="managing.html">Managing Network Usage</a></b></dt> - + <dd>Learn how to check a device's network connection, create a preferences UI for controlling network usage, and respond to connection changes.</dd> - + <dt><b><a href="xml.html">Parsing XML Data</a></b></dt> <dd>Learn how to parse and consume XML data.</dd> -</dl> +</dl> diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd index a645b3fcc0b3..2609db5a0160 100644 --- a/docs/html/training/basics/network-ops/managing.jd +++ b/docs/html/training/basics/network-ops/managing.jd @@ -10,8 +10,8 @@ next.title=Parsing XML Data next.link=xml.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> @@ -37,7 +37,7 @@ class="button">Download the sample</a> <p class="filename">NetworkUsage.zip</p> </div> -</div> +</div> </div> <p>This lesson describes how to write applications that have fine-grained @@ -50,19 +50,19 @@ less likely to disable your app’s access to background data when they approach limits, because they can instead precisely control how much data your app uses.</p> -<p>For general guidelines on how to write apps that minimize the battery life -impact of downloads and network connections, see -<a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a> +<p>For general guidelines on how to write apps that minimize the battery life +impact of downloads and network connections, see +<a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a> and <a href="{@docRoot}training/efficient-downloads/index.html">Transferring Data Without Draining the Battery</a>. <h2 id="check-connection">Check a Device's Network Connection</h2> -<p>A device can have various types of network connections. This lesson -focuses on using either a Wi-Fi or a mobile network connection. For the full +<p>A device can have various types of network connections. This lesson +focuses on using either a Wi-Fi or a mobile network connection. For the full list of possible network types, see {@link android.net.ConnectivityManager}.<p> <p>Wi-Fi is typically faster. Also, mobile data is often metered, which can get -expensive. +expensive. A common strategy for apps is to only fetch large data if a Wi-Fi network is available.</p> @@ -77,11 +77,11 @@ the following classes:</p> <li>{@link android.net.ConnectivityManager}: Answers queries about the state of network connectivity. It also notifies applications when network connectivity changes. </li> - + <li>{@link android.net.NetworkInfo}: Describes the status of a network interface of a given type (currently either Mobile or Wi-Fi). </li> - + </ul> @@ -94,16 +94,16 @@ data): </p> <pre> private static final String DEBUG_TAG = "NetworkStatusExample"; -... -ConnectivityManager connMgr = (ConnectivityManager) +... +ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); -NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); +NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); boolean isWifiConn = networkInfo.isConnected(); networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); boolean isMobileConn = networkInfo.isConnected(); Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn); Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn); -</pre> +</pre> <p>Note that you should not base decisions on whether a network is "available." You should always check {@link @@ -122,7 +122,7 @@ internet connection is not available):</p> <pre> public boolean isOnline() { - ConnectivityManager connMgr = (ConnectivityManager) + ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnected()); @@ -148,37 +148,37 @@ availability, time interval, and so on.</li> </ul> -<p>To write an app that supports network access and managing -network usage, your manifest must have the right permissions and +<p>To write an app that supports network access and managing +network usage, your manifest must have the right permissions and intent filters. </p> <ul> <li>The manifest excerpted below includes the following permissions: <ul> - + <li>{@link android.Manifest.permission#INTERNET android.permission.INTERNET}—Allows applications to open network sockets.</li> - + <li>{@link android.Manifest.permission#ACCESS_NETWORK_STATE android.permission.ACCESS_NETWORK_STATE}—Allows applications to access information about networks.</li> - + </ul> </li> - - <li>You can declare the intent filter for the + + <li>You can declare the intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action (introduced in Android 4.0) to indicate that your application defines an activity that offers options to control data usage. {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} shows settings for managing -the network data usage of a specific application. When your app has a settings activity -that allows users to control network usage, you should declare this intent filter for that activity. +the network data usage of a specific application. When your app has a settings activity +that allows users to control network usage, you should declare this intent filter for that activity. In the sample application, this action is handled by the class <code>SettingsActivity</code>, which displays a preferences UI to let users decide when to download a feed.</li> - + </ul> @@ -188,9 +188,9 @@ decide when to download a feed.</li> package="com.example.android.networkusage" ...> - <uses-sdk android:minSdkVersion="4" + <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" /> - + <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> @@ -213,7 +213,7 @@ decide when to download a feed.</li> <code>SettingsActivity</code> has an intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action. <code>SettingsActivity</code> is a subclass of {@link -android.preference.PreferenceActivity}. It displays a preferences screen +android.preference.PreferenceActivity}. It displays a preferences screen (shown in figure 1) that lets users specify the following:</p> @@ -221,10 +221,10 @@ lets users specify the following:</p> <li>Whether to display summaries for each XML feed entry, or just a link for each entry.</li> - + <li>Whether to download the XML feed if any network connection is available, or only if Wi-Fi is available.</li> - + </ul> <img src="{@docRoot}images/training/basics/network-settings1.png" alt="Preferences panel" /> @@ -232,49 +232,49 @@ or only if Wi-Fi is available.</li> <img src="{@docRoot}images/training/basics/network-settings2.png" alt="Setting a network preference" /> <p class="img-caption"><strong>Figure 1.</strong> Preferences activity.</p> -<p>Here is <code>SettingsActivity</code>. Note that it implements -{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener OnSharedPreferenceChangeListener}. +<p>Here is <code>SettingsActivity</code>. Note that it implements +{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener OnSharedPreferenceChangeListener}. When a user changes a preference, it fires -{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged onSharedPreferenceChanged()}, -which sets {@code refreshDisplay} to true. This causes the display to refresh when the user +{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged onSharedPreferenceChanged()}, +which sets {@code refreshDisplay} to true. This causes the display to refresh when the user returns to the main activity:</p> <pre>public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { - + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + // Loads the XML preferences file addPreferencesFromResource(R.xml.preferences); } - + @Override protected void onResume() { super.onResume(); - // Registers a listener whenever a key changes + // Registers a listener whenever a key changes getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } - + @Override protected void onPause() { super.onPause(); // Unregisters the listener set in onResume(). - // It's best practice to unregister listeners when your app isn't using them to cut down on - // unnecessary system overhead. You do this in onPause(). - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + // It's best practice to unregister listeners when your app isn't using them to cut down on + // unnecessary system overhead. You do this in onPause(). + getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } - - // When the user changes the preferences selection, + + // When the user changes the preferences selection, // onSharedPreferenceChanged() restarts the main activity as a new // task. Sets the refreshDisplay flag to "true" to indicate that // the main activity should update its display. // The main activity queries the PreferenceManager to get the latest settings. - + @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // Sets refreshDisplay to true so that when the user returns to the main // activity, the display refreshes to reflect the new settings. NetworkActivity.refreshDisplay = true; @@ -295,31 +295,31 @@ public class NetworkActivity extends Activity { public static final String WIFI = "Wi-Fi"; public static final String ANY = "Any"; private static final String URL = "http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest"; - + // Whether there is a Wi-Fi connection. - private static boolean wifiConnected = false; + private static boolean wifiConnected = false; // Whether there is a mobile connection. private static boolean mobileConnected = false; // Whether the display should be refreshed. public static boolean refreshDisplay = true; - + // The user's current network preference setting. public static String sPref = null; - + // The BroadcastReceiver that tracks network connectivity changes. private NetworkReceiver receiver = new NetworkReceiver(); - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + // Registers BroadcastReceiver to track network connection changes. IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); receiver = new NetworkReceiver(); this.registerReceiver(receiver, filter); } - - @Override + + @Override public void onDestroy() { super.onDestroy(); // Unregisters BroadcastReceiver when app is destroyed. @@ -327,34 +327,34 @@ public class NetworkActivity extends Activity { this.unregisterReceiver(receiver); } } - + // Refreshes the display if the network connection and the // pref settings allow it. - + @Override public void onStart () { - super.onStart(); - + super.onStart(); + // Gets the user's network preference settings SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); - + // Retrieves a string value for the preferences. The second parameter // is the default value to use if a preference value is not found. sPref = sharedPrefs.getString("listPref", "Wi-Fi"); - updateConnectedFlags(); - + updateConnectedFlags(); + if(refreshDisplay){ - loadPage(); + loadPage(); } } - + // Checks the network connection and sets the wifiConnected and mobileConnected - // variables accordingly. + // variables accordingly. public void updateConnectedFlags() { - ConnectivityManager connMgr = (ConnectivityManager) + ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeInfo = connMgr.getActiveNetworkInfo(); if (activeInfo != null && activeInfo.isConnected()) { wifiConnected = activeInfo.getType() == ConnectivityManager.TYPE_WIFI; @@ -362,9 +362,9 @@ public class NetworkActivity extends Activity { } else { wifiConnected = false; mobileConnected = false; - } + } } - + // Uses AsyncTask subclass to download the XML feed from stackoverflow.com. public void loadPage() { if (((sPref.equals(ANY)) && (wifiConnected || mobileConnected)) @@ -376,7 +376,7 @@ public class NetworkActivity extends Activity { } } ... - + }</pre> <h2 id="detect-changes">Detect Connection Changes</h2> @@ -388,36 +388,36 @@ the action {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, determines what the network connection status is, and sets the flags <code>wifiConnected</code> and <code>mobileConnected</code> to true/false accordingly. The upshot is that the next time the user returns to the app, the -app will only download the latest feed and update the display if +app will only download the latest feed and update the display if <code>NetworkActivity.refreshDisplay</code> is set to <code>true</code>.</p> -<p>Setting up a BroadcastReceiver that gets called unnecessarily can be a +<p>Setting up a BroadcastReceiver that gets called unnecessarily can be a drain on system resources. -The sample application registers the -{@link android.content.BroadcastReceiver} {@code NetworkReceiver} in -{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()}, -and it unregisters it in -{@link android.app.Activity#onDestroy onDestroy()}. This is more lightweight +The sample application registers the +{@link android.content.BroadcastReceiver} {@code NetworkReceiver} in +{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()}, +and it unregisters it in +{@link android.app.Activity#onDestroy onDestroy()}. This is more lightweight than declaring a {@code <receiver>} in the manifest. When you declare a {@code <receiver>} in the manifest, it can wake up your app at any time, -even if you haven't run it for weeks. By registering and unregistering -{@code NetworkReceiver} within the main activity, you ensure that the app won't -be woken up after the user leaves the app. +even if you haven't run it for weeks. By registering and unregistering +{@code NetworkReceiver} within the main activity, you ensure that the app won't +be woken up after the user leaves the app. If you do declare a {@code <receiver>} in the manifest and you know exactly -where you need it, you can use +where you need it, you can use {@link android.content.pm.PackageManager#setComponentEnabledSetting setComponentEnabledSetting()} to enable and disable it as appropriate.</p> <p>Here is <code>NetworkReceiver</code>:</p> -<pre>public class NetworkReceiver extends BroadcastReceiver { - +<pre>public class NetworkReceiver extends BroadcastReceiver { + @Override public void onReceive(Context context, Intent intent) { ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = conn.getActiveNetworkInfo(); - + // Checks the user prefs and the network connection. Based on the result, decides whether // to refresh the display or keep the current display. // If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection. @@ -432,9 +432,9 @@ public void onReceive(Context context, Intent intent) { // (which by process of elimination would be mobile), sets refreshDisplay to true. } else if (ANY.equals(sPref) && networkInfo != null) { refreshDisplay = true; - + // Otherwise, the app can't download content--either because there is no network - // connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there + // connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there // is no Wi-Fi connection. // Sets refreshDisplay to false. } else { diff --git a/docs/html/training/basics/network-ops/xml.jd b/docs/html/training/basics/network-ops/xml.jd index 0ea696d53684..3385a6365db3 100644 --- a/docs/html/training/basics/network-ops/xml.jd +++ b/docs/html/training/basics/network-ops/xml.jd @@ -9,7 +9,7 @@ previous.link=managing.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> @@ -38,7 +38,7 @@ class="button">Download the sample</a> <p class="filename">NetworkUsage.zip</p> </div> -</div> +</div> </div> <p>Extensible Markup Language (XML) is a set of rules for encoding documents in @@ -55,11 +55,11 @@ maintainable way to parse XML on Android. Historically Android has had two implementations of this interface:</p> <ul> - <li><a href="http://kxml.sourceforge.net/"><code>KXmlParser</code></a> - via {@link org.xmlpull.v1.XmlPullParserFactory#newPullParser XmlPullParserFactory.newPullParser()}. + <li><a href="http://kxml.sourceforge.net/"><code>KXmlParser</code></a> + via {@link org.xmlpull.v1.XmlPullParserFactory#newPullParser XmlPullParserFactory.newPullParser()}. </li> - <li><code>ExpatPullParser</code>, via - {@link android.util.Xml#newPullParser Xml.newPullParser()}. + <li><code>ExpatPullParser</code>, via + {@link android.util.Xml#newPullParser Xml.newPullParser()}. </li> </ul> @@ -69,15 +69,15 @@ example in this section uses <code>ExpatPullParser</code>, via <h2 id="analyze">Analyze the Feed</h2> -<p>The first step in parsing a feed is to decide which fields you're interested in. +<p>The first step in parsing a feed is to decide which fields you're interested in. The parser extracts data for those fields and ignores the rest.</p> <p>Here is an excerpt from the feed that's being parsed in the sample app. Each post to <a href="http://stackoverflow.com">StackOverflow.com</a> appears in the feed as an <code>entry</code> tag that contains several nested tags:</p> -<pre><?xml version="1.0" encoding="utf-8"?> -<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" ..."> +<pre><?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" ..."> <title type="text">newest questions tagged android - Stack Overflow</title> ... <entry> @@ -107,7 +107,7 @@ feed as an <code>entry</code> tag that contains several nested tags:</p> ... </feed></pre> -<p>The sample app +<p>The sample app extracts data for the <code>entry</code> tag and its nested tags <code>title</code>, <code>link</code>, and <code>summary</code>.</p> @@ -125,7 +125,7 @@ interested in:</p> <pre>public class StackOverflowXmlParser { // We don't use namespaces private static final String ns = null; - + public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException { try { XmlPullParser parser = Xml.newPullParser(); @@ -137,7 +137,7 @@ interested in:</p> in.close(); } } - ... + ... }</pre> <h2 id="read">Read the Feed</h2> @@ -166,7 +166,7 @@ private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException } else { skip(parser); } - } + } return entries; }</pre> @@ -187,7 +187,7 @@ example extracts data for the <code>entry</code> tag and its nested tags <li>A "read" method for each tag you're interested in. For example, <code>readEntry()</code>, <code>readTitle()</code>, and so on. The parser reads -tags from the input stream. When it encounters a tag named <code>entry</code>, +tags from the input stream. When it encounters a tag named <code>entry</code>, <code>title</code>, <code>link</code> or <code>summary</code>, it calls the appropriate method for that tag. Otherwise, it skips the tag. @@ -201,7 +201,7 @@ parser to the next tag. For example: <code>readText()</code>. This method extracts data for these tags by calling <code>parser.getText()</code>.</li> -<li>For the <code>link</code> tag, the parser extracts data for links by first +<li>For the <code>link</code> tag, the parser extracts data for links by first determining if the link is the kind it's interested in. Then it uses <code>parser.getAttributeValue()</code> to extract the link's value.</li> @@ -215,7 +215,7 @@ object with the data members <code>title</code>, <code>link</code>, and </li> <li>A helper <code>skip()</code> method that's recursive. For more discussion of this topic, see <a href="#skip">Skip Tags You Don't Care About</a>.</li> </ul> - + </li> </ol> @@ -231,7 +231,7 @@ object with the data members <code>title</code>, <code>link</code>, and this.link = link; } } - + // Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them off // to their respective "read" methods for processing. Otherwise, skips the tag. private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException { @@ -264,18 +264,18 @@ private String readTitle(XmlPullParser parser) throws IOException, XmlPullParser parser.require(XmlPullParser.END_TAG, ns, "title"); return title; } - + // Processes link tags in the feed. private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException { String link = ""; parser.require(XmlPullParser.START_TAG, ns, "link"); String tag = parser.getName(); - String relType = parser.getAttributeValue(null, "rel"); + String relType = parser.getAttributeValue(null, "rel"); if (tag.equals("link")) { if (relType.equals("alternate")){ link = parser.getAttributeValue(null, "href"); parser.nextTag(); - } + } } parser.require(XmlPullParser.END_TAG, ns, "link"); return link; @@ -350,7 +350,7 @@ which has 2 nested elements, <code><name></code> and <ul> <li>The first time through the <code>while</code> loop, the next tag the parser -encounters after <code><author></code> is the <code>START_TAG</code> for +encounters after <code><author></code> is the <code>START_TAG</code> for <code><name></code>. The value for <code>depth</code> is incremented to 2.</li> @@ -367,7 +367,7 @@ encounters is the <code>END_TAG</code> <code></uri></code>. The value for <code>depth</code> is decremented to 1.</li> <li>The fifth time and final time through the <code>while</code> loop, the next -tag the parser encounters is the <code>END_TAG</code> +tag the parser encounters is the <code>END_TAG</code> <code></author></code>. The value for <code>depth</code> is decremented to 0, indicating that the <code><author></code> element has been successfully skipped.</li> @@ -377,7 +377,7 @@ skipped.</li> <h2 id="consume">Consume XML Data</h2> <p>The example application fetches and parses the XML feed within an {@link -android.os.AsyncTask}. This takes the processing off the main UI thread. When +android.os.AsyncTask}. This takes the processing off the main UI thread. When processing is complete, the app updates the UI in the main activity (<code>NetworkActivity</code>).</p> <p>In the excerpt shown below, the <code>loadPage()</code> method does the @@ -386,33 +386,33 @@ following:</p> <ul> <li>Initializes a string variable with the URL for the XML feed.</li> - + <li>If the user's settings and the network connection allow it, invokes -<code>new DownloadXmlTask().execute(url)</code>. This instantiates a new +<code>new DownloadXmlTask().execute(url)</code>. This instantiates a new <code>DownloadXmlTask</code> object ({@link android.os.AsyncTask} subclass) and runs its {@link android.os.AsyncTask#execute execute()} method, which downloads and parses the feed and returns a string result to be displayed in the UI.</li> - + </ul> <pre> public class NetworkActivity extends Activity { public static final String WIFI = "Wi-Fi"; public static final String ANY = "Any"; private static final String URL = "http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest"; - + // Whether there is a Wi-Fi connection. - private static boolean wifiConnected = false; + private static boolean wifiConnected = false; // Whether there is a mobile connection. private static boolean mobileConnected = false; // Whether the display should be refreshed. - public static boolean refreshDisplay = true; + public static boolean refreshDisplay = true; public static String sPref = null; ... - + // Uses AsyncTask to download the XML feed from stackoverflow.com. - public void loadPage() { - + public void loadPage() { + if((sPref.equals(ANY)) && (wifiConnected || mobileConnected)) { new DownloadXmlTask().execute(URL); } @@ -420,25 +420,25 @@ public class NetworkActivity extends Activity { new DownloadXmlTask().execute(URL); } else { // show error - } + } }</pre> - + <p>The {@link android.os.AsyncTask} subclass shown below, <code>DownloadXmlTask</code>, implements the following {@link android.os.AsyncTask} methods:</p> <ul> - + <li>{@link android.os.AsyncTask#doInBackground doInBackground()} executes the method <code>loadXmlFromNetwork()</code>. It passes the feed URL as a parameter. The method <code>loadXmlFromNetwork()</code> fetches and processes the feed. When it finishes, it passes back a result string.</li> - + <li>{@link android.os.AsyncTask#onPostExecute onPostExecute()} takes the returned string and displays it in the UI.</li> - + </ul> - + <pre> // Implementation of AsyncTask used to download XML feed from stackoverflow.com. private class DownloadXmlTask extends AsyncTask<String, Void, String> { @@ -454,7 +454,7 @@ private class DownloadXmlTask extends AsyncTask<String, Void, String> { } @Override - protected void onPostExecute(String result) { + protected void onPostExecute(String result) { setContentView(R.layout.main); // Displays the HTML string in the UI via a WebView WebView myWebView = (WebView) findViewById(R.id.webview); @@ -464,28 +464,28 @@ private class DownloadXmlTask extends AsyncTask<String, Void, String> { <p>Below is the method <code>loadXmlFromNetwork()</code> that is invoked from <code>DownloadXmlTask</code>. It does the following:</p> - + <ol> - + <li>Instantiates a <code>StackOverflowXmlParser</code>. It also creates variables for -a {@link java.util.List} of <code>Entry</code> objects (<code>entries</code>), and +a {@link java.util.List} of <code>Entry</code> objects (<code>entries</code>), and <code>title</code>, <code>url</code>, and <code>summary</code>, to hold the values extracted from the XML feed for those fields.</li> - - <li>Calls <code>downloadUrl()</code>, which fetches the feed and returns it as + + <li>Calls <code>downloadUrl()</code>, which fetches the feed and returns it as an {@link java.io.InputStream}.</li> - - <li>Uses <code>StackOverflowXmlParser</code> to parse the {@link java.io.InputStream}. - <code>StackOverflowXmlParser</code> populates a + + <li>Uses <code>StackOverflowXmlParser</code> to parse the {@link java.io.InputStream}. + <code>StackOverflowXmlParser</code> populates a {@link java.util.List} of <code>entries</code> with data from the feed.</li> - - <li>Processes the <code>entries</code> {@link java.util.List}, + + <li>Processes the <code>entries</code> {@link java.util.List}, and combines the feed data with HTML markup.</li> - + <li>Returns an HTML string that is displayed in the main activity UI by the {@link android.os.AsyncTask} method {@link android.os.AsyncTask#onPostExecute onPostExecute()}.</li> - + </ol> <pre> @@ -499,35 +499,35 @@ private String loadXmlFromNetwork(String urlString) throws XmlPullParserExceptio String title = null; String url = null; String summary = null; - Calendar rightNow = Calendar.getInstance(); + Calendar rightNow = Calendar.getInstance(); DateFormat formatter = new SimpleDateFormat("MMM dd h:mmaa"); - + // Checks whether the user set the preference to include summary text SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); boolean pref = sharedPrefs.getBoolean("summaryPref", false); - + StringBuilder htmlString = new StringBuilder(); htmlString.append("<h3>" + getResources().getString(R.string.page_title) + "</h3>"); - htmlString.append("<em>" + getResources().getString(R.string.updated) + " " + + htmlString.append("<em>" + getResources().getString(R.string.updated) + " " + formatter.format(rightNow.getTime()) + "</em>"); - + try { - stream = downloadUrl(urlString); + stream = downloadUrl(urlString); entries = stackOverflowXmlParser.parse(stream); // Makes sure that the InputStream is closed after the app is // finished using it. } finally { if (stream != null) { stream.close(); - } + } } - + // StackOverflowXmlParser returns a List (called "entries") of Entry objects. // Each Entry object represents a single post in the XML feed. // This section processes the entries list to combine each entry with HTML markup. // Each entry is displayed in the UI as a link that optionally includes // a text summary. - for (Entry entry : entries) { + for (Entry entry : entries) { htmlString.append("<p><a href='"); htmlString.append(entry.link); htmlString.append("'>" + entry.title + "</a></p>"); diff --git a/docs/html/training/basics/supporting-devices/index.jd b/docs/html/training/basics/supporting-devices/index.jd index 4644c31c9cf6..c9f2e6cd51c5 100644 --- a/docs/html/training/basics/supporting-devices/index.jd +++ b/docs/html/training/basics/supporting-devices/index.jd @@ -35,7 +35,7 @@ resources and other features so your app can provide an optimized user experienc variety of Android-compatible devices, using a single application package (APK).</p> <h2>Lessons</h2> - + <dl> <dt><b><a href="languages.html">Supporting Different Languages</a></b></dt> <dd>Learn how to support multiple languages with alternative string resources.</dd> @@ -44,5 +44,5 @@ variety of Android-compatible devices, using a single application package (APK). <dt><b><a href="platforms.html">Supporting Different Platform Versions</a></b></dt> <dd>Learn how to use APIs available in new versions of Android while continuing to support older versions of Android.</dd> -</dl> +</dl> diff --git a/docs/html/training/basics/supporting-devices/languages.jd b/docs/html/training/basics/supporting-devices/languages.jd index ba7c0160fe51..0ad1fafeb824 100644 --- a/docs/html/training/basics/supporting-devices/languages.jd +++ b/docs/html/training/basics/supporting-devices/languages.jd @@ -36,7 +36,7 @@ types. There are also a few default files such as <code>res/values/strings.xml</ your string values.</p> -<h2 id="CreateDirs">Create Locale Directories and String Files</h2> +<h2 id="CreateDirs">Create Locale Directories and String Files</h2> <p>To add support for more languages, create additional <code>values</code> directories inside <code>res/</code> that include a hyphen and the ISO language code at the end of the @@ -63,7 +63,7 @@ MyProject/ <p>At runtime, the Android system uses the appropriate set of string resources based on the locale currently set for the user's device.</p> - + <p>For example, the following are some different string resource files for different languages.</p> @@ -112,7 +112,7 @@ resource name defined by the {@code <string>} element's {@code name} attribute.< <p>In your source code, you can refer to a string resource with the syntax {@code R.string.<string_name>}. There are a variety of methods that accept a string resource this way.</p> - + <p>For example:</p> <pre> diff --git a/docs/html/training/basics/supporting-devices/platforms.jd b/docs/html/training/basics/supporting-devices/platforms.jd index eecb3563344e..67120293b5e6 100644 --- a/docs/html/training/basics/supporting-devices/platforms.jd +++ b/docs/html/training/basics/supporting-devices/platforms.jd @@ -10,14 +10,14 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#sdk-versions">Specify Minimum and Target API Levels</a></li> <li><a href="#version-codes">Check System Version at Runtime</a></li> <li><a href="#style-themes">Use Platform Styles and Themes</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li> @@ -27,19 +27,19 @@ href="{@docRoot}tools/support-library/index.html">Android Support Library</a></l </div> </div> -<p>While the latest versions of Android often provide great APIs for your app, you should continue -to support older versions of Android until more devices get updated. This -lesson shows you how to take advantage of the latest APIs while continuing to support older +<p>While the latest versions of Android often provide great APIs for your app, you should continue +to support older versions of Android until more devices get updated. This +lesson shows you how to take advantage of the latest APIs while continuing to support older versions as well.</p> <p>The dashboard for <a href="http://developer.android.com/about/dashboards/index.html">Platform Versions</a> -is updated regularly to show the distribution of active -devices running each version of Android, based on the number of devices that visit the Google Play -Store. Generally, it’s a good practice to support about 90% of the active devices, while +is updated regularly to show the distribution of active +devices running each version of Android, based on the number of devices that visit the Google Play +Store. Generally, it’s a good practice to support about 90% of the active devices, while targeting your app to the latest version.</p> -<p class="note"><strong>Tip:</strong> In order to provide the best features and +<p class="note"><strong>Tip:</strong> In order to provide the best features and functionality across several Android versions, you should use the <a href="{@docRoot}tools/support-library/index.html">Android Support Library</a> in your app, which allows you to use several recent platform APIs on older versions.</p> @@ -49,8 +49,8 @@ which allows you to use several recent platform APIs on older versions.</p> <h2 id="sdk-versions">Specify Minimum and Target API Levels</h2> <p>The <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> file -describes details about your app and -identifies which versions of Android it supports. Specifically, the <code>minSdkVersion</code> +describes details about your app and +identifies which versions of Android it supports. Specifically, the <code>minSdkVersion</code> and <code>targetSdkVersion</code> attributes for the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element identify the lowest API level with which your app is compatible and the highest API level against @@ -65,9 +65,9 @@ which you’ve designed and tested your app.</p> </manifest> </pre> -<p>As new versions of Android are released, some style and behaviors may change. +<p>As new versions of Android are released, some style and behaviors may change. To allow your app to take advantage of these changes and ensure that your app fits the style of -each user's device, you should set the +each user's device, you should set the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> value to match the latest Android version @@ -93,24 +93,24 @@ private void setUpActionBar() { -<p class="note"><strong>Note:</strong> When parsing XML resources, Android ignores XML +<p class="note"><strong>Note:</strong> When parsing XML resources, Android ignores XML attributes that aren’t supported by the current device. So you can safely use XML attributes that are only supported by newer versions without worrying about older versions breaking when they -encounter that code. For example, if you set the +encounter that code. For example, if you set the <code>targetSdkVersion="11"</code>, your app includes the {@link android.app.ActionBar} by default -on Android 3.0 and higher. To then add menu items to the action bar, you need to set -<code>android:showAsAction="ifRoom"</code> in your menu resource XML. It's safe to do this -in a cross-version XML file, because the older versions of Android simply ignore the -<code>showAsAction</code> attribute (that is, you <em>do not</em> need a separate +on Android 3.0 and higher. To then add menu items to the action bar, you need to set +<code>android:showAsAction="ifRoom"</code> in your menu resource XML. It's safe to do this +in a cross-version XML file, because the older versions of Android simply ignore the +<code>showAsAction</code> attribute (that is, you <em>do not</em> need a separate version in <code>res/menu-v11/</code>).</p> -<h2 id="style-themes">Use Platform Styles and Themes</h2> +<h2 id="style-themes">Use Platform Styles and Themes</h2> -<p>Android provides user experience themes that give apps the look and feel of the -underlying operating system. These themes can be applied to your app within the -manifest file. By using these built in styles and themes, your app will +<p>Android provides user experience themes that give apps the look and feel of the +underlying operating system. These themes can be applied to your app within the +manifest file. By using these built in styles and themes, your app will naturally follow the latest look and feel of Android with each new release.</p> <p>To make your activity look like a dialog box:</p> @@ -126,7 +126,7 @@ naturally follow the latest look and feel of Android with each new release.</p> <pre><activity android:theme="@style/CustomTheme"></pre> <p>To apply a theme to your entire app (all activities), add the <code>android:theme</code> -attribute +attribute to the <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> element:</p> diff --git a/docs/html/training/basics/supporting-devices/screens.jd b/docs/html/training/basics/supporting-devices/screens.jd index 4b54de8e243c..9d5e7c17ce2e 100644 --- a/docs/html/training/basics/supporting-devices/screens.jd +++ b/docs/html/training/basics/supporting-devices/screens.jd @@ -8,13 +8,13 @@ trainingnavtop=true <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#create-layouts">Create Different Layouts</a></li> <li><a href="#create-bitmaps">Create Different Bitmaps</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple @@ -26,9 +26,9 @@ Screens</a></li> </div> </div> -<p>Android categorizes device screens using two general properties: size and density. You should -expect that your app will be installed on devices with screens that range in both size -and density. As such, you should include some alternative resources that optimize your app’s +<p>Android categorizes device screens using two general properties: size and density. You should +expect that your app will be installed on devices with screens that range in both size +and density. As such, you should include some alternative resources that optimize your app’s appearance for different screen sizes and densities.</p> <ul> @@ -46,12 +46,12 @@ screen size, so many apps should revise the layout to optimize the user experien orientation.</p> -<h2 id="create-layouts">Create Different Layouts</h2> +<h2 id="create-layouts">Create Different Layouts</h2> <p>To optimize your user experience on different screen sizes, you should create a unique layout XML -file for each screen size you want to support. Each layout should be -saved into the appropriate resources directory, named with a <code>-<screen_size></code> -suffix. For example, a unique layout for large screens should be saved under +file for each screen size you want to support. Each layout should be +saved into the appropriate resources directory, named with a <code>-<screen_size></code> +suffix. For example, a unique layout for large screens should be saved under <code>res/layout-large/</code>.</p> <p class="note"><strong>Note:</strong> Android automatically scales your layout in order to @@ -85,7 +85,7 @@ an optimized UI for the corresponding screen size.</p> } </pre> -<p>The system loads the layout file from the appropriate layout directory based on screen size of +<p>The system loads the layout file from the appropriate layout directory based on screen size of the device on which your app is running. More information about how Android selects the appropriate resource is available in the <a href="{@docRoot}guide/topics/resources/providing-resources.html#BestMatch">Providing Resources</a> @@ -120,7 +120,7 @@ MyProject/ main.xml </pre> -<p class="note"><strong>Note:</strong> Android 3.2 and above supports an advanced method of +<p class="note"><strong>Note:</strong> Android 3.2 and above supports an advanced method of defining screen sizes that allows you to specify resources for screen sizes based on the minimum width and height in terms of density-independent pixels. This lesson does not cover this new technique. For more information, read <a @@ -128,14 +128,14 @@ href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a>.</p> - + <h2 id="create-bitmaps">Create Different Bitmaps</h2> <p>You should always provide bitmap resources that are properly scaled to each of the generalized density buckets: low, medium, high and extra-high density. This helps you achieve good graphical quality and performance on all screen densities.</p> -<p>To generate these images, you should start with your raw resource in vector format and generate +<p>To generate these images, you should start with your raw resource in vector format and generate the images for each density using the following size scale:</p> <ul> <li>xhdpi: 2.0</li> @@ -144,7 +144,7 @@ the images for each density using the following size scale:</p> <li>ldpi: 0.75</li> </ul> -<p>This means that if you generate a 200x200 image for xhdpi devices, you should generate the same +<p>This means that if you generate a 200x200 image for xhdpi devices, you should generate the same resource in 150x150 for hdpi, 100x100 for mdpi, and 75x75 for ldpi devices.</p> <p>Then, place the files in the appropriate drawable resource directory:</p> @@ -162,14 +162,14 @@ MyProject/ awesomeimage.png </pre> -<p>Any time you reference <code>@drawable/awesomeimage</code>, the system selects the +<p>Any time you reference <code>@drawable/awesomeimage</code>, the system selects the appropriate bitmap based on the screen's density.</p> <p class="note"><strong>Note:</strong> Low-density (ldpi) resources aren’t always necessary. When you provide hdpi assets, the system scales them down by one half to properly fit ldpi screens.</p> -<p>For more tips and guidelines about creating icon assets for your app, see the +<p>For more tips and guidelines about creating icon assets for your app, see the <a href="{@docRoot}design/style/iconography.html">Iconography design guide</a>.</p> diff --git a/docs/html/training/building-userinfo.jd b/docs/html/training/building-userinfo.jd index 40e5b94c6d80..a08899d4d182 100644 --- a/docs/html/training/building-userinfo.jd +++ b/docs/html/training/building-userinfo.jd @@ -4,6 +4,6 @@ page.trainingcourse=true @jd:body -<p>These lessons teach you how to include contact information and authenticate users with the same -credentials they use for Google. These features allow your app to connect users with people they +<p>These lessons teach you how to include contact information and authenticate users with the same +credentials they use for Google. These features allow your app to connect users with people they care about and provide a personalized experience without creating new user accounts.</p> diff --git a/docs/html/training/camera/cameradirect.jd b/docs/html/training/camera/cameradirect.jd index 6f358a52befc..851c7db0d198 100644 --- a/docs/html/training/camera/cameradirect.jd +++ b/docs/html/training/camera/cameradirect.jd @@ -11,7 +11,7 @@ previous.link=videobasics.html <div id="tb-wrapper"> <div id="tb"> - + <h2>This lesson teaches you to</h2> <ol> <li><a href="#TaskOpenCamera">Open the Camera Object</a></li> @@ -22,7 +22,7 @@ previous.link=videobasics.html <li><a href="#TaskRestartPreview">Restart the Preview</a></li> <li><a href="#TaskReleaseCamera">Stop the Preview and Release the Camera</a></li> </ol> - + <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/topics/media/camera.html#custom-camera">Building @@ -57,7 +57,7 @@ in a {@code try} block.</p> <pre> private boolean safeCameraOpen(int id) { boolean qOpened = false; - + try { releaseCameraAndPreview(); mCamera = Camera.open(id); @@ -67,7 +67,7 @@ private boolean safeCameraOpen(int id) { e.printStackTrace(); } - return qOpened; + return qOpened; } private void releaseCameraAndPreview() { @@ -136,22 +136,22 @@ surfaceChanged()} callback method.</p> <pre> public void setCamera(Camera camera) { if (mCamera == camera) { return; } - + stopPreviewAndFreeCamera(); - + mCamera = camera; - + if (mCamera != null) { List<Size> localSizes = mCamera.getParameters().getSupportedPreviewSizes(); mSupportedPreviewSizes = localSizes; requestLayout(); - + try { mCamera.setPreviewDisplay(mHolder); } catch (IOException e) { e.printStackTrace(); } - + // Important: Call startPreview() to start updating the preview // surface. Preview must be started before you can take a picture. mCamera.startPreview(); @@ -260,12 +260,12 @@ private void stopPreviewAndFreeCamera() { if (mCamera != null) { // Call stopPreview() to stop updating the preview surface. mCamera.stopPreview(); - + // Important: Call release() to release the camera for use by other // applications. Applications should release the camera immediately // during onPause() and re-open() it during onResume()). mCamera.release(); - + mCamera = null; } } diff --git a/docs/html/training/contacts-provider/display-contact-badge.jd b/docs/html/training/contacts-provider/display-contact-badge.jd index b00ce0e4cabf..6c9616befe13 100644 --- a/docs/html/training/contacts-provider/display-contact-badge.jd +++ b/docs/html/training/contacts-provider/display-contact-badge.jd @@ -268,7 +268,7 @@ trainingnavtop=true Uri.withAppendedPath( contactUri, Photo.CONTENT_DIRECTORY); } - + /* * Retrieves an AssetFileDescriptor object for the thumbnail * URI diff --git a/docs/html/training/contacts-provider/index.jd b/docs/html/training/contacts-provider/index.jd index f380d9562e8a..9562977a8711 100644 --- a/docs/html/training/contacts-provider/index.jd +++ b/docs/html/training/contacts-provider/index.jd @@ -55,7 +55,7 @@ startpage=true <a href="{@docRoot}guide/topics/providers/contacts-provider.html">Contacts Provider</a>. </p> <h2>Lessons</h2> - + <dl> <dt> <b><a href="retrieve-names.html">Retrieving a List of Contacts</a></b> diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd index 447da94dd9c8..d249fbd63925 100755 --- a/docs/html/training/custom-views/index.jd +++ b/docs/html/training/custom-views/index.jd @@ -67,7 +67,7 @@ own views that are robust and reusable.</p> custom drawings run faster. </dd> -</dl> +</dl> diff --git a/docs/html/training/displaying-bitmaps/cache-bitmap.jd b/docs/html/training/displaying-bitmaps/cache-bitmap.jd index 7b9216ef968c..d9622bca7bfc 100644 --- a/docs/html/training/displaying-bitmaps/cache-bitmap.jd +++ b/docs/html/training/displaying-bitmaps/cache-bitmap.jd @@ -187,7 +187,7 @@ be unpredictable.</p> appropriate place to store cached images if they are accessed more frequently, for example in an image gallery application.</p> -<p>The sample code of this class uses a {@code DiskLruCache} implementation that is pulled from the +<p>The sample code of this class uses a {@code DiskLruCache} implementation that is pulled from the <a href="https://android.googlesource.com/platform/libcore/+/jb-mr2-release/luni/src/main/java/libcore/io/DiskLruCache.java">Android source</a>. Here’s updated example code that adds a disk cache in addition to the existing memory cache:</p> diff --git a/docs/html/training/displaying-bitmaps/index.jd b/docs/html/training/displaying-bitmaps/index.jd index 831c64de1c65..aea473f7f624 100644 --- a/docs/html/training/displaying-bitmaps/index.jd +++ b/docs/html/training/displaying-bitmaps/index.jd @@ -56,7 +56,7 @@ exception:<br />{@code java.lang.OutofMemoryError: bitmap size exceeds VM budget perform under this minimum memory limit. However, keep in mind many devices are configured with higher limits.</li> <li>Bitmaps take up a lot of memory, especially for rich images like photographs. For example, the - camera on the <a href="http://www.android.com/devices/detail/galaxy-nexus">Galaxy Nexus</a> takes + camera on the <a href="http://www.android.com/devices/detail/galaxy-nexus">Galaxy Nexus</a> takes photos up to 2592x1936 pixels (5 megapixels). If the bitmap configuration used is {@link android.graphics.Bitmap.Config ARGB_8888} (the default from the Android 2.3 onward) then loading this image into memory takes about 19MB of memory (2592*1936*4 bytes), immediately exhausting the diff --git a/docs/html/training/displaying-bitmaps/manage-memory.jd b/docs/html/training/displaying-bitmaps/manage-memory.jd index b7c72bc1c78f..ef3bd6c9525d 100644 --- a/docs/html/training/displaying-bitmaps/manage-memory.jd +++ b/docs/html/training/displaying-bitmaps/manage-memory.jd @@ -42,11 +42,11 @@ different versions of Android.</p> <p>To set the stage for this lesson, here is how Android's management of bitmap memory has evolved:</p> -<ul> +<ul> <li> -On Android Android 2.2 (API level 8) and lower, when garbage +On Android Android 2.2 (API level 8) and lower, when garbage collection occurs, your app's threads get stopped. This causes a lag that -can degrade performance. +can degrade performance. <strong>Android 2.3 adds concurrent garbage collection, which means that the memory is reclaimed soon after a bitmap is no longer referenced.</strong> </li> @@ -66,7 +66,7 @@ management for different Android versions.</p> <h2 id="recycle">Manage Memory on Android 2.3.3 and Lower</h2> -<p>On Android 2.3.3 (API level 10) and lower, using +<p>On Android 2.3.3 (API level 10) and lower, using {@link android.graphics.Bitmap#recycle recycle()} is recommended. If you're displaying large amounts of bitmap data in your app, you're likely to run into @@ -82,12 +82,12 @@ and later attempt to draw the bitmap, you will get the error: <p>The following code snippet gives an example of calling {@link android.graphics.Bitmap#recycle recycle()}. It uses reference counting -(in the variables {@code mDisplayRefCount} and {@code mCacheRefCount}) to track +(in the variables {@code mDisplayRefCount} and {@code mCacheRefCount}) to track whether a bitmap is currently being displayed or in the cache. The code recycles the bitmap when these conditions are met:</p> <ul> -<li>The reference count for both {@code mDisplayRefCount} and +<li>The reference count for both {@code mDisplayRefCount} and {@code mCacheRefCount} is 0.</li> <li>The bitmap is not {@code null}, and it hasn't been recycled yet.</li> </ul> @@ -142,7 +142,7 @@ private synchronized boolean hasValidBitmap() { <p>Android 3.0 (API level 11) introduces the {@link android.graphics.BitmapFactory.Options#inBitmap BitmapFactory.Options.inBitmap} -field. If this option is set, decode methods that take the +field. If this option is set, decode methods that take the {@link android.graphics.BitmapFactory.Options Options} object will attempt to reuse an existing bitmap when loading content. This means that the bitmap's memory is reused, resulting in improved performance, and @@ -154,7 +154,7 @@ removing both memory allocation and de-allocation. However, there are certain re <h3>Save a bitmap for later use</h3> <p>The following snippet demonstrates how an existing bitmap is stored for possible -later use in the sample app. When an app is running on Android 3.0 or higher and +later use in the sample app. When an app is running on Android 3.0 or higher and a bitmap is evicted from the {@link android.util.LruCache}, a soft reference to the bitmap is placed in a {@link java.util.HashSet}, for possible reuse later with @@ -238,7 +238,7 @@ if it finds a suitable match (your code should never assume that a match will be } } -// This method iterates through the reusable bitmaps, looking for one +// This method iterates through the reusable bitmaps, looking for one // to use for inBitmap: protected Bitmap getBitmapFromReusableSet(BitmapFactory.Options options) { Bitmap bitmap = null; diff --git a/docs/html/training/efficient-downloads/connectivity_patterns.jd b/docs/html/training/efficient-downloads/connectivity_patterns.jd index 81f154017aba..079e9670aad4 100644 --- a/docs/html/training/efficient-downloads/connectivity_patterns.jd +++ b/docs/html/training/efficient-downloads/connectivity_patterns.jd @@ -26,7 +26,7 @@ previous.link=redundant_redundant.html </div> <p>When it comes to impact on battery life, not all connection types are created equal. Not only does the Wi-Fi radio use significantly less battery than its wireless radio counterparts, but the radios used in different wireless radio technologies have different battery implications.</p> - + <h2 id="WiFi">Use Wi-Fi</h2> <p>In most cases a Wi-Fi radio will offer greater bandwidth at a significantly lower battery cost. As a result, you should endeavor to perform data transfers when connected over Wi-Fi whenever possible.</p> @@ -50,22 +50,22 @@ previous.link=redundant_redundant.html TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); - + int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE; - + switch (activeNetwork.getType()) { - case (ConnectivityManager.TYPE_WIFI): + case (ConnectivityManager.TYPE_WIFI): PrefetchCacheSize = MAX_PREFETCH_CACHE; break; case (ConnectivityManager.TYPE_MOBILE): { switch (tm.getNetworkType()) { - case (TelephonyManager.NETWORK_TYPE_LTE | - TelephonyManager.NETWORK_TYPE_HSPAP): + case (TelephonyManager.NETWORK_TYPE_LTE | + TelephonyManager.NETWORK_TYPE_HSPAP): PrefetchCacheSize *= 4; break; - case (TelephonyManager.NETWORK_TYPE_EDGE | - TelephonyManager.NETWORK_TYPE_GPRS): + case (TelephonyManager.NETWORK_TYPE_EDGE | + TelephonyManager.NETWORK_TYPE_GPRS): PrefetchCacheSize /= 2; break; default: break; diff --git a/docs/html/training/efficient-downloads/efficient-network-access.jd b/docs/html/training/efficient-downloads/efficient-network-access.jd index 1d3a8a59c681..7f061cae3807 100644 --- a/docs/html/training/efficient-downloads/efficient-network-access.jd +++ b/docs/html/training/efficient-downloads/efficient-network-access.jd @@ -32,9 +32,9 @@ next.link=regular_updates.html <p>Using the wireless radio to transfer data is potentially one of your app's most significant sources of battery drain. To minimize the battery drain associated with network activity, it's critical that you understand how your connectivity model will affect the underlying radio hardware.</p> <p>This lesson introduces the wireless radio state machine and explains how your app's connectivity model interacts with it. It goes on to propose ways to minimize your data connections, use prefetching, and bundle your transfers in order to minimize the battery drain associated with your data transfers.</p> - -<h2 id="RadioStateMachine">The Radio State Machine</h2> - + +<h2 id="RadioStateMachine">The Radio State Machine</h2> + <p>A fully active wireless radio consumes significant power, so it transitions between different energy states in order to conserve power when not in use, while attempting to minimize latency associated with "powering up" the radio when it's required.</p> <p>The state machine for a typical 3G network radio consists of three energy states: @@ -57,9 +57,9 @@ next.link=regular_updates.html <p>This approach is particularly effective for typical web browsing as it prevents unwelcome latency while users browse the web. The relatively low tail-time also ensures that once a browsing session has finished, the radio can move to a lower energy state.</p> <p>Unfortunately, this approach can lead to inefficient apps on modern smartphone OSs like Android, where apps run both in the foreground (where latency is important) and in the background (where battery life should be prioritized).</p> - -<h2 id="AppsStateMachine">How Apps Impact the Radio State Machine</h2> - + +<h2 id="AppsStateMachine">How Apps Impact the Radio State Machine</h2> + <p>Every time you create a new network connection, the radio transitions to the full power state. In the case of the typical 3G radio state machine described above, it will remain at full power for the duration of your transfer—plus an additional 5 seconds of tail time—followed by 12 seconds at the low energy state. So for a typical 3G device, every data transfer session will cause the radio to draw energy for almost 20 seconds.</p> <p>In practice, this means an app that transfers unbundled data for 1 second every 18 seconds will keep the wireless radio perpetually active, moving it back to high power just as it was about to become idle. As a result, every minute it will consume battery at the high power state for 18 seconds, and at the low power state for the remaining 42 seconds.</p> @@ -71,7 +71,7 @@ next.link=regular_updates.html <img src="{@docRoot}images/efficient-downloads/graphs.png" /> <p class="img-caption"><strong>Figure 2.</strong> Relative wireless radio power use for bundled versus unbundled transfers.</p> -<h2 id="PrefetchData">Prefetch Data</h2> +<h2 id="PrefetchData">Prefetch Data</h2> <p>Prefetching data is an effective way to reduce the number of independent data transfer sessions. Prefetching allows you to download all the data you are likely to need for a given time period in a single burst, over a single connection, at full capacity.</p> @@ -135,7 +135,7 @@ Every time you initiate a connection—irrespective of the size of the assoc <p>Rather than creating multiple simultaneous connections to download data, or chaining multiple consecutive GET requests, where possible you should bundle those requests into a single GET.</p> -<p>For example, it would be more efficient to make a single request for every news article to be returned in a single request / response than to make multiple queries for several news categories. +<p>For example, it would be more efficient to make a single request for every news article to be returned in a single request / response than to make multiple queries for several news categories. The wireless radio needs to become active in order to transmit the termination / termination acknowledgement packets associated with server and client timeout, so it's also good practice to close your connections when they aren't in use, rather than waiting for these timeouts.</p> <p>That said, closing a connection too early can prevent it from being reused, which then requires additional overhead for establishing a new connection. A useful compromise is not to close the connection immediately, but to still close it before the inherent timeout expires.</p> diff --git a/docs/html/training/efficient-downloads/index.jd b/docs/html/training/efficient-downloads/index.jd index d9d7ef078a44..a4c2aa16e7b5 100644 --- a/docs/html/training/efficient-downloads/index.jd +++ b/docs/html/training/efficient-downloads/index.jd @@ -26,18 +26,18 @@ startpage=true <p>In this class you will learn to minimize the battery life impact of downloads and network connections, particularly in relation to the wireless radio.</P -<p>This class demonstrates the best practices for scheduling and executing downloads using techniques such as caching, polling, and prefetching. You will learn how the power-use profile of the wireless radio can affect your choices on when, what, and how to transfer data in order to minimize impact on battery life.</p> +<p>This class demonstrates the best practices for scheduling and executing downloads using techniques such as caching, polling, and prefetching. You will learn how the power-use profile of the wireless radio can affect your choices on when, what, and how to transfer data in order to minimize impact on battery life.</p> + +<h2>Lessons</h2> -<h2>Lessons</h2> - <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - -<dl> +will want to jump to a lesson or not.--> + +<dl> <dt><b><a href="efficient-network-access.html">Optimizing Downloads for Efficient Network Access</a></b></dt> <dd>This lesson introduces the wireless radio state machine, explains how your app’s connectivity model interacts with it, and how you can minimize your data connection and use prefetching and bundling to minimize the battery drain associated with your data transfers.</dd> - + <dt><b><a href="regular_updates.html">Minimizing the Effect of Regular Updates</a></b></dt> <dd>This lesson will examine how your refresh frequency can be varied to best mitigate the effect of background updates on the underlying wireless radio state machine.</dd> @@ -47,4 +47,4 @@ will want to jump to a lesson or not.--> <dt><b><a href="connectivity_patterns.html">Modifying your Download Patterns Based on the Connectivity Type</a></b></dt> <dd>When it comes to impact on battery life, not all connection types are created equal. Not only does the Wi-Fi radio use significantly less battery than its wireless radio counterparts, but the radios used in different wireless radio technologies have different battery implications.</dd> -</dl> +</dl> diff --git a/docs/html/training/efficient-downloads/regular_updates.jd b/docs/html/training/efficient-downloads/regular_updates.jd index 8e3842a80d4d..b87c5122e39f 100644 --- a/docs/html/training/efficient-downloads/regular_updates.jd +++ b/docs/html/training/efficient-downloads/regular_updates.jd @@ -33,9 +33,9 @@ next.link=redundant_redundant.html <p><a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a> discusses how to build battery-efficient apps that modify their refresh frequency based on the state of the host device. That includes disabling background service updates when you lose connectivity and reducing the rate of updates when the battery level is low.</p> <p>This lesson will examine how your refresh frequency can be varied to best mitigate the effect of background updates on the underlying wireless radio state machine.</p> - -<h2 id="GCM">Use Google Cloud Messaging as an Alternative to Polling</h2> - + +<h2 id="GCM">Use Google Cloud Messaging as an Alternative to Polling</h2> + <p>Every time your app polls your server to check if an update is required, you activate the wireless radio, drawing power unnecessarily, for up to 20 seconds on a typical 3G connection.</p> <p><a href="{@docRoot}google/gcm/index.html">Google Cloud Messaging for Android (GCM)</a> is a lightweight mechanism used to transmit data from a server to a particular app instance. Using GCM, your server can notify your app running on a particular device that there is new data available for it.</p> @@ -46,7 +46,7 @@ next.link=redundant_redundant.html <p>GCM is implemented using a persistent TCP/IP connection. While it's possible to implement your own push service, it's best practice to use GCM. This minimizes the number of persistent connections and allows the platform to optimize bandwidth and minimize the associated impact on battery life.</p> -<h2 id="OptimizedPolling">Optimize Polling with Inexact Repeating Alarms and Exponential Backoffs</h2> +<h2 id="OptimizedPolling">Optimize Polling with Inexact Repeating Alarms and Exponential Backoffs</h2> <p>Where polling is required, it's good practice to set the default data refresh frequency of your app as low as possible without detracting from the user experience.</p> @@ -68,14 +68,14 @@ alarmManager.setInexactRepeating(alarmType, start, interval, pi);</pre> <p>One approach is to implement an exponential back-off pattern to reduce the frequency of your updates (and / or the degree of prefetching you perform) if the app hasn't been used since the previous update. It's often useful to assert a minimum update frequency and to reset the frequency whenever the app is used, for example:</p> -<pre>SharedPreferences sp = +<pre>SharedPreferences sp = context.getSharedPreferences(PREFS, Context.MODE_WORLD_READABLE); boolean appUsed = sp.getBoolean(PREFS_APPUSED, false); long updateInterval = sp.getLong(PREFS_INTERVAL, DEFAULT_REFRESH_INTERVAL); if (!appUsed) - if ((updateInterval *= 2) > MAX_REFRESH_INTERVAL) + if ((updateInterval *= 2) > MAX_REFRESH_INTERVAL) updateInterval = MAX_REFRESH_INTERVAL; Editor spEdit = sp.edit(); @@ -92,10 +92,10 @@ executeUpdateOrPrefetch();</pre> <pre>private void retryIn(long interval) { boolean success = attemptTransfer(); - + if (!success) { - retryIn(interval*2 < MAX_RETRY_INTERVAL ? - interval*2 : MAX_RETRY_INTERVAL); + retryIn(interval*2 < MAX_RETRY_INTERVAL ? + interval*2 : MAX_RETRY_INTERVAL); } }</pre> diff --git a/docs/html/training/gestures/detector.jd b/docs/html/training/gestures/detector.jd index 97f039c709a8..0624e86335bc 100644 --- a/docs/html/training/gestures/detector.jd +++ b/docs/html/training/gestures/detector.jd @@ -48,48 +48,48 @@ phases to gesture detection:</p> <ol> <li>Gathering data about touch events.</li> - + <li>Interpreting the data to see if it meets the criteria for any of the -gestures your app supports. </li> +gestures your app supports. </li> </ol> <h4>Support Library Classes</h4> <p>The examples in this lesson use the {@link android.support.v4.view.GestureDetectorCompat} -and {@link android.support.v4.view.MotionEventCompat} classes. These classes are in the +and {@link android.support.v4.view.MotionEventCompat} classes. These classes are in the <a href="{@docRoot}tools/support-library/index.html">Support Library</a>. You should use -Support Library classes where possible to provide compatibility with devices -running Android 1.6 and higher. Note that {@link android.support.v4.view.MotionEventCompat} is <em>not</em> a -replacement for the {@link android.view.MotionEvent} class. Rather, it provides static utility -methods to which you pass your {@link android.view.MotionEvent} object in order to receive +Support Library classes where possible to provide compatibility with devices +running Android 1.6 and higher. Note that {@link android.support.v4.view.MotionEventCompat} is <em>not</em> a +replacement for the {@link android.view.MotionEvent} class. Rather, it provides static utility +methods to which you pass your {@link android.view.MotionEvent} object in order to receive the desired action associated with that event.</p> <h2 id="data">Gather Data</h2> <p>When a user places one or more fingers on the screen, this triggers the -callback {@link android.view.View#onTouchEvent onTouchEvent()} +callback {@link android.view.View#onTouchEvent onTouchEvent()} on the View that received the touch events. -For each sequence of touch events (position, pressure, size, addition of another finger, etc.) +For each sequence of touch events (position, pressure, size, addition of another finger, etc.) that is ultimately identified as a gesture, {@link android.view.View#onTouchEvent onTouchEvent()} is fired several times.</p> <p>The gesture starts when the user first touches the screen, continues as the system tracks the position of the user's finger(s), and ends by capturing the final event of -the user's fingers leaving the screen. Throughout this interaction, -the {@link android.view.MotionEvent} delivered to {@link android.view.View#onTouchEvent onTouchEvent()} -provides the details of every interaction. Your app can use the data provided by the {@link android.view.MotionEvent} +the user's fingers leaving the screen. Throughout this interaction, +the {@link android.view.MotionEvent} delivered to {@link android.view.View#onTouchEvent onTouchEvent()} +provides the details of every interaction. Your app can use the data provided by the {@link android.view.MotionEvent} to determine if a gesture it cares about happened.</p> <h3>Capturing touch events for an Activity or View</h3> -<p><p>To intercept touch events in an Activity or View, override +<p><p>To intercept touch events in an Activity or View, override the {@link android.view.View#onTouchEvent onTouchEvent()} callback.</p> -<p>The following snippet uses +<p>The following snippet uses {@link android.support.v4.view.MotionEventCompat#getActionMasked getActionMasked()} -to extract the action the user performed from the {@code event} parameter. This gives you the raw +to extract the action the user performed from the {@code event} parameter. This gives you the raw data you need to determine if a gesture you care about occurred:</p> <pre> @@ -98,10 +98,10 @@ public class MainActivity extends Activity { // This example shows an Activity, but you would use the same approach if // you were subclassing a View. @Override -public boolean onTouchEvent(MotionEvent event){ - +public boolean onTouchEvent(MotionEvent event){ + int action = MotionEventCompat.getActionMasked(event); - + switch(action) { case (MotionEvent.ACTION_DOWN) : Log.d(DEBUG_TAG,"Action was DOWN"); @@ -118,10 +118,10 @@ public boolean onTouchEvent(MotionEvent event){ case (MotionEvent.ACTION_OUTSIDE) : Log.d(DEBUG_TAG,"Movement occurred outside bounds " + "of current screen element"); - return true; - default : + return true; + default : return super.onTouchEvent(event); - } + } }</pre> <p>You can then do your own processing on these events to determine if a @@ -143,22 +143,22 @@ setOnTouchListener()} method. This makes it possible to to listen for touch events without subclassing an existing {@link android.view.View}. For example:</p> -<pre>View myView = findViewById(R.id.my_view); +<pre>View myView = findViewById(R.id.my_view); myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { - // ... Respond to touch events + // ... Respond to touch events return true; } });</pre> -<p>Beware of creating a listener that returns {@code false} for the -{@link android.view.MotionEvent#ACTION_DOWN} event. If you do this, the listener will -not be called for the subsequent {@link android.view.MotionEvent#ACTION_MOVE} +<p>Beware of creating a listener that returns {@code false} for the +{@link android.view.MotionEvent#ACTION_DOWN} event. If you do this, the listener will +not be called for the subsequent {@link android.view.MotionEvent#ACTION_MOVE} and {@link android.view.MotionEvent#ACTION_UP} string of events. This is because {@link android.view.MotionEvent#ACTION_DOWN} is the starting point for all touch events.</p> -<p>If you are creating a custom View, you can override -{@link android.view.View#onTouchEvent onTouchEvent()}, +<p>If you are creating a custom View, you can override +{@link android.view.View#onTouchEvent onTouchEvent()}, as described above.</p> <h2 id="detect">Detect Gestures</h2> @@ -168,24 +168,24 @@ common gestures. Some of the gestures it supports include {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}, {@link android.view.GestureDetector.OnGestureListener#onLongPress onLongPress()}, {@link android.view.GestureDetector.OnGestureListener#onFling onFling()}, and so -on. You can use {@link android.view.GestureDetector} in conjunction with the +on. You can use {@link android.view.GestureDetector} in conjunction with the {@link android.view.View#onTouchEvent onTouchEvent()} method described above.</p> <h3>Detecting All Supported Gestures</h3> -<p>When you instantiate a {@link android.support.v4.view.GestureDetectorCompat} -object, one of the parameters it takes is a class that implements the -{@link android.view.GestureDetector.OnGestureListener} interface. -{@link android.view.GestureDetector.OnGestureListener} notifies users when -a particular touch event has occurred. To make it possible for your -{@link android.view.GestureDetector} object to receive events, you override -the View or Activity's {@link android.view.View#onTouchEvent onTouchEvent()} method, +<p>When you instantiate a {@link android.support.v4.view.GestureDetectorCompat} +object, one of the parameters it takes is a class that implements the +{@link android.view.GestureDetector.OnGestureListener} interface. +{@link android.view.GestureDetector.OnGestureListener} notifies users when +a particular touch event has occurred. To make it possible for your +{@link android.view.GestureDetector} object to receive events, you override +the View or Activity's {@link android.view.View#onTouchEvent onTouchEvent()} method, and pass along all observed events to the detector instance.</p> -<p>In the following snippet, a return value of {@code true} from the individual +<p>In the following snippet, a return value of {@code true} from the individual <code>on<em><TouchEvent></em></code> methods indicates that you have handled the touch event. A return value of {@code false} passes events down through the view stack until the touch has been successfully handled.</p> @@ -195,14 +195,14 @@ you interact with the touch screen, and what the contents of the {@link android.view.MotionEvent} are for each touch event. You will realize how much data is being generated for even simple interactions.</p> -<pre>public class MainActivity extends Activity implements +<pre>public class MainActivity extends Activity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{ - + private static final String DEBUG_TAG = "Gestures"; - private GestureDetectorCompat mDetector; + private GestureDetectorCompat mDetector; - // Called when the activity is first created. + // Called when the activity is first created. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -216,21 +216,21 @@ data is being generated for even simple interactions.</p> mDetector.setOnDoubleTapListener(this); } - @Override - public boolean onTouchEvent(MotionEvent event){ + @Override + public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); } @Override - public boolean onDown(MotionEvent event) { - Log.d(DEBUG_TAG,"onDown: " + event.toString()); + public boolean onDown(MotionEvent event) { + Log.d(DEBUG_TAG,"onDown: " + event.toString()); return true; } @Override - public boolean onFling(MotionEvent event1, MotionEvent event2, + public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString()); return true; @@ -238,7 +238,7 @@ data is being generated for even simple interactions.</p> @Override public void onLongPress(MotionEvent event) { - Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); + Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); } @Override @@ -294,23 +294,23 @@ android.view.GestureDetector.SimpleOnGestureListener} and overrides {@link android.view.GestureDetector.OnGestureListener#onFling onFling()} and {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}.</p> -<p>Whether or not you use {@link android.view.GestureDetector.OnGestureListener}, -it's best practice to implement an -{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} -method that returns {@code true}. This is because all gestures begin with an -{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} message. If you return -{@code false} from {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}, -as {@link android.view.GestureDetector.SimpleOnGestureListener} does by default, -the system assumes that you want to ignore the rest of the gesture, and the other methods of -{@link android.view.GestureDetector.OnGestureListener} never get called. -This has the potential to cause unexpected problems in your app. -The only time you should return {@code false} from -{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} +<p>Whether or not you use {@link android.view.GestureDetector.OnGestureListener}, +it's best practice to implement an +{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} +method that returns {@code true}. This is because all gestures begin with an +{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} message. If you return +{@code false} from {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}, +as {@link android.view.GestureDetector.SimpleOnGestureListener} does by default, +the system assumes that you want to ignore the rest of the gesture, and the other methods of +{@link android.view.GestureDetector.OnGestureListener} never get called. +This has the potential to cause unexpected problems in your app. +The only time you should return {@code false} from +{@link android.view.GestureDetector.OnGestureListener#onDown onDown()} is if you truly want to ignore an entire gesture. </p> -<pre>public class MainActivity extends Activity { - - private GestureDetectorCompat mDetector; +<pre>public class MainActivity extends Activity { + + private GestureDetectorCompat mDetector; @Override public void onCreate(Bundle savedInstanceState) { @@ -319,23 +319,23 @@ is if you truly want to ignore an entire gesture. </p> mDetector = new GestureDetectorCompat(this, new MyGestureListener()); } - @Override - public boolean onTouchEvent(MotionEvent event){ + @Override + public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } - + class MyGestureListener extends GestureDetector.SimpleOnGestureListener { - private static final String DEBUG_TAG = "Gestures"; - + private static final String DEBUG_TAG = "Gestures"; + @Override - public boolean onDown(MotionEvent event) { - Log.d(DEBUG_TAG,"onDown: " + event.toString()); + public boolean onDown(MotionEvent event) { + Log.d(DEBUG_TAG,"onDown: " + event.toString()); return true; } @Override - public boolean onFling(MotionEvent event1, MotionEvent event2, + public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString()); return true; diff --git a/docs/html/training/gestures/index.jd b/docs/html/training/gestures/index.jd index 260cfff33073..fad1afafbbe9 100644 --- a/docs/html/training/gestures/index.jd +++ b/docs/html/training/gestures/index.jd @@ -60,7 +60,7 @@ for <a href="{@docRoot}design/style/touch-feedback.html">Touch Feedback</a>. </ <strong><a href="detector.html">Detecting Common Gestures</a></strong> </dt> <dd> - Learn how to detect basic touch gestures such as scrolling, flinging, and double-tapping, using + Learn how to detect basic touch gestures such as scrolling, flinging, and double-tapping, using {@link android.view.GestureDetector}. </dd> @@ -84,7 +84,7 @@ touch event. </dd> </dt> <dd> Learn how to detect multi-pointer (finger) gestures. - </dd> + </dd> <dt> <strong><a href="scale.html">Dragging and Scaling</a></strong> </dt> diff --git a/docs/html/training/gestures/movement.jd b/docs/html/training/gestures/movement.jd index ed4928eb3041..0a611b3d6daf 100644 --- a/docs/html/training/gestures/movement.jd +++ b/docs/html/training/gestures/movement.jd @@ -55,13 +55,13 @@ detecting touch events is often based more on movement than on simple contact. To help apps distinguish between movement-based gestures (such as a swipe) and non-movement gestures (such as a single tap), Android includes the notion of "touch slop." Touch slop refers to the distance in pixels a user's touch can wander -before the gesture is interpreted as a movement-based gesture. For more discussion of this +before the gesture is interpreted as a movement-based gesture. For more discussion of this topic, see <a href="viewgroup.html#vc">Managing Touch Events in a ViewGroup</a>.</p> <p>There are several different ways to track movement in a gesture, depending on -the needs of your application. For example:</p> +the needs of your application. For example:</p> <ul> @@ -89,8 +89,8 @@ details.</li> <p> You could have a movement-based gesture that is simply based on the distance and/or direction the pointer traveled. But velocity often is a determining factor in tracking a gesture's characteristics or even deciding whether the gesture occurred. To make velocity calculation easier, Android -provides the {@link android.view.VelocityTracker} class and the -{@link android.support.v4.view.VelocityTrackerCompat} class in the +provides the {@link android.view.VelocityTracker} class and the +{@link android.support.v4.view.VelocityTrackerCompat} class in the <a href="{@docRoot}tools/support-library/index.html">Support Library</a>. {@link android.view.VelocityTracker} helps you track the velocity of touch events. This @@ -98,7 +98,7 @@ is useful for gestures in which velocity is part of the criteria for the gesture, such as a fling.</p> -<p>Here is a simple example that illustrates the purpose of the methods in the +<p>Here is a simple example that illustrates the purpose of the methods in the {@link android.view.VelocityTracker} API:</p> <pre>public class MainActivity extends Activity { @@ -126,16 +126,16 @@ gesture, such as a fling.</p> break; case MotionEvent.ACTION_MOVE: mVelocityTracker.addMovement(event); - // When you want to determine the velocity, call - // computeCurrentVelocity(). Then call getXVelocity() - // and getYVelocity() to retrieve the velocity for each pointer ID. + // When you want to determine the velocity, call + // computeCurrentVelocity(). Then call getXVelocity() + // and getYVelocity() to retrieve the velocity for each pointer ID. mVelocityTracker.computeCurrentVelocity(1000); // Log velocity of pixels per second // Best practice to use VelocityTrackerCompat where possible. - Log.d("", "X velocity: " + - VelocityTrackerCompat.getXVelocity(mVelocityTracker, + Log.d("", "X velocity: " + + VelocityTrackerCompat.getXVelocity(mVelocityTracker, pointerId)); - Log.d("", "Y velocity: " + + Log.d("", "Y velocity: " + VelocityTrackerCompat.getYVelocity(mVelocityTracker, pointerId)); break; @@ -150,8 +150,8 @@ gesture, such as a fling.</p> } </pre> -<p class="note"><strong>Note:</strong> Note that you should calculate velocity after an -{@link android.view.MotionEvent#ACTION_MOVE} event, -not after {@link android.view.MotionEvent#ACTION_UP}. After an {@link android.view.MotionEvent#ACTION_UP}, +<p class="note"><strong>Note:</strong> Note that you should calculate velocity after an +{@link android.view.MotionEvent#ACTION_MOVE} event, +not after {@link android.view.MotionEvent#ACTION_UP}. After an {@link android.view.MotionEvent#ACTION_UP}, the X and Y velocities will be 0. </p> diff --git a/docs/html/training/gestures/multi.jd b/docs/html/training/gestures/multi.jd index 58404827682d..21860fcaeb2c 100644 --- a/docs/html/training/gestures/multi.jd +++ b/docs/html/training/gestures/multi.jd @@ -47,15 +47,15 @@ multiple pointers.</p> <h2 id="track">Track Multiple Pointers</h2> -<p>When multiple pointers touch the screen at the same time, the system generates the +<p>When multiple pointers touch the screen at the same time, the system generates the following touch events:</p> <ul> - <li>{@link android.view.MotionEvent#ACTION_DOWN}—For the first pointer that -touches the screen. This starts the gesture. The pointer data for this pointer is + <li>{@link android.view.MotionEvent#ACTION_DOWN}—For the first pointer that +touches the screen. This starts the gesture. The pointer data for this pointer is always at index 0 in the {@link android.view.MotionEvent}.</li> - <li>{@link android.support.v4.view.MotionEventCompat#ACTION_POINTER_DOWN}—For -extra pointers that enter the screen beyond the first. The pointer data for this + <li>{@link android.support.v4.view.MotionEventCompat#ACTION_POINTER_DOWN}—For +extra pointers that enter the screen beyond the first. The pointer data for this pointer is at the index returned by {@link android.support.v4.view.MotionEventCompat#getActionIndex getActionIndex()}.</li> <li>{@link android.view.MotionEvent#ACTION_MOVE}—A change has happened during a press gesture.</li> <li>{@link android.support.v4.view.MotionEventCompat#ACTION_POINTER_UP}—Sent when a non-primary pointer goes up.</li> @@ -66,20 +66,20 @@ pointer is at the index returned by {@link android.support.v4.view.MotionEventCo android.view.MotionEvent} via each pointer's index and ID:</p> <ul> -<li><strong>Index</strong>: A {@link android.view.MotionEvent} effectively -stores information about each pointer in an array. The index of a pointer is its position +<li><strong>Index</strong>: A {@link android.view.MotionEvent} effectively +stores information about each pointer in an array. The index of a pointer is its position within this array. Most of the {@link android.view.MotionEvent} methods you use to interact with pointers take the pointer index as a parameter, not the pointer ID. </li> - - + + <li><strong>ID</strong>: Each pointer also has an ID mapping that stays -persistent across touch events to allow tracking an individual pointer across +persistent across touch events to allow tracking an individual pointer across the entire gesture.</li> - + </ul> -<p>The order in which individual pointers appear within a motion event is +<p>The order in which individual pointers appear within a motion event is undefined. Thus the index of a pointer can change from one event to the next, but the pointer ID of a pointer is guaranteed to remain constant as long as the pointer remains active. Use the {@link @@ -91,7 +91,7 @@ the pointer index for a given pointer ID in that motion event. For example:</p> <pre>private int mActivePointerId; - + public boolean onTouchEvent(MotionEvent event) { .... // Get the pointer ID @@ -99,7 +99,7 @@ public boolean onTouchEvent(MotionEvent event) { // ... Many touch events later... - // Use the pointer ID to find the index of the active pointer + // Use the pointer ID to find the index of the active pointer // and fetch its position int pointerIndex = event.findPointerIndex(mActivePointerId); // Get the pointer's current position @@ -109,25 +109,25 @@ public boolean onTouchEvent(MotionEvent event) { <h2 id="action">Get a MotionEvent's Action</h2> -<p>You should always use the method -{@link android.view.MotionEvent#getActionMasked getActionMasked()} (or better yet, the compatability version -{@link android.support.v4.view.MotionEventCompat#getActionMasked MotionEventCompat.getActionMasked()}) to retrieve +<p>You should always use the method +{@link android.view.MotionEvent#getActionMasked getActionMasked()} (or better yet, the compatability version +{@link android.support.v4.view.MotionEventCompat#getActionMasked MotionEventCompat.getActionMasked()}) to retrieve the action of a -{@link android.view.MotionEvent}. Unlike the older {@link android.view.MotionEvent#getAction getAction()} -method, {@link android.support.v4.view.MotionEventCompat#getActionMasked getActionMasked()} is designed to work with -multiple pointers. It returns the masked action -being performed, without including the pointer index bits. You can then use -{@link android.support.v4.view.MotionEventCompat#getActionIndex getActionIndex()} to return the index of +{@link android.view.MotionEvent}. Unlike the older {@link android.view.MotionEvent#getAction getAction()} +method, {@link android.support.v4.view.MotionEventCompat#getActionMasked getActionMasked()} is designed to work with +multiple pointers. It returns the masked action +being performed, without including the pointer index bits. You can then use +{@link android.support.v4.view.MotionEventCompat#getActionIndex getActionIndex()} to return the index of the pointer associated with the action. This is illustrated in the snippet below.</p> -<p class="note"><strong>Note:</strong> This example uses the +<p class="note"><strong>Note:</strong> This example uses the {@link android.support.v4.view.MotionEventCompat} -class. This class is in the +class. This class is in the <a href="{@docRoot}tools/support-library/index.html">Support Library</a>. You should use {@link android.support.v4.view.MotionEventCompat} to provide the best support for a wide range of -platforms. Note that {@link android.support.v4.view.MotionEventCompat} is <em>not</em> a -replacement for the {@link android.view.MotionEvent} class. Rather, it provides static utility -methods to which you pass your {@link android.view.MotionEvent} object in order to receive +platforms. Note that {@link android.support.v4.view.MotionEventCompat} is <em>not</em> a +replacement for the {@link android.view.MotionEvent} class. Rather, it provides static utility +methods to which you pass your {@link android.view.MotionEvent} object in order to receive the desired action associated with that event.</p> <pre>int action = MotionEventCompat.getActionMasked(event); @@ -137,17 +137,17 @@ int xPos = -1; int yPos = -1; Log.d(DEBUG_TAG,"The action is " + actionToString(action)); - + if (event.getPointerCount() > 1) { - Log.d(DEBUG_TAG,"Multitouch event"); - // The coordinates of the current screen contact, relative to - // the responding View or Activity. + Log.d(DEBUG_TAG,"Multitouch event"); + // The coordinates of the current screen contact, relative to + // the responding View or Activity. xPos = (int)MotionEventCompat.getX(event, index); yPos = (int)MotionEventCompat.getY(event, index); } else { // Single touch event - Log.d(DEBUG_TAG,"Single touch event"); + Log.d(DEBUG_TAG,"Single touch event"); xPos = (int)MotionEventCompat.getX(event, index); yPos = (int)MotionEventCompat.getY(event, index); } @@ -156,7 +156,7 @@ if (event.getPointerCount() > 1) { // Given an action int, returns a string description public static String actionToString(int action) { switch (action) { - + case MotionEvent.ACTION_DOWN: return "Down"; case MotionEvent.ACTION_MOVE: return "Move"; case MotionEvent.ACTION_POINTER_DOWN: return "Pointer Down"; @@ -168,7 +168,7 @@ public static String actionToString(int action) { return ""; }</pre> - + <p>For more discussion of multi-touch and some examples, see the lesson <a href="scale.html">Dragging and Scaling</a>. diff --git a/docs/html/training/gestures/scale.jd b/docs/html/training/gestures/scale.jd index f2e4eb82d122..d4aa91651db7 100644 --- a/docs/html/training/gestures/scale.jd +++ b/docs/html/training/gestures/scale.jd @@ -44,13 +44,13 @@ class="button">Download the sample</a> <p>This lesson describes how to use touch gestures to drag and scale on-screen objects, using {@link android.view.View#onTouchEvent onTouchEvent()} to intercept -touch events. +touch events. </p> <h2 id="drag">Drag an Object</h2> -<p class="note">If you are targeting Android 3.0 or higher, you can use the built-in drag-and-drop event -listeners with {@link android.view.View.OnDragListener}, as described in +<p class="note">If you are targeting Android 3.0 or higher, you can use the built-in drag-and-drop event +listeners with {@link android.view.View.OnDragListener}, as described in <a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a>. <p>A common operation for a touch gesture is to use it to drag an object across @@ -66,14 +66,14 @@ the touch screen and lifts the first finger. If your app is just tracking individual pointers, it will regard the second pointer as the default and move the image to that location.</li> -<li>To prevent this from happening, your app needs to distinguish between the -original pointer and any follow-on pointers. To do this, it tracks the -{@link android.view.MotionEvent#ACTION_POINTER_DOWN} and -{@link android.view.MotionEvent#ACTION_POINTER_UP} events described in -<a href="multi.html">Handling Multi-Touch Gestures</a>. -{@link android.view.MotionEvent#ACTION_POINTER_DOWN} and -{@link android.view.MotionEvent#ACTION_POINTER_UP} are -passed to the {@link android.view.View#onTouchEvent onTouchEvent()} callback +<li>To prevent this from happening, your app needs to distinguish between the +original pointer and any follow-on pointers. To do this, it tracks the +{@link android.view.MotionEvent#ACTION_POINTER_DOWN} and +{@link android.view.MotionEvent#ACTION_POINTER_UP} events described in +<a href="multi.html">Handling Multi-Touch Gestures</a>. +{@link android.view.MotionEvent#ACTION_POINTER_DOWN} and +{@link android.view.MotionEvent#ACTION_POINTER_UP} are +passed to the {@link android.view.View#onTouchEvent onTouchEvent()} callback whenever a secondary pointer goes down or up. </li> @@ -90,16 +90,16 @@ calculate the distance to move using data from the correct pointer.</li> <p>The following snippet enables a user to drag an object around on the screen. It records the initial position of the active pointer, calculates the distance the pointer traveled, and moves the object to the new position. It correctly manages the possibility of additional pointers, as described -above.</p> +above.</p> -<p>Notice that the snippet uses the {@link android.view.MotionEvent#getActionMasked getActionMasked()} method. -You should always use this method (or better yet, the compatability version -{@link android.support.v4.view.MotionEventCompat#getActionMasked MotionEventCompat.getActionMasked()}) +<p>Notice that the snippet uses the {@link android.view.MotionEvent#getActionMasked getActionMasked()} method. +You should always use this method (or better yet, the compatability version +{@link android.support.v4.view.MotionEventCompat#getActionMasked MotionEventCompat.getActionMasked()}) to retrieve the action of a -{@link android.view.MotionEvent}. Unlike the older -{@link android.view.MotionEvent#getAction getAction()} -method, {@link android.support.v4.view.MotionEventCompat#getActionMasked getActionMasked()} -is designed to work with multiple pointers. It returns the masked action +{@link android.view.MotionEvent}. Unlike the older +{@link android.view.MotionEvent#getAction getAction()} +method, {@link android.support.v4.view.MotionEventCompat#getActionMasked getActionMasked()} +is designed to work with multiple pointers. It returns the masked action being performed, without including the pointer index bits.</p> <pre>// The ‘active pointer’ is the one currently moving our object. @@ -109,15 +109,15 @@ private int mActivePointerId = INVALID_POINTER_ID; public boolean onTouchEvent(MotionEvent ev) { // Let the ScaleGestureDetector inspect all events. mScaleDetector.onTouchEvent(ev); - - final int action = MotionEventCompat.getActionMasked(ev); - - switch (action) { + + final int action = MotionEventCompat.getActionMasked(ev); + + switch (action) { case MotionEvent.ACTION_DOWN: { - final int pointerIndex = MotionEventCompat.getActionIndex(ev); - final float x = MotionEventCompat.getX(ev, pointerIndex); - final float y = MotionEventCompat.getY(ev, pointerIndex); - + final int pointerIndex = MotionEventCompat.getActionIndex(ev); + final float x = MotionEventCompat.getX(ev, pointerIndex); + final float y = MotionEventCompat.getY(ev, pointerIndex); + // Remember where we started (for dragging) mLastTouchX = x; mLastTouchY = y; @@ -125,15 +125,15 @@ public boolean onTouchEvent(MotionEvent ev) { mActivePointerId = MotionEventCompat.getPointerId(ev, 0); break; } - + case MotionEvent.ACTION_MOVE: { // Find the index of the active pointer and fetch its position - final int pointerIndex = - MotionEventCompat.findPointerIndex(ev, mActivePointerId); - + final int pointerIndex = + MotionEventCompat.findPointerIndex(ev, mActivePointerId); + final float x = MotionEventCompat.getX(ev, pointerIndex); final float y = MotionEventCompat.getY(ev, pointerIndex); - + // Calculate the distance moved final float dx = x - mLastTouchX; final float dy = y - mLastTouchY; @@ -149,62 +149,62 @@ public boolean onTouchEvent(MotionEvent ev) { break; } - + case MotionEvent.ACTION_UP: { mActivePointerId = INVALID_POINTER_ID; break; } - + case MotionEvent.ACTION_CANCEL: { mActivePointerId = INVALID_POINTER_ID; break; } - + case MotionEvent.ACTION_POINTER_UP: { - - final int pointerIndex = MotionEventCompat.getActionIndex(ev); - final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); + + final int pointerIndex = MotionEventCompat.getActionIndex(ev); + final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); if (pointerId == mActivePointerId) { // This was our active pointer going up. Choose a new // active pointer and adjust accordingly. final int newPointerIndex = pointerIndex == 0 ? 1 : 0; - mLastTouchX = MotionEventCompat.getX(ev, newPointerIndex); - mLastTouchY = MotionEventCompat.getY(ev, newPointerIndex); + mLastTouchX = MotionEventCompat.getX(ev, newPointerIndex); + mLastTouchY = MotionEventCompat.getY(ev, newPointerIndex); mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex); } break; } - } + } return true; }</pre> <h2 id="pan">Drag to Pan</h2> -<p>The previous section showed an example of dragging an object around the screen. Another -common scenario is <em>panning</em>, which is when a user's dragging motion causes scrolling -in both the x and y axes. The above snippet directly intercepted the {@link android.view.MotionEvent} -actions to implement dragging. The snippet in this section takes advantage of the platform's -built-in support for common gestures. It overrides -{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} in +<p>The previous section showed an example of dragging an object around the screen. Another +common scenario is <em>panning</em>, which is when a user's dragging motion causes scrolling +in both the x and y axes. The above snippet directly intercepted the {@link android.view.MotionEvent} +actions to implement dragging. The snippet in this section takes advantage of the platform's +built-in support for common gestures. It overrides +{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} in {@link android.view.GestureDetector.SimpleOnGestureListener}.</p> -<p>To provide a little more context, {@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} -is called when a user is dragging his finger to pan the content. -{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} is only called when -a finger is down; as soon as the finger is lifted from the screen, the gesture either ends, -or a fling gesture is started (if the finger was moving with some speed just before it was lifted). +<p>To provide a little more context, {@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} +is called when a user is dragging his finger to pan the content. +{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} is only called when +a finger is down; as soon as the finger is lifted from the screen, the gesture either ends, +or a fling gesture is started (if the finger was moving with some speed just before it was lifted). For more discussion of scrolling vs. flinging, see <a href="scroll.html">Animating a Scroll Gesture</a>.</p> <p>Here is the snippet for {@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()}: -<pre>// The current viewport. This rectangle represents the currently visible -// chart domain and range. -private RectF mCurrentViewport = +<pre>// The current viewport. This rectangle represents the currently visible +// chart domain and range. +private RectF mCurrentViewport = new RectF(AXIS_X_MIN, AXIS_Y_MIN, AXIS_X_MAX, AXIS_Y_MAX); -// The current destination rectangle (in pixel coordinates) into which the +// The current destination rectangle (in pixel coordinates) into which the // chart data should be drawn. private Rect mContentRect; @@ -213,18 +213,18 @@ private final GestureDetector.SimpleOnGestureListener mGestureListener ... @Override -public boolean onScroll(MotionEvent e1, MotionEvent e2, +public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // Scrolling uses math based on the viewport (as opposed to math using pixels). - + // Pixel offset is the offset in screen pixels, while viewport offset is the - // offset within the current viewport. - float viewportOffsetX = distanceX * mCurrentViewport.width() + // offset within the current viewport. + float viewportOffsetX = distanceX * mCurrentViewport.width() / mContentRect.width(); - float viewportOffsetY = -distanceY * mCurrentViewport.height() + float viewportOffsetY = -distanceY * mCurrentViewport.height() / mContentRect.height(); ... - // Updates the viewport, refreshes the display. + // Updates the viewport, refreshes the display. setViewportBottomLeft( mCurrentViewport.left + viewportOffsetX, mCurrentViewport.bottom + viewportOffsetY); @@ -232,20 +232,20 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, return true; }</pre> -<p>The implementation of {@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} +<p>The implementation of {@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} scrolls the viewport in response to the touch gesture:</p> <pre> /** * Sets the current viewport (defined by mCurrentViewport) to the given - * X and Y positions. Note that the Y value represents the topmost pixel position, + * X and Y positions. Note that the Y value represents the topmost pixel position, * and thus the bottom of the mCurrentViewport rectangle. */ private void setViewportBottomLeft(float x, float y) { /* - * Constrains within the scroll range. The scroll range is simply the viewport - * extremes (AXIS_X_MAX, etc.) minus the viewport size. For example, if the - * extremes were 0 and 10, and the viewport size was 2, the scroll range would + * Constrains within the scroll range. The scroll range is simply the viewport + * extremes (AXIS_X_MAX, etc.) minus the viewport size. For example, if the + * extremes were 0 and 10, and the viewport size was 2, the scroll range would * be 0 to 8. */ @@ -270,11 +270,11 @@ provides {@link android.view.ScaleGestureDetector}. {@link android.view.GestureDetector} and {@link android.view.ScaleGestureDetector} can be used together when you want a view to recognize additional gestures.</p> -<p>To report detected gesture events, gesture detectors use listener objects -passed to their constructors. {@link android.view.ScaleGestureDetector} uses -{@link android.view.ScaleGestureDetector.OnScaleGestureListener}. -Android provides -{@link android.view.ScaleGestureDetector.SimpleOnScaleGestureListener} +<p>To report detected gesture events, gesture detectors use listener objects +passed to their constructors. {@link android.view.ScaleGestureDetector} uses +{@link android.view.ScaleGestureDetector.OnScaleGestureListener}. +Android provides +{@link android.view.ScaleGestureDetector.SimpleOnScaleGestureListener} as a helper class that you can extend if you don’t care about all of the reported events.</p> @@ -311,7 +311,7 @@ public void onDraw(Canvas canvas) { canvas.restore(); } -private class ScaleListener +private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { @@ -329,14 +329,14 @@ private class ScaleListener <h3>More complex scaling example</h3> -<p>Here is a more complex example from the {@code InteractiveChart} sample provided with this class. +<p>Here is a more complex example from the {@code InteractiveChart} sample provided with this class. The {@code InteractiveChart} sample supports both scrolling (panning) and scaling with multiple fingers, -using the {@link android.view.ScaleGestureDetector} "span" -({@link android.view.ScaleGestureDetector#getCurrentSpanX getCurrentSpanX/Y}) and +using the {@link android.view.ScaleGestureDetector} "span" +({@link android.view.ScaleGestureDetector#getCurrentSpanX getCurrentSpanX/Y}) and "focus" ({@link android.view.ScaleGestureDetector#getFocusX getFocusX/Y}) features:</p> <pre>@Override -private RectF mCurrentViewport = +private RectF mCurrentViewport = new RectF(AXIS_X_MIN, AXIS_Y_MIN, AXIS_X_MAX, AXIS_Y_MAX); private Rect mContentRect; private ScaleGestureDetector mScaleGestureDetector; @@ -399,7 +399,7 @@ private final ScaleGestureDetector.OnScaleGestureListener mScaleGestureListener 0, 0); mCurrentViewport.right = mCurrentViewport.left + newWidth; - mCurrentViewport.bottom = mCurrentViewport.top + newHeight; + mCurrentViewport.bottom = mCurrentViewport.top + newHeight; ... // Invalidates the View to update the display. ViewCompat.postInvalidateOnAnimation(InteractiveLineGraphView.this); diff --git a/docs/html/training/gestures/scroll.jd b/docs/html/training/gestures/scroll.jd index 4b82d6966e5c..374ceff55f5d 100644 --- a/docs/html/training/gestures/scroll.jd +++ b/docs/html/training/gestures/scroll.jd @@ -41,12 +41,12 @@ class="button">Download the sample</a> </div> </div> -<p>In Android, scrolling is typically achieved by using the +<p>In Android, scrolling is typically achieved by using the {@link android.widget.ScrollView} -class. Any standard layout that might extend beyond the bounds of its container should be -nested in a {@link android.widget.ScrollView} to provide a scrollable view that's -managed by the framework. Implementing a custom scroller should only be -necessary for special scenarios. This lesson describes such a scenario: displaying +class. Any standard layout that might extend beyond the bounds of its container should be +nested in a {@link android.widget.ScrollView} to provide a scrollable view that's +managed by the framework. Implementing a custom scroller should only be +necessary for special scenarios. This lesson describes such a scenario: displaying a scrolling effect in response to touch gestures using <em>scrollers</em>. @@ -54,8 +54,8 @@ a scrolling effect in response to touch gestures using <em>scrollers</em>. android.widget.OverScroller}) to collect the data you need to produce a scrolling animation in response to a touch event. They are similar, but {@link android.widget.OverScroller} -includes methods for indicating to users that they've reached the content edges -after a pan or fling gesture. The {@code InteractiveChart} sample +includes methods for indicating to users that they've reached the content edges +after a pan or fling gesture. The {@code InteractiveChart} sample uses the {@link android.widget.EdgeEffect} class (actually the {@link android.support.v4.widget.EdgeEffectCompat} class) to display a "glow" effect when users reach the content edges.</p> @@ -68,7 +68,7 @@ compatibility with older devices. <br /> Also note that you generally only need to use scrollers when implementing scrolling yourself. {@link android.widget.ScrollView} and -{@link android.widget.HorizontalScrollView} do all of this for you if you nest your +{@link android.widget.HorizontalScrollView} do all of this for you if you nest your layout within them. </p> @@ -86,71 +86,71 @@ scrolling animation look smooth.</p> <p>"Scrolling" is a word that can take on different meanings in Android, depending on the context.</p> -<p><strong>Scrolling</strong> is the general process of moving the viewport (that is, the 'window' -of content you're looking at). When scrolling is in both the x and y axes, it's called -<em>panning</em>. The sample application provided with this class, {@code InteractiveChart}, illustrates +<p><strong>Scrolling</strong> is the general process of moving the viewport (that is, the 'window' +of content you're looking at). When scrolling is in both the x and y axes, it's called +<em>panning</em>. The sample application provided with this class, {@code InteractiveChart}, illustrates two different types of scrolling, dragging and flinging:</p> <ul> - <li><strong>Dragging</strong> is the type of scrolling that occurs when a user drags her -finger across the touch screen. Simple dragging is often implemented by overriding -{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} in -{@link android.view.GestureDetector.OnGestureListener}. For more discussion of dragging, see + <li><strong>Dragging</strong> is the type of scrolling that occurs when a user drags her +finger across the touch screen. Simple dragging is often implemented by overriding +{@link android.view.GestureDetector.OnGestureListener#onScroll onScroll()} in +{@link android.view.GestureDetector.OnGestureListener}. For more discussion of dragging, see <a href="scale.html">Dragging and Scaling</a>.</li> - <li><strong>Flinging</strong> is the type of scrolling that occurs when a user -drags and lifts her finger quickly. After the user lifts her finger, you generally -want to keep scrolling (moving the viewport), but decelerate until the viewport stops moving. -Flinging can be implemented by overriding -{@link android.view.GestureDetector.OnGestureListener#onFling onFling()} -in {@link android.view.GestureDetector.OnGestureListener}, and by using -a scroller object. This is the use + <li><strong>Flinging</strong> is the type of scrolling that occurs when a user +drags and lifts her finger quickly. After the user lifts her finger, you generally +want to keep scrolling (moving the viewport), but decelerate until the viewport stops moving. +Flinging can be implemented by overriding +{@link android.view.GestureDetector.OnGestureListener#onFling onFling()} +in {@link android.view.GestureDetector.OnGestureListener}, and by using +a scroller object. This is the use case that is the topic of this lesson.</li> </ul> -<p>It's common to use scroller objects +<p>It's common to use scroller objects in conjunction with a fling gesture, but they can be used in pretty much any context where you want the UI to display -scrolling in response to a touch event. For example, you could override -{@link android.view.View#onTouchEvent onTouchEvent()} to process touch -events directly, and produce a scrolling effect or a "snapping to page" animation +scrolling in response to a touch event. For example, you could override +{@link android.view.View#onTouchEvent onTouchEvent()} to process touch +events directly, and produce a scrolling effect or a "snapping to page" animation in response to those touch events.</p> -<h2 id="#scroll">Implement Touch-Based Scrolling</h2> +<h2 id="#scroll">Implement Touch-Based Scrolling</h2> <p>This section describes how to use a scroller. -The snippet shown below comes from the {@code InteractiveChart} sample +The snippet shown below comes from the {@code InteractiveChart} sample provided with this class. -It uses a -{@link android.view.GestureDetector}, and overrides the -{@link android.view.GestureDetector.SimpleOnGestureListener} method +It uses a +{@link android.view.GestureDetector}, and overrides the +{@link android.view.GestureDetector.SimpleOnGestureListener} method {@link android.view.GestureDetector.OnGestureListener#onFling onFling()}. It uses {@link android.widget.OverScroller} to track the fling gesture. -If the user reaches the content edges +If the user reaches the content edges after the fling gesture, the app displays a "glow" effect. </p> -<p class="note"><strong>Note:</strong> The {@code InteractiveChart} sample app displays a -chart that you can zoom, pan, scroll, and so on. In the following snippet, -{@code mContentRect} represents the rectangle coordinates within the view that the chart -will be drawn into. At any given time, a subset of the total chart domain and range are drawn -into this rectangular area. -{@code mCurrentViewport} represents the portion of the chart that is currently -visible in the screen. Because pixel offsets are generally treated as integers, -{@code mContentRect} is of the type {@link android.graphics.Rect}. Because the -graph domain and range are decimal/float values, {@code mCurrentViewport} is of +<p class="note"><strong>Note:</strong> The {@code InteractiveChart} sample app displays a +chart that you can zoom, pan, scroll, and so on. In the following snippet, +{@code mContentRect} represents the rectangle coordinates within the view that the chart +will be drawn into. At any given time, a subset of the total chart domain and range are drawn +into this rectangular area. +{@code mCurrentViewport} represents the portion of the chart that is currently +visible in the screen. Because pixel offsets are generally treated as integers, +{@code mContentRect} is of the type {@link android.graphics.Rect}. Because the +graph domain and range are decimal/float values, {@code mCurrentViewport} is of the type {@link android.graphics.RectF}.</p> -<p>The first part of the snippet shows the implementation of +<p>The first part of the snippet shows the implementation of {@link android.view.GestureDetector.OnGestureListener#onFling onFling()}:</p> -<pre>// The current viewport. This rectangle represents the currently visible +<pre>// The current viewport. This rectangle represents the currently visible // chart domain and range. The viewport is the part of the app that the // user manipulates via touch gestures. -private RectF mCurrentViewport = +private RectF mCurrentViewport = new RectF(AXIS_X_MIN, AXIS_Y_MIN, AXIS_X_MAX, AXIS_Y_MAX); -// The current destination rectangle (in pixel coordinates) into which the +// The current destination rectangle (in pixel coordinates) into which the // chart data should be drawn. private Rect mContentRect; @@ -171,7 +171,7 @@ private final GestureDetector.SimpleOnGestureListener mGestureListener } ... @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { fling((int) -velocityX, (int) -velocityY); return true; @@ -184,10 +184,10 @@ private void fling(int velocityX, int velocityY) { // Flings use math in pixels (as opposed to math based on the viewport). Point surfaceSize = computeScrollSurfaceSize(); mScrollerStartViewport.set(mCurrentViewport); - int startX = (int) (surfaceSize.x * (mScrollerStartViewport.left - + int startX = (int) (surfaceSize.x * (mScrollerStartViewport.left - AXIS_X_MIN) / ( AXIS_X_MAX - AXIS_X_MIN)); - int startY = (int) (surfaceSize.y * (AXIS_Y_MAX - + int startY = (int) (surfaceSize.y * (AXIS_Y_MAX - mScrollerStartViewport.bottom) / ( AXIS_Y_MAX - AXIS_Y_MIN)); // Before flinging, aborts the current animation. @@ -200,10 +200,10 @@ private void fling(int velocityX, int velocityY) { velocityX, velocityY, /* - * Minimum and maximum scroll positions. The minimum scroll - * position is generally zero and the maximum scroll position - * is generally the content size less the screen size. So if the - * content width is 1000 pixels and the screen width is 200 + * Minimum and maximum scroll positions. The minimum scroll + * position is generally zero and the maximum scroll position + * is generally the content size less the screen size. So if the + * content width is 1000 pixels and the screen width is 200 * pixels, the maximum scroll offset should be 800 pixels. */ 0, surfaceSize.x - mContentRect.width(), @@ -216,21 +216,21 @@ private void fling(int velocityX, int velocityY) { ViewCompat.postInvalidateOnAnimation(this); }</pre> -<p>When {@link android.view.GestureDetector.OnGestureListener#onFling onFling()} calls -{@link android.support.v4.view.ViewCompat#postInvalidateOnAnimation postInvalidateOnAnimation()}, -it triggers -{@link android.view.View#computeScroll computeScroll()} to update the values for x and y. +<p>When {@link android.view.GestureDetector.OnGestureListener#onFling onFling()} calls +{@link android.support.v4.view.ViewCompat#postInvalidateOnAnimation postInvalidateOnAnimation()}, +it triggers +{@link android.view.View#computeScroll computeScroll()} to update the values for x and y. This is typically be done when a view child is animating a scroll using a scroller object, as in this example. </p> -<p>Most views pass the scroller object's x and y position directly to -{@link android.view.View#scrollTo scrollTo()}. -The following implementation of {@link android.view.View#computeScroll computeScroll()} -takes a different approach—it calls -{@link android.widget.OverScroller#computeScrollOffset computeScrollOffset()} to get the current -location of x and y. When the criteria for displaying an overscroll "glow" edge effect are met -(the display is zoomed in, x or y is out of bounds, and the app isn't already showing an overscroll), -the code sets up the overscroll glow effect and calls -{@link android.support.v4.view.ViewCompat#postInvalidateOnAnimation postInvalidateOnAnimation()} +<p>Most views pass the scroller object's x and y position directly to +{@link android.view.View#scrollTo scrollTo()}. +The following implementation of {@link android.view.View#computeScroll computeScroll()} +takes a different approach—it calls +{@link android.widget.OverScroller#computeScrollOffset computeScrollOffset()} to get the current +location of x and y. When the criteria for displaying an overscroll "glow" edge effect are met +(the display is zoomed in, x or y is out of bounds, and the app isn't already showing an overscroll), +the code sets up the overscroll glow effect and calls +{@link android.support.v4.view.ViewCompat#postInvalidateOnAnimation postInvalidateOnAnimation()} to trigger an invalidate on the view:</p> <pre>// Edge effect / overscroll tracking objects. @@ -250,7 +250,7 @@ public void computeScroll() { boolean needsInvalidate = false; - // The scroller isn't finished, meaning a fling or programmatic pan + // The scroller isn't finished, meaning a fling or programmatic pan // operation is currently active. if (mScroller.computeScrollOffset()) { Point surfaceSize = computeScrollSurfaceSize(); @@ -262,7 +262,7 @@ public void computeScroll() { boolean canScrollY = (mCurrentViewport.top > AXIS_Y_MIN || mCurrentViewport.bottom < AXIS_Y_MAX); - /* + /* * If you are zoomed in and currX or currY is * outside of bounds and you're not already * showing overscroll, then render the overscroll @@ -272,7 +272,7 @@ public void computeScroll() { && currX < 0 && mEdgeEffectLeft.isFinished() && !mEdgeEffectLeftActive) { - mEdgeEffectLeft.onAbsorb((int) + mEdgeEffectLeft.onAbsorb((int) OverScrollerCompat.getCurrVelocity(mScroller)); mEdgeEffectLeftActive = true; needsInvalidate = true; @@ -280,7 +280,7 @@ public void computeScroll() { && currX > (surfaceSize.x - mContentRect.width()) && mEdgeEffectRight.isFinished() && !mEdgeEffectRightActive) { - mEdgeEffectRight.onAbsorb((int) + mEdgeEffectRight.onAbsorb((int) OverScrollerCompat.getCurrVelocity(mScroller)); mEdgeEffectRightActive = true; needsInvalidate = true; @@ -290,7 +290,7 @@ public void computeScroll() { && currY < 0 && mEdgeEffectTop.isFinished() && !mEdgeEffectTopActive) { - mEdgeEffectTop.onAbsorb((int) + mEdgeEffectTop.onAbsorb((int) OverScrollerCompat.getCurrVelocity(mScroller)); mEdgeEffectTopActive = true; needsInvalidate = true; @@ -298,7 +298,7 @@ public void computeScroll() { && currY > (surfaceSize.y - mContentRect.height()) && mEdgeEffectBottom.isFinished() && !mEdgeEffectBottomActive) { - mEdgeEffectBottom.onAbsorb((int) + mEdgeEffectBottom.onAbsorb((int) OverScrollerCompat.getCurrVelocity(mScroller)); mEdgeEffectBottomActive = true; needsInvalidate = true; @@ -316,14 +316,14 @@ private PointF mZoomFocalPoint = new PointF(); // If a zoom is in progress (either programmatically or via double // touch), performs the zoom. if (mZoomer.computeZoom()) { - float newWidth = (1f - mZoomer.getCurrZoom()) * + float newWidth = (1f - mZoomer.getCurrZoom()) * mScrollerStartViewport.width(); - float newHeight = (1f - mZoomer.getCurrZoom()) * + float newHeight = (1f - mZoomer.getCurrZoom()) * mScrollerStartViewport.height(); - float pointWithinViewportX = (mZoomFocalPoint.x - + float pointWithinViewportX = (mZoomFocalPoint.x - mScrollerStartViewport.left) / mScrollerStartViewport.width(); - float pointWithinViewportY = (mZoomFocalPoint.y - + float pointWithinViewportY = (mZoomFocalPoint.y - mScrollerStartViewport.top) / mScrollerStartViewport.height(); mCurrentViewport.set( @@ -339,9 +339,9 @@ if (needsInvalidate) { } </pre> -<p>This is the {@code computeScrollSurfaceSize()} method that's called in the above snippet. It -computes the current scrollable surface size, in pixels. For example, if the entire chart area is visible, -this is simply the current size of {@code mContentRect}. If the chart is zoomed in 200% in both directions, +<p>This is the {@code computeScrollSurfaceSize()} method that's called in the above snippet. It +computes the current scrollable surface size, in pixels. For example, if the entire chart area is visible, +this is simply the current size of {@code mContentRect}. If the chart is zoomed in 200% in both directions, the returned size will be twice as large horizontally and vertically.</p> <pre>private Point computeScrollSurfaceSize() { @@ -352,8 +352,8 @@ the returned size will be twice as large horizontally and vertically.</p> / mCurrentViewport.height())); }</pre> -<p>For another example of scroller usage, see the -<a href="http://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/view/ViewPager.java">source code</a> for the -{@link android.support.v4.view.ViewPager} class. It scrolls in response to flings, +<p>For another example of scroller usage, see the +<a href="http://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/view/ViewPager.java">source code</a> for the +{@link android.support.v4.view.ViewPager} class. It scrolls in response to flings, and uses scrolling to implement the "snapping to page" animation.</p> diff --git a/docs/html/training/gestures/viewgroup.jd b/docs/html/training/gestures/viewgroup.jd index 5b32300b99b0..7b5b24e0285d 100644 --- a/docs/html/training/gestures/viewgroup.jd +++ b/docs/html/training/gestures/viewgroup.jd @@ -52,38 +52,38 @@ onInterceptTouchEvent()} method.</p> <h2 id="intercept">Intercept Touch Events in a ViewGroup</h2> -<p>The {@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} -method is called whenever a touch event is detected on the surface of a -{@link android.view.ViewGroup}, including on the surface of its children. If -{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} -returns {@code true}, the {@link android.view.MotionEvent} is intercepted, -meaning it will be not be passed on to the child, but rather to the +<p>The {@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} +method is called whenever a touch event is detected on the surface of a +{@link android.view.ViewGroup}, including on the surface of its children. If +{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} +returns {@code true}, the {@link android.view.MotionEvent} is intercepted, +meaning it will be not be passed on to the child, but rather to the {@link android.view.View#onTouchEvent onTouchEvent()} method of the parent.</p> -<p>The {@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} -method gives a parent the chance to see any touch event before its children do. -If you return {@code true} from -{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()}, -the child view that was previously handling touch events -receives an {@link android.view.MotionEvent#ACTION_CANCEL}, and the events from that -point forward are sent to the parent's -{@link android.view.View#onTouchEvent onTouchEvent()} method for the usual handling. -{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} can also -return {@code false} and simply spy on events as they travel down the view hierarchy +<p>The {@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} +method gives a parent the chance to see any touch event before its children do. +If you return {@code true} from +{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()}, +the child view that was previously handling touch events +receives an {@link android.view.MotionEvent#ACTION_CANCEL}, and the events from that +point forward are sent to the parent's +{@link android.view.View#onTouchEvent onTouchEvent()} method for the usual handling. +{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} can also +return {@code false} and simply spy on events as they travel down the view hierarchy to their usual targets, which will handle the events with their own {@link android.view.View#onTouchEvent onTouchEvent()}. -<p>In the following snippet, the class {@code MyViewGroup} extends -{@link android.view.ViewGroup}. -{@code MyViewGroup} contains multiple child views. If you drag your finger across -a child view horizontally, the child view should no longer get touch events, and -{@code MyViewGroup} should handle touch events by scrolling its contents. However, -if you press buttons in the child view, or scroll the child view vertically, -the parent shouldn't intercept those touch events, because the child is the -intended target. In those cases, +<p>In the following snippet, the class {@code MyViewGroup} extends +{@link android.view.ViewGroup}. +{@code MyViewGroup} contains multiple child views. If you drag your finger across +a child view horizontally, the child view should no longer get touch events, and +{@code MyViewGroup} should handle touch events by scrolling its contents. However, +if you press buttons in the child view, or scroll the child view vertically, +the parent shouldn't intercept those touch events, because the child is the +intended target. In those cases, {@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()} should -return {@code false}, and {@code MyViewGroup}'s +return {@code false}, and {@code MyViewGroup}'s {@link android.view.View#onTouchEvent onTouchEvent()} won't be called.</p> <pre>public class MyViewGroup extends ViewGroup { @@ -118,20 +118,20 @@ return {@code false}, and {@code MyViewGroup}'s switch (action) { case MotionEvent.ACTION_MOVE: { if (mIsScrolling) { - // We're currently scrolling, so yes, intercept the + // We're currently scrolling, so yes, intercept the // touch event! return true; } - // If the user has dragged her finger horizontally more than + // If the user has dragged her finger horizontally more than // the touch slop, start the scroll // left as an exercise for the reader - final int xDiff = calculateDistanceX(ev); + final int xDiff = calculateDistanceX(ev); - // Touch slop should be calculated using ViewConfiguration + // Touch slop should be calculated using ViewConfiguration // constants. - if (xDiff > mTouchSlop) { + if (xDiff > mTouchSlop) { // Start scrolling! mIsScrolling = true; return true; @@ -141,26 +141,26 @@ return {@code false}, and {@code MyViewGroup}'s ... } - // In general, we don't want to intercept touch events. They should be + // In general, we don't want to intercept touch events. They should be // handled by the child view. return false; } @Override public boolean onTouchEvent(MotionEvent ev) { - // Here we actually handle the touch event (e.g. if the action is ACTION_MOVE, + // Here we actually handle the touch event (e.g. if the action is ACTION_MOVE, // scroll this container). - // This method will only be called if the touch event was intercepted in + // This method will only be called if the touch event was intercepted in // onInterceptTouchEvent ... } }</pre> -<p>Note that {@link android.view.ViewGroup} also provides a -{@link android.view.ViewGroup#requestDisallowInterceptTouchEvent requestDisallowInterceptTouchEvent()} method. -The {@link android.view.ViewGroup} calls this method when a child does not want the parent and its -ancestors to intercept touch events with -{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()}. +<p>Note that {@link android.view.ViewGroup} also provides a +{@link android.view.ViewGroup#requestDisallowInterceptTouchEvent requestDisallowInterceptTouchEvent()} method. +The {@link android.view.ViewGroup} calls this method when a child does not want the parent and its +ancestors to intercept touch events with +{@link android.view.ViewGroup#onInterceptTouchEvent onInterceptTouchEvent()}. </p> <h2 id="vc">Use ViewConfiguration Constants</h2> @@ -176,10 +176,10 @@ before the gesture is interpreted as scrolling. Touch slop is typically used to prevent accidental scrolling when the user is performing some other touch operation, such as touching on-screen elements.</p> -<p>Two other commonly used {@link android.view.ViewConfiguration} methods are -{@link android.view.ViewConfiguration#getScaledMinimumFlingVelocity getScaledMinimumFlingVelocity()} +<p>Two other commonly used {@link android.view.ViewConfiguration} methods are +{@link android.view.ViewConfiguration#getScaledMinimumFlingVelocity getScaledMinimumFlingVelocity()} and {@link android.view.ViewConfiguration#getScaledMaximumFlingVelocity getScaledMaximumFlingVelocity()}. -These methods return the minimum and maximum velocity (respectively) to initiate a fling, +These methods return the minimum and maximum velocity (respectively) to initiate a fling, as measured in pixels per second. For example:</p> <pre>ViewConfiguration vc = ViewConfiguration.get(view.getContext()); @@ -209,14 +209,14 @@ case MotionEvent.ACTION_UP: { <h2 id="delegate">Extend a Child View's Touchable Area</h2> -<p>Android provides the {@link android.view.TouchDelegate} class to make it possible -for a parent to extend the touchable area of a child view beyond the child's bounds. +<p>Android provides the {@link android.view.TouchDelegate} class to make it possible +for a parent to extend the touchable area of a child view beyond the child's bounds. This is useful when the child has to be small, but should have a larger touch region. You can also use this approach to shrink the child's touch region if need be.</p> -<p>In the following example, an {@link android.widget.ImageButton} is the -"delegate view" (that is, the child whose touch area the parent will extend). +<p>In the following example, an {@link android.widget.ImageButton} is the +"delegate view" (that is, the child whose touch area the parent will extend). Here is the layout file:</p> <pre> @@ -225,7 +225,7 @@ Here is the layout file:</p> android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > - + <ImageButton android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -245,9 +245,9 @@ Here is the layout file:</p> </ul> -In its capacity as touch delegate for the {@link android.widget.ImageButton} child view, the +In its capacity as touch delegate for the {@link android.widget.ImageButton} child view, the parent view will receive all touch events. If the touch event occurred within the child's hit -rectangle, the parent will pass the touch +rectangle, the parent will pass the touch event to the child for handling.</p> @@ -261,7 +261,7 @@ public class MainActivity extends Activity { setContentView(R.layout.activity_main); // Get the parent view View parentView = findViewById(R.id.parent_layout); - + parentView.post(new Runnable() { // Post in the parent's message queue to make sure the parent // lays out its children before you call getHitRect() @@ -275,29 +275,29 @@ public class MainActivity extends Activity { myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Toast.makeText(MainActivity.this, - "Touch occurred within ImageButton touch region.", + Toast.makeText(MainActivity.this, + "Touch occurred within ImageButton touch region.", Toast.LENGTH_SHORT).show(); } }); - + // The hit rectangle for the ImageButton myButton.getHitRect(delegateArea); - + // Extend the touch area of the ImageButton beyond its bounds // on the right and bottom. delegateArea.right += 100; delegateArea.bottom += 100; - + // Instantiate a TouchDelegate. - // "delegateArea" is the bounds in local coordinates of + // "delegateArea" is the bounds in local coordinates of // the containing view to be mapped to the delegate view. // "myButton" is the child view that should receive motion // events. - TouchDelegate touchDelegate = new TouchDelegate(delegateArea, + TouchDelegate touchDelegate = new TouchDelegate(delegateArea, myButton); - - // Sets the TouchDelegate on the parent view, such that touches + + // Sets the TouchDelegate on the parent view, such that touches // within the touch delegate bounds are routed to the child. if (View.class.isInstance(myButton.getParent())) { ((View) myButton.getParent()).setTouchDelegate(touchDelegate); diff --git a/docs/html/training/id-auth/authenticate.jd b/docs/html/training/id-auth/authenticate.jd index 65dbc3987bd3..bf32e8ed0488 100644 --- a/docs/html/training/id-auth/authenticate.jd +++ b/docs/html/training/id-auth/authenticate.jd @@ -129,7 +129,7 @@ private class OnTokenAcquired implements AccountManagerCallback<Bundle> { public void run(AccountManagerFuture<Bundle> result) { // Get the result of the operation from the AccountManagerFuture. Bundle bundle = result.getResult(); - + // The token is a named value in the bundle. The name of the value // is stored in the constant AccountManager.KEY_AUTHTOKEN. token = bundle.getString(AccountManager.KEY_AUTHTOKEN); diff --git a/docs/html/training/id-auth/custom_auth.jd b/docs/html/training/id-auth/custom_auth.jd index def9b51418df..3c106a97317f 100644 --- a/docs/html/training/id-auth/custom_auth.jd +++ b/docs/html/training/id-auth/custom_auth.jd @@ -81,7 +81,7 @@ a database that is only accessible to root. But on a rooted device, the credentials would be readable by anyone with {@code adb} access to the device.</p> <p>With this in mind, you shouldn't pass the user's actual -password to {@link android.accounts.AccountManager#addAccountExplicitly +password to {@link android.accounts.AccountManager#addAccountExplicitly AccountManager.addAccountExplicitly()}. Instead, you should store a cryptographically secure token that would be of limited use to an attacker. If your user credentials are protecting something valuable, you should carefully diff --git a/docs/html/training/id-auth/index.jd b/docs/html/training/id-auth/index.jd index f15ee295fa9c..45c6309648e9 100644 --- a/docs/html/training/id-auth/index.jd +++ b/docs/html/training/id-auth/index.jd @@ -15,7 +15,7 @@ startpage=true <li>Android 2.0 (API level 5) or higher</li> <li>Experience with <a href="{@docRoot}guide/components/services.html">Services</a></li> <li>Experience with <a href="http://oauth.net/2/">OAuth 2.0</a></li> -</ul> +</ul> <h2>You should also read</h2> <ul> diff --git a/docs/html/training/improving-layouts/optimizing-layout.jd b/docs/html/training/improving-layouts/optimizing-layout.jd index e0baedfaef64..2f9f32d92c60 100644 --- a/docs/html/training/improving-layouts/optimizing-layout.jd +++ b/docs/html/training/improving-layouts/optimizing-layout.jd @@ -145,7 +145,7 @@ href="http://tools.android.com/tips/lint-checks">rules</a> are:</p> <li>Deep layouts - Layouts with too much nesting are bad for performance. Consider using flatter layouts such as {@link android.widget.RelativeLayout} or {@link android.widget.GridLayout} to improve performance. The default maximum depth is 10.</li> </ul> -<p>Another benefit of Lint is that it is integrated into Android Studio. Lint automatically runs +<p>Another benefit of Lint is that it is integrated into Android Studio. Lint automatically runs whenever you compile your program. With Android Studio, you can also run lint inspections for a specific build variant, or for all build variants. </p> @@ -153,7 +153,7 @@ specific build variant, or for all build variants. </p> <strong>File>Settings>Project Settings</strong> option. The Inspection Configuration page appears with the supported inspections.</p> <p><img src="{@docRoot}images/tools/studio-inspections-config.png" alt="" /> </p> -<p class="img-caption"><strong>Figure 5.</strong> Inspection Configuration</p> +<p class="img-caption"><strong>Figure 5.</strong> Inspection Configuration</p> <p>Lint has the ability to automatically fix some issues, provide suggestions for others and jump directly to the offending code for review.</p> diff --git a/docs/html/training/in-app-billing/list-iab-products.jd b/docs/html/training/in-app-billing/list-iab-products.jd index c423fc134892..c8de8232afe4 100644 --- a/docs/html/training/in-app-billing/list-iab-products.jd +++ b/docs/html/training/in-app-billing/list-iab-products.jd @@ -36,7 +36,7 @@ next.link=purchase-iab-products.html <p>To add new in-app products to your product list:</p> <ol> -<li>Build a signed APK file for your In-app Billing application. To learn how to build and sign your APK, see <a href="{@docRoot}tools/publishing/preparing.html#publishing-build">Building Your Application for Release</a>. Make sure that you are using your final (not debug) certificate and private key to sign your application. +<li>Build a signed APK file for your In-app Billing application. To learn how to build and sign your APK, see <a href="{@docRoot}tools/publishing/preparing.html#publishing-build">Building Your Application for Release</a>. Make sure that you are using your final (not debug) certificate and private key to sign your application. </li> <li>In the Developer Console, open the application entry that you created earlier.</li> <li>Click on the APK tab then click on Upload new APK. Upload the signed APK file to the Developer Console. Don’t publish the app yet!</li> @@ -48,9 +48,9 @@ next.link=purchase-iab-products.html <h2 id="QueryDetails">Query Items Available for Purchase</h2> <p>You can query Google Play to programmatically retrieve details of the in-app products that are associated with your application (such as the product’s price, title, description, and type). This is useful, for example, when you want to display a listing of unowned items that are still available for purchase to users.</p> <p class="note"><strong>Note:</strong> When making the query, you will need to specify the product IDs for the products explicitly. You can manually find the product IDs from the Developer Console by opening the <strong>In-app Products</strong> tab for your application. The product IDs are listed under the column labeled <strong>Name/ID</strong>.</p> -<p>To retrieve the product details, call {@code queryInventoryAsync(boolean, List, QueryInventoryFinishedListener)} on your IabHelper instance. +<p>To retrieve the product details, call {@code queryInventoryAsync(boolean, List, QueryInventoryFinishedListener)} on your IabHelper instance. <ul> -<li>The first input argument indicates whether product details should be retrieved (should be set to {@code true}).</li> +<li>The first input argument indicates whether product details should be retrieved (should be set to {@code true}).</li> <li>The {@code List} argument consists of one or more product IDs (also called SKUs) for the products that you want to query.</li> <li>Finally, the {@code QueryInventoryFinishedListener} argument specifies a listener is notified when the query operation has completed and handles the query response.</li> </ul> @@ -70,9 +70,9 @@ mHelper.queryInventoryAsync(true, additionalSkuList, <p>The following code shows how you can retrieve the item prices from the result set.</p> <pre> -IabHelper.QueryInventoryFinishedListener +IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { - public void onQueryInventoryFinished(IabResult result, Inventory inventory) + public void onQueryInventoryFinished(IabResult result, Inventory inventory) { if (result.isFailure()) { // handle error @@ -84,7 +84,7 @@ IabHelper.QueryInventoryFinishedListener String bananaPrice = inventory.getSkuDetails(SKU_BANANA).getPrice(); - // update the UI + // update the UI } } </pre> diff --git a/docs/html/training/in-app-billing/purchase-iab-products.jd b/docs/html/training/in-app-billing/purchase-iab-products.jd index 4e6e035afe56..165e311fbf8e 100644 --- a/docs/html/training/in-app-billing/purchase-iab-products.jd +++ b/docs/html/training/in-app-billing/purchase-iab-products.jd @@ -45,7 +45,7 @@ next.link=test-iab-app.html <p>The following example shows how you can make a purchase request for a product with ID {@code SKU_GAS}, using an arbitrary value of 10001 for the request code, and an encoded developer payload string.</p> <pre> -mHelper.launchPurchaseFlow(this, SKU_GAS, 10001, +mHelper.launchPurchaseFlow(this, SKU_GAS, 10001, mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ"); </pre> @@ -54,14 +54,14 @@ mHelper.launchPurchaseFlow(this, SKU_GAS, 10001, <p>The following example shows how you can handle the purchase response in the listener, depending on whether the purchase order was completed successfully, and whether the user purchased gas or a premium upgrade. In this example, gas is an in-app product that can be purchased multiple times, so you should consume the purchase to allow the user to buy it again. To learn how to consume purchases, see the <a href="{@docRoot}training/in-app-billing/purchase-iab-products.html#Consume">Consuming Products</a> section. The premium upgrade is a one-time purchase so you don’t need to consume it. It is good practice to update the UI immediately so that your users can see their newly purchased items.</p> <pre> -IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener +IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { - public void onIabPurchaseFinished(IabResult result, Purchase purchase) + public void onIabPurchaseFinished(IabResult result, Purchase purchase) { if (result.isFailure()) { Log.d(TAG, "Error purchasing: " + result); return; - } + } else if (purchase.getSku().equals(SKU_GAS)) { // consume the gas and update the UI } @@ -86,7 +86,7 @@ mHelper.queryInventoryAsync(mGotInventoryListener); <p>If the query is successful, the query results are stored in an {@code Inventory} object that is passed back to the listener. The In-app Billing service returns only the purchases made by the user account that is currently logged in to the device.</p> <pre> -IabHelper.QueryInventoryFinishedListener mGotInventoryListener +IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { public void onQueryInventoryFinished(IabResult result, Inventory inventory) { @@ -96,7 +96,7 @@ IabHelper.QueryInventoryFinishedListener mGotInventoryListener } else { // does the user have the premium upgrade? - mIsPremium = inventory.hasPurchase(SKU_PREMIUM); + mIsPremium = inventory.hasPurchase(SKU_PREMIUM); // update UI accordingly } } @@ -111,7 +111,7 @@ IabHelper.QueryInventoryFinishedListener mGotInventoryListener <p>In this example, you want to consume the gas item that the user has previously purchased in your app.</p> <pre> -mHelper.consumeAsync(inventory.getPurchase(SKU_GAS), +mHelper.consumeAsync(inventory.getPurchase(SKU_GAS), mConsumeFinishedListener); </pre> diff --git a/docs/html/training/in-app-billing/test-iab-app.jd b/docs/html/training/in-app-billing/test-iab-app.jd index 9d47a96ce908..fc7fe1aa7081 100644 --- a/docs/html/training/in-app-billing/test-iab-app.jd +++ b/docs/html/training/in-app-billing/test-iab-app.jd @@ -39,7 +39,7 @@ Test your In-app Billing application with static responses by using Google Playâ <li>Login to the <a href="https://play.google.com/apps/publish/" target="_blank">Developer Console</a> with your developer account.</li> <li>Click <strong>Settings</strong> > <strong>Account</strong> details, then in the <strong>License Testing</strong> section, add the Google email addresses for your tester accounts.</li> </ol> -<li>Build a signed APK file for your In-app Billing application. To learn how to build and sign your APK, see <a href="{@docRoot}tools/publishing/preparing.html#publishing-build">Building Your Application for Release</a>. Make sure that you are using your final (not debug) certificate and private key to sign your application. +<li>Build a signed APK file for your In-app Billing application. To learn how to build and sign your APK, see <a href="{@docRoot}tools/publishing/preparing.html#publishing-build">Building Your Application for Release</a>. Make sure that you are using your final (not debug) certificate and private key to sign your application. </li> <li>Make sure that you have uploaded the signed APK for your application to the Developer Console, and associated one or more in-app products with your application. You don't need to publish the application on Google Play to test it. <p class="note"><strong>Warning:</strong> It may take up to 2-3 hours after uploading the APK for Google Play to recognize your updated APK version. If you try to test your application before your uploaded APK is recognized by Google Play, your application will receive a ‘purchase cancelled’ response with an error message “This version of the application is not enabled for In-app Billing.â€</p></li> <li>Install the APK file to your physical test device by using the {@code adb} tool. To learn how to install the application, see <a href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a Device</a>. Make sure that: diff --git a/docs/html/training/keyboard-input/index.jd b/docs/html/training/keyboard-input/index.jd index 46795c4d9f4d..bd7ad189be28 100644 --- a/docs/html/training/keyboard-input/index.jd +++ b/docs/html/training/keyboard-input/index.jd @@ -32,9 +32,9 @@ through an attached keyboard.</p> <p>These topics and more are discussed in the following lessons.</p> -<h2>Lessons</h2> - -<dl> +<h2>Lessons</h2> + +<dl> <dt><b><a href="style.html">Specifying the Input Method Type</a></b></dt> <dd>Learn how to show certain soft input methods, such as those designed for phone numbers, web addresses, or other formats. Also learn how to specify characteristics such @@ -51,5 +51,5 @@ through an attached keyboard.</p> <dt><b><a href="commands.html">Handling Keyboard Actions</a></b></dt> <dd>Learn how to respond directly to keyboard input for user actions. </dd> - -</dl> + +</dl> diff --git a/docs/html/training/keyboard-input/style.jd b/docs/html/training/keyboard-input/style.jd index b0e506cf756c..714c8b3c3e32 100644 --- a/docs/html/training/keyboard-input/style.jd +++ b/docs/html/training/keyboard-input/style.jd @@ -71,7 +71,7 @@ so the text field conceals the user's input:</p> android:id="@+id/password" android:hint="@string/password_hint" android:inputType="textPassword" - ... /> + ... /> </pre> <p>There are several possible values documented with the diff --git a/docs/html/training/load-data-background/handle-results.jd b/docs/html/training/load-data-background/handle-results.jd index ce0024f031c2..7439d3e99cf8 100644 --- a/docs/html/training/load-data-background/handle-results.jd +++ b/docs/html/training/load-data-background/handle-results.jd @@ -127,7 +127,7 @@ public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { */ @Override public void onLoaderReset(Loader<Cursor> loader) { - + /* * Clears out the adapter's reference to the Cursor. * This prevents memory leaks. diff --git a/docs/html/training/location/display-address.jd b/docs/html/training/location/display-address.jd index 86066299e5d7..daa6fd3832af 100644 --- a/docs/html/training/location/display-address.jd +++ b/docs/html/training/location/display-address.jd @@ -324,7 +324,7 @@ public class FetchAddressIntentService extends IntentService { process if needed. If the service is already running then it remains running. Because the service extends {@link android.app.IntentService IntentService}, it shuts down automatically when all intents have been processed.</p> - + <p>Start the service from your app's main activity, and create an {@link android.content.Intent} to pass data to the service. You need an <em>explicit</em> intent, because you want only your service diff --git a/docs/html/training/location/geofencing.jd b/docs/html/training/location/geofencing.jd index 1cf89fdc8b92..ce6ad55ad889 100644 --- a/docs/html/training/location/geofencing.jd +++ b/docs/html/training/location/geofencing.jd @@ -369,7 +369,7 @@ reduce the alerts is to use a transition type of <code> GEOFENCE_TRANSITION_DWELL</a></code> instead of <code> <a href="{@docRoot}reference/com/google/android/gms/location/Geofence.html#GEOFENCE_TRANSITION_ENTER"> GEOFENCE_TRANSITION_ENTER</a></code>. This way, the dwelling alert is sent only when the user stops -inside a geofence for a given period of time. You can choose the duration by setting a +inside a geofence for a given period of time. You can choose the duration by setting a <a href="{@docRoot}reference/com/google/android/gms/location/Geofence.Builder.html#setLoiteringDelay(int)"> loitering delay</a>.</p> diff --git a/docs/html/training/managing-audio/audio-output.jd b/docs/html/training/managing-audio/audio-output.jd index 416e5193f569..ed1623beb609 100644 --- a/docs/html/training/managing-audio/audio-output.jd +++ b/docs/html/training/managing-audio/audio-output.jd @@ -8,8 +8,8 @@ previous.link=audio-focus.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> @@ -25,16 +25,16 @@ previous.link=audio-focus.html </ul> -</div> +</div> </div> <p>Users have a number of alternatives when it comes to enjoying the audio from their Android devices. Most devices have a built-in speaker, headphone jacks for wired headsets, and many also feature Bluetooth connectivity and support for A2DP audio. </p> - -<h2 id="CheckHardware">Check What Hardware is Being Used</h2> - + +<h2 id="CheckHardware">Check What Hardware is Being Used</h2> + <p>How your app behaves might be affected by which hardware its output is being routed to.</p> <p>You can query the {@link android.media.AudioManager} to determine if the audio is currently @@ -48,13 +48,13 @@ if (isBluetoothA2dpOn()) { // Adjust output for Speakerphone. } else if (isWiredHeadsetOn()) { // Adjust output for headsets -} else { +} else { // If audio plays and noone can hear it, is it still playing? } </pre> -<h2 id="HandleChanges">Handle Changes in the Audio Output Hardware</h2> +<h2 id="HandleChanges">Handle Changes in the Audio Output Hardware</h2> <p>When a headset is unplugged, or a Bluetooth device disconnected, the audio stream automatically reroutes to the built in speaker. If you listen to your music at as high a volume as I @@ -65,7 +65,7 @@ intent when this happens. It’s good practice to register a {@link android.cont that listens for this intent whenever you’re playing audio. In the case of music players, users typically expect the playback to be paused—while for games you may choose to significantly lower the volume.</p> - + <pre> private class NoisyAudioStreamReceiver extends BroadcastReceiver { @Override diff --git a/docs/html/training/managing-audio/index.jd b/docs/html/training/managing-audio/index.jd index 9391449b57e2..55b91c2c64ae 100644 --- a/docs/html/training/managing-audio/index.jd +++ b/docs/html/training/managing-audio/index.jd @@ -6,10 +6,10 @@ startpage=true @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> -<h2>Dependencies and prerequisites</h2> +<h2>Dependencies and prerequisites</h2> <ul> <li>Android 2.0 (API level 5) or higher</li> <li>Experience with <a href="{@docRoot}guide/topics/media/mediaplayer.html">Media @@ -21,41 +21,41 @@ Playback</a></li> <li><a href="{@docRoot}guide/components/services.html">Services</a></li> </ul> -</div> +</div> </div> <p>If your app plays audio, it’s important that your users can control the audio in a predictable manner. To ensure a great user experience, it’s also important that your app manages the audio focus -to ensure multiple apps aren’t playing audio at the same time.</p> +to ensure multiple apps aren’t playing audio at the same time.</p> -<p>After this class, you will be able to build apps that respond to hardware audio key presses, +<p>After this class, you will be able to build apps that respond to hardware audio key presses, which request audio focus when playing audio, and which respond appropriately to changes in audio -focus caused by the system or other applications.</p> +focus caused by the system or other applications.</p> + +<h2>Lessons</h2> -<h2>Lessons</h2> - <!-- Create a list of the lessons in this class along with a short description of each lesson. These should be short and to the point. It should be clear from reading the summary whether someone -will want to jump to a lesson or not.--> - +will want to jump to a lesson or not.--> + <dl> <dt><b><a href="volume-playback.html">Controlling Your App’s Volume and Playback</a></b></dt> <dd>Learn how to ensure your users can control the volume of your app using the hardware or software volume controls and where available the play, stop, pause, skip, and previous media -playback keys.</dd> - +playback keys.</dd> + <dt><b><a href="audio-focus.html">Managing Audio Focus</a></b></dt> <dd>With multiple apps potentially playing audio it's important to think about how they should interact. To avoid every music app playing at the same time, Android uses audio focus to moderate audio playback. Learn how to request the audio focus, listen for a loss of audio focus, and how to -respond when that happens.</dd> - +respond when that happens.</dd> + <dt><b><a href="audio-output.html">Dealing with Audio Output Hardware</a></b></dt> <dd>Audio can be played from a number of sources. Learn how to find out where the audio is being -played and how to handle a headset being disconnected during playback.</dd> - </dl> +played and how to handle a headset being disconnected during playback.</dd> + </dl> diff --git a/docs/html/training/managing-audio/volume-playback.jd b/docs/html/training/managing-audio/volume-playback.jd index be0f583d50c7..7e2889300c8a 100644 --- a/docs/html/training/managing-audio/volume-playback.jd +++ b/docs/html/training/managing-audio/volume-playback.jd @@ -8,8 +8,8 @@ next.link=audio-focus.html @jd:body - -<div id="tb-wrapper"> + +<div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> @@ -26,11 +26,11 @@ Playback</a></li> <li><a href="{@docRoot}guide/topics/media/mediaplayer.html">Media Playback</a></li> </ul> -</div> +</div> </div> - + <p>A good user experience is a predictable one. If your app plays media it’s important that your users can control the volume of your app using the hardware or software volume controls of their device, bluetooth headset, or headphones.</p> @@ -38,9 +38,9 @@ device, bluetooth headset, or headphones.</p> <p>Similarly, where appropriate and available, the play, stop, pause, skip, and previous media playback keys should perform their respective actions on the audio stream used by your app.</p> - -<h2 id="IdentifyStream">Identify Which Audio Stream to Use</h2> - + +<h2 id="IdentifyStream">Identify Which Audio Stream to Use</h2> + <p>The first step to creating a predictable audio experience is understanding which audio stream your app will use.</p> @@ -53,11 +53,11 @@ clock, you’ll almost certainly be playing your audio using the {@link android.media.AudioManager#STREAM_MUSIC} stream.</p> -<h2 id="HardwareVolumeKeys">Use Hardware Volume Keys to Control Your App’s Audio Volume</h2> +<h2 id="HardwareVolumeKeys">Use Hardware Volume Keys to Control Your App’s Audio Volume</h2> <p>By default, pressing the volume controls modify the volume of the active audio stream. If your app isn't currently playing anything, hitting the volume keys adjusts the ringer volume.<p> - + <p>If you've got a game or music app, then chances are good that when the user hits the volume keys they want to control the volume of the game or music, even if they’re currently between songs or there’s no music in the current game location.</p> @@ -65,8 +65,8 @@ there’s no music in the current game location.</p> <p>You may be tempted to try and listen for volume key presses and modify the volume of your audio stream that way. Resist the urge. Android provides the handy {@link android.app.Activity#setVolumeControlStream setVolumeControlStream()} method to direct volume key -presses to the audio stream you specify.<p> - +presses to the audio stream you specify.<p> + <p>Having identified the audio stream your application will be using, you should set it as the volume stream target. You should make this call early in your app’s lifecycle—because you only need to call it once during the activity lifecycle, you @@ -85,7 +85,7 @@ specify (in this case “musicâ€) whenever the target activity or fragment is v <h2 id="PlaybackControls">Use Hardware Playback Control Keys to Control Your App’s Audio -Playback</h2> +Playback</h2> <p>Media playback buttons such as play, pause, stop, skip, and previous are available on some handsets and many connected or wireless headsets. Whenever a user presses one of these hardware diff --git a/docs/html/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/training/monitoring-device-state/connectivity-monitoring.jd index d5e7a859b121..2dd904f325f7 100644 --- a/docs/html/training/monitoring-device-state/connectivity-monitoring.jd +++ b/docs/html/training/monitoring-device-state/connectivity-monitoring.jd @@ -11,7 +11,7 @@ next.link=manifest-receivers.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> @@ -27,7 +27,7 @@ next.link=manifest-receivers.html <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> </ul> -</div> +</div> </div> <p>Some of the most common uses for repeating alarms and background services is to schedule regular @@ -39,21 +39,21 @@ download, why both waking the device to schedule the update at all?</p> connected to the Internet, and if so, what type of connection is in place.</p> -<h2 id="DetermineConnection">Determine if You Have an Internet Connection</h2> - +<h2 id="DetermineConnection">Determine if You Have an Internet Connection</h2> + <p>There's no need to schedule an update based on an Internet resource if you aren't connected to -the Internet. The following snippet shows how to use the {@link android.net.ConnectivityManager} +the Internet. The following snippet shows how to use the {@link android.net.ConnectivityManager} to query the active network and determine if it has Internet connectivity.</p> <pre>ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();</pre> -<h2 id="DetermineType">Determine the Type of your Internet Connection</h2> +<h2 id="DetermineType">Determine the Type of your Internet Connection</h2> <p>It's also possible to determine the type of Internet connection currently available.</p> @@ -71,7 +71,7 @@ suspended until you have a Wi-Fi connection.</p> to resume them once an Internet connection has been established.</p> -<h2 id="MonitorChanges">Monitor for Changes in Connectivity</h2> +<h2 id="MonitorChanges">Monitor for Changes in Connectivity</h2> <p>The {@link android.net.ConnectivityManager} broadcasts the {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code diff --git a/docs/html/training/monitoring-device-state/manifest-receivers.jd b/docs/html/training/monitoring-device-state/manifest-receivers.jd index ca184aa54589..3e36dba741a1 100644 --- a/docs/html/training/monitoring-device-state/manifest-receivers.jd +++ b/docs/html/training/monitoring-device-state/manifest-receivers.jd @@ -9,7 +9,7 @@ previous.link=connectivity-monitoring.html @jd:body -<div id="tb-wrapper"> +<div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> @@ -24,7 +24,7 @@ Efficiency</a></li> <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> </ul> -</div> +</div> </div> <p>The simplest way to monitor device state changes is to create a {@link @@ -38,10 +38,10 @@ receivers is triggered—potentially much more frequently than required.</p> <p>A better approach is to disable or enable the broadcast receivers at runtime. That way you can use the receivers you declared in the manifest as passive alarms that are triggered by system events only when necessary.</p> - -<h2 id="ToggleReceivers">Toggle and Cascade State Change Receivers to Improve Efficiency </h2> - + +<h2 id="ToggleReceivers">Toggle and Cascade State Change Receivers to Improve Efficiency </h2> + <p>You can use the {@link android.content.pm.PackageManager} to toggle the enabled state on any component defined in the manifest, including whichever broadcast receivers you wish to enable or disable as shown in the snippet below:</p> @@ -59,6 +59,6 @@ your receivers except the connectivity-change receiver. Conversely, once you are stop listening for connectivity changes and simply check to see if you're online immediately before performing an update and rescheduling a recurring update alarm.</p> -<p>You can use the same technique to delay a download that requires higher bandwidth to complete. +<p>You can use the same technique to delay a download that requires higher bandwidth to complete. Simply enable a broadcast receiver that listens for connectivity changes and initiates the download only after you are connected to Wi-Fi.</p> diff --git a/docs/html/training/multiple-threads/create-threadpool.jd b/docs/html/training/multiple-threads/create-threadpool.jd index e22afd37c222..df28833d3177 100644 --- a/docs/html/training/multiple-threads/create-threadpool.jd +++ b/docs/html/training/multiple-threads/create-threadpool.jd @@ -48,7 +48,7 @@ trainingnavtop=true also occurs in any object that is only instantiated once. To learn more about this, read the <a href="{@docRoot}guide/components/processes-and-threads.html"> Processes and Threads</a> API guide. - + </p> <h2 id="ClassStructure">Define the Thread Pool Class</h2> <p> diff --git a/docs/html/training/multiscreen/adaptui.jd b/docs/html/training/multiscreen/adaptui.jd index 34e9d7df7f8d..469012bd8ac8 100644 --- a/docs/html/training/multiscreen/adaptui.jd +++ b/docs/html/training/multiscreen/adaptui.jd @@ -10,9 +10,9 @@ previous.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> - +<div id="tb-wrapper"> +<div id="tb"> + <h2>This lesson teaches you to</h2> <ol> @@ -28,18 +28,18 @@ previous.link=screendensities.html <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and Handsets</a></li> </ul> - + <h2>Try it out</h2> - + <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Download the sample app</a> -<p class="filename">NewsReader.zip</p> -</div> - - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + + +</div> +</div> <p>Depending on the layout that your application is currently showing, the UI flow may be different. For example, if your application is in the dual-pane @@ -66,7 +66,7 @@ public class NewsReaderActivity extends FragmentActivity { setContentView(R.layout.main_layout); View articleView = findViewById(R.id.article); - mIsDualPane = articleView != null && + mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE; } } @@ -139,7 +139,7 @@ public void onCreate(Bundle savedInstanceState) { else { /* use list navigation (spinner) */ actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); - SpinnerAdapter adap = new ArrayAdapter<String>(this, + SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.headline_item, CATEGORIES); actionBar.setListNavigationCallbacks(adap, handler); } @@ -157,7 +157,7 @@ large screens, but is a separate activity on smaller screens.</p> <p>In cases like this, you can usually avoid code duplication by reusing the same {@link android.app.Fragment} subclass in several activities. For example, -<code>ArticleFragment</code> +<code>ArticleFragment</code> is used in the dual-pane layout:</p> {@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all} @@ -206,7 +206,7 @@ activity (as opposed to notifying a specific hard-coded activity):</p> public class HeadlinesFragment extends ListFragment { ... @Override - public void onItemClick(AdapterView<?> parent, + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mHeadlineSelectedListener) { mHeadlineSelectedListener.onHeadlineSelected(position); diff --git a/docs/html/training/multiscreen/index.jd b/docs/html/training/multiscreen/index.jd index 8eff246cd8eb..2c59facbda77 100644 --- a/docs/html/training/multiscreen/index.jd +++ b/docs/html/training/multiscreen/index.jd @@ -7,10 +7,10 @@ startpage=true @jd:body -<div id="tb-wrapper"> -<div id="tb"> - -<h2>Dependencies and prerequisites</h2> +<div id="tb-wrapper"> +<div id="tb"> + +<h2>Dependencies and prerequisites</h2> <ul> <li>Android 1.6 or higher (2.1+ for the sample app)</li> @@ -28,18 +28,18 @@ href="{@docRoot}tools/support-library/index.html">support library</a></li> <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li> </ul> - -<h2>Try it out</h2> - -<div class="download-box"> + +<h2>Try it out</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Download the sample app</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> - +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> + <p>Android powers hundreds of device types with several different screen sizes, ranging from small phones to large TV sets. Therefore, it’s important that you design your application to be compatible with all screen sizes so it’s available to as many @@ -62,26 +62,26 @@ of reusable code for your own application.</p> href="{@docRoot}tools/support-library/index.html">support library</a> in order to use the {@link android.app.Fragment} APIs on versions lower than Android 3.0. You must download and add the library to your application in order to use all APIs in this class.</p> - -<h2>Lessons</h2> - -<dl> - <dt><b><a href="screensizes.html">Supporting Different Screen Sizes</a></b></dt> + +<h2>Lessons</h2> + +<dl> + <dt><b><a href="screensizes.html">Supporting Different Screen Sizes</a></b></dt> <dd>This lesson walks you through how to design layouts that adapts several different screen sizes (using flexible dimensions for views, {@link android.widget.RelativeLayout}, screen size and orientation qualifiers, - alias filters, and nine-patch bitmaps).</dd> - + alias filters, and nine-patch bitmaps).</dd> + <dt><b><a href="screendensities.html">Supporting Different Screen - Densities</a></b></dt> + Densities</a></b></dt> <dd>This lesson shows you how to support screens that have different pixel densities (using density-independent pixels and providing - bitmaps appropriate for each density).</dd> - - <dt><b><a href="adaptui.html">Implementing Adaptative UI Flows</a></b></dt> + bitmaps appropriate for each density).</dd> + + <dt><b><a href="adaptui.html">Implementing Adaptative UI Flows</a></b></dt> <dd>This lesson shows you how to implement your UI flow in a way that adapts to several screen size/density combinations (run-time detection of active layout, reacting according to - current layout, handling screen configuration changes).</dd> -</dl> + current layout, handling screen configuration changes).</dd> +</dl> diff --git a/docs/html/training/multiscreen/screensizes.jd b/docs/html/training/multiscreen/screensizes.jd index 2cd59ee90a56..040bb85a88e0 100755 --- a/docs/html/training/multiscreen/screensizes.jd +++ b/docs/html/training/multiscreen/screensizes.jd @@ -10,8 +10,8 @@ next.link=screendensities.html <!-- This is the training bar --> -<div id="tb-wrapper"> -<div id="tb"> +<div id="tb-wrapper"> +<div id="tb"> <h2>This lesson teaches you to</h2> <ol> @@ -30,27 +30,27 @@ next.link=screendensities.html <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li> </ul> -<h2>Try it out</h2> - -<div class="download-box"> +<h2>Try it out</h2> + +<div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Download the sample app</a> -<p class="filename">NewsReader.zip</p> -</div> - -</div> -</div> +<p class="filename">NewsReader.zip</p> +</div> + +</div> +</div> <p>This lesson shows you how to support different screen sizes by:</p> -<ul> - <li>Ensuring your layout can be adequately resized to fit the screen</li> - <li>Providing appropriate UI layout according to screen configuration</li> +<ul> + <li>Ensuring your layout can be adequately resized to fit the screen</li> + <li>Providing appropriate UI layout according to screen configuration</li> <li>Ensuring the correct layout is applied to the correct screen</li> - <li>Providing bitmaps that scale correctly</li> -</ul> + <li>Providing bitmaps that scale correctly</li> +</ul> -<h2 id="TaskUseWrapMatchPar">Use "wrap_content" and "match_parent"</h2> +<h2 id="TaskUseWrapMatchPar">Use "wrap_content" and "match_parent"</h2> <p>To ensure that your layout is flexible and adapts to different screen sizes, you should use <code>"wrap_content"</code> and <code>"match_parent"</code> for the width @@ -78,11 +78,11 @@ width and height:</p> and landscape (right).</p> -<h2 id="TaskUseRelativeLayout">Use RelativeLayout</h2> +<h2 id="TaskUseRelativeLayout">Use RelativeLayout</h2> <p>You can construct fairly complex layouts using nested instances of {@link android.widget.LinearLayout} and -combinations of <code>"wrap_content"</code> and <code>"match_parent"</code> sizes. +combinations of <code>"wrap_content"</code> and <code>"match_parent"</code> sizes. However, {@link android.widget.LinearLayout} does not allow you to precisely control the spacial relationships of child views; views in a {@link android.widget.LinearLayout} simply line up side-by-side. If you need child views to be oriented in variations other than a straight line, a @@ -139,8 +139,8 @@ the right side of the screen.</p> spatial relationships are preserved as specified by the {@link android.widget.RelativeLayout.LayoutParams}.</p> - -<h2 id="TaskUseSizeQuali">Use Size Qualifiers</h2> + +<h2 id="TaskUseSizeQuali">Use Size Qualifiers</h2> <p>There's only so much mileage you can get from a flexible layout or relative layout like the one in the previous sections. While those layouts adapt to @@ -148,7 +148,7 @@ different screens by stretching the space within and around components, they may not provide the best user experience for each screen size. Therefore, your application should not only implement flexible layouts, but should also provide several alternative layouts to target different screen configurations. You do -so by using <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">configuration qualifiers</a>, which allows the runtime +so by using <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">configuration qualifiers</a>, which allows the runtime to automatically select the appropriate resource based on the current device’s configuration (such as a different layout design for different screen sizes).</p> @@ -209,13 +209,13 @@ layout.</p> <p>However, this won't work well on pre-3.2 devices, because they don't recognize <code>sw600dp</code> as a size qualifier, so you still have to use the <code>large</code> -qualifier as well. So, you should have a file named +qualifier as well. So, you should have a file named <code>res/layout-large/main.xml</code> which is identical to <code>res/layout-sw600dp/main.xml</code>. In the next section you'll see a technique that allows you to avoid duplicating the layout files this way.</p> -<h2 id="TaskUseAliasFilters">Use Layout Aliases</h2> +<h2 id="TaskUseAliasFilters">Use Layout Aliases</h2> <p>The smallest-width qualifier is available only on Android 3.2 and above. Therefore, you should also still use the abstract size bins (small, normal, @@ -271,7 +271,7 @@ applied to tablets and TVs regardless of Android version (pre-3.2 tablets and TV {@code large}, and post-3.2 will match <code>sw600dp</code>).</p> -<h2 id="TaskUseOriQuali">Use Orientation Qualifiers</h2> +<h2 id="TaskUseOriQuali">Use Orientation Qualifiers</h2> <p>Some layouts work well in both landscape and portrait orientations, but most of them can benefit from adjustments. In the News Reader sample app, here is how the layout @@ -287,7 +287,7 @@ behaves in each screen size and orientation:</p> <li><b>TV, landscape:</b> dual pane, wide, with action bar</li> </ul></p> -<p>So each of these layouts is defined in an XML file in the +<p>So each of these layouts is defined in an XML file in the <code>res/layout/</code> directory. To then assign each layout to the various screen configurations, the app uses layout aliases to match them to each configuration:</p> @@ -361,7 +361,7 @@ borders indicate the places where the image can be stretched, and the ones on the right and bottom borders indicate where the content should be placed.</p> -<p>Also, notice the <code>.9.png</code> extension. You must use this +<p>Also, notice the <code>.9.png</code> extension. You must use this extension, since this is how the framework detects that this is a nine-patch image, as opposed to a regular PNG image.</p> diff --git a/docs/html/training/notify-user/build-notification.jd b/docs/html/training/notify-user/build-notification.jd index d24a4960a987..2f96a20985ed 100644 --- a/docs/html/training/notify-user/build-notification.jd +++ b/docs/html/training/notify-user/build-notification.jd @@ -42,9 +42,9 @@ trainingnavtop=true <p>This lesson explains how to create and issue a notification.</p> -<p>The examples in this class are based on the -{@link android.support.v4.app.NotificationCompat.Builder} class. -{@link android.support.v4.app.NotificationCompat.Builder} +<p>The examples in this class are based on the +{@link android.support.v4.app.NotificationCompat.Builder} class. +{@link android.support.v4.app.NotificationCompat.Builder} is in the <a href="{@docRoot}">Support Library</a>. You should use {@link android.support.v4.app.NotificationCompat} and its subclasses, particularly {@link android.support.v4.app.NotificationCompat.Builder}, to @@ -52,9 +52,9 @@ provide the best notification support for a wide range of platforms. </p> <h2 id="builder">Create a Notification Builder</h2> -<p>When creating a notification, specify the UI content and actions with a -{@link android.support.v4.app.NotificationCompat.Builder} object. At bare minimum, -a {@link android.support.v4.app.NotificationCompat.Builder Builder} +<p>When creating a notification, specify the UI content and actions with a +{@link android.support.v4.app.NotificationCompat.Builder} object. At bare minimum, +a {@link android.support.v4.app.NotificationCompat.Builder Builder} object must include the following:</p> <ul> @@ -96,7 +96,7 @@ of {@link android.app.Activity} you're starting. When you start an {@link android.app.Activity} from a notification, you must preserve the user's expected navigation experience. In the snippet below, clicking the notification opens a new activity that effectively extends the behavior of the notification. In this -case there is no need to create an artificial back stack (see +case there is no need to create an artificial back stack (see <a href="navigation.html">Preserving Navigation when Starting an Activity</a> for more information):</p> @@ -132,11 +132,11 @@ mBuilder.setContentIntent(resultPendingIntent);</pre> <p>To issue the notification:</p> <ul> -<li>Get an instance of {@link android.app.NotificationManager}.</li> +<li>Get an instance of {@link android.app.NotificationManager}.</li> <li>Use the {@link android.app.NotificationManager#notify notify()} method to issue the -notification. When you call {@link android.app.NotificationManager#notify notify()}, specify a notification ID. -You can use this ID to update the notification later on. This is described in more detail in +notification. When you call {@link android.app.NotificationManager#notify notify()}, specify a notification ID. +You can use this ID to update the notification later on. This is described in more detail in <a href="managing.html">Managing Notifications</a>.</li> <li>Call {@link @@ -152,7 +152,7 @@ NotificationCompat.Builder mBuilder; // Sets an ID for the notification int mNotificationId = 001; // Gets an instance of the NotificationManager service -NotificationManager mNotifyMgr = +NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Builds the notification and issues it. mNotifyMgr.notify(mNotificationId, mBuilder.build()); diff --git a/docs/html/training/notify-user/display-progress.jd b/docs/html/training/notify-user/display-progress.jd index 3439571fe306..e2cf033d7b6c 100644 --- a/docs/html/training/notify-user/display-progress.jd +++ b/docs/html/training/notify-user/display-progress.jd @@ -59,9 +59,9 @@ trainingnavtop=true <h2 id="FixedProgress">Display a Fixed-duration Progress Indicator</h2> <p> To display a determinate progress bar, add the bar to your notification by calling - {@link android.support.v4.app.NotificationCompat.Builder#setProgress - setProgress(max, progress, false)} and then issue the notification. - The third argument is a boolean that indicates whether the + {@link android.support.v4.app.NotificationCompat.Builder#setProgress + setProgress(max, progress, false)} and then issue the notification. + The third argument is a boolean that indicates whether the progress bar is indeterminate (<strong>true</strong>) or determinate (<strong>false</strong>). As your operation proceeds, increment <code>progress</code>, and update the notification. At the end of the operation, @@ -74,7 +74,7 @@ trainingnavtop=true You can either leave the progress bar showing when the operation is done, or remove it. In either case, remember to update the notification text to show that the operation is complete. To remove the progress bar, call - {@link android.support.v4.app.NotificationCompat.Builder#setProgress + {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)}. For example: </p> <pre> @@ -136,14 +136,14 @@ new Thread( <p> To display a continuing (indeterminate) activity indicator, add it to your notification with {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, true)} - and issue the notification. The first two arguments are ignored, and the third argument + and issue the notification. The first two arguments are ignored, and the third argument declares that the indicator is indeterminate. The result is an indicator that has the same style as a progress bar, except that its animation is ongoing. </p> <p> Issue the notification at the beginning of the operation. The animation will run until you modify your notification. When the operation is done, call - {@link android.support.v4.app.NotificationCompat.Builder#setProgress + {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)} and then update the notification to remove the activity indicator. Always do this; otherwise, the animation will run even when the operation is complete. Also remember to change the notification text to indicate that the operation is complete. @@ -160,7 +160,7 @@ mNotifyManager.notify(id, mBuilder.build()); </pre> <p> Replace the lines you've found with the following lines. Notice that the third parameter - in the {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()} + in the {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()} call is set to {@code true} to indicate that the progress bar is indeterminate: </p> diff --git a/docs/html/training/notify-user/expanded.jd b/docs/html/training/notify-user/expanded.jd index b65742682956..23d85d438092 100644 --- a/docs/html/training/notify-user/expanded.jd +++ b/docs/html/training/notify-user/expanded.jd @@ -75,7 +75,7 @@ big view give users access to same functionality:</p> </ul> <p>The normal view provides these features through a new activity that launches -when the user clicks the notification. Keep this in mind as you design your notifications—first +when the user clicks the notification. Keep this in mind as you design your notifications—first provide the functionality in the normal view, since this is how many users will interact with the notification.</p> @@ -87,19 +87,19 @@ to construct and issue the notification.</p> <p>In this snippet, the {@link android.app.IntentService} method -{@link android.app.IntentService#onHandleIntent onHandleIntent()} specifies the new activity +{@link android.app.IntentService#onHandleIntent onHandleIntent()} specifies the new activity that will be launched if the user -clicks the notification itself. The method -{@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()} +clicks the notification itself. The method +{@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()} defines a pending intent that should be fired when the user clicks the notification, thereby launching the activity.</p> <pre>Intent resultIntent = new Intent(this, ResultActivity.class); resultIntent.putExtra(CommonConstants.EXTRA_MESSAGE, msg); -resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | +resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - -// Because clicking the notification launches a new ("special") activity, + +// Because clicking the notification launches a new ("special") activity, // there's no need to create an artificial back stack. PendingIntent resultPendingIntent = PendingIntent.getActivity( @@ -130,8 +130,8 @@ snoozeIntent.setAction(CommonConstants.ACTION_SNOOZE); PendingIntent piSnooze = PendingIntent.getService(this, 0, snoozeIntent, 0); </pre> -<p>This snippet shows how to construct the -{@link android.support.v4.app.NotificationCompat.Builder Builder} object. +<p>This snippet shows how to construct the +{@link android.support.v4.app.NotificationCompat.Builder Builder} object. It sets the style for the big view to be "big text," and sets its content to be the reminder message. It uses {@link android.support.v4.app.NotificationCompat.Builder#addAction addAction()} diff --git a/docs/html/training/notify-user/index.jd b/docs/html/training/notify-user/index.jd index 616e767873f8..57efd6512849 100644 --- a/docs/html/training/notify-user/index.jd +++ b/docs/html/training/notify-user/index.jd @@ -43,9 +43,9 @@ class="button">Download the sample</a> </div> <p> - A notification is a user interface element that you display outside your app's normal UI to indicate - that an event has occurred. Users can choose to view the notification while using other apps and respond - to it when it's convenient for them. + A notification is a user interface element that you display outside your app's normal UI to indicate + that an event has occurred. Users can choose to view the notification while using other apps and respond + to it when it's convenient for them. </p> @@ -86,10 +86,10 @@ class="button">Download the sample</a> </strong> </dt> <dd> - Learn how to create a big view within an expanded notification, while still maintaining + Learn how to create a big view within an expanded notification, while still maintaining backward compatibility. </dd> - + <dt> <strong> <a href="display-progress.html">Displaying Progress in a Notification</a> diff --git a/docs/html/training/notify-user/navigation.jd b/docs/html/training/notify-user/navigation.jd index b7051ab5f1fa..cdb7f3d6e0c4 100644 --- a/docs/html/training/notify-user/navigation.jd +++ b/docs/html/training/notify-user/navigation.jd @@ -37,7 +37,7 @@ trainingnavtop=true </div> </div> <p> - Part of designing a notification is preserving the user's expected navigation experience. + Part of designing a notification is preserving the user's expected navigation experience. For a detailed discussion of this topic, see the <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#NotificationResponse">Notifications</a> API guide. @@ -49,7 +49,7 @@ trainingnavtop=true </dt> <dd> You're starting an {@link android.app.Activity} that's part of the application's normal - workflow. + workflow. </dd> <dt> Special activity @@ -202,7 +202,7 @@ NotificationCompat.Builder builder = new NotificationCompat.Builder(this); Intent notifyIntent = new Intent(new ComponentName(this, ResultActivity.class)); // Sets the Activity to start in a new, empty task -notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | +notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Creates the PendingIntent PendingIntent notifyIntent = diff --git a/docs/html/training/run-background-service/report-status.jd b/docs/html/training/run-background-service/report-status.jd index 41121c17e3e6..41fbb00e115f 100644 --- a/docs/html/training/run-background-service/report-status.jd +++ b/docs/html/training/run-background-service/report-status.jd @@ -91,7 +91,7 @@ public class RSSPullService extends IntentService { </p> <h2 id="ReceiveStatus">Receive Status Broadcasts from an IntentService</h2> <p> - + To receive broadcast {@link android.content.Intent} objects, use a subclass of {@link android.content.BroadcastReceiver}. In the subclass, implement the {@link android.content.BroadcastReceiver#onReceive BroadcastReceiver.onReceive()} callback @@ -137,7 +137,7 @@ public class DisplayActivity extends FragmentActivity { // The filter's action is BROADCAST_ACTION IntentFilter mStatusIntentFilter = new IntentFilter( Constants.BROADCAST_ACTION); - + // Adds a data filter for the HTTP scheme mStatusIntentFilter.addDataScheme("http"); ... @@ -194,6 +194,6 @@ public class DisplayActivity extends FragmentActivity { {@link android.content.Intent}. </p> <p> - + </p> diff --git a/docs/html/training/sign-in/index.jd b/docs/html/training/sign-in/index.jd index d7c8e1d397ab..a5859441d64f 100644 --- a/docs/html/training/sign-in/index.jd +++ b/docs/html/training/sign-in/index.jd @@ -11,8 +11,8 @@ page.trainingcourse=true alt="Google maps sample image"> <p> - Google Sign-In for Android lets you authenticate a user with the same credentials they use on - Google. After a user signs in with Google, you can create more engaging experiences and drive + Google Sign-In for Android lets you authenticate a user with the same credentials they use on + Google. After a user signs in with Google, you can create more engaging experiences and drive usage of your app. </p> @@ -34,8 +34,8 @@ page.trainingcourse=true <h4>Access the profile and social graph</h4> <p> - After users have signed in with Google, your app can welcome them by name and display their - picture. If your app requests social scopes, it can connect users with friends, and access + After users have signed in with Google, your app can welcome them by name and display their + picture. If your app requests social scopes, it can connect users with friends, and access age range, language, and public profile information.<br> <a href="https://developers.google.com/identity/sign-in/android/people" class="external-link"> Getting Profile Information</a>. @@ -47,6 +47,6 @@ page.trainingcourse=true The Google Android APIs are part of the Google Play services platform. To use Google features, set up the Google Play services SDK in your app development project. For more information, see the <a class="external-link" href= - "https://developers.google.com/identity/sign-in/android/start-integrating">Start Integrating</a> + "https://developers.google.com/identity/sign-in/android/start-integrating">Start Integrating</a> guide for Google Sign-In. </p>
\ No newline at end of file diff --git a/docs/html/wear/preview/features/ime.jd b/docs/html/wear/preview/features/ime.jd index 1301be9afb2a..b07736f1da30 100644 --- a/docs/html/wear/preview/features/ime.jd +++ b/docs/html/wear/preview/features/ime.jd @@ -19,14 +19,14 @@ page.tags="wear" </div> -<p>Wear 2.0 supports input methods beyond voice by extending the Android +<p>Wear 2.0 supports input methods beyond voice by extending the Android Input Method Framework (IMF) to Android Wear. IMF allows for virtual, on-screen - keyboards and other input methods to be used for text entry. The IMF APIs used - for Wear devices are the same as other form factors, though usage is slightly + keyboards and other input methods to be used for text entry. The IMF APIs used + for Wear devices are the same as other form factors, though usage is slightly different due to limited screen real estate.</p> -<p>Wear 2.0 comes with the system default Input Method Editor (IME) -and opens up the IMF APIs for third-party developers to create custom input +<p>Wear 2.0 comes with the system default Input Method Editor (IME) +and opens up the IMF APIs for third-party developers to create custom input methods for Wear.</p> <p><img src="{@docRoot}wear/preview/images/new_input_methods.png"></p> @@ -46,17 +46,17 @@ documentation for <h2 id="invoking">Invoking an Input Method</h2> -If you are developing an IME for Wear, remember that the -feature is supported only on Android 6.0 (API level 23) and higher versions of -the platform. -To ensure that your IME can only be installed on Wearables that support input +If you are developing an IME for Wear, remember that the +feature is supported only on Android 6.0 (API level 23) and higher versions of +the platform. +To ensure that your IME can only be installed on Wearables that support input methods beyond voice, add the following to your app's manifest: <pre> <uses-sdk android:minSdkVersion="23" /> </pre> -This indicates that your app requires Android 6.0 or higher. +This indicates that your app requires Android 6.0 or higher. For more information, see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> - and the documentation for the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a> + and the documentation for the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a> element. <p> To control how your app is filtered from devices that do not support Wear @@ -67,14 +67,14 @@ IMEs (for example, on Phone), add the following to your app's manifest: </pre> <p>Wear provides user settings on the watch that lets the user to enable multiple - IMEs from the list of installed IMEs. Once the users enable your IME, they + IMEs from the list of installed IMEs. Once the users enable your IME, they can invoke your IME from:</p> <ul> -<li>A notification or an app using the +<li>A notification or an app using the <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.html">RemoteInput</a></code> API.</li> -<li>Wear apps with an +<li>Wear apps with an <a href="{@docRoot}reference/android/widget/EditText.html">EditText</a> - field. Touching a text field places the cursor in the field and automatically + field. Touching a text field places the cursor in the field and automatically displays the IME on focus.</li> </ul> @@ -86,10 +86,10 @@ IMEs (for example, on Phone), add the following to your app's manifest: <ul> <li><strong>Set Default Action</strong> <p> -<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a> +<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a> and Wear apps expect only single-line text entry. The ENTER key should always trigger a call to <a href="{@docRoot}reference/android/inputmethodservice/InputMethodService.html#sendDefaultEditorAction(boolean)">sendDefaultEditorAction</a>, - which causes the app to dismiss the keyboard and continue on to the next step + which causes the app to dismiss the keyboard and continue on to the next step or action.</p> </li> @@ -97,22 +97,22 @@ and Wear apps expect only single-line text entry. The ENTER key should always tr <p> Input methods on Wear consume most of the screen, leaving very little of the app visible; using full-screen mode ensures an optimal user experience regardless - of the app UI. In full-screen mode, an + of the app UI. In full-screen mode, an <a href="{@docRoot}reference/android/view/inputmethod/ExtractedText.html">{@code ExtractEditText}</a> provides a mirrored view of the text field being edited and can be styled to blend with the rest of - the input method UI. For more details on full-screen mode, see + the input method UI. For more details on full-screen mode, see <a href="{@docRoot}reference/android/inputmethodservice/InputMethodService.html">InputMethodService</a>. </p> </li> <li><strong>Handle InputType flags</strong> <p> -For privacy reasons, at a minimum you should handle the {@code InputType} -flag {@code TYPE_TEXT_VARIATION_PASSWORD} in your IME. When your IME is in -password mode, make sure that your keyboard is optimized for single key press -(auto spelling correction, auto completion and gesture input are disabled). -Most importantly, keyboard in password mode should support ASCII symbols -regardless of the input language. For more details, see +For privacy reasons, at a minimum you should handle the {@code InputType} +flag {@code TYPE_TEXT_VARIATION_PASSWORD} in your IME. When your IME is in +password mode, make sure that your keyboard is optimized for single key press +(auto spelling correction, auto completion and gesture input are disabled). +Most importantly, keyboard in password mode should support ASCII symbols +regardless of the input language. For more details, see <a href="{@docRoot}training/keyboard-input/style.html">Specifying The Input Method Type</a>. </p> </li> @@ -120,9 +120,9 @@ regardless of the input language. For more details, see <li><strong>Provide a key for switching to the next input method</strong> <p> Android allows users to easily switch between all IMEs supported by the platform. - In your IME implementation, set the boolean + In your IME implementation, set the boolean <a href="{@docRoot}guide/topics/text/creating-input-method.html#Switching">supportsSwitchingToNextInputMethod = true</a> - to enable your IME to support the switching mechanism + to enable your IME to support the switching mechanism (so that apps can switch to the next platform-supported IME). </p> </li> diff --git a/docs/html/wear/preview/features/notifications.jd b/docs/html/wear/preview/features/notifications.jd index c84a47002f9d..dcc09709deb3 100644 --- a/docs/html/wear/preview/features/notifications.jd +++ b/docs/html/wear/preview/features/notifications.jd @@ -155,7 +155,7 @@ action in the notification unless a different action is specified using <p>If you have a chat messaging app, your notifications should use <a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>, which is new in Android N. Wear 2.0 uses the chat messages included - in a <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notification + in a <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notification (see <a href="{@docRoot}preview/features/notification-updates.html#style">{@code addMessage()}</a>) to provide a rich chat app-like experience in the expanded notification. @@ -195,7 +195,7 @@ following: <li>Use <a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>. </li> <li>Call the method {@code setAllowGeneratedReplies()} for the notification action. - For more information, see the downloadable + For more information, see the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API reference</a>. </li> <li>Ensure that the notification action has a diff --git a/docs/html/work/cosu.jd b/docs/html/work/cosu.jd index 8bc54d49bc8e..f66006bab1f5 100644 --- a/docs/html/work/cosu.jd +++ b/docs/html/work/cosu.jd @@ -223,7 +223,7 @@ and {@link android.app.Activity#onPause()} </ul> <p> -Starting from Marshmallow, if your app is whitelisted by an EMM using {@link +Starting from Marshmallow, if your app is whitelisted by an EMM using {@link android.app.admin.DevicePolicyManager#setLockTaskPackages setLockTaskPackages}, your activities can automatically start lock task mode when the app is launched. @@ -253,15 +253,15 @@ launch into lock task mode. Non-privileged apps are treated as normal. <li> The default value of the {@link android.R.attr#lockTaskMode} attribute is -normal. When this attribute is set to normal, tasks don’t launch into -{@link android.R.attr#lockTaskMode}, unless {@link android.app.Activity#startLockTask()} +normal. When this attribute is set to normal, tasks don’t launch into +{@link android.R.attr#lockTaskMode}, unless {@link android.app.Activity#startLockTask()} is called. To call {@link android.app.Activity#startLockTask()}, -applications still need to be whitelisted using -{@link android.app.admin.DevicePolicyManager#setLockTaskPackages setLockTaskPackages}, +applications still need to be whitelisted using +{@link android.app.admin.DevicePolicyManager#setLockTaskPackages setLockTaskPackages}, otherwise, the user sees a dialog to approve entering pinned mode. </li> </ul> - + <p>To have your activity <em>automatically</em> enter {@link android.R.attr#lockTaskMode}, change the value of this attribute to <code>if_whitelisted</code>. Doing so causes your app to behave in this manner: @@ -289,7 +289,7 @@ Example XML as follows: <p> Given either of these options, you still need to create a mechanism for calling {@link android.app.Activity#stopLockTask()} so that users can -exit {@link android.R.attr#lockTaskMode}. +exit {@link android.R.attr#lockTaskMode}. </p> <h2 id="create-dpc"> @@ -298,7 +298,7 @@ exit {@link android.R.attr#lockTaskMode}. <p> To manage applications in COSU, you need a DPC running as device -owner to set several policies on the device. +owner to set several policies on the device. </p> <p class="note"> diff --git a/docs/html/work/device-management-policy.jd b/docs/html/work/device-management-policy.jd index d564b8969512..fd0915083c70 100644 --- a/docs/html/work/device-management-policy.jd +++ b/docs/html/work/device-management-policy.jd @@ -14,7 +14,7 @@ parent.link=index.html <li><a href="#ActivateDeviceAdmin">Activate the Device Administrator</a></li> <li><a href="#ImplementDevicePolicyController">Implement the Device Policy Controller</a></li> </ol> - + <!-- related docs (NOT javadocs) --> <h2>You should also read</h2> <ul> diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java index 4f6368c69975..dc1d18f3b2bd 100644 --- a/graphics/java/android/graphics/drawable/VectorDrawable.java +++ b/graphics/java/android/graphics/drawable/VectorDrawable.java @@ -235,7 +235,7 @@ public class VectorDrawable extends Drawable { private final Rect mTmpBounds = new Rect(); public VectorDrawable() { - this(new VectorDrawableState(), null); + this(new VectorDrawableState(null), null); } /** @@ -830,7 +830,8 @@ public class VectorDrawable extends Drawable { private static final int NATIVE_ALLOCATION_SIZE = 316; - // Deep copy for mutate() or implicitly mutate. + // If copy is not null, deep copy the given VectorDrawableState. Otherwise, create a + // native vector drawable tree with an empty root group. public VectorDrawableState(VectorDrawableState copy) { if (copy != null) { mThemeAttrs = copy.mThemeAttrs; @@ -851,8 +852,11 @@ public class VectorDrawable extends Drawable { if (copy.mRootName != null) { mVGTargetsMap.put(copy.mRootName, this); } - onTreeConstructionFinished(); + } else { + mRootGroup = new VGroup(); + createNativeTree(mRootGroup); } + onTreeConstructionFinished(); } private void createNativeTree(VGroup rootGroup) { @@ -870,7 +874,8 @@ public class VectorDrawable extends Drawable { VMRuntime.getRuntime().registerNativeAllocation(NATIVE_ALLOCATION_SIZE); } - + // This should be called every time after a new RootGroup and all its subtrees are created + // (i.e. in constructors of VectorDrawableState and in inflate). void onTreeConstructionFinished() { mRootGroup.setTree(mNativeTree); mAllocationOfAllNodes = mRootGroup.getNativeSize(); @@ -918,11 +923,6 @@ public class VectorDrawable extends Drawable { || super.canApplyTheme(); } - public VectorDrawableState() { - mRootGroup = new VGroup(); - createNativeTree(mRootGroup); - } - @Override public Drawable newDrawable() { return new VectorDrawable(this, null); diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java index 8c20ddcc33ad..f36c00ce8b86 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java @@ -228,7 +228,7 @@ public class AndroidKeyStoreProvider extends Provider { if (exportResult.resultCode != KeyStore.NO_ERROR) { throw (UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain X.509 form of public key") - .initCause(KeyStore.getKeyStoreException(errorCode)); + .initCause(KeyStore.getKeyStoreException(exportResult.resultCode)); } final byte[] x509EncodedPublicKey = exportResult.exportData; diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 5003c6aefb8b..bfcb0e5a01f1 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -234,6 +234,7 @@ bool CanvasContext::isSwapChainStuffed() { } // All signs point to a stuffed swap chain + ATRACE_NAME("swap chain stuffed"); return true; } diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java index ec2d4bc9170f..682512c91708 100644 --- a/media/java/android/media/ImageReader.java +++ b/media/java/android/media/ImageReader.java @@ -512,11 +512,11 @@ public class ImageReader implements AutoCloseable { mAcquiredImages.clear(); nativeClose(); - } - if (mEstimatedNativeAllocBytes > 0) { - VMRuntime.getRuntime().registerNativeFree(mEstimatedNativeAllocBytes); - mEstimatedNativeAllocBytes = 0; + if (mEstimatedNativeAllocBytes > 0) { + VMRuntime.getRuntime().registerNativeFree(mEstimatedNativeAllocBytes); + mEstimatedNativeAllocBytes = 0; + } } } diff --git a/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java b/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java index 86f813e0647a..3629162cdd47 100644 --- a/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java +++ b/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java @@ -24,6 +24,7 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.media.MediaScannerConnection; import android.net.Uri; @@ -50,6 +51,9 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; public class NekoLand extends Activity implements PrefsListener { public static boolean DEBUG = false; @@ -98,7 +102,19 @@ public class NekoLand extends Activity implements PrefsListener { cats[i] = Cat.create(this); } } else { - cats = mPrefs.getCats().toArray(new Cat[0]); + final float[] hsv = new float[3]; + List<Cat> list = mPrefs.getCats(); + Collections.sort(list, new Comparator<Cat>() { + @Override + public int compare(Cat cat, Cat cat2) { + Color.colorToHSV(cat.getBodyColor(), hsv); + float bodyH1 = hsv[0]; + Color.colorToHSV(cat2.getBodyColor(), hsv); + float bodyH2 = hsv[0]; + return Float.compare(bodyH1, bodyH2); + } + }); + cats = list.toArray(new Cat[0]); } mAdapter.setCats(cats); return cats.length; diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index a3070bddd0f8..78b99274e444 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -484,6 +484,8 @@ public class ExternalStorageProvider extends DocumentsProvider { @Override public void deleteDocument(String docId) throws FileNotFoundException { final File file = getFileForDocId(docId); + final File visibleFile = getFileForDocId(docId, true); + final boolean isDirectory = file.isDirectory(); if (isDirectory) { FileUtils.deleteContents(file); @@ -492,7 +494,6 @@ public class ExternalStorageProvider extends DocumentsProvider { throw new IllegalStateException("Failed to delete " + file); } - final File visibleFile = getFileForDocId(docId, true); if (visibleFile != null) { final ContentResolver resolver = getContext().getContentResolver(); final Uri externalUri = MediaStore.Files.getContentUri("external"); diff --git a/packages/Keyguard/src/com/android/keyguard/NumPadKey.java b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java index 2ff7e121721a..1518bdced99a 100644 --- a/packages/Keyguard/src/com/android/keyguard/NumPadKey.java +++ b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java @@ -23,6 +23,7 @@ import android.os.SystemClock; import android.util.AttributeSet; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -53,8 +54,7 @@ public class NumPadKey extends ViewGroup { if (mTextView != null && mTextView.isEnabled()) { mTextView.append(Character.forDigit(mDigit, 10)); } - userActivity(); - doHapticKeyClick(); + userActivity();; } }; @@ -126,6 +126,14 @@ public class NumPadKey extends ViewGroup { } @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + doHapticKeyClick(); + } + return super.onTouchEvent(event); + } + + @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); diff --git a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java index 579116852cf3..21116b89e73b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java @@ -26,6 +26,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources.Theme; import android.content.res.TypedArray; import android.net.Uri; +import android.provider.Settings.Global; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; @@ -92,6 +93,9 @@ public class HelpUtils { */ public static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem, String helpUriString, String backupContext) { + if (Global.getInt(activity.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) { + return false; + } if (TextUtils.isEmpty(helpUriString)) { // The help url string is empty or null, so set the help menu item to be invisible. helpMenuItem.setVisible(false); @@ -129,6 +133,9 @@ public class HelpUtils { public static Intent getHelpIntent(Context context, String helpUriString, String backupContext) { + if (Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) { + return null; + } // Try to handle as Intent Uri, otherwise just treat as Uri. try { Intent intent = Intent.parseUri(helpUriString, diff --git a/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java b/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java index d368de93e263..151e0eafd96d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java +++ b/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java @@ -16,18 +16,11 @@ package com.android.settingslib; import android.content.Context; -import android.net.wifi.WifiManager; import android.os.SystemProperties; import android.telephony.CarrierConfigManager; public class TetherUtil { - public static boolean setWifiTethering(boolean enable, Context context) { - final WifiManager wifiManager = - (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - return wifiManager.setWifiApEnabled(null, enable); - } - private static boolean isEntitlementCheckRequired(Context context) { final CarrierConfigManager configManager = (CarrierConfigManager) context .getSystemService(Context.CARRIER_CONFIG_SERVICE); diff --git a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java index 78d7c569fccd..a99e66873958 100644 --- a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java @@ -20,6 +20,7 @@ import com.android.settingslib.R; import android.content.Context; import android.content.res.Resources; +import android.hardware.display.DisplayManager; import android.os.AsyncTask; import android.os.RemoteException; import android.util.DisplayMetrics; @@ -95,7 +96,9 @@ public class DisplayDensityUtils { } final Resources res = context.getResources(); - final DisplayMetrics metrics = res.getDisplayMetrics(); + final DisplayMetrics metrics = new DisplayMetrics(); + context.getDisplay().getRealMetrics(metrics); + final int currentDensity = metrics.densityDpi; int currentDensityIndex = -1; diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java index b9c758cbbc59..e70cc29a7744 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java @@ -27,6 +27,7 @@ import android.graphics.drawable.Icon; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; +import android.provider.Settings.Global; import android.text.TextUtils; import android.util.Log; import android.util.Pair; @@ -115,6 +116,8 @@ public class TileUtils { public static List<DashboardCategory> getCategories(Context context, HashMap<Pair<String, String>, Tile> cache) { final long startTime = System.currentTimeMillis(); + boolean setup = Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0) + != 0; ArrayList<Tile> tiles = new ArrayList<>(); UserManager userManager = UserManager.get(context); for (UserHandle user : userManager.getUserProfiles()) { @@ -127,7 +130,9 @@ public class TileUtils { getTilesForAction(context, user, MANUFACTURER_SETTINGS, cache, MANUFACTURER_DEFAULT_CATEGORY, tiles, false); } - getTilesForAction(context, user, EXTRA_SETTINGS_ACTION, cache, null, tiles, false); + if (setup) { + getTilesForAction(context, user, EXTRA_SETTINGS_ACTION, cache, null, tiles, false); + } } HashMap<String, DashboardCategory> categoryMap = new HashMap<>(); for (Tile tile : tiles) { diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 2efefb3bc1aa..f1789ea03682 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -142,7 +142,7 @@ <activity android:name=".BugreportWarningActivity" - android:theme="@android:style/Theme.Material.Light.Dialog.Alert" + android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" android:finishOnCloseSystemDialogs="true" android:excludeFromRecents="true" android:exported="false" /> diff --git a/packages/Shell/res/layout/confirm_repeat.xml b/packages/Shell/res/layout/confirm_repeat.xml index ad90af186c05..9f1d53e7799a 100644 --- a/packages/Shell/res/layout/confirm_repeat.xml +++ b/packages/Shell/res/layout/confirm_repeat.xml @@ -18,10 +18,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingStart="16dip" - android:paddingEnd="16dip" - android:paddingTop="8dip" - android:paddingBottom="16dip" + android:paddingStart="24dip" + android:paddingEnd="24dip" + android:paddingTop="24dip" + android:paddingBottom="8dip" android:orientation="vertical" android:keepScreenOn="true"> <ScrollView diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml index 3d6643d8b0a0..5dfac95e3527 100644 --- a/packages/Shell/res/values/strings.xml +++ b/packages/Shell/res/values/strings.xml @@ -25,8 +25,8 @@ <!-- Content notification indicating a bugreport is being updated before it can be shared, asking the user to wait [CHAR LIMIT=50] --> <string name="bugreport_updating_wait">Please wait\u2026</string> - <!-- Text of notification indicating that swipe left will share the captured bugreport. [CHAR LIMIT=100] --> - <string name="bugreport_finished_text" product="watch">Swipe left to share your bug report</string> + <!-- Text of notification indicating that bugreport will appear on the phone. [CHAR LIMIT=100] --> + <string name="bugreport_finished_text" product="watch">The bug report will appear on the phone shortly</string> <!-- Text of notification indicating that tapping will share the captured bugreport. [CHAR LIMIT=100] --> <string name="bugreport_finished_text" product="default">Tap to share your bug report</string> <!-- Text of notification indicating that swipe left will share the captured bugreport, but giving user the option to wait for the screenshot. [CHAR LIMIT=100] --> diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index 6bc4df71fc5c..f04df4b64f84 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -212,6 +212,8 @@ public class BugreportProgressService extends Service { private static final Bundle sNotificationBundle = new Bundle(); + private boolean mIsWatch; + @Override public void onCreate() { mContext = getApplicationContext(); @@ -225,6 +227,9 @@ public class BugreportProgressService extends Service { Log.w(TAG, "Could not create directory " + mScreenshotsDir); } } + final Configuration conf = mContext.getResources().getConfiguration(); + mIsWatch = (conf.uiMode & Configuration.UI_MODE_TYPE_MASK) == + Configuration.UI_MODE_TYPE_WATCH; } @Override @@ -439,56 +444,68 @@ public class BugreportProgressService extends Service { return; } + if (info.finished) { + Log.w(TAG, "Not sending progress notification because bugreport has finished already (" + + info + ")"); + return; + } + final NumberFormat nf = NumberFormat.getPercentInstance(); nf.setMinimumFractionDigits(2); nf.setMaximumFractionDigits(2); final String percentageText = nf.format((double) info.progress / info.max); - final Action cancelAction = new Action.Builder(null, mContext.getString( - com.android.internal.R.string.cancel), newCancelIntent(mContext, info)).build(); - final Intent infoIntent = new Intent(mContext, BugreportProgressService.class); - infoIntent.setAction(INTENT_BUGREPORT_INFO_LAUNCH); - infoIntent.putExtra(EXTRA_ID, info.id); - final PendingIntent infoPendingIntent = - PendingIntent.getService(mContext, info.id, infoIntent, - PendingIntent.FLAG_UPDATE_CURRENT); - final Action infoAction = new Action.Builder(null, - mContext.getString(R.string.bugreport_info_action), - infoPendingIntent).build(); - final Intent screenshotIntent = new Intent(mContext, BugreportProgressService.class); - screenshotIntent.setAction(INTENT_BUGREPORT_SCREENSHOT); - screenshotIntent.putExtra(EXTRA_ID, info.id); - PendingIntent screenshotPendingIntent = mTakingScreenshot ? null : PendingIntent - .getService(mContext, info.id, screenshotIntent, - PendingIntent.FLAG_UPDATE_CURRENT); - final Action screenshotAction = new Action.Builder(null, - mContext.getString(R.string.bugreport_screenshot_action), - screenshotPendingIntent).build(); - - final String title = mContext.getString(R.string.bugreport_in_progress_title, info.id); + + String title = mContext.getString(R.string.bugreport_in_progress_title, info.id); + + // TODO: Remove this workaround when notification progress is implemented on Wear. + if (mIsWatch) { + nf.setMinimumFractionDigits(0); + nf.setMaximumFractionDigits(0); + final String watchPercentageText = nf.format((double) info.progress / info.max); + title = title + "\n" + watchPercentageText; + } final String name = info.name != null ? info.name : mContext.getString(R.string.bugreport_unnamed); - final Notification notification = newBaseNotification(mContext) + final Notification.Builder builder = newBaseNotification(mContext) .setContentTitle(title) .setTicker(title) .setContentText(name) .setProgress(info.max, info.progress, false) - .setOngoing(true) - .setContentIntent(infoPendingIntent) - .setActions(infoAction, screenshotAction, cancelAction) - .build(); - - if (info.finished) { - Log.w(TAG, "Not sending progress notification because bugreport has finished already (" - + info + ")"); - return; + .setOngoing(true); + + // Wear bugreport doesn't need the bug info dialog, screenshot and cancel action. + if (!mIsWatch) { + final Action cancelAction = new Action.Builder(null, mContext.getString( + com.android.internal.R.string.cancel), newCancelIntent(mContext, info)).build(); + final Intent infoIntent = new Intent(mContext, BugreportProgressService.class); + infoIntent.setAction(INTENT_BUGREPORT_INFO_LAUNCH); + infoIntent.putExtra(EXTRA_ID, info.id); + final PendingIntent infoPendingIntent = + PendingIntent.getService(mContext, info.id, infoIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + final Action infoAction = new Action.Builder(null, + mContext.getString(R.string.bugreport_info_action), + infoPendingIntent).build(); + final Intent screenshotIntent = new Intent(mContext, BugreportProgressService.class); + screenshotIntent.setAction(INTENT_BUGREPORT_SCREENSHOT); + screenshotIntent.putExtra(EXTRA_ID, info.id); + PendingIntent screenshotPendingIntent = mTakingScreenshot ? null : PendingIntent + .getService(mContext, info.id, screenshotIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + final Action screenshotAction = new Action.Builder(null, + mContext.getString(R.string.bugreport_screenshot_action), + screenshotPendingIntent).build(); + builder.setContentIntent(infoPendingIntent) + .setActions(infoAction, screenshotAction, cancelAction); } + if (DEBUG) { Log.d(TAG, "Sending 'Progress' notification for id " + info.id + " (pid " + info.pid + "): " + percentageText); } - sendForegroundabledNotification(info.id, notification); + sendForegroundabledNotification(info.id, builder.build()); } private void sendForegroundabledNotification(int id, Notification notification) { @@ -854,10 +871,7 @@ public class BugreportProgressService extends Service { // Stop running on foreground, otherwise share notification cannot be dismissed. stopForegroundWhenDone(id); - final Configuration conf = mContext.getResources().getConfiguration(); - if ((conf.uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_WATCH) { - triggerLocalNotification(mContext, info); - } + triggerLocalNotification(mContext, info); } /** diff --git a/packages/SystemUI/res/drawable/recents_stack_action_background.xml b/packages/SystemUI/res/drawable/recents_stack_action_background.xml new file mode 100644 index 000000000000..2a40dd0ec613 --- /dev/null +++ b/packages/SystemUI/res/drawable/recents_stack_action_background.xml @@ -0,0 +1,25 @@ +<!-- +Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="?android:attr/colorControlHighlight"> + <item android:id="@android:id/mask"> + <shape> + <corners android:radius="@dimen/recents_task_view_rounded_corners_radius" /> + <solid android:color="@android:color/white" /> + </shape> + </item> +</ripple>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_stack_action_button.xml b/packages/SystemUI/res/layout/recents_stack_action_button.xml index 43b3de1a0244..541000b78f8b 100644 --- a/packages/SystemUI/res/layout/recents_stack_action_button.xml +++ b/packages/SystemUI/res/layout/recents_stack_action_button.xml @@ -31,6 +31,6 @@ android:shadowDy="2" android:shadowRadius="5" android:fontFamily="sans-serif-medium" - android:background="?android:selectableItemBackground" + android:background="@drawable/recents_stack_action_background" android:visibility="invisible" android:forceHasOverlappingRendering="false" /> diff --git a/packages/SystemUI/res/values-af/config.xml b/packages/SystemUI/res/values-af/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-af/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 536a50b1a3a6..847bdb14ee53 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Swerwing"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g>-limiet"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> waarskuwing"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Werkmodus"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Aandbeligting"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Aandbeligting is aan, tik om af te skakel"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Aandbeligting is af, tik om aan te skakel"</string> <string name="recents_empty_message" msgid="808480104164008572">"Geen onlangse items nie"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Jy het alles toegemaak"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string> diff --git a/packages/SystemUI/res/values-am/config.xml b/packages/SystemUI/res/values-am/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-am/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 2c13ff158482..1d7b2238a797 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"ኤሠቲ ኢ"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"á‹áˆ‚ብን በማዛወሠላá‹"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ገደብ"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"የ<xliff:g id="DATA_LIMIT">%s</xliff:g> ማስጠንቀቂያ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"የሥራ áˆáŠá‰³"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"የáˆáˆ½á‰µ ብáˆáˆƒáŠ•"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"የáˆáˆ½á‰µ ብáˆáˆƒáŠ• በáˆá‰·áˆá£ ለማጥá‹á‰µ መታ ያድáˆáŒ‰"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"የáˆáˆ½á‰µ ብáˆáˆƒáŠ• ጠáቷáˆá£ ለማብራት መታ ያድáˆáŒ‰"</string> <string name="recents_empty_message" msgid="808480104164008572">"áˆáŠ•áˆ á‹¨á‰…áˆá‰¥ ጊዜ ንጥሎች የሉáˆ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"áˆáˆ‰áŠ•áˆ áŠáŒˆáˆ አጽድተዋáˆ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተáŒá‰ ሪያ መረጃ"</string> diff --git a/packages/SystemUI/res/values-ar/config.xml b/packages/SystemUI/res/values-ar/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ar/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 3bcd0a285234..3090efe181c7 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -149,6 +149,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"شبكة الجيل الرابع"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"شبكة الجيل الرابع أو Ø£ØØ¯Ø«"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"تجوال"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -326,6 +327,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"قيد <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ØªØØ°ÙŠØ± <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"وضع العمل"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"إضاءة ليلية"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"الإضاءة الليلية قيد العمل، انقر لإيقاÙها."</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"الإضاءة الليلية قيد Ø§Ù„Ø¥ÙŠÙ‚Ø§ÙØŒ انقر لتشغيلها."</string> <string name="recents_empty_message" msgid="808480104164008572">"ليست هناك عناصر تم استخدامها مؤخرًا"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"لقد Ù…ØÙˆØªÙŽ ÙƒÙ„ شيء"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string> diff --git a/packages/SystemUI/res/values-az-rAZ/config.xml b/packages/SystemUI/res/values-az-rAZ/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-az-rAZ/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml index a129a43a0853..8a1cda4f7f02 100644 --- a/packages/SystemUI/res/values-az-rAZ/strings.xml +++ b/packages/SystemUI/res/values-az-rAZ/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rominq"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> xÉ™bÉ™rdarlığı"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"İş rejimi"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Son elementlÉ™r yoxdur"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"HÉ™rÅŸeyi tÉ™mizlÉ™diniz"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"TÉ™tbiq haqqında"</string> diff --git a/packages/SystemUI/res/values-bg/config.xml b/packages/SystemUI/res/values-bg/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-bg/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index f34130e5fd05..177826fd1ea8 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роуминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничение от <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Работен режим"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ÐÑма Ñкорошни елементи"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ИзчиÑтихте вÑичко"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° приложението"</string> diff --git a/packages/SystemUI/res/values-bn-rBD/config.xml b/packages/SystemUI/res/values-bn-rBD/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-bn-rBD/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml index 93207c418ee8..a9dc759190de 100644 --- a/packages/SystemUI/res/values-bn-rBD/strings.xml +++ b/packages/SystemUI/res/values-bn-rBD/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"রোমিং"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"সীমা <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> সতরà§à¦•তা"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"কাজের মোড"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"কোনো সামà§à¦ªà§à¦°à¦¤à¦¿à¦• আইটেম নেই"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"আপনি সবকিছৠসাফ করেছেন"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশানের তথà§à¦¯"</string> diff --git a/packages/SystemUI/res/values-ca/config.xml b/packages/SystemUI/res/values-ca/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ca/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index f680f9dd9d92..14517da259ca 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinerà ncia"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Vora"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"LÃmit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertiment: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode de feina"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"No hi ha cap element recent"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ho has esborrat tot"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string> diff --git a/packages/SystemUI/res/values-cs/config.xml b/packages/SystemUI/res/values-cs/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-cs/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 8a290e438592..2f74c55ba1f3 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -324,6 +326,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"UpozornÄ›nà pÅ™i <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Pracovnà režim"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Žádné nedávné položky"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"VÅ¡e je vymazáno"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string> diff --git a/packages/SystemUI/res/values-da/config.xml b/packages/SystemUI/res/values-da/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-da/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 8ebf9fd5dd16..cdb731729a9f 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"Over 4G"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Grænse: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel ved <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbejdstilstand"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ingen nye elementer"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har ryddet alt"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string> diff --git a/packages/SystemUI/res/values-de/config.xml b/packages/SystemUI/res/values-de/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-de/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 5a0bc1093300..cddd2ef1b44f 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> Datenlimit"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Warnung für <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbeitsmodus"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Keine kürzlich verwendeten Elemente"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du hast alles gelöscht"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string> diff --git a/packages/SystemUI/res/values-el/config.xml b/packages/SystemUI/res/values-el/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-el/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 8f563307bd8c..9f6478cb4353 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ΠεÏιαγωγή"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ÎŒÏιο <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Î Ïοειδοποίηση για <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ΛειτουÏγία εÏγασίας"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Δεν υπάÏχουν Ï€Ïόσφατα στοιχεία"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Έχει γίνει εκκαθάÏιση όλων των στοιχείων"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ΠληÏοφοÏίες εφαÏμογής"</string> diff --git a/packages/SystemUI/res/values-en-rAU/config.xml b/packages/SystemUI/res/values-en-rAU/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-en-rAU/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index beb29b7a488e..a89afb626b2b 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Night Light on, tap to turn off"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Night Light off, tap to turn on"</string> <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> diff --git a/packages/SystemUI/res/values-en-rGB/config.xml b/packages/SystemUI/res/values-en-rGB/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-en-rGB/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index beb29b7a488e..a89afb626b2b 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Night Light on, tap to turn off"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Night Light off, tap to turn on"</string> <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> diff --git a/packages/SystemUI/res/values-en-rIN/config.xml b/packages/SystemUI/res/values-en-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-en-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index beb29b7a488e..a89afb626b2b 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Night Light on, tap to turn off"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Night Light off, tap to turn on"</string> <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> diff --git a/packages/SystemUI/res/values-es-rUS/config.xml b/packages/SystemUI/res/values-es-rUS/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-es-rUS/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index d81f7cdd75ae..69db6dc0b6f9 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"LÃmite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabajo"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Todo borrado"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string> diff --git a/packages/SystemUI/res/values-es/config.xml b/packages/SystemUI/res/values-es/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-es/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 902a676bfd5b..c255669744ac 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinerancia"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Tipo Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"LÃmite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabajo"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Has rechazado todo"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string> diff --git a/packages/SystemUI/res/values-et-rEE/config.xml b/packages/SystemUI/res/values-et-rEE/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-et-rEE/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml index fd5115243208..38c1ed43f86c 100644 --- a/packages/SystemUI/res/values-et-rEE/strings.xml +++ b/packages/SystemUI/res/values-et-rEE/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rändlus"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Serv"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limiit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hoiatus"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Töörežiim"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Hiljutisi üksusi pole"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Olete kõik ära kustutanud"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduste teave"</string> diff --git a/packages/SystemUI/res/values-eu-rES/config.xml b/packages/SystemUI/res/values-eu-rES/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-eu-rES/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml index 28804015f111..614aa0bf2a36 100644 --- a/packages/SystemUI/res/values-eu-rES/strings.xml +++ b/packages/SystemUI/res/values-eu-rES/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Ibiltaritza"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Muga: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Abisua: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Lan modua"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ez dago azkenaldi honetako ezer"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Dena garbitu duzu"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Aplikazioaren informazioa"</string> diff --git a/packages/SystemUI/res/values-fa/config.xml b/packages/SystemUI/res/values-fa/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-fa/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index ab6b5255116e..7ce3fce5b6f2 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+‎"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+‎"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"رومینگ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> Ù…ØØ¯ÙˆØ¯ÛŒØª"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"هشدار <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ØØ§Ù„ت کار"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"نور شب"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"نور شب روشن است، برای خاموش‌کردن آن ضربه بزنید"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"نور شب خاموش است، برای روشن‌شدن آن ضربه بزنید"</string> <string name="recents_empty_message" msgid="808480104164008572">"بدون موارد اخیر"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"همه‌چیز را پاک کرده‌اید"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string> diff --git a/packages/SystemUI/res/values-fi/config.xml b/packages/SystemUI/res/values-fi/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-fi/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index c91d3cbf0801..e588a26ba8c1 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"kiintiö <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> – varoitus"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Työtila"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Yövalo"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Yövalo on käytössä. Poista se käytöstä koskettamalla."</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Yövalo ei ole käytössä. Ota se käyttöön koskettamalla."</string> <string name="recents_empty_message" msgid="808480104164008572">"Ei viimeaikaisia kohteita"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Kaikki on hoidettu."</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/config.xml b/packages/SystemUI/res/values-fr-rCA/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-fr-rCA/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 5efe3a08d9eb..320385ac09f6 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinérance"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode Travail"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string> diff --git a/packages/SystemUI/res/values-fr/config.xml b/packages/SystemUI/res/values-fr/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-fr/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index f59b456dfc33..7912f2578102 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinérance"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> au maximum"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode Travail"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé."</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Infos application"</string> diff --git a/packages/SystemUI/res/values-gl-rES/config.xml b/packages/SystemUI/res/values-gl-rES/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-gl-rES/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml index 27a3eb32940e..7f511f5aa393 100644 --- a/packages/SystemUI/res/values-gl-rES/strings.xml +++ b/packages/SystemUI/res/values-gl-rES/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinerancia"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"LÃmite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de traballo"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Non hai elementos recentes"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Borraches todo"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información da aplicación"</string> diff --git a/packages/SystemUI/res/values-gu-rIN/config.xml b/packages/SystemUI/res/values-gu-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-gu-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml index f13436c6f4a2..25e281319317 100644 --- a/packages/SystemUI/res/values-gu-rIN/strings.xml +++ b/packages/SystemUI/res/values-gu-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"રોમિંગ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> મરà«àª¯àª¾àª¦àª¾"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ચેતવણી"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"કારà«àª¯ મોડ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"કોઇ તાજેતરની આઇટમà«àª¸ નથી"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"તમે બધà«àª‚ સાફ કરà«àª¯à«àª‚"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"àªàªªà«àª²àª¿àª•ેશન માહિતી"</string> diff --git a/packages/SystemUI/res/values-hi/config.xml b/packages/SystemUI/res/values-hi/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-hi/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 6f4e519deade..80c9a621f28f 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिंग"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"किनारा"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कारà¥à¤¯ मोड"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"हाल ही का कोई आइटम नहीं"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपने सब कà¥à¤› साफ़ कर दिया है"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"à¤à¤ªà¥â€à¤²à¤¿à¤•ेशन जानकारी"</string> diff --git a/packages/SystemUI/res/values-hr/config.xml b/packages/SystemUI/res/values-hr/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-hr/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 0a8a788a4307..2aa649956cb6 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -146,6 +146,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G i viÅ¡e"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"OgraniÄenje od <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"NaÄin rada"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Izbrisali ste sve"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string> diff --git a/packages/SystemUI/res/values-hu/config.xml b/packages/SystemUI/res/values-hu/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-hu/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index b4643ceae646..030cafc24270 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Barangolás"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> korlát"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Figyelem! <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Munka mód"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Nincsenek mostanában használt elemek"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Mindent törölt"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string> diff --git a/packages/SystemUI/res/values-hy-rAM/config.xml b/packages/SystemUI/res/values-hy-rAM/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-hy-rAM/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index e0311118bd7f..11f5c6a12c78 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Ռոումինգ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ÕÕ¡Õ°Õ´Õ¡Õ¶Õ¡Õ¹Õ¡ÖƒÕ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> Õ¦Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ô±Õ·ÕÕ¡Õ¿Õ¡Õ¶Ö„Õ¡ÕµÕ«Õ¶ Õ¼Õ¥ÕªÕ«Õ´"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ÕŽÕ¥Ö€Õ»Õ«Õ¶ Õ¿Õ¡Ö€Ö€Õ¥Ö€ Õ¹Õ¯Õ¡Õ¶"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ô´Õ¸Ö‚Ö„ Õ»Õ¶Õ»Õ¥Õ¬ Õ¥Ö„ Õ¡Õ´Õ¥Õ¶Õ¨"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Õ€Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ« Õ´Õ¡Õ½Õ«Õ¶"</string> diff --git a/packages/SystemUI/res/values-in/config.xml b/packages/SystemUI/res/values-in/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-in/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 13f9a15bbeec..5b80343bfbbe 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Batas <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Peringatan <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode kerja"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Cahaya Malam"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Cahaya Malam hidup, ketuk untuk mematikan"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Cahaya Malam mati, ketuk untuk menyalakan"</string> <string name="recents_empty_message" msgid="808480104164008572">"Tidak ada item baru-baru ini"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda sudah menghapus semua"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string> diff --git a/packages/SystemUI/res/values-is-rIS/config.xml b/packages/SystemUI/res/values-is-rIS/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-is-rIS/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml index aabcc7642368..61a30baf02e0 100644 --- a/packages/SystemUI/res/values-is-rIS/strings.xml +++ b/packages/SystemUI/res/values-is-rIS/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Reiki"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hámark"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> viðvörun"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Vinnustilling"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Engin nýleg atriði"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Þú hefur hreinsað allt"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Forritsupplýsingar"</string> diff --git a/packages/SystemUI/res/values-it/config.xml b/packages/SystemUI/res/values-it/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-it/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index a7ce343c0cc2..2e0684d92bc5 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +321,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite di <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avviso <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modalità Lavoro"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luminosità notturna"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Luminosità notturna attiva; tocca per disattivarla"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Luminosità notturna non attiva; tocca per attivarla"</string> <string name="recents_empty_message" msgid="808480104164008572">"Nessun elemento recente"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hai cancellato tutto"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string> diff --git a/packages/SystemUI/res/values-iw/config.xml b/packages/SystemUI/res/values-iw/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-iw/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 1702926fa417..4afad7f01518 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -147,6 +147,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"+4G"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"+LTE"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"× ×“×™×“×”"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"קצה"</string> @@ -322,6 +323,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"הגבלה של <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"×זהרה - <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"מצב עבודה"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"ת×ורת לילה"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"ת×ורת לילה פועלת, הקש כדי לכבות"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"ת×ורת לילה כבויה, הקש כדי להפעיל"</string> <string name="recents_empty_message" msgid="808480104164008572">"×ין ×¤×¨×™×˜×™× ××—×¨×•× ×™×"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"מחקת הכול"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על ×”×פליקציה"</string> diff --git a/packages/SystemUI/res/values-ja/config.xml b/packages/SystemUI/res/values-ja/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ja/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index eebd09f058cc..7f990f872118 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ãƒãƒ¼ãƒŸãƒ³ã‚°ä¸"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上é™: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"è¦å‘Š: 上é™ã¯<xliff:g id="DATA_LIMIT">%s</xliff:g>ã§ã™"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work モード"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"最近ã®ã‚¿ã‚¹ã‚¯ã¯ã‚りã¾ã›ã‚“"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’消去ã—ã¾ã—ãŸ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ã‚¢ãƒ—ãƒªæƒ…å ±"</string> diff --git a/packages/SystemUI/res/values-ka-rGE/config.xml b/packages/SystemUI/res/values-ka-rGE/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ka-rGE/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml index d066bd348df9..66e3c504b8c8 100644 --- a/packages/SystemUI/res/values-ka-rGE/strings.xml +++ b/packages/SystemUI/res/values-ka-rGE/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"რáƒáƒ£áƒ›áƒ˜áƒœáƒ’ი"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ლიმიტი: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> გáƒáƒ¤áƒ თხილებáƒ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"სáƒáƒ›áƒ¡áƒáƒ®áƒ£áƒ ის რეჟიმი"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ბáƒáƒšáƒáƒ¡ გáƒáƒ›áƒáƒ§áƒ”ნებული ერთეულები áƒáƒ áƒáƒ ის"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ყველáƒáƒ¤áƒ”რი გáƒáƒ¡áƒ£áƒ¤áƒ—áƒáƒ•დáƒ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ შესáƒáƒ®áƒ”ბ"</string> diff --git a/packages/SystemUI/res/values-kk-rKZ/config.xml b/packages/SystemUI/res/values-kk-rKZ/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-kk-rKZ/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml index 7d089508a056..0732e338a3c0 100644 --- a/packages/SystemUI/res/values-kk-rKZ/strings.xml +++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4Г"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"ҰМД"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA (кодтармен бөлінген бірнеше қол жетімділік)"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роуминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE (Ò±Ñлы байланыÑтар жүйеÑіне арналған жетілдірілген деректер шамалары)"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> шегі"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> туралы еÑкерту"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ð–Ò±Ð¼Ñ‹Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Жақындағы Ñлементтер жоқ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Сіз барлығын өшірдіңіз"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Қолданба туралы ақпарат"</string> diff --git a/packages/SystemUI/res/values-km-rKH/config.xml b/packages/SystemUI/res/values-km-rKH/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-km-rKH/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml index 907b26fa641f..c80b261f160a 100644 --- a/packages/SystemUI/res/values-km-rKH/strings.xml +++ b/packages/SystemUI/res/values-km-rKH/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"រ៉ូ​មីង"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ដែន​កំណážáŸ‹ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ការ​ព្រមាន"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"របៀបការងារ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"មិនមានធាážáž»ážáŸ’មីៗទáŸ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"អ្នកបានជម្រះអ្វីៗទាំងអស់"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"áž–áŸážáŸŒáž˜áž¶áž“​កម្មវិធី"</string> diff --git a/packages/SystemUI/res/values-kn-rIN/config.xml b/packages/SystemUI/res/values-kn-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-kn-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml index f1da673623f0..9b95420064a7 100644 --- a/packages/SystemUI/res/values-kn-rIN/strings.xml +++ b/packages/SystemUI/res/values-kn-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ರೋಮಿಂಗà³"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ಎಡà³à²œà³â€Œ"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ಮಿತಿ"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ಎಚà³à²šà²°à²¿à²•ೆ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ಕೆಲಸದ ಮೋಡà³"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ಯಾವà³à²¦à³‡ ಇತà³à²¤à³€à²šà²¿à²¨ à²à²Ÿà²‚ಗಳಿಲà³à²²"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ನೀವೠಎಲà³à²²à²µà²¨à³à²¨à³‚ ತೆರವà³à²—ೊಳಿಸಿರà³à²µà²¿à²°à²¿"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ಅಪà³à²²à²¿à²•ೇಶನೠಮಾಹಿತಿ"</string> diff --git a/packages/SystemUI/res/values-ko/config.xml b/packages/SystemUI/res/values-ko/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ko/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index b48548adcb5f..df3dd23e3dbf 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G ì´ìƒ"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"로ë°"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"한ë„: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ê²½ê³ "</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"작업 모드"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"최근 í•ëª©ì´ ì—†ìŠµë‹ˆë‹¤."</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ëª¨ë“ í•ëª©ì„ ì‚ì œí–ˆìŠµë‹ˆë‹¤."</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ì• í”Œë¦¬ì¼€ì´ì…˜ ì •ë³´"</string> diff --git a/packages/SystemUI/res/values-ky-rKG/config.xml b/packages/SystemUI/res/values-ky-rKG/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ky-rKG/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml index baed26f1f346..1529b90fc73f 100644 --- a/packages/SystemUI/res/values-ky-rKG/strings.xml +++ b/packages/SystemUI/res/values-ky-rKG/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роуминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> чектөө"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ÑÑкертүү"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Иштөө режими"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ðкыркы колдонмолор жок"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Баарын тазаладыңыз"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Колдонмо жөнүндө маалымат"</string> diff --git a/packages/SystemUI/res/values-lo-rLA/config.xml b/packages/SystemUI/res/values-lo-rLA/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-lo-rLA/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml index 75fa023267d7..66fb010b617c 100644 --- a/packages/SystemUI/res/values-lo-rLA/strings.xml +++ b/packages/SystemUI/res/values-lo-rLA/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ໂຣມມິງ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ຈຳ​àºàº±àº” <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ຄຳ​ເຕືàºàº™ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ໂà»àº”àºàº²àº™à»€àº®àº±àº”ວຽàº"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"à»àºªàº‡àºàº²àº‡àº„ືນ"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"ເປີດà»àºªàº‡àºàº²àº‡àº„ືນຢູ່, à»àº•ະເພື່àºàº›àº´àº”ໄວ້"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"ປິດà»àºªàº‡àºàº²àº‡àº„ືນຢູ່, à»àº•ະເພື່àºà»€àº›àºµàº”ໃຊ້"</string> <string name="recents_empty_message" msgid="808480104164008572">"ບà»à»ˆàº¡àºµàº¥àº²àºàºàº²àº™àº«àº¼à»‰àº²àºªàº¸àº”"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ທ່ານລຶບລ້າງທຸàºàº¢à»ˆàº²àº‡à»àº¥à»‰àº§"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"​ຂà»à»‰â€‹àº¡àº¹àº™â€‹à»àºàº±àºšâ€‹àºžâ€‹àº¥àº´â€‹à»€àº„​ຊັນ"</string> diff --git a/packages/SystemUI/res/values-lt/config.xml b/packages/SystemUI/res/values-lt/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-lt/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index fa843c6c95f2..da259752f695 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Tarptinklinis ryÅ¡ys"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"KraÅ¡tas"</string> @@ -322,6 +324,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limitas: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> įspÄ—jimas"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Darbo režimas"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"NÄ—ra jokių naujausių elementų"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ViskÄ… iÅ¡valÄ—te"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string> diff --git a/packages/SystemUI/res/values-lv/config.xml b/packages/SystemUI/res/values-lv/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-lv/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4b98e29ef109..1db061903421 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -146,6 +146,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Viesabonēšana"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ierobežojums: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> brÄ«dinÄjums"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Darba režīms"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Nav nesenu vienumu"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Visi uzdevumi ir notÄ«rÄ«ti"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"InformÄcija par lietojumprogrammu"</string> diff --git a/packages/SystemUI/res/values-mk-rMK/config.xml b/packages/SystemUI/res/values-mk-rMK/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-mk-rMK/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml index df05c0681f57..51f43819a6a6 100644 --- a/packages/SystemUI/res/values-mk-rMK/strings.xml +++ b/packages/SystemUI/res/values-mk-rMK/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роаминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Лимит: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупредување за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Режим на работа"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ðема неодамнешни Ñтавки"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ИÑчиÑтивте ÑÑ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информации за апликацијата"</string> diff --git a/packages/SystemUI/res/values-ml-rIN/config.xml b/packages/SystemUI/res/values-ml-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ml-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml index db2f30acb2ec..aba404b7f09f 100644 --- a/packages/SystemUI/res/values-ml-rIN/strings.xml +++ b/packages/SystemUI/res/values-ml-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"റോമിംഗàµ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> പരിധി"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨ മോഡàµ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"സമീപകാല ഇനങàµà´™àµ¾ à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"നിങàµà´™àµ¾ à´Žà´²àµà´²à´¾à´‚ മായàµà´šàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ആപàµà´ªàµ വിവരം"</string> diff --git a/packages/SystemUI/res/values-mn-rMN/config.xml b/packages/SystemUI/res/values-mn-rMN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-mn-rMN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index a878c7ff15ed..875b530ef3b7 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -143,6 +143,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Рүүминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -316,6 +318,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> Ñ…Ñзгаар"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> анхааруулга"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ðжлын горим"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Сүүлийн үеийн зүйл байхгүй"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Та бүгдийг нь уÑтгаÑан"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ðппликешны мÑдÑÑлÑл"</string> diff --git a/packages/SystemUI/res/values-mr-rIN/config.xml b/packages/SystemUI/res/values-mr-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-mr-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml index 0abc667228ea..1a725db1a80d 100644 --- a/packages/SystemUI/res/values-mr-rIN/strings.xml +++ b/packages/SystemUI/res/values-mr-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिंग"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> मरà¥à¤¯à¤¾à¤¦à¤¾"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावणी"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कारà¥à¤¯ मोड"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"अलीकडील कोणतेही आयटम नाहीत"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपण सरà¥à¤µà¤•ाही साफ केले"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— माहिती"</string> diff --git a/packages/SystemUI/res/values-ms-rMY/config.xml b/packages/SystemUI/res/values-ms-rMY/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ms-rMY/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml index fa5ba0a56671..f69c6869c079 100644 --- a/packages/SystemUI/res/values-ms-rMY/strings.xml +++ b/packages/SystemUI/res/values-ms-rMY/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Perayauan"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> had"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Amaran <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mod kerja"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Tiada item terbaharu"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda telah mengetepikan semua item"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string> diff --git a/packages/SystemUI/res/values-my-rMM/config.xml b/packages/SystemUI/res/values-my-rMM/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-my-rMM/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml index 5f7478834eb0..f19e61fc9124 100644 --- a/packages/SystemUI/res/values-my-rMM/strings.xml +++ b/packages/SystemUI/res/values-my-rMM/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"မြန်နှုန်းမြင့်လá€á€¯á€„်း"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ကွန်ယက်ပြင်ပဒေá€á€¬á€¡á€žá€¯á€¶á€¸á€•ြုá€á€¼á€„်း"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ကန့်သá€á€ºá€á€»á€€á€º"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> သá€á€á€•ေးá€á€»á€€á€º"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"အလုပ် မုဒ်"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"ညအလင်းရောင်"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"ညအလင်းရောင်ကá€á€¯á€–ွင့်ထားသည်አပá€á€á€ºá€›á€”်á€á€á€¯á€·á€•ါ"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"ညအလင်းရောင်ကá€á€¯á€•á€á€á€ºá€‘ားသည်አဖွင့်ရန်á€á€á€¯á€·á€•ါ"</string> <string name="recents_empty_message" msgid="808480104164008572">"မကြာမီကဖွင့်ထားသည်များ မရှá€á€•ါ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"သင်အားလုံးကá€á€¯ ရှင်းလင်းပြီးပါပြီ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"အပလီကေးရှင်းအင်ဖá€á€¯"</string> diff --git a/packages/SystemUI/res/values-nb/config.xml b/packages/SystemUI/res/values-nb/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-nb/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 63ae35b2021e..d4d42b9eb761 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Grense pÃ¥ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel for <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbeidsmodus"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ingen nylige elementer"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har fjernet alt"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string> diff --git a/packages/SystemUI/res/values-ne-rNP/config.xml b/packages/SystemUI/res/values-ne-rNP/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ne-rNP/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml index 06baec1d0b20..76908d914f2a 100644 --- a/packages/SystemUI/res/values-ne-rNP/strings.xml +++ b/packages/SystemUI/res/values-ne-rNP/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिङ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी दिà¤à¤¦à¥ˆ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कारà¥à¤¯ मोड"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"रातà¥à¤°à¤¿à¤•ो पà¥à¤°à¤•ाश"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"रातà¥à¤°à¤¿à¤•ो पà¥à¤°à¤•ाश सकà¥à¤°à¤¿à¤¯ छ, निषà¥à¤•à¥à¤°à¤¿à¤¯ पारà¥à¤¨ टà¥à¤¯à¤¾à¤ª गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"रातà¥à¤°à¤¿à¤•ो पà¥à¤°à¤•ाश निषà¥à¤•à¥à¤°à¤¿à¤¯ छ, सकà¥à¤°à¤¿à¤¯ गरà¥à¤¨ टà¥à¤¯à¤¾à¤ª गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="recents_empty_message" msgid="808480104164008572">"हालका कà¥à¤¨à¥ˆ पनि वसà¥à¤¤à¥à¤¹à¤°à¥‚ छैननà¥"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"तपाईà¤à¤²à¥‡ सबै कà¥à¤°à¤¾ खाली गरà¥à¤¨à¥à¤à¤à¤•ो छ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— जानकारी"</string> diff --git a/packages/SystemUI/res/values-nl/config.xml b/packages/SystemUI/res/values-nl/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-nl/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 546025591fdf..f6d1c5279d04 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limiet van <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Waarschuwing voor <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Werkmodus"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Geen recente items"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Je hebt alles gewist"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string> diff --git a/packages/SystemUI/res/values-pa-rIN/config.xml b/packages/SystemUI/res/values-pa-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-pa-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml index ee29c466adbf..5b3801ae41bd 100644 --- a/packages/SystemUI/res/values-pa-rIN/strings.xml +++ b/packages/SystemUI/res/values-pa-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ਰੋਮਿੰਗ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ਕਿਨਾਰਾ"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਸੀਮਾ"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਚਿਤਾਵਨੀ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ਕੰਮ ਮੋਡ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ਤà©à¨¸à©€à¨‚ ਸਠਕà©à¨ ਸਾਫ਼ ਕਰ ਦਿੱਤਾ ਹੈ"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"à¨à¨ªà¨²à©€à¨•ੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string> diff --git a/packages/SystemUI/res/values-pl/config.xml b/packages/SystemUI/res/values-pl/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-pl/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 90a0099402bd..96a89f041d33 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -322,6 +324,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ostrzeżenie: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Tryb pracy"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Brak ostatnich elementów"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Wszystko zostaÅ‚o wyczyszczone"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/config.xml b/packages/SystemUI/res/values-pt-rBR/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-pt-rBR/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index b860c099dd27..153f8af4da89 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +321,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Modo noturno"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Modo noturno ativado. Toque para desativar"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Modo noturno desativado. Toque para ativar"</string> <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/config.xml b/packages/SystemUI/res/values-pt-rPT/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-pt-rPT/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 00afbc148b27..e515c6e56467 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz noturna"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Luz noturna ativada; toque para desativar"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Luz noturna desativada; toque para ativar"</string> <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Limpou tudo"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string> diff --git a/packages/SystemUI/res/values-pt/config.xml b/packages/SystemUI/res/values-pt/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-pt/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index b860c099dd27..153f8af4da89 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +321,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Modo noturno"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Modo noturno ativado. Toque para desativar"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Modo noturno desativado. Toque para ativar"</string> <string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string> diff --git a/packages/SystemUI/res/values-ro/config.xml b/packages/SystemUI/res/values-ro/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ro/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 6c0cab283c98..3cda8e4a2d51 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -146,6 +146,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -322,6 +324,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limită de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertizare: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modul de lucru"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Niciun element recent"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"AÈ›i È™ters tot"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"InformaÈ›ii despre aplicaÈ›ie"</string> diff --git a/packages/SystemUI/res/values-ru/config.xml b/packages/SystemUI/res/values-ru/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ru/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index f606f77be23e..e56fd8908924 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роуминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -324,6 +326,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Рабочий режим"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ðедавних приложений нет"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ð’Ñ‹ очиÑтили вÑÑ‘"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ приложении"</string> diff --git a/packages/SystemUI/res/values-si-rLK/config.xml b/packages/SystemUI/res/values-si-rLK/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-si-rLK/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml index 57cc5dfa1be6..30cb18aaffb2 100644 --- a/packages/SystemUI/res/values-si-rLK/strings.xml +++ b/packages/SystemUI/res/values-si-rLK/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"à¶»à·à¶¸à·’à¶‚"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> සීමිà¶"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> අවවà·à¶¯ කිරීම"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"à·€à·à¶© à¶´à·Šâ€à¶»à¶šà·à¶»à¶º"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"මෑචඅයිà¶à¶¸ à¶±à·à¶"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ඔබ සියලු දේ හිස් à¶šà¶» ඇà¶"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"යෙදුම් à¶à·œà¶»à¶à·”රු"</string> diff --git a/packages/SystemUI/res/values-sk/config.xml b/packages/SystemUI/res/values-sk/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sk/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index a96367ed88a2..12fe853e7579 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -147,6 +147,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -324,6 +325,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornenie pri <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Pracovný režim"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"NoÄný režim"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"NoÄný režim je zapnutý (vypnete ho klepnutÃm)"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"NoÄný režim je vypnutý (zapnete ho klepnutÃm)"</string> <string name="recents_empty_message" msgid="808480104164008572">"Žiadne nedávne položky"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vymazali ste vÅ¡etko"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string> diff --git a/packages/SystemUI/res/values-sl/config.xml b/packages/SystemUI/res/values-sl/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sl/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index d2cd947f919a..11e935eae053 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Gostovanje"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -324,6 +326,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Omejitev: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Opozorilo – <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"NaÄin za delo"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ni nedavnih elementov"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vse te poÄistili"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string> diff --git a/packages/SystemUI/res/values-sq-rAL/config.xml b/packages/SystemUI/res/values-sq-rAL/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sq-rAL/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml index 06182b1649ac..274ee1d76c14 100644 --- a/packages/SystemUI/res/values-sq-rAL/strings.xml +++ b/packages/SystemUI/res/values-sq-rAL/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"Lidhje CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Kufiri: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Paralajmërim për kufirin prej <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modaliteti i punës"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Nuk ka asnjë artikull të fundit"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"I ke pastruar të gjitha"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacioni i aplikacionit"</string> diff --git a/packages/SystemUI/res/values-sr/config.xml b/packages/SystemUI/res/values-sr/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sr/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 67292a6cb887..17e3ddbb4d5c 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -146,6 +146,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роминг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничење од <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Упозорење за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Режим рада"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ðема недавних Ñтавки"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ОбриÑали Ñте Ñве"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string> diff --git a/packages/SystemUI/res/values-sv/config.xml b/packages/SystemUI/res/values-sv/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sv/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 6b274936c85c..f2bc4eef36cb 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Gräns: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Varning <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbetsläge"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Listan med de senaste Ã¥tgärderna är tom"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har tömt listan"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string> diff --git a/packages/SystemUI/res/values-sw/config.xml b/packages/SystemUI/res/values-sw/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-sw/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 20cd2aa9ba93..2df876781ec0 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Inatumia data nje mtandao wako wa kawaida"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Ukingo"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"kikomo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Onyo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Hali ya kazi"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Mwanga wa Usiku"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Umewasha hali ya Mwanga wa Usiku, gonga ili uizime"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Umezima hali ya Mwanga wa Usiku, gonga ili uiwashe"</string> <string name="recents_empty_message" msgid="808480104164008572">"Hakuna vipengee vya hivi karibuni"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Umeondoa vipengee vyote"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string> diff --git a/packages/SystemUI/res/values-ta-rIN/config.xml b/packages/SystemUI/res/values-ta-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ta-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml index ea444bf7cf00..e1355ff1e073 100644 --- a/packages/SystemUI/res/values-ta-rIN/strings.xml +++ b/packages/SystemUI/res/values-ta-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ரோமிஙà¯"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> வரமà¯à®ªà¯"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> எசà¯à®šà®°à®¿à®•à¯à®•ை"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"பணிப௠பயனà¯à®®à¯à®±à¯ˆ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"சமீபதà¯à®¤à®¿à®¯ பணிகள௠இலà¯à®²à¯ˆ"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"எலà¯à®²à®¾à®µà®±à¯à®±à¯ˆà®¯à¯à®®à¯ அழிதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ளà¯"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ தகவலà¯"</string> diff --git a/packages/SystemUI/res/values-te-rIN/config.xml b/packages/SystemUI/res/values-te-rIN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-te-rIN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml index 5c9988b7c07c..74d798b57c05 100644 --- a/packages/SystemUI/res/values-te-rIN/strings.xml +++ b/packages/SystemUI/res/values-te-rIN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"రోమింగà±"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"à°Žà°¡à±à°œà±"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> పరిమితి"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> హెచà±à°šà°°à°¿à°•"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"పని మోడà±"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"ఇటీవలి అంశాలౠà°à°µà±€ లేవà±"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"మీరౠఅనà±à°¨à°¿à°‚టినీ తీసివేసారà±"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"à°…à°¨à±à°µà°°à±à°¤à°¨ సమాచారం"</string> diff --git a/packages/SystemUI/res/values-th/config.xml b/packages/SystemUI/res/values-th/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-th/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index f7337187723d..c9631caf4b63 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"โรมมิ่ง"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ขีดจำà¸à¸±à¸” <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"คำเตืà¸à¸™ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"โหมดà¸à¸²à¸£à¸—ำงาน"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"à¹à¸ªà¸‡à¸•à¸à¸™à¸à¸¥à¸²à¸‡à¸„ืน"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"à¹à¸ªà¸‡à¸•à¸à¸™à¸à¸¥à¸²à¸‡à¸„ืนเปิดà¸à¸¢à¸¹à¹ˆ à¹à¸•ะเพื่à¸à¸›à¸´à¸”"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"à¹à¸ªà¸‡à¸•à¸à¸™à¸à¸¥à¸²à¸‡à¸„ืนปิดà¸à¸¢à¸¹à¹ˆ à¹à¸•ะเพื่à¸à¹€à¸›à¸´à¸”"</string> <string name="recents_empty_message" msgid="808480104164008572">"ไม่มีรายà¸à¸²à¸£à¸¥à¹ˆà¸²à¸ªà¸¸à¸”"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"คุณได้ล้างทุà¸à¸à¸¢à¹ˆà¸²à¸‡à¹à¸¥à¹‰à¸§"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้à¸à¸¡à¸¹à¸¥à¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชัน"</string> diff --git a/packages/SystemUI/res/values-tl/config.xml b/packages/SystemUI/res/values-tl/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-tl/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index c5a6dcc2629d..64ba72887feb 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ang limitasyon"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Babala sa <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Walang mga kamakailang item"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Na-clear mo ang lahat"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string> diff --git a/packages/SystemUI/res/values-tr/config.xml b/packages/SystemUI/res/values-tr/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-tr/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index af9c277c3528..69d7136f5717 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Dolaşımda"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Sınır: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> uyarısı"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Çalışma modu"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Yeni öğe yok"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Her ÅŸeyi sildiniz"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string> diff --git a/packages/SystemUI/res/values-uk/config.xml b/packages/SystemUI/res/values-uk/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-uk/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 12a3628f538a..f80813228e2a 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роумінг"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -324,6 +326,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ОбмеженнÑ: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ЗаÑтереженнÑ: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Робочий режим"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Ðемає нещодавніх завдань"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ви очиÑтили вÑе"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ додаток"</string> diff --git a/packages/SystemUI/res/values-ur-rPK/config.xml b/packages/SystemUI/res/values-ur-rPK/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-ur-rPK/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml index 69e196764a45..73e7957b7838 100644 --- a/packages/SystemUI/res/values-ur-rPK/strings.xml +++ b/packages/SystemUI/res/values-ur-rPK/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+‎"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"رومنگ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ØØ¯"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> وارننگ"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"کام موڈ"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"کوئی ØØ§Ù„ÛŒÛ Ø¢Ø¦Ù¹Ù… Ù†Ûیں"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"آپ Ù†Û’ سب Ú©Ú†Ú¾ صا٠کر دیا ÛÛ’"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"ایپلیکیشن Ú©ÛŒ معلومات"</string> diff --git a/packages/SystemUI/res/values-uz-rUZ/config.xml b/packages/SystemUI/res/values-uz-rUZ/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-uz-rUZ/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml index 0a8304546399..a764e23b101a 100644 --- a/packages/SystemUI/res/values-uz-rUZ/strings.xml +++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Cheklov: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ogohlantirish: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ish rejimi"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Hozircha hech narsa yo‘q"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hammasi o‘chirildi"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ilova haqida ma’lumot"</string> diff --git a/packages/SystemUI/res/values-vi/config.xml b/packages/SystemUI/res/values-vi/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-vi/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index d798be65ab2d..e8d8d3ebf59b 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Chuyển vùng"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Cạnh"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Giá»›i hạn <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Cảnh báo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Chế độ là m việc"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"Không có mục gần đây nà o"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Bạn đã xóa má»i ná»™i dung"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/config.xml b/packages/SystemUI/res/values-zh-rCN/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-zh-rCN/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index cfb4873a7bdf..cabe2452fc29 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫游ä¸"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上é™ä¸º<xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g>è¦å‘Š"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模å¼"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"近期没有任何内容"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有内容"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信æ¯"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/config.xml b/packages/SystemUI/res/values-zh-rHK/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-zh-rHK/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index d1f2c922216f..27dfd76f8ebc 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫éŠ"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -320,6 +322,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上é™ç‚º <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> è¦å‘Š"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模å¼"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"æ²’æœ‰æœ€è¿‘é …ç›®"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"æ‚¨å·²æ¸…é™¤æ‰€æœ‰é …ç›®"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程å¼è³‡æ–™"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/config.xml b/packages/SystemUI/res/values-zh-rTW/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-zh-rTW/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index d0288eb1f2ed..8cd08d663c24 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -145,6 +145,8 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <!-- no translation found for accessibility_data_connection_lte_plus (361876866906946007) --> + <skip /> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫éŠä¸"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> @@ -318,6 +320,12 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上é™ç‚º <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> è¦å‘Š"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模å¼"</string> + <!-- no translation found for quick_settings_night_display_label (3577098011487644395) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_on (1814901757887526769) --> + <skip /> + <!-- no translation found for quick_settings_night_display_summary_off (7892102914128777905) --> + <skip /> <string name="recents_empty_message" msgid="808480104164008572">"æœ€è¿‘æ²’æœ‰ä»»ä½•é …ç›®"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有工作"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程å¼è³‡è¨Š"</string> diff --git a/packages/SystemUI/res/values-zu/config.xml b/packages/SystemUI/res/values-zu/config.xml new file mode 100644 index 000000000000..5309563e3986 --- /dev/null +++ b/packages/SystemUI/res/values-zu/config.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string> +</resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 5a562932e2c2..4892c1d16b72 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -145,6 +145,7 @@ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string> <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"I-LTE"</string> + <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"I-LTE+"</string> <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Iyazulazula"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Ekucupheleni"</string> @@ -318,6 +319,9 @@ <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> umkhawulo"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> isexwayiso"</string> <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Imodi yomsebenzi"</string> + <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ukukhanya kwasebusuku"</string> + <string name="quick_settings_night_display_summary_on" msgid="1814901757887526769">"Ukukhanya kwasebusuku kuvuliwe, thepha ukuze uvale"</string> + <string name="quick_settings_night_display_summary_off" msgid="7892102914128777905">"Ukukhanya kwasebusuku kuvaliwe, thepha ukuze uvule"</string> <string name="recents_empty_message" msgid="808480104164008572">"Azikho izinto zakamuva"</string> <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Usule yonke into"</string> <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 134388f6bca2..fa30f49ef7db 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -224,9 +224,25 @@ <!-- Doze: duration to avoid false pickup gestures triggered by notification vibrations --> <integer name="doze_pickup_vibration_threshold">2000</integer> - <!-- Doze: can we assume the pickup sensor includes a proximity check? --> + <!-- Doze: can we assume the pickup sensor includes a proximity check? + This is ignored if doze_pickup_subtype_performs_proximity_check is not empty. + @deprecated: use doze_pickup_subtype_performs_proximity_check instead.--> <bool name="doze_pickup_performs_proximity_check">false</bool> + <!-- Doze: a list of pickup sensor subtypes that perform a proximity check before they trigger. + If not empty, either * or !* must appear to specify the default. + If empty, falls back to doze_pickup_performs_proximity_check. + + Examples: 1,2,3,!* -> subtypes 1,2 and 3 perform the check, all others don't. + !1,!2,* -> subtypes 1 and 2 don't perform the check, all others do. + !8,* -> subtype 8 does not perform the check, all others do + 1,1,* -> illegal, every item may only appear once + 1,!1,* -> illegal, no contradictions allowed + 1,2 -> illegal, need either * or !* + 1,,4a3 -> illegal, no empty or non-numeric terms allowed + --> + <string name="doze_pickup_subtype_performs_proximity_check"></string> + <!-- Doze: pulse parameter - how long does it take to fade in? --> <integer name="doze_pulse_duration_in">900</integer> diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index 39a341216f2c..52b5a54a7621 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -55,7 +55,8 @@ public class SystemUIApplication extends Application { com.android.systemui.media.RingtonePlayer.class, com.android.systemui.keyboard.KeyboardUI.class, com.android.systemui.tv.pip.PipUI.class, - com.android.systemui.shortcut.ShortcutKeyDispatcher.class + com.android.systemui.shortcut.ShortcutKeyDispatcher.class, + com.android.systemui.VendorServices.class }; /** diff --git a/packages/SystemUI/src/com/android/systemui/VendorServices.java b/packages/SystemUI/src/com/android/systemui/VendorServices.java new file mode 100644 index 000000000000..0be6b12fa365 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/VendorServices.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui; + +/** + * Placeholder for any vendor-specific services. + */ +public class VendorServices extends SystemUI { + + @Override + public void start() { + // no-op + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java index 5f1b042636e4..661b347608ed 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java @@ -214,6 +214,10 @@ public class DozeService extends DreamService { } private void requestPulse(final int reason) { + requestPulse(reason, false /* performedProxCheck */); + } + + private void requestPulse(final int reason, boolean performedProxCheck) { if (mHost != null && mDreaming && !mPulsing) { // Let the host know we want to pulse. Wait for it to be ready, then // turn the screen on. When finished, turn the screen off again. @@ -226,10 +230,9 @@ public class DozeService extends DreamService { return; } final long start = SystemClock.uptimeMillis(); - final boolean nonBlocking = reason == DozeLog.PULSE_REASON_SENSOR_PICKUP - && mDozeParameters.getPickupPerformsProxCheck(); - if (nonBlocking) { - // proximity check is only done to capture statistics, continue pulsing + if (performedProxCheck) { + // the caller already performed a successful proximity check; we'll only do one to + // capture statistics, continue pulsing immediately. continuePulsing(reason); } // perform a proximity check @@ -239,7 +242,7 @@ public class DozeService extends DreamService { final boolean isNear = result == RESULT_NEAR; final long end = SystemClock.uptimeMillis(); DozeLog.traceProximityResult(mContext, isNear, end - start, reason); - if (nonBlocking) { + if (performedProxCheck) { // we already continued return; } @@ -540,9 +543,12 @@ public class DozeService extends DreamService { mWakeLock.acquire(); try { if (DEBUG) Log.d(mTag, "onTrigger: " + triggerEventToString(event)); + boolean sensorPerformsProxCheck = false; if (mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) { int subType = (int) event.values[0]; MetricsLogger.action(mContext, MetricsEvent.ACTION_AMBIENT_GESTURE, subType); + sensorPerformsProxCheck = mDozeParameters.getPickupSubtypePerformsProxCheck( + subType); } if (mDebugVibrate) { final Vibrator v = (Vibrator) mContext.getSystemService( @@ -555,7 +561,7 @@ public class DozeService extends DreamService { } mRegistered = false; - requestPulse(mPulseReason); + requestPulse(mPulseReason, sensorPerformsProxCheck); updateListener(); // reregister, this sensor only fires once // reset the notification pulse schedule, but only if we think we were not triggered diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java index 6206cef971b0..ee55a807443b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java @@ -249,6 +249,9 @@ public class QSDetail extends LinearLayout { return; } mQsDetailHeaderSwitch.setChecked(state); + final boolean toggleEnabled = mDetailAdapter != null && mDetailAdapter.getToggleEnabled(); + mQsDetailHeader.setEnabled(toggleEnabled); + mQsDetailHeaderSwitch.setEnabled(toggleEnabled); } private void handleScanStateChanged(boolean state) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index ca853feb1a1f..2fda6eac6e0b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -148,6 +148,9 @@ public abstract class QSTile<TState extends State> { public interface DetailAdapter { CharSequence getTitle(); Boolean getToggleState(); + default boolean getToggleEnabled() { + return true; + } View createDetailView(Context context, View convertView, ViewGroup parent); Intent getSettingsIntent(); void setToggleState(boolean state); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 794610e50f93..f1e8749fb03a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; @@ -208,6 +209,12 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { } @Override + public boolean getToggleEnabled() { + return mController.getBluetoothState() == BluetoothAdapter.STATE_OFF + || mController.getBluetoothState() == BluetoothAdapter.STATE_ON; + } + + @Override public Intent getSettingsIntent() { return BLUETOOTH_SETTINGS; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index a8939100f66d..43d0cf6db854 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -140,8 +140,6 @@ public class RecentsView extends FrameLayout { LayoutInflater inflater = LayoutInflater.from(context); if (RecentsDebugFlags.Static.EnableStackActionButton) { - float cornerRadius = context.getResources().getDimensionPixelSize( - R.dimen.recents_task_view_rounded_corners_radius); mStackActionButton = (TextView) inflater.inflate(R.layout.recents_stack_action_button, this, false); mStackActionButton.setOnClickListener(new View.OnClickListener() { @@ -151,13 +149,6 @@ public class RecentsView extends FrameLayout { } }); addView(mStackActionButton); - mStackActionButton.setClipToOutline(true); - mStackActionButton.setOutlineProvider(new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), cornerRadius); - } - }); } mEmptyView = (TextView) inflater.inflate(R.layout.recents_empty, this, false); addView(mEmptyView); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 71904fa707e2..bd485dd40e0b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -225,6 +225,8 @@ public class KeyguardIndicationController { } KeyguardUpdateMonitorCallback mUpdateMonitor = new KeyguardUpdateMonitorCallback() { + public int mLastSuccessiveErrorMessage = -1; + @Override public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) { boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING @@ -252,6 +254,9 @@ public class KeyguardIndicationController { mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_FP_MSG), TRANSIENT_FP_ERROR_TIMEOUT); } + // Help messages indicate that there was actually a try since the last error, so those + // are not two successive error messages anymore. + mLastSuccessiveErrorMessage = -1; } @Override @@ -263,15 +268,22 @@ public class KeyguardIndicationController { } int errorColor = mContext.getResources().getColor(R.color.system_warning_color, null); if (mStatusBarKeyguardViewManager.isBouncerShowing()) { - mStatusBarKeyguardViewManager.showBouncerMessage(errString, errorColor); + // When swiping up right after receiving a fingerprint error, the bouncer calls + // authenticate leading to the same message being shown again on the bouncer. + // We want to avoid this, as it may confuse the user when the message is too + // generic. + if (mLastSuccessiveErrorMessage != msgId) { + mStatusBarKeyguardViewManager.showBouncerMessage(errString, errorColor); + } } else if (updateMonitor.isDeviceInteractive()) { - showTransientIndication(errString, errorColor); - // We want to keep this message around in case the screen was off - mHandler.removeMessages(MSG_HIDE_TRANSIENT); - hideTransientIndicationDelayed(5000); - } else { - mMessageToShowOnScreenOn = errString; + showTransientIndication(errString, errorColor); + // We want to keep this message around in case the screen was off + mHandler.removeMessages(MSG_HIDE_TRANSIENT); + hideTransientIndicationDelayed(5000); + } else { + mMessageToShowOnScreenOn = errString; } + mLastSuccessiveErrorMessage = msgId; } @Override @@ -293,6 +305,18 @@ public class KeyguardIndicationController { mMessageToShowOnScreenOn = null; } } + + @Override + public void onFingerprintAuthenticated(int userId) { + super.onFingerprintAuthenticated(userId); + mLastSuccessiveErrorMessage = -1; + } + + @Override + public void onFingerprintAuthFailed() { + super.onFingerprintAuthFailed(); + mLastSuccessiveErrorMessage = -1; + } }; BroadcastReceiver mReceiver = new BroadcastReceiver() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java index 1d890d0dde6c..9b3ed33e3158 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java @@ -21,6 +21,7 @@ import android.os.SystemProperties; import android.text.TextUtils; import android.util.Log; import android.util.MathUtils; +import android.util.SparseBooleanArray; import com.android.systemui.R; @@ -39,6 +40,8 @@ public class DozeParameters { private static PulseSchedule sPulseSchedule; + private static IntInOutMatcher sPickupSubtypePerformsProxMatcher; + public DozeParameters(Context context) { mContext = context; } @@ -61,7 +64,20 @@ public class DozeParameters { pw.print(" getPulseSchedule(): "); pw.println(getPulseSchedule()); pw.print(" getPulseScheduleResets(): "); pw.println(getPulseScheduleResets()); pw.print(" getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold()); - pw.print(" getPickupPerformsProxCheck(): "); pw.println(getPickupPerformsProxCheck()); + pw.print(" getPickupSubtypePerformsProxCheck(): ");pw.println( + dumpPickupSubtypePerformsProxCheck()); + } + + private String dumpPickupSubtypePerformsProxCheck() { + // Refresh sPickupSubtypePerformsProxMatcher + getPickupSubtypePerformsProxCheck(0); + + if (sPickupSubtypePerformsProxMatcher == null) { + return "fallback: " + mContext.getResources().getBoolean( + R.bool.doze_pickup_performs_proximity_check); + } else { + return "spec: " + sPickupSubtypePerformsProxMatcher.mSpec; + } } public boolean getDisplayStateSupported() { @@ -106,10 +122,6 @@ public class DozeParameters { return getBoolean("doze.pulse.proxcheck", R.bool.doze_proximity_check_before_pulse); } - public boolean getPickupPerformsProxCheck() { - return getBoolean("doze.pickup.proxcheck", R.bool.doze_pickup_performs_proximity_check); - } - public boolean getPulseOnNotifications() { return getBoolean("doze.pulse.notifications", R.bool.doze_pulse_on_notifications); } @@ -143,6 +155,101 @@ public class DozeParameters { return SystemProperties.get(propName, mContext.getString(resId)); } + public boolean getPickupSubtypePerformsProxCheck(int subType) { + String spec = getString("doze.pickup.proxcheck", + R.string.doze_pickup_subtype_performs_proximity_check); + + if (TextUtils.isEmpty(spec)) { + // Fall back to non-subtype based property. + return mContext.getResources().getBoolean(R.bool.doze_pickup_performs_proximity_check); + } + + if (sPickupSubtypePerformsProxMatcher == null + || !TextUtils.equals(spec, sPickupSubtypePerformsProxMatcher.mSpec)) { + sPickupSubtypePerformsProxMatcher = new IntInOutMatcher(spec); + } + + return sPickupSubtypePerformsProxMatcher.isIn(subType); + } + + + /** + * Parses a spec of the form `1,2,3,!5,*`. The resulting object will match numbers that are + * listed, will not match numbers that are listed with a ! prefix, and will match / not match + * unlisted numbers depending on whether * or !* is present. + * + * * -> match any numbers that are not explicitly listed + * !* -> don't match any numbers that are not explicitly listed + * 2 -> match 2 + * !3 -> don't match 3 + * + * It is illegal to specify: + * - an empty spec + * - a spec containing that are empty, or a lone ! + * - a spec for anything other than numbers or * + * - multiple terms for the same number / multiple *s + */ + public static class IntInOutMatcher { + private static final String WILDCARD = "*"; + private static final char OUT_PREFIX = '!'; + + private final SparseBooleanArray mIsIn; + private final boolean mDefaultIsIn; + final String mSpec; + + public IntInOutMatcher(String spec) { + if (TextUtils.isEmpty(spec)) { + throw new IllegalArgumentException("Spec must not be empty"); + } + + boolean defaultIsIn = false; + boolean foundWildcard = false; + + mSpec = spec; + mIsIn = new SparseBooleanArray(); + + for (String itemPrefixed : spec.split(",", -1)) { + if (itemPrefixed.length() == 0) { + throw new IllegalArgumentException( + "Illegal spec, must not have zero-length items: `" + spec + "`"); + } + boolean isIn = itemPrefixed.charAt(0) != OUT_PREFIX; + String item = isIn ? itemPrefixed : itemPrefixed.substring(1); + + if (itemPrefixed.length() == 0) { + throw new IllegalArgumentException( + "Illegal spec, must not have zero-length items: `" + spec + "`"); + } + + if (WILDCARD.equals(item)) { + if (foundWildcard) { + throw new IllegalArgumentException("Illegal spec, `" + WILDCARD + + "` must not appear multiple times in `" + spec + "`"); + } + defaultIsIn = isIn; + foundWildcard = true; + } else { + int key = Integer.parseInt(item); + if (mIsIn.indexOfKey(key) >= 0) { + throw new IllegalArgumentException("Illegal spec, `" + key + + "` must not appear multiple times in `" + spec + "`"); + } + mIsIn.put(key, isIn); + } + } + + if (!foundWildcard) { + throw new IllegalArgumentException("Illegal spec, must specify either * or !*"); + } + + mDefaultIsIn = defaultIsIn; + } + + public boolean isIn(int value) { + return (mIsIn.get(value, mDefaultIsIn)); + } + } + public static class PulseSchedule { private static final Pattern PATTERN = Pattern.compile("(\\d+?)s", 0); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index 21db64febbe0..a9c47834238f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -321,20 +321,23 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH); if (mSettingsButton.isTunerClick()) { - if (TunerService.isTunerEnabled(mContext)) { - TunerService.showResetRequest(mContext, new Runnable() { - @Override - public void run() { + mHost.startRunnableDismissingKeyguard(() -> post(() -> { + if (TunerService.isTunerEnabled(mContext)) { + TunerService.showResetRequest(mContext, () -> { // Relaunch settings so that the tuner disappears. startSettingsActivity(); - } - }); - } else { - Toast.makeText(getContext(), R.string.tuner_toast, Toast.LENGTH_LONG).show(); - TunerService.setTunerEnabled(mContext, true); - } + }); + } else { + Toast.makeText(getContext(), R.string.tuner_toast, + Toast.LENGTH_LONG).show(); + TunerService.setTunerEnabled(mContext, true); + } + startSettingsActivity(); + + })); + } else { + startSettingsActivity(); } - startSettingsActivity(); } else if (v == mAlarmStatus && mNextAlarm != null) { PendingIntent showIntent = mNextAlarm.getShowIntent(); if (showIntent != null && showIntent.isActivity()) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java index e7e2ac2958aa..08675c4f027c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java @@ -26,6 +26,9 @@ public interface BluetoothController { boolean isBluetoothSupported(); boolean isBluetoothEnabled(); + + int getBluetoothState(); + boolean isBluetoothConnected(); boolean isBluetoothConnecting(); String getLastDeviceName(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java index 014cc4944a74..4f880b446f2c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -49,6 +49,7 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa private CachedBluetoothDevice mLastDevice; private final H mHandler = new H(); + private int mState; public BluetoothControllerImpl(Context context, Looper bgLooper) { mLocalBluetoothManager = LocalBluetoothManager.getInstance(context, null); @@ -120,6 +121,11 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa } @Override + public int getBluetoothState() { + return mState; + } + + @Override public boolean isBluetoothConnected() { return mConnectionState == BluetoothAdapter.STATE_CONNECTED; } @@ -192,7 +198,9 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa @Override public void onBluetoothStateChanged(int bluetoothState) { - mEnabled = bluetoothState == BluetoothAdapter.STATE_ON; + mEnabled = bluetoothState == BluetoothAdapter.STATE_ON + || bluetoothState == BluetoothAdapter.STATE_TURNING_ON; + mState = bluetoothState; mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/phone/DozeParametersTests.java b/packages/SystemUI/tests/src/com/android/systemui/phone/DozeParametersTests.java new file mode 100644 index 000000000000..07334f3b7d25 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/phone/DozeParametersTests.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.phone; + +import com.android.systemui.statusbar.phone.DozeParameters.IntInOutMatcher; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +@SmallTest +public class DozeParametersTests extends AndroidTestCase { + + public void test_inOutMatcher_defaultIn() { + IntInOutMatcher intInOutMatcher = new IntInOutMatcher("*"); + + assertTrue(intInOutMatcher.isIn(1)); + assertTrue(intInOutMatcher.isIn(-1)); + assertTrue(intInOutMatcher.isIn(0)); + } + + public void test_inOutMatcher_defaultOut() { + IntInOutMatcher intInOutMatcher = new IntInOutMatcher("!*"); + + assertFalse(intInOutMatcher.isIn(1)); + assertFalse(intInOutMatcher.isIn(-1)); + assertFalse(intInOutMatcher.isIn(0)); + } + + public void test_inOutMatcher_someIn() { + IntInOutMatcher intInOutMatcher = new IntInOutMatcher("1,2,3,!*"); + + assertTrue(intInOutMatcher.isIn(1)); + assertTrue(intInOutMatcher.isIn(2)); + assertTrue(intInOutMatcher.isIn(3)); + + assertFalse(intInOutMatcher.isIn(0)); + assertFalse(intInOutMatcher.isIn(4)); + } + + public void test_inOutMatcher_someOut() { + IntInOutMatcher intInOutMatcher = new IntInOutMatcher("!1,!2,!3,*"); + + assertFalse(intInOutMatcher.isIn(1)); + assertFalse(intInOutMatcher.isIn(2)); + assertFalse(intInOutMatcher.isIn(3)); + + assertTrue(intInOutMatcher.isIn(0)); + assertTrue(intInOutMatcher.isIn(4)); + } + + public void test_inOutMatcher_mixed() { + IntInOutMatcher intInOutMatcher = new IntInOutMatcher("!1,2,!3,*"); + + assertFalse(intInOutMatcher.isIn(1)); + assertTrue(intInOutMatcher.isIn(2)); + assertFalse(intInOutMatcher.isIn(3)); + + assertTrue(intInOutMatcher.isIn(0)); + assertTrue(intInOutMatcher.isIn(4)); + } + + public void test_inOutMatcher_failEmpty() { + try { + new IntInOutMatcher(""); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failNull() { + try { + new IntInOutMatcher(null); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failEmptyClause() { + try { + new IntInOutMatcher("!1,*,"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failDuplicate() { + try { + new IntInOutMatcher("!1,*,!1"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failDuplicateDefault() { + try { + new IntInOutMatcher("!1,*,*"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failMalformedNot() { + try { + new IntInOutMatcher("!,*"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failText() { + try { + new IntInOutMatcher("!abc,*"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failContradiction() { + try { + new IntInOutMatcher("1,!1,*"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failContradictionDefault() { + try { + new IntInOutMatcher("1,*,!*"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void test_inOutMatcher_failMissingDefault() { + try { + new IntInOutMatcher("1"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + +}
\ No newline at end of file diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java index 05207b9f6b00..402d9adf0e7c 100644 --- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java +++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java @@ -16,17 +16,21 @@ package com.android.wallpaperbackup; +import static android.app.WallpaperManager.FLAG_LOCK; +import static android.app.WallpaperManager.FLAG_SYSTEM; + import android.app.WallpaperManager; import android.app.backup.BackupAgent; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; import android.app.backup.FullBackupDataOutput; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Rect; import android.os.Environment; +import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.UserHandle; -import android.system.Os; import android.util.Slog; import android.util.Xml; @@ -40,7 +44,7 @@ import java.nio.charset.StandardCharsets; public class WallpaperBackupAgent extends BackupAgent { private static final String TAG = "WallpaperBackup"; - private static final boolean DEBUG = true; + private static final boolean DEBUG = false; // NB: must be kept in sync with WallpaperManagerService but has no // compile-time visibility. @@ -57,6 +61,11 @@ public class WallpaperBackupAgent extends BackupAgent { static final String EMPTY_SENTINEL = "empty"; static final String QUOTA_SENTINEL = "quota"; + // Not-for-backup bookkeeping + static final String PREFS_NAME = "wbprefs.xml"; + static final String SYSTEM_GENERATION = "system_gen"; + static final String LOCK_GENERATION = "lock_gen"; + private File mWallpaperInfo; // wallpaper metadata file private File mWallpaperFile; // primary wallpaper image file private File mLockWallpaperFile; // lock wallpaper image file @@ -106,27 +115,48 @@ public class WallpaperBackupAgent extends BackupAgent { // only back up the wallpaper if we've been told it's allowed if (mWm.isWallpaperBackupEligible()) { if (DEBUG) { - Slog.v(TAG, "Wallpaper is backup-eligible; linking & writing"); + Slog.v(TAG, "Wallpaper is backup-eligible"); } - // In case of prior muddled state - infoStage.delete(); - imageStage.delete(); - lockImageStage.delete(); + SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + final int lastSysGeneration = prefs.getInt(SYSTEM_GENERATION, -1); + final int lastLockGeneration = prefs.getInt(LOCK_GENERATION, -1); + + final int sysGeneration = + mWm.getWallpaperIdForUser(FLAG_SYSTEM, UserHandle.USER_SYSTEM); + final int lockGeneration = + mWm.getWallpaperIdForUser(FLAG_LOCK, UserHandle.USER_SYSTEM); + final boolean sysChanged = (sysGeneration != lastSysGeneration); + final boolean lockChanged = (lockGeneration != lastLockGeneration); + if (DEBUG) { + Slog.v(TAG, "sysGen=" + sysGeneration + " : sysChanged=" + sysChanged); + Slog.v(TAG, "lockGen=" + lockGeneration + " : lockChanged=" + lockChanged); + } if (mWallpaperInfo.exists()) { - Os.link(mWallpaperInfo.getCanonicalPath(), infoStage.getCanonicalPath()); + if (sysChanged || lockChanged || !infoStage.exists()) { + if (DEBUG) Slog.v(TAG, "New wallpaper configuration; copying"); + FileUtils.copyFileOrThrow(mWallpaperInfo, infoStage); + } fullBackupFile(infoStage, data); } if (mWallpaperFile.exists()) { - Os.link(mWallpaperFile.getCanonicalPath(), imageStage.getCanonicalPath()); + if (sysChanged || !imageStage.exists()) { + if (DEBUG) Slog.v(TAG, "New system wallpaper; copying"); + FileUtils.copyFileOrThrow(mWallpaperFile, imageStage); + } fullBackupFile(imageStage, data); + prefs.edit().putInt(SYSTEM_GENERATION, sysGeneration).apply(); } // Don't try to store the lock image if we overran our quota last time if (mLockWallpaperFile.exists() && !mQuotaExceeded) { - Os.link(mLockWallpaperFile.getCanonicalPath(), lockImageStage.getCanonicalPath()); + if (lockChanged || !lockImageStage.exists()) { + if (DEBUG) Slog.v(TAG, "New lock wallpaper; copying"); + FileUtils.copyFileOrThrow(mLockWallpaperFile, lockImageStage); + } fullBackupFile(lockImageStage, data); + prefs.edit().putInt(LOCK_GENERATION, lockGeneration).apply(); } } else { if (DEBUG) { @@ -136,13 +166,6 @@ public class WallpaperBackupAgent extends BackupAgent { } catch (Exception e) { Slog.e(TAG, "Unable to back up wallpaper", e); } finally { - if (DEBUG) { - Slog.v(TAG, "Removing backup stage links"); - } - infoStage.delete(); - imageStage.delete(); - lockImageStage.delete(); - // Even if this time we had to back off on attempting to store the lock image // due to exceeding the data quota, try again next time. This will alternate // between "try both" and "only store the primary image" until either there @@ -189,26 +212,30 @@ public class WallpaperBackupAgent extends BackupAgent { Slog.e(TAG, "Unable to restore wallpaper: " + e.getMessage()); } finally { if (DEBUG) { - Slog.v(TAG, "Removing restore stage files"); + Slog.v(TAG, "Restore finished; clearing backup bookkeeping"); } infoStage.delete(); imageStage.delete(); lockImageStage.delete(); + + SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + prefs.edit() + .putInt(SYSTEM_GENERATION, -1) + .putInt(LOCK_GENERATION, -1) + .commit(); } } private void restoreFromStage(File stage, File info, String hintTag, int which) throws IOException { if (stage.exists()) { - if (DEBUG) { - Slog.v(TAG, "Got restored wallpaper; applying which=" + which); - } // Parse the restored info file to find the crop hint. Note that this currently // relies on a priori knowledge of the wallpaper info file schema. Rect cropHint = parseCropHint(info, hintTag); if (cropHint != null) { + Slog.i(TAG, "Got restored wallpaper; applying which=" + which); if (DEBUG) { - Slog.v(TAG, "Restored crop hint " + cropHint + "; now writing data"); + Slog.v(TAG, "Restored crop hint " + cropHint); } try (FileInputStream in = new FileInputStream(stage)) { mWm.setStream(in, cropHint, true, which); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index ef41f49a9d45..051cb2d8052e 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2283,7 +2283,7 @@ public class ConnectivityService extends IConnectivityManager.Stub if (VDBG) log("NetworkFactory connected"); // A network factory has connected. Send it all current NetworkRequests. for (NetworkRequestInfo nri : mNetworkRequests.values()) { - if (!nri.request.isRequest()) continue; + if (nri.request.isListen()) continue; NetworkAgentInfo nai = mNetworkForRequestId.get(nri.request.requestId); ac.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, (nai != null ? nai.getCurrentScore() : 0), 0, nri.request); @@ -2425,7 +2425,7 @@ public class ConnectivityService extends IConnectivityManager.Stub private void handleRegisterNetworkRequest(NetworkRequestInfo nri) { mNetworkRequests.put(nri.request, nri); mNetworkRequestInfoLogs.log("REGISTER " + nri); - if (!nri.request.isRequest()) { + if (nri.request.isListen()) { for (NetworkAgentInfo network : mNetworkAgentInfos.values()) { if (nri.request.networkCapabilities.hasSignalStrength() && network.satisfiesImmutableCapabilitiesOf(nri.request)) { @@ -4573,7 +4573,7 @@ public class ConnectivityService extends IConnectivityManager.Stub for (int i = 0; i < nai.numNetworkRequests(); i++) { NetworkRequest nr = nai.requestAt(i); // Don't send listening requests to factories. b/17393458 - if (!nr.isRequest()) continue; + if (nr.isListen()) continue; sendUpdatedScoreToFactories(nr, nai.getCurrentScore()); } } @@ -4667,7 +4667,7 @@ public class ConnectivityService extends IConnectivityManager.Stub for (int i = 0; i < nai.numNetworkRequests(); i++) { NetworkRequest nr = nai.requestAt(i); // Ignore listening requests. - if (!nr.isRequest()) continue; + if (nr.isListen()) continue; loge("Dead network still had at least " + nr); break; } @@ -4759,7 +4759,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // check if it satisfies the NetworkCapabilities if (VDBG) log(" checking if request is satisfied: " + nri.request); if (satisfies) { - if (!nri.request.isRequest()) { + if (nri.request.isListen()) { // This is not a request, it's a callback listener. // Add it to newNetwork regardless of score. if (newNetwork.addRequest(nri.request)) addedRequests.add(nri); diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java index 5a9048898d02..553cb071613b 100644 --- a/services/core/java/com/android/server/GestureLauncherService.java +++ b/services/core/java/com/android/server/GestureLauncherService.java @@ -33,6 +33,7 @@ import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.UserHandle; import android.provider.Settings; import android.util.MutableBoolean; import android.util.Slog; @@ -284,8 +285,8 @@ public class GestureLauncherService extends SystemService { * @return true if camera was launched, false otherwise. */ private boolean handleCameraLaunchGesture(boolean useWakelock, int source) { - boolean userSetupComplete = Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.USER_SETUP_COMPLETE, 0) != 0; + boolean userSetupComplete = Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0; if (!userSetupComplete) { if (DBG) Slog.d(TAG, String.format( "userSetupComplete = %s, ignoring camera launch gesture.", diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java index 0cce2a226392..33c2ea28d7d1 100644 --- a/services/core/java/com/android/server/LockSettingsService.java +++ b/services/core/java/com/android/server/LockSettingsService.java @@ -1243,6 +1243,10 @@ public class LockSettingsService extends ILockSettings.Stub { private VerifyCredentialResponse doVerifyPattern(String pattern, CredentialHash storedHash, boolean hasChallenge, long challenge, int userId, ICheckCredentialProgressCallback progressCallback) throws RemoteException { + + if (TextUtils.isEmpty(pattern)) { + throw new IllegalArgumentException("Pattern can't be null or empty"); + } boolean shouldReEnrollBaseZero = storedHash != null && storedHash.isBaseZeroPattern; String patternToVerify; @@ -1340,6 +1344,9 @@ public class LockSettingsService extends ILockSettings.Stub { private VerifyCredentialResponse doVerifyPassword(String password, CredentialHash storedHash, boolean hasChallenge, long challenge, int userId, ICheckCredentialProgressCallback progressCallback) throws RemoteException { + if (TextUtils.isEmpty(password)) { + throw new IllegalArgumentException("Password can't be null or empty"); + } return verifyCredential(userId, storedHash, password, hasChallenge, challenge, new CredentialUtil() { @Override diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index be9d836ebca4..418ba9f6327f 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -494,7 +494,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub if (mLastPowerStateFromWifi != powerState) { mLastPowerStateFromWifi = powerState; try { - getBatteryStats().noteWifiRadioPowerState(powerState, tsNanos); + getBatteryStats().noteWifiRadioPowerState(powerState, tsNanos, uid); } catch (RemoteException e) { } } diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 577cada36c3e..9108acf9c40a 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -1553,9 +1553,15 @@ public class AccountManagerService } } } - - logRecord(accounts, DebugDbHelper.ACTION_CALLED_ACCOUNT_REMOVE, TABLE_ACCOUNTS); - + SQLiteDatabase db = accounts.openHelper.getReadableDatabase(); + final long accountId = getAccountIdLocked(db, account); + logRecord( + db, + DebugDbHelper.ACTION_CALLED_ACCOUNT_REMOVE, + TABLE_ACCOUNTS, + accountId, + accounts, + callingUid); try { new RemoveAccountSession(accounts, response, account, expectActivityLaunch).bind(); } finally { @@ -1587,7 +1593,15 @@ public class AccountManagerService throw new SecurityException(msg); } UserAccounts accounts = getUserAccountsForCaller(); - logRecord(accounts, DebugDbHelper.ACTION_CALLED_ACCOUNT_REMOVE, TABLE_ACCOUNTS); + SQLiteDatabase db = accounts.openHelper.getReadableDatabase(); + final long accountId = getAccountIdLocked(db, account); + logRecord( + db, + DebugDbHelper.ACTION_CALLED_ACCOUNT_REMOVE, + TABLE_ACCOUNTS, + accountId, + accounts, + callingUid); long identityToken = clearCallingIdentity(); try { return removeAccountInternal(accounts, account, callingUid); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 87168111c3f9..d426dd062b10 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -13604,7 +13604,7 @@ public final class ActivityManagerService extends ActivityManagerNative sb.append("Process: ").append(processName).append("\n"); int flags = process.info.flags; IPackageManager pm = AppGlobals.getPackageManager(); - sb.append("Flags: 0x").append(Integer.toString(flags, 16)).append("\n"); + sb.append("Flags: 0x").append(Integer.toHexString(flags)).append("\n"); for (int ip=0; ip<process.pkgList.size(); ip++) { String pkg = process.pkgList.keyAt(ip); sb.append("Package: ").append(pkg); @@ -20265,10 +20265,12 @@ public final class ActivityManagerService extends ActivityManagerNative if (mUseFifoUiScheduling) { // Reset UI pipeline to SCHED_OTHER Process.setThreadScheduler(app.pid, Process.SCHED_OTHER, 0); - Process.setThreadScheduler(app.renderThreadTid, - Process.SCHED_OTHER, 0); Process.setThreadPriority(app.pid, app.savedPriority); - Process.setThreadPriority(app.renderThreadTid, -4); + if (app.renderThreadTid != 0) { + Process.setThreadScheduler(app.renderThreadTid, + Process.SCHED_OTHER, 0); + Process.setThreadPriority(app.renderThreadTid, -4); + } } } } catch (Exception e) { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index def6828beabb..7fe29b086556 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -710,7 +710,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub } @Override - public void noteWifiRadioPowerState(int powerState, long tsNanos) { + public void noteWifiRadioPowerState(int powerState, long tsNanos, int uid) { enforceCallingPermission(); // There was a change in WiFi power state. @@ -723,7 +723,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub mHandler.scheduleSync("wifi-data: " + type, BatteryStatsImpl.ExternalStatsSync.UPDATE_WIFI); } - mStats.noteWifiRadioPowerState(powerState, tsNanos); + mStats.noteWifiRadioPowerState(powerState, tsNanos, uid); } } diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4de09bd5318e..9c22be724bbc 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -352,9 +352,15 @@ final class UserController { final UserInfo info = getUserInfo(userId); if (!Objects.equals(info.lastLoggedInFingerprint, Build.FINGERPRINT)) { // Suppress double notifications for managed profiles that - // were unlocked automatically (no challenge token required) - // as part of their parent user being unlocked. - final boolean quiet = info.isManagedProfile() && !uss.tokenProvided; + // were unlocked automatically as part of their parent user + // being unlocked. + final boolean quiet; + if (info.isManagedProfile()) { + quiet = !uss.tokenProvided + || !mLockPatternUtils.isSeparateProfileChallengeEnabled(userId); + } else { + quiet = false; + } new PreBootBroadcaster(mService, userId, null, quiet) { @Override public void onFinished() { diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index 1c2684642c53..66aa40325a4f 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -188,6 +188,14 @@ public class ClipboardService extends IClipboard.Stub { if (!canCopy) { clip = null; } else { + // We want to fix the uris of the related user's clip without changing the + // uris of the current user's clip. + // So, copy the ClipData, and then copy all the items, so that nothing + // is shared in memmory. + clip = new ClipData(clip); + for (int i = clip.getItemCount() - 1; i >= 0; i--) { + clip.setItemAt(i, new ClipData.Item(clip.getItemAt(i))); + } clip.fixUrisLight(userId); } for (int i = 0; i < size; i++) { diff --git a/services/core/java/com/android/server/display/DisplayTransformManager.java b/services/core/java/com/android/server/display/DisplayTransformManager.java index cfeae7bd6bd7..6902b1a5cd04 100644 --- a/services/core/java/com/android/server/display/DisplayTransformManager.java +++ b/services/core/java/com/android/server/display/DisplayTransformManager.java @@ -24,6 +24,10 @@ import android.os.ServiceManager; import android.util.Slog; import android.util.SparseArray; +import com.android.internal.annotations.GuardedBy; + +import java.util.Arrays; + /** * Manager for applying color transformations to the display. */ @@ -44,19 +48,34 @@ public class DisplayTransformManager { */ public static final int LEVEL_COLOR_MATRIX_INVERT_COLOR = 300; + /** + * Map of level -> color transformation matrix. + */ + @GuardedBy("mColorMatrix") private final SparseArray<float[]> mColorMatrix = new SparseArray<>(3); + /** + * Temporary matrix used internally by {@link #computeColorMatrixLocked()}. + */ + @GuardedBy("mColorMatrix") + private final float[][] mTempColorMatrix = new float[2][16]; + /** + * Lock used for synchronize access to {@link #mDaltonizerMode}. + */ + private final Object mDaltonizerModeLock = new Object(); + @GuardedBy("mDaltonizerModeLock") private int mDaltonizerMode = -1; /* package */ DisplayTransformManager() { } /** - * Returns the color transform matrix set for a given level. + * Returns a copy of the color transform matrix set for a given level. */ public float[] getColorMatrix(int key) { synchronized (mColorMatrix) { - return mColorMatrix.get(key); + final float[] value = mColorMatrix.get(key); + return value == null ? null : Arrays.copyOf(value, value.length); } } @@ -66,53 +85,59 @@ public class DisplayTransformManager { * Note: all color transforms are first composed to a single matrix in ascending order based * on level before being applied to the display. * - * @param key the level used to identify and compose the color transform (low -> high) + * @param level the level used to identify and compose the color transform (low -> high) * @param value the 4x4 color transform matrix (in column-major order), or {@code null} to * remove the color transform matrix associated with the provided level */ - public void setColorMatrix(int key, float[] value) { + public void setColorMatrix(int level, float[] value) { if (value != null && value.length != 16) { throw new IllegalArgumentException("Expected length: 16 (4x4 matrix)" + ", actual length: " + value.length); } synchronized (mColorMatrix) { - if (value != null) { - mColorMatrix.put(key, value); - } else { - mColorMatrix.remove(key); - } + final float[] oldValue = mColorMatrix.get(level); + if (!Arrays.equals(oldValue, value)) { + if (value == null) { + mColorMatrix.remove(level); + } else if (oldValue == null) { + mColorMatrix.put(level, Arrays.copyOf(value, value.length)); + } else { + System.arraycopy(value, 0, oldValue, 0, value.length); + } - // Update the current color transform. - applyColorMatrix(computeColorMatrix()); + // Update the current color transform. + applyColorMatrix(computeColorMatrixLocked()); + } } } /** * Returns the composition of all current color matrices, or {@code null} if there are none. */ - private float[] computeColorMatrix() { - synchronized (mColorMatrix) { - final int count = mColorMatrix.size(); - if (count == 0) { - return null; - } + @GuardedBy("mColorMatrix") + private float[] computeColorMatrixLocked() { + final int count = mColorMatrix.size(); + if (count == 0) { + return null; + } - final float[][] result = new float[2][16]; - Matrix.setIdentityM(result[0], 0); - for (int i = 0; i < count; i++) { - float[] rhs = mColorMatrix.valueAt(i); - Matrix.multiplyMM(result[(i + 1) % 2], 0, result[i % 2], 0, rhs, 0); - } - return result[count % 2]; + final float[][] result = mTempColorMatrix; + Matrix.setIdentityM(result[0], 0); + for (int i = 0; i < count; i++) { + float[] rhs = mColorMatrix.valueAt(i); + Matrix.multiplyMM(result[(i + 1) % 2], 0, result[i % 2], 0, rhs, 0); } + return result[count % 2]; } /** * Returns the current Daltonization mode. */ public int getDaltonizerMode() { - return mDaltonizerMode; + synchronized (mDaltonizerModeLock) { + return mDaltonizerMode; + } } /** @@ -122,9 +147,11 @@ public class DisplayTransformManager { * @param mode the new Daltonization mode, or -1 to disable */ public void setDaltonizerMode(int mode) { - if (mDaltonizerMode != mode) { - mDaltonizerMode = mode; - applyDaltonizerMode(mode); + synchronized (mDaltonizerModeLock) { + if (mDaltonizerMode != mode) { + mDaltonizerMode = mode; + applyDaltonizerMode(mode); + } } } diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java index 1f4ee9b2d4ea..39498a62fdcd 100644 --- a/services/core/java/com/android/server/display/NightDisplayService.java +++ b/services/core/java/com/android/server/display/NightDisplayService.java @@ -16,6 +16,10 @@ package com.android.server.display; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.TypeEvaluator; +import android.animation.ValueAnimator; import android.app.AlarmManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -24,11 +28,14 @@ import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; +import android.opengl.Matrix; import android.os.Handler; import android.os.Looper; import android.os.UserHandle; import android.provider.Settings.Secure; +import android.util.MathUtils; import android.util.Slog; +import android.view.animation.AnimationUtils; import com.android.internal.app.NightDisplayController; import com.android.server.SystemService; @@ -39,6 +46,8 @@ import com.android.server.twilight.TwilightState; import java.util.Calendar; import java.util.TimeZone; +import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY; + /** * Tints the display at night. */ @@ -58,6 +67,19 @@ public final class NightDisplayService extends SystemService 0, 0, 0, 1 }; + /** + * The identity matrix, used if one of the given matrices is {@code null}. + */ + private static final float[] MATRIX_IDENTITY = new float[16]; + static { + Matrix.setIdentityM(MATRIX_IDENTITY, 0); + } + + /** + * Evaluator used to animate color matrix transitions. + */ + private static final ColorMatrixEvaluator COLOR_MATRIX_EVALUATOR = new ColorMatrixEvaluator(); + private final Handler mHandler; private int mCurrentUser = UserHandle.USER_NULL; @@ -65,6 +87,7 @@ public final class NightDisplayService extends SystemService private boolean mBootCompleted; private NightDisplayController mController; + private ValueAnimator mColorMatrixAnimator; private Boolean mIsActivated; private AutoMode mAutoMode; @@ -181,6 +204,11 @@ public final class NightDisplayService extends SystemService mAutoMode = null; } + if (mColorMatrixAnimator != null) { + mColorMatrixAnimator.end(); + mColorMatrixAnimator = null; + } + mIsActivated = null; } @@ -195,10 +223,49 @@ public final class NightDisplayService extends SystemService mAutoMode.onActivated(activated); } - // Update the current color matrix. + // Cancel the old animator if still running. + if (mColorMatrixAnimator != null) { + mColorMatrixAnimator.cancel(); + } + final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); - dtm.setColorMatrix(DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, - activated ? MATRIX_NIGHT : null); + final float[] from = dtm.getColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY); + final float[] to = mIsActivated ? MATRIX_NIGHT : null; + + mColorMatrixAnimator = ValueAnimator.ofObject(COLOR_MATRIX_EVALUATOR, + from == null ? MATRIX_IDENTITY : from, to == null ? MATRIX_IDENTITY : to); + mColorMatrixAnimator.setDuration(getContext().getResources() + .getInteger(android.R.integer.config_longAnimTime)); + mColorMatrixAnimator.setInterpolator(AnimationUtils.loadInterpolator( + getContext(), android.R.interpolator.fast_out_slow_in)); + mColorMatrixAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animator) { + final float[] value = (float[]) animator.getAnimatedValue(); + dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, value); + } + }); + mColorMatrixAnimator.addListener(new AnimatorListenerAdapter() { + + private boolean mIsCancelled; + + @Override + public void onAnimationCancel(Animator animator) { + mIsCancelled = true; + } + + @Override + public void onAnimationEnd(Animator animator) { + if (!mIsCancelled) { + // Ensure final color matrix is set at the end of the animation. If the + // animation is cancelled then don't set the final color matrix so the new + // animator can pick up from where this one left off. + dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, to); + } + mColorMatrixAnimator = null; + } + }); + mColorMatrixAnimator.start(); } } @@ -394,4 +461,23 @@ public final class NightDisplayService extends SystemService updateActivated(); } } + + /** + * Interpolates between two 4x4 color transform matrices (in column-major order). + */ + private static class ColorMatrixEvaluator implements TypeEvaluator<float[]> { + + /** + * Result matrix returned by {@link #evaluate(float, float[], float[])}. + */ + private final float[] mResultMatrix = new float[16]; + + @Override + public float[] evaluate(float fraction, float[] startValue, float[] endValue) { + for (int i = 0; i < mResultMatrix.length; i++) { + mResultMatrix[i] = MathUtils.lerp(startValue[i], endValue[i], fraction); + } + return mResultMatrix; + } + } } diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 173f76fa52f5..7580cf4f0111 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -393,6 +393,15 @@ public class GnssLocationProvider implements LocationProviderInterface { // SIM/Carrier info. private final static String SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED"; + // Persist property for LPP_PROFILE + private final static String LPP_PROFILE = "persist.sys.gps.lpp"; + + // VZW PLMN info + private static final String[] VzwMccMncList = {"311480", "310004", "20404"}; + // corresponding GID1 value, empty string means ignore gid1 match. + private static final String[] VzwGid1List = {"", "", "BAE0000000000000"}; + + private final PowerManager mPowerManager; private final AlarmManager mAlarmManager; private final PendingIntent mWakeupIntent; @@ -507,14 +516,43 @@ public class GnssLocationProvider implements LocationProviderInterface { } }; + private final boolean isVerizon(String mccMnc, String imsi, String groupId) { + if (DEBUG) Log.d(TAG, "simOperator: " + mccMnc); + if (!TextUtils.isEmpty(mccMnc) || !TextUtils.isEmpty(imsi)) { + for (int i = 0; i < VzwMccMncList.length; i++) { + if ((!TextUtils.isEmpty(mccMnc) && mccMnc.equals(VzwMccMncList[i])) || + (!TextUtils.isEmpty(imsi) && imsi.startsWith(VzwMccMncList[i]))) { + // check gid too if needed + if (TextUtils.isEmpty(VzwGid1List[i]) || VzwGid1List[i].equals(groupId)) { + if (DEBUG) Log.d(TAG, "Verizon UICC"); + return true; + } + } + } + } + return false; + } + private void subscriptionOrSimChanged(Context context) { if (DEBUG) Log.d(TAG, "received SIM related action: "); TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); String mccMnc = phone.getSimOperator(); + String imsi = phone.getSubscriberId(); + String groupId = phone.getGroupIdLevel1(); if (!TextUtils.isEmpty(mccMnc)) { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { + if (isVerizon(mccMnc, imsi, groupId)) { + // load current properties for carrier VZW + loadPropertiesFromResource(context, mProperties); + String lpp_profile = mProperties.getProperty("LPP_PROFILE"); + // set the persist property LPP_PROFILE for VZW + SystemProperties.set(LPP_PROFILE, lpp_profile); + } else { + // reset the persist property for Non VZW + SystemProperties.set(LPP_PROFILE, ""); + } reloadGpsProperties(context, mProperties); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } @@ -571,8 +609,10 @@ public class GnssLocationProvider implements LocationProviderInterface { private void reloadGpsProperties(Context context, Properties properties) { if (DEBUG) Log.d(TAG, "Reset GPS properties, previous size = " + properties.size()); loadPropertiesFromResource(context, properties); + boolean isPropertiesLoadedFromFile = false; final String gpsHardware = SystemProperties.get("ro.hardware.gps"); + if (!TextUtils.isEmpty(gpsHardware)) { final String propFilename = PROPERTIES_FILE_PREFIX + "." + gpsHardware + PROPERTIES_FILE_SUFFIX; @@ -583,7 +623,11 @@ public class GnssLocationProvider implements LocationProviderInterface { loadPropertiesFromFile(DEFAULT_PROPERTIES_FILE, properties); } if (DEBUG) Log.d(TAG, "GPS properties reloaded, size = " + properties.size()); - + String lpp_prof = SystemProperties.get(LPP_PROFILE); + if (!TextUtils.isEmpty(lpp_prof)) { + // override default value of this if lpp_prof is not empty + properties.setProperty("LPP_PROFILE", lpp_prof); + } // TODO: we should get rid of C2K specific setting. setSuplHostPort(properties.getProperty("SUPL_HOST"), properties.getProperty("SUPL_PORT")); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index cbd0769fdf68..e368af2fda5c 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -3150,6 +3150,12 @@ public class NotificationManagerService extends SystemService { } } + private void recordCallerLocked(NotificationRecord record) { + if (mZenModeHelper.isCall(record)) { + mZenModeHelper.recordCaller(record); + } + } + // let zen mode evaluate this record private void applyZenModeLocked(NotificationRecord record) { record.setIntercepted(mZenModeHelper.shouldIntercept(record)); @@ -3289,6 +3295,10 @@ public class NotificationManagerService extends SystemService { } private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete, int reason) { + + // Record caller. + recordCallerLocked(r); + // tell the app if (sendDelete) { if (r.getNotification().deleteIntent != null) { diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java index 80dc52349c34..cbaad460b888 100644 --- a/services/core/java/com/android/server/notification/ZenModeFiltering.java +++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java @@ -81,7 +81,9 @@ public class ZenModeFiltering { if (zen == Global.ZEN_MODE_NO_INTERRUPTIONS) return false; // nothing gets through if (zen == Global.ZEN_MODE_ALARMS) return false; // not an alarm if (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) { - if (config.allowRepeatCallers && REPEAT_CALLERS.isRepeat(context, extras)) return true; + if (config.allowRepeatCallers && REPEAT_CALLERS.isRepeat(context, extras)) { + return true; + } if (!config.allowCalls) return false; // no other calls get through if (validator != null) { final float contactAffinity = validator.getContactAffinity(userHandle, extras, @@ -97,6 +99,10 @@ public class ZenModeFiltering { ? record.sbn.getNotification().extras : null; } + protected void recordCall(NotificationRecord record) { + REPEAT_CALLERS.recordCall(mContext, extras(record)); + } + public boolean shouldIntercept(int zen, ZenModeConfig config, NotificationRecord record) { if (isSystem(record)) { return false; @@ -233,28 +239,45 @@ public class ZenModeFiltering { } private static class RepeatCallers { + // Person : time private final ArrayMap<String, Long> mCalls = new ArrayMap<>(); private int mThresholdMinutes; + private synchronized void recordCall(Context context, Bundle extras) { + setThresholdMinutes(context); + if (mThresholdMinutes <= 0 || extras == null) return; + final String peopleString = peopleString(extras); + if (peopleString == null) return; + final long now = System.currentTimeMillis(); + cleanUp(mCalls, now); + mCalls.put(peopleString, now); + } + private synchronized boolean isRepeat(Context context, Bundle extras) { - if (mThresholdMinutes <= 0) { - mThresholdMinutes = context.getResources().getInteger(com.android.internal.R.integer - .config_zen_repeat_callers_threshold); - } + setThresholdMinutes(context); if (mThresholdMinutes <= 0 || extras == null) return false; final String peopleString = peopleString(extras); if (peopleString == null) return false; final long now = System.currentTimeMillis(); - final int N = mCalls.size(); + cleanUp(mCalls, now); + return mCalls.containsKey(peopleString); + } + + private synchronized void cleanUp(ArrayMap<String, Long> calls, long now) { + final int N = calls.size(); for (int i = N - 1; i >= 0; i--) { final long time = mCalls.valueAt(i); if (time > now || (now - time) > mThresholdMinutes * 1000 * 60) { - mCalls.removeAt(i); + calls.removeAt(i); } } - final boolean isRepeat = mCalls.containsKey(peopleString); - mCalls.put(peopleString, now); - return isRepeat; + } + + private void setThresholdMinutes(Context context) { + if (mThresholdMinutes <= 0) { + mThresholdMinutes = context.getResources().getInteger(com.android.internal.R.integer + .config_zen_repeat_callers_threshold); + } } private static String peopleString(Bundle extras) { diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 8c9dc3ba60f2..c22bfb321a5c 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -139,8 +139,7 @@ public class ZenModeHelper { ValidateNotificationPeople validator, int contactsTimeoutMs, float timeoutAffinity) { synchronized (mConfig) { return ZenModeFiltering.matchesCallFilter(mContext, mZenMode, mConfig, userHandle, - extras, - validator, contactsTimeoutMs, timeoutAffinity); + extras, validator, contactsTimeoutMs, timeoutAffinity); } } @@ -148,6 +147,10 @@ public class ZenModeHelper { return mFiltering.isCall(record); } + public void recordCaller(NotificationRecord record) { + mFiltering.recordCall(record); + } + public boolean shouldIntercept(NotificationRecord record) { synchronized (mConfig) { return mFiltering.shouldIntercept(mZenMode, mConfig, record); diff --git a/services/core/java/com/android/server/pm/AbstractStatsBase.java b/services/core/java/com/android/server/pm/AbstractStatsBase.java new file mode 100644 index 000000000000..612c4767ccaa --- /dev/null +++ b/services/core/java/com/android/server/pm/AbstractStatsBase.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.pm; + +import android.os.Environment; +import android.os.SystemClock; +import android.util.AtomicFile; + +import java.io.File; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; + +/** + * A simple base class for statistics that need to be saved/restored from a dedicated file. This + * class provides a base implementation that: + * <ul> + * <li>Provide an AtomicFile to the actual read/write code + * <li>A background-thread write and a synchronous write + * <li>Write-limiting for the background-thread (by default writes are at least 30 minutes apart) + * <li>Can lock on the provided data object before writing + * </ul> + * For completion, a subclass needs to implement actual {@link #writeInternal(Object) writing} and + * {@link #readInternal(Object) reading}. + */ +public abstract class AbstractStatsBase<T> { + + private static final int WRITE_INTERVAL_MS = + (PackageManagerService.DEBUG_DEXOPT) ? 0 : 30*60*1000; + private final Object mFileLock = new Object(); + private final AtomicLong mLastTimeWritten = new AtomicLong(0); + private final AtomicBoolean mBackgroundWriteRunning = new AtomicBoolean(false); + private final String mFileName; + private final String mBackgroundThreadName; + private final boolean mLock; + + protected AbstractStatsBase(String fileName, String threadName, boolean lock) { + mFileName = fileName; + mBackgroundThreadName = threadName; + mLock = lock; + } + + protected AtomicFile getFile() { + File dataDir = Environment.getDataDirectory(); + File systemDir = new File(dataDir, "system"); + File fname = new File(systemDir, mFileName); + return new AtomicFile(fname); + } + + void writeNow(final T data) { + writeImpl(data); + mLastTimeWritten.set(SystemClock.elapsedRealtime()); + } + + boolean maybeWriteAsync(final T data) { + if (SystemClock.elapsedRealtime() - mLastTimeWritten.get() < WRITE_INTERVAL_MS + && !PackageManagerService.DEBUG_DEXOPT) { + return false; + } + + if (mBackgroundWriteRunning.compareAndSet(false, true)) { + new Thread(mBackgroundThreadName) { + @Override + public void run() { + try { + writeImpl(data); + mLastTimeWritten.set(SystemClock.elapsedRealtime()); + } finally { + mBackgroundWriteRunning.set(false); + } + } + }.start(); + return true; + } + + return false; + } + + private void writeImpl(T data) { + if (mLock) { + synchronized (data) { + synchronized (mFileLock) { + writeInternal(data); + } + } + } else { + synchronized (mFileLock) { + writeInternal(data); + } + } + } + + protected abstract void writeInternal(T data); + + void read(T data) { + if (mLock) { + synchronized (data) { + synchronized (mFileLock) { + readInternal(data); + } + } + } else { + synchronized (mFileLock) { + readInternal(data); + } + } + // We use the current time as last-written. read() is called on system server startup + // (current situation), and we want to postpone I/O at boot. + mLastTimeWritten.set(SystemClock.elapsedRealtime()); + } + + protected abstract void readInternal(T data); +} diff --git a/services/core/java/com/android/server/pm/CompilerStats.java b/services/core/java/com/android/server/pm/CompilerStats.java new file mode 100644 index 000000000000..8c2fc3ed1dae --- /dev/null +++ b/services/core/java/com/android/server/pm/CompilerStats.java @@ -0,0 +1,295 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.pm; + +import android.util.ArrayMap; +import android.util.AtomicFile; +import android.util.Log; + +import com.android.internal.util.FastPrintWriter; +import com.android.internal.util.IndentingPrintWriter; + +import libcore.io.IoUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; + +/** + * A class that collects, serializes and deserializes compiler-related statistics on a + * per-package per-code-path basis. + * + * Currently used to track compile times. + */ +class CompilerStats extends AbstractStatsBase<Void> { + + private final static String COMPILER_STATS_VERSION_HEADER = "PACKAGE_MANAGER__COMPILER_STATS__"; + private final static int COMPILER_STATS_VERSION = 1; + + /** + * Class to collect all stats pertaining to one package. + */ + static class PackageStats { + + private final String packageName; + + /** + * This map stores compile-times for all code paths in the package. The value + * is in milliseconds. + */ + private final Map<String, Long> compileTimePerCodePath; + + /** + * @param packageName + */ + public PackageStats(String packageName) { + this.packageName = packageName; + // We expect at least one element in here, but let's make it minimal. + compileTimePerCodePath = new ArrayMap<>(2); + } + + public String getPackageName() { + return packageName; + } + + /** + * Return the recorded compile time for a given code path. Returns + * 0 if there is no recorded time. + */ + public long getCompileTime(String codePath) { + String storagePath = getStoredPathFromCodePath(codePath); + synchronized (compileTimePerCodePath) { + Long l = compileTimePerCodePath.get(storagePath); + if (l == null) { + return 0; + } + return l; + } + } + + public void setCompileTime(String codePath, long compileTimeInMs) { + String storagePath = getStoredPathFromCodePath(codePath); + synchronized (compileTimePerCodePath) { + if (compileTimeInMs <= 0) { + compileTimePerCodePath.remove(storagePath); + } else { + compileTimePerCodePath.put(storagePath, compileTimeInMs); + } + } + } + + private static String getStoredPathFromCodePath(String codePath) { + int lastSlash = codePath.lastIndexOf(File.separatorChar); + return codePath.substring(lastSlash + 1); + } + + public void dump(IndentingPrintWriter ipw) { + synchronized (compileTimePerCodePath) { + if (compileTimePerCodePath.size() == 0) { + ipw.println("(No recorded stats)"); + } else { + for (Map.Entry<String, Long> e : compileTimePerCodePath.entrySet()) { + ipw.println(" " + e.getKey() + " - " + e.getValue()); + } + } + } + } + } + + private final Map<String, PackageStats> packageStats; + + public CompilerStats() { + super("package-cstats.list", "CompilerStats_DiskWriter", /* lock */ false); + packageStats = new HashMap<>(); + } + + public PackageStats getPackageStats(String packageName) { + synchronized (packageStats) { + return packageStats.get(packageName); + } + } + + public void setPackageStats(String packageName, PackageStats stats) { + synchronized (packageStats) { + packageStats.put(packageName, stats); + } + } + + public PackageStats createPackageStats(String packageName) { + synchronized (packageStats) { + PackageStats newStats = new PackageStats(packageName); + packageStats.put(packageName, newStats); + return newStats; + } + } + + public PackageStats getOrCreatePackageStats(String packageName) { + synchronized (packageStats) { + PackageStats existingStats = packageStats.get(packageName); + if (existingStats != null) { + return existingStats; + } + + return createPackageStats(packageName); + } + } + + public void deletePackageStats(String packageName) { + synchronized (packageStats) { + packageStats.remove(packageName); + } + } + + // I/O + + // The encoding is simple: + // + // 1) The first line is a line consisting of the version header and the version number. + // + // 2) The rest of the file is package data. + // 2.1) A package is started by any line not starting with "-"; + // 2.2) Any line starting with "-" is code path data. The format is: + // '-'{code-path}':'{compile-time} + + public void write(Writer out) { + @SuppressWarnings("resource") + FastPrintWriter fpw = new FastPrintWriter(out); + + fpw.print(COMPILER_STATS_VERSION_HEADER); + fpw.println(COMPILER_STATS_VERSION); + + synchronized (packageStats) { + for (PackageStats pkg : packageStats.values()) { + synchronized (pkg.compileTimePerCodePath) { + if (!pkg.compileTimePerCodePath.isEmpty()) { + fpw.println(pkg.getPackageName()); + + for (Map.Entry<String, Long> e : pkg.compileTimePerCodePath.entrySet()) { + fpw.println("-" + e.getKey() + ":" + e.getValue()); + } + } + } + } + } + + fpw.flush(); + } + + public boolean read(Reader r) { + synchronized (packageStats) { + // TODO: Could make this a final switch, then we wouldn't have to synchronize over + // the whole reading. + packageStats.clear(); + + try { + BufferedReader in = new BufferedReader(r); + + // Read header, do version check. + String versionLine = in.readLine(); + if (versionLine == null) { + throw new IllegalArgumentException("No version line found."); + } else { + if (!versionLine.startsWith(COMPILER_STATS_VERSION_HEADER)) { + throw new IllegalArgumentException("Invalid version line: " + versionLine); + } + int version = Integer.parseInt( + versionLine.substring(COMPILER_STATS_VERSION_HEADER.length())); + if (version != COMPILER_STATS_VERSION) { + // TODO: Upgrade older formats? For now, just reject and regenerate. + throw new IllegalArgumentException("Unexpected version: " + version); + } + } + + // For simpler code, we ignore any data lines before the first package. We + // collect it in a fake package. + PackageStats currentPackage = new PackageStats("fake package"); + + String s = null; + while ((s = in.readLine()) != null) { + if (s.startsWith("-")) { + int colonIndex = s.indexOf(':'); + if (colonIndex == -1 || colonIndex == 1) { + throw new IllegalArgumentException("Could not parse data " + s); + } + String codePath = s.substring(1, colonIndex); + long time = Long.parseLong(s.substring(colonIndex + 1)); + currentPackage.setCompileTime(codePath, time); + } else { + currentPackage = getOrCreatePackageStats(s); + } + } + } catch (Exception e) { + Log.e(PackageManagerService.TAG, "Error parsing compiler stats", e); + return false; + } + + return true; + } + } + + void writeNow() { + writeNow(null); + } + + boolean maybeWriteAsync() { + return maybeWriteAsync(null); + } + + @Override + protected void writeInternal(Void data) { + AtomicFile file = getFile(); + FileOutputStream f = null; + + try { + f = file.startWrite(); + OutputStreamWriter osw = new OutputStreamWriter(f); + write(osw); + osw.flush(); + file.finishWrite(f); + } catch (IOException e) { + if (f != null) { + file.failWrite(f); + } + Log.e(PackageManagerService.TAG, "Failed to write compiler stats", e); + } + } + + void read() { + read((Void)null); + } + + @Override + protected void readInternal(Void data) { + AtomicFile file = getFile(); + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(file.openRead())); + read(in); + } catch (FileNotFoundException expected) { + } finally { + IoUtils.closeQuietly(in); + } + } +} diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index cff2da9f005c..1913b6116efb 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -17,7 +17,6 @@ package com.android.server.pm; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerInternal; @@ -30,7 +29,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ILauncherApps; import android.content.pm.IOnAppsChangedListener; import android.content.pm.IPackageManager; -import android.content.pm.LauncherApps; import android.content.pm.LauncherApps.ShortcutQuery; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -461,7 +459,8 @@ public class LauncherAppsService extends SystemService { } // Note the target activity doesn't have to be exported. - prepareIntentForLaunch(intent, sourceBounds); + intent.setSourceBounds(sourceBounds); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return startShortcutIntentAsPublisher( intent, packageName, startActivityOptions, userId); @@ -521,7 +520,9 @@ public class LauncherAppsService extends SystemService { Intent launchIntent = new Intent(Intent.ACTION_MAIN); launchIntent.addCategory(Intent.CATEGORY_LAUNCHER); - prepareIntentForLaunch(launchIntent, sourceBounds); + launchIntent.setSourceBounds(sourceBounds); + launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); launchIntent.setPackage(component.getPackageName()); long ident = Binder.clearCallingIdentity(); @@ -562,13 +563,6 @@ public class LauncherAppsService extends SystemService { } } - private void prepareIntentForLaunch(@NonNull Intent launchIntent, - @Nullable Rect sourceBounds) { - launchIntent.setSourceBounds(sourceBounds); - launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - } - @Override public void showAppDetailsAsUser(ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 02c6472b2f88..77c69c905036 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -225,7 +225,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub { optimizer.performDexOpt(nextPackage, nextPackage.usesLibraryFiles, null /* ISAs */, false /* checkProfiles */, - getCompilerFilterForReason(compilationReason)); + getCompilerFilterForReason(compilationReason), + null /* CompilerStats.PackageStats */); mCommandsForCurrentPackage = collectingConnection.commands; if (mCommandsForCurrentPackage.isEmpty()) { @@ -271,7 +272,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub { mPackageManagerService.mInstaller, mPackageManagerService.mInstallLock, mContext); optimizer.performDexOpt(nextPackage, nextPackage.usesLibraryFiles, null /* ISAs */, false /* checkProfiles */, - getCompilerFilterForReason(PackageManagerService.REASON_AB_OTA)); + getCompilerFilterForReason(PackageManagerService.REASON_AB_OTA), + mPackageManagerService.getOrCreateCompilerPackageStats(nextPackage)); } private void moveAbArtifacts(Installer installer) { diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 26a840da094b..19b120123b26 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -90,7 +90,8 @@ class PackageDexOptimizer { * synchronized on {@link #mInstallLock}. */ int performDexOpt(PackageParser.Package pkg, String[] sharedLibraries, - String[] instructionSets, boolean checkProfiles, String targetCompilationFilter) { + String[] instructionSets, boolean checkProfiles, String targetCompilationFilter, + CompilerStats.PackageStats packageStats) { synchronized (mInstallLock) { final boolean useLock = mSystemReady; if (useLock) { @@ -99,7 +100,7 @@ class PackageDexOptimizer { } try { return performDexOptLI(pkg, sharedLibraries, instructionSets, checkProfiles, - targetCompilationFilter); + targetCompilationFilter, packageStats); } finally { if (useLock) { mDexoptWakeLock.release(); @@ -150,7 +151,8 @@ class PackageDexOptimizer { } private int performDexOptLI(PackageParser.Package pkg, String[] sharedLibraries, - String[] targetInstructionSets, boolean checkProfiles, String targetCompilerFilter) { + String[] targetInstructionSets, boolean checkProfiles, String targetCompilerFilter, + CompilerStats.PackageStats packageStats) { final String[] instructionSets = targetInstructionSets != null ? targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo); @@ -254,10 +256,17 @@ class PackageDexOptimizer { | DEXOPT_BOOTCOMPLETE); try { + long startTime = System.currentTimeMillis(); + mInstaller.dexopt(path, sharedGid, pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags, targetCompilerFilter, pkg.volumeUuid, sharedLibrariesPath); performedDexOpt = true; + + if (packageStats != null) { + long endTime = System.currentTimeMillis(); + packageStats.setCompileTime(path, (int)(endTime - startTime)); + } } catch (InstallerException e) { Slog.w(TAG, "Failed to dexopt", e); successfulDexOpt = false; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 78fa3a37dcf5..b907be07fab9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -76,8 +76,6 @@ import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.content.pm.PackageParser.PARSE_IS_PRIVILEGED; import static android.content.pm.PackageParser.isApkFile; -import static android.os.Process.PACKAGE_INFO_GID; -import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import static android.system.OsConstants.O_CREAT; import static android.system.OsConstants.O_RDWR; @@ -208,7 +206,6 @@ import android.text.TextUtils; import android.text.format.DateUtils; import android.util.ArrayMap; import android.util.ArraySet; -import android.util.AtomicFile; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.ExceptionUtils; @@ -267,7 +264,6 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; -import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayInputStream; @@ -280,7 +276,6 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; -import java.io.InputStream; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.security.DigestInputStream; @@ -307,7 +302,6 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; /** * Keep track of all those APKs everywhere. @@ -1131,204 +1125,7 @@ public class PackageManagerService extends IPackageManager.Stub { final @NonNull String mSharedSystemSharedLibraryPackageName; private final PackageUsage mPackageUsage = new PackageUsage(); - - private class PackageUsage { - private static final int WRITE_INTERVAL - = (DEBUG_DEXOPT) ? 0 : 30*60*1000; // 30m in ms - - private final Object mFileLock = new Object(); - private final AtomicLong mLastWritten = new AtomicLong(0); - private final AtomicBoolean mBackgroundWriteRunning = new AtomicBoolean(false); - - private boolean mIsHistoricalPackageUsageAvailable = true; - - boolean isHistoricalPackageUsageAvailable() { - return mIsHistoricalPackageUsageAvailable; - } - - void write(boolean force) { - if (force) { - writeInternal(); - return; - } - if (SystemClock.elapsedRealtime() - mLastWritten.get() < WRITE_INTERVAL - && !DEBUG_DEXOPT) { - return; - } - if (mBackgroundWriteRunning.compareAndSet(false, true)) { - new Thread("PackageUsage_DiskWriter") { - @Override - public void run() { - try { - writeInternal(); - } finally { - mBackgroundWriteRunning.set(false); - } - } - }.start(); - } - } - - private void writeInternal() { - synchronized (mPackages) { - synchronized (mFileLock) { - AtomicFile file = getFile(); - FileOutputStream f = null; - try { - f = file.startWrite(); - BufferedOutputStream out = new BufferedOutputStream(f); - FileUtils.setPermissions(file.getBaseFile().getPath(), - 0640, SYSTEM_UID, PACKAGE_INFO_GID); - StringBuilder sb = new StringBuilder(); - - sb.append(USAGE_FILE_MAGIC_VERSION_1); - sb.append('\n'); - out.write(sb.toString().getBytes(StandardCharsets.US_ASCII)); - - for (PackageParser.Package pkg : mPackages.values()) { - if (pkg.getLatestPackageUseTimeInMills() == 0L) { - continue; - } - sb.setLength(0); - sb.append(pkg.packageName); - for (long usageTimeInMillis : pkg.mLastPackageUsageTimeInMills) { - sb.append(' '); - sb.append(usageTimeInMillis); - } - sb.append('\n'); - out.write(sb.toString().getBytes(StandardCharsets.US_ASCII)); - } - out.flush(); - file.finishWrite(f); - } catch (IOException e) { - if (f != null) { - file.failWrite(f); - } - Log.e(TAG, "Failed to write package usage times", e); - } - } - } - mLastWritten.set(SystemClock.elapsedRealtime()); - } - - void readLP() { - synchronized (mFileLock) { - AtomicFile file = getFile(); - BufferedInputStream in = null; - try { - in = new BufferedInputStream(file.openRead()); - StringBuffer sb = new StringBuffer(); - - String firstLine = readLine(in, sb); - if (firstLine == null) { - // Empty file. Do nothing. - } else if (USAGE_FILE_MAGIC_VERSION_1.equals(firstLine)) { - readVersion1LP(in, sb); - } else { - readVersion0LP(in, sb, firstLine); - } - } catch (FileNotFoundException expected) { - mIsHistoricalPackageUsageAvailable = false; - } catch (IOException e) { - Log.w(TAG, "Failed to read package usage times", e); - } finally { - IoUtils.closeQuietly(in); - } - } - mLastWritten.set(SystemClock.elapsedRealtime()); - } - - private void readVersion0LP(InputStream in, StringBuffer sb, String firstLine) - throws IOException { - // Initial version of the file had no version number and stored one - // package-timestamp pair per line. - // Note that the first line has already been read from the InputStream. - for (String line = firstLine; line != null; line = readLine(in, sb)) { - String[] tokens = line.split(" "); - if (tokens.length != 2) { - throw new IOException("Failed to parse " + line + - " as package-timestamp pair."); - } - - String packageName = tokens[0]; - PackageParser.Package pkg = mPackages.get(packageName); - if (pkg == null) { - continue; - } - - long timestamp = parseAsLong(tokens[1]); - for (int reason = 0; - reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT; - reason++) { - pkg.mLastPackageUsageTimeInMills[reason] = timestamp; - } - } - } - - private void readVersion1LP(InputStream in, StringBuffer sb) throws IOException { - // Version 1 of the file started with the corresponding version - // number and then stored a package name and eight timestamps per line. - String line; - while ((line = readLine(in, sb)) != null) { - String[] tokens = line.split(" "); - if (tokens.length != PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT + 1) { - throw new IOException("Failed to parse " + line + " as a timestamp array."); - } - - String packageName = tokens[0]; - PackageParser.Package pkg = mPackages.get(packageName); - if (pkg == null) { - continue; - } - - for (int reason = 0; - reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT; - reason++) { - pkg.mLastPackageUsageTimeInMills[reason] = parseAsLong(tokens[reason + 1]); - } - } - } - - private long parseAsLong(String token) throws IOException { - try { - return Long.parseLong(token); - } catch (NumberFormatException e) { - throw new IOException("Failed to parse " + token + " as a long.", e); - } - } - - private String readLine(InputStream in, StringBuffer sb) throws IOException { - return readToken(in, sb, '\n'); - } - - private String readToken(InputStream in, StringBuffer sb, char endOfToken) - throws IOException { - sb.setLength(0); - while (true) { - int ch = in.read(); - if (ch == -1) { - if (sb.length() == 0) { - return null; - } - throw new IOException("Unexpected EOF"); - } - if (ch == endOfToken) { - return sb.toString(); - } - sb.append((char)ch); - } - } - - private AtomicFile getFile() { - File dataDir = Environment.getDataDirectory(); - File systemDir = new File(dataDir, "system"); - File fname = new File(systemDir, "package-usage.list"); - return new AtomicFile(fname); - } - - private static final String USAGE_FILE_MAGIC = "PACKAGE_USAGE__VERSION_"; - private static final String USAGE_FILE_MAGIC_VERSION_1 = USAGE_FILE_MAGIC + "1"; - } + private final CompilerStats mCompilerStats = new CompilerStats(); class PackageHandler extends Handler { private boolean mBound = false; @@ -2709,7 +2506,8 @@ public class PackageManagerService extends IPackageManager.Stub { // Now that we know all the packages we are keeping, // read and update their last usage times. - mPackageUsage.readLP(); + mPackageUsage.read(mPackages); + mCompilerStats.read(); EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SCAN_END, SystemClock.uptimeMillis()); @@ -7477,7 +7275,8 @@ public class PackageManagerService extends IPackageManager.Stub { // Package could not be found. Report failure. return PackageDexOptimizer.DEX_OPT_FAILED; } - mPackageUsage.write(false); + mPackageUsage.maybeWriteAsync(mPackages); + mCompilerStats.maybeWriteAsync(); } long callingId = Binder.clearCallingIdentity(); try { @@ -7522,11 +7321,12 @@ public class PackageManagerService extends IPackageManager.Stub { // Currently this will do a full compilation of the library by default. pdo.performDexOpt(depPackage, null /* sharedLibraries */, instructionSets, false /* checkProfiles */, - getCompilerFilterForReason(REASON_NON_SYSTEM_LIBRARY)); + getCompilerFilterForReason(REASON_NON_SYSTEM_LIBRARY), + getOrCreateCompilerPackageStats(depPackage)); } } return pdo.performDexOpt(p, p.usesLibraryFiles, instructionSets, checkProfiles, - targetCompilerFilter); + targetCompilerFilter, getOrCreateCompilerPackageStats(p)); } Collection<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) { @@ -7580,7 +7380,8 @@ public class PackageManagerService extends IPackageManager.Stub { } public void shutdown() { - mPackageUsage.write(true); + mPackageUsage.writeNow(mPackages); + mCompilerStats.writeNow(); } @Override @@ -11710,12 +11511,18 @@ public class PackageManagerService extends IPackageManager.Stub { if (pkgSetting == null) { return false; } + // Do not allow "android" is being disabled + if ("android".equals(packageName)) { + Slog.w(TAG, "Cannot hide package: android"); + return false; + } // Only allow protected packages to hide themselves. if (hidden && !UserHandle.isSameApp(uid, pkgSetting.appId) && mProtectedPackages.isPackageStateProtected(userId, packageName)) { Slog.w(TAG, "Not hiding protected package: " + packageName); return false; } + if (pkgSetting.getHidden(userId) != hidden) { pkgSetting.setHidden(hidden, userId); mSettings.writePackageRestrictionsLPr(userId); @@ -15226,7 +15033,8 @@ public class PackageManagerService extends IPackageManager.Stub { // Also, don't fail application installs if the dexopt step fails. mPackageDexOptimizer.performDexOpt(pkg, pkg.usesLibraryFiles, null /* instructionSets */, false /* checkProfiles */, - getCompilerFilterForReason(REASON_INSTALL)); + getCompilerFilterForReason(REASON_INSTALL), + getOrCreateCompilerPackageStats(pkg)); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); // Notify BackgroundDexOptService that the package has been changed. @@ -16886,9 +16694,28 @@ public class PackageManagerService extends IPackageManager.Stub { filter.dump(new LogPrinter(Log.INFO, TAG), " "); pir.addFilter(new PreferredActivity(filter, match, set, activity, always)); scheduleWritePackageRestrictionsLocked(userId); + postPreferredActivityChangedBroadcast(userId); } } + private void postPreferredActivityChangedBroadcast(int userId) { + mHandler.post(() -> { + final IActivityManager am = ActivityManagerNative.getDefault(); + if (am == null) { + return; + } + + final Intent intent = new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED); + intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); + try { + am.broadcastIntent(null, intent, null, null, + 0, null, null, null, android.app.AppOpsManager.OP_NONE, + null, false, false, userId); + } catch (RemoteException e) { + } + }); + } + @Override public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, int userId) { @@ -17040,6 +16867,9 @@ public class PackageManagerService extends IPackageManager.Stub { changed = true; } } + if (changed) { + postPreferredActivityChangedBroadcast(userId); + } return changed; } @@ -17153,6 +16983,7 @@ public class PackageManagerService extends IPackageManager.Stub { mSettings.editPersistentPreferredActivitiesLPw(userId).addFilter( new PersistentPreferredActivity(filter, activity)); scheduleWritePackageRestrictionsLocked(userId); + postPreferredActivityChangedBroadcast(userId); } } @@ -17195,6 +17026,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (changed) { scheduleWritePackageRestrictionsLocked(userId); + postPreferredActivityChangedBroadcast(userId); } } } @@ -18187,6 +18019,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); public static final int DUMP_DOMAIN_PREFERRED = 1 << 18; public static final int DUMP_FROZEN = 1 << 19; public static final int DUMP_DEXOPT = 1 << 20; + public static final int DUMP_COMPILER_STATS = 1 << 21; public static final int OPTION_SHOW_FILTERS = 1 << 0; @@ -18304,6 +18137,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); pw.println(" installs: details about install sessions"); pw.println(" check-permission <permission> <package> [<user>]: does pkg hold perm?"); pw.println(" dexopt: dump dexopt state"); + pw.println(" compiler-stats: dump compiler statistics"); pw.println(" <package.name>: info about given package"); return; } else if ("--checkin".equals(opt)) { @@ -18425,6 +18259,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); dumpState.setDump(DumpState.DUMP_FROZEN); } else if ("dexopt".equals(cmd)) { dumpState.setDump(DumpState.DUMP_DEXOPT); + } else if ("compiler-stats".equals(cmd)) { + dumpState.setDump(DumpState.DUMP_COMPILER_STATS); } else if ("write".equals(cmd)) { synchronized (mPackages) { mSettings.writeLPr(); @@ -18787,6 +18623,11 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); dumpDexoptStateLPr(pw, packageName); } + if (!checkin && dumpState.isDumping(DumpState.DUMP_COMPILER_STATS)) { + if (dumpState.onTitlePrinted()) pw.println(); + dumpCompilerStatsLPr(pw, packageName); + } + if (!checkin && dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) { if (dumpState.onTitlePrinted()) pw.println(); mSettings.dumpReadMessagesLPr(pw, dumpState); @@ -18851,6 +18692,38 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } + private void dumpCompilerStatsLPr(PrintWriter pw, String packageName) { + final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); + ipw.println(); + ipw.println("Compiler stats:"); + ipw.increaseIndent(); + Collection<PackageParser.Package> packages = null; + if (packageName != null) { + PackageParser.Package targetPackage = mPackages.get(packageName); + if (targetPackage != null) { + packages = Collections.singletonList(targetPackage); + } else { + ipw.println("Unable to find package: " + packageName); + return; + } + } else { + packages = mPackages.values(); + } + + for (PackageParser.Package pkg : packages) { + ipw.println("[" + pkg.packageName + "]"); + ipw.increaseIndent(); + + CompilerStats.PackageStats stats = getCompilerPackageStats(pkg.packageName); + if (stats == null) { + ipw.println("(No recorded stats)"); + } else { + stats.dump(ipw); + } + ipw.decreaseIndent(); + } + } + private String dumpDomainString(String packageName) { List<IntentFilterVerificationInfo> iviList = getIntentFilterVerifications(packageName) .getList(); @@ -21012,4 +20885,20 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); msg.setData(data); mProcessLoggingHandler.sendMessage(msg); } + + public CompilerStats.PackageStats getCompilerPackageStats(String pkgName) { + return mCompilerStats.getPackageStats(pkgName); + } + + public CompilerStats.PackageStats getOrCreateCompilerPackageStats(PackageParser.Package pkg) { + return getOrCreateCompilerPackageStats(pkg.packageName); + } + + public CompilerStats.PackageStats getOrCreateCompilerPackageStats(String pkgName) { + return mCompilerStats.getOrCreatePackageStats(pkgName); + } + + public void deleteCompilerPackageStats(String pkgName) { + mCompilerStats.deletePackageStats(pkgName); + } } diff --git a/services/core/java/com/android/server/pm/PackageUsage.java b/services/core/java/com/android/server/pm/PackageUsage.java new file mode 100644 index 000000000000..ac1f739cd9f8 --- /dev/null +++ b/services/core/java/com/android/server/pm/PackageUsage.java @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.pm; + +import static android.os.Process.PACKAGE_INFO_GID; +import static android.os.Process.SYSTEM_UID; + +import android.content.pm.PackageManager; +import android.content.pm.PackageParser; +import android.os.FileUtils; +import android.util.AtomicFile; +import android.util.Log; + +import libcore.io.IoUtils; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +class PackageUsage extends AbstractStatsBase<Map<String, PackageParser.Package>> { + + private static final String USAGE_FILE_MAGIC = "PACKAGE_USAGE__VERSION_"; + private static final String USAGE_FILE_MAGIC_VERSION_1 = USAGE_FILE_MAGIC + "1"; + + private boolean mIsHistoricalPackageUsageAvailable = true; + + PackageUsage() { + super("package-usage.list", "PackageUsage_DiskWriter", /* lock */ true); + } + + boolean isHistoricalPackageUsageAvailable() { + return mIsHistoricalPackageUsageAvailable; + } + + @Override + protected void writeInternal(Map<String, PackageParser.Package> packages) { + AtomicFile file = getFile(); + FileOutputStream f = null; + try { + f = file.startWrite(); + BufferedOutputStream out = new BufferedOutputStream(f); + FileUtils.setPermissions(file.getBaseFile().getPath(), + 0640, SYSTEM_UID, PACKAGE_INFO_GID); + StringBuilder sb = new StringBuilder(); + + sb.append(USAGE_FILE_MAGIC_VERSION_1); + sb.append('\n'); + out.write(sb.toString().getBytes(StandardCharsets.US_ASCII)); + + for (PackageParser.Package pkg : packages.values()) { + if (pkg.getLatestPackageUseTimeInMills() == 0L) { + continue; + } + sb.setLength(0); + sb.append(pkg.packageName); + for (long usageTimeInMillis : pkg.mLastPackageUsageTimeInMills) { + sb.append(' '); + sb.append(usageTimeInMillis); + } + sb.append('\n'); + out.write(sb.toString().getBytes(StandardCharsets.US_ASCII)); + } + out.flush(); + file.finishWrite(f); + } catch (IOException e) { + if (f != null) { + file.failWrite(f); + } + Log.e(PackageManagerService.TAG, "Failed to write package usage times", e); + } + } + + @Override + protected void readInternal(Map<String, PackageParser.Package> packages) { + AtomicFile file = getFile(); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(file.openRead()); + StringBuffer sb = new StringBuffer(); + + String firstLine = readLine(in, sb); + if (firstLine == null) { + // Empty file. Do nothing. + } else if (USAGE_FILE_MAGIC_VERSION_1.equals(firstLine)) { + readVersion1LP(packages, in, sb); + } else { + readVersion0LP(packages, in, sb, firstLine); + } + } catch (FileNotFoundException expected) { + mIsHistoricalPackageUsageAvailable = false; + } catch (IOException e) { + Log.w(PackageManagerService.TAG, "Failed to read package usage times", e); + } finally { + IoUtils.closeQuietly(in); + } + } + + private void readVersion0LP(Map<String, PackageParser.Package> packages, InputStream in, + StringBuffer sb, String firstLine) + throws IOException { + // Initial version of the file had no version number and stored one + // package-timestamp pair per line. + // Note that the first line has already been read from the InputStream. + for (String line = firstLine; line != null; line = readLine(in, sb)) { + String[] tokens = line.split(" "); + if (tokens.length != 2) { + throw new IOException("Failed to parse " + line + + " as package-timestamp pair."); + } + + String packageName = tokens[0]; + PackageParser.Package pkg = packages.get(packageName); + if (pkg == null) { + continue; + } + + long timestamp = parseAsLong(tokens[1]); + for (int reason = 0; + reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT; + reason++) { + pkg.mLastPackageUsageTimeInMills[reason] = timestamp; + } + } + } + + private void readVersion1LP(Map<String, PackageParser.Package> packages, InputStream in, + StringBuffer sb) throws IOException { + // Version 1 of the file started with the corresponding version + // number and then stored a package name and eight timestamps per line. + String line; + while ((line = readLine(in, sb)) != null) { + String[] tokens = line.split(" "); + if (tokens.length != PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT + 1) { + throw new IOException("Failed to parse " + line + " as a timestamp array."); + } + + String packageName = tokens[0]; + PackageParser.Package pkg = packages.get(packageName); + if (pkg == null) { + continue; + } + + for (int reason = 0; + reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT; + reason++) { + pkg.mLastPackageUsageTimeInMills[reason] = parseAsLong(tokens[reason + 1]); + } + } + } + + private long parseAsLong(String token) throws IOException { + try { + return Long.parseLong(token); + } catch (NumberFormatException e) { + throw new IOException("Failed to parse " + token + " as a long.", e); + } + } + + private String readLine(InputStream in, StringBuffer sb) throws IOException { + return readToken(in, sb, '\n'); + } + + private String readToken(InputStream in, StringBuffer sb, char endOfToken) + throws IOException { + sb.setLength(0); + while (true) { + int ch = in.read(); + if (ch == -1) { + if (sb.length() == 0) { + return null; + } + throw new IOException("Unexpected EOF"); + } + if (ch == endOfToken) { + return sb.toString(); + } + sb.append((char)ch); + } + } +}
\ No newline at end of file diff --git a/services/core/java/com/android/server/pm/ShortcutLauncher.java b/services/core/java/com/android/server/pm/ShortcutLauncher.java index e667838ad5e5..df51923c97d3 100644 --- a/services/core/java/com/android/server/pm/ShortcutLauncher.java +++ b/services/core/java/com/android/server/pm/ShortcutLauncher.java @@ -25,6 +25,8 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.ShortcutUser.PackageWithUser; +import org.json.JSONException; +import org.json.JSONObject; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -288,6 +290,15 @@ class ShortcutLauncher extends ShortcutPackageItem { } } + @Override + public JSONObject dumpCheckin(boolean clear) throws JSONException { + final JSONObject result = super.dumpCheckin(clear); + + // Nothing really interesting to dump. + + return result; + } + @VisibleForTesting ArraySet<String> getAllPinnedShortcutsForTest(String packageName, int packageUserId) { return new ArraySet<>(mPinnedShortcuts.get(PackageWithUser.of(packageUserId, packageName))); diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java index 3c1819880806..7d57f33604d8 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackage.java +++ b/services/core/java/com/android/server/pm/ShortcutPackage.java @@ -36,6 +36,8 @@ import com.android.internal.util.XmlUtils; import com.android.server.pm.ShortcutService.ShortcutOperation; import com.android.server.pm.ShortcutService.Stats; +import org.json.JSONException; +import org.json.JSONObject; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -93,6 +95,12 @@ class ShortcutPackage extends ShortcutPackageItem { private static final String TAG_STRING_ARRAY_XMLUTILS = "string-array"; private static final String ATTR_NAME_XMLUTILS = "name"; + private static final String KEY_DYNAMIC = "dynamic"; + private static final String KEY_MANIFEST = "manifest"; + private static final String KEY_PINNED = "pinned"; + private static final String KEY_BITMAPS = "bitmaps"; + private static final String KEY_BITMAP_BYTES = "bitmapBytes"; + /** * All the shortcuts from the package, keyed on IDs. */ @@ -1199,6 +1207,42 @@ class ShortcutPackage extends ShortcutPackageItem { } @Override + public JSONObject dumpCheckin(boolean clear) throws JSONException { + final JSONObject result = super.dumpCheckin(clear); + + int numDynamic = 0; + int numPinned = 0; + int numManifest = 0; + int numBitmaps = 0; + long totalBitmapSize = 0; + + final ArrayMap<String, ShortcutInfo> shortcuts = mShortcuts; + final int size = shortcuts.size(); + for (int i = 0; i < size; i++) { + final ShortcutInfo si = shortcuts.valueAt(i); + + if (si.isDynamic()) numDynamic++; + if (si.isDeclaredInManifest()) numManifest++; + if (si.isPinned()) numPinned++; + + if (si.getBitmapPath() != null) { + numBitmaps++; + totalBitmapSize += new File(si.getBitmapPath()).length(); + } + } + + result.put(KEY_DYNAMIC, numDynamic); + result.put(KEY_MANIFEST, numManifest); + result.put(KEY_PINNED, numPinned); + result.put(KEY_BITMAPS, numBitmaps); + result.put(KEY_BITMAP_BYTES, totalBitmapSize); + + // TODO Log update frequency too. + + return result; + } + + @Override public void saveToXml(@NonNull XmlSerializer out, boolean forBackup) throws IOException, XmlPullParserException { final int size = mShortcuts.size(); diff --git a/services/core/java/com/android/server/pm/ShortcutPackageItem.java b/services/core/java/com/android/server/pm/ShortcutPackageItem.java index 26b52e918a04..79b5c4eae1dc 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackageItem.java +++ b/services/core/java/com/android/server/pm/ShortcutPackageItem.java @@ -21,6 +21,8 @@ import android.util.Slog; import com.android.internal.util.Preconditions; +import org.json.JSONException; +import org.json.JSONObject; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -31,6 +33,7 @@ import java.io.IOException; */ abstract class ShortcutPackageItem { private static final String TAG = ShortcutService.TAG; + private static final String KEY_NAME = "name"; private final int mPackageUserId; private final String mPackageName; @@ -137,6 +140,12 @@ abstract class ShortcutPackageItem { public abstract void saveToXml(@NonNull XmlSerializer out, boolean forBackup) throws IOException, XmlPullParserException; + public JSONObject dumpCheckin(boolean clear) throws JSONException { + final JSONObject result = new JSONObject(); + result.put(KEY_NAME, mPackageName); + return result; + } + /** * Verify various internal states. */ diff --git a/services/core/java/com/android/server/pm/ShortcutParser.java b/services/core/java/com/android/server/pm/ShortcutParser.java index 0762c0b21678..3f302d67acf6 100644 --- a/services/core/java/com/android/server/pm/ShortcutParser.java +++ b/services/core/java/com/android/server/pm/ShortcutParser.java @@ -29,6 +29,7 @@ import android.util.ArraySet; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; +import android.util.TypedValue; import android.util.Xml; import com.android.internal.R; @@ -260,7 +261,12 @@ public class ShortcutParser { final TypedArray sa = service.mContext.getResources().obtainAttributes(attrs, R.styleable.ShortcutCategories); try { - return sa.getString(R.styleable.ShortcutCategories_name); + if (sa.getType(R.styleable.ShortcutCategories_name) == TypedValue.TYPE_STRING) { + return sa.getNonResourceString(R.styleable.ShortcutCategories_name); + } else { + Log.w(TAG, "android:name for shortcut category must be string literal."); + return null; + } } finally { sa.recycle(); } @@ -272,7 +278,11 @@ public class ShortcutParser { final TypedArray sa = service.mContext.getResources().obtainAttributes(attrs, R.styleable.Shortcut); try { - final String id = sa.getString(R.styleable.Shortcut_shortcutId); + if (sa.getType(R.styleable.Shortcut_shortcutId) != TypedValue.TYPE_STRING) { + Log.w(TAG, "android:shortcutId must be string literal. activity=" + activity); + return null; + } + final String id = sa.getNonResourceString(R.styleable.Shortcut_shortcutId); final boolean enabled = sa.getBoolean(R.styleable.Shortcut_enabled, true); final int iconResId = sa.getResourceId(R.styleable.Shortcut_icon, 0); final int titleResId = sa.getResourceId(R.styleable.Shortcut_shortcutShortLabel, 0); @@ -281,11 +291,11 @@ public class ShortcutParser { R.styleable.Shortcut_shortcutDisabledMessage, 0); if (TextUtils.isEmpty(id)) { - Slog.w(TAG, "Shortcut ID must be provided. activity=" + activity); + Log.w(TAG, "android:shortcutId must be provided. activity=" + activity); return null; } if (titleResId == 0) { - Slog.w(TAG, "Shortcut title must be provided. activity=" + activity); + Log.w(TAG, "android:shortcutShortLabel must be provided. activity=" + activity); return null; } diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index 4286cd942979..a91e2842261d 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -95,6 +95,9 @@ import com.android.server.pm.ShortcutUser.PackageWithUser; import libcore.io.IoUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -184,6 +187,10 @@ public class ShortcutService extends IShortcutService.Stub { private static final String LAUNCHER_INTENT_CATEGORY = Intent.CATEGORY_LAUNCHER; + private static final String KEY_SHORTCUT = "shortcut"; + private static final String KEY_LOW_RAM = "lowRam"; + private static final String KEY_ICON_SIZE = "iconSize"; + @VisibleForTesting interface ConfigConstants { /** @@ -385,6 +392,12 @@ public class ShortcutService extends IShortcutService.Stub { mContext.registerReceiverAsUser(mPackageMonitor, UserHandle.ALL, packageFilter, null, mHandler); + final IntentFilter preferedActivityFilter = new IntentFilter(); + preferedActivityFilter.addAction(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED); + preferedActivityFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + mContext.registerReceiverAsUser(mPackageMonitor, UserHandle.ALL, + preferedActivityFilter, null, mHandler); + final IntentFilter localeFilter = new IntentFilter(); localeFilter.addAction(Intent.ACTION_LOCALE_CHANGED); localeFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); @@ -1346,10 +1359,18 @@ public class ShortcutService extends IShortcutService.Stub { if (isCallerSystem()) { return; } - injectEnforceCallingPermission( + enforceCallingOrSelfPermission( android.Manifest.permission.RESET_SHORTCUT_MANAGER_THROTTLING, null); } + private void enforceCallingOrSelfPermission( + @NonNull String permission, @Nullable String message) { + if (isCallerSystem()) { + return; + } + injectEnforceCallingPermission(permission, message); + } + /** * Somehow overriding ServiceContext.enforceCallingPermission() in the unit tests would confuse * mockito. So instead we extracted it here and override it in the tests. @@ -1923,7 +1944,12 @@ public class ShortcutService extends IShortcutService.Stub { // We override this method in unit tests to do a simpler check. boolean hasShortcutHostPermission(@NonNull String callingPackage, int userId) { - return hasShortcutHostPermissionInner(callingPackage, userId); + final long start = injectElapsedRealtime(); + try { + return hasShortcutHostPermissionInner(callingPackage, userId); + } finally { + logDurationStat(Stats.LAUNCHER_PERMISSION_CHECK, start); + } } // This method is extracted so we can directly call this method from unit tests, @@ -1931,15 +1957,22 @@ public class ShortcutService extends IShortcutService.Stub { @VisibleForTesting boolean hasShortcutHostPermissionInner(@NonNull String callingPackage, int userId) { synchronized (mLock) { - final long start = injectElapsedRealtime(); - final ShortcutUser user = getUserShortcutsLocked(userId); + // Always trust the in-memory cache. + final ComponentName cached = user.getCachedLauncher(); + if (cached != null) { + if (cached.getPackageName().equals(callingPackage)) { + return true; + } + } + // If the cached one doesn't match, then go ahead + final List<ResolveInfo> allHomeCandidates = new ArrayList<>(); // Default launcher from package manager. final long startGetHomeActivitiesAsUser = injectElapsedRealtime(); - final ComponentName defaultLauncher = injectPackageManagerInternal() + final ComponentName defaultLauncher = mPackageManagerInternal .getHomeActivitiesAsUser(allHomeCandidates, userId); logDurationStat(Stats.GET_DEFAULT_HOME, startGetHomeActivitiesAsUser); @@ -1950,7 +1983,7 @@ public class ShortcutService extends IShortcutService.Stub { Slog.v(TAG, "Default launcher from PM: " + detected); } } else { - detected = user.getDefaultLauncherComponent(); + detected = user.getLastKnownLauncher(); if (detected != null) { if (injectIsActivityEnabledAndExported(detected, userId)) { @@ -1960,7 +1993,7 @@ public class ShortcutService extends IShortcutService.Stub { } else { Slog.w(TAG, "Cached launcher " + detected + " no longer exists"); detected = null; - user.setDefaultLauncherComponent(null); + user.clearLauncher(); } } } @@ -1991,13 +2024,13 @@ public class ShortcutService extends IShortcutService.Stub { lastPriority = ri.priority; } } - logDurationStat(Stats.LAUNCHER_PERMISSION_CHECK, start); + // Update the cache. + user.setLauncher(detected); if (detected != null) { if (DEBUG) { Slog.v(TAG, "Detected launcher: " + detected); } - user.setDefaultLauncherComponent(detected); return detected.getPackageName().equals(callingPackage); } else { // Default launcher not found. @@ -2358,6 +2391,17 @@ public class ShortcutService extends IShortcutService.Stub { return; } + // Whenever we get one of those package broadcasts, or get + // ACTION_PREFERRED_ACTIVITY_CHANGED, we purge the default launcher cache. + synchronized (mLock) { + final ShortcutUser user = getUserShortcutsLocked(userId); + user.clearLauncher(); + } + if (Intent.ACTION_PREFERRED_ACTIVITY_CHANGED.equals(action)) { + // Nothing farther to do. + return; + } + final Uri intentUri = intent.getData(); final String packageName = (intentUri != null) ? intentUri.getSchemeSpecificPart() : null; @@ -2952,20 +2996,29 @@ public class ShortcutService extends IShortcutService.Stub { @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) - != PackageManager.PERMISSION_GRANTED) { - pw.println("Permission Denial: can't dump UserManager from from pid=" - + Binder.getCallingPid() - + ", uid=" + Binder.getCallingUid() - + " without permission " - + android.Manifest.permission.DUMP); - return; + enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, + "can't dump by this caller"); + boolean checkin = false; + boolean clear = false; + if (args != null) { + for (String arg : args) { + if ("-c".equals(arg)) { + checkin = true; + } else if ("--checkin".equals(arg)) { + checkin = true; + clear = true; + } + } + } + + if (checkin) { + dumpCheckin(pw, clear); + } else { + dumpInner(pw); } - dumpInner(pw, args); } - @VisibleForTesting - void dumpInner(PrintWriter pw, String[] args) { + private void dumpInner(PrintWriter pw) { synchronized (mLock) { final long now = injectCurrentTimeMillis(); pw.print("Now: ["); @@ -3077,6 +3130,34 @@ public class ShortcutService extends IShortcutService.Stub { (count == 0 ? 0 : ((double) dur) / count))); } + /** + * Dumpsys for checkin. + * + * @param clear if true, clear the history information. Some other system services have this + * behavior but shortcut service doesn't for now. + */ + private void dumpCheckin(PrintWriter pw, boolean clear) { + synchronized (mLock) { + try { + final JSONArray users = new JSONArray(); + + for (int i = 0; i < mUsers.size(); i++) { + users.put(mUsers.valueAt(i).dumpCheckin(clear)); + } + + final JSONObject result = new JSONObject(); + + result.put(KEY_SHORTCUT, users); + result.put(KEY_LOW_RAM, injectIsLowRamDevice()); + result.put(KEY_ICON_SIZE, mMaxIconDimension); + + pw.println(result.toString(1)); + } catch (JSONException e) { + Slog.e(TAG, "Unable to write in json", e); + } + } + } + // === Shell support === @Override @@ -3260,7 +3341,7 @@ public class ShortcutService extends IShortcutService.Stub { private void clearLauncher() { synchronized (mLock) { - getUserShortcutsLocked(mUserId).setDefaultLauncherComponent(null); + getUserShortcutsLocked(mUserId).forceClearLauncher(); } } @@ -3270,7 +3351,7 @@ public class ShortcutService extends IShortcutService.Stub { hasShortcutHostPermissionInner("-", mUserId); getOutPrintWriter().println("Launcher: " - + getUserShortcutsLocked(mUserId).getDefaultLauncherComponent()); + + getUserShortcutsLocked(mUserId).getLastKnownLauncher()); } } @@ -3394,11 +3475,6 @@ public class ShortcutService extends IShortcutService.Stub { } } - @VisibleForTesting - PackageManagerInternal injectPackageManagerInternal() { - return mPackageManagerInternal; - } - File getUserBitmapFilePath(@UserIdInt int userId) { return new File(injectUserDataPath(userId), DIRECTORY_BITMAPS); } @@ -3482,7 +3558,7 @@ public class ShortcutService extends IShortcutService.Stub { } private void verifyStatesInner() { - synchronized (this) { + synchronized (mLock) { forEachLoadedUserLocked(u -> u.forAllPackageItems(ShortcutPackageItem::verifyStates)); } } diff --git a/services/core/java/com/android/server/pm/ShortcutUser.java b/services/core/java/com/android/server/pm/ShortcutUser.java index 9649641fe96a..21e4165e6a67 100644 --- a/services/core/java/com/android/server/pm/ShortcutUser.java +++ b/services/core/java/com/android/server/pm/ShortcutUser.java @@ -32,6 +32,9 @@ import com.android.internal.util.Preconditions; import libcore.util.Objects; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -55,6 +58,9 @@ class ShortcutUser { private static final String ATTR_VALUE = "value"; private static final String ATTR_KNOWN_LOCALES = "locales"; private static final String ATTR_LAST_APP_SCAN_TIME = "last-app-scan-time"; + private static final String KEY_USER_ID = "userId"; + private static final String KEY_LAUNCHERS = "launchers"; + private static final String KEY_PACKAGES = "packages"; static final class PackageWithUser { final int userId; @@ -103,8 +109,15 @@ class ShortcutUser { private final ArrayMap<PackageWithUser, ShortcutLauncher> mLaunchers = new ArrayMap<>(); - /** Default launcher that can access the launcher apps APIs. */ - private ComponentName mDefaultLauncherComponent; + /** + * Last known launcher. It's used when the default launcher isn't set in PM -- i.e. + * when getHomeActivitiesAsUser() return null. We need it so that in this situation the + * previously default launcher can still access shortcuts. + */ + private ComponentName mLastKnownLauncher; + + /** In-memory-cached default launcher. */ + private ComponentName mCachedLauncher; private String mKnownLocales; @@ -304,8 +317,7 @@ class ShortcutUser { ShortcutService.writeAttr(out, ATTR_LAST_APP_SCAN_TIME, mLastAppScanTime); - ShortcutService.writeTagValue(out, TAG_LAUNCHER, - mDefaultLauncherComponent); + ShortcutService.writeTagValue(out, TAG_LAUNCHER, mLastKnownLauncher); // Can't use forEachPackageItem due to the checked exceptions. { @@ -364,7 +376,7 @@ class ShortcutUser { if (depth == outerDepth + 1) { switch (tag) { case TAG_LAUNCHER: { - ret.mDefaultLauncherComponent = ShortcutService.parseComponentNameAttribute( + ret.mLastKnownLauncher = ShortcutService.parseComponentNameAttribute( parser, ATTR_VALUE); continue; } @@ -389,18 +401,44 @@ class ShortcutUser { return ret; } - public ComponentName getDefaultLauncherComponent() { - return mDefaultLauncherComponent; + public ComponentName getLastKnownLauncher() { + return mLastKnownLauncher; + } + + public void setLauncher(ComponentName launcherComponent) { + setLauncher(launcherComponent, /* allowPurgeLastKnown */ false); + } + + /** Clears the launcher information without clearing the last known one */ + public void clearLauncher() { + setLauncher(null); + } + + /** + * Clears the launcher information *with(* clearing the last known one; we do this witl + * "cmd shortcut clear-default-launcher". + */ + public void forceClearLauncher() { + setLauncher(null, /* allowPurgeLastKnown */ true); } - public void setDefaultLauncherComponent(ComponentName launcherComponent) { - if (Objects.equal(mDefaultLauncherComponent, launcherComponent)) { + private void setLauncher(ComponentName launcherComponent, boolean allowPurgeLastKnown) { + mCachedLauncher = launcherComponent; // Always update the in-memory cache. + + if (Objects.equal(mLastKnownLauncher, launcherComponent)) { return; } - mDefaultLauncherComponent = launcherComponent; + if (!allowPurgeLastKnown && launcherComponent == null) { + return; + } + mLastKnownLauncher = launcherComponent; mService.scheduleSaveUser(mUserId); } + public ComponentName getCachedLauncher() { + return mCachedLauncher; + } + public void resetThrottling() { for (int i = mPackages.size() - 1; i >= 0; i--) { mPackages.valueAt(i).resetThrottling(); @@ -422,8 +460,13 @@ class ShortcutUser { prefix += prefix + " "; pw.print(prefix); - pw.print("Default launcher: "); - pw.print(mDefaultLauncherComponent); + pw.print("Cached launcher: "); + pw.print(mCachedLauncher); + pw.println(); + + pw.print(prefix); + pw.print("Last known launcher: "); + pw.print(mLastKnownLauncher); pw.println(); for (int i = 0; i < mLaunchers.size(); i++) { @@ -466,4 +509,28 @@ class ShortcutUser { pw.print(Formatter.formatFileSize(mService.mContext, size)); pw.println(")"); } + + public JSONObject dumpCheckin(boolean clear) throws JSONException { + final JSONObject result = new JSONObject(); + + result.put(KEY_USER_ID, mUserId); + + { + final JSONArray launchers = new JSONArray(); + for (int i = 0; i < mLaunchers.size(); i++) { + launchers.put(mLaunchers.valueAt(i).dumpCheckin(clear)); + } + result.put(KEY_LAUNCHERS, launchers); + } + + { + final JSONArray packages = new JSONArray(); + for (int i = 0; i < mPackages.size(); i++) { + packages.put(mPackages.valueAt(i).dumpCheckin(clear)); + } + result.put(KEY_PACKAGES, packages); + } + + return result; + } } diff --git a/services/core/java/com/android/server/twilight/TwilightService.java b/services/core/java/com/android/server/twilight/TwilightService.java index 89e5e5833117..ee7a4a0d5599 100644 --- a/services/core/java/com/android/server/twilight/TwilightService.java +++ b/services/core/java/com/android/server/twilight/TwilightService.java @@ -16,18 +16,12 @@ package com.android.server.twilight; -import com.android.server.SystemService; -import com.android.server.TwilightCalculator; - -import android.app.ActivityManager; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.database.ContentObserver; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; @@ -36,64 +30,52 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; -import android.os.UserHandle; -import android.provider.Settings; -import android.provider.Settings.Secure; import android.text.format.DateUtils; import android.text.format.Time; import android.util.Slog; +import com.android.internal.annotations.GuardedBy; +import com.android.server.SystemService; +import com.android.server.TwilightCalculator; + import java.util.ArrayList; import java.util.Iterator; - -import libcore.util.Objects; +import java.util.List; +import java.util.Objects; /** * Figures out whether it's twilight time based on the user's location. - * + * <p> * Used by the UI mode manager and other components to adjust night mode * effects based on sunrise and sunset. */ public final class TwilightService extends SystemService { - static final String TAG = "TwilightService"; - static final boolean DEBUG = false; - static final String ACTION_UPDATE_TWILIGHT_STATE = - "com.android.server.action.UPDATE_TWILIGHT_STATE"; - // The amount of time after or before sunrise over which to start adjusting - // twilight affected things. We want the change to happen gradually so that - // it is below the threshold of perceptibility and so that the adjustment has - // maximum effect well after dusk. - private static final long TWILIGHT_ADJUSTMENT_TIME = DateUtils.HOUR_IN_MILLIS * 2; - - // Broadcast when twilight changes. - public static final String ACTION_TWILIGHT_CHANGED = "android.intent.action.TWILIGHT_CHANGED"; - - public static final String EXTRA_IS_NIGHT = "isNight"; - public static final String EXTRA_AMOUNT = "amount"; - - // Amount of time the TwilightService will stay locked in an override state before switching - // back to auto. - private static final long RESET_TIME = DateUtils.HOUR_IN_MILLIS * 2; - private static final String EXTRA_RESET_USER = "user"; + private static final String TAG = "TwilightService"; + private static final boolean DEBUG = false; - private static final String ACTION_RESET_TWILIGHT_AUTO = - "com.android.server.action.RESET_TWILIGHT_AUTO"; + private static final String ACTION_UPDATE_TWILIGHT_STATE = + "com.android.server.action.UPDATE_TWILIGHT_STATE"; - final Object mLock = new Object(); + /** + * The amount of time after or before sunrise over which to start adjusting twilight affected + * things. We want the change to happen gradually so that it is below the threshold of + * perceptibility and so that the adjustment has and so that the adjustment has + * maximum effect well after dusk. + */ + private static final long TWILIGHT_ADJUSTMENT_TIME = DateUtils.HOUR_IN_MILLIS * 2; - AlarmManager mAlarmManager; - LocationManager mLocationManager; - LocationHandler mLocationHandler; + private final Object mLock = new Object(); - final ArrayList<TwilightListenerRecord> mListeners = - new ArrayList<TwilightListenerRecord>(); + @GuardedBy("mLock") + private final List<TwilightListenerRecord> mListeners = new ArrayList<>(); - TwilightState mTwilightState; + private AlarmManager mAlarmManager; + private LocationManager mLocationManager; + private LocationHandler mLocationHandler; - private int mCurrentUser; - private boolean mLocked; - private boolean mBootCompleted; + @GuardedBy("mLock") + private TwilightState mTwilightState; public TwilightService(Context context) { super(context); @@ -105,13 +87,11 @@ public final class TwilightService extends SystemService { mLocationManager = (LocationManager) getContext().getSystemService( Context.LOCATION_SERVICE); mLocationHandler = new LocationHandler(); - mCurrentUser = ActivityManager.getCurrentUser(); IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); filter.addAction(Intent.ACTION_TIME_CHANGED); filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); - filter.addAction(ACTION_UPDATE_TWILIGHT_STATE); getContext().registerReceiver(mReceiver, filter); publishLocalService(TwilightManager.class, mService); @@ -120,81 +100,29 @@ public final class TwilightService extends SystemService { @Override public void onBootPhase(int phase) { if (phase == PHASE_BOOT_COMPLETED) { - getContext().getContentResolver().registerContentObserver( - Secure.getUriFor(Secure.TWILIGHT_MODE), false, mContentObserver, mCurrentUser); - mContentObserver.onChange(true); - mBootCompleted = true; - sendBroadcast(); - } - } - - private void reregisterSettingObserver() { - final ContentResolver contentResolver = getContext().getContentResolver(); - contentResolver.unregisterContentObserver(mContentObserver); - contentResolver.registerContentObserver(Secure.getUriFor(Secure.TWILIGHT_MODE), false, - mContentObserver, mCurrentUser); - mContentObserver.onChange(true); - } - - private void setLockedState(TwilightState state) { - synchronized (mLock) { - // Make sure we aren't locked so we can set the state. - mLocked = false; - setTwilightState(state); - // Make sure we leave the state locked, so it cant be changed. - mLocked = true; - // TODO: Don't bother updating state when locked. + // Initialize the current twilight state. + mLocationHandler.requestTwilightUpdate(); } } private void setTwilightState(TwilightState state) { synchronized (mLock) { - if (mLocked) { - // State has been locked by secure setting, shouldn't be changed. - return; - } - if (!Objects.equal(mTwilightState, state)) { + if (!Objects.equals(mTwilightState, state)) { if (DEBUG) { Slog.d(TAG, "Twilight state changed: " + state); } mTwilightState = state; - final int listenerLen = mListeners.size(); - for (int i = 0; i < listenerLen; i++) { - mListeners.get(i).postUpdate(); + for (TwilightListenerRecord mListener : mListeners) { + mListener.postUpdate(); } } } - sendBroadcast(); - } - - private void sendBroadcast() { - synchronized (mLock) { - if (mTwilightState == null) { - return; - } - if (mBootCompleted) { - Intent intent = new Intent(ACTION_TWILIGHT_CHANGED); - intent.putExtra(EXTRA_IS_NIGHT, mTwilightState.isNight()); - intent.putExtra(EXTRA_AMOUNT, mTwilightState.getAmount()); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - getContext().sendStickyBroadcastAsUser(intent, UserHandle.ALL); - } - } - } - - private void scheduleReset() { - long resetTime = System.currentTimeMillis() + RESET_TIME; - Intent resetIntent = new Intent(ACTION_RESET_TWILIGHT_AUTO); - resetIntent.putExtra(EXTRA_RESET_USER, mCurrentUser); - PendingIntent pendingIntent = PendingIntent.getBroadcast( - getContext(), 0, resetIntent, 0); - mAlarmManager.cancel(pendingIntent); - mAlarmManager.setExact(AlarmManager.RTC, resetTime, pendingIntent); } private static class TwilightListenerRecord implements Runnable { + private final TwilightListener mListener; private final Handler mHandler; @@ -211,15 +139,9 @@ public final class TwilightService extends SystemService { public void run() { mListener.onTwilightStateChanged(); } - } private final TwilightManager mService = new TwilightManager() { - /** - * Gets the current twilight state. - * - * @return The current twilight state, or null if no information is available. - */ @Override public TwilightState getCurrentState() { synchronized (mLock) { @@ -227,11 +149,6 @@ public final class TwilightService extends SystemService { } } - /** - * Listens for twilight time. - * - * @param listener The listener. - */ @Override public void registerListener(TwilightListener listener, Handler handler) { synchronized (mLock) { @@ -286,6 +203,7 @@ public final class TwilightService extends SystemService { } private final class LocationHandler extends Handler { + private static final int MSG_ENABLE_LOCATION_UPDATES = 1; private static final int MSG_GET_NEW_LOCATION_UPDATE = 2; private static final int MSG_PROCESS_NEW_LOCATION = 3; @@ -301,13 +219,14 @@ public final class TwilightService extends SystemService { private static final double FACTOR_GMT_OFFSET_LONGITUDE = 1000.0 * 360.0 / DateUtils.DAY_IN_MILLIS; + private final TwilightCalculator mTwilightCalculator = new TwilightCalculator(); + private boolean mPassiveListenerEnabled; private boolean mNetworkListenerEnabled; private boolean mDidFirstInit; private long mLastNetworkRegisterTime = -MIN_LOCATION_UPDATE_MS; private long mLastUpdateInterval; private Location mLocation; - private final TwilightCalculator mTwilightCalculator = new TwilightCalculator(); public void processNewLocation(Location location) { Message msg = obtainMessage(MSG_PROCESS_NEW_LOCATION, location); @@ -334,14 +253,14 @@ public final class TwilightService extends SystemService { public void handleMessage(Message msg) { switch (msg.what) { case MSG_PROCESS_NEW_LOCATION: { - final Location location = (Location)msg.obj; + final Location location = (Location) msg.obj; final boolean hasMoved = hasMoved(mLocation, location); final boolean hasBetterAccuracy = mLocation == null || location.getAccuracy() < mLocation.getAccuracy(); if (DEBUG) { Slog.d(TAG, "Processing new location: " + location - + ", hasMoved=" + hasMoved - + ", hasBetterAccuracy=" + hasBetterAccuracy); + + ", hasMoved=" + hasMoved + + ", hasBetterAccuracy=" + hasBetterAccuracy); } if (hasMoved || hasBetterAccuracy) { setLocation(location); @@ -373,8 +292,8 @@ public final class TwilightService extends SystemService { // distance. boolean networkLocationEnabled; try { - networkLocationEnabled = - mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + networkLocationEnabled = mLocationManager.isProviderEnabled( + LocationManager.NETWORK_PROVIDER); } catch (Exception e) { // we may get IllegalArgumentException if network location provider // does not exist or is not yet installed. @@ -398,8 +317,8 @@ public final class TwilightService extends SystemService { // and network). boolean passiveLocationEnabled; try { - passiveLocationEnabled = - mLocationManager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER); + passiveLocationEnabled = mLocationManager.isProviderEnabled( + LocationManager.PASSIVE_PROVIDER); } catch (Exception e) { // we may get IllegalArgumentException if passive location provider // does not exist or is not yet installed. @@ -409,7 +328,7 @@ public final class TwilightService extends SystemService { if (!mPassiveListenerEnabled && passiveLocationEnabled) { mPassiveListenerEnabled = true; mLocationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, - 0, LOCATION_UPDATE_DISTANCE_METER , mLocationListener); + 0, LOCATION_UPDATE_DISTANCE_METER, mLocationListener); } if (!(mNetworkListenerEnabled && mPassiveListenerEnabled)) { @@ -444,14 +363,14 @@ public final class TwilightService extends SystemService { // pick the most recent location if (location == null || (lastKnownLocation != null && location.getElapsedRealtimeNanos() < - lastKnownLocation.getElapsedRealtimeNanos())) { + lastKnownLocation.getElapsedRealtimeNanos())) { location = lastKnownLocation; } } // In the case there is no location available (e.g. GPS fix or network location - // is not available yet), the longitude of the location is estimated using the timezone, - // latitude and accuracy are set to get a good average. + // is not available yet), the longitude of the location is estimated using the + // timezone, latitude and accuracy are set to get a good average. if (location == null) { Time currentTime = new Time(); currentTime.set(System.currentTimeMillis()); @@ -543,58 +462,22 @@ public final class TwilightService extends SystemService { Slog.d(TAG, "Next update in " + (nextUpdate - now) + " ms"); } - Intent updateIntent = new Intent(ACTION_UPDATE_TWILIGHT_STATE); - PendingIntent pendingIntent = PendingIntent.getBroadcast( - getContext(), 0, updateIntent, 0); + final PendingIntent pendingIntent = PendingIntent.getBroadcast( + getContext(), 0, new Intent(ACTION_UPDATE_TWILIGHT_STATE), 0); mAlarmManager.cancel(pendingIntent); mAlarmManager.setExact(AlarmManager.RTC, nextUpdate, pendingIntent); } } - private final ContentObserver mContentObserver = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - super.onChange(selfChange); - int value = Secure.getIntForUser(getContext().getContentResolver(), - Secure.TWILIGHT_MODE, Secure.TWILIGHT_MODE_AUTO, mCurrentUser); - if (value == Secure.TWILIGHT_MODE_LOCKED_OFF) { - setLockedState(new TwilightState(false, 0)); - } else if (value == Secure.TWILIGHT_MODE_LOCKED_ON) { - setLockedState(new TwilightState(true, 1)); - } else if (value == Secure.TWILIGHT_MODE_AUTO_OVERRIDE_OFF) { - setLockedState(new TwilightState(false, 0)); - scheduleReset(); - } else if (value == Secure.TWILIGHT_MODE_AUTO_OVERRIDE_ON) { - setLockedState(new TwilightState(true, 1)); - scheduleReset(); - } else { - mLocked = false; - mLocationHandler.requestTwilightUpdate(); - } - } - }; - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) { - mCurrentUser = ActivityManager.getCurrentUser(); - reregisterSettingObserver(); - return; - } if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction()) && !intent.getBooleanExtra("state", false)) { // Airplane mode is now off! mLocationHandler.requestLocationUpdate(); return; } - - if (ACTION_RESET_TWILIGHT_AUTO.equals(intent.getAction())) { - int user = intent.getIntExtra(EXTRA_RESET_USER, 0); - Settings.Secure.putIntForUser(getContext().getContentResolver(), - Secure.TWILIGHT_MODE, Secure.TWILIGHT_MODE_AUTO, user); - return; - } // Time zone has changed or alarm expired. mLocationHandler.requestTwilightUpdate(); } @@ -602,32 +485,40 @@ public final class TwilightService extends SystemService { // A LocationListener to initialize the network location provider. The location updates // are handled through the passive location provider. - private final LocationListener mEmptyLocationListener = new LocationListener() { + private final LocationListener mEmptyLocationListener = new LocationListener() { + @Override public void onLocationChanged(Location location) { } - public void onProviderDisabled(String provider) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { } + @Override public void onProviderEnabled(String provider) { } - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onProviderDisabled(String provider) { } }; private final LocationListener mLocationListener = new LocationListener() { + @Override public void onLocationChanged(Location location) { mLocationHandler.processNewLocation(location); } - public void onProviderDisabled(String provider) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { } + @Override public void onProviderEnabled(String provider) { } - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onProviderDisabled(String provider) { } }; } diff --git a/services/core/java/com/android/server/twilight/TwilightState.java b/services/core/java/com/android/server/twilight/TwilightState.java index 81abc132011a..dec053b83948 100644 --- a/services/core/java/com/android/server/twilight/TwilightState.java +++ b/services/core/java/com/android/server/twilight/TwilightState.java @@ -24,6 +24,7 @@ import java.util.Date; * This object is immutable. */ public class TwilightState { + private final boolean mIsNight; private final float mAmount; diff --git a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java index 40ee5d88fc8a..7126cb51b57f 100644 --- a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java +++ b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java @@ -215,7 +215,11 @@ public class EnabledComponentsObserver implements SettingChangeListener { */ public ArraySet<ComponentName> getInstalled(int userId) { synchronized (mLock) { - return mInstalledSet.get(userId); + ArraySet<ComponentName> ret = mInstalledSet.get(userId); + if (ret == null) { + return new ArraySet<ComponentName>(); + } + return ret; } } @@ -227,7 +231,12 @@ public class EnabledComponentsObserver implements SettingChangeListener { */ public ArraySet<ComponentName> getEnabled(int userId) { synchronized (mLock) { - return mEnabledSet.get(userId); + ArraySet<ComponentName> ret = mEnabledSet.get(userId); + if (ret == null) { + return new ArraySet<ComponentName>(); + } + return ret; + } } diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 4b58a3b6a7aa..f7a92fe7d952 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -1470,19 +1470,27 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { } @Override - public void setWallpaperComponentChecked(ComponentName name, String callingPackage) { + public void setWallpaperComponentChecked(ComponentName name, String callingPackage, + int userId) { + if (isWallpaperSupported(callingPackage) && isSetWallpaperAllowed(callingPackage)) { - setWallpaperComponent(name); + setWallpaperComponent(name, userId); } } // ToDo: Remove this version of the function @Override public void setWallpaperComponent(ComponentName name) { + setWallpaperComponent(name, UserHandle.getCallingUserId()); + } + + private void setWallpaperComponent(ComponentName name, int userId) { + userId = ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId, + false /* all */, true /* full */, "changing live wallpaper", null /* pkg */); checkPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT); + synchronized (mLock) { if (DEBUG) Slog.v(TAG, "setWallpaperComponent name=" + name); - int userId = UserHandle.getCallingUserId(); WallpaperData wallpaper = mWallpaperMap.get(userId); if (wallpaper == null) { throw new IllegalStateException("Wallpaper not yet initialized for user " + userId); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 2120be1ec531..159ec4c2c535 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -5111,10 +5111,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { boolean legacyApp = false; if (ai.targetSdkVersion <= Build.VERSION_CODES.M) { legacyApp = true; - } else if ("com.google.android.apps.enterprise.dmagent".equals(ai.packageName) - && ai.versionCode == 697) { - // TODO: STOPSHIP remove this (revert ag/895987) once a new prebuilt is dropped - legacyApp = true; } final int rawStatus = getEncryptionStatus(); diff --git a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java index 53c2fd7ce543..407d315f9973 100644 --- a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java +++ b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java @@ -30,7 +30,7 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; -import libcore.io.IoUtils; +import libcore.io.IoBridge; import libcore.util.HexEncoding; import java.io.FileDescriptor; @@ -457,7 +457,9 @@ public class RouterAdvertisementDaemon { private void closeSocket() { if (mSocket != null) { - IoUtils.closeQuietly(mSocket); + try { + IoBridge.closeAndSignalBlockedThreads(mSocket); + } catch (IOException ignored) {} } mSocket = null; } diff --git a/services/tests/servicestests/assets/shortcut/dumpsys_expected.txt b/services/tests/servicestests/assets/shortcut/dumpsys_expected.txt new file mode 100644 index 000000000000..eed2087f80ef --- /dev/null +++ b/services/tests/servicestests/assets/shortcut/dumpsys_expected.txt @@ -0,0 +1,105 @@ +{ + "shortcut": [ + { + "userId": 0, + "launchers": [ + { + "name": "com.android.launcher.1" + }, + { + "name": "com.android.launcher.2" + }, + { + "name": "com.android.launcher.3" + }, + { + "name": "com.android.launcher.4" + }, + { + "name": "com.android.launcher.1" + } + ], + "packages": [ + { + "name": "com.android.test.1", + "dynamic": 3, + "manifest": 0, + "pinned": 4, + "bitmaps": 0, + "bitmapBytes": 0 + }, + { + "name": "com.android.test.2", + "dynamic": 4, + "manifest": 0, + "pinned": 5, + "bitmaps": 2, + "bitmapBytes": ***BITMAP_SIZE*** + }, + { + "name": "com.android.test.3", + "dynamic": 3, + "manifest": 0, + "pinned": 6, + "bitmaps": 0, + "bitmapBytes": 0 + }, + { + "name": "com.android.test.4", + "dynamic": 0, + "manifest": 0, + "pinned": 0, + "bitmaps": 0, + "bitmapBytes": 0 + } + ] + }, + { + "userId": 10, + "launchers": [ + { + "name": "com.android.launcher.1" + } + ], + "packages": [ + { + "name": "com.android.test.1", + "dynamic": 3, + "manifest": 0, + "pinned": 2, + "bitmaps": 0, + "bitmapBytes": 0 + } + ] + }, + { + "userId": 20, + "launchers": [ + { + "name": "com.android.launcher.1" + }, + { + "name": "com.android.launcher.2" + }, + { + "name": "com.android.launcher.3" + }, + { + "name": "com.android.launcher.1" + } + ], + "packages": [ + { + "name": "com.android.test.1", + "dynamic": 3, + "manifest": 0, + "pinned": 6, + "bitmaps": 0, + "bitmapBytes": 0 + } + ] + } + ], + "lowRam": false, + "iconSize": 128 +} diff --git a/services/tests/servicestests/res/xml/shortcut_error_3.xml b/services/tests/servicestests/res/xml/shortcut_error_3.xml index a7b9b84a9e3c..24ee024f64a4 100644 --- a/services/tests/servicestests/res/xml/shortcut_error_3.xml +++ b/services/tests/servicestests/res/xml/shortcut_error_3.xml @@ -19,6 +19,10 @@ android:shortcutShortLabel="@string/shortcut_title1" /> <shortcut + android:shortcutId="@string/shortcut_title1" + android:shortcutShortLabel="@string/shortcut_title1" + /> + <shortcut android:shortcutId="x3" android:shortcutShortLabel="@string/shortcut_title1" > @@ -26,5 +30,7 @@ android:action="android.intent.action.VIEW" > </intent> + <categories android:name="@string/shortcut_title1" /> + <categories android:name="cat2" /> </shortcut> </shortcuts> diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 2652b8f7d032..586425564129 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -93,6 +93,8 @@ import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; @@ -303,11 +305,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { } @Override - PackageManagerInternal injectPackageManagerInternal() { - return mMockPackageManagerInternal; - } - - @Override boolean hasShortcutHostPermission(@NonNull String callingPackage, int userId) { return mDefaultLauncherChecker.test(callingPackage, userId); } @@ -1111,17 +1108,32 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected void dumpsysOnLogcat(String message, boolean force) { if (force || !ENABLE_DUMP) return; - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - final PrintWriter pw = new PrintWriter(out); - mService.dumpInner(pw, null); - pw.close(); - Log.v(TAG, "Dumping ShortcutService: " + message); - for (String line : out.toString().split("\n")) { + for (String line : dumpsys(null).split("\n")) { Log.v(TAG, line); } } + protected String dumpCheckin() { + return dumpsys(new String[]{"--checkin"}); + } + + private String dumpsys(String[] args) { + final ArrayList<String> origPermissions = new ArrayList<>(mCallerPermissions); + mCallerPermissions.add(android.Manifest.permission.DUMP); + try { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final PrintWriter pw = new PrintWriter(out); + mService.dump(/* fd */ null, pw, args); + pw.close(); + + return out.toString(); + } finally { + mCallerPermissions.clear(); + mCallerPermissions.addAll(origPermissions); + } + } + /** * For debugging, dump arbitrary file on logcat. */ @@ -1798,4 +1810,18 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { } return actualShortcuts; } + + public String readTestAsset(String assetPath) throws IOException { + final StringBuilder sb = new StringBuilder(); + try (BufferedReader br = new BufferedReader( + new InputStreamReader( + getTestContext().getResources().getAssets().open(assetPath)))) { + String line; + while ((line = br.readLine()) != null) { + sb.append(line); + sb.append(System.lineSeparator()); + } + } + return sb.toString(); + } } diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java index d5631858ebf1..55fa625f2cc4 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java @@ -3131,7 +3131,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertEquals(2, mManager.getRemainingCallCount()); }); - mService.getShortcutsForTest().get(UserHandle.USER_SYSTEM).setDefaultLauncherComponent( + mService.getShortcutsForTest().get(UserHandle.USER_SYSTEM).setLauncher( new ComponentName("pkg1", "class")); // Restore. @@ -3165,7 +3165,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { }); assertEquals("pkg1", mService.getShortcutsForTest().get(UserHandle.USER_SYSTEM) - .getDefaultLauncherComponent().getPackageName()); + .getLastKnownLauncher().getPackageName()); // Start another user mService.handleUnlockUser(USER_10); @@ -3181,7 +3181,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertEquals("title10-1-1", getCallerShortcut("s1").getTitle()); assertEquals("title10-1-2", getCallerShortcut("s2").getTitle()); }); - assertNull(mService.getShortcutsForTest().get(USER_10).getDefaultLauncherComponent()); + assertNull(mService.getShortcutsForTest().get(USER_10).getLastKnownLauncher()); // Try stopping the user mService.handleCleanupUser(USER_10); @@ -5859,9 +5859,11 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Only the valid one is published. runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { - assertShortcutIds(assertAllManifest(assertAllImmutable(assertAllEnabled( - mManager.getManifestShortcuts()))), - "x1"); + assertWith(getCallerShortcuts()) + .areAllManifest() + .areAllImmutable() + .areAllEnabled() + .haveIds("x1"); }); // Package 1 updated, which has one valid manifest shortcut and one invalid. @@ -5874,9 +5876,11 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Only the valid one is published. runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { - assertShortcutIds(assertAllManifest(assertAllImmutable(assertAllEnabled( - mManager.getManifestShortcuts()))), - "x2"); + assertWith(getCallerShortcuts()) + .areAllManifest() + .areAllImmutable() + .areAllEnabled() + .haveIds("x2"); }); // Package 1 updated, which has one valid manifest shortcut and one invalid. @@ -5889,9 +5893,14 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Only the valid one is published. runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { - assertShortcutIds(assertAllManifest(assertAllImmutable(assertAllEnabled( - mManager.getManifestShortcuts()))), - "x3"); + assertWith(getCallerShortcuts()) + .areAllManifest() + .areAllImmutable() + .areAllEnabled() + .haveIds("x3") + .forShortcutWithId("x3", si -> { + assertEquals(set("cat2"), si.getCategories()); + }); }); } diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java index bd413beedc47..efd380bd10fe 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java @@ -47,6 +47,10 @@ import android.test.suitebuilder.annotation.SmallTest; import com.android.frameworks.servicestests.R; import com.android.server.pm.ShortcutService.ConfigConstants; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.Locale; /** @@ -1562,12 +1566,22 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { assertEquals(3, mManager.getRemainingCallCount()); + assertFalse(mManager.isRateLimitingActive()); mManager.setDynamicShortcuts(list(makeShortcut("s"))); + + assertEquals(2, mManager.getRemainingCallCount()); + assertFalse(mManager.isRateLimitingActive()); + mManager.setDynamicShortcuts(list(makeShortcut("s"))); + + assertEquals(1, mManager.getRemainingCallCount()); + assertFalse(mManager.isRateLimitingActive()); + mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(0, mManager.getRemainingCallCount()); + assertTrue(mManager.isRateLimitingActive()); }); runWithCaller(CALLING_PACKAGE_2, USER_0, () -> { assertEquals(3, mManager.getRemainingCallCount()); @@ -1577,6 +1591,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(0, mManager.getRemainingCallCount()); + assertTrue(mManager.isRateLimitingActive()); }); runWithCaller(CALLING_PACKAGE_3, USER_0, () -> { MoreAsserts.assertNotEqual(3, mManager.getRemainingCallCount()); @@ -1586,6 +1601,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(0, mManager.getRemainingCallCount()); + assertTrue(mManager.isRateLimitingActive()); }); runWithCaller(CALLING_PACKAGE_4, USER_0, () -> { MoreAsserts.assertNotEqual(3, mManager.getRemainingCallCount()); @@ -1595,6 +1611,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(0, mManager.getRemainingCallCount()); + assertTrue(mManager.isRateLimitingActive()); }); runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> { MoreAsserts.assertNotEqual(3, mManager.getRemainingCallCount()); @@ -1604,6 +1621,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(0, mManager.getRemainingCallCount()); + assertTrue(mManager.isRateLimitingActive()); }); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { assertEquals(3, mManager.getRemainingCallCount()); @@ -1613,6 +1631,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list(makeShortcut("s"))); assertEquals(3, mManager.getRemainingCallCount()); // Still 3! + assertFalse(mManager.isRateLimitingActive()); }); } @@ -1852,4 +1871,46 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { ShortcutInfo.lookUpResourceId(res, "drawable/black_16x64", null, getTestContext().getPackageName())); } + + public void testDumpCheckin() throws IOException { + prepareCrossProfileDataSet(); + + // prepareCrossProfileDataSet() doesn't set any icons, so do set here. + final Icon res32x32 = Icon.createWithResource(getTestContext(), R.drawable.black_32x32); + final Icon res64x64 = Icon.createWithResource(getTestContext(), R.drawable.black_64x64); + final Icon bmp32x32 = Icon.createWithBitmap(BitmapFactory.decodeResource( + getTestContext().getResources(), R.drawable.black_32x32)); + final Icon bmp64x64 = Icon.createWithBitmap(BitmapFactory.decodeResource( + getTestContext().getResources(), R.drawable.black_64x64)); + + runWithCaller(CALLING_PACKAGE_2, USER_0, () -> { + assertTrue(mManager.setDynamicShortcuts(list( + makeShortcutWithIcon("res32x32", res32x32), + makeShortcutWithIcon("res64x64", res64x64), + makeShortcutWithIcon("bmp32x32", bmp32x32), + makeShortcutWithIcon("bmp64x64", bmp64x64)))); + }); + // We can't predict the compressed bitmap sizes, so get the real sizes here. + final long bitmapTotal = + new File(getPackageShortcut(CALLING_PACKAGE_2, "bmp32x32", USER_0) + .getBitmapPath()).length() + + new File(getPackageShortcut(CALLING_PACKAGE_2, "bmp64x64", USER_0) + .getBitmapPath()).length(); + + // Read the expected output and inject the bitmap size. + final String expected = readTestAsset("shortcut/dumpsys_expected.txt") + .replace("***BITMAP_SIZE***", String.valueOf(bitmapTotal)); + + assertEquals(expected, dumpCheckin()); + } + + public void testDumpsysNoPermission() { + assertExpectException(SecurityException.class, "android.permission.DUMP", + () -> mService.dump(null, new PrintWriter(new StringWriter()), null)); + + // System can call it without the permission. + runWithSystemUid(() -> { + mService.dump(null, new PrintWriter(new StringWriter()), null); + }); + } } diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest6.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest6.java new file mode 100644 index 000000000000..ffb2953d8383 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest6.java @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.server.pm; + +import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.list; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doAnswer; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.ResolveInfo; +import android.test.suitebuilder.annotation.SmallTest; + +import java.util.List; + +/** + * Tests for {@link ShortcutService#hasShortcutHostPermissionInner}. + */ +@SmallTest +public class ShortcutManagerTest6 extends BaseShortcutManagerTest { + + private static final String PACKAGE_SYSTEM_LAUNCHER = "com.android.systemlauncher"; + private static final String PACKAGE_SYSTEM_LAUNCHER_NAME = "systemlauncher_name"; + private static final int PACKAGE_SYSTEM_LAUNCHER_PRIORITY = 0; + + private static final String PACKAGE_FALLBACK_LAUNCHER = "com.android.settings"; + private static final String PACKAGE_FALLBACK_LAUNCHER_NAME = "fallback"; + private static final int PACKAGE_FALLBACK_LAUNCHER_PRIORITY = -999; + + private void prepareGetHomeActivitiesAsUser(ComponentName preferred, + List<ResolveInfo> candidates, int userId) { + doAnswer(inv -> { + ((List) inv.getArguments()[0]).addAll(candidates); + return preferred; + }).when(mMockPackageManagerInternal).getHomeActivitiesAsUser(any(List.class), eq(userId)); + } + + private static ComponentName cn(String packageName, String name) { + return new ComponentName(packageName, name); + } + + private static ResolveInfo ri(String packageName, String name, boolean isSystem, int priority) { + final ResolveInfo ri = new ResolveInfo(); + ri.activityInfo = new ActivityInfo(); + ri.activityInfo.applicationInfo = new ApplicationInfo(); + + ri.activityInfo.packageName = packageName; + ri.activityInfo.name = name; + if (isSystem) { + ri.activityInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + } + ri.priority = priority; + return ri; + } + + private static ResolveInfo getSystemLauncher() { + return ri(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME, true, + PACKAGE_SYSTEM_LAUNCHER_PRIORITY); + } + + private static ResolveInfo getFallbackLauncher() { + return ri(PACKAGE_FALLBACK_LAUNCHER, PACKAGE_FALLBACK_LAUNCHER_NAME, true, + PACKAGE_FALLBACK_LAUNCHER_PRIORITY); + } + + public void testHasShortcutHostPermissionInner_systemLauncherOnly() { + // Preferred isn't set, use the system launcher. + prepareGetHomeActivitiesAsUser( + /* preferred */ null, + list(getSystemLauncher(), getFallbackLauncher()), + USER_0); + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + // Should be cached. + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + // Also make sure the last known is saved, but the cached is not. + + initService(); + + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(null, + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + } + + public void testHasShortcutHostPermissionInner_with3pLauncher() { + // Preferred isn't set, still use the system launcher. + prepareGetHomeActivitiesAsUser( + /* preferred */ null, + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_0); + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + // Should be cached. + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + } + + public void testHasShortcutHostPermissionInner_with3pLauncher_complicated() { + // Preferred is set. That's the default launcher. + prepareGetHomeActivitiesAsUser( + /* preferred */ cn(CALLING_PACKAGE_2, "name"), + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_0); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + // Should be cached. + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + + // Once set, even after the preferred launcher is cleared, SM still allows it to access + // shortcuts. + prepareGetHomeActivitiesAsUser( + /* preferred */ null, + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_0); + + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + // Should be cached. + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + // However, if the component has been disabled, then we'll recalculate it. + mEnabledActivityChecker = (comp, user) -> false; + + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + mEnabledActivityChecker = (comp, user) -> true; + + // Now the preferred changed. + prepareGetHomeActivitiesAsUser( + /* preferred */ cn(CALLING_PACKAGE_1, "xyz"), + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_0); + + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + + // Should be cached. + assertEquals(cn(CALLING_PACKAGE_1, "xyz"), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(CALLING_PACKAGE_1, "xyz"), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + + // As long as there's the cached launcher set, even if getHomeActivitiesAsUser() + // returns different values, the cached one is still the default. + prepareGetHomeActivitiesAsUser( + /* preferred */ getSystemLauncher().activityInfo.getComponentName(), + list(getSystemLauncher(), getFallbackLauncher()), + USER_0); + + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + + // Cached ones haven't changed. + assertEquals(cn(CALLING_PACKAGE_1, "xyz"), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(CALLING_PACKAGE_1, "xyz"), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + // However, now the "real" default launcher is the system one. So if the system + // launcher asks for shortcuts, we'll allow it. + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + + // Since the cache is updated, CALLING_PACKAGE_1 no longer has the permission. + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + + // Cached ones haven't changed. + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + } + + public void testHasShortcutHostPermissionInner_multiUser() { + prepareGetHomeActivitiesAsUser( + /* preferred */ null, + list(getSystemLauncher(), getFallbackLauncher()), + USER_0); + + prepareGetHomeActivitiesAsUser( + /* preferred */ cn(CALLING_PACKAGE_2, "name"), + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_10); + + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); + + // Check the cache. + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_10)); + assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_10)); + assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_10)); + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); + + // Check the cache. + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_10).getLastKnownLauncher()); + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); + } + + public void testHasShortcutHostPermissionInner_clearCache() { + prepareGetHomeActivitiesAsUser( + /* preferred */ null, + list(getSystemLauncher(), getFallbackLauncher()), + USER_0); + + prepareGetHomeActivitiesAsUser( + /* preferred */ cn(CALLING_PACKAGE_2, "name"), + list(getSystemLauncher(), getFallbackLauncher(), + ri(CALLING_PACKAGE_1, "name", false, 0), + ri(CALLING_PACKAGE_2, "name", false, 0) + ), + USER_10); + + assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); + assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); + + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); + + // Send ACTION_PREFERRED_ACTIVITY_CHANGED on user 10. + // But the user is not running, so will be ignored. + mService.mPackageMonitor.onReceive(mServiceContext, + new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( + Intent.EXTRA_USER_HANDLE, USER_10)); + + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + assertEquals(cn(CALLING_PACKAGE_2, "name"), + mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); + + // Send it again after starting the user. + mRunningUsers.put(USER_10, true); + mService.mPackageMonitor.onReceive(mServiceContext, + new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( + Intent.EXTRA_USER_HANDLE, USER_10)); + + assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), + mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); + + // Only user-10's cache is cleared. + assertEquals(null, + mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); + + } +} diff --git a/telecomm/java/android/telecom/ConferenceParticipant.java b/telecomm/java/android/telecom/ConferenceParticipant.java index db0f151e2016..20b04ebed6a4 100644 --- a/telecomm/java/android/telecom/ConferenceParticipant.java +++ b/telecomm/java/android/telecom/ConferenceParticipant.java @@ -114,13 +114,13 @@ public class ConferenceParticipant implements Parcelable { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[ConferenceParticipant Handle: "); - sb.append(mHandle); + sb.append(Log.pii(mHandle)); sb.append(" DisplayName: "); - sb.append(mDisplayName); + sb.append(Log.pii(mDisplayName)); sb.append(" Endpoint: "); - sb.append(mEndpoint); + sb.append(Log.pii(mEndpoint)); sb.append(" State: "); - sb.append(mState); + sb.append(Connection.stateToString(mState)); sb.append("]"); return sb.toString(); } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 52f75f680560..ee055f45cecb 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -370,8 +370,14 @@ public abstract class Connection extends Conferenceable { */ public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 1<<5; + /** + * Indicates that the connection represents a downgraded IMS conference. + * @hide + */ + public static final int PROPERTY_IS_DOWNGRADED_CONFERENCE = 1<<6; + //********************************************************************************************** - // Next PROPERTY value: 1<<6 + // Next PROPERTY value: 1<<7 //********************************************************************************************** /** diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 3052cdb20552..65b5ee8b14ed 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -845,6 +845,20 @@ public class CarrierConfigManager { "allow_add_call_during_video_call"; /** + * When true, indicates that the HD audio icon in the in-call screen should not be shown for + * VoWifi calls. + * @hide + */ + public static final String KEY_WIFI_CALLS_CAN_BE_HD_AUDIO = "wifi_calls_can_be_hd_audio"; + + /** + * When true, indicates that the HD audio icon in the in-call screen should not be shown for + * video calls. + * @hide + */ + public static final String KEY_VIDEO_CALLS_CAN_BE_HD_AUDIO = "video_calls_can_be_hd_audio"; + + /** * Defines operator-specific {@link com.android.ims.ImsReasonInfo} mappings. * * Format: "ORIGINAL_CODE|MESSAGE|NEW_CODE" @@ -1020,6 +1034,8 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL, false); sDefaults.putBoolean(KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL, true); sDefaults.putBoolean(KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL, true); + sDefaults.putBoolean(KEY_WIFI_CALLS_CAN_BE_HD_AUDIO, true); + sDefaults.putBoolean(KEY_VIDEO_CALLS_CAN_BE_HD_AUDIO, true); sDefaults.putStringArray(KEY_IMS_REASONINFO_MAPPING_STRING_ARRAY, null); } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index df81d7f90008..a3dc34374c62 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -5424,6 +5424,39 @@ public class TelephonyManager { } /** + * Return the Preferred Roaming List Version + * + * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission + * + * @return PRLVersion or null if error. + * @hide + */ + public String getCdmaPrlVersion() { + return getCdmaPrlVersion(getDefaultSubscription()); + } + + /** + * Return the Preferred Roaming List Version + * + * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission + * + * @param subId the subscription ID that this request applies to. + * @return PRLVersion or null if error. + * @hide + */ + public String getCdmaPrlVersion(int subId) { + try { + ITelephony service = getITelephony(); + if (service != null) { + return service.getCdmaPrlVersion(subId); + } + } catch (RemoteException e) { + Log.e(TAG, "Error calling ITelephony#getCdmaPrlVersion", e); + } + return null; + } + + /** * Get snapshot of Telephony histograms * @return List of Telephony histograms * Requires Permission: diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 167e1a739ca5..7e7071ee173a 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1107,6 +1107,16 @@ interface ITelephony { String getEsn(int subId); /** + * Return the Preferred Roaming List Version + * + * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission + * @param subId the subscription ID that this request applies to. + * @return PRLVersion or null if error. + * @hide + */ + String getCdmaPrlVersion(int subId); + + /** * Get snapshot of Telephony histograms * @return List of Telephony histograms * Requires Permission: diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp index 9939c188cdd9..aea16c715b95 100644 --- a/tools/aapt/Images.cpp +++ b/tools/aapt/Images.cpp @@ -808,13 +808,13 @@ static void checkNinePatchSerialization(Res_png_9patch* inPatch, void* data) assert(outPatch->paddingTop == inPatch->paddingTop); assert(outPatch->paddingBottom == inPatch->paddingBottom); for (int i = 0; i < outPatch->numXDivs; i++) { - assert(outPatch->xDivs[i] == inPatch->xDivs[i]); + assert(outPatch->getXDivs()[i] == inPatch->getXDivs()[i]); } for (int i = 0; i < outPatch->numYDivs; i++) { - assert(outPatch->yDivs[i] == inPatch->yDivs[i]); + assert(outPatch->getYDivs()[i] == inPatch->getYDivs()[i]); } for (int i = 0; i < outPatch->numColors; i++) { - assert(outPatch->colors[i] == inPatch->colors[i]); + assert(outPatch->getColors()[i] == inPatch->getColors()[i]); } free(newData); } diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp index e6407332bb90..a7878d196c15 100644 --- a/tools/aapt/Resource.cpp +++ b/tools/aapt/Resource.cpp @@ -326,13 +326,18 @@ static status_t makeFileResources(Bundle* bundle, const sp<AaptAssets>& assets, } String8 resPath = it.getPath(); resPath.convertToResPath(); - table->addEntry(SourcePos(it.getPath(), 0), String16(assets->getPackage()), + status_t result = table->addEntry(SourcePos(it.getPath(), 0), + String16(assets->getPackage()), type16, baseName, String16(resPath), NULL, &it.getParams()); - assets->addResource(it.getLeafName(), resPath, it.getFile(), type8); + if (result != NO_ERROR) { + hasErrors = true; + } else { + assets->addResource(it.getLeafName(), resPath, it.getFile(), type8); + } } return hasErrors ? STATUST(UNKNOWN_ERROR) : NO_ERROR; @@ -1370,6 +1375,10 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil } } + if (hasErrors) { + return UNKNOWN_ERROR; + } + // -------------------------------------------------------------------- // Assignment of resource IDs and initial generation of resource table. // -------------------------------------------------------------------- diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index 6a4b63789815..6d80a69b7444 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -4521,6 +4521,7 @@ bool ResourceTable::shouldGenerateVersionedResource( const ConfigDescription& sourceConfig, const int sdkVersionToGenerate) { assert(sdkVersionToGenerate > sourceConfig.sdkVersion); + assert(configList != NULL); const DefaultKeyedVector<ConfigDescription, sp<ResourceTable::Entry>>& entries = configList->getEntries(); ssize_t idx = entries.indexOfKey(sourceConfig); |