【问题标题】:Android simple widget that launches activity启动活动的 Android 简单小部件
【发布时间】:2011-06-15 03:02:33
【问题描述】:

嗨,我以前从未使用过小部件,但我想做的是创建一个非常简单的小部件,我基本上想制作一个只有一个图标的 1 x 1 小部件,只是一个设置为背景的图像文本只是一个小图标,当按下图标时,我想打开一个活动。基本上我想在应用程序抽屉中以小部件形式制作第二个图标,以打开另一个活动而不是主要活动。 非常感谢任何帮助

【问题讨论】:

    标签: android android-activity widget android-intent launch


    【解决方案1】:

    经过大量研究和玩,我的提供者最终看起来像这样

    public class WidgetProvider extends AppWidgetProvider {
        @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];
    
                Intent intent = new Intent(context, ClassToLaunchHere.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
                views.setOnClickPendingIntent(R.id.widget, pendingIntent);
    
                appWidgetManager.updateAppWidget(appWidgetId, views);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      在https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget 上可以看到几个显示最简单方法的应用小部件实现。

      具体来说,https://github.com/commonsguy/cw-advandroid/blob/master/AppWidget/PairOfDice/src/com/commonsware/android/appwidget/dice/AppWidget.java 展示了如何使用 PendingIntent 作为按钮的 onClick 目标。您可以让您的 PendingIntent 启动一个 Activity,您应该一切顺利。

      【讨论】:

      【解决方案3】:

      声明一个变量

      public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";
      

      然后添加 onUpdate 和 onReceive

      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                           int[] appWidgetIds) {
          ComponentName thisWidget = new ComponentName(context, DigitalClock.class);
      
          RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.digital_clock);
      
          for (int widgetId : appWidgetManager.getAppWidgetIds(thisWidget)) {
              remoteViews.setOnClickPendingIntent(R.id.imageView, getPendingSelfIntent(context, YOUR_AWESOME_ACTION));
              appWidgetManager.updateAppWidget(thisWidget, remoteViews);
          }
      }
      
      @Override
      public void onReceive(Context context, Intent intent) {
          // TODO Auto-generated method stub
          super.onReceive(context, intent);
      
          if (YOUR_AWESOME_ACTION.equals(intent.getAction())) {
      
              AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
      
              RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.digital_clock);
              ComponentName watchWidget = new ComponentName(context, DigitalClock.class);
      
              appWidgetManager.updateAppWidget(watchWidget, remoteViews);
      
              Intent ntent = new Intent(context, MainActivity.class);
              ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(ntent);
      
              //Toast.makeText(context, YOUR_AWESOME_ACTION, Toast.LENGTH_SHORT).show();
          }
      }
      
      protected PendingIntent getPendingSelfIntent(Context context, String action) {
          Intent intent = new Intent(context, getClass());
          intent.setAction(action);
          return PendingIntent.getBroadcast(context, 0, intent, 0);
      }
      

      并在清单上添加活动

      <activity android:name=".MainActivity">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
      </activity>
      

      希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        相关资源
        最近更新 更多