Android로 assets 디렉터리에 설정된 pdf 파일을 여는 방법
13842 단어 Android
개요 assets
디렉터리에 설정된 pdf 파일을 여는 방법을 조사했다.
샘플 프로그램
k-yamada/AssetsFileProviderSample
설치 단계
k-yamada/AssetsFileProviderSample
설치 단계
assets/pdf/sample.pdf
에 알맞은 pdf 파일을 설정합니다AssetsFileProvider.kt
.// AssetsFileProvider.kt
package kyamada.assetsfileprovidersample.util
import android.content.ContentProvider
import android.content.ContentValues
import android.content.res.AssetFileDescriptor
import android.database.Cursor
import android.net.Uri
import java.io.FileNotFoundException
import java.io.IOException
class AssetsFileProvider : ContentProvider() {
@Throws(FileNotFoundException::class)
override fun openAssetFile(uri: Uri, mode: String): AssetFileDescriptor {
try {
return context!!.assets.openFd(uri.pathSegments.joinToString("/"))
} catch (e: IOException) {
e.printStackTrace()
throw FileNotFoundException(e.message)
}
}
override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int {
throw UnsupportedOperationException("Not yet implemented")
}
override fun getType(uri: Uri): String {
throw UnsupportedOperationException("Not yet implemented")
}
override fun insert(uri: Uri, values: ContentValues): Uri {
throw UnsupportedOperationException("Not yet implemented")
}
override fun onCreate(): Boolean {
return false
}
override fun query(uri: Uri, projection: Array<String>, selection: String,
selectionArgs: Array<String>, sortOrder: String): Cursor {
throw UnsupportedOperationException("Not yet implemented")
}
override fun update(uri: Uri, values: ContentValues, selection: String,
selectionArgs: Array<String>): Int {
throw UnsupportedOperationException("Not yet implemented")
}
companion object {
private const val AUTHORITY = "kyamada.assetsfileprovidersample.assets"
val CONTENT_URI = Uri.parse("content://$AUTHORITY")!!
}
}
<provider>
탭을 추가합니다.// AndroidManifest.xml:
<application
...
<provider
android:name="kyamada.assetsfileprovidersample.util.AssetsFileProvider"
android:authorities="kyamada.assetsfileprovidersample.assets"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
res/xml/filepaths.xml
.// res/xml/filepaths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<asset
name="pdf"
path="pdf" />
</paths>
app/build.gradle
에서 압축되지 않는 pdf의 설정을 기술합니다.// app/build.gradle:
android {
...
aaptOptions {
noCompress "pdf"
}
}
// MainActivity.kt
package kyamada.assetsfileprovidersample
import android.content.Intent
import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kyamada.assetsfileprovidersample.util.AssetsFileProvider
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
openAssetPdf()
}
private fun openAssetPdf() {
val intent = Intent(Intent.ACTION_VIEW)
val uri: Uri = AssetsFileProvider.CONTENT_URI.buildUpon()
.appendPath("pdf")
.appendPath("sample.pdf")
.build()
intent.setDataAndType(uri, "application/pdf")
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
}
}
주의 사항
사전 설치된 드라이버 PDF 뷰어에서는 열 수 없습니다. Adobe Acrobat에서 엽니다.
Reference
이 문제에 관하여(Android로 assets 디렉터리에 설정된 pdf 파일을 여는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k-yamada-github/items/34a2119526dcacdcb0ef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Android로 assets 디렉터리에 설정된 pdf 파일을 여는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k-yamada-github/items/34a2119526dcacdcb0ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)