Рингтон установлен как беззвучный на андроиде 2.3, но работает на 4.0.3

У меня есть два вопроса:

  1. Когда я звоню на свой saveas(ressound); (вдохновленный Stealthcopter.com) на устройстве Android 4.0.3, мелодия приятно активируется в качестве мелодии звонка, но на устройстве 2.3.3 выбранная мелодия звонка молчит. Где я ошибся в своем коде?

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


ОБНОВИТЬ:

Добавлен код для удаления всей папки и содержимого, работает хорошо и чисто! (Смотри ниже)

Попробуйте вызвать этот код, когда я нажимаю кнопку:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

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


переменные:

String soundname;
int ressound;
int savetype;
String path="/sdcard/mysounds/";

savetype = RingtoneManager.TYPE_RINGTONE;
ressound = R.raw.sound1;
soundname = "sound1";

сохранить как (звук);

//save as
  public boolean saveas(int ressound){
     byte[] buffer=null;
     InputStream fIn = getBaseContext().getResources().openRawResource(ressound);
     int size=0;

     try {
      size = fIn.available();
      buffer = new byte[size];
      fIn.read(buffer);
      fIn.close();
     } catch (IOException e) {
      return false;
     }

     String filename= soundname +".mp3";

     boolean exists = (new File(path)).exists();
     if (!exists){new File(path).mkdirs();}

     FileOutputStream save;
     try {
      save = new FileOutputStream(path+filename);
      save.write(buffer);
      save.flush();
      save.close();
     } catch (FileNotFoundException e) {
      return false;
     } catch (IOException e) {
      return false;
     }    

     sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));

     File k = new File(path, filename);

     ContentValues values = new ContentValues();
     values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
     values.put(MediaStore.MediaColumns.TITLE, soundname);
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
     values.put(MediaStore.Audio.Media.ARTIST, "Elvis");
     values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
     values.put(MediaStore.Audio.Media.IS_ALARM, true);
     values.put(MediaStore.Audio.Media.IS_MUSIC, false);

     //Insert it into the database
     Uri newUri = this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);

     // set as ringtone
     RingtoneManager.setActualDefaultRingtoneUri(this, savetype, newUri);

     return true;
    }

удалять();

public void delete() {
    File a = new File(path, "sound1.mp3");
    a.delete();
    File b = new File(path, "sound2.mp3");
    b.delete();
}

deleteFiles (строковый путь);

public static void deleteFiles(String path) {
    File file = new File(path);

    if (file.exists()) {
        String deleteCmd = "rm -r " + path;
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(deleteCmd);
        } catch (IOException e) { }
    }
}

person John    schedule 11.04.2012    source источник
comment
больше приложений в настоящее время на рынке имеют эту проблему, интересно, можно ли это исправить ???   -  person John    schedule 12.04.2012
comment
может потому что перезаписывает, если файл уже на месте. Не знаю как исправить....   -  person John    schedule 12.04.2012
comment
Я сделал функцию удаления, при которой удаляется вся карта плюс контент. Так что с этим я проверил вышеупомянутые гипотезы, не повезло.   -  person John    schedule 12.04.2012
comment
Или ответ должен быть в направлении uri? Нужно изучить это ..... Сделать хорошую и прочную (и обратимую) деку сложнее, чем я думал.   -  person John    schedule 13.04.2012


Ответы (1)


"android.permission.MODIFY_AUDIO_SETTINGS" Я думаю, что это решает проблему номер один, до сих пор проблем не обнаружено.

deleteFiles (строковый путь); это частичное решение проблемы 2 После перезагрузки пункт пропал.

person John    schedule 19.04.2012