トップページ > 記事閲覧
AndroidManifestにアクセスしたい
名前:BayLeaf 日時: 2018/01/20 02:52

いつもお世話になっております。 今までAndroidManifestの内容をC++コードに手動で書いていましたが、不便だと感じ 連携させたいと思いアクセス方法を調べたのですが、調べても方法がよく分からなかったため質問しました。 アクセスしたいのは以下です。 ・バージョン情報(android:versionName) ・APIレベル(android:minSdkVersion, android:targetSdkVersion) また上記とは別で、AndroidManifestに記述できる <uses-permission>で設定した機能(加速度センサーなど)が使えるかどうかを GetAndroidSensorVector を使用する前に知りたいです。 <uses-feature>の場合、対応していない端末にインストールすることができないのですが、 <uses-permission>の場合、インストールはできますが、使用時にエラーを起こしてしまいます。 個人的にはインストールはできるように<uses-permission>を使用したいので、使えない機能は FALSE で返す関数があればと思います。 お忙しいところ申し訳ないですが、よろしくお願いします。
メンテ

Page: 1 |

Re: AndroidManifestにアクセスしたい ( No.1 )
名前:管理人 日時:2018/01/21 00:16

> AndroidManifestにアクセスしたい 残念ですが、少し調べた限りではアプリから AndroidManifest.xml の内容を取得する方法は無いようです > また上記とは別で、AndroidManifestに記述できる > <uses-permission>で設定した機能(加速度センサーなど)が使えるかどうかを GetAndroidSensorVector を使用する前に知りたいです。 センサーの情報は <uses-permission> や <uses-feature> で指定しなくても使用できた筈ですが <uses-permission> や <uses-feature> で指定しないとセンサーを使用できないのでしょうか? とりあえず手元の環境では <uses-permission android:name="android.permission.SENSOR"/> を AndroidManifest.xml に記述しなくても GetAndroidSensorVector で値を取得することができています・・・
メンテ
Re: AndroidManifestにアクセスしたい ( No.2 )
名前:BayLeaf 日時:2018/01/21 10:06

> 残念ですが、少し調べた限りではアプリから AndroidManifest.xml の内容を取得する方法は無いようです そうですか、xmlファイルにアクセスできれば開発スピードが(個人的には)向上しますが我慢します... 因みに、その他のxmlファイルもアクセスできないということでよろしいですか? > センサーの情報は <uses-permission> や <uses-feature> で指定しなくても使用できた筈ですが > <uses-permission> や <uses-feature> で指定しないとセンサーを使用できないのでしょうか? いえ、 <uses-permission> や <uses-feature> の指定で使用できなくなることはありません。 <uses-permission> や <uses-feature> は「この機能(センサーやカメラなど)を使用していますよ」ということをアプリストアに提示する機能です。 つまり、今回のセンサー情報の指定はセンサーが使用できるかどうかではなく ユーザ側でアプリをインストールする際に確認するために使用します。 <uses-feature> 記述した機能をユーザ側で対応していない場合、アプリストアに表示されなくなります。 <uses-permission> ユーザがアプリをインストールする際に確認を求める機能です。 対象機能をユーザ側が利用できなくてもインストール自体はできますが、 もしその機能を使用した場合、対応していないので予期しないバグが発生する可能性があります。 なお、インストールできる端末をできるだけ増やしたいので <uses-feature> の利用は避けたいと考えています。 デバッグでは必要ないため用いることはないのですが、 ユーザが化石スマホなどを持っている可能性のことを考えて、利用できないときの分岐を作りたいので GetAndroidSensorVector よりも前に確認できればと思いました。 一つ確認したいのですが、もし対応していない端末が GetAndroidSensorVector を使用した場合、戻り値はどのようになりますか? 強制終了のエラーやバグが発生しないのであれば最終手段として GetAndroidSensorVector で値を取得して分岐させようと思っていますが、 この場合、特殊な条件下(平らに置くゲームなど)により分岐条件をすり抜ける可能性があるので やはり、事前に利用可能かどうかを取得できたほうが良いかと思われます。
メンテ
Re: AndroidManifestにアクセスしたい ( No.3 )
名前:管理人 日時:2018/01/21 11:48

> 因みに、その他のxmlファイルもアクセスできないということでよろしいですか? xmlファイルは幾つかありますが、どちらの xmlファイルでしょうか? それぞれの xmlファイルは別々の情報を持っていますので、取得できる情報もあるかもしれません > 対象機能をユーザ側が利用できなくてもインストール自体はできますが、 > もしその機能を使用した場合、対応していないので予期しないバグが発生する可能性があります。 なるほど、すみません、最初のお書き込みの > <uses-permission>の場合、インストールはできますが、使用時にエラーを起こしてしまいます。 の一文の中の『エラー』を『GetAndroidSensorVectorを使用すると関数の中でメモリの不正なアクセスなどが発生して強制終了してしまう』 という意味でとらえて、センサーの無い環境などで GetAndroidSensorVector を使用しても強制終了しないかどうかなどを試してみたりしたのですが、 もしかして『予期しない値が返ってきた場合、BayLeafさんが作成されているアプリが意図しない挙動をしてしまう可能性がある』という意味の『エラー』だったのでしょうか? ともあれ『指定のセンサーが使用できるかどうかを TRUE か FALSE で返す』関数を追加しましたので、 よろしければこちらのバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース 以下の関数を追加しました // センサーが有効かどうかを取得する( 戻り値 TRUE:有効 FALSE:無効 ) extern int CheckAndroidSensor( int SensorType /* DX_ANDROID_SENSOR_ACCELEROMETER など */ ) ; よろしければお試しください > いえ、 <uses-permission> や <uses-feature> の指定で使用できなくなることはありません。 > <uses-permission> や <uses-feature> は「この機能(センサーやカメラなど)を使用していますよ」ということをアプリストアに提示する機能です。 > つまり、今回のセンサー情報の指定はセンサーが使用できるかどうかではなく > ユーザ側でアプリをインストールする際に確認するために使用します。 ご返答ありがとうございます ユーザへの情報のためということなのですね > 一つ確認したいのですが、もし対応していない端末が GetAndroidSensorVector を使用した場合、戻り値はどのようになりますか? 対応していないセンサーを指定した場合は戻り値の x, y, z が 0.0f になります > 強制終了のエラーやバグが発生しないのであれば最終手段として GetAndroidSensorVector で値を取得して分岐させようと思っていますが、 > この場合、特殊な条件下(平らに置くゲームなど)により分岐条件をすり抜ける可能性があるので > やはり、事前に利用可能かどうかを取得できたほうが良いかと思われます。 すみません、『<uses-permission>でセンサーを指定した状態で GetAndroidSensorVector を使用すると強制終了する』と勘違いしてそちらばかりが 気になって利用可能かどうかの関数の追加を失念していました m(_ _;m
メンテ
Re: AndroidManifestにアクセスしたい ( No.4 )
名前:BayLeaf 日時:2018/01/21 12:54

> xmlファイルは幾つかありますが、どちらの xmlファイルでしょうか? > それぞれの xmlファイルは別々の情報を持っていますので、取得できる情報もあるかもしれません AndroidManifest は除外として、 「Packaging -> values(values-ja 等含む) -> strings.xml」 上記stringタグ内のname属性にアクセスできればある程度文字列の整理ができるかなとは考えました。 他にもあると思いますが、使用しているプロジェクトでは他に Build.xml くらいしかないので上記についてのご返答のみで構いません。 > もしかして『予期しない値が返ってきた場合、BayLeafさんが作成されているアプリが意図しない挙動をしてしまう可能性がある』という意味の『エラー』だったのでしょうか? その通りです。 言葉足らずですみません、可能性を示唆したのみでエラー自体は発生していません。 > 対応していないセンサーを指定した場合は戻り値の x, y, z が 0.0f になります 了解です。そういえば気になったことがあるのですが、 センサー(加速度、磁力)を使用したときに z が 0.8f と返ってきたのですが、これは正常ですか? この値が何を指しているのかよく分からなかったのでお聞きしました。 > すみません、『<uses-permission>でセンサーを指定した状態で GetAndroidSensorVector を使用すると強制終了する』と勘違いしてそちらばかりが > 気になって利用可能かどうかの関数の追加を失念していました m(_ _;m こちらこそ誤解を与えるような表現をしてしまい申し訳ないです。 そして関数の追加ありがとうございます。 あとで試してみますので、またここに来ます。
メンテ
Re: AndroidManifestにアクセスしたい ( No.5 )
名前:管理人 日時:2018/01/21 21:48

> 「Packaging -> values(values-ja 等含む) -> strings.xml」 > 上記stringタグ内のname属性にアクセスできればある程度文字列の整理ができるかなとは考えました。 strings.xml に書かれた string 情報を取得する機能は作成できましたので、よろしければこちらをダウンロードしてください https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース 以下の関数を追加しました // res/values/strings.xml の string リソースを取得する // ValueName:string 情報名 // StringBuffer:ValueName が示す文字列を格納するバッファの先頭アドレス // StringBufferBytes:StringBuffer のサイズ( 単位:バイト ) // 戻り値  -1:指定の string 情報は無かった  -1以外:StringBuffer に必要なバッファのサイズ extern int GetAndroidResource_Strings_String( const char *ValueName, char *StringBuffer, int StringBufferBytes ) ; 例えば strings.xml に <string name="test_str">あいうえお</string> と記述してあった場合 char StringBuffer[ 256 ] ; GetAndroidResource_Strings_String( "test_str", StringBuffer, sizeof( StringBuffer ) ) ; を実行することで StringBuffer に『あいうえお』が代入されます よろしければお試しください m(_ _)m > 言葉足らずですみません、可能性を示唆したのみでエラー自体は発生していません。 了解です、強制終了ではなかったということで安心しました > センサー(加速度、磁力)を使用したときに z が 0.8f と返ってきたのですが、これは正常ですか? > この値が何を指しているのかよく分からなかったのでお聞きしました。 すみません、私も Android の API から取得できる値をそのまま返しているだけなので、正常かどうかはお答えできません・・・
メンテ
Re: AndroidManifestにアクセスしたい ( No.6 )
名前:BayLeaf 日時:2018/01/22 02:56

センサーが有効であるかどうかにつきましては無事確認できました。 > strings.xml に書かれた string 情報を取得する機能は作成できましたので、よろしければこちらをダウンロードしてください ありがとうございます。 AndroidManifest ができなかったのでまさかできるとは思っていなかったので嬉しいです。 strings.xml の情報があれば AndroidManifest にも一部ではありますが間接的にアクセスできるのでこの件については解決しました。 それと追加していただいた関数で恐縮ですが、せっかくなのでもう少しだけ機能の拡張及び関数追加をお願いします。 1. strings.xml のファイル名が別名である可能性について values に入れることのできるファイル名は strings.xml 以外にも設定できます。 そのため必ずしも strings.xml とは限りませんので、デフォルトでは strings.xml としておき指定もできると有難いです。 こちらは GetAndroidResource_Strings_String の引数を拡張していただければと思います。 2. values フォルダの他の言語(values-xx)にアクセスしたいとき 追加された関数を実行してみたところ、端末の設定通りに処理することができました。 ただ、手動切り替えで違う言語も使用したいときがあります。 なのでデフォルトは values にして、values-xx にもアクセスできればと思います。 こちらも GetAndroidResource_Strings_String の引数を拡張していただければと思います。 3. 単数形と複数形を分けるタグ <plurals> というタグで単数形や複数形などに対応できるようです。 こちらは string タグとは違う働きをするため、別途関数(GetAndroidResource_Strings_Plurals)が必要になると思います。 4. 配列 <string-array> というタグで文字列の配列を設定できるようです。 こちらも string タグとは違う働きをするため、別途関数(GetAndroidResource_Strings_StringArray)が必要になると思います。 5. プログラムで制御できる変数を入れた文字列 文字列部分には %d や %s などをプログラムから指定できるみたいです。 また、%1$d のように指定すると何番目の引数であるかが分かるようです。 こちらは GetAndroidResource_Strings_String の引数を拡張していただければと思いますが、 別途関数を追加していただいても構いません。 優先順位は数字の少ないほうが高いです(できれば5以外は欲しいです)。 もちろん、できなければそのままで使用しますので無理はなさらないでください。 以下が上記機能の説明について分かりやすいと思ったので記載しておきます。 参考URL: ttps://developer.android.com/guide/topics/resources/string-resource.html?hl=ja(文字列リソース | Android Developers) ttp://y-anz-m.blogspot.jp/2011/03/android-xml.html(Y.A.M の雑記帳: Android 複雑な文字列を xml で定義する) > すみません、私も Android の API から取得できる値をそのまま返しているだけなので、正常かどうかはお答えできません・・・ 分かりました。 今回に関しては関数を追加して頂いたおかげで使用する必要がなくなったため大丈夫です。
メンテ
Re: AndroidManifestにアクセスしたい ( No.7 )
名前:管理人 日時:2018/01/22 03:28

> 1. strings.xml のファイル名が別名である可能性について > values に入れることのできるファイル名は strings.xml 以外にも設定できます。 > そのため必ずしも strings.xml とは限りませんので、デフォルトでは strings.xml としておき指定もできると有難いです。 > こちらは GetAndroidResource_Strings_String の引数を拡張していただければと思います。 values フォルダの中にあれば strings.xml に書かれているものも、たとえば test.xml に書かれているものも name の指定で等しくアクセスできるようです( なので、一つ目のファイルが strings.xml である必要も無いようです ) > 2. values フォルダの他の言語(values-xx)にアクセスしたいとき > 追加された関数を実行してみたところ、端末の設定通りに処理することができました。 > ただ、手動切り替えで違う言語も使用したいときがあります。 > なのでデフォルトは values にして、values-xx にもアクセスできればと思います。 > こちらも GetAndroidResource_Strings_String の引数を拡張していただければと思います。 こちらは方法が見つかりませんでした > 3. 単数形と複数形を分けるタグ > 4. 配列 > 5. プログラムで制御できる変数を入れた文字列 今回そこまで大きな機能追加にする予定はありませんでしたので、申し訳ありませんが対応は見送らせてください m(_ _;m
メンテ
Re: AndroidManifestにアクセスしたい ( No.8 )
名前:BayLeaf(解決) 日時:2018/01/22 07:01

> values フォルダの中にあれば strings.xml に書かれているものも、たとえば test.xml に書かれているものも > name の指定で等しくアクセスできるようです( なので、一つ目のファイルが strings.xml である必要も無いようです ) てっきり追加された関数は strings.xml のみで処理を行なっていると思っていました。 そういうことでしたら問題なさそうなので有難く使わせていただきます。 > 今回そこまで大きな機能追加にする予定はありませんでしたので、申し訳ありませんが対応は見送らせてください m(_ _;m 了解しました。 それでは、大元である xml のアクセスは達成できたので解決とさせていただきます。 対応していただきありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存