Как вызвать функцию с закрытым экраном? [Дубликат]

У вас есть максимальное количество десятичных знаков, которые вам когда-либо понадобится для отображения? (Ваши примеры имеют максимум 5).

Если это так, я думаю, что форматирование с помощью «0. #####» будет делать то, что вы хотите.

    static void Main(string[] args)
    {
        var dList = new decimal[] { 20, 20.00m, 20.5m, 20.5000m, 20.125m, 20.12500m, 0.000m };

        foreach (var d in dList)
            Console.WriteLine(d.ToString("0.#####"));
    }
27
задан Brian 11 June 2010 в 05:39
поделиться

3 ответа

Насколько я знаю, KeyEvents могут обрабатываться только действиями, поскольку они являются интерфейсом для пользователя, нажимающего клавиши. Службы работают в фоновом режиме и не предназначены для реагирования на ввод пользователя. Это также является причиной предупреждения вашего компилятора «onKeyDown не определено для типа Service». Сервис или любой из его Суперклассов не реализуют интерфейс KeyEvent.Callback. В качестве обходного пути вы можете зарегистрировать Activity в своем AndroidManifest.xml, чтобы реагировать на определенные системные уведомления, такие как android.intent.action.SCREEN_ON. Когда кнопка питания нажата, чтобы включить экран, можно начать свою деятельность, инициализировав какую-либо услугу и вернитесь на задний план. Если это то, что вы намереваетесь сделать. См. Intent docs для возможных действий.

Надеюсь, что это помогло ...

16
ответ дан MarioB. 21 August 2018 в 18:56
поделиться

Пока невозможно прослушивать аппаратные нажатия клавиш непосредственно в службе, иногда вы можете прослушивать эффекты этих нажатий клавиш. Например, этот ответ описывает, как вывести нажатия клавиш громкости из-за изменений в громкости носителя.

0
ответ дан Community 21 August 2018 в 18:56
поделиться

Для этого требуется Lollipop (v5.0 / API 21) или выше, и он может только обнаруживать клавиши громкости

. Он отменяет действие клавиши громкости, поэтому использование его по всему миру может быть нежелательным.

public class VolumeKeyController {

    private MediaSessionCompat mMediaSession;
    private final Context mContext;

    public VolumeKeyController(Context context) {
        mContext = context;
    }

    private void createMediaSession() {
        mMediaSession = new MediaSessionCompat(mContext, KeyUtil.log);

        mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
                MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mMediaSession.setPlaybackState(new Builder()
                .setState(PlaybackStateCompat.STATE_PLAYING, 0, 0)
                .build());
        mMediaSession.setPlaybackToRemote(getVolumeProvider());
        mMediaSession.setActive(true);
    }

    private VolumeProviderCompat getVolumeProvider() {
        final AudioManager audio = mContext.getSystemService(Context.AUDIO_SERVICE);

        int STREAM_TYPE = AudioManager.STREAM_MUSIC;
        int currentVolume = audio.getStreamVolume(STREAM_TYPE);
        int maxVolume = audio.getStreamMaxVolume(STREAM_TYPE);
        final int VOLUME_UP = 1;
        final int VOLUME_DOWN = -1;

        return new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, maxVolume, currentVolume) {
            @Override
            public void onAdjustVolume(int direction) {
                // Up = 1, Down = -1, Release = 0
                // Replace with your action, if you don't want to adjust system volume
                if (direction == VOLUME_UP) {
                    audio.adjustStreamVolume(STREAM_TYPE,
                            AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
                }
                else if (direction == VOLUME_DOWN) {
                    audio.adjustStreamVolume(STREAM_TYPE,
                            AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
                }
                setCurrentVolume(audio.getStreamVolume(STREAM_TYPE));
            }
        };
    }

    // Call when control needed, add a call to constructor if needed immediately
    public void setActive(boolean active) {
        if (mMediaSession != null) {
            mMediaSession.setActive(active);
            return;
        }
        createMediaSession();
    }

    // Call from Service's onDestroy method
    public void destroy() {
        if (mMediaSession != null) {
            mMediaSession.release();
        }
    }
}
1
ответ дан Gibolt 21 August 2018 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: