Java 以持续时间和模式振动
我正在开发一个简单的插件。现在我尝试添加一个振动属性。但是这个代码不起作用。我哪里做错了?我的代码如下。你能帮帮我吗 安卓: 导入android.os.可控震源Java 以持续时间和模式振动,java,android,android-studio,unity3d,plugins,Java,Android,Android Studio,Unity3d,Plugins,我正在开发一个简单的插件。现在我尝试添加一个振动属性。但是这个代码不起作用。我哪里做错了?我的代码如下。你能帮帮我吗 安卓: 导入android.os.可控震源 public class Brid { private Context context; private static Brid instance; public Brid() { this.instance = this; } public static Brid instance() { if(instanc
public class Brid {
private Context context;
private static Brid instance;
public Brid()
{
this.instance = this;
}
public static Brid instance()
{
if(instance == null) {
instance = new Brid();
}
return instance;
}
public void setContext(Context context) {
this.context = context;
}
public void Vibrate()
{
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(100);
}
}
Unity3D:
提前感谢…我的解决方案如下 团结:
另外,我在1分钟前找到了Manifest.xml文件示例。现在插件正在运行。我看你有了一个解决方案。对于那些不想使用Java的人。您只能从C中执行此操作 1.转到\Editor\Data\PlaybackEngines\AndroidPlayer\Apk,将AndroidManifest.xml文件复制到您的资产\Plugins\Android 2.现在从Assets\Plugins\Android打开复制的清单文件并添加到其中。保存、构建和运行。如果这是一个许可问题,现在应该解决 AndroidManifest.xml应该是什么样子的Unity 5.4:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:debuggable="true">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
你从日志中得到任何错误吗?检查你的清单,因为我只在Android上尝试过。但应用程序并没有关闭。我在jar文件中有AndroidManifest.xml文件。我需要在plugins文件夹中添加AndroidManifest.xml文件吗。我没有更多的信息。你们能解释一下怎么做吗?最好的方法是解压.apk文件并检查清单中是否存在这一行。如果没有,请尝试将其添加到assets/plugins/android中的清单中。
public void vibrate()
{
#if UNITY_ANDROID
Bridge.Vibrate(null, null);
#endif
}
using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.xx.ultimatemobile.Brid"))
{
if (pluginClass != null)
{
Brid = pluginClass.CallStatic<AndroidJavaObject>("instance");
Brid.Call("setContext", context);
context.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
Brid.Call("Vibrate");
}));
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:debuggable="true">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
using UnityEngine;
using System.Collections;
public class Vibrate
{
public AndroidJavaClass unityPlayer;
public AndroidJavaObject currentActivity;
public AndroidJavaObject sysService;
public void Vibrate()
{
unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
sysService = currentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator");
}
//Functions from https://developer.android.com/reference/android/os/Vibrator.html
public void vibrate()
{
sysService.Call("vibrate");
}
public void vibrate(long milliseconds)
{
sysService.Call("vibrate", milliseconds);
}
public void vibrate(long[] pattern, int repeat)
{
sysService.Call("vibrate", pattern, repeat);
}
public void cancel()
{
sysService.Call("cancel");
}
public bool hasVibrator()
{
return sysService.Call<bool>("hasVibrator");
}
}
Vibrate vibrate = new Vibrate();
if (vibrate.hasVibrator())
{
//Vibrate
vibrate.vibrate();
//Vibrate for 500 milliseconds
vibrate.vibrate(500);
// Start without a delay
// Vibrate for 200 milliseconds
// Sleep for 2000 milliseconds
long[] pattern = { 0, 200, 2000 };
vibrate.vibrate(pattern, 0);
//Cancel Vibration
vibrate.cancel();
}