Search

Android google Map v2

Programming/Android 2013. 4. 27. 13:46 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.






2012년 12월 4일, Google Play Services가 업데이트되면서 새 버전의 안드로이드용 API가 공개되었습니다.

주요 변경사항은 다음과 같습니다.


  • MapFragment 지원으로 다양한 해상도의 단말 지원 용이 (MapActivity가 아닌 일반 액티비티에서도 MapView 사용가능)
  • 3D맵 지원
  • 한층 편리해진 마커 사용법

이와 함께, 구글맵 API를 사용하기 위한 인증 및 사용 절차가 다소 변경되었습니다. 이 포스트에서는 새로운 구글맵 API를 사용하는 방법에 대해 자세히 알아보도록 하겠습니다.


구글맵 API를 사용하기 위한 단계를 간략히 요약하면 다음과 같습니다.


1. Android SDK Manager를 통해 Google Play Services SDK 다운로드 (Rev.3 이상)

2. 새 프로젝트 생성 및 구글맵 라이브러리 프로젝트를 Workspace로 가져오기

3. 구글맵 인증키(API Key) 획득에 필요한 keystore/key fingerprint 획득

4. 구글맵 인증키 발급

5. 구글맵을 사용할 프로젝트의 매니페스트 설정

6. 레이아웃에 구글맵 추가하기



1. Google Play Services SDK 다운로드


Android SDK Manager를 실행한 후, 아래의 Extra 카테고리에서 Google Play Services 패키지를 설치합니다.

Revision(Rev.) 3 이상이여야 하며, 설치가 완료되면 다음과 같이 Installed로 표시됩니다.




2. 새 프로젝트 생성 및 구글맵 라이브러리 프로젝트 가져오기


기존의 구글맵 라이브러리가 시스템 이미지(Android X.X / Google APis로 구분)에 포함되어 있었던 것과 달리, 이번 버전부터는 별도의 라이브러리 프로젝트로 제공됩니다. 때문에 이를 사용하려면 이클립스 내 자신의 Workspace로 구글맵 라이브러리 프로젝트를 불러와야 합니다.


이클립스의 메뉴에서 File > New > Other...를 선택한 후, Android Project from Existing Code를 선택합니다.




다음, Root Directory에 구글맵 라이브러리 프로젝트가 있는 폴더를 지정해줍니다. 구글맵 라이브러리 프로젝트는 다음 경로에 저장되어 있습니다.


[안드로이드 SDK경로]/extras/google/google/google_play_services/libproject/google-play-services_lib


여러 사람과 함께 작업해야 하는 프로젝트일 경우, 라이브러리 프로젝트를 참조할 때 Workspace에 상대적인 경로를 사용하여 참조하도록 해야 하므로 Copy project into workspace에 체크해줍니다. 




다음과 같이 Workspace에 Google Play Services 라이브러리 프로젝트가 추가됩니다.




이제 새 프로젝트를 생성한 후, 위에서 추가한 라이브러리 프로젝트를 참조하도록 설정할 차례입니다. 프로젝트를 생성한 후, 프로젝트 속성 창(프로젝트 이름 오른쪽클릭 - Properties)을 열어 왼쪽 탭에서 'Android' 항목을 선택한 후 우측 하단의 'Library' 영역에서 'Add...' 버튼을 눌러 google-play-services_lib를 선택합니다.




다음과 같이 표시되면 제대로 설정된 것입니다.


이것으로 기본적인 프로젝트 설정은 끝났습니다.


3. 구글맵 인증키 발급에 필요한 keystore/key fingerprint 획득


구글맵을 사용하려면 인증키(API Key)를 발급받아야 합니다. 애플리케이션 패키지 (*.apk)생성시 사용하는 서명 정보(key)를 사용하여 인증을 수행하게 되며, 버전1에서는 MD5 지문을 사용했는데 이번 버전부터는 SHA1 지문을 사용하도록 변경되었습니다.


용어정리


애플리케이션 서명 : 

애플리케이션을 배포할 때, 개발자는 애플리케이션을 패키지(*.apk) 형태로 만들게 됩니다. 이 때, 이 패키지를 '누가' 패키징했는지 정보를 기록하게 되는데, 이를 '애플리케이션 서명' 이라 합니다. 이는 애플리케이션이 배포된 이후 악의적인 목적으로 리패키징(애플리케이션 내용물을 변조한 후 다시 패키징하는 것)했을 때, 이를 원본과 구분하기 위해 사용합니다.


keystore/key : 

애플리케이션 서명을 위해 사용하는 수단으로, 자신의 '서명' 이라 할 수 있습니다. 서명은 'key'로 하게 되며, keystore는 서명을 할 수 있는 key들을 담을 수 있는 파일을 뜻합니다. 이클립스를 통한 개발시 기본으로 디버그용 키를 사용하여 애플리케이션 패키지를 서명하게 되며, 안드로이드 마켓 등 외부로 애플리케이션을 배포할 때는 자신의 키를 사용하여 서명한 후 배포해야 합니다. (안드로이드 마켓의 경우 최초 애플리케이션 업로드시 사용한 키를 잃어버리면 더 이상 애플리케이션을 업데이트할 수 없습니다)


(MD5/SHA1)지문 : 

각 서명을 고유하게 식별할 수 있는 고유한 문자열로, 문자열을 생성하는 알고리즘에 따라 MD5, SHA1 지문으로 구분됩니다.


이클립스를 통해 개발을 하게되면, 기본값으로 디버그용 키를 통해 애플리케이션 패키지를 서명하게 됩니다. 때문에, 구글맵을 사용하는 애플리케이션을 테스트하려면 배포시 사용할 키 뿐만 아니라 디버그용 키 또한 등록해 주어야 합니다.


먼저, 디버그용 키의 지문을 얻기 위해 디버그용 키가 저장되어 있는 곳으로 이동합니다. 명령 프롬프트/터미널을 실행한 후, 운영체제에 따라 각각 다음의 경로로 이동합니다.


Windows XP : C:\Documents And Settings\[사용자 계정]\.android

Windows Vista/7 : C:\Users\[사용자 계정]\.android

OSX/Linux : ~/.android


다음, 아래의 명령을 입력하여 디버그용 키의 지문을 조회합니다.


keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android


다음과 같이 인증서 지문이 표시됩니다. 여기에서 우리가 필요한 것은 인증 지문 항목 중 SHA1 항목입니다. 이 정보를 복사해둡니다.



4. 구글맵 인증키 발급받기


이제 구글지도 API 키를 발급받기 위해 Google APis Console(https://code.google.com/apis/console/)로 이동합니다. Google APIs Console에서는 프로젝트별로 사용하는 구글 API를 관리할 수 있도록 되어있습니다. 아직 프로젝트가 없다면 왼쪽의 드롭다운 메뉴에서 Create...를 눌러 새 프로젝트를 생성합니다. 저는 'AndroidMapsV2'라는 이름으로 프로젝트를 생성해 보겠습니다.



프로젝트를 생성하면 활성화할 서비스 목록이 표시됩니다. 목록에서 Google Maps Android API v2를 찾아 활성화해줍니다.




다음, 왼쪽 탭에서 API Access를 선택한 후 Simple API Access 항목에 Create new Android key...를 선택합니다.




이제 여기에 이전에 조회한 SHA1 지문과 애플리케이션의 패키지 이름을 다음과 같은 형식에 맞춰 입력합니다. 


[SHA1지문];[애플리케이션 패키지 이름]


여기에서는 com.androidhuman.example.mapsv2example 이라는 애플리케이션에서 구글맵을 사용하도록 하는 것을 가정하여 입력해 보았습니다.




Create 버튼을 누르면 다음과 같이 API Key가 발급됩니다.


5. 구글맵 사용을 위한 매니페스트 설정


매니페스트에서 추가해야 할 항목들은 다음과 같습니다.


- OpenGL 2.0 이상을 지원하는 단말기에서 실행되도록 하기 (Uses feature)

- 애플리케이션의 Meta-data에 구글맵 API Key 추가

- 구글맵의 정상적인 사용을 위한 권한 추가


OpenGL 2.0 이상을 지원하는 단말기에서 실행되도록 하기


이번 버전의 구글맵이 OpenGL 2.0을 사용하게 됨에 따라, 이를 이원하지 않는 단말기에서는 구동할 수 없습니다. 때문에 매니페스트에 이를 지원하는 단말기에서는 설치가 되지 않도록 별도의 설정을 해 주어야 합니다.


AndroidManifest.xml을 연 후, Manifest 탭 하단의 Manifest Extras 영역을 찾아봅니다.




다음, Add...를 눌러 Uses Feature를 선태한 후, 다음과 같이 입력합니다.



Meta data로 구글맵 API 추가하기


매니페스트의 'Application' 탭을 선택한 후, Application Nodes 항목에서 Add...버튼을 누른 후 Meta Data를 선택합니다.

그 다음, Name과 Data에 다음과 같이 입력합니다.


Name : com.google.android.maps.v2.API_KEY

Value : 발급받은 구글맵 API Key




권한 추가하기


구글맵 데이터를 받아오기 위해 필요한 권한을 추가합니다. 먼저, API Key와 연동하여 구글맵 데이터를 받아올 수 있는 권한을 생성하고 추가해야 합니다. 


매니페스트의 'Permission' 탭을 선택한 후, Add...를 선택하여 'Permission'을 선택합니다. Name과 Protection level에 각각 다음을 입력합니다.


Name : [패키지 이름].permission.MAPS_RECEIVE

Protection level : signature


애플리케이션 패키지 이름이 com.androidhuman.example.mapsv2example일 경우 Name 에는 com.androidhuman.example.mapsv2example.permission.MAPS_RECEIVE 를 넣어주면 됩니다.


다음, Add...버튼을 누른 후 이번에는 'Uses Permission'을 선택한 후, Name에 위에서 입력한 권한(패키지이름.permission.MAPS_RECEIVE)을 똑같이 입력해줍니다.


다음, 같은 방식으로 다음의 권한들을 Uses Permission 으로 추가해줍니다.


  • android.permission.INTERNET
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION
  • com.google.android.providers.gsf.permission.READ_GSERVICES



6. 레이아웃에 구글맵 추가하기


이제 레이아웃에 구글맵을 추가할 차례입니다. 이전 버전의 구글맵에서는 구글맵을 표시하려면 MapActivity를 사용해야 했지만, 이번 버전부터는 Fragment 형태로 구글맵이 지원되어 어느 곳에서나 쉽게 구글맵을 사용할 수 있습니다.


프래그먼트 형태로 제공되는 구글맵을 사용하려면 레이아웃에 다음과 같이 선언해주면 됩니다.

01.<?xml version="1.0" encoding="utf-8"?>
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03.android:layout_width="match_parent"
04.android:layout_height="match_parent"
05.android:orientation="vertical" >
06. 
07.<fragment xmlns:android="http://schemas.android.com/apk/res/android"
08.android:id="@+id/map"
09.android:layout_width="match_parent"
10.android:layout_height="match_parent"
11.class="com.google.android.gms.maps.MapFragment" />
12. 
13. 
14.</LinearLayout>


애플리케이션을 실행하면 다음과 같이 지도가 표시되는 것을 확인할 수 있습니다.




강좌에서 사용한 예제 프로젝트 파일을 첨부하였으니 자세한 사항은 프로젝트 파일을 참고하시면 됩니다. ;)

예제 프로젝트를 테스트할 때, API Key를 꼭 자신이 발급받은 것으로 교체하고, 애플리케이션을 Google APIs Console에 등록했는지 확인 후 진행해주세요!



 MapsV2.zip

'Programming > Android' 카테고리의 다른 글

MyLocation Class  (0) 2013.05.04
Android Battery Monitor  (0) 2013.04.29
안드로이드 APK 추출하기  (0) 2013.04.25
Thread 와 Handler 테스트  (0) 2013.04.13
테이블 동적 생성  (0) 2013.03.23

안드로이드 APK 추출하기

Programming/Android 2013. 4. 25. 14:48 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
배포되어있는 어플리케이션의 res 파일

즉, 그림 파일이나 레이아웃 등 res 폴더 내에 있는 파일들을 보고싶다면


1. APK 파일을 추출한다.

원하는 어플을 설치후

Linda FIle Manager 를 설치한다.



https://play.google.com/store/apps/details?id=com.lindaandny.lindamanager&hl=ko



Linda File Manager 의


백업 기능을 이용하여 깔려있는 어플의 apk 파일을 추출해 낼 수 있다.


백업할 어플에 Long Click 을 하면 Backup 메뉴가 뜨고 


Backup 을 클릭할 시


Toast 메세지로 저장된 경로가 뜬다.


2. 해당 APK 파일을 컴퓨터로 옮긴다.


3. APK 파일을


7-Zip


http://www.7-zip.org/


을 이용해서 압축을 풀면


아래와 같이 res 폴더를 추출해 낼 수 있다.







'Programming > Android' 카테고리의 다른 글

Android Battery Monitor  (0) 2013.04.29
Android google Map v2  (2) 2013.04.27
Thread 와 Handler 테스트  (0) 2013.04.13
테이블 동적 생성  (0) 2013.03.23
TabActivity 사용법  (0) 2013.03.23

Thread 와 Handler 테스트

Programming/Android 2013. 4. 13. 15:19 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

package com.naver.tansanc.test01;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

 

public class MainActivity extends Activity {

 

    public TextView textView;

 

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.test01);

        textView = (TextView) findViewById(R.id.textview);

    }

 

    public void mOnClick(View v) {

        if (v.getId() == R.id.button) {

           Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();

          countThread ct = new countThread(mHandler);

           ct.start();

        } else if (v.getId() == R.id.button2) {

           Toast.makeText(this, "Hello2", Toast.LENGTH_SHORT).show();

        }

    }

    Handler mHandler = new Handler() {

        public void handleMessage(Message msg) {

           switch (msg.what) {

           case 3:

               textView.setText((String) msg.obj);

           }

        }

    };

}

class countThread extends Thread {

    public void run() {

        super.run();

        int i = 0;

        while (true) {

           Message msg = new Message();

           msg.what = 3;

           msg.obj = (Object) ("Hello " + i);

           mHandler.sendMessage(msg);

           try {

               Thread.sleep(1000);

           } catch (InterruptedException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           }

           i++;

        }

 

    }

    Handler mHandler;

    countThread(Handler mHandler) {

        this.mHandler = mHandler;

    }

}



Test01.XML


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

 

    <TextView

        android:id="@+id/textview"

        android:layout_width="match_parent"

        android:layout_height="wrap_content" />

    <Button

        android:id="@+id/button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="mOnClick"

        android:text="Hello"/>

    <Button

        android:id="@+id/button2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="mOnClick"

        android:text="Hello2"/>

 

</LinearLayout>


'Programming > Android' 카테고리의 다른 글

Android google Map v2  (2) 2013.04.27
안드로이드 APK 추출하기  (0) 2013.04.25
테이블 동적 생성  (0) 2013.03.23
TabActivity 사용법  (0) 2013.03.23
다중 액티비티 예제  (0) 2013.03.23

테이블 동적 생성

Programming/Android 2013. 3. 23. 20:02 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

public class MainActivity extends Activity {

 

        @Override

        protected void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.activity_main);

 

               /* Find Tablelayout defined in main.xml */

               TableLayout tl = (TableLayout) findViewById(R.id.store_table);

              

               /* Create a new row to be added. */

               for (int i = 0; i < 3; i++) {

                       TableRow tr = new TableRow(this);

                       tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

                                      LayoutParams.WRAP_CONTENT));

                      

                       /* Create a Button to be the row-content. */

                       Button b = new Button(this);

                       b.setText("Dynamic Button");

                       b.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

                                      LayoutParams.WRAP_CONTENT));

                      

                       /* Add Button to row. */

                      

                       tr.addView(b);

                       Button c = new Button(this);

                       c.setText("Dynamic Button2");

                       c.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

                                      LayoutParams.WRAP_CONTENT));

                      

                       /* Add Button to row. */

                       tr.addView(c);

                      

                       /* Add row to TableLayout. */

                       tl.addView(tr, new TableLayout.LayoutParams(

                                      LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

               }

        }

}

'Programming > Android' 카테고리의 다른 글

안드로이드 APK 추출하기  (0) 2013.04.25
Thread 와 Handler 테스트  (0) 2013.04.13
TabActivity 사용법  (0) 2013.03.23
다중 액티비티 예제  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16

TabActivity 사용법

Programming/Android 2013. 3. 23. 17:25 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MainActivity 


package com.example;

 

import android.app.TabActivity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.widget.TabHost;

 

public class MainActivity extends TabActivity {

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.temp);

 

        TabHost tabHost = getTabHost();

        Intent intent = new Intent().setClass(this, temp02Activity.class);

        tabHost.addTab(

               tabHost.newTabSpec("temp01")

               .setIndicator("Temp01")

               .setContent(intent));

        intent = new Intent().setClass(this, temp02Activity.class);

        tabHost.addTab(tabHost.newTabSpec("temp02")

               .setIndicator("Temp01")

               .setContent(intent));

        tabHost.setCurrentTab(0);

    }

 

    public boolean onCreateOptionsMenu(Menu menu) {

        super.onCreateOptionsMenu(menu);

        getMenuInflater().inflate(R.menu.menu, menu);

        return true;

    }

}



temp.xml


<?xml version="1.0" encoding="utf-8"?>

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@android:id/tabhost"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent" >

 

 

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:orientation="vertical" >

 

        <TabWidget

            android:id="@android:id/tabs"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content" >

        </TabWidget>

 

        <FrameLayout

            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:padding="5dp" />

    </LinearLayout>

 

</TabHost>

'Programming > Android' 카테고리의 다른 글

Thread 와 Handler 테스트  (0) 2013.04.13
테이블 동적 생성  (0) 2013.03.23
다중 액티비티 예제  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16
안드로이드 실습  (0) 2013.03.09

다중 액티비티 예제

Programming/Android 2013. 3. 23. 16:11 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

다중 액티비티 예제


MainActivity.java


 

public class MainActivity extends Activity {

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.temp);

    }

 

    public void mOnClick(View v)

    {

        Intent intent = new Intent(this, SubActivity.class);

       

        switch(v.getId())

        {

        case R.id.Seoul:

           intent.putExtra("buttonName", "Seoul");

           startActivity(intent);

           break;

        case R.id.Busan:

           intent.putExtra("buttonName", "Busan");

           startActivity(intent);

           break;

        }

    }

 

    public boolean onCreateOptionsMenu(Menu menu) {

        super.onCreateOptionsMenu(menu);

        getMenuInflater().inflate(R.menu.menu, menu);

        return true;

    }

}


SubActivity.java


 

public class SubActivity extends Activity{

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.temp2);

        Intent intent = getIntent();

        String str = intent.getStringExtra("buttonName");

        if( str != null)

        {

           if( str.equals("Seoul"))

           {

               ImageView imageView = (ImageView)findViewById(R.id.imageView);

               imageView.setImageResource(R.drawable.seoul);

           }

           else if( str.equals("Busan"))

           {

               ImageView imageView = (ImageView)findViewById(R.id.imageView);

               imageView.setImageResource(R.drawable.busan);           

           }

        }

    }

    public void mOnClick(View v)

    {

    }

}



 

'Programming > Android' 카테고리의 다른 글

테이블 동적 생성  (0) 2013.03.23
TabActivity 사용법  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16
안드로이드 실습  (0) 2013.03.09
Intent 활용하기  (0) 2013.03.08

안드로이드 레이아웃 예제

Programming/Android 2013. 3. 16. 16:40 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/page1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Page1" />

        <Button
            android:id="@+id/page2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:text="Page2" />

        <Button
            android:id="@+id/page3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

 android:text="Page3" />
   </LinearLayout>

    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <LinearLayout
            android:id="@+id/frame_01"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ff0000" >
        </LinearLayout>
        <LinearLayout
            android:id="@+id/frame_02"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#00ff00" >
        </LinearLayout>
        <LinearLayout
            android:id="@+id/frame_03"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#0000ff" >
        </LinearLayout>
    </FrameLayout>

</LinearLayout>

 

'Programming > Android' 카테고리의 다른 글

TabActivity 사용법  (0) 2013.03.23
다중 액티비티 예제  (0) 2013.03.23
안드로이드 실습  (0) 2013.03.09
Intent 활용하기  (0) 2013.03.08
ubuntu 에 jdk 간편하게 설치하기  (0) 2013.02.27

안드로이드 실습

Programming/Android 2013. 3. 9. 12:35 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

mainActivity.java 에 추가 

 

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

       super.onActivityResult(requestCode, resultCode, data);

       if (requestCode == 10001) {

           if (resultCode == SUCCESS) {

              ((TextView) findViewById(R.id.tv_selected_phone)).setText(data

                      .getStringExtra(SELECTED_PHONE));

           } else {

              ((TextView) findViewById(R.id.tv_selected_phone)).setText("");

           }

       }

    }

 

    private void showContactlist() {

       Intent intent = new Intent(MainActivity.this, ContactListActivity.class)

               .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP

                     | Intent.FLAG_ACTIVITY_SINGLE_TOP);

 

       startActivityForResult(intent, 10001);

    }

 

ContactListActivity.java 생성

 

public class ContactListActivity extends Activity {

 

    private ListView lv_contactlist;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_contactlist);

       lv_contactlist = (ListView) findViewById(R.id.lv_contactlist);

    }

 

    @Override

    protected void onResume() {

       super.onResume();

   

 

       ContactsAdapter adapter = new ContactsAdapter(ContactListActivity.this,

               R.layout.layout_phonelist, getContactList());

 

       lv_contactlist.setAdapter(adapter);

       lv_contactlist

              .setOnItemClickListener(new AdapterView.OnItemClickListener() {

 

                  public void onItemClick(AdapterView<?> contactlist, View v,

                         int position, long resid) {

                     Contact phonenumber = (Contact) contactlist

                             .getItemAtPosition(position);

 

                     if (phonenumber == null) {

                         return;

                     }

 

                     Intent data = new Intent();

                      data.putExtra(MainActivity.SELECTED_PHONE, phonenumber

                             .getPhonenum().replaceAll("-", ""));

 

                      setResult(MainActivity.SUCCESS, data);

                     finish();

                  }

              });

 

    }

    private ArrayList<Contact> getContactList() {

 

       Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

 

       String[] projection = new String[] {

           ContactsContract.CommonDataKinds.Phone.CONTACT_ID,

               ContactsContract.CommonDataKinds.Phone.NUMBER,

           ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };

 

       String[] selectionArgs = null;

 

       String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME

              + " COLLATE LOCALIZED ASC";

 

       Cursor contactCursor = managedQuery(uri, projection, null,

              selectionArgs, sortOrder);

 

       ArrayList<Contact> contactlist = new ArrayList<Contact>();

 

       if (contactCursor.moveToFirst()) {

           do {

              String phonenumber = contactCursor.getString(1).replaceAll("-",

                     "");

              if (phonenumber.length() == 10) {

                  phonenumber = phonenumber.substring(0, 3) + "-"

                        + phonenumber.substring(3, 6) + "-"

                         + phonenumber.substring(6);

             } else if (phonenumber.length() > 8) {

                  phonenumber = phonenumber.substring(0, 3) + "-"

                        + phonenumber.substring(3, 7) + "-"

                         + phonenumber.substring(7);

              }

 

              Contact acontact = new Contact();

               acontact.setPhotoid(contactCursor.getLong(0));

              acontact.setPhonenum(phonenumber);

               acontact.setName(contactCursor.getString(2));

 

              contactlist.add(acontact);

           } while (contactCursor.moveToNext());

       }

 

       return contactlist;

 

    }

 

    private class ContactsAdapter extends ArrayAdapter<Contact> {

 

       private int resId;

       private ArrayList<Contact> contactlist;

       private LayoutInflater Inflater;

       private Context context;

 

       public ContactsAdapter(Context context, int textViewResourceId,

              List<Contact> objects) {

           super(context, textViewResourceId, objects);

           this.context = context;

           resId = textViewResourceId;

           contactlist = (ArrayList<Contact>) objects;

           Inflater = (LayoutInflater) ((Activity) context)

              .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

       }

 

       @Override

       public View getView(int position, View v, ViewGroup parent) {

           ViewHolder holder;

           if (v == null) {

              v = Inflater.inflate(resId, null);

              holder = new ViewHolder();

              holder.tv_name = (TextView) v.findViewById(R.id.tv_name);

              holder.tv_phonenumber = (TextView) v

                      .findViewById(R.id.tv_phonenumber);

              holder.iv_photoid = (ImageView) v.findViewById(R.id.iv_photo);

              v.setTag(holder);

           } else {

              holder = (ViewHolder) v.getTag();

           }

 

           Contact acontact = contactlist.get(position);

 

           if (acontact != null) {

               holder.tv_name.setText(acontact.getName());

           holder.tv_phonenumber.setText(acontact.getPhonenum());

 

              Bitmap bm = openPhoto(acontact.getPhotoid());

              if (bm != null) {

                  holder.iv_photoid.setImageBitmap(bm);

              } else {

              holder.iv_photoid.setImageDrawable(getResources()

                         .getDrawable(R.drawable.ic_launcher));

              }

 

           }

 

           return v;

       }

 

       private Bitmap openPhoto(long contactId) {

           Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,

                  contactId);

           InputStream input = ContactsContract.Contacts

              .openContactPhotoInputStream(context.getContentResolver(),

                         contactUri);

 

           if (input != null) {

              return BitmapFactory.decodeStream(input);

           }

 

           return null;

       }

 

       private class ViewHolder {

           ImageView iv_photoid;

           TextView tv_name;

           TextView tv_phonenumber;

       }

 

    }

}

 

 

Contact.Java 생성

 

public class Contact {

    long photoid;

    String phonenum;

    String name;

   

    public long getPhotoid() {

       return photoid;

    }

    public void setPhotoid(long photoid) {

       this.photoid = photoid;

    }

    public String getPhonenum() {

       return phonenum;

    }

    public void setPhonenum(String phonenum) {

       this.phonenum = phonenum;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

}

 

activity_contactlist.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lv_contactlist"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</ListView>


layout_phonelist.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFFFF"
        android:gravity="center_vertical"
        android:weightSum="10" >

        <ImageView
            android:id="@+id/iv_photo"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:scaleType="fitXY" />

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:singleLine="true"
            android:text="아무개"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/tv_phonenumber"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="6"
            android:singleLine="true"
            android:text="000-0000-0000"
            android:textSize="20sp" />
    </LinearLayout>

</LinearLayout>

 

'Programming > Android' 카테고리의 다른 글

다중 액티비티 예제  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16
Intent 활용하기  (0) 2013.03.08
ubuntu 에 jdk 간편하게 설치하기  (0) 2013.02.27
R.java import 에러  (0) 2012.11.27

Intent 활용하기

Programming/Android 2013. 3. 8. 19:25 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

//show webapp:

 

Uri uri = Uri.parse("http://www.google.com");

Intent it  = new Intent(Intent.ACTION_VIEW,uri);

startActivity(it);

 

//show maps:

Uri uri = Uri.parse("geo:38.899533,-77.036476");

Intent it = new Intent(Intent.Action_VIEW,uri);

startActivity(it);

 

//show ways

Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");

Intent it = new Intent(Intent.ACTION_VIEW,URI);

startActivity(it);

 

//call dial program

Uri uri = Uri.parse("tel:xxxxxx");

Intent it = new Intent(Intent.ACTION_DIAL, uri); 

startActivity(it); 

 

Uri uri = Uri.parse("tel.xxxxxx");

Intent it =new Intent(Intent.ACTION_CALL,uri);

//don't forget add this config:

<uses-permission id="android.permission.CALL_PHONE" />

 

//send sms/mms

//call sender program

Intent it = new Intent(Intent.ACTION_VIEW);  

it.putExtra("sms_body", "The SMS text");  

it.setType("vnd.android-dir/mms-sms");  

startActivity(it); 

 

//send sms

Uri uri = Uri.parse("smsto:0800000123");  

Intent it = new Intent(Intent.ACTION_SENDTO, uri);  

it.putExtra("sms_body", "The SMS text");  

startActivity(it); 

 

//send mms

Uri uri = Uri.parse("content://media/external/images/media/23");  

Intent it = new Intent(Intent.ACTION_SEND);  

it.putExtra("sms_body", "some text");  

it.putExtra(Intent.EXTRA_STREAM, uri);  

it.setType("image/png");  

startActivity(it);

 

//send email

 

Uri uri = Uri.parse("mailto:xxx@abc.com");

Intent it = new Intent(Intent.ACTION_SENDTO, uri);

startActivity(it);

 

Intent it = new Intent(Intent.ACTION_SEND);  

it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");  

it.putExtra(Intent.EXTRA_TEXT, "The email body text");  

it.setType("text/plain");  

startActivity(Intent.createChooser(it, "Choose Email Client")); 

 

Intent it=new Intent(Intent.ACTION_SEND);    

String[] tos={"me@abc.com"};    

String[] ccs={"you@abc.com"};    

it.putExtra(Intent.EXTRA_EMAIL, tos);    

it.putExtra(Intent.EXTRA_CC, ccs);    

it.putExtra(Intent.EXTRA_TEXT, "The email body text");    

it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");    

it.setType("message/rfc822");    

startActivity(Intent.createChooser(it, "Choose Email Client"));  

 

 

//add extra

Intent it = new Intent(Intent.ACTION_SEND);  

it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  

it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");  

sendIntent.setType("audio/mp3");  

startActivity(Intent.createChooser(it, "Choose Email Client"));

 

//play media

Intent it = new Intent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("file:///sdcard/song.mp3");

it.setDataAndType(uri, "audio/mp3");

startActivity(it);

 

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");  

Intent it = new Intent(Intent.ACTION_VIEW, uri);  

startActivity(it); 

 

//Uninstall

Uri uri = Uri.fromParts("package", strPackageName, null);  

Intent it = new Intent(Intent.ACTION_DELETE, uri);  

startActivity(it);

 

//uninstall apk

Uri uninstallUri = Uri.fromParts("package", "xxx", null);

returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

 

//install apk

Uri installUri = Uri.fromParts("package", "xxx", null);

returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

 

//play audio

Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");

returnIt = new Intent(Intent.ACTION_VIEW, playUri);

 

//send extra

Intent it = new Intent(Intent.ACTION_SEND); 

it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 

it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3"); 

sendIntent.setType("audio/mp3"); 

startActivity(Intent.createChooser(it, "Choose Email Client"));

 

//search

Uri uri = Uri.parse("market://search?q=pname:pkg_name"); 

Intent it = new Intent(Intent.ACTION_VIEW, uri); 

startActivity(it); 

//where pkg_name is the full package path for an application 

 

//show program detail page

Uri uri = Uri.parse("market://details?id=app_id"); 

Intent it = new Intent(Intent.ACTION_VIEW, uri); 

startActivity(it); 

//where app_id is the application ID, find the ID 

//by clicking on your application on Market home 

//page, and notice the ID from the address bar

 

 

//search google

Intent intent = new Intent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY,"searchString")

startActivity(intent);

 


출처 : https://snipt.net/Martin/tag/android/

 

//카카오톡 메세지 Intent

    

    try {

       KakaoLink kakaoLink = KakaoLink

              .getLink(getApplicationContext());

   

       // check, intent is available.

       if (!kakaoLink.isAvailableIntent()) {

           return;

       }

       /**

        * @param activity

        * @param url

        * @param message

        * @param appId

        * @param appVer

        * @param appName

        * @param encoding

        */

       kakaoLink.openKakaoLink(

              MainActivity.this,

              "http://link.kakao.com/?test-android-app",

              "First KakaoLink Message for send url.",

              getPackageName(),

              getPackageManager().getPackageInfo(

                     getPackageName(), 0).versionName,

              "KakaoLink Test App", "UTF-8");

    } catch (Exception e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

    }



KakaoLink.java


'Programming > Android' 카테고리의 다른 글

다중 액티비티 예제  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16
안드로이드 실습  (0) 2013.03.09
ubuntu 에 jdk 간편하게 설치하기  (0) 2013.02.27
R.java import 에러  (0) 2012.11.27

ubuntu 에 jdk 간편하게 설치하기

Programming/Android 2013. 2. 27. 12:46 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin

출처 : http://krroo.blogspot.kr/2013/02/ubuntu-jdk.html

'Programming > Android' 카테고리의 다른 글

다중 액티비티 예제  (0) 2013.03.23
안드로이드 레이아웃 예제  (0) 2013.03.16
안드로이드 실습  (0) 2013.03.09
Intent 활용하기  (0) 2013.03.08
R.java import 에러  (0) 2012.11.27