2012-03-16 24 views
5

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

यह वह कोड है जिसे मैं वर्तमान में उपयोग कर रहा हूं। वॉलपेपर केवल एक बार बदल जाता है और उसके बाद नहीं। कृपया मुझे बताएं मुझे क्या करना चाहिए?

public class Wallpaper extends Service { 

    Timer mytimer; 
    int interval=60000; 
    Drawable drawable; 
    WallpaperManager wpm; 
    int prev=1; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mytimer=new Timer(); 
     wpm=WallpaperManager.getInstance(Wallpaper.this); 
    } 



    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     mytimer.schedule(new TimerTask() { 
      @Override 
      public void run() { 

       if(prev==1){ 
        drawable = getResources().getDrawable(R.drawable.two); 
        prev=2; 
       } 
       else if(prev==2){ 
        drawable = getResources().getDrawable(R.drawable.three); 
        prev=3; 
       } 
       else{ 
        drawable = getResources().getDrawable(R.drawable.one); 
        prev=1; 
       } 


       Bitmap wallpaper=((BitmapDrawable)drawable).getBitmap(); 

       try { 
        wpm.setBitmap(wallpaper); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }, interval); 

     return super.onStartCommand(intent, flags, startId); 
    } 

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

इसके अलावा, क्या मुझे इसे प्राप्त करने के लिए अलार्ममेनगर या हैंडलर का उपयोग करने की आवश्यकता है? मैं एंड्रॉइड के लिए काफी नया हूं और थोड़ा उलझन में हूं।

उत्तर

7

ऐसा लगता है कि आप टाइमर गलत का उपयोग कर रहे हैं। यदि आप इसे पुनरावृत्ति करना चाहते हैं, तो आपको दूसरी तर्क के रूप में प्रारंभिक देरी और तीसरे के अंतराल को निर्दिष्ट करने की आवश्यकता है। Timer.schedule(timertask, initial delay, interval between recurrences);

नोट: मैं अपने कॉल के बारे में myTimer.schedule(object, interval);

+1

तत्काल प्रारंभ के लिए देरी के लिए 0 सेट करें। :) – Calvin

+0

धन्यवाद..यह अब काम कर रहा प्रतीत होता है .. कुछ अन्य myTimer.schedule() विधि केवल दो तर्कों के साथ है, जिससे मुझे कोई त्रुटि नहीं दे रही थी। वैसे भी, मुझे खुशी है कि मुझे हैंडलर आदि का उपयोग करने की आवश्यकता नहीं है – ambit

+0

यूप! केवल दो तर्कों का उपयोग करके एक शॉट टाइमर बन जाता है। कभी-कभी उपयोगी! –

0

बात कर रहा हूँ
गुड लक टाइमर कार्यों के साथ सभी समस्याओं को हल करने Timer वर्ग ScheduledFuture
यह मेरे लिए मदद की के बजाय कोशिश करो!

private ScheduledFuture mytimer; 

//... 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); 
    mytimer = timer.scheduleWithFixedDelay(new TimerTask() { 
     @Override 
     public void run() { 
      //... 
     } 
    }, 0, interval, TimeUnit.MILLISECONDS); 
    return super.onStartCommand(intent, flags, startId); 
} 

//... 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mytimer != null) { 
     mytimer.cancel(true); 
    } 
    //... 
} 
संबंधित मुद्दे