私はカスタムランチャーを構築しています。私は の手順を踏んで、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}}