Autore Topic: Settare suono come suoneria default  (Letto 1009 volte)

Offline sergioandroid

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Settare suono come suoneria default
« il: 24 Luglio 2011, 20:06:06 CEST »
0
da poco ho cominciato a sperimentare sulla gestione dei media.. in maniera molto spartana, sono riuscito a salvare su sd una risorsa audio da raw.

il problema si pone quando tento di settare questa stessa risorsa come suoneria predefinita. Non capisco prorpio quale sia l'errore e perchè l'applicazione vada in crash.
Posto il mio codice, nella speranza che qualcuno mi illumini

Codice (Java): [Seleziona]
 bplay.setOnLongClickListener(new View.OnLongClickListener() {
                ///qui si lavora per salvare il file su SD su click lungo      
                        @Override
                        public boolean onLongClick(View v) {
                               
                       
         //File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);//metodo possibile solo con android 2.2              
                    String path="mnt/sdcard/Ringtones";
                    File file = new File(path, "SuonoTestsound " + whatsong + ".mp3"); //file di output
                        try{                                   
                                switch(whatsong){
                                case 1:         //se whatsong è 1...                          
                                                songR = R.raw.song1;
                                                break;                                         
                    case 2:                     //se whatsong è 2...                  
                                                songR = R.raw.song2;
                                                break;
                    case 3:                                    
                                songR = R.raw.song3;
                                break;               
                                        }      
                                           
                                        InputStream is = getResources().openRawResource(songR);//in alternativa R.raw.nomesuono
                                        OutputStream os = new FileOutputStream(file);
                                       
                                        byte [] data = new byte[is.available()];
                                       
                                        is.read(data);
                                        os.write(data);
                                        is.close();
                                        os.close();                                            
                                       
                                        ////// values....                      
                                       
                                           ContentValues values = new ContentValues();
                                           values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
                                           values.put(MediaStore.MediaColumns.TITLE, "my ringtone");
                                           values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
                                           values.put(MediaStore.MediaColumns.SIZE, file.length());
                                           values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
                                           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);
                                       
                                        /////                          
                                          Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());                                       
                                          Uri newUri = getBaseContext().getContentResolver().insert(uri, values);
                                               
                                 RingtoneManager.setActualDefaultRingtoneUri(getBaseContext(), RingtoneManager.TYPE_RINGTONE, newUri);         
                                                                               
                                       
                                       
                                        Toast saved = Toast.makeText(testsounds.this, "SAVED IN SD!", Toast.LENGTH_SHORT);
                                        saved.show();
                                 
                               

                                }catch (IOException e){
                                       
                                        Toast fail = Toast.makeText(testsounds.this, "FAIL!NOT SAVED!", Toast.LENGTH_SHORT);
                                        fail.show();                                   
                                }      
                                return false;
                        }
                       
                }
       
        );

il problema è prorpio la linea :
 RingtoneManager.setActualDefaultRingtoneUri(getBaseContext(), RingtoneManager.TYPE_RINGTONE, newUri);   

cosa sbaglio?   
grazie in anticipo.. per molti sarà una stupidaggine, ma per me è davvero importante
Sergio

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Settare suono come suoneria default
« Risposta #1 il: 25 Luglio 2011, 09:46:23 CEST »
+1
ti chiederei di postare il logcat, ma visto che nel catch dell'exception metti un toast inutile (inutile nel senso che non visualizza il motivo dell'errore), sarebbe inutile, quindi fai 2 cose:

1) il catch utilizzalo come si deve, stampando l'intero stacktrace
2) posta il logcat con il relativo errore
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline sergioandroid

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:Settare suono come suoneria default
« Risposta #2 il: 25 Luglio 2011, 14:29:09 CEST »
0
grazie mille per la risposta:)

posterei il logcat ma:

-il problema è che il crash non lo fa su emulatore virtuale (su emulatore si limita a NON salvare in SD, eseguendo il toast "fail", e tutto questo nonostante abbia fornito il virtual device del supporto SD). Quindi il logcat non riporta errore.

-il crash avviene sul dispositivo reale, ma che chiaramente devo usare staccato da usb (per usufruire della sd appunto), quindi non posso effettuare il logcat e monitorare l'errore.

come potrei risolvere e capire il problema?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Settare suono come suoneria default
« Risposta #3 il: 25 Luglio 2011, 14:39:02 CEST »
+1
Usa aLogcat, puoi scaricarlo dal market.

Offline sergioandroid

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:Settare suono come suoneria default
« Risposta #4 il: 25 Luglio 2011, 15:52:18 CEST »
0
grazie a voi, problema risolto.
la risposta era appunto nel logcat:
Codice (Java): [Seleziona]
E/DatabaseUtils(   96): java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=9801, uid=10065 requires android.permission.WRITE_SETTINGS
aggiunto dunque nel manifest:  <uses-permission android:name="android.permission.WRITE_SETTINGS" />

grazie per la dritta, aLogcat è stato indispensabile.