さてぃ@大阪様
1日経過してもレスポンスが内容なので,分かる範囲で回答します。
1. 設定で行なっている方法
Androidは大部分がオープンソースなので,設定用のプログラムのソースが公開されています。(LocalePicker.java)
これによると,
① IActivityManagerを作る
② Configurationを作り,ここにlocale情報を設定する
③ Configurationを更新する
④ BackupManagerでバックアップする
<ソースの抜粋>
IActivityManager am = ActivityManagerNative.getDefault(); ①
Configuration config = am.getConfiguration(); ②
Loc loc = mLocales[position];
config.locale = loc.locale;
// indicate this isn't some passing default - the user wants this remembered
config.userSetLocale = true;
am.updateConfiguration(config); ③
// Trigger the dirty bit for the Settings Provider.
BackupManager.dataChanged("com.android.providers.settings"); ④
ただし,IActiveManager, ActivityManagerNative, Configuration及びBackupManagerクラスは次のパッケージで定義してあります。
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.backup.BackupManager;
import android.content.res.Configuration;
このうち,BackupManagerをのぞいて,SDKでは公開されていないパッケージです。
そのままimportしても,未定義エラーとなります。
2. 実装方法
Anroidのソースを取得できる方なら,公開されていないパッケージのソースを入手して,組み合わせてビルドすることで対応できます。
ソースを取得してしまえば,単なるjavaやaidlなので簡単にビルドできます。
3. リファレンスについて
以下は,Androidのソースを取得したときのパス名です。
GITを使用して取得してください。
設定方法は,LocalePicker.javaの最後にあります。(上記の抜粋の元ねたです)
公開していないパッケージのソース
android.app.ActivityManagerNative frameworks/base/core/java/android/app/ActivityManagerNative.java
android.app.IActivityManager frameworks/base/core/java/android/app/IActivityManager
android.content.res.Configuration frameworks/base/core/java/android/content/res/Configuration.java 及び Configuration.aidl
Locale設定のソースは
packages/apps/Settings/src/com/android/settings/LocalePicker.java
Aono
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com
にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja
からこのグループにアクセスしてください。
さてぃ@大阪です。
詳しいご説明ありがとうございます。
私も漠然と、Androidのソース自体を見ないとだめなのかなと思っていたところ
でした。
とても有益な情報感謝致します m(_ _)m
少し手続き難しそうですが、Aonoさん記載内容を参考に勉強しながらトライして
みます!
また、結果はお知らせ致します。
以上
JNI interface の使い方(作法)で戸惑っております。
詳しい方おられましたら、アドバイスお願い致します。
最初に、作成したいソースは、ある関数でJava側より、Native側へバッファを貸し出
し
別の関数で Native側のバッファの使用終了(メモリ解放をJava側で行う事を通知)
を
設定したいと考えています。
1.GetByteArrayElements(),ReleaseByteArrayElements () の使い方に付いて
色々とサンプルコードを探しましたが、 同一関数内で 上記の関数を
必ず、ペアーで呼ぶ必要があるのでしょうか? 別関数にする事は
出来ないのでしょうか?
私が別関数に分けて実験したところ コンパイルは通りますが、
実際に動作さすとアプリが異常終了してしまいます。
GetByteArrayElements()で、取得したバッファのアドレスは、
ReleaseByteArrayElements()を呼んだ後も、使い続けて良いのでしょうか?
Java側で取得したバッファを保持している間は使用しても問題は無いかとも
考えられますが(実際サンプルアプリでは動作しています)、本当に
この様な使い方が許されるのか分かりかねています。
作成しましたC言語側のソースを抜粋して記載いたします。
static jbyteArray gObjDataBufArray=NULL;
static jbyte *gObjDataBufAddr=NULL;
static jint gObjDataBufSize=0;
JNIEXPORT jint JNICALL Java_com_xx_yy_zz_aaa_1getbyte
(JNIEnv *env, jobject obj, jbyteArray objdatabuf)
{
jboolean isCopy;
gObjDataBufArray = objdatabuf;
gObjDataBufAddr = (*env)->GetByteArrayElements(env,
gObjDataBufArray,&isCopy);
gObjDataBufSize = (*env)->GetArrayLength(env,
gObjDataBufArray);
}
JNIEXPORT jint JNICALL Java_com_xx_yyy_zz_aaa_1releasebyte
(JNIEnv *env, jobject obj )
{
(*env)->ReleaseByteArrayElements(env, gObjDataBufArray,
gObjDataBufAddr,0);
}
2.Native 側へバッファの貸し出し方法
1以外の方法で、Native側へのバッファの貸し出し方法があれば
教えて頂けませんでしょうか?
よろしくお願いします。
kumaです。
教えて頂きました方法にて問題なく動作確認が出来ました。
私が知りたいポイントを ピンポイントで教えて頂き感謝しております。
今後ともよろしくお願いします。
-----Original Message-----
From: android-g...@googlegroups.com
[mailto:android-g...@googlegroups.com] On Behalf Of nakahara
Sent: Thursday, June 03, 2010 12:34 AM
To: android-g...@googlegroups.com
Subject: Re: [android-group-japan: 4454] JNI interface の使い方に付いて
なかはらです。
> GetByteArrayElements()で、取得したバッファのアドレスは、
> ReleaseByteArrayElements()を呼んだ後も、使い続けて良いのでしょうか?
できます。
gObjDataBufArray = objdatabuf;
ここを
gObjDataBufArray = (jbyteArray)(*env)->NewGlobalRef(env, objdatabuf);
で行けると思いますよ
解放の時にちゃんと
(*env)->DeleteGlobalRef(env, gObjDataBufArray);
とする必要はありますが
これを忘れるとJava側でこのメンバーにnull設定してもメモリ解放されません。
> 2.Native 側へバッファの貸し出し方法
Java側にバッファを取得するメソッドを用意して取得する事もできるかと思います。
2010年6月2日19:19 kumagai <ta.ku...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られ
ています。
> このグループに投稿するには、android-g...@googlegroups.com にメール
を送信してください。
> このグループから退会するには、
android-group-j...@googlegroups.com にメールを送信してくださ
い。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
からこのグループにアクセスしてください。
>
>
--
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
中原 智博(nakahara tomohiro)
MAIL : hc.na...@gmail.com
TEL : 06-6583-0974
mobile : 070-5653-7236
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/