HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    androidapp之间通信(android 应用间通信)

    发布时间:2023-03-14 04:57:19     稿源: 创意岭    阅读: 149        问大家

    大家好!今天让创意岭的小编来大家介绍下关于androidapp之间通信的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    ChatGPT国内免费在线使用,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    androidapp之间通信(android 应用间通信)

    一、android的一个app软件怎么实现实时聊天功能

    这种技术叫做即时通讯,实现这个功能的有很多技术,比如Soket、im,用这些技术都是需要自己写后台代码的,如果你觉得麻烦,可以直接用一些第三方jar包,例如融云、环信。用起来方便,也不用搞后台。

    二、android消息推送怎么实现?

    极光推送可以轻松实现android消息推送。具有操作步骤如下:

    1、到极光官网注册账号:https://www.jpush.cn/

    2、创建应用,按照要求填写你的应用名称,包名提交

    3、下载案例,一般情况测试是能收到信息的

    4、集成到自己的项目中,按照官网的集成http://docs.jpush.cn/pages/viewpage.action?pageId=557214

    5、集成时将注意的要点,官网上也有说,但是我再强调一下要注意两个权限的包名填写,有可能直接用案例上的拷贝到自己的manifest中时没有替换掉包名,切记,要替换成自己的项目的包名。

    极光推送已经覆盖了近10亿Android、IOS终端,30多万款APP应用,服务总用户数超过30亿,每天消息推送量达5亿多条,已成为移动应用数据平台。极光分享帮助应用具备国内主流社交平台分享功能,提供新浪微博、QQ、微信等第三方社会化分享服务,提高产品推广效率,帮助产品提高用户体验,获得更多用户。

    androidapp之间通信(android 应用间通信)

    三、android app 如何与uvc摄像头通讯

    来看看是怎么操作UVC摄像头的吧.我们实现了一个专门检测UVC摄像头的服务:UVCCameraService类,主要代码如下:

    监听

    mUSBMonitor = new USBMonitor(this, new USBMonitor.OnDeviceConnectListener() { @Override

    public void onAttach(final UsbDevice device) {

    Log.v(TAG, "onAttach:" + device);

    mUSBMonitor.requestPermission(device);

    } @Override

    public void onConnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock, final boolean createNew) {

    releaseCamera(); if (BuildConfig.DEBUG) Log.v(TAG, "onConnect:"); try { final UVCCamera camera = new MyUVCCamera();

    camera.open(ctrlBlock);

    camera.setStatusCallback(new IStatusCallback() { // ... uvc 摄像头链接成功

    Toast.makeText(UVCCameraService.this, "UVCCamera connected!", Toast.LENGTH_SHORT).show(); if (device != null)

    cameras.append(device.getDeviceId(), camera);

    }catch (Exception ex){

    ex.printStackTrace();

    }

    } @Override

    public void onDisconnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock) { // ... uvc 摄像头断开链接

    if (device != null) {

    UVCCamera camera = cameras.get(device.getDeviceId()); if (mUVCCamera == camera) {

    mUVCCamera = null;

    Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();

    liveData.postValue(null);

    }

    cameras.remove(device.getDeviceId());

    }else {

    Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();

    mUVCCamera = null;

    liveData.postValue(null);

    }

    } @Override

    public void onCancel(UsbDevice usbDevice) {

    releaseCamera();

    } @Override

    public void onDettach(final UsbDevice device) {

    Log.v(TAG, "onDettach:");

    releaseCamera();// AppContext.getInstance().bus.post(new UVCCameraDisconnect());

    }

    });123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657

    这个类主要实现UVC摄像头的监听\链接\销毁\反监听.当有UVC摄像头链接成功后,会创建一个mUVCCamera对象.

    然后在MediaStream里, 我们改造了switchCamera,当参数传2时,表示要切换到UVCCamera(0,1分别表示切换到后置\前置摄像头).

    创建

    在创建摄像头时,如果是要创建uvc摄像头,那直接从服务里面获取之前创建的mUVCCamera实例:

    if (mCameraId == 2) {

    UVCCamera value = UVCCameraService.liveData.getValue(); if (value != null) { // uvc camera.

    uvcCamera = value;

    value.setPreviewSize(width, height,1, 30, UVCCamera.PIXEL_FORMAT_YUV420SP,1.0f); return; // value.startPreview();

    }else{

    Log.i(TAG, "NO UVCCamera");

    uvcError = new Exception("no uvccamera connected!"); return;

    } // mCameraId = 0;

    }123456789101112131415

    预览

    在预览时,如果uvc摄像头已经创建了,那执行uvc摄像头的预览操作:

    UVCCamera value = uvcCamera;if (value != null) {

    SurfaceTexture holder = mSurfaceHolderRef.get(); if (holder != null) {

    value.setPreviewTexture(holder);

    } try {

    value.setFrameCallback(uvcFrameCallback, UVCCamera.PIXEL_FORMAT_YUV420SP/*UVCCamera.PIXEL_FORMAT_NV21*/);

    value.startPreview();

    cameraPreviewResolution.postValue(new int[]{width, height});

    }catch (Throwable e){

    uvcError = e;

    }

    }1234567891011121314

    这里我们选的colorFormat为PIXEL_FORMAT_YUV420SP 相当于标准摄像头的NV21格式.

    关闭预览

    同理,关闭时,调用的是uvc摄像头的关闭.

    UVCCamera value = uvcCamera; if (value != null) {

    value.stopPreview();

    }1234

    销毁

    因为我们这里并没有实质性的创建,所以销毁时也仅将实例置为null就可以了.

    UVCCamera value = uvcCamera;if (value != null) { // value.destroy();

    uvcCamera = null;

    }12345

    有了这些操作,我们看看上层怎么调用,

    首先需要在Manifest里面增加若干代码,具体详见UVCCamera工程说明.如下:

    <activity android:name=".UVCActivity" android:launchMode="singleInstance">

    <intent-filter>

    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />

    </intent-filter>

    <intent-filter>

    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />

    </intent-filter>

    <intent-filter>

    <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />

    </intent-filter>

    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"

    android:resource="@xml/device_filter" />

    </activity>1234567891011121314151617181920

    然后,的代码在UVCActivity里,这个类可以在library分支的myapplication工程里找到.即这里.

    启动或者停止UVC摄像头推送:

    public void onPush(View view) { // 异步获取到MediaStream对象.

    getMediaStream().subscribe(new Consumer<MediaStream>() { @Override

    public void accept(final MediaStream mediaStream) throws Exception { // 判断当前的推送状态.

    MediaStream.PushingState state = mediaStream.getPushingState(); if (state != null && state.state > 0) { // 当前正在推送,那终止推送和预览

    mediaStream.stopStream();

    mediaStream.closeCameraPreview();

    }else{ // switch 0表示后置,1表示前置,2表示UVC摄像头

    // 异步开启UVC摄像头

    RxHelper.single(mediaStream.switchCamera(2), null).subscribe(new Consumer<Object>() { @Override

    public void accept(Object o) throws Exception { // 开启成功,进行推送.

    // ...

    mediaStream.startStream("cloud.easydarwin.org", "554", id);

    }

    }, new Consumer<Throwable>() { @Override

    public void accept(final Throwable t) throws Exception { // ooop...开启失败,提示下...

    t.printStackTrace();

    runOnUiThread(new Runnable() { @Override

    public void run() {

    Toast.makeText(UVCActivity.this, "UVC摄像头启动失败.." + t.getMessage(), Toast.LENGTH_SHORT).show();

    }

    });

    }

    });

    }

    }

    });

    }12345678910111213141516171819202122232425262728293031323334353637

    这样,整个推送就完成了.如果一切顺利,应当能在VLC播放出来UVC摄像头的视频了~~

    我们再看看如何录像.也非常简单…

    public void onRecord(View view) { // 开始或结束录像.

    final TextView txt = (TextView) view;

    getMediaStream().subscribe(new Consumer<MediaStream>() { @Override

    public void accept(MediaStream mediaStream) throws Exception { if (mediaStream.isRecording()){ // 如果正在录像,那停止.

    mediaStream.stopRecord();

    txt.setText("录像");

    }else { // 没在录像,开始录像...

    // 表示最大录像时长为30秒,30秒后如果没有停止,会生成一个新文件.依次类推...

    // 文件格式为test_uvc_0.mp4,test_uvc_1.mp4,test_uvc_2.mp4,test_uvc_3.mp4

    String path = getExternalFilesDir(Environment.DIRECTORY_MOVIES) + "/test_uvc.mp4";

    mediaStream.startRecord(path, 30000); final TextView pushingStateText = findViewById(R.id.pushing_state);

    pushingStateText.append("\n录像地址:" + path);

    txt.setText("停止");

    }

    }

    });

    }123456789101112131415161718192021

    UVC摄像头还支持后台推送,即不预览的情况下进行推送,同时再切换到前台继续预览.只需要调用一个接口即可实现,如下:

    @Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {

    ms.setSurfaceTexture(surfaceTexture); // 设置预览的surfaceTexture}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {

    ms.setSurfaceTexture(null); // 设置预览窗口为null,表示关闭预览功能

    return true;

    }123456789

    如果要彻底退出uvc摄像头的预览\推送,那只需要同时退出服务即可.

    public void onQuit(View view) { // 退出

    finish(); // 终止服务...

    Intent intent = new Intent(this, MediaStream.class);

    stopService(intent);

    }1234567

    ## 获取更多信息 ##

    四、android第三方app怎么与微信通信

    AIDL,Broadcast

    以上就是关于androidapp之间通信相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    英文缩写LAN的中文名是

    三维园林景观设计软件(三维园林景观设计软件GARLAND)

    emancipate翻译(emptied翻译)

    请主播带货费用是多少(怎么联系主播来推广自己产品)

    庭院花园设计的效果图农村(庭院花园设计图片欣赏)