2012-10-27 17 views
5

मैंने एक छोटा ऐप बनाया है जो AudioManager वर्ग का उपयोग कर संगीत स्ट्रीम को म्यूट/अनम्यूट करता है। असल में, यह तब तक काम करता है जब तक कि मैं एप्लिकेशन बंद नहीं करता। यानी मैंने चिल्लाया है, मैं ऐप बंद करता हूं, मैं ऐप को पुनरारंभ करता हूं और बटन स्ट्रीम को अनम्यूट नहीं करता है। मैंने नेट में खोज की है लेकिन कोई भी इस समस्या से नहीं मिला है।एंड्रॉइड में म्यूटिंग स्ट्रीम

यहाँ मेरी कोड है:

public class ControlloVolume extends Activity { 
ToggleButton tb_mute; 
Button btn_mute; 
AudioManager mAudioManager; 
boolean mute; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_controllo_volume); 

    tb_mute = (ToggleButton) findViewById(R.id.tb_mute); 
    btn_mute = (Button) findViewById(R.id.btn_mute); 
    mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

    if(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)==0){ 
     mute = true; 
     tb_mute.setChecked(mute); 
    }else{ 
     mute = false; 
     tb_mute.setChecked(mute); 
    } 

    } 

public void onButtonClicked(View view){ 
    if(!mute){ 
     mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 
     tb_mute.setChecked(true); 
     mute = true; 
    }else{ 
     mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, false); 
     tb_mute.setChecked(false); 
     mute = false; 
    } 
} 
+1

जब आप "करीबी" कहते हैं, तो क्या आपका मतलब है कि आपका ऐप नष्ट हो गया है या बस पृष्ठभूमि में रखा गया है? जब आप ऐप को पुनरारंभ करते हैं तो GetStreamVolume 0 वापस आता है? – Michael

उत्तर

0

पहले, सावधान रहना it's not recommended

बेहतर उपयोगकर्ता अनुभव के लिए, अनुप्रयोगों चाहिए onPause (में एक मौन धारा अनम्यूट) और onResume में फिर से मूक() अगर उचित।

लेकिन मुझे लगता है कि आप जानते हैं कि आप क्या कर रहे हैं, इसलिए हम यहां जाते हैं।

नोट setStreamMute

मूक आदेश ग्राहक प्रक्रिया मौत से सुरक्षित है पर डॉक्स से इस लाइन: अगर एक धारा पर एक सक्रिय मूक अनुरोध के साथ एक प्रक्रिया मर जाता है, इस धारा स्वतः अनम्यूट कर दिया हो जाएगा।

मैंने अपने डिवाइस पर जांच की है और वास्तव में, जब मैं अपनी गतिविधि से बाहर निकलता हूं, स्ट्रीम म्यूट रहता है। लेकिन जैसे ही मैं प्रक्रिया को मारता हूं, म्यूट चला जाता है। activity lifecycle पर एक नज़र डालें।

जैसा कि आपका वर्तमान दृष्टिकोण विश्वसनीय रूप से काम नहीं करेगा, आप foreground service लिख सकते हैं जो म्यूट ट्रिगर करेगा - आपकी गतिविधि से उस सेवा को शुरू करें। आपको शायद setStreamSolo की आवश्यकता होगी।

दो महत्वपूर्ण चीजें।

  1. Volume==0 औरसमान नहीं हैं। अर्थात। धारा में मात्रा == 0 हो सकती है लेकिन म्यूट नहीं हो सकती है। हालांकि अगर धारा म्यूट है, तो वॉल्यूम हमेशा 0
  2. म्यूट अनुरोध संचयी होते हैं। अर्थात। यदि आपने दो बार म्यूट सेट किया है, तो आपको दो बार अनम्यूट करना होगा - आपका कोड उस

एक साइड नोट के रूप में, इस ऐप के लिए आप शायद गतिविधि के बजाय विजेट का उपयोग करना चाहते हैं।


विषय बंद करें। यह आश्चर्य की बात है कि बहुत से लोगों को यह नहीं पता कि कैसे बुलियन काम करते हैं। और जैसा कि मैंने आपके नियामक जैसे कोड को देखा है, यहां थोड़ा सा सुव्यवस्थित पुनर्लेख है।

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // ... setup just like you did 

    // boolean is just like any other type. You can assign not only 
    // constants, but expressions too 
    mute = (mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)==0); 
    tb_mute.setChecked(mute); 
} 

public void onButtonClicked(View view){ 
    mute = !mute; // invert value 
    mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, mute); 
    tb_mute.setChecked(mute); 
} 
+1

कहें, एंड्रॉइड 6 (एपीआई 23) के नए एपीआई एडजस्टस्ट्रीमवॉल्यूम के लिए क्या है? "SetStreamMute" को बहिष्कृत किया गया है और इसे एड्रेसस्ट्रीमवॉल्यूम का उपयोग करने का सुझाव दिया गया है। ऐप की ऑटो-बहाली अभी भी तब होती है जब ऐप की हत्या हो जाती है? क्या बदल गया? –

+0

@androiddeveloper नहीं जानता, मैंने एक वर्ष के लिए एंड्रॉइड को छुआ नहीं है या तो –

+0

ओह ठीक है। धन्यवाद। –

संबंधित मुद्दे