2017-08-05 64 views
0

我想阻止一個電話,我嘗試使用反射android.telecom.Call類與下面的代碼,但這個類沒有構造函數。Android如何在android.telecom.Call中反射類

try { 
     Class c = Class.forName("android.telecom.Call"); 
     Method m = c.getMethod("disconnect"); 
     m.setAccessible(true); 

     Object o = m.invoke(c, new Object[] {}); 

    } catch (Exception e) { 
     Log.e("Exception of Reflection", e.getLocalizedMessage()); 
    } 
+0

你什麼異常。請問我們實際上可以回答的問題。請參閱常見問題https://stackoverflow.com/tour – thst

回答

0
  1. 您需要實例級呼叫,因爲你使用實例爲您method invocation目標。
  2. 方法getMethod忽略非公開方法。您應該使用getDeclaredMethod來查找您的私人方法。

您的代碼可能是這樣的:

try 
{ 
    Class<?> c = Class.forName("android.telecom.Call"); 
    Object instance = c.newInstance(); 
    Method m = c.getDeclaredMethod("disconnect"); 
    m.setAccessible(true); 
    m.invoke(instance, new Object[] {}); 
} 
catch (Exception e) 
{ 
    Log.e("Exception of Reflection", e.getLocalizedMessage()); 
} 
+0

當我嘗試此代碼時,它給了我一個異常java.lang.InstantiationException:java.lang.Class 在行c上沒有零參數構造函數。的newInstance()。 @Maaaatt –

+0

@AbhishekPanjabi這是一個僞代碼,用於顯示用反射實例化類的簡單片段。我沒有爲這個特定的類調用它,因爲從你的評論看來它不起作用,我會建議查看這個類的文檔,看看如何實例化它,如果它甚至可能(構造函數可能實際上如果沒有Builder,Factory或任何類似的類,你可能無法實例化它)。 – Maaaatt