package com.android.internal.telephony;
/**
* Interface used to interact with the phone. Mostly this is used by the
* TelephonyManager class. A few places are still using this directly.
* Please clean them up if possible and use TelephonyManager insteadl.
*
* {@hide}
*/
public interface ITelephony extends android.os.IInterface
{
...
}
b. 使用ITelephony.java接口 上面一步完成之后,你就会在你的gen目录下发现已经生成了ITelephony.java这个接口文件。这样,我们就可以使用它了.. 这里的话,主要是利用反射机制来取得ITelephony对象,为什么要用反射呢?因为 ITelephony对象是以一个系统服务的形式存在系统中的,跟ams,wms等等一样。 一般通过ServiceManager来保存和获取。但是ServiceManager同样也是隐藏的,如:
/** <a href="http://home.51cto.com/index.php?s=/space/126010" target="_blank">@hide</a> */
public final class ServiceManager {
...
}
/**
* Returns a reference to a service with the given name.
*
* @param name the name of the service to get
* <a href="http://home.51cto.com/index.php?s=/space/34010" target="_blank">@return</a> a reference to the service, or <code>null</code> if the service doesn't exist
*/
public static IBinder getService(String name) {
try {
IBinder service = sCache.get(name);
if (service != null) {
return service;
} else {
return getIServiceManager().getService(name);
}
} catch (RemoteException e) {
Log.e(TAG, "error in getService", e);
}
return null;
}
D/Sandy ( 9058): java.lang.SecurityException: Neither user 10125 nor current process has android.permission.MODIFY_PHONE_STATE.
D/Sandy ( 9058): at android.os.Parcel.readException(Parcel.java:1327)
D/Sandy ( 9058): at android.os.Parcel.readException(Parcel.java:1281)
D/Sandy ( 9058): at com.android.internal.telephony.ITelephony$Stub$Proxy.answerRingingCall(ITelephony.java:1019)
D/Sandy ( 9058): at com.example.hillrestproject.service.PhonePickupService.onPickUpEvent(PhonePickupService.java:180)
D/Sandy ( 9058): at com.hcrest.gestures.pickup.PickUpDetector.onSensorData(PickUpDetector.java:150)
D/Sandy ( 9058): at com.hcrest.android.sensors.SensorManagerAdapter$ListenerDelegate.onSensorChanged(SensorManagerAdapter.java:373)
D/Sandy ( 9058): at android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:635)
D/Sandy ( 9058): at android.os.Handler.dispatchMessage(Handler.java:99)
D/Sandy ( 9058): at android.os.Looper.loop(Looper.java:137)
D/Sandy ( 9058): at android.app.ActivityThread.main(ActivityThread.java:4507)
D/Sandy ( 9058): at java.lang.reflect.Method.invokeNative(Native Method)
D/Sandy ( 9058): at java.lang.reflect.Method.invoke(Method.java:511)
D/Sandy ( 9058): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
D/Sandy ( 9058): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
D/Sandy ( 9058): at dalvik.system.NativeStart.main(Native Method)
Log.e("Sandy", "for version 4.1 or larger");
Intent intent = new Intent("android.intent.action.MEDIA_BUTTON");
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);
intent.putExtra("android.intent.extra.KEY_EVENT",keyEvent);
sendOrderedBroadcast(intent,"android.permission.CALL_PRIVILEGED");