由于这个问题(Using static methods in Android?)已经得到解答,我还有另外一个案例,我不确定使用静态方法是否有效。
在名为SettingsActivity的Acitivty中,我有一个名为finishActivityWithResultOkey()的方法:
public void finishActivityWithResultOkey() {
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
MyWidgetProvider.setSharedPreferences();
MyWidgetProvider.startScreenReciever();
MyWidgetProvider.startClockTickAlarm(false);
context.setResult(RESULT_OK, resultValue);
context.finish();
}
在我完成SettingsActivity之前,我在另一个扩展AppWidgetProvider的类中调用了这3个STATIC方法:
public void setSharedPreferences() {
db = new SharedPreferencesDatabase(PreferenceManager.getDefaultSharedPreferences(_context));
}
public static void startScreenReciever() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
screenReciever = new ScreenReceiver();
_context.getApplicationContext().registerReceiver(screenReciever, filter);
}
public static void startClockTickAlarm(boolean code) {
AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALARM_SERVICE);
long duration;
if(code)
duration = utcMillisNextMin();
else
duration = utcMillisNextSec();
if(android.os.Build.VERSION.SDK_INT < 19) {
alarmManager.set(AlarmManager.RTC, duration, createClockTickIntent());
} else {
alarmManager.setExact(AlarmManager.RTC, duration, createClockTickIntent());
}
}
我想知道是否真的需要那些静态方法,或者是否有另一种更好的方法来实现这一点而不使用静态方法
答案 0 :(得分:3)
AppWidgetProvider扩展了BroadcastReceiver,因此您只需发送意图即可执行所需的操作。
窗口小部件:
FinishActivity() {
setSharedPreferences();
startScreenReciever();
startClockTickAlarm(false);
}
向窗口小部件添加onRecieve以读取intent并调用FinishActivity()。活动将是创建和发送Intent的活动。可能看起来像这样:
Intent uiIntent = new Intent(Constants.ACTION_WIDGET_FINISH_FROM_ACTIVITY);
context.sendBroadcast(uiIntent);