我使用以下代码:
我的主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
int idWidget;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(getIntent().getExtras()!=null){
idWidget=getIntent().getExtras().getInt("com.example.testwidget.myIntent.IDWidget");
Toast.makeText(this,"Id widget : "+Integer.toString(idWidget),Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我的小部件提供商:
public class myWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context contexte, AppWidgetManager gestionnaireWidget, int[] appWidgetIds) {
final int N = appWidgetIds.length;
int appWidgetId;
RemoteViews vue;
Intent intentPostIt;
PendingIntent pendingIntentPostIt;
Toast.makeText(contexte,"Starting updating widgets",Toast.LENGTH_SHORT).show();
for (int i=0; i<N; i++) {
appWidgetId = appWidgetIds[i];
Toast.makeText(contexte,"Id widget : "+Integer.toString(appWidgetId),Toast.LENGTH_LONG).show();
intentPostIt = new Intent(contexte,MainActivity.class);
Logger.getLogger(MainActivity.class.getName()).log(Level.INFO,"Intent : "+intentPostIt.toString());
intentPostIt.setAction("com.example.testwidget.myIntent");
intentPostIt.putExtra("com.example.testwidget.myIntent.IDWidget",appWidgetId);
pendingIntentPostIt = PendingIntent.getActivity(contexte,0, intentPostIt,0);
Logger.getLogger(MainActivity.class.getName()).log(Level.INFO,"Intent extra : "+Integer.toString(intentPostIt.getIntExtra("GL.PostIt.IDWidget",-1)));
vue=new RemoteViews(contexte.getPackageName(),R.layout.widget_description);
vue.setOnClickPendingIntent(R.id.widget,pendingIntentPostIt);
gestionnaireWidget.updateAppWidget(appWidgetId,vue);
}
Toast.makeText(contexte,"Ending updating widgets",Toast.LENGTH_SHORT).show();
}
}
使用此代码,当在主屏幕上添加第一个小部件时,会Toast
通知您 AppWidgetManager 的update
功能正在启动。一秒钟Toast
为您提供正在处理的小部件的 ID。第三个通知你update
函数的结束。
如果您在主屏幕上添加第二个小部件,则会重复相同的序列,但使用另一个 ID 号。
现在,单击第一个小部件:主活动已启动,并且 a为您提供与启动应用程序Toast
的绑定的 Id 。Intent
关闭应用程序并触摸另一个小部件:该应用程序再次启动并Toast
出现另一个。在我看来,它应该给出第二个小部件的 ID。情况并非如此:第一个 Id 再次显示。
为什么我的应用程序在第二个小部件启动时没有检索到正确的 ID 号?我的代码有什么问题吗?它应该如何工作?如果是,我如何区分哪个小部件启动了该应用程序?