44

ウィジェットを実装していますが、次の問題に直面しています。

1) onUpdate構成アクティビティを指定した場合でも、ウィジェットをホーム画面に追加すると呼び出されます。ホーム画面に追加するとすぐに、APPWIDGET_ENABLEDブロードキャストが送信され、続いAPPWIDGET_UPDATEて設定アクティビティが開始されます。これはバグですか? onUpdate構成アクティビティが戻る前に呼び出されているメソッドをどのように理解すればよいですか? 共有設定値を介してそれを行うことはできますが、開発者ガイドに書かれているように動作させたい、つまり、onUpdateメソッドを呼び出すべきではありません。

2) onUpdate毎秒呼び出されるわけではありません。つまり、テスト目的で秒にupdatePeriodMillis設定されています。マニフェスト ファイル内の宣言に何かミスがありましたか? Lint の警告が表示され続けますExported receiver does not need permissionが表示されますが、これは Lint の問題であり、私のせいではないと思います。 編集: 参照ドキュメント内でこれを見つけました:注: updatePeriodMillis で要求された更新は、30 分ごとに複数回配信されることはありません。したがって、指定した頻度でウィジェットが更新されず、時間をミリ秒に変更したのは正しいことです。1000010receiver1800000

3)独自のブロードキャスト アクションをウィジェット プロバイダーに配信したいのですがreceiver、同じプロバイダー クラスをターゲットとする別のブロックをマニフェストに追加するのは正しいですか、それともアクションintent-filterを含む内に別のインテント アクションのみを追加する必要がありAPPWIDGET_UPDATE ますか? ところで、私は 2 番目のreceiverブロックにコメントしましたが、それは上記の問題の原因ではありません。 アクションが自分のアプリコードによってのみトリガーされ、他の誰にもトリガーreceiver されないようにするために、エクスポートされていないと宣言したかったので、別のブロックを作成しました。intent-filter

AndroidManifest.xml

    <receiver android:name="MyWidgetProvider" 
        android:exported="true">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/my_widget_info" />
    </receiver>
    <receiver android:name="MyWidgetProvider" 
        android:exported="false">
        <intent-filter>
            <action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" />
        </intent-filter>
    </receiver>

my_widget_info.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="110dp"
    android:updatePeriodMillis="1800000"
    android:initialLayout="@layout/my_widget_layout"
    android:configure="org.test.mywidget.MyWidgetConfiguration" 
    android:resizeMode="none">
</appwidget-provider>
4

1 に答える 1