我创建了一个警报,我希望当警报停止时可以在MainActivity中将字符串设置为TextView,所以我尝试使用接口但是它会出错:
引起:java.lang.ClassCastException:无法将AlarmReceiver强制转换为AlarmReceiver $ OnAlarmOver
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
...
OnAlarmOver onAlarmOver = (OnAlarmOver) context; //<--error
onAlarmOver.OnAlarmOverText("Alarm stop");
}
public interface OnAlarmOver {
public void OnAlarmOverText(String overText);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements AlarmReceiver.OnAlarmOver {
...
public void OnAlarmOverText(String overText){
alarm_text.setText(overText);
}
}
我的英语很差,抱歉。
答案 0 :(得分:0)
您正在尝试将上下文强制转换为OnAlarmOver。当然,这不会起作用。我想你想在你的应用程序内部的其他地方捕获一个广播。
1)您需要定义广播。然后,在您的活动中,您应该注册它。例如:
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
if(intent.getAction().equals(SearchService.NOTIFICATION)){
}
}
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, new IntentFilter(SearchService.NOTIFICATION));
}
请记住在暂停方法中取消注册
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
2)你需要创建一个Intent并像这样发送广播。
private void publishResults(Search result) {
Intent intent = new Intent(NOTIFICATION);
intent.putExtra(RESULT, result);
sendBroadcast(intent);
success = true;
}
总而言之,如果由Android提供,我不知道为什么要使用接口(监听器)。也许,你应该多解释一下你想做什么。我希望这个答案可以帮到你。