2013-02-23 16 views
10

मैं अपने एंड्रॉइड ऐप में एक बटन जोड़ने की कोशिश कर रहा हूं जहां बटन टैप होने पर एमपी 3 चलाता है। मुझे यह काम मिल गया है, लेकिन मीडियाप्लेयर ऑब्जेक्ट को रिलीज़ करने के किसी भी तरीके के बिना - इसलिए गतिविधि छोड़ने के बाद भी यह खेलता रहता है। यदि मैं अपनी प्रतिक्रिया() विधि के बाहर MediaPlayer ऑब्जेक्ट को प्रारंभ करता हूं (बटन दबाए जाने पर क्या कहा जाता है) तो गतिविधि को खोले जाने पर ऐप को मजबूर करने का कारण बनता है। लेकिन अगर मैं MediaPlayer को प्रतिक्रिया() विधि में प्रारंभ करता हूं तो मैं mplayer.release का उपयोग ऑनक्यूइट() विधि में नहीं कर सकता। मैं यहाँ क्या नहीं देख रहा हूँ?Android MediaPlayer को ठीक से कैसे जारी करें

public void react(View view) { 
    MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
    mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

स्पष्ट कारणों के लिए काम नहीं करता और

MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
public void react(View view) { 
      mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

यह पास के लिए मजबूर करने का कारण बनता है।

अद्यतन: यहां पूरी जावा कक्षा है।

public class ToBeOrNot extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_to_be_or_not); 

     } 
MediaPlayer mediaPlayer; 

public void react(View view) { 
     mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
     mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    //getMenuInflater().inflate(R.menu.activity_to_be_or_not, menu); 
    // Locate MenuItem with ShareActionProvider 
    return true; 
} 

} 

मुझे लगता है कि यह अपेक्षाकृत स्वयं व्याख्यात्मक है। जब कॉल किया जाता है, तो यह कुछ टेक्स्ट प्लस बटन दिखाता है जब टैप किया जाता है तो रिकॉर्डिंग शुरू होती है। जब कोई बैक बटन हिट करता है, तो उसे पिछली गतिविधि पर वापस जाना चाहिए और रिकॉर्डिंग को रोकना चाहिए। मेरी मदद करने के लिए धन्यवाद!

+0

यदि आपका अन्य प्रश्न उत्तर दिया गया था और आप एक नया सवाल पूछना चाहते हैं, तो आपको एक नया प्रश्न खोलना चाहिए, बस इसे संपादित नहीं करना चाहिए। – Geobits

+0

ठीक है, मैं करूँगा, बस बहुत सारे प्रश्न नहीं बनाना चाहता था। – dacelbot

+0

यहां नया प्रश्न है। http://stackoverflow.com/questions/15046888/android-mediaplayer-causing-force-close-onquit यदि आपको उत्तर देने जैसा लगता है तो यह बहुत अच्छा होगा, धन्यवाद। या कोई और हो सकता है, या मैं खुद जवाब के साथ आ सकता है। – dacelbot

उत्तर

14

आप सभी विधियों के बाहर mediaplayer ऑब्जेक्ट को प्रारंभ नहीं कर सकते हैं। यदि आप करते हैं, तो यह उस संदर्भ का उपयोग करने का प्रयास करता है जो अभी तक नहीं बनाया गया है।

MediaPlayer mediaPlayer; 

public void react(View view) { 
    mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
    mediaPlayer.start(); 
} 

protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

इसके अलावा, मैं variable scope in Java पर पढ़ने की सलाह देते हैं: आप (विधि के बाहर) एक वर्ग चर के रूप में यह ऐलान करते हैं और इसके अंदर प्रारंभ करने की जरूरत है।

+0

आह, बहुत बहुत धन्यवाद! वह वास्तव में गूंगा गलती थी। मुझे एहसास हुआ कि मुझे वह परेशानी थी जो मुझे परेशानी थी, लेकिन मेरा दिमाग काम नहीं कर रहा था और मैं इसे ठीक करने के बारे में नहीं सोच सका। – dacelbot

+0

इसलिए मैंने आपका उदाहरण कॉपी किया और अब यह ठीक चलता है लेकिन जब मैं ध्वनि शुरू करने वाले बटन को दबाए रखने के बाद बैक बटन दबाता हूं, तो ऐप फोर्स बंद हो जाता है। कोई विचार? – dacelbot

+0

इसके साथ कई संभावित समस्याएं हैं। मैं एक और सवाल बनाने का सुझाव दूंगा, यह समझाऊंगा कि आप सभी जीवन चक्र तरीकों में क्या कर रहे हैं (बनाएं, फिर से शुरू करें, रोकें, रोकें, आदि)। साथ ही, समझाएं कि आप वास्तव में क्या करना चाहते हैं। – Geobits

0

यह मेरे लिए अच्छी तरह से काम किया।

public class MainActivity extends AppCompatActivity { 

    MediaPlayer mediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mediaPlayer = MediaPlayer.create(this, R.raw.beep_warning); 

     final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox); 
     checkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (checkBox.isChecked()) { 
        mediaPlayer.start(); 
        mediaPlayer.setLooping(true); 
       } 
       else{ 
        mediaPlayer.pause(); 
       } 
       } 


     }); 

    } 
    @Override 
    protected void onStop() { 
     super.onStop(); 
     mediaPlayer.release(); 
    } 
संबंधित मुद्दे