1

BroadcastReceivers と IntentFilters の使用/理解が困難です。Test アクティビティに次のコードがあります。テスト アクティビティには .addProximityAlert が含まれています。.addProximityAlert がトリガーされた場合は、Test2 レシーバーにブロードキャストします。これをテストするとエラーが発生します。私は何を間違っていますか?

テスト活動:

public class Test extends BroadcastReceiver
{   
    LocationManager lm;
    ... 
    @Override
    public void onReceive(Context context, Intent intent) 
    {   
        ... 
        final String PROX_ALERT_INTENT = "com.example.proxalert.Test2";
        Intent alert = new Intent(PROX_ALERT_INTENT);
        PendingIntent proximityIntent = PendingIntent.getBroadcast(context, 0, alert, 0);

        lm.addProximityAlert(latitude, longitude, radius, expiration, proximityIntent);

        IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
        context.registerReceiver(new Test2(), filter);

Test2 受信機:

public class Test2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
    String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Boolean entering = arg1.getBooleanExtra(key, false);
        if (entering) {
        //toast notification "welcome"
    }
    ...
4

4 に答える 4

2

テストはBroadCastレシーバーを拡張するため、アクティブ化するにはブロードキャストの通知を受ける必要があります。それがあなたのやりたいことでよろしいですか?

それは本当にAndroidのテストですか?私はそうは思わない。したがって、そのコードだけでテストクラスを削除する場合は、ボタンを使用してアクティビティを作成し、ボタンがクリックされたときにテストでコードを実行します。

于 2012-11-25T01:10:03.480 に答える
1

こんにちは、BroadcastReceivers と IntentFilters を使用して、Activity (または Service) の下でこれを好きにします。

             broadcastReceiver = new BroadcastReceiver() {//global BroadcastReceiver
            @Override
            public void onReceive(Context context, Intent intent) {

                String action = intent.getAction();
                //Action receive
            };

インテント フィルタ :

        IntentFilter intentfilterTime = new IntentFilter(); 
        intentfilterTime.addAction(Intent.ACTION_BATTERY_CHANGED);//receive battery level change
        registerReceiver(broadcastReceiver, intentfilterTime);

受け取りたいすべてのアクションを追加します。あなたのコードは、別の中でブロードキャストを使用しているため、機能しません。それはあなたが望むものではないと思います。

于 2012-11-25T18:59:56.437 に答える
1

両方の BroadcastReceiver を同時に登録し、次のような簡単な方法で有効化、無効化を制御できます。

  • 静的/非静的ブール変数の使用
  • 基本設定を使用して Key-Value を保持する

例えば:

public class Test extends BroadcastReceiver
{   
    LocationManager lm;
    ... 
    @Override
    public void onReceive(Context context, Intent intent) 
    {   
    ... 
            final String PROX_ALERT_INTENT = "com.example.proxalert.Test2";
        Intent alert = new Intent(PROX_ALERT_INTENT);
        PendingIntent proximityIntent = PendingIntent.getBroadcast(context, 0, alert, 0);

        lm.addProximityAlert(latitude, longitude, radius, expiration, proximityIntent);

        IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
        Test2.someStaticVariable = true;


public class Test2 extends BroadcastReceiver {
    public static boolean someStaticVariable;

    @Override
    public void onReceive(Context arg0, Intent arg1) {

    if (!someStaticVariable){
        return;
    }

    String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Boolean entering = arg1.getBooleanExtra(key, false);
        if (entering) {
        //toast notification "welcome"
    }
    ...
于 2012-11-28T05:44:36.023 に答える
0

テスト1でレシーバーを動的に登録しようとするのではなく、Androidマニフェストにレシーバーを登録することで動作させることができました。このウェブサイトは本当に役に立ちました:

http://www.techotopia.com/index.php/Android_Broadcast_Intents_and_Broadcast_Receivers

于 2012-12-17T17:40:27.093 に答える