私はいつも自分でほとんどのことを理解しているので、ここに質問を投稿することを避けようとしましたが、プログラミングのレンガの壁の1つにぶつかったと思います. これが以前に尋ねられたかどうかを尋ねて申し訳ありません(すべてグーグルアウトされるまでグーグルで検索しました)。ここでも検索しましたが、次の質問の例はほとんど見つかりませんでした.
Wi-Fi Bluetoothなどのオンとオフを切り替えることができるAndroidのボタンなど、2つ以上のボタンを含むウィジェットを作成することは可能ですか? ) 読んでいると、使用すると appwidgetids が明らかに変化するという印象を受けます。
たとえば、2 つのボタンがあり、クリックすると、個々のカテゴリごとに sqlite データベースに書き込む必要があります。例: 食品と飲料のカテゴリ。
明らかに、個々のボタンを機能させることはできますが、2つ以上を使用すると方法がわかりません。2 つのプロバイダーとサービスを作成する場合は、同じボタン セットのコピーを作成してから、基になっているボタンを変更するだけです。
ウェブ上で非常に多くの例を見てきたので、ここに配置するのに役立つとは思わなかったので、コードが不足していて申し訳ありません。
編集*
これを投稿して以来、私はまだこれを解決しようと試み続けています。例として次のリンクを使用して正しい方法を見つけたと思いました: [ http://shkspr.mobi/blog/2010/11/howto-android-audio-widget /][1]
現在、私のコードは次のとおりです。
AppWidgetProvider (コメント行を許してください):
package co.uk.timcs.myappwidget;
import co.uk.timcs.myappwidget.R;
import android.appwidget.AppWidgetProvider;
import java.util.Random;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;
public class MyWidgetProvider extends AppWidgetProvider {
// private static final String LOG = "de.vogella.android.widget.example";
public static String ACTION_WIDGET_CLICK = "CLICK1";
public static String ClickText2 = "CLICK2";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// // Get all ids
// ComponentName thisWidget = new ComponentName(context,
// MyWidgetProvider.class);
//
// int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
// for (int widgetId : allWidgetIds) {
// // Create some random data
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
// RemoteViews remoteViews1 = new RemoteViews(context.getPackageName(),
// R.layout.widget_layout);
//Log.w("WidgetExample", String.valueOf(number));
// Set the text
//remoteViews.setTextViewText(R.id.update, String.valueOf(number));
//remoteViews1.setTextViewText(R.id.update1, "Second TextView :"+String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
// intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.setAction(ACTION_WIDGET_CLICK);
intent.putExtra("IDS", appWidgetIds);
Intent intent1 = new Intent(context, MyWidgetProvider.class);
//intent1.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent1.setAction(ClickText2);
intent1.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent,0);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context,
0, intent1, 0);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
remoteViews.setOnClickPendingIntent(R.id.update1, pendingIntent1);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
// }
}
@Override
public void onReceive(Context context,Intent intent) {
RemoteViews updateviews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
if (intent.getAction().equals(ACTION_WIDGET_CLICK)) {
updateviews.setTextViewText(R.id.update, "Clicked!!!");
intent.putExtra("CLICKED?", 1);
} else {
super.onReceive(context, intent);
}
// } else if (intent.getAction()==ClickText1 && intent.getExtras().getInt("CLICKED?")==1) {
// updateviews.setTextViewText(R.id.update, "No Way Clicked!!! Again!!");
// intent.putExtra("CLICKED?", 0);
// }
}
}
Android マニフェストは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="co.uk.timcs.myappwidget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="co.uk.timcs.myappwidget.MyAppWidget"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="co.uk.timcs.myappwidget.ACTION_WIDGET_CLICK" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
</receiver>
</application>
</manifest>
しかし、TextView をクリックしても何も起こらず、何も変化しません。
EDIT 21:59は、onReceiveに1つ、マニフェストに1つの2つの変更を加えましたが、どちらも違いはありません。