我修改了Jens從上面回答,因爲如評論中所述,name永遠不會爲空,而是拋出異常。
private boolean isResourceIdInPackage(String packageName, int resId){
if(packageName == null || resId == 0){
return false;
}
Resources res = null;
if(packageName.equals(getPackageName())){
res = getResources();
}else{
try{
res = getPackageManager().getResourcesForApplication(packageName);
}catch(PackageManager.NameNotFoundException e){
Log.w(TAG, packageName + "does not contain " + resId + " ... " + e.getMessage());
}
}
if(res == null){
return false;
}
return isResourceIdInResources(res, resId);
}
private boolean isResourceIdInResources(Resources res, int resId){
try{
getResources().getResourceName(resId);
//Didn't catch so id is in res
return true;
}catch (Resources.NotFoundException e){
return false;
}
}
謝謝!這看起來有希望。我甚至沒有想過使用getResources。我會嘗試一下。 – Brandon 2012-04-29 16:59:35
@Brandon,你應該更新你的問題,如果你有更多東西要添加。看看你的編輯,雖然它會更好地回答你自己的問題! – Ben 2012-04-29 19:26:06
'name'永遠不會是'null'。相反,如果標識符無效,則'getResourceName()'將拋出'Resources.NotFoundException' – sfera 2014-02-01 18:12:56