پلی کردن آهنگ
سلام دوستان
من در برنامه ام یک سری فایل صوتی دارم که بصورت لیست زیر هم در لیست ویو می آیند و زمانی که بر روی یکی از آنها کلیک شد پلی می شود.
مشکلی که دارم اینه که نمی دونم چطوری باید کار کنم که وقتی این لیست رو بالا پایین می کنم و روی گزینه پلی همون آهنگی که در حال پخش است کلیک می کنم متوقفش کنم، زمانی که این کار رو می کنم مجددا آهنگ پلی می شود و دیگر نمی شود قطعش کرد مگر کامل برنامه رو ببندیم! همچنین چطوری زمانی که کاربر پلی می کند قادر به مدیریت پلی در نوتیفیکیشن باشد.
احتمالا باید یک سرویس بنویسم که کار پخش رو انجام دهد. این سرویس باید احتمالا با همچین کدهایی کار کند:
servise.play();
servise.pause();
service.stop();
دوستانی که تجربه کار با پلیر رو دارید ممنون می شم راهنمایی کنید.
سلام دوست عزیز
بنده دقیقا متوجه نشدم شما چه چیزی رو می خواهید چون ظاهرا قادر به اجرا اهنگ ها هستید و متوقف کردن ان ها نیز مشابه است به هر حال می توانید از روش زیر استفاده کنید
ابتدا یک کلاس به اسم 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/
مشکلی که اجرا نمی شد رو حل کردم, فراموش کرده بودم در منیفست تعریفش کنم, به این شکل تعریفش کردم مشکلش حل شد و آهنگ پخش شد:
<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)
مگر نباید در سرویس زمانی که برنامه بسته هم شد اجرا شود؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .