5

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

यहाँ मेरी onRecieve() और onUpdate() तरीके हैं:

public void onReceive(Context context, Intent intent) 
{ 
    super.onReceive(context, intent); 
    String action = intent.getAction(); 
    if(action.equals("android.tristan.widget.digiclock.CLICK")) 
    { 
     PackageManager packageManager = context.getPackageManager(); 
     Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER); 

     String clockImpls[][] = { 
       {"HTC Alarm Clock", "com.htc.android.worldclock", "com.htc.android.worldclock.AlarmClock" }, 
       {"Standar Alarm Clock", "com.android.deskclock", "com.android.deskclock.AlarmClock"}, 
       {"Froyo Nexus Alarm Clock", "com.google.android.deskclock", "com.android.deskclock.DeskClock"}, 
       {"Moto Blur Alarm Clock", "com.motorola.blur.alarmclock", "com.motorola.blur.alarmclock.AlarmClock"} 
     }; 

     boolean foundClockImpl = false; 

     for(int i=0; i<clockImpls.length; i++) { 
      String vendor = clockImpls[i][0]; 
      String packageName = clockImpls[i][1]; 
      String className = clockImpls[i][2]; 
      try { 
       ComponentName cn = new ComponentName(packageName, className); 
       ActivityInfo aInfo = packageManager.getActivityInfo(cn, PackageManager.GET_META_DATA); 
       alarmClockIntent.setComponent(cn); 
       foundClockImpl = true; 
      } catch (NameNotFoundException e) { 
       Log.d(LOGTAG, "Error," + vendor + " does not exist"); 
      } 
     } 

     if (foundClockImpl) { 
     Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(50); 
     final RemoteViews views = new RemoteViews(context.getPackageName(), layoutID); 
     views.setOnClickPendingIntent(R.id.TopRow, PendingIntent.getActivity(context, 0, new Intent(context, DigiClock.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT)); 
     AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views); 
     alarmClockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(alarmClockIntent);  
    } 
    } 
} 

     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
super.onUpdate(context, appWidgetManager, appWidgetIds); 
    context.startService(new Intent(UpdateService.ACTION_UPDATE)); 
    context.startService(new Intent(context, ScreenUpdateService.class)); 
    final int Top = appWidgetIds.length; 
    final int Bottom = appWidgetIds.length; 
    for (int i=0; i<Top; i++) 
    { 
    int[] appWidgetId = appWidgetIds; 
    final RemoteViews top=new RemoteViews(context.getPackageName(), layoutID); 
    Intent clickintent=new Intent("android.tristan.widget.digiclock.CLICK"); 
    PendingIntent pendingIntentClick=PendingIntent.getBroadcast(context, 0, clickintent, 0); 
    top.setOnClickPendingIntent(R.id.TopRow, pendingIntentClick); 
    appWidgetManager.updateAppWidget(appWidgetId, top); 
} 
for (int i=0; i<Bottom; i++) 
{ 
    int[] appWidgetId = appWidgetIds; 
    RemoteViews bottom=new RemoteViews(context.getPackageName(), layoutID); 
    Intent clickintent=new Intent("android.tristan.widget.digiclock.CLICK_2"); 
    PendingIntent pendingIntentClick=PendingIntent.getBroadcast(context, 0, clickintent, 0); 
    bottom.setOnClickPendingIntent(R.id.BottomRow, pendingIntentClick); 
    appWidgetManager.updateAppWidget(appWidgetId, bottom); 
} 
} 

मैं एक सेवा में उद्देश्य लगाने के बारे में पढ़ा है, लेकिन कोशिश की और विफल रहे हैं। किसी भी मदद की सराहना की है।

+0

'super.onUpdate();' कॉल के साथ क्या कॉल है? यह स्रोत के अनुसार कुछ भी नहीं करता है http://androidxref.com/4.4.4_r1/xref/frameworks/base/core/java/android/appwidget/AppWidgetProvider.java#113। – faizal

+0

'appWidgetManager.updateAppWidget() को प्रत्येक विजेट के लिए लूप में कॉल करने की आवश्यकता नहीं है। यह एक पूर्णांक सरणी स्वीकार करता है। तो आप 'appWidgetManager.updateAppWidget (appWidgetId, top)' कई बार 'ऐप WidgetManager.updateAppWidget (appWidgetIds, शीर्ष)' को बस कॉल कर सकते हैं। – faizal

उत्तर

4

जैसा कि मैंने here लिखा है, आपको केवल RemoteView का एक उदाहरण देना चाहिए।

+0

वास्तव में, एक भी उदाहरण बनाने से विजेट अंततः पतन हो जाएगा; क्योंकि दूरस्थ दृश्य को भेजे गए प्रत्येक निर्देश के साथ स्मृति में वृद्धि होगी – htafoya

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