繁体   English   中英

从Broadcastreceiver更新或附加TextView

[英]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>

接下来,我要获取接收器拾起的电话状态,增加一个计数器。 我希望能够追加/更新对这些信息textviewtxtResults ,我有我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM