Facebook Twitter LinkedIn E-mail
magnify
Home Archive for category "Android"

摩尔斯电码工具软件Morse Code Toolkit

摩尔斯电码英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母数字标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。

摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:

  1. 点(.)
  2. 划(-)
  3. 每个字符间短的停顿(在点和划之间的停顿)
  4. 每个词之间中等的停顿
  5. 以及句子之间长的停顿

Morse Code Toolkit  是一款Android工具软件,可以帮助你在公车上无聊时打发时间,学习Morse电码 🙂

Morse_Code_Toolkit_-_Android_Apps_on_Google_Play

 

引路蜂游戏编程指南

Raindrop

Guidebee Android Game Engine – RainDrop Demo To use guidebee android game engine in your project in your build.gradle

add the following

dependencies {
    ...
    compile 'com.guidebee:game-engine:0.9.8'
}

Mario collect coins

Download

Guidebee Android Game Engine Tutorials

  1. Android Gradle Project
  2. Basics
  3. Packages
  4. Game Logic
  5. Basic Graphics
  6. Texture & TextureRegion
  7. TextureAtlas
  8. Handling Input and On Screen Game Pad
  9. Sound and Music
  10. Scenery and TiledMap
  11. SVG Image and Unmanaged Assets
  12. Collision Detection
  13. Microedition Game API
  14. Bring Physics to your Game World
  15. UI Components and HUD Components
  16. Camera and Viewport basics

Box2D

To use guidebee android game engine in your project in your build.gradle

add the following

dependencies {
    ...
    compile 'com.guidebee:game-engine:0.9.9'
}

Mario collect coins

Download

Guidebee Android Game Engine Box2D Tutorials

  1. Introduction
  2. Basic Concepts
  3. Control Player
  4. Body Types
  5. Shape Types
  6. Apply Forces and Impulses to Bodies
  7. Collision Detection and Collision Filter
  8. Sensors
  9. Ray Casts
  10. Joints
  11. More on Bodies
  12. The world
 

Android设计–有创造性的愿景

android

从ICS开始,Anroid的设计以下面三个方面为中心,这三个原则不仅仅应用到Android系统的核心应用中,同时也应用到整个Android系统。当你开发使用Android时也要注意以下三个目标:

使我为之眩目
美丽不仅局限于表面,App应用是圆润并且在多个层次上具有美感,界面切换快而清晰。布局和文字干脆有意义。应用图标自成艺术品,就像一个构造精良的工具一样,你的应用应当集美观,简单和功用于一体,致力创造魔幻的用户体验。
简化我的生活
Android应用使生活变得简单,而且易于理解使用。但用户首次使用你的应用时,他们应该凭直觉就可以掌握应用的主要功能。然而设计不仅仅局限在第一次用户体验。Android应用应当去掉一些比如文件管理和同步方面的后续维护工作。永远不要使用繁琐的步骤来完成简单的工作,而复杂的工作应当裁剪到用户可以接受的程度。各年龄段各个文化背景的人群都不应困惑于过多的选择项和不必要的界面切换。
使我为之惊奇
仅仅使得应用变得易于使用是不够的。Android应用应当鼓励人们尝试新的事物,以全新的视角来使用你的应用。Android允许人们通过多任务,通知和共享以全新的流程来组合使用多个应用。与此同时,你的应用依然具有个性化,以简洁和优雅的方式诠释新的技术。

 

引路蜂Android技术网站开通了

之前在引路蜂技术博客我们花了大量的篇幅介绍了Android开发的相关知识,距离上次介绍Android开发已经有一年有余,这期间Android版本也有了很大的变化,好在Android的版本的基本支持向下兼容,因此以前的介绍的技术基本上还是适用的,但为了和最新的Android技术保持一致,我们准备重新开始介绍Android开发,主要介绍developer.android.com 上的知识涉及Design,Develop和distribution ,此外加上图形(主要是Opengl ES方面的知识)和游戏开发。

android

同时我们也将再次逐个分析随Android SDK发布的例子,主要是ApiDemos中的例子。

网站地址 http://www.androidapidemos.com/

20140809001

 

关于Android引路蜂地图应用源码的简单说明

前面完整的Android引路蜂地图应用源码下载 提供了源码下载,这里对这个项目做个简单的说明以方便阅读。

整个应用代码量在4000行左右,不算很大,下面是对代码中主要Package的说明:

文件名 空行 注释 代码行 说明
AboutActivity.java 13 4 47 关于软件说明
app\GNavigatorApplication.java 27 23 93 主应用类
app\SessionInfo.java 9 3 11 保持一些全局变量
app\SharedMapInstance.java 13 38 18 保存RasterMap类实例
app\SharedSearchResults.java 12 0 22 保存查询结果
database\DatabaseAssistant.java 42 63 122 用于数据库访问,用来管理设备,这部分可以不看
database\DBAdapter.java 27 126 77
database\DBMapper.java 4 38 7
database\DeviceDBMapper.java 20 86 130
database\DeviceLocationHistoryDBMapper.java 19 56 60
database\PersistentFacade.java 28 168 67
dataobject\Device.java 14 0 15 设备定义,设备命令,这部分可以不看
dataobject\DeviceCommand.java 7 0 17
dataobject\DeviceLocationHistory.java 5 0 7
device\AddDeviceActivity.java 14 1 70 软件可以用来跟踪其他设备或者报告设备当前位置,这部分可以不看
device\DeviceCommandListActivity.java 39 4 202
device\DeviceControlTabActivity.java 16 1 80
device\DeviceInfoActivity.java 8 1 49
device\DeviceLocationHistoryListActivity.java 19 1 81
device\ManageDeviceListActivity.java 44 4 208
drawing\AndroidFont.java 9 27 17 和Android平台相关的引路蜂图形接口实现
drawing\AndroidGraphics.java 20 150 57
drawing\AndroidGraphicsFactory.java 10 83 23
drawing\AndroidImage.java 20 114 65
gis\FileMapTiledZone.java 17 23 43 用来访问离线地图文件
GNavigatorActivity.java 82 31 516 主Activity
GuidebeeMapView.java 52 25 301 地图View,可以自定义并扩展,支持Gesture缩放等
location\LocationService.java 54 55 90 GPS服务
mapmode\MapModeListActivity.java 16 11 50 选项地图模式界面
routing\RouteDetailActivity.java 52 34 274 显示详细路径
routing\RoutingActivity.java 26 1 159 路径查询界面
search\SearchResultListActivity.java 41 25 246 查询结果
search\SearchSuggestionProvider.java 2 0 9 查询提示
settings\SettingsActivity.java 19 26 86 软件设置界面
sms\DeviceMessage.java 4 0 5 控制设备的短消息处理,这部分可以不看
sms\DeviceMessageCenter.java 7 0 18
sms\DeviceMessageProcessor.java 45 1 209
sms\SmsMessageReceiver.java 13 15 28
ToolbarButton.java 36 1 259 工具条自定义View

其中和Device相关的部分,包database, dataobject, device, sms 部分可以跳过不需要看,这部分和地图API使用关系不大,主要用来监视GPS设备或其它手机的位置。

drawing 包实现了地图API中和图形系统相关接口的Android平台上实现 ,引路蜂地图开发包中Gis.Drawing 类定义了几个抽象类或接口,对不同平台的图形系统进行了抽象。这些绘图的接口不同,如果在引路蜂地图开发包直接引用这些类方法,这样不同平台就会需要编译不同的开发包。通过抽象处理,引路蜂地图开发包并直接调用平台相关的图形类方法。而是通过 开发包 + 平台相关图形系统实现的方法,就可以实现跨平台.具体可以参见图形子系统

GuidebeeMapView 主要用来显示地图,这个给出的是一个参考实现,支持触摸屏平移,事件你可以把地图放在任何可以显示Image对象的控件上,添加你自己的Logo,支持MultiTouch 缩放等,本身是个自定义View (为View的子类),你可以自由扩展其功能。

FileMapTiledZone 用来支持从文件读取离线地图,这部分代码可以不需修改应用到你自己编写的引路蜂地图应用中。

应用程序框架基于RoboGuice 以简化代码,关于RoboGuice的使用可以参见本博客 的Android RoboGuice 使用指南

搜索使用Android平台的Search Framework。可以参见

App/Search/Invoke Search
App/Search/Query Search Results

再看一下项目的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pstreets.navigator"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="4" />

    <application
        android:name=".app.GNavigatorApplication"
        android:icon="@drawable/navigator"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <activity android:name=".GNavigatorActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value=".search.SearchResultListActivity" />
        </activity>
        <activity
            android:name=".search.SearchResultListActivity"
            android:launchMode="singleTop" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <activity
            android:name=".AboutActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".mapmode.MapModeListActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".routing.RoutingActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".routing.RouteDetailActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.ManageDeviceListActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.AddDeviceActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.DeviceControlTabActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.DeviceCommandListActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.DeviceInfoActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".device.DeviceLocationHistoryListActivity"
            android:launchMode="singleTop" >
        </activity>
        <activity
            android:name=".settings.SettingsActivity"
            android:launchMode="singleTop" >
        </activity>

        <receiver
            android:name=".sms.SmsMessageReceiver"
            android:enabled="true" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

        <provider
            android:name=".search.SearchSuggestionProvider"
            android:authorities="com.pstreets.navigator.search.SearchSuggestionProvider" />
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

</manifest>

使用的permission 需要有INTERNET(地图API需要访问网络) ,WRITE_EXTERNAL_STORAGE (离线地图需要访问SD卡)其它权限可以根据需要添加。
最后看一下软件的项目目录结构:

项目引用三个库,其中libgisengine.jar 为引路蜂地图API,其它两个为roboguice 库。 支持中英文两种资源 values-zh-rCN 为中文string 资源。

 

完整的Android引路蜂地图应用源码下载

这里提供一个比较完整的引路蜂地图Android应用源码下载,基本涵盖了引路蜂地图API的所有功能,包括离线地图,路径查询,地址查询,地图模式选择等。

设备上在Galaxy Nexus 和 Nexus S ,Nexus 7 Tablet 测试通过,可以做为你学习或开发引路蜂地图应用的参考。

完整的Android引路蜂地图应用源码 下载

主界面

搜索 ,包括: 地址查询, 本地查询,IP地图查询,经纬度查询

查询结果显示

路径查询

路径地图显示

地图模式:支持多种地图模式,并可以支持自定义地图

地址反编码

关于离线地图

应用缺省读取所有存放在SD卡guidebee 目录下所有 .map 文件,代码如下:

MapTileStreamReader streamReader = SharedMapInstance.mapTileDownloadManager
					.getInteralMapTileStreamReader();

	SharedMapInstance.worldMapFileStream = getResources()
			.openRawResource(R.raw.world);
	MapTiledZone worldmapZone = new MapTiledZone(new DataInputStream(
			SharedMapInstance.worldMapFileStream));
	streamReader.addZone(worldmapZone);
	try {
		File sdcardDir = Environment.getExternalStorageDirectory();
		File guidebeeDir = new File(sdcardDir, "guidebee");
		if (guidebeeDir.exists()) {
			FilenameFilter filter = new FilenameFilter() {
				public boolean accept(File dir, String filename) {
					if (filename.endsWith(".map")) {
						return true;
					}
					return false;

				}
			};

			String[] allMapfiles = guidebeeDir.list(filter);
			String path = guidebeeDir.getAbsolutePath();
			if (allMapfiles != null) {
				for (int i = 0; i < allMapfiles.length; i++) {

					FileMapTiledZone mapTileZone = new FileMapTiledZone(
							path + File.separator + allMapfiles[i],
							false);
					Log.p(allMapfiles[i]);
					streamReader.addZone(mapTileZone);
				}

			}
		}

	} catch (Exception e) {

	}finally{
		streamReader.open();
	}

} catch (Exception e) {

}

你也可以根据你自己的需求放在其它目录下,记得要更改代码中对应的路径。

GPS支持,应用也提供了GPS支持,可以显示当前位置

关于软件使用许可,源码中包含试用许可

地图上会随机显示“Guidebee” 水印。正式版去除水印,关于正式版可以参见版本说明。

离线地图下载可以参见 离线地图工具 和离线地图下载 ,你可以通过离线地图工具自己制作离线地图,或是从本网站下载。

软件采用RoboGuice ,关于RoboGuice可以参见

Android RoboGuice 使用指南

  1. Android RoboGuice 使用指南(1):概述
  2. Android RoboGuice 使用指南(2):第一个例子Hello World
  3. Android RoboGuice 使用指南(3):Bindings 概述
  4. Android RoboGuice 使用指南(4):Linked Bindings
  5. Android RoboGuice 使用指南(5):Binding Annotations
  6. Android RoboGuice 使用指南(6):Instance Bindings
  7. Android RoboGuice 使用指南(7):@Provides Methods
  8. Android RoboGuice 使用指南(8):Provider Bindings
  9. Android RoboGuice 使用指南(9):Untargetted Bindings
  10. Android RoboGuice 使用指南(10):Just-in-time Bindings
  11. Android RoboGuice 使用指南(11):Scopes
  12. Android RoboGuice 使用指南(12):如何绑定generic类型
  13. Android RoboGuice 使用指南(13):RoboGuice 功能描述
  14. Android RoboGuice 使用指南(14):Inject View
  15. Android RoboGuice 使用指南(15):Inject Context
  16. Android RoboGuice 使用指南(16):Standard Injection
  17. Android RoboGuice 使用指南(17):Inject Extra
  18. Android RoboGuice 使用指南(18):Inject Resources
  19. Android RoboGuice 使用指南(19):发送接收Events
  20. Android RoboGuice2 使用指南(1): 概述
  21. Android RoboGuice2 使用指南(2): 第一个例子Hello World
  22. Android RoboGuice2 使用指南(3): Inject 自定义View
  23. Android RoboGuice2 使用指南(4): 综合示例Astroboy

完整的Android引路蜂地图应用源码 下载