Android应用程序无法启动服务

Android应用程序无法启动服务,第1张

概述嘿,我正在尝试在我的 Android应用程序上实现一项服务.服务必须执行活动的相同任务. IE,如果在CallLog.Calls内容提供程序上发生某些更改,则必须通知服务并将数据插入数据库,即使应用程序未运行,我的意思是,服务将在应用程序启动后运行,因此如果应用程序被杀死,服务将继续运行,直到 *** 作系统停止它,对吧? 因此它将在后台运行,收集CallLog.Calls服务上更改的所有数据.但是,该服 嘿,我正在尝试在我的 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;@OverrIDepublic 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,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,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,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();    }}@OverrIDepublic IBinder onBind(Intent arg0) {    // Todo auto-generated method stub    return null;}@OverrIDepublic voID onCreate() {    Toast.makeText(this,"Rated Calls Service Created",Toast.LENGTH_LONG).show();    Log.i(TAG,"onCreate");    registerContentObservers();}@OverrIDepublic voID onDestroy() {    Toast.makeText(this,"Rated Calls Service Stopped","onDestroy");    cdh = new CallDataHelper(this);    db = openHelper.getWritableDatabase();}@OverrIDepublic 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,"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",values);        } while (cursor.movetoNext());        cursor.close();    }}public voID registerContentObservers() {    this.getApplicationContext()            .getContentResolver()            .registerContentObserver(                    androID.provIDer.CallLog.Calls.CONTENT_URI,new RatedCallsContentObserver(handler));} }
解决方法 只需看看你是否在清单文件中添加了此服务…….

谢谢…….

总结

以上是内存溢出为你收集整理的Android应用程序无法启动服务全部内容,希望文章能够帮你解决Android应用程序无法启动服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1123504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存