最近有需求需要使用MediaPlayer的invoke接口去实现某些功能, 但是invoke接口是隐藏的, 没有在sdk中开放出来. 所以使用反射的方法来获取invoke接口, 但在实现的过程中出现一些问题, 在这里记录一下.
1.使用反射的方式获取隐藏的接口
if (mMediaPlayer != null) {
Parcel request = Parcel.obtain();
Parcel reply = Parcel.obtain();
try {
request.writeInt(200);
Class<?> cls = mMediaPlayer.getClass();
Method method = cls.getDeclaredMethod("invoke", Parcel.class, Parcel.class);
method.setAccessible(true); //如果隐藏接口是public的, 这句可以不要
method.invoke(mMediaPlayer, request, reply);
int result = reply.readInt();
if (0 == result) {
return false;
} else if (1 == result) {
return true;
}
} catch (Exception e) {
e.getCause().printStackTrace();
} finally {
request.recycle();
reply.recycle();
}