필요한 걸 찾으려고 하니 어떤 게시글에 적혀 있는지 찾기 어려워서 별도로 적어둔다.
API28(Android 9) 이상을 사용하는 경우에는 추가로 고려할 사항이 있다.
AndroidManifest.xml 파일에 추가할 사항
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.link2me.android.MyPhone">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application android:allowBackup="false" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true" android:usesCleartextTraffic="true" <!-- http:// 통신일 경우에도 통신 가능하도록 --> android:theme="@style/AppTheme.NoActionBar"> <activity android:name="com.link2me.android.MyPhone.Intro"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" tools:replace="android:resource" /> </provider> </application> </manifest>
|
Android 7.0(Nougat / API 24)에서 Intent로 URI 파일 경로 전송시 "file://" 노출되어 있으면 FileUriExposedException 오류가 발생하게 되고 앱이 종료된다.
앱간 파일을 공유하려면 "file://" 대신 "content://"로 URI를 보내야 한다.
URI로 데이터를 보내기 위해선 임시 액세스 권한을 부여해야 하고 FileProvider를 이용해야 한다.
그리고 res/xml/provider_paths.xml 생성을 해야 한다.
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="download" path="." /> </paths>
|
앱 build.gradle 은 androidX 로 변경한다.
오래된 코드를 Android Studio 에 맞게 수정하기 위해서는 이 코드 변환 과정이 필요하다.
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // implementation 'com.android.support:appcompat-v7:28.0.0' //implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'gun0912.ted:tedpermission:2.0.0' implementation 'com.android.volley:volley:1.1.1' } |