实现效果:
其实很简单,实现过程:
1、写一个服务继承TileService,里面实现四个方法:
public class MyTileService extends TileService {
final String LOG_TAG = "MyTileService";
@Override
public void onTileAdded() {
//当用户从Edit栏添加到快速设置中调用
Log.d(LOG_TAG, "onTileAdded");
}
@Override
public void onTileRemoved() {
//当用户从快速设置栏中移除的时候调用
Log.d(LOG_TAG, "onTileRemoved");
}
@Override
public void onClick() {
// 点击的时候
Log.d(LOG_TAG, "onClick");
int state = getQsTile().getState();
if (state == Tile.STATE_INACTIVE) {
// 更改成非活跃状态 (还有一个参数:STATE_UNAVAILABLE 非可点击状态)
getQsTile().setState(Tile.STATE_ACTIVE);
} else {
//更改成活跃状态
getQsTile().setState(Tile.STATE_INACTIVE);
}
//可以点击设置图标,设置方式如下:
//Icon icon = Icon.createWithResource(getApplicationContext(), R.drawable.xxxx);
//getQsTile().setIcon(icon);
//设置label:
//getQsTile.setLabel("");
//更新Tile
getQsTile().updateTile();
}
@Override
public void onStartListening () {
// 打开下拉通知栏的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
//在TleAdded之后会调用一次
Log.d(LOG_TAG, "onStartListening");
}
@Override
public void onStopListening () {
// 关闭下拉通知栏的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
// 在onTileRemoved移除之前也会调用移除
Log.d(LOG_TAG, "onStopListening");
}
}
2、AndroidManifest.xml里面注册服务:
说明:
图标需要一个白色前景+透明背景的图标,它自动会给你设置开关颜色。Title多余18个字符会被截断
可以在程序中的其他地方调用TileService.requestListeningState() 来触发 onStartListening函数
如果想要一开始就是打开状态,可以将Tile的Mode改为主动模式:
...
在OnClick() 中,我们可以在UI线程上处理业务逻辑,耗时操作请交给另一个线程或IntentService执行。
其中我们可以开启Dialog或通过startActivityAndCollapse()开启一个Actvitiy。
但是在锁屏,也就是isLocked()返回true时,将不能打开Dialog,而Activity则需要增加FLAG_SHOW_WHEN_LOCKED这个Flag。
我们也可以使用unlockAndRun(Runnable) 来异步设置用户解锁后的工作。
用户长按Tile会默认打开app的app info页面,我们可以给Activity加上ACTION_QS_TILE_PREFERENCES 来重载此行为。
此Service与其他Service可通过绑定服务进行交互,也可使用广播做交互。
完。