如何从Android AppWidget启动Activity?

ole*_*men 12 android android-activity android-appwidget

像这样的代码效果很好.

    Intent configIntent = new Intent (context, WidgetConfigActivity.class);
    configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteView.setOnClickPendingIntent(R.id.btn, pIntent);
Run Code Online (Sandbox Code Playgroud)

但是我想隐藏那个按钮,因为活动会出现,所以我试图将意图发送到小部件本身,在onReceive()方法中执行隐藏组件然后开始活动.问题是我无法startActivity()在AppWidget中使用函数.

有什么解决方案吗?

Com*_*are 17

问题是我无法在AppWidget中使用startActivity()函数.

是的你可以.您将一个Context对象传入onUpdate()(或onReceive())您的AppWidgetProvider- 调用startActivity()它.

  • 没有什么比周五下午更好的公共答案了......告诉它就好了 (2认同)

ole*_*men 14

谢谢2 CommonsWare

还有一件事要做.context.startActivity();抛出RuntimeException这种情况.

从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志.这真的是你想要的吗?

所以你需要设置标志

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)

之前.


san*_*dhu 6

   // on receive function use this for new activity start
               Intent intent = new Intent (context, AppWdget.class);
               intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
               context.startActivity (intent);
Run Code Online (Sandbox Code Playgroud)