5

ブロードキャストレシーバーが内部でどのように機能するかを理解しようとしています。

registerReceiver()メソッドを呼び出すと、内部で何が起こりますか? 内部でサービスを作成しますか?

を呼び出すと、内部で何が起こりますsendBroadcastか?

BroadcastReceiver(Android クラスを拡張せずに)独自のクラスを実装する必要がある場合、BroadcastReceiverどうすれば実現できますか?

私は多くの調査を行いましたが、どのように機能するかしかわかりませんでしたBroadcastReceiver。Android のソース コードも調べて、それがどのように機能するかを調べましたが、どちらも役に立ちませんでした。

4

3 に答える 3

0

私は Android の専門家ではありませんが、他のすべての専門家です :P ははは冗談です。BroadcastReceiver は一種の (Linux) crontab のようなものだと思います。Android には既に何らかのソフトウェアがあるようです (または内部サービス) が実行されており、それを使用するときは、選択したフィルターなどを使用して (その「サービス」に) 「プログラム」するため、アプリが実行されていなくても が呼び出されます。または多分私は完全に間違っています:)しかし、それは私がそれを見る方法です。

于 2016-10-31T02:58:38.430 に答える
0

BroadcastReceiverAndroid を拡張せずにa を実装する必要があると書いていますBroadcastReceiver。これは不可能です。IntentAndroid フレームワークは、ブロードキャストのリスナーとして自身を登録したすべてのコンポーネントへのすべてのブロードキャストのディスパッチと配信を処理しIntentます。一部のアプリケーションが を呼び出すとsendBroadcast()、Android はBroadcastReceiverがそのリスナーとして登録されているかどうかを確認Intentし、見つかった場合はコンポーネントをインスタンス化し (まだインスタンス化されていない場合)、コンポーネントのonReceive()メソッドを呼び出します。

Android を拡張しないBroadcastReceiverと、コンポーネントをリスナーとして登録できず、Android はクラスを呼び出しませんonReceive()

注: さらにサポートが必要な場合は、本当にやりたいことを説明してください。

于 2016-01-26T16:05:29.707 に答える
-1

初めに:

import android.content.BroadcastReceiver;

ブロードキャスト レシーバーを宣言します。

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
         // Stuff you want to do when it receives something
    }
};

最後に、ブロードキャストに読み取らせたいインテントを含むインテント フィルターを作成します。

    IntentFilter iF = new IntentFilter();   // Example with some music players

    iF.addAction("com.android.music.metachanged");
    iF.addAction("com.htc.music.metachanged");
    iF.addAction("fm.last.android.metachanged");
    iF.addAction("com.sec.android.app.music.metachanged");
    iF.addAction("com.nullsoft.winamp.metachanged");
    iF.addAction("com.amazon.mp3.metachanged");
    iF.addAction("com.miui.player.metachanged");
    iF.addAction("com.real.IMP.metachanged");
    iF.addAction("com.sonyericsson.music.metachanged");
    iF.addAction("com.rdio.android.metachanged");
    iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
    iF.addAction("com.andrew.apollo.metachanged");
    iF.addAction("com.spotify.mobile.android.metadatachanged");
    iF.addAction("com.spotify.music.metadatachanged");

    registerReceiver(mReceiver, iF);       // At the end you call your receiver with your intent Filter

それが役に立てば幸い

于 2016-01-26T16:19:43.853 に答える