`
fengzhizi715
  • 浏览: 161685 次
  • 性别: Icon_minigender_1
  • 来自: 上海 苏州
社区版块
存档分类
最新评论

【原创】实现类似街旁网的分享足迹功能

阅读更多
转载请注明出处

    在sina微博上看到街旁网的客户端有一个分享足迹的功能,它可以显示我当前的位置,将微博头像标识在地图上作为我的当前位置,我觉得这个功能很酷,我也想在自己的app上加上这个功能。
   
    由此开始了如下的研究:)
    首先将头像标识在地图上很简单,问题的关键是作为android客户端我们需要将图片上传到sina微博,那就需要对当前地图进行截屏,将图片保存在sd卡上。这个是个难题,在我研究的时候android2.3.3版本还没出现,这个版本据说开放了截图功能,可以使用SurfaceFlinger API 截取到屏幕画面。

    我尝试了很多办法都解决不了,最后想到了使用webview

    布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical" android:layout_width="fill_parent"
		android:layout_height="380px">
		<WebView android:id="@+id/webview" android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="horizontal" android:layout_width="fill_parent"
		android:layout_height="380px">
		<Button android:layout_width="100px" android:layout_marginLeft="30px"
			android:layout_height="wrap_content" android:text="确定" android:id="@+id/Btn" />
			
		<Button android:layout_width="100px" android:layout_marginLeft="60px"
			android:layout_height="wrap_content" android:text="取消" android:id="@+id/cancleBtn" />
	</LinearLayout>
</LinearLayout>

   
     我们使用了webview就需要使用网页形式的地图,这个也可以有很多种选择,比如google的api,在这里我尝试使用mapabc的api,因为我看到街旁也是用这个:)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
<script type="text/javascript" src="http://app.mapabc.com/apis?&t=ajaxmap&v=2.1.2&key=xxxxxxxxxxx"></script> 
<script type="text/javascript"> 
var mapObj=null; 
function mapInit(x,y,imageUrl) {
    var mapOptions = new MMapOptions();//构建地图辅助类 
    mapOptions.zoom=17;//要加载的地图的缩放级别 
    mapOptions.center=new MLngLat(x,y);//要加载的地图的中心点经纬度坐标     
    mapOptions.toolbarPos = new MPoint(15,15); //设置工具条在地图上的显示位置   
    mapOptions.overviewMap = HIDE; //设置鹰眼地图的状态,SHOW:显示,HIDE:隐藏(默认)   
    mapOptions.scale = HIDE; //设置地图初始化比例尺状态,SHOW:显示(默认),HIDE:隐藏。   
    mapOptions.returnCoordType = COORD_TYPE_OFFSET;//返回数字坐标   
    mapOptions.zoomBox = true;//鼠标滚轮缩放和双击放大时是否有红框动画效果。   
    mapObj=new MMap("map",mapOptions); //地图初始化
    addMarkerOnMap(x,y,imageUrl);
} 
function addMarkerOnMap(x,y,imageUrl){   
    var markerOption=new MMarkerOptions(); 
    markerOption.imageUrl=imageUrl; 
    markerOption.picAgent=false;   
    var Marker = new MMarker(new MLngLat(x,y),markerOption); 
    Marker.id="mark"; 
    mapObj.addOverlay(Marker,true);  
} 
</script>
</head>
<body> 
<div id="map" style="width:360px; height:450px"></div> 
</body> 
</html>


     其中这里的key需要自己申请。

     需要将这个html文件放在assets文件夹中,取名为map.html

     最后,我们需要一个activiy:
import java.io.FileOutputStream;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

public class Main extends Activity {
	
	private ProgressDialog progressBar;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.Btn);
        
        final WebView wv = (WebView) findViewById(R.id.webview);
        
        progressBar = ProgressDialog.show(Main.this, "请稍候", "网页加载中...");  
        
        final String x = "116.397428";
        final String y = "39.90923";
        final String imageUrl = "http://tp4.sinaimg.cn/1916957395/50/1297582748/1";

		// 覆盖默认后退按钮的作用,替换成WebView里的查看历史页面
		wv.setOnKeyListener(new View.OnKeyListener() {
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if (event.getAction() == KeyEvent.ACTION_DOWN) {
					if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
						wv.goBack();
						return true;
					}
				}
				return false;
			}
		});
		
		wv.getSettings().setJavaScriptEnabled(true);
		wv.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}

			public void onPageFinished(WebView view, String url) {
				if (progressBar.isShowing()) {
					progressBar.dismiss();
				}
				wv.loadUrl("javascript:mapInit('" + x + "','" + y + "','"
						+ imageUrl + "')");
			}
		});

		wv.loadUrl("file:///android_asset/map.html");
		
		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				Picture pic = wv.capturePicture();
				int width = pic.getWidth();
				int height = pic.getHeight();
				if (width > 0 && height > 0) {
					Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
					Canvas canvas = new Canvas(bmp);
					pic.draw(canvas);
					try {
						String fileName = "/sdcard/" + System.currentTimeMillis() + ".jpg";
						FileOutputStream fos = new FileOutputStream(fileName);

						if (fos != null) {
							bmp.compress(Bitmap.CompressFormat.JPEG, 90, fos);
							fos.close();
						}
						Toast.makeText(getApplicationContext(), "截图成功,文件名是:" + fileName, Toast.LENGTH_SHORT).show();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		});
    }
}

     其中的x、y是经纬度可以通过定位的方式获取,imageUrl是sina微博的头像地址。

    


     点击确定按钮即可截图 把图片存放到sd卡上。接下来就可以通过获取sd卡上图片的路径将图片上传到微博。

     顺便做个广告,此功能在时客地图1.7中已经实现,具体可查看我另外的帖子:http://fengzhizi715.iteye.com/blog/938997
  • 大小: 39.9 KB
2
11
分享到:
评论

相关推荐

    Servlet实现历史记录功能(浏览记录)

    本教程将深入探讨如何使用Servlet实现一个历史记录功能,即浏览记录,让用户能够查看他们之前访问过的页面。 首先,理解Servlet的基本概念是至关重要的。Servlet是一个Java类,遵循Java Servlet API规范,它可以...

    碳足迹计算器

    碳足迹计算器是一种在线工具,用于量化个人或组织在日常生活中所产生的温室气体排放量,主要针对二氧化碳(CO2)的排放。这个概念源自于环境保护和气候变化领域,旨在提高人们对自身活动对全球气候影响的认识。世界...

    基于Python绘制个人足迹地图

    为此,本文将介绍一种利用Python编程语言及其相关库实现更为精细到市级别的个人足迹地图绘制方法。 #### 二、所需工具与库 在正式开始之前,确保您的开发环境已经安装了必要的Python库: 1. **echarts-china-...

    碳足迹核算认证服务合同范本

    《碳足迹核算认证服务合同》是企业在追求可持续发展和绿色经济道路上的重要法律文件,它规范了委托方(甲方)和认证方(乙方)在碳足迹核算与认证过程中的权利、义务和责任。以下是对这份合同中涉及的关键知识点的...

    碳足迹计算器-VB制作

    《VB实现碳足迹计算器详解》 在当今社会,环保意识日益增强,碳足迹计算器成为衡量个人或组织对环境影响的重要工具。"碳足迹计算器-VB制作"项目正是基于这一理念,将2006版和2008版的碳足迹计算器进行了整合,并...

    电子信息产品碳足迹核算指南(2021年).pdf

    该指南旨在规定电子信息产品碳足迹核算的目标、核算范围、功能单位、系统边界、数据收集与处理、核算、报告等内容。 一、前言 电子信息产品碳足迹核算指南是根据GB/T 1.1—2020《标准化工作导则 第1部分:标准化...

    淘宝足迹推送大师 v1.0.zip

    这款软件的主要功能是利用淘宝足迹这一高流量入口,通过批量推送广告的方式,将商家的商品信息推送给大量的潜在买家。它无需使用旺旺小号,意味着在推广过程中可以避免因频繁更换账号而可能产生的风险,简化了操作...

    一款记录、分享你的旅游足迹、故事的微信小程序,前端 ...caolvji-master.zip

    这个压缩包可能是为了方便开发者下载和研究这个旅游足迹分享小程序的实现细节。 【标签】“微信小程序”指出了这个项目是针对微信生态系统的,小程序是一种轻量级的应用形式,无需下载安装即可使用,它介于传统App...

    利用会话技术模拟实现网上商城常见的购物车功能和浏览历史功能

    本示例将重点讲解如何利用会话技术(Session)来实现这些功能。会话技术是Web开发中的一个重要概念,它允许服务器在多个HTTP请求之间保持用户的状态,这对于状态无连接的HTTP协议来说是至关重要的。 首先,让我们...

    碳足迹英国标准

    英国碳足迹标准的核心内容和应用方法在文档提供的信息中得到了详细描述。下面,我们将根据提供的信息详细阐述英国碳足迹标准相关的知识点。 首先,碳足迹是指在商品和服务的生命周期中所产生的温室气体排放的总量...

    生态足迹分析法

    【生态足迹分析法】是一种衡量可持续发展程度的量化工具,由E.R.William和M.Wackernagel在20世纪90年代提出。它通过计算一个地区消耗的生物生产性土地面积来评估该地区的资源利用是否在生态承载力范围内,从而判断其...

    中国能源消费碳足迹的动态变化研究

    利用IPCC公布的《国家温室气体排放清单指南》中碳排放的计算方法,定量研究2000—2011年中国能源消费的碳足迹数值,并针对近年碳足迹呈现的变化趋势,详细分析能源消费的碳足迹构成、人均碳足迹、碳足迹强度以及碳足迹...

    青海省产业生态足迹和生态效率分析

    青海省产业生态足迹和生态效率分析的知识点主要包括以下几个方面: 1. 生态足迹方法:生态足迹是一个衡量...同时,其他地区也可以借鉴青海省的研究经验,采用类似的方法对自身的生态足迹和生态效率进行评估和优化。

    大连金港区生态足迹预测分析

    根据给出的文件信息,本文将对大连金港区生态足迹预测分析的知识点进行详细阐述,具体包括以下内容: 一、生态足迹理论与模型 生态足迹理论最早由加拿大教授William E. Rees及其博士生Mathis Wackernagel提出并完善...

    Java 碳足迹计算器(桌面应用程序含源码)

    Java 碳足迹计算器是一款基于Java开发的桌面应用程序,它为用户提供了一种便捷的方式来计算个人或组织的碳排放量,从而帮助人们了解自己的环境影响并采取减排措施。这个项目不仅包含了一个运行时的可执行程序,还...

    2019粤港澳大湾区生态足迹报告-WWF-2019.7-29页.rar

    通过《2019粤港澳大湾区生态足迹报告》,我们可以全面了解大湾区的生态环境状况,认识到环境保护的重要性,以及采取何种措施实现可持续发展的必要性。这份报告不仅是对大湾区的生态评估,也为其他类似地区提供了可...

    珍藏版 轨迹划线 百度足迹跟踪 轨迹定位

    在IT行业中,轨迹划线和足迹跟踪是地理信息系统(GIS)和移动应用开发中的关键功能。这个"珍藏版 轨迹划线 百度足迹跟踪 轨迹定位"资源很可能是一个针对百度地图API的开发包或者教程,帮助开发者实现用户轨迹的记录...

    中国中小企业碳足迹核算Excel自动计算表(碳足迹核算:中国中小企业(SME)碳报告工具)

    中国中小企业碳足迹核算Excel自动计算表(碳足迹核算:中国中小企业(SME)碳报告工具)

Global site tag (gtag.js) - Google Analytics