Vibra con durata e pattern

Sto lavorando su un semplice plugin. Ora sto cercando di aggiungere una proprietà vibrazione. Ma questo codice non funziona. Dove sto andando male? Il mio codice è il seguente. Mi potete aiutare per favore.

Android:

import 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("currentActivity"); } using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.xxx.ultimatemobile.Brid")) { if (pluginClass != null) { Brid = pluginClass.CallStatic("instance"); Brid.Call("setContext", context); Brid.Call("Vibrate"); } } } } 

Evento pulsante:

 public void vibrate() { #if UNITY_ANDROID Bridge.Vibrate(null, null); #endif } 

Grazie in anticipo…

Vedo che hai una soluzione. Per coloro che non vogliono usare Java. Puoi farlo solo da C #.

1.Vai a \Editor\Data\PlaybackEngines\AndroidPlayer\Apk , copia il file AndroidManifest.xml in Assets\Plugins\Android

2. Aprire il file manifest copiato da Assets\Plugins\Android e aggiungere ad esso. Salva, costruisci ed esegui. Se questo è un problema di authorization, dovrebbe essere risolto.

Come dovrebbe apparire il tuo AndroidManifest.xml (Unity 5.4):

              

Non hai nemmeno bisogno di scrivere plugin Java per semplici vibrazioni. Questo può essere fatto con le classi AndroidJavaClass e AndroidJavaObject di Unity.

Complete Vibration Plugin senza 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("currentActivity"); sysService = currentActivity.Call("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("hasVibrator"); } } 

Uso :

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

La mia soluzione come segue.

Unità:

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

Inoltre, ho trovato l’esempio di file Manifest.xml prima di 1 minuto. Ora il plugin funziona.