2014-11-22 86 views
0

我已经在google地图中实现了一个longclick listener。所以当用户长时间点击地图时,它会启动相机意图,然后您可以拍摄照片。现在我想要实现的是当图像被放置在用户长时间点击的地图上的点上时。在谷歌地图API添加cutom标记v2

googleMap.setOnMapLongClickListener(Test.this); 
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

// adding marker 

googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
googleMap.setMyLocationEnabled(true); // false to disable 
googleMap.getUiSettings().setZoomControlsEnabled(false); // true to enable 
googleMap.getUiSettings().setCompassEnabled(true); 
googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

    } 
    { 
} 

    @Override 
    public void onMapLongClick(LatLng point) { 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    startActivityForResult(intent,TAKE_PICTURE); 
    googleMap.addMarker(new MarkerOptions().position(point) 
      .icon(BitmapDescriptorFactory.fromResource(TAKE_PICTURE))); 

    Toast.makeText(getApplicationContext(), 
     "New marker [email protected]" + point.toString(), Toast.LENGTH_LONG) 
     .show(); 
    } 
    } 

所以基本上现在应用程序崩溃,奇怪的是,我似乎不能尽快检查错误消息(logcat的)cuase,因为它涉及了一遍自败。 (我已经尝试过打印屏幕,但速度不够快:-))

任何人都可以请摆脱这一点,我可以做些什么来解决这个问题?

感谢

+0

Eclipse和Android Studio中有特殊的按钮来停止logcat窗口的自动滚动。您也可以从命令行“adb logcat -d> log.txt”执行以获取日志文件 – Mixaz 2014-11-22 18:38:13

回答

0

这看起来错了我:

startActivityForResult(intent,TAKE_PICTURE); 
googleMap.addMarker(new MarkerOptions().position(point) 
     .icon(BitmapDescriptorFactory.fromResource(TAKE_PICTURE))); 

的第一条语句使用TAKE_PICTURE作为启动活动的请求的代码。这可能是对的。第二条语句使用TAKE_PICTURE作为资源标识符(对'res'文件夹中的某些内容)。很有可能第二个语句会抛出一个异常,因为该标识符没有资源,或者它对于BitmapDescriptorFactory而言类型错误。

当您拨打startActivityForResult时,相机应用程序启动,用户进行拍摄需要一段时间(或通过BACK按钮取消相机应用程序)。你不能访问立即捕捉到的照片,你需要做的是,在onActivityResult处理程序,即:

private File photo = null; 
/** 
* This method is used to start the camera activity and save the image taken as the imagename passed 
* 
* @param imagename : this is the name of the image which will be saved 
*/ 
private void clickPicture(String imagename) { 
    Intent getCameraImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // this is the same as ""android.media.action.IMAGE_CAPTURE" 
    File cameraFolder; 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"myfolder/"); 
    else 
     cameraFolder= context.getCacheDir(); 
    if(!cameraFolder.exists()) 
     cameraFolder.mkdirs(); 
    String imageFileName = imagename; 
    photo = new File(cameraFolder, "myfolder/" + imageFileName); 
    getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
    Uri.fromFile(photo); 
    startActivityForResult(getCameraImage, TAKE_PICTURE); 

}  

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if(resultCode == RESULT_OK) { 
     // read captured image from File photo and place it to map 
    } 
} 

由于图像会很大的一个标志,你应该把它重新取样,以更小的东西。这是其他问题,谷歌它))

图像文件将被保存在应用程序的外部存储(在SD卡上),如果它被安装。否则,该文件将被放置到内部存储器中的应用程序缓存目录。

+0

非常感谢!让它在没有崩溃的情况下工作,但似乎无法将图像放回到地图中。 (不要担心调整大小,只是想让它在地图中放置图像)我会用更新后的代码提出一个新问题。 – wemapps 2014-11-23 07:06:21

+1

嗨,我问这里的另一个问题是链接[http://stackoverflow.com/questions/27086649/how-to-place-taken-photo-from-camera-intent-and-place-in-maps-where-用户 - 拥有-TA] – wemapps 2014-11-23 07:40:04