내 응용 프로그램 위젯에서 다른 응용 프로그램을 시작하고 싶습니다. 위젯은 항목 목록이며 항목을 클릭하면 Google Plus와 같은 앱이 열립니다. 목록에서 항목을 누르면 아무 일도 일어나지 않습니다. setData 및 setComponentName을 제거하면 사용할 앱을 묻는 대화 상자가 나타납니다. appWidget 콜렉션의 PendingIntent와 데이터 및 componentname을 병합 할 수 있습니까?AppWidget setFillInIntent가 setData 또는 componentName에 설정된 데이터를 처리 할 수 없습니까?
public class StreamsWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
...
//set service for list view
Intent listIntent = new Intent(context, StreamsWidgetService.class);
listIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
listIntent.setData(Uri.parse(listIntent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.streamItemsList, listIntent);
...
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setPendingIntentTemplate(R.id.streamItemsList, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
}
을 그리고 StreamsWidgetService은 다음과 같습니다 :
내의 AppWidgetProvider는 다음과 같습니다 fillIntent없이 정상적인 활동을 사용하는 경우
이public class StreamsWidgetService extends RemoteViewsService {
private static final String TAG = "StreamsWidgetService";
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new StreamItemWidgetFactory(intent);
}
private class StreamItemWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
@Override
public RemoteViews getViewAt(int position) {
StreamItem item = mItems.get(position);
RemoteViews rv = new RemoteViews(getPackageName(), R.layout.widget_item);
...
Intent intent = new Intent();
intent.setData(ContentUris.withAppendedId(StreamItems.CONTENT_URI, item.getId()));
AccountType at = item.getAccountType();
intent.setComponent(new ComponentName(at.getPackageName(), at.getViewStreamItemActivity()));
rv.setOnClickFillInIntent(R.id.streamItemRowId, intent);
Log.d(TAG, "FillIntent set for " + item.getId() + " at position " + position + " with data " + intent.getDataString() + " and component " + intent.getComponent().toString());
return rv;
}
...
}
}
이 작품 :
final AccountType at = item.getAccountType();
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(ContentUris.withAppendedId(StreamItems.CONTENT_URI, item.getId()));
intent.setClassName(at.getPackageName(), at.getViewStreamItemActivity());
startActivity(intent);
어떻게 해결할 수 있습니까? 내가 잘못하고 있는게 뭐지?
나는 이것을 시도해보고 그것이 효과가 있다면 받아 들인 대답으로 대답하도록 설정할 것입니다. :) – Daverix
+1 잘 근무했습니다. – levi
[Daverix answer] (http://stackoverflow.com/a/12727542/1105473)에서 메서드를 사용하고 있었지만 속도가 매우 느려 보였습니다. 그래서 저는 클릭으로 Activity를 직접 시작하려했으나 답을 얻었지만 더 빠르게 보이지는 않습니다. 정상적인가요? 내가 더 기대할 수 있을까? – Eloar