写这篇文章主要目的是搜索到的答案都不是很完善,所以在此整理一下,防止有这需求的小伙伴们抓瞎 ;实现之前查了官方的文档,没有找到关于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);