2011-11-07 18 views
6

मैं एलईडी अधिसूचना चालू करने की कोशिश कर रहा हूं, उदाहरण के लिए हरा रंग। स्क्रीन बंद करें, और हर 5 सेकंड उस रंग को लाल (हरा-> लाल, लाल-> हरा) में बदल दें। मुझे लगता है कि मैंने सब कुछ किया है: एक सेवा में मैंने एक टाइमर बनाया जो अधिसूचना प्रदर्शित करने के लिए विधि निष्पादित करता है।हर 5 सेकंड में एलईडी अधिसूचना का रंग बदलना

public class LEDService extends Service 
{ 
private boolean TimerStarted; 
private Timer timer; 
private NotificationManager myNotificationManager; 
private long LastColor; 

public TurnLedOn() 
{ 
    Notification notify = new Notification(); 
    notify.flags |= Notification.FLAG_SHOW_LIGHTS; 
    notify.LedOnMS = 500; 
    notify.LedOffMS = 0; 
    //I in other example I also used array of colors 
    if (LastColor == 0x00FF00) notify.LedARGB = 0xFF0000; else notify.LedARGB = 0x00FF00;   
    LastColor = notify.LedARGB; 
} 

private MyTimerTask extends TimerTask 
{ 
    @Override 
    public void run() 
    { 
     TurnLedOn(); 
    } 
} 

@Override 
public void OnCreate() 
{ 
    TimerStarted = false; 
    myNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    if (TimerStarted == false) 
    { 
     timer = new Timer(); 
     timer.schedule(new MyTimerTask(), 0, 5000); 
    }   
    return START_STICKY; 
} 

@Override 
public IBinder onBind() 
{ 
    return null; 
} 

@Override 
public void onDestroy() 
{ 
    timer.close(); 
} 
} 

समस्या क्या है? एलईडी रंग बदलता नहीं है ... जब मैं स्क्रीन बंद करता हूं, तो रंग तब तक हरा होता है जब तक मैं स्क्रीन चालू नहीं करता और उसे फिर से बंद नहीं करता। मैं एक बार यह सेवा शुरू करना चाहता हूं, स्क्रीन बंद करूँगा और एलईडी लाइट बदलते रंग को देखूंगा :)।

बीटीडब्ल्यू: मैंने अपने फोन का परीक्षण किया और यह हरे और लाल रोशनी दिखा सकता है इसलिए यह समस्या नहीं है।

अग्रिम धन्यवाद और मेरी अंग्रेजी के लिए खेद है।

मैं अपने ही सवाल का जवाब नहीं कर सकते हैं तो मैं इस यहाँ जोड़ देंगे: अपने सुझाव के लिए

धन्यवाद Olsavage, मैं अपने कोड को clearAll() जोड़ा है, लेकिन प्रभाव अभी भी एक ही है ; /। मैंने अपने आवेदन में लॉगिंग भी जोड़ा (Log.i())। ऐसा लगता है कि जब मैं स्क्रीन बंद करता हूं (क्यों ??) चालू करता है तो सिस्टम मेरी सेवा को रोक रहा है।

स्क्रीन चालू: यह कुछ इस तरह से है टाइमर चल रहा है और अधिसूचना तैनात किया जाता है (लेकिन मैं पर नेतृत्व को नहीं देख सकते, क्योंकि यह देखने के लिए मैं स्क्रीन बंद करने के लिए है: पी)

लॉक बटन पर क्लिक करें: टाइमर लगभग बंद हो गया है, इसलिए एलईडी कभी-कभी रंग बदलती है।

स्क्रीन बंद है: टाइमर काम नहीं कर रहा है, TurnLedOn विधि अब और नहीं चल रहा है। एलईडी रंग नहीं बदलता है।

अब सवाल यह है: स्क्रीन को से बंद करने के बाद मेरी सेवा क्यों रुक गई है? यहां तक ​​कि जब मैं इसमें सरल संचालन कर रहा हूं (जैसे एक चर को बढ़ाने)। शायद मुझे इसकी प्राथमिकता या कुछ सेट करना है?

मैंने टाइमर अंतराल को 100ms में बदल दिया और देखें कि कोड अच्छा है। एलईडी ने 5-15 बार रंग बदल दिए लेकिन फिर तुरंत बंद कर दिया। मुझे पता है कि यह एप्लिकेशन पूरी तरह से बेकार है लेकिन मैं बस इसे काम करना चाहता हूं :)।

EDIT2: मुझे लगता है कि मुझे अपनी सेवा लॉन्च करने के लिए अलार्ममेनगर और लंबित इंटेंट का उपयोग करना होगा ... कल मैं ऐसा करने की कोशिश करूंगा।

उत्तर

1

आपको एआरबीबी प्रारूप का उपयोग करने की आवश्यकता है। 0xFFFF0000 - लाल और 0xFF00FF00 - हरा सेट करने का प्रयास करें। उम्मीद है की यह मदद करेगा।

एचएम, शायद आपकी पुरानी अधिसूचना को मंजूरी नहीं दी गई है? MyNotificationManager.clearAll() का उपयोग करने का प्रयास करें; MyNotificationManager.notify (0, सूचित करें) से पहले;

ओह, भी, सूचित करने की कोशिश करें .ledOffMS = 5000;

+0

यह पहले से ही सही रंग प्रदर्शित करता है :) समस्या यह है कि स्क्रीन बंद होने पर रंग बदल नहीं जाता है। रंग बदलने के लिए मुझे अपने फोन की स्क्रीन चालू करनी है और इसे बंद करना है ... मैं रंग को स्वचालित रूप से बदलना चाहता हूं। – krzysnick

2

ठीक है, मुझे लगता है कि मैंने इसे समझ लिया। टाइमर को हटा दिया गया। इसके बजाय मैं अलार्ममेनगर का उपयोग करता हूं :)।

alarmmgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
onStartCommand में

:

public int onStartCommand(Intent intent, int flags, int startId) 
{ 
TurnLedOn(); //Turn LED On 
myPendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); 
alarmmgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, myPendingIntent); //Setting alarm to be off after 5seconds. 
return Service.START_NOT_STICKY; 
} 
OnDestroy में

:

मैं कोड निम्नलिखित onCreate को जोड़ा गया

public void onDestroy() 
{ 
notifymgr.cancel(LED_NOTIFICATION_ID); //Clearing notification 
alarmmgr.cancel(myPendingIntent); //Clear alarm 
} 

मुझे लगता है कि कोड ठीक है, लेकिन मैं पूरी तरह से शुरुआत कर रहा हूँ एंड्रॉइड प्रोग्रामिंग। मुझे लगता है कि मैंने अपनी समस्या हल की है।

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