在APP中集成微信的分享功能,官方的说明是在太简洁了.....几乎没法用....
不过一开始按照官方文档去做没问题
1.注册你的APP
登录 微信开放平台 把你的开发者信息填上,这些就不上图了,都是中文字,应该看得懂
然后进入 管理中心 点击创建++移动应用++
把你的应用信息填上,有些项目不知道怎么填随便填就行了,但是注意: 应用的包名和签名不能随便填!!
- 包名就是你的应用的包名例如: fucker.idiot.asshole.wanker
怎么获取签名?
先下载微信提供的一些工具
首先将你的app安装在手机或者模拟器上,
由于平时我们调试软件都是使用debug的签名生成应用,所以我们要特别注意如果使用了debug的签名,等到APP正式发布的时候,微信的分享就不能用了.
所以我们要使用release的签名文件
怎么让我们debug的时候也使用release的签名文件呢?
打开应用Module的build.gradle文件 添加这样一份代码:
android {
signingConfigs{
debug{ <span class="hljs-comment">//这里配置的就是debug的签名配置了</span>
storeFile file(<span class="hljs-string">"C:<span class="hljs-subst">\\</span>Users<span class="hljs-subst">\\</span>Administrator<span class="hljs-subst">\\</span>.android<span class="hljs-subst">\\</span>asd"</span>) <span class="hljs-comment">//这个文件是我的,改成你自己的release签名文件</span>
storePassword <span class="hljs-string">"asd123456"</span> <span class="hljs-comment">//密码改成自己的</span>
keyAlias <span class="hljs-string">"asd"</span> <span class="hljs-comment">//再改成你自己的</span>
keyPassword <span class="hljs-string">"asd123456"</span> <span class="hljs-comment">//再改成你自己的</span>
}
}
}
再使用工具包中的软件便可以获取到应用的签名了,
填上应用的包名,然后"Get Signature"
绿色的字就是签名
最后等待审核,可能要一两天把...
通过审核是这样的
当然要把 AppID 和 AppSecret 记录下来,在代码中需要使用
++注意如果临时改变了签名或者包名,当时还不能生效(也就是你APP用不了微信的功能了),可能得等个一天才能生效!!!!血的教训!!++
2.添加依赖包
之前下载获取签名工具的时候就已经下载下来了
放入AS项目的libs文件夹中
添加依赖
3.向微信sdk注册你的应用
在我自己写的学习demo中,注册是在一个单例模式的类中注册的,只有在第一次使用的时候才会注册,免得提早注册了浪费资源
当然你也可以在application或者activity的oncrete中注册,随你!
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">String</span> APP_ID = <span class="hljs-string">"12312313212313213213"</span>; <span class="hljs-comment">//这个APP_ID就是注册APP的时候生成的</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">String</span> APP_SECRET = <span class="hljs-string">"12312312313212313213213"</span>;
<span class="hljs-keyword">public</span> IWXAPI api; <span class="hljs-comment">//这个对象是专门用来向微信发送数据的一个重要接口,使用强引用持有,所有的信息发送都是基于这个对象的</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> registerWeChat(Context context) { <span class="hljs-comment">//向微信注册app</span>
api = WXAPIFactory.createWXAPI(context, APP_ID, <span class="hljs-keyword">true</span>);
api.registerApp(APP_ID);
}
4.发送图片或文字,给朋友或者朋友圈
因为发文字,图片,或者链接都是类同的程序,所以在这只举一个发送图片的例子
<span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> sharePicByFile(File picFile, <span class="hljs-built_in">String</span> <span class="hljs-built_in">tag</span>) {
<span class="hljs-keyword">if</span> (!picFile.exists()) {<span class="hljs-keyword">return</span>;}
Bitmap pic = BitmapFactory.decodeFile(picFile.toString());
WXImageObject imageObject = <span class="hljs-literal">new</span> WXImageObject(pic);
<span class="hljs-comment">//这个构造方法中自动把传入的bitmap转化为2进制数据,或者你直接传入byte[]也行</span>
<span class="hljs-comment">//注意传入的数据不能大于10M,开发文档上写的</span>
WXMediaMessage msg = <span class="hljs-literal">new</span> WXMediaMessage(); <span class="hljs-comment">//这个对象是用来包裹发送信息的对象</span>
msg.mediaObject = imageObject;
<span class="hljs-comment">//msg.mediaObject实际上是个IMediaObject对象,</span>
<span class="hljs-comment">//它有很多实现类,每一种实现类对应一种发送的信息,</span>
<span class="hljs-comment">//比如WXTextObject对应发送的信息是文字,想要发送文字直接传入WXTextObject对象就行</span>
Bitmap thumbBitmap = Bitmap.createScaledBitmap(pic, <span class="hljs-number">150</span>, <span class="hljs-number">150</span>, <span class="hljs-literal">true</span>);
msg.thumbData = bitmap2ByteArray(thumbBitmap);
<span class="hljs-comment">//在这设置缩略图</span>
<span class="hljs-comment">//官方文档介绍这个bitmap不能超过32kb</span>
<span class="hljs-comment">//如果一个像素是8bit的话换算成正方形的bitmap则边长不超过181像素,边长设置成150是比较保险的</span>
<span class="hljs-comment">//或者使用msg.setThumbImage(thumbBitmap);省去自己转换二进制数据的过程</span>
<span class="hljs-comment">//如果超过32kb则抛异常</span>
SendMessageToWX.Req req = <span class="hljs-literal">new</span> SendMessageToWX.Req(); <span class="hljs-comment">//创建一个请求对象</span>
req.message = msg; <span class="hljs-comment">//把msg放入请求对象中</span>
req.scene = SendMessageToWX.Req.WXSceneTimeline; <span class="hljs-comment">//设置发送到朋友圈</span>
<span class="hljs-comment">//req.scene = SendMessageToWX.Req.WXSceneSession; //设置发送给朋友</span>
req.transaction = <span class="hljs-built_in">tag</span>; <span class="hljs-comment">//这个tag要唯一,用于在回调中分辨是哪个分享请求</span>
<span class="hljs-built_in">boolean</span> b = api.sendReq(req); <span class="hljs-comment">//如果调用成功微信,会返回true</span>
}
调用这个方法之后会自动打开微信的界面,可以发送你要分享的信息了!
5.分享后的回调
微信只能回调指定包下的指定Activity!!!
所以一定要按照我下面的例子来写
(1)创建包
在注册的包名下面创建一个叫"wxapi"的包
<span class="hljs-selector-tag">package</span> <span class="hljs-selector-tag">com</span><span class="hljs-selector-class">.zhouyijin</span><span class="hljs-selector-class">.zyj</span><span class="hljs-selector-class">.fakeshanbay</span><span class="hljs-selector-class">.wxapi</span>;
(2)创建指定名字的Activity
创建一个Acitivty,必须是这个名字!#### (3)
public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">WXEntryActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AppCompatActivity</span> </span>{}
并在manifest文件中注册!!!
<activity <span class="hljs-string">android:</span>name=<span class="hljs-string">".wxapi.WXEntryActivity"</span>
<span class="hljs-symbol"> android:</span>launchMode=<span class="hljs-string">"singleTop"</span>
<span class="hljs-symbol"> android:</span>exported=<span class="hljs-string">"true"</span><span class="hljs-regexp">/> /</span>/注意这个属性一定是<span class="hljs-literal">true</span>,不然微信不能调用
(3)处理回调
微信会把数据包装在Intent中传入这个"WXEntryActivity"中
我们不需要自己处理Intent,
只需要在这个activity中调用api.handleIntent(Intent intent, IWXAPIEventHandler i),
这个方法会自动调用 IWXAPIEventHandler 对象的 onResp(BaseResp resp) 方法
我们只需要把处理回调的逻辑写进onResp(BaseResp resp) 方法中即可!
为了方便,我们使WXEntryActivity实现IWXAPIEventHandler的方法
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">WXEntryActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AppCompatActivity</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">IWXAPIEventHandler</span> {</span>
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onCreate(Bundle savedInstanceState) {
<span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
setContentView(R.layout.entry);
WeChatModule.getInstance().api.handleIntent(getIntent(), <span class="hljs-keyword">this</span>); <span class="hljs-comment">//处理微信传回的Intent,当然你也可以在别的地方处理</span>
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onResp(BaseResp resp) { <span class="hljs-comment">//在这个方法中处理微信传回的数据</span>
<span class="hljs-comment">//形参resp 有下面两个个属性比较重要</span>
<span class="hljs-comment">//1.resp.errCode</span>
<span class="hljs-comment">//2.resp.transaction则是在分享数据的时候手动指定的字符创,用来分辨是那次分享(参照4.中req.transaction)</span>
<span class="hljs-keyword">switch</span> (resp.errCode) { <span class="hljs-comment">//根据需要的情况进行处理</span>
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_OK:</span>
<span class="hljs-comment">//正确返回</span>
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_USER_CANCEL:</span>
<span class="hljs-comment">//用户取消</span>
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_AUTH_DENIED:</span>
<span class="hljs-comment">//认证被否决</span>
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_SENT_FAILED:</span>
<span class="hljs-comment">//发送失败</span>
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_UNSUPPORT:</span>
/不支持错误
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> BaseResp.ErrCode.<span class="hljs-string">ERR_COMM:</span>
<span class="hljs-comment">//一般错误</span>
<span class="hljs-keyword">break</span>;
<span class="hljs-symbol"> default:</span>
<span class="hljs-comment">//其他不可名状的情况</span>
<span class="hljs-keyword">break</span>;
}
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onReq(BaseReq req) {
<span class="hljs-comment">//......这里是用来处理接收的请求,暂不做讨论</span>
}
}
这里需要提醒下,因为微信只能回调这个Activity,如果不想把业务逻辑写在这个Activity中,那么可以把具体逻辑再转移到别的Activity中处理,如下:
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">onResp</span><span class="hljs-params">(BaseResp resp)</span> </span>{
Intent intent = <span class="hljs-keyword">new</span> Intent(<span class="hljs-keyword">this</span>, xxx.class);
intent.putExtra(<span class="hljs-string">"errCode"</span>, resp.errCode);
intent.putExtra(<span class="hljs-string">"errStr"</span>, resp.transaction);
startActivity(intent);
finish();
}
我宝贵的半天时间就浪费在这了,看过给个赞好吗
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · 记录untiy适配android12
- · 【Unity】SQLite发布到Android
- · unity3D导出模块给android使用
- · XPosed模块开发:XPosed入门与登陆劫持演示
- · Android studio 运行模拟器出现dev/kvm is not found问题
- · android拍照功能之权限和Android版本问题
- · 解决android 安卓中横屏、竖屏切换 应用崩溃问题
- · 解决searchview自动获取焦点问题
- · 解决listView中textview超链接导致listitem点击事件失效问题
- · Android中LinearLayout的点击事件如何包含内部的子控件?
- · 关于Fragment 不响应onActivityResult的情况分析
- · setVisibility无效