📜  如何在Android中撰写振动模式?

📅  最后修改于: 2021-05-13 18:10:42             🧑  作者: Mango

正如本文前面“如何在Android中以编程方式振动设备”中讨论的那样。因此,在本文中,已经讨论了如何制作振动模式,该模式会产生不同波形的振动。该实现可以是当有来电时设备产生各种振动模式时产生的振动的复制品。请注意,我们还将使用Java语言来实现该项目。

在Android中实施振动模式的步骤

第1步:创建一个空的android studio项目

  • 创建一个空的活动Android Studio项目。并选择Java作为编程语言。
  • 参考Android |如何在Android Studio中创建/启动新项目,以了解如何创建空活动的Android Studio项目。

步骤2:使用activity_main.xml文件

  • 在布局中实现一个按钮,按下该按钮可创建振动波形。
  • activity_main.xml文件中调用以下代码。
XML


  
    
    


XML


  
    
    
  
    
        
            
                
  
                
            
        
    
  


Java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
  
public class MainActivity extends AppCompatActivity {
  
    Button bComposeVibration;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // register the button with the appropriate ID
        bComposeVibration = findViewById(R.id.makeVibrationCompositionButton);
  
        // create instance of the vibrator and initialise it with Vibrator system service
        final Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  
        // handle compose vibration button
        bComposeVibration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                // Note: The first element needs to be 0
                long[] vibrationWaveFormDurationPattern = {0, 10, 200, 500, 700, 1000, 300, 200, 50, 10};
  
                // the vibration of the type custom waveforms needs the API version 26
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
  
                    // create VibrationEffect instance and createWaveform of vibrationWaveFormDurationPattern
                    // -1 here is the parameter which indicates that the vibration shouldn't be repeated.
                    VibrationEffect vibrationEffect = VibrationEffect.createWaveform(vibrationWaveFormDurationPattern, -1);
  
                    // it is safe to cancel all the vibration taking place currently
                    vibrator.cancel();
  
                    // now initiate the vibration of the device
                    vibrator.vibrate(vibrationEffect);
                }
            }
        });
    }
}


输出界面:

在Android中撰写振动模式

步骤3:寻求振动权限

  • 寻求振动AndroidManifest.xml文件中的权限,因为我们正在访问设备的硬件部分。
  • AndroidManifest.xml文件中调用以下代码

XML格式



  
    
    
  
    
        
            
                
  
                
            
        
    
  

步骤4:使用MainActivity。 Java文件

  • 在上一篇文章中,已经讨论了Android设备的预定义振动。但是,此处使用长变量数组创建自定义波形。
  • 这里要注意的重要点之一是,在以长类型的类型数组创建波形时,第一个元素必须为零(0)。之所以如此,是因为首先需要打开设备的振动器,然后使其振动以产生其他波形。
  • 在这种情况下,波形为long []振动波形式持续时间模式= {0,10,200,500,700,1000,300,200,50,10};从下面的代码。第一个波形是0。
  • MainActivity中调用以下代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。

Java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
  
public class MainActivity extends AppCompatActivity {
  
    Button bComposeVibration;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // register the button with the appropriate ID
        bComposeVibration = findViewById(R.id.makeVibrationCompositionButton);
  
        // create instance of the vibrator and initialise it with Vibrator system service
        final Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  
        // handle compose vibration button
        bComposeVibration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                // Note: The first element needs to be 0
                long[] vibrationWaveFormDurationPattern = {0, 10, 200, 500, 700, 1000, 300, 200, 50, 10};
  
                // the vibration of the type custom waveforms needs the API version 26
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
  
                    // create VibrationEffect instance and createWaveform of vibrationWaveFormDurationPattern
                    // -1 here is the parameter which indicates that the vibration shouldn't be repeated.
                    VibrationEffect vibrationEffect = VibrationEffect.createWaveform(vibrationWaveFormDurationPattern, -1);
  
                    // it is safe to cancel all the vibration taking place currently
                    vibrator.cancel();
  
                    // now initiate the vibration of the device
                    vibrator.vibrate(vibrationEffect);
                }
            }
        });
    }
}

输出:

  • 在具有API版本26的物理Android设备中测试此应用程序会更好。
  • 要了解如何设置物理Android设备,请参阅如何在真实设备上运行Android应用。