[英]My android widget crashes launcher. How do I debug that?
我開發了一個簡單的小部件,其中有兩個按鈕可以打開和關閉我的雙卡手機SIM卡。 我在AppWidgetProvider實現的onUpdate方法中單擊按鈕。 不幸的是,幾次成功單擊后,啟動器會重新加載(我在設備屏幕上觀察到短暫的閃爍),並且小部件在單擊按鈕時不再執行任何操作。
我嘗試查看我的LogCat,但沒有發現那里的啟動器應用程序有趣的地方。
現在的問題是如何調試這種情況?
編輯:這是我的AppWidgetProvider的一些代碼。 我知道代碼很幼稚,需要一些重構,但是我仍然需要以某種方式調試啟動器崩潰:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName widget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
widget = new ComponentName(context, ExampleAppWidgetProvider.class);
int currentState = Settings.System.getInt(context.getContentResolver(), "dual_sim_mode_setting", -1);
String sim1Text = currentState == 1 || currentState == 3 ? "on" : "off";
String sim2Text = currentState == 2 || currentState == 3 ? "on" : "off";
remoteViews.setTextViewText(R.id.first_button, sim1Text);
remoteViews.setTextViewText(R.id.second_button, sim2Text);
remoteViews.setOnClickPendingIntent(R.id.first_button, getPendingSelfIntent(context, SIM1_CLICKED));
remoteViews.setOnClickPendingIntent(R.id.second_button, getPendingSelfIntent(context, SIM2_CLICKED));
appWidgetManager.updateAppWidget(widget, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if ("android.appwidget.action.APPWIDGET_UPDATE".equals(intent.getAction()))
{
super.onReceive(context, intent);
return;
}
if (SIM1_CLICKED.equals(intent.getAction())) {
switchSim(1, context);
return;
}
else if (SIM2_CLICKED.equals(intent.getAction())){
switchSim(2, context);
}
else if ("android.intent.action.DUAL_SIM_MODE".equals(intent.getAction())){
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews;
ComponentName watchWidget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
watchWidget = new ComponentName(context, ExampleAppWidgetProvider.class);
int mode = intent.getIntExtra("mode", -1);
switch (mode)
{
case 0:
remoteViews.setTextViewText(R.id.first_button, "off");
remoteViews.setTextViewText(R.id.second_button, "off");
break;
case 1:
remoteViews.setTextViewText(R.id.first_button, "on");
remoteViews.setTextViewText(R.id.second_button, "off");
break;
case 2:
remoteViews.setTextViewText(R.id.first_button, "off");
remoteViews.setTextViewText(R.id.second_button, "on");
break;
case 3:
remoteViews.setTextViewText(R.id.first_button, "on");
remoteViews.setTextViewText(R.id.second_button, "on");
break;
}
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
嗯,因為您沒有發布任何代碼,我只能猜測,但是我假設您實現了View.OnClickListener
。 我將簡單地執行以下操作:
聲明一個調試標簽:
final String tag = "#OnClick";
日志信息:
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(tag, "I've been clicked!") // or even add useful information.
// code ..
}
});
這樣,您至少可以確保查看是否還在按鈕上調用了OnClickListener
。
為了查看消息,您可以將過濾器添加到logCat中,如下所示:
至少這是LogCat在Eclipse中的工作方式,我不確定其他API,但可能有些相似之處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.