8
tôi đã phát triển một widget android có nút mutiple trên đó. nó hoạt động tốt và tôi thêm lần đầu tiên. nhưng khi tôi khởi động lại các nút thiết bị không kích hoạt. ở đây nó là những gì tôi làmwidget android với nhiều nút
đây là xml cấu hình
<receiver android:name="com.islem.widget.MyWidgetMain" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<!-- Broadcast Receiver that will also process our self created action -->
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER1"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER2"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER3"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER4"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER5"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER6"/>
<action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RELOAD_ALARM"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/k_widget_provider" />
ở đây là phương pháp onUpdate
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.kalan_widget_main);
Intent refreshButtonIntent = new Intent(context, KalanWidgetMain.class);
refreshButtonIntent.setAction(ACTION_WIDGET_RECEIVER1);
Intent voiceTabIntent = new Intent(context, KalanWidgetMain.class);
voiceTabIntent.setAction(ACTION_WIDGET_RECEIVER2);
Intent dataTabIntent = new Intent(context, KalanWidgetMain.class);
dataTabIntent.setAction(ACTION_WIDGET_RECEIVER3);
Intent smsTabIntent = new Intent(context, KalanWidgetMain.class);
smsTabIntent.setAction(ACTION_WIDGET_RECEIVER4);
Intent prevButtonIntent = new Intent(context, KalanWidgetMain.class);
prevButtonIntent.setAction(ACTION_WIDGET_RECEIVER5);
Intent nextButtonIntent = new Intent(context, KalanWidgetMain.class);
nextButtonIntent.setAction(ACTION_WIDGET_RECEIVER6);
refreshButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
voiceTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
dataTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
smsTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
prevButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
nextButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent refreshButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, refreshButtonIntent, PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent voiceTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, voiceTabIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent dataTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, dataTabIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent smsTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, smsTabIntent, PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent prevButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, prevButtonIntent, 0);
PendingIntent nextButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, nextButtonIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.kalanRefresh, refreshButtonPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.kalanTabVoiceBg, voiceTabPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.kalanTabDataBg, dataTabPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.kalanTabSMSBg, smsTabPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.kalanPrev, prevButtonPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.kalanNext, nextButtonPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
KalanUpdater.registerWidget(context, appWidgetManager, appWidgetId);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
ở đây là phương pháp onReceive
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("on onReceive");
Toast.makeText(context, "onReceive", Toast.LENGTH_SHORT).show();
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER1) || intent.getAction().equals(ACTION_WIDGET_RECEIVER2) ||
intent.getAction().equals(ACTION_WIDGET_RECEIVER3) || intent.getAction().equals(ACTION_WIDGET_RECEIVER4) ||
intent.getAction().equals(ACTION_WIDGET_RECEIVER5) || intent.getAction().equals(ACTION_WIDGET_RECEIVER6) ||
intent.getAction().equals(ACTION_WIDGET_RELOAD_ALARM)
) {
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
System.out.println("appWidgetId:" + appWidgetId + ", action:" + action);
}
super.onReceive(context, intent);
}
}
tôi đã chuyển nội dung của cập nhật thành một phương thức và gọi từ onEnabled và onUpdate như dưới đây nhưng không hoạt động. và tôi cũng có thể xem nhật ký onUpdate khi khởi động lại. \t @ Override \t public void onEnabled (Context context) { \t \t // TODO Auto-tạo ra phương pháp sơ khai \t \t super.onEnabled (context); \t \t Toast.makeText (context, "onEnabled", Toast.LENGTH_SHORT) .show(); \t \t \t \t \t \t int [] appWidgetIds = AppWidgetManager.getInstance (context) .getAppWidgetIds (mới ComponentName (bối cảnh, KalanWidgetMain.class)); \t \t startWidget (ngữ cảnh, AppWidgetManager.getInstance (ngữ cảnh), appWidgetIds); \t} – ysnky
không xóa khỏi onUpdate chỉ cần sao chép trong onEnabled –