2016-11-20 5 views
1

ウィジェットをホーム画面に追加する機能を備えたアプリケーションを作成しました。このウィジェットは、Nexus 6PとMotorola Moto G3で動作しています。Android - Samsung:設定作業でウィジェットを作成できない

サムスンの携帯電話(S3 mini(4.1.2)、S5、S6(6.0.1)でテスト済み)では、ウィジェットは全く追加されず、TouchWizがクラッシュします。

別のランチャー(Nova)では、ウィジェットはS3 mini上に作成されません。

logcatでは、エラーメッセージは一切表示されません。

できるだけ問題を絞り込もうとしました。 counter_widget_info.xmlからandroid:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"を削除すると、ウィジェットが作成されます。構成アクティビティを使用したい場合、TouchWizはSamsung S3 miniでクラッシュします。私は次の行にウィジェットを登録したAndroidManifest.xmlで

<?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> 

:Java側で

<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に次のように持っている:

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); 
    } 
} 

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は実際に決してホーム画面に行ったことのないウィジェットの参照に何らかの形で保持していて、それらの更新をブロードキャストし始めたようだ。私はちょうどそれ自体を更新する既存のウィジェットプロジェクトでテストを実行し、毎回「トースト」を表示するので気付いたことがあります。テストを続行する前に、テストしたすべてのデバイスで完全なアンインストールを実行して、それをクリアしたい場合があります。 –

答えて

2

私自身のSamsungデバイスでのテストから、Intentには、RESULT_CANCELLEDであってもApp Widget IDが添付されていないと、TouchWizのチョークが問題になっているようです。

the App Widget developer pageから:

  • のApp Widgetのホストが設定アクティビティを呼び出し、構成アクティビティーは常に結果を返す必要があります。結果には、アクティビティを開始したインテントによって渡されたApp Widget ID(インテント内に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); 
関連する問題