Intentте файлга шилтемени кантип өткөрүү керек?
sobes.tech AI
AIден жооп
Файлга шилтеме өткөрүү үчүн Intent ичинде колдонулган Uri болуп саналат.
-
FileProviderколдонуу (Android N жана андан жогору үчүн сунушталган ыкма):
Бул эң коопсуз жана сунушталган ыкма, анткени ал акыркы Android версияларындаFileUriExposedExceptionалдын алат.-
AndroidManifest.xmlфайлындаFileProviderаныктоо жана файлдарга жолдорду камтыган XML файлын түзүү керек. -
FileProvider.getUriForFile()аркылууUriалуу. -
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 жана андан кийинки версияларда,
Intentаркылуу файл URI'ларын өткөрүүFileUriExposedExceptionпайда кылат башка колдонмолор менен иштешкенде. -
Коду өткөрүү:
// 'file' java.io.File объекти деп эсептелет Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // туура MIME типти коюңуз // Бул код Android N+ версияларында `FileUriExposedException` пайда кылышы мүмкүн if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Кыскача таблица:
| Метод | Туура (Android N+) | Коопсуздук |
|---|---|---|
FileProvider |
✅ | Жогорку (FileUriExposedException алдын алат) |
Uri.fromFile() |
❌ | Төмөн (FileUriExposedException пайда кылышы мүмкүн) |
Ар дайым FileProvider колдонуп, файлдарды Android N жана андан кийинки версияларда бөлүшүңүз.