Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.android.android_camera_viewer;
00018
00019 import android.hardware.Camera;
00020 import android.os.Bundle;
00021 import android.view.MotionEvent;
00022 import android.view.Window;
00023 import android.view.WindowManager;
00024 import android.widget.Toast;
00025 import org.ros.address.InetAddressFactory;
00026 import org.ros.address.InetAddressFactory;
00027 import org.ros.android.BitmapFromCompressedImage;
00028 import org.ros.android.view.RosImageView;
00029 import org.ros.android.RosActivity;
00030 import org.ros.android.view.camera.RosCameraPreviewView;
00031 import org.ros.node.NodeConfiguration;
00032 import org.ros.node.NodeMainExecutor;
00033
00034 import android.os.IBinder;
00035 import android.content.ComponentName;
00036 import android.content.Intent;
00037 import android.content.ServiceConnection;
00038 import java.net.URI;
00039 import java.net.URISyntaxException;
00040 import android.content.Context;
00041 import android.util.Log;
00042
00047 public class MainActivity extends RosActivity {
00048
00049
00050 private URI masterUri;
00051 private Intent intent;
00052 private AndroidAudioRecordService myService;
00053 private String package_name;
00054
00055
00056 private int cameraId;
00057 private RosCameraPreviewView rosCameraPreviewView;
00058 private RosImageView<sensor_msgs.CompressedImage> image;
00059
00060
00061
00062
00063 ServiceConnection serviceConnection = new ServiceConnection(){
00064
00065 @Override
00066 public void onServiceConnected(ComponentName name,IBinder service){
00067 myService = ((AndroidAudioRecordService.MyBinder)service).getService();
00068 startService(intent);
00069 myService.setNode(package_name);
00070 }
00071
00072 @Override
00073 public void onServiceDisconnected(ComponentName name){
00074 myService = null;
00075 }
00076 };
00077
00078
00079
00080 public MainActivity() {
00081 super("ROS Camera Viewer", "ROS Camera Viewer");
00082 }
00083
00084
00085 @Override
00086 protected void onCreate(Bundle savedInstanceState) {
00087 super.onCreate(savedInstanceState);
00088
00089 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
00090 setContentView(R.layout.main);
00091 rosCameraPreviewView = (RosCameraPreviewView) findViewById(R.id.ros_camera_preview_view);
00092
00093 image = (RosImageView<sensor_msgs.CompressedImage>) findViewById(R.id.image);
00094 image.setTopicName("/usb_cam/image_raw/compressed");
00095 image.setMessageType(sensor_msgs.CompressedImage._TYPE);
00096 image.setMessageToBitmapCallable(new BitmapFromCompressedImage());
00097
00098
00099
00100 package_name = getPackageName();
00101 }
00102
00103
00104
00105 @Override
00106 public void onResume(){
00107 super.onResume();
00108
00109 if(masterUri != null){
00110 intent = new Intent(getBaseContext(),AndroidAudioRecordService.class);
00111
00112
00113 intent.putExtra("masterUri",masterUri.toString());
00114 bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
00115 }
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 @Override
00130 public boolean onTouchEvent(MotionEvent event) {
00131 if (event.getAction() == MotionEvent.ACTION_UP) {
00132 int numberOfCameras = Camera.getNumberOfCameras();
00133 final Toast toast;
00134 if (numberOfCameras > 1) {
00135 cameraId = (cameraId + 1) % numberOfCameras;
00136 rosCameraPreviewView.releaseCamera();
00137 rosCameraPreviewView.setCamera(Camera.open(cameraId));
00138 toast = Toast.makeText(this, "Switching cameras.", Toast.LENGTH_SHORT);
00139 } else {
00140 toast = Toast.makeText(this, "No alternative cameras to switch to.", Toast.LENGTH_SHORT);
00141 }
00142 runOnUiThread(new Runnable() {
00143 @Override
00144 public void run() {
00145 toast.show();
00146 }
00147 });
00148 }
00149 return true;
00150 }
00151
00152
00153 @Override
00154 protected void init(NodeMainExecutor nodeMainExecutor) {
00155 cameraId = 0;
00156 rosCameraPreviewView.setCamera(Camera.open(cameraId));
00157 NodeConfiguration nodeConfiguration =
00158 NodeConfiguration.newPublic(InetAddressFactory.newNonLoopback().getHostAddress());
00159 nodeConfiguration.setMasterUri(getMasterUri());
00160 masterUri = getMasterUri();
00161 if(masterUri != null){
00162 intent = new Intent(getBaseContext(),AndroidAudioRecordService.class);
00163
00164
00165 intent.putExtra("masterUri",masterUri.toString());
00166 bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
00167 }
00168 nodeMainExecutor.execute(image, nodeConfiguration.setNodeName("/android/image_view"));
00169 nodeMainExecutor.execute(rosCameraPreviewView, nodeConfiguration.setNodeName("/android/preview_view"));
00170
00171 }
00172 }