在Android Service组件里面弹出Toast

使用Service服务后台运行Toast显示小火箭 知识点: 1 使用Service服务后台运行Toast显示小火箭 2 使用子线程更新火箭发射功能 1 使用Service服务后台运行Toast显示小火箭 1建立一个Service类,并在AndroidManifest.xml中进行注册: public class RocketService extends Service <service android:nam 阅读详情

方法一:常用方法

原理:其原理是通过Handler将一个自定义的线程运行于主线程之上

/**
     * 在Service里面弹出Toast
     * 
     * @param txt 需要显示的文字
     */
    public void showToast(final String txt) {
        if (txt == null) {
            Log.e(TAG, "call method showToast, text is null.");
            return;
        }

        Handler handler = new Handler(Looper.getMainLooper());

        handler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(DeviceServiceEngineImpl.this, txt, Toast.LENGTH_LONG)
                        .show();
            }
        });
    }

方法二:app中没有activity的时候的方法

  1. 启动一个透明的Activity,onCreate方法中显示tost,然后定时finish。
  2. 使用WindowManager来显示一个view,然后定时移除

先new一个TextView,给它设置背景与颜色、字号,使之符合你想要的toast,然后设置好LayoutParams,把textView add到windowmanager上,然后定时移除。

private void showToast(Context context){
        final WindowManager wManager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        final TextView textView=new TextView(context);
        textView.setBackgroundResource(R.drawable.shape_bg_ball);
        textView.setText(context.getString(R.string.toClipboard));
        textView.setPadding(dp2Px(10,context),dp2Px(5,context),dp2Px(10,context),dp2Px(5,context));
        int screenHeigth = wManager.getDefaultDisplay().getHeight();
 
        int mStatusBarHeight = dp2Px(25, context);
 
        WindowManager.LayoutParams mParamsToast = new WindowManager.LayoutParams();
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (Build.VERSION.SDK_INT > 23) {
                    //在android7.1以上系统需要使用TYPE_PHONE类型 配合运行时权限
                mParamsToast.type = WindowManager.LayoutParams.TYPE_PHONE;
            } else {
                mParamsToast.type = WindowManager.LayoutParams.TYPE_TOAST;
            }
        } else {
            mParamsToast.type = WindowManager.LayoutParams.TYPE_PHONE;
        }
        
        mParamsToast.format = PixelFormat.RGBA_8888;
        mParamsToast.gravity = Gravity.LEFT | Gravity.TOP;
        mParamsToast.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        int defaultY =screenHeigth- ((screenHeigth - mStatusBarHeight) / 2) / 3;
        mParamsToast.x = wManager.getDefaultDisplay().getWidth()/2- Tools.getViewWidth(textView)/2;
 
        mParamsToast.y = defaultY;
        mParamsToast.alpha = 1;
        mParamsToast.width = WindowManager.LayoutParams.WRAP_CONTENT;
        mParamsToast.height = WindowManager.LayoutParams.WRAP_CONTENT;
 
        wManager.addView(textView, mParamsToast);
        new Handler().postDelayed(()->
                wManager.removeViewImmediate(textView),500);
    }

 

Android题集四大组件之Service Service 什么是Service? 有需求需要APP在后台运行时,Service就是一个这样的入口,Service是一种可以在后台执行长时间运行操作而没有用户界面的应用组件,后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口。 Service的生命周期 Service的启动方式?如果启动方式交织在一起的话,会出现什么情况? Service 有绑定模式和非绑定模式,以及这两种模式的混合使用方式。不同的使用方法生命周期. 阅读详情

相关推荐

android service toast 01

Demo android service toast 第一个版本

android 在service中使用toast

在service子线程中使用Toast会抛出"Can't create handler inside thread that has not called Looper.prepare()"异常。百思不得其解,后来终于想通了,分享下我的心得。 Toast可以看出是个特殊的(不可操作,不可获焦,不可触摸)UI组件,因此,他的操作必须放在主线程(UI线程)中。网上看到很多种解决方法,其中一种是在子线

WECANACE的专栏 6239

Android Service中使用Toast无法正常显示问题的解决方法

本文实例讲述了Android Service中使用Toast无法正常显示问题的解决方法。分享给大家供大家参考,具体如下: 在做Service简单练习时,在Service中的OnCreate、OnStart、OnDestroy三个方法中都像在Activity中同样的方法调用了Toast.makeText,并在Acitivy中通过两个按钮来调用该服务的onStart和onDestroy方法: DemoService代码如下: @Override public void onCreate() { super.onCreate(); Toast.makeText(getApplica

Android 8.1.0 Service 中怎么弹出 Toast

本来想在一个文章里面记录一下在 Service 中弹出 Toast、Dialog、Activity (基于Android 8.1.0),最后还是决定分开单独写一下。因为看起来觉得这只是一点点的知识点,现在你如果在网络上搜索怎么在 Service 中弹出 Toast、Dialog、Activity ,能找到的博客一般都是有问题的。 首先这篇文章是根据我的理解,记...

Water_Marking的博客 1694

VGG16

VGG16学习笔记

一去不复返的通信er 1177

Appsflyer Web2App实战指南:OneLink与Web SDK深度对比

本文深入对比了Appsflyer实现Web2App的两大核心工具:OneLink智能链接与Web SDK。OneLink提供开箱即用的智能跳转,部署快捷,适合快速推广;Web SDK则支持高度自定义的用户行为追踪,适合深度分析与精细化运营。文章提供了详细的配置指南、场景化选型建议及实战避坑技巧,帮助营销与开发团队根据自身需求选择最佳方案,有效提升从网页到应用的转化率与归因精度。

weixin_29213655的博客 458

java toast提示_显示Java类的Toast通知

我想在我的应用程序中创建一个单独的类来处理错误报告,并将特定的错误发送到数据库.但是,我无法弄清楚上下文应该是什么以及应该如何正确编码.我认为它仍然应该可行,我只需要对它进行编码,如果不是这种情况,对我来说最好的解决方案是什么?public class SendError implements Runnable{private String url;public SendError(String ...

weixin_29281941的博客 680

什么!!!寒假就要准备暑期实习

介绍暑期实习,从作用,时间线,投递渠道,技术准备,常见问题,经验教训几个方面介绍暑期实习

今天不coding的博客 1726

Android的四大主键

Android 应用程序是由以下四种组件构造而成的:·活动·广播接收器·服务·内容提供器需要注意的是,并不是每个 Andorid 应用程序都必须构建这4 个组件,有些可能由这些组件的组合而成。一旦你确定了你的应用程序中需要的组件,那么你就应该在 AndroidManifest.xml中列出他们。 这是一个XML 配置文件,它用于定义应用程序中需要的组件、组件的功能及必要条件等。这个文件是必须的。 详情参见Android manifest file documentat...

mingzaizai_123的专栏 743

VL53L1X vs VL53L0X:激光测距传感器选型指南与性能对比

本文深入对比了VL53L1X与VL53L0X两款激光测距传感器的核心差异。VL53L1X采用区域ToF原理,在抗环境光干扰、最大测距及多目标识别方面优势显著,尤其适合复杂光线与动态场景。文章结合机器人避障、无人机定高等实战场景,提供了清晰的选型决策树,帮助工程师根据测距需求、环境复杂度与系统成本做出最优选择。

weixin_29197699的博客 394

SEG-Y 数据介绍及读写

无

1万+

android面试题

1、Activity的生命周期 2、Service的生命周期 3、Service和Activity在同一个线程吗 默认情况下是在同一个主线程中。但可以通过清单中android:process属性配置不同的进程。 4、java中的soft reference是个什么东西     如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对...

weixin_34125592的博客 404

AMS TMF8820/21/28 SPAD 掩码和模式选择

为了实现最快的测距周期,将报告周期设置在测距周期以下的毫秒,以确保不会有等待时间。除了8X8固定了pixel的位置意外,其他模式客户可以设计自己的spad掩码,并将spad单独分配给通道。对于这些spad掩码,有一些约束。左下角提示红色代表光学中心,绿色方框表示单个spad,每个MP里可能有2X3个spad,也有2X5个spad,也有3X6+3个spad,这部分适配光学,最大的程度的利用spad区域。以下是几种预定义的spad掩码,非常灵活的配置,来适配各种3X3,4X4,8X8的模式选择。

dream it possible 700

Android在服务service里使用Toast显示和弹出Dialog

我们一般在Activity里面使用Toast和Dialog,使用比较简单,这里就不用讲了。有时候需要在服务里面使用Toast和Dialog,但是不知道怎么引入上下文Context ,下面介绍另种方式使用Toast和Dialog。 1. Toast在Service中使用 ,直接上代码 Handler handlerThree=new Handler(Looper.getMainLooper())

C先生的博客 1万+

YOLO26改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLO26-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 901

在Open3D中从网格中采样点云

在本文中,我们将学习如何使用Open3D从网格中采样点云。点云采样是点云处理的重要步骤之一,能够为后续的任务提供必要的输入。通过这些示例代码,我们可以很容易地使用Open3D库从网格模型中采样点云。值得注意的是,根据实际应用需求,我们可以调整采样点的数量和采样方法来满足不同的场景需求。除了使用Poisson Disk算法,Open3D还提供了其他的点云采样方法,如Uniform采样和Random采样。这个函数使用了Poisson Disk采样算法,可以在保持点云均匀性的同时,尽可能避免重叠点的生成。

FxRuby的博客 413

Service中弹出Dialog Toast

弹出Dialog需要  Activity Context。  Application Context不能用,否则会跑出异常。 如果需要在servcie中显示需要把dialog设置成一个系统的dialog,即全局 性质的提示框,所以只要手机处于开机状态,无论它现在处于何种界面之下,只要调用alter.show(),就会弹出提示框来。需要在show() 调用之前添加以下代码:

manbutianjin的专栏 458

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【安卓】安卓考试重点总结

考试重点

shadowburn1ng的博客 2617

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android基础工具类重构系列一Toast

前言: 一直在考虑写一下Android实际项目中的一些总结,翻看优快云博客,上一篇已经是一年多以前。 本系列定位Android基础工具类重构,旨在记录实际项目中经常用到的一些工具类,比如Toast、Dialog、动画类,ImageLoader类等等。正在梳理,但发现梳理完再写估计黄花菜都凉了,所以改变策略,边写边梳理。 首先要写的就是这个Toast。 一、说明 作为Android系统提供的基类

4057

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android Toast深度解析:从基础使用到源码机制与最佳实践

在Android应用开发中,用户反馈机制是提升交互体验的关键环节。Toast作为一种轻量级的全局提示组件,其核心原理是基于WindowManager的窗口系统,通过非阻塞方式在屏幕指定位置短暂显示信息。这一设计使其具备不依赖Activity生命周期、不中断用户操作的特性,在快速状态反馈场景中具有重要技术价值。理解Toast的线程安全要求、Context选择策略以及不同Android版本的行为差异,是避免常见崩溃和兼容性问题的关键。在实际开发中,Toast常与Handler、Looper等线程调度机制结合使用

weixin_34005042的博客 298

Android 多屏设备下将Toast显示在正确的屏幕上

在Android多屏设备上正确显示Toast: 一步步教你实现 在Android开发中,常常需要处理多屏设备的显示问题。对于新手开发者而言,理解如何在不同的屏幕上定位和显示Toast提示信息并非易事。本文将为你提供详细的步骤和示例代码,让你轻松理解如何在Android多屏设备上正确显示Toast消息。 1. 过程概述 在实...

weixin_41496064的博客 454

Android通过Service编程实现短信信息获取,Toast显示收到的短信的发送者和短信内容

我们知道Service是Android的四大组件之一,可以在后台长期运行。下面的案例是通过Service的应用场景,实现App常驻后台,通过注册自定义的广播监听者,在系统接收到短信信息时,拦截读取短信的发送者和短信内容,并显示出来。 代码实现: XML文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/.

weixin_43624626的博客 2042

android toast.maketext 不显示,android – 为什么选择Toast.makeText而不是新的Toast

这可能是一个菜鸟问题,但我想知道为什么我们必须使用静态方法(makeText)来创建Toast而不是构造函数.为什么我们必须使用这个:makeText(Context context,CharSequence text,int duration)而不是这个:new Toast(Context context,int duration)这是makeText方法:public static Toast...

weixin_42466331的博客 1096

连续弹出的多个Toast长时间显示,不消失。

首次发表博客,望各位大神批评指正。

wu_guang_jie的博客 3018
上一篇: Android 通过点击浏览器或者内部WebView加载URL 唤起App
下一篇: 如何安全退出已调用多个Activity的Application
augfun
博客等级 码龄10年 311粉丝 662原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值