問題タブ [android-appwidget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4346 参照

android - Android-AppWidgets、AlarmManager、AsyncTask

AlarmManager生成されたブロードキャストでアプリウィジェットを更新するのはあまりうまくいきません。これが私がすることです:

で初期AlarmManagerAppWidgetProvider#onEnabled

また、によって起動された更新を単にリッスンするブロードキャストレシーバーを定義しますAlarmManagerAsyncTask更新が実行されると、ネットワーク呼び出しを行うコードが実行されます。AsyncTaskが完了すると()onPostExecute、以前に取得したインスタンスを使用しAppWidgetManagerてウィジェットを更新します。ログにメッセージが表示されるまで、すべてが実際に正常に実行されます。"Process com.foo.myapp (pid 12345) has died"その後、AlarmManager別の更新が実行されることはありません。

アラームを再開する何らかのチェックが必要ですか?たとえば、ユーザーがウィジェットの親アプリにアクセスする場合はどうなりますか?リクエストの途中でアプリが停止した場合に、長時間実行されるタスクを完了してウィジェットに戻ることができるようにするにはどうすればよいですか?

0 投票する
3 に答える
1248 参照

android - appWidget 方向コード

ホーム画面で電話の向きが変わったとき、つまりキーボードがひっくり返ったときなどに実行したいappwidgetのコードがあります。appwidget の imageview で変更したい画像があります。実行時に作成される画像ファイルの名前は実行時までわからないため、方向にリンクされたさまざまなレイアウト (つまり、「layout」と「layout-land」) を使用できません。ホーム画面が表示され、appwidget がアクティブで、向きが変更された場合にのみ実行するコードをトリガーする方法はありますか?

configuration_change ブロードキャストをリッスンすることはできますが、これは電話が横向きまたは縦向きに切り替わるたびに実行され、ホーム画面が表示されているときにのみ実行されます。Androidでこれを行う良い方法は考えられません。ありがとう

ライアン

0 投票する
3 に答える
25502 参照

android - Android ウィジェットが更新されない

ホーム画面に表示するシンプルなウィジェットを実装しようとしています。私が経験している問題は、ウィジェットをインストールするときに onUpdate が一度しか呼び出されないことです。構成は以下です。注: 更新期間を 20 秒にしないと、バッテリーが消耗することがわかっているためです (テストのみ)。

構成:

マニフェストの抜粋:

ウィジェットをインストールすると、次のような動作が見られます。私の WidgetProvider クラスでは、onReceive が呼び出され、onEnabled、onReceive、onUpdate の順に呼び出されます。

その後、ウィジェットが表示され、onUpdate が再度呼び出されることはありません。また、onUpdate が呼び出され、上記の XML で設定されたすべて (更新期間など) が正しい場合に、プロバイダーの設定を検査します。

0 投票する
1 に答える
1169 参照

android - ホームプロセスの再起動後に分離されたAppWidgetインテント

私のAndroidアプリTransdroidは、いくつかのホーム画面ウィジェットを提供しています。すべてのAppWidgetには2つの「ボタン」(ImageButton)があり、1つはアプリを起動し、もう1つはAppWidgetコンテンツを更新するアクティビティを開始します。ものすごく単純。これがスクリーンショットです。ウィジェットコードは私のGoogleCodeWebサイトにありますが、最も重要なのは次のとおりです。

問題は、ホームプロセスの再起動後にウィジェットのonUpdateが呼び出されないため、ボタンに機能をアタッチするために使用されるPendingIntentsが失われることです。

再現するのはかなり簡単です。

  1. エミュレータを起動します
  2. ウィジェットを追加します(たとえば、PendingIntentを使用してアクティビティを開始します)
  3. ボタンをクリックして、実際に機能することを確認してください
  4. ホームプロセスを強制的に強制終了します(「adb-e shell kill 96」、ここで96はandroid.process.acoreのPIDです)
  5. ウィジェットのボタンが機能しなくなりました。

より正確には、android.process.acoreホームプロセスが再起動されたときにonReceiveが呼び出されないため、onUpdateは呼び出されません。次に、インテントはアタッチされません。

誰もが同じ問題を経験し、この問題を回避する方法を知っていますか?

0 投票する
2 に答える
1352 参照

android - エレガントなappwidgetスキンソリューションを探しています

appwidgetアプリケーションがあり、ユーザーが実行時に適用できるスキンを作成できるようにしたいと考えています。私の好ましい解決策は、ImageViewのウィジェットに合うように伸びる9つのパッチpng画像を含むapkファイルを使用することですが、別のパッケージ化手法(zipファイルなど)を使用する必要があるように見え始めます。

私が試したこと:context.getResourcesForApplication(my.app).getResources ...を使用して9つのパッチリソースをDrawableとしてインポートし、キャンバスを使用してそれらをビットマップに変換し、setImageViewBitapを使用してビットマップをRemoteViewに設定します。変換中に結果のビューのサイズ(myBitmap.setBounds(..、..))を指定する必要があり、アプリウィジェットの幅/高さの一部が修正されていないため、これは機能しませんでした。おそらく、私が逃した高さなどを取得する方法があります。

setImageViewUri()を使用してRemoteViewにリソースを直接インポートする関数がandroid.resource:// Uriを読み取っていないように見えるため、これは機能しません(ImageViewソースを調べたところ、ファイルのパスとコンテンツのみを読み取ったようです。 :// Uri's)

setImageViewResource()を使用してリソースをRemoteViewに直接インポートしますが、外部パッケージから取得したIDにパッケージ参照が含まれていないため、機能しませんでした。

私が避けようとしているのは、すべてのアプリウィジェットの幅と高さをハードコーディングするか、別のパッケージスキームを使用することです。

誰かがappwidgetスキンをうまく実装していて、知識を共有したいですか?あるいは、指摘できる穴が私のロジックのどこかにあるかもしれません。

現在ここにはコードがありませんが、必要に応じてコードを提供できます。

0 投票する
1 に答える
1247 参照

android - ビューをホーム画面ウィジェットに動的に追加できますか?

ホーム画面のウィジェットを書いています。RemoteViews を使用して、ImageView などのビューをホーム画面ウィジェットに追加することはできますか? ホーム画面ウィジェットのビューを動的に生成したいと考えています。

ありがとう。

私のコードは上記のようなものです。しかし、 を呼び出すupdateViews.addView(aView)と、IDE でそれが許可されず、コンパイル エラーが発生しました。

0 投票する
2 に答える
6446 参照

android - AppWidget の ProgressBar

アプリ ウィジェットで ProgressBar を使用すると、興味深い状況に遭遇しました... ドキュメント ( http://developer.android.com/guide/topics/appwidgets/index.html ) には、ProgressBar がサポートされているウィジェット クラスであると記載されています。 .

ProgressBar を App Widget に表示するのに問題はありませんが、問題は、バックグラウンド処理が行われているときにユーザーへの視覚的なフィードバックとしてのみ表示されるようにすることです。

ImageViews では、RemoteViews.setViewVisibility() を介してこれを行い、すべて正常に動作します。ただし、ProgressBar を使用すると、ProgressBar はこのメソッドを使用できないという例外が発生します。

これは意図的なものですか、それともバグですか? この問題を回避する方法はありますか?

0 投票する
4 に答える
12704 参照

android - Android - ウィジェットを頻繁に更新する方法は?

コンテンツを毎分更新する必要があるウィジェットを作成します (時間関連のデータを表示します)。

ただし、現在非表示の場合はウィジェットを更新する必要はありません。つまり、次のことを意味します。

  • 画面がオフになっている
  • 別のアプリが実行中です
  • ウィジェットは別の (非表示の) ホーム画面タブに配置されます

デバイスを起動したり、不要な計算を行ったりせずに、表示されているウィジェットのみを毎分更新する最良の方法は何ですか? ウィジェットが表示されてから、更新までのわずかなラグは許容されます。

0 投票する
1 に答える
6642 参照

android - Android の AppWidget から正しい DisplayMetrics を取得するにはどうすればよいですか?

Android AppWidget で実行時に画面密度を決定する必要があります。HDPI エミュレーター デバイス (avd) をセットアップしました。通常の実行可能プロジェクトをセットアップし、次のコードを onCreate メソッドに挿入する場合:

これにより、期待どおり「画面密度240」が出力されます。

ただし、AppWidget プロジェクトをセットアップし、このコードを onUpdate メソッドに挿入すると、次のようになります。

これにより、「画面密度160」が出力されます。デバッガーを接続しているときに、ここの Resources オブジェクトの mDefaultDisplay メンバーが AppWidget の場合は null であることに気付きました。

同様に、実行時に AppWidget の context.getResources() から取得した Resources オブジェクトを使用してリソースを取得すると、画面密度に基づいて間違ったリソースが返されます。たとえば、mdpi には 60x60px のドローアブルがあり、hdpi には 80x80 のドローアブルがあります。context.getResources().getDrawable(...) を使用してこの Drawable オブジェクトを取得すると、60x60 バージョンが返されます。

AppWidget のコンテキストから実行時にリソースを正しく処理する方法はありますか?

ありがとう!

0 投票する
2 に答える
10637 参照

android - Androidホーム画面ウィジェットからアクティビティを起動する方法

ホーム画面ウィジェットを実装する方法に頭を悩ませようと必死になっています。今、私は(最終的に)マニフェストにインテントフィルターを設定するボタンの押下に反応するウィジェットのボタンを取得することができました。

ただし、ボタンが押されたときにアクティビティを起動する方法を一生理解することはできません。基本的に、ここに私が持っているコードがあります:

ただし、本当にやりたいことは、トースト メッセージを表示するのではなく、新しいアクティビティを開始することです。保留中のインテントと関係があることは知っていますが、それを機能させる方法がわかりません。

ヘルプとサンプル コードをいただければ幸いです。これに答えてくれた人に感謝します!