SampleWindow demo

Unity集成阿里云实时语音识别:从音频采集到流式识别的完整实战指南 语音识别作为人工智能领域的关键技术,其核心原理是将音频信号转化为可处理的文本信息。该技术通过声学模型和语言模型协同工作,实现对连续语音的精准解析,其价值在于为人机交互提供了自然、高效的输入方式。在游戏开发、虚拟主播、在线教育等实时交互场景中,语音识别技术能够显著提升用户体验和产品沉浸感。本文聚焦于Unity引擎,深入探讨如何实现高质量的实时语音识别功能。通过集成阿里云语音AI服务,详细解析了从麦克风音频采集、PCM格式转换、WebSocket流式传输到服务端结果返回的全链路技术实现。文中特别针对音频前处理、 阅读详情

SampleWindow.java 

package understanding.wms.samplewindow;

import android.content.res.Configuration;
import android.view.Surface;
import android.view.View;
import android.view.InputChannel;
import android.view.DisplayInfo;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.view.Choreographer;
import android.view.MotionEvent;
import android.view.InputEvent;
import android.view.InputEventReceiver;
import android.view.Display;
import android.view.IWindow;
import android.view.IWindowManager;
import android.view.IWindowSession;
import android.view.WindowManagerGlobal;
import android.hardware.display.IDisplayManager;
import android.graphics.Rect;
import android.graphics.Point;
import android.graphics.Paint;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Looper;
import android.os.Binder;
import android.os.IBinder;
import android.os.ServiceManager;
import android.content.Context;

public class SampleWindow {
    public static void main(String[] args) {
        try{
            new SampleWindow().Run();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    IWindowSession mSession = null;

    InputChannel mInputChannel = new InputChannel();

    Rect mInsets = new Rect();
    Rect mFrame = new Rect();
    Rect mVisibleInsets = new Rect();

    Configuration mConfig = new Configuration();

    Surface mSurface = new Surface();

    Paint mPaint = new Paint();

    IBinder mToken = new Binder();

    MyWindow mWindow = new MyWindow();

    LayoutParams mLp = new LayoutParams();

    Choreographer mChoreographer = null;

    InputHandler mInputHandler = null;

    boolean mContinueAnime = true;

    public void Run() throws Exception {
        Looper.prepare();

        IWindowManager wms = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE)
                );
        mSession = WindowManagerGlobal.getWindowSession();

        IDisplayManager dm = IDisplayManager.Stub.asInterface(
                ServiceManager.getService(Context.DISPLAY_SERVICE)
                );
        DisplayInfo di = dm.getDisplayInfo(Display.DEFAULT_DISPLAY);
        Point screenSize = new Point(di.appWidth, di.appHeight);

        initLayoutParams(screenSize);

        installWindow(wms);

        mChoreographer = Choreographer.getInstance();

        scheduleNextFrame();

        Looper.loop();

        mContinueAnime = false;

        uninstallWindow(wms);
    }

    public void initLayoutParams(Point screenSize) {
        mLp.type = LayoutParams.TYPE_SYSTEM_ALERT;
        mLp.setTitle("SampleWindow");

        mLp.gravity = Gravity.LEFT|Gravity.TOP;
        mLp.x = screenSize.x / 4;
        mLp.y = screenSize.y / 4;

        mLp.width = screenSize.x / 2;
        mLp.height = screenSize.y / 2;

        mLp.flags = mLp.flags | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
    }

    public void installWindow(IWindowManager wms) throws Exception{
       wms.addWindowToken(mToken, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 0, null);

       mLp.token = mToken;

       mSession.add(mWindow, 0, mLp, View.VISIBLE, mInsets, mInputChannel);

       mSession.relayout(mWindow, 0, mLp, mLp.width, mLp.height, View.VISIBLE, 0, mFrame, mInsets, mVisibleInsets, mConfig, mSurface);
       if (!mSurface.isValid()) {
            throw new RuntimeException("Failed creating Surface.");
       }

       mInputHandler = new InputHandler(mInputChannel, Looper.myLooper());

    }

    public void uninstallWindow(IWindowManager wms) throws Exception {
        mSession.remove(mWindow);
        wms.removeWindowToken(mToken, 0);
    }

    public void scheduleNextFrame() {
        mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION, mFrameRender, null);
    }

    public Runnable mFrameRender = new Runnable() {
        @Override
        public void run() {
            try {
                long time = mChoreographer.getFrameTime() % 1000;

                if (mSurface.isValid()) {
                    Canvas canvas = mSurface.lockCanvas(null);
                    canvas.drawColor(Color.DKGRAY);
                    canvas.drawRect(2 * mLp.width * time / 1000 - mLp.width, 0, 2 * mLp.width * time /1000, 
                            mLp.height, mPaint);
                    mSurface.unlockCanvasAndPost(canvas);
                    mSession.finishDrawing(mWindow, null);
                }
                if (mContinueAnime) {
                    scheduleNextFrame();
                } 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    class InputHandler extends InputEventReceiver {
        Looper mLooper = null;
        public InputHandler(InputChannel inputChannel, Looper looper) {
            super(inputChannel, looper);
            mLooper = looper;
        }

        @Override
        public void onInputEvent(InputEvent event) {
            if (event instanceof MotionEvent) {
                MotionEvent me = (MotionEvent)event;
                if (me.getAction() == MotionEvent.ACTION_UP) {
                    mLooper.quit();
                }
            }
            super.onInputEvent(event);
        }
    }

    class MyWindow extends IWindow.Stub {
        // Keeping default implements
    }
}

Android.mk


LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := samplewindow
include $(BUILD_JAVA_LIBRARY)

sw.sh


base=/system
export CLASSPATH=$base/framework/samplewindow.jar

exec app_process $base/bin understanding.wms.samplewindow.SampleWindow "$@"

从Arduino到可穿戴艺术:压力传感器与舵机驱动的互动服装制作全指南 在物联网与智能硬件领域,传感器作为感知物理世界的核心元件,其与微控制器(如Arduino)的协同工作构成了现代交互设备的基础。通过模拟/数字信号转换,传感器数据被微控制器采集、处理,并转化为控制指令,驱动执行器(如伺服电机)完成精准的物理动作。这种“感知-处理-执行”的技术框架,在智能家居、机器人控制等领域具有广泛应用价值。本文将这一经典原理应用于可穿戴设备(Wearable Device)这一前沿场景,聚焦于如何将薄膜压力传感器与微型伺服电机(舵机)集成到日常服饰中,实现基于触摸感应的机械反馈。文章深入探 阅读详情

相关推荐

深入理解Android卷 III 的SampleWindow

深入理解Android卷 III 的第4章的例子,做了些修改,可以在真机上运行。(注意该代码要在android framework 里mm编译)

Windows Samples 开源项目教程

Windows Samples 开源项目教程 一、项目目录结构及介绍 本节将概述位于https://github.com/thebrowsercompany/windows-samples.git 的Windows Samples开源项目的主要目录结构及其功能简介。 windows-samples/ ├── README.md # 项目说明文件,包含快速入门指南和项目概览。 ...

gitblog_00092的博客 434

C#创建Windows Service(Windows 服务)demo

C#创建、安装、启动、监控、卸载简单的Windows Service 的代码

借助 C++ 进行 Windows 开发 - Windows 运行时的呈现

原文地址:http://msdn.microsoft.com/zh-cn/magazine/dn451437.aspx 我的上一个专栏中讨论了 Windows 运行时 (WinRT) 应用程序模型 (msdn.microsoft.com/magazine/dn342867)。 我演示了如何通过标准 C++ 和经典 COM 来编写 Windows 应用商店或 Windows Phone 应

xuke537的专栏 923

Android利用WindowManager实现悬浮窗

前言 你会发现QQ视频的时候,就算手机回到主页,视频小模块依旧能悬浮在桌面上。还有当年很火的各种手机杀毒软件的桌面小助手,总能在呆在桌面。这种悬浮窗的操作就需要用到Window。 效果 gif图看着有点儿卡,其实实际上还是很流畅的。 Window Window即窗口,是个抽象类,具体实现就是PhoneWindow,对就是那个装着DecorView的PhoneWindow。 Window整体分三种类型:应用Window、子Window、系统Window。 应用Window:对应一个Activity 子Window:不能单独存在,它需要附属在特定的父Window中,比如常见的一些Dial

windows8.1 多窗口sample

windows8.1 多窗口sample

Android 通过zygote来运行java程序

在Android中大多数的程序都是通过java虚拟机运行,如果可以自己定制小程序,生成jar文件,然后通过app_process 来跑程序,实现自己需要的小功能也是不错的,今天在此mark一个,此例子是在深入理解ANDROID卷3 中看到的,有感而作。先贴代码 1.编写功能代码 代码路径:frameworks/base/cmds/samplewindow/其中samplewindow是新创建的,目的是为了后面方便编译生成.jar文件。 其目录下的文件有: SampleWindow.java pa.

yong_xu的专栏 402

Android应用之【巧妙隐藏桌面图标的进阶方案】

本文详细探讨了Android应用中隐藏桌面图标的进阶方案,解决了传统方法在Android 10及以上版本中出现的黑色图标残留问题。通过Intent-Filter配置和厂商适配技巧,实现子应用真正隐身,同时确保主应用正常启动。适用于企业工具套件、模块化系统等场景,提升用户体验和安全性。

weixin_28363123的博客 504

《深入理解Android 卷III》第四章 深入理解WindowManagerService

《深入理解Android 卷III》即将发布,作者是张大伟。此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲究颜值的时代,本书分析了Android 4.2中WindowManagerService、ViewRoot、Input系统、StatusBar、Wallpaper等重要“颜值绘制/处理”模块第4章  

Innost的专栏 3万+

COMSOL解的继承

COMSOL解的继承1. 应用场景2. 实现方法2.1. 添加研究步骤2.2. 引用研究 根据参考文献整理而来,原文见: http://blog.sina.com.cn/s/blog_4a0a8b5d010126w5.html https://www.zhihu.com/question/371867999/answer/1309194094 个人学习笔记,如有疏漏,欢迎补充 1. 应用场景 在COMSOL模拟中,一次求解之后往往遇到以下几种情况需要用到解的继承: 1)瞬态求解的继续运算。例如初始设定求解1

jessica0307的博客 1万+

COMSOL新手必看:手把手教你搭建锂电池P2D模型(附完整参数设置)

本文为COMSOL新手提供了搭建锂电池P2D仿真模型的详细指南。文章从模型原理入手,逐步讲解软件设置、几何构建、关键参数配置及后处理分析,并探讨了如何将仿真结果与智能电池管理中的SOC、SOH估算相结合,为电池性能分析和BMS算法开发提供实用洞见。

transformer2023的博客 232

基于Arduino与CRT电视的DIY音频VU表:复古硬件与现代微控制器的融合实践

音频电平表(VU表)是音响系统中用于可视化信号强度的经典设备,其核心原理是通过测量音频信号的电压变化来反映响度。在数字时代,借助微控制器(如Arduino)的ADC模块和实时处理能力,可以高效实现音频采样、RMS计算及峰值检测。这种技术方案不仅提升了测量精度与响应速度,更通过软件算法灵活模拟了传统机械表头的动态特性。在嵌入式开发与DIY音频可视化领域,结合老式CRT电视的复合视频接口,能够以极低成本构建出独具复古美学的交互式显示终端。本项目正是这一思路的典型实践,它详细讲解了如何利用Arduino生成NTS

weixin_33861800的博客 414

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 996

10DSP学习-利用syscfg配置ADC,并使用EPWM触发转换

介绍了如何使用syscfg配置F28379D的ADC采样

ManTou馒头的博客 4830

FPGA实现Gardner环定时同步:Verilog代码与Testbench实战解析

本文深入解析了在FPGA上实现Gardner环定时同步的完整过程,详细阐述了其非数据辅助的定时误差检测原理。通过Verilog代码实战,展示了内插滤波器、定时误差检测器、环路滤波器和数控振荡器等核心模块的设计,并提供了完整的Testbench验证方法,帮助开发者解决数字通信系统中的时钟同步难题。

gpt4scribbler的博客 575

Linux内核编程(十三)Input输入子系统

Input 子系统是 Linux 内核中专门为输入设备设计的一个子系统,它提供了一个通用的框架来管理各种输入设备,如键盘、鼠标、触摸屏、游戏手柄等。这个子系统的主要目的是简化和规范化输入设备驱动的开发,同时提高驱动的通用性和兼容性。(1)输入设备:如键盘、鼠标、触摸屏、游戏手柄等,它们是用户与计算机进行交互的主要方式。(2)输入设备驱动的复杂性:传统上,为每种输入设备编写驱动都需要创建文件、进行硬件初始化、实现文件操作函数集和处理中断等。每种设备的驱动可能都有许多重复性的工作。

qq_1033275663的博客 2865

Android图像实例SampleWindow

# 简单的window显示 这个例子是一个简单的window显示,仅仅是将一个window加入了WMS并显示,由于没有AMS参与管理栈(实际上根本没有用AMS),因此在切换的时候这个简单的window不会消失 - 这个例子中简单明了的展示出了以下几处重要的操作: - window的add:添加WindowState - window的relayout: windiow的大小...

夏菠 597

Python代码加密与发布方案详解

本文详细介绍了多种Python代码保护方案,从基础加密到高级混淆,以及商业化发布的最佳实践。基础加密方案包括编译为字节码和使用PyArmor基础加密,适合临时保护和小项目。商业级加密方案如Cython编译和Nuitka完整打包,提供更高的保护强度和执行效率。高级混淆方案涉及控制流混淆、字符串加密和完整混淆工具链,进一步增加逆向难度。商业化发布方案则强调许可证系统集成、硬件绑定保护和完整发布流程。此外,文章还探讨了反逆向技术、最佳实践建议和常见问题解决方法。通过组合使用这些技术,可以构建出适合不同安全需求的P

数据知道的博客 1万+

DSP的ADC设置与使用详解 -- 以F28069为例

该解决的问题早晚都要解决的。 ADC of F28069 Overview single 12-bit converter fed by two sample and hold circuits The basic principle of operation is centered around the configurations of individual conversions, called SOC’s, or Start-Of-Conversions. 特性 12-bit ADC cor.

Jimmy的个人博客 1万+

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

windows win32 c++/c services服务编写sample demo

windows的服务程序不是简单的写一个console控制台程序然后加入服务就能运行成功的,需要遵循一定的代码规范,程序需要与系统的 SCM 交互,否则就会刚执行就被系统停止 两个windows 服务程序的sample demo the-complete-service-sample–Microsoft 使用 C++ 编写的基础 Windows 服务 可以对照以上使用windows api编写,以...

老专家的博客 893

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

windows service程序的入门范例(一)

Windows Service 程序编写方法 1.最简单的创建一个windows service程序 (1)新建一个win32控制台程序 (2)开始->运行->cmd,必须右键—>以管理员身份运行,此时进入dos命令提示符界面。 (3)输入 sc create test binPath= “D:\Code_Test\VS2012_test\test_console\test_conso

奋斗,永不止步 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WindowManagerService的简要介绍

在Android系统中,对系统中的所有窗口进行管理是窗口管理服务WindowManagerService的职责。在Android系统中,同一时刻,只有一个Activity窗口是激活的,但是,对于WindowManagerService服务来说,这并不意味着它每次只需要管理一个Activity窗口,例如,在两个Activity窗口的切换过程中,前后两个Activity窗口实际上都是可见的。即使在只有一个Activity窗口是可见的时候,WindowManagerService服务仍然需要同时管理着多个窗口,这

旭哥的专栏 1780

Android 复制粘贴对话框弹出监听实现

长按文本框或者webview界面,会弹出复制粘贴剪切等对话框,但是目前好多厂商都是自己写的控件,先说一下对系统的对话框进行监听的情况。 这里是为了监听对话框来对自定义view进行高度的处理,对华为三星等手机做个适配,自定义了一个view,在onLayout方法中根据自定义的view在屏幕中的位置变化来进行判断复制粘贴对话框的弹出和隐藏。代码: @Override protected

camel@Y blog 6332
上一篇: windows patch adb permission
下一篇: vim配置
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值