레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

android - setup deep links on Android App (안드로이드 딥링크 설정)

딥링크는 어플리케이션 실행시에 특별한 방법을 제공합니다.
링크를 통해 어플리케이션을 실행하고, 분기를 설정해 원하는 액티비티로 고객을 유도 할 수 있습니다.

1. Create Activity
 링크를 통해 어플리케이션을 실행한 사용자가 처음 접근하게되는 Activity로, 사용자를 주소에따라 액티비티로 분기시키는데 사용됩니다.

2. AndroidManifest
 생성한 DeepLinksActivity가 딥링크로 접속했을 때 실행되도록 설정합니다.
data에서 scheme와 host를 섞어 DeepLink주소를 완성하게 됩니다.
<scheme>://<host>/
ex)deeplink.test://myApplication/test/mycolor

3. DeepLinksActivity
 기본적으로 아래와 같은 구조를 가집니다.
 openDeepLink함수에서 if문을 통해 분기를 설정하고 Intent를 실행시켜줍니다.

4. Test
 https://developers.google.com/app-indexing/android/test#---
위 주소로 접속한 뒤 아래와 같이 QR코드를 만들어줍니다.















생성한 QR코드를 읽어 URL을 클릭하면 정상적으로 Application의 원하는 intent가 시작된 것을 확인 할 수 있습니다.



android setImage failed (사진을 못 가져올 때)

갤러리에서 사진을 선택할 때 사진을 못 가져오는 현상이 발생하면 아래 두 가지 경우를 생각 할 수 있습니다.

1. Permission Denial

java.lang.SecurityException: Permission Denial: reading 
com.android.providers.media.MediaProvider uri 
content://media/external/images/media/38498 from pid=27232, uid=10472 requires 
android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

이 경우는 External storage에서 URI를 가져올 때 권한에 막혀 가져오지 못하는 경우입니다.
위와 같은 경우는 Manifest에 아래와 같이 권한 설정을 해주면 쉽게 가져올 수 있습니다.

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


2. 이미지 용량 초과

 삼성 핸드폰의 경우 'Input agif image larger than 30MB.' 라는 로그 메세지를 보실 수 있
습니다. 일정 용량 이상의 사진파일은 불러오지 못하므로, setImageUri(uri)를 아래와 같이
BitmapFactory를 이용해 이미지의 size를 조정해주시면 불러 올 수 있습니다.

uri = data.getData();
try {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2;
    Bitmap myBitmap = BitmapFactory.decodeStream(view.getContext().getContentResolver().openInputStream(uri), null, options);
    selectedImageView.setImageBitmap(myBitmap);
} catch(Exception e){
    e.getStackTrace();
}

Android dynamic change image resource (안드로이드 동적 이미지 변경)

안드로이드 소스코드 내에서의 동적 이미지 변경 방법입니다.

setImageResource(getApplication().getResources().getIdentifier(String name, String defType, String defPackage));

위와같은 방식으로 가져오며, 아래는 소스코드의 예 입니다.

imageView image= (ImageView)findViewById(R.id.test_image);
image.setImageResource(getApplication().getResources().getIdentifier("ic_launcher", "mipmap", "com.testcode.testproject"));

이런 방식으로 소스코드 내에서 이미지를 변경 할 수 있습니다.

Android error: resource entry is already defined

안드로이드에서 error: resource entry name.png is already defined

라는 문구가 뜨면

이미 올라가있던 jpg파일이 등록된 후 png파일이 올라와서 리소스에 중복되어있는 경우입니다.

안드로이드 프로젝트 build -> rebuild project를 하시면 손쉽게 해결 할 수 있습니다.

px, dp, dip, sp의 차이

dp (Density-independent Pixels)
160dpi화면을 기준으로 하며, 1dp1px과 거이 동일합니다.
고밀도 화면에서 실행할 경우 1dp를 그리는데 사용되는 픽셀의 수는 화면의 dpi 따라 적절히 조정되며, 마찬가지로 저밀도일 때 1dp의 화소 수는 축소됩니다.
px단위 대신에 dp단위를 사용하면 밀도가 다른 화면에서도 UI요소들의 일관성을 제공합니다. 

dip (Density-Independent Pixels)
dip는 초기버전에서 사용했지만 지금은 dp로 축약되었습니다.
 
sp (Scale-independent Pixels)
spdp단위와 같지만 사용자의 폰트사이즈 설정에 의해 조절됩니다.
sp는 글꼴크기를 지정 할 때 사용하는 것이 좋습니다.
 
pt (point)
1/72인치 에 해당됩니다.
 
px (pixels)
실제 화면의 픽셀에 해당합니다.
각 디바이스는 인치 당 픽셀수가 다르고 화면에서 사용 가능한 픽셀 수가 많거나 적을 수 있습니다. 
 
mm (Millimeters)
화면의 실제 크기를 기준으로 합니다.
 
in (Inches)
화면의 실제 크기를 기준으로 합니다.















Android - 1. Activity(액티비티)

1. Application

글로벌 어플리케이션 상태를 유지하기 위한 기본 클래스 입니다.
AndroidManifest.xml의 application에서 name을 지정하여 사용 가능해집니다.


Activity class는 언제든지 스택에서 삭제되고 다시 불러오게 되지만 Application class는 한번 불리면 앱이 종료될 때 까지 유지됩니다.


2. Activity

Activity class를 사용하면 UI와  View를 배치 할 수 있는 창을 처리합니다. 모든 Activity들은 반드시 AndroidManifest.xml에 <activity>로 정의 되어야 합니다. Activity는 다른 Activity들의 method를 직접 호출할 수 없으며 데이터도 직접 액세스 할 수 없습니다.


3. Activity Lifecycle

Activity들은 activity stack으로 관리되며 새 Activity가 실행되면 stack의 상단의 배치됩니다.

Activity는 기본적으로 4가지 상태가 있습니다.

  1. Running - Activity가 화면의 foreground에 위치, 시스템 리소스가 부족해도 거이 중단되지 않는다.
  2. Paused - 화면에는 보이지만 다른 Activity가 일부분 가린 상태, 빠른 복귀를 위해 모든 상태정보를 유지하고 윈도우매니저에 연결을 유지하나 매우 낮은 메모리 상태에서 중지될 수 있다.
  3. Stopped - 완전히 다른 Activity에 의해 가려지는 경우, 상태정보와 윈도우매니저에 연결을 유지하나 중단될 가능성이 높다.
  4. Killed - 시스템 리소스가 부족할 때 메모리에서 중단되는 경우 해당 Activity들은 다시 시작되어야 한다.




4. Fragment

honeycomb부터 사용 가능한 Fragment는 Activity를 구현하는데 코드를 좀 더 모듈화 하고, 대형화면에 대해 정교한 사용자 인터페이스를 구축하고, 크고 작은 화면의 Application을 확장하는데 도움을 줍니다.