これが私のコードのフィルターです:
送信者:
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>
誰でも私を助けてもらえますか?どうもありがとう!