feat:升级适配Android13
This commit is contained in:
@@ -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"
|
||||||
|
@@ -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
|
||||||
|
@@ -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()
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
@@ -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) {
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -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")
|
||||||
|
@@ -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")
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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();
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
@@ -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"
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
@@ -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()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user