2015-06-16 5 views
0

Сперва я должен извиниться, если код ниже выглядит ужасным и не отформатирован правильно. Я мало что знаю о программировании, поэтому я взял кусочки программ из разных источников и просто собрал их.Как показывать значения в одном и том же текстовом поле?

В приложении Я хотел бы отображать частоту (используя метод пересечения нуля) звука с микрофона телефона. Когда я запускаю приложение, он показывает частоту один раз, но не обновляет ее.

1) Можете ли вы помочь мне найти решение для одновременного отображения значений частоты в том же текстовом поле (или в более подходящем виджете на экране)?

* 2) Можно ли сделать это приложение без кнопок. Я имею в виду, что приложение показывает частоту сразу после ее запуска? * SOLVED

Спасибо!

package alar.alar.com.frequencyFreq; 

import android.app.Activity; 
import android.media.AudioFormat; 
import android.media.AudioRecord; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.widget.TextView; 


public class MainActivity extends Activity { 
    private static final int RECORDER_SAMPLERATE = 8000; 
    private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; 
    private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; 
    public AudioRecord recorder = null; 
    int numCrossing, p; 
    short audioData[]; 
    public int frequency; 
    public boolean recording; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, 
       RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING); 

     recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
       RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize); 

     recorder.startRecording(); 
     recording = true; 
     audioData = new short[bufferSize]; 
      recorder.read(audioData, 0, bufferSize); 
      numCrossing = 0; 

      for (p = 0; p < bufferSize - 1; p++) { 
       if ((audioData[p] > 0 && audioData[p + 1] <= 0) || 
         (audioData[p] < 0 && audioData[p + 1] >= 0)) { 
        numCrossing++; 
       } 
      } 

      frequency = (8000/bufferSize) * (numCrossing/2); 

      TextView textView = (TextView) this.findViewById(R.id.textView); 
      textView.setText(String.valueOf(frequency)); 

     }//onCreate 
    }//activity 
+0

для кнопок вопрос, вызовите метод startRecording в OnCreate, надеюсь, что это помогает –

+0

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

+0

Спасибо, Андреа! Вопрос с кнопками я решил, поэтому я обновил код. – AlarMa

ответ

0

попробовать этот

private Timer timer; 
private TimerTask timerTask; 
public void onPause(){ super.onPause(); 
timer.cancel(); 
} public void onResume(){ 
super.onResume(); 
try { 
timer = new Timer(); timerTask = new TimerTask() { 
@Override 
public void run() { 
//your method } 
}; 
timer.schedule(timerTask, 1000, 1000); } catch (IllegalStateException e){ android.util.Log.i("Damn", "resume error"); } } 
Смежные вопросы