Skip to content

Commit f7efdee

Browse files
author
xiaoborui
committed
修复部分机型循环请求通知栏权限
1 parent 6cdc75e commit f7efdee

File tree

7 files changed

+81
-47
lines changed

7 files changed

+81
-47
lines changed

app/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ dependencies {
248248
implementation(libs.rebound)
249249
implementation(libs.rxandroid)
250250
implementation(libs.rxjava)
251-
implementation(libs.rxpermissions)
251+
implementation(libs.xxpermissions)
252252
implementation(libs.sardine.android) {
253253
// https://github.com/thegrizzlylabs/sardine-android/issues/70
254254
// 上游已经exclude了,但是不知道为什么还是会有

app/src/main/java/remix/myplayer/App.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.os.Build
66
import android.os.Process
77
import androidx.multidex.MultiDex
88
import androidx.multidex.MultiDexApplication
9+
import com.hjq.permissions.XXPermissions
910
import com.tencent.bugly.crashreport.CrashReport
1011
import com.tencent.bugly.crashreport.CrashReport.UserStrategy
1112
import io.reactivex.Completable
@@ -63,11 +64,11 @@ class App : MultiDexApplication() {
6364
SPUtil.deleteFile(this, SPUtil.LYRIC_KEY.NAME)
6465
SPUtil.putValue(context, SPUtil.LYRIC_KEY.NAME, SPUtil.LYRIC_KEY.LYRIC_RESET_ON_16000, true)
6566
SPUtil.putValue(context, SPUtil.LYRIC_KEY.NAME, SPUtil.LYRIC_KEY.PRIORITY_LYRIC, SPUtil.LYRIC_KEY.DEFAULT_PRIORITY)
66-
try {
67-
DiskCache.getLrcDiskCache().delete()
68-
} catch (e: Exception) {
69-
Timber.v(e)
70-
}
67+
// try {
68+
// DiskCache.getLrcDiskCache().delete()
69+
// } catch (e: Exception) {
70+
// Timber.v(e)
71+
// }
7172
}
7273

7374
val oldVersion = SPUtil.getValue(context, SETTING_KEY.NAME, SETTING_KEY.VERSION, 1)
@@ -84,6 +85,7 @@ class App : MultiDexApplication() {
8485
}
8586

8687
private fun setUp() {
88+
XXPermissions.setCheckMode(false)
8789
DiskCache.init(this, "lyric")
8890
setApplicationLanguage(this)
8991
Completable

app/src/main/java/remix/myplayer/misc/cache/DiskCache.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
import android.os.Environment;
99
import android.text.TextUtils;
1010
import java.io.File;
11-
import java.io.IOException;
11+
12+
import timber.log.Timber;
1213

1314
/**
1415
* Created by Remix on 2016/6/14.
@@ -24,8 +25,8 @@ public static void init(Context context, String name) {
2425
lrcCacheDir.mkdir();
2526
}
2627
mLrcCache = DiskLruCache.open(lrcCacheDir, getAppVersion(context), 1, 200 * MB);
27-
} catch (IOException e) {
28-
e.printStackTrace();
28+
} catch (Exception e) {
29+
Timber.e(e);
2930
}
3031
}
3132

app/src/main/java/remix/myplayer/ui/activity/SettingActivity.kt

+16-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package remix.myplayer.ui.activity
22

3-
import android.Manifest
43
import android.annotation.SuppressLint
54
import android.app.Activity
65
import android.content.Context
@@ -25,8 +24,10 @@ import com.afollestad.materialdialogs.DialogAction
2524
import com.bumptech.glide.Glide
2625
import com.google.gson.Gson
2726
import com.google.gson.reflect.TypeToken
27+
import com.hjq.permissions.OnPermissionCallback
28+
import com.hjq.permissions.Permission
29+
import com.hjq.permissions.XXPermissions
2830
import com.soundcloud.android.crop.Crop
29-
import com.tbruyelle.rxpermissions2.RxPermissions
3031
import io.reactivex.Completable
3132
import io.reactivex.Single
3233
import io.reactivex.disposables.Disposable
@@ -256,17 +257,25 @@ class SettingActivity : ToolbarActivity(), ColorChooserDialog.ColorCallback,
256257
//经典通知栏
257258
R.id.setting_notify_switch -> {
258259
if (isChecked && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
259-
RxPermissions(this@SettingActivity)
260-
.request(Manifest.permission.POST_NOTIFICATIONS)
261-
.subscribe { has ->
262-
if (!has){
260+
XXPermissions.with(this@SettingActivity)
261+
.permission(Permission.POST_NOTIFICATIONS)
262+
.request(object : OnPermissionCallback {
263+
override fun onGranted(p0: MutableList<String>, p1: Boolean) {
264+
}
265+
266+
override fun onDenied(
267+
permissions: MutableList<String>,
268+
doNotAskAgain: Boolean
269+
) {
263270
ToastUtil.show(this@SettingActivity, R.string.need_permission)
264271
SPUtil.putValue(this@SettingActivity, SETTING_KEY.NAME, keyWord[index], false)
265272
buttonView.setOnCheckedChangeListener(null)
266273
buttonView.isChecked = false
267274
buttonView.setOnCheckedChangeListener(checkedChangedListener)
275+
276+
XXPermissions.startPermissionActivity(this@SettingActivity, Permission.POST_NOTIFICATIONS)
268277
}
269-
}
278+
})
270279
}
271280
}
272281
}

app/src/main/java/remix/myplayer/ui/activity/base/BaseActivity.kt

+45-24
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import android.os.Build
1010
import android.os.Bundle
1111
import android.view.View
1212
import androidx.appcompat.app.AppCompatActivity
13-
import com.tbruyelle.rxpermissions2.RxPermissions
13+
import com.hjq.permissions.OnPermissionCallback
14+
import com.hjq.permissions.Permission
15+
import com.hjq.permissions.XXPermissions
1416
import kotlinx.coroutines.CoroutineScope
1517
import kotlinx.coroutines.MainScope
1618
import remix.myplayer.BuildConfig
@@ -24,7 +26,12 @@ import remix.myplayer.theme.ThemeStore.sColoredNavigation
2426
import remix.myplayer.theme.ThemeStore.statusBarColor
2527
import remix.myplayer.theme.ThemeStore.themeRes
2628
import remix.myplayer.ui.misc.AudioTag
27-
import remix.myplayer.util.*
29+
import remix.myplayer.util.ColorUtil
30+
import remix.myplayer.util.MediaStoreUtil
31+
import remix.myplayer.util.PermissionUtil
32+
import remix.myplayer.util.StatusBarUtil
33+
import remix.myplayer.util.ToastUtil
34+
import remix.myplayer.util.Util
2835
import timber.log.Timber
2936

3037
/**
@@ -43,7 +50,7 @@ open class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope() {
4350
var toDeleteSongs: ArrayList<Song>? = null
4451

4552
private var dialog: Dialog? = null
46-
53+
4754
private val loadingDialog by lazy {
4855
Theme.getBaseDialog(this)
4956
.title(R.string.loading)
@@ -86,6 +93,25 @@ open class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope() {
8693
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
8794
// }
8895
setNavigationBarColor()
96+
97+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !XXPermissions.isGranted(
98+
this,
99+
Manifest.permission.POST_NOTIFICATIONS
100+
)
101+
) {
102+
XXPermissions.with(this)
103+
.permission(Permission.POST_NOTIFICATIONS)
104+
.request(object : OnPermissionCallback {
105+
override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {
106+
Timber.v("request notification permission onGranted")
107+
}
108+
109+
override fun onDenied(permissions: MutableList<String>, doNotAskAgain: Boolean) {
110+
Timber.v("request notification permission onDenied: $doNotAskAgain")
111+
}
112+
})
113+
}
114+
89115
}
90116

91117
override fun setContentView(layoutResID: Int) {
@@ -137,23 +163,19 @@ open class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope() {
137163
override fun onResume() {
138164
super.onResume()
139165
isForeground = true
140-
RxPermissions(this)
141-
.request(*NECESSARY_PERMISSIONS)
142-
.subscribe { has: Boolean ->
143-
if (has != hasPermission) {
144-
val intent = Intent(MusicService.PERMISSION_CHANGE)
145-
intent.putExtra(BaseMusicActivity.EXTRA_PERMISSION, has)
146-
Util.sendLocalBroadcast(intent)
147-
}
148-
}
149-
150-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
151-
RxPermissions(this)
152-
.request(Manifest.permission.POST_NOTIFICATIONS)
153-
.subscribe { has ->
154-
Timber.v("has: $has")
166+
if (!hasPermission) {
167+
XXPermissions.with(this)
168+
.permission(*NECESSARY_PERMISSIONS)
169+
.request { _, allGranted ->
170+
Timber.v("request necessary permission: $allGranted")
171+
if (allGranted != hasPermission) {
172+
val intent = Intent(MusicService.PERMISSION_CHANGE)
173+
intent.putExtra(BaseMusicActivity.EXTRA_PERMISSION, allGranted)
174+
Util.sendLocalBroadcast(intent)
175+
}
155176
}
156177
}
178+
157179
}
158180

159181
override fun onPause() {
@@ -204,27 +226,26 @@ open class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope() {
204226
loadingDialog.dismiss()
205227
}
206228
}
207-
229+
208230
protected fun showDialog(newDialog: Dialog) {
209231
dialog?.dismiss()
210232
if (!isFinishing && !isDestroyed && hasWindowFocus()) {
211233
dialog = newDialog
212234
newDialog.show()
213235
}
214236
}
215-
216237

217238
companion object {
218239
val NECESSARY_PERMISSIONS =
219240
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
220-
arrayOf(Manifest.permission.READ_MEDIA_AUDIO, Manifest.permission.READ_MEDIA_IMAGES)
241+
arrayOf(Permission.READ_MEDIA_AUDIO, Permission.READ_MEDIA_IMAGES)
221242
} else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
222243
arrayOf(
223-
Manifest.permission.READ_EXTERNAL_STORAGE,
224-
Manifest.permission.WRITE_EXTERNAL_STORAGE
244+
Permission.READ_EXTERNAL_STORAGE,
245+
Permission.WRITE_EXTERNAL_STORAGE
225246
)
226247
} else {
227-
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
248+
arrayOf(Permission.READ_EXTERNAL_STORAGE)
228249
}
229250
}
230251
}

app/src/main/java/remix/myplayer/util/PermissionUtil.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package remix.myplayer.util
22

3-
import android.Manifest
43
import android.content.Context
54
import android.content.Intent
65
import android.content.pm.PackageManager
@@ -10,6 +9,7 @@ import android.os.Environment
109
import android.provider.Settings
1110
import androidx.annotation.RequiresApi
1211
import androidx.core.content.ContextCompat
12+
import com.hjq.permissions.Permission
1313
import remix.myplayer.App
1414
import remix.myplayer.BuildConfig
1515

@@ -25,9 +25,9 @@ object PermissionUtil {
2525

2626
fun hasNecessaryPermission(): Boolean {
2727
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
28-
has(Manifest.permission.READ_MEDIA_AUDIO, Manifest.permission.READ_MEDIA_IMAGES)
28+
has(Permission.READ_MEDIA_IMAGES, Permission.READ_MEDIA_IMAGES)
2929
} else {
30-
has(Manifest.permission.READ_EXTERNAL_STORAGE)
30+
has(Permission.READ_EXTERNAL_STORAGE)
3131
}
3232
}
3333

@@ -39,9 +39,9 @@ object PermissionUtil {
3939
@RequiresApi(Build.VERSION_CODES.R)
4040
fun requestManageExternalStorage(context: Context) {
4141
context.startActivity(
42-
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).setData(
43-
Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
44-
)
42+
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).setData(
43+
Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
44+
)
4545
)
4646
// TODO: show toast when "a matching Activity not exists"
4747
}

gradle/libs.versions.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ ksp = "1.9.23-1.0.19"
66
glide = "4.16.0"
77
retrofit = "2.11.0"
88
room = "2.6.1"
9+
xxpermissions = "20.0"
910

1011

1112
[plugins]
@@ -58,7 +59,7 @@ rebound = { group = "com.facebook.rebound", name = "rebound", version = "0.3.8"
5859
rxandroid = { group = "io.reactivex.rxjava2", name = "rxandroid", version = "2.1.1" }
5960
rxjava = { group = "io.reactivex.rxjava2", name = "rxjava", version = "2.2.19" }
6061
# noinspection GradleDependency
61-
rxpermissions = { group = "com.github.tbruyelle", name = "rxpermissions", version = "0.11" }
62+
xxpermissions = { module = "com.github.getActivity:XXPermissions", version.ref = "xxpermissions" }
6263
sardine-android = { group = "com.github.thegrizzlylabs", name = "sardine-android", version = "0.9" }
6364
slf4j = { group = "org.slf4j", name = "slf4j-api", version = "2.0.13" }
6465
timber = { group = "com.jakewharton.timber", name = "timber", version = "5.0.1" }

0 commit comments

Comments
 (0)