Почему startActivityForResult () не приводит к выполнению onActivityResult ()?

Вы можете использовать Reflection для этого: (из моей библиотеки - это получает имена и значения)

public static Dictionary DictionaryFromType(object atype)
{
    if (atype == null) return new Dictionary();
    Type t = atype.GetType();
    PropertyInfo[] props = t.GetProperties();
    Dictionary dict = new Dictionary();
    foreach (PropertyInfo prp in props)
    {
        object value = prp.GetValue(atype, new object[]{});
        dict.Add(prp.Name, value);
    }
    return dict;
}

Эта вещь не будет работать для свойств с индексом - для этого (она становится громоздкой ):

public static Dictionary DictionaryFromType(object atype, 
     Dictionary indexers)
{
    /* replace GetValue() call above with: */
    object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}

Кроме того, чтобы получить только общедоступные свойства: ( см. MSDN в BindingFlags enum )

/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)

Это работает с анонимными типами, слишком! Чтобы просто получить имена:

public static string[] PropertiesFromType(object atype)
{
    if (atype == null) return new string[] {};
    Type t = atype.GetType();
    PropertyInfo[] props = t.GetProperties();
    List propNames = new List();
    foreach (PropertyInfo prp in props)
    {
        propNames.Add(prp.Name);
    }
    return propNames.ToArray();
}

И это примерно то же самое только для значений, или вы можете использовать:

GetDictionaryFromType().Keys
// or
GetDictionaryFromType().Values

Но это немного медленнее, я бы представьте себе.

0
задан E-Newman 23 February 2019 в 14:42
поделиться

2 ответа

Ваш onActivityResult делает что-то, только когда код результата в порядке, попробуйте это:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK) {
        mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
        screenRecorder.setMediaProject(mediaProjection);
    } else { 
      //TODO: Do something 
        Toast.makeText(getBaseContext(), "Result code is not RESULT_OK, ", Toast.LENGTH_LONG).show();
}
0
ответ дан isaaaaame 23 February 2019 в 14:42
поделиться

Было очень простое решение. Я только что инициализировал сервис записи, который поместил ноль в mediaRecorder mediaRecorder, так что после этого я не смог его повторно инициализировать. Устранение этого произошло с помощью намерения, вызвавшего onActivivtyResult (), в onCreate () действия перед запуском службы.

0
ответ дан E-Newman 23 February 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: