当前位置:  编程技术>移动开发
本页文章导读:
    ▪实现类似街旁网的分享足迹功能        【原创】实现类似街旁网的分享足迹功能 转载请注明出处    在sina微博上看到街旁网的客户端有一个分享足迹的功能,它可以显示我当前的位置,将微博头像标识在地图上作为我的当前位.........
    ▪ 反照工具类        反射工具类 http://cnaning.iteye.com/blog/347180  反射工具类 ......
    ▪ apk 封装 发布       apk 打包 发布 1. 什么是apk文件 (1)定义:APK是Android Package Kit的缩写,即Android安装包。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是 Dalvik VM executes.........

[1]实现类似街旁网的分享足迹功能
    来源: 互联网  发布时间: 2014-02-18
【原创】实现类似街旁网的分享足迹功能
转载请注明出处

    在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" ></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(/blog_article/url/index.html);
				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

    
[2] 反照工具类
    来源: 互联网  发布时间: 2014-02-18
反射工具类

http://cnaning.iteye.com/blog/347180 

反射工具类


    
[3] apk 封装 发布
    来源: 互联网  发布时间: 2014-02-18
apk 打包 发布

1. 什么是apk文件

(1)定义:APK是Android Package Kit的缩写,即Android安装包。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是 Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。APK文件结构为:

  • META-INF:Jar文件中常可以看到
  • res:存放资源文件的目录
  • AndroidManifest.xml:程序全局配置文件
  • classes.dex:Dalvik字节码
  • resources.arsc:编译后的二进制资源文件

(2)机制:Android在运行一个程序时首先需要UnZip,再通过dexdump命令可以反编译,这样做对于程序的保密性和可靠性不是很高但 符合发展规律。Dalvik Vm的执行文件被打包为apk格式,最终运行时,加载器会解压apk并获取编译后的androidmanifest.xml文件中的permission 中相关的安全访问。

(3)root权限与签名:如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的,android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。但第三方程序并不是安放在这个文件夹的。

 

2. apk的打包

在Eclipse中,编译好的android project,在该project的bin目录下会自动生成一个apk文件,与J2ME不同,无需手动打包。只要代码有改动就自动 build,build出来的apk是签过名的,也可以在project右键菜单的Andoid Tools菜单下export签名的或未签名的apk。

 

3. 将apk安装到android simulator中

  • 通过\android-sdk-windows-1.5_r1\tools\emulator.exe启动模拟器。这里要注意,这个命令只有在avd配置好后才可以使用,例如我有一个名为android3的avd,所以我要用如下方法启动emulator: -scale 0.6
  • 将要安装的apk文件copy到tools目录下(与emulator.exe同目录);
  • cmd进入命令行输入,进入到\android-sdk-windows-1.5_r1\platform-tools\目录下,输入命令:adb install ../tools/***.apk
  • 4. 将apk安装到android mobile中


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    网络技术 iis7站长之家
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3