标签:
参考雨松博客http://www.xuanyusong.com/archives/2159和腾讯SDK完成。
1、首先第一步配置好腾讯的SDK,腾讯开发官网有教程。
Elipse下Android安卓Activity代码
package com.example.androidqqsharetest;
import com.tencent.connect.common.Constants;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Button;
public class MainActivity extends UnityPlayerActivity{
private int shareType = QQShare.SHARE_TO_QQ_TYPE_DEFAULT; // 分享的消息类型
private Tencent mTencent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTencent = Tencent.createInstance("你申请的APPID", this.getApplicationContext());
}
IUiListener qqShareListener = new IUiListener() {
@Override
public void onCancel() {
if (shareType != QQShare.SHARE_TO_QQ_TYPE_IMAGE) {
}
}
@Override
public void onComplete(Object response) {
}
@Override
public void onError(UiError e) {
}
};
// 特别注意应用在调用Android_SDK 接口时,如果成功接收到回调,需要在调用接口的 Activity 的onActivityResult 方法中增加如下代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
imTencent.onActivityResult(requestCode, resultCode, data);
}
//这个方法是在Unity中调用的。参数是当前的Activity。
public void LoginAndSend(final Activity currentActivity)
{
//一定要在UI线程中来执行腾讯API中的方法。
//API中的方法应该是开启了一个线程,一切由Unity调用的方法里面只要开启线程就会出现
//Can’t create handler inside thread that has not called Looper.prepare() 错误
//写在runOnUiThread 的线程中可以避免这个错误没,以前在处理Unity发送新浪微博的时候也遇到这样的错误。
//同样可以按照这种方法来解决。
currentActivity.runOnUiThread(new Runnable() {
@Override
public void run()
{
MyShareToQQ();
}
});
}
// 分享到QQ
public void MyShareToQQ() {
final Bundle bundle = new Bundle();
// 这条分享消息被好友点击后的跳转URL
bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.uzzf.com/news/7399.html");
// // 分享的标题
bundle.putString(QQShare.SHARE_TO_QQ_TITLE, "QQZone 分享 Testing");
// // 分享图片的URL
bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://171.109.34.16:8088/460.jpg");
// // 分享的消息摘要最多50
bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, "Monster的分享测试");
bundle.putString(QQShare.SHARE_TO_QQ_APP_NAME, "AndroidQQShareTest");
bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
Log.v("IMAGEURL", imageUrl);
mTencent.shareToQQ(this, bundle, qqShareListener);
}
}
2、导出jar包到Unity3D中,参考http://i.cnblogs.com/EditPosts.aspx?opt=1,注意看完这篇参考博客,最底下有个错误解决方法。本人反正是遇到了。
Unity3D工程目录录如下:其中OneKeyShare是从Eclipse导出的jar包。open_sdk是腾讯的包。其中res文件夹,libs文件夹,AndroidManifest文件都是从Eclipse工程直接拉进来。
3、然后在U3D中,绑定在任意对象中, 把Activity传递给Android插件中。
using UnityEngine;
using System.Collections;
public class ShareToQQZone : MonoBehaviour
{
void OnGUI()
{
if (GUILayout.Button(" Send QQ zone", GUILayout.Height(200), GUILayout.Width(300)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("LoginAndSend", jo);
}
}
}
}
bin文件占用比较大的体积,试着删除其中占用空间较大的classes.dex文件,发现运行依然正常。
随后又删除不相关的图片文件。图片文件一般占用较大空间。
删除libs的android-support-v4.jar文件。mta-sdk-1.6.2.jar文件,依然可以运行。
这样导出来的jar包缩小为1.41M。
删除dexedLibs文件夹下的android-support-v4.jar,mta-sdk-1.6.2.jar文件。
再次删除bin文件夹下的APK文件,发现导出的jar包减小到899K极大地缩小了程序占用的空间!!插件依然可以正常使用!
最后是Android和Unity3D工程下载链接http://pan.baidu.com/s/1bnbFwbd
标签:
原文地址:http://www.cnblogs.com/I-AM-Monster/p/4355609.html