2012-07-11 33 views
0

我正在製作基於股票啓動器的第一個android啓動器。我正在嘗試將小部件添加到我的主要線性佈局中。但那不行。它沒有比onActivityResult()方法更進一步。請幫助我,並提前感謝!我的代碼:Android發射器小部件問題

private static final int REQUEST_CREATE_SHORTCUT = 1; 
private static final int REQUEST_CREATE_LIVE_FOLDER = 4; 
private static final int REQUEST_CREATE_APPWIDGET = 5; 
private static final int REQUEST_PICK_APPLICATION = 6; 
private static final int REQUEST_PICK_SHORTCUT = 7; 
private static final int REQUEST_PICK_LIVE_FOLDER = 8; 
private static final int REQUEST_PICK_APPWIDGET = 9; 
private static final int REQUEST_PICK_ANYCUT=10; 
private static final int REQUEST_SHOW_APP_LIST = 11; 
private static final int REQUEST_EDIT_SHIRTCUT = 12; 

    mAppWidgetManager = AppWidgetManager.getInstance(this); 
    mAppWidgetHost = new AppWidgetHost(this, R.id.linearLayout); 

//Add widgets 

void selectWidget() { 
    int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId(); 
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    addEmptyData(pickIntent); 
    Log.d("addWidgetProcedure", "Starting activity to pick widget"); 
    startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET); 
} 

void addEmptyData(Intent pickIntent) { 
    ArrayList<AppWidgetProviderInfo> customInfo = 
     new ArrayList<AppWidgetProviderInfo>(); 
    pickIntent.putParcelableArrayListExtra(
     AppWidgetManager.EXTRA_CUSTOM_INFO, customInfo); 
    ArrayList<Bundle> customExtras = new ArrayList<Bundle>(); 
    pickIntent.putParcelableArrayListExtra(
     AppWidgetManager.EXTRA_CUSTOM_EXTRAS, customExtras); 
    Log.d("addWidgetProcedure", "AddEmptyData"); 
}; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) { 
    Log.d("addWidgetProcedure", "inside onActivityResult"); 
    if (resultCode == RESULT_OK) { 
     Log.d("addWidgetProcedure", "RESULT_OK"); 
     if (requestCode == REQUEST_PICK_APPWIDGET) { 
      Log.d("addWidgetProcedure", "calling configureWidget(data)"); 
      configureWidget(data); 
     } 
     else if (requestCode == REQUEST_CREATE_APPWIDGET) { 
      Log.d("addWidgetProcedure", "calling createWidget(data)"); 
      createWidget(data); 
     } 
    } 
    else if (resultCode == RESULT_CANCELED && data != null) { 
     Log.d("addWidgetProcedure", "RESULT_CANCELED"); 
     int appWidgetId = 
      data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 
     if (appWidgetId != -1) { 
      mAppWidgetHost.deleteAppWidgetId(appWidgetId); 
     } 
    } 
} 

private void configureWidget(Intent data) { 
    Bundle extras = data.getExtras(); 
    int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 
    AppWidgetProviderInfo appWidgetInfo = 
     mAppWidgetManager.getAppWidgetInfo(appWidgetId); 
    if (appWidgetInfo.configure != null) { 
     Intent intent = 
      new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE); 
     intent.setComponent(appWidgetInfo.configure); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     startActivityForResult(intent, REQUEST_CREATE_APPWIDGET); 
    } else { 
     createWidget(data); 
    } 
} 

public void createWidget(Intent data) { 
    Bundle extras = data.getExtras(); 
    int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 
    AppWidgetProviderInfo appWidgetInfo = 
     mAppWidgetManager.getAppWidgetInfo(appWidgetId); 
    AppWidgetHostView hostView = 
     mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); 
    hostView.setAppWidget(appWidgetId, appWidgetInfo); 
    linearLayout.addView(hostView); 
    Toast.makeText(getApplicationContext(), "Adding widget", 15).show(); 
} 

當我按菜單 - >添加小部件時,它調用了selectWidget()方法。

當我按菜單 - >添加小部件到我選擇了一個時,所有的logcat輸出。

07-11 14:38:27.178: W/KeyCharacterMap(1751): Bad keycharmap - filesize=32 
07-11 14:38:27.178: W/KeyCharacterMap(1751): Error loading keycharmap file '/system/usr/keychars/bravo-keypad.kcm.bin'. hw.keyboards.0.devname='bravo-keypad' 
07-11 14:38:27.178: W/KeyCharacterMap(1751): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
07-11 14:38:28.348: D/addWidgetProcedure(1751): AddEmptyData 
07-11 14:38:28.348: D/addWidgetProcedure(1751): Starting activity to pick widget 
07-11 14:38:28.428: D/addWidgetProcedure(1751): inside onActivityResult 

回答

0

嘗試更換您:

private static final int REQUEST_PICK_APPWIDGET = 9; 

有了:

private static final int REQUEST_PICK_APPWIDGET = 0; 
+0

不工作,我在每個方法做了日誌代碼,據我所看到的,它doesn沒有比onActivityResult()方法更進一步 – user1446632 2012-07-13 11:29:45

+0

如果它到達「if(resultCode == RESULT_OK){」行,您可以調試以查看「resultCode」的值是什麼。 繼續前進,改變你的變量值直到你到達「createWidget(data);」 – 2012-07-13 11:53:20

+0

我已經這樣做了,實際上,resultCode爲0,當我在第一次登錄後在onActivityResult()方法上記錄數據時。 logcat的輸出結果如下:resultCode:0 – user1446632 2012-07-13 13:32:51