Android 分享到Line的两种方式

写这篇文章主要目的是搜索到的答案都不是很完善,所以在此整理一下,防止有这需求的小伙伴们抓瞎 ;实现之前查了官方的文档,没有找到关于sdk支持分享的地方,只是提供了scheme支持(而且很难找..)

通过官方的scheme分享

参考链接:https://developers.line.biz/en/reference/messaging-api/#text-message

分享文本:

line://msg/text/xxxxx ;“xxxxx”部分即要分享的文本,文本支持Unicode 表情以及line自定的表情,限制2000字符

    public void shareTextToLine(String content){
        String scheme = "line://msg/text/"+content;
        Uri uri = Uri.parse(scheme);
        startActivity(new Intent(Intent.ACTION_VIEW,uri));
    }

分享图片:

**line://msg/image/{localFilePath}; **{localFilePath}部分就是图片文件的文件地址,需要是绝对路径

Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap,

        null, null));

String scheme ="line://msg/image"+getFilePath(uri);

context.startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(scheme)));

利用Android系统Intent分享

参考链接:https://blog.csdn.net/qq_29967217/article/details/51598011

这里两个坑,一个是如果只是限定package,会通知唤起 “Line” 以及 “Line Keep” 需要用户二次选择,很讨厌,所以需要通过ComponentName指定activity;指定activity这里还有个坑,Line8.0以下版本处理分享的Activity不是同一个所以需要根据版本号做个判断(个人觉得低版本不适配关系不大 )

版本判断相关:

        boolean isOlderVersion = false;
         try {
            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(Channel.PACKAGE_LINE, 0);
            if (packageInfo != null) {
                String[] arrays = packageInfo.versionName.split("\\.");
                if (arrays.length > 0) {
                    isOlderVersion = Integer.parseInt(arrays[0]) < 8;
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (isOlderVersion) {
            componentName = new ComponentName(packageName, "jp.naver.line.android.activity.selectchat.SelectChatActivity");
        } else {
            componentName = new ComponentName(packageName, "jp.naver.line.android.activity.selectchat.SelectChatActivityLaunchActivity");
        }

分享示例(这里只放个分享图片的 )

        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("image/*");
        Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, null, null));
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shareIntent.setComponent(componentName);
        if (shareIntent.resolveActivity(BaseApplication.getInstance().getPackageManager()) == null) {
            return;
        }
        context.startActivity(shareIntent);

你可能感兴趣的:(Android 分享到Line的两种方式)