Android, получите больше логов от реального пользователя - PullRequest
0 голосов
/ 02 ноября 2018

Один из моих пользователей не может успешно создать MediaPlayer. API всегда возвращает ноль.

       ringtone = MediaPlayer.create(GlobalApplication.getInstance(), ringUri, null, new AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
                        .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
                        .build(), 0);

Я уже распечатываю кольцо Uri. Это рингтон по умолчанию, как показано ниже, который должен быть в порядке. Мой пользователь также пробует другую системную мелодию звонка и все еще имеет ту же проблему.

content://settings/system/ringtone

Так что, я думаю, проблема не в «недопустимом аудио-ресурсе», упомянутом Метод создания MediaPlayer возвращает нулевой объект 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;
}
...