2022년 8월 27일 토요일

Android 절전모드 사용 체크

 Android 폰을 절전모드를 기본을 사용하는 폰을 위해 체크 하는 코드를 가이드 합니다.

절전모드를 쓰는 폰들은 앱이 백그라운드로 내려갈때 일부 자원(네트워크 등)이 바로 다시 회수 되지 않기 떄문에

문제가 발생할 소지가 있습니다.

그에 따른 적절한 조치를 하기 위해서는 해당 모드를 쓰고 있는지 체크 하고 그것에 따른 예외 처리를 추가 해야 합니다.


PowerManager oPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (oPM != null)
{
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && oPM.isPowerSaveMode())
	{
		//절전모드 사용.
	}
}

그럼 ^^

Android 갤러리 이미지 가져오기

 Android 앱 개발시 자신의 갤러리 이미지를 가져오는 기능을 개발하는 경우가 있습니다.

Android O/S 버젼이 올라가면서 접근 제한이 많이 일어나고 갤러리 프로그램도 로컬 방식이 아닌

클라우드 방식(구글포토) 을 쓰는것들도 있기 때문에 그것들에 대한 처리 가이드를 안내하려 합니다.

코드는 Java로 구성 되어 있습니다.

일단 Android 주 앱 소스에 AndroidManifest.xml 에 권한을 추가 합니다.

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

갤러리 호출은 Intent 를 통해서 호출하여 가져 올수 있습니다.

아래 코드를 Activity Content 를 통해서 호출 합니다.

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 ((Activity)m_oContext).startActivityForResult(i, 1);

startActivityForResult 호출시 두번째 인자는 호출후 돌려받는 리턴 코드값입니다.

편의상 1 로 설정 했습니다.

갤러리 호출후 리턴받는 곳은 활성화된 Activity 에서 돌려 받아 처리 합니다.

코드는 아래와 같습니다.


@Override
protected void onActivityResult(int nReqCode, int nRetCode, @Nullable Intent data)
{
    super.onActivityResult(nReqCode, nRetCode, data);

    switch (nReqCode)
    {
        case 1://Gallery
        {
            if (nRetCode == RESULT_OK && data != null)
            {
                Bitmap bmImage = null;
                try
                {
                    Uri oSelectImg = data.getData();
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P)
                    {
                        bmImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), oSelectImg);
                    }
                    else
                    {
                        ImageDecoder.Source oSrc = ImageDecoder.createSource(this.getContentResolver(), oSelectImg);
                        bmImage = ImageDecoder.decodeBitmap(oSrc);
                    }

                    if(m_oTestMainView != null)
                    {
                        m_oTestMainView.m_oImgGallery.setImageBitmap(bmImage);
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            else if(nRetCode == RESULT_CANCELED)
            {
                Toast.makeText(this, "사진 선택 취소", Toast.LENGTH_LONG).show();
            }
        }break;
    }
}

"m_oTestMainView" 는 별도로 구성된 LinearLayout 입니다. 그 안에 ImageVIew m_oImgGallery 를 만들어 놓고 불러들인 갤러리 이미지를 비트맵 으로 셋팅하면 이미지가 나옵니다.

갤러리 이미지는 직접 Uri 경로로 접근해서 읽어 들일수도 있으나 위에서 언급한것처럼 클라우드 기반 갤러리는 경로를 가져올수 없습니다.

그래서 범용적으로 처리를 하시려면 Bitmap 을 자기 앱 경로에 직접 이미지 파일로 저장하여 처리 하는것을 권장합니다.

Bitmap 을 이미지 파일로 저장 하시려면

저장할 File의 OutputStream 을 만들고 아래 코드를 호출하여 저장하시면 됩니다.


File oFile = new File(context.getFilesDir(), '저장상대경로');
OutputStream osFile = new FileOutputStream(oFile);
bmImage.compress(Bitmap.CompressFormat.PNG, 100, osFile);

그럼 ^^

2022년 8월 12일 금요일

Visual Studio 소스 파일 오픈 에러 대응

 윈도우가 업데이트 되거나 하드 디스크 정리 하고 난후 캐쉬가 뒤죽박죽 되어 정상적으로 열리던 소스 파일들이 아래와 같은 에러 발생하면서 안 열리는 경우가 있다.

"no exports were found that match the constraint"

이럴때는 아래 경로 둘중에 하나를 찾아가서 캐쉬 파일을 정리 해주면 된다.

%LocalAppData%\Microsoft\VisualStudio\11.0\ComponentModelCache

또는

%LocalAppData%\Microsoft\VPDExpress\11.0\ComponentModelCache

폴더명 안에 버젼은 Visual Studio 버젼별로 나오기 때문에 자신이 쓰는 VIsual Studio 버젼을 아래에서 확인하고

해당 경로에 가서 지워주고 난후

Visual Studio 를 재실행 주면 된다.

Visual Studio 2008 is 9.0

Visual Studio 2010 is 10.0

Visual Studio 2012 is 11.0

Visual Studio 2013 is 12.0

Visual Studio 2015 is 14.0

Visual Studio 2017 is 15.0

Visual Studio 2019 is 16.0

그럼 ^^