android分享工具类,Android系统图片分享工具类

简介

记录一个利用系统分享功能进行图片分享的工具类(代码是用Kotlin写的,都是比较简单的语法,部分可能需要自定义的地方都已经标出)。调用方式比较简单:

Util.startShareImage(this) //this为当前的Activity实例

权限

记得添加文件操作权限, 另外需要注意6.0版本以上的权限管理

具体细节见代码

/**

* 系统分享图片功能

* Created by wiky on 2018/1/13.

*/

object Util {

fun startShareImage(activity: Activity) {

//过滤出需要分享到对应的平台:微信好友、朋友圈、QQ好友。 可自行修改

val targetApp = arrayOf("com.tencent.mm.ui.tools.ShareImgUI", "com.tencent.mm.ui.tools.ShareToTimeLineUI", "com.tencent.mobileqq.activity.JumpActivity")

/** * 分享图片 */

val bitmap = getImageFromAssetsFile(activity, "img_share.jpg") //从assets目录中取到对应的文件,文件名自行修改

val localImage = saveBitmap(bitmap!!, "share.jpg") //分享前,需要先将图片存在本地(记得添加权限),文件名自行修改

val shareIntent = Intent(Intent.ACTION_SEND)

shareIntent.type = "image/*" //设置分享内容的类型:图片

shareIntent.putExtra(Intent.EXTRA_STREAM, localImage)

try {

val resInfo = activity.packageManager.queryIntentActivities(shareIntent, 0)

if (!resInfo.isEmpty()) {

val targetedShareIntents = ArrayList()

for (info in resInfo) {

val targeted = Intent(Intent.ACTION_SEND)

targeted.type = "image/*" //设置分享内容的类型

val activityInfo = info.activityInfo

//如果还需要分享至其它平台,可以打印出具体信息,然后找到对应的Activity名称,填入上面的数组中即可

// println("package = ${activityInfo.packageName}, activity = ${activityInfo.name}")

//进行过滤(只显示需要分享的平台)

if (targetApp.any { it == activityInfo.name }) {

val comp = ComponentName(activityInfo.packageName, activityInfo.name)

targeted.component = comp

targeted.putExtra(Intent.EXTRA_STREAM, localImage)

targetedShareIntents.add(targeted)

}

}

val chooserIntent = Intent.createChooser(targetedShareIntents.removeAt(0), "选择要分享到的平台")

if (chooserIntent != null) {

chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toTypedArray())

activity.startActivity(chooserIntent)

}

}

} catch (e: Exception) {

Log.e(StatConstants.LOG_TAG, "Unable to share image, logs : " + e.toString())

}

}

/** * 从Assets中读取图片 */

private fun getImageFromAssetsFile(context: Context, fileName: String): Bitmap? {

var image: Bitmap? = null

val am = context.resources.assets

try {

val inputStream = am.open(fileName)

image = BitmapFactory.decodeStream(inputStream)

inputStream.close()

} catch (e: IOException) {

e.printStackTrace()

}

return image

}

/** * 将图片存到本地 */

private fun saveBitmap(bm: Bitmap, picName: String): Uri? {

try {

val dir = Environment.getExternalStorageDirectory().absolutePath + File.separator + picName

val f = File(dir)

if (!f.exists()) {

f.parentFile.mkdirs()

f.createNewFile()

}

val out = FileOutputStream(f)

bm.compress(Bitmap.CompressFormat.JPEG, 90, out)

out.flush()

out.close()

return Uri.fromFile(f)

} catch (e: FileNotFoundException) {

e.printStackTrace()

} catch (e: IOException) {

e.printStackTrace()

}

return null

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值