bslwjf2 发表于 2026-4-18 13:09:10

请问TileService类该怎么继承

我想写一个带消息栏快捷开关的app,网上查到Android studio的写法,需要继承一个TileService类。请问在火山安卓里该怎么写?


package com.volcano.tileapp;


import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;


/**
* 火山安卓任务栏快捷开关服务
* 需继承 TileService 并实现相关生命周期方法
*/
public class MyTileService extends TileService {


    private static final String TAG = "VolcanoTile";
    // 定义一个静态变量或SharedPreferences来存储状态,这里简化为内存状态
    // 实际应用中建议使用 SharedPreferences 持久化状态
    private static boolean isFeatureOn = false;


    /**
   * 当用户点击快捷开关时触发
   */
    @Override
    public void onClick() {
      super.onClick();
      Log.d(TAG, "Tile clicked");


      // 切换状态
      isFeatureOn = !isFeatureOn;


      // 执行具体业务逻辑
      if (isFeatureOn) {
            performEnableAction();
      } else {
            performDisableAction();
      }


      // 更新快捷开关的UI状态
      updateTileState();
      
      // 可选:发送广播通知主应用状态改变
      sendStatusBroadcast();
    }


    /**
   * 当快捷开关被添加到面板并开始监听时触发
   * 用于初始化或同步状态
   */
    @Override
    public void onStartListening() {
      super.onStartListening();
      Log.d(TAG, "Start listening");
      updateTileState();
    }


    /**
   * 当快捷开关停止监听时触发
   */
    @Override
    public void onStopListening() {
      super.onStopListening();
      Log.d(TAG, "Stop listening");
    }


    /**
   * 更新快捷开关的显示状态(图标、标签、激活状态)
   */
    private void updateTileState() {
      Tile tile = getQsTile();
      if (tile != null) {
            if (isFeatureOn) {
                tile.setState(Tile.STATE_ACTIVE);
                tile.setLabel("已开启");
                // tile.setIcon(Icon.createWithResource(this, R.drawable.ic_on)); // 如有不同图标可设置
            } else {
                tile.setState(Tile.STATE_INACTIVE);
                tile.setLabel("已关闭");
                // tile.setIcon(Icon.createWithResource(this, R.drawable.ic_off));
            }
            tile.updateTile();
      }
    }


    /**
   * 开启功能的业务逻辑
   */
    private void performEnableAction() {
      Log.d(TAG, "Feature Enabled");
      // 在此处添加具体功能代码,例如:
      // 1. 启动后台服务
      // 2. 修改系统设置(需要相应权限)
      // 3. 发送广播给主Activity
    }


    /**
   * 关闭功能的业务逻辑
   */
    private void performDisableAction() {
      Log.d(TAG, "Feature Disabled");
      // 在此处添加关闭功能的代码
    }


    /**
   * 发送状态变更广播,以便主应用界面同步更新
   */
    private void sendStatusBroadcast() {
      Intent intent = new Intent("com.volcano.tileapp.ACTION_TILE_STATE_CHANGED");
      intent.putExtra("is_on", isFeatureOn);
      sendBroadcast(intent);
    }
}


创世魂 发表于 2026-4-18 21:47:48

TileService 没有封装

bslwjf2 发表于 2026-4-19 10:01:51

创世魂 发表于 2026-4-18 21:47
TileService 没有封装

请问那该怎么办呢
页: [1]
查看完整版本: 请问TileService类该怎么继承