Unity调Android相关的API,只需一个文件即可搞定

39 篇文章 1 订阅
4 篇文章 0 订阅

方式与流程:利用Eclipse编译生成JAR,直接扔到工程的目录下即可使用,不需要配置AndroidManifest.xml等乱七八糟的东西。。。

 

Eclipse端

版本:

 新建android项目

 

 

 

工程创建好之后,在src文件夹下创建新包,名字随意

在新建一个Class类 

之后需要添加依赖库 ,Jar目录在unity的安装路径X:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin下的classes.jar

创建libs文件夹

 再把classes.jar直接拖进来,eclipse会自动添加进依赖库,如图:

接着编写刚刚创建的java文件。已经写了几个,分别是调用复制到系统剪切板,和唤醒第三方APP(需要知道包名)。

package com.android.U3D;

import com.unity3d.player.UnityPlayer;

import android.app.Fragment;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.unity3d.player.UnityPlayer;

public class TestPlugins extends Fragment {

	private static final String TAG = "Plugin";
    private static TestPlugins Instance = null;
    private String gameObjectName;
    
    public static TestPlugins GetInstance(String gameObject)
    {
        if(Instance == null)
        {
            Instance = new TestPlugins();
            Instance.gameObjectName = gameObject;
            UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
        }
        return Instance;
    }
 
    //拷贝String到剪贴板
    public String onClickCopy(String str) {
        //获取剪贴板管理器:
        ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
        // 创建普通字符型ClipData
        ClipData mClipData = ClipData.newPlainText("Label", str); //Label是任意文字标签
        // 将ClipData内容放到系统剪贴板里。
        cm.setPrimaryClip(mClipData);
        return  "已复制内容到剪切板";
    }
 
    //粘贴
    public String onClickPaste(){
        ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
        String result = "";
        ClipData clipData = cm.getPrimaryClip();
        //result = cm.toString(); //ClipData{ text/plain "Label"{T:"str"}}; //取出的是ClipData
        //result = cm.getText().toString(); //"str" //方法deprecated
        ClipData.Item item = clipData.getItemAt(0); //这里获取第一条,也可以用遍历获取任意条
        CharSequence charSequence = item.coerceToText(getActivity().getApplicationContext());
        result = charSequence.toString();
        return result;
    }


    /**
     * 唤起App
     * @param String
     */
    public boolean DoActiveApp(String packageName)
    {
    	PackageManager packageManager = UnityPlayer.currentActivity.getPackageManager();
	    //PackageManager packageManager = getPackageManager();
	    if (checkAppExist(packageName)) {
	        Intent intent = packageManager.getLaunchIntentForPackage(packageName);
	        startActivity(intent);
	        return true;
	    } else {
	        //Toast.makeText(UnityPlayer.currentActivity, packageName + "no exist", Toast.LENGTH_SHORT).show();
	    	return false;
	    }
    }

    /**
     * 检查App是否已安装
     * @param String
     * @return boolean
     */
    private boolean checkAppExist(String packageName) {
        PackageInfo packageInfo = null;
        try {
            packageInfo = UnityPlayer.currentActivity.getPackageManager().getPackageInfo(packageName, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return packageInfo != null;
    }
}

导出操作

 

只需要勾选所编辑java文件就行了,其余的都不需要

 生成的jar文件要放到u3d工程下的Plugins/Android文件夹下,没有则创建

Unity端调用

调用很简单,就几行。

using UnityEngine;
using System.Collections;

public class TestAndroidPlugin : MonoBehaviour {

    // Use this for initialization
    void Start () {

        AndroidJavaClass jc = new AndroidJavaClass("com.android.U3D.TestPlugins");
        var jo = jc.CallStatic<AndroidJavaObject>("GetInstance", gameObject.name);

        string str = "Test!!!!!!!!!"
        //调用带返回值,无参数的方法,参数为方法名字符串
        string callback = jo.Call<string>("onClickCopy", str);

        Debug.Log(callback);
    }

}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值