2013年1月14日 星期一

Android Google Map V2 Setting 101

Checkpoint 
1.          Keystore
1.1         keytool + debug.keystore = SHA1
1.2         SHA1 + Api Console + Package name = keystore

keytool command :
       keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

Api Console set "Google Maps Android API v2" Service on.
 
2.          Android Play Service
2.1  Install from "Android SDK Manager"
2.2  Include (Project -> Properties -> Android -> Library, Add -> google-play-services_lib)
2.3  Put it into Project's libs directory (google-play-services.jar & android-support-v4.jar)

3.          AndroidManifest.xml
3.1  uses-permission (after tag "<manifest>")
3.1.1        <uses-permission android:name="android.permission.INTERNET"/>
3.1.2        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.1.3        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
3.1.4        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
3.1.5        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
3.1.6    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
3.1.7    <permission
          android:name="org.jincheng.map2.permission.MAPS_RECEIVE"
          android:protectionLevel="signature"/>

3.2  OpenGL 2.0
3.2.1        <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
3.3  MD5 key (before tag "</application>")
3.3.1        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="md5_key"/>




相關網站
1.  Android Api Documents       
2.  Android Maps V2 Quick Start
3. Google Api Console
 

2012年8月28日 星期二

Android Google Map (101)


1、Install the Google APIs add-on in Eclipse

2、Android Project     

  • target Google API 

  • Manifest (AndroidManifest.xml)

    • com.google.android.maps  (a child of <application> element)
      • <uses-library android:name="com.google.android.maps"/>
    • android.permission.INTERNET (a child of <manifest> element)
      • <uses-permission android:name="android.permission.INTERNET"/>
    • @android:style/Theme.NoTitleBar
      • <activity android:name=".HelloGoogleMaps" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">

  • res/layout/mapview.xml
    • <?xml version="1.0" encoding="utf-8"?>
    • <com.google.android.maps.MapView
    •     xmlns:android="http://schemas.android.com/apk/res/android"
    •     android:id="@+id/mapview"
    •     android:layout_width="fill_parent"
    •     android:layout_height="fill_parent"
    •     android:clickable="true"
    •     android:apiKey="Your Maps API Key goes here"
    • />
  • extends MapActivity
    • create a object of MapView
      • setBuiltInZoomControls(true)
    • override isRouteDisplayed()

3、Obtaining a Maps API Key

  • debug
    • ~/.android/debug.keystore
    • keytool -list -alias androiddebugkey -keystore <path_to_debug_keystore>.keystore -storepass android -keypass android
  • release
    • keytool -list -alias alias_name -keystore my-release-key.keystore
  • https://developers.google.com/android/maps-api-signup
    • Use Certificate fingerprint (MD5) to get Map API



2012年3月18日 星期日

Working with XML on Android

Reference : http://www.ibm.com/developerworks/opensource/library/x-android/

在IBM這篇XML的文章中,提供了很好的XML解譯方式

加上小小的修改,成為想要的流程



這樣就可以只要增修 Handler (extends from XmlHandler) 就可處理其他 Xml format
(Entity 好像也應該要變成 Interface or Abstract Object ??)


public interface FeedParser {
 List parse();
}

public abstract class BaseFeedParser implements FeedParser {

 private final URL feedUrl;

 protected BaseFeedParser(String feedUrl){
  try {
   this.feedUrl = new URL(feedUrl);
  } catch (MalformedURLException e) {
   throw new RuntimeException(e);
  }
 }

 protected InputStream getInputStream() {
  try {
      return feedUrl.openConnection().getInputStream();
  } catch (IOException e) {
      throw new RuntimeException(e);
  }
 }
}

public class SaxFeedParser extends BaseFeedParser {

 private XmlHandler handler;
 
 public SaxFeedParser(String feedUrl){
  super(feedUrl);
 }
 
 public List parse() {
     SAXParserFactory factory = SAXParserFactory.newInstance();
     try {
  SAXParser parser = factory.newSAXParser();
  parser.parse(this.getInputStream(), handler);
   
  return handler.getMessages();
  
     } catch (Exception e) {
  throw new RuntimeException(e);
     } 
 }

 public void setHandler(XmlHandler handler) {
  this.handler = handler;
 }
}

public abstract class XmlHandler extends DefaultHandler {

 public abstract List getMessages();
}

2011年12月2日 星期五

iPhone 3D, How to ?

XCode 4.2 中的 template OpenGL ES, 只能表現出 2D 的圖;要有 3D 功能需加入:
(OpenGL ES 1.1 Only)

1、在 EAGLView.hprivate 區段中宣告 
      GLuint depthRenderbuffer;

2、在 EAGLView.m 的 createFramebuffer 中加入
        glGenRenderbuffersOES(1, &depthRenderbuffer);
        glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
        glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES
                                             framebufferWidth, framebufferHeight);
        glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES
                                                   GL_RENDERBUFFER_OES, depthRenderbuffer);

3、在 EAGLView.m 的 deleteFramebuffer 中加入
        if(depthRenderbuffer) {
            glDeleteRenderbuffersOES(1, &depthRenderbuffer);
            depthRenderbuffer = 0;
        }

4、3D 的 function 呼叫 (放在 viewController 的 - (void)drawFrame; 中)

        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        glClearDepthf(1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        
        // start drawing 3D objects
        glEnable(GL_DEPTH_TEST);


        // Projection mode
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        // glOrthof(垂直模式) or glFrustumf(透視模式)
        glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -10.0f, 10.0f); 

        // tranform the camara for a better view
        glTranslatef(0.07f, 0.0f, 0.0f);
        glRotatef(-30.0f, 0.0f, 1.0f, 0.0f);


        // Model mode
        glMatrixMode(GL_MODELVIEW);
        
        // enable GL states for texturing
        // this includes cube and 2D instructions and buttons
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glEnable(GL_TEXTURE_2D);