2016-11-20 1 views
1

위젯을 홈 화면에 추가 할 수있는 응용 프로그램을 만들었습니다. 위젯은 내 Nexus 6P와 Motorola Moto G3에서 작동합니다.Android - Samsung : 구성 활동으로 위젯 만들기가 실패합니다.

삼성 휴대 전화 (S3 미니 (4.1.2), S5, S6 (6.0.1)에서 테스트 됨)를 사용하면 위젯이 전혀 추가되지 않거나 TouchWiz가 손상 될 수 있습니다.

다른 런처 (Nova)를 사용하면 위젯이 S3 mini에도 생성되지 않습니다.

logcat에 오류 메시지가 전혀 표시되지 않습니다.

가능한 한 문제를 줄이려고했습니다. counter_widget_info.xml에서 android:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"을 제거하면 위젯이 생성됩니다. 구성 활동을 사용하려면 Samsung S3 mini에서 TouchWiz가 충돌합니다.

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="40dp" 
    android:minHeight="40dp" 
    android:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity" 
    android:updatePeriodMillis="1800000" 
    android:initialLayout="@layout/widget_counter" 
    android:resizeMode="horizontal|vertical" 
    android:widgetCategory="home_screen" 
    android:previewImage="@drawable/widget_preview"> 
</appwidget-provider> 

가의 AndroidManifest.xml에서 나는 다음과 같은 라인 위젯 등록 :

public class WidgetConfigurationActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WidgetConfigurationBinding binding = DataBindingUtil.setContentView(this, R.layout.widget_configuration); 
     setResult(RESULT_OK); 
    } 
} 

:

<receiver 
      android:name=".widgets.CounterWidgetProvider"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/counter_widget_info" /> 
</receiver> 

자바 측면을, 나는하여 WidgetConfigurationActivity에 다음있어 WidgetProvider 클래스의이 내용은 다음과 같습니다.

public class CounterWidgetProvider extends AppWidgetProvider { 
@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     Intent intent = new Intent(context, CounterWidgetProvider.class); 
     context.startService(intent); 
    } 
} 
+0

그냥 머리가 위로 : 나는 TouchWiz 충돌을 일으키는 테스트에서 나는 어떤 이상한 행동을 발견했습니다. 재부팅 후, TouchWiz는 실제로 홈 화면을 만들지 않은 위젯에 대한 참조에 어떻게 든 붙잡 았고, 업데이트 업데이트를 시작했습니다. 방금 전에 자주 업데이트되는 기존의 위젯 프로젝트로 테스트를 실행하고 매번 '토스트 (Toast)'를 보여주기 때문에주의해야합니다. 테스트를 계속하기 전에 테스트를 마친 모든 장치에서 전체 제거를 수행하여 제거하십시오. –

답변

2

내 자신의 삼성 기기에서 테스트 한 결과, 의 경우에도 Intent에 App 위젯 ID가 첨부되어 있지 않으면 TouchWiz가 질식하는 것으로 보입니다. the App Widget developer page에서

:

  • App 위젯 호스트는 구성 활동과 항상 결과를 반환해야합니다 구성 작업을 호출합니다. 결과에는 Activity를 실행 한 Intent가 전달한 App 위젯 ID가 포함되어야합니다 (Intent 엑스트라에 EXTRA_APPWIDGET_ID으로 저장 됨).

그것은 당신이 궁극적으로 결과를 처리 할 방법을 정확하게 불분명하지만, 가서 구성 Activity에서 경우에, onCreate()에 사용자의 백업을 유효한 결과를 설정 확실히하는 것이 좋습니다. 예 :

final int id = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0); 
final Intent result = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id); 
setResult(RESULT_OK, result); 
관련 문제