gpt4 book ai didi

android - 在android中动态注册/注销广播接收器

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:58 24 4
gpt4 key购买 nike

我想通过广播动态注册和注销我的接收器类:“android.net.wifi.STATE_CHANGE”如果我在 list 中这样做,效果会很好。但这使它成为静态的。我想在 Activity 类中动态地进行。它在 Activity 类中对应的命令是什么?

这就是我的代码...由于注册和取消注册(多次)我的接收器(正在启动服务),我遇到了问题。

public class startScreen extends Activity {
/** Called when the activity is first created. */

private BroadcastReceiver receiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.example.MyService");
context.startService(serviceIntent);
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.initial);

final IntentFilter filter = new IntentFilter();
filter.addAction("android.net.wifi.STATE_CHANGE");

Button button = (Button) findViewById(R.id.button1);
final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);

try {
...some code...
if (bool == true) {
toggleButton.setChecked(true);
this.registerReceiver(receiver, filter);
} else
toggleButton.setChecked(false);
} catch (Exception e) {
Log.e("Error", "Database", e);
} finally {
...
}

toggleButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if ((toggleButton.isChecked())) {
getBaseContext().registerReceiver(receiver, filter);

} else {
if (receiver != null) {
getBaseContext().unregisterReceiver(receiver);
receiver = null;
}

}
}
});
}

@Override
protected void onResume() {
super.onResume();
if (bool == true) {
if (receiver == null)
this.registerReceiver(receiver, filter);
}
}

@Override
protected void onPause() {
super.onPause();
if (receiver != null) {
this.unregisterReceiver(receiver);
receiver = null;
}
}
}

最佳答案

LocalBroadcastManager 类用于注册 Intent 广播并将其发送到进程中的本地对象。由于您的 Activity 不会离开您的应用程序,因此速度更快、更安全。

以下示例显示了一个注册名为 my-event 的客户事件的 Activity 。

@Override
public void onResume() {
super.onResume();

// Register mMessageReceiver to receive messages.
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("my-event"));
}

// handler for received Intents for the "my-event" event
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};

@Override
protected void onPause() {
// Unregister since the activity is not visible
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onPause();
}
// This method is assigned to button in the layout
// via the onClick property
public void onClick(View view) {
sendMessage();
}

// Send an Intent with an action named "my-event".
private void sendMessage() {
Intent intent = new Intent("my-event");
// add data
intent.putExtra("message", "data");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

关于android - 在android中动态注册/注销广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8241128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com