gpt4 book ai didi

android - AppWidgetManager.ACTION_APPWIDGET_BIND 总是返回 Activity.RESULT_CANCELED

转载 作者:行者123 更新时间:2023-11-29 14:45:27 26 4
gpt4 key购买 nike

我正在构建一个自定义启动器。我已经按照步骤在 Android 文档中提到用于托管 App Widgets 以及浏览默认启动器源代码。但是,当我使用作为 AppWidgetManager.ACTION_APPWIDGET_BIND 的 Intent 操作调用 startActivityForResult 时,它总是返回 Activity.RESULT_CANCELED,即使用户正在从 UI 上显示的对话框提示中接受。

这是代码 fragment

    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"在 list 文件中。

最后,通过 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}}

最佳答案

发现问题。在这里回答,以防其他人遇到同样的问题。

如果您使用 AppWidgetManager.ACTION_APPWIDGET_PICK Intent 从 Android 操作系统显示的选择器中选择 Intent ,则无需绑定(bind),因为框架会自动绑定(bind)小部件。

如果您实现了自定义选择器(例如,在许多自定义启动器中实现的显示小部件预览图像的东西),则绑定(bind)是必要的。

关于android - AppWidgetManager.ACTION_APPWIDGET_BIND 总是返回 Activity.RESULT_CANCELED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com