ライブラリ プロジェクトの 1 つのクラス内で実行時にライブラリを参照/ホストしているアプリケーションのコンテキストを取得したいと考えています。出来ますか?はいの場合、どのように?
ありがとう
更新 ライブラリ プロジェクトが JNI を介して呼び出される可能性があり、JNI でコンテキストを取得して Java レイヤーに渡す方法がわからないため、ユーザーにパラメータのコンテキストをライブラリ プロジェクトに渡してほしくありません。
ライブラリ プロジェクトの 1 つのクラス内で実行時にライブラリを参照/ホストしているアプリケーションのコンテキストを取得したいと考えています。出来ますか?はいの場合、どのように?
ありがとう
更新 ライブラリ プロジェクトが JNI を介して呼び出される可能性があり、JNI でコンテキストを取得して Java レイヤーに渡す方法がわからないため、ユーザーにパラメータのコンテキストをライブラリ プロジェクトに渡してほしくありません。
もう1つの方法は、ライブラリプロジェクトにアプリケーションクラスを追加することです。
/**
* Base class for those who need to maintain global application state.
*/
public class LibApp extends Application {
/** Instance of the current application. */
private static LibApp instance;
/**
* Constructor.
*/
public LibApp() {
instance = this;
}
/**
* Gets the application context.
*
* @return the application context
*/
public static Context getContext() {
return instance;
}
}
次に、通常のプロジェクトで、実際のアプリケーションクラスにLibAppを拡張させます。
/**
* Base class for those who need to maintain global application state.
*/
public class App extends LibApp {
@Override
public void onCreate() {
super.onCreate();
}
}
AndroidManifestで「名前」が定義されていることを確認してください。
<application android:name="App" ...>
Appクラスが基本パッケージに含まれていること。
次に、ライブラリプロジェクトのLibApp.getContext()を使用して、ライブラリを使用しているアプリケーションのアプリケーションコンテキストを取得できます。
これは良い解決策ではないかもしれませんが、私にとってはうまくいきます。他の人に役立つかもしれないので、私はそれを共有しています。
出来ますか?
はい。
はいの場合、どのように?
パラメータとして渡します。
ライブラリプロジェクトがJNIを介して呼び出される可能性があり、JNIでコンテキストを取得してJavaレイヤーに渡す方法がわからないため、ユーザーがパラメーター内のコンテキストをライブラリプロジェクトに渡さないようにします。
次に、「[あなた]がJNIでコンテキストを取得し、それをJavaレイヤーに渡す方法」を理解します。他のオブジェクトと同じように渡すと思います。@Blundellが指摘したように、他に選択肢はありません。
jni でコンテキストを取得する別の方法があります。パラメーターを渡すことも、コンテキストを自分で保存することもありませんが、android api を使用します。次の名前のクラスがあることがわかりました。
ソースコードで。そして静的関数
getInitialApplication
オブジェクトを返すことができApplication
ます。ただし、メインスレッドで呼び出す必要があり、クラスは隠されています。とにかくJavaに反映させることで使えます。そして、 と を使用してメソッドを見つけ、それを使用することFindClass()
ができます。FindStaticObjectMethod()
それが役立つことを願っています。
パラメータとして渡すか、そのライブラリでシングルトンを渡します。
メイン アプリ アプリケーションでライブラリのアプリケーション クラスを拡張するのは、Java ではクラスから 1 回しか拡張できないため、悪い考えです。アプリケーションが別のライブラリに渡す必要がある場合、問題が発生します。