我已经在创建服务方法上注册了接收者,并在销毁方法上取消注册?它工作得很好,但在某些三星Galaxy s3上,即使我停止服务,我仍然会收到接收器。如何找到解决办法?有可能吗?请帮帮我.提前致谢
package com.sms.sendsms.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
/**
* Created by Navruz on 30.03.2016.
*/
public class SendSmsService extends Service {
private static Logger LOGGER = LoggerFactory.getLogger(SendSmsService.class);
@Override
public void onCreate() {
super.onCreate();
LOGGER.info("Service is onCreate");
registerReceiver(incomingCallReceiver, new IntentFilter(
TelephonyManager.ACTION_PHONE_STATE_CHANGED));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
LOGGER.info("Service is onStartCommand");
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(incomingCallReceiver);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private BroadcastReceiver incomingCallReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
LOGGER.info("IncomingCallReceiver is received.");
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
LOGGER.info("state : " + state);
}
}, PhoneStateListener.LISTEN_CALL_STATE);
}
};
}
在ondestroy()
中调用unregisterreceiver(...)
不是一个好主意,因为并不总是保证可以调用它。
来自官方文件
在销毁活动之前执行任何最终清理。这可能是因为活动正在完成(有人在它上面调用了finish(),也可能是因为系统暂时销毁了活动的这个实例以节省空间。您可以使用isFinishing()方法来区分这两种情况。
好的,所以刚刚从@commonsware中找到了这个答案,它说服务
的ondestroy()
在某些情况下不会被调用,如下:
>
如果用户强制阻止您使用设置应用程序
如果Android在匆忙中需要RAM(例如,处理一个来电),并选择终止您的进程以释放该RAM
我在OnReceive()方法中使用smsmsmanager发送消息,我想为smsmsmanager添加发送和传递报告意图,当我通过编程和清单在另一个接收方中注册接收方时,它不会调用发送的sms接收方。 是否可以在onReceive()中执行,或者帮助我实现这一点?
我是android新手。我的项目有一个活动和一个服务。我的服务有一个广播接收器,而活动有一个广播发送器,它在PeriodSender方法中。动态地,当我注册接收者时,在服务开始时它不会调用,但是如果我在几分钟后发送了一些东西,它就会调用。但是我想在清单中注册它,我已经在清单中包含了接收方的详细信息,但是接收方没有调用。我的接收方类名是MyReceiver21,意图操作是My_ACTION1。实际上
如果可以的话,请帮我一下。我一直试图实现一个基本的gcm设置。在服务器端,我使用了上面答案中的php代码——GCM和PHP (Google Cloud Messaging ),在客户端,我遵循了Google的GCM教程。整个事情在我的Nexus 4上运行良好,但在我试过的两款4.0.4之前的设备上就不行了。一个是运行4.0.3的htc one v,一个是运行2.3.4的索尼爱立信。这可能是关于4.
在将Spark 1.6应用程序移植到Spark 2.0.2的过程中,日志中出现了以下投诉: 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/streaming/receiver/receiver[]/类 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/st
我有1个活动和1个普通类,其中活动1接收消息,普通类发送消息。如何实施: 在活动一中。班 在Ordinary.class 如何发送空消息(1)的代码?
我已经实现了这样的接收器(在清单文件中) 如果电话的状态改变,则调用记录器广播接收器。一切都很好。但是,如果我重新启动设备,接收器永远不会被调用,直到我运行我的应用程序。 我需要在启动后注册(不调用)这个接收器。 许多感谢, [编辑] 我通过向清单文件添加以下接收者解决了这个问题 不过,我没有在java代码中注册RecorderBroadcastReceiver。我只加了上面的接收器。这意味着从应