从联系人选择 activity 返回时,应用程序无一例外地关闭
When returning from contacts pick activity, the app closes without exception
在我的 Android 应用程序中,当我从联系人 activity 中选择一个联系人时,应用程序会关闭,而不是 return 转到调用它的 activity没有任何异常或错误消息。
我尝试用不同的标志启动此 activity,但没有结果
class AddPhoneCompatActivity : BaseCompatActivity(), AddPhoneContract.View, View.OnClickListener {
@Inject
lateinit var presenter: AddPhonePresenter
override fun init(savedInstanceState: Bundle?) {
log("Add phone screen - Loading view", LOGS_SIMPLE_FILE_NAME)
setContentView(R.layout.activity_add_phone)
MyLocationNotifierApp.getInjector().inject(this)
presenter.attach(this)
GeneralUtil.checkPermission(
Manifest.permission.READ_CONTACTS,
GeneralUtil.READ_CONTACTS_REQUEST_CODE,
applicationContext,
this
)
presenter.checkIntent(intent)
btnAddPhoneFromContacts.setOnClickListener(this)
btnPhoneNext.setOnClickListener(this)
}
override fun onBackPressed() {
goBack()
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when(item?.itemId) {
android.R.id.home -> {
goBack()
}
}
return true
}
private fun goBack() {
intent.setClass(this, AddLabelCompatActivity::class.java)
intent.putExtra(GeneralUtil.PHONE_SERIALIZATION_KEY, edAddPhoneNum.text.toString())
startActivity(intent)
finish()
}
override fun onClick(v: View?) {
when (v?.id) {
btnAddPhoneFromContacts.id -> {
log("Starting contacts picker", LOGS_SIMPLE_FILE_NAME)
val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
intent.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE;
startActivityForResult(intent, GeneralUtil.REQUEST_CODE_SEARCH_CONTACT)
}
btnPhoneNext.id -> {
presenter.proceedNext(edAddPhoneNum.text.toString(), intent)
}
}
}
override fun updatePhoneEditField(phoneNum: String?) = edAddPhoneNum.setText(phoneNum)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
log("Add phone screen - onActivityResult called. Checking passed data.", LOGS_SIMPLE_FILE_NAME)
if (requestCode == GeneralUtil.REQUEST_CODE_SEARCH_CONTACT) {
if (resultCode == Activity.RESULT_OK) {
presenter.processAddPhoneRequestFomIntent(data)
}
}
}
}
假设在选择一个联系人后,我 return 到 activity 并显示一个对话框,其中列出了与联系人对应的 phone 个号码。但是,应用程序会在没有任何通知的情况下关闭。
找到原因了。实体创建流程不使用 startActivityForResult,而是使用活动之间传递的数据片段。我在 activity 开始时使用标志 Intent.FLAG_ACTIVITY_CLEAR_TOP 或 Intent.FLAG_ACTIVITY_NO_HISTORY 开始了这个流程。当我在开始流程中删除此行时 activity,它开始按预期工作。
在我的 Android 应用程序中,当我从联系人 activity 中选择一个联系人时,应用程序会关闭,而不是 return 转到调用它的 activity没有任何异常或错误消息。
我尝试用不同的标志启动此 activity,但没有结果
class AddPhoneCompatActivity : BaseCompatActivity(), AddPhoneContract.View, View.OnClickListener {
@Inject
lateinit var presenter: AddPhonePresenter
override fun init(savedInstanceState: Bundle?) {
log("Add phone screen - Loading view", LOGS_SIMPLE_FILE_NAME)
setContentView(R.layout.activity_add_phone)
MyLocationNotifierApp.getInjector().inject(this)
presenter.attach(this)
GeneralUtil.checkPermission(
Manifest.permission.READ_CONTACTS,
GeneralUtil.READ_CONTACTS_REQUEST_CODE,
applicationContext,
this
)
presenter.checkIntent(intent)
btnAddPhoneFromContacts.setOnClickListener(this)
btnPhoneNext.setOnClickListener(this)
}
override fun onBackPressed() {
goBack()
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when(item?.itemId) {
android.R.id.home -> {
goBack()
}
}
return true
}
private fun goBack() {
intent.setClass(this, AddLabelCompatActivity::class.java)
intent.putExtra(GeneralUtil.PHONE_SERIALIZATION_KEY, edAddPhoneNum.text.toString())
startActivity(intent)
finish()
}
override fun onClick(v: View?) {
when (v?.id) {
btnAddPhoneFromContacts.id -> {
log("Starting contacts picker", LOGS_SIMPLE_FILE_NAME)
val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
intent.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE;
startActivityForResult(intent, GeneralUtil.REQUEST_CODE_SEARCH_CONTACT)
}
btnPhoneNext.id -> {
presenter.proceedNext(edAddPhoneNum.text.toString(), intent)
}
}
}
override fun updatePhoneEditField(phoneNum: String?) = edAddPhoneNum.setText(phoneNum)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
log("Add phone screen - onActivityResult called. Checking passed data.", LOGS_SIMPLE_FILE_NAME)
if (requestCode == GeneralUtil.REQUEST_CODE_SEARCH_CONTACT) {
if (resultCode == Activity.RESULT_OK) {
presenter.processAddPhoneRequestFomIntent(data)
}
}
}
}
假设在选择一个联系人后,我 return 到 activity 并显示一个对话框,其中列出了与联系人对应的 phone 个号码。但是,应用程序会在没有任何通知的情况下关闭。
找到原因了。实体创建流程不使用 startActivityForResult,而是使用活动之间传递的数据片段。我在 activity 开始时使用标志 Intent.FLAG_ACTIVITY_CLEAR_TOP 或 Intent.FLAG_ACTIVITY_NO_HISTORY 开始了这个流程。当我在开始流程中删除此行时 activity,它开始按预期工作。