Android7.0快捷圖標:Quick Settings Tile

實現效果:

  

其實很簡單,實現過程:

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可通過綁定服務進行交互,也可使用廣播做交互。

完。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章