কিভাবে একটি অ্যান্ড্রয়েড ডিভাইস ভাইব্রেট করা যায়?


499

আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন লিখেছি। এখন, যখন কোনও নির্দিষ্ট ক্রিয়া ঘটে তখন আমি ডিভাইসটি স্পন্দিত করতে চাই। কিভাবে আমি এটি করতে পারব?

উত্তর:


986

চেষ্টা করুন:

import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    //deprecated in API 26 
    v.vibrate(500);
}

বিঃদ্রঃ:

AndroidManLive.xML ফাইলে অনুমতি অন্তর্ভুক্ত করতে ভুলবেন না:

<uses-permission android:name="android.permission.VIBRATE"/>

3
সমস্ত ফোনের কম্পন বাতিল করার কোনও উপায় আছে কি? ধন্যবাদ!
জাভি 14

14
@ জোশসভাস এটি 500 মিলিসেকেন্ড যা মাত্র আধ সেকেন্ড। গুগল ডক্স পরীক্ষা করে দেখুন। বিকাশকারী.অ্যান্ড্রয়েড.
com

5
এটি আমাকে দেয়: প্রসঙ্গটি সমাধান করা যায় না বা ক্ষেত্র নয় ..!? সমস্যাটি কী
ম্যাকলান

3
কম্পন এখন হ্রাস করা হয়। হিটেশ সাহু পরিবর্তে সমাধানটি ব্যবহার করুন।
রায় লি

2
এই পদ্ধতিটি এপিআই 26 স্তরে অবনতি হয়েছে vibrate(VibrationEffect)। পরিবর্তে ব্যবহার করুন।
টিমো বোহর

651

অনুদান কম্পন অনুমতি

আপনি কোনও কম্পন কোড প্রয়োগ করা শুরু করার আগে আপনাকে আপনার অ্যাপ্লিকেশনটিকে ভাইব্রের অনুমতি দিতে হবে:

<uses-permission android:name="android.permission.VIBRATE"/>

আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে এই লাইনটি অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন।

কম্পন লাইব্রেরি আমদানি করুন

বেশিরভাগ আইডিই আপনার জন্য এটি করবে, তবে আপনার যদি তা না করে তবে আমদানি বিবৃতি এখানে দেওয়া আছে:

 import android.os.Vibrator;

আপনি যে স্পন্দনটি ঘটতে চান সেখানে সেই কার্যকলাপে এটি নিশ্চিত করুন sure

প্রদত্ত সময়ের জন্য কীভাবে কম্পন করবেন

বেশিরভাগ পরিস্থিতিতে, আপনি একটি স্বল্প, পূর্ব নির্ধারিত সময়ের জন্য ডিভাইসটি স্পন্দিত করতে চাইবেন। আপনি vibrate(long milliseconds)পদ্ধতিটি ব্যবহার করে এটি অর্জন করতে পারেন । এখানে একটি দ্রুত উদাহরণ:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Vibrate for 400 milliseconds
v.vibrate(400);

এটাই, সরল!

অনির্দিষ্টভাবে কীভাবে কম্পন করবেন

এটি এমন পরিস্থিতিতে হতে পারে যে আপনি ডিভাইসটি অনির্দিষ্টকালের জন্য কম্পন চালিয়ে যেতে চান। এর জন্য, আমরা vibrate(long[] pattern, int repeat)পদ্ধতিটি ব্যবহার করি :

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};

// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);

আপনি যখন কম্পন বন্ধ করতে প্রস্তুত হন, কেবল cancel()পদ্ধতিটি কল করুন :

v.cancel();

কম্পন প্যাটার্নগুলি কীভাবে ব্যবহার করবেন

আপনি যদি আরও বেশি স্পষ্টভাবে কম্পন চান তবে আপনি নিজের কম্পনের নিদর্শন তৈরি করতে চেষ্টা করতে পারেন:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};

// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);

আরও জটিল কম্পন

এমন একাধিক এসডিকে রয়েছে যা হ্যাপটিক প্রতিক্রিয়ার আরও বিস্তৃত পরিসীমা সরবরাহ করে। আমি বিশেষ প্রভাবগুলির জন্য যেটি ব্যবহার করি তা হ'ল অ্যান্ড্রয়েডের জন্য নিমজ্জনের হ্যাপটিক ডেভলপমেন্ট প্ল্যাটফর্ম

সমস্যা সমাধান

আপনার ডিভাইসটি কম্পন না করলে প্রথমে নিশ্চিত হয়ে নিন যে এটি স্পন্দিত হতে পারে:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
    Log.v("Can Vibrate", "YES");
} else {
    Log.v("Can Vibrate", "NO");
}

দ্বিতীয়ত, দয়া করে নিশ্চিত করুন যে আপনি আপনার অ্যাপ্লিকেশনটিকে কম্পনের অনুমতি দিয়েছেন! প্রথম পয়েন্ট ফিরে দেখুন।


26
দুর্দান্ত উত্তর, যদিও আমি অনির্দিষ্টকালের জন্য একটি কম্পন বাজানোর বিষয়ে সতর্ক থাকব। এই বৈশিষ্ট্যটি ব্যবহার করার সময় দয়া করে দায়বদ্ধ হন!
ডেভ

4
দুর্দান্ত উত্তর, তবে একটি জিনিস। আপনি যখন বলছেন 'এখানে' 0 'এর অর্থ অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করা', যদিও সত্য, কিছুটা বিভ্রান্তিকর। এই সংখ্যাটি প্যাটার্ন অ্যারের সূচক যা প্যাটার্নটি পুনরাবৃত্তি করার সময় শুরু হবে।
অ্যারোনভার্গাস

1
@ অ্যারোনভার্গাস ফেয়ার পয়েন্ট, যদিও এটি বেশিরভাগ লোকেরা অর্জন করার চেষ্টা করছে তার সুযোগের বাইরে নয়। আমি একটি সাধারণ ব্যাখ্যার জন্য গিয়েছিলাম :)
লিয়াম জর্জ বিটসওয়ার্থ

@ লিয়াম জর্জ বিটসওয়ার্থ মোবাইল সাইলেন্ট মোডে থাকা অবস্থায় আমি কীভাবে ভাইব্রেট করব? অনুগ্রহ.
পার্থি

1
নিমজ্জন-লিঙ্কটি নিচে রয়েছে এবং আমি এটি
সংরক্ষণাগার.অর্গে

73

অ্যান্ড্রয়েড-ও (এপিআই 8.0) এর সাথে হালনাগাদ করুন 2017 ভাইব্রেট (অন্তর) পদ্ধতিটি হ্রাস করা হয়েছে

সমস্ত অ্যান্ড্রয়েড সংস্করণ সমর্থন করার জন্য এই পদ্ধতিটি ব্যবহার করুন।

// Vibrate for 150 milliseconds
private void shakeItBaby() {
    if (Build.VERSION.SDK_INT >= 26) {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));
    } else {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
    }
}

Kotlin:

// Vibrate for 150 milliseconds
private fun shakeItBaby(context: Context) {
    if (Build.VERSION.SDK_INT >= 26) {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))
    } else {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)
    }
}

2
আমাদের কম্পনের জন্য রানটাইম অনুমতি প্রয়োজন হয় না। কম্পন বিপজ্জনক অনুমতি নয়, সুতরাং এটি কেবলমাত্র ম্যানিফেস্টে ঘোষণা করতে হবে। [ বিকাশকারী.অ্যান্ড্রয়েড.
com

@ বাগসহ্যাপেন ডকুমেন্টেশন সরানো হয়েছে। এটি আপডেট করবে বা মুছবে।
Roon13

শুধু আমি যোগ হবে যদি আপনি একটি কার্যকলাপে এই ব্যবহার করা হয় এবং একটি নির্দিষ্ট কনটেক্সট পরিবর্তনশীল নেই, তারপর প্রতিস্থাপন হয় getSystemServiceসঙ্গেthis.getContext().getSystemService
DrMcCleod

আপনি স্যার functions ফাংশনগুলির নামটির একটি উত্সাহ অর্জন করেছেন, স্পর্শ করুন
স্টারওয়েভ

18

উপরের উত্তরগুলি নিখুঁত। তবে আমি বোতাম ক্লিকে আমার অ্যাপটি ঠিক দু'বার স্পন্দিত করতে চেয়েছিলাম এবং এই ছোট তথ্যটি এখানে অনুপস্থিত, তাই আমার মতো ভবিষ্যতের পাঠকদের জন্য পোস্ট করা। :)

উপরে বর্ণিত অনুসারে আমাদের অনুসরণ করতে হবে এবং একমাত্র পরিবর্তনটি নীচের মতো স্পন্দিত প্যাটার্নে হবে,

long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important

এটি হ'ল দু'বার কম্পন করবে । আমরা ইতিমধ্যে জানি

  1. 0 এর জন্য দেরী
  2. 100 বলে ভাইব্রেট প্রথমবারের জন্য
  3. পরবর্তী বিলম্ব আসে 1000ms
  4. এবং 300 মিলিমিটারের জন্য আবার সেই কম্পন পোস্ট করুন

কেউ বিকল্প হিসাবে বিলম্ব এবং কম্পন উল্লেখ করে যেতে পারে (উদাহরণস্বরূপ 0, 100, 1000, 300, 1000, 300 এবং 3 টি কম্পনের জন্য 300 এবং তাই ..) তবে মনে রাখবেন @ ডেভের শব্দটি এটি দায়বদ্ধতার সাথে ব্যবহার করেছে। :)

এছাড়াও এখানে নোট করুন যে পুনরাবৃত্তি প্যারামিটারটি -1 এ সেট করা হয়েছে যার অর্থ হ'ল কম্পনটি ঠিক প্যাটার্নে উল্লিখিত হিসাবে ঘটবে । :)


-1 অর্থ কেন প্যাটার্নে উল্লিখিত হিসাবে কম্পন ঘটবে? ধন্যবাদ!
রুচির বড়োনিয়া

@ রিচ দয়া করে আমার উত্তর দেখুন। '-1' হ'ল সূচকটি যেখানে প্রথমবারের মতো প্যাটার্ন অনুসরণ করার পরে কম্পনটি পুনরায় চেষ্টা করার চেষ্টা করবে। '-1' সীমা ছাড়িয়ে গেছে, সুতরাং কম্পনটি পুনরাবৃত্তি করে না।
লিয়াম জর্জ বেটসওয়ার্থ

@ রিচ - লিয়াম জর্জ বিটসওয়ার্থ সঠিক। অ্যান্ড্রয়েড ডক্স বলে - প্যাটার্নটি পুনরাবৃত্তি করার জন্য, পুনরাবৃত্তিটি শুরু করতে প্যাটার্ন অ্যারেতে সূচকটি পাস করুন, বা -1 পুনরাবৃত্তি অক্ষম করতে। লিঙ্ক - বিকাশকারী.অ্যান্ড্রয়েড.
com/references/android/os/…

14

আমার প্রথম প্রয়োগে এটি কীভাবে করা যায় তা বোঝার জন্য আমি লড়াই করেছিলাম - আপনার নিম্নলিখিতগুলি রয়েছে তা নিশ্চিত করুন:

1) আপনার ডিভাইসটি কম্পনকে সমর্থন করে (আমার স্যামসাং ট্যাবলেটটি কাজ করে না তাই আমি কোডটি পুনরায় পরীক্ষা করে দেখি - মূল কোডটি আমার সিএম টাচপ্যাডে পুরোপুরি কাজ করে

2) আপনি কোডটি চালানোর অনুমতি দেওয়ার জন্য আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে অ্যাপ্লিকেশন স্তরের উপরে ঘোষণা করেছেন।

3) অন্যান্য আমদানির সাথে আপনার মেইনএকটিভিটি.জভাতে নিম্নলিখিত দুটিই আমদানি করেছেন: আমদানি android.content.Context; আমদানি android.os.Vibrator;

৪) আপনার কম্পনকে কল করুন (ইতিমধ্যে এই থ্রেডটিতে বিস্তৃতভাবে আলোচনা করা হয়েছে) - আমি এটি আলাদা ফাংশনে করেছি এবং কোডটিতে অন্য পয়েন্টগুলিতে এটি কল করেছি - আপনি যে চিত্রটির প্রয়োজন হতে পারে সেই কম্পনটি কল করতে আপনি কী ব্যবহার করতে চান তার উপর নির্ভর করে ( অ্যান্ড্রয়েড: একটি বোতামে দীর্ঘ ক্লিক করুন -> ক্রিয়া সম্পাদন করুন ) বা বোতাম শ্রোতা, বা এক্সএমএল ( ক্লিকযোগ্য চিত্র - অ্যান্ড্রয়েড ) এ সংজ্ঞায়িত হিসাবে ক্লিকযোগ্য বস্তু :

 public void vibrate(int duration)
 {
    Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibs.vibrate(duration);    
 }

10

অনুমতি ব্যবহার না করে কম্পন

আপনি যদি কোনও ব্যবহারকারী ক্রিয়ায় প্রতিক্রিয়া জানানোর জন্য কেবল একবার ডিভাইসটি কম্পন করতে চান। আপনি performHapticFeedback()একটি এর ফাংশন ব্যবহার করতে পারেন ViewVIBRATEম্যানিফেস্টে ঘোষণা করার জন্য এটির অনুমতি প্রয়োজন নেই doesn't

আপনার প্রকল্পের Utils.kt এর মতো কিছু সাধারণ শ্রেণিতে শীর্ষ স্তরের ফাংশন হিসাবে নিম্নলিখিত ফাংশনটি ব্যবহার করুন:

/**
 * Vibrates the device. Used for providing feedback when the user performs an action.
 */
fun vibrate(view: View) {
    view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}

এবং তারপরে এটি আপনার Fragmentবা অন্য যে কোনও জায়গায় ব্যবহার করুন Activity:

vibrate(requireView())

সরল!


2
ভাল এবং সহজ সমাধান!
ভাদাইহিয়েপ


4

আমি নিম্নলিখিত ব্যবহার পদ্ধতি ব্যবহার করি:

public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
    Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
    vibrator.vibrate(vibrateMilliSeconds);
}

অ্যান্ড্রয়েডমেনিস্ট ফাইলটিতে নিম্নলিখিত অনুমতিটি যুক্ত করুন

<uses-permission android:name="android.permission.VIBRATE"/>

আপনি যদি উপরে বর্ণিত বিভিন্ন ধরণের কম্পন (নিদর্শন / অনির্দিষ্ট) ব্যবহার করতে চান তবে আপনি ওভারলোডেড পদ্ধতিগুলি ব্যবহার করতে পারেন।


4

উপরের উত্তরটি খুব সঠিক তবে আমি এটি করার জন্য একটি সহজ পদক্ষেপ দিচ্ছি:

 private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000,  1000, 1000, 1000 };

  public void longVibrate(View v) 
  {
     vibrateMulti(THREE_CYCLES);
  }

  private void vibrateMulti(long[] cycles) {
      NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
      Notification notification = new Notification();

      notification.vibrate = cycles; 
      notificationManager.notify(0, notification);
  }

এবং তারপরে আপনার এক্সএমএল ফাইলটিতে:

<button android:layout_height="wrap_content" 
        android:layout_width ="wrap_content" 
        android:onclick      ="longVibrate" 
        android:text         ="VibrateThrice">
</button>

এটি সবচেয়ে সহজ উপায়।


3

প্যাটার্নস / ওয়েভগুলিতে কম্পন :

import android.os.Vibrator;
...
// Vibrate for 500ms, pause for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };

mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // API 26 and above
    mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
    // Below API 26
    mVibrator.vibrate(VIBRATE_PATTERN, 0);
}

যোগ

প্রয়োজনীয় অনুমতি এতে AndroidManifest.xml:

<uses-permission android:name="android.permission.VIBRATE"/>

3

আরও ধরণের সুরক্ষার জন্য কোটলিন আপডেট

আপনার প্রকল্পের কিছু সাধারণ শ্রেণিতে যেমন Utils.kt এ এটি শীর্ষ স্তরের ফাংশন হিসাবে ব্যবহার করুন

// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
    val vibrator = getSystemService(context, Vibrator::class.java)
    vibrator?.let {
        if (Build.VERSION.SDK_INT >= 26) {
            it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
        } else {
            @Suppress("DEPRECATION")
            it.vibrate(100)
        }
    }
}

এবং তারপরে এটিকে আপনার কোডের যে কোনও জায়গায় কল করুন:

vibrateDevice(requireContext())

ব্যাখ্যা

ব্যবহার Vibrator::class.javaকরা ব্যবহারের চেয়ে বেশি ধরণের নিরাপদString ধ্রুবক।

আমরা vibratorব্যবহার করে ন্যূনযোগ্যতার জন্য পরীক্ষা করে দেখি let { }, কারণ যদি ডিভাইসের জন্য কম্পন উপলব্ধ না হয় তবে vibratorতা হবেnull

এতে অবচয়কে দমন করা ঠিক আছে else , কারণ সতর্কতাটি নতুন এসডিকে থেকে।

আমাদের কম্পন ব্যবহার করার জন্য রানটাইমের সময় অনুমতি চাইতে হবে না। তবে আমাদের এটিকে AndroidManifest.xmlনিম্নলিখিত হিসাবে ঘোষণা করতে হবে :

<uses-permission android:name="android.permission.VIBRATE"/>

2

এটা ব্যবহার কর:

import android.os.Vibrator;
     ...
     Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     // Vibrate for 1000 milliseconds
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE));
     }else{
     //deprecated in API 26 
            v.vibrate(1000);
     }

বিঃদ্রঃ:

AndroidManLive.xML ফাইলে অনুমতি অন্তর্ভুক্ত করতে ভুলবেন না:

<uses-permission android:name="android.permission.VIBRATE"/>

1

আপনি ডিভাইস এবং এর কাজটি কম্পন করতে পারেন

   Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
           v.vibrate(100);

অনুমতি প্রয়োজন তবে রানটাইমের অনুমতি প্রয়োজন নেই

<uses-permission android:name="android.permission.VIBRATE"/>

এই সমাধানটি
হ্রাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.