實現效果:
其實很簡單,實現過程:
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裏面註冊服務:
<service android:name=".MyTileService"
android:label="朗讀懸浮窗"
android:icon="@drawable/isay_icon"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
</service>
說明:
圖標需要一個白色前景+透明背景的圖標,它自動會給你設置開關顏色。Title多餘18個字符會被截斷
可以在程序中的其他地方調用TileService.requestListeningState() 來觸發 onStartListening函數
如果想要一開始就是打開狀態,可以將Tile的Mode改爲主動模式:
<service> ... <meta-data android:name="android.service.quicksettings.ACTIVE_TILE" android:value="true" /> </service>
在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可通過綁定服務進行交互,也可使用廣播做交互。
完。