本文整理汇总了C++中AssetManager::openNonAsset方法的典型用法代码示例。如果您正苦于以下问题:C++ AssetManager::openNonAsset方法的具体用法?C++ AssetManager::openNonAsset怎么用?C++ AssetManager::openNonAsset使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AssetManager
的用法示例。
在下文中一共展示了AssetManager::openNonAsset方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LOGE
static jint norwegianime_BinaryDictionary_open
(JNIEnv *env, jobject object, jobject assetManager, jstring resourceString,
jint typedLetterMultiplier, jint fullWordMultiplier)
{
// Get the native file descriptor from the FileDescriptor object
AssetManager *am = (AssetManager*) env->GetIntField(assetManager, sAssetManagerNativeField);
if (!am) {
LOGE("DICT: Couldn't get AssetManager native peer\n");
return 0;
}
const char *resourcePath = env->GetStringUTFChars(resourceString, NULL);
Asset *dictAsset = am->openNonAsset(resourcePath, Asset::ACCESS_BUFFER);
if (dictAsset == NULL) {
LOGE("DICT: Couldn't get asset %s\n", resourcePath);
env->ReleaseStringUTFChars(resourceString, resourcePath);
return 0;
}
void *dict = (void*) dictAsset->getBuffer(false);
if (dict == NULL) {
LOGE("DICT: Dictionary buffer is null\n");
env->ReleaseStringUTFChars(resourceString, resourcePath);
return 0;
}
Dictionary *dictionary = new Dictionary(dict, typedLetterMultiplier, fullWordMultiplier);
dictionary->setAsset(dictAsset);
env->ReleaseStringUTFChars(resourceString, resourcePath);
return (jint) dictionary;
}
开发者ID:Ajayalal,项目名称:scandinavian-keyboard,代码行数:31,代码来源:com_android_inputmethod_norwegian_BinaryDictionary.cpp
示例2: dispatchDidFailProvisionalLoad
void FrameLoaderClientAndroid::dispatchDidFailProvisionalLoad(const ResourceError& error) {
ASSERT(m_frame);
// Ignore ErrorInterrupted since it is due to a policy interruption. This
// is caused by a decision to download the main resource rather than
// display it.
if (error.errorCode() == InternalErrorInterrupted
|| error.errorCode() == InternalErrorCancelled) {
// If we decided to download the main resource or if the user cancelled
// it, make sure we report that the load is done.
didFinishLoad();
return;
}
AssetManager* am = globalAssetManager();
// Check to see if the error code was not generated internally
WebCore::PlatformBridge::rawResId id = WebCore::PlatformBridge::NoDomain;
if ((error.errorCode() == ErrorFile ||
error.errorCode() == ErrorFileNotFound) &&
(!error.localizedDescription().isEmpty())) {
id = WebCore::PlatformBridge::LoadError;
}
String filename = m_webFrame->getRawResourceFilename(id);
if (filename.isEmpty())
return;
// Grab the error page from the asset manager
Asset* a = am->openNonAsset(
filename.utf8().data(), Asset::ACCESS_BUFFER);
if (!a)
return;
// Take the failing url and encode html entities so javascript urls are not
// executed.
CString failingUrl = error.failingURL().utf8();
WTF::Vector<char> url;
int len = failingUrl.length();
const char* data = failingUrl.data();
for (int i = 0; i < len; i++) {
char c = data[i];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|| (c >= '0' && c <= '9'))
url.append(c);
else {
char buf[16];
int res = sprintf(buf, "&#%d;", c);
buf[res] = 0;
url.append(buf, res);
}
}
// Replace all occurances of %s with the failing url.
String s = UTF8Encoding().decode((const char*)a->getBuffer(false), a->getLength());
// samsung shkim
// \frameworks\base\core\res\res\raw-XX\nodomain.html or loaderror.html
// These error pages does not have <viewport> tag, it is loaded as low zoom scale
if( s.contains( "viewport" ) == false )
s = s.replace( "<head>", "<head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"/>" );
s = s.replace("%s", String(url.data(), url.size()));
// Replace all occurances of %e with the error text
s = s.replace("%e", error.localizedDescription());
// Create the request and the substitute data and tell the FrameLoader to
// load with the replacement data.
// use KURL(const char*) as KURL(const String& url) can trigger ASSERT for
// invalidate URL string.
loadDataIntoFrame(m_frame, KURL(ParsedURLString, data), error.failingURL(), s);
// Delete the asset.
delete a;
}
示例3: doDump
int doDump(Bundle* bundle)
{
status_t result = UNKNOWN_ERROR;
if (bundle->getFileSpecCount() < 1) {
fprintf(stderr, "ERROR: no dump option specified\n");
return 1;
}
if (bundle->getFileSpecCount() < 2) {
fprintf(stderr, "ERROR: no dump file specified\n");
return 1;
}
const char* option = bundle->getFileSpecEntry(0);
const char* filename = bundle->getFileSpecEntry(1);
AssetManager assets;
int32_t assetsCookie;
if (!assets.addAssetPath(String8(filename), &assetsCookie)) {
fprintf(stderr, "ERROR: dump failed because assets could not be loaded\n");
return 1;
}
// Make a dummy config for retrieving resources... we need to supply
// non-default values for some configs so that we can retrieve resources
// in the app that don't have a default. The most important of these is
// the API version because key resources like icons will have an implicit
// version if they are using newer config types like density.
ResTable_config config;
memset(&config, 0, sizeof(ResTable_config));
config.language[0] = 'e';
config.language[1] = 'n';
config.country[0] = 'U';
config.country[1] = 'S';
config.orientation = ResTable_config::ORIENTATION_PORT;
config.density = ResTable_config::DENSITY_MEDIUM;
config.sdkVersion = 10000; // Very high.
config.screenWidthDp = 320;
config.screenHeightDp = 480;
config.smallestScreenWidthDp = 320;
config.screenLayout |= ResTable_config::SCREENSIZE_NORMAL;
assets.setConfiguration(config);
const ResTable& res = assets.getResources(false);
if (res.getError() != NO_ERROR) {
fprintf(stderr, "ERROR: dump failed because the resource table is invalid/corrupt.\n");
return 1;
}
// The dynamicRefTable can be null if there are no resources for this asset cookie.
// This fine.
const DynamicRefTable* dynamicRefTable = res.getDynamicRefTableForCookie(assetsCookie);
Asset* asset = NULL;
if (strcmp("resources", option) == 0) {
#ifndef __ANDROID__
res.print(bundle->getValues());
#endif
} else if (strcmp("strings", option) == 0) {
const ResStringPool* pool = res.getTableStringBlock(0);
printStringPool(pool);
} else if (strcmp("xmltree", option) == 0) {
if (bundle->getFileSpecCount() < 3) {
fprintf(stderr, "ERROR: no dump xmltree resource file specified\n");
goto bail;
}
for (int i=2; i<bundle->getFileSpecCount(); i++) {
const char* resname = bundle->getFileSpecEntry(i);
ResXMLTree tree(dynamicRefTable);
asset = assets.openNonAsset(assetsCookie, resname, Asset::ACCESS_BUFFER);
if (asset == NULL) {
fprintf(stderr, "ERROR: dump failed because resource %s found\n", resname);
goto bail;
}
if (tree.setTo(asset->getBuffer(true),
asset->getLength()) != NO_ERROR) {
fprintf(stderr, "ERROR: Resource %s is corrupt\n", resname);
goto bail;
}
tree.restart();
printXMLBlock(&tree);
tree.uninit();
delete asset;
asset = NULL;
}
} else if (strcmp("xmlstrings", option) == 0) {
if (bundle->getFileSpecCount() < 3) {
fprintf(stderr, "ERROR: no dump xmltree resource file specified\n");
goto bail;
}
for (int i=2; i<bundle->getFileSpecCount(); i++) {
const char* resname = bundle->getFileSpecEntry(i);
//.........这里部分代码省略.........
示例4: tag
Vector<String8> getNfcAidCategories(AssetManager& assets, String8 xmlPath, bool offHost,
String8 *outError = NULL)
{
Asset* aidAsset = assets.openNonAsset(xmlPath, Asset::ACCESS_BUFFER);
if (aidAsset == NULL) {
if (outError != NULL) *outError = "xml resource does not exist";
return Vector<String8>();
}
const String8 serviceTagName(offHost ? "offhost-apdu-service" : "host-apdu-service");
bool withinApduService = false;
Vector<String8> categories;
String8 error;
ResXMLTree tree;
tree.setTo(aidAsset->getBuffer(true), aidAsset->getLength());
size_t len;
int depth = 0;
ResXMLTree::event_code_t code;
while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
if (code == ResXMLTree::END_TAG) {
depth--;
const char16_t* ctag16 = tree.getElementName(&len);
if (ctag16 == NULL) {
*outError = "failed to get XML element name (bad string pool)";
return Vector<String8>();
}
String8 tag(ctag16);
if (depth == 0 && tag == serviceTagName) {
withinApduService = false;
}
} else if (code == ResXMLTree::START_TAG) {
depth++;
const char16_t* ctag16 = tree.getElementName(&len);
if (ctag16 == NULL) {
*outError = "failed to get XML element name (bad string pool)";
return Vector<String8>();
}
String8 tag(ctag16);
if (depth == 1) {
if (tag == serviceTagName) {
withinApduService = true;
}
} else if (depth == 2 && withinApduService) {
if (tag == "aid-group") {
String8 category = AaptXml::getAttribute(tree, CATEGORY_ATTR, &error);
if (error != "") {
if (outError != NULL) *outError = error;
return Vector<String8>();
}
categories.add(category);
}
}
}
}
aidAsset->close();
return categories;
}
示例5: getAppInfo
static bool getAppInfo(const String8& path, AppInfo& outInfo) {
memset(&outInfo, 0, sizeof(outInfo));
AssetManager assetManager;
int32_t cookie = 0;
if (!assetManager.addAssetPath(path, &cookie)) {
return false;
}
Asset* asset = assetManager.openNonAsset(cookie, "AndroidManifest.xml", Asset::ACCESS_BUFFER);
if (asset == NULL) {
return false;
}
ResXMLTree xml;
if (xml.setTo(asset->getBuffer(true), asset->getLength(), false) != NO_ERROR) {
delete asset;
return false;
}
const String16 kAndroidNamespace("http://schemas.android.com/apk/res/android");
const String16 kManifestTag("manifest");
const String16 kApplicationTag("application");
const String16 kUsesSdkTag("uses-sdk");
const String16 kVersionCodeAttr("versionCode");
const String16 kMultiArchAttr("multiArch");
const String16 kMinSdkVersionAttr("minSdkVersion");
ResXMLParser::event_code_t event;
while ((event = xml.next()) != ResXMLParser::BAD_DOCUMENT &&
event != ResXMLParser::END_DOCUMENT) {
if (event != ResXMLParser::START_TAG) {
continue;
}
size_t len;
const char16_t* name = xml.getElementName(&len);
String16 name16(name, len);
if (name16 == kManifestTag) {
ssize_t idx = xml.indexOfAttribute(
kAndroidNamespace.string(), kAndroidNamespace.size(),
kVersionCodeAttr.string(), kVersionCodeAttr.size());
if (idx >= 0) {
outInfo.versionCode = xml.getAttributeData(idx);
}
} else if (name16 == kApplicationTag) {
ssize_t idx = xml.indexOfAttribute(
kAndroidNamespace.string(), kAndroidNamespace.size(),
kMultiArchAttr.string(), kMultiArchAttr.size());
if (idx >= 0) {
outInfo.multiArch = xml.getAttributeData(idx) != 0;
}
} else if (name16 == kUsesSdkTag) {
ssize_t idx = xml.indexOfAttribute(
kAndroidNamespace.string(), kAndroidNamespace.size(),
kMinSdkVersionAttr.string(), kMinSdkVersionAttr.size());
if (idx >= 0) {
uint16_t type = xml.getAttributeDataType(idx);
if (type >= Res_value::TYPE_FIRST_INT && type <= Res_value::TYPE_LAST_INT) {
outInfo.minSdkVersion = xml.getAttributeData(idx);
} else if (type == Res_value::TYPE_STRING) {
String8 minSdk8(xml.getStrings().string8ObjectAt(idx));
char* endPtr;
int minSdk = strtol(minSdk8.string(), &endPtr, 10);
if (endPtr != minSdk8.string() + minSdk8.size()) {
fprintf(stderr, "warning: failed to parse android:minSdkVersion '%s'\n",
minSdk8.string());
} else {
outInfo.minSdkVersion = minSdk;
}
} else {
fprintf(stderr, "warning: unrecognized value for android:minSdkVersion.\n");
}
}
}
}
delete asset;
return true;
}