我在一个服务中创建了一个广播接收器(BR),它将对带有特定号码和正文的传入短信做出反应。我只需要在用户操作后接收几秒钟/分钟,这就是为什么我没有在清单或活动中注册它(用户可能会关闭它)。BR有两个部分,自动(工作正常)和手动(应该启动)
MainActivity
开始一个
Dialog
. 我知道
对话
不能从BR开始,所以我创建了
Listener
,但我的问题是
null
服务开始后。它有价值
onCreate
我的
主要活动
,但当服务启动时,它将更改为
无效的
,我明白为什么(serivce重新初始化
Listener listener
). 我甚至尝试将初始化的侦听器值放入SharedPrefs并在之后还原它,但是当我尝试用json存储它时,它只会再次存储空值。
那我该怎么做
listener != null
??? 以下是我的代码的相关部分:
主要活动
onCreate {
SMSService smsReceiver = new SMSService();
smsReceiver.setListener(new SMSService.Listener() { //here listener from service is != null
@Override
public void onTextReceived(String s) {
dialogS(s); // totaly different dialog
}
});
...
mDialogBuilder = new AlertDialog.Builder(this);
...
.setPositiveButton(new OnClick...
Intent servisIntent = new Intent(MainActivity.this, SMSService.class);
startService(servisIntent);
...
}
SMS服务
private Listener listener; // and here it get null which is the problem
public int onStartCommand(Intent intent, int flags, int startId) {
...
SMSReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
context.startActivity(i);
if (listener != null) {
listener.onTextReceived("4333");
}
}
void setListener(Listener listener) {
this.listener = listener; }
interface Listener {
void onTextReceived(String text);
}
顺便说一下我也试着
smsReceiver.setListener
我的代码块
对话
.setPossitive onClickListener
打电话之后
startService
希望它能在服务结束后启动