私のライブラリ プロジェクトの 1 つで魔法のようなことが起こっています。レイアウト (res/layout) はライブラリ プロジェクト自体から取得されますが、assets フォルダー内のファイルは (ライブラリ プロジェクトではなく) 呼び出し元のプロジェクトから取得されます。
現在、ライブラリ プロジェクトでヘルプ アクティビティを作成しています。呼び出し元のプロジェクトは、ライブラリ プロジェクト内のアクティビティにファイル名を指定します。ファイルは、ライブラリ プロジェクトではなく、呼び出し元のプロジェクトに保存されます。
ライブラリ プロジェクトで AssetsManager を使用すると、ライブラリ プロジェクトのアセット フォルダーからではなく、呼び出し元プロジェクトのファイルが使用されます。
これは正しい動作ですか?
ルート プロジェクトのアクティビティの呼び出しを簡略化したものを次に示します。
// Calling Project
package aa.bb.aa;
public class MyListActivity extends ListActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.mylistactivity); // <--- Stored in resources of the calling project
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.men_help) {
Intent intent = new Intent(this, aa.bb.bb.MyFileBrowser.class);
intent.putExtra(MyConstants.FILE, "mylistactivity.html"); // <-- Stored in assets of the calling project
startActivityForResult(intent, MyConstants.DIALOG_HELP);
return true;
}
return super.onOptionsItemSelected(menuItem);
}
}
ライブラリ プロジェクトのアクティビティは次のとおりです。アセットは、呼び出し元のアクティビティ/プロジェクトからではなく、ここからフェッチされると思いました:
// Library project
package aa.bb.bb;
public class MyFileBrowser extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.myfilebrowser); // <-- Stored in resources of the library project
webView = (WebView) findViewById(R.id.browser);
Locale locale = Locale.getDefault();
String localeLanguage = (locale.getLanguage() != null) ? locale.getLanguage() : "en";
Bundle bundleExtras = getIntent().getExtras();
if (bundleExtras != null) {
String file = bundleExtras.getString(MyConstants.FILE);
if (!StringUtils.isEmpty(file)) {
String filename = "help-" + localeLanguage + File.separator + file;
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open(filename);
} catch (IOException ioException) {
filename = "help-en" + File.separator + file;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ioException) {
}
}
webView.loadUrl("file:///android_asset" + File.separator + filename); // <-- Uses file in assets of calling project - not library project
}
}
}
}