-
-
Save nieldeokar/e05fffe4d639dfabf0d57e96cb8055e2 to your computer and use it in GitHub Desktop.
| <?xml version="1.0" encoding="utf-8"?> | |
| <RelativeLayout | |
| xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" | |
| android:layout_height="match_parent"> | |
| </RelativeLayout> |
| package com.example.nileshdeokar.simplevibratedemo; | |
| import android.os.Build; | |
| import android.os.VibrationEffect; | |
| import android.os.Vibrator; | |
| import android.support.annotation.RequiresApi; | |
| import android.support.v7.app.AppCompatActivity; | |
| import android.os.Bundle; | |
| import android.widget.Toast; | |
| /* | |
| ~ Nilesh Deokar @nieldeokar on 03/06/18 11:22 PM | |
| */ | |
| /* | |
| * To test this : | |
| * 1. Paste this activity inside your project. | |
| * 2. Paste `activity_simple_vibrate_demo.xml` into resources folder. | |
| * 3. Add entry of SimpleVibrateDemoActivity inside AndroidManifest.xml | |
| * 4. Add Vibrate permission inside AndroidManifest.xml | |
| * | |
| * <uses-permission android:name="android.permission.VIBRATE" /> | |
| * | |
| * 5. Build & run. | |
| * */ | |
| public class SimpleVibrateDemoActivity extends AppCompatActivity { | |
| Vibrator vibrator; | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| setContentView(R.layout.activity_simple_vibrate_demo); | |
| vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); | |
| if (vibrator != null && vibrator.hasVibrator()) { | |
| vibrateFor500ms(); | |
| customVibratePatternNoRepeat(); | |
| customVibratePatternRepeatFromSpecificIndex(); | |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| createOneShotVibrationUsingVibrationEffect(); | |
| createWaveFormVibrationUsingVibrationEffect(); | |
| createWaveFormVibrationUsingVibrationEffectAndAmplitude(); | |
| } | |
| } else { | |
| Toast.makeText(this, "Device does not support vibration", Toast.LENGTH_SHORT).show(); | |
| } | |
| } | |
| private void vibrateFor500ms() { | |
| vibrator.vibrate(500); | |
| } | |
| private void customVibratePatternNoRepeat() { | |
| // 0 : Start without a delay | |
| // 400 : Vibrate for 400 milliseconds | |
| // 200 : Pause for 200 milliseconds | |
| // 400 : Vibrate for 400 milliseconds | |
| long[] mVibratePattern = new long[]{0, 400, 200, 400}; | |
| // -1 : Do not repeat this pattern | |
| // pass 0 if you want to repeat this pattern from 0th index | |
| vibrator.vibrate(mVibratePattern, -1); | |
| } | |
| private void customVibratePatternRepeatFromSpecificIndex() { | |
| long[] mVibratePattern = new long[]{0, 400, 800, 600, 800, 800, 800, 1000}; | |
| // 3 : Repeat this pattern from 3rd element of an array | |
| vibrator.vibrate(mVibratePattern, 3); | |
| } | |
| @RequiresApi(api = Build.VERSION_CODES.O) | |
| private void createOneShotVibrationUsingVibrationEffect() { | |
| // 1000 : Vibrate for 1 sec | |
| // VibrationEffect.DEFAULT_AMPLITUDE - would perform vibration at full strength | |
| VibrationEffect effect = VibrationEffect.createOneShot(1000, VibrationEffect.DEFAULT_AMPLITUDE); | |
| vibrator.vibrate(effect); | |
| } | |
| @RequiresApi(api = Build.VERSION_CODES.O) | |
| private void createWaveFormVibrationUsingVibrationEffect() { | |
| long[] mVibratePattern = new long[]{0, 400, 1000, 600, 1000, 800, 1000, 1000}; | |
| // -1 : Play exactly once | |
| VibrationEffect effect = VibrationEffect.createWaveform(mVibratePattern, -1); | |
| vibrator.vibrate(effect); | |
| } | |
| @RequiresApi(api = Build.VERSION_CODES.O) | |
| private void createWaveFormVibrationUsingVibrationEffectAndAmplitude() { | |
| long[] mVibratePattern = new long[]{0, 400, 800, 600, 800, 800, 800, 1000}; | |
| int[] mAmplitudes = new int[]{0, 255, 0, 255, 0, 255, 0, 255}; | |
| // -1 : Play exactly once | |
| if (vibrator.hasAmplitudeControl()) { | |
| VibrationEffect effect = VibrationEffect.createWaveform(mVibratePattern, mAmplitudes, -1); | |
| vibrator.vibrate(effect); | |
| } | |
| } | |
| } |
Forgive me, I'm new to android development.
I tried the below in MainActivity.java. I got an error
Error:(23, 42) error: vibrateFor500ms() has private access in SimpleVibrateDemoActivity
What did I do wrong? How do I access the private methods from MainActivity.java?
package com.example.nileshdeokar.simplevibratedemo;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SimpleVibrateDemoActivity.vibrateFor500ms();
Snackbar.make(view, "Vibrate", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
The method vibrateFor500ms in SimpleVibrateDemoActivity class is private change the definition of the method to public in SimpleVibrateDemoActivity.
It is showing you error because it is in different class. One method which is defined as private can be accessed only in that class. U cannot use them in another class. So make it public you use it anywhere in the package .Hope this helps you. 👍
which phones can return true used “vibrator.hasAmplitudeControl()”
Call any method like
customVibratePatternNoRepeat()orvibrateFor500ms()from onClick listeners of the button. You can find code for setting button listener here.