728x90

필요한 걸 찾으려고 하니 어떤 게시글에 적혀 있는지 찾기 어려워서 별도로 적어둔다.


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'
}




블로그 이미지

Link2Me

,