I am trying to pass a String from ActMain to SoundClsRslt, but my SoundClsRslt does not extend Activity. I tried extend Activity but it will cause other problem i asked here: has no default constructor in android manifest .
everything works fine until the program reach the "startActivity(i);" , the app crashes and the logcat says "Unable to find explicit activity class {/com.Hugler.CB.SoundClsRslt}; have you declared this activity in your AndroidManifest.xml?". Do you know what's wrong?
Near the end of onCreate of ActMain for intent, and onSegment of SoundClsRslt for getintent.
My ActMain code:
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();
}
});
}
}
My SoundClsRslt code:
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();
}
}
}
}