android屏幕控制
⑴ Android中如何控制调节屏幕亮度
Android的屏幕亮度好像在2.1+的时候提供了自动调节的功能,所以,如果当开启自动调节功能的时候, 我们进行调节好像是没有一点作用的,这点让我很是无语,结果只有进行判断,看是否开启了屏幕亮度的自动调节功能。 /*** 判断是否开启了自动亮度调节*/public static boolean isAutoBrightness(ContentResolver aContentResolver) { boolean automicBrightness = false;try {automicBrightness = Settings.System.getInt(aContentResolver,Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; } catch (SettingNotFoundException e) { e.printStackTrace();}return automicBrightness;} 然后就是要觉得当前的亮度了,这个就比较纠结了:/*** 获取屏幕的亮度*/public static int getScreenBrightness(Activity activity) { int nowBrightnessValue = 0; ContentResolver resolver = activity.getContentResolver();try {nowBrightnessValue = android.provider.Settings.System.getInt( resolver, Settings.System.SCREEN_BRIGHTNESS); } catch (Exception e) { e.printStackTrace();}return nowBrightnessValue;} // Settings.System.putInt(activity.getContentResolver(), // Settings.System.SCREEN_BRIGHTNESS_MODE, // Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f); activity.getWindow().setAttributes(lp);} Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);} Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);} 至此,应该说操作亮度的差不多都有了,结束! 哎,本来认为是应该结束了,但是悲剧得是,既然像刚才那样设置的话,只能在当前的activity中有作用,一段退出的时候,会发现毫无作用,悲剧,原来是忘记了保存了。汗!/*** 保存亮度设置状态*/public static void saveBrightness(ContentResolver resolver, int brightness) { Uri uri = android.provider.Settings.System .getUriFor("screen_brightness"); android.provider.Settings.System.putInt(resolver, "screen_brightness", brightness);
⑵ android 开发 ,控制整个屏幕的点击功能屏幕失去焦点功能问题: 求思路啊~~
button.setEnabled(false),单独的控件可以这样设置变成灰色和不可点击状态,你可以用ImageButton放图标,通过它的监听事件去修改其他控件的setEnabled值。
⑶ android屏幕旋转 如何程序实现屏幕旋转。 按1个按钮旋转90°
屏幕旋转需要在AndroidManifest.xml的的Activity配置中加入android:screenOrientation=”landscape”属性。
参数说明:
landscape = 横向
portrait = 纵向
避免在转屏时重启Activity
android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次 Create的时候载入配置,那样,进行中的游戏就不会自动重启了。
要避免在转屏时重启Activity,可以通过在AndroidManifest.xml文件中重新定义方向(给每个Activity加上android:configChanges=”keyboardHidden|orientation”属性)。
在需要控制屏幕显示方向的Activity中重写onConfigurationChanged(Configuration newConfig)方法。
⑷ 安卓手机屏幕控制
安卓手机都是触控屏幕,用户可以直接使用手指操控屏幕即可。
如果需要在电脑操作手机,用户可以在电脑下载安装Total Control。
然后进入手机设置,关于手机,连续点击版本,呼出开发者选项,进入开发者选项勾选开启USB调试。
启动Total Control然后将手机使用数据线连接电脑。
正常连接后,按照软件提示进行操作,即可在电脑端显示操作手机了。
⑸ 如何设置向日葵Android控制端的屏幕分辨率
向日葵Android控制端现支持自适应最佳分辨率啦!远程控制时默认自动匹配最佳分辨率,为用户切换到最佳的远程效果。若需要更改,也可进行手动设置。究竟该如何设置呢?
1、登录向日葵Android控制端后,进入到设置页面进行查看,如图1。
图2
备注:自适应分辨率的功能仅支持向日葵客户端5.4及以上版本。
⑹ 电脑控制安卓手机屏幕该怎么做
安卓智能手机的屏幕通过无线WiFi网络实时投射到电脑上显示,同时电脑端也可以使用鼠标键盘操作手机.注:手机需要授予给相关应用root权限,电脑和手机需要处于同一局域网内。以下是安卓虚拟机的使用步骤:
下载下面网络云盘分享的软件后将压缩包完整解压,将里面的app安装至安卓手机
完成后电脑就会实时显示手机屏幕的镜像画面,按主页(home)键回到手机桌面,手机上所有的操作都会同步到电脑上显示,而且鼠标还可以在PC显示器上反向控制操作手机哦!
⑺ android 操作屏幕需要什么权限
一般最开始的 Android 截屏程序,都是来源于 linux 的截屏方法,android 使用的 Linux 内核,那么 Linux 下的截屏方法也就最先被 android 采用。Linux 使用了 framebuffer 管理显示输出,传统的办法就是读取 framebuffer 的数据,然后得到整个屏幕的数据。此方法在 Android3.0 版本之前是也唯一可行的方法。 然而 linux 采用了严格的权限控制 设备文件,framebuffer 也是其控制之一,在 Android 中只有 root , 和 graphic 组用户才有权限读取:
ls -l /dev/graphics/fb0
crw-rw---- root graphics 29, 0 2015-01-16 03:26 fb0
所以要采用读取 framebuffer 的方式实现截屏,应用必须获得 root 权限。
随着 Android 显示系统的变迁,自 Android 4.2 开始, Android 自己增加截屏接口,而且更多的设备采用了多个 framebuffer 使用 overlay 的方式,更有采用硬件 composer 的设备,使得单独读取 framebuffer 并不能截取到,一个完整的屏幕。于是这个方法也渐渐被开发者抛弃。
Android 截屏 -- SurfaceFlinger
在 Android 4.0 里,显示系统采用了新的构架,加入“黄油计划”,同时也添加截屏接口:
status_t SurfaceFlinger::captureScreen(const sp<IBinder>& display,
sp<IMemoryHeap>* heap,
uint32_t* width, uint32_t* height, PixelFormat* format,
uint32_t sw, uint32_t sh,
uint32_t minLayerZ, uint32_t maxLayerZ)
{
if (CC_UNLIKELY(display == 0))
return BAD_VALUE;
if (!GLExtensions::getInstance().haveFramebufferObject())
return INVALID_OPERATION;
class MessageCaptureScreen : public MessageBase {
SurfaceFlinger* flinger;
sp<IBinder> display;
sp<IMemoryHeap>* heap;
uint32_t* w;
uint32_t* h;
PixelFormat* f;
uint32_t sw;
uint32_t sh;
uint32_t minLayerZ;
uint32_t maxLayerZ;
status_t result;
public:
MessageCaptureScreen(SurfaceFlinger* flinger, const sp<IBinder>& display,
sp<IMemoryHeap>* heap, uint32_t* w, uint32_t* h, PixelFormat* f,
uint32_t sw, uint32_t sh,
uint32_t minLayerZ, uint32_t maxLayerZ)
: flinger(flinger), display(display),
heap(heap), w(w), h(h), f(f), sw(sw), sh(sh),
minLayerZ(minLayerZ), maxLayerZ(maxLayerZ),
result(PERMISSION_DENIED)
{
}
status_t getResult() const {
return result;
}
virtual bool handler() {
Mutex::Autolock _l(flinger->mStateLock);
result = flinger->captureScreenImplLocked(display,
heap, w, h, f, sw, sh, minLayerZ, maxLayerZ);
return true;
}
};
sp<MessageBase> msg = new MessageCaptureScreen(this,
display, heap, width, height, format, sw, sh, minLayerZ, maxLayerZ);
status_t res = postMessageSync(msg);
if (res == NO_ERROR) {
res = static_cast<MessageCaptureScreen*>( msg.get() )->getResult();
}
return res;
}
现在应用可以调用系统接口来截屏,最好的例子就是 screencap : frameworks/base/cmds/screencap/screencap.cpp
然而,系统依然出于安全的考虑,对权限的控制依然严格:使用系统截屏接口需要 READ_FRAMEBUFFER 权限:
case CAPTURE_SCREEN:
{
// codes that require permission check
IPCThreadState* ipc = IPCThreadState::self();
const int pid = ipc->getCallingPid();
const int uid = ipc->getCallingUid();
if ((uid != AID_GRAPHICS) &&
!PermissionCache::checkPermission(sReadFramebuffer, pid, uid)) {
ALOGE("Permission Denial: "
"can't read framebuffer pid=%d, uid=%d", pid, uid);
return PERMISSION_DENIED;
}
break;
}
而且 READ_FRAMEBUFFER 属于 system 级别的权限,非系统应用无法获得,所以在应用程序中声明了使用这个权限,应用程序如果不是 system 程序,依然没有权限。第三方程序要能截屏成功还是需要 root 。
⑻ 安卓手机怎么控制对方屏幕
先声明下,如果“对方”是苹果手机,是完全没有办法控制的,“对方”是安卓手机或者电脑,就可以控制。
方法呢,是用专门的远程控制软件。
应用市场里搜索下向日葵远程控制,给用于控制的设备安装主控端,给被控制的设备安装客户端。官网注册个号(http://sunlogin.oray.com/),然后两边的设备都登录这个号,经过几步简单的匹配操作就可以进行远控了。
要注意的是被控制的设备是手机的话是收费的功能(被控制的是电脑就是免费功能),不过APP里有试用渠道,点3下广告试用一个付费功能一天。付钱的话最便宜的方式大概5块一个月,题主自己决定吧~
⑼ 如何控制android手机亮屏
一、概述
我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏。那么今天,我们来分析下这方面的功能。
二. 系统服务 PowerManager.java
顾名思义,PowerManager.java就是管理我们电源方面的功能的,当然也包括我们屏幕的亮和熄灭。没错,我们的应用程序就是通过这个系统服务来实现亮屏和熄屏的功能的。
1. 应用程序获取PowerManager服务, 我们可以这样书写:
复制代码代码如下:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
因为PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们。
2. goToSleep()方法, 这个方法可以强制我们的屏幕熄屏。我们可以这样调用:
在上面拿到pm对象之后,这样调用
pm.goToSleep(SystemClock.uptimeMillis());
3. setBacklightBrightness()方法,这个方法可以设置背光的亮度,从0-255
三. 定时熄灭屏幕
那么这里,还可以介绍一个控制屏幕的方法就是PowerManager.WakeLock
顾名思义,WakeLock这个东西就是亮屏控制,这里说的亮屏,它定义了几种类型的亮屏。如下:
类型 cpu 屏幕 键盘
PARTIAL_WAKE_LOCK on off off
SCREEN_DIM_WAKE_LOCK on dim off
SCREEN_BRIGHT_WAKE_LOCK on Bright off
FULL_WAKE_LOCK on Bright Bright
由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长(大家都知道,智能手机的电池问题是一个硬伤, 每天一充电,有木有? 别人说用安卓手机的男人都是顾家好男人,因为他每天晚上都要回家充电。。^^).
好的,好的,闲话不扯,继续。。。
怎么使用这个WakeLock呢?我们可以这样写:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");
wakeLock.acquire();
//做我们的工作,在这个阶段,我们的屏幕会持续点亮
//释放锁,屏幕熄灭。
wl.release();
那么这里我们也可以这样使用,就是多少时间后熄灭屏幕
首先点亮屏幕
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");
wakeLock.acquire();
然后
mTimeHandler.postDelayed(new Runnable(){
public void run(){
wakeLock.release();
}
}, 10*1000);
嗯,延迟10s后熄灭屏幕。。。。
那么,这里要注意的是acquire()和release()要成对调用哦!也就是说,你申请了亮屏,过段时间,你要是释放它。