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.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 外置存储存取权限 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 外置存储存取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 多媒体相关 --> <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.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@@ -67,13 +74,7 @@
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<!-- 适配安卓12&11获取当前已安装的所有应用列表--> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
</queries>
<application <application
android:name="com.nnbc123.app.application.XChatApplication" android:name="com.nnbc123.app.application.XChatApplication"
android:allowBackup="false" android:allowBackup="false"

View File

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

View File

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

View File

@@ -1,6 +1,12 @@
package com.nnbc123.app.main.helper; package com.nnbc123.app.main.helper;
import static android.Manifest.permission.POST_NOTIFICATIONS;
import android.app.Activity; 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.common.widget.dialog.DialogManager;
import com.nnbc123.app.utils.NotificationsUtils; 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; private static final long CACHE_DISTANCE_TIME = 3 * TimeUtils.MILLIS_OF_A_DAY;
public static void handle(Activity activity, DialogManager dialogManager) { 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; return;
} }
enableNotification(activity, dialogManager);
}
private static void enableNotification(Activity activity, DialogManager dialogManager) {
Single.create(new SingleOnSubscribe<String>() { Single.create(new SingleOnSubscribe<String>() {
@Override @Override
public void subscribe(SingleEmitter<String> emitter) throws Exception { public void subscribe(SingleEmitter<String> emitter) throws Exception {
long lastDialogTime = (long) SharedPreferenceUtils long lastDialogTime = (long) SharedPreferenceUtils
.get(KEY_NOTICATIONS_DIALOG_TIME, 0L); .get(KEY_NOTICATIONS_DIALOG_TIME, 0L);
long currTime = System.currentTimeMillis(); long currTime = System.currentTimeMillis();
if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) { if (lastDialogTime == 0L || currTime - lastDialogTime >= CACHE_DISTANCE_TIME) {
//超过三天需要重新弹窗 //超过三天需要重新弹窗
emitter.onSuccess(""); emitter.onSuccess("");
return; return;
} }
emitter.onError(new Throwable("no need to show notications dialog")); emitter.onError(new Throwable("no need to show notications dialog"));
} }
}) })
.flatMap(new Function<String, SingleSource<String>>() { .flatMap(new Function<String, SingleSource<String>>() {
@Override @Override
public SingleSource<String> apply(String s) throws Exception { 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.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import com.netease.nim.uikit.business.session.fragment.MessageFragment; import com.netease.nim.uikit.business.session.fragment.MessageFragment;
@@ -121,8 +122,6 @@ public class NimTeamMessageFragment extends MessageFragment {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) { public void onNimAudioChatEvent(NimAudioChatEvent event) {
checkPermission( checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO) Manifest.permission.RECORD_AUDIO)
.subscribe(result -> { .subscribe(result -> {
if (result) { if (result) {
@@ -137,8 +136,7 @@ public class NimTeamMessageFragment extends MessageFragment {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void onNimImageActionEvent(NimImageActionEvent event) { public void onNimImageActionEvent(NimImageActionEvent event) {
checkPermission( checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE, (Build.VERSION.SDK_INT >= 33) ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA) Manifest.permission.CAMERA)
.subscribe(result -> { .subscribe(result -> {
if (result) { if (result) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,10 +3,16 @@
package="com.nnbc123.library"> package="com.nnbc123.library">
<uses-permission android:name="android.permission.CAMERA" /> <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" <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="ScopedStorage" /> tools:ignore="ScopedStorage" />
<application> <application>
<activity <activity
android:name=".easypermisssion.AppSettingsDialogHolderActivity" android:name=".easypermisssion.AppSettingsDialogHolderActivity"

View File

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

View File

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

View File

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

View File

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

View File

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