此篇主要讲解无法分享纯文本的问题,关于分享还有一些类似问题的话,可以来 Here 查看一番 ~
不知,你是否会和我遇到一样的问题,我只知道我用了半天才解决了这个问题,那么此时此刻请静下心来,细读此文,或许仅需-5分钟
就能轻松解决你的问题 ~
- 所遇问题
- 解决思路
所遇问题
2018年的时候,Umeng不支持QQ分享纯文本信息,会报出该平台不支持纯文本分享的错误
下面是网上过往遇到同问题的图文描述
问题出现时间 1:
2016年的Blog 告诉我们 “不能纯文本分享”问题出现时间 2
:2017年的Blog 告诉我们,依旧“不能纯文本分享”
解决思路
因为在集成分享之前,我的项目已经使用了Umeng的统计管理,抱着全家桶的心思,我尽可能的找了很多种方式去达到我的目的,所幸最后结果还凑乎~
方式 1:
首先我去了腾讯的开发者平台查看相关处理方式,但是客服久问无果,根据百度查的结果,发现是有的朋友使用的是导入Jar包的方式,也就是 使用官方的API分享内容到QQ
个人想法:
这样的固然可以实现我们分享的功能,但是相对而言所需成本提升,需要导入腾讯的三方jar包并进行另外配置
注意:
如果用的是Umeng三方自带的分享UI模板,那么你就需要在错误回调里进行判断,然后调用腾讯的QQ分享方法,因为它的UI模板你无法修改,只可增删某些分享渠道,所以务必记得前面说的错误回调里判断执行~
方式 2:
如果没有使用全家桶的习惯和限制,可以考虑换个三方平台集成分享的功能,例如极光,Mob也蛮不错的,何必一棵树上吊死?
方式 3(我目前项目中使用的此方法):
不想改变Umeng三方平台!也不想集成QQ本身的分享!那么我们就写一个弱化了一点点的功能,使用Android原生的api跳转QQ,同时进行数据携带!~
使用方式(方式3)
- 步骤1 :把此方法Copy到你当前类中!
/**
* @param mContext 上下文
* @param content 要分享的文本
* */
public static void shareQQ(Context mContext, String content) {
if (PlatformUtil.isQQClientAvailable(mContext)) {
Intent intent = new Intent("android.intent.action.SEND");
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
intent.putExtra(Intent.EXTRA_TEXT, content);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity"));
mContext.startActivity(intent);
} else {
Toast.makeText(mContext, "您需要安装QQ客户端", Toast.LENGTH_LONG).show();
}
}
PlatformUtil 工具类
package com.bakheet.garage.utils;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import java.util.List;
/**
* author yongliu
* date 2018/6/5.
* desc:
*/
public class PlatformUtil {
// 是否存在微信客户端
public static boolean isWeChatAvailable(Context context) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pInfo = packageManager.getInstalledPackages(0);
if (pInfo != null) {
for (int i = 0; i < pInfo.size(); i++) {
String pn = pInfo.get(i).packageName;
if (pn.equals("com.tencent.mm")) {
return true;
}
}
}
return false;
}
// 是否存在QQ客户端
public static boolean isQQClientAvailable(Context context) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mobileqq")) {
return true;
}
}
}
return false;
}
}
- 步骤2 :错误回调执行此方法!
注意(因为有少部分机型在使用此方法分享时可能会出现无法分享的问题,所以我 加了一个复制功能,这样即使跳转QQ后无法分享,也可以让用户直接粘贴)
//复制功能
ClipboardManager cbm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
cbm.setText(mVinCode.getText().toString().trim());
缺点:携带数据传递后,无法进行自动返回,需要用户手动返回我们当前的app~我感觉和产品好好交流一下是可以交工的,毕竟其他成本需要一定的时间嘛 > <