最近在做一个项目,需要分享本地视频到微信好友和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, "发送"));
    	}