Articles of 服务

连接到一个web服务从android – AsyncTask或服务?

我在写一个将连接到REST / JSON web服务的android应用程序。 用户将获取信息,上传评论,下载和上传图片等。 我知道我不应该在Activity / UI线程中保留所有这些networking通信,因为这会导致ANR。 我感到困惑的是,我是否应该使用“手动”线程来实现这个AsyncTask或服务; 有了服务,我只需要在web服务的API中为每个方法提供一个公共方法。 然后,我会在这些方法中实现线程化。 如果我使用了一个AsyncTask,我会创build一个帮助类,为webservice的API中的每个方法定义AsyncTasks。 哪种方法是首选? 与web服务的交互只会发生在用户在活动中。 一旦他们切换到另一个应用程序,或退出程序,就不需要与web服务进行通信。

Android – startActivityForResult之外的一个活动?

我有一个包装类(BluetoothDiscoverer)在服务中实例化。 此类获得BluetoothAdapter并在扫描邻居设备之前检查是否启用了蓝牙。 现在,如果蓝牙没有启用,我希望能够在这个类(BluetoothDiscoverer)内做到以下几点: Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER); 现在我已经读了这个: 从非活动使用startActivityForResult 但我不想将我的主要活动传递给此对象,因为我想处理在BluetoothDiscoverer类中的结果(无论用户是否接受启用蓝牙)。 现在如果我使BluetoothDiscoverer成为Activity的一个子类 当startActivityForResult即将被调用时,我似乎正在得到一个NullPointerException。 我认为这是因为我需要添加一个onCreate()/ onDestroy()方法,但是这样做打破了我所做的目的,因为我需要能够调用实例化此类的服务中的BluetoothDiscoverer对象上的方法。 我还需要注册一个广播接收机,用于在启动扫描时检索相邻设备。 如果BluetoothDiscoverer类不是一个活动,我该如何注册这个接收器? 有没有解决这个问题? 谢谢安德烈亚斯

getApplicationContext()中的空指针

我正在尝试以下一段代码,其中一个服务正在实现我的侦听器: public class MyListenerClass extends Service implements MyListenerInterface { public void onCurrencyRecieved(MyEventClass event) { System.out.println("Coins Recieved – Listener Successful"); stopSelf(); Toast toast = Toast.makeText(getApplicationContext(), "Service Stopped", Toast.LENGTH_LONG); toast.show(); } @Override public void onCreate() { Toast toast = Toast.makeText(getApplicationContext(),"Service started", Toast.LENGTH_LONG); toast.show(); super.onCreate(); } 现在,onCreate()里面的敬酒工作正常,但是重写的方法里面抛出了下面的exception: 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): java.lang.NullPointerException 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100) 01-03 18:52:35.740: […]

Android – bindService不止一次

绑定服务多次使用相同的上下文到相同的服务可以吗? 我可以使用相同的上下文多次bindService到相同的服务和unBindService只有一次? 谢谢

每天通知在某个时间

我想实现这一点: 第一次打开应用程序后,用户会收到通知,每天下午2点,如果某些条件是真的。 如果条件不成立,我们今天不会显示通知。 条件在下午2点检查,它从互联网下载一些数据。 到目前为止,我用AlarmManager和它的方法setRepeating()与24小时的时间间隔。 AlarmManager启动一个服务 。 在这项服务中,我正在下载数据,检查条件,如果是真的 – 显示通知 。 由于下载可以持续5秒以上,因此我已经为这个服务声明了android:process=":background" ,在单独的进程中运行它,而不会阻塞我的UI。 这种方法有两个缺点: 1:如果用户打开应用程序,比如下午4点(条件为真),他会立即收到通知。 来自setRepeating ()文档: 如果过去发生的时间,将立即触发警报,并根据过去的触发时间相对于重复间隔的距离来计算警报。 我想这个用户不会收到通知,这一天,只有第二天,等等。 2:我担心用户关机后不会显示通知。 从AlarmManager文档: 注册的警报在设备处于睡眠状态时保留(如果在此期间closures设备,可以select将设备唤醒),但是如果closures并重新引导,设备将被清除。 我不知道是否有可能使它一直工作。 如果你有任何想法如何使它更好,不客气。

来电录音/处理服务! – Android

你好, 我正在开发Android的解决scheme,将logging呼叫(包括输出和input),并进一步处理logging的数据(在我的应用程序的终点,没有audio文件数据将保存在手机内存)。 我已经实现与PhoneStateListener.LISTEN_CALL_STATE BroadcastReceiver启动logging服务,如果状态是CALL_STATE_OFFHOOK。 然后在服务中,我开始一个尝试录制呼叫的新线程,以及另一个带有PhoneStateListener.LISTEN_CALL_STATE的BroadcastReceiver,如果电话状态更改为TelephonyManager.CALL_STATE_IDLE,则调用方法停止录制。 所创build的audio文件是空的。 我的服务中的recorder.stop()方法被调用时抛出exception。 错误在哪里? 我能做得更好吗? 首先(独立)BroadcastReceiver: package com.piotr.callerrecogniser; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { MyPhoneStateListener phoneListener = new MyPhoneStateListener(context); TelephonyManager telephony = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } class MyPhoneStateListener extends […]

制作活动在后台运行

我新的Android,我没有太多的服务意识。我有一个用户界面的活动类,我想让这个活动类在后台运行,当我点击后退button。 如何让我的活动像一个服务运行在后台,请帮我..

如何在不同的过程中build立活动与服务的双向沟通​​?

我正致力于在一个活动和一个服务之间build立一个双向沟通,这个活动和服务在不同的过程中运行。 从活动中查询过程没有什么大不了的。 但我希望进程通知活动的事件。 其背后的想法是:服务独立于实际的应用程序运行。 它定期查询networking服务器。 如果在networking服务器上发现新任务,则进程应通知该活动。 我在AndDev.org发现了这个线程 ,但它似乎并没有为我工作。 我一直在用BroadcastReceiver搞乱。 我已经实现了一个应该通知活动的接口,但问题是,由于来自进程的广播是通过Intent完成的,所以监听器总是为空,因此扩展BroadcastReceiver的类将被新实例化。 我如何build立一个双向沟通? 这一定是可能的。 谢谢你的帮助, steff

Android:服务在Activityclosures时停止

如果我理解正确,bindService()与BIND_AUTO_CREATE将启动一个服务,并不会死,直到所有绑定全部解除绑定。 但是,如果我bindService(BIND_AUTO_CREATE)在onCreate()和回击buttonclosures活动,服务调用onDestroy()并死也。 我不会在任何时候调用unbind()。 那么当Activity被破坏时,绑定是否被破坏,服务被破坏呢? 如果我希望服务始终在运行,那么在启动活动的同时,我想要绑定它以便可以访问该服务? 如果我调用StartService(),然后在onCreate()上bindService(),它将在每次启动Activity时重新启动服务。 (我不想要)。 所以我可以开始服务一次,然后绑定下一次我启动活动?

唤醒lockingandroid服务重复

我有这个应用程序需要运行一个服务(背景),周期性地发出嘟嘟声。 手机需要每隔一分钟哔一声,持续5秒钟(在服务中使用一个处理程序)。 我已经实现了这个完美的服务,但是当手机进入深度睡眠模式时,这个处理程序的执行停止。 在这个问题中使用这个答案,我设法使用唤醒锁,它工作正常。 但是,当我明确地把手机置于深度睡眠模式时,处理程序停止执行。 我在哪里放置唤醒服务。 下面的代码片段。 public class PlaySound extends Service{ PowerManager.WakeLock wl ; PowerManager pm; private SoundManager mSoundManager; boolean wakeUpFlag = false; @Override public void onCreate(){ super.onCreate(); mSoundManager = new SoundManager(); mSoundManager.initSounds(getBaseContext()); mSoundManager.addSound(1, R.raw.sound); } @Override public int onStartCommand(Intent intent, int flags, int startId) { startservice(); return START_STICKY; } private void startservice() { […]