分享到Ins是通过使用意图,调用起系统的分享,间接调用ins的分享入口
在调用分享分享时如果不使用setPackage("com.instagram.android"),就会把系统的可以分享的途径全部显示出来,想下面这样:
看着繁杂,无用的入口太多,我们只需要ins的入口,所以使用setPackage("com.instagram.android")
完整代码:
var isInstalled = checkAppInstalled(activity!!,"com.instagram.android")
if(isInstalled){
sharedToIns()
}else{
OToastProUtils.toastShort("未安装Ins")
}
/**
* 分享到Ins(本地图片)
*/
private fun sharedToIns() {
showProLoading()
val type = "image/*"
val uri =
Uri.parse("android.resource://" + context?.getPackageName() + "/" + R.mipmap.img_share_toins)
val share = Intent(Intent.ACTION_SEND)
share.type = type
share.putExtra(Intent.EXTRA_STREAM, uri)
// startActivity(Intent.createChooser(share, "Share to"))
share.putExtra(Intent.EXTRA_TITLE, "share oneHope")
share.setPackage("com.instagram.android")
startActivity(share)
dismissProLoading()
}
如果添加了setPackage("com.instagram.android")这句话,但是机器没有安装ins的话,应用会崩溃,所以在调用前还要判断下是否安装了ins
/**
* 根据包名判断是否安装app
* @param context 上下文
* @param pkgName 包名字符串
* @return 是否安装布尔值
*/
private fun checkAppInstalled(context :Context,pkgName :String): Boolean{
var isInstalled =false
if (pkgName== null || pkgName.isEmpty()) {
isInstalled =false
}
var packageInfo : PackageInfo? = null
try {
packageInfo = context.getPackageManager().getPackageInfo(pkgName, 0)
} catch (e : PackageManager.NameNotFoundException) {
e.printStackTrace()
}
if (packageInfo != null){
isInstalled =true
}
return isInstalled
}