0

これが私のコードのフィルターです:

送信者:

public static String ACTION = "some_broadcast";
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) { 
            //Creating an Intent to be sent through a broadcast
            Intent intent = new Intent(ACTION);
                intent.putExtra("something", 1);
            sendBroadcast(intent);
        }  
    }); 
  }
}

レシーバー側 (systemui クラスの 1 つであるため、既存のコードに行を追加することしかできず、その構造を実際に変更することはできません):

public class PhoneStatusBarPolicy {
  ...
  private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      if (action.equals("some_broadcast")) {
         update(intent);
      }
      else if ...   
   }
  };

  public PhoneStatusBarPolicy(Context context) {
    ...
    IntentFilter filter = new IntentFilter();
    filter.addAction("some_broadcast");
    context.registerReceiver(mIntentReceiver, filter, null, mHandler);
    ...
  }

  private final void update (Intent intent) {
    //Does something
  }

  ...
}

レシーバーを登録したら、マニフェストに追加する必要はないことを読んだにもかかわらず、AndroidManifest.xmlそれが到達しなかったため、システムUIに追加しました。

<receiver
   android:name="com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"
   android:enabled="true"
   android:exported="true">
         <intent-filter>  
            <action android:name="some_broadcast" />
          </intent-filter>  
</receiver>

エミュレーターでアプリを実行した後、関数「更新」が呼び出され、本来の処理が行われますが、「残念ながらシステム UI が停止しました」というメッセージが表示されます。</p>

誰でも私を助けてもらえますか?どうもありがとう!

4

1 に答える 1

0

受信者を 2 回登録する必要はありません。UI を停止する理由である可能性があります。以下のコードを使用できます。わたしにはできる。

マニフェスト ファイルと送信者は問題ないようです。受信機のコードを入れておきます。

 public class PhoneStatusBarPolicy extends BroadcastReceiver {
      @Override
            public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              if (action.equals("some_broadcast")) {
                 update(intent);
              }
              else if ...   
           }
          };



      private final void update (Intent intent) {
        //Does something
      }

      ...
    }
于 2013-11-16T05:28:20.037 に答える