diff options
| -rw-r--r-- | docs/html/preview/features/runtime-permissions.jd | 148 | ||||
| -rw-r--r-- | docs/html/tools/help/adb.jd | 56 |
2 files changed, 153 insertions, 51 deletions
diff --git a/docs/html/preview/features/runtime-permissions.jd b/docs/html/preview/features/runtime-permissions.jd index 765a3d547a5b..144a5fe29ce8 100644 --- a/docs/html/preview/features/runtime-permissions.jd +++ b/docs/html/preview/features/runtime-permissions.jd @@ -411,6 +411,14 @@ page.image=images/permissions_check.png {@link android.os.Build.VERSION#CODENAME CODENAME} is <code>"MNC"</code>. </p> +<p> + Alternatively, you can use the new methods introduced with revision 23 of the + v4 and v13 support libraries. The support library methods behave + appropriately whether or not the app is running on the M Developer Preview. + For more information, see <a href="#support-lib">Support library methods for + handling permissions</a>. +</p> + <h4 id="check-for-permission">Check if the app has the needed permission</h4> <p>When the user tries to do something that requires a permission, the app @@ -469,10 +477,7 @@ page.image=images/permissions_check.png <code>android.permission.WRITE_CONTACTS</code> </li> <li> - <code>android.permission.READ_PROFILE</code> - </li> - <li> - <code>android.permission.WRITE_PROFILE</code> + <code>android.permission.GET_ACCOUNTS</code> </li> </ul> </td> @@ -540,11 +545,6 @@ page.image=images/permissions_check.png <code>android.permission.BODY_SENSORS</code> </li> </ul> - <ul> - <li> - <code>android.permission.USE_FINGERPRINT</code> - </li> - </ul> </td> </tr> @@ -615,13 +615,14 @@ page.image=images/permissions_check.png </p> <p> - If the user turned down the permission request in the - past and chose the <em>Don't ask again</em> option in the permission request system - dialog, this method returns <code>false</code>. The method also returns - <code>false</code> if the device policy prohibits the app from having that - permission. + If the user turned down the permission request in the past and chose the + <em>Don't ask again</em> option in the permission request system dialog, this + method returns <code>false</code>. The method also returns <code>false</code> + if the device policy prohibits the app from having that permission. </p> + + <h4 id="request-permissions">Request permissions if necessary</h4> <p>If the app doesn't already have the permission it needs, the app calls the @@ -656,6 +657,16 @@ if (checkSelfPermission(Manifest.permission.READ_CONTACTS) } </pre> +<p class="note"> + <strong>Note:</strong> When your app calls the framework's + <code>requestPermissions()</code> method, the system shows a standard dialog + box to the user. Your app <em>cannot</em> configure or alter that dialog box. + If you need to provide any information or explanation to the user, you should + do that <em>before</em> you call <code>requestPermissions()</code>, as + described in <a href="#explain-need">Explain why the app needs + permissions</a>. +</p> + <h4 id="handle-response">Handle the permissions request response</h4> <p> @@ -875,7 +886,105 @@ $ adb pm revoke <package_name> <permission_name> app's normal operation. </p> -<h3 id="normal">Normal Permissions</h3> +<h3 id="support-lib">Support library methods for handling permissions</h3> + +<p> + Revision 23 of the v4 and v13 support libraries provide several new methods + for managing permissions. The support library methods work properly on any + device that can use those libraries. Thus, if you use the support library + methods, you do not need to check whether your app is running on a device + with the M Developer Preview. If an app is installed on a device running the + M Preview, the support library methods behave the same as their framework + equivalents. If the device is running an earlier version of Android, the + methods behave appropriately, as described below. +</p> + +<p> + The v4 support library provides the following permissions methods: +</p> + +<dl> + <dt> + <code>ContextCompat.checkSelfPermission()</code> + </dt> + + <dd> + Returns <code>true</code> if the app has the specified permission, whether + or not the device is using the M Preview. + </dd> + + <dt> + <code>ActivityCompat.requestPermissions()</code> + </dt> + + <dd> + If the device is not running the M Preview, invokes the callback + method in <code>ActivityCompat.OnRequestPermissionsResultCallback</code>. + Passes {@link android.content.pm.PackageManager#PERMISSION_GRANTED + PERMISSION_GRANTED} if the app already has the specified permission, or + {@link android.content.pm.PackageManager#PERMISSION_DENIED + PERMISSION_DENIED} if it does not. + </dd> + + <dt> + <code>ActivityCompat.shouldShowRequestPermissionRationale()</code> + </dt> + + <dd> + If the device is not running the M Preview, always returns + <code>false</code>. + </dd> +</dl> + +<p> + The v4 support library also contains the <code>PermissionChecker</code> + class, which provides several static utility methods for apps that use IPC to + provide services for other apps. For example, + <code>PermissionChecker.checkCallingPermission()</code> checks whether an IPC + made by a particular package has a specified permission. +</p> + +<p class="note"> + <strong>Note:</strong> If your app acts on behalf of third-party apps to call + platform methods that require runtime permissions on behalf of a third-party + app, you should use the appropriate <code>PermissionChecker</code> methods to + ensure that the other app is allowed to perform the operation. The platform + has a compatibility mode that allows users to revoke a legacy app's access to + permission-protected methods. If the user revokes access in compatibility + mode the app's permissions are not actually revoked; instead, access to the + APIs is restricted. The <code>PermissionChecker</code> methods verify app + permissions in both normal and legacy modes. +</p> + +<p> + The v13 support library provides the following permissions methods: +</p> + +<dl> + <dt> + <code>FragmentCompat.requestPermissions()</code> + </dt> + + <dd> + If the device is not running the M Preview, invokes the callback + method in <code>FragmentCompat.OnRequestPermissionsResultCallback</code>. + Passes {@link android.content.pm.PackageManager#PERMISSION_GRANTED + PERMISSION_GRANTED} if the app already has the specified permission, or + {@link android.content.pm.PackageManager#PERMISSION_DENIED + PERMISSION_DENIED} if it does not. + </dd> + + <dt> + <code>FragmentCompat.shouldShowRequestPermissionRationale()</code> + </dt> + + <dd> + If the device is not running the M Preview, always returns + <code>false</code>. + </dd> +</dl> + +<h3 id="normal">Normal permissions</h3> <p> Many permissions are designated as {@link @@ -911,6 +1020,7 @@ $ adb pm revoke <package_name> <permission_name> <ul> <li><code>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</code></li> <li><code>android.permission.ACCESS_NETWORK_STATE</code></li> + <li><code>android.permission.ACCESS_NOTIFICATION_POLICY</code></li> <li><code>android.permission.ACCESS_WIFI_STATE</code></li> <li><code>android.permission.ACCESS_WIMAX_STATE</code></li> <li><code>android.permission.BLUETOOTH</code></li> @@ -919,6 +1029,7 @@ $ adb pm revoke <package_name> <permission_name> <li><code>android.permission.CHANGE_NETWORK_STATE</code></li> <li><code>android.permission.CHANGE_WIFI_MULTICAST_STATE</code></li> <li><code>android.permission.CHANGE_WIFI_STATE</code></li> + <li><code>android.permission.CHANGE_WIMAX_STATE</code></li> <li><code>android.permission.DISABLE_KEYGUARD</code></li> <li><code>android.permission.EXPAND_STATUS_BAR</code></li> <li><code>android.permission.FLASHLIGHT</code></li> @@ -928,22 +1039,21 @@ $ adb pm revoke <package_name> <permission_name> <li><code>android.permission.KILL_BACKGROUND_PROCESSES</code></li> <li><code>android.permission.MODIFY_AUDIO_SETTINGS</code></li> <li><code>android.permission.NFC</code></li> - <li><code>android.permission.PERSISTENT_ACTIVITY</code></li> <li><code>android.permission.READ_SYNC_SETTINGS</code></li> <li><code>android.permission.READ_SYNC_STATS</code></li> - <li><code>android.permission.READ_USER_DICTIONARY</code></li> <li><code>android.permission.RECEIVE_BOOT_COMPLETED</code></li> <li><code>android.permission.REORDER_TASKS</code></li> + <li><code>android.permission.REQUEST_INSTALL_PACKAGES</code></li> <li><code>android.permission.SET_TIME_ZONE</code></li> <li><code>android.permission.SET_WALLPAPER</code></li> <li><code>android.permission.SET_WALLPAPER_HINTS</code></li> <li><code>android.permission.SUBSCRIBED_FEEDS_READ</code></li> <li><code>android.permission.TRANSMIT_IR</code></li> + <li><code>android.permission.USE_FINGERPRINT</code></li> <li><code>android.permission.VIBRATE</code></li> <li><code>android.permission.WAKE_LOCK</code></li> - <li><code>android.permission.WRITE_SETTINGS</code></li> <li><code>android.permission.WRITE_SYNC_SETTINGS</code></li> - <li><code>android.permission.WRITE_USER_DICTIONARY</code></li> <li><code>com.android.alarm.permission.SET_ALARM</code></li> <li><code>com.android.launcher.permission.INSTALL_SHORTCUT</code></li> + <li><code>com.android.launcher.permission.UNINSTALL_SHORTCUT</code></li> </ul> diff --git a/docs/html/tools/help/adb.jd b/docs/html/tools/help/adb.jd index 641d463baca7..2faff4f3fe5c 100644 --- a/docs/html/tools/help/adb.jd +++ b/docs/html/tools/help/adb.jd @@ -420,62 +420,54 @@ Wi-Fi, as described here. <ol> <li> -Connect Android device and adb host computer +<p>Connect your Android device and adb host computer to a common Wi-Fi network accessible to both. We have found that not all access points are suitable; you may need to use an access point -whose firewall is configured properly to support adb. -</li> +whose firewall is configured properly to support adb.</p> -<li> -Connect the device with USB cable to host. +<p class="note"><strong>Note: </strong>If you are attempting to connect +to a Wear device, force it to connect to Wi-Fi by shutting off Bluetooth +on the phone connected to it.</p> </li> <li> -Make sure adb is running in USB mode on host. -<pre> -$ adb usb -restarting in USB mode -</pre> +Connect the device to the host computer with a USB cable. </li> <li> -Connect to the device over USB. -<pre> -$ adb devices -List of devices attached -######## device +Set the target device to listen for a TCP/IP connection on port 5555. +<pre class="no-pretty-print"> +$ adb tcpip 5555 </pre> </li> <li> -Restart host adb in tcpip mode. -<pre> -$ adb tcpip 5555 -restarting in TCP mode port: 5555 -</pre> +Disconnect the USB cable from the target device. </li> <li> -Find out the IP address of the Android device: -Settings -> About tablet -> Status -> IP address. -Remember the IP address, of the form <code>#.#.#.#</code>. +Find the IP address of the Android device. For example, on a Nexus device, you can find +the IP address at <strong>Settings</strong> > <strong>About tablet</strong> +(or <strong>About phone</strong>) > <strong>Status</strong> > <strong>IP address</strong>. Or, +on an Android Wear device, you can find the IP address at <strong>Settings</strong> > +<strong>Wi-Fi Settings</strong> > <strong>Advanced</strong> > <strong>IP address</strong>. </li> <li> -Connect adb host to device: -<pre> -$ adb connect #.#.#.# -connected to #.#.#.#:5555 +Connect to the device, identifying it by IP address. +<pre class="no-pretty-print"> +$ adb connect <device-ip-address> </pre> </li> + <li> -Remove USB cable from device, and confirm you can still access device: -<pre> +Confirm that your host computer is connected to the target device: +<pre class="no-pretty-print"> $ adb devices List of devices attached -#.#.#.#:5555 device +<device-ip-address>:5555 device </pre> </ol> @@ -500,10 +492,10 @@ Reconnect by executing the "adb connect" step again. <li> Or if that doesn't work, reset your adb host: -<pre> +<pre class="no-pretty-print"> adb kill-server </pre> and then start over from the beginning. </li> -</ol>
\ No newline at end of file +</ol> |