android Jelly Bean版本如何将camera service修改为强占式

实现强占式camera service,当某些应用(如手电筒)在后台打开camera后,当camera app open camera时可以强占被后台应用占有的camera.

1. 修改CameraService.cpp (frameworks/av/services/camera/libcameraservice/)

文件的connect()方法,将

原来的

Mutex::Autolock lock(mServiceLock);

if (mClient[cameraId] != 0) {

client = mClient[cameraId].promote();

if (client != 0) {

if (cameraClient->asBinder() == client->getCameraClient()->asBinder()) {

LOG1("CameraService::connect X (pid %d) (the same client)",

callingPid);

return client;

} else {

ALOGW("CameraService::connect X (pid %d) rejected (existing client).",

callingPid);

return NULL;

}

}

mClient[cameraId].clear();

}

修改为:

if (mClient[cameraId] != 0) {

client = mClient[cameraId].promote();

if (client != 0) {

LOG1("CameraService::connect X (pid %d)  disconnect the old client", callingPid);

client->disconnect();

}

mClient[cameraId].clear();

}

Mutex::Autolock lock(mServiceLock);

2. 修改CameraClient.cpp(frameworks/av/services/camera/libcameraservice/)

文件的disconnect()方法:

将原来的:

if (callingPid != mClientPid && callingPid != mServicePid) {

ALOGW("different client - don‘t disconnect");

return;

}

修改为:

if (callingPid != mClientPid && callingPid != mServicePid) {

ALOGW("different client but  preemptive camera service! ");

//return;

}

时间: 2024-07-31 16:04:54

android Jelly Bean版本如何将camera service修改为强占式的相关文章

Android基础入门教程——4.2.1 Service初涉

Android基础入门教程--4.2.1 Service初涉 标签(空格分隔): Android基础入门教程 本节引言 好的,我们在前三节中对Android中的Activity进行了研究学习,相信大家获益良多吧! 本节开始我们继续来学习Android中的第二个组件:Service(服务), 好,废话不多说,开始本节内容! 1.线程的相关概念 在开始学习Service之前我们先来了解下线程的一些概念! 1)相关概念: 程序:为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码) 进程:运行

Android(一)--发行版本

Android 1.1(Bender“发条机器人”) Android 1.5( Cupcake“纸杯蛋糕”) Android 1.6(Donut 甜甜圈) Android 2.0(Éclair:闪电泡芙.法式奶油夹心甜点.松饼) Android 2.2(Froyo 冻酸奶) Android 2.3(Gingerbread 姜饼) Android 3.0(蜂巢 Honeycomb) Android 4.0(Ice Cream Sandwich 雪糕三明治) Android 4.1(Jelly Be

Android基础入门教程——4.2.2 Service进阶

Android基础入门教程--4.2.2 Service进阶 标签(空格分隔): Android基础入门教程 本节引言 上节我们学习了Service的生命周期,以及两种启动Service的两种方法, 本节继续来深入了解Service中的IntentService,Service的使用实例: 前台服务与轮询的实现! 1.IntentService的使用 在上一节后我们已经知道了如何去定义和启动Service,但是如果我们直接把 耗时线程放到Service中的onStart()方法中,虽然可以这样做

使用Gradle构建Android应用内测版本

随时随地学Java 在开发应用的过程中,有时候需要比较当前线上版本和正在开发中的版本差异,目前的做法只能是在两个不同的设备上面安装线上版本和开发中的版本,因为当前版本在调试过程中会覆盖旧版本.本文通过使用gradle来构建android应用变种版本,通过配置build type和productFlavors来进行实践,结果不完全尽如人意,但是提供了同一个程序不同变种在一个设备上共存的一种实践. applicationID VS package 在android的manifest文件中,我们可以配

Android基础入门教程——4.2.3 Service精通

Android基础入门教程--4.2.3 Service精通 标签(空格分隔): Android基础入门教程 本节引言: 本节,我们继续来研究Service(服务)组件,本节将会学习下Android中的AIDL跨进程通信的一些 概念,并不深入到源码层次,暂时知道是什么,会用即可!开始本节内容~ 本节对应官方文档:Binder 1.Binder机制初涉 1)IBinder和Binder是什么鬼? 我们来看看官方文档怎么说: 中文翻译: IBinder是远程对象的基本接口,是饿了高性能而设计的轻量级

Android:Service的非绑定式的创建和生命周期

Android的Service若使用非绑定式的创建,则创建后将无法再与它取得联系,即无法传递消息参数等: 所以如果希望创建后仍然与其存在联系,那么可以参考我的前几篇博客<Android:Service的绑定和解绑定,Service与Activity通信>,其中讲到了Service的绑定和与Activity通信的相关内容(如题目o(^▽^)o). Service的非绑定式的创建非常的简单,和启动Activity差不多. 只需要调用startService()即可创建:而调用stopSercice

如何获得Spring容器里管理的Bean,。不论是Service层,还是实体Dao层

如何获得Spring容器里管理的Bean,.不论是Service层,还是实体Dao层, 下面的这个必须配置,否则必出错,空指针 下面的这个是代码 而获得bean代码如下: serviceManagerImpl_fl=(ServiceManagerDao)MyApplicationContextUtil.getApplicationContext().getBean("serviceManagerImpl_fl");

android 多语言版本开发

最近项目中用用到语言切换功能,第一想到的就是资源文件,没错. 在资源文件中新建一个文件夹values-en,en表示英语,有一些还细化到地区,如values-en-rUS 即美国地区的英语,r是必需的.在里面新建一个strings.xml,把默认values文件夹中的strings.xml中的内容Copy至values-en中的strings.xml,再把该文件夹中的中文内容转换为英文,例如<string name="set">设置</string>转换为<

Android实现防止被系统回收的Service

MainActivity如下: package cc.c; import java.util.List; import android.os.Bundle; import android.os.Process; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import android.ap