标签: android-service

没有GUI的Android Activity

我创建了一个仅用于从链接启动的活动(使用intent过滤器.)我不希望这个活动有一个GUI - 我只是想让它启动一个服务并在栏中发出通知.我试图在我的服务中为链接设置intent过滤器,但这不起作用.有没有更好的方法来回答意图过滤器 - 或者我可以让我的活动没有GUI吗?
对不起,如果我困惑,艾萨克

user-interface android intentfilter broadcastreceiver android-service

29
推荐指数
2
解决办法
3万
查看次数

为什么没有Service.onStop方法?

我已经阅读了很多Android服务.据我了解,生命周期是:

void onCreate() 
    void onStart(Intent intent) 
    ...
void onDestroy()
Run Code Online (Sandbox Code Playgroud)

http://www.linuxtopia.org/online_books/android/devguide/guide/topics/fundamentals.html

但是没有onStop方法.问题:

  • 为什么没有停止方法?
  • 在我的服务上发出stopService请求时会发生什么?(来自外部,也许是Android本身).我能检测到这个事件吗?
  • 我想强制(或至少验证)我的服务是流程中的单身人士.我该怎么做(或Android是否在幕后强制执行此操作)?

对于上下文,我有一些资源,我想在服务运行时分配和释放(在"已启动"中),以及我希望在服务处于"已创建"状态时分配和释放的另一组资源.

android android-service

29
推荐指数
1
解决办法
2万
查看次数

Android应用程序作为没有活动的服务

我正在创建一组应用程序,我为所有这些应用程序提供了相同的后台服务.

我正在尝试创建一个只有这个的应用程序Service.所以我不会在所有这些中重复它,但事情是不需要任何东西Activity.因为它不需要用户界面,因此用户无法关闭它,除非他们停止了Service.

我试图删除Activity,但然后应用程序不运行或启动. 我的问题是:我可以创建一个完全像Google Play Services其他应用程序可以使用它的应用程序Service.

如果是,则非常欢迎使用片段或样本.

android background-service android-service google-play-services

29
推荐指数
1
解决办法
3万
查看次数

如何从服务中调用活动中的方法

有一种服务可以听取一些声音.如果语音匹配字符串,则在服务对象中调用某个方法.

public class SpeechActivationService extends Service {

     public static Intent makeStartServiceIntent(Context pContext){    

         return new Intent(pContext, SpeechActivationService.class);
     }

     //...

     public void onMatch(){
         Log.d(TAG, "voice matches word");
     }

     //...
}
Run Code Online (Sandbox Code Playgroud)

这就是我在我的活动中启动服务的方式:

Intent i = SpeechActivationService.makeStartServiceIntent(this);
startService(i);
Run Code Online (Sandbox Code Playgroud)

从这个服务方法,我如何调用驻留在activity对象中的方法?我不希望从活动到服务的访问,而是从服务到活动.我已经阅读过有关处理程序和广播公司的内容,但无法找到/理解任何示例.有任何想法吗?

android android-intent android-service android-handler

28
推荐指数
2
解决办法
3万
查看次数

在新的Android推荐架构中,BoundService + LiveData + ViewModel最佳实践

我一直在努力思考将Android服务放在新的Android推荐架构中的位置.我提出了许多可能的解决方案,但我无法决定哪一个是最好的方法.

我做了很多研究,我找不到任何有用的指导方针或教程.我发现关于将服务放置在我的应用程序架构中的唯一提示是@JoseAlcerreca Medium post

理想情况下,ViewModels不应该对Android有任何了解.这提高了可测试性,泄漏安全性和模块化.一般的经验法则是确保ViewModel中没有android.*导入(例如android.arch.*).这同样适用于演示者.

根据这一点,我应该将我的Android服务置于我的架构组件层次结构的顶层,与我的活动和碎片处于同一级别.这是因为Android服务是Android框架的一部分,所以ViewModels不应该知道它们.

现在,我将简要介绍一下我的场景,但只是为了让全景更清晰,而不是因为我想要这个特定场景的答案.

  • 我有一个Android应用程序,其中包含MainActivity,其中包含许多片段,所有这些片段都绑定在BottomNavBar中.
  • 我有一个绑定到myActivity的蓝牙服务及其中一个片段(因为我希望服务与Activty具有相同的生命周期,但我也希望直接从我的片段与它进行交互).
  • 该片段与BluetoothService交互以获取两种类型的信息:
    • 有关蓝牙连接状态的信息.不需要坚持.
    • 来自蓝牙设备的数据(在这种情况下,它是比例,因此重量和身体构成).需要坚持下去.

以下是我能想到的3种不同架构:

AndroidService中的LiveData Android服务范围内的LiveData

  • 具有连接状态和来自蓝牙设备的重量测量值的LiveData位于BluetoothService内.
  • Fragment可以触发BluetoothService中的操作(例如scanDevices)
  • Fragment观察LiveData有关连接的状态并相应地调整UI(例如,如果状态已连接,则启用按钮).
  • Fragment观察新重量测量的LiveData.如果新的权重测量来自BluetoothDevice,则Fragment会告诉自己的ViewModel保存新数据.它通过Repository类完成.

片段和AndroidService之间共享ViewModel 共享ViewModel arch

  • Fragment可以触发BluetoothService中的操作(例如scanDevices)
  • BluetoothService更新共享ViewModel中的蓝牙相关LiveData.
  • Fragment在自己的ViewModel中观察LiveData.

服务ViewModel 服务ViewMOdel拱门

  • Fragment可以触发BluetoothService中的操作(例如scanDevices)
  • BluetoothService在其自己的ViewModel中更新蓝牙相关的LiveData.
  • Fragment在自己的ViewModel和BluetoothService ViewModel中观察LiveData.

我很确定我应该将它们放在架构之上并将它们视为一个Activity/Fragment,因为BoundServices是Android Framework的一部分,它们由Android操作系统管理,并且它们与其他活动和片段绑定.在这种情况下,我不知道与LiveData,ViewModels和Activities/Fragments交互的最佳方式是什么.

有些人可能认为它们应该被视为一个数据源(因为在我的情况下,它使用蓝牙从一个规模获取数据),但我不认为这是一个好主意,因为我在上一段中所说的都是特别是因为它在这里所说的:

避免将应用的入口点(如活动, 服务和广播接收器)指定为数据源.相反,它们应该只与其他组件协调以检索与该入口点相关的数据子集.每个应用程序组件都是相当短暂的,具体取决于用户与其设备的交互以及系统的整体当前运行状况.

所以,最后,我的问题是:

我们应该在哪里放置我们的Android(绑定)服务以及它们与其他架构组件的关系?这些替代品中的任何一种都是好方法吗?

android android-service android-architecture android-architecture-components android-jetpack

28
推荐指数
1
解决办法
3284
查看次数

如何从片段开始服务

我想从列表视图项的片段开始服务.我试图用以下方式呼叫服务:

startService(new Intent(getActivity(),myPlayService.class));
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.我如何从片段中调用我的服务?还有其他方法可以开始服务吗?

android android-intent android-service

27
推荐指数
1
解决办法
3万
查看次数

任何人都可以解释android中绑定和绑定服务之间的区别

任何人都可以解释android中的未绑定和绑定服务之间的区别,并解释有意服务

谢谢

android android-service

27
推荐指数
4
解决办法
2万
查看次数

访问被拒绝查找属性"camera.hal1.packagelist"

在服务中使用相机时,移动屏幕变得不可触摸(由透明窗口锁定)并且仅在出现错误之下

Access denied finding property "camera.hal1.packagelist"
Run Code Online (Sandbox Code Playgroud)

将是什么原因及其解决方案?请帮忙..

android android-service android-camera android-camera2

27
推荐指数
1
解决办法
1万
查看次数

如何使用PendingIntent从服务到客户端/活动进行通信?

我一直在Android开发者网站上阅读以下文本,特别是在框架主题 - >服务 - >启动服务下.

在那里它陈述如下:

如果服务不提供绑定,则使用startService()提供的意图是应用程序组件与服务之间唯一的通信方式.但是,如果您希望服务返回结果,则启动服务的客户端可以为广播创建PendingIntent(使用getBroadcast())并将其传递给启动服务的Intent中的服务.然后,该服务可以使用广播来传递结果.

我有几个问题:

  1. 这个文本是否适用于Services IntentService s?
  2. 如何(代码方面)应该从内部实现Service; 然后,该服务可以使用广播来传递结果.以及所提到的广播将结果传递给原始客户/活动的位置?是否有一些方法应该被覆盖(比如onActivityResult())或什么?

android android-service android-pendingintent

26
推荐指数
1
解决办法
3万
查看次数

IntentService的onHandleIntent(Intent)获取null参数

我正在使用IntentService为我在Android上的应用程序运行后台服务.奇怪的是,我收到很多崩溃报告,其中传递给onHandleIntent的意图为空.我甚至不确定这是怎么可能的,而且看起来非常奇怪.任何人都可以建议为什么会发生这种情况?

堆栈跟踪

java.lang.NullPointerException
    at com.example.MyService.onHandleIntent(MyService.java:466)
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.os.HandlerThread.run(HandlerThread.java:61)
Run Code Online (Sandbox Code Playgroud)

我的服务文件中的第466行,其中空指针异常:

465 protected void onHandleIntent(Intent intent) {
466                Bundle data = intent.getExtras();   
Run Code Online (Sandbox Code Playgroud)

该服务启动为:

serviceIntent = new Intent(this, MyService.class);
serviceIntent.putExtra("ip", ip);
serviceIntent.putExtra("port", port);
startService(serviceIntent);                         
Run Code Online (Sandbox Code Playgroud)

编辑:我现在意识到我可能会误用IntentServices.当我启动服务时,我从onHandleIntent()开始一些工作线程,即使在onHandleIntent()返回后也继续运行.并通过绑定到服务并调用成员函数/回调来与线程通信.我将研究使用更好的方法来为此目的使用服务,同时我仍然不明白传递的意图是如何为空.我只能怀疑Android系统自己使用null意图调用onHandleIntent,这似乎很奇怪.有人可以解释为什么android系统可能以这种方式调用它吗?

android android-intent android-service android-intentservice

26
推荐指数
1
解决办法
5321
查看次数