本讲内容:微信开发平台(一)
一、注册开发帐号并申请一个开发APP(申请中填写的包名必须和程序包名一样) https://open.weixin.qq.com/
参考文章:http://blog.youkuaiyun.com/icyfox_bupt/article/details/23742217
示例一:分享文本(要导入微信jar包)
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick_Start_Weixin"
android:text="启动微信"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick_Send_Text"
android:text="发送文本"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送二进制图像"
android:onClick="onClick_Send_Binary_image" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送本地图像"
android:onClick="onClick_Send_Local_Image" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送Url图像"
android:onClick="onClick_Send_Url_Image" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送Url音频"
android:onClick="onClick_Send_Url_Audio"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送Url视频"
android:onClick="onClick_Send_Url_Video" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送URL"
android:onClick="onClick_Send_Url" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送表情"
android:onClick="onClick_Send_Emotion" />
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {
//应用程序的ID
public static final String APP_ID="wxf3268a18cc7d13f8";
//初始化
private IWXAPI api;
private CheckBox mshareFriends;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
api = WXAPIFactory.createWXAPI(this,APP_ID,false);
//将APP_ID注册到微信中
api.registerApp(APP_ID);
mshareFriends = (CheckBox) findViewById(R.id.checkBox1);
}
//启动微信客户端
public void onClick_Start_Weixin(View view){
//打开了就返回true
Toast.makeText(MainActivity.this, String.valueOf(api.openWXApp()), Toast.LENGTH_SHORT).show();
}
//为请求生成一个唯一的标识
private String buildTransaction(final String type){
return (type==null)?String.valueOf(System.currentTimeMillis()):type + String.valueOf(System.currentTimeMillis());
}
//向好友或朋友圈发送文本(要将APP_ID注册到微信中才可以使用)
public void onClick_Send_Text(View view){
//创建EditText控件,用于输入文本
final EditText editor = new EditText(this);
editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
editor.setText("默认的分享文本");
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle("共享文本");
//将EditText控件与对话框绑定
builder.setView(editor);
builder.setMessage("请输入分享的文本");
builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//获取待分享的文本
String text = editor.getText().toString();
if (text == null || text.length() == 0) {
return;
}
//第一步:创建一个用于封装待分享文本的WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj.text = text;
//第二步:创建WXMediaMessage对象,该对象用于Android客户端向微信发送数据
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
msg.description = text;
//第三步:创建一个用于请求微信客户端的SendMessageToWX.Req对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.message = msg;
//设置请求的唯一标识
req.transaction = buildTransaction("text");
//表示发送给朋友,还是朋友圈
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
//第四步:发送给微信客户端
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton("取消",null);
final AlertDialog alert = builder.create();
alert.show();
}
//将bitmap转换成byte格式的数组
public byte[] bmpToByteArray(final Bitmap bitmap, final boolean needRecycle){
ByteArrayOutputStream output =new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
if(needRecycle){
bitmap.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//发送二进制图像
public void onClick_Send_Binary_image(View view){
//第一步:获取二进制图像的Bitmap对象
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.window);
//第二步:创建WXImageObject对象,并包装bitmap
WXImageObject imgObj =new WXImageObject(bitmap);
//第三步:创建WXMediaMessage对象,并包装WXImageObject对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
//第四步:压缩图像(注意图片太大会返回false)
Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 80, 120, true);
//释放图像所占用的内存资源
bitmap.recycle();
msg.thumbData = bmpToByteArray(thumbBmp, true);//设置缩略图
//第五步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("img");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
finish();
}
//发送本地图像
public void onClick_Send_Local_Image(View view){
//第一步:判断图像文件是否存在
String path = "/sdcard/window.png";
File file=new File(path);
if(!file.exists()){
Toast.makeText(MainActivity.this, "图片不存在", Toast.LENGTH_LONG).show();
return;
}
//第二步:创建WXImageObject对象,并设置path
WXImageObject imgObj =new WXImageObject();
//设置图像文件路径
imgObj.setImagePath(path);
//第三步:创建WXMediaMessage对象,并包装WXImageObject对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
//第四步:压缩图像(注意图片太大会返回false)
// Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/window.png");
// Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 60, 60, true);//不知为什么这里出错了,知道的朋友可以说下
//
// //释放图像所占用的内存资源
// bitmap.recycle();
// msg.thumbData = bmpToByteArray(thumbBmp, true);//设置缩略图
//第五步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("img");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
}
//发送Url图像
public void onClick_Send_Url_Image(View view){
Thread thread=new Thread(new Runnable() {
public void run() {
try {
//第一步:创建WXImageObject对象,并设置url
String url="https://img-my.youkuaiyun.com/uploads/201309/01/1378037235_3453.jpg";
WXImageObject imgObj =new WXImageObject();
//设置图像的Url
imgObj.imageUrl=url;
//第二步:创建WXMediaMessage对象,并包装WXImageObject对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
//第三步:压缩图像(注意图片太大会返回false)
Bitmap bitmap=BitmapFactory.decodeStream(new URL(url).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 80, 120, true);
//释放图像所占用的内存资源
bitmap.recycle();
msg.thumbData = bmpToByteArray(thumbBmp, true);//设置缩略图
//第四步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("img");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
//发送url形式的音频
public void onClick_Send_Url_Audio(View view){
//第一步:创建WXImageObject对象,并设置url
WXMusicObject music=new WXMusicObject();
music.musicUrl="http://play.baidu.com/?__m=mboxCtrl.playSong&__a=256019864&__o=/||netsongIcon#";
//第二步:创建WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject=music;
msg.title="明天";
msg.description="演唱:韩磊";
//第三步:设置缩略图
Bitmap thumb=BitmapFactory.decodeResource(getResources(), R.drawable.window);
msg.thumbData=bmpToByteArray(thumb, true);
//第四步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("music");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
}
//发送url形式的视频
public void onClick_Send_Url_Video(View view){
//第一步:创建WXImageObject对象,并设置url
WXVideoObject video=new WXVideoObject();
video.videoUrl="http://v.youku.com/v_show/id_XnTuxNDYINDY4.html";
//第二步:创建WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject=video;
msg.title="乔布斯访谈";
msg.description="看看乔帮主说了什么";
//第三步:设置缩略图
Bitmap thumb=BitmapFactory.decodeResource(getResources(), R.drawable.window);
msg.thumbData = bmpToByteArray(thumb, true);
//第四步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("music");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
}
//发送URL
public void onClick_Send_Url(View view){
//第一步:创建WXWebPageObject对象,并设置url
WXWebpageObject webpage=new WXWebpageObject();
webpage.webpageUrl="http://www.imooc.com/souse/List";
//第二步:创建一个WXMediaMessage对象
WXMediaMessage msg=new WXMediaMessage(webpage);
msg.title="幕课网";
msg.description="教学视频的";
//第三步:设置缩略图
Bitmap thumb=BitmapFactory.decodeResource(getResources(), R.drawable.window);
msg.thumbData = bmpToByteArray(thumb, true);
//第四步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("webpage");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
finish();
}
public void onClick_Send_Emotion(View view){
//第一步:创建WXWebPageObject对象,用于封装表情文件的路径
String EMOJI_FILE_PATH="/sdcard/emotion.gif";
WXEmojiObject emoji=new WXEmojiObject();
emoji.emojiPath=EMOJI_FILE_PATH;
//第二步:创建一个WXMediaMessage对象
WXMediaMessage msg=new WXMediaMessage(emoji);
msg.title="表情标题";
msg.description="表情描述";
//第三步:设置缩略图
Bitmap thumb=BitmapFactory.decodeResource(getResources(), R.drawable.window);
msg.thumbData = bmpToByteArray(thumb, true);
//第四步:创建SendMessageTo.Req对象,用于发送数据
SendMessageToWX.Req req=new SendMessageToWX.Req();
req.transaction=buildTransaction("emotion");
req.message=msg;
req.scene = mshareFriends.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();
finish();
}
}
<uses-permission android:name="android.permission.INTERNET"/>