問題タブ [android-service]

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 に答える
173 参照

android - サービスの進捗状況の更新

サービスからアクティビティへの更新を取得するにはどうすればよいですか? たとえば、ファイルをダウンロードしている場合、アクティビティに進行状況バーを表示したいと思います。AsyncTask を使用したくありません (アクティビティがフォーカスされているときにのみ実行されるため、これは適切ではありません)。

多くのアプリがこれを行うため、もちろん可能ですが、例を見つけるのは困難です.

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

android - getApplication()とgetApplicationContext()

私はこれに対する満足のいく答えを見つけることができなかったので、ここに行きます:何を扱っているのActivity/Service.getApplication()ですContext.getApplicationContext()か?

このアプリケーションでは、両方が同じオブジェクトを返します。ただし、ActivityTestCaseアプリケーションをgetApplication()モックすると、モックがgetApplicationContext返されますが、それでも別のコンテキストインスタンス(Androidによって注入されたもの)が返されます。それはバグですか?わざとですか?

そもそも違いがわかりません。テストスイートの外部で、両方の呼び出しが異なるオブジェクトで返される可能性がある場合はありますか?いつ、なぜ?さらに、なぜとでgetApplication定義されているのに、では定義されActivityServiceいないのContextですか?どこからでも利用できる有効なアプリケーションインスタンスが常にあるべきではありませんか?

0 投票する
5 に答える
63453 参照

android - Android RuntimeException: サービスをインスタンス化できません

別のスレッド (UI スレッドではなく) で実行されるサービスを作成したいので、IntentService を拡張するクラスを実装しました。しかし、私は運がありません。これがコードです。

アクティビティ ボタン クリックでのサービスの利用:

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

android - サービス内でWifiManagerオブジェクトを取得するにはどうすればよいですか?

定期的にwifiの状態をチェックし、いくつかの条件に基づいて変更するサービスを生成するAndroid用のアプリを書いています。私の問題は、Wi-Fiの状態をチェックする(そしておそらくそれを制御する)ためにWifiManagerオブジェクトを作成しようとすると、初期化されていないオブジェクトが表示されることです。コードは次のとおりです。

そして、これがこのコードに到達したときのログの行です。

明らかに、システムのWifiManagerオブジェクトを取得していません。私はスレッドであるサービスに参加しているという事実と関係があることは知っていますが、それでも概念を理解するのに苦労しており、なぜそれが機能しないのか、そしてどのように修正できるのかについて少し説明していただければ幸いです。

(ある種の無関係なメモでは、説明は私がサービスで回線を使用できない理由も説明すると思いますToast.makeText(getBaseContext(), "Checking Wifi...", Toast.LENGTH_SHORT).show();

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

android - ArrayList を失う Android サービス

編集:ここに PasteBin のソースがあります。サービス全体を再設計する必要があるかもしれない.. :(

私はRingPackの開発者です。基本的な考え方は、バックグラウンドで起動されたサービスがあり、ユーザーの着信音を切り替えることです。サービス内の ArrayList への参照が失われるという問題があります。ライフサイクルの仕組みを誤解している可能性があると思います。私の意図は、ユーザーがアクティビティからパックを選択するたびに開始されることでした。

Intent i = new Intent(RingActivity.this, RingService.class); i.putExtra(RingService.ACTION, RingService.PACK_SET); i.putExtra(RingService.PASSED_PACK, currentPackId); RingActivity.this.startService(i);

デフォルトの通知音を「currentPackId」に対応するパックの最初の音に設定するようサービスに指示します。

ユーザーが RingPack をオフにしたい場合、無効化は次のように行われます。

Intent i = new Intent(RingActivity.this, RingService.class); RingActivity.this.stopService(i);

Toast.makeText(RingActivity.this.getBaseContext(), RingActivity.this.getString(R.string.ringPackDisabled), Toast.LENGTH_SHORT).show();

したがって、サービスの onCreate は次のようになります。

次に、それを onStartCommand に渡します。onStartCommand は START_NOT_STICKY を返し (サービスを手動で作成および破棄するため)、handleStart() に渡します。

isSdOk() メソッドは、着信音が SD カードに保存されているため、SD カードがマウントされているかどうかを確認するだけです。initControl() は、ユーザーのデフォルトの着信音を保存するだけなので、無効になったときに元に戻すことができます。setPack() メソッドは次のようになります。

トーン ArrayList は、私が失ってきたものです。ここで初期化します。パック内のすべての有効な着信音の ID を保持します。私が見ている NullPointerException は swapTone() にあります。

setPack() がまだ呼び出されていない場合、swapTone() が呼び出されることはありません。繰り返しますが、私のユーザーはこのエラーを受け取り続けていますが、自分で再現することはできません。どんな助けでも大歓迎です。コードウォールで申し訳ありませんが、非常に混乱しています。おそらく、サービスの概念を正しく使用していないのでしょうか?

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

android - Androidアーキテクチャの設計-それを正しく行う方法は?

Androidアプリの優れたアーキテクチャはどのように見えますか?すべての「作業/ビジネスロジック」はバックグラウンドサービスで実行する必要があり、アクティビティはサービスとのみ通信して、どこか(ローカル/遠隔)からデータをクエリ/フェッチする必要がありますか?

アクティビティが呼び出す「サービス」を実際のAndroidサービスとして実装しますか?または、作業を行うPOJO-Singleton(おそらくバックグラウンドスレッドを使用)。または、時間のかかるアクションのためにアクティビティのバックグラウンドスレッドをインスタンス化します(Webサービスにクエリを実行します)。

データアクセスを正しい方法で抽象化するにはどうすればよいですか?ContentProviderを使用してデータにアクセス/抽象化しますか?どのように/どこからクエリする必要がありますか?アクティビティ?サービス?..?

優れたアプリアーキテクチャデザインを検索しようとしましたが、Androidアーキテクチャがどのように見えるかだけがわかり、Androidアプリがどのように見えるかはわかりませんでした。

それで、それについてあなたの意見は何ですか?最高の拡張性/カプセル化を保証するために、Androidアプリケーションのどのコンポーネントが相互に通信する必要がありますか?

0 投票する
0 に答える
397 参照

java - データベースに予想以上のサービス挿入

CallLogから連絡先を取得し、ContentObserverを備えたサービスを使用してデータベースに挿入しています。したがって、ContentObserverは、CallLogに新しい変更が発生するかどうかを監視し続け、発生する場合は、メソッドonChange()内で、CallLogのデータを取得してデータベースに挿入するメソッドを呼び出します。

ただし、問題は、新しい呼び出しを行うと、新しいデータが1つあるため、データベースに挿入する必要があるのは1つの新しい行だけですが、3つの行が挿入されることです。どうしてか分かりません。Android 2.3エミュレーターでテストしましたが、エミュレーターでは問題ありませんが、実際の2.3デバイスでは発生します。また、2.1エミュレーターでも発生します。

これが私のコードです。サービスが掲載されています。ありがとう!

これがサービスMyApplicationService.javaです

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

android - 別のプロセスでカスタムオブジェクトをAndroidサービスに渡す

別のプロセスで開始するように設定されたサービスがあります。

そして、bindService() を使用して正常にバインドできます。Messenger.send() を呼び出してメッセージを送信しようとすると、問題が発生します。

ここで、uploadRequest は Parcelable を実装するカスタム オブジェクトです。

}

サービスの handleMessage にブレークポイントを設定しましたが、アプリがブレークポイントに到達しません。ただし、カスタム UploadRequest オブジェクトを使用する代わりに null を送信すると、期待どおりに handleMessage ブレークポイントに到達しますが、明らかにその時点では何もできません。writeToParcel を呼び出すと null 以外の文字列が返される場合に file.getPath() を確認しました。これにより、UploadRequest クラスで何かがおかしいと思われますが、グーグルで調べてもクラスに問題はありません。何か案は?

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

android - ホームキー画面からアクティビティを開始

アクティビティを開始するバックグラウンドサービスがあります。

このアクティビティを破棄し、「ホームキーの長押しメニュー」から再開すると、このアクティビティが再開されます。しかし、代わりにメインアクティビティを開始したいと思います。どうすればこれを実現できますか?

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

android - Android appwidget サービスが開始されない

デバッグ モードで実行しているときに、サービス内にあるブレークポイントに到達できないようです。なぜですか?