I see you have a solution. For those who don't want to use Java. You can do this from C# only.
1.Go to <UnityInstallationDirecory>EditorDataPlaybackEnginesAndroidPlayerApk
, Copy the AndroidManifest.xml
file to your <ProjectName>AssetsPluginsAndroid
2.Now open the copied Manifest file from <ProjectName>AssetsPluginsAndroid
and add <uses-permission android:name="android.permission.VIBRATE"/>
to it. Save, Build and Run. If this is a permission problem, that should now be solved.
What your AndroidManifest.xml
should look like(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>
You don't even need to write Java plugin for simple vibration. This can be done with Unity's AndroidJavaClass and AndroidJavaObject classes.
Complete Vibration Plugin without 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();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…