문제

내 Android 앱 Transdroid는 여러 홈 화면 위젯을 제공합니다. 모든 AppWidget에는 2 개의 '버튼'(ImageButton)이 있으며, 하나는 앱을 시작하고 하나는 AppWidget 컨텐츠를 새로 고치는 활동을 시작합니다. 매우 간단합니다. 여기 스크린 샷입니다. 위젯 코드는 내 Google 코드 웹 사이트에 있지만 가장 중요한 것은 다음과 같습니다.

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_15);
views.setOnClickPendingIntent(R.id.widget_action, PendingIntent.getActivity(context, 0, new Intent(context, Transdroid.class), 0));
appWidgetManager.updateAppWidget(id, views);

문제는 다음과 같습니다. 위젯의 Onupdate는 홈 프로세스가 다시 시작된 후에 호출되지 않으므로 기능을 버튼에 첨부하는 데 사용되는 보급 인턴트가 손실됩니다.

재현하기가 상당히 쉽습니다.

  1. 에뮬레이터를 시작하십시오
  2. 위젯 추가 (보급 인턴을 사용하여 활동을 시작합니다)
  3. 버튼을 클릭하여 실제로 작동합니다
  4. 포스 홈 홈 프로세스 ( 'ADB -E Shell Kill 96'여기서 96은 Android.process.acore의 PID입니다)
  5. 위젯의 버튼이 더 이상 작동하지 않습니다.

더 정확한 : android.process.acore 홈 프로세스가 다시 시작될 때 온도가 없으므로 Onupdate가 호출되지 않습니다. 결과적으로 의도는 첨부되지 않습니다.

누구든지 같은 문제를 경험 하고이 문제를 우회하는 방법을 알고 있습니까?

도움이 되었습니까?

해결책

방금 내 appWidget 두 개를 테스트했으며 Acore를 죽인 후 클릭 이벤트가 잘 작동합니다. 내 관련 코드는 다음과 같습니다.

    final RemoteViews views = new RemoteViews(context.getPackageName(), layoutId);
    views.setOnClickPendingIntent(R.id.widget_view, PendingIntent.getActivity(
            context, 
            0, 
            new Intent(context, MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
            PendingIntent.FLAG_UPDATE_CURRENT));

내가 볼 수있는 주요 차이점은 의도 관련 플래그입니다. 나는 그들이 확실히 노력할 가치가 있다고 말하고 싶습니다. [그만큼 layoutId 내 코드의 매개 변수는 elsewere가 설정되어 있습니다. 이 동일한 코드는 레이아웃이 다른 여러 위젯에 사용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top