我想将 MainActivity 的函数run_voice()
放在我的班级 TypingDialogFragment 上,但它不起作用:
非静态方法'run_voice'不能从静态上下文引用
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
Home1=(ImageView)findViewById(R.id.home);
Voice1=(ImageView)findViewById(R.id.voice);
Scan1=(ImageView)findViewById(R.id.scan);
frequence_text=(TextView)findViewById(R.id.frequence_text);
command_text=(TextView)findViewById(R.id.command_text);
gain_text=(TextView) findViewById(R.id.gain_text);
body = (TextView)findViewById(R.id.body);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab_frequence = (FloatingActionButton) findViewById(R.id.freq_value);
fab_gain = (FloatingActionButton) findViewById(R.id.gain_value);
send_voice = (ImageButton) findViewById(R.id.send_voice1);
send_voice2 = (ImageView) findViewById(R.id.send_voice3);
myChrono=(Chronometer) findViewById(R.id.chronometer);
progressBar=(ProgressBar) findViewById(R.id.progressBar);
body.setMovementMethod(new ScrollingMovementMethod());
setSupportActionBar(toolbar);
OUTPUT_FILE= Environment.getExternalStorageDirectory()+ "/audiorecord.wav";
outFile=new File (OUTPUT_FILE);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
type = 1;
showCmdLineDialog(type,run_voice);
}
});
fab_frequence.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
type = 2;
showCmdLineDialog(type,run_voice);
}
});
fab_gain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
type = 3;
showCmdLineDialog(type,run_voice);
}
});
display_mediaplayer_false();
display_floatbutton_false();
success1=0;
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)){
Toast.makeText(this, "FEATURE_BLUETOOTH NOT support", Toast.LENGTH_LONG).show();
finish();
return;
}
//using the well-known SPP UUID
myUUID = UUID.fromString(UUID_STRING_WELL_KNOWN_SPP);
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth is not supported on this hardware platform", Toast.LENGTH_LONG).show();
finish();
return;
}
Home1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(success1==1)
{
display_mediaplayer_false();
display_floatbutton_true();
}
}
});
Voice1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(success1==1) {
display_floatbutton_false();
display_mediaplayer_true();
}
}
});
Scan1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(success1==1) {
display_floatbutton_false();
display_mediaplayer_false();
}
}
});
send_voice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
run_voice(); // FUNCTION RUN VOICE
}
});
}
我的函数run_voice:
public void run_voice()
{
try {
if (color==0)
{
send_voice.setColorFilter(Color.RED);
beginRecording();
progressBar.setVisibility(View.VISIBLE);
myChrono.setBase(SystemClock.elapsedRealtime());
myChrono.start();
color1=1;
run_voice=1;
}
if (color==1)
{
send_voice.setColorFilter(Color.BLACK);
progressBar.setVisibility(View.INVISIBLE);
stopRecording();
myChrono.stop();
color1=0;
run_voice=0;
}
color=color1;
}
catch (IOException e) {
e.printStackTrace();
}
}
我想把这个函数放在这个类中:
public static class TypingDialogFragment extends DialogFragment {
EditText cmdLine;
static MainActivity parentActivity;
static ThreadConnected cmdThreadConnected;
static int type1;
static int run_voice1;
static TypingDialogFragment newInstance(MainActivity parent, ThreadConnected thread, int type, int run_voice){
type1=type;
run_voice1=run_voice;
parentActivity = parent;
cmdThreadConnected = thread;
TypingDialogFragment f = new TypingDialogFragment();
return f;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().setTitle("Cmd Line");
getDialog().setCanceledOnTouchOutside(false);
View typingDialogView = inflater.inflate(R.layout.typing_layout, container, false);
cmdLine = (EditText)typingDialogView.findViewById(R.id.cmdline);
ImageView imgCleaarCmd = (ImageView)typingDialogView.findViewById(R.id.clearcmd);
imgCleaarCmd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cmdLine.setText("");
}
});
ImageButton send_voice=(ImageButton)getActivity().findViewById(R.id.send_voice1);
send_voice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
byte[] NewLine = "\n".getBytes();
byte[] bytesToSend="pkill -f receiverfm.py".getBytes();
byte[] bytesToSend2="./emetteur.py".getBytes();
byte[] bytesToSend3="pkill -f emetteur.py".getBytes();
byte[] bytesToSend4="./receiverfm.py".getBytes();
if (run_voice1==0)
{
cmdThreadConnected.write(bytesToSend);
cmdThreadConnected.write(NewLine);
cmdThreadConnected.write(bytesToSend2);
}
if (run_voice1==1)
{
cmdThreadConnected.write(bytesToSend3);
cmdThreadConnected.write(NewLine);
cmdThreadConnected.write(bytesToSend4);
}
cmdThreadConnected.write(NewLine);
}
});
Button btnEnter = (Button)typingDialogView.findViewById(R.id.enter);
btnEnter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(cmdThreadConnected!=null){
byte[] memory_freq="100.0".getBytes();
if (type1==1)
{
byte[] bytesToSend = cmdLine.getText().toString().getBytes();
cmdThreadConnected.write(bytesToSend);
byte[] NewLine = "\n".getBytes();
cmdThreadConnected.write(NewLine);
}
if (type1==2)
{
byte[] byteToSend_freq = "./receiverfm.py --freq ".getBytes();
byte[] bytesToSend = cmdLine.getText().toString().getBytes();
memory_freq=bytesToSend;
cmdThreadConnected.write(byteToSend_freq);
cmdThreadConnected.write(bytesToSend);
byte[] NewLine = "\n".getBytes();
cmdThreadConnected.write(NewLine);
}
if (type1==3)
{
byte[] byteToSend_gain="./receiverfm.py --freq ".getBytes();
cmdThreadConnected.write(byteToSend_gain);
cmdThreadConnected.write(memory_freq);
byte[] byteToSend_gain2=" --".getBytes();
byte[] bytesToSend = cmdLine.getText().toString().getBytes();
cmdThreadConnected.write(byteToSend_gain2);
cmdThreadConnected.write(bytesToSend);
byte[] NewLine = "\n".getBytes();
cmdThreadConnected.write(NewLine);
}
}
}
});
Button btnDismiss = (Button)typingDialogView.findViewById(R.id.dismiss);
btnDismiss.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
Button btnClear = (Button)typingDialogView.findViewById(R.id.clear);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
body.setText("");
}
});
return typingDialogView;
}
}