修改上传图片逻辑

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

View File

@@ -9,39 +9,53 @@
</queries> <!-- 这个权限用于进行网络定位 --> </queries> <!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --> <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_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.ACCESS_NETWORK_STATE" /> <!-- 这个权限用于获取wifi的获取权限wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <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.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.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.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" /> <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.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 控制呼吸灯,振动器等,用于新消息提醒 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" /> <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.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.INTERNET" /> <!-- 网络通信 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取设备信息 --> <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.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.RECORD_AUDIO" /> <!-- 允许程序录制音频 -->
<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <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 <application
android:name="com.yuyin.lib_base.App" android:name="com.yuyin.lib_base.App"
android:allowBackup="true" android:allowBackup="true"
@@ -79,6 +93,8 @@
android:name="design_height_in_dp" android:name="design_height_in_dp"
android:value="812" /> android:value="812" />
<activity <activity
android:name="com.yuyin.mier.module_my.set.BindPhoneActivity" android:name="com.yuyin.mier.module_my.set.BindPhoneActivity"
android:exported="true" /> android:exported="true" />

View File

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

View File

@@ -2,50 +2,82 @@ package com.yuyin.mier.module_my.edituser
import android.Manifest import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.Settings
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import android.widget.ImageView
import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet import com.baoyz.actionsheet.ActionSheet
import com.baoyz.actionsheet.ActionSheet.ActionSheetListener import com.baoyz.actionsheet.ActionSheet.ActionSheetListener
import com.bigkoo.pickerview.builder.TimePickerBuilder import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.yuyin.lib_base.arouter.AroutUtil.MAIN_MY_USER_INFO import com.bumptech.glide.Priority
import com.yuyin.lib_base.base.BaseActivity import com.bumptech.glide.request.RequestOptions
import com.yuyin.lib_base.util.showToast 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.ImagePicker
import com.lzy.imagepicker.bean.ImageItem import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions import com.tbruyelle.rxpermissions2.RxPermissions
import com.tencent.imsdk.v2.V2TIMManager import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMUserFullInfo 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.base.UserManager
import com.yuyin.lib_base.model.Login import com.yuyin.lib_base.model.Login
import com.yuyin.lib_base.util.PermissionsChecker import com.yuyin.lib_base.util.PermissionsChecker
import com.yuyin.lib_base.util.showToast
import com.yuyin.mier.R import com.yuyin.mier.R
import com.yuyin.module_community.adapter.FBPicListAdapter import com.yuyin.module_community.adapter.FBPicListAdapter
import com.yuyin.module_community.adapter.FullyGridLayoutManager import com.yuyin.module_community.adapter.FullyGridLayoutManager
import com.yuyin.module_community.model.ImageItems import com.yuyin.module_community.model.ImageItems
import kotlinx.android.synthetic.main.activity_modify_data.birthday
import kotlinx.android.synthetic.main.activity_modify_data.* 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.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import org.litepal.LitePal import org.litepal.LitePal
import java.io.File import java.io.File
import java.lang.Exception
import java.text.SimpleDateFormat 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) @Route(path = MAIN_MY_USER_INFO)
class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() { class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
private var startDate: Calendar = Calendar.getInstance() private var startDate: Calendar = Calendar.getInstance()
private var endDate: Calendar = Calendar.getInstance() private var endDate: Calendar = Calendar.getInstance()
private var seleteDate: 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.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE) Manifest.permission.READ_EXTERNAL_STORAGE
)
//图片 //图片
val REQUEST_CODE_SELECT = 100 val REQUEST_CODE_SELECT = 100
val REQUEST_CODE_SELEC2 = 101 val REQUEST_CODE_SELEC2 = 101
@@ -138,6 +170,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
sexStr = "1" sexStr = "1"
sex.text = "" sex.text = ""
} }
1 -> { 1 -> {
sexStr = "2" sexStr = "2"
sex.text = "" sex.text = ""
@@ -167,7 +200,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
"爱好不能为空".showToast() "爱好不能为空".showToast()
return@setOnClickListener return@setOnClickListener
} }
// if (tempList.size == 0) {
if (selImageList.size == 0) { if (selImageList.size == 0) {
viewModel.editUserInfo( viewModel.editUserInfo(
imgString, imgString,
@@ -180,9 +213,23 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
} else { } else {
uploadFile(selImageList[0].path) uploadFile(selImageList[0].path)
} }
// }else{
// uploadFile(tempList[0].path)
// }
} }
head_image.setOnClickListener { 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 { birthday_btn.setOnClickListener {
val string = birthday.text.toString() val string = birthday.text.toString()
@@ -215,33 +262,61 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
} }
adapter.setOnItemClickListener { adapter2, view, position -> adapter.setOnItemClickListener { adapter2, view, position ->
var mPermissionsChecker= PermissionsChecker(this@ModifyDataActivity) // var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity)
if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) { // if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
ll_quanxian.visibility= View.VISIBLE // ll_quanxian.visibility = View.VISIBLE
}else{ // } else {
ll_quanxian.visibility= View.GONE // ll_quanxian.visibility = View.GONE
} // }
if (adapter.data[position].type == 2) { if (adapter.data[position].type == 2) {
var numss = 9 - (adapter.data.size - 1)
if (numss > 3) numss = 3 PictureSelector.create(this)
val rxPermissions = RxPermissions(this) .openGallery(1)
val finalNumss = numss .setImageEngine(TUIEngine())
rxPermissions .setSelectorUIStyle(PictureSelectorStyle())
.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) .isGif(false)
.subscribe { granted: Boolean -> .setMaxSelectNum(9)
if (granted) { // Always true pre-M .isPreviewImage(true)
// 跳转到相册 .isDisplayCamera(true)
ll_quanxian.visibility= View.GONE .isOriginalSkipCompress(true)
ImagePicker.getInstance().selectLimit = finalNumss .forResult(REQUEST_CODE_SELEC2) //结果回调onActivityResult code
ImagePicker.getInstance().isMultiMode = true
ImagePicker.getInstance().isCrop = false // var numss = 9 - (adapter.data.size - 1)
val intent = Intent(this, ImageGridActivity::class.java) // if (numss > 3) numss = 3
//显示选中的图片 // val rxPermissions = RxPermissions(this)
startActivityForResult(intent, REQUEST_CODE_SELEC2) // val finalNumss = numss
}else{ // rxPermissions
ll_quanxian.visibility= View.GONE // .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 -> adapter.setOnItemChildClickListener { adapter, view, position ->
@@ -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) { private fun uploadFile(pic: String) {
val parts = ArrayList<MultipartBody.Part>() val parts = ArrayList<MultipartBody.Part>()
val listPos: MutableList<Int> = ArrayList() 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)) { if (!TextUtils.isEmpty(pic)) {
val file2 = File(pic) val file2 = File(pic)
val requestFile2 = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file2) val requestFile2 = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file2)
@@ -278,6 +416,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
listPos.add(1) listPos.add(1)
} }
if (parts.size != 0) { if (parts.size != 0) {
viewModel.uploadImages(parts) viewModel.uploadImages(parts)
} }
} }
@@ -291,6 +430,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
.setListener(object : ActionSheetListener { .setListener(object : ActionSheetListener {
override fun onDismiss(actionSheet: ActionSheet, isCancel: Boolean) {} override fun onDismiss(actionSheet: ActionSheet, isCancel: Boolean) {}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun onOtherButtonClick(actionSheet: ActionSheet, index: Int) { override fun onOtherButtonClick(actionSheet: ActionSheet, index: Int) {
var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity) var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity)
@@ -304,7 +444,8 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
.request( .request(
Manifest.permission.CAMERA, Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_MEDIA_IMAGES
) )
.subscribe { granted: Boolean -> .subscribe { granted: Boolean ->
if (granted) { // Always true pre-M if (granted) { // Always true pre-M
@@ -326,6 +467,7 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
REQUEST_CODE_SELECT REQUEST_CODE_SELECT
) )
} }
1 -> { 1 -> {
// 跳转到相册 // 跳转到相册
// Always true pre-M // Always true pre-M
@@ -349,6 +491,17 @@ class ModifyDataActivity : BaseActivity<ModifyDataViewModel>() {
} else { } else {
ll_quanxian.visibility = View.GONE 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) { if (data == null) {
return return
} }
val tempList: ArrayList<ImageItem>? // val tempList: ArrayList<ImageItem>?
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { // 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) { if (requestCode == REQUEST_CODE_SELECT) {
tempList = // 处理 PictureSelector 返回的结果
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>? val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
if (tempList == null) {
return // 清空原有选择
}
selImageList.clear() 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) { if (selImageList.size > 0) {
Glide.with(this).load(selImageList[0].path).into(head_image) Glide.with(this).load(selImageList[0].path).into(head_image)
} }
} else if (requestCode == REQUEST_CODE_SELEC2) { } else if (requestCode == REQUEST_CODE_SELEC2) {
tempList = // 处理 ImagePicker 返回的结果
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>? val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
if (tempList == null) {
return // val tempList = data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>?
} // if (tempList == null) {
// return
// }
adapter.data.clear() adapter.data.clear()
for (i in tempList.indices) { // for (i in tempList.indices) {
imageListAll1.add(ImageItems(1, tempList[i])) // 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 imageListAll2 = imageListAll1

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,18 +1,28 @@
package com.yuyin.module_community.ui.fabu package com.yuyin.module_community.ui.fabu
import android.Manifest import android.Manifest
import android.content.Context
import android.content.Intent import android.content.Intent
import android.text.Editable import android.text.Editable
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
import android.view.View import android.view.View
import android.widget.ImageView
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet 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.ImagePicker
import com.lzy.imagepicker.bean.ImageItem import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions 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.App
import com.yuyin.lib_base.arouter.AroutUtil.COMMUNITY_FABU import com.yuyin.lib_base.arouter.AroutUtil.COMMUNITY_FABU
import com.yuyin.lib_base.base.BaseDataBindingActivity import com.yuyin.lib_base.base.BaseDataBindingActivity
@@ -61,33 +71,45 @@ class SocialReleaseActivity :
override fun initView() { override fun initView() {
adapter.setOnItemClickListener { adapter2, view, position -> adapter.setOnItemClickListener { adapter2, view, position ->
var mPermissionsChecker = PermissionsChecker(this@SocialReleaseActivity) // var mPermissionsChecker = PermissionsChecker(this@SocialReleaseActivity)
if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) { // if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) {
ll_quanxian.visibility = View.VISIBLE // ll_quanxian.visibility = View.VISIBLE
} else { // } else {
ll_quanxian.visibility = View.GONE // ll_quanxian.visibility = View.GONE
} // }
if (adapter.data[position].type == 2) { if (adapter.data[position].type == 2) {
var numss = 9 - (adapter.data.size - 1)
if (numss > 3) numss = 3 PictureSelector.create(this)
val rxPermissions = RxPermissions(this) .openGallery(1)
val finalNumss = numss .setImageEngine(TUIEngine())
rxPermissions .setSelectorUIStyle(PictureSelectorStyle())
.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) .isGif(false)
.subscribe { granted: Boolean -> .setMaxSelectNum(9)
if (granted) { // Always true pre-M .isPreviewImage(true)
// 跳转到相册 .isDisplayCamera(true)
ll_quanxian.visibility = View.GONE .isOriginalSkipCompress(true)
ImagePicker.getInstance().selectLimit = finalNumss .forResult(REQUEST_CODE_SELECT) //结果回调onActivityResult code
ImagePicker.getInstance().isMultiMode = true
ImagePicker.getInstance().isCrop = false // var numss = 9 - (adapter.data.size - 1)
val intent = Intent(this, ImageGridActivity::class.java) // if (numss > 3) numss = 3
//显示选中的图片 // val rxPermissions = RxPermissions(this)
startActivityForResult(intent, REQUEST_CODE_SELECT) // val finalNumss = numss
} else { // rxPermissions
ll_quanxian.visibility = View.GONE // .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 -> 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() { private fun uploadFile() {
val parts = java.util.ArrayList<MultipartBody.Part>() val parts = java.util.ArrayList<MultipartBody.Part>()
@@ -248,18 +322,41 @@ class SocialReleaseActivity :
if (data == null) { if (data == null) {
return return
} }
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { if (resultCode == RESULT_OK && data != null) {
//添加图片返回 //添加图片返回
if (requestCode == REQUEST_CODE_SELECT) { if (requestCode == REQUEST_CODE_SELECT) {
tempList.addAll(data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>) // tempList.addAll(data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem>)
imageSize = tempList.size // imageSize = tempList.size
if (tempList == null) { // if (tempList == null) {
return // return
} // }
adapter.data.clear() // 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 imageListAll2 = imageListAll1
@@ -268,6 +365,8 @@ class SocialReleaseActivity :
} }
adapter.setNewData(imageListAll2) adapter.setNewData(imageListAll2)
} }
} }
} }

View File

@@ -2,10 +2,12 @@ package com.yuyin.module_live.ui.roomset
import android.Manifest import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent import android.content.Intent
import android.text.TextUtils import android.text.TextUtils
import android.view.KeyEvent import android.view.KeyEvent
import android.view.View import android.view.View
import android.widget.ImageView
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@@ -13,14 +15,21 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.baoyz.actionsheet.ActionSheet import com.baoyz.actionsheet.ActionSheet
import com.bumptech.glide.Glide 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.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder import com.chad.library.adapter.base.BaseViewHolder
import com.kongzue.dialog.util.BaseDialog import com.kongzue.dialog.util.BaseDialog
import com.kongzue.dialog.v3.CustomDialog 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.ImagePicker
import com.lzy.imagepicker.bean.ImageItem import com.lzy.imagepicker.bean.ImageItem
import com.lzy.imagepicker.ui.ImageGridActivity import com.lzy.imagepicker.ui.ImageGridActivity
import com.tbruyelle.rxpermissions2.RxPermissions 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.Const
import com.yuyin.lib_base.arouter.AroutUtil.LIVE_LIVESETNEW import com.yuyin.lib_base.arouter.AroutUtil.LIVE_LIVESETNEW
import com.yuyin.lib_base.base.BaseDataBindingActivity import com.yuyin.lib_base.base.BaseDataBindingActivity
@@ -46,9 +55,11 @@ import kotlin.collections.set
@Route(path = LIVE_LIVESETNEW) @Route(path = LIVE_LIVESETNEW)
class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoomSettingNewBinding>() { class RoomSetNewActivity :
BaseDataBindingActivity<RoomSetViewModel, ActivityRoomSettingNewBinding>() {
private var roomImgyAdapter: RoomImgyAdapter? = null private var roomImgyAdapter: RoomImgyAdapter? = null
lateinit var mEnterRoom: EnterRoomInfo lateinit var mEnterRoom: EnterRoomInfo
// lateinit var categorRoomBeans: ArrayList<CategorRoomBean> // lateinit var categorRoomBeans: ArrayList<CategorRoomBean>
private var roomType = "" private var roomType = ""
@@ -197,7 +208,17 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
backToRoom() backToRoom()
} }
mDataBinding.headImage.setOnClickListener { 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 { mDataBinding.tvBaocun.setOnClickListener {
baocun() baocun()
@@ -209,6 +230,59 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
} }
} }
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() { private fun baocun() {
val nickname = mDataBinding.edtLoginName.text.toString().trim() val nickname = mDataBinding.edtLoginName.text.toString().trim()
if (TextUtils.isEmpty(nickname)) { if (TextUtils.isEmpty(nickname)) {
@@ -304,6 +378,7 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
REQUEST_CODE_SELECT REQUEST_CODE_SELECT
) )
} }
1 -> { 1 -> {
// 跳转到相册 // 跳转到相册
// Always true pre-M // Always true pre-M
@@ -339,16 +414,40 @@ class RoomSetNewActivity : BaseDataBindingActivity<RoomSetViewModel, ActivityRoo
return return
} }
val tempList: ArrayList<ImageItem> 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) { if (requestCode == REQUEST_CODE_SELECT) {
tempList = // 处理 PictureSelector 返回的结果
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList<ImageItem> val localMediaList: ArrayList<LocalMedia> = PictureSelector.obtainSelectorList(data)
// 清空原有选择
selImageList.clear() 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) { if (selImageList.size > 0) {
Glide.with(this).load(selImageList[0].path).into(head_image) Glide.with(this).load(selImageList[0].path).into(head_image)
} }
} }
} }
} }

View File

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

View File

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

View File

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