最近在做一个项目,需要分享本地视频到微信好友和QQ好友,这里总结一下分享本地视频的方法。
一、分享到微信
刚开始分享到微信时,没有自己申请appid,而是使用了之前一个项目的appid,并修改包名,改成之前那个项目的包名,但是调用微信失败了,具体原因不清楚,修改包名时底层JNI代码的包名是不可以修改的,当项目崩溃的时候显示的包名是之前未修改的包名,而不是修改之后的包名,为什么出现这种情况不太了解,感觉可能修改包名有一些地方没有修改到,所以没有办法调起微信。之后自己申请了一个APPID,根据微信官方文档进行了配置,就可以调起微信了。
调起微信的具体方法:
1、在项目中新添一个包为wxapi,里面新建一个Activity为WXEntryActivity(注意这里包名和类名都不能修改)。在WXEntryActivity中将appid注册进去。
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mIWXApi = WXAPIFactory.createWXAPI(this, APP_ID, false);
mIWXApi.registerApp(APP_ID);
mIWXApi.handleIntent(getIntent(), this);
Log.d("wxentryactivity","oncreate");
}
在onReq()和onResp()函数中处理发送请求和接受到回复之后的处理方式,onNewIntent()函数中处理微信的返回结果。
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//如果分享的时候,该已经开启,那么微信开始这个activity时,会调用onNewIntent,所以这里要处理微信的返回结果
setIntent(intent);
mIWXApi.handleIntent(intent, this);
Log.d("wxentryactivity","onnewintent");
}
2、在需要分享的activity页面中同样添加注册appid到微信的代码,然后添加点击事件,点击分享按钮产生分享面板,点击面板上面的微信图标分享本地视频到微信。
分享本地视频到微信的代码:
public void share2WX(){ Log.d("doInBackground", "doInBackground" + path);
WXFileObject textObject = new WXFileObject();
textObject.filePath = path;
textObject.fileData = null;
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObject;
msg.title = "a";
msg.description = "b";
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.scene = SendMessageToWX.Req.WXSceneSession;
req.message = msg;
MainActivity.mIWXApi.sendReq(req);
} 这里使用了WXFileObject,其中有两个参数,filePath和fileData,这二者只填一个就可以了,这里我们填写filePath,filePath为本地视频的本地路径,而fileData不赋值。 之前因为微信官方文档并未对此做出详细解释,就将本地视频的二进制数组赋值到fileData中,会报file binder exception这个错误,这个错误是说intent之间传递的数据太大。将fileData设为空就可以成功分享本地视频到微信好友了。二、分享本地视频到QQ 分享本地视频到QQ和分享图片到QQ的解决方式是不一样的,分享图片到QQ需要注册项目,获得一个APPID,这里分享本地视频到QQ不需要注册APPID,采用反射的方式实现。
public void share2QQ(){
Intent share = new Intent(Intent.ACTION_SEND);
ComponentName component = new ComponentName("com.tencent.mobileqq","com.tencent.mobileqq.activity.JumpActivity");
share.setComponent(component);
File file = new File(path);
System.out.println("file " + file.exists());
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
share.setType("*/*");
activity.startActivity(Intent.createChooser(share, "发送"));
}