1 介绍
依赖
implementation group: 'com.hjq', name: 'xxpermissions', version: '10.6'
2 注册权限
在高版本收集中,出于对隐私保护,不能完全授予app权限,所以我们要动态申请的权限,在此之前需要在AndroidManifest.xml里面提前注册相关权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
3 使用
动态注册所需权限
XXPermissions.with(this)
.permission(Permission.RECORD_AUDIO)
.permission(Permission.Group.CALENDAR)
.request(new OnPermissionCallback() {
@Override
public void onGranted(List<String> permissions, boolean all) {
if (all) {
toast("获取录音和日历权限成功");
} else {
toast("获取部分权限成功,但部分权限未正常授予");
}
}
@Override
public void onDenied(List<String> permissions, boolean never) {
if (never) {
toast("被永久拒绝授权,请手动授予录音和日历权限");
XXPermissions.startPermissionActivity(MainActivity.this, permissions);
} else {
toast("获取录音和日历权限失败");
}
}
});
获取悬浮窗权限
XXPermissions.with(MainActivity.this)
.permission(Permission.SYSTEM_ALERT_WINDOW)
.request(new OnPermissionCallback() {
@Override
public void onGranted(List<String> permissions, boolean all) {
ToastUtils.show("获取悬浮窗权限成功");
}
});
参考地址:
https://github.com/getActivity/XXPermissions
<h2><a id="1__0"></a>1 介绍</h2>
<p>依赖</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">// https://mvnrepository.com/artifact/com.hjq/xxpermissions</span>
implementation group: <span class="hljs-string">'com.hjq'</span>, name: <span class="hljs-string">'xxpermissions'</span>, version: <span class="hljs-string">'10.6'</span>
</code></div></pre>
<h2><a id="2__8"></a>2 注册权限</h2>
<p>在高版本收集中,出于对隐私保护,不能完全授予app权限,所以我们要动态申请的权限,在此之前需要在AndroidManifest.xml里面提前注册相关权限</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-comment"><!-- 相机 --></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.CAMERA"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.REQUEST_INSTALL_PACKAGES"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.SYSTEM_ALERT_WINDOW"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.READ_CALENDAR"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.WRITE_CALENDAR"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.ANSWER_PHONE_CALLS"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.READ_PHONE_NUMBERS"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.WRITE_SETTINGS"</span> <span class="hljs-attr">tools:ignore</span>=<span class="hljs-string">"ProtectedPermissions"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.READ_EXTERNAL_STORAGE"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.WRITE_EXTERNAL_STORAGE"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.MANAGE_EXTERNAL_STORAGE"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.RECORD_AUDIO"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.ACCESS_FINE_LOCATION"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.ACCESS_COARSE_LOCATION"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.ACCESS_BACKGROUND_LOCATION"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.SEND_SMS"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.RECEIVE_SMS"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.READ_PHONE_STATE"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.BLUETOOTH"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.BLUETOOTH_ADMIN"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.BLUETOOTH_SCAN"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.BLUETOOTH_ADVERTISE"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.BLUETOOTH_CONNECT"</span> /></span>
</code></div></pre>
<h2><a id="3__51"></a>3 使用</h2>
<p>动态注册所需权限</p>
<pre><div class="hljs"><code class="lang-java">XXPermissions.with(<span class="hljs-built_in">this</span>)
<span class="hljs-comment">// 申请安装包权限</span>
<span class="hljs-comment">//.permission(Permission.REQUEST_INSTALL_PACKAGES)</span>
<span class="hljs-comment">// 申请悬浮窗权限</span>
<span class="hljs-comment">//.permission(Permission.SYSTEM_ALERT_WINDOW)</span>
<span class="hljs-comment">// 申请通知栏权限</span>
<span class="hljs-comment">//.permission(Permission.NOTIFICATION_SERVICE)</span>
<span class="hljs-comment">// 申请系统设置权限</span>
<span class="hljs-comment">//.permission(Permission.WRITE_SETTINGS)</span>
<span class="hljs-comment">// 申请单个权限</span>
.permission(Permission.RECORD_AUDIO)
<span class="hljs-comment">// 申请多个权限</span>
.permission(Permission.Group.CALENDAR)
.request(<span class="hljs-keyword">new</span> <span class="hljs-title class_">OnPermissionCallback</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">onGranted</span><span class="hljs-params">(List<String> permissions, <span class="hljs-type">boolean</span> all)</span> {
<span class="hljs-keyword">if</span> (all) {
toast(<span class="hljs-string">"获取录音和日历权限成功"</span>);
} <span class="hljs-keyword">else</span> {
toast(<span class="hljs-string">"获取部分权限成功,但部分权限未正常授予"</span>);
}
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">onDenied</span><span class="hljs-params">(List<String> permissions, <span class="hljs-type">boolean</span> never)</span> {
<span class="hljs-keyword">if</span> (never) {
toast(<span class="hljs-string">"被永久拒绝授权,请手动授予录音和日历权限"</span>);
<span class="hljs-comment">// 如果是被永久拒绝就跳转到应用权限系统设置页面</span>
XXPermissions.startPermissionActivity(MainActivity.<span class="hljs-built_in">this</span>, permissions);
} <span class="hljs-keyword">else</span> {
toast(<span class="hljs-string">"获取录音和日历权限失败"</span>);
}
}
});
</code></div></pre>
<p>获取悬浮窗权限</p>
<pre><div class="hljs"><code class="lang-java">XXPermissions.with(MainActivity.<span class="hljs-built_in">this</span>)
.permission(Permission.SYSTEM_ALERT_WINDOW)
.request(<span class="hljs-keyword">new</span> <span class="hljs-title class_">OnPermissionCallback</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">onGranted</span><span class="hljs-params">(List<String> permissions, <span class="hljs-type">boolean</span> all)</span> {
ToastUtils.show(<span class="hljs-string">"获取悬浮窗权限成功"</span>);
}
});
</code></div></pre>
<p>参考地址:<br />
https://github.com/getActivity/XXPermissions</p>
留言