更新时间:2016-04-15
想了很久还是觉得这个并没有什么卵用,应该应用于静态展示吧,作者是将这个直接贴在镜子后面,还是先贴张图吧
总的来说就是将读取各个模块的信息并显示到屏幕上,而这个屏幕又是常亮的。
使用了好几个模块,大同小异,这里就只拿 XKCDModule 模块(也就是控制上面漫画的显示)举个例子
@Override
protected XKCDResponse doInBackground(Void... params) {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://xkcd.com")
.build();
XKCDRequest service = restAdapter.create(XKCDRequest.class);
try {
return service.getLatestXKCD();
} catch (RetrofitError e) {
Log.w("XKCDModule", "Error loading xkcd", e);
return null;
}
}
public interface XKCDRequest {
@GET("/info.0.json")
XKCDResponse getLatestXKCD();
}
public class XKCDResponse {
public int day;
public int month;
public int year;
public String img;
}
private XKCDModule.XKCDListener mXKCDListener = new XKCDModule.XKCDListener() {
@Override
public void onNewXKCDToday(String url) {
if (TextUtils.isEmpty(url)) {
mXKCDImage.setVisibility(View.GONE);
} else {
Picasso.with(MirrorActivity.this).load(url).into(mXKCDImage);
mXKCDImage.setVisibility(View.VISIBLE);
}
}
};
在 onCreate() 中设置全屏
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_IMMERSIVE;
decorView.setSystemUiVisibility(uiOptions);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
}
// 设置常亮
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setViewState();
读取设置项,控制是否显示 Module
private void setViewState() {
//...
if (mConfigSettings.showXKCD()) {
XKCDModule.getXKCDForToday(mXKCDListener);
} else {
mXKCDImage.setVisibility(View.GONE);
}
//...
}
这里顺便提一下这个 onNewIntent,因为这里的 launchMode 设为 singleInstance,所以重新启动 Activity 时的流程是: onNewIntent -> onRestart -> onStart -> onResume,不是创建一个新的实例那样 onCreate -> onStart…
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setViewState();
}
这个项目使用了一些开源库:Twitter 家的 Fabric 的 crashlytics,Square 家的 retrofit 和 picasso, 以及 com.github.ahorn:android-rss (用于处理 RSS 中的信息),看了下使用,也算是一种收获吧