0

私のアプリケーションでFragmentは、 main に接続されている がありactivityます。これFragmentは、 の助けを借りてデータを表示しますadapter。で、「Watch From Home」のあるadapterを膨らませました。は、サーバーからのデータを表示します。ホーム画面に同じデータを表示したいのですが、「Watch From Home」テキストをクリックすると、ユーザーの操作なしでホーム画面が作成されます。layoutclickable textadapterwidget

ウィジェットに移動するには、「Watch From Home」のメソッドに何receiver MyWidgetProviderが必要ですか? onClickText()私は認めなければなりません、私はアンドロイドが初めてです。ありがとう

Android マニフェスト ファイル

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pack.android.receiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <receiver android:name="MyWidgetProvider" >
            <intent-filter >
                <action 
                    android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>
    </application>

    <uses-sdk android:minSdkVersion="8" />

</manifest> 

MyWidgetProvider.Java ファイル

public class MyWidgetProvider extends AppWidgetProvider {

    private TextView team1Name;
    private TextView team2Name;
    private TextView team1Score;
    private TextView team2Score;

    public static boolean widgetView=false;
      private static final String LOG = "com.playup.android.receiver";

      public MyWidgetProvider(TextView team1Name, TextView team2Name, TextView team1Score, TextView team2Score){
          this.team1Name=team1Name;
          this.team2Name=team2Name;
          this.team1Score=team1Score;
          this.team2Score=team2Score;
          initializeViews();
      }

      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {

        Log.w(LOG, "onUpdate method called");
        // Get all ids
        ComponentName thisWidget = new ComponentName(context,MyWidgetProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

        // Build the intent to call the service
        Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

        // Update the widgets via the service
        context.startService(intent);
      }

      public void initializeViews(){
    //    team1Name= (TextView)content_layout.findViewById(R.id.team1Name);

      }
} 

UpdateWidgetService

public class UpdateWidgetService extends Service {
  private static final String LOG = "com.playup.android.receiver";

  @Override
  public void onStart(Intent intent, int startId) {
    Log.i(LOG, "Called");
    // Create some random data

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
        .getApplicationContext());

    int[] allWidgetIds = intent
        .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

    ComponentName thisWidget = new ComponentName(getApplicationContext(),
        MyWidgetProvider.class);
    int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
    Log.w(LOG, "From Intent" + String.valueOf(allWidgetIds.length));
    Log.w(LOG, "Direct" + String.valueOf(allWidgetIds2.length));

    for (int widgetId : allWidgetIds) {
      // Create some random data
      int number = (new Random().nextInt(100));

      RemoteViews remoteViews = new RemoteViews(this
          .getApplicationContext().getPackageName(),0x7f030061);        //Since R could not be resolve, I used the generated ids
      Log.w("Widget", String.valueOf(number));
      // Set the text
      remoteViews.setTextViewText(0x7f0a022a,"Random: " + String.valueOf(number));

      // Register an onClickListener
      Intent clickIntent = new Intent(this.getApplicationContext(),MyWidgetProvider.class);

      clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
      clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
          allWidgetIds);

      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);
      remoteViews.setOnClickPendingIntent(0x7f0a022a, pendingIntent);
      appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
    stopSelf();

    super.onStart(intent, startId);
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
4

3 に答える 3

1

簡単に言うと、ユーザーの操作なしにホーム ウィジェットを作成することはできません。


アップデート:

受信者タグは次のように開始する必要があります。

<receiver
    android:name=".MyWidgetProvider" 
    android:label="My widget label" >
    <!-- The rest as is -->

</receiver>
于 2012-09-06T07:29:32.383 に答える
1

ホーム画面ウィジェットは、ユーザーが直接ホーム画面に追加することしかできません。ユーザーのみが、ゲストとしてホーム画面または他のアプリケーションにウィジェットを追加できます。

編集:

ウィジェット リストでウィジェットを表示するには:

  1. AppWidgetProviderマニフェストに登録する必要があります。
  2. あなたのアプリにはLauncher/Mainアクティビティが必要であり、ウィジェットリストに表示される前に、アプリはユーザーによって直接実行される必要がありbroadcastreceiverますservice。アプリはユーザーによって直接実行されます。マニフェストを見ると、アプリにはLauncher/Mainアクティビティがないことがわかります(レシーバーのみがあります)。そのため、ユーザーは実行できず、AppWidgetProvider (ブロードキャストレシーバー) は登録されず、その際、ウィジェットリストにウィジェットが表示されません。
于 2012-09-06T07:30:32.407 に答える
0

これにはしばらく頭を悩ませました。meta-dataタグの子としてタグを持っていましたがintent-filter、これは間違っています。はタグmeta-dataの子になります。receiver

不適切なバージョン

 <receiver
            android:name=".AppWidgetReceiver"
            android:label="AppWidgetReceiver" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/appwidget_info" />
            </intent-filter>
        </receiver>

以下は正しいバージョンです

<receiver android:name=".AppWidgetReceiver"
            android:label="AppWidgetReceiver" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/appwidget_info" />
        </receiver>
于 2015-06-20T06:23:50.593 に答える