آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

پلی کردن آهنگ

SaeiD-as  8 سال پیش  8 سال پیش
+1 0

سلام دوستان

من در برنامه ام یک سری فایل صوتی دارم که بصورت لیست زیر هم در لیست ویو می آیند و زمانی که بر روی یکی از آنها کلیک شد پلی می شود.
مشکلی که دارم اینه که نمی دونم چطوری باید کار کنم که وقتی این لیست رو بالا پایین می کنم و روی گزینه پلی همون آهنگی که در حال پخش است کلیک می کنم متوقفش کنم، زمانی که این کار رو می کنم مجددا آهنگ پلی می شود و دیگر نمی شود قطعش کرد مگر کامل برنامه رو ببندیم! همچنین چطوری زمانی که کاربر پلی می کند قادر به مدیریت پلی در نوتیفیکیشن باشد.

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

 servise.play();
servise.pause();
service.stop();

دوستانی که تجربه کار با پلیر رو دارید ممنون می شم راهنمایی کنید.

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
علی  8 سال پیش
+1 0

سلام دوست عزیز

بنده دقیقا متوجه نشدم شما چه چیزی رو می خواهید چون ظاهرا قادر به اجرا اهنگ ها هستید و متوقف کردن ان ها نیز مشابه است به هر حال می توانید از روش زیر استفاده کنید

ابتدا یک کلاس به اسم  BackgroundService.java بسازید محتویات این کلاس به صورت زیر باشد 

بعد از ساخت کلاس زیر می توانید با سه دستور زیر اهنگ را شروع و یا متوقف کنید 

Intent Mymusic = new Intent(getApplication(),BackgroundSoundService.class);
startService(Mymusic);
stopService(Mymusic);
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

import your.main.package.R;

public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {

return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.to);// مسیر اهنگ
player.setLooping(true); // Set looping
player.setVolume(100,100);

}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return START_STICKY;
}

public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}

public void onStop() {

}
public void onPause() {

}
@Override
public void onDestroy() {
player.stop();
player.release();
}

@Override
public void onLowMemory() {

}
}
منبع : http://sapandiwakar.in/building-a-music-player-app-for-android-2/

0 0
سپاس ازتون، خب من با این کد شما یک فایل صوتی رو پلی کردم، زمانی که لیست را بالا و پایین می کنم مجددا آیکن آن آهنگ به شکل پلی در آمده است و وقتی روش لمس می کنم مجددا پخش می شود! چطوری بفهمم زمانی که آهنگی پلی شد کدام یک از آهنگ ها بوده است؟ تا از پخش مجددش جلوگیری کنم؟ (8 سال پیش)
+1 0
برای مدیریت لیست اهنگ های شما راه های مختلفی وجود دارد مثلا می توانید برای هر مورد لیست رشته یا داده ای تعریف کنید که نمایان گر اهنگ مخصوص ان باشد و ان را به کلاس بالا ارسال کند به این ترتیب در هر نقطه از برنامه شما می توانید اهنگ خاصی را اجرا کنید و برای متوقف کردن باید تابع stopService برای همان اهنگی که در حال پخش اجرا کنید وجود یک شرط با یک مقدار بولین نیز برای اینکه با یک کلیک قطع و وصل شود کفایت می کند برای اینکه به کلاس بالا خواندن مسیر اهنگ را بفهمانید در داخل کلاس اصلی یک فیلد استاتیک تعریف کنید به اسم public static int NameOfMusicبعد در هر کجا که لازم بود می توانید این متغییر را قبل از فراخوانی سرویس مقدار دهی کنید مقداری که باید بگیرد هم می تواند به صورت R.raw.musicname باشد یا شاید دوست داشته باشید از Uriاستفاده کنید در کل می توانید از هزاران روش بهینه تر استفاده کنید (8 سال پیش)
0 0
ببخشید من این کلاس رو ساخته ام و داخل onClick دکمه پخش G.context.startService(G.MyMusic) کرده ام ولی این سرویس اجرا نمی شه که نمیشه! لاگ هم گذاشته ام ولی اون هم اجرا نمی شه! میدونید ایراد کار کجاست؟ (8 سال پیش)
0 0
قاعدتا نمیشه رو هوا نظر داد چون من کد ها رو ندیدم منتهی چند احتمال هست یکی اینکه ٓمشکل از contex باشه دیگر اینکه مقدار عددی اهنگ (R.raw.X) به درستی ارسال نمی شود سوم اینکه مقدار G.myMusic اشکال دارد یا ممکنه به دلایلی کل کد اجرا نمیشه اگر با خطا رو به رو می شوید از بلاک try استفاده کنید و خطا مشاهده کنید (8 سال پیش)
0 0
مشکل از R.raw.X که قطعا نیست چون من لاگ هم گذاشته ام ولی اصلا اون لاگ اجرا نمی شود, کانتکس هم در داخل برنامه است و مشکلی تا بحال باهاش نداشته ام, خطایی هم نیست, بعد از اینکه سرویس استارت شد کدام یک از متدها باید حتما اجرا شود؟ من کدهامو براتون قرار می دم ببینید متوجه میشید ایرادش کجاست (8 سال پیش)
پاسخ به سوال 
SaeiD-as  8 سال پیش
0 0

مشکلی که اجرا نمی شد رو حل کردم, فراموش کرده بودم در منیفست تعریفش کنم, به این شکل تعریفش کردم مشکلش حل شد و آهنگ پخش شد:

 <service android:enabled="true" android:name="com.package.BackgroundService" />

حالا مشکلی که دارم این است که زمانی برنامه رو می بندم آهنگ نیز متوقف می شود! و ارور زیر را می دهد:

 java.lang.RuntimeException: Unable to start service com.package.BackgroundService@f424d31 with null:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027)
        at android.app.ActivityThread.-wrap17(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
           Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
'void android.media.MediaPlayer.start()' on a null object reference
        at eservat.novin_digital.com.eservat.music.BackgroundService.onStartCommand(BackgroundService.java:38)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3010)
        at android.app.ActivityThread.-wrap17(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

مگر نباید در سرویس زمانی که برنامه بسته هم شد اجرا شود؟


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .