Что означает content.com.huawei.com.txt?

Что означает content.com.huawei.com.txt? Техника

miaset.comааааааИсточник: miaset.com/education/it/charging.html#kak-zaryadit-telefon-bez-zaryadnika-v-domashnih-usloviyah, авторская статья

При просмотре видео файлов частенько звучит эта ошибка, ПОЧЕМУ? Ссылка на аудиозапись этого —>my-audiosharing.com/audios/4987/error-mesage.html

Помогите создать шапку сайта как на этом сайте dogstar.com.ua/

начинать применять подобный метод, поскольку он не запрещен российским законодательством Источник: documentooborot.com/dokument/elektronnyj-dogovor.html

Вопрос задан анонимно

17.04.17

content://com.huawei.hidisk.fileprovider/root/storage/emulated/0/.archivetemp/.archivetemp7_5.html Не могу разобраться с заданиями 3, 5 и 7. Пожалуйста помогите.

Вопрос задан анонимно

24.11.19

Содержание
  1. сайт экстрасенса елены евсеевич
  2. найти игры цветок гадалка
  3. 4 ответов
  4. Могу ли я удалить эмулированную папку хранилища в Android?
  5. Эмулируется ли память моей SD-карты?
  6. Что такое эмулируемое хранилище 0?
  7. Как просмотреть эмулированные файлы на Android?
  8. Как мне получить доступ к внутренней памяти на Android?
  9. Безопасно ли удалить папку данных Android?
  10. Как удалить эмулированные файлы?
  11. Что будет, если я удалю Mtklog?
  12. Почему у моего телефона имитация хранилища?
  13. Почему на моей SD-карте есть папка Android?
  14. Что такое эмулируемая SD-карта?
  15. Как вы открываете эмулируемое хранилище 0?
  16. Как мне получить доступ к хранилищу 999 с эмуляцией WhatsApp?
  17. Что подразумевается под эмулированным?
  18. Папки Андроид — структура
  19. Папки, которые нельзя удалять
  20. Способы удаления
  21. Как получить доступ / хранение / эмуляция/0/
  22. 15 ответов
  23. нет необходимости в сторонних приложениях
  24. андроид. FileUriExposedException: файл: / / / хранилище / эмулированный/0 / тест. txt подвергается за пределами приложения через намерение. метод GetData()
  25. 16 ответов

сайт экстрасенса елены евсеевич

найти игры цветок гадалка

Error description:

File does not exist: content:/com.alphainventor.filemanager.fileprovider/root/storage/emulated/0/Bollywood%20Mix/Old/Audio.mp3

I am using below dependency to create zip file:

implementation 'net.lingala.zip4j:zip4j:2.9.0'

Code used is as below:

fun zipAudios(context: Context, fileUrls: ArrayList<String>): File? {

        val zipfileCreated = createFile(
            getOutputDirectory(context),
            "yyyy-MM-dd-HH-mm-ss-SSS",
            ".zip"
        )

        // Create a buffer for reading the files
        try {
            // create the ZIP file
            val zipfile = ZipFile(zipfileCreated, null)

            for (i in fileUrls.indices) {
                zipfile.addFile(File(fileUrls[i]))
            }

            return zipfile.file
        } catch (ex: IOException) {
            System.err.println(ex.message)
        }
        return null
    }
  1. My App is selecting the audio from device using any available selector App and save its URL to play it.
  2. Audio file are able to play using MediaPlayer but I am not able to access it while creating .zip file for these audio files.

I have some questions regarding the same:

  1. Our URL has content URL format with selector App provider prefix like content:/com.alphainventor.filemanager.fileprovider/root/storage/emulated/0/Bollywood%20Mix/Old/Audio.mp3
    How can I access such audio files and create zip from it on Android 10 programatically?

I know this is an oldie, but I do not seem to find a way to manage it…
I’ve to capture a Camera image for later IO processing, transferring it to a network share, but I fail lot before this…
after some reading here, I found the way to actually do it on KitKat checking the running SDK, and it works..
but, now I’m testing it on a Nougat device as well..

for Nougat I’ve read a provider should be used, and I’m trying to…
the captured image MUST be stored in a particular folder which is
«/storage/emulated/0/InsulinPower/amSignTool/Data»
for later IO processing… so I think something similar to

must be used, currently with no look..
I had a look at provider definition for all «area», but can not get the answer I need and more I get exceptions.. as defining the retrival URI I get
java.lang.reflect.InvocationTargetException
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/InsulinPower/amSignTool/Data/XCAMX-201805171828082115829615.jpg

in the file_paths I tried quiet everything, as you can see… but it only works if I do refer external-path and NOT external-path-files, which indeed seems to be the one I need..external-path
the code is trivial….

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
    File pictureFile = null;
    try {
        pictureFile = GENERIC.amPictureFile(this);
    } catch (IOException ex) {
    // Error occurred while creating the File
    Toast.makeText(this, "Create file failed!", Toast.LENGTH_SHORT).show();
    }

if (pictureFile != null) {
    //https://stackoverflow.com/questions/40087944/content-uri-crashes-camera-on-android-kitkat
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){
        this.imageToUploadUri = Uri.fromFile(pictureFile);
    } else {            
        this.imageToUploadUri = FileProvider.getUriForFile(this,"com.insulinpower.android.fileprovider", pictureFile);  // <-- THIS statement crashes with the indicated exception
    }
    //\  https://stackoverflow.com/questions/40087944/content-uri-crashes-camera-on-android-kitkat

    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri);
    startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}


// file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Share folder under public external storage folder.The base folder is Environment.getExternalStorageDirectory()-->
    <!--external-path name="my_data" path="InsulinPower/amSignTool/Data/" /> -->
    <external-files-path name="my_data" path="/InsulinPower/amSignTool/Data/" />
    <!-- external-files-path name="my_data" path="InsulinPower/amSignTool/Data/" / -->
    <!-- external-files-path name="my_data" path="/" /-->
</paths>


// manifest
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.insulinpower.android.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"></meta-data>
</provider>

File storageDir = new File(Environment.getExternalStorageDirectory(),»»);
returns «/storage/emulated/0» // valid, adding the /InsulinPower/amSignTool/Data suffix to go to the correct folder…

File file = this.getExternalFilesDir(null);
returns «/storage/emulated/0/Android/data/com.insulinpower.amsigntool/files» // not valid for me

any hint would be really appreciated to understand my errors, and please excuse my poor english..
TIA
Andrea

Папка со скачанной веб-страницей из интернета, второй вариант — содержит данные для модификации прошивки, которые были ранее загружены (например с форума 4PDA).

Информация об этой папке отсутствует в интернете полностью. Известно только, что она может появляться при скачивании файла из интернета, после изменения некоторых настроек телефона. Каких именно — неизвестно.

Например один человек пишет — его мама изменила некоторые параметры в смартфоне, после — какой бы она файл не скачала например из Facebook — ppt или pdf, менеджер загрузок перенаправляет ее в директорию archivetemp, в результате нельзя получить доступ к скачанным данным.

В интернете посоветовали нажать левую кнопку со стрелкой влево напротив archivetemp, вероятно это нужно чтобы вернуться в папку на уровень выше и там уже выбрать директорию Загрузки (Downloads).

В сети был найден следующий путь:

content://com.huawei.hidisk.fileprovider/root/storage/emulated/0/.archivetemp/.archivetempmessages0.html

Это некий служебный адрес, который ведет на карту памяти (storage). Далее видим: в директории 0 существует папка .archivetemp, внутри которой — файл .archivetempmessages0.html. Важно понимать, расширение html — это веб-страница, просто сохранена на карту памяти. Она предназначена для открытия в браузере. Возможно данная страница — отображает информацию о скачанных данных, о содержимом архива archivetemp.

У некоторых пользователей внутри папки пусто:

Что означает content.com.huawei.com.txt?

В других случаях может быть файл с названием, например .archivetemp1588342758883.zip:

Что означает content.com.huawei.com.txt?
Внутри видим странные данные. Предположительно все это — скачанная веб-страница или только часть ее. То есть возможно был скачан не файл, а часть веб-страницы, которая имеет много файлов/папок, поэтому система для удобства все упаковала в архив zip. Это как одна из версий.

РЕКЛАМА

Вообще стоит понимать, что название archivetemp состоит из двух слов:

  • archive — архив, то есть данные упакованы в архив, так они могут меньше места занимать и быть в виде одного файла, иногда это удобно.
  • temp — временное действие, под таким названием могут быть временные папки/файлы, которые через некоторое время становятся ненужными и удаляются (или остаются в роли мусора).

Может быть что в смартфоне есть некоторые настройки, которые позволяют активировать опцию автоматической упаковки загружаемых файлов. Может это нужно для скачивания нескольких файлов, чтобы их все упаковывать в архив, чтобы были в одном месте.

В любом случае можно попробовать написать в поддержку производителя, может там смогут помочь.

Удачи.

я должен исправить наше приложение для Android N из-за изменений FileProvider. Я в основном прочитал все об этой теме для последнего нашего, но никакое решение не найдено для меня.

вот наш предыдущий код, который запускает загрузки из нашего приложения, хранит их в Download папка и вызывает ACTION_VIEW намерение как soons как DownloadManager говорит, что он закончил загрузку:

BroadcastReceiver onComplete = new BroadcastReceiver() {
    public void onReceive(Context ctxt, Intent intent) {
        Log.d(TAG, "Download commplete");

        // Check for our download
        long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        if (mDownloadReference == referenceId) {
            DownloadManager.Query query = new DownloadManager.Query();
            query.setFilterById(mDownloadReference);
            Cursor c = mDownloadManager.query(query);
            if (c.moveToFirst()) {
                int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                    String localUri = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                    String fileExtension = MimeTypeMap.getFileExtensionFromUrl(localUri);
                    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);

                    if (mimeType != null) {
                        Intent openFileIntent = new Intent(Intent.ACTION_VIEW);
                        openFileIntent.setDataAndTypeAndNormalize(Uri.parse(localUri), mimeType);
                        openFileIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

                        try {
                            mAcme.startActivity(openFileIntent);
                        }
                        catch (ActivityNotFoundException e) {
                            // Ignore if no activity was found.
                        }
                    }
                }
            }
        }
    }
};

это работает на Android M, но ломается на N из-за популярного FileUriExposedException. Я сейчас пытался исправить это с помощью FileProvider, но я не могу заставить его работать. Он ломается, когда я пытаюсь получить URI содержимого:

Failed to find configured root that contains /file:/storage/emulated/0/Download/test.pdf

на localUri вернулся из DownloadManager для файл:

на Environment.getExternalStorageDirectory() возвращает /storage/emulated/0 а это код для преобразования:

File file = new File(localUri);
Log.d(TAG, localUri + " - " + Environment.getExternalStorageDirectory());
Uri contentUri = FileProvider.getUriForFile(ctxt, "my.file.provider", file);
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="my.file.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"/>
    </provider>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_path" path="." />
</paths>

и я пробовал все значения, которые мог найдите в этом xml-файле. 🙁

4 ответов


if (localUri.substring(0, 7).matches("file://")) {
    localUri =  localUri.substring(7);
}
File file = new File(localUri);

здесь изменение в AndroidManifest.в XML

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"/>
</provider>

изменить путь к файлу

Uri contentUri;
if(Build.VERSION.SDK_INT == 24){
         contentUri = FileProvider.getUriForFile(MainActivity.this,
              getApplicationContext().getPackageName() + ".provider",
                    file);
 } else{
         contentUri = Uri.fromFile(file);
        }

у меня была аналогичная проблема, и я решил ее, не открывая файл автоматически, но показывая уведомление «загрузить полный», а затем пусть система Android откроет файл, когда пользователь нажимает на уведомление.

чтобы уведомить Пользователя дополнительно, я показываю тост, когда загрузка будет завершена.

DownloadManager mManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);

String url = "your URL";
String filename = "file.pdf";

// Set up the request.
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url))
            .setTitle("Test")
            .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename)
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            .setDescription("Downloading...")
            .setMimeType("application/pdf");

request.allowScanningByMediaScanner();
mManager.enqueue(request);
public class DownloadReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case DownloadManager.ACTION_DOWNLOAD_COMPLETE:
                Toast.makeText(context, "Download completed", Toast.LENGTH_SHORT).show();
                break;
        }
    }

}

может быть это более четкое решение ?

Uri uriParser = Uri.parse(downloadedPackageUriString);
File downloadedFile = new File(uriParser.getPath());

файл:///хранение/эмуляция / 0 / загрузка / ZS%20Gac%C3%ADkov%C3%A1.формат PDF

/ хранение / эмуляция/0/загрузка / ZS Gacíková.формат PDF


Update for Android N (leaving the original answer below and have confirmed this new approach works in production):

As you noted in your update, many Huawei device models (e.g. KIW-L24, ALE-L21, ALE-L02, PLK-L01, and a variety of others) break the Android contract for calls to ContextCompat#getExternalFilesDirs(String).
 Rather than returning Context#getExternalFilesDir(String) (ie the default entry) as the first object in the
 array, they instead return the first object as the path to the external SD card, if one is present.

By breaking this ordering contract, these Huawei devices with external SD cards will crash with an IllegalArgumentException on calls to FileProvider#getUriForFile(Context, String, File) for external-files-path roots. While there are a variety of solutions that you can pursue to attempt to deal with this issue (e.g. writing a custom FileProvider implementation), I’ve found the easiest approach is to catch this issue and:

  • Pre-N: Return Uri#fromFile(File), which won’t work with Android N and above due to FileUriExposedException
  • N: Copy the file to your cache-path (note: this can introduce ANRs if done on the UI Thread) and then return FileProvider#getUriForFile(Context, String, File) for the copied file (ie avoiding the bug altogether)

Code to accomplish this can be found below:

public class ContentUriProvider {

    private static final String HUAWEI_MANUFACTURER = "Huawei";

    public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) {
        if (HUAWEI_MANUFACTURER.equalsIgnoreCase(Build.MANUFACTURER)) {
            Log.w(ContentUriProvider.class.getSimpleName(), "Using a Huawei device Increased likelihood of failure...");
            try {
                return FileProvider.getUriForFile(context, authority, file);
            } catch (IllegalArgumentException e) {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                    Log.w(ContentUriProvider.class.getSimpleName(), "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug for pre-N devices", e);
                    return Uri.fromFile(file);
                } else {
                    Log.w(ContentUriProvider.class.getSimpleName(), "ANR Risk -- Copying the file the location cache to avoid Huawei 'external-files-path' bug for N+ devices", e);
                    // Note: Periodically clear this cache
                    final File cacheFolder = new File(context.getCacheDir(), HUAWEI_MANUFACTURER);
                    final File cacheLocation = new File(cacheFolder, file.getName());
                    InputStream in = null;
                    OutputStream out = null;
                    try {
                        in = new FileInputStream(file);
                        out = new FileOutputStream(cacheLocation); // appending output stream
                        IOUtils.copy(in, out);
                        Log.i(ContentUriProvider.class.getSimpleName(), "Completed Android N+ Huawei file copy. Attempting to return the cached file");
                        return FileProvider.getUriForFile(context, authority, cacheLocation);
                    } catch (IOException e1) {
                        Log.e(ContentUriProvider.class.getSimpleName(), "Failed to copy the Huawei file. Re-throwing exception", e1);
                        throw new IllegalArgumentException("Huawei devices are unsupported for Android N", e1);
                    } finally {
                        IOUtils.closeQuietly(in);
                        IOUtils.closeQuietly(out);
                    }
                }
            }
        } else {
            return FileProvider.getUriForFile(context, authority, file);
        }
    }

}

Along with the file_provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="public-files-path" path="." />
    <cache-path name="private-cache-path" path="." />
</paths>

Once you’ve created a class like this, replace your calls to:

FileProvider.getUriForFile(Context, String, File)

with:

ContentUriProvider.getUriForFile(Context, String, File)

Frankly, I don’t think this is an especially graceful solution, but it does allow us to use formally documented Android behavior without doing anything too drastic (e.g. writing a custom FileProvider implementation). I have tested this in production, so I can confirm that it resolves these Huawei crashes. For me, this was the best approach, since I didn’t wish to spend too much time addressing what is quite obviously a manufacturer’s defect.

Дополнительно:  Исправление синего экрана с ошибкой atikmpag sys

Update from before Huawei devices with this bug updated to Android N:

This won’t work with Android N and above due to FileUriExposedException, but I have yet to encounter a Huawei device with this mis-configuration on Android N.

public class ContentUriProvider {

    private static final String HUAWEI_MANUFACTURER = "Huawei";

    public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) {
        if (HUAWEI_MANUFACTURER.equalsIgnoreCase(Build.MANUFACTURER) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            Log.w(ContentUriProvider.class.getSimpleName(), "Using a Huawei device on pre-N. Increased likelihood of failure...");
            try {
                return FileProvider.getUriForFile(context, authority, file);
            } catch (IllegalArgumentException e) {
                Log.w(ContentUriProvider.class.getSimpleName(), "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug", e);
                return Uri.fromFile(file);
            }
        } else {
            return FileProvider.getUriForFile(context, authority, file);
        }
    }
}

Эмулируемое хранилище предоставляется путем предоставления части внутреннего хранилища через слой эмуляции и доступно с Android 3.0.

Эмулируемая файловая система слой абстракции в реальной файловой системе (ext4 или f2fs), который служит в основном двум целям: Сохранение USB-подключения устройств Android к ПК (реализовано через MTP теперь уже несколько дней) Ограничение несанкционированного доступа приложений / процессов к личным медиа пользователя и данным других приложений на SD-карте.

Могу ли я удалить эмулированную папку хранилища в Android?

Эмулированное хранилище — это место, где вы храните все свои приложения, данные, изображения, музыку и т. Д. Вы не хотите удалять папку (при условии, что вы могли бы без рутирования телефона)!

Эмулируется ли память моей SD-карты?

Игровой автомат Папка Android находится в каталоге пользователя / storage / emulated.. Так что да, он будет перемещаться вместе со всеми данными вашего внутреннего пользовательского хранилища, если вы решите перейти на SD-карту.

Что такое эмулируемое хранилище 0?

Это то, что можно назвать «символической ссылкой» или, проще говоря, ссылкой на где реальные данные хранится. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где он хранится. Поскольку он находится в / storage / emulated / 0 / DCIM /. эскизы, вероятно, они находятся в / Internal Storage / DCIM /.

Как просмотреть эмулированные файлы на Android?

Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где он хранится. Поскольку это в / хранение / эмуляция / 0 / DCIM /. эскизы, вероятно, они находятся в / Internal Storage / DCIM /. эскизы /.

Как мне получить доступ к внутренней памяти на Android?

Управление файлами на вашем телефоне Android

Между тем с выпуском Google Android 8.0 Oreo файловый менеджер находится в приложении Android Downloads. Все, что вам нужно сделать, это открыть это приложение и выберите в его меню опцию «Показать внутреннюю память» для просмотра всей внутренней памяти телефона.

Безопасно ли удалить папку данных Android?

Эти кеши данных по сути являются просто ненужными файлами, и их можно безопасно удалено, чтобы освободить место для хранения.

Как удалить эмулированные файлы?

В Android Studia зайдите в Инструменты -&gt; AVD Manager. В новом окне есть список с вашими эмуляторами. Вы выбираете эмулятор, который хотите удалить, а в правой части располагаете кнопку в виде треугольника (Spinner или DropDownList). В этом списке есть опция «Удалить».

Что будет, если я удалю Mtklog?

Да это совершенно безопасно удалить файлы, но вы также должны выключить его. Вы не хотите, чтобы на вашем устройстве были запущены какие-либо журналы! Они быстро заполнят вашу SD / eMMC-карту мусором, и если не заполнить ее, она изнашивается, если файлы журнала будут переработаны.

Почему у моего телефона имитация хранилища?

Эмулированное хранилище работает, чтобы выразить фактический путь к файлу против символической ссылки хранилища вашего устройства. Он может выражать как внутреннюю память, так и внешнюю SD-карту. Символьная ссылка используется в вычислениях для обозначения символической ссылки.

Почему на моей SD-карте есть папка Android?

Таким образом, в большинстве случаев каталоги в каталоге Android на SD-карте либо пусто, либо файлы являются копиями файлов на основном внешнем хранилище. Хотя в большинстве случаев это не имеет смысла, но некоторые разработчики приложений могут предпочесть сохранять данные во вторичном внешнем хранилище, это зависит от их желания.

Что такое эмулируемая SD-карта?

Вы можете создать образ диска, а затем загрузить его в эмулятор при запуске, чтобы имитировать наличие SD-карты пользователя в устройстве. Для этого вы можете использовать инструмент Android, чтобы создать новый образ SD-карты с новым AVD, или вы можете использовать утилиту mksdcard, включенную в SDK.

Как вы открываете эмулируемое хранилище 0?

У вас нет разрешения на чтение / хранение / эмуляцию /, но, поскольку вы знаете, что он находится в подкаталоге 0, просто перейти cd / storage / emulated / 0 и вы сможете смотреть по сторонам и взаимодействовать, как предполагалось. В эмуляторе, чтобы просмотреть этот файл, нажмите «Настройки»&gt; «Хранилище»&gt; «Другое»&gt; «Android»&gt; «Данные»&gt; «com.

Как мне получить доступ к хранилищу 999 с эмуляцией WhatsApp?

Вот решение для пользователей Android:

  1. Загрузите ES FILE EXPLORER из Play Store. [Этот проводник — единственное исключение.]
  2. Найдите «Избранное» в верхнем левом углу.
  3. Добавьте свою любимую папку, нажав «ДОБАВИТЬ».
  4. Назовите его, как хотите, в разделе пути введите «/ storage / emulated / 999 /» и нажмите «ОК».
  5. Ну вот.

Что подразумевается под эмулированным?

переходный глагол. 1а: стремиться быть равным или превосходить. b: особенно подражать: подражать средствами эмулятора. 2: чтобы равняться или приближаться к равенству с.

Как открыть доступ для установки приложений из сторонних источников?

Многие сталкивались с тем, что при желании загрузить какое-либо интересующее приложение на свой мобильный телефон, необходимо воспользоваться Google Play Маркет.

Однако, мало кто знает, что загрузить приложения можно и другими способами:

  • скачать его из браузера напрямую;
  • перенести с компьютера;
  • перенести с любого смартфона или планшета.

При этом, потребуется, конечно, ручная установка.
Этот метод требует необходимости в получении так называемого разрешения.
И его получить на разных моделях смартфонов можно по-разному.
Все зависит от прошивки телефона и версии ОС Андроид, которая стоит на мобильном аппарате.

Для защиты ОС Android от скачивания apk-файлов, в которых могут находится вирусы, при загрузке приложений, в системе находится особая защита – временная блокировка на скачивание приложений и прочих файлов, которые поступают из сторонних источников.
До тех пор, пока пользователь не предоставит доступ программе на инсталляцию, по-иному загрузить приложение будет невозможно.

Самая современная и устойчивая система безопасности установлена на новейшей версии Android 10.


В этих версиях находится графа с настройками, где находятся основные файлы, выступающие в качестве известных источников для загрузки. apk-файлов.

Этот уровень защиты регламентирует собственникам мобильных гаджетов предоставлять по отдельности разрешение, за счет которого происходит скачивание файла в память мобильника.

Если пользоваться файловым менеджером, который может устанавливать любые приложения, то, соответственно, следует ему дать это разрешение.

В связи с тем, что разные производители смартфонов и операционных систем предлагают в моделях телефонов свои особенности управления и свой особенный функционал работы, то процесс разрешения загрузки приложений может немного отличаться.

И чтобы рассмотреть максимальное количество вариантов установки разрешений, здесь будут предоставлены максимально корректные алгоритмы для установки для всех возможных типов операционных систем и смартфонов.

При наличии в смартфонах версии Android 10, то процесс сведется к минимальному количеству операций:

  1. Скачиваем приложения с любого источника
  2. После скачивания нажимаем на само приложения
  3. Выйдет оповещения о безопасности, нажимаем «Настройки»

    андроид 10

  4. Переключив ползунок, тем самым мы даем права установки apk. файлов, для приложения (файлового обменника).

    даем права установки apk

  5. После этих минимальных действий, мы можем с лёгкостью устанавливать любые приложения!

    установка самого приложения

Дать доступ на установки приложений из сторонних источников Xiaomi с MIUI

Тем, у кого во владении имеются телефоны Xiaomi с ОС MIUI 12 в версиях Андроид 9 и более прошлых, нет необходимости получать разрешение, чтобы скачивать каждое приложение по отдельности.

Первый способ:

  1. Потребуется открыть меню «Настройки».


    Xiaomi с MIUI - 1

  2. Перейти к пункту «Расширенные настройки».

    Xiaomi с MIUI - 2

  3. Зайти в меню «Конфиденциальность».

    Xiaomi с MIUI - 3

  4. В пункте «Неизвестные источники» активировать;

    Xiaomi с MIUI - 4

  5. Кликнуть «Ок».

Второй способ:

  1. Скачать приложения со стороннего источника
  2. Запустить приложения(процесс установки)

    Запустить приложения

  3. Потребуется открыть «Настройки».

    Настройки

  4. В пункте «Неизвестные источники» активировать;

    Неизвестные источники

  5. Выйдет оповещения, нажимаем «ок»

    Выйдет оповещения, нажимаем «ок»

    активна

Некоторые модели этих смартфонов не имеют возможность выхода в сервис Гугл для загрузки наиболее популярных приложений и игр для пользователей.
Однако, это не имеет значения, когда есть желание установить нужное приложение.
Главное, что есть желание, и даже возможности, о которых мало кто знает.

Соответственно, сразу же возникают вопросы, где и как скачать и загрузить на любимый гаджет нужное приложение или игрушку.
Ответ прост – исключительно с помощью сторонних источников.

Для установки файлов с расширением apk, придется выполнить несколько операций:


  1. Открыть меню «Настройки».
  2. Опуститься к разделу «Безопасность».

    Honor 1

  3. Войти в «Дополнительные настройки».

    Honor 2

  4. Открыть пункт «Установка приложений из внешних источников».

    Honor 3

Далее отмечают менеджеров, которым будет предоставлены разрешения на установку сторонних файлов.
Затем открывают настройки выбранных файлов и нажимают кнопку «Разрешить установку приложений».
На этом процесс завершается.

Смартфоны Samsung с ОС One UI

При необходимости скачивания приложений из внешних источников нужно:

  1. Зайти в «Настройки» телефона.
  2. Перейти в пункт «Экран блокировки и защита».

    Экран блокировки и защита

  3. Нажать на ползунок «Неизвестные источники».

    Неизвестные источники

Здесь также высветится перечень файлов.
Из него выбирается как файловый менеджер, с помощью которого можно произвести установку сторонних программ.
Необходимо выбрать из всего списка одну или несколько программ.
После кликнуть настройки этой программы и отметить там пункт «Разрешение для этого источника».

В системе Андроид тех версий, которые идут следом за 8.0 Oreo, производители предусмотрели опцию инсталляции приложений из сторонних источников.

Принцип оказался не сложен:

  • запускают скачивание приложения из стороннего источника;
  • всплывает окошко с текстом информации, в котором четко сказано, что ОС будет блокировать скачивание приложений, которые операционной системе неизвестны, и находятся во внешней системе.
    И делается это исключительно для обеспечения безопасности мобильного гаджета.
  • Чтобы загрузить нужные файлы, надо кликнуть «Настройки», и установить активность этой функции.

Как только процесс завершится, возвратиться обратно в меню и закончить начатую инсталляцию программы.
Впоследствии, все файлы, которые пользователь захочет в будущем загружать именно из этого источника, будут устанавливаться автоматически без запроса разрешений.

Если на устройстве заканчивается свободное место, появляется необходимость почистить память от лишних файлов и папок. Android включает большое количество директорий, но тут возникает вопрос – какие папки можно удалить на телефоне, а какие трогать нельзя?

Данная статья подходит для всех брендов, выпускающих телефоны на Android 11/10/9/8: Samsung, HTC, Lenovo, LG, Sony, ZTE, Huawei, Meizu, Fly, Alcatel, Xiaomi, Nokia и прочие. Мы не несем ответственности за ваши действия.

Внимание! Вы можете задать свой вопрос специалисту в конце статьи.

Мы не несем ответственности за ваши действия

Прежде, чем удалять папки, ознакомьтесь со статьей Как увеличить память на Android.

Папки Андроид — структура

Список папок может отличаться в зависимости от версии Android. Некоторые приложения могут создавать собственные каталоги в памяти – например, мессенджеры. Однако в целом список папок на всех версиях Android будет одинаковым, так что вам нужно лишь знать, что в них хранится.

  • Cache – папка с временными файлами обновления. Если не собираетесь обновлять систему, можете ее удалить.
  • data/app – установочные файлы всех сторонних приложений. Если вы ими не пользуетесь, можете удалить.
  • data/data – настройки, сохранения и другая служебная информация, необходимая для работы приложений. Если не пользуетесь установленными программами, удалите каталог.
  • data/clipboard – буфер обмена данными с последними скриншотами. Не рекомендуется удалять.
  • data/dalvik-cache – область кеш-памяти для виртуальной java-машины, позволяющей телефону запускать APK-файлы. Необходимо регулярно чистить от файлов, но нельзя удалять. (читайте Как установить кэш к игре на Android)

В папке Documents хранятся разнообразные документы. Если их содержание не интересует, спокойно удаляйте каталог. То же относится к директории Bluetooth, в которой расположены файлы, принятые по этой беспроводной технологии.

Не знаешь как решить проблему в работе своего гаджета и нужен совет специалиста? На вопросы отвечает Алексей, мастер по ремонту смартфонов и планшетов в сервисном центре.Напиши мне »

Какие папки нельзя удалять на Android
Увеличить

В папке DCIM хранятся фотографии, сделанные на камеру. Если нужных фотографий нет, можно безбоязненно стирать каталог. Не повлияет на работу Android удаление папок Images, Pictures, Musi, Audio и т.п.

Читайте: Как восстановить удаленные фотографии на Android

Папки, которые нельзя удалять

Есть в Android папки, которые категорически нельзя удалить, так как без них система не будет корректно работать. Запомните эти названия:

  • efs – информация о IMEI, Mac, Bluetooth и Wi-Fi.
  • etc – файлы конфигурации, используемые при загрузке системы и процессов различных встроенных программ.
  • lib – библиотеки, необходимые для работы программ и модулей.
  • mnt – образы монтируемых систем.
  • proc – ключевые сведения об установленной системе.
  • sbin – исполняемые файлы всех программ, участвующих с управлении системой.
  • sys – конфигурация системы в данный момент.

Ни в коем случае нельзя удалять папку system со всеми вложенными в нее каталогами. System – это хребет системы, так что если вы удалите отсюда какие-то данные, то будете прошивать телефон заново.

Способы удаления

Чтобы удалять системные папки, нужны права суперпользователя – root. Если у вас их нет, то вы точно никак не сможете сломать Андроид. При наличии root-прав нужно быть крайне осторожным – удаление важных системных файлов приведет к тому, что вам придется прошивать устройство заново.

Android не видит карту памяти microSD (флешку)

Папка в галерее Android — как создать / удалить / восстановить / поставить пароль

Если вы разобрались, какие папки можно безболезненно удалить, то приступайте к очистке памяти с помощью стандартных функций:

  1. Откройте главное меню Андроид и запустите браузер файлов (менеджер файлов).
  2. Найдите папку, которую можно удалить. Нажмите на нее и держите палец.
  3. Когда появится меню, выберите «Удалить».
Какие папки нельзя удалять на Android и какие можно
Увеличить

На скриншоте представлен вариант менеджера с поддержкой множественного выбора. Кнопка удалить находится в данном случае сверху справа в виде иконки корзины.

В стандартном файловом менеджере не отображаются все файлы и папки Android. Чтобы хорошо почистить память устройства, используйте ES Проводник или другой сторонний менеджер файлов.

  1. Запустите ES Проводник.
  2. Выберите, что будете чистить – внутреннее хранилище (Internal Storage) или карту памяти.
  3. Удерживайте палец на папке, которую хотите удалить. Как только он будет отмечен, начните выделять другие файлы и папки.
  4. После выбора всех элементов для удаления нажмите на кнопку «Удалить» в нижнем меню.
Какие папки нельзя удалять на Android и какие можно
Увеличить

Можно не пользоваться файловыми менеджерами на Android, а просто подключить телефон к компьютеру, выбрав режим медиа-устройство, в котором возможен просмотр и изменение содержимого памяти.

Android не подключается к компьютеру по WiFi

Как удалить загруженные файлы на телефон Android

Какие папки нельзя удалять на Android и какие можно
Увеличить

После подключения к компьютеру вы можете открыть внутреннюю память смартфона в проводнике и удалить ненужные папки, освободим место.

Мастер Николай

Инженер по ремонту мобильной и компьютерной техники в специализированном сервисном центре, г. Москва. Непрерывный опыт работы с 2010 года.Есть вопросы? Задавайте в комментариях к статье. Отвечать стараюсь максимально быстро вам на указанную почту. Каждый случай индивидуален и поэтому очень важно, чтобы вы максимально расписали свою проблему и какая у вас модель устройства.

Обновление для Android N (оставив исходный ответ ниже и подтвердив, что этот новый подход работает в производстве):

Как вы отметили в своем обновлении, многие модели устройств Huawei (например, KIW-L24, ALE-L21, ALE-L02, PLK-L01 и многие другие) нарушают контракт Android для вызовов ContextCompat#getExternalFilesDirs(String) . Вместо того, чтобы возвращать Context#getExternalFilesDir(String) (т.е. запись по умолчанию) в качестве первого объекта в массиве, они вместо этого возвращают первый объект в качестве пути к внешней SD-карте, если таковой присутствует.

Разрушая этот контракт на заказ, эти устройства Huawei с внешними SD-картами будут сбой с IllegalArgumentException при вызовах FileProvider#getUriForFile(Context, String, File) для корней external-files-path . Хотя существует множество решений, которые вы можете предпринять, чтобы попытаться решить эту проблему (например, написать пользовательскую реализацию FileProvider ), я нашел, что самый простой подход – уловить эту проблему и:

  • Pre-N: Возврат Uri#fromFile(File) , который не будет работать с Android N и выше из-за FileUriExposedException
  • N: Скопируйте файл в свой cache-path (обратите внимание: это может ввести ANR, если это сделано в потоке пользовательского интерфейса), а затем вернуть FileProvider#getUriForFile(Context, String, File) для скопированного файла (т. FileProvider#getUriForFile(Context, String, File) избежать ошибки)

Код для этого можно найти ниже:

 public class ContentUriProvider { private static final String HUAWEI_MANUFACTURER = "Huawei"; public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) { if (HUAWEI_MANUFACTURER.equalsIgnoreCase(Build.MANUFACTURER)) { Log.w(ContentUriProvider.class.getSimpleName(), "Using a Huawei device Increased likelihood of failure..."); try { return FileProvider.getUriForFile(context, authority, file); } catch (IllegalArgumentException e) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { Log.w(ContentUriProvider.class.getSimpleName(), "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug for pre-N devices", e); return Uri.fromFile(file); } else { Log.w(ContentUriProvider.class.getSimpleName(), "ANR Risk -- Copying the file the location cache to avoid Huawei 'external-files-path' bug for N+ devices", e); // Note: Periodically clear this cache final File cacheFolder = new File(context.getCacheDir(), HUAWEI_MANUFACTURER); final File cacheLocation = new File(cacheFolder, file.getName()); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(file); out = new FileOutputStream(cacheLocation); // appending output stream IOUtils.copy(in, out); Log.i(ContentUriProvider.class.getSimpleName(), "Completed Android N+ Huawei file copy. Attempting to return the cached file"); return FileProvider.getUriForFile(context, authority, cacheLocation); } catch (IOException e1) { Log.e(ContentUriProvider.class.getSimpleName(), "Failed to copy the Huawei file. Re-throwing exception", e1); throw new IllegalArgumentException("Huawei devices are unsupported for Android N", e1); } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } } } } else { return FileProvider.getUriForFile(context, authority, file); } } } 

Наряду с file_provider_paths.xml :

 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="public-files-path" path="." /> <cache-path name="private-cache-path" path="." /> </paths> 

После того как вы создали такой класс, замените свои вызовы на:

 FileProvider.getUriForFile(Context, String, File) 

с:

 ContentUriProvider.getUriForFile(Context, String, File) 

Честно говоря, я не думаю, что это особенно грациозное решение, но это позволяет нам использовать официально зарегистрированное поведение Android, не делая ничего слишком радикального (например, написание пользовательской реализации FileProvider ). Я тестировал это на производстве, поэтому могу подтвердить, что он устраняет эти сбои Huawei. Для меня это был лучший подход, поскольку я не хотел тратить слишком много времени на то, что явно является дефектом производителя.

Обновление до устройств Huawei с этой ошибкой, обновленной до Android N:

Это не будет работать с Android N и выше из-за FileUriExposedException , но мне еще предстоит столкнуться с устройством Huawei с этой неправильной конфигурацией на Android N.

 public class ContentUriProvider { private static final String HUAWEI_MANUFACTURER = "Huawei"; public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) { if (HUAWEI_MANUFACTURER.equalsIgnoreCase(Build.MANUFACTURER) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { Log.w(ContentUriProvider.class.getSimpleName(), "Using a Huawei device on pre-N. Increased likelihood of failure..."); try { return FileProvider.getUriForFile(context, authority, file); } catch (IllegalArgumentException e) { Log.w(ContentUriProvider.class.getSimpleName(), "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug", e); return Uri.fromFile(file); } } else { return FileProvider.getUriForFile(context, authority, file); } } } 

У меня была такая же проблема, и в конечном итоге мое решение заключалось в том, чтобы всегда использовать вызов ContextCompat.getExternalFilesDirs для создания File который используется как параметр для FileProvider . Таким образом, вам не нужно использовать какие-либо из вышеперечисленных способов обхода.

Другими словами. Если у вас есть контроль над параметром File который вы используете для вызова FileProvider и / или вам все равно, что файл может быть сохранен вне каталога classic /storage/emulated/0/Android/data/ (который должен быть Отлично, поскольку все это одна и та же SD-карта), тогда я предлагаю сделать то, что я сделал.

Если это не ваше дело, я предлагаю использовать вышеупомянутый ответ с пользовательской реализацией getUriForFile .

Мое решение этой проблемы прямо сейчас, даже если это не так, заключается в объявлении моего FileProvider следующим путем (чтобы можно было обслуживать все файлы на устройстве):

 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <root-path name="root" path="" /> </paths> 

Это официально не документировано и может разорваться с будущей версией библиотеки поддержки v4, но я не вижу другого решения для работы с файлом во вторичном внешнем хранилище (часто с SD-картой) с использованием существующего FileProvider .

Как получить доступ / хранение / эмуляция/0/

Я написал код для записи звука и сохранения ti ниже местоположения файла.

private String getFilename() {
    String filepath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(filepath, AUDIO_RECORDER_FOLDER);
    if (!file.exists()) {
        file.mkdirs();
    }
    return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + file_exts[currentFormat]);
}

в Logcat он дает мне местоположение файла как
/ хранение / эмуляция/0/AudioRecorder / 1436854479696.mp4

Я не могу найти эту папку на SD-карте. Как получить доступ к папке?

15 ответов


Как сказал Хирен, вам понадобится проводник, чтобы увидеть ваш каталог. Если вы коренитесь, я настоятельно рекомендую root explorer, иначе ES File Explorer-хороший выбор.


нет необходимости в сторонних приложениях

мой Android 6.0 позволяет мне просматривать память стажера без необходимости сторонних приложений. Я просто делаю это*:

  1. «настройки»
  2. «хранение и USB»
  3. «стажер»
  4. [пусть он загрузится немного…]
  5. [прокрутите вниз]
  6. «обзор»

* слова могут не соответствовать стандартной английской версии одни, поскольку я просто свободно перевожу их с португальского.

Примечание: по крайней мере в моем телефоне, /storage/emulated/0 не соответствует SD-карте, но интерн. Этот метод не работал для моей внешней карты, но я никогда не пробовал его с другим телефоном.

надеюсь, что это помогает!


также вы можете использовать мост отладки Android (adb) чтобы скопировать файл с устройства Android в папку на вашем ПК:

adb pull /storage/emulated/0/AudioRecorder/1436854479696.mp4 <folder_on_your_PC_e.g. c:/temp>

и вы можете скопировать с устройства всего :

adb pull /storage/emulated/0/AudioRecorder <folder_on_your_PC_e.g. c:/temp>


подключите устройство и запустите adb shell Что даст вам командную оболочку на вашем устройстве. У вас нет разрешения читать /storage/emulated/ но так как вы знаете, что это в подкаталоге 0 просто go cd /storage/emulated/0 и вы сможете смотреть вокруг и взаимодействовать как aspected.

Примечание: можно использовать adb беспроводное, а также


private String getFilename() {
    String filepath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(filepath + "/AudioRecorder" );
    if (!file.exists()) {
        file.mkdirs();
    }
    return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".mp4");
}

в эмуляторе для просмотра этого файла нажмите Настройки&gt;хранилище&gt;другое&gt;Android&gt;данные&gt;com.имя_компании.textapp&gt;файл&gt;загрузить.
Здесь textapp-это имя приложения, над которым вы работаете.


здесь он находится в /mnt / shell / emulated / 0


ftp://ip_my_s5:2221/mnt/sdcard/Pictures/Screenshots

, которые указывают на /storage/emulated/0


Если вы используете Android Device monitor и эмулятор android: я получил доступ следующим образом:
Данные/Медиа/0/


чтобы восстановить ваши фотографии из / storage / emulated/0 / просто откройте файл 100Andro..там вы увидите свои фотографии, хотя у вас может не быть доступа к ним в вашем PC explorer. Там открываем каждую картинку одну за другой, продолжаем настройку (три точки..) и сохранить изображение. Он будет отображаться в файле android «картинки», откуда вы также можете скопировать их с помощью проводника. Нет функции «сохранить все», однако она должна выполняться один за другим, но она работает.


в моем случае, / storage / emulated/0 / соответствует корневому пути моего устройства. Например, когда я делаю снимок с помощью приложения камеры по умолчанию моего телефона, изображения сохраняются автоматически / store / emulated/0 / DCIM / Camera / mypicname.в формате JPEG

например, предположим, что вы хотите сохранить свои фотографии в каталоге / Pictures, а именно в каталоге Pictures, который существует в корневом каталоге. Таким образом, вы используете приведенный ниже код.

File storageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES );

если вы хотите сохраните изображения в каталоге DCIM или Downloads, приведите приведенные ниже аргументы для среды.getExternalStoragePublicDirectory() метод, показанный выше.

Environment.DIRECTORY_DCIM
Environment.DIRECTORY_Downloads

затем укажите свое имя изображения:

String imageFileName = "JPEG_" + timeStamp + "_";

затем создайте объект file, как показано ниже. Суффикс указывается в качестве 2-го аргумента.

File image = File.createTempFile(
            imageFileName,  // prefix
            ".jpg",         // suffix
            storageDir      // directory
);

г-н дорогие игрушки сказал:
Я поражен, что эта проблема все еще появляется, поскольку она начала происходить еще в Honeycomb.

Итак, /storage / emulated/0 / DCIM / Camera-это та же папка, что и ваша обычная папка DCIM/Camera. Его просто симлинк. Таким образом, файлы находятся в правильном месте, у вас просто есть приложение, которое помещает плохие данные в базу данных MediaStore.

при доступе к файлам с вашего ПК вы фактически перечисляете базу данных MediaStorage для файлов. Его не тянет традиционные списки каталогов. То, что вы видите, основано на том, что находится в этой базе данных и записях пути в базе данных. Файлы в базе данных, указывающие на эмулированные каталоги, не отображаются, поскольку они считаются дубликатами, поскольку их физический каталог совпадает с обычным DCIM/Camera. Что происходит, так это то, что некоторые плохо написанные сторонние приложения вставляем записи в базу данных с/storage/emulated/0/DCIM / Camera path вместо правильного корневого пути к DCIM / Camera. Это означает, что служба MTP не может видеть их, когда вы подключены к компьютеру.

обычно самый простой способ решить проблему — просто очистить базы данных MediaStore, чтобы получить плохие записи из базы данных MediaStore и позволить системе переиндексировать файлы и поместить в базу данных с правильными путями.

Настройки-&gt;Приложения
Удар 3 точечное меню в правом верхнем углу и выберите Показать систему
Найдите хранилище носителей, выберите его, выберите Хранилище, затем очистите данные
Найдите внешнее хранилище, выберите его, выберите Хранилище, затем очистите данные
Выключите телефон, снова включите телефон, подождите, пока служба индексатора восстановит данные.

когда вы закончите, файлы должны отображаться с соответствующим деревом каталогов и быть видны с ПК. В зависимости от количества файлов на телефоне восстановление базы данных мультимедиа в качестве службы может занять 10-20 минут ходит телефонных справочников, получение мета-данных, создания эскизов и др.


Android рекомендует вам позвонить Environment.getExternalStorageDirectory.getPath() вместо того, чтобы хардкодить /sdcard/ в имя пути. Это возвращает основной каталог общего / внешнего хранилища. Таким образом, если хранилище эмулируется, это вернет /storage/emulated/0. Если вы исследуете хранилище устройств с помощью проводника файлов, указанный каталог будет /mnt/sdcard (подтверждено на Xperia Z2 под управлением Android 6).



С помощью команды
// получить каталог файлов

Image image =new Image() { Source = file.Path };

затем в команду
adb pull / / путь к файлу изображения здесь


андроид. FileUriExposedException: файл: / / / хранилище / эмулированный/0 / тест. txt подвергается за пределами приложения через намерение. метод GetData()

приложение сбой, когда я пытаюсь открыть файл. Он работает ниже Android нуга, но на Android нуга он падает. Это происходит только при попытке открыть файл с SD-карты, а не из системного раздела. Какие-то проблемы с разрешением?

File file = new File("/storage/emulated/0/test.txt");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); // Crashes on this line

android.ОС.FileUriExposedException:
файл: / / / хранение / эмуляция / 0 / тест.txt подвергается за пределами приложения через
Намерение.getData ()

при таргетинге на Android нуга,file:// URI больше не разрешены. Мы должны использовать content:// URIs вместо этого. Однако мое приложение должно открывать файлы в корневых каталогах. Есть идеи?

16 ответов


если targetSdkVersion &gt;= 24, тогда мы должны использовать FileProvider класс, чтобы дать доступ к определенному файлу или папке, чтобы сделать их доступными для других приложений. Мы создаем собственный класс, наследующий FileProvider чтобы убедиться, что наш FileProvider не конфликтует с FileProviders, объявленными в импортированных зависимостях, как описано здесь.

шаги для замены file:// URI с content:// URI-код:

  • добавить расширение класса FileProvider

    public class GenericFileProvider extends FileProvider {}
    
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <application
        ...
        <provider
            android:name=".GenericFileProvider"
            android:authorities="${applicationId}.my.package.name.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
    </application>
</manifest>
  • затем создать на . Папка может потребоваться для создания, если она не существует. Содержимое файла показано ниже. Он описывает, что мы хотел бы поделиться доступом к внешнему хранилищу в корневой папке (path=".") на имя external_files.
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>
  • последним шагом является изменение строки кода ниже в

    Uri photoURI = Uri.fromFile(createImageFile());
    
    Uri photoURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".my.package.name.provider", createImageFile());
    
  • Edit: если вы используете намерение заставить систему открыть ваш файл, вам может потребоваться добавить следующую строку код:

    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    

смотрите, пожалуйста, полный код и решение было объяснено здесь.


кроме решения с помощью FileProvider есть другой способ обойти эту. Проще говоря

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

на Application.onCreate(). Таким образом, виртуальная машина игнорирует файл URI экспозицию.

builder.detectFileUriExposure()

включает проверку экспозиции файла, которая также является поведением по умолчанию, если мы не устанавливаем VmPolicy.

я столкнулся с проблемой, что если я использую content:// URI чтобы отправить что-то, некоторые приложения просто не могут этого понять. И понижение target SDK версия не допускается. В этом случае мое решение полезно.


Если ваше приложение нацелено на API 24+, и вы все еще хотите / должны использовать file: / / intents, вы можете использовать hacky способ отключить проверку выполнения:

if(Build.VERSION.SDK_INT>=24){
   try{
      Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
      m.invoke(null);
   }catch(Exception e){
      e.printStackTrace();
   }
}

метод StrictMode.disableDeathOnFileUriExposure скрыт и задокументирован как:

/**
* Used by lame internal apps that haven't done the hard work to get
* themselves off file:// Uris yet.
*/

проблема в том, что мое приложение не хромает, а скорее не хочет быть искалеченным с помощью content:// intents, которые не поняты многими приложениями. Например, открытие mp3-файла с содержимым: / / scheme предлагает гораздо меньше приложений, чем при открытии того же файл: схема//. Я не хочу платить за ошибки дизайна Google ограничивает функциональность моего приложения.

Google хочет, чтобы разработчики использовали схему контента, но система не готова к этому, в течение многих лет приложения были сделаны, чтобы использовать файлы не «контент», файлы могут быть отредактированы и сохранены обратно, в то время как файлы, обслуживаемые по схеме контента не может быть (не так ли?).



если targetSdkVersion выше 24, потом FileProvider используется для предоставления доступа.

создайте xml-файл (путь: 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="external_files" path="."/>
</paths>

добавить провайдер на AndroidManifest.в XML

    <provider
        android:name="android.support.v4.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>
Uri uri = Uri.fromFile(fileImagePath);
Uri uri = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID + ".provider",fileImagePath);

и вы хорошо идти. Надеюсь на это. помогает.


сначала вам нужно добавить поставщика к вашему AndroidManifest

  <application
    ...>
    <activity>
    .... 
    </activity>
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.your.package.fileProvider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
  </application>

Теперь создайте файл в папке ресурсов xml (если вы используете Android studio, вы можете нажать Alt + Enter после выделения file_paths и выбрать опцию Создать ресурс xml)

далее в файле file_paths введите

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <external-path path="Android/data/com.your.package/" name="files_root" />
  <external-path path="." name="external_storage_root" />
</paths>

этот пример для внешнего пути вы можете ссылаться здесь дополнительные параметры.
Это позволит вам обмениваться файлами, которые находятся в этой папке и ее подпапка.

Теперь все, что осталось, это создать намерение следующим образом:

    MimeTypeMap mime = MimeTypeMap.getSingleton();
    String ext = newFile.getName().substring(newFile.getName().lastIndexOf(".") + 1);
    String type = mime.getMimeTypeFromExtension(ext);
    try {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(getContext(), "com.your.package.fileProvider", newFile);
            intent.setDataAndType(contentUri, type);
        } else {
            intent.setDataAndType(Uri.fromFile(newFile), type);
        }
        startActivityForResult(intent, ACTIVITY_VIEW_ATTACHMENT);
    } catch (ActivityNotFoundException anfe) {
        Toast.makeText(getContext(), "No activity found to open this attachment.", Toast.LENGTH_LONG).show();
    }

редактировать: я добавил корневую папку sd-карты в file_paths. Я тестировал этот код и он работает.


изменить provider_paths.в XML ниже

<?xml version="1.0" encoding="utf-8"?>
 <paths xmlns:android="http://schemas.android.com/apk/res/android">

<external-path path="Android/data/${applicationId}/" name="files_root" />

<root-path
    name="root"
    path="/" />

</paths>

и в классе java(без изменений, так как принятый ответ только небольшой edit)

Uri uri=FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID+".provider", File)

Это поможет мне исправить сбой для файлов из внешних хранилищ, надеюсь, это поможет кому — то с той же проблемой, что и у меня
🙂


использование fileProvider-это путь.
Но вы можете использовать этот простой обходной путь:

startActivity(intent);
startActivity(Intent.createChooser(intent, "Your title"));

я использовал ответ Палаша, приведенный выше, но он был несколько неполным, я должен был предоставить такое разрешение

Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        uri = FileProvider.getUriForFile(this, getPackageName() + ".provider", new File(path));

        List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
    }else {
        uri = Uri.fromFile(new File(path));
    }

    intent.setDataAndType(uri, "application/vnd.android.package-archive");

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivity(intent);

просто вставьте приведенный ниже код в activity onCreate ()

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build());

он будет игнорировать экспозицию URI


Я потратил часы на этот вопрос. Виновник? Котлин.

val playIntent = Intent(Intent.ACTION_VIEW, uri)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

intent было на самом деле параметр getIntent().addFlags вместо того, чтобы работать на моем недавно объявленном playIntent.


для загрузки pdf с сервера добавьте код ниже в свой класс обслуживания. Надеюсь, это поможет вам.

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName + ".pdf");
    intent = new Intent(Intent.ACTION_VIEW);
    //Log.e("pathOpen", file.getPath());

    Uri contentUri;
    contentUri = Uri.fromFile(file);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

    if (Build.VERSION.SDK_INT >= 24) {

        Uri apkURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
        intent.setDataAndType(apkURI, "application/pdf");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    } else {

        intent.setDataAndType(contentUri, "application/pdf");
    }

и да, не забудьте добавить разрешения и поставщика в манифест.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application

<provider
        android:name="android.support.v4.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>


просто вставьте приведенный ниже код в activity onCreate ()

StrictMode.VmPolicy.Builder builder = новый StrictMode.VmPolicy.Builder (); StrictMode.setVmPolicy (builder.build ());

Он будет игнорировать воздействие URI

удачи в кодировании 🙂


этот ответ Для — у вас уже есть приложение, которое было нацелено ниже 24, и теперь вы обновляетесь до targetSDKVersion &gt;= 24.

В Android N изменяется только uri файла, открытый для стороннего приложения. (Не так, как мы использовали его раньше). Поэтому измените только те места, где вы разделяете путь с приложением 3rd party (камера в моем случае)

в нашем приложении мы были отправка uri в приложение камеры, в этом месте мы ожидаем, что приложение камеры будет хранить захваченное изображение.

  1. для android N мы генерируем новый контент: / / URL на основе uri, указывающий на
    файл.
  2. мы генерируем обычный путь к файлу на основе api для того же (используя более старый метод).

теперь у нас есть 2 разных URI для одного файла. #1 совместно с приложением камеры. Если намерение камеры-успех, мы можем получить доступ к изображению из #2.

надеюсь, что это помогает.


в моем случае я избавился от исключения, заменив SetDataAndType с SetData.


Примечание: путь xml / provider_paths.в XML (.axml) не удалось решить, даже после создания xml под ресурсы (возможно, его можно поместить в существующее место, например значения, не пробовал), поэтому я прибегнул к этому, который работает сейчас. Тестирование показало, что его нужно вызывать только один раз за запуск приложения (что имеет смысл в том, что он изменяет рабочее состояние host VM).

Примечание: xml должен быть капитализирован, так что ресурсы / Xml / provider_paths.в XML

Java.Lang.ClassLoader cl = _this.Context.ClassLoader;
Java.Lang.Class strictMode = cl.LoadClass("android.os.StrictMode");                
System.IntPtr ptrStrictMode = JNIEnv.FindClass("android/os/StrictMode");
var method = JNIEnv.GetStaticMethodID(ptrStrictMode, "disableDeathOnFileUriExposure", "()V");                
JNIEnv.CallStaticVoidMethod(strictMode.Handle, method);

Дополнительно:  Решение проблем в RDR 2 на ПК
Оцените статью
Master Hi-technology
Добавить комментарий