Activity에서 다른 Activity를 호출할 때 Intent를 이용하여 화면전환을 하는 것과 같이 핸드폰에 기본적으로 장착된 App의 Activity를 호출 하는 경우에는 Intent의 action 중 ACTION_VIEW를 이용하여 웹 브라우저를 호출하는 방법 입니다.
기본 브라우저를 이용하여 웹 페이지 URL을 연결하려면 public Intent (String action, Uri uri) 메소드를 사용하는데 action 부분에는 ACTION_VIEW를 입력하고 Uri는 웹 주소를 입력하면 됩니다.

 

Intent intentUrl = new Intent(Intent.ACTION_VIEW, Uri.parse("https://copycoding.tistory.com/"));
startActivity(intentUrl);

 

URL에 파라미터를 추가해서 넘기려면 URL 뒤에 붙여주도록 합니다.

 

String param = "/47";
Intent intentParam = new Intent(Intent.ACTION_VIEW, Uri.parse("https://copycoding.tistory.com/" + param));
startActivity(intentParam);

 

인터넷을 사용해야 하므로 Manifest에 permission을 추가해 주면 됩니다.
<uses-permission android:name="android.permission.INTERNET" />

 

버튼을 누르면 첫화면으로 이동 하고 param을 붙인경우 페이지를 찾아 갑니다.

 

 

전체 소스
수정된 파일은 3개 입니다.

AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="copycoding.tistory.actionviewuri">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ActionViewUri">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

 

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnUrl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="URL"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.229"
        android:onClick="clickUrl"/>

    <Button
        android:id="@+id/btnParam"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="176dp"
        android:text="URL+Param"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnUrl"
        app:layout_constraintVertical_bias="0.0"
        android:onClick="clickParam"/>
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

MainActivity.java

 

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {

   @Override protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
   }
     
  public void clickUrl(View view) {
     Intent intentUrl = new Intent(Intent.ACTION_VIEW, Uri.parse("https://copycoding.tistory.com/"));
     startActivity(intentUrl);
  }

  public void clickParam(View view) {
      String param = "/47";
      Intent intentParam = new Intent(Intent.ACTION_VIEW, Uri.parse("https://copycoding.tistory.com/" + param));
      startActivity(intentParam);
   }
}

 

- copy coding -

 

프로그램을 하면서 개인적으로 가장 많이 사용하는 기능이 찾기인 것 같습니다.
Android Studio에서는 프로젝트에 생성된 파일들 중에 특정 단어에 대한 검색과 관련 해서 Edit > Find 메뉴에 대부분의 기능과 단축키가 정리되어 있습니다.

 

 

이중에서 제일 많이 사용하는 찾기 기능은 Find(Ctrl + F)와 Replace(Ctrl + R) 이겠죠.

 

 

 

위 그림은 Ctrl +F 를 이용하여 찾기를 하는 내용인데 찾으려는 단어가 노란색으로 처리되어 쉽게 구분이 되어 있습니다.
그리고 Find Next(F3)은 찾는 단어를 하나씩 선택해 주는 기능으로 필요한 부분만 수정하는데 유용하게 사용 됩니다.

오늘은 전체 프로젝트에서 특정 단어를 찾아보려는 경우 사용하는 기능입니다.  메뉴에서 선택 해도 되고 단축키로 간단하게 찾기 창을 오픈 합니다.

전체 찾기 : Find In Path (Ctrl + Shift + F)

 

 

 

단어를 입력하면 상단에 찾는 단어가 포함된 파일의 위치를 보여주는 리스트가 나타나고 리스트를 하나씩 선택하면 하단에 파일의 전체 내용에서의 위치를 상세히 보여줍니다.
한가지 아쉬운 점은 File mask를 이용하여 특정 파일종류를 선택할 수 있지만 eclipse처럼 여러개를 선택할 수 없습니다.


전체 바꾸기 : Replace in path (Ctrl + Shift + R)

전체 바꾸기라기 보다는 전체에서 바꾸기가 정확한 표현일것 같네요.

 

 

 

찾는 단어와 변경할 단어를 입력해 주고 하단 버튼을 이용하여 하나씩 또는 전체를 한꺼번에 수정해 주면 됩니다.
단축키를 많이 알고 있으면 코딩 속도가 그만큼 향상 됩니다.  유용한 단축키 들을 정리해서 잘 사용하세요.

 

- copy coding -

 

안드로이드 프로그램 중 TextView에 텍스트 값을 설정 하려는 경우 
Suppress: Add @SuppressLint(“SetText18n”) annotation
라는 경고가 발생합니다. 

 

 

textView.setText("Your Select : ");

TextView에 값을 하드코딩 해서 발생하는 경우인데 가능하면 값을 직접 입력하지 않도록 하는 권고 입니다.  무시해도 문제가 되지는 않지만 눈에 거슬리기 때문에 annotation을 추가해서 예외사항으로 처리해도 됩니다.  함수 상단에 @SuppressLint("SetTextI18n") annotation을 추가해 줍니다.

 

@SuppressLint("SetTextI18n")
public void getIntentData() {
    ArrayList<String> stringArrayList = getIntent()...

 

annotation을 추가하지 않고 해결 하는 방법으로는

 

/res/values/string.xml에 resource를 추가해 줍니다. 

 

<string name="select">Your Select : </string>

 

그리고 이 select 값을 불러와 하드코딩 했던 위치에 사용 합니다.

 

textView.setText(getString(R.string.select));

 

이렇게 작업 하는건 번거롭지만 텍스트가 변경되어 수정해야 하는 경우 xml에서만 수정하면 되고 동일한 텍스트를 여러 곳에서 사용 하더라도 xml에서 하나만 수정해서 관리하면 되기 때문에 편리한 방법 입니다.

 

 

textView.setText(textView.getText() + stringArrayList.get(i) + ",");

 

이런 건 어떻게 하냐...

 

- copy coding -

 

NAVER Map을 이용하여 Android App을 만들어 보려고 합니다.  Google Map을 이용하여 안드로이드 앱을 만들어 보았다면 네이버 맵도 쉽게 만드실 수 있습니다.  네이버도 구글과 비슷한 방법으로 맵 사용 권한을 부여 하고 있습니다.  구글 맵을 이용하여 앱을 만들어 보지 않았다면 사용 권한 키를 받는 과정이 다소 복잡해 보일 수 있습니다.  설명 방법은 그림 위주로 하며 다음 순서대로 진행합니다.

1. 네이버 맵 사용 등록

2. Client ID 생성(맵 사용 키)

3. 안드로이드 스튜디오에서 NAVER Map을 이용한 앱 생성

 

이용 신청을 위해 아래 주소를 이용하여 네이버 맵 사이트 접속합니다.

https://www.ncloud.com/product/applicationService/maps

 

[이용 신청 하기] 버튼을 클릭 합니다

 

 

[회원가입] 화면에서 개인 회원 또는 사업자를 클릭 합니다. 저는 [개인 회원]을 선택하고 [다음] 버튼을 클릭 하였습니다.

 

 

약관에 동의를 합니다광고를 받고 싶으면 광고 정보 수신을 꼭 선택하세요.

 

 

회원 정보를 입력합니다.   아이디는 메일 주소로 입력해야 하고 인증을 위해 전송 버튼을 클릭하여 발송된 메일을 클릭 해야 하니 정확히 입력해야 합니다.  메일 인증을 위해 입력한 아이디의 메일을 확인해 봅니다.

 

 

위 사진은 아이디로 입력한 메일로 수신된 인증 메일입니다. [메일 인증] 버튼을 클릭 해 줍니다.

 

 

나머지 주소 및 회원 정보도 입력을 하고 휴대폰 번호도 인증을 한 후 [다음] 버튼을 클릭합니다.

 

 

무조건 결제수단을 등록해야 하는데 특정 사용량을 넘겨야 하기 때문에 과금은 이루어지지 않는다고 생각하면 됩니다.

 

 

[휴대폰 인증하기]로 결제카드를 등록 합니다.

 

 

본인 확인을 위한 전화 인증을 진행 합니다.

 

 

 

카드정보를 입력하고 [등록하기] 버튼을 클릭 합니다.

 

 

결제 카드 등록이 완료 되었습니다.

 

 

 

10만원 상당의 크레딧을 제공한다고 하는데 필요하면 신청을 합니다단 유효 기간은 3개월 입니다.

 

 

회원가입을 완료하고 로그인 후 다시 처음 화면으로 왔습니다.  [이용 신청 하기] 버튼을 클릭 합니다.

 

 

여러 API들이 소개 되고 있는데 현재는 선택하는 게 아니므로 하단으로 이동합니다.

 

 

본인이 만든 프로그램을 등록하는 화면인데 개인적으로는 순서가 바뀌지 않았나 하는 생각이 듭니다.  어째든 [Application 등록] 버튼을 클릭합니다.

 

 

약관 동의를 하고 [확인] 버튼을 클릭 합니다.

 

 

이제 사용하려는 애플리케이션을 선택하고 등록할 수 있습니다이번에도 스크롤을 하단으로 이동합니다.  물론 네이버 맵이 아니라면 다른걸 선택하면 되겠죠.

 

 

모바일 맵을 사용 하기한 등록을 시작 합니다.  [Mobile Dynamic Map]을 체크하고 안드로이드 앱 패키지 이름도 등록합니다등록시 [추가] 버튼을 클릭해야 등록 됩니다.  패키지를 입력했으면 [등록] 버튼을 클릭합니다.

 

 

드디어 얻으려는 인증 정보 단계에 도착했습니다.  키 모양 아이콘이 있는 [인증 정보] 버튼을 클릭 합니다.

 

 

인증 정보 팝업에서 [Client ID]를 복사해 잘 보관 합니다.  ID가 있어야 앱에서 네이버 맵을 불러올 수 있습니다.

 

 

Client ID를 생성 하였으니 네이버 맵을 이용한 앱을 하나 만들어 봅니다.

 

템플릿을 하나 선택 하고

 

 

Package name Naver에 입력한 것으로 적어줍니다. 네이버 지도 SDK는 안드로이드 OS 버전 4.0.3(API 레벨 15) 이상에서 사용할 수 있으니 Minimum SDK도 확인하고 [Finish] 버튼을 클릭해 줍니다.

 

프로젝트가 생성되면 추가적인 설정값을 입력해 줍니다.

 

build.gradle(Project)

allprojects {
   
repositories {
       
google()
        jcenter()
        maven {
            url
'https://naver.jfrog.io/artifactory/maven/'
       
}
    }
}

 

build.gradle(Module)

 

dependencies {
    implementation 'com.naver.maps:map-sdk:3.10.2'
}

 

그리고 Manifast에 복사해 놓은 Client_ID를 추가해주고 android.permission.INTERNET도 추가 합니다.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
package="copycoding.tistory.navermap">
    <
uses-permission android:name="android.permission.INTERNET" />
    <
application
        
android:allowBackup="true"
        
android:icon="@mipmap/ic_launcher"
        
android:label="@string/app_name"
        
android:roundIcon="@mipmap/ic_launcher_round"
        
android:supportsRtl="true"
        
android:theme="@style/Theme.NaverMap">
        <
activity android:name=".MainActivity">
            <
intent-filter>
                <
action android:name="android.intent.action.MAIN" />

                <
category android:name="android.intent.category.LAUNCHER" />
            </
intent-filter>
        </
activity>
        <
meta-data
            android:name="com.naver.maps.map.CLIENT_ID"
            android:value="Client_ID입력" 
/>
    </
application>

</
manifest>

 

Layout에 맵용 fragment를 추가해 줍니다.

 

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
xmlns:app="http://schemas.android.com/apk/res-auto"
    
xmlns:tools="http://schemas.android.com/tools"
    
android:layout_width="match_parent"
    
android:layout_height="match_parent"
    
tools:context=".MainActivity">

    <
fragment android:layout_width="match_parent"
        
android:layout_height="match_parent"
        
android:id="@+id/map"
        
android:name="com.naver.maps.map.MapFragment" 
/>

</
androidx.constraintlayout.widget.ConstraintLayout>

 

프로그램은 이것으로 끝이고 실행해 볼까요?

 

 

기본적인 지도를 볼 수 있습니다.  Client ID를 얻는 과정이 프로그램보다 더 힘이 드는군요.

 

- copy coding -


12345678···15

+ Recent posts