Переключение быстрых настроек в Android N

Я пытаюсь добавить переключатель быстрых настроек в свое приложение в 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);

person Randy    schedule 23.03.2016    source источник
comment
Попробуйте войти в LogCat, а не использовать Toast.   -  person CommonsWare    schedule 24.03.2016


Ответы (1)


Просто удалите эти строки из класса 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;
}

Нет необходимости переопределять onBind() или onStartCommand() в TileService.

Кроме того, вам не нужно явно запускать эту службу. Разрешение и фильтр намерений в манифесте гарантируют, что ОС Android запустит вашу службу, когда ваша плитка будет добавлена ​​на панель уведомлений.

person murki    schedule 24.03.2016
comment
Вау, это было просто. Спасибо! Первоначально я получал ошибку без переопределения onBind, но я думаю, что в то время я по ошибке расширял Service вместо TileService. - person Randy; 24.03.2016
comment
Я рад, что это сработало. Пожалуйста, не забудьте отметить как ответ, чтобы это могло помочь другим людям. - person murki; 24.03.2016