販売用に作ったハンディターミナルアプリ。
完成まであと一歩まできたのに・・・
Android 10で導入されたASD(=app-specific directory)が出すエラーが解決できない!
ASD(=app-specific directory)
Androidアプリがアクセスできる保存領域は、アプリ実行に作られる一時保存場所のみ。
他のアプリからアクセスさせないセキュリティ強化策(らしい)
受注ファイル書出時に出るPermissionエラー
csvファイルをExternal Storegeへ保存しようとすると権限がないと怒られる!
解決策を探しApp Inventorフォーラムをウロウロ
[AppInventorフォーラム]フォーラムの中は、同じasd(=app-specific directory)エラーで困ってる人、大勢います。
解決策が見つからないので作戦変更。
こんなものを作りました。
元は、App Inventorフォーラムで共有されていた「Storageアクセス権限チェック」アプリの改造版。
ASDが、よくわからないので
[save(保存) file]ボタンで、abc.txtを保存とりあえず思いつくとこ全部へ
アクセスチェックするぞ!
的なアプリ
[save /]ボタンで、/abc.txtを保存
[save File:/]で、File:/abc.txtを保存
[save File:///]で、File:///abc.txtを保存
保存後
[Read(読込) file]ボタンで、abc.txtを読む
[Read /]ボタンで、/abc.txtを読む
[Read File:/]で、File:/abc.txtを読む
[Read File:///]で、File:///abc.txtを読む
[Exist /]ボタンで、/abc.txtの有無を調べる
[Exist File:/]で、File:/abc.txtの有無を調べる
[Exist File:///]で、File:///abc.txtの有無を調べる [Delete(削除) file]ボタンで、abc.txtを削除
[Delete /]ボタンで、/abc.txtを削除
[Delete File:/]で、File:/abc.txtを削除
[Delete File:///]で、File:///abc.txtを削除
このアプリで分かったとこが2つ
1:ファイル名を/(スラッシュ)で始めると
ASD以前のExternal Storegeが書込先になる
例えば、/abc.txt で保存しょうとすると
でも、許可してもPermissionエラーで書き込めません!
このエラーを、ASD(=app-specific directory)が出してると思います。
2:先頭が/(スラッシュ)無し、または先頭File:/なら
ASD(=app-specific directory)が保存先になるみたい
どんなフォルダー・ファイルでも作れます。
abc.txt
abc/efg/his.txt
ab/cde/fghij/klmn.txt
File:/abc.txt
File://abc/efg/his.txt
File:///ab/cde/fghij/klmn.txt
試しに、アプリを一度終了
再実行し[Exist]ボタンで存在を確認すると、
まだ、そこにある!
でも他のFilerアプリからは見えない!
これが、ASD(=app-specific directory)かな
最後にASDのFull Pathでの[Exist]検証
App InventorフォーラムによるとASDのFull Pathは
/storage/emulated/0/Android/data/アプリ名/Files/
Full Path[Exist]ボタンを押すと
File doesn’t exist
結局、ファイルはどこになるのか分からない!
追記:
2014年12月から実務投入した自作ハンディターミナルアプリ。
使い始めて8年目。
その間にGmailサービスが止まり社外から受注ファイルを送信できなかったことが3度ありました。
ファイル保存場所がわかれば、PCメール・FTP・チャットアプリで送信できると思ったのですが・・・・
このセキュリティ強化策、すごく不便に思います