我正在构建一个包含 ProgressBar 的小部件。如果 Widget 正在计算,我将 ProgressBar 的可见性设置为VISIBLE
,INVISIBILE
如果所有计算都停止,则设置为 。应该没有问题,因为它setVisibility
被记录为 RemotableViewMethod
. 然而,HTC 的一些人似乎忘记了它,(即在 Wildfire S 上),因此调用RemoteViews.setVisibility
将导致崩溃。出于这个原因,我尝试实施检查,如果setVisibility
真的可以调用。我为它写了这个方法:
private boolean canShowProgress(){
LogCat.d(TAG, "canShowProgress");
Class<ProgressBar> barclz = ProgressBar.class;
try {
Method method = barclz.getMethod("setVisibility", new Class[]{int.class});
Annotation[] anot = method.getDeclaredAnnotations();
return anot.length > 0;
} catch (SecurityException e) {
LogCat.stackTrace(TAG, e);
} catch (NoSuchMethodException e) {
LogCat.stackTrace(TAG, e);
}
return false;
}
这会起作用,但真的很难看,因为如果存在任何注释,它将返回“True” 。我看了看,RemoteView 本身是如何进行查找的,发现了这个:
if (!method.isAnnotationPresent(RemotableViewMethod.class)) {
throw new ActionException("view: " + klass.getName()
+ " can't use method with RemoteViews: "
+ this.methodName + "(" + param.getName() + ")");
}
但我不能这样做,因为类RemotableViewMethod
不能通过 sdk 访问。如何知道它是否可以访问?