Arka plan müziği Android

Tamam, bu benim problemim. Ive'nin tüm zamanların arka planda müzik çalmak için medya oynatıcı oluşturmayı başardığı bir hizmet sınıfım var. İşte kod:

package com.test.brzoracunanje;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

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

    return null;
}
@Override
public void onCreate() {
   //TODO Auto-generated method stub
    super.onCreate();
       player = MediaPlayer.create(this, R.raw.test_cbr);
        player.setLooping(true);//Set looping
        player.setVolume(100,100);
        player.start();
}
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
}
public void onDestroy() {
   //TODO Auto-generated method stub
    super.onDestroy();
}

protected void onNewIntent() {
    player.pause();
}
}

Ama şimdi HOME veya BACK düğmesini tıkladığımda sorun yaşıyorum. Hala müzik çalıyor. Bu sorunu nasıl çözecek bilen var mı?

Ve burada kod, müzik çalmak istediğim sınıfta bu hizmeti nasıl aradığım;

  Intent svc=new Intent(this, BackgroundSoundService.class);
    startService(svc);
7
Sorunun nerede olduğunu göremiyorum ... Her zaman arka planda müzik çalmak istemedin mi?
katma yazar m0skit0, kaynak
Uygulama çalışırken her zaman oynamak istiyorum, ancak Home düğmesine bastığımda hala müzik çalıyor.
katma yazar Zookey, kaynak

8 cevap

Uygulamanız için yalnızca arka plan müziği çalmak istiyorsanız, bunu uygulamanızdan başlatılan bir iş parçacığında veya AsyncTask sınıfını sizin yerinize yapmak için kullanın.

Hizmet kavramı arka planda çalışmaktır; Arka plan ile, anlam genellikle uygulama arayüzünüz GÖRME DEĞİLDİR olduğunda. Doğru, tıpkı sizin sahip olduğunuz gibi kullanılabilir (eğer bunu durdurmayı unutursanız), ancak doğru değildir ve kullanmamanız gereken kaynakları tüketir.

Görevlerinizi etkinliğinizin arka planında peforme etmek isterseniz AsyncTask'ı kullanın.

Bu arada, onStart kullanımdan kaldırıldı. Hizmetleri kullanırken, onStartCommand komutunu uygulayın.

GÜNCELLEME:

Bu kodun sizin için çalışacağını düşünüyorum. Bu sınıfı ekleyin (Etkinlik sınıfınızda kapalı).

public class BackgroundSound extends AsyncTask {

    @Override
    protected Void doInBackground(Void... params) {
        MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); 
        player.setLooping(true);//Set looping 
        player.setVolume(1.0f, 1.0f); 
        player.start(); 

        return null;
    }

}

Şimdi, müziği kontrol etmek için, BackgroundSound nesnesini anonim olarak oluşturmak yerine kaydedin. Aktivitenizde bir alan olarak bildirin:

BackgroundSound mBackgroundSound = new BackgroundSound();

Etkinliğinizin onResume yönteminde şunları başlatın:

public void onResume() {
    super.onResume();
    mBackgroundSound.execute(null);
}

Ve etkinliğinizin onPause yönteminde şunu durdurun:

public void onPause() {
    super.onPause();
    mBackgroundSound.cancel(true);
}

Bu çalışacak.

24
katma
pastebin.com/jzw2j9WR İşte sabit olanı. Çalışması gerektiğini düşünüyorum, ama MediaPlayer'ı hiç kullanmadım bu yüzden anlatamam. MediaPlayer belgelerini okumanızı öneririm developer.android.com/ referans/android/media/& hellip; neyin var olduğunu/yanlış yaptığınızı anlayabilirsiniz.
katma yazar Jong, kaynak
Şimdi yapacak .. Birkaç dakika içinde düzenleyin.
katma yazar Jong, kaynak
Tam kaynak kodu pastebin'e yaz ve görmeme izin ver.
katma yazar Jong, kaynak
Sesleri çalmak istediğiniz etkinlik sınıfınızda. İçsel bir sınıf olmalı. Aktivite adınıza "Etkinliğinizi" (Kodda) değiştirmeyi unutmayın.
katma yazar Jong, kaynak
Bir kod ile düzenleyeceğim.
katma yazar Jong, kaynak
Aynı aktiviteyi onResume'den başlattıysanız, sonsuz bir döngüye sebep olacaktır. Kodu düzeltildi. Ve gerçekten developer.android.com/guide/topics/fundamentals/activities adresini okumalısınız .H ve zwnj; tml
katma yazar Jong, kaynak
MBackgroundSound'u etkinlik sınıfınızda bir alan olarak bildirdiğinizden emin olun.
katma yazar Jong, kaynak
Doğru, Activity.onPause ve onResume'i aramayı unuttum. Ama hadi ... bu temeldir, müzik çalarken Etkinlik belgelerini okumalısınız ... Düzeltildi.
katma yazar Jong, kaynak
İşte bu etkinliğin tam kodu: pastebin.com/nzU674FZ
katma yazar Zookey, kaynak
Onu tamir ettim ve çalıştırdım, ama hala aynı bok, HOME düğmesine bastığımda müzik hala çalıyor. Bunun için delireceğim.
katma yazar Zookey, kaynak
Onynume() yöntemi, AsyncTask türü için tanımlanmamıştır.
katma yazar Zookey, kaynak
Etkinliği OnPause ve onResunme altında startActivity ile çağırmayı denedim, ancak çalışmaz. Evet, bunu temel biliyorum ama ben yeniyim.
katma yazar Zookey, kaynak
Şimdi bu hatayı aldım 10-28 17: 52: 17.733: ERROR/AndroidRuntime (225): java.lang.RuntimeException: Aktivite devam edemiyor {com.test.brzoracunanje/com.test.brzoracunanje.PocetnaActivi & zwnj; ty}: android.app.SuperNotCalledException: Etkinlik {com.test.brzoracunanje/com.test.brzoracunanje.PocetnaActivi & zwnj; ty} super.onResume() öğesine çağrı yapmadı
katma yazar Zookey, kaynak
Aktivite sınıfı altındaResResume ve onPause yöntemini uygularken mBackgroundSound'un çözülemeyeceğini söylüyor.
katma yazar Zookey, kaynak
Teşekkürler cevabınızı kabul edeceğim. :)
katma yazar Zookey, kaynak
Test ettim. Uygulamayı başlattığımda sesler çalıyor, ancak HOME düğmesine bastığımda sorun, uygulama kapalıyken hala müzik çalıyor mu?
katma yazar Zookey, kaynak
Sadece bir soru. Yeni sınıf BackgroundSound yapmam gerekiyor mu? ya da bunu BackgroundSoundService sınıfına mı yoksa bunu ana etkinlik sınıfım içine mi koydum?
katma yazar Zookey, kaynak
Söylediklerinizi yapan kodumu düzeltebilir misin?
katma yazar Zookey, kaynak
Uygulama boyunca müzik çalmak istiyorum. Uygulama sınıfında başlayayım mı?
katma yazar Prashanth Debbadwar, kaynak
@Jakalta dikkatli olun İptal ile hemen çağrılmayabilir. Muhtemelen oluşturulmuş sınıfta player.Stop() ve player.release() yöntemini kullanarak onCancelled yöntemine getirmeniz gerekir. Ve sonra, iptal etmeden önce bu yöntemi çağır.
katma yazar jmacedo, kaynak

AsyncTasks sadece çok kısa klipler için iyidir, ancak bir müzik dosyasıysa aşağıdaki gibi sorunlarla karşılaşabilirsiniz:

  • Müziği ortada durduramaz/durduramazsınız. Benim için bu gerçek bir problem.

İşte AsyncTasks hakkında Android geliştiricileri sayfasından birkaç satır var

AsyncTasks kısa bir süre için ideal olarak kullanılmalıdır (birkaç saniye   En fazla.) Eğer uzun süre boyunca iş parçacığı çalıştırmaya ihtiyacınız varsa   zaman, tarafından sağlanan çeşitli API'leri kullanmanız önerilir.   Executor, ThreadPoolExecutor gibi java.util.concurrent paketi   ve FutureTask.

Şu anda diğer seçenekleri araştırıyorum ve çözümü bulduğumda cevabı güncelliyorum.

1
katma

Arka plan müziğini HOME veya BACK tuşuna basarak durdurmayı deneyin.

@Override
protected void onStop() {
    super.onStop();
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List services = activityManager
            .getRunningTasks(Integer.MAX_VALUE);
    boolean isActivityFound = false;

    if (services.get(0).topActivity.getPackageName().toString()
            .equalsIgnoreCase(getPackageName().toString())) {
        isActivityFound = true;//Activity belongs to your app is in foreground.
    }

    if (!isActivityFound) {
        if (player != null && player.isPlaying()) {
            player.release();
        }
    }
}
0
katma

Elbette, hizmetiniz arka planda çalışır ve arka plana gittiğinde etkinliğinizden elle durdurmanız gerekir.

0
katma
Manuel olarak nasıl durdurulur?
katma yazar Zookey, kaynak

(Kotlin) Ne yazık ki Jong'un cevabı benim için işe yaramadı, ben de dahil olmak üzere birkaç hata vardı: MediaPlayer olmadan sonlandırılmış serbest bırakılıyor ve sesin durdurulması ve başlatılması için bir gecikme. Bu yüzden başka birinin de aynı problemi olması durumunda yaptığım şekilde yayınlayacağım. BackgroundSound uygulamam hâlâ AsyncTask kullanıyor ve MediaPlayer ancak yuvalanmayan bir sınıftır.

class BackgroundSound : AsyncTask

Bu sınıfı Etkinlik sayfanızda kullanabilirsiniz:

private var backgroundSound: BackgroundSound? = null

override fun onResume() {
    super.onResume()
    backgroundSound = BackgroundSound()
    backgroundSound!!.execute(this)
}

override fun onPause() {
    backgroundSound?.cancel(true)
    super.onPause()
}
0
katma

Durma yönteminizde aşağıdaki kodu yazınız:

sistemi. çıkış (0);

Bu, medya oynatıcınızı, geri/ana ekran düğmesine bastığınızda veya uygulamayı kapattığınızda sonlandıracaktır.

0
katma

yes, u should stop the service when u press the home button . In OnPause(){} override method u should stop the music service. And inside the service in OnDestroy() method u please stop the media player. So now,pressing home calls onPause and onPause() -> stops the service and OnDestroy is executed in service and in odestroy() the mediaplayer is stopped and ur problem is fixed.

0
katma

OnDestroy() yöntemine player.stop() eklemeyi deneyin. Yardım etmeli.

0
katma