修改上传图片逻辑

This commit is contained in:
2025-08-09 16:02:08 +08:00
parent ed7461261c
commit a8dcdf8b4b
13 changed files with 586 additions and 156 deletions

View File

@@ -10,8 +10,8 @@ MobSDK {
loopShare true
devInfo {
Wechat {
appId "wx3858bffeddfb91b8"
appSecret "0b59b165268b63ba6446d1dc55a21f38"
appId "wx7b5c4e89e726a72c"
appSecret "afc9860f4c670ac19f9efb0ab94927a3"
}
QQ {
appId "102046191"
@@ -33,10 +33,10 @@ android {
defaultConfig {
applicationId "com.yuyin.mier"
minSdkVersion 22
targetSdkVersion 33
targetSdkVersion 31
versionCode 42
versionName "1.3.3"
versionCode 46
versionName "1.3.6"
dataBinding {
//noinspection DataBindingWithoutKapt
enabled = true

View File

@@ -9,39 +9,53 @@
</queries> <!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于访问wifi网络信息wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 这个权限用于获取wifi的获取权限wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- The Agora SDK requires Bluetooth permissions in case users are using Bluetooth devices. -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- SDK 权限申明, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取网络状态 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络通信 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取设备信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取MAC地址 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读写sdcardstorage等等 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允许程序录制音频 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Android 9 及以下 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- Android 13+ 图片权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Android 13+ 视频权限 -->
<uses-permission android:name="android.permission.NETWORK_PROVIDER" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<!-- />-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<queries package="${applicationId}">
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE">
</action>
</intent>
<intent>
<action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
</action>
</intent>
</queries>
<!-- 基础权限 -->
<application
android:name="com.yuyin.lib_base.App"
android:allowBackup="true"
@@ -79,6 +93,8 @@
android:name="design_height_in_dp"
android:value="812" />
<activity
android:name="com.yuyin.mier.module_my.set.BindPhoneActivity"
android:exported="true" />

View File

@@ -47,14 +47,14 @@ class ChongZhiActivity : BaseDataBindingActivity<ChongZhiViewModel, ViewDataBind
val mWxApi = WXAPIFactory.createWXAPI(
this,null)
// 将该app注册到微信
mWxApi.registerApp("wx3858bffeddfb91b8")
mWxApi.registerApp("wx7b5c4e89e726a72c")
// 判断是否安装客户端
if (!mWxApi.isWXAppInstalled) {
"请您先安装微信客户端!".showToast()
return@observe
}
val req = PayReq()
req.appId = "wx3858bffeddfb91b8" // 微信开放平台审核通过的应用APPID
req.appId = "wx7b5c4e89e726a72c" // 微信开放平台审核通过的应用APPID
req.partnerId = it.partnerid // 微信支付分配的商户号

View File

@@ -2,50 +2,82 @@ package com.yuyin.mier.module_my.edituser
import android.Manifest
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.Settings
import android.text.TextUtils
import android.view.View
import android.widget.ImageView
import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.GridLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet
import com.baoyz.actionsheet.ActionSheet.ActionSheetListener
import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.bumptech.glide.Glide
import com.yuyin.lib_base.arouter.AroutUtil.MAIN_MY_USER_INFO
import com.yuyin.lib_base.base.BaseActivity
import com.yuyin.lib_base.util.showToast
import com.bumptech.glide.Priority
import com.bumptech.glide.request.RequestOptions
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.PictureConfig
import com.luck.picture.lib.engine.ImageEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.style.PictureSelectorStyle
import com.lzy.imagepicker.ImagePicker
import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions
import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMUserFullInfo
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine
import com.yuyin.lib_base.arouter.AroutUtil.MAIN_MY_USER_INFO
import com.yuyin.lib_base.base.BaseActivity
import com.yuyin.lib_base.base.UserManager
import com.yuyin.lib_base.model.Login
import com.yuyin.lib_base.util.PermissionsChecker
import com.yuyin.lib_base.util.showToast
import com.yuyin.mier.R
import com.yuyin.module_community.adapter.FBPicListAdapter
import com.yuyin.module_community.adapter.FullyGridLayoutManager
import com.yuyin.module_community.model.ImageItems
import kotlinx.android.synthetic.main.activity_modify_data.*
import kotlinx.android.synthetic.main.activity_modify_data.birthday
import kotlinx.android.synthetic.main.activity_modify_data.birthday_btn
import kotlinx.android.synthetic.main.activity_modify_data.head_image
import kotlinx.android.synthetic.main.activity_modify_data.id
import kotlinx.android.synthetic.main.activity_modify_data.ll_quanxian
import kotlinx.android.synthetic.main.activity_modify_data.rl_sex
import kotlinx.android.synthetic.main.activity_modify_data.sex
import kotlinx.android.synthetic.main.activity_modify_data.sor_release_rv
import kotlinx.android.synthetic.main.activity_modify_data.textSend
import kotlinx.android.synthetic.main.activity_modify_data.tv_aihao
import kotlinx.android.synthetic.main.activity_modify_data.tv_baocun
import kotlinx.android.synthetic.main.activity_modify_data.tv_qianming
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody
import org.litepal.LitePal
import java.io.File
import java.lang.Exception
import java.text.SimpleDateFormat
import java.util.*
import java.util.Calendar
import java.util.Date
import java.util.Locale
import java.util.TimeZone
@Route(path = MAIN_MY_USER_INFO)
class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
private var startDate: Calendar = Calendar.getInstance()
private var endDate: Calendar = Calendar.getInstance()
private var seleteDate: Calendar = Calendar.getInstance()
var permissionListTmp = arrayOf<String>(Manifest.permission.CAMERA,
var permissionListTmp = arrayOf<String>(
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE)
Manifest.permission.READ_EXTERNAL_STORAGE
)
//图片
val REQUEST_CODE_SELECT = 100
val REQUEST_CODE_SELEC2 = 101
@@ -138,6 +170,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
sexStr = "1"
sex.text = ""
}
1 -> {
sexStr = "2"
sex.text = ""
@@ -167,7 +200,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
"爱好不能为空".showToast()
return@setOnClickListener
}
// if (tempList.size == 0) {
if (selImageList.size == 0) {
viewModel.editUserInfo(
imgString,
@@ -180,9 +213,23 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
} else {
uploadFile(selImageList[0].path)
}
// }else{
// uploadFile(tempList[0].path)
// }
}
head_image.setOnClickListener {
showImgPop()
// showImgPop()
// var my :GlideEngine
PictureSelector.create(this)
.openGallery(1)
.setImageEngine(TUIEngine())
.setSelectorUIStyle(PictureSelectorStyle())
.isGif(false)
.setMaxSelectNum(1)
.isPreviewImage(true)
.isDisplayCamera(true)
.isOriginalSkipCompress(true)
.forResult(REQUEST_CODE_SELECT) //结果回调onActivityResult code
}
birthday_btn.setOnClickListener {
val string = birthday.text.toString()
@@ -215,33 +262,61 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
}
adapter.setOnItemClickListener { adapter2, view, position ->
var mPermissionsChecker= PermissionsChecker(this@ModifyDataActivity)
if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
ll_quanxian.visibility= View.VISIBLE
}else{
ll_quanxian.visibility= View.GONE
}
// var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity)
// if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
// ll_quanxian.visibility = View.VISIBLE
// } else {
// ll_quanxian.visibility = View.GONE
// }
if (adapter.data[position].type == 2) {
var numss = 9 - (adapter.data.size - 1)
if (numss > 3) numss = 3
val rxPermissions = RxPermissions(this)
val finalNumss = numss
rxPermissions
.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe { granted: Boolean ->
if (granted) { // Always true pre-M
// 跳转到相册
ll_quanxian.visibility= View.GONE
ImagePicker.getInstance().selectLimit = finalNumss
ImagePicker.getInstance().isMultiMode = true
ImagePicker.getInstance().isCrop = false
val intent = Intent(this, ImageGridActivity::class.java)
//显示选中的图片
startActivityForResult(intent, REQUEST_CODE_SELEC2)
}else{
ll_quanxian.visibility= View.GONE
}
}
PictureSelector.create(this)
.openGallery(1)
.setImageEngine(TUIEngine())
.setSelectorUIStyle(PictureSelectorStyle())
.isGif(false)
.setMaxSelectNum(9)
.isPreviewImage(true)
.isDisplayCamera(true)
.isOriginalSkipCompress(true)
.forResult(REQUEST_CODE_SELEC2) //结果回调onActivityResult code
// var numss = 9 - (adapter.data.size - 1)
// if (numss > 3) numss = 3
// val rxPermissions = RxPermissions(this)
// val finalNumss = numss
// rxPermissions
// .request(
// Manifest.permission.CAMERA,
// Manifest.permission.WRITE_EXTERNAL_STORAGE,
// Manifest.permission.READ_MEDIA_IMAGES
// )
// .subscribe { granted: Boolean ->
// if (granted) { // Always true pre-M
// // 跳转到相册
// ll_quanxian.visibility = View.GONE
// ImagePicker.getInstance().selectLimit = finalNumss
// ImagePicker.getInstance().isMultiMode = true
// ImagePicker.getInstance().isCrop = false
// val intent = Intent(this, ImageGridActivity::class.java)
// //显示选中的图片
// startActivityForResult(intent, REQUEST_CODE_SELEC2)
// } else {
// ll_quanxian.visibility = View.GONE
// AlertDialog.Builder(this@ModifyDataActivity)
// .setMessage("需要存储权限来访问相册")
// .setPositiveButton("去设置") { dialog, which ->
// val intent: Intent =
// Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
// val uri = Uri.fromParts("package", packageName, null)
// intent.setData(uri)
// startActivity(intent)
// }
// .setNegativeButton("取消", null)
// .show()
// }
// }
}
}
adapter.setOnItemChildClickListener { adapter, view, position ->
@@ -257,7 +332,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
} else {
adapter.notifyDataSetChanged()
}
}catch (e:Exception){
} catch (e: Exception) {
e.printStackTrace()
}
@@ -267,9 +342,72 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
}
}
class TUIEngine : ImageEngine {
override fun loadImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadImage(
context: Context?,
imageView: ImageView?,
url: String?,
maxWidth: Int,
maxHeight: Int
) {
if (imageView != null) {
Glide.with(context!!)
.load(url)
.apply(
RequestOptions()
.override(maxWidth, maxHeight)
.priority(Priority.HIGH)
.fitCenter()
)
.into(imageView)
}
}
override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun pauseRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
override fun resumeRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
fun clearMemory(context: Context) {
// 可以调用Glide的清理方法
Glide.get(context).clearMemory()
}
fun loadPreImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
}
private fun uploadFile(pic: String) {
val parts = ArrayList<MultipartBody.Part>()
val listPos: MutableList<Int> = ArrayList()
// if (tempList.size != 0){
// for (i in tempList.indices) {
// val file = File(tempList[i].path)
// val requestFile =
// RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file)
// val body = MultipartBody.Part.createFormData("file[]", file.name, requestFile)
// parts.add(body)
// listPos.add(i)
// }
// }
if (!TextUtils.isEmpty(pic)) {
val file2 = File(pic)
val requestFile2 = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file2)
@@ -278,6 +416,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
listPos.add(1)
}
if (parts.size != 0) {
viewModel.uploadImages(parts)
}
}
@@ -291,24 +430,26 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
.setListener(object : ActionSheetListener {
override fun onDismiss(actionSheet: ActionSheet, isCancel: Boolean) {}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
@SuppressLint("CheckResult")
override fun onOtherButtonClick(actionSheet: ActionSheet, index: Int) {
var mPermissionsChecker= PermissionsChecker(this@ModifyDataActivity)
var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity)
if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
ll_quanxian.visibility= View.VISIBLE
}else{
ll_quanxian.visibility= View.GONE
ll_quanxian.visibility = View.VISIBLE
} else {
ll_quanxian.visibility = View.GONE
}
val rxPermissions = RxPermissions(this@ModifyDataActivity)
rxPermissions
.request(
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_MEDIA_IMAGES
)
.subscribe { granted: Boolean ->
if (granted) { // Always true pre-M
ll_quanxian.visibility= View.GONE
ll_quanxian.visibility = View.GONE
when (index) {
0 -> {
//相机
@@ -326,6 +467,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
REQUEST_CODE_SELECT
)
}
1 -> {
// 跳转到相册
// Always true pre-M
@@ -347,8 +489,19 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
}
}
}else{
ll_quanxian.visibility= View.GONE
} else {
ll_quanxian.visibility = View.GONE
AlertDialog.Builder(this@ModifyDataActivity)
.setMessage("需要存储权限来访问相册")
.setPositiveButton("去设置") { dialog: DialogInterface?, which: Int ->
val intent =
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.setData(uri)
startActivity(intent)
}
.setNegativeButton("取消", null)
.show()
}
}
@@ -389,30 +542,81 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
if (data == null) {
return
}
val tempList: ArrayList<ImageItem>?
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
// val tempList: ArrayList<ImageItem>?
// if (resultCode == RESULT_OK && data != null) {
// //添加图片返回
// if (requestCode == REQUEST_CODE_SELECT) {
//// tempList =
//// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
// tempList = PictureSelector.obtainSelectorList(data) as ArrayList<ImageItem>?
// if (tempList == null) {
// return
// }
// selImageList.clear()
// selImageList.addAll(tempList)
// if (selImageList.size > 0) {
// Glide.with(this).load(selImageList[0].path).into(head_image)
// }
// } else if (requestCode == REQUEST_CODE_SELEC2) {
// tempList =
// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
// if (tempList == null) {
// return
// }
//
// adapter.data.clear()
// for (i in tempList.indices) {
// imageListAll1.add(ImageItems(1, tempList[i]))
// }
//
// imageListAll2 = imageListAll1
// if (imageListAll2.size < maxSelectNum) {
// imageListAll2.add(ImageItems(2, ImageItem()))
// }
//
// adapter.setNewData(imageListAll2)
// }
// }
if (resultCode == RESULT_OK && data != null) {
//添加图片返回
if (requestCode == REQUEST_CODE_SELECT) {
tempList =
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
if (tempList == null) {
return
}
// 处理 PictureSelector 返回的结果
val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
// 清空原有选择
selImageList.clear()
selImageList.addAll(tempList)
// 将 LocalMedia 转换为 ImageItem
for (localMedia in localMediaList) {
val imageItem = ImageItem()
imageItem.path = localMedia.realPath // 或者使用 localMedia.compressPath
selImageList.add(imageItem)
}
if (selImageList.size > 0) {
Glide.with(this).load(selImageList[0].path).into(head_image)
}
} else if (requestCode == REQUEST_CODE_SELEC2) {
tempList =
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
if (tempList == null) {
return
}
// 处理 ImagePicker 返回的结果
val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
// val tempList = data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
// if (tempList == null) {
// return
// }
adapter.data.clear()
for (i in tempList.indices) {
imageListAll1.add(ImageItems(1, tempList[i]))
// for (i in tempList.indices) {
// imageListAll1.add(ImageItems(1, tempList[i]))
// }
tempList.clear()
for (localMedia in localMediaList) {
val imageItem = ImageItem()
imageItem.path = localMedia.realPath
tempList.add(imageItem)
imageListAll1.add(ImageItems(1, imageItem))
}
imageListAll2 = imageListAll1

View File

@@ -118,7 +118,7 @@ class JinBiFragment : BaseDataBindingFragment<JinBiViewModel, FragmentJinbiBindi
)
// 将该app注册到微信
mWxApi.registerApp("wx3858bffeddfb91b8")
mWxApi.registerApp("wx7b5c4e89e726a72c")
// 判断是否安装客户端
if (!mWxApi.isWXAppInstalled) {
"请您先安装微信客户端!".showToast()
@@ -126,7 +126,7 @@ class JinBiFragment : BaseDataBindingFragment<JinBiViewModel, FragmentJinbiBindi
}
val req = PayReq()
// 微信开放平台审核通过的应用APPID
req.appId = "wx3858bffeddfb91b8"
req.appId = "wx7b5c4e89e726a72c"
// 微信支付分配的商户号
req.partnerId = it.partnerid
// 预支付订单号app服务器调用“统一下单”接口获取

View File

@@ -63,7 +63,7 @@ class ChangeInviterActivity :
)
// 将该app注册到微信
mWxApi.registerApp("wx3858bffeddfb91b8")
mWxApi.registerApp("wx7b5c4e89e726a72c")
// 判断是否安装客户端
if (!mWxApi.isWXAppInstalled) {
"请您先安装微信客户端!".showToast()
@@ -71,7 +71,7 @@ class ChangeInviterActivity :
}
val req = PayReq()
// 微信开放平台审核通过的应用APPID
req.appId = "wx3858bffeddfb91b8"
req.appId = "wx7b5c4e89e726a72c"
// 微信支付分配的商户号
req.partnerId = it.partnerid
// 预支付订单号app服务器调用“统一下单”接口获取

View File

@@ -20,7 +20,7 @@ public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, "wx3858bffeddfb91b8", true);
api = WXAPIFactory.createWXAPI(this, "wx7b5c4e89e726a72c", true);
api.handleIntent(getIntent(), this);
}

View File

@@ -58,6 +58,7 @@ dependencies {
api 'com.alibaba:arouter-api:1.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
implementation project(':tuicore')
kapt'com.alibaba:arouter-compiler:1.2.2'
api project(':lib_base')

View File

@@ -1,18 +1,28 @@
package com.yuyin.module_community.ui.fabu
import android.Manifest
import android.content.Context
import android.content.Intent
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.view.View
import android.widget.ImageView
import androidx.recyclerview.widget.GridLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet
import com.bumptech.glide.Glide
import com.bumptech.glide.Priority
import com.bumptech.glide.request.RequestOptions
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.engine.ImageEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.style.PictureSelectorStyle
import com.lzy.imagepicker.ImagePicker
import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine
import com.yuyin.lib_base.App
import com.yuyin.lib_base.arouter.AroutUtil.COMMUNITY_FABU
import com.yuyin.lib_base.base.BaseDataBindingActivity
@@ -61,33 +71,45 @@ class SocialReleaseActivity :
override fun initView() {
adapter.setOnItemClickListener { adapter2, view, position ->
var mPermissionsChecker = PermissionsChecker(this@SocialReleaseActivity)
if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
ll_quanxian.visibility = View.VISIBLE
} else {
ll_quanxian.visibility = View.GONE
}
// var mPermissionsChecker = PermissionsChecker(this@SocialReleaseActivity)
// if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
// ll_quanxian.visibility = View.VISIBLE
// } else {
// ll_quanxian.visibility = View.GONE
// }
if (adapter.data[position].type == 2) {
var numss = 9 - (adapter.data.size - 1)
if (numss > 3) numss = 3
val rxPermissions = RxPermissions(this)
val finalNumss = numss
rxPermissions
.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe { granted: Boolean ->
if (granted) { // Always true pre-M
// 跳转到相册
ll_quanxian.visibility = View.GONE
ImagePicker.getInstance().selectLimit = finalNumss
ImagePicker.getInstance().isMultiMode = true
ImagePicker.getInstance().isCrop = false
val intent = Intent(this, ImageGridActivity::class.java)
//显示选中的图片
startActivityForResult(intent, REQUEST_CODE_SELECT)
} else {
ll_quanxian.visibility = View.GONE
}
}
PictureSelector.create(this)
.openGallery(1)
.setImageEngine(TUIEngine())
.setSelectorUIStyle(PictureSelectorStyle())
.isGif(false)
.setMaxSelectNum(9)
.isPreviewImage(true)
.isDisplayCamera(true)
.isOriginalSkipCompress(true)
.forResult(REQUEST_CODE_SELECT) //结果回调onActivityResult code
// var numss = 9 - (adapter.data.size - 1)
// if (numss > 3) numss = 3
// val rxPermissions = RxPermissions(this)
// val finalNumss = numss
// rxPermissions
// .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
// .subscribe { granted: Boolean ->
// if (granted) { // Always true pre-M
// // 跳转到相册
// ll_quanxian.visibility = View.GONE
// ImagePicker.getInstance().selectLimit = finalNumss
// ImagePicker.getInstance().isMultiMode = true
// ImagePicker.getInstance().isCrop = false
// val intent = Intent(this, ImageGridActivity::class.java)
// //显示选中的图片
// startActivityForResult(intent, REQUEST_CODE_SELECT)
// } else {
// ll_quanxian.visibility = View.GONE
// }
// }
}
}
adapter.setOnItemChildClickListener { adapter, view, position ->
@@ -106,6 +128,58 @@ class SocialReleaseActivity :
}
}
}
class TUIEngine : ImageEngine {
override fun loadImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadImage(
context: Context?,
imageView: ImageView?,
url: String?,
maxWidth: Int,
maxHeight: Int
) {
if (imageView != null) {
Glide.with(context!!)
.load(url)
.apply(
RequestOptions()
.override(maxWidth, maxHeight)
.priority(Priority.HIGH)
.fitCenter()
)
.into(imageView)
}
}
override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun pauseRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
override fun resumeRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
fun clearMemory(context: Context) {
// 可以调用Glide的清理方法
Glide.get(context).clearMemory()
}
fun loadPreImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
}
private fun uploadFile() {
val parts = java.util.ArrayList<MultipartBody.Part>()
@@ -248,18 +322,41 @@ class SocialReleaseActivity :
if (data == null) {
return
}
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
if (resultCode == RESULT_OK && data != null) {
//添加图片返回
if (requestCode == REQUEST_CODE_SELECT) {
tempList.addAll(data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>)
imageSize = tempList.size
if (tempList == null) {
return
}
adapter.data.clear()
// tempList.addAll(data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>)
// imageSize = tempList.size
// if (tempList == null) {
// return
// }
// adapter.data.clear()
//
// for (i in tempList.indices) {
// imageListAll1.add(ImageItems(1, tempList[i]))
// }
//
// imageListAll2 = imageListAll1
// if (imageListAll2.size < maxSelectNum) {
// imageListAll2.add(ImageItems(2, ImageItem()))
// }
//
// adapter.setNewData(imageListAll2)
for (i in tempList.indices) {
imageListAll1.add(ImageItems(1, tempList[i]))
val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
imageSize = localMediaList.size
adapter.data.clear()
// for (i in tempList.indices) {
// imageListAll1.add(ImageItems(1, tempList[i]))
// }
tempList.clear()
for (localMedia in localMediaList) {
val imageItem = ImageItem()
imageItem.path = localMedia.realPath
tempList.add(imageItem)
imageListAll1.add(ImageItems(1, imageItem))
}
imageListAll2 = imageListAll1
@@ -268,6 +365,8 @@ class SocialReleaseActivity :
}
adapter.setNewData(imageListAll2)
}
}
}

View File

@@ -2,10 +2,12 @@ package com.yuyin.module_live.ui.roomset
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.text.TextUtils
import android.view.KeyEvent
import android.view.View
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.recyclerview.widget.GridLayoutManager
@@ -13,14 +15,21 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet
import com.bumptech.glide.Glide
import com.bumptech.glide.Priority
import com.bumptech.glide.request.RequestOptions
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.kongzue.dialog.util.BaseDialog
import com.kongzue.dialog.v3.CustomDialog
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.engine.ImageEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.style.PictureSelectorStyle
import com.lzy.imagepicker.ImagePicker
import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine
import com.yuyin.lib_base.Const
import com.yuyin.lib_base.arouter.AroutUtil.LIVE_LIVESETNEW
import com.yuyin.lib_base.base.BaseDataBindingActivity
@@ -46,11 +55,13 @@ import kotlin.collections.set
@Route(path = LIVE_LIVESETNEW)
class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoomSettingNewBinding>() {
class RoomSetNewActivity :
BaseDataBindingActivity<RoomSetViewModel, ActivityRoomSettingNewBinding>() {
private var roomImgyAdapter: RoomImgyAdapter? = null
lateinit var mEnterRoom: EnterRoomInfo
// lateinit var categorRoomBeans: ArrayList<CategorRoomBean>
private var roomType=""
// lateinit var categorRoomBeans: ArrayList<CategorRoomBean>
private var roomType = ""
var room_background = ""
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
@@ -62,26 +73,26 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
}
override fun startObserve() {
viewModel.roomCateBean.observe(this){
viewModel.roomCateBean.observe(this) {
for (item in it.indices) {
if (mEnterRoom.cate_id == it[item].cate_id.toString()) {
it[item].isSelect = true
roomType=it[item].cate_id.toString()
roomType = it[item].cate_id.toString()
break
}
}
mDataBinding.rvContainer.layoutManager =
LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
var tagAdapter=TagAdapter(it)
var tagAdapter = TagAdapter(it)
mDataBinding.rvContainer.adapter = tagAdapter
tagAdapter.setOnItemClickListener { adapter, view, position ->
val data: List<RoomCateBean> = tagAdapter!!.data
for(list in data){
for (list in data) {
list.isSelect = false
}
tagAdapter.data[position].isSelect=true
roomType= tagAdapter.data[position].cate_id.toString()
tagAdapter.data[position].isSelect = true
roomType = tagAdapter.data[position].cate_id.toString()
tagAdapter.notifyDataSetChanged()
}
}
@@ -126,7 +137,7 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
map["room_intro"] = room_intro
map["cate_id"] = roomType
map["room_cover"] = it[0]
if(!TextUtils.isEmpty(mDataBinding.etPass.text.toString().trim())){
if (!TextUtils.isEmpty(mDataBinding.etPass.text.toString().trim())) {
map["room_password"] = mDataBinding.etPass.text.toString().trim()
}
map["room_background_id"] = room_background
@@ -139,8 +150,8 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
EventBus.getDefault().post(FirstEvent("指定发送", Const.FANGJIANSHEZHI))
backToRoom()
})
viewModel.roomInfo.observe(this){
if(!TextUtils.isEmpty(it.room_password)){
viewModel.roomInfo.observe(this) {
if (!TextUtils.isEmpty(it.room_password)) {
mDataBinding.etPass.setText(it.room_password)
}
@@ -189,27 +200,90 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
override fun initEvent() {
mDataBinding.llfjfcbl.setOnClickListener {
var intent=Intent(this,RoomShareRatioActivity::class.java)
intent.putExtra("rid",mEnterRoom.rid)
var intent = Intent(this, RoomShareRatioActivity::class.java)
intent.putExtra("rid", mEnterRoom.rid)
startActivity(intent)
}
mDataBinding.ivBaseBack2.setOnClickListener {
backToRoom()
}
mDataBinding.headImage.setOnClickListener {
showImgPop()
// showImgPop()
PictureSelector.create(this)
.openGallery(1)
.setImageEngine(TUIEngine())
.setSelectorUIStyle(PictureSelectorStyle())
.isGif(false)
.setMaxSelectNum(1)
.isPreviewImage(true)
.isDisplayCamera(true)
.isOriginalSkipCompress(true)
.forResult(REQUEST_CODE_SELECT) //结果回调onActivityResult code
}
mDataBinding.tvBaocun.setOnClickListener {
baocun()
}
mDataBinding.llYyt.setOnClickListener {
val intent = Intent(this, RoomSetTypeActivity::class.java)
intent.putExtra("rid",mEnterRoom.rid)
intent.putExtra("rid", mEnterRoom.rid)
startActivity(intent)
}
}
private fun baocun(){
class TUIEngine : ImageEngine {
override fun loadImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadImage(
context: Context?,
imageView: ImageView?,
url: String?,
maxWidth: Int,
maxHeight: Int
) {
if (imageView != null) {
Glide.with(context!!)
.load(url)
.apply(
RequestOptions()
.override(maxWidth, maxHeight)
.priority(Priority.HIGH)
.fitCenter()
)
.into(imageView)
}
}
override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
override fun pauseRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
override fun resumeRequests(context: Context) {
// GlideEngine中没有对应方法可以留空
}
fun clearMemory(context: Context) {
// 可以调用Glide的清理方法
Glide.get(context).clearMemory()
}
fun loadPreImage(context: Context, url: String, imageView: ImageView) {
GlideEngine.loadImage(imageView, url)
}
}
private fun baocun() {
val nickname = mDataBinding.edtLoginName.text.toString().trim()
if (TextUtils.isEmpty(nickname)) {
"房间名称不能为空".showToast()
@@ -238,7 +312,7 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
map["cate_id"] = roomType
map["room_cover"] = mEnterRoom.room_cover
map["room_background_id"] = room_background
if(!TextUtils.isEmpty(mDataBinding.etPass.text.toString().trim())){
if (!TextUtils.isEmpty(mDataBinding.etPass.text.toString().trim())) {
map["room_password"] = mDataBinding.etPass.text.toString().trim()
}
map["rid"] = mEnterRoom.rid
@@ -304,6 +378,7 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
REQUEST_CODE_SELECT
)
}
1 -> {
// 跳转到相册
// Always true pre-M
@@ -339,16 +414,40 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
return
}
val tempList: ArrayList<ImageItem>
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
// if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
// //添加图片返回
// if (requestCode == REQUEST_CODE_SELECT) {
// tempList =
// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>
// selImageList.clear()
// selImageList.addAll(tempList)
// if (selImageList.size > 0) {
// Glide.with(this).load(selImageList[0].path).into(head_image)
// }
// }
// }
if (resultCode == RESULT_OK && data != null) {
//添加图片返回
if (requestCode == REQUEST_CODE_SELECT) {
tempList =
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>
// 处理 PictureSelector 返回的结果
val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
// 清空原有选择
selImageList.clear()
selImageList.addAll(tempList)
// 将 LocalMedia 转换为 ImageItem
for (localMedia in localMediaList) {
val imageItem = ImageItem()
imageItem.path = localMedia.realPath // 或者使用 localMedia.compressPath
selImageList.add(imageItem)
}
if (selImageList.size > 0) {
Glide.with(this).load(selImageList[0].path).into(head_image)
}
}
}
}
@@ -364,4 +463,4 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
}
}
}

View File

@@ -16,7 +16,7 @@
<Tumblr Enable="false" />
<Email Enable="false" />
<ShortMessage Enable="false" />
<Wechat AppId="wx3858bffeddfb91b8" AppSecret="0b59b165268b63ba6446d1dc55a21f38" />
<Wechat AppId="wx7b5c4e89e726a72c" AppSecret="afc9860f4c670ac19f9efb0ab94927a3" />
<WechatMoments Enable="false" />
<QQ AppId="102046191" AppKey="dT8ZbR4TfdOuBF4e" />
<Instapaper Enable="false" />

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<Wechat AppId="wx3858bffeddfb91b8" AppSecret="0b59b165268b63ba6446d1dc55a21f38" />
<Wechat AppId="wx7b5c4e89e726a72c" AppSecret="afc9860f4c670ac19f9efb0ab94927a3" />
<QQ AppId="102046191" AppKey="dT8ZbR4TfdOuBF4e" />
</DevInfor>

View File

@@ -152,5 +152,16 @@ public class GlideEngine {
.apply(new RequestOptions().centerCrop().error(defaultResId))
.into(imageView);
}
private static GlideEngine instance;
public static GlideEngine createGlideEngine() {
if (null == instance) {
synchronized (GlideEngine.class) {
if (null == instance) {
instance = new GlideEngine();
}
}
}
return instance;
}
}