0

重複の可能性:
着信音を設定する前にMediastoreをクリアする方法

私のAndroidアプリには、さまざまなサウンドクリップの約130のmp3のセットがあります。それらはリストビューにリストされており、ユーザーがそのうちの1つを長押しすると、デフォルトの着信音または通知として設定するオプションが表示されます. ほとんどの場合、私はこれを着メロとして機能させましたが、一貫性がありません。

たとえば、最初はデフォルトの着信音を設定できますが、次に別のクリップをデフォルトの着信音として設定しようとして、着信音リストに移動すると、[サイレント] が選択されます。また、テスト中にアプリが着信音リストに対応するファイルのない 3 ~ 4 個のオプションを作成したことに気付きました。これらを削除する方法がわかりません。

私は経験豊富な Android 開発者ではないので、ここで何が間違っているのかよくわかりません。これは、resourceid が渡された setRingtone() のコードです。

public void playSound(int input){
    byte[] buffer=null;
    InputStream fIn = getBaseContext().getResources().openRawResource(input);
    int size=0;

    try {
        size = fIn.available();
        buffer = new byte[size];
        fIn.read(buffer);
        fIn.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }

    String path="/sdcard/sounds/";
    String filename="my_ringtone"+".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) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }

    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, "MyRingtone");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
    values.put(MediaStore.Audio.Media.IS_ALARM, false);
    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);
    RingtoneManager.setActualDefaultRingtoneUri(
    this,
    RingtoneManager.TYPE_RINGTONE,
    newUri
    );
}
4

1 に答える 1

0

ほとんどの場合、getBaseContextが問題です。基本コンテキストは、他のことが起こると変化します。アプリのコンテキストが必要です。

于 2012-02-19T22:45:50.127 に答える