微信插件开发手记-聊天界面传送任意类型文件

第一次在CSDN上面献丑,望各路大神多多批评指正,感激不尽!

为了查看方便,现将关键词列举如下,要查看某个部分直接Ctrl+F,查找相应关键词就跳过去了。

【目的】 【微信审核】 【搭建项目】 


项目完整源码请见:https://github.com/XiaoWenHan/Anytransforwechat


【目的】:

好,这是整篇文章唯一一个看似废话的部分,毕竟它才是整个项目得以完成并分享的源动力。最初的想法是由于目前微信移动客户端无法给好友发送文件,除了图片、语音、视频。当然,询问了很多人之后答案是Web版可以,可是每次传文件都要去Web客户端也太麻烦了一些,于是萌发了要做一个文件传送的微信插件的想法,暂定为《微信随心传 1.0 Beta》。功能很明确,就是向好友分享文件,其他的功能就没有了。虽然功能很单一,但希望它能为更多的人提供方便


【微信审核】

这个是前提,只有通过审核,才能得到APP_ID;只有得到APP_ID,才能进行开发,才能在微信的附件栏里成功调用这个应用。具体方法如下:

1、登录微信开放平台:https://open.weixin.qq.com/,注册开发者帐号

2、创建一个项目,使用微信开放平台提供的签名生成工具,生成此项目的签名信息(就是Debug Key);

3、在移动应用板块,按照网页上的向导创建移动应用,填上相关信息,等待审核通过(这个过程不会太慢,差不多第三天就会通过,运气好的话几个小时而已);

一旦通过审核,会有通知,在管理中心的已通过审核部分,会看到我们创建好的应用信息,我们可以通过查看详情找到开发所需的APP_ID


【搭建项目】

从这个部分开始,就是真正编码的过程了。

1、首先从官方提供的SDK Demo项目中找到libammsdk.jar,复制到我们的项目lib文件夹中,这个Jar包是实现所有功能的核心。

2、修改AndroidManifest.xml文件,添加一个Activity。路径固定为包名后跟".wxapi.WXEntryActivity"。具体代码块如下:

<activity
            android:name=".wxapi.WXEntryActivity"
            android:exported="true"
</activity>
上述两个Activity属性固定, 不要做任何改变。但不妨碍继续添加属性,比如加一个"android:label="@string/app_name"",是没有关系的;

3、创建第2步中被添加的Activity,该Activity必须实现IWXAPIEventHandler。这时,该类会提示我们要去Override onReq()和onResp()方法,这里我们主要是重写onReq()方法即可;

4、声明一个全局的IWXAPI对象的变量,在onCreate方法中进行初始化。代码块如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	iwxapi = WXAPIFactory.createWXAPI(WXEntryActivity.this,MainActivity.APP_ID);
	iwxapi.handleIntent(getIntent(), this);
}
注意:iwxapi为已声明但尚未初始化的变量;

5、在onReq回调方法里,根据微信不同的响应类型分别做操作。类型我们可以通过req.getType()得到,具体代码块如下:

@Override
public void onReq(BaseReq req) {
	switch (req.getType()) {
	case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
		// 选取文件发送
	case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
		// 打开文件
        }
}
根据注释信息在相应的位置进行相应的操作即可;

6、获取到文件路径后,使用下面的方法,即可发送指定的文件

WXAppExtendObject wxAppExtendObject = new WXAppExtendObject();
wxAppExtendObject.filePath = sendFile.getPath();
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = wxAppExtendObject;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = getTransaction();
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
iwxapi.sendReq(req);

注:sendFile是File类型的变量,是要发送的文件;

7、找到接收到的文件的路径的方法见此:

WXAppExtendObject wxAppExtendObject = (WXAppExtendObject) ((((ShowMessageFromWX.Req) req).message.mediaObject));
String filePath = wxAppExtendObject.filePath;
到此,获取到文件路径,可以通过该路径进行自定义的操作了。特别注意,这里的文件路径 通常是微信的缓存路径,因此基本上无需考虑文件重名问题了。


第一次在CSDN上分享,希望朋友们多多捧场,同时希望各位多多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧文翰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值