[英]Android BroadcastReceiver onReceive Update TextView in MainActivity
[英]Update or append a TextView from a Broadcastreceiver
我正在尝试从BroadcastReceiver
追加/更新TextView
信息。 正确的方法是什么? 我已输入清单以注册电话状态:
<receiver android:name="RingTypeBroadcastReceiver" >
<intent-filter>
<action android:name= "android.intent.action.PHONE_STATE"> </action>
</intent-filter>
</receiver>
接下来,我要获取接收器拾起的电话状态,增加一个计数器。 我希望能够追加/更新对这些信息textview
叫txtResults
,我有我的Activity
。
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;
}
}
}
将广播接收器放入设置文本的活动中。 (子类)
这是一个未经测试的示例。 它可能需要稍作修改,但是我之前已经做过类似的事情,因此它可以正常工作。
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");
}
}
}
然后,更新清单,使其指向广播接收器:
<receiver android:name="YourActivity$RingTypeBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
如您所见,您的“活动”后跟一个$
然后是广播接收器。 那告诉清单查看您的活动内部 。
另请注意:如果您的活动位于应用程序的程序包名称( com.example.yourapp
)下面的程序包中,则需要将其添加到清单中。 因此,例如,如果您的活动在com.example.yourapp/activity
,则需要将清单中的名称更改为.activity.YourActivity$RingTypeBroadcastReceiver
。 它就是您的应用程序包名称之后的所有内容(以开头) .
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.