好久没有写博客了
对于主要做unity开发而没有接触过Android开发的童鞋,应该会对Android的各种Activity头疼,还有就是面对xml的配置是各种懵逼,楼主也不是专门做Android开发的,只能说一下自己的理解
对于主要做unity开发而没有接触过Android开发的童鞋,应该会对Android的各种Activity头疼,还有就是面对xml的配置是各种懵逼,楼主也不是专门做Android开发的,只能说一下自己的理解
Android有且只有一个MainActivity,其他的都是通过住Activity调用的,在unity打包Android程序的时候,unity会自动打包好unity的调用入口,而需要自定义一些其他的功能的时候,例如实现Android自定义的时间振动,就需要自己写Android的jar包实现功能了,楼主不才,贴一下自己的实现
public class MainActivity extends BaseActivity
{
public void onCreate(Bundle b)
{
Log.i("Unity", "SDKInit");
super.onCreate(b);
}
public void Shake(String one, String oneVibrate, String two, String twoVibrate, String mode) {
Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");
vib.vibrate(new long[] { Integer.parseInt(one), Integer.parseInt(oneVibrate), Integer.parseInt(two), Integer.parseInt(twoVibrate) }, Integer.parseInt(mode));
}
public void ShakeMilliSecond(String millisecond)
{
Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");
vib.vibrate(Integer.parseInt(millisecond));
}
public void ShakeCancel()
{
Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");
vib.cancel();
}
}
楼主的BaseActivity是自己定义了一个继承unityplayeractivity的一个java类
自己在配置文件中添加一个申请振动的属性,怎么添加百度之
在MainActivity里写上自己的调用方法,然后打包jar,不过需要用winrar打开看一下是不是里面有你不想要的文件,如果有就删掉,不然可能会出问题
打包方法网上百度,各大神都贴的油。楼主就不贴了
打包好放在unity的Plugins/Android目录下,放错了是不会调用的
unity里的调用
/// <summary>
/// 五个参数 振动暂停时间、振动时间、振动暂停时间、振东时间、振动模式 0为重复振动,-1只振动一次,振东时间以毫秒为单位
/// </summary>
/// <param name="str"></param>
public void Shake(params string[] str)
{
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("Shake", str[0], str[1], str[2], str[3], str[4]);
#elif UNITY_IPHONE
Handheld.Vibrate();
# endif
}
/// <summary>
/// 以毫秒振动
/// </summary>
/// <param name="milliseconds"></param>
public void ShakeMilliSecond(string milliseconds)
{
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ShakeMilliSecond", milliseconds);
#elif UNITY_IPHONE
Handheld.Vibrate();
#endif
}
/// <summary>
/// 取消振动
/// </summary>
public void ShakeCancel()
{
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ShakeCancel");
#elif UNITY_IPHONE
#endif
别问我为什么这么写,因为我也不知道,
这样就能够调用了,不过别忘了,jar包中的包名和unity里的包名要一致才可以
话说,JD_GUI打开jar包查看源码太爽了,