当前位置: 首页 > news >正文

网站域名怎么登陆影视广告创意拍摄

网站域名怎么登陆,影视广告创意拍摄,苏州技术馆网站建设,新手学做网站手机一、背景 使用AIDL,搭建Client和Server端,实现跨进程通讯,即两个应用之间可以相互通讯。这里列举AIDL实现的方式和需注意的细节#xff0c;并附上源码。 二、实现方式 2.1 定义AIDL需要的接口,名字为xxx.aidl,Client和Server端 AIDL接口的包名和aidl文件必须一致#xff0c…一、背景 使用AIDL,搭建Client和Server端,实现跨进程通讯,即两个应用之间可以相互通讯。这里列举AIDL实现的方式和需注意的细节并附上源码。 二、实现方式 2.1 定义AIDL需要的接口,名字为xxx.aidl,Client和Server端 AIDL接口的包名和aidl文件必须一致在main 目录下,新建aidl目录,如下截图 Server 端 Client端 2.2 IMessageManager.aidl文件 import com.vc.aidlservice.IOnServerCallback;interface IMessageManager {/*** Demonstrates some basic types that you can use as parameters* and return values in AIDL.*/void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,double aDouble, String aString);//客户端发送消息给服务端void sendMessageToServer(String message);//服务端发送消息给客户端void sendMessageToClient(String message);//注册监听,用于服务端主动发送消息给客户端void registerListener(IOnServerCallback callback);//注销监听void unRegisterListener(); } 2.3 IOnServerCallback.aidl 文件 package com.vc.aidlservice;// Declare any non-default types here with import statementsinterface IOnServerCallback {/*** Demonstrates some basic types that you can use as parameters* and return values in AIDL.*/ // void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, // double aDouble, String aString);//用于客户端接收服务端发送的消息void onMessageReceived(String message);三、Server端代码 3.1 VcService (AIDL服务端具体逻辑实现) package com.vc.aidlserver.serviceimport android.app.Service import android.content.Intent import android.os.Handler import android.os.IBinder import android.os.Looper import android.os.Message import android.util.Log import android.widget.Toast import com.alibaba.fastjson.JSON import com.alibaba.fastjson.JSONObject import com.vc.aidlclient.bean.MessageInfo import com.vc.aidlclient.enums.MessageType import com.vc.aidlserver.MyApplication import com.vc.aidlservice.IMessageManager import com.vc.aidlservice.IOnServerCallback/*** Time : On 2024/12/6 16:00* Description : VcService*/ class VcService :Service(){private val TAGAIDL_Server_private val SEND_MSG_FAIL0private val SEND_MSG_SUCCESS1private var mCallback:IOnServerCallback?nullprivate val mHanlerobject:Handler(Looper.getMainLooper()){override fun handleMessage(msg: Message) {val msgValuemsg.whatif(msgValueSEND_MSG_FAIL){Toast.makeText(MyApplication.instance,连接未建立,发送消息失败,Toast.LENGTH_SHORT).show()}else{Toast.makeText(MyApplication.instance,发送消息成功,Toast.LENGTH_SHORT).show()}}}override fun onBind(intent: Intent): IBinder {return binder}private val binder object : IMessageManager.Stub() {override fun basicTypes(anInt: Int,aLong: Long,aBoolean: Boolean,aFloat: Float,aDouble: Double,aString: String?) {}/*** 接收客户端发送的消息*/override fun sendMessageToServer(message: String) {Log.d($TAG, VcService 服务端收到客户端消息$message)try {val jsonObject JSON.parseObject(message)val requestId jsonObject.getString(requestId)val type jsonObject.getString(type)val contentObject jsonObject.getJSONObject(content)val message contentObject.getString(message)val callbackMessage MessageInfo.Message(应用:$packageName 收到透传的消息:$message,,,响应返回)val messageInfoMessageInfo(callback:$requestId, MessageType.Server.toString(),callbackMessage)val jsonMessage JSONObject.toJSONString(messageInfo)mCallback?.onMessageReceived(jsonMessage)}catch (e:Exception){Log.e($TAG, VcService 服务端解析客户端客户端消息异常 Exception:${e.message})}}/*** 主动发送消息给客户端*/override fun sendMessageToClient(message: String?) {Log.d($TAG, VcService 服务端发送消息给客户端$message,,,mCallback:$mCallback,,,是否主线程:${Looper.getMainLooper()Looper.myLooper()})if(mCallbacknull){mHanler.sendEmptyMessage(SEND_MSG_FAIL)Log.d($TAG, VcService 连接未建立,sendMessageToClient fail,,,message:$message)return}mHanler.sendEmptyMessage(SEND_MSG_SUCCESS)mCallback?.onMessageReceived(message)}/*** 客户端调用注册监听*/override fun registerListener(callback: IOnServerCallback?) {mCallbackcallback}/*** 客户端调用注销监听*/override fun unRegisterListener() {Log.d($TAG, VcService unRegisterListener)mCallbacknull}}} 3.2 Server端主动发送消息给Client端 package com.vc.aidlserverimport android.content.ComponentName import android.content.Intent import android.content.ServiceConnection import android.os.Bundle import android.os.IBinder import android.util.Log import android.widget.Button import android.widget.EditText import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.alibaba.fastjson.JSONObject import com.vc.aidlclient.RequestIdCreatUtil import com.vc.aidlclient.bean.MessageInfo import com.vc.aidlclient.enums.MessageType import com.vc.aidlserver.service.VcService import com.vc.aidlservice.IMessageManagerclass MainActivity : AppCompatActivity() {private var bt_send: Button? nullprivate var edt_message: EditText? nullvar mIMessageManager: IMessageManager? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main_send_message)bt_send findViewById(R.id.bt_send)edt_message findViewById(R.id.edt_message)/***在VcService外,获取 mIMessageManager,服务端主动发送消息给AIDL客户端*/val intent Intent(this, VcService::class.java)val result bindService(intent, object : ServiceConnection {override fun onServiceConnected(name: ComponentName, service: IBinder) {Log.d(BBBBB, onServiceConnected 连接服务端成功 name:$name)mIMessageManager IMessageManager.Stub.asInterface(service) as IMessageManager}override fun onServiceDisconnected(name: ComponentName) {Log.d(BBBBB, onServiceDisconnected 断开服务端连接 name:$name)}}, BIND_AUTO_CREATE)/*** 服务端主动发送消息给AIDL客户端*/bt_send?.setOnClickListener {Log.d(BBBBB, mIMessageManager:$mIMessageManager)val message edt_message?.text.toString().trim()if (message.isNullOrEmpty()) {Toast.makeText(this, 发送消息不能为空, Toast.LENGTH_SHORT).show()returnsetOnClickListener}if (mIMessageManager null) {Toast.makeText(this, 绑定VcService失败,应用发送消息失败, Toast.LENGTH_SHORT).show()} else {val sendMessage MessageInfo.Message(message)val messageInfo MessageInfo(RequestIdCreatUtil.creatId(),MessageType.Server.toString(),sendMessage)val jsonMessage JSONObject.toJSONString(messageInfo)mIMessageManager!!.sendMessageToClient(jsonMessage)//Toast.makeText(this,应用发送消息成功,Toast.LENGTH_SHORT).show()Log.d(BBBBB, sendMessageToClient:$jsonMessage)}}}} 3.3  AndroidManifest.xml配置 service android:name.service.VcServiceandroid:enabledtrueandroid:exportedtrueandroid:process:remoteintent-filteraction android:namecom.vc.aidlserver.service.VcService //intent-filter/service 四、Client端代码 4.1 Client 逻辑代码 package com.vc.aidlclientimport android.content.ComponentName import android.content.Intent import android.content.ServiceConnection import android.os.Bundle import android.os.IBinder import android.util.Log import android.view.View import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.alibaba.fastjson.JSONObject import com.vc.aidlclient.bean.MessageInfo import com.vc.aidlclient.enums.MessageType import com.vc.aidlservice.IMessageManager import com.vc.aidlservice.IOnServerCallbackprivate var mIMessageManager: IMessageManager? null private var isConnect falseclass MainActivity : AppCompatActivity(), View.OnClickListener {private var bt_connect: Button? nullprivate var bt_send: Button? nullprivate var bt_disconnect: Button? nullprivate var isBound falseprivate val TAG AIDL_Client_override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)bt_connect findViewById(R.id.bt_connect)bt_send findViewById(R.id.bt_send)bt_disconnect findViewById(R.id.bt_disconnect)bt_connect?.setOnClickListener(this)bt_send?.setOnClickListener(this)bt_disconnect?.setOnClickListener(this)}/*** 连接服务端*/fun connectServer() {val intent Intent()intent.setComponent(ComponentName(com.vc.aidlserver,com.vc.aidlserver.VcService))isBound bindService(intent, mServiceConnection, BIND_AUTO_CREATE)Log.d($TAG, bindService isBound:$isBound)}private val serverListener object : IOnServerCallback.Stub() {override fun onMessageReceived(message: String?) {Log.d($TAG, onMessageReceived :$message)}}/*** 销毁监听器*/private fun destroyService() {try {if (isBound) {isConnect falsemIMessageManager?.unRegisterListener()mIMessageManager nullunbindService(mServiceConnection)}} catch (e: Exception) {e.printStackTrace()Log.d($TAG, unbindService Exception:${e.message})}}override fun onDestroy() {Log.d($TAG, onDestroy())super.onDestroy()destroyService()}override fun onClick(v: View) {if (v.id R.id.bt_connect) {if (isConnect) {Toast.makeText(this, 已连接服务端, Toast.LENGTH_SHORT).show()} else {connectServer()}} else if (v.id R.id.bt_send) {if (mIMessageManager null || !isConnect) {Toast.makeText(this, 连接未建立, Toast.LENGTH_SHORT).show()} else {val message MessageInfo.Message(我是客户端)val messageInfo MessageInfo(RequestIdCreatUtil.creatId(),MessageType.Client.toString(),message)val jsonMessage JSONObject.toJSONString(messageInfo)Log.d($TAG, 客户端发送消息给服务端 jsonMessage-:$jsonMessage)mIMessageManager?.sendMessageToServer(jsonMessage)}} else if (v.id R.id.bt_disconnect) {destroyService()}}private val mServiceConnection object : ServiceConnection {override fun onServiceConnected(name: ComponentName, service: IBinder) {// 服务连接成功你可以开始与服务交互Log.d($TAG, onServiceConnected 连接服务端成功 name:$name)isConnect truemIMessageManager IMessageManager.Stub.asInterface(service) as IMessageManagermIMessageManager?.registerListener(serverListener)}override fun onServiceDisconnected(name: ComponentName) {// 服务断开连接Log.d($TAG, onServiceDisconnected 断开服务端连接 name:$name)destroyService()}} } 4.2 build.gradle配置 注不配置无法生效aidl文件,Server端也一样,需要配置,有可能和AS版本有关,博主Android studio版本Android Studio Koala Feature Drop | 2024.1.2 4.3 AndroidManifest.xml uses-permission android:nameandroid.permission.QUERY_ALL_PACKAGEStools:ignoreQueryAllPackagesPermission/queriespackage android:namecom.vc.aidlserver//queries Client需要配置以上,否则存在连接不上服务端现象 五、完整源码下载 源码下载连接https://download.csdn.net/download/banzhuantuqiang/90159482
http://www.hkea.cn/news/14431336/

相关文章:

  • 建设银行网站如何查询开户行网站建设纟金手指下拉壹陆
  • 那个公司做的网站详情页好看wordpress自媒体主题更新失败
  • 重庆建站管理系统价格营销网站建设公司排名
  • 怎样做吓人网站江苏常州网
  • google官网登录入口南宁seo多少钱费用
  • 昆明市网站建设公司wordpress jquery插件
  • gps建站步骤搭建网站代码
  • 网站维护运营施工企业适用什么标准
  • 0797 网站制作英文购物网站模板
  • 怎么建设网站卖东西内蒙古网站建站
  • 网站开发工具 知乎临沂广润网站建设
  • 大连意动网站建设有限公司怎么样制作网页难吗
  • 专注网站开发重庆小程序制作
  • 好的设计师互动网站网站建设与维护课程总结
  • 网站设计报价.doc动漫设计速成班
  • 电子商务网站建设方案书行业网站模版
  • 建材网站素材discuz模板制作教程
  • 网站后台更新了 前台不现实pc端百度
  • 浅谈国内高校英文网站的建设现状如果网站设计时
  • 软件制作公司专注于上海seo做网站建设
  • 筹备网站建设软件开发入门
  • 手机网站开发 视频太原百度seo排名
  • 域名备案关闭网站吗网站开发外包业务怎么接
  • 邙山郑州网站建设网站关键词效果追踪怎么做
  • 永年做网站国家水资源监控能力建设网站
  • 湖州网站建设公司哪家好南通给公司做网站的
  • 甘肃省酒泉市做网站公司北京优秀网站建设
  • 学习网站建设培训网站哪类业务建设投入会带来间接收益
  • 萧山品牌网站建设单位内网网站建设 开设栏目
  • 网页界面设计和素材seo优化的技巧