私のAndroidアプリケーションでは、SDカードに次のフォルダーを作成しようとしています。
/mnt/sdcard/OSGiComponents/admin/felix-cache/
コードは次のとおりです。
File cacheDir =
new File( Environment.getExternalStorageDirectory().getAbsolutePath() +
"/OSGiComponents/admin/felix-cache/" );
// Create the folder
cacheDir.mkdirs();
// Check if it exists
if ( ! cacheDir.exists() ) {
Log.e ( "Debug" , "Cache directory cannot be created" );
}
androidマニフェストファイルのマニフェストタグの下にWRITE_STORAGE_PERMISSIONがあります。SDカードに問題なく他のフォルダやファイルを作成することができます。このアプリは、次の電話で正常に動作します。
- ジンジャーブレッド(2.3)を実行しているNexus S(ルート化)
- Jelly Bean(4.1.2)を実行しているNexus S(ルート化されていない)
- Froyo(2.2)を実行しているHTC Desire(rooted)
- Froyo(2.2)を実行しているHTC Desire(ルート化されていない)
ただし、Ice Cream Sandwich(4.0.4)を実行しているSamsung Galaxy Nexus電話(ルート化されていない)では、ディレクトリはゼロサイズのファイルとして作成されます。これはAstroで確認できます。presents()呼び出しはfalseを返します。
- フォルダ名からわかるように、私はApacheFelixを使用しています。Felixは、キャッシュディレクトリが存在しない場合、自動的に作成します。Galaxy Nexusでは、キャッシュディレクトリを作成できないという不満が常にありました。Astroは、フォルダの代わりに0バイトのファイルを表示します。これが、Felixを初期化する前に自分でキャッシュフォルダを作成してみることにした理由です。
- そこで、自分でキャッシュフォルダを作成します。アプリは最初は正常に動作し、Astroでフォルダを正常に確認できます。アプリを閉じてからAstroでフォルダーを削除してからアプリを再起動すると、コードでさえ不思議なことにキャッシュディレクトリを作成できず、Astroは0バイトのファイルを表示します。
- Astroでは0バイトのファイルを削除できません。ただし、電話を再起動すると、フォルダは魔法のようにそこにあり、問題ありません。
- FileInstallを使用してOSGiComponents/installフォルダーを監視しています。バンドルjarをそのフォルダーにドロップすると、Galaxy Nexusを除くすべての電話で検出されて正常にインストールされます(アプリが最初に動作するとき)。ディレクトリを監視できないことに関するFileInstallからのログ/エラーはありません。
- 私はこれを2台のGalaxyNexus電話でテストしましたが、同じ問題です。
パーミッションの問題だと思いますが、それが何であるか、exists()がfalseを返す間に0バイトのファイルが作成される理由はわかりません。このファイルを作成しているのは、コードの他のどこにもありません。
何が問題になる可能性があるかについての提案はありますか?
ありがとう :)
更新:問題を特定したと思います。投稿した回答をご覧ください。