или я должен отправить некоторые дополнительные данные в Intent, чтобы знать вызов? Если нет предопределенного метода, например getIntent
и что-то с ним делать?
Как узнать, вызвана ли операция с помощью startActivityForResult или просто вызвана с помощью startActivity?
Ответ 1
Я знаю, что на этот вопрос уже дан ответ, но у меня есть лучшее решение.
Когда ваша активность была запущена только с помощью startActivity()
, метод getCallingActivity()
в целевой активности вернет null
. Когда он был вызван startActivityForResult()
, он вернет имя вызывающей активности.
Подробнее см. getCallingActivity.
Таким образом, вы можете проверить активность перед тем, как завершить операцию вызова. Если результатом является null, то Activity вызывается startActivity()
, и если результат не равен null, то Activity вызывается startActivityForResult()
. Это оно.
пример: -
if (getCallingActivity() == null) {
//This Activity was called by startActivity
} else {
//This Activity was called by startActivityForResult
}
Ответ 2
Я думаю, что вы должны разоблачить несколько намерений для одной и той же активности в вашем манифесте, а затем проверить намерение вызова адаптировать ваше поведение.
Пример фильтра фильтра активности в манифесте:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
и соответствующий код в вашей деятельности onCreate:
if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
// do whatever you need to do here
} else if (getIntent().getAction().equals(Intent.ACTION_PICK)){
...
}
Ответ 3
вы можете поместить флаг как "0" и "1", помещая его в намерение, поэтому, если "0", то его startActivity или "1" для startActivityForResult... это просто, не так ли?