簡體   English   中英

檢測最近刪除的小部件

[英]Detect last widget being deleted

我創建了一個使用后台服務進行更新通知的小部件。

如果最后一個窗口小部件已從主屏幕中刪除,我想停止后台服務。

如何檢測主屏幕中剩余的小部件數量?

好的,我想出了一種無需存儲任何持久性信息的方法。 但是,即使對我來說,這似乎也是一個hack。 在onReceive中插入了以下內容-

@Override
public void onReceive(Context context, Intent intent) {
        if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(sIntentAction)) {
            AppWidgetManager amgr = AppWidgetManager.getInstance(context);
            int length = amgr.getAppWidgetIds(intent.getComponent()).length;
            if (length==0) WidgetService.StopService(context);
        }
        super.onReceive(context, intent);
}

它有效,並且是我能找到的最佳解決方案,但是我對此並不滿意。

我需要在onReceive而不是onDeleted執行此onDeleted ,因為intent對象需要執行intent.getComponent() 我不喜歡這個事實,因為文檔聲稱很少需要接觸onReceive ,而需要計算剩余的小部件似乎是onDeleted的合理期望。 但是,不幸的是,它提供了要刪除的小部件的數量,而不是剩余的數量。 有什么方法可以代替onDeleted嗎?

(慢慢地,我似乎感覺到很多Android編碼實際上是在被黑客入侵-而完成工作的代碼大多使用未記錄或意外的途徑。)

如果您為Widget創建了一個AppWidgetProvider ,則它應具有onUpdate()方法。 onUpdate()的參數之一是int[] ids 實際上,這是所有接收onUpdate()請求的AppWidget實例的數組。 如果ids的大小為1,則下一個刪除是您的最后一個小部件。 :)

希望對您有所幫助,FuzzicalLogic

我的應用程序有一個類似的問題,這就是我最終要弄清楚是否刪除了最后一個小部件,這使我可以停止服務並更新保存的首選項。

@Override
public void onDisabled(Context context)
{
    // When this get called I need to figure out how to set the preference 
    // homeWidgetSetup = false.
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    ComponentName thisAppWidget = new ComponentName(context, BasicHomeWidget.class.getName());
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);

    if(appWidgetIds.length < 1)
    {
        Log.d(TAG, "Removed the last widget!");
        Intent intent = new Intent(context, KMMDService.class);
        intent.putExtra("lastWidgetDeleted", true);
        context.startService(intent);
    }
}

然后,我只是測試了onStartCommand我的服務的額外onStartCommand ,如果將“ lastWidgetDeleted”定義為true,那么我將停止服務並更新我的首選項。

可能答案太遲了,但是僅當實例化第一個小部件並且為特定的appwidget提供者刪除了最后一個小部件時,才調用onEnabled和onDisabled。 因此,不需要上述技巧和其他技術。

如果您仍然有疑問,請閱讀Android文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM