首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer-JNI: QCMediaPlayer mediaplayer不包含RingtoneManager

MediaPlayer-JNI: QCMediaPlayer mediaplayer不包含RingtoneManager
EN

Stack Overflow用户
提问于 2017-08-23 17:26:43
回答 1查看 603关注 0票数 0

我在https://code.tutsplus.com上按照“在安卓上创建铃声随机器”教程构建了一个用于随机铃声的应用程序,但当我运行该应用程序时,我会得到以下错误:

E/ mediaplayer -JNI: QCMediaPlayer mediaplayer不存在

并且铃声没有加载在ListView中。

这是我的代码:

mainactivity.java:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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));
}

}

我知道其他一些人已经解决了这个问题,但是他们在使用MediaPlayer时遇到了错误,所以我不认为他们的答案适用于这里。

你知道怎么回事吗?如有任何建议,我将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-08-25 04:03:47

因此,我通过android MediaPlayer获得了歌曲uri,从而解决了这个问题,我不知道E/ mediaplayer -JNI: QCMediaPlayer mediaplayer不再出现错误了。解决了一个问题,但应用程序仍然不能工作。因此,我的下一个想法是对共享首选项进行更深入的调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45845939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档