2011-09-01 87 views
0

我可能在做一些愚蠢的事情,但我的應用程序小工具有一個有趣的問題。經常被添加到主屏幕後,它會轉換成另一個應用程序的小部件。這個小部件在特定的手機上總是相同的,但手機之間不同。幾秒鐘後,小部件會返回到它應該看起來的樣子。雖然對我來說這不是一個問題,因爲它只是一個暫時的問題,我有來自用戶的電子郵件,他們說這個小部件永久卡在另一個表單中。小工具將成爲與其他應用程序不同的小工具

以下是這可能是有關的任何文件:

我很抱歉附加了這麼多,但我真的不知道從哪裏開始。我希望對那些更熟悉api的人來說,這個問題會立即顯現出來。我也爲任何糟糕的代碼表示歉意,因爲這是我第一次認真的項目,只是一項業餘愛好。

+1

如何包含您的AndroidManifest.xml?我的第一個懷疑是你的包名或意向註冊或某事有問題。 – fluffy

+0

此外:股票,一些供應商ROM或自定義的? – 2011-09-01 20:25:11

+0

而我股票的意思是香草android。愚蠢的我。 – 2011-09-01 20:41:31

回答

2

我在我的小工具中遇到了完全相同的問題,就像您所描述的一樣,並且找不到任何解決方案。我最終做的是某種解決方法,在我的情況下似乎工作正常。我所做的是以下內容,而不是直接從onUpdate()方法更新小部件,我開始了一個處理更新然後自殺的服務。這解決了它在仿真器上和在更新過程中出現小部件的設備上。 下面是一個示例代碼:

的的AppWidgetProvider:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    context.startService(new Intent(context, WidgetService.class)); 
} 

的服務:

@Override 
public void onStart(Intent intent, int startId) { 
    started(intent); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    started(intent); 
    return START_STICKY; 
} 


private void started(Intent intent) { 
    //update here the widgets 
    Context context = getApplicationContext(); 
    updateWidgets(context); 
    stopSelf();//killing the service 
} 

private void updateWidgets(Context context) { 
    AppWidgetManager appmanager = AppWidgetManager.getInstance(context); 
    ComponentName cmpName = new ComponentName(context, widgetClass); 
    int[] widgetIds = appmanager.getAppWidgetIds(cmpName); 
    RemoteViews rView = new RemoteViews(context.getPackageName(), layoutId); 
    for (int wid : widgetIds) { 
     //all updates here 
     rView.setTextViewText(tvId, desc); 
     appmanager.updateAppWidget(wid, rView); 
    } 
} 

注知道爲什麼這個解決方案解決了問題,但好處是,它 希望這幫助