实现倒计时功能(发送短信、启动页等待等)
void beginCountdown(int time) { //time 为需要执行的时间
if (time < 0) {
time = 0;
}
final int countTime = time;
Observable.interval(0, 1, TimeUnit.SECONDS) //0 initialDelay,表示0秒后执行,即立即执行;1 表示每隔1秒执行一次
.map(new Func1<Long, Integer>() {
@Override
public Integer call(Long increaseTime) {
return countTime - increaseTime.intValue(); //执行的次数
}
})
.take(countTime + 1) //每执行一次 countTime+1
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
// .compose(this.<Integer>bindToLifecycle()) //来自rxlifecycle,防止rxjava的内存泄漏
.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() { //全部执行完调用
mTvContent.setText("bye");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) { //每次执行完调用
mTvContent.setText("剩余 " + integer + "秒");
}
});
}
RxPermission
https://github.com/tbruyelle/RxPermissions
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.1@aar'
依赖于rxjava
通过rxpermission获取动态权限
new RxPermissions(this).request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
}
});
分别获取每条权限的状态:
即把request改为requestEach,通过permission.name/granted等获取名称等状态
new RxPermissions(this).requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe(new Action1<Permission>() {
@Override
public void call(Permission permission) {
if (permission.name.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
if (permission.granted) {
} else {
}
} else if ()
}
});