Mac OS X Lion为了增强所谓的安全性,隐藏了一些系统文件夹,比如Library(资源库)。如此自作多情,使用起来却不太方便,特别是在中国这块神奇的土地 上,我们随时可能要进Library里去干一些什么事。当然可以在前往里输入文件夹路径打开文件夹,但普通用户谁又知道、谁又喜欢去输那么长一段英文呢?
如何显示?在终端中输入以下命令回车即可:
chflags nohidden ~/Library
如果想隐藏:
chflags hidden ~/Library
对于其他文件夹,只要相应更改后面的路径即可。
典型的SeekBar:
<SeekBar
android:id="@+id/player_seekbar"
android:layout_width="245px"
android:layout_height="25px"
android:progressDrawable="@drawable/seekbar_style"
android:thumb="@drawable/thumb"
android:paddingLeft="16px"
android:paddingRight="15px"
android:paddingTop="5px"
android:paddingBottom="5px"
android:progress="0"
android:max="0"
android:secondaryProgress="0"
/>
其中android:progressDrawable="@drawable/seekbar_style"背景条配置如下:
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ff9d9e9d" android:centerColor="#ff5a5d5a" android:centerY="0.75" android:endColor="#ff747674" android:angle="270" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#80ffd300" android:centerColor="#80ffb600" android:centerY="0.75" android:endColor="#a0ffcb00" android:angle="270" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ff0099CC" android:centerColor="#ff3399CC" android:centerY="0.75" android:endColor="#ff6699CC" android:angle="270" /> </shape> </clip> </item> </layer-list>
或者使用图片:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/progress_bg" /> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/second_progress"> </item> <item android:id="@android:id/progress" android:drawable="@drawable/first_progress"> </item> </layer-list>
android:thumb="@drawable/thumb"就是那个可以拖动的小滑块:
<?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态--> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/thumb_pressed" /> <!-- 普通无焦点状态 --> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/thumb_normal" /> <!-- 有焦点状态--> <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/thumb_focused" /> <!-- 有焦点 --> <item android:state_focused="true" android:drawable="@drawable/thumb_focused" /> </selector>
方法一:
1.在应用中
com.xxx.spi.SPLListener.java/com.xxx.spi.SPIManager.java两个类
SPIManager spiManager = (SPIManager) getSystemService("spiService");
spiListener = new MySPIListener();
spiManager.requestSPIUpdates(spiListener);
2.
需在android.app.ContextImpl.java中添加
private static SPIManager sSPIManager;
else if (SPI_SERVICE.equals(name)) {
return getSPIManager();
}
private SPIManager getSPIManager() {
synchronized (sSync) {
if (sSPIManager == null) {
IBinder b = ServiceManager.getService(SPI_SERVICE);
ISPIManager service = ISPIManager.Stub.asInterface(b);
sSPIManager = new SPIManager(service);
}
}
return sSPIManager;
}
在android.content.Context.java中添加常量
public static final String SPI_SERVICE = "spiService";
3.com.xxx.spi.SPIManager.java
中有ISPIListerner.aidl的实现类ListenerTransport
private class ListenerTransport extends ISPIListener.Stub
ListenerTransport中有应用中注册进来的回调监听器SPIListener
ListenerTransport传给frameworks/base/services/java/com/android/server/SPIManagerrService.java服
务器类,也就是aidl的回调注册,一定是实现ISPIListener.stub的ListenerTransport类
SPIManagerService.java是通过jni调C++文件,其中需要把自己作为c++的回调对象,
在cpp文件中取得SPIManagerService类对象
static { class_init_native(); }初始化回调的方法,这样在cpp文件中就随时可以调class_init_native本地
方法中初始化过的函数。
4.frameworks/base/Android.mk文件中编译ISPIListener.aidl,ISPIManager.aidl两个文件成相应的java文件
frameworks/base/services/jni/Android.mk文件中编译同目录下的
com_android_server_SPIManagerService.cpp文件,注意cpp文件的命名与其对应的SPIManagerService.java
文件的包路径之间的关系。
同目录下的onload.cpp文件中添加
int register_android_server_SPIManagerService(JNIEnv* env);
register_android_server_SPIManagerService(env);
5.
frameworks/base/services/java/com/android/server/SystemServer.java中添加服务,并调服务的
systemReady方法
try {
Slog.i(TAG, "---SPI Manager---");
spiService = new SPIManagerService(context);
ServiceManager.addService("spiService", spiService);
} catch (Throwable e) {
Slog.e(TAG, "---Failure starting spiService Manager---", e);
}
if (spiServiceF != null) spiServiceF.systemReady();
6.
frameworks/base/core/jni/AndroidRuntime.cpp中添加
extern int register_android_server_SPIManagerService(JNIEnv* env);
不确定是不是必须的
方法二:
在systemserver.java中添加自己有make文件创建的包
System.loadLibrary("android_servers");
System.loadLibrary("serialserver");