【问题标题】:Start Activity after put widget on screen将小部件放在屏幕上后启动 Activity
【发布时间】:2015-02-19 09:29:41
【问题描述】:

我遇到了一个问题: 将小部件放在屏幕上后,我想启动 ChooseWidgetActivity。

我像这样在 WidgetProvider 中编写 onUpdate 代码:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];

        //--- I'm starting activity here:
        Intent intent = new Intent(context, WidgetChooseActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
        //---

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout_icon);
        views.setOnClickPendingIntent(R.id.widgetIcon, pendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }

但只有我得到的是 WidgetChooseActivity,它在从小部件屏幕选择小部件后立即启动。我不能把它放在屏幕上,因为我的活动掩盖了 android 主屏幕。 在将小部件放在屏幕上之后是否可以开始活动?

【问题讨论】:

    标签: android android-appwidget


    【解决方案1】:

    前段时间我想出了一个解决我的问题的方法......在将小部件放在屏幕上之后开始一些活动,使用特殊的意图过滤器在清单中定义它就足够了,对于示例:

    <activity android:name=".MyWidgetConfigurationActivity">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
        </intent-filter>
    </activity>
    

    并在 AppWidgetProviderInfo 元数据中添加 android:configure 条目,例如:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:configure=".MyWidgetConfigurationActivity"
        android:initialLayout="@layout/widget_layout"
        android:minHeight="80dp"
        android:minWidth="80dp"
        android:updatePeriodMillis="30000" />
    

    【讨论】:

      【解决方案2】:

      是的,您可以为此使用处理程序。

       Handler handler = new Handler(); 
      
              handler.postDelayed(new Runnable() { 
                   public void run() {  
      
      
                       try {
                          // here write down the code  
      
                      }  catch (ExecutionException e) {
      
                          e.printStackTrace();
                      } 
      
                   }  
              }, 2000);
      

      【讨论】:

      • 答案正确吗?我认为他想延迟显示Activity,直到用户将项目放在屏幕上(如Gmail小部件) - 不要延迟它,因为如果用户持有小部件太久并且Activity突然出现,我们会有奇怪的动作。
      • @jeet 这并没有完全解决我的问题,因为用户总是有指定的时间将小部件放在主屏幕上。如果这个时间到了并且用户仍然持有小部件 - myActivity 的主屏幕和将小部件放在上面变得不可能......
      猜你喜欢
      • 2013-08-06
      • 2012-10-20
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多