来自服务监听器的广播接收器
Broadcast Receiver from service Listener
我在服务中创建了一个广播接收器 (BR),它将对传入的具有特定号码和正文的 SMS 作出反应。我只需要它在用户操作后接收一些 seconds/minutes,这就是为什么我没有在清单或 activity 中注册它(用户可能会关闭它)。 BR 有两个部分,自动(工作正常)和手动应该启动 MainActivity
并启动 Dialog
。我知道 Dialog
不能从 BR 启动,这就是我创建 Listener
的原因,但我的问题是服务启动后它总是 null
。它在我的 MainActivity
的 onCreate
中有价值,但是当服务启动时它变为 null
,我明白为什么(服务重新初始化 Listener listener
)。我什至尝试将初始化的侦听器值放入 SharedPrefs 并在之后恢复它,但是当我尝试使用 json 存储它时,它只会再次存储 null 。
那么我该如何制作我的 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);
...
}
短信服务
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);
}
顺便说一句,我还尝试在调用 startService
后将 smsReceiver.setListener
代码块放入我的 Dialog
.setPossitive onClickListener
,希望它会在服务后启动,但什么都没有
在服务中使用 setter 方法安装侦听器机制是不好的做法。您可以使用 ResultReceiver to receive callback results from service. It is Parcelable,因此它可以在服务启动前在意图中传递
我在服务中创建了一个广播接收器 (BR),它将对传入的具有特定号码和正文的 SMS 作出反应。我只需要它在用户操作后接收一些 seconds/minutes,这就是为什么我没有在清单或 activity 中注册它(用户可能会关闭它)。 BR 有两个部分,自动(工作正常)和手动应该启动 MainActivity
并启动 Dialog
。我知道 Dialog
不能从 BR 启动,这就是我创建 Listener
的原因,但我的问题是服务启动后它总是 null
。它在我的 MainActivity
的 onCreate
中有价值,但是当服务启动时它变为 null
,我明白为什么(服务重新初始化 Listener listener
)。我什至尝试将初始化的侦听器值放入 SharedPrefs 并在之后恢复它,但是当我尝试使用 json 存储它时,它只会再次存储 null 。
那么我该如何制作我的 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);
...
}
短信服务
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);
}
顺便说一句,我还尝试在调用 startService
后将 smsReceiver.setListener
代码块放入我的 Dialog
.setPossitive onClickListener
,希望它会在服务后启动,但什么都没有
在服务中使用 setter 方法安装侦听器机制是不好的做法。您可以使用 ResultReceiver to receive callback results from service. It is Parcelable,因此它可以在服务启动前在意图中传递