2010-08-10 16 views
9

के बजाय कोड में पंजीकृत है, मैं एक निश्चित समय पर कुछ कोड चलाने के लिए अलार्म का उपयोग करना चाहता हूं। मैंने मैनिफेस्ट में पंजीकृत प्रसारण रिसीवर के साथ सफलतापूर्वक अलार्म लागू किया है, लेकिन जिस तरह से मैं इसे समझता हूं, यह विधि प्रसारण रिसीवर के लिए एक अलग वर्ग का उपयोग करती है।एंड्रॉइड अलार्म प्रबंधक प्रसारण रिसीवर के साथ कोड

मैं इस विधि का उपयोग दूसरी गतिविधि शुरू करने के लिए कर सकता हूं लेकिन मैं इसे अपनी मुख्य गतिविधि में कोई विधि चलाने के लिए उपयोग नहीं कर सकता?

(how can I notify a running activity from a broadcast receiver?)

तो मैं अपने मुख्य गतिविधि के रूप में इस सवाल का जवाब ऊपर में विस्तार से बताया में मेरे प्रसारण रिसीवर रजिस्टर करने के लिए कोशिश कर रहे हैं।

private BroadcastReceiver receiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show(); 
     uploadDB();   
    } 
};  

public void onResume() { 
    super.onResume(); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(null); 

    this.registerReceiver(this.receiver, filter); 
} 

public void onPause() { 
    super.onPause(); 

    this.unregisterReceiver(this.receiver); 
} 

हालांकि मैं इस पाने के लिए अलार्म प्रबंधक के साथ काम करने में असमर्थ हैं, मैं कैसे मैं प्रसारण रिसीवर के लिए अलार्म इरादे से लिंक करना होगा करने के लिए के रूप में अनिश्चित हूं। क्या कोई मुझे गतिविधि में गतिशील रूप से अलार्म प्रबंधक प्रसारण रिसीवर पंजीकृत करने का उदाहरण बता सकता है? या समझाओ कि मैं यह कैसे करूं?

उत्तर

15

इस बारे में कैसे?

Intent startIntent = new Intent("WhatEverYouWant"); 
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0); 
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent); 

और फिर अपने Manifest.xml फ़ाइल में:

<receiver android:name="com.package.YourOnReceiver"> 
    <intent-filter> 
     <action android:name="WhatEverYouWant" /> 
    </intent-filter> 
</receiver> 

तो जहाँ तक मुझे पता है आप अभी भी प्रकट में रिसीवर की घोषणा करने के लिए है। मुझे यकीन नहीं है कि क्या आप इसे अपनी गतिविधि के अंदर एक निजी उदाहरण में सेट कर सकते हैं। आप अपनी गतिविधि के अंदर एक ऑनसीसीव घोषित कर सकते हैं और उसे कॉल कर सकते हैं (यदि ब्रॉडकास्ट रिसीवर का इंटरफेस है। मुझे नहीं पता कि यह करता है या नहीं।)

+2

बहुत बढ़िया, मैं इसे काम करने में कामयाब रहा, हालांकि मुझे मैनिफेस्ट में कोड जोड़ने की आवश्यकता नहीं थी। एक ही नाम के एक intentfilter के साथ बस प्रसारण रिसीवर को व्यावहारिक रूप से पंजीकृत किया। – serenskye

+0

धन्यवाद और आपके लिए +1 – Barrier

1

अलार्म शुरू करना चाहते हैं, जहां से अलार्म इरादा शुरू करें। जहां अलार्म

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30)); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

और प्रसारण रिसीवर में कोड आप प्राप्त करना चाहते लिख सुनने के लिए शुरू करना चाहते से नीचे दिए गए कोड लिखें। और मेनिफेस्ट में

<receiver android:name=".AlarmReceiver" android:process=":remote"/> 

आप दोहराव वाले अलार्म भी डाल सकते हैं। उम्मीद है कि यह मदद करें!

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