2017-08-05 7 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これは、リフレクションでクラスをインスタンス化するための簡単なスニペットを示す擬似コードでした。私はこの特定のクラスの呼び出しのためにそれを試していないし、あなたのコメントからそれは動作しないようだから、私はこのクラスのドキュメントを見て、それをインスタンス化する方法を参照することをお勧めしますビルダー、工場、またはそれに類するものがなければインスタンス化することはできません。 – Maaaatt

関連する問題