2014-06-05 9 views
10

में एक दृश्य पर दो लंबित इंंटेंट का उपयोग करें मेरे पास एक विजेट क्लास (AppWidgetProvider का विस्तार) है, जिसमें विजेट के लेआउट में केवल एक दृश्य (छवि दृश्य) है। जब उपयोगकर्ता विजेट पर टैप करता है, तो यह किसी समस्या के बिना किसी गतिविधि को अपडेट और लॉन्च करता है। विजेट अद्यतन के बाद विजेट हर 30 मिनट और गतिविधि लॉन्च अपडेट करता है। मेरी समस्या यह है: स्वचालित रूप से अपडेट किए जाने पर विजेट को केवल अपडेट करने के लिए मैं कॉन्फ़िगर कैसे कर सकता हूं (उपयोगकर्ता क्लिक द्वारा नहीं)?Appwidget

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

public class Widget extends AppWidgetProvider { 

private static final String ACTION_UPDATE = AppWidgetManager.ACTION_APPWIDGET_UPDATE; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    ComponentName cn = new ComponentName(context, Widget.class); 
    appWidgetManager.updateAppWidget(cn, remoteView(context)); 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) { 
     ComponentName cn = new ComponentName(context, Widget.class); 
     AppWidgetManager.getInstance(context).updateAppWidget(cn, 
       remoteView(context)); 
     Intent launch = new Intent(context, Main.class); 
     PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0); 
     try { 
      pi.send(); 
     } catch (CanceledException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private RemoteViews remoteView(Context ctx) { 
    ArrayList<Integer> imageId = new ArrayList<Integer>(); 
    for (int i = 1; i <= 30; i++) { 
     int drawableImageId = ctx.getResources().getIdentifier("image" + i, 
       "drawable", ctx.getPackageName()); 
     imageId.add(drawableImageId); 
    } 

    RemoteViews rv = new RemoteViews(ctx.getPackageName(), R.layout.widget); 

    Calendar todayDate = Calendar.getInstance(); 
    todayDate.setTimeInMillis(System.currentTimeMillis()); 

    Calendar startDate = Calendar.getInstance(); 
    startDate.set(2014, 05, 15); 

    int dayDiffer = Helper.getDiffernce(todayDate, startDate); 
    dayDiffer += 1; 

    if (dayDiffer >= 1 && dayDiffer <= 30) { 
     rv.setInt(R.id.img_widget, "setImageResource", 
       imageId.get(dayDiffer - 1)); 
     T(ctx, "in >> " + dayDiffer); 
    } else if (dayDiffer >= 0) { 
     T(ctx, "before >> " + dayDiffer); 
    } else if (dayDiffer <= 31) { 
     T(ctx, "after >> " + dayDiffer); 
    } 

    Intent update = new Intent(ctx, Widget.class); 
    update.setAction(ACTION_UPDATE); 
    PendingIntent pi_update = PendingIntent.getBroadcast(ctx, 0, update, 0); 
    rv.setOnClickPendingIntent(R.id.img_widget, pi_update); 

    return rv; 
} 

public void T(Context context, String string) { 
    Toast.makeText(context, string, Toast.LENGTH_SHORT).show(); 
} 

}

उत्तर

1

बदलें शुरू कर सकते हैं PendingIntent "remoteView()" विधि:

Intent userInput = new Intent(ctx, Widget.class); 
userInput.setAction("LAUNCH_MAIN_ACTIVITY"); // use another action! 

PendingIntent pi_userInput = 
        PendingIntent.getBroadcast(ctx, 0, userInput, 0); 
rv.setOnClickPendingIntent(R.id.img_widget, pi_userInput); 

आपकी नई "ऑनसीसिव()" विधि इस तरह दिख सकती है:

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 

    if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) { 
     ComponentName cn = new ComponentName(context, Widget.class); 
     AppWidgetManager.getInstance(context).updateAppWidget(cn, 
       remoteView(context)); 

    } 

    // the launch will always be executed, 
    // the update only for "ACTION_UPDATE" 
    Intent launch = new Intent(context, Main.class); 
    PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0); 
    try { 
     pi.send(); 
    } catch (CanceledException e) { 
     e.printStackTrace(); 
    } 
} 

उम्मीद है कि इससे मदद मिलती है!

+0

धन्यवाद, हां यह सबसे अच्छा समाधान था जो मुझे मिला लेकिन यहां इसके बारे में बताने के लिए भूल गया। –

0

आप अपने में अद्यतन के लिए एंड्रॉयड सेवा का उपयोग या गतिविधि स्वत:

+0

धन्यवाद, लेकिन इसका बहुत ही सरल विजेट और सरल रहना चाहिए, मुझे लगता है कि एक तरीका है ... –

+0

यह प्रश्न का उत्तर नहीं देता है। किसी लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपनी पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त [प्रतिष्ठा] (http://stackoverflow.com/help/whats-reputation) हो [किसी भी पोस्ट पर टिप्पणी करने में सक्षम] [http://stackoverflow.com/help/privileges/comment)। –

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