انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
پخش ناخواسته آهنگ وقتی صفحه نمایش خاموش می شود (اندروید)

پخش ناخواسته آهنگ وقتی صفحه نمایش خاموش می شود (اندروید)

#1
با سلام .
ما یه app  داریم با چندتا اکتیویتی که واسش تعریف کردیم . وارد هر اکتیویتی که میشیم یک فایل صوتی چندثانیه ای در پس زمینه اکتیویتی اجرا می شه :
در هر اکتیویتی داخل متد onCreate اش کدهای پخش آهنگ قرار داده شده تا همزمان با اجرای اکتیویتی فایل صوتی چندثانیه ای هم اجرا بشه.
حالا مشکل اینجاست :
وقتی صفحه نمایش کاربر خاموش یا قفل میشه بعد از حدود نزدیک به 1 دقیقه فایل صوتی آخرین اکتیویتی که باز بوده اجرا میشه !
بعضی مواقع هم اگه خود کاربر صفحه نمایش گوشیش رو روشن کنه (مثلا دکمه home رو بزنه) دوباره فایل صوتی آخرین اکتیویتی اجرا میشه و میخونه!

گویا دلیلش اینه که با روشن کردن صفحه نمایش گوشی یا باز کردن قفل گوشی متد onCreate مجدداً اجرا میشه و باعث میشه فایل صوتی هم اجرا بشه...
حالا سوال من اینه که چه راه حلی وجود داره که در این حالت از اجرای مجدد متد onCreate  جلوگیری کنیم ؟
 
خودم از متد onPause برای اکتیویتی استفاده کردم و دستور ()finish رو داخلش قرار دادم تا هر وقت گوشی صفحه نمایشش خاموش میشه یا قفل میشه اون اکتیویتی رو kill کنه،مشکلم برطرف میشه. ولی این کار جالب نیست . میخوام بدون kill شدن اکتیویتی پخش ناخواسته فایل صوتی دیگه اتفاق نیفته.

دوستان راه حلی سراغ دارین ؟
 *** بحث نکن ، به فکر راه حل باش  ***
پاسخ

پخش ناخواسته آهنگ وقتی صفحه نمایش خاموش می شود (اندروید)

#2
سلام.
(۱۳۹۴/۰۲/۱۸, ۱۰:۵۸ ق.ظ)'00Alireza00' نوشته: گویا دلیلش اینه که با روشن کردن صفحه نمایش گوشی یا باز کردن قفل گوشی متد onCreate مجدداً اجرا میشه و باعث میشه فایل صوتی هم اجرا بشه...

 

نباید این طور باشد. چون شاید مثلا برنامه اندروید ما یک بازی باشه و قرار نیست که اگر کاربر موقتا صفحه نمایش گوشی را خاموش کرد و بعد دوباره به سراغ گوشی رفت، مجبور شود که مرحله را از اول آغاز کند. البته بازی هایی هستند که در روش onPause و onStop ، بازی را pause کرده و پیشرفت کاربر را ذخیره می کنند، ولی در کل، این موردی که شما تذکر دادید، نباید وجود داشته باشد. 
در واقع ما وقتی با خاموش کردن صفحه نمایش، یک برنامه اندروید را ترک می کنیم، با روشن کردن دوباره صفحه نمایش (و عبور از قفل، با رمز یا ...)، دوباره برنامه اندروید را در همان حالت می بینیم (منظورم برای برنامه هایی مثل بازی یا ... است که قبلا کاربر در آنها عملیات هایی را انجام داده، حتی اگر برای آنها حالت pause در نظر گرفته نشده باشد).

اکنون ببینیم که چه مواردی ممکن است که این حالت را به وجود بیاورند :

1- وقتی ما بدون خارج شدن از Activity ، دیگر آن را نمی بینیم (حالت stop)، یا بخشی از آن را در زیر Activity فعلی می بینیم (حالت pause)، معنی آن این است که Activity در پس زمینه است (یعنی سیستم عامل اندروید، اطلاعات Activity را در RAM نگه داشته). اکنون اگر سیستم عامل اندروید، RAM کم بیاورد، تعدادی از Activity ها در پس زمینه را به طور کامل می بندد (kill). بنابراین اگر بخواهیم دوباره وارد آن شویم، Activity از نو اجرا می شود (اجرای دوباره روش onCreate). اما این حالت، برای مورد شما اتفاق نیفتاده، زیرا اگر Activity توسط سیستم عامل kill شده بود، با ورود دوباره به برنامه اندروید، دوباره همان Activity را نمی دیدیم (یا اصلا کل برنامه اندروید توسط سیستم عامل بسته شده بود، یعنی kill کردن همه Activity های برنامه اندروید).

2- با چرخش گوشی، Activity از نو اجرا می شود. ممکن است که شما مثلا در حالت portrait (عمودی)، صفحه نمایش را خاموش کردید و بعد در حالت landscape (افقی) آن را روشن نموده اید، بنابراین به محض روشن شدن صفحه نمایش، Activity از نو اجرا می شود. راه حل آن هم، حفظ اطلاعات Activity در هنگام چرخش است :

کلید شماره 270

مورد دیگری به ذهنم نمی رسد. اگر دوستان مورد دیگری را تجربه کرده اند، خوشحال می شوم که تذکر بدهند.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط 00Alireza00 ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان