此篇主要讲解无法分享纯文本的问题,关于分享还有一些类似问题的话,可以来 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 :错误回调执行此方法!

Android11没有权限分享应用路径下的文件_List

注意(因为有少部分机型在使用此方法分享时可能会出现无法分享的问题,所以我 加了一个复制功能,这样即使跳转QQ后无法分享,也可以让用户直接粘贴)

//复制功能
 ClipboardManager cbm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
 cbm.setText(mVinCode.getText().toString().trim());

缺点:携带数据传递后,无法进行自动返回,需要用户手动返回我们当前的app~我感觉和产品好好交流一下是可以交工的,毕竟其他成本需要一定的时间嘛 > <