基于安卓4.0振动器系统分析
当一个应用程序App去调用vibrate产生振动的时候,其过程如下所示:
App调用文件:
例如:当一个用户在打电话的时候产生振动,
onCreate:
获取系统的Vibrator服务,
mVibrator = (Vibrator)getSystemService (Context.VIBRATOR_SERVICE);
/**************************************************/
创建一个Vibrator类
registerService(VIBRATOR_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
return new Vibrator();
}});
//构造器
先通过ServiceManager获取一个Vibrator Service对应的Binder代理对象,再将该Binder
代理对象做为IVibratorService.Stub.asInterface()的参数,并返回Vibrator的统一接口.
public Vibrator()
{
mService = IVibratorService.Stub.asInterface(
ServiceManager.getService("vibrator"));
}
/**************************************************/
在play方法中调用振动
Java Framework
mVibrator.vibrate(sVibratePattern, 1);
mService.vibratePattern(pattern, repeat, mToken);
Vibration vib = new Vibration(token, pattern, repeat, uid);
startNextVibrationLocked();
mCurrentVibration = mVibrations.getFirst();
startVibrationLocked(mCurrentVibration);
vibratorOn(vib.mTimeout);
JNi Framework
static void vibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms);
sendit(timeout_ms);
open(THE_DEVICE, O_RDWR);