안드로이드 개발 질문/답변
(글 수 45,052)
위젯을 클릭했을 때 해당 위젯의 아이디를 어떻게 얻을 수 있을까요?
위젯이 하나일 때는 위젯 아이드를 얻어오는데 문제가 없습니다.
하지만, 위젯이 여러개 일때는 마지막 위젯의 아이디를 계속 표시하더라구요..
AppWidgetProvider를 상속한 클래스의 코드
PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_NO_CREATE); 에서 마지막 파라미터인 Flag를
PendingIntent.FLAG_NO_CREATE
PendingIntent.FLAG_CANCEL_CURRENT
PendingIntent.FLAG_ONE_SHOT
PendingIntent.FLAG_UPDATE_CURRENT
위에 것들 중 하나로 나꾸어 테스트해 보아도 마찬가지네요...
구글에 찾아보니 PendingIntent를 재사용해서 그렇다고 하는 것 같은데...
클릭할 때 각 위젯의 아이디를 어떻게 얻어 올 수 있을가요?
읽어 주셔서 감사합니다. ^^
위젯이 하나일 때는 위젯 아이드를 얻어오는데 문제가 없습니다.
하지만, 위젯이 여러개 일때는 마지막 위젯의 아이디를 계속 표시하더라구요..
AppWidgetProvider를 상속한 클래스의 코드
private static final String SELECT_LOCATION_ACTION = "com.test.widget.SELECT_LOCATION"; ... RemoteView를 만들때 Intent intent = new Intent(SELECT_LOCATION_ACTION); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_NO_CREATE); views.setOnClickPendingIntent(R.id.widget_layout, pendingIntent);
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(SELECT_LOCATION_ACTION)) {
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
Log.i("TEST", "appWidgetId is " + appWidgetId);
}
PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_NO_CREATE); 에서 마지막 파라미터인 Flag를
PendingIntent.FLAG_NO_CREATE
PendingIntent.FLAG_CANCEL_CURRENT
PendingIntent.FLAG_ONE_SHOT
PendingIntent.FLAG_UPDATE_CURRENT
위에 것들 중 하나로 나꾸어 테스트해 보아도 마찬가지네요...
구글에 찾아보니 PendingIntent를 재사용해서 그렇다고 하는 것 같은데...
클릭할 때 각 위젯의 아이디를 어떻게 얻어 올 수 있을가요?
읽어 주셔서 감사합니다. ^^




다음과 같이 위젯 id를 Uri로 파시아여 setData()에 넣고
Uri appWidgetUri = Uri.parse("" + appWidgetId); intent.setData(appWidgetUri); pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);불려지는 activity에서 data를 파싱하여 사용하면 되네요 ^^;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri data = getIntent().getData(); int appWidgetId = Integer.parseInt(data.toString()); ... }