參考雨鬆博客http://www.xuanyusong.com/archives/2159和騰訊SDK完成。html
一、首先第一步配置好騰訊的SDK,騰訊開發官網有教程。android
Elipse下Android安卓Activity代碼app
package com.example.androidqqsharetest;ide
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;oop
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;this
import android.widget.Button;spa
public class MainActivity extends UnityPlayerActivity{.net
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);
}
}
二、導出jar包到Unity3D中,參考http://i.cnblogs.com/EditPosts.aspx?opt=1,注意看完這篇參考博客,最底下有個錯誤解決方法。本人反正是遇到了。
Unity3D工程目錄錄以下:其中OneKeyShare是從Eclipse導出的jar包。open_sdk是騰訊的包。其中res文件夾,libs文件夾,AndroidManifest文件都是從Eclipse工程直接拉進來。
三、而後在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