当我使用此代码:如何从Broadcast Receiver onReceive方法中访问MainActivity的findViewById?
@Override
public void onReceive(Context context, Intent intent) {
seconds += 0.1;
if (seconds > 59.9) {
seconds=0;
minutes++;
}
TextView tv = (TextView)((MainActivity)context).findViewById(R.id.txtChron);
tv.setText (String.valueOf(minutes) + ":" + String.valueOf(seconds));
}
尝试投放的背景下MainActivity
时,我得到一个错误。
以下是错误/堆栈跟踪:
E/AndroidRuntime:致命异常:主要过程: com.example.jordanbleu.lab8chronservjordanbleu,PID:22693 了java.lang.RuntimeException:错误接收广播意向{ 行为= com.example.jordanbleu.lab8chronservjordanbleu.MY_TIME_TICK FLG = 0×10}在 com[email protected]d9365fe 在 android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java :1132) at android.o s.Handler.handleCallback(Handler.java:751)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:154)at android.app。 ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:776)导致 通过:java.lang.ClassCastException:android.app.Application不能被 转换为com.example.jordanbleu.lab8chronservjordanbleu.MainActivity在 com。 example.jordanbleu.lab8chronservjordanbleu.ChronometerReceiver.onReceive(ChronometerReceiver.java:41) at android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:1122) at android.os.Handler.handleCallback(Handler.java:751)at android.os.Handler.dispatchMessage(Handler.java:95 )at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
所以我有一个MainActivity
,它启动一项服务。该服务创建一个新线程,并且此线程不断创建由BroadcastReceiver
处理的隐式意图。该广播接收机将更新时钟,并用更新的时间更新布局中的TextView
。但是当我尝试通过上下文参数访问findViewByID
时,出现上述错误。