feat:升级适配Android13

This commit is contained in:
Max
2024-01-11 14:47:11 +08:00
parent 3ac10340d6
commit 42e26e7f0c
20 changed files with 108 additions and 78 deletions

View File

@@ -24,8 +24,15 @@
<!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 外置存储存取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 多媒体相关 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@@ -67,13 +74,7 @@
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<!-- 适配安卓12&11获取当前已安装的所有应用列表-->
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
</queries>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application
android:name="com.nnbc123.app.application.XChatApplication"
android:allowBackup="false"

View File

@@ -135,7 +135,7 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
*/
private fun setupRoomTitleMarquee() {
try {
val configuration = ViewConfiguration.get(context)
val configuration = ViewConfiguration.get(requireContext())
val claz: Class<*> = configuration.javaClass
val field = claz.getDeclaredField("mFadingMarqueeEnabled")
field.isAccessible = true

View File

@@ -100,11 +100,11 @@ class RedPackageOpenDialog : BaseDialog<DialogRedPackageOpenBinding>() {
it.addListener(object : AnimatorListenerAdapter() {
var isCanceled = false
override fun onAnimationCancel(animation: Animator?) {
override fun onAnimationCancel(animation: Animator) {
isCanceled = true
}
override fun onAnimationEnd(animation: Animator?) {
override fun onAnimationEnd(animation: Animator) {
if (!isCanceled) {
openRedPackage()
}

View File

@@ -1,6 +1,12 @@
package com.nnbc123.app.main.helper;
import static android.Manifest.permission.POST_NOTIFICATIONS;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.core.app.ActivityCompat;
import com.nnbc123.app.common.widget.dialog.DialogManager;
import com.nnbc123.app.utils.NotificationsUtils;
@@ -35,23 +41,35 @@ public class NoticationsUiHelper {
private static final long CACHE_DISTANCE_TIME = 3 * TimeUtils.MILLIS_OF_A_DAY;
public static void handle(Activity activity, DialogManager dialogManager) {
if (NotificationsUtils.isNotificationEnabled(activity)) {
if (Build.VERSION.SDK_INT >= 33) {
if (ActivityCompat.checkSelfPermission(activity, POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(activity, POST_NOTIFICATIONS)) {
enableNotification(activity, dialogManager);
} else {
ActivityCompat.requestPermissions(activity, new String[]{POST_NOTIFICATIONS}, 100);
}
}
} else if (NotificationsUtils.isNotificationEnabled(activity)) {
return;
}
enableNotification(activity, dialogManager);
}
private static void enableNotification(Activity activity, DialogManager dialogManager) {
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
long lastDialogTime = (long) SharedPreferenceUtils
.get(KEY_NOTICATIONS_DIALOG_TIME, 0L);
long currTime = System.currentTimeMillis();
if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) {
//超过三天需要重新弹窗
emitter.onSuccess("");
return;
}
emitter.onError(new Throwable("no need to show notications dialog"));
}
})
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
long lastDialogTime = (long) SharedPreferenceUtils
.get(KEY_NOTICATIONS_DIALOG_TIME, 0L);
long currTime = System.currentTimeMillis();
if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) {
//超过三天需要重新弹窗
emitter.onSuccess("");
return;
}
emitter.onError(new Throwable("no need to show notications dialog"));
}
})
.flatMap(new Function<String, SingleSource<String>>() {
@Override
public SingleSource<String> apply(String s) throws Exception {
@@ -99,5 +117,4 @@ public class NoticationsUiHelper {
}
});
}
}
}

View File

@@ -3,6 +3,7 @@ package com.nnbc123.app.team.view;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import com.netease.nim.uikit.business.session.fragment.MessageFragment;
@@ -121,8 +122,6 @@ public class NimTeamMessageFragment extends MessageFragment {
@SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) {
checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO)
.subscribe(result -> {
if (result) {
@@ -137,8 +136,7 @@ public class NimTeamMessageFragment extends MessageFragment {
@SuppressLint("CheckResult")
public void onNimImageActionEvent(NimImageActionEvent event) {
checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
(Build.VERSION.SDK_INT >= 33) ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe(result -> {
if (result) {

View File

@@ -7,6 +7,7 @@ import android.content.Intent;
import android.graphics.Color;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.SpannableString;
@@ -625,8 +626,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) {
String[] perms = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
String[] perms = new String[]{
Manifest.permission.RECORD_AUDIO};
String tips = ResUtil.getString(R.string.permission_denied_tips_mic);
if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
@@ -670,8 +670,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimImageActionEvent(NimImageActionEvent event) {
checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
checkPermission((Build.VERSION.SDK_INT >= 33) ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe(result -> {
if (result) {

View File

@@ -1,6 +1,7 @@
package com.nnbc123.app.ui.setting.bean
import android.Manifest
import android.os.Build
import com.nnbc123.app.R
import com.nnbc123.core.utils.TextUtils
@@ -53,8 +54,7 @@ enum class PermissionEntity(
STORAGE(
"存储", "读取手机存储,修改/删除手机储存", R.drawable.icon_permission_storage,
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
);

View File

@@ -5,6 +5,7 @@ import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.text.TextUtils
@@ -313,8 +314,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
RequestPermissionPromptDialog.dismissCurrentDialog()
if (!EasyPermissions.hasPermissions(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
) {
if (RequestPermissionPromptDialog.isNeedPrompt()) {
@@ -327,8 +327,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
this,
"请您再次考虑授予存储空间权限,否则将无法正常加载您本地的文件内容。",
PERMISSION_CODE_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")

View File

@@ -6,6 +6,7 @@ import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.text.TextUtils
@@ -14,10 +15,8 @@ import android.widget.GridView
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.hjq.toast.ToastUtils
import com.netease.nim.uikit.StatusBarUtil
import com.netease.nim.uikit.common.util.sys.TimeUtil
import com.nnbc123.app.R
import com.nnbc123.app.application.XChatApplication
import com.nnbc123.app.base.TitleBar
@@ -26,10 +25,8 @@ import com.nnbc123.app.common.util.BitmapUtil
import com.nnbc123.app.takephoto.app.TakePhotoActivity
import com.nnbc123.app.takephoto.compress.CompressConfig
import com.nnbc123.app.ui.user.UserModifyPhotosAdapter.PhotoItemClickListener
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog
import com.nnbc123.app.utils.RegexUtil
import com.nnbc123.core.file.FileModel
import com.nnbc123.core.user.UserModel
import com.nnbc123.core.user.bean.UserInfo
@@ -262,8 +259,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
RequestPermissionPromptDialog.dismissCurrentDialog()
if (!EasyPermissions.hasPermissions(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
) {
if (RequestPermissionPromptDialog.isNeedPrompt()) {
@@ -276,8 +272,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
this,
"请您再次考虑授予存储空间权限,否则将无法正常加载您本地的文件内容。",
PERMISSION_CODE_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")

View File

@@ -557,8 +557,7 @@ public class JSInterface {
public void saveBase64Image(String imageBase64) {
mActivity.runOnUiThread(() ->
mActivity.checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
(Build.VERSION.SDK_INT >= 33) ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE
)
.subscribe(aBoolean -> {
if (aBoolean) {

View File

@@ -4,6 +4,7 @@ import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.recyclerview.widget.GridLayoutManager;
@@ -199,7 +200,7 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
PublishItem item = imageShowList.get(position);
if (item.isAddItem()) {
String tips = ResUtil.getString(R.string.permission_denied_tips_image);
String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
String permission = Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE;
if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, permission)) {
new RequestPermissionPromptDialog(this, tips).show();

View File

@@ -4,6 +4,7 @@ import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
@@ -95,7 +96,7 @@ public class MusicListActivity extends BaseMvpActivity<IMusicListView, MusicList
page = getIntent().getIntExtra(KEY_PAGE, page);
viewPager.setCurrentItem(page);
StatisticManager.Instance().onEvent(StatisticsProtocol.ROOM_SHARING_MUSIC, "共享音乐");
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
checkPermission(Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_AUDIO : Manifest.permission.READ_EXTERNAL_STORAGE)
.compose(bindToLifecycle())
.subscribe(aBoolean -> {
if (!aBoolean) {

View File

@@ -22,7 +22,7 @@ data class RoomHourRankInfo(
return 0
}
override fun writeToParcel(p0: Parcel?, p1: Int) {
override fun writeToParcel(p0: Parcel, p1: Int) {
p0?.writeLong(roomUid ?: 0)
p0?.writeLong(rank ?: 0)
p0?.writeLong(diffValue ?: 0)

View File

@@ -24,9 +24,9 @@ with_jenkins=false
only_arm64=false
COMPILE_SDK_VERSION=32
COMPILE_SDK_VERSION=33
MIN_SDK_VERSION=21
TARGET_SDK_VERSION=32
TARGET_SDK_VERSION=33
version_name=2.0.0
version_code=2000

View File

@@ -3,10 +3,16 @@
package="com.nnbc123.library">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="ScopedStorage" />
<application>
<activity
android:name=".easypermisssion.AppSettingsDialogHolderActivity"

View File

@@ -1,12 +1,14 @@
package com.nnbc123.library.easyphoto.models.album;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.text.TextUtils;
@@ -60,7 +62,7 @@ public class AlbumModel {
public void query(Context context, final CallBack callBack) {
final Context appCxt = context.getApplicationContext();
if (PermissionChecker.checkSelfPermission(context,
Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
if (null != callBack) callBack.onAlbumWorkedCallBack();
return;
}
@@ -82,6 +84,7 @@ public class AlbumModel {
canRun = false;
}
@SuppressLint("Range")
private synchronized void initAlbum(Context context) {
album.clear();
if (Setting.selectedPhotos.size() > Setting.count) {

View File

@@ -210,11 +210,9 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA
protected String[] getNeedPermissions() {
if (Setting.isShowCamera) {
return new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
} else {
return new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
return new String[]{Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
}
}
@@ -499,6 +497,7 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA
shouldShowMenuDone();
}
@SuppressLint("Range")
private Photo getPhoto(Uri uri) {
Photo p = null;
String path;
@@ -625,12 +624,17 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA
}
}
final Photo photo = new Photo(mTempImageFile.getName(), uri,
mTempImageFile.getAbsolutePath(),
mTempImageFile.lastModified() / 1000, width, height, orientation,
mTempImageFile.length(),
DurationUtils.getDuration(mTempImageFile.getAbsolutePath()),
options.outMimeType);
final Photo photo;
try {
photo = new Photo(mTempImageFile.getName(), uri,
mTempImageFile.getAbsolutePath(),
mTempImageFile.lastModified() / 1000, width, height, orientation,
mTempImageFile.length(),
DurationUtils.getDuration(mTempImageFile.getAbsolutePath()),
options.outMimeType);
} catch (Exception e) {
throw new RuntimeException(e);
}
runOnUiThread(new Runnable() {
@Override

View File

@@ -7,6 +7,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
@@ -459,10 +460,15 @@ public class PuzzleActivity extends AppCompatActivity implements View.OnClickLis
public void onSuccess(File file) {
Intent intent = new Intent();
Photo photo = new Photo(file.getName(), UriUtils.getUri(PuzzleActivity.this,
file), file.getAbsolutePath(), file.lastModified() / 1000,
puzzleView.getWidth(), puzzleView.getHeight(), 0, file.length(),
DurationUtils.getDuration(file.getAbsolutePath()), "image/png");
Photo photo = null;
try {
photo = new Photo(file.getName(), UriUtils.getUri(PuzzleActivity.this,
file), file.getAbsolutePath(), file.lastModified() / 1000,
puzzleView.getWidth(), puzzleView.getHeight(), 0, file.length(),
DurationUtils.getDuration(file.getAbsolutePath()), "image/png");
} catch (Exception e) {
throw new RuntimeException(e);
}
intent.putExtra(EasyPhotos.RESULT_PHOTOS, photo);
setResult(RESULT_OK, intent);
PuzzleActivity.this.finish();
@@ -576,8 +582,7 @@ public class PuzzleActivity extends AppCompatActivity implements View.OnClickLis
protected String[] getNeedPermissions() {
return new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
}
@Override

View File

@@ -3,6 +3,8 @@ package com.nnbc123.library.easyphoto.utils.media;
import android.media.MediaMetadataRetriever;
import android.text.format.DateUtils;
import java.io.IOException;
/**
* DurationUtils
* Create By lishilin On 2019/3/25
@@ -15,7 +17,7 @@ public class DurationUtils {
* @param path path
* @return duration
*/
public static long getDuration(String path) {
public static long getDuration(String path) throws IOException {
MediaMetadataRetriever mmr = null;
try {
mmr = new MediaMetadataRetriever();

View File

@@ -2,6 +2,7 @@ package com.netease.nim.uikit.business.session.actions
import android.Manifest
import android.content.Intent
import android.os.Build
import android.text.TextUtils
import com.netease.nim.uikit.R
import com.nnbc123.library.common.application.BaseApp
@@ -37,8 +38,7 @@ abstract class PickImageActionNew protected constructor(
}
},
"访问你的本地内容,以能正常使用图片上传、视频发送等应用功能",
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
} ?: checkStoragePermission()
}