반응형

안녕하세요.

이번 포스팅은 Android OS 10을 TargetSDKVersion 으로 업그레이드 시 파일 조회하는 기능의 경우 발생할 수 있는 오류에 대하여 알아보도록 하겠습니다.


<Error>

TargetSDKVersion을 28에서 29로 업그레이드만 하였을 뿐인데 파일 조회하는 기능에서 아래와 같은 NullPointException이 발생하였습니다.

W/System.err: java.lang.NullPointerException: Attempt to get length of null array

W/System.err:     at com.eun.sample.core.Cert.a(Unknown Source:15)

W/System.err:     at com.eun.sample.core.Cert.<init>(Unknown Source:61)


<Solution>

Android OS 10이 출시되면서 보안이 많이 강화되었으며 이로 인해 파일 Access 제한이 되었습니다.

이를 해결하기 위해서는 Android Developer 외부저장소 Access 페이지를 참조하였으며, 해결방법을 찾을 수 있었습니다.


1. 가장 간단한 방법입니다.

   AndroidMenifest.xml 파일에 requestLagacyExternalStorage 속성을 true로 주어 기존 외부 저장소를 사용할 수 있도록 설정을 합니다.

이로 인해 앞서 발생하였던 Error 부분은 해결이 되었습니다.

    <manifest ... >
     
<!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
     
<application android:requestLegacyExternalStorage="true" ... >

        ...
     
</application>
   
</manifest>

또한 아래와 같은 설명을 되어 있으니 참고 하시면 좋을 것 같습니다.

 ★ 참고: 기존 외부 저장소를 사용 설정한 상태에서 앱을 설치하면 앱은 제거될 때까지 이 모드로 유지됩니다. 이 호환성 동작은 나중에 기기가 Android 10 이상을 실행하도록 업그레이드되든, 나중에 앱이 Android 10 이상을 타겟팅하도록 업데이트되든 관계없이 적용됩니다.


2. 좀 더 보완적으로 접근할 수 있는 방법입니다.

   저장소 Access Framework를 사용하여 파일을 조회하는 방법입니다.

   우선 아래에 있는 정보 미디어 컬렉션 중 하나를 선택해 조회할 수 있습니다.

   - 사진 : MediaStore.Image 

   - 동영상 : MediaStore.Video

   - 오디오 : MediaStore.Audio

  Download 디렉토리에 있는 파일을 비롯하여 다른 앱에서 만든 다른 파일에 Acccess 하려면 앱에서 사용자가 특정 파일을 선택하도록 허용하는 

저장소 Access Framework를 사용해야 합니다.


이번 포스팅에서 Android OS 10에서 파일 조회 시 NullPointException이 발생하였을 때 해결할 수 있는 방법에 대하여 알아보았습니다.

반응형
반응형

안녕하세요.

이번 포스팅은 Data-Scheme 설정할 시 앱 서랍에 앱 아이콘이 보이지 않는 현상에 대하여 원인과 해결방법에 대하여 알아보도록 하겠습니다.


<Error>

AndroidMenifest.xml에 Data-Scheme을 사용하는 앱을 빌드하거나 APK를 설치하였지만 앱 서랍에 앱 아이콘이 보이지 않는 현상  


<Solution>

android.intent.action.MAIN action 과 android.intent.action.VIEW action을 잘못 인식하여 발생하는 오류로서 두 action을 분리시켜주면 됩니다.

간혹 android.intent.action.MAIN android.intent.action.VIEW action을 붙여쓰여 빌드 시스템에서 VIEW로 잘못 인식하게 되는 겁니다.

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>

<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="sign"
android:host="eun" />
</intent-filter>


반응형
반응형

W/chromium: [WARNING:navigator_impl.cc(344)] Refusing to load URL as it exceeds 2097152 characters.

반응형

+ Recent posts