Android 如何在同一文本框中重复显示值?

Android 如何在同一文本框中重复显示值?,android,frequency-analysis,Android,Frequency Analysis,首先,如果下面的代码看起来很糟糕并且格式不正确,我应该道歉。我对编程了解不多,所以我从不同的来源收集了一些程序,然后把它们放在一起 在应用程序中,我想显示手机麦克风发出的声音的频率(使用过零法)。 当我运行应用程序时,它会显示一次频率,但不会更新 1) 您能帮我找到在同一文本框(或屏幕上更合适的小部件)中重复显示频率值的解决方案吗 *2) 是否可以使此应用程序不带按钮。我的意思是,应用程序在启动后立即显示频率?*已解决 谢谢大家! package alar.alar.com.frequencyF

首先,如果下面的代码看起来很糟糕并且格式不正确,我应该道歉。我对编程了解不多,所以我从不同的来源收集了一些程序,然后把它们放在一起

在应用程序中,我想显示手机麦克风发出的声音的频率(使用过零法)。 当我运行应用程序时,它会显示一次频率,但不会更新

1) 您能帮我找到在同一文本框(或屏幕上更合适的小部件)中重复显示频率值的解决方案吗

*2) 是否可以使此应用程序不带按钮。我的意思是,应用程序在启动后立即显示频率?*已解决

谢谢大家!

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
package alar.alar.com.frequencyFreq;
导入android.app.Activity;
导入android.media.AudioFormat;
导入android.media.AudioRecord;
导入android.media.MediaRecorder;
导入android.os.Bundle;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
专用静态最终积分记录仪\u采样器=8000;
专用静态最终整数记录器\u通道=单声道中的AudioFormat.CHANNEL\u;
专用静态最终整数记录器\u音频\u编码=AudioFormat.ENCODING\u PCM\u 16位;
公共录音机=空;
国际numCrossing,p;
短音频数据[];
公共int频率;
公共录音;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int bufferSize=AudioRecord.getMinBufferSize(记录器\u采样器,
录像机信道、录像机音频编码);
录音机=新的录音机(MediaRecorder.AudioSource.MIC,
录像机采样器、录像机通道、录像机音频编码、缓冲区大小);
记录器。开始记录();
记录=真;
audioData=新的短[缓冲区大小];
记录器。读取(音频数据,0,缓冲区大小);
numCrossing=0;
对于(p=0;p0&&audioData[p+1]=0)){
numCrossing++;
}
}
频率=(8000/缓冲区大小)*(numCrossing/2);
TextView TextView=(TextView)this.findViewById(R.id.TextView);
textView.setText(String.valueOf(frequency));
}//一次创建
}//活动
试试这个

    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"); } }

对于按钮问题,请在onCreate中调用startRecording方法,希望它能帮助您每秒更新应用程序,现在我无法编写代码,请每秒搜索更新android应用程序谢谢Andrea!按钮问题我解决了,所以我更新了代码。我尝试了这个应用程序更新的东西,但没有帮助,或者我用错了方法。似乎我需要某种循环,但我不确定在哪里。