am e7489fde: docs: Updating the permissions docs for Preview 3.
* commit 'e7489fde9ff1529cc0c7a984046918a47b97b40c': docs: Updating the permissions docs for Preview 3.
This commit is contained in:
@@ -411,6 +411,14 @@ page.image=images/permissions_check.png
|
|||||||
{@link android.os.Build.VERSION#CODENAME CODENAME} is <code>"MNC"</code>.
|
{@link android.os.Build.VERSION#CODENAME CODENAME} is <code>"MNC"</code>.
|
||||||
</p>
|
</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>
|
<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
|
<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>
|
<code>android.permission.WRITE_CONTACTS</code>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<code>android.permission.READ_PROFILE</code>
|
<code>android.permission.GET_ACCOUNTS</code>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<code>android.permission.WRITE_PROFILE</code>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
@@ -540,11 +545,6 @@ page.image=images/permissions_check.png
|
|||||||
<code>android.permission.BODY_SENSORS</code>
|
<code>android.permission.BODY_SENSORS</code>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<code>android.permission.USE_FINGERPRINT</code>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -615,13 +615,14 @@ page.image=images/permissions_check.png
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
If the user turned down the permission request in the
|
If the user turned down the permission request in the past and chose the
|
||||||
past and chose the <em>Don't ask again</em> option in the permission request system
|
<em>Don't ask again</em> option in the permission request system dialog, this
|
||||||
dialog, this method returns <code>false</code>. The method also returns
|
method returns <code>false</code>. The method also returns <code>false</code>
|
||||||
<code>false</code> if the device policy prohibits the app from having that
|
if the device policy prohibits the app from having that permission.
|
||||||
permission.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 id="request-permissions">Request permissions if necessary</h4>
|
<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
|
<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>
|
</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>
|
<h4 id="handle-response">Handle the permissions request response</h4>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -875,7 +886,105 @@ $ adb pm revoke <package_name> <permission_name>
|
|||||||
app's normal operation.
|
app's normal operation.
|
||||||
</p>
|
</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>
|
<p>
|
||||||
Many permissions are designated as {@link
|
Many permissions are designated as {@link
|
||||||
@@ -911,6 +1020,7 @@ $ adb pm revoke <package_name> <permission_name>
|
|||||||
<ul>
|
<ul>
|
||||||
<li><code>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</code></li>
|
<li><code>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</code></li>
|
||||||
<li><code>android.permission.ACCESS_NETWORK_STATE</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_WIFI_STATE</code></li>
|
||||||
<li><code>android.permission.ACCESS_WIMAX_STATE</code></li>
|
<li><code>android.permission.ACCESS_WIMAX_STATE</code></li>
|
||||||
<li><code>android.permission.BLUETOOTH</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_NETWORK_STATE</code></li>
|
||||||
<li><code>android.permission.CHANGE_WIFI_MULTICAST_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_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.DISABLE_KEYGUARD</code></li>
|
||||||
<li><code>android.permission.EXPAND_STATUS_BAR</code></li>
|
<li><code>android.permission.EXPAND_STATUS_BAR</code></li>
|
||||||
<li><code>android.permission.FLASHLIGHT</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.KILL_BACKGROUND_PROCESSES</code></li>
|
||||||
<li><code>android.permission.MODIFY_AUDIO_SETTINGS</code></li>
|
<li><code>android.permission.MODIFY_AUDIO_SETTINGS</code></li>
|
||||||
<li><code>android.permission.NFC</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_SETTINGS</code></li>
|
||||||
<li><code>android.permission.READ_SYNC_STATS</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.RECEIVE_BOOT_COMPLETED</code></li>
|
||||||
<li><code>android.permission.REORDER_TASKS</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_TIME_ZONE</code></li>
|
||||||
<li><code>android.permission.SET_WALLPAPER</code></li>
|
<li><code>android.permission.SET_WALLPAPER</code></li>
|
||||||
<li><code>android.permission.SET_WALLPAPER_HINTS</code></li>
|
<li><code>android.permission.SET_WALLPAPER_HINTS</code></li>
|
||||||
<li><code>android.permission.SUBSCRIBED_FEEDS_READ</code></li>
|
<li><code>android.permission.SUBSCRIBED_FEEDS_READ</code></li>
|
||||||
<li><code>android.permission.TRANSMIT_IR</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.VIBRATE</code></li>
|
||||||
<li><code>android.permission.WAKE_LOCK</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_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.alarm.permission.SET_ALARM</code></li>
|
||||||
<li><code>com.android.launcher.permission.INSTALL_SHORTCUT</code></li>
|
<li><code>com.android.launcher.permission.INSTALL_SHORTCUT</code></li>
|
||||||
|
<li><code>com.android.launcher.permission.UNINSTALL_SHORTCUT</code></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user