2017-08-23 3 views
0

je construit une application pour randomiser mes sonneries suivante « Créer un Randomizer sonnerie sur Android » tutoriel sur https://code.tutsplus.com, mais quand je lance l'application je reçois cette erreur:MediaPlayer-JNI: QCMediaPlayer MediaPlayer Inexistant avec RingtoneManager

E/MediaPlayer-JNI: mediaplayer QCMediaPlayer NON présent

Et les sonneries ne sont pas chargées dans ListView.

Voici mon code:

mainactivity.java:

public class MainActivity extends AppCompatActivity { 
private ListView list; 
private ToggleButton toggle; 
private List<Ringtone> ringtones; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toggle = (ToggleButton) findViewById(R.id.toggleButton); 
    list = (ListView) findViewById(R.id.list_of_ringtones); 

    ringtones = RingtoneHelper.fetchAvailableRingtones(this); 

    initToggle(); 
    initList(); 

} 

public void initToggle(){ 
    final SharedPreferences sharedPreferences = getSharedPreferences("Randomizer", Context.MODE_PRIVATE); 
    boolean active = sharedPreferences.getBoolean("active", false); 
    toggle.setChecked(active); 

    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      sharedPreferences.edit().putBoolean("active", isChecked).apply(); 
     } 
    }); 
} 

public void initList(){ 
    ArrayAdapter<Ringtone> adapter = new ArrayAdapter<Ringtone>(this, android.R.layout.simple_list_item_1){ 
     @NonNull 
     @Override 
     public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
      TextView item = (TextView) super.getView(position, convertView, parent); 
      String title = ringtones.get(position).getTitle(MainActivity.this); 
      item.setText(title); 
      Log.v("MainActivity", title); 
      return item; 
     } 
    }; 
    list.setAdapter(adapter); 
} 

}

ringreceiver.java

public class RingReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)){ 
     String callState = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     if(callState.equals(TelephonyManager.EXTRA_STATE_RINGING)){ 
      RingtoneHelper.changeRingtone(context); 
     } 
    } 
} 

}

ringtonehelper.java

public class RingtoneHelper { 

public static List<Ringtone> fetchAvailableRingtones(Context context){ 
    List<Ringtone> list = new ArrayList<>(); 
    RingtoneManager rm = new RingtoneManager(context); 
    rm.setType(RingtoneManager.TYPE_NOTIFICATION); 

    Cursor ringtones = rm.getCursor(); 
    int count = ringtones.getCount(); 
    for(int i = 0; i <= count; i++){ 
     list.add(rm.getRingtone(i)); 
     Log.v("Ringtone Helper",String.valueOf(count)); 

    } 
    return list; 
} 

public static void changeRingtone(Context context){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences("randomizer", Context.MODE_PRIVATE); 
    if(!sharedPreferences.getBoolean("active", false)){ 
     return; 
    } 
    RingtoneManager rm = new RingtoneManager(context); 
    Random random = new Random(System.currentTimeMillis()); 

    int n = random.nextInt(rm.getCursor().getCount()); 
    RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, rm.getRingtoneUri(n)); 
} 

}

Je sais que d'autres personnes ont abordé cette question, mais ils ont obtenu l'erreur lors de l'utilisation MediaPlayer, donc je ne pense pas que leurs réponses sont correctes ici.

Avez-vous une idée de ce qui ne va pas? J'apprécierais toutes suggestions.

Merci

Répondre

0

Je résolu le problème en obtenant les chansons uri à travers le MediaPlayer Android et je ne suis pas E/MediaPlayer-JNI: QCMediaPlayer MediaPlayer Inexistant erreur plus. Résolu un problème, mais l'application ne fonctionne toujours pas. Donc, mon idée suivante est de déboguer plus profondément dans les préférences partagées.