1. 程式人生 > >Xposed Hook類android.app.NotificationManager時如何獲取Context

Xposed Hook類android.app.NotificationManager時如何獲取Context

最近在使用Xposed hook Android App時,在做一個需求的時候有點懵:如何獲取到android.app.NotificationManager中的Context呢?我的程式碼如下:

XposedHelpers.findAndHookMethod("android.app.NotificationManager", 
	lpparam.classLoader,
	"notify", 
	String.class, 
	int.class, 
	Notification.class, 
	new XC_MethodHook() {
		@Override
		protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
			//獲取context
			super.beforeHookedMethod(param);
	    }
	});

首先我一般使用如下的方法去獲得Context:

XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                        super.afterHookedMethod(param);
                        Context context = (Context) param.args[0];//在這裡獲取到Context
                        }
                    }

在這裡我用attach方法獲取到Context,但是在我的情況下,我們在notification裡的引數是沒有Context的,那我們怎麼樣去獲取Context呢?
在這裡我用Context context = AndroidAppHelper.currentApplication();獲取到了一個Context。也就是說,我們有兩種方式去獲得Context,一種是hook生命週期函式或者引數帶Context的函式,去獲得Context;另一種就是直接使用AndroidAppHelper.currentApplication()去獲取到Context。
這應該是Xposed最常用的一個需求了,希望自己能在使用Xposed的過程中更好的學習它。