Preciso adicionar um recurso de agitação que atualizará meu aplicativo Android.
Tudo o que eu acho da documentação envolve a implementação do SensorListener
, mas o Eclipse me diz que está obsoleto e sugereSensorEventListener
.
Alguém que tenha um bom guia sobre como eu crio isso shake controller
?
android
accelerometer
shake
Sara
fonte
fonte
Respostas:
Aqui está um código de exemplo. Coloque isso em sua classe de atividades:
E adicione isso ao seu método onCreate:
Em seguida, você pode solicitar ao "mAccel" onde quer que você aplique a aceleração atual, independente do eixo e limpa da aceleração estática, como a gravidade. Será aprox. 0 se não houver movimento e, digamos> 2, se o dispositivo estiver sacudido.
Com base nos comentários - para testar isso:
Notas:
O acelerômetro deve ser desativado em Pausa e ativado em Continuar para economizar recursos (CPU, Bateria). O código assume que estamos no planeta Terra ;-) e inicializa a aceleração para a gravidade da Terra. Caso contrário, você receberá um forte "shake" quando o aplicativo iniciar e "atingir" o chão em queda livre. No entanto, o código se acostuma à gravitação devido ao filtro de corte baixo e funcionaria também em outros planetas ou no espaço livre, uma vez inicializado. (você nunca sabe quanto tempo seu aplicativo estará em uso ... ;-)
fonte
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
deveria sermAccel = mAccel * 0.9f + delta * 0.1f; // perform low-cut filter
?Calendar last = Calendar.getInstance(); Calendar now = Calendar.getInstance(); last.setTime(last_date); now.setTime(new Date()); long diff = now.getTimeInMillis() - last.getTimeInMillis(); if(diff >= 750) { ... }
nomes dos métodos devem estar corretos (não tenho o código comigo ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
em vez de evitar uma conversAqui está o meu código para detecção de gestos de agitação:
Adicione isso em sua atividade:
...
em onCreate () adicione:
e:
fonte
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
de onCreate (). Caso contrário, funciona maravilhosamente! Obrigado!Aqui está mais uma implementação que se baseia em algumas dicas aqui, bem como no código do site de desenvolvedor do Android.
MainActivity.java
ShakeDetector.java
fonte
DoShake()
função?Gostei muito da resposta de Peterdk. Eu decidi fazer um par de ajustes no código dele.
arquivo: ShakeDetector.java
Além disso, não esqueça que você precisa registrar uma instância do ShakeDetector no SensorManager.
fonte
SHAKE_THRESHOLD_GRAVITY
para 1.7F para impedir que os leitores pensem que esta resposta não funciona porque eles precisam tremer bastante devido ao valor definido como 2.7F .count
variável no onShake informa quantas vezes o dispositivo foi abaladaSystemClock.elapsedRealtime()
e nãoSystem.currentTimeMillis()
inicializaria o mShakeTimestamp com o mesmo método e não com 0Estou desenvolvendo um aplicativo de detecção de movimento e detecção de vibração para o meu projeto da universidade.
Além do destino original do aplicativo, estou dividindo a parte da biblioteca (responsável pela detecção de movimento e trepidação) do aplicativo. O código é gratuito, disponível no SourceForge com o nome do projeto "BenderCatch". A documentação que estou produzindo estará pronta em meados de setembro. http://sf.net/projects/bendercatch
Ele usa uma maneira mais precisa de detectar trepidação: observa a diferença de força entre SensorEvents AND as oscilações presentes nos eixos X e Y ao executar uma trepidação. Pode até emitir um som (ou vibrar) a cada oscilação do movimento.
Sinta-se à vontade para me perguntar mais por e-mail em raffaele [at] terzigno [dot] com
fonte
Eu escrevi um pequeno exemplo para detectar agitações verticais e horizontais e mostrar a
Toast
.fonte
Você pode usar sísmica . Um exemplo pode ser encontrado aqui .
fonte
Eu tentei várias implementações, mas gostaria de compartilhar as minhas. Ele usa
G-force
como unidade para o cálculo do limite. Torna um pouco mais fácil entender o que está acontecendo e também definir um bom limite.Ele simplesmente registra um aumento na força G e aciona o ouvinte se ele exceder o limite. Ele não usa limites de direção, porque você realmente não precisa disso, se quiser apenas registrar uma boa vibração.
Claro que você precisa do registro padrão e do registro UN deste ouvinte no
Activity
.Além disso, para verificar qual limite você precisa, recomendo o seguinte aplicativo (não estou de forma alguma conectado a esse aplicativo)
fonte
Aqui está outro código para isso:
fonte
fonte
fonte
Shaker.java
MainActivity.java
Diverta-se.
fonte
fonte
Você deve se inscrever como
SensorEventListener
e obter osaccelerometer
dados. Depois de ter, você deve monitorar a mudança repentina na direção (sinal) da aceleração em um determinado eixo. Seria uma boa indicação para o'shake'
movimento do dispositivo.fonte
Trabalhando comigo v.good Referência
fonte
Você pode tentar o tinybus de código aberto . Com isso, a detecção de vibração é tão fácil quanto isso.
Ele usa sísmica para detecção de vibração.
fonte