gpt4 book ai didi

android - 如何使用 Codename One 测试 Android native 代码 fragment ?

转载 作者:行者123 更新时间:2023-11-30 00:54:11 28 4
gpt4 key购买 nike

首先,我习惯使用 Java 编程,这就是我使用 Codename One 开发移动应用程序的原因。

但是有时我会看到一些我对测试感兴趣的 Android“格式”代码。感谢Codename one tutorial,我知道如何设置基本的 native 界面.

例如,我想测试这个snippet about real time sound processing .然而,它涉及使用此方法中可用的数据初始化 Android onCreate() 方法中的一些变量,例如 am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 使用 this,它在 Codename One Native Interface 中没有相同的引用。也许我不必使用 onCreate() 方法(可能是 be reached from Codename One )但我不是 Android 专家(也不是 CN1 专家!),所以我不知道。

因此,我必须进行哪些更改才能在 Codename One 原生界面中测试原生 Android 代码?也许有一种方法我会很高兴听到。

已解决编辑:在有效的 native 接口(interface)实现中使用的代码

这是 original Android code 的 Codename One native 接口(interface)实现.确实Android的onCreate()方法没有被使用,但是里面初始化的东西已经转移到initRecordAndTrack()方法里面了,这个方法在代号One的合适的时候调用形式。它使用与@akash 下文所述相同的方法,因此将 this 替换为 com.codename1.impl.android.AndroidNativeUtil.getActivity()

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.media.MediaPlayer;
import android.content.Context;

public class KestudisNativeInterfaceImpl {

boolean isRecording = false;
AudioManager am = null;
AudioRecord record = null;
AudioTrack track = null;

public void initRecordAndTrack() {
android.app.Activity ctx = com.codename1.impl.android.AndroidNativeUtil.getActivity();

am = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(true);
int min = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
record = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
min);
// if (AcousticEchoCanceler.isAvailable())
// {
// AcousticEchoCanceler echoCancler = AcousticEchoCanceler.create(record.getAudioSessionId());
// echoCancler.setEnabled(true);
// }
int maxJitter = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
track = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, 8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, maxJitter,
AudioTrack.MODE_STREAM);

(new Thread() {
@Override
public void run() {
recordAndPlay();
}
}).start();
}

public void startRecordAndPlay() {
record.startRecording();
track.play();
isRecording = true;
}

public void stopRecordAndPlay() {
record.stop();
track.pause();
isRecording = false;
}

private void recordAndPlay() {
short[] lin = new short[1024];
int num = 0;
am.setMode(AudioManager.MODE_IN_COMMUNICATION);
while (true) {
if (isRecording) {
num = record.read(lin, 0, 1024);
track.write(lin, 0, num);
}
}
}

public boolean isSupported() {
return true;
}

非常感谢,

干杯

最佳答案

看看这个链接 https://www.codenameone.com/how-do-i---access-native-device-functionality-invoke-native-interfaces.html

在 android 中 this 通常引用上下文并访问 CN1 中的上下文,您可以将 this 替换为 com.codename1.impl.android.AndroidNativeUtil.getActivity( )

希望对你有帮助

关于android - 如何使用 Codename One 测试 Android native 代码 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com