gpt4 book ai didi

java - 振动的持续时间和模式

转载 作者:行者123 更新时间:2023-11-30 08:33:03 24 4
gpt4 key购买 nike

我正在开发一个简单的插件。现在我正在尝试添加振动属性。但这段代码不起作用。我哪里出错了?我的代码如下。你能帮我一下吗?

Android:

导入 android.os.Vibrator;

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:

    public static void Vibrate(AndroidJavaObject Brid, AndroidJavaObject context)
{
if (Brid == null)
{
using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
context = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
}

using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.xxx.ultimatemobile.Brid"))
{
if (pluginClass != null)
{
Brid = pluginClass.CallStatic<AndroidJavaObject>("instance");
Brid.Call<AndroidJavaObject>("setContext", context);
Brid.Call<AndroidJavaObject>("Vibrate");
}
}
}
}

按钮事件:

public void vibrate()
{
#if UNITY_ANDROID

Bridge.Vibrate(null, null);

#endif
}

提前致谢...

最佳答案

我看到你有一个解决方案。对于那些不想使用 Java 的人。您只能通过 C# 执行此操作。

1.前往<UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk ,复制AndroidManifest.xml文件到您的<ProjectName>Assets\Plugins\Android

2.现在打开从<ProjectName>Assets\Plugins\Android复制的Manifest文件并添加<uses-permission android:name="android.permission.VIBRATE"/>到它。保存、构建并运行。如果这是一个权限问题,现在应该已经解决了。

你的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>

您甚至不需要编写 Java 插件来实现简单的振动。这可以通过 Unity 的 AndroidJavaClass 和 AndroidJavaObject 类来完成。

无需 Java 的完整振动插件。

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");
}
}

<强> Usage :

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();
}

关于java - 振动的持续时间和模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39651021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com