ProgressBarを含むウィジェットを作成しています。ウィジェットがコンピューティングを行っている場合は、その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を介してアクセスできないため、同じことはできませんでした。アクセス可能かどうかを知る方法は?