王鹏鹏 2 лет назад
Родитель
Сommit
e994df3ee9

+ 11 - 11
app/src/main/AndroidManifest.xml

@@ -1,12 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    package="com.yingyangfly"
-    android:installLocation="internalOnly">
-    <!--    android:sharedUserId="android.uid.system"-->
-    <permission
-        android:name="${applicationId}.permission.JOPERATE_MESSAGE"
-        android:protectionLevel="signature" />
+    package="com.yingyangfly">
 
     <uses-permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -15,18 +10,20 @@
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.READ_PROFILE" />
-    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission
+        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
+        tools:ignore="ScopedStorage" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
     <!-- 辅助功能权限 -->
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 
     <queries>
@@ -40,8 +37,7 @@
         android:allowBackup="true"
         android:fullBackupContent="@xml/backup_rules"
         android:icon="@mipmap/ic_launcher"
-        android:label="@string/app_name"
-        android:roundIcon="@mipmap/ic_launcher_round"
+        android:requestLegacyExternalStorage="true"
         android:supportsRtl="true"
         android:theme="@style/Theme.Yingyangfly"
         android:usesCleartextTraffic="true"
@@ -53,6 +49,10 @@
             android:name="org.apache.http.legacy"
             android:required="false" />
 
+        <meta-data
+            android:name="ScopedStorage"
+            android:value="true" />
+
         <activity
             android:name=".MainActivity"
             android:configChanges="keyboardHidden|orientation|screenSize"

+ 3 - 0
baselib/build.gradle

@@ -139,4 +139,7 @@ dependencies {
     api(rootProject.ext.dependencies.navigation_ui_ktx)
     api(rootProject.ext.dependencies.fastjson)
     api(rootProject.ext.dependencies.Luban)
+    api(rootProject.ext.dependencies.xxPermission)
+    api(rootProject.ext.dependencies.imageSelector)
+
 }

+ 1 - 0
baselib/src/main/AndroidManifest.xml

@@ -3,6 +3,7 @@
     package="com.yingyangfly.baselib">
 
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
     <application
         android:allowBackup="true"

+ 4 - 1
config.gradle

@@ -121,6 +121,9 @@ ext {
             "room_ktx"                 : 'androidx.room:room-ktx:2.2.6',
             "navigation_fragment_ktx"  : 'androidx.navigation:navigation-fragment-ktx:2.3.5',
             "navigation_ui_ktx"        : 'androidx.navigation:navigation-ui-ktx:2.3.5',
-            "Luban"                    : 'top.zibin:Luban:1.1.8'
+            "Luban"                    : 'top.zibin:Luban:1.1.8',
+            // 动态申请权限 https://github.com/getActivity/XXPermissions
+            "xxPermission"             : "com.github.getActivity:XXPermissions:18.3",
+            "imageSelector"            : "com.github.donkingliang:ImageSelector:2.2.1"
     ]
 }

+ 6 - 1
livebroadcast/src/main/AndroidManifest.xml

@@ -12,11 +12,15 @@
     <uses-permission android:name="android.permission.BLUETOOTH" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+
     <uses-feature android:name="android.hardware.camera" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
+
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 
-    <application android:networkSecurityConfig="@xml/network_security_config">
+    <application
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:requestLegacyExternalStorage="true">
         <activity
             android:name=".activity.detail.LiveBroadcastActivity"
             android:configChanges="keyboardHidden|orientation|screenSize"
@@ -32,6 +36,7 @@
             android:configChanges="keyboardHidden|orientation|screenSize"
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
+
         <service
             android:name=".service.KeepAliveService"
             android:enabled="true"

+ 20 - 9
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/list/LiveBroadcastListActivity.kt

@@ -6,6 +6,8 @@ import android.view.View
 import androidx.recyclerview.widget.GridLayoutManager
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
+import com.hjq.permissions.OnPermissionCallback
+import com.hjq.permissions.XXPermissions
 import com.yingyang.livebroadcast.R
 import com.yingyang.livebroadcast.adapter.LiveBroadcastAdapter
 import com.yingyang.livebroadcast.databinding.ActivityLiveBroadcastListBinding
@@ -17,7 +19,6 @@ import com.yingyangfly.baselib.ext.show
 import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.permissions.EsayPermissions
-import com.yingyangfly.baselib.permissions.OnPermission
 import com.yingyangfly.baselib.permissions.Permission
 import com.yingyangfly.baselib.router.RouterUrlCommon
 import com.yingyangfly.baselib.utils.JumpUtil
@@ -195,23 +196,33 @@ class LiveBroadcastListActivity :
      * 获取应用权限
      */
     private fun initPermission(url: String) {
-        val isHasPermission = EsayPermissions.isHasPermissions(this, permissions)
+        val isHasPermission = XXPermissions.isGranted(this, permissions)
         if (isHasPermission) {
             JumpUtil.jumpActivityWithUrl(RouterUrlCommon.liveBroadcast, url, this)
         } else {
-            EsayPermissions.with(this).permission(permissions).request(object : OnPermission {
-                override fun noPermission(denied: MutableList<String>?, quick: Boolean) {
-                    showTipDialog()
-                }
-
-                override fun hasPermission(granted: MutableList<String>?, isAll: Boolean) {
-                    if (isAll) {
+            XXPermissions.with(this).permission(permissions).request(object : OnPermissionCallback {
+                override fun onGranted(permissions: List<String>, all: Boolean) {
+                    if (all) { // 全部获取权限成功
                         JumpUtil.jumpActivityWithUrl(
                             RouterUrlCommon.liveBroadcast,
                             url,
                             mContext
                         )
+                    } else { // 部分获取权限成功
+                        // 需要弹框处理
+                        showTipDialog()
+                    }
+                }
+
+                override fun onDenied(permissions: List<String>, never: Boolean) {
+                    if (never) { // 被永久拒绝
+                        // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                        XXPermissions.startPermissionActivity(
+                            this@LiveBroadcastListActivity,
+                            permissions
+                        )
                     } else {
+                        // 需要弹框处理
                         showTipDialog()
                     }
                 }

+ 3 - 1
livebroadcast/src/main/manifest/AndroidManifest.xml

@@ -18,7 +18,9 @@
     <uses-feature android:name="android.hardware.camera" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
 
-    <application android:networkSecurityConfig="@xml/network_security_config"
+    <application
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:requestLegacyExternalStorage="true"
         tools:targetApi="n">
         <activity
             android:name=".activity.detail.LiveBroadcastActivity"

+ 13 - 17
tuichat/src/main/AndroidManifest.xml

@@ -2,8 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.tencent.qcloud.tuikit.tuichat">
 
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
-        android:maxSdkVersion="28" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
@@ -12,21 +11,21 @@
         <provider
             android:name=".TUIChatService"
             android:authorities="${applicationId}.TUIChat.Init"
-            android:initOrder="9999"
             android:enabled="true"
-            android:exported="false" />
+            android:exported="false"
+            android:initOrder="9999" />
 
         <activity
             android:name=".component.imagevideoscan.ImageVideoScanActivity"
-            android:launchMode="singleTask"
-            android:configChanges="screenSize|keyboardHidden|orientation" />
+            android:configChanges="screenSize|keyboardHidden|orientation"
+            android:launchMode="singleTask" />
 
 
         <!-- **************** Classic UI Start **************** -->
         <activity
             android:name=".classicui.page.MessageReplyDetailActivity"
-            android:windowSoftInputMode="adjustResize|stateHidden"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustResize|stateHidden" />
         <activity
             android:name=".classicui.page.TUIForwardChatActivity"
             android:screenOrientation="portrait" />
@@ -41,7 +40,7 @@
             android:name=".classicui.page.TUIGroupChatActivity"
             android:launchMode="singleTask"
             android:screenOrientation="portrait"
-            android:windowSoftInputMode="adjustNothing|stateHidden"/>
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
 
         <activity
             android:name=".classicui.page.MessageReceiptDetailActivity"
@@ -53,15 +52,12 @@
         <provider
             android:name=".classicui.ClassicUIService"
             android:authorities="${applicationId}.TUIChat.ClassicUI.Init"
-            android:initOrder="9998"
             android:enabled="true"
-            android:exported="false"/>
+            android:exported="false"
+            android:initOrder="9998" />
         <!-- **************** Classic UI End **************** -->
 
 
-
-
-
         <!-- **************** Minimalist UI Start **************** -->
         <activity
             android:name=".minimalistui.component.camera.CameraActivity"
@@ -69,8 +65,8 @@
 
         <activity
             android:name=".minimalistui.widget.messagepopmenu.ChatPopActivity"
-            android:theme="@style/ChatTransparentPopActivityStyle"
             android:launchMode="singleTask"
+            android:theme="@style/ChatTransparentPopActivityStyle"
             android:windowSoftInputMode="adjustNothing|stateHidden" />
 
         <activity
@@ -97,8 +93,8 @@
             android:name=".minimalistui.MinimalistUIService"
             android:authorities="${applicationId}.TUIChat.MinimalistUI.Init"
             android:enabled="true"
-            android:initOrder="9998"
-            android:exported="false"/>
+            android:exported="false"
+            android:initOrder="9998" />
         <!-- **************** Minimalist UI End **************** -->