您的位置:首页 > 移动开发 > 微信开发

Android 微信分享

2015-11-30 23:32 756 查看
Android微信分享
准备工作

微信示例程序

使用微信SDK部署自己的第三方应用
调不出分享界面
解决办法

分享图片没有响应
具体表现

解决办法

附录
MainActivityjava

activity_mainxml

Android微信分享

通过使用微信SDK,在第三方应用中加入分享到朋友圈功能(图片、文字)。

准备工作

注册成为微信开放平台的开发者,申请自己的应用需要以下几点:

应用名

包名

应用图标(两种分辨率)

应用网站

总体来说,注册过程比较麻烦,还需要审核什么的。

最终获取
AppId
AppSecret
,这两个东西非常重要,不过暂时对我们来说用不着。

微信示例程序

事实上这就是微信开放平台官网给的第三方应用,网上下载这个源码后导入到Eclipse工程中,就可以直接部署到手机上,应用名叫做
Wechat SDK Demo22
。但是这里出现了一点小插曲:

按照第三方应用调用微信SDK的流程,首先需要将应用注册,然后再实现分享文字,图片等功能。但是部署后点击分享死活掉不出微信分享的界面,或者说闪一下又返回————分享不成功。

最终解决办法:

在Eclipse的上方工具栏选择 Window->Preference->Android->Build

进入如下界面:




如图所示修改debug.keystore的路径,这里我们找到该示例项目的绝对路径即可,例如我的是:

F:\Android\workspace\amm_sdk_sample\debug.keystore

而对于C:\Users\hp.android\debug.keystore,这是我们自己的签名,在之后编写自己的第三方应用时会用到。

再次将应用部署到手机上,就可以实现各个功能了。

使用微信SDK部署自己的第三方应用

首先我们按照自己填写的包名创建Android项目,编写相应的代码。以我的示例来说:定义两个Button,一个Button用来注册我的应用,另一个Button用来分享本地SD上的图片到朋友圈。

具体流程可以参照
Wechat SDK Demo22
,我也会在后面给出我自己的测试代码。

这里我就说说我遇到的两个问题:

调不出分享界面

解决办法:

这里首先按照上述提到的方法修改debug.keystore为自己的签名C:\Users\hp.android\debug.keystore,将应用部署到手机上。

获取程序签名的工具:http://open.weixin.qq.com/download/sdk/gen_signature.apk

运行这个gen_sinature输入自己的包名,这次会生成一个新的应用签名,去微信开放平台的后台用这个签名替换之前的。

至此再次运行第三方应用,问题解决。

分享图片没有响应

具体表现

点击分享图片后,程序正常执行,LogCat也没有报出任何错误,但是程序也没有任何响应,分享失败。

解决办法

WXMediaMessage msg = new WXMediaMessage();
这个对象有个成员变量
thumbData
表示分享图片的缩略图,这个缩略图的大小必须小于32Kb,在
extractThumbnail()
方法中修改THUMB_SIZE后就可以了。

附录

MainActivity.java

[code]public class MainActivity extends Activity {
    private IWXAPI api;
    private static final int THUMB_SIZE = 100;
    private static final String SDCARD_ROOT = Environment
            .getExternalStorageDirectory().getAbsolutePath();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        api = WXAPIFactory.createWXAPI(getApplicationContext(),
                "your AppID", true);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    public void RegisterToWeChat(View v) {
        api.registerApp("your AppId");
    }
    public void ShareToWeChat(View v) {
        String text = "test share";
        String path = SDCARD_ROOT + "/Desert.png";
        File file = new File(path);
        if (!file.exists()) {
            Toast.makeText(getApplicationContext(),"找不到文件"+" path = " + path,
                    Toast.LENGTH_LONG).show();
            //break;
        }
        WXImageObject imgObj = new WXImageObject();
        imgObj.setImagePath(path);
        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = imgObj;
        msg.title="title";
        msg.description="description";
        Bitmap bmp = BitmapFactory.decodeFile(path);
        Bitmap thumbBmp=ThumbnailUtils.extractThumbnail(bmp, THUMB_SIZE, THUMB_SIZE);
        bmp.recycle();
        msg.thumbData = Util.bmpToByteArray(thumbBmp, true);

        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("img");
        req.message = msg;
        req.scene =SendMessageToWX.Req.WXSceneTimeline;//朋友圈
        api.sendReq(req);
        // finish();
        // 发送文字
        // WXTextObject textObj = new WXTextObject();
        // textObj.text = text;
        // WXMediaMessage msg = new WXMediaMessage();
        // msg.mediaObject = textObj;
        // msg.description = text;
        // SendMessageToWX.Req req = new SendMessageToWX.Req();
        // req.transaction = String.valueOf(System.currentTimeMillis());
        // //req.scene = SendMessageToWX.Req.WXSceneTimeline;
        // req.message = msg;
        // api.sendReq(req);
    }
    private Bitmap extractThumbnail(Bitmap bmp, int thumbSize, int thumbSize2) {
        // TODO Auto-generated method stub
        return null;
    }
    private String buildTransaction(final String type) {
        return (type == null) ? String.valueOf(System.currentTimeMillis())
                : type + System.currentTimeMillis();
    }


activity_main.xml

[code]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btnRegister"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/register" 
        android:onClick="RegisterToWeChat"/>
    <Button
        android:id="@+id/btnShare"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/share" 
        android:onClick="ShareToWeChat"/>
</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: