問題タブ [android-service-binding]
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.
android - ローカル サービスに直接アクセスできないのはなぜですか?
私が知る限り、 Service はIBinder
、Messenger
またはを介して Activity からのみアクセスできますAIDL
。
サービス インスタンスのメソッドをアクティビティなどから直接呼び出せないのはなぜですか?
たとえば、サービスが開始されたときに、サービスのインスタンスをシングルトンに保存し、それをActivity
s がアクセスして、サービスのメソッドを直接呼び出すことができるようにしますか?
uri - Androidで2つのアプリケーション間で通信するには?
私はキーボードを開発しているので、InputMethodService
. このキーボード アプリケーションに他の機能を追加する必要がありますが、キーボードを単独のキーボード実装として残すために別のアプリケーションとして分離する必要があります。
そのため、キーボード アプリケーションと、他のすべての機能を備えた別のアプリケーションを作成する必要があります (他の機能には、ニュース アクティビティ、メッセンジャー、ロック画面の実装、およびいくつかのウィジェットが含まれますが、これらに限定されません)。
これら 2 つのアプリケーションは、それらの間で通信する必要があります。私の調査によると、使用できるメカニズムがいくつかあることがわかりました。
- 限られたサービス
- URI の実装
- ブロードキャストレシーバー
私の質問は次のとおりです。私のニーズに最適な実装は何ですか? 私のニーズは、あるアプリケーションから別のアプリケーションにデータを渡し、あるアプリから別のアプリでアクティビティやその他のコンポーネントを開始することです。
android - 他のアプリがサービスにバインドできるようにしますが、サービスを作成することはできません
ユーザー入力を取得し、その情報をサービスを開始 (作成) する意図に追加するアクティビティがあります。
次に、他のアプリがそのサービスを使用できるようにします (それにバインドします)。
ただし、前述のように、正しく開始するにはユーザー入力が必要なため、これらのアプリでサービスを開始できるようにしたくありません。そのため、アプリがサービスを使用したい場合、実行中の場合にのみバインドできます。そうでない場合、アプリは、ユーザー入力を取得した後にサービスを開始するアクティビティのみを開始できます。
私が理解しているように、マニフェストで android:exported を true に設定すると、他のアプリのバインディングとサービスの開始の両方が可能になります。
必要なことを行う方法はありますか?
別の注意: サービスの onCreate が意図を取得しない理由はありますか? サービスが最初に作成されたときにのみ必要になるため、onCreateで余分なものを取得したいと思います。私は現在、これを onStartCommand で取得し、onStartCommand が 2 回目に呼び出された場合にすぐに戻ることでこれを回避していますが、それは不要な手順のようです。
android - Android サービスが登録されていません
私はアンドロイドが初めてです。最初のアクティビティの開始時にサービスを開始するアプリを構築したいと考えています。そして、そのサービスは、私がメインの活動を離れたときにとどまりたいと思っています. 次のアクティビティはそのサービスを使用して何らかの操作を行うためです。
だから私はそのためのコードを書きます。(ただし、2番目のアクティビティのプロセスは書きませんでした)。次のボタンをクリックすると (次のアクティビティに移動します)、2 番目のアクティビティが起動し、応答していないというメッセージが表示されます。
ログキャストは言う。
このエラーを修正するために誰か助けてください。この方法以外で上記のシナリオを実行できる方法はありますか?
だから私のコードは以下に示されています
MySumService.java
パッケージ com.example.autocomplete.app;
activity_my.xml
lout2.xml
次のJava
android - サービスがバインドされていることを確認する方法はありますか?
Android 開発者マニュアルの show here によると、クライアントが bindService() を呼び出すと、最終的にサービスがバインドされ、onServiceConnected() コールバックがトリガーされると想定されているようです。
ただし、私のアプリケーションでは、 bindService を呼び出した後にサービスがバインドされておらず、null チェックなしでこのサービス オブジェクトを使用しているため、クラッシュしたレポートを受け取りました。これは、私のデバイスで再現できないまれなバグです。null チェックを追加することでこのバグを修正できますが、そのサービスはアプリケーションにとって不可欠であり、接続されていないと、アプリケーションは正しく機能しません。したがって、どのような場合でもサービス接続が確実に作成されるようにしたいと考えています。それを行う方法はありますか?
android - Android Binder IPC addService: サービスを再度削除する方法はありますか?
私は非常に限られた権限しか持っていないコードのどこかにいますが、データを外部の Android アプリケーションに送信する必要があります。(Android システム C コード) 明らかに、そこでバインダー サービスを開始することはできませんが、既に実行中のサービスに接続することはできます。したがって、私の実装では、サービスが利用可能かどうかを毎秒チェックし、利用可能な場合は接続してデータの送信を開始します。これはうまくいきます。
私の問題は次のとおりです。サービスのバイナリ/プロセスを強制終了すると、クライアントは、サービスが利用できなくなったことを何らかの形で認識しません。を使用して追加したサービスを削除する方法はありaddService(...)
ますか? クライアントはそうしますgetService()
。
android - メッセンジャーを使用したバウンド サービスの例でトーストが表示されない
メッセンジャーを使用してバインドされたサービスの Android ガイドの例に従い、次のコード スニペットを実行しています。スニペットを少し変更して、こんにちはボタンとさようならボタンを追加しました。サービスは、UI で押されたボタンに応じて、こんにちはまたはさようならのトーストを表示する必要があります。
ただし、例のトーストを実行すると表示されません。メッセージ受信ログはUIに出力されますが。
この理由は何ですか。Acticity の onStart のトーストも表示されません。