Pergunta

Então, estou tentando simular que o telefone está recebendo uma ligação. Eu extraí com sucesso o toque de telefones e toquei. Agora eu quero simular a vibração. Embora eu possa fazer o telefone vibrar, quero imitar o padrão exato com o qual o telefone vibra como quando recebe uma chamada. Existe alguma configuração ou classe que eu possa usar para extrair esse padrão e também detectar se a vibração está ligada?

Foi útil?

Solução

Você tem que vibrar em um padrão.

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);  

// 1. Vibrate for 1000 milliseconds  
long milliseconds = 1000;  
v.vibrate(milliseconds);  

// 2. Vibrate in a Pattern with 500ms on, 500ms off for 5 times  
long[] pattern = { 500, 300 };  
v.vibrate(pattern, 5);

http://www.androidsnippets.org/snippets/22/

Não tenho certeza de qual padrão é usado como padrão, você provavelmente pode encontrá -lo na fonte, ou então continue tentando diferentes padrões até que seja satisfatório.

Outras dicas

Por que não usar a fonte do Android para ver como eles fazem isso?

A fonte do aplicativo de telefone está disponível em
https://android.googlesource.com/platform/packages/apps/phone

Parece que não há classe que possa fornecer configurações de vibração 'Standart' para a chamada recebida. Como a maioria dos telefones vem com aplicativos personalizados de chamadores de fornecedores e, como existem muitos aplicativos de chamadas personalizados no Google Play, esse padrão 'Standart' provavelmente nem existe.

O aplicativo Standart Caller da AOSP usa esse padrão:

private static final int VIBRATE_LENGTH = 1000; // ms
private static final int PAUSE_LENGTH = 1000; // ms

E para detectar se a vibração está ligada:

boolean shouldVibrate() {
    AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
    int ringerMode = audioManager.getRingerMode();
    if (Settings.System.getInt(mContext.getContentResolver(), "vibrate_when_ringing", 0) > 0) {
        return ringerMode != AudioManager.RINGER_MODE_SILENT;
    } else {
        return ringerMode == AudioManager.RINGER_MODE_VIBRATE;
    }
}

Isso se baseia nas configurações "vibrar enquanto tocar" e "modo de som" que você pode encontrar nas configurações do telefone Standart.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top