0

私は何週間もの間、この問題の回避策/対処を試みてきましたが、もはやそれを回避することはできないようです. ピア ツー ピア ネットワークを作成する前に、デバイスの名前を変更する必要がある Android アプリケーションがあります。

メソッドは Android の SDK に隠されているため、リフレクションを使用しています。私が反映しようとしている方法は、ここの 1305 行にあります: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/wifi/java/android/net/wifi/p2p/ WifiP2pManager.java

リフレクションを試す私のコードは次のとおりです。

public class HostStagingActivity extends Activity
{
WifiP2pManager.Channel myChannel; //This channel is created and passed to system services in order for WIFI_P2P to work
WifiP2pManager myManager; //This manager is declared to get the required channel object
...

@Override
protected void onCreate(Bundle savedInstanceState)
{
myManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);//passed to the myReceiver listener class
myChannel = myManager.initialize(this, getMainLooper(), null);//passed to the myReceiver listener class
...
Method method1 = null;    
try
        {
            method1 = myManager.getClass().getMethod("setDeviceName",  new Class[] {WifiP2pManager.Channel.class, String.class, WifiP2pManager.ActionListener.class });
            method1.invoke(myChannel, NETWORK_NAME, new WifiP2pManager.ActionListener()
            {
                public void onSuccess()
                {
                    Toast.makeText(getApplicationContext(), "DeviceName Changed Successfully!", Toast.LENGTH_SHORT).show();
                    //Code for Success in changing name
                }
                public void onFailure(int reason)
                {
                    Toast.makeText(getApplicationContext(), "DeviceName Change Returned Failure!", Toast.LENGTH_SHORT).show();
                    //Code to be done while name change Fails
                }
            });
        }

ただし、これにより実行時エラーが発生します。

Caused by: java.lang.IllegalArgumentException: expected receiver of type android.net.wifi.p2p.WifiP2pManager, but got android.net.wifi.p2p.WifiP2pManager$Channel
            at java.lang.reflect.Method.invokeNative(Native Method)

コードで WifiP2pManager.Channel クラスを明確に渡しているのに、メソッドが WifiP2pManager オブジェクトを期待しているのはなぜですか? おもしろいことに、期待する引数を渡すと、メソッドは 3 つの引数を予期していたと主張し、私は 2 つしか与えませんでした。

熟考の経験が豊富な人が私を助けてくれますか?

4

0 に答える 0