我的用户之一无法成功创建MediaPlayer。 API始终返回null。
ringtone = MediaPlayer.create(GlobalApplication.getInstance(), ringUri, null, new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
.build(), 0);
我已经打印出ringUri。这是默认的手机铃声,如下所示。我的用户还尝试了其他系统铃声,但仍然遇到相同的问题。
content://settings/system/ringtone
所以我想问题不是MediaPlayer create method return null object Android提到的“无效的音频资源”。
当我进入MediaPlayer.create()时,我注意到此函数打印出有关创建失败原因的日志。但是,它不会将那些错误排除在外。因此,我无法在日志系统中记录问题所在。在我的日志系统中,我的用户可以将我的日志(而非logcat)报告到我的云中,以便我检查问题。
在这种情况下,如何进行更深入的调试?有没有一种方法可以让我从真实用户那里获取logcat,而无需他做很多事情?还是我的程序可以捕获Log.d Log.e的输出,以便我可以选择一些有用的日志并将其放入我的日志系统中?
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder,
AudioAttributes audioAttributes, int audioSessionId) {
try {
MediaPlayer mp = new MediaPlayer();
final AudioAttributes aa = audioAttributes != null ? audioAttributes :
new AudioAttributes.Builder().build();
mp.setAudioAttributes(aa);
mp.setAudioSessionId(audioSessionId);
mp.setDataSource(context, uri);
if (holder != null) {
mp.setDisplay(holder);
}
mp.prepare();
return mp;
} catch (IOException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (IllegalArgumentException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (SecurityException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
}
return null;
}