Ինչպե՞ս փոխանցել ֆայլի հղումը Intent-ում։
sobes.tech AI
Պատասխան AI-ից
Տվյալ ֆայլի հղումը փոխանցելու համար Intent-ում օգտագործվում է Uri:
-
Օգտագործել
FileProvider(Առաջարկվող մեթոդ Android N և բարձր տարբերակների համար):
Ամենաբարձր անվտանգ և առաջարկվող մեթոդը, քանի որ կանխում էFileUriExposedException-ը վերջին Android տարբերակներում:-
Պետք է սահմանել
FileProvider-ըAndroidManifest.xml-ում և ստեղծել XML ֆայլ ֆայլերի ուղիներով: -
Ստանալ
Uri-ըFileProvider.getUriForFile()-ի միջոցով: -
AndroidManifest.xml:<application> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application> -
res/xml/provider_paths.xml:<paths> <external-path name="external_files" path="."/> </paths> -
Կոդ փոխանցման:
// Կարծում ենք, որ 'file' օբյեկտն է java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Ցույց տալ ճիշտ MIME տիպը intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Հատկություն տալ ընթերցման համար if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Օգտագործել
Uri.fromFile()(Հնացած Android N-ից սկսած):
Այս մեթոդը չի խորհուրդ տրվում վերջին Android տարբերակներում անվտանգության խնդիրների պատճառով:-
Android N-ից հետո, ֆայլային URI-ների փոխանցումը
Intent-ով առաջացնում էFileUriExposedExceptionայլ ծրագրերի հետ փոխազդեցության ժամանակ: -
Կոդ փոխանցման:
// Կարծում ենք, որ 'file' օբյեկտն է java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Ցույց տալ ճիշտ MIME տիպը // Այս կոդը կարող է առաջացնել `FileUriExposedException` Android N+ տարբերակներում if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Կարճ աղյուսակ:
| Մեթոդը | Առաջարկվում է (Android N+) | Անվտանգություն |
|---|---|---|
FileProvider |
✅ | Բարձր (խուսափում է FileUriExposedException) |
Uri.fromFile() |
❌ | Նվազ (կարող է առաջացնել FileUriExposedException) |
Միշտ օգտագործեք FileProvider ֆայլերի փոխանակման համար Android N և բարձր տարբերակներում։