2016-10-15 10 views
1

私はカスタムランチャーを構築しています。私は の手順を踏んで、App WidgetsをホストするためのAndroidのドキュメントと、デフォルトのLauncherソースコード を参照しています。しかし、AppWidgetManager.ACTION_APPWIDGET_BINDのようなインテントアクションを使ってstartActivityForResultを呼び出すと、ユーザーがUIに表示されたダイアログプロンプトから受け入れても、常にActivity.RESULT_CANCELEDが返されます。ここでAppWidgetManager.ACTION_APPWIDGET_BINDは常にActivity.RESULT_CANCELEDを返します

は、コードスニペットが

appWidgetManager = AppWidgetManager.getInstance(this); 
    appWidgetHost = new AppWidgetHost(this, 7772); 
    int appWidgetId = appWidgetHost.allocateAppWidgetId(); 
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    startActivityForResult(pickIntent, REQUEST_PICK); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Log.d(TAG, " onActivityResult " + requestCode + " res " + resultCode); 
     if (requestCode == REQUEST_PICK && resultCode == Activity.RESULT_OK) 
     { 
      int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 
      AppWidgetProviderInfo info = appWidgetManager.getAppWidgetInfo(appWidgetId); 

      boolean hasPermission = appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, info.provider); 
      if (!hasPermission) 
      { 
       Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); 
       intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
       intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.provider); 
       startActivityForResult(intent, REQUEST_BIND); 
      } 

     }else if (requestCode == REQUEST_BIND) { 
      // Here the resultCode is always returning Activity.RESULT_CANCELED 
     } 
    } 

だ誰かが私が間違ってやっても何のように私を助けてくださいことはできますか?

さらに、マニフェストファイルにandroid:name = "android.permission.BIND_APPWIDGET" を追加しました。

そして最後に、Androidのログを、私は

1567-1940/system_process E/AppWidgetServiceImpl: Widget id 34 already bound to: ProviderId{user:0, app:10025, cmp:ComponentInfo{com.android.deskclock/com.android.alarmclock.AnalogAppWidgetProvider}} 

答えて

1

のようなエラーが問題を発見見ることができます。他の誰かが同じ問題に直面した場合には、ここに答えてください。

Android OSで表示されるセレクタからインテントを選択するためにAppWidgetManager.ACTION_APPWIDGET_PICKインテンツを使用する場合、フレームワークが自動的にウィジェットをバインドするため、バインドする必要はありません。

カスタムチューザー(たとえば、多くのカスタムランチャーで実装されているウィジェットのプレビュー画像を表示するもの)を実装する場合、バインディングが必要です。

関連する問題