Android中通过Service启动Activity遇到的问题及解决方案

Android组件管理框架—前台服务Service之startForegroundService方式启动流程(Android P) 一 前言 这节的内容也是由于项目中的一个Bug引起: 12-13 10:41:07.520 16661 16661 E AndroidRuntime: FATAL EXCEPTION: main 12-13 10:41:07.520 16661 16661 E AndroidRuntime: Process: cn.xxx.xxxxx:remote, PID: 16661 12-13 10:... 阅读详情

最近在做毕业设计是有关Android方向的,有需要再后台运行的service中,等待用户指令打开Activity的情景,遇到一些坑,在这里分享一下,希望对大家有帮助。

一、没有添加flag

会报如下错误:

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

解决方案:

这种情况没用过Service的很容易出现,解决办法也很简单,在startActivity之前给intent添加flag就好,如下:

intent.setFlags(FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

参考文章:https://www.jianshu.com/p/d269a91e48d4

二、启动一次之后,再启动就没反应,也不报错

这个问题困扰了我两天,才找到答案。参考文章:https://juejin.cn/post/6844903936059523080

出现这种问题的都是Android版本10以上的,它是由于10更新后的安全机制,限制了后台启动Service和Activity的时间,一般允许Service在被创建后的十秒内启动Activity,这个时候是可以启动成功的,但是十秒后就禁止启动Activity了,所以出现这种情况,没有任何错误信息,导致我一直以为是只能启动一次。

解决方案:

申请SYSTEM_ALERT_WINDOW悬浮窗权限

在Manifest.xml清单文件中加上:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

java代码中发起请求权限申请:

if (!Settings.canDrawOverlays(this)) {
            //若未授权则请求权限
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 0);
        }

这里需要用户手动授权,就可以了。

【AMS】Android 8.0+ 绕开启动后台Service限制 【附源码修改实现】应客户要求,需要在开机时,拉起应用A。但因为开机时,同时被拉起的应用过多,导致Launcher在开机那一刻较为卡顿。为解决这一问题,采取了延迟拉起的做法。在开机后,延迟一定时间,由系统服务,拉起应用A。 阅读详情

相关推荐

保姆级教程:用Labelme标注车辆关键点,并一键转成YOLOv8-pose训练格式

本文提供了一份详细的车辆底盘关键点标注教程,从使用Labelme进行标注到一键转换为YOLOv8-pose训练格式的全流程指南。特别针对工业检测和自动驾驶场景,分享了标注规范、格式转换脚本及常见问题解决方案,帮助开发者高效准备训练数据并优化模型性能。

weixin_27419879的博客 306

Service 中启动 Activity

转自:http://blog.youkuaiyun.com/comeoverjava/article/details/7454315 在 Service 中启动 Activity,有很多方式,比如隐式启动、显式启动等。 隐式启动 Activity,需要在manifest.xml 中为该 Activity 配置 ,如下所示:

yueguanyun的专栏 2078

从ACTF2020看文件上传漏洞:你以为改后缀就完事了?这些坑我都帮你踩过了

本文通过ACTF2020的Upload题目深入剖析文件上传漏洞的复杂性和防御策略。文章揭示了常见误区,如仅修改文件后缀的局限性,并详细解析了绕过技巧和高级防御机制。从开发角度提供了构建安全上传功能的实用建议,帮助读者全面理解文件上传漏洞的本质与防护方法。

weixin_29278805的博客 246

Android Service启动到Activity

Android Service启动到Activity从Service启动到Activity基本可以分为两类: 1.从自己应用的Service启动自己应用的Activity,即显式意图; 2.从自己应用的Service启动到其他应用的Activity,或者从别的应用的Service启动到自己应用的Activity,即隐式意图; 1.显式意图启动下面为示例写法: Intent intent

「程序员飞飞」的博客 3570

保姆级教程:QGC地面站Vehicle Setup全模块配置详解(从固件升级到安全设置)

本文提供QGC地面站Vehicle Setup全模块配置的保姆级教程,涵盖从固件升级到安全设置的完整流程。详细解析二次开发环境准备、传感器校准、飞行模式配置等关键步骤,帮助用户快速掌握无人机配置技巧,确保飞行安全与性能优化。

weixin_28726671的博客 385

知识图谱-KGE-语义匹配-双线性模型-2018:SimplE

【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随

u013250861的博客 958

Android 在Service里面启动Activity

Android 在Service里面启动Activity

qq_27494201的博客 706

LVGL 拨盘菜单(Dial Menu)

h。

摸鱼专家 191

android service java_Android 在Service中启动Activity的大坑

在Activity中其中startActivity这个大家应该是非常熟悉的;那么从service里面调用startActivity话,会怎么样呢?会出现下面的异常:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_A...

weixin_31951365的博客 610

Cesium 实战 19 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型。

非科班Java出身GISer的博客 6434

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1276

Android异常之Service启动Activity

在Activity中其中startActivity这个大家应该是非常熟悉的;那么从service里面调用startActivity话,会怎么样呢? 会出现下面的异常: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FL

抽烟的青蛙的专栏 1514

反应动力学仿真软件:Kintecus_(12).高级功能与技巧

Kintecus允许用户自定义复杂的反应方程,包括非线性反应和多相反应。通过自定义反应方程,用户可以更准确地描述实际反应系统。多尺度仿真是指在同一模型中同时考虑不同时间和空间尺度的反应过程。Kintecus提供了工具来处理从微观分子动力学到宏观反应动力学的多尺度仿真。通过本节的学习,您已经掌握了Kintecus的高级功能与技巧,包括复杂反应网络的构建、参数优化与敏感性分析、自定义反应机制、多尺度仿真、并行计算与批处理,以及数据可视化与后处理。

kkchenjj的博客 1047

Android service传递的问题

主Activity里bindService建了一个Service,然后将此Service通过构造方法传给子类B, class B(Service  service) {     mBservice = ​service; } 之后主Activity调用B类的testb()方法 testb() { log.i(TAG,""+mBservice.num); //num是​service

flyfight88的专栏 1737

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

context中启动activity

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? Context中有一个st...

aa20201的博客 126

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android Service 之四 问题总结

http://rainbow702.iteye.com/blog/1142600 我写了一个  Service 的Demo,但是将启动Service的Intent声明为主Activity的成员变量时, Java代码   public class MyServiceActivity extends Activity {      private Button star

Skypine_Lee的专栏 967

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android 启动其他应用的Activity或Service失败解决

本文仅针对Android11,如果你的模拟器或设备是Android11的话,请继续看下去。 一、提出问题 最近在使用一个应用绑定另外一个应用的Service时,无论如何都绑定不上,现象是Service的onCreate()和onStartCommand()回调都没有执行。说明应用之间的通信出现了问题。 二、调查过程 了解到我们现在使用的模拟器使用的是Android11,所以抱着试一试的态度去看了一下Android11的新特性。发现在Android11中新增了一项“包可见性”。 作者:pc_Li

pc_LI 5564

android flag_activity_new_task结束,非activity环境启动activity还需要FLAG_ACTIVITY_NEW_TASK吗?...

2018-11-7更新更新先说结果原理上按照设计,service,application,broadcast不能直接startActivity,除非加上FLAG_NEW_TASK但是api 23 ,也就6.0以下的遵循了该设计原则api 24,25,26,27官方出现了bug,不加flag也能正常启动,bug就是 &&option!=nullapi 28 解决了该笔bug背景之前...

weixin_39930748的博客 349

service启动activity_一张图理解Service的绑定过程

Service的绑定过程如图,首先我们回答一个问题即如何将Activity与指定Service绑定?答:绑定其实就是拿到Service的引用,用于和Service通信,需要通过中介者AMS,所以只要AMS拿到Service句柄就好办了因为AMS通过Activity的bindService方法就很容易拿到句柄了,大概分为三步1.AMS持有Activity的句柄(引用)通过bindService就可以...

weixin_35960357的博客 273

Activity onCreate同时startService问题分析

我尝试在Activity的OnCreate状态时,初始化一个Service,然后在Service初始化hen

Norton的专栏 1680

BroadcaseReceiver中(后台)启动Activity

在后台比如BroadcaseReceiver service中启动Activity 需要注意一下几点 1.Intent Flag. Intent intent = new Intent(); intent.setClassName(context, "class name"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 2. 权限,任何在后台s...

weixin_34315665的博客 181

启动Lib库中的Activity及Service失败问题

启动时不报错异常如下                                          Unable to start service Intent { act=jp.co.toshiba.tjet.intent.action.TEMP_ACTIVATE cmp=com.example.nfcdemo/jp.co.toshiba.tjetservice.TjetService } ...

fengzhiqi1993的博客 620

android点击通知,Android实现点击通知栏后,先启动应用再打开目标Activity

情况简述在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击动作,点击后跳转到app中对应的Activity。目前遇到的问题是Service以独立进程运行,在收到消息并弹出通知后,app本身的进程有两种情况:app正在运行app已退出对于第一种情况,处理就非常简...

weixin_39586265的博客 1032

Android 接收开机广播启动service/activity

Android 接收开机广播启动service/activity 前言: 此文章针对于普通手机APP,在没有限制之前直接可以通过接收开机广播,然后通过intent即可实现开机启动service/activity。 Intent intent = new Intent(context,XXXXX.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);//启动activity context.s

qq_43540406的博客 9843
上一篇: python运算符学习笔记
下一篇: python实现根据文件名自动分类转移至不同的文件夹
LiePy
博客等级 码龄7年 1927粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值