博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现类似街旁网的分享足迹功能
阅读量:7098 次
发布时间:2019-06-28

本文共 3760 字,大约阅读时间需要 12 分钟。

在sina微博上看到街旁网的客户端有一个分享足迹的功能,它可以显示我当前的位置,将微博头像标识在地图上作为我的当前位置,我觉得这个功能很酷,我也想在自己的app上加上这个功能。 

    
    由此开始了如下的研究:) 
    首先将头像标识在地图上很简单,问题的关键是作为android客户端我们需要将图片上传到sina微博,那就需要对当前地图进行截屏,将图片保存在sd卡上。这个是个难题,在我研究的时候android2.3.3版本还没出现,这个版本据说开放了截图功能,可以使用SurfaceFlinger API 截取到屏幕画面。 
    我尝试了很多办法都解决不了,最后想到了使用webview 
    布局如下: 

Java代码

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

Java代码

   

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

     需要将这个html文件放在assets文件夹中,取名为map.html 
     最后,我们需要一个activiy: 

Java代码
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卡上图片的路径将图片上传到微博。 
转自:

转载于:https://www.cnblogs.com/shanzei/archive/2012/03/24/2415268.html

你可能感兴趣的文章
钱包开发数字货币钱包开发虚拟币多币种钱包开发
查看>>
spring cloud互联网分布式微服务云平台规划分析--spring cloud服务统一配置中心
查看>>
【Flask】关于request.json /.values /.args /.form
查看>>
Virtualbox虚拟Ubuntu共享文件夹设置
查看>>
ubuntu上安装lua
查看>>
完全检查点与增量检查点的区别
查看>>
rhel5.4安装oracle10g图文步骤1
查看>>
第一节课作业 150206119
查看>>
C++版银行家算法
查看>>
deepin中配置robot framework环境
查看>>
VMware-ESXI RHCS中fence配置
查看>>
深度解析Java内存的原型
查看>>
未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误。
查看>>
Php的时区问题
查看>>
安装HP P2000存储安装步骤
查看>>
NSURLSession不走代理方法的原因
查看>>
Java之JVM内存结构、Java内存模型、Java对象模型
查看>>
distribute-list分发列表详解
查看>>
关于Oracle归档进程的运行机制
查看>>
mail退信分析大全
查看>>