Articles of 服务

BroadcastReceiver与服务

那么,在android中, 在broadcastReceiver中执行某些操作和在broadcastReceiver中 调用另一个服务之间有什么区别? 我认为他们都在后台运行,对吧? 实际上,我要做的是: 在每天的特定时间,从数据库下载用户事件(例如:早上9点吃早餐),并设置AlarmManager以显示有关事件的通知。 现在我设置了一个报警管理器来完成上述任务。 如果我在BroadcastReceiver中直接完成此操作或在BroadcastReceiver中调用服务来完成此操作,我感到很困惑。 谢谢。

持久的服务

我知道有些人认为你不应该创建持久性服务。 但对于我们这些想要增加知识的人来说,如何在理论上创造一个呢? 我一直在玩,并注意到在低内存情况下使用startForeground的服务会被杀死。 我已经看到了一个现在被弃用的权限PERSISTENT_ACTIVITY ,但这并没有做太多。 那么秘密是什么?

Android:当应用程序被杀时,保持服务运行

即使应用程序被杀,我也希望在后台运行IntentService 。 并且被“杀死”我的意思是按住主页按钮很长时间 – > 查看所有正在运行的应用程序 – >将我的应用程序放在一边 – > 应用程序被杀或按下后退按钮很长时间 – > 应用程序被杀 我的代码如下。 在我的MainActivity中: Intent intent = new Intent(this, MyService.class); this.startService(intent); 在我的MyService中: public class MyService extends IntentService { @Override protected void onHandleIntent(Intent intent) { System.out.println(“MyService started”); run(); } private void run() { while (true){ System.out.println(“MyService still running”); doSomething(); waitSomeTime(); } } } 我看到应用程序打开时服务正在运行。 […]

如何启动AccessibilityService?

我正在尝试使用开始实现AccessibilityService Intent mailAccessabilityIntent = new Intent(this, EmailAccessabilityService.class); startService(mailAccessabilityIntent); 我的问题是onServiceConnected()从未被调用过。 我该如何正确启动此服务?

永远不会启动Android服务 – 未调用onStartCommand()

我正在尝试创建一个将在后台处理文件I / O的服务。 更新数据的活动将绑定到服务并调用服务的方法来执行I / O. 我正在使用Android文档获取指导。 但是,我的服务似乎并不想开始。 在我的Activity的onCreate()方法中,我有: Intent smsIntent = new Intent(this, SurveyManagerService.class); String surveyFilename = getIntent().getStringExtra(“surveyFilename”); System.out.println(startService(smsIntent)); //testing if it starts SurveyManagerServiceConnection connection = new SurveyManagerServiceConnection(); sms = connection.getSurveyManagerService(); 在第3行,LogCat输出一个ComponentInfo对象,因此看起来服务已经创建; 但是,短信是空的。 此外,似乎永远不会调用SurveyManagerService onStartCommand()方法: @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println(“starting service”); Toast.makeText(this, “service starting”, Toast.LENGTH_SHORT).show(); openSurveyFromIntent(intent); return START_REDELIVER_INTENT; […]

Android服务如何知道它不受任何活动的约束

我有一个Android服务,即使在最后一个Activity从堆栈中popup,或者用户已选择执行其他操作,我仍希望继续运行。 本质上,服务正在侦听远程服务器上的更改,当且仅当应用程序中的活动未运行(或可见)时,我才想生成通知。 换句话说,我不希望在用户直接与应用程序交互时发生通知。 在用户直接与应用程序交互的情况下,服务将通知活动并基于更改更新适当的UI元素。 我计划通过观察者模式实现这一点。 如果没有应用程序活动绑定到它,服务如何知道? 谢谢,J

替换为Service类的finish()方法? 杀死它

我之前在几个活动中使用了方法finish()而没有任何问题。 但是,当我试图在广播接收器内调用它时,我从编译器得到错误消息“对于AudioServicetypes,方法finish()未定义” AudioService是我的Android应用程序中的Service类的名称。 如果一个服务中没有finish()方法,那么我可以调用什么来杀死这个服务?

使用意图将数据发送到我的活动

我有一台运行的服务器通知用户打开我的主要活动的状态栏通知,如何通过该意图将数据传递给我的活动?

防止Android服务的多个副本

startService的doco声明“如果此服务尚未运行,它将被实例化并启动(如果需要,为它创建一个进程);如果它正在运行,那么它仍然在运行。” 我发现每次调用startService似乎都是启动一个单独的服务实例,因为服务正在进行的工作(在我的测试用例中,通常写入新的日志文件)正在为每次调用再次完成。 我试图通过循环ActivityManager来检测服务… getRunningServices(Integer.MAX_VALUE))但它没有显示出来。 SGS 11上的Android 2.3.3我在这里遗漏了一些东西。 我知道Service的onCreate()方法只在创建时被调用,而且因为我在服务中运行了一个连续的进程( 在我的Activity的onResume方法中,我正在启动服务(“myService”): Intent intent = new Intent(this, myService.class); startService(intent); 在MyService中,我有一个onCreate之类的 @Override public void onCreate(){ super.onCreate(); … 从我设置定时器的地方,使用TimerTask,一次/秒写入日志文件。 这按预期工作 – 我可以看到正在编写的日志。 在Activity的onResume方法中,在调用StartService方法之前,我通过调用包含checkForRunningService方法检查myService服务是否存在 for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (service.service.getClassName().contentEquals(“com.gpsanimator.startrax.myService”)) { Toast.makeText(getApplicationContext(), “Service IS SO running: “, Toast.LENGTH_SHORT).show(); return true; } 这永远不会findmyService服务,即使它似乎正在运行,因为它很乐意写入日志文件。 每次恢复我的Activity时,我的myService服务的onCreate方法被调用 – 它生成一个新的日志文件并开始写入它以及不断更新的原始日志文件。 第一次调用startService时服务是否启动? 然后继续跑? 后续调用startService()是否应该发现服务已经运行,因此不会再次触发onCreate()方法? 但那不是我所看到的。 […]

如何在没有“辅助function”权限的情况下检测输入法选取器可见性

我正在向用户显示输入法选择器,并且popup选择器: InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); im.showInputMethodPicker(); 现在,如果用户解雇了选择器(例如通过点击选择器外部),我想知道,发生了这种情况并做了一些动作(比如显示通知)。 我知道在一个Activity中我可以用脏方法检查根布局的焦点,我知道使用Accessibility权限我可以检查该系统对话框是否有焦点。 问题是我正在运行一项服务,我需要检测IME选择器是否显示,即使我不在我的应用程序(例如第三方应用程序,甚至Android键盘设置)中,我也find了辅助function许可有点混淆用户因此我宁愿不诉诸于此并find另一种方式。 还有另一种方法吗?