android服务无法启动,Android应用程序无法启动服务
嘿,我正在尝试在我的
Android应用程序上实现一项服务.服务必须执行活动的相同任务. IE,如果在CallLog.Calls内容提供程序上发生某些更改,则必须通知服务并将数据插入数据库,即使应用程序未运行,我的意思是,服务将在应用程序启动后运行,因此如果应用程序被杀死,服务将继续运行,直到操作系统停止它,对吧?
因此它将在后台运行,收集CallLog.Calls服务上更改的所有数据.但是,该服务没有运行.我在Activity的onCreate()方法中加注它.在Service中,我实现了一个ContentObserver类,它使用onChange()方法,以防CallLog.Calls内容提供程序中的某些更改.
我不知道的是为什么服务没有启动,以及为什么即使我在DDMS视角杀死应用程序它也不起作用.
这是代码.
该Activity名为RatedCalls.java
public class RatedCalls extends ListActivity {
private static final String LOG_TAG = "RATEDCALLSOBSERVER";
private Handler handler = new Handler();
private SQLiteDatabase db;
private CallDataHelper cdh;
StringBuilder sb = new StringBuilder();
OpenHelper openHelper = new OpenHelper(RatedCalls.this);
private Integer contentProviderLastSize;
private Integer contentProviderCurrentSize;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cdh = new CallDataHelper(this);
db = openHelper.getWritableDatabase();
startService(new Intent(this, RatedCallsService.class));
registerContentObservers();
Log.i("FILLLIST", "calling from onCreate()");
Cursor cursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
android.provider.CallLog.Calls.DATE + " DESC ");
contentProviderLastSize = cursor.getCount();
}
class RatedCallsContentObserver extends ContentObserver {
public RatedCallsContentObserver(Handler h) {
super(h);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
Log.d(LOG_TAG, "RatedCallsContentObserver.onChange( " + selfChange
+ ")");
super.onChange(selfChange);
searchInsert();
}
}
private void searchInsert() {
Cursor cursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
android.provider.CallLog.Calls.DATE + " DESC ");
Log.i("FILLLIST", "Calling from searchInsert");
startManagingCursor(cursor);
int numberColumnId = cursor
.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
int durationId = cursor
.getColumnIndex(android.provider.CallLog.Calls.DURATION);
int contactNameId = cursor
.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME);
int numTypeId = cursor
.getColumnIndex(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE);
Date dt = new Date();
int hours = dt.getHours();
int minutes = dt.getMinutes();
int seconds = dt.getSeconds();
String currTime = hours + ":" + minutes + ":" + seconds;
SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
Date date = new Date();
cursor.moveToFirst();
String contactNumber = cursor.getString(numberColumnId);
String contactName = cursor.getString(contactNameId);
String duration = cursor.getString(durationId);
String numType = cursor.getString(numTypeId);
stopManagingCursor(cursor);
ContentValues values = new ContentValues();
values.put("contact_id", 1);
values.put("contact_name", contactName);
values.put("number_type", numType);
values.put("contact_number", contactNumber);
values.put("duration", duration);
values.put("date", dateFormat.format(date));
values.put("current_time", currTime);
values.put("cont", 1);
db.insert(CallDataHelper.TABLE_NAME, null, values);
}
public void registerContentObservers() {
this.getApplicationContext()
.getContentResolver()
.registerContentObserver(
android.provider.CallLog.Calls.CONTENT_URI, true,
new RatedCallsContentObserver(handler));
}
这就是名为RatedCallsService.java的服务
public class RatedCallsService extends Service {
private static final String TAG = "RatedCallsService";
private static final String LOG_TAG = "RatedCallsService";
private Handler handler = new Handler();
private SQLiteDatabase db;
private CallDataHelper cdh;
OpenHelper openHelper = new OpenHelper(RatedCallsService.this);
class RatedCallsContentObserver extends ContentObserver {
public RatedCallsContentObserver(Handler h) {
super(h);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
Log.d(LOG_TAG, "RatedCallsContentObserver.onChange( " + selfChange
+ ")");
super.onChange(selfChange);
searchInsert();
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Rated Calls Service Created", Toast.LENGTH_LONG).show();
Log.i(TAG, "onCreate");
registerContentObservers();
}
@Override
public void onDestroy() {
Toast.makeText(this, "Rated Calls Service Stopped", Toast.LENGTH_LONG).show();
Log.i(TAG, "onDestroy");
cdh = new CallDataHelper(this);
db = openHelper.getWritableDatabase();
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "Rated Calls Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
registerContentObservers();
}
private void searchInsert() {
Cursor cursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
android.provider.CallLog.Calls.DATE + " DESC ");
Log.i("FILLLIST", "Calling from searchInsert");
int numberColumnId = cursor
.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
int durationId = cursor
.getColumnIndex(android.provider.CallLog.Calls.DURATION);
int contactNameId = cursor
.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME);
int numTypeId = cursor
.getColumnIndex(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE);
Date dt = new Date();
int hours = dt.getHours();
int minutes = dt.getMinutes();
int seconds = dt.getSeconds();
String currTime = hours + ":" + minutes + ":" + seconds;
SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
Date date = new Date();
if (cursor.moveToFirst()) {
do {
String contactNumber = cursor.getString(numberColumnId);
String contactName = cursor.getString(contactNameId);
String duration = cursor.getString(durationId);
String numType = cursor.getString(numTypeId);
ContentValues values = new ContentValues();
values.put("contact_id", 1);
values.put("contact_name", contactName);
values.put("number_type", numType);
values.put("contact_number", contactNumber);
values.put("duration", duration);
values.put("date", dateFormat.format(date));
values.put("current_time", currTime);
values.put("cont", 1);
db.insert(CallDataHelper.TABLE_NAME, null, values);
} while (cursor.moveToNext());
cursor.close();
}
}
public void registerContentObservers() {
this.getApplicationContext()
.getContentResolver()
.registerContentObserver(
android.provider.CallLog.Calls.CONTENT_URI, true,
new RatedCallsContentObserver(handler));
}
}
android服务无法启动,Android应用程序无法启动服务相关推荐
- 计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 安装程序正在启动服务需要多久,这个主要看软件大小,安装完成就会自动运行的,要是系统不断的提示,这个就不一定了,时间可能会很久的,需 ...
- 【linux】使用systemctl start xxx启动自己的程序|开机启动|守护进程
目录 即看即用 详细说明 systemctl 的用途 用法 例子:以管理我们的程序verdaccio为例 开机启动 设置程序开机启动.关闭.启用/禁用服务以vsftpd为例 三个部分[Unit].[S ...
- 服务助手NSSM——将Windows程序封装成服务
文章目录 简介 安装 初试 删除服务 详细用法 服务依赖 进程优先级 关闭服务 退出和重启 I/O 文件轮换 环境变量 事件钩子 参考文献 简介 NSSM 可以将 Windows 程序封装成服务,当服 ...
- 计算机提示应用程序无法启动,提示应用程序无法启动是什么原因?修复sxstrace.exe启动的方法...
很多小伙伴在使用电脑的时候,系统提示:应用程序无法启动,因为应用程序的并行配置不正确.这个是什么情况呢?可能是Windows Modules Installer服务被禁用或者是系统缺少Microsof ...
- 微服务架构设计模式~为应用程序定义微服务架构
为应用程序定义微服务架构 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式
- android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
1 章节目录 2 Android Activity综述 2.1 Activity怎么用 2.2 layout - 界面布局 2.3 Java - 控制界面 2.4 AndroidManifest.xm ...
- Oracle单机报监听不支持服务,(转)oracle 启动监听 报“监听程序不支持服务” 解决...
转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下: 启动tnslsnr: 请稍候... TNS ...
- android校园通代码,Android校园通软件的设计与实现.doc
4 Android校园通软件的设计与实现 4.1 研究目标 (1)了解Android应用程序的设计和开发过程: (2) 使用多种组件进行Android 平台校园资讯软件的开发. 本软件是基于Eclip ...
- 将Java应用程序作为Windows服务安装
这听起来像是您不需要的东西,但是有时候,当您分发最终用户软件时,可能需要将Java程序安装为Windows服务. 我之所以必须这样做,是因为我开发了一种用于公务员的工具 ,可以自动将其Excel文件转 ...
- 法那科机器人初始化启动_FANUC机器人程序自动启动介绍
<FANUC机器人程序自动启动介绍>由会员分享,可在线阅读,更多相关<FANUC机器人程序自动启动介绍(20页珍藏版)>请在人人文库网上搜索. 1.程序启动条件及时序介绍,上海 ...
最新文章
- C++ pair的使用
- SVM 实现与代码(转)
- 对mysql的各种sql语句如何对表加锁的实验
- java圆形进度条_可拖拽圆形进度条组件(支持移动端)
- Problem J: Island Buses
- 判定是否过拟合、欠拟合的一种方式
- ArrayListd的长度问题
- 利用MFC向导生成单文档应用程序框架
- Modelbuilder进阶教程
- 求任意多边形面积(凹多边形和凸多边形)
- C语言运算符优先级表详解
- 人类最美的24张数学画(图)
- html黑洞效果,html5黑洞动画特效
- DSP28377 I2C开发笔记
- vue + Electron 制作桌面应用
- error: dst ref refs/heads/dev receives from more than one src.
- 微机原理与接口技术的基础知识
- window11 定时关机脚本
- Python发送邮件的类
- 服务器插在显示屏上不亮,主机正常运行,但显示屏不亮,我将教您如何自行解决!...