Tag: 服务

Grails – 无法从Controller调用服务 – >总是得到“无法调用null对象上的方法错误”

我有一个grails应用程序,我在这里按照教程: http://www.grails.org/Services 我有一些代码 import org.springframework.beans.factory.InitializingBean class SubmitRequestService implements InitializingBean{ def GrailsApplication1 def setting void afterPropertiesSet(){ this.setting = GrailsApplication1.config.setting } def void sendHistoricalContract(HistoricalContract hc_instance){ //… blah blah whatever code } } class SubmitRequestController { def submitRequestService static allowedMethods = [save: “POST”, update: “POST”, delete: “POST”] def index = { // …. blah blah whatever code submitRequestService.sendHistoricalContract(historicalContractInstance) […]

无法在线程内创建处理程序。 我如何使用Looper.prepare()?

可能重复: 无法在未在AsyncTask for ProgressDialog中调用Looper.prepare()的线程内创建处理程序 我正在开发一种Android服务,试图每x次获取设备IP地址并将其通信到服务器。 我正在使用: Netbeans 7.2 Android SDK Android Google-Api 8 SQLite的 我知道有一些与此问题相关的问题,但没有一个问题能解决我的问题。 正如您在下面的代码中所看到的,我不是要尝试访问服务主线程的UI(好吧,我试过了,但是在我评论该行之后,错误仍然是相同的)。 另一方面,我正在使用AsyncTask ,我认为这是适当的方法。 这是我服务的主要部分: public class ArsosService extends Service { private NotificationManager mNM; private final Messenger mMessenger = new Messenger(new IncomingHandler()); protected DatabaseUtil dbu = null; @Override public void onCreate() { mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); try { dbu = DatabaseUtility.getInstance(this); […]

Android:将传感器数据从服务广播到活动

我正在尝试学习Android应用程序开发,并编写了一个非常简单的应用程序,其中包含一个调用服务的活动。 该服务将测量的加速度广播到活动。 问题是服务运行正常,但它不会将数据发送回活动。 即,我的接收器上的onReceive永远不会被调用。 此外,当活动结束时,有一个例外,说我的接收器尚未注册。 下面是我的服务,活动和manifest.xml的代码。 任何帮助将非常感谢。 活动呼叫服务: package com.practice; import com.practice.SimpleService; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.Window; public class ServiceActivity extends Activity { MyReceiver myReceiver=null; Intent i; static final String LOG_TAG = “ServiceActivity”; /** Called when the activity is first created. */ @Override public […]

Android服务不更新位置

我需要每1分钟和每5米位移更新融合位置(我知道它的不良做法,但为了测试和显示在日志中)我开始服务按钮按下按钮按下我在logcat中获得位置但是只有一次。 根据服务类 , onLocationChanged应该每隔1分钟调用一次,但它几乎不会再次调用,即使我的GPS几乎每分钟都开启,然后在关闭之后关闭,但Logcat中仍然没有位置更新。我需要服务类来保持更新位置而不影响UI或主线程 这是logcat,它只显示一次位置更新 09-16 03:13:37.125 10419-10419/com.example.com.pro_working1 D/===Location Service===: Service onConnected Calling 09-16 03:13:37.125 10419-10419/com.example.com.pro_working1 D/===Location Service===: Start Location Update is Calling 09-16 03:13:38.315 10419-10419/com.example.com.pro_working1 D/===Location Service===: Service OnLocationChanged Calling 09-16 03:13:38.315 10419-10419/com.example.com.pro_working1 D/===Location Service===: Here is Updated Locations: Latitude 28.5XXXXX Longitude 77.2XXXXX 09-16 03:13:38.315 10419-10419/com.example.com.pro_working1 D/===Location Service===: Sending Location Starting Accuracy is: 37.5 […]

单一RMI服务的简单入口点?

我有几个服务导出RMI接口。 他们曾经通过创建自己的注册表(使用LocateRegistry.createRegistry )并在那里绑定它来提供此function。 但是,当服务作为单独的应用程序在同一个VM(Tomcat)中运行时,这变得不可能,因为由于某种原因,那里只能有一个注册表。 我通过使用所有服务的中央注册表来解决这个问题。 即便如此,我对注册表的多对象注册表角色,只是它的入口点设施并不感兴趣。 然而,中央注册表引入了更多的复杂性(例如,它必须首先启动,它必须具有它注册的服务接口)。 有没有办法让每个服务独立地提供其RMI接口的入口点,同时让它们在同一个VM中运行(这是托管细节,而不是设计的一部分)?

叠加应用程序仅对某些触摸事件作出反应

我目前正在深入研究Android开发,最近遇到了困难。 我想创建一个覆盖应用程序,它位于所有其他应用程序之上。 它应该监听三指滑动,而所有其他触摸事件应该由OS处理(例如底层应用程序)。 这有可能吗? 我已经发现我需要添加LayoutParam TYPE_PHONE而不是SYSTEM_ALERT,因为后者将消耗所有触摸事件。 所以我的课现在看起来像这样: package […] public class Overlay extends Service { private TView mView; private ThreeFingerSwipeDetector detector = new ThreeFingerSwipeDetector() { @Override public void onThreeFingerTap() { Toast.makeText(getBaseContext(), “Three Fingers recognized.”, Toast.LENGTH_SHORT).show(); } }; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Toast.makeText(getBaseContext(), “Launched! :-)”, […]

android oreo上的永久服务

Android 8的电池消耗改进对用户来说很好,但是如果我的服务能按预期工作,我有点害怕。 首先:感谢您提出任何建议,但我不能只安排我的服务。 我希望一直在后台运行一个类似OK Google的关键词监听器。 它将基于开源的pocketsphinx-android库。 我知道这会消耗很多电池电量,我会告诉用户这个。 我们可以在android 8+上创建永久后台服务吗? 我需要在gradle中定位android 8,因为我期待一些旧目标的bug。 我也不想使用前台服务来惹恼用户,该服务会在状态栏中永久显示通知。 [ https://developer.android.com/about/versions/oreo/background.html] – 是否真的无法为我的用例(但最好是所有用例)提供永久性后台服务?

Android Start_redeliver_intent需要很长时间(小时)才能重新启动服务

我目前正在制作一个应用程序来轮询gps数据并将其上传到服务器。 该应用程序位于前台时启动该服务,并在应用程序进入后台时继续运行。 当应用程序快速关闭时,将调用onTaskRemoved并且Alarm Manager将重新启动该服务。 该服务是一个带有AsyncTask的IntentService来发布gps coords。 这就是奇怪发生的地方。 应用程序停留在前台的时间越长,Android使用START_REDELIVER_INTENT作为onStartCommand中的返回值重启它所需的时间就越长。 这项服务很少被Android杀死,但是当它发生时,它可能需要很长时间才能重新启动,具体取决于它在前台的时间长度。(?)..我认为。 因此,出于测试目的,我删除了重启应用程序的警报管理器,因此当我将应用程序关闭时,android将使用START_REDELIVER_INTENT重新启动它。 如果我让应用程序打开30秒,意味着后台服务运行30秒,然后滑动应用程序关闭,Android将在一分钟内重新启动。 但是,如果我启动应用程序,它在后台启动服务,并将应用程序保留在前台,比如10分钟,那么当我将应用程序关闭时,Android可能需要一个多小时才能重新启动服务。 在这10分钟内,应用程序每隔30秒轮询gps,并使用AsyncTask每5分钟上传一次coords。 我不知道发生了什么事。 我甚至不完全确定它与应用程序处于前台有关,但我可以通过计时将应用程序保持在前台的时间来反复复制它,这似乎与Android重启服务所需的时间成正比。 男人我知道这听起来很疯狂,但我希望不是。 另外作为旁注,我正在为应用程序本身使用Cordova / javascript,但该服务都是Java。 这是我的onCreate和onStartCommand。 不知道我还应该发布什么。 @Override public void onCreate() { super.onCreate(); //Log.i(TAG, “OnCreate”); locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this); registerReceiver(sendHTMLReceiver, new IntentFilter(“html_alarm”)); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); } @Override public int onStartCommand(Intent intent, int […]

从活动将对象传递给IntentService

为了节省我的应用程序中的电池,我决定使用“新”融合位置。 但是我需要将一些参数传递给接收GPS更新的服务。 它在下面完成的方式可以工作( putExtras(…) ),但我需要制作很多类Serializable / Parseable,这将是一个痛苦。 我已经四处搜索并找到了使用Binder的其他方法,但无法弄清楚如何让它工作。 是使用Binder的唯一途径还是另一种? 如果有任何不清楚的地方,请告诉我们。 谢谢。 public class LocationService extends IntentService { … public LocationService(StartActivity startActivity, DatabaseSQLite db, HomeFragment homeFragment) { super(“Fused Location Service”); … } @Override public int onStartCommand(Intent intent, int flags, int startId) { db = (DatabaseSQLite) intent.getExtras().get(“DatabaseSQLite”); … return START_REDELIVER_INTENT; } } 这就是它在我的活动中的用法: @Override public void onConnected(Bundle […]

如何注册ContentObserver以更改媒体卷?

当我想实现音量变化检测时遇到了问题。 由于必须通过服务在后台检测到变化检测,我无法拦截音量键按下。 我已经尝试过ContentObserver来监听音量设置的变化,但它没有奏效。 但是我挖了一些,发现我的ContentObserver在我注册时会检测到音量变化: this.getApplicationContext().getContentResolver().registerContentObserver( android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver ); 我已经尝试更改第一个参数 – 设置为要监听的URI,如果我理解正确的话。 但我什么也没做到。 那么,怎么做呢? 我不想在每次设置更改时更新我的​​UI(我将Seekbar设置为某个位置)。 那么,如何注册内容观察者来监听媒体卷的变化? 这是ContentObserver的代码: public class SettingsContentObserver extends ContentObserver { public SettingsContentObserver(Handler handler) { super(handler); } @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); myMethod(); } }