gpt4 book ai didi

android - 将 Intent 从 BroadcastReceiver 类发送到当前正在运行的 Activity

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

我有一个扩展 BroadcastReceiver 的类。收到短信后,我想将信息传递给我的主要 Activity 类以在框中显示文本(如果已经存在文本,则追加)。

public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Intent i = new Intent(context, MainActivity.class);
i.putExtra("updatedString","Hello");
context.startActivity(i);
}
}

主 Activity .java

public class MainActivity extends Activity{

private TextView results;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Bundle extras = getIntent().getExtras();
if(extras!=null){
results = (TextView) findViewById(R.id.results);
results.setVisibility(View.VISIBLE);
results.append(extras.getString("updatedString"));
}

}

我只有一个 Activity 类 (MainActivity.java)。但是,当我这样做时,出现无法暂停 Activity 的异常。

最佳答案

你有三种方法:
1) 您可以像这样在 MainActivity 中定义您的广播:
onCreate()

registerReceiver(smsReceiver, new IntentFilter(SMS_RECIEVED));  

并在MainActivity中定义smsReciver

private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//you can update textBox here
handler.postDelayed(sendUpdatesToUI, 10);
}
};

定义一个runnable来更新UI

private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
update();
}
};

和更新方法

private void update(String text) {
textView.setText(textView.getText().toString() + text);
}

2) 在你的 Activity 和 BroadCastReceiver 之间注册一个接收器

3) 用新的 Intent 启动你的 Activity 以更新当前打开的 Activity

Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("Key", "text");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

更新:
解释方法二
MainActivity.类

onResume()

registerReceiver(broadcastReceiver, new IntentFilter(SmsReceiver.BROADCAST_ACTION));  

onDestroy()

unregisterReceiver(broadcastReceiver);

本地广播(broadcastReceiver,在MainActivity.class中)

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);
}
};
private void updateUI(Intent intent) {
String text = intent.getStringExtra("key");
textView.setText(textView.getText().toString() + text);
}

SmsReceiver.class
全局属性

public static final String BROADCAST_ACTION = "your.package.name.displayevent";
private final Handler handler = new Handler();
Intent intent;
Context context;

onReceive()

handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 10);

this.context = context;//you can retrieve context from onReceive argument

this.intent = new Intent(BROADCAST_ACTION);

定义两个方法

private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
display();
}
};

private void display() {
intent.putExtra("key", text);
context.sendBroadcast(intent);
}

关于android - 将 Intent 从 BroadcastReceiver 类发送到当前正在运行的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826136/

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