26

मैं एंड्रॉइड में एक मनोरंजन ऐप विकसित कर रहा हूं। मैं पृष्ठभूमि संगीत खेलना चाहता हूं, और मैं इसके लिए सेवा का उपयोग करना चाहता हूं। ऐप में 3 गतिविधियां हैं और संगीत सभी गतिविधियों में खेला जाना चाहिए। साथ ही, जब गतिविधि रोका जाता है, तो संगीत को रोकना चाहिए और नष्ट होने पर रोक दिया जाना चाहिए। क्या कोई मुझे बता सकता है कि इसे कैसे करना है ? कोई लिंक या उदाहरण?एंड्रॉइड पृष्ठभूमि संगीत सेवा

धन्यवाद।

उत्तर

48

सेवा

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

के बिना यह क्या आप मीडियाप्लेयर

Intent svc=new Intent(this, BackgroundSoundService.class); 
startService(svc); 

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.idil); 
     player.setLooping(true); // Set looping 
     player.setVolume(100,100); 

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

    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() { 

    } 
} 

Pl का उपयोग कर सेवाओं साथ यह कर के बारे में बहुत गंभीर हैं, तो प्रकट में इस सेवा को कॉल आसानी यकीन .BackgroundSoundService स्ट्रिंग

<service android:enabled="true" android:name=".BackgroundSoundService" /> 
+3

धन्यवाद है, कि वास्तव में मुझे मदद की! :) – rohit

+0

आपने सेवा को प्राथमिकता क्यों दी है जिसे नियंत्रित करना है। ? – rohit

+0

धन्यवाद! ठीक काम करता है लेकिन मुझे इस code.in के साथ कोई समस्या है। मेरे आवेदन में मेरे पास कई गतिविधियां हैं लेकिन मैंने ऑन() में फिनिश() को घोषित किया है।मैं इरादों के माध्यम से बीजीएम खेलना चाहता हूं लेकिन इरादा कॉल पर रोक लगाता है और सेवा बंद हो जाती है (ऑनपोज़ विधि में सीज़ फिनिश विधि)। क्या आपके पास कोई समाधान है? – Hassy31

6

इस विषय के बारे में HelloAndroid पर इस विषय पर एक उत्कृष्ट ट्यूटोरियल है। असल में यह Google पर पहली हिट थी। आपको यहां पूछने से पहले गुगल करने की कोशिश करनी चाहिए, क्योंकि यह अच्छी प्रथा है।

4

मैं इसे चलाने के लिए समस्या थी के अंत में कोई जगह नहीं है बनाओ और मैं एमपी 3 स्रोत के साथ इसे चलाने के लिए कुछ परिवर्तन करना। यहां BackfrounSoundService.java फ़ाइल है। मान लें कि मेरी एमपी 3 फ़ाइल मेरे फोन में मेरे एसडीकार्ड में है।

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(); 
     Log.d("service", "onCreate"); 
     player = new MediaPlayer(); 
     try { 
      player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     player.setLooping(true); // Set looping 
     player.setVolume(100, 100); 

    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("service", "onStartCommand"); 
     try { 
      player.prepare(); 
      player.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return 1; 
    } 

    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() { 

    } 
} 
6

@ Synxmax का जवाब, जब एक Service और MediaPlayer वर्ग का उपयोग कर सही है, लेकिन आप भी इस, काम करने के लिए तो जैसे प्रकट में Service घोषित करने के लिए की जरूरत है: बहुत देर हो चुकी

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

रास्ता यहां पार्टी के लिए, लेकिन मैं अभी भी अपना $ 0.02 जोड़ूंगा, Google ने सार्वभौमिक संगीत प्लेयर नामक एक निशुल्क नमूना जारी किया है जिसके साथ आप सभी एंड्रॉइड प्लेटफार्मों (ऑटो, घड़ी, मोबाइल, टीवी ..) में संगीत स्ट्रीम करना सीख सकते हैं। यह खेलने के लिए सेवा का उपयोग करता है पृष्ठभूमि में संगीत, इसे बहुत उपयोगी जांचें। यहाँ परियोजना
https://github.com/googlesamples/android-UniversalMusicPlayer

1

START_STICKY ध्वज के साथ एक अग्रभूमि सेवा बनाने के लिए लिंक भी है।

@Override 
public int onStartCommand(Intent startIntent, int flags, int startId) { 
    if (startIntent != null) { 
     String action = startIntent.getAction(); 
     String command = startIntent.getStringExtra(CMD_NAME); 
     if (ACTION_CMD.equals(action)) { 
      if (CMD_PAUSE.equals(command)) { 
       if (mPlayback != null && mPlayback.isPlaying()) { 
        handlePauseRequest(); 
       } 
      } else if (CMD_PLAY.equals(command)) { 
       ArrayList<Track> queue = new ArrayList<>(); 
       for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) { 
        queue.add((Track) Parcels.unwrap(input)); 
       } 
       int index = startIntent.getIntExtra(ARG_INDEX, 0); 
       playWithQueue(queue, index); 
      } 
     } 
    } 

    return START_STICKY; 
} 

यह तो आप bindService का उपयोग करके सेवा बाध्य कर सकते हैं और सेवा ठहराव बनाने/संगत गतिविधि जीवन चक्र तरीकों से रोकने के लिए कुछ संगीत

Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java) 
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks) 
intent.putExtra(MusicService.ARG_INDEX, position) 
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY) 
activity.startService(intent) 

खेलने के लिए किसी भी गतिविधि से कहा जा सकता है।

यहाँ एक अच्छा ट्यूटोरियल के बारे में Playing music in the background on Android