android appWidget-在没有用户确认的情况下放置我自己的appWidget

android appWidget-在没有用户确认的情况下放置我自己的appWidget,android,android-activity,click,preview,android-appwidget,Android,Android Activity,Click,Preview,Android Appwidget,假设我有一个android项目,它有一个可以工作的appWidget,可以添加到AppLauncher中。 该项目还有一个显示我创建的appWidget的活动 问题是: 对于启动器,appWidget工作得很好,它会响应用户的点击,但是对于活动,它只会显示出来,就像它是一个预览一样 我已经尝试(并成功)显示了其他AppWidget,但它们也只是在显示。 然而,点击按钮似乎有一种点击风格的效果,似乎可以处理触摸事件。 请注意,appWidget将来除了用户单击之外还可能具有额外的功能 有人能告诉我

假设我有一个android项目,它有一个可以工作的appWidget,可以添加到AppLauncher中。 该项目还有一个显示我创建的appWidget的活动

问题是: 对于启动器,appWidget工作得很好,它会响应用户的点击,但是对于活动,它只会显示出来,就像它是一个预览一样

我已经尝试(并成功)显示了其他AppWidget,但它们也只是在显示。 然而,点击按钮似乎有一种点击风格的效果,似乎可以处理触摸事件。 请注意,appWidget将来除了用户单击之外还可能具有额外的功能

有人能告诉我,我能做些什么来处理这个问题吗?甚至有可能做这样的事情吗?如果没有,为什么(因为它是应用程序的一部分)? 请注意,我希望对appWidget进行尽可能少的更改,因为appWidget可能是一个复杂的组件

以下是获取appWidget视图以显示它的代码段:

public View fetchAppWidgetView(final Context context, final ComponentName componentName)
{
  final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  _appWidgetHost = new AppWidgetHost(context, INSTANCES_ID_PROVIDER);
  // get appWidgetInfo :
  final List<AppWidgetProviderInfo> infos = appWidgetManager.getInstalledProviders();
  AppWidgetProviderInfo appWidgetInfo = null;
  for (final AppWidgetProviderInfo info:infos)
    if (info.provider.getClassName().equals(componentName.getClassName()) && info.provider.getPackageName().equals(componentName.getPackageName()))
    {
      appWidgetInfo = info;
      break;
    }
  if (appWidgetInfo == null)
    return null;
  final int appWidgetId = _appWidgetHost.allocateAppWidgetId();
  // create and put the new widget:
  final AppWidgetHostView newWidget = _appWidgetHost.createView(context, appWidgetId, appWidgetInfo);
  newWidget.setAppWidget(appWidgetId, appWidgetInfo);
  _appWidgetHost.startListening();
  return newWidget;
}

public void startListening()
{
  //this method is called on the onStart() method of the activity
  _appWidgetHost.startListening();
}
public View fetchAppWidgetView(最终上下文上下文,最终组件名ComponentName)
{
最终AppWidgetManager AppWidgetManager=AppWidgetManager.getInstance(上下文);
_appWidgetHost=新的appWidgetHost(上下文、实例\u ID\u提供程序);
//获取appWidgetInfo:
最终列表infos=appWidgetManager.getInstalledProviders();
AppWidgetProviderInfo appWidgetInfo=null;
对于(最终AppWidgetProviderInfo:infos)
if(info.provider.getClassName().equals(componentName.getClassName())&&info.provider.getPackageName().equals(componentName.getPackageName()))
{
appWidgetInfo=info;
打破
}
if(appWidgetInfo==null)
返回null;
final int-appWidgetId=_-appWidgetHost.allocateAppWidgetId();
//创建并放置新的小部件:
final AppWidgetHostView newWidget=\u appWidgetHost.createView(上下文、appWidgetId、appWidgetInfo);
setAppWidget(appWidgetId,appWidgetInfo);
_appWidgetHost.startListening();
返回newWidget;
}
公营机构
{
//在活动的onStart()方法上调用此方法
_appWidgetHost.startListening();
}

这是出于安全原因确定-您的应用程序没有权限放置应用程序小部件 在屏幕上没有用户的知识。唯一的方法就是让用户选择 列表中的小部件或应用程序必须安装在/system/app文件夹中,并且
这样,应用程序就是一个具有所有必需权限的系统应用程序。

这是出于安全原因确定的-您的应用程序没有权限放置应用程序小部件 在屏幕上没有用户的知识。唯一的方法就是让用户选择 列表中的小部件或应用程序必须安装在/system/app文件夹中,并且
这样,应用程序就是一个具有所有所需权限的系统应用程序。

即使appWidget是我的,即使appWidget在同一个应用程序中?这样的事情不可能是因为安全措施,不是吗?正如我所写的,用户必须从android系统的预定义小部件列表中选择小部件,否则你的应用程序就是系统应用程序。一个小例子:你编写了一个很好的应用程序,包括一个小部件,用户安装了你的应用程序。在安装过程中或首次执行应用程序时,您的活动会在用户工作区上安装一个小部件。而且,现在是安全问题:你的小部件读取所有用户联系人并将其发送到你的服务器-在用户不知情的情况下,他/她仍然无法对你的sad应用程序小部件执行任何操作。请解释更多。如果我把一个appWidget放在我的应用程序中,它只会获得我给它的权限,因此用户不会惊讶于一个appWidget在显示它的我的活动中使用这些权限,因为活动和appWidget都是同一个应用程序的一部分。我还可以看到,对于一些启动器,默认情况下会显示一些AppWidget。例如,在“GoLauncher”上,默认情况下会显示google search appWidget。他们是如何做到的?我认为对于启动器来说,他们使用自己的视图,而不是真正的AppWidget。应用程序可以在没有用户确认的情况下放置appWidget的唯一方法是将其用作系统应用程序,这需要一个根或从一开始就存在。即使appWidget是我的,即使appWidget在同一应用程序中?这样的事情不可能是因为安全措施,不是吗?正如我所写的,用户必须从android系统的预定义小部件列表中选择小部件,否则你的应用程序就是系统应用程序。一个小例子:你编写了一个很好的应用程序,包括一个小部件,用户安装了你的应用程序。在安装过程中或首次执行应用程序时,您的活动会在用户工作区上安装一个小部件。而且,现在是安全问题:你的小部件读取所有用户联系人并将其发送到你的服务器-在用户不知情的情况下,他/她仍然无法对你的sad应用程序小部件执行任何操作。请解释更多。如果我把一个appWidget放在我的应用程序中,它只会获得我给它的权限,因此用户不会惊讶于一个appWidget在显示它的我的活动中使用这些权限,因为活动和appWidget都是同一个应用程序的一部分。我还可以看到,对于一些启动器,默认情况下会显示一些AppWidget。例如,在“GoLauncher”上,默认情况下会显示google search appWidget。他们是如何做到的?我认为对于启动器来说,他们使用自己的视图,而不是真正的AppWidget。应用程序可以在没有用户确认的情况下放置appWidget的唯一方法是将其作为系统应用程序使用,这需要一个根或从一开始就存在。