#c# #android #c #xamarin #juce
#c# #Android #c #xamarin #juce
Вопрос:
Я разрабатываю приложение Xamarin для Android, и мне нужно инициализировать аудиобиблиотеку JUCE в контексте NDK (C ). Я обнаружил, что JUCE должен быть инициализирован функцией:
static void initialiseJUCE (void* jniEnv, void* jContext);
Я понимаю, что JNIEnv может быть легко передан из кода C # с помощью:
[IntPtr] Android.Runtime.JNIEnv.Handle
для аннулирования * в C
Но я не знаю, как я могу получить jContext. Соответственно документация, jContext:
@param jContext это jobject, ссылающийся на контекст вашего приложения / службы / получателя / поставщика. JUCE нуждается в этом для многих своих внутренних функций.
Честно говоря, я не очень хорошо знаком с разработкой для Android, поэтому мой вопрос, возможно, наивен, и я не вижу основных принципов. Спасибо.
Комментарии:
1. Я думаю, вы могли бы создать / использовать оболочку C # на основе библиотеки JUCE C . Пример, подобный этому, звучит сейчас . А затем использовать его для Xamarin
2. Спасибо, к сожалению, NowSound не поддерживает Android (кажется). В файле конфигурации я увидел, что нет определения для поддержки OpenSLES. Проблема просто в том, как получить jContext (как IntPtr) в Xamarin для Android.
Ответ №1:
Я понял вашу точку зрения. Из документации для Java, которую вы упомянули, похоже, что jContext — это приложение.Контекст (Android.Содержание.Контекст):
package com.rmsl.juce;
public class Java
{
static { System.loadLibrary ("juce_jni"); }
public native static void initialiseJUCE (Context context);
}
Вы можете получить его из своего текущего действия, фрагмента или приложения.
Поэтому, если вы хотите получить указатель на ваш текущий контекст, попробуйте использовать его для Xamarin.Android:
//Context is a property of your Activity, Fragment or Application
var currentContext = Context as global::Android.Runtime.IJavaObject;
IntPtr pointer = currentContext.Handle;