2010-07-18 11 views
24

जब मेरे पास प्रसारण होता है तो रिसीवर एंड्रॉइड.intent.action.MEDIA_BUTTON कहता है और मैं एक नई गतिविधि के बिना वर्तमान गतिविधि के यूआई को अपडेट करना चाहता हूं, क्या कोई अच्छा अभ्यास है यह वाला?ब्रॉडकास्ट रिसीवर से यूआई को एक निश्चित गतिविधि में अपडेट करने पर एंड्रॉइड बेस्ट प्रैक्टिस

जो मैं जानता हूँ (सही नहीं हो सकता है)

1) मैं निश्चित गतिविधि

2) एक ContentObserver बनाएं बाद गतिविधि के रूप में एक ही कक्षा में BroadcastReceiver रख दिया और updateUI समारोह कॉल कर सकते हैं?

3) गतिविधि द्वारा बनाई गई सेवा के लिए संचार करें, सहायता का उपयोग करें। (मुझे पता नहीं है कि अगर यह किसी गतिविधि से पंजीकृत है तो वर्तमान सेवा कैसे प्राप्त करें)

4) गतिविधि के समान कक्षा में स्थित प्रसारण रिसीवर पर एक कस्टम फ़िल्टर बनाएं, और context.sendBroadcast (कस्टम फ़िल्टर का संदेश) का उपयोग करें। और कस्टम फ़िल्टर में (एक लेकिन अधिक सामान्य रूप में एक ही?) updateUI फोन

अंतिम प्रवाह यह एक BroadcastReceiver से आएगा और गतिविधि नवीनीकरण न करके यूआई अद्यतन करने समाप्त होता है (जब तक गतिविधि मर चुका है?)

कृपया इस तरह की समस्या से निपटने के तरीके पर लिंक/स्रोत कोड प्रदान करें।

public class MyActivity extends Activity { 
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      MyActivity.this.receivedBroadcast(intent); 
     } 
    }; 
    @Override 
    public void onResume() { 
     super.onResume(); 
     IntentFilter iff = new IntentFilter(); 
     iff.addAction("android.intent.action.MEDIA_BUTTON"); 
     // Put whatever message you want to receive as the action 
     this.registerReceiver(this.mBroadcastReceiver,iff); 
    } 
    @Override 
    public void onPause() { 
     super.onPause(); 
     this.unregisterReceiver(this.mBroadcastReceiver); 
    } 
    private void receivedBroadcast(Intent i) { 
     // Put your receive handling code here 
    } 
} 

पर निर्भर करता है: अग्रिम धन्यवाद :)

उत्तर

36

इस सुविधा प्रदान करने के लिए सबसे आसान तरीका में एक बहुत आप में प्रसारण रिसीवर डाल करने के लिए गतिविधि और बाँध/registerReceiver और unregisterreceiver का उपयोग कर इसे निकल है जिस उद्देश्य को आप प्राप्त करना चाहते हैं, आपको अपने AndroidManifest.xml फ़ाइल में उचित अनुमतियां जोड़ने की आवश्यकता हो सकती है।

+0

भी विचार करें जानकारी यहां दी गई: [BroadcastReceiver.html # onReceive (android.content.Context, android.content.Intent)] (http://developer.android.com/reference/android/content/ BroadcastReceiver.html # onReceive% 28android.content.Context,% 20android.content.Intent% 29) –

0

स्थानीय ब्रॉडकास्ट मैनेजर से डेटा प्राप्त करने के बाद मुझे बटन के पाठ को बदलने के लिए हाल ही में क्या करना है, यह मान एक निजी क्षेत्र में मूल्य को स्टोर करना है और फिर यूआई सामान को मेरे ऑनस्यूम() विधि में करना है।

public class myClass extends Activity { 

    private String myString; 

    @Override 
    public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);   
     // register to receive data 
     LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter("myAction"));  
    } 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // get the extra data included in the intent 
      myString = intent.getStringExtra("myString"); 
     } 
    }; 

    @Override 
    public void onResume() { 
     super.onResume(); 
     System.out.println("onResume"); 
     // do something to the UI 
     myButton.setText(myString != null ? myString : "Default"); 
    } 
} 
संबंधित मुद्दे