Android aidl的简单使用

news2024/11/29 8:59:27

一.服务端

1.创建aidl文件,然后记得build下生成java文件

package com.example.aidlservice31;

// Declare any non-default types here with import statements

interface IMyAidlServer {
      // 接收一个字符串参数
      void setData(String value);
      // 返回一个字符串
      String getData();
}

2.创建远程MyService.class

class MyService : Service() {

    private val mBinder by lazy { MyBinder() }

    override fun onBind(intent: Intent): IBinder {
        return mBinder
    }

    inner class MyBinder : IMyAidlServer.Stub() {

        private var mData: String = "李小龙"

        override fun setData(value: String) {
            Log.e("yjj", "客户端发来的数据== $value")
            mData = value
        }

        override fun getData() = mData+"返回的数据"
    }
}

3.在AndroidManifest配置MyService

        <service
            android:name=".MyService"
            //远程可访问
            android:exported="true"
            //开启远端进程
            android:process=":remote">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                //客户端通过action绑定MyService
                <action android:name="com.example.aidlservice31.MyService" />
            </intent-filter>
        </service>

二、客户端

1.复制服务端aidl文件夹,啥也别改,然后build下,自动生成java文件。

2.绑定服务,传输数据

class MainActivity : AppCompatActivity() {

    private var mServer: IMyAidlServer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
    }

    private var mNumber = 0

    private fun initView() {
        val tvGetDataValue: TextView = findViewById(R.id.tvGetDataValue)

        //绑定服务器
        findViewById<TextView>(R.id.tvBindService).setOnClickListener {
            setConnection()
        }

        //传递数据给服务端
        findViewById<TextView>(R.id.tvSetData).setOnClickListener {
            mNumber++
            mServer?.data = mNumber.toString()
            Log.e("yjj", "setData == " + mServer?.data)
        }

        //获取服务端数据
        findViewById<TextView>(R.id.tvGetData).setOnClickListener {
            Log.e("yjj", "getData == " + mServer?.data)
            mServer?.data.let {
                tvGetDataValue.text = it
            }
            Toast.makeText(this,tvGetDataValue.text,Toast.LENGTH_LONG).show()
        }
    }

    private val mMyServiceConnection = object : ServiceConnection {
        override fun onServiceConnected(name: ComponentName?, remoteService: IBinder?) {
            Log.e("yjj", "绑定远程服务成功!")
            mServer = IMyAidlServer.Stub.asInterface(remoteService)
        }

        override fun onServiceDisconnected(name: ComponentName?) {
            mServer = null
        }
    }

    private fun setConnection() {
        try {
            val intent = Intent()
            // AIDLServer 项目的包名(applicationId)
            // AIDLServer 项目中注册的服务的全路径
            intent.component =
                ComponentName("com.example.aidlservice31", "com.example.aidlservice31.MyService")
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            var issuccess = bindService(intent, mMyServiceConnection, Context.BIND_AUTO_CREATE)
            Log.e("yjj", "开始绑定服务器issuccess=$issuccess")
        } catch (e: SecurityException) {
            e.printStackTrace()
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        unbindService(mMyServiceConnection)
    }
}

好像有些手机是不行的,比如华为荣耀v30。不行的话,换个手机试试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows通过regsvr32注册dll文件失败

1、注册dll文件失败 最近在研究中文输入法&#xff0c;下载SampleIME源码后编译得到SampleIME.dll&#xff0c;最后只需要将输入法安装&#xff08;即注册&#xff09;就可以使用了。 但是通过命令&#xff1a; regsvr32 C:\Windows\System32\SampleIME.dll 注册时却提示错…

使用花生壳外网远程ssh访问内网主机 亲测有效

经常会遇到远程访问其他电脑的需求&#xff0c;一般首选向日葵软件&#xff0c;傻瓜式的连接远程桌面控制&#xff0c;非常方便。但是仅限于远程桌面远程协助这种。 对于程序员来说最佳的登录方式是ssh&#xff0c;同时远程桌面连过来的时候分辨率比较低&#xff0c;图形效果相…

Flask学习二:项目拆分、请求与响应、cookie

教程 教程地址&#xff1a; 千锋教育Flask2框架从入门到精通&#xff0c;Python全栈开发必备教程 老师讲的很好&#xff0c;可以看一下。 项目拆分 项目结构 在项目根目录下&#xff0c;创建一个App目录&#xff0c;这是项目下的一个应用&#xff0c;应该类似于后端的微服…

从 CoT 到 Agent,最全综述来了!上交出品

就在前两天&#xff0c;我们刚刚和大家聊了聊最近相当火爆的 AI Agents 这一概念&#xff1a;聊聊我对AI Agents技术的一些看法。水平所限&#xff0c;我们也只是浅浅为大家梳理了一下 AI Agents 的概念发展与其代表性技术&#xff0c;一来不深入二来不细致&#xff0c;只能供大…

机器学习库:pandas

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 写在开头 基本数据格式 DataFrame 数据选取 iloc 数据描述 head describe 数据合并 merge 数据删除 drop drop删除多列 处理缺失…

京东秒杀之商品列表

1 在gitee上添加.yml文件 1.1 添加good-server.yml文件 server:port: 8084 spring:datasource:url: jdbc:mysql://localhost:3306/shop_goods?serverTimezoneGMT%2B8driverClassName: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceusername: rootpa…

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)

MATLAB和SMART 200PLC的联合仿真请查看下面文章链接 MATLAB Simulink和SMART PLC水箱液位高度PID控制(联合仿真)-CSDN博客文章浏览阅读606次。SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-CSDN博客文章浏览阅…

231126 刷题日报

1. 高楼扔鸡蛋 O(N*logN) 2. 698. 划分为k个相等的子集 没做出来&#xff0c;和划分两个子集不同 3. 300. 最长递增子序列 LIS petencie sorting 没看懂&#xff0c;明天看吧 4. 518. 零钱兑换 II 完全背包问题&#xff1a;每个物品数量是无限的 注意&#xff1a;dp的定义…

shiro整合redis

shiro整合redis 前言&#xff1a;shiro默认的session是存储在jvm内存中的&#xff0c;这样会导致java服务内存占用更大以及一旦服务器宕机或者版本迭代需要重启服务时&#xff0c;缓存中的数据不能恢复&#xff0c;导致用户需要重新登录认证&#xff0c;体验很差。因此利用第三…

相识词设计思路及实现方法

目录 1.业务背景 2.实现方法 第一种&#xff1a; ​编辑 第二种&#xff1a; 3.相关材料 1.业务背景 业务有全文检索功能&#xff0c;然后根据标书的要求需要有近似词的功能&#xff0c;一般近似词需要模型训练之后成为词库&#xff0c;是需要大数据相关人员负责。负责人表示…

代码随想录算法训练营 ---第四十二天

今天开始学习 动态规划&#xff1a;背包问题 也是比较难的一部分了 动态规划&#xff1a;背包问题 理论基础 01背包&#xff08;二维数组&#xff09; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用…

MySQL进阶_10.锁

文章目录 一、概述二、MySQL并发事务访问相同记录2.1、读-读2.2、写-写2.3、读-写2.4、并发问题的解决方案 三、锁的不同角度分类3.1、 读锁、写锁3.1.1、 锁定读 3.2、表级锁、页级锁、行锁3.2.1、表锁3.2.2、意向锁3.2.2.1、意向锁的作用3.2.2.2、意向锁的互斥性 3.2.3、自增…

简单订单和支付业务的相关流程

1、订单创建、支付及订单处理流程图 2、创建HTTP客户端工具类 Slf4j public class HttpclientUtil {//类中定义了一个私有静态成员变量instance&#xff0c;并且将其初始化为HttpclientUtil类的一个实例&#xff0c;用于实现单例模式。private static HttpclientUtil instance…

LV.12 D20 RTC实验 学习笔记

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电 二、Exynos4412下的 RTC控制器 它支持…

手摸手Element-Plus组件化开发

前端环境准备 编码工具: VSCode 依赖管理:NPM 项目构建: Vuecli NPM的全称是Node Package Manager&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。2020年3月17日&#xff0c;Github宣布收购npm&am…

【研究中2】sql server权限用户设置

--更新时间2023.11.26 21&#xff1a;30 负责人&#xff1a;jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_admin)--判断是否存在此表DROP TABLE hkcms_adminCREATE TABLE hkcms_admin (id int identity(1, 1),--id int primary key identity…

《已解决:TypeError: unhashable type: ‘slice‘ 问题》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

基于springboot学籍管理系统

一、设计目的 1. 复习、巩固Java语言的基础知识&#xff0c;进一步加深对Java语言的理解和掌握&#xff1b; 2. 课程设计为学生提供了一个既动手又动脑&#xff0c;独立实践的机会&#xff0c;将课本上的理论知识和实际有机的结合起来&#xff0c;锻炼学生的分析解决实际问题…

第二十三章 解析PR曲线、ROC曲线、AUC、AP(工具)

混淆矩阵Confusion Matrix 混淆矩阵定义 混淆矩阵是机器学习中总结分类模型预测结果的情形分析表&#xff0c;以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值&#xff0c;矩阵的列表示预测值&#xff0c;下面我…

cephadm部署ceph quincy版本,使用ceph-csi连接

环境说明 IP主机名角色 存储设备 192.168.2.100 master100 mon,mgr,osd,mds,rgw 大于5G的空设备192.168.2.101node101mon,mgr,osd,mds,rgw大于5G的空设备192.168.2.102node102mon,mgr,osd,mds,rgw大于5G的空设备 关闭防火墙 关闭并且禁用selinux 配置主机名/etc/hosts …