برای مدیریت کلیدهای Volume (دکمههای کم و زیاد کردن صدا)، بایستی از Broadcat Receiver استفاده کرد. البته میتوان با Ovvirde کردن متدهای خاصی در داخل اکتیوتی نیز این کار را انجام داد؛ ولی هدف این است که در خارج از اکتیویتی و در بکگراند نیز بتوانیم فشرده شدن این کلیدها را تشخیص دهیم. که بدین منظور، از Boardcast استفاده میشود.
مراحل انجام کار
1- به Android Manifest رفته و کد زیر را بین تگ Application قرار دهید:
<receiver android:name=".MyBroadcastReceiver" > <intent-filter> <action android:name="android.media.VOLUME_CHANGED_ACTION" /> </intent-filter> </receiver>
همانطور که میبینید، برای این کار از اکشن android.media.VOLUME_CHANGED_ACTION استفاده شده است.
2- در داخل پکیج اصلی، یک کلاس به نام MyBroadcastReceiver (نامی که در منیفت مشخص کردیم) ایجاد کرده و آن را به صورت زیر پیاده کنید:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.KeyEvent; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE"); Log.i("FK", "Volume: " + volume); } }
همانطور که میبینید، در داخل متد onReceive، مقدار صدا را به داخل متغیر volume ریخته و سپس به صورت لاگ چاپ کردهایم.
تشخیص دکمه بالا و پایین
به خاطر نبودن EXTRA_KEY_EVENT ، روشی که برای تشخیص دکمه استفاده میشود به این صورت است:
- آخرین مقدار volume را در جایی نگهداری میکنیم؛ مثلا از Preferences ها میتوان استفاده کرد.
- در داخل Broadcast ، هربار که onReceive اجرا میشود مقدار volume گرفته شده را با مقدار قدیمی بررسی میکنیم.
اگر زیاد باشد، یعنی دکمهی زیاد کردن فشرده شده است و بالعکس.
اگر با مقدار قدیمی برابر باشد چه باید کرد؟! (جوابش ساده است، فکر کنید) - در نهایت، مقدار جدید صدا را ذخیره میکنیم تا دفعهی بعد بررسی کنیم.
اجرا نشدن این کد در زمان قفل بودن گوشی
احتمالا اندروید به دلیل مسائل امنیتی، اجازه کار کردن Broadcast Receiver را در زمان قفل بودن به گوشی نمیدهد!! اگر دوستان روشی بلد هستند یا پیدا کردند، در نظرات مطرح کنند تا بقیه هم بدانند.
البته خودم در بررسی کوتاهی که انجام دادم، روشی پیدا کردم که مقدار زیادی از باتری مصرف میکند؛ به این صورت که یک مدیاپلیر را در بکگراند، با میزان صدای 0 اجرا کرده و از Listener های مدیاپلیر برای بررسی فشرده شدن دکمه استفاده میکنیم! و خب طبیعتا میدانید که موقع قفل بودن گوشی، اگر آهنگی در حال پخش باشد، میتوانید صدا را کم و زیاد کنید.
با سلام و خسته نباشید
من میخوام با فشار دادن دکمه های ولوم در داخل برنامه یکسری کد که من میخوام اجرا بشه می لطفا اگه میتونید کمک کنید با تشکر
سلام. خب تو این آموزش هم همینو توضیح دادیم که! 😀