今天终于算初步写好了一个调节系统背光亮度Brightness的代码,本来不看Android源代码以为可以直接调用某个Action来启动系统的那个调节Brightness的对话框,但是看了代码后发现系统调节Brightness的自定义组件BrightnessPreference继承了SeekBarDialogPreference,但是最终父类还是Preference,因此不能够单独启动,必须得将这个自定义的BrightnessPreference用某个Activity才能加载过来,毕竟最终还是一个组件。因此,将系统的BrightnessPreference改写成Activity的形式,然后将Activity的主题设置为对话框的主题即可。

下图是系统自带的对话框,我的Activity就是仿造这个界面做的。

下面是我改写完后的代码,可以和系统设置的背光设置进行同步,即数据同步,无论是使用自己的Activity还是系统自带的调节背光的亮度,都是一样的效果。代码在Eclipse中运行可能会报错,但是别怕,使用Android编译能通过,然后push到Android设备中去运行没有错误。

代码如下:BrightnessDialogActivity.java

import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.os.Bundle;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SeekBar; import com.android.settings.R;
import com.canplay.systemui.QuickSettings;
import com.canplay.util.DLog; /**
* @author ouyangpeng
*/
public class BrightnessDialogActivity extends Activity implements
SeekBar.OnSeekBarChangeListener, OnClickListener {
private static String TAG="@@@@@@@@@@@@Brightness---->";
private SeekBar mSeekBar;
private CheckBox mCheckBox;
private Button btnCancel;
private Button btnSure; private int mOldBrightness;
private int mOldAutomatic; private boolean mAutomaticAvailable;
private boolean mAutomaticMode; private int mCurBrightness = -1; private boolean mRestoredOldState; // Backlight range is from 0 - 255. Need to make sure that user
// doesn't set the backlight to 0 and get stuck private int mScreenBrightnessDim = android.os.PowerManager.BRIGHTNESS_DIM + 10; private static final int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON; private static final int SEEK_BAR_RANGE = 10000; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.brightness_dialog_activity); getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true, mBrightnessObserver);
getContentResolver()
.registerContentObserver(
Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),
true, mBrightnessModeObserver); mRestoredOldState = false; mAutomaticAvailable = true; /*
* mAutomaticAvailable = getResources() .getBoolean(
* com.android.internal.R.bool.config_automatic_brightness_available);
*/
// mAutomaticAvailable=getBrightnessMode(0)==Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; mSeekBar = (SeekBar) findViewById(R.id.brightnessSeekbar);
mSeekBar.setMax(SEEK_BAR_RANGE); mOldBrightness = getBrightness();
mSeekBar.setProgress(mOldBrightness); mCheckBox = (CheckBox) findViewById(R.id.brightness_automatic_mode);
// 重新读取配置信息
// onBrightnessChanged();
// onBrightnessModeChanged(); if (mAutomaticAvailable) {
mCheckBox
.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
: Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
mSeekBar.setProgress(getBrightness());
mSeekBar.setEnabled(!mAutomaticMode);
setBrightness(mSeekBar.getProgress(), false);
}
});
mOldAutomatic = getBrightnessMode(0);
mAutomaticMode = mOldAutomatic == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mCheckBox.setChecked(mAutomaticMode);
mSeekBar.setEnabled(!mAutomaticMode);
} else {
mSeekBar.setEnabled(true);
} mSeekBar.setOnSeekBarChangeListener(this); btnSure = (Button) findViewById(R.id.btnSure);
btnSure.setOnClickListener(this);
btnCancel = (Button) findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(this);
} private ContentObserver mBrightnessObserver = new ContentObserver(
new Handler()) {
@Override
public void onChange(boolean selfChange) {
mCurBrightness = -1;
onBrightnessChanged();
}
}; private ContentObserver mBrightnessModeObserver = new ContentObserver(
new Handler()) {
@Override
public void onChange(boolean selfChange) {
onBrightnessModeChanged();
}
}; private void onBrightnessChanged() {
mSeekBar.setProgress(getBrightness());
} private void onBrightnessModeChanged() {
boolean checked = getBrightnessMode(0) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mCheckBox.setChecked(checked);
mSeekBar.setProgress(getBrightness());
mSeekBar.setEnabled(!checked);
} private int getBrightnessMode(int defaultValue) {
int brightnessMode = defaultValue;
try {
brightnessMode = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE);
} catch (SettingNotFoundException snfe) {
}
return brightnessMode;
} private int getBrightness() {
int mode = getBrightnessMode(0);
float brightness = 0;
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
brightness = Settings.System.getFloat(getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
brightness = (brightness + 1) / 2;
} else {
if (mCurBrightness < 0) {
brightness = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 100);
} else {
brightness = mCurBrightness;
}
brightness = (brightness - mScreenBrightnessDim)
/ (MAXIMUM_BACKLIGHT - mScreenBrightnessDim);
}
return (int) (brightness * SEEK_BAR_RANGE);
} @Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
setBrightness(progress, false);
} @Override
public void onStartTrackingTouch(SeekBar seekBar) { } @Override
public void onStopTrackingTouch(SeekBar seekBar) { } private void setMode(int mode) {
mAutomaticMode = mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
} private void setBrightness(int brightness, boolean write) {
if (mAutomaticMode) {
float valf = (((float) brightness * 2) / SEEK_BAR_RANGE) - 1.0f;
try {
IPowerManager power = IPowerManager.Stub
.asInterface(ServiceManager.getService("power"));
if (power != null) {
power.setAutoBrightnessAdjustment(valf);
}
if (write) {
final ContentResolver resolver = getContentResolver();
Settings.System.putFloat(resolver,
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
valf);
}
} catch (RemoteException doe) {
}
} else {
int range = (MAXIMUM_BACKLIGHT - mScreenBrightnessDim);
brightness = (brightness * range) / SEEK_BAR_RANGE
+ mScreenBrightnessDim;
try {
IPowerManager power = IPowerManager.Stub
.asInterface(ServiceManager.getService("power"));
if (power != null) {
power.setBacklightBrightness(brightness);
}
if (write) {
mCurBrightness = -1;
final ContentResolver resolver = getContentResolver();
Settings.System.putInt(resolver,
Settings.System.SCREEN_BRIGHTNESS, brightness);
} else {
mCurBrightness = brightness;
}
} catch (RemoteException doe) {
}
}
} private void restoreOldState() {
if (mRestoredOldState)
return; if (mAutomaticAvailable) {
setMode(mOldAutomatic);
}
setBrightness(mOldBrightness, false);
mRestoredOldState = true;
mCurBrightness = -1;
} @Override
public void onClick(View v) {
final ContentResolver resolver = getContentResolver();
if (v == findViewById(R.id.btnSure)) {
setBrightness(mSeekBar.getProgress(), true);
this.finish();
} else if (v == findViewById(R.id.btnCancel)) {
restoreOldState();
this.finish();
}
resolver.unregisterContentObserver(mBrightnessObserver);
resolver.unregisterContentObserver(mBrightnessModeObserver);
}
}

相应的布局文件如下:brightness_dialog_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="20dip" > <ImageView
android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:paddingTop="20dip"
android:visibility="gone" /> <CheckBox
android:id="@+id/brightness_automatic_mode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="6dip"
android:text="@string/automatic_brightness"
android:textAppearance="?android:attr/textAppearanceSmall" /> <SeekBar
android:id="@+id/brightness_seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dip" /> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cancel"
android:layout_gravity="center" /> <Button
android:id="@+id/btn_sure"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/sure"
android:layout_gravity="center" />
</LinearLayout>
</LinearLayout> </ScrollView>

注册Activity的时候使用下面的主题

 android:theme="@android:style/Theme.Holo.Dialog"

但是有个bug,即调用系统的应用调节背光的时候,Seekbar的值和复选框是否被勾中在我的自定义Activity中的Seekbar的值和复选框是否被勾中同步,但是反过来就不行了。

再次读取系统的BrightnessPreference发现是因为没有去进行更新操作。因此得修改Android的源代码,重新编译后才能达到两边数据随便那边修改后,两边的数据都同步。

修改如下所示,修改前BrightnessPreference.showDialog(Bundle state)

   @Override
protected void showDialog(Bundle state) {
super.showDialog(state); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true,
mBrightnessObserver); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), true,
mBrightnessModeObserver);
mRestoredOldState = false;
}

修改后BrightnessPreference.showDialog(Bundle state),即打开对话框的时候重新去读取数据库里面的Brightness的值和复选框是否被选中的值。

    @Override
protected void showDialog(Bundle state) {
super.showDialog(state); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true,
mBrightnessObserver); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), true,
mBrightnessModeObserver);
onBrightnessChanged();
onBrightnessModeChanged();
mRestoredOldState = false;
}

====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

===================================================================================

最后附上系统调节Brightness的代码

/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ package com.android.settings; import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.os.Bundle;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.preference.SeekBarDialogPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SeekBar; public class BrightnessPreference extends SeekBarDialogPreference implements
SeekBar.OnSeekBarChangeListener, CheckBox.OnCheckedChangeListener { private SeekBar mSeekBar;
private CheckBox mCheckBox; private int mOldBrightness;
private int mOldAutomatic; private boolean mAutomaticAvailable;
private boolean mAutomaticMode; private int mCurBrightness = -1; private boolean mRestoredOldState; // Backlight range is from 0 - 255. Need to make sure that user
// doesn't set the backlight to 0 and get stuck
private int mScreenBrightnessDim =
getContext().getResources().getInteger(com.android.internal.R.integer.config_screenBrightnessDim);
private static final int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON; private static final int SEEK_BAR_RANGE = 10000; private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
mCurBrightness = -1;
onBrightnessChanged();
}
}; private ContentObserver mBrightnessModeObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
onBrightnessModeChanged();
}
}; public BrightnessPreference(Context context, AttributeSet attrs) {
super(context, attrs); mAutomaticAvailable = context.getResources().getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available); setDialogLayoutResource(R.layout.preference_dialog_brightness);
setDialogIcon(R.drawable.ic_settings_display);
} @Override
protected void showDialog(Bundle state) {
super.showDialog(state); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true,
mBrightnessObserver); getContext().getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), true,
mBrightnessModeObserver);
onBrightnessChanged();
onBrightnessModeChanged();
mRestoredOldState = false;
} @Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view); mSeekBar = getSeekBar(view);
mSeekBar.setMax(SEEK_BAR_RANGE);
mOldBrightness = getBrightness();
mSeekBar.setProgress(mOldBrightness); mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode);
if (mAutomaticAvailable) {
mCheckBox.setOnCheckedChangeListener(this);
mOldAutomatic = getBrightnessMode(0);
mAutomaticMode = mOldAutomatic == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mCheckBox.setChecked(mAutomaticMode);
mSeekBar.setEnabled(!mAutomaticMode);
} else {
mSeekBar.setEnabled(true);
}
mSeekBar.setOnSeekBarChangeListener(this);
} public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromTouch) {
setBrightness(progress, false);
} public void onStartTrackingTouch(SeekBar seekBar) {
// NA
} public void onStopTrackingTouch(SeekBar seekBar) {
// NA
} public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
: Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
mSeekBar.setProgress(getBrightness());
mSeekBar.setEnabled(!mAutomaticMode);
setBrightness(mSeekBar.getProgress(), false);
} private int getBrightness() {
int mode = getBrightnessMode(0);
float brightness = 0;
if (false && mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
brightness = Settings.System.getFloat(getContext().getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
brightness = (brightness+1)/2;
} else {
if (mCurBrightness < 0) {
brightness = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 100);
} else {
brightness = mCurBrightness;
}
brightness = (brightness - mScreenBrightnessDim)
/ (MAXIMUM_BACKLIGHT - mScreenBrightnessDim);
}
return (int)(brightness*SEEK_BAR_RANGE);
} private int getBrightnessMode(int defaultValue) {
int brightnessMode = defaultValue;
try {
brightnessMode = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE);
} catch (SettingNotFoundException snfe) {
}
return brightnessMode;
} private void onBrightnessChanged() {
mSeekBar.setProgress(getBrightness());
} private void onBrightnessModeChanged() {
boolean checked = getBrightnessMode(0)
== Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mCheckBox.setChecked(checked);
mSeekBar.setProgress(getBrightness());
mSeekBar.setEnabled(!checked);
} @Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult); final ContentResolver resolver = getContext().getContentResolver(); if (positiveResult) {
setBrightness(mSeekBar.getProgress(), true);
} else {
restoreOldState();
} resolver.unregisterContentObserver(mBrightnessObserver);
resolver.unregisterContentObserver(mBrightnessModeObserver);
} private void restoreOldState() {
if (mRestoredOldState) return; if (mAutomaticAvailable) {
setMode(mOldAutomatic);
}
setBrightness(mOldBrightness, false);
mRestoredOldState = true;
mCurBrightness = -1;
} private void setBrightness(int brightness, boolean write) {
if (mAutomaticMode) {
if (false) {
float valf = (((float)brightness*2)/SEEK_BAR_RANGE) - 1.0f;
try {
IPowerManager power = IPowerManager.Stub.asInterface(
ServiceManager.getService("power"));
if (power != null) {
power.setAutoBrightnessAdjustment(valf);
}
if (write) {
final ContentResolver resolver = getContext().getContentResolver();
Settings.System.putFloat(resolver,
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, valf);
}
} catch (RemoteException doe) {
}
}
} else {
int range = (MAXIMUM_BACKLIGHT - mScreenBrightnessDim);
brightness = (brightness*range)/SEEK_BAR_RANGE + mScreenBrightnessDim;
try {
IPowerManager power = IPowerManager.Stub.asInterface(
ServiceManager.getService("power"));
if (power != null) {
power.setBacklightBrightness(brightness);
}
if (write) {
mCurBrightness = -1;
final ContentResolver resolver = getContext().getContentResolver();
Settings.System.putInt(resolver,
Settings.System.SCREEN_BRIGHTNESS, brightness);
} else {
mCurBrightness = brightness;
}
} catch (RemoteException doe) {
}
}
} private void setMode(int mode) {
mAutomaticMode = mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
Settings.System.putInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
} @Override
protected Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
if (getDialog() == null || !getDialog().isShowing()) return superState; // Save the dialog state
final SavedState myState = new SavedState(superState);
myState.automatic = mCheckBox.isChecked();
myState.progress = mSeekBar.getProgress();
myState.oldAutomatic = mOldAutomatic == 1;
myState.oldProgress = mOldBrightness;
myState.curBrightness = mCurBrightness; // Restore the old state when the activity or dialog is being paused
restoreOldState();
return myState;
} @Override
protected void onRestoreInstanceState(Parcelable state) {
if (state == null || !state.getClass().equals(SavedState.class)) {
// Didn't save state for us in onSaveInstanceState
super.onRestoreInstanceState(state);
return;
} SavedState myState = (SavedState) state;
super.onRestoreInstanceState(myState.getSuperState());
mOldBrightness = myState.oldProgress;
mOldAutomatic = myState.oldAutomatic ? 1 : 0;
setMode(myState.automatic ? 1 : 0);
setBrightness(myState.progress, false);
mCurBrightness = myState.curBrightness;
} private static class SavedState extends BaseSavedState { boolean automatic;
boolean oldAutomatic;
int progress;
int oldProgress;
int curBrightness; public SavedState(Parcel source) {
super(source);
automatic = source.readInt() == 1;
progress = source.readInt();
oldAutomatic = source.readInt() == 1;
oldProgress = source.readInt();
curBrightness = source.readInt();
} @Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(automatic ? 1 : 0);
dest.writeInt(progress);
dest.writeInt(oldAutomatic ? 1 : 0);
dest.writeInt(oldProgress);
dest.writeInt(curBrightness);
} public SavedState(Parcelable superState) {
super(superState);
} public static final Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() { public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
} public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
}

我的Android进阶之旅------>自己写个Activity来调节Android系统背光亮度Brightness的更多相关文章

  1. 我的Android进阶之旅------&gt;怎样将Activity变为半透明的对话框?

    我的Android进阶之旅------>怎样将Activity变为半透明的对话框?能够从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就能够将Acti ...

  2. 我的Android进阶之旅------&gt; Android在TextView中显示图片方法

    面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包括图像的文本信息).并简要说明实现方法. 答案:Android SDK支持例如以下显示富文本信息的方式. 1.使用T ...

  3. 我的Android进阶之旅------&gt;Android字符串资源中的单引號问题error: Apostrophe not preceded by 的解决的方法

    刚刚在string字符串资源文件里,写了一个单引號.报错了,错误代码例如以下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资 ...

  4. 我的Android进阶之旅------>如何解决Android 5.0中出现的警告: Service Intent must be explicit:

    我的Android进阶之旅-->如何解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...

  5. 我的Android进阶之旅------>Android字符串资源中的单引号问题error: Apostrophe not preceded by 的解决办法

    刚刚在string字符串资源文件中,写了一个单引号,报错了,错误代码如下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资源文 ...

  6. 我的Android进阶之旅------> Android在TextView中显示图片方法

    面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用Tex ...

  7. 我的Android进阶之旅------>关于调用Webservice查询火车票时刻表的几个接口介绍

    今天发现一个可以提供火车票时刻表查询的WebService,先记录下来以后如果写一个火车票时刻表查询的Android App的话就用的着.首先该WebService的的名字是TrainTimeWebS ...

  8. 我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:

    我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...

  9. [置顶] 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam

    由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...

随机推荐

  1. vue开发小程序简介

    开发环境搭建 nodejs 安装最新版的nodejs,同时安装cnpm包管理器 jdk1.8 apache-maven3.3.9 Intellij Idea2018 [后端开发工具] vscode[前 ...

  2. C++中的void类型

    Technorati 标签: void,指针 1.1. void类型 void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型. ...

  3. Oracle递归操作

    需求:找出代理商中没有挂商家的代理商 简单SQL如下: select * from t_proxy tp where tp.id not in (SELECT tp.id as p_id FROM t ...

  4. 2015年度新增开源软件排名TOP100

    2015年度新增开源软件排名TOP100 本榜单包含2015年开源中国新收录的软件中,根据软件本身的关注度.活跃程度进行排名前100名的软件.从这份榜单中或许可以了解到最新业界的趋势. 1.Switc ...

  5. Linux下的定时任务Crontab

    通过crontab -e写入定时任务的指令,一行为一项任务. 任务模式是时间克龙表达式+命令形式. 如: 2 0,6,12,18 * * * perl /root/restarttomcat.pl p ...

  6. AutoCAD如何输入文字

    1 运行文字命令(这里使用单行文字),然后鼠标点击文字的起始点,如图所示   2 鼠标分别向上和向右移动一定距离,表示文字的高度(文字的大小)和文字的旋转角度(一般向右,因为是水平文字)   3 最后 ...

  7. fastJson 转换日期格式

    第一种方法: JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; String str = JSON.toJSONString(user,Seria ...

  8. hive分区(partition)简介

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  9. jq:正则表达式

    var checkNum = /^[A-Za-z0-9]+$/;   注意没有引号 checkNum.test(这里添加待匹配的字符串); var textNull=/^\s*$/; if(textN ...

  10. 【强网杯2018】逆向hide

    这是事后才做出来的,网上没有找到现成的writeup,所以在这里记录一下 UPX加壳,而且linux下upx -d无法解,也无法gdb/ida attach 因为是64位,所以没有pushad,只能挨 ...