gpt4 book ai didi

java - 从广播接收器更新或附加 TextView

转载 作者:行者123 更新时间:2023-12-01 11:55:05 25 4
gpt4 key购买 nike

我正在尝试从 BroadcastReceiver 附加/更新 TextView 中的信息。这样做的正确方法是什么?我已在 list 中放入注册电话状态的内容:

    <receiver android:name="RingTypeBroadcastReceiver" >
<intent-filter>
<action android:name= "android.intent.action.PHONE_STATE"> </action>
</intent-filter>
</receiver>

接下来我想获取接收器拿起的电话状态,增加一个计数器。我希望能够在我的 Activity 上名为 txtResultstextview 上附加/更新此信息。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.widget.Toast;

public class RingTypeBroadcastReceiver extends BroadcastReceiver{

int counterCall = 0;
int counterIdleOrOffHook = 0;

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
counterCall = counterCall + 1;
}
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
counterIdleOrOffHook = counterIdleOrOffHook + 1;
}
}
}

最佳答案

将广播接收器放入设置文本的 Activity 中。 (子类)

这是一个未经测试的示例。它可能需要稍微修改,但我以前做过类似的事情,所以它会起作用。

public class YourActivity extends Activity {

private TextView txtResults;

....do activity stuff....

public static class RingTypeBroadcastReceiver extends BroadcastReceiver{

int counterCall = 0;
int counterIdleOrOffHook = 0;

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
counterCall = counterCall + 1;
}
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
counterIdleOrOffHook = counterIdleOrOffHook + 1;
}

//here you can set your text view. But check that it is not null first!
if(txtResults != null){
txtResults.setText("whatever");
}
}
}

然后,更新您的 list ,使其指向广播接收器:

 <receiver android:name="YourActivity$RingTypeBroadcastReceiver"> 
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>

如您所见,您的 Activity 后面跟着 $,然后是广播接收器。这告诉 list 查看您的 Activity 内部。

另请注意:如果您的 Activity 位于应用包名称 (com.example.yourapp) 下的包中,您需要将其添加到 list 中。例如,如果您的 Activity 位于 com.example.yourapp/activity 中,您需要将 list 中的名称更改为 .activity.YourActivity$RingTypeBroadcastReceiver。它只是应用程序包名称之后的所有内容,以 . 开头。

关于java - 从广播接收器更新或附加 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28519401/

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