簡體   English   中英

我的Android小部件使啟動器崩潰。 我該如何調試?

[英]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.

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