第一次在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上分享,希望朋友们多多捧场,同时希望各位多多指教!