View Full Version : کمک فوری در پخش اهنگ در برنامه اندروید
mortezarezaei3333
شنبه 09 اردیبهشت 1396, 11:20 صبح
سلام دوستان یه کمک فوری لطفا
یه برنامه دارم که یه اهنگ سراسری پخش میکنه
میخوام وقتی کاربر دکمه home گوشی رو میزنه تو هر کدوم از اکتیویتی ها اهنگ قطع بشه(همون رویداد onpause) که این باعث میشه حتی وقتی بخوام از یه اکتیویتی به یه اکتیویتی دیگه برم هم اهنگ قطع بشه که من میخوام ادامه پیدا کنه و فقط هنگام زدن دکمه هوم قطع بشه خیلی تلاش کردم به نتیجه ای نرسیدم
لطفا نگید تاپیک تکراریه چون هیچ جوابی براش پیدا نکردم
spiderman200700
شنبه 09 اردیبهشت 1396, 12:32 عصر
سلام.
شما باید یک سرویس ایجاد کنید و آهنگ رو در سرویس اجرا کنید که این کار باعث میشه وقتی بین اکتیویتی ها دارید جابه جا میشید آهنگ قطع نشه.
بعد باید یه listener برای دکمه home تعریف کنید و توش آهنگ رو قطع کنید
mortezarezaei3333
یک شنبه 10 اردیبهشت 1396, 10:25 صبح
سلام.
شما باید یک سرویس ایجاد کنید و آهنگ رو در سرویس اجرا کنید که این کار باعث میشه وقتی بین اکتیویتی ها دارید جابه جا میشید آهنگ قطع نشه.
بعد باید یه listener برای دکمه home تعریف کنید و توش آهنگ رو قطع کنید
سرویسم رو نوشتم فقط میشه رواهنمایی کنید برای نوشتن listener دکمه home
ممنون میشم واقعا
mortezarezaei3333
یک شنبه 10 اردیبهشت 1396, 11:18 صبح
ببینید من این کد رو برای چندتا از دکمه های سخت افزاری نوشتم
که روی همه دکمه ها جواب میده جز دکمه home
روی گوشی هواوی تست کردم که دکمه home لمسی داره و روی دکه back که اونم لمسیه جواب داد
@Override
// رویداد دکمه های سخت افزاری برای زمانی که دکمه ها فشرده میشوند
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_HOME:
//رویداد برای دکمه home
Toast.makeText(this, "Pressed home button", Toast.LENGTH_SHORT).show();
stopService(new Intent(getBaseContext(), myservice.class));
return true;
case KeyEvent.KEYCODE_BACK:
//رویداد برای دکمه سخت افزاریback
Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();
return true;
//رویداد برای دکمه آپ ولوم
case KeyEvent.KEYCODE_VOLUME_UP:
Toast.makeText(this, "VOLUME_UP key pressed", Toast.LENGTH_SHORT).show();
stopService(new Intent(getBaseContext(), myservice.class));
return true;
//رویداد برای دکمهDownولوم
case KeyEvent.KEYCODE_VOLUME_DOWN:
Toast.makeText(this, "VOLUME_DOWN key pressed", Toast.LENGTH_SHORT).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
spiderman200700
یک شنبه 10 اردیبهشت 1396, 14:40 عصر
من خودم اینجوری فشره شدن دکمه home رو تشخیص میدم.
HomeWatcher mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
@Override
public void onHomePressed() {
// do something here...
}
@Override
public void onHomeLongPressed() {
}
});
mHomeWatcher.startWatch();
اینم کلاس HomeWatcher
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
public class HomeWatcher {
static final String TAG = "hg";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerRecevier mRecevier;
public HomeWatcher(Context context) {
mContext = context;
mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
mRecevier = new InnerRecevier();
}
public void startWatch() {
if (mRecevier != null) {
mContext.registerReceiver(mRecevier, mFilter);
}
}
public void stopWatch() {
if (mRecevier != null) {
mContext.unregisterReceiver(mRecevier);
}
}
class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS) ) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
mListener.onHomePressed();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
mListener.onHomeLongPressed();
}
}
}
}
}
}
}
spiderman200700
یک شنبه 10 اردیبهشت 1396, 18:27 عصر
سلام.
شما باید یک سرویس ایجاد کنید و آهنگ رو در سرویس اجرا کنید که این کار باعث میشه وقتی بین اکتیویتی ها دارید جابه جا میشید آهنگ قطع نشه.
بعد باید یه listener برای دکمه home تعریف کنید و توش آهنگ رو قطع کنید
در تصحیح این پست:
البته چون کلاس Application هم ذاتا یک سرویسه، میتونید آهنگ رو در این کلاس هم اجرا و قطع کنید که نسبت به ایجاد کردن سرویس کار کمتری میبره. البته یک سری محدودیت های ماندگاری در حافظه داره که در مورد شما فکر نمی کنم مشکلی ایجاد کنه.
mortezarezaei3333
یک شنبه 10 اردیبهشت 1396, 21:22 عصر
ببخشید من در این تعاریف OnHomePressedListener onHomePressed onHomeLongPressed به مشکل خوردم و اندروید استودیو نمیشناسه نسخه 2.2
کدوم کتابخونه رو باید بارگذاری کنم؟
بازم ممنون بخاطر راهنماییاتون
spiderman200700
یک شنبه 10 اردیبهشت 1396, 22:19 عصر
خیلی واضحه چیه. بازم براتون مینویسم:
public interface OnHomePressedListener {
public void onHomePressed();
public void onHomeLongPressed();
}
mortezarezaei3333
دوشنبه 11 اردیبهشت 1396, 21:23 عصر
جون داداش واقعا توقعت از یه تازه کار زیاده.
ولی انصافا دمت گرم لایک داری هوارتا :قلب::قلب::قلب::قلب::قلب::قلب:: لب::قلب:
spiderman200700
سه شنبه 12 اردیبهشت 1396, 15:29 عصر
قربونت. موفق باشی :چشمک:
tux-world
سه شنبه 12 اردیبهشت 1396, 21:42 عصر
در تصحیح این پست:
البته چون کلاس Application هم ذاتا یک سرویسه، میتونید آهنگ رو در این کلاس هم اجرا و قطع کنید که نسبت به ایجاد کردن سرویس کار کمتری میبره. البته یک سری محدودیت های ماندگاری در حافظه داره که در مورد شما فکر نمی کنم مشکلی ایجاد کنه.
این اشتباه هستش. این کلاس یک کلاس پایه برای وضعیتهای مختلف اپلیکیشن هستش که به صورت سراسری تعریفی که شده رو نگه داری میکنه و همه جای برنامه میتونید بهش رفرنس بدید
/**
* Base class for maintaining global application state. You can provide your own
* implementation by creating a subclass and specifying the fully-qualified name
* of this subclass as the <code>"android:name"</code> attribute in your
* AndroidManifest.xml's <code><application></code> tag. The Application
* class, or your subclass of the Application class, is instantiated before any
* other class when the process for your application/package is created.
*
* <p class="note"><strong>Note: </strong>There is normally no need to subclass
* Application. In most situations, static singletons can provide the same
* functionality in a more modular way. If your singleton needs a global
* context (for example to register broadcast receivers), include
* {@link android.content.Context#getApplicationContext() Context.getApplicationContext()}
* as a {@link android.content.Context} argument when invoking your singleton's
* <code>getInstance()</code> method.
* </p>
*/
spiderman200700
چهارشنبه 13 اردیبهشت 1396, 10:28 صبح
این اشتباه هستش. این کلاس یک کلاس پایه برای وضعیتهای مختلف اپلیکیشن هستش که به صورت سراسری تعریفی که شده رو نگه داری میکنه و همه جای برنامه میتونید بهش رفرنس بدید
نه اشتباه نیست.
شما یه کم بررسی کن متوجه میشی. درسته که اسم کلاس Application با کلاس Service متفاوته و گوگل هیچ جا به تشابه این دو کلاس اشاره کرده، ولی اگه شما سورس اندروید رو بررسی کنی، متوجه میشی که این دو کلاس بسیار شبیه به هم پیاده سازی شدن و بازم اگه سورس اندروید رو خوب بررسی کنی، متوجه میشی که اندروید وقتی میخواد یک برنامه رو اجرا کنه در واقع کلاس اپلیکیشن اون برنامه رو به عنوان یک نوع سروریس اجرا می کنه.این یعنی هر اپلیکیشن در قالب یک نوع سرویس در حالت اجرا قرار می گیره.
در ضمن هر دو کلاس از کلاس ContextWrapper مشتق شدن و فقط رابط ComponentCallbacks2 رو پیاده سازی کردن که نشان دهنده تشابه ذات هر دو کلاس هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.