トップページ > 記事閲覧
Android版:GetExternalDataPathバグ
名前:Oomimi 日時: 2018/02/13 07:19

いつも大変お世話になっております。 端末によってはGetExternalDataPath(外に保存する方)が使えないようです。 友人の端末含め、Android数台でしかテストプレイしていませんが、GetExternalDataPathを使ってデータを読み書きできない端末があるようです。 所持している機種では、Kindleは読み書きできませんでしたが、Nexus7 2012は読み書きできました。 一応、返り値を確認しましたが、両方の端末ともに52という値でした。(この値はよくわかっていません……) ちなみにGetInternalDataPath(内に保存する方)は、今のところテストしたどの端末でも開けるみたいです。 別件1) それとですが、Android内にフォルダを作成する関数がほしいと思っています。 GetExternalDataPathで取得したフォルダ内に沢山のファイルを書き込むと整理が大変しにくいので フォルダごとに分けてセーブデータを整理したいと考えております。 別件2) Nexus7 2012のほうで、作ったゲームを起動すると、数秒間ノイズが出てしまいます。 本体の寿命なのかもしれませんが、他のアプリを起動したときにはノイズが出ません。 原因が全く思いつかないので、ついでに質問させていただきます。 別件3) (http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4329)の投稿で見かけましたが、 BayLeafさんのおっしゃる通りiOS版のDXライブラリでiOSアプリの開発ができればいいなと思っております。 毎回、DxLibにはお世話になっております。 今後ともよろしくお願いいたします
メンテ

Page: 1 |

Re: Android版:GetExternalDataPathバグ ( No.1 )
名前:管理人 日時:2018/02/15 01:20

> 端末によってはGetExternalDataPath(外に保存する方)が使えないようです。 外部データ保存用の領域が無い端末では GetExternalDataPath で取得したパスに保存できないので、 『GetExternalDataPath で得られたパスに必ず保存できる』ことを前提とした処理にはしないようにしてください ただ、GetExternalDataPath の戻り値はパス文字列の保存に必要なメモリのサイズなので、52 という値が返ってくる 以上有効なパスが取得できているように思えます・・・ GetExternalDataPath で得られたパスを DrawString で画面に描画するとどのようなパスになっているか分かるので、 よろしければ読み書きができなかった端末でのパス名を教えていただけないでしょうか? > それとですが、Android内にフォルダを作成する関数がほしいと思っています。 > GetExternalDataPathで取得したフォルダ内に沢山のファイルを書き込むと整理が大変しにくいので > フォルダごとに分けてセーブデータを整理したいと考えております。 少し調べた限りでは GetExternalDataPath で取得したフォルダにファイルを保存することはできますが、 フォルダを作成することはできないようです あと、セーブデータは一般的には GetInternalDataPath で取得できるフォルダに保存します GetInternalDataPath で取得できるフォルダには新規のフォルダを作成することができるようです フォルダの作成は C言語の標準関数である mkdir で作成できます mkdir は sys/stat.h をインクルードすることで使用できるフォルダを作成するための関数です 例:GetInternalDataPath で取得できるフォルダ内に NewFolder という名前のフォルダを作成する #include <sys/stat.h> #include <string.h> int android_main( void ) { char NewFolderPath[ 512 ]; GetInternalDataPath( NewFolderPath, sizeof( NewFolderPath ) ); // 取得したフォルダパスに新しいフォルダのパスを追加する strcat( NewFolderPath, "/NewFolder" ); if( mkdir( NewFolderPath, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH | S_IXOTH ) == 0 ) { // フォルダ作成成功 } else { // フォルダ作成失敗 } return 0; } 第二引数は作成するフォルダのアクセス権限の指定で、上記の例では読み込みも書き込みもできるようにしています > Nexus7 2012のほうで、作ったゲームを起動すると、数秒間ノイズが出てしまいます。 > 本体の寿命なのかもしれませんが、他のアプリを起動したときにはノイズが出ません。 ノイズとは具体的にはどのようなものでしょうか? > BayLeafさんのおっしゃる通りiOS版のDXライブラリでiOSアプリの開発ができればいいなと思っております。 現在作成中です 2018年8月 から 2019年8月 までのどこかで完成できるのではないかと思います ( 予定外のことが発生して『1ヶ月間何も作業できなかった・・・』ということも結構あるので・・・ )
メンテ
Re: Android版:GetExternalDataPathバグ ( No.2 )
名前:Oomimi 日時:2018/02/15 08:26

> よろしければ読み書きができなかった端末でのパス名を教えていただけないでしょうか? パス名は、 /storage/emulated/0/Android/data/com.(プロジェクト名)/files でした。 パス名は読み込めた端末、読み込めなかった端末ともに同じでした。 その後いろいろとテストしてみましたが、 どうやらファイルのパスがfopenで開けない(必ずNULLが返ってくる)のが原因みたいです。 (何か特殊な権限がないと開けない設定かなにかになっているんでしょうかね……?) プロジェクト名をアルファベットのみにしても、変化ありませんでした。 コード内のファイル読み込みの場所を変えても、何も変化ありませんでした。 データ容量も15GBくらいあり、まだ余裕があります。 fopenしているパスは、 /storage/emulated/0/Android/data/com.as_cll/files/inventory.txt です。 試しに /storage/emulated/0/Android/data/com.as_cll/files /storage/emulated/0/Android/data/com.as_cll/inventory.txt /storage/emulated/0/Android/data/inventory.txt 等を試してみましたが、全て開けませんでした。 fopen出来ない原因が全く思いつきません…… > ノイズとは具体的にはどのようなものでしょうか? 画像を用意しました。 ・起動時のスクリーンショット 正常な端末 https://i.imgur.com/w6EhxSc.png 異常な端末 https://i.imgur.com/ysrll83.png ・MakeScreenで作成した画像の線画(黄色いグリッド線の部分です) 正常な端末 https://i.imgur.com/Y4yD1Cm.png 異常な端末 https://i.imgur.com/36b6m5H.png ・その他 異常な端末 https://i.imgur.com/oRLIokA.png https://i.imgur.com/HJ8hdPY.png MakeScreenで線画した画像にノイズが入っていることがほとんどですので、もしかしたら MakeScreenのバグが端末によってはまだ残っている可能性があるかもしれません。 このノイズの原因はMakeScreenの可能性が高いと思っております。 ※先ほど返信して頂いたAndroid最新版を入れたところ、 Kindle端末ではMakeScreen画像を正常に読み込めるようになりましたが、 Nexus7では正常に読み込めたりバグったりするような感じです。 > 2018年8月 から 2019年8月 までのどこかで完成できるのではないかと思います 完成時期の詳細ありがとうございます。 とても楽しみにしています。
メンテ
Re: Android版:GetExternalDataPathバグ ( No.3 )
名前:管理人 日時:2018/02/16 00:46

> パス名は、 > /storage/emulated/0/Android/data/com.(プロジェクト名)/files > でした。 >  > パス名は読み込めた端末、読み込めなかった端末ともに同じでした。 確かにパス的には問題なさそうです > その後いろいろとテストしてみましたが、 > どうやらファイルのパスがfopenで開けない(必ずNULLが返ってくる)のが原因みたいです。 > (何か特殊な権限がないと開けない設定かなにかになっているんでしょうかね……?) 権限が無い可能性もありますが、そもそも /storage/emulated/0/Android/data/com.(プロジェクト名)/files のフォルダが無い、ということはないでしょうか? ファイルエクスプローラー系のソフトで /storage/emulated/0/Android/data/com.(プロジェクト名)/files のフォルダの存在は確認できますでしょうか? もしフォルダが存在して、且つファイルの新規作成ができないのだとしますと、 残念ながらその端末ではアプリが GetExternalDataPath で取得できるフォルダにファイルを 作成する権限が無い、というのことになると思います・・・ > 画像を用意しました。 ありがとうございます > MakeScreenで線画した画像にノイズが入っていることがほとんどですので、もしかしたら > MakeScreenのバグが端末によってはまだ残っている可能性があるかもしれません。 すみません、うっかりしていました MakeScreen で作成した画像は初期化されていませんので、SetDrawScreen で描画対象にした後は 最初に ClearDrawScreen(); で画像の内容をクリアしてください 恐らくアップしていただいた画像のノイズは ClearDrawScreen(); を実行することで無くなると思います > 完成時期の詳細ありがとうございます。 > とても楽しみにしています。 ありがとうございます、頑張ります (^ ^
メンテ

Page: 1 |

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

   クッキー保存