我正在尝试将一个String从ActMain传递给SoundClsRslt,但我的SoundClsRslt不会扩展Activity。我尝试扩展活动,但这会引起我在这里问到的其他问题:has no default constructor in android manifest。
一切正常,直到程序到达“startActivity(i);” ,应用程序崩溃并且logcat说“无法找到显式活动类{/com.Hugler.CB.SoundClsRslt};您是否在AndroidManifest.xml中声明了此活动?”。你知道什么是错的吗?
接近ActMain onCreate for intent的结尾,以及onCond of SoundClsRslt for getintent。
我的ActMain代码:
package com.Hugler;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import com.Audio.CAudio;
import com.Hugler.ADK.ADK;
import com.Hugler.CB.SoundClsRslt;
import com.Hugler.Lib.Cfg;
import com.Hugler.Lib.MyDebug;
import com.Hugler.Network.Server;
import com.Hugler.Network.StreamingServer;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.telephony.SmsManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.Hugler.Personality.Personality;
import com.Hugler.Personality.Miti.PerMiti;
import com.Hugler.TeleOp.TeleOp;
import com.Motor.Motor;
import com.TTS.PCMPlayback;
public class ActMain extends Activity implements ADK.IADK {
private TextView m_pTxtRslt;
private TextView m_pTxtRslt1;
private TextView m_pTxtview;
private TextView m_pTxtview1;
public static Button m_pBtnHeadToggle;
public static Button m_pBtnEarToggle;
private SoundClsRslt m_pSoundClsRslt;
private static ActMain _p;
public static int level;
final Intent i = new Intent(this, SoundClsRslt.class);
final Context context = this;
private TextView result;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_p = this;
if (Cfg.Init()) {
setContentView(R.layout.main);
// get prompts.xml view
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompts, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
final EditText userInput = (EditText) promptsView
.findViewById(R.id.editTextDialogUserInput);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// get user input and set it to result
// edit text
result.setText(userInput.getText());
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
result = (TextView) findViewById(R.id.editTextResult);
result.setText(null);
m_pTxtRslt = (TextView) findViewById(R.id.TxtRslt);
m_pTxtRslt1 = (TextView) findViewById(R.id.TxtRslt1);
m_pTxtview = (TextView) findViewById(R.id.textView2);
m_pTxtview1 = (TextView) findViewById(R.id.textView3);
MyDebug.Init(this, m_pTxtRslt);
m_pTxtRslt.setText("Non-Glass");
m_pTxtRslt1.setText(null);
m_pTxtview.setText("Glass");
m_pTxtview1.setText(null);
m_pSoundClsRslt = new SoundClsRslt(this);
SimpleDateFormat pSDF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
String sNow = pSDF.format(new Date());
m_pSoundClsRslt.StartLog(Cfg.GetLogDir() + "/" + sNow + ".csv");
PCMPlayback.Init();
Personality.Init(new PerMiti());
TeleOp.Init(m_pSoundClsRslt);
if (result != null){
String easyPuzzle = result.getText().toString();
i.putExtra("numberfrom", easyPuzzle);
startActivity(i);
Toast.makeText(this, "msg msg", Toast.LENGTH_SHORT).show();
} //passing string
} else {
AlertDialog.Builder pDlg = new AlertDialog.Builder(this);
pDlg.setTitle("Fail loading configuration");
pDlg.setMessage(Cfg.ErrMsg());
pDlg.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
ActMain.this.finish();
}
});
pDlg.show();
}
}
protected void onResume() {
super.onResume();
if (Cfg.ErrMsg() != null)
return;
Server.Init();
CAudio.Init(m_pSoundClsRslt);
CAudio.ResumeSoundCls();
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
decorView.setSystemUiVisibility(uiOptions);
}
public void Show0(final String sTxt) {
runOnUiThread(new Runnable() {
public void run() {
m_pTxtRslt.setText(sTxt);
}
});
}
public void Show1(final String sTxt) {
runOnUiThread(new Runnable() {
public void run() {
m_pTxtRslt1.setText(sTxt);
}
});
}
public void Show2(final String sTxt) {
runOnUiThread(new Runnable() {
public void run() {
m_pTxtview.setText(sTxt);
}
});
}
public void Show3(final String sTxt) {
runOnUiThread(new Runnable() {
public void run() {
m_pTxtview1.setText(sTxt);
}
});
}
public void OnADKStat(int iStat, String sMsg) {
if (iStat == ADK.S_CONNECTED)
Motor.Connect(ADK.GetInStream(), ADK.GetOutStream());
else if (iStat == ADK.S_DISCONNECTED)
runOnUiThread(new Runnable() {
public void run() {
Motor.Disconnect();
ActMain.this.finish();
}
});
}
}
我的SoundClsRslt代码:
package com.Hugler.CB;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import com.Hugler.ActMain;
import com.Hugler.TeleOp.TeleOp;
import com.SoundClassification.SoundClassification.ISC;
import android.app.Activity;
import android.content.Intent;
import android.os.Environment;
import android.telephony.SmsManager;
public class SoundClsRslt implements ISC {
public static int interact;
private ActMain m_pMain;
private static int m_iID;
private static int m_iID1;
private FileOutputStream _fLog;
public SoundClsRslt(ActMain pMain) {
m_pMain = pMain;
m_iID = 0;
m_iID1 = 0;
_fLog = null;
}
public void StartLog(String sFile) {
if (_fLog != null)
return;
try {
_fLog = new FileOutputStream(sFile);
String sHdr = "Time,Event,Confidence\n";
_fLog.write(sHdr.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
public void OnLog(String sLog) {
}
public void OnLog2(String sLog) {
}
public void OnSegment(double[] pBuf, int iLen, String sCls, double dConf) {
sCls = sCls.toLowerCase(Locale.getDefault());
{
if (sCls.contains("glass")) {
m_iID1++;
m_pMain.Show2(m_iID1 + "." + sCls);
m_pMain.Show3("" + dConf);
//convert short to byte
ByteBuffer myByteBuffer = ByteBuffer.allocate(iLen * 2);
myByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
//open pcm
ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer();
for (int i = 0; i < iLen ; i++) {
myShortBuffer.put((short)(pBuf[i]));
}
File file;
FileChannel out = null;
try {
String filepath = Environment.getExternalStorageDirectory().getPath();
SimpleDateFormat pSDF = new SimpleDateFormat("yyyyMMdd_HH_mm_ss", Locale.UK);
String sNow = pSDF.format(new Date());
file = new File(filepath,"AudioRecorder" + "/segment_" + sNow + ".pcm");
Intent intent = getIntent();
SimpleDateFormat smsdate = new SimpleDateFormat("yyyy/MM/dd_HH:mm:ss", Locale.US);
String messageToSend = "Glass breaking sound detected at "+ smsdate.format(new Date()) + " (yyyy/MM/dd_HH:mm:ss)";
String number = intent.getExtras().getString("numberfrom");
SmsManager.getDefault().sendTextMessage(number, null, messageToSend, null, null);
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
out = new FileOutputStream(file).getChannel();
//write to pcm
out.write(myByteBuffer);
//close pcm
out.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
m_iID++;
m_pMain.Show0(m_iID + "." + sCls);
m_pMain.Show1("" + dConf);
}
}
TeleOp.SendInteraction();
if (_fLog != null) {
SimpleDateFormat pSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
String sNow = pSDF.format(new Date());
String sLog = sNow + "," + sCls + "," + dConf + "\n";
try {
_fLog.write(sLog.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
您可以在班级的构造函数中定义上下文。聊天后,您可以使用myContext.getIntent()
获得意图,您的构造函数应该是这样的:
private Context myContext
public SoundClsRslt(ActMain pMain, Context context) {
m_pMain = pMain;
m_iID = 0;
m_iID1 = 0;
this.myContext = context;
_fLog = null;
}
答案 1 :(得分:0)
您已将ActMain实例传递给SoundClsRslt。所以在你的SoundClsRslt中放入m_pMain.getIntent()而不是getIntent()并尝试。