且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使 Android 手机振动 100 毫秒 C#

更新时间:2022-01-02 22:58:43

2018.3 版本起,Unity 允许您将 .java 文件添加到您的 Unity 项目中并进行编译当您构建 Android 播放器时.

Since version 2018.3 Unity allows you to add .java files into your Unity Project and they are compiled when you build an Android player.

1) 将输出的 UnityAndroidVibrator.javaAndroidManifest.xml 文件复制到 Assets/Plugins/Android> Unity 项目中的目录.

1) Copy the output UnityAndroidVibrator.java and AndroidManifest.xml files into the Assets/Plugins/Android directory in your Unity project.

2) 转到:[文件] > [构建设置] > [播放器设置] > [播放器] 并复制包名称.

2) Go to: [File] > [build Settings] > [Player Settings] > [Player] and copy package name.

3) 在这两个类中查找并替换 "uav.uav.uav" 包名称,并使用您在步骤 2) 中复制的包名称.

3) In both classes find and replace "uav.uav.uav" package name with that you copied in step 2).

UnityAndroidVibrator.cs 类:

using UnityEngine;
public class UnityAndroidVibrator : MonoBehaviour 
{
    #if UNITY_ANDROID || UNITY_EDITOR 
    private static AndroidJavaObject plugin = null;
    #endif


    // Use this for initialization
    void Awake () 
    {
        #if UNITY_ANDROID && !UNITY_EDITOR 
        plugin = new AndroidJavaClass("uav.uav.uav.UnityAndroidVibrator").CallStatic<AndroidJavaObject>("instance");
        #endif
    }


    /// <summary>
    /// <para>Vibrates For Given Amount Of Time.</para>
    /// <para>1 sec = 1000 Millseconds :)</para>
    /// </summary>
    /// <param name="DurationInMilliseconds">Duration in milliseconds.</param>
    public void VibrateForGivenDuration(int DurationInMilliseconds)
    {
        plugin.Call("VibrateForGivenDuration", DurationInMilliseconds);

    }

    /// <summary>
    /// Stoping All Vibrate.
    /// </summary>
    public void StopVibrate()
    {
        plugin.Call("StopVibrate");
    }


    /// <summary>
    /// <para>Customs Vibrate or Vibration with Pattern.</para>
    /// <para>Start without a delay</para>
    /// <para>Each element then alternates between vibrate, sleep, vibrate, sleep...</para>
    /// <para>long[] Pattern = {0, 100, 100, 300};</para>
    /// </summary>
    /// <param name="Pattern">Pattern.</param>
    public void CustomVibrate(long[] Pattern)
    {
        plugin.Call("CustomVibrate", Pattern);
    }


}

UnityAndroidVibrator.java 类:

package uav.uav.uav;

import android.os.Vibrator;
import com.unity3d.player.UnityPlayer;

public class UnityAndroidVibrator 
{
    private static UnityAndroidVibrator _instance;

    public UnityAndroidVibrator() {
    }

    public void VibrateForGivenDuration(int duration) {
        Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
        vibs.vibrate((long)duration);
    }

    public void StopVibrate() {
        Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
        vibs.cancel();
    }

    public void CustomVibrate(long[] Pattern) {
        Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
        vibs.vibrate(Pattern, -1);
    }

    public static UnityAndroidVibrator instance() 
    {
        if (_instance == null) 
        {
            _instance = new UnityAndroidVibrator();
        }

        return _instance;
    }
}

AndroidManifest.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools">
  <application>
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
  <uses-permission android:name="android.permission.VIBRATE" />
</manifest>

注意:例如,如果您的包名称为com.my.app",则结果名称为:


Note: for example if your package name is "com.my.app" the resulting name would be:

UnityAndroidVibrator.cs"类:

plugin = new AndroidJavaClass("com.my.app.UnityAndroidVibrator").CallStatic<AndroidJavaObject>("instance");

UnityAndroidVibrator.java"类:

package com.my.app;

import android.os.Vibrator;
import com.unity3d.player.UnityPlayer;