4

我正在尝试在 Android N 中为我的应用程序添加一个快速设置切换。快速磁贴显示,但单击时它不执行任何操作。触摸时我可以看到可见的反馈,所以我知道它正在识别点击,但点击时它没有做任何事情。

这是我的服务代码:

public class QuickSettingTileService extends TileService {

    public QuickSettingTileService()
    {
    }

    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startID)
    {
        //some setup code is here

        return START_STICKY;
    }

    @Override
    public void onClick()
    {
        Context context = getApplicationContext();

        Toast.makeText(context, "Quick Setting Clicked", Toast.LENGTH_SHORT).show();
        //Toggle code is here
    }
}

我的清单包含几乎直接从文档中复制的代码。只做了轻微的修改:

<service
    android:name=".QuickSettingTileService"
    android:label="@string/app_name"
    android:icon="@drawable/quick_toggle_off"
    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
    <intent-filter>
        <action android:name="android.service.quicksettings.action.QS_TILE" />
    </intent-filter>
</service>

该服务在打开应用程序时启动:

Intent serviceIntent = new Intent(this, QuickSettingTileService.class);
startService(serviceIntent);
4

1 回答 1

7

只需从 QuickSettingTileService 类中删除这些行

@Override
public IBinder onBind(Intent intent)
{
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startID)
{
    //some setup code is here
    return START_STICKY;
}

无需在 TileService 上覆盖 onBind() 或 onStartCommand()。

此外,您不需要显式启动此服务。清单中的权限和意图过滤器将确保当您的磁贴添加到通知栏时 Android 操作系统将启动您的服务。

于 2016-03-24T01:36:10.160 回答