标签:
官方网址:
微信开放平台
在这里我们只探讨移动应用开发~
当我们的客户端接入微信之后,可以:
开发前提:
登录 微信开放平台,注册开发者账号:
根据引导,完成注册即可。
使用注册的开发者账号登录后:
创建应用:
接下来就等着微信审核了,上传图标的时候,我用了微信的案例图标,不知道会不会审核不通过 o(╯□╰)o
果然被枪毙了….
换logo
百度上搞了个512×512的png图片,微信要求大图108*108像素 ,小图28*28像素
看动画~
同样的方式制作28*28像素的png图片
官方提供了签名工具,现在后安装到手机上,如下所示:
将你的APP安装到手机上, 接着输入你的包名(如果未安装 根据包名查找 无法生成应用签名)
工程目录:
包名需要保持一致,否则无法调用微信的API。
岁月静好 不到1个小时就审核通过了
那问题来了 怎么才能搞成正式版的呢?请看下图:
切记,之前我都是直接运行程序安装到手机,结果分享,一闪而过…..
生成APK后,安装到手机,再分享下,good ,233333333333….
下载解压后,我们可以看到
doc使用文档和lib包
你也可以顺便下载官方提供的范例代码以便快速上手。
第一种方式:
将lib包下的libammsdk.jar复制到你的AS工程lib目录下,如下所示:
然后在AS项目中引用即可,选中项目 F4快捷键打开Module设置(或者右键-Open Module Settings ),添加jar.
第二种方式:
compile files(‘libs/libammsdk.jar‘
截至到此,我们就可以在我们程序中使用微信SDK提供的API了。
如何使用API? 当然还是官方的指导文档了
请查看
根据说明文档:
<!--添加使用微信需要的权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我们分别就常用的几个功能做下演示
在这里我们需要使用我们之前申请的APP_ID
在 管理中心-移动应用-your APP -查看
这里我将APP_ID封装到了Constants类中。
很简单,代码中的注释已经很明白了
package com.turing.share;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
public class MainActivity extends AppCompatActivity {
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
}
/**
* 启动微信
*
* @param view
*/
public void launch_wx(View view) {
//api.openWXApp() 查看官方的API文档可知:true if launched
Toast.makeText(MainActivity.this, "launch result = " + api.openWXApp(), Toast.LENGTH_SHORT).show();
}
}
如果你已经登陆了,就会直接进入主页面了。我这里并没有登录~
TIP:记得使用release版本来测试 亲
核心代码:
/**
* 发送文本到微信
*
* @param view
*/
public void send_text(View view) {
// 初始化一个EditText
final EditText editText = new EditText(this);
// 组件的宽高是必须要指定的 LayoutParams包含了布局的信息
editText.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
// 设置文本
editText.setText(R.string.send_text_default);
// 初始化对话框
new AlertDialog.Builder(this)
.setIcon(R.drawable.flag_mark_blue)
.setTitle("小工匠")
.setMessage("小工匠的分享")
// 设置自定义布局
.setView(editText)
.setPositiveButton("分享", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("TAG", "分享");
String text = editText.getText().toString();
if (text == null || text.length() == 0) {
return;
}
// 初始化一个WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj.text = text;
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
// 发送文本类型的消息时,title字段不起作用
// msg.title = "Will be ignored";
msg.description = text;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
req.message = msg;
// 发送给朋友还是朋友圈
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
// 调用api接口发送数据到微信 成功返回true
api.sendReq(req);
finish();
}
})
.setNegativeButton("取消", null)
.create()
.show();
}
/**
* 发送图片的二进制数据
*/
private void sendBinaryImg() {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.girl);
WXImageObject imgObj = new WXImageObject(bmp);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
//压缩图片
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
// 释放图像bmp占用的资源
bmp.recycle();
// 将bitmap转化成二进制的数组
msg.thumbData = Util.bmpToByteArray(thumbBmp, true); // 设置缩略图
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
finish();
}
/**
* 注意 CompressFormat.JPEG ,因为我要传的图片是JPEG格式的。
* 如果是PNG格式的,需要写成CompressFormat.JPEG
* 否则无法分享成功
* @param bmp
* @param needRecycle
* @return
*/
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.JPEG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
注意事项:
需要格外注意compress方法中的参数。一定要对应你分享的图片的格式,否则无法完成分享
标签:
原文地址:http://blog.csdn.net/yangshangwei/article/details/51250939