我試圖獲得一個服務,只要導航活動正在運行,就會在後臺運行。麻煩的是該服務似乎並未開始。應用程序不會崩潰,它儘可能地嘗試啓動服務,但似乎沒有發生。有人能告訴我我做錯了什麼嗎?此外,我試圖使用本地廣播公司從服務向調用活動發送數據串,我是否正確實施了它?最後,我似乎無法讓導航活動執行run(),那麼執行此操作的最佳方式是什麼,以便在活動關閉之前重複調用run()?這是我在做一個Android應用程序第一次嘗試,所以在新手術語解釋:)謝謝服務不會啓動
FYI MainActivity啓動導航活動,啓動服務AugiActivity
MainActivity:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void call_ioio(View v)
{
Intent intent = new Intent(this, AugiActivity.class);
startActivity(intent);
}
public void navigation(View v)
{
System.out.println("Got to Mainactivity start Navigation");
Intent intent = new Intent(this, Navigation.class);
startActivity(intent);
}
}
導航活動:
public class Navigation extends MapActivity implements Runnable,
SurfaceHolder.Callback{
String LED = null;
String MAG = null;
String BAR = null;
String GYRO = null;
String EULER = null;
String GGA = null;
private BroadcastReceiver MessageReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
LED = intent.getStringExtra("LED");
MAG = intent.getStringExtra("MAG");
BAR = intent.getStringExtra("BAR");
GYRO = intent.getStringExtra("GYRO");
EULER = intent.getStringExtra("EULER");
GGA = intent.getStringExtra("GGA");
run();
}
};
boolean previewing = false;
boolean map_view = true;
boolean cam_view = false;
boolean sen_view = false;
LinearLayout SS;
SurfaceView CC;
MapView MM;
TextView light_voltage_TV;
TextView bar_data_TV;
TextView mag_TV;
TextView gyro_TV;
TextView gyro_rate_TV;
TextView acel_TV;
TextView acel_euler_TV;
TextView gga_TV;
TextView gsa_TV;
TextView gsv_TV;
TextView rmc_TV;
TextView vtg_TV;
// CAMERA VARIABLES
Camera cam;
SurfaceView cam_TV;
SurfaceHolder holder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
MapView mapview = (MapView) findViewById(R.id.mapview);
mapview.setBuiltInZoomControls(true);
getWindow().setFormat(PixelFormat.UNKNOWN);
cam_TV = (SurfaceView) findViewById(R.id.CAMERA_View);
holder = cam_TV.getHolder();
holder.addCallback((Callback) this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
LocalBroadcastManager.getInstance(this).registerReceiver(MessageReceiver,
new IntentFilter("IOIOData"));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// Lots of linking view variables to xml views here
System.out.println("Got to Navigation OnCreate");
startService(new Intent(this, AugiActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_navigation, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public void sensorLayer(View v)
{
// set view visable/invisible
}
public void mapLayer(View v)
{
//set view visable/invisible
}
public void cameraLayer(View v)
{
//set view visable/invisible
}
@Override
public void run() {
System.out.println("Got to Navigation RUN");
//update text views with string data
}
}
AugiActivity:
public class AugiActivity extends Service {
public Activity activity_name;
class IOIO extends IOIOActivity {
// Various unrelated global variables
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity_name = this.getParent();
System.out.println("Got to AugiActivity OnCreate");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
class Looper extends BaseIOIOLooper {
public Activity activity_name;
Looper(Activity x)
{
this.activity_name = x;
}
// Communication variables
/**
* Called every time a connection with IOIO has been established.
* Typically used to open pins.
*
* @throws ConnectionLostException
* When IOIO connection is lost.
* @throws InterruptedException
*
* @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#setup()
*/
@Override
protected void setup() throws ConnectionLostException,
InterruptedException
{
// OPEN LIGHT SENSOR PINS
// ESTABLISH I2C CONNECTION
// ESTABLISH UART CONNECTION
bar_calibration();
mag_setup();
imu_setup();
try {
gps_setup();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// BAROMETER CALIBRATION METHOD
private void bar_calibration()
{
// do setup
}
// MAGNETOETER SETUP METHOD
private void mag_setup()
{
// do setup
}
// IMU SETUP METHOD
private void imu_setup()
{
// do setup
}
private void gps_setup() throws IOException, InterruptedException
{
// do setup
}
/**
* Called repetitively while the IOIO is connected.
*
* @throws ConnectionLostException
* When IOIO connection is lost.
* @throws InterruptedException
*
* @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop()
*/
@Override
public void loop() throws ConnectionLostException,
InterruptedException
{
get_light();
get_temp();
get_pressure();
get_north();
get_imu();
System.out.println("Got to AugiActivity LOOP");
try {
get_gps();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
led_.write(true);
sendMessage();
}
private void get_light()
{
// get data
}
private void get_temp()
{
// get data
}
private void get_pressure()
{
// get data
}
private void get_north()
{
// get data
}
private void get_imu()
{
// get data
}
private void get_gps() throws IOException, InterruptedException
{
// get data
}
private void sendMessage()
{
Intent intent = new Intent("IOIOData");
intent.putExtra("LED", get_LED());
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
intent.putExtra("MAG", get_MAG());
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
intent.putExtra("BAR", get_BAR());
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
intent.putExtra("GYRO", get_GYRO());
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
intent.putExtra("EULER", get_EULER());
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
intent.putExtra("GGA", gps_GGA);
LocalBroadcastManager.getInstance(activity_name).sendBroadcast(intent);
}
}
/**
* A method to create our IOIO thread.
*
* @see ioio.lib.util.AbstractIOIOActivity#createIOIOThread()
*/
@Override
protected IOIOLooper createIOIOLooper() {
return new Looper(activity_name);
}
public String get_LED()
{
// code here
}
public String get_MAG()
{
// code here
}
public String get_BAR()
{
// code here
}
public String get_GYRO()
{
// code here
}
public String get_EULER()
{
// code here
}
public String get_GPS()
{
// code here
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return this.onBind(intent);
}
}
我仍然陷在這裏。有關如何解決此問題的任何建議? – 2013-03-26 19:53:19