Обновить галерею после переименования / удаления изображений в Xamarin.Android [duplicate]

Вы должны добавить свой Android-файл sdk в свой сценарий оболочки bash_profile.

Открыть или создать «.bash_profile» в вашем корневом каталоге учетной записи. И вставьте свой путь sdk в android в файл «bash_profile».

, как это

PATH=$PATH:HOME/bin:/usr/app/mysql/bin:/Users/your_account_name/Library/Android/sdk/platform-tools:/Users/your_account_name/Library/Android/sdk/build-tools/25.0.2

После ввода пути сохраните файл и снова откройте приложение с командной строкой. Если вы исправите добавление этого пути, вы можете вызывать / называть команду «adb» повсюду.

Удачи!


Я слышал, что вы используете ОС Windows для работы dev.

Итак, похоже, что вы набрали команду adb в «adb shell» для Android-устройства. ОС Android основано на Linux. Команда «adb shell» - это способ входа в среду терминала os для Android. В этой среде вы не можете использовать команду adb. Из-за «adb» есть «Android Debug Bridge». мост означает, что команда «adb» помогает подключить рабочую среду к os. Итак, после типа «adb shell» вы находитесь в OS устройства Android, и вы не можете использовать команду «adb».

это мой случай.

User-MacBook-Pro:~ user$ adb shell

shell@hammerhead:/ $ adb

/system/bin/sh: adb: not found

127|shell@hammerhead:/ $ exit

User-MacBook-Pro:~ User$ 

BR

46
задан roryok 21 July 2010 в 15:11
поделиться

3 ответа

Хорошо, я сделал это.

Вместо повторной проверки карты приложение выполняет итерацию через все плейлисты в медиастаре и проверяет длину поля _data. Я обнаружил, что для всех списков без связанного файла M3U это поле всегда было пустым. Тогда это был всего лишь случай поиска исходного кода для оригинального приложения для Android-андроида, поиска метода удаления и использования этого для удаления любых плейлистов с длиной 0. Я переименовал приложение PlaylistPurge (так как он не «повторно сканирует» ') и я отправляю код ниже.

Я, вероятно, также опубликую это где-нибудь на рынке или на моем собственном сайте, http://roryok.com

package com.roryok.PlaylistPurge;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;

public class PlaylistPurge extends ListActivity {

    private List<String> list = new ArrayList<String>();
    private final String [] STAR= {"*"};

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListAdapter adapter = createAdapter();
        setListAdapter(adapter);
    }

    /**
     * Creates and returns a list adapter for the current list activity
     * @return
     */
    protected ListAdapter createAdapter()
    {
        // return play-lists
        Uri playlist_uri= MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;    
        Cursor cursor= managedQuery(playlist_uri, STAR, null,null,null);
        cursor.moveToFirst();
        for(int r= 0; r<cursor.getCount(); r++, cursor.moveToNext()){
            int i = cursor.getInt(0);
            int l = cursor.getString(1).length();
            if(l>0){
                // keep any playlists with a valid data field, and let me know
                list.add("Keeping : " + cursor.getString(2) + " : id(" + i + ")");
            }else{
                // delete any play-lists with a data length of '0'
                Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, i);
                getContentResolver().delete(uri, null, null);
                list.add("Deleted : " + cursor.getString(2) + " : id(" + i + ")");
            }
        }       
        cursor.close();
        // publish list of retained / deleted playlists
        ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

        return adapter;
    }
}

UPDATE:

Вот ссылка на сообщение в моем блоге о приложении http://roryok.com/blog/index.php/2010/07/23/clearing-out-deleted- плейлисты-в-андроиде /

ОБНОВЛЕНИЕ 2: Вторник, 9 апреля 2013 г.

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

17
ответ дан roryok 20 August 2018 в 19:52
поделиться
  • 1
    удалит ли плейлисты, которые не были удалены, но также не содержит песен? – Vinay Wadhwa 30 July 2013 в 09:16
  • 2
    Привет винай. Нет, он удалит только записи для списков воспроизведения, которые были удалены. Плейлисты с 0 элементами не будут затронуты – roryok 30 July 2013 в 11:40
  • 3
    Благодаря! Хорошее решение – Ajay Venugopal 20 February 2017 в 11:58
  • 4
    как это добавит новые файлы? – Ajay Venugopal 23 February 2017 в 18:13
  • 5
    не работает на pixel2 версии 8.1.0 – passerbywhu 15 June 2018 в 07:39

Вот простое решение на основе одного файла:

Всякий раз, когда вы добавляете файл, пусть MediaStore Content Provider знает об этом с помощью

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAdded)));

. Для удаления: просто используйте getContentResolver (). delete (uri, null, null) (Кредит переходит на DDSports )

43
ответ дан Community 20 August 2018 в 19:52
поделиться
  • 1
    по-видимому, это означает, что в первую очередь исправление проблемы с сиротскими файлами. Мое приложение должно было очистить беспорядок, оставленный другими приложениями, которые НЕ делают этого – roryok 13 February 2013 в 14:24
  • 2
    Я дал это upvote, потому что, хотя он не решает точной проблемы, упомянутой, это очень ценная информация, которая, по моему мнению, имеет значение. – Matt 23 December 2013 в 21:11
  • 3
    Это фактически работает только при добавлении файла. Это не работает, когда файл должен быть удален. Вам нужен getContentResolver (). Delete (uri, null, null); метод для этого. – DDSports 3 March 2014 в 16:47
  • 4
    Уже отмечалось некоторое «повторное создание» пустого файла при уведомлении MediaStore после удаления файла: так, YES, getContentResolver (). Delete (uri, null, null) полезно. благодаря – Pascal 4 March 2014 в 12:41

Вы можете запросить повторное сканирование определенных файлов с помощью следующего кода.

ПРИМЕЧАНИЕ. Переданный MIME TYPE важен. Я заметил, что изменения, внесенные в теги MP3 ID3, не обновились должным образом в SQLite, если я использовал «* / *», однако используя «audio / mp3» [

MediaScannerConnection.scanFile(
    context, 
    new String[]{ pathToFile1, pathToFile2 }, 
    new String[]{ "audio/mp3", "*/*" }, 
    new MediaScannerConnectionClient()
    {
        public void onMediaScannerConnected()
        {
        }
        public void onScanCompleted(String path, Uri uri)
        {
        }
    });
11
ответ дан Michael 20 August 2018 в 19:52
поделиться
  • 1
    Вам действительно не нужно передавать тип mime. Если файл правильно назван (* .mp3, * .m4a и т. Д.), Тогда сканер определит тип mime из расширения. Таким образом, вместо новых типов String [] { mime } просто передайте null. – Baron 20 December 2012 в 19:38
  • 2
    Это помогло мне обнаружить удаление удаленных и перемещенных файлов. Для моего случая я общаюсь по протоколу MTP (Media Transfer Protocol) и не просматриваю файлы снова, они все еще остаются там до перезагрузки и т. Д. – egfconnor 13 November 2014 в 19:36
  • 3
    насколько я знаю, это все равно не повлияет на плейлисты , которые ссылаются на удаленные носители, только ссылки на библиотеки – roryok 10 June 2015 в 08:07
Другие вопросы по тегам:

Похожие вопросы: