好不容易找到plus.share.sendWithSystem,却发现想分享一个文件,注意是文件,不仅仅是图片什么的,无法实现。 请教一下为什么要这样去设计接口。 还是得回头用Native.js,真是坑啊
tonyxiang (作者)
不是不支持,是把特殊的场景支持了,而通用的场景放弃了,接口设计有问题,Native.js只6行代码搞定:
var Intent=plus.android.importClass('android.content.Intent');
var sendIntent=new Intent(Intent.ACTION_SEND);
sendIntent.setType('/');
sendIntent.putExtra(Intent.EXTRA_STREAM, url);
var chooser=Intent.createChooser(sendIntent,'发送');
plus.android.runtimeMainActivity().startActivity(chooser);
2019-07-03 17:18
了了_
回复 tonyxiang: 你好,文件分享怎么实现,可否分享一下
2020-02-26 12:58
tonyxiang (作者)
回复 了了_:
最后面的send方法就是,已上线的使用的功能
import server from './server.js';
import cache from './cache.js';
import statuses from './statuses.js';
import ajax from './ajax.js';
export default {
//dtype,id,name
download:function(obj){
if(obj.length===0){
uni.showToast({
title:'文件是空的,无法下载!',
icon:'none'
});
return;
}
ajax({
url:server.getUrl('/files/permission'),
data:{
type:obj.dtype,
id:obj.id,
permission:'DOWNLOAD'
},
success:(res)=>{
//下载的地址
var url='/files/file?orgFile='+(obj.dtype=='OrgFile'?true:false)+'&ids='+obj.id;
//创建下载任务
var download=plus.downloader.createDownload(server.getUrl(url),{
//下载到下载目录
filename:'_downloads/'+obj.name,
//任务列表显示用的
data:{
fileName:obj.name,
time:new Date()
}
},(download, status)=>{
//下载完成如果状态不是200则要提示用户
if(status!=200){
var title=statuses[status];
if(!title){
title='下载失败,请重新下载';
}
uni.showToast({
title:title,
icon:'none'
});
}
});
//设置上令牌
download.setRequestHeader('tokenid',cache.get('_sessionId'));
download.setRequestHeader('user-agent-type',plus.os.name=='Android'?'2':'3');
//启动下载
download.start();
uni.showToast({
title:'已添加到后台下载,\n\n可至"我的"=>"文件传输"中查看',
icon:'none',
duration:3000
});
}
});
},
open:function(absolutePath){
plus.runtime.openFile(plus.io.convertAbsoluteFileSystem(absolutePath),{},(error)=>{
var msg='打开文件失败';
if(error.code==-4){
msg='未找到文件';
}else if(error.code==1){
msg='找不到可以打开此文件的应用';
}
uni.showToast({
title:msg,
icon:'none'
});
});
},
send:function(absolutePath){
plus.io.resolveLocalFileSystemURL(plus.io.convertAbsoluteFileSystem(absolutePath),()=>{
switch ( plus.os.name ) {
case "Android":
var Intent=plus.android.importClass('android.content.Intent');
var sendIntent=new Intent(Intent.ACTION_SEND);
var File=plus.android.importClass('java.io.File');
var FileProvider=plus.android.importClass('io.dcloud.common.util.DCloud_FileProvider');
var mainActivity=plus.android.runtimeMainActivity();
var fileUri=FileProvider.getUriForFile(
mainActivity,
//前面部分需要与应用的包名一致
mainActivity.getPackageName()+'.dc.fileprovider',
new File(absolutePath));
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
var type=plus.android.invoke(mainActivity.getContentResolver(),'getType',fileUri);
//微信必须要设置类型
sendIntent.setType(type);
sendIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
var chooser=Intent.createChooser(sendIntent,'发送');
mainActivity.startActivity(chooser);
break;
case "iOS":
//iOS以后还要优化
var NSArray = plus.ios.import("NSMutableArray");
var activityItems = NSArray.arrayWithCapacity(1);
var NSURL = plus.ios.import('NSURL');
activityItems.addObject(NSURL.fileURLWithPath(absolutePath));
var UIActivityViewController = plus.ios.importClass("UIActivityViewController");
var viewController = new UIActivityViewController();
plus.ios.invoke(viewController,'initWithActivityItems:applicationActivities:',activityItems,null);
var UIApplication = plus.ios.importClass("UIApplication");
var sharedApplication = UIApplication.sharedApplication();
var delegate = plus.ios.invoke(sharedApplication, "delegate");
var window = plus.ios.invoke(delegate, "window");
var rootViewController = plus.ios.invoke(window, "rootViewController");
plus.ios.invoke(rootViewController, "presentViewController:animated:completion:", viewController, "YES", null);
break;
default:
// 其它平台
break;
}
},()=>{
uni.showToast({
title:'未找到文件',
icon:'none'
});
});
}
}
2020-02-28 11:23
celevenc
回复 tonyxiang: ios 分享文件奔溃 如何解决?
2020-05-29 16:11
5***@qq.com
什么时候支持发送文件到微信哈
2021-12-01 11:40