Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android JNI ConnectivityManager-获取mService的句柄_Android_Java Native Interface_Xamarin.android_Xamarin - Fatal编程技术网

Android JNI ConnectivityManager-获取mService的句柄

Android JNI ConnectivityManager-获取mService的句柄,android,java-native-interface,xamarin.android,xamarin,Android,Java Native Interface,Xamarin.android,Xamarin,我正试图在android.net.ConnectivityManager类()上的mService(IConnectivityManager)属性上获取JNI句柄,以用于启动/停止设备上的3g服务 我一直在尝试使用Javap通过以下方式获取签名: javap -classpath android.jar -s -private android.net.ConnectivityManager 但是,输出不包括此字段及其签名。使用JNI这可能吗 我有一个ConnectivityManager类的句

我正试图在
android.net.ConnectivityManager
类()上的
mService
IConnectivityManager
)属性上获取JNI句柄,以用于启动/停止设备上的3g服务

我一直在尝试使用Javap通过以下方式获取签名:

javap -classpath android.jar -s -private android.net.ConnectivityManager
但是,输出不包括此字段及其签名。使用JNI这可能吗

我有一个
ConnectivityManager
类的句柄,它使用:

static IntPtr class_ref = JNIEnv.FindClass("android/net/ConnectivityManager");
然而,黑暗中的刺刀试图在球场上获得控制权,却没有任何结果:

IntPtr getITelephonyFieldId = JNIEnv.GetFieldID(
            class_ref,
            "mService",
            "()Lcom/android/net/IConnectivityManager;");
以前有人尝试过吗?如果是这样的话,你有什么关于如何让它工作的提示吗

[更新]

我一直在玩弄签名,猜测工作终于有了回报。我现在有以下资料:

public class ThreeGService : Java.Lang.Object
{
    private readonly TinyIoCContainer _container;
    static readonly IntPtr ClassRef = JNIEnv.FindClass("android/net/ConnectivityManager");

    public ThreeGService(TinyIoCContainer container)
    {
        _container = container;
    }

    protected override IntPtr ThresholdClass
    {
        get { return ClassRef; }
    }

    public void ToggleThreeG()
    {
        var isEnabled = false;
        var baseActivitySherlock = _container.Resolve<IBaseActivitySherlock>("basesherlockactivity");
        var connectionManager = (ConnectivityManager)baseActivitySherlock.GetSystemService(Context.ConnectivityService);
        var conManager = (ConnectivityManager)baseActivitySherlock.GetSystemService(Context.ConnectivityService);
       

        IntPtr getITelephonyFieldId = JNIEnv.GetFieldID(
        ThresholdClass,
        "mService",
        "Landroid/net/IConnectivityManager;");

        IntPtr iConnectivityManagerHandle = JNIEnv.GetObjectField(
        ThresholdClass,
        getITelephonyFieldId);
       
        JNIEnv.CallNonvirtualIntMethod(Handle, ThresholdClass, iConnectivityManagerHandle, new JValue(true));

    }
}
在这里我得到一个空引用异常。我认为这是由于iConnectivityManagerHandle的值是0x0这一事实造成的——其他句柄的值看起来像是有效值


如果只需要
ConnectivityManager
为什么不使用:
var ConnectivityManager=(ConnectivityManager)GetSystemService(ConnectivityService)?我想获取ConnectionVityManager类的MSService(IconnectivityManager)属性-这不是通过Xamarin实现公开的。反射c#way也不会产生任何结果-访问它的唯一方法是通过JNI-因此我的问题是:)
JNIEnv.CallNonvirtualIntMethod(Handle, ThresholdClass, iConnectivityManagerHandle, new JValue(true));