onActivityResult 没有 return 成功
onActivityResult doesn't return success
我要求用户评价我的应用并将他们导航到 google playstore。
fun openPlayStore() {
val appPackageName = packageName
try {
startActivityForResult(
Intent(
Intent.ACTION_VIEW,
Uri.parse("market://details?id=$appPackageName")
), OPEN_PLAY_STORE
)
} catch (anfe: ActivityNotFoundException) {
startActivityForResult(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")
), OPEN_PLAY_STORE
)
}
}
然后,检查用户是否成功进入游戏商店
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == OPEN_PLAY_STORE) {
println(" resultCode = > $resultCode")
if (resultCode == RESULT_OK) {
Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show()
}
}
}
在这里,当用户按下取消时,我正在干杯。但是当用户成功导航到 Playstore 时,我没有得到 Toast。
您无法检查用户是否被重定向到 Play 商店。
当您使用 startActivityForResult
启动意图时,下一个 activity 应该在关闭前调用 setResult
。只有这样,您才能从 onActivityResult
.
中的下一个 activity 获取结果
在这种情况下,Play 商店不会设置结果,因此您不会在 onActivityResult
中获得任何结果
这是不可能的,但您可以采取一些解决方法。
// Logic to ask rating when user opened the app 5th time
val sp = this.getSharedPreferences("UserLoginCount", Context.MODE_PRIVATE)
userLoginCount = sp.getInt("count", 1)
userLoginCountPrevious = sp.getInt("count", 0)
var showRatingDialogCount = sp.getInt("nextCount", 5)
if (userLoginCount == showRatingDialogCount) {
openAskForRating()
} else {
sp.edit().putInt("count", ++userLoginCount).commit()
Toast.makeText(this,"$userLoginCount time user logged in",Toast.LENGTH_SHORT).show()
}
- 有两个变量
userLoginCount
和userLoginCountPrevious
- 从共享 pref 的
userLoginCount
中读取然后将它的值保存到 userLoginCountPrevious
- 当用户在此示例中第 5 次登录时,会显示评分对话框。否则增加
userLoginCount
. 的值
- 现在您可以看到
userLoginCount
增加了,但 userLoginCountPrevious
没有增加。
然后,在onActivityResult
if (userLoginCount == userLoginCountPrevious) {
// means he successfully navigated to playstore and came back
dialog.dismiss()
}else{
// means he closed the rating dialog without visiting playstore
}
希望对您有帮助!
我要求用户评价我的应用并将他们导航到 google playstore。
fun openPlayStore() {
val appPackageName = packageName
try {
startActivityForResult(
Intent(
Intent.ACTION_VIEW,
Uri.parse("market://details?id=$appPackageName")
), OPEN_PLAY_STORE
)
} catch (anfe: ActivityNotFoundException) {
startActivityForResult(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")
), OPEN_PLAY_STORE
)
}
}
然后,检查用户是否成功进入游戏商店
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == OPEN_PLAY_STORE) {
println(" resultCode = > $resultCode")
if (resultCode == RESULT_OK) {
Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show()
}
}
}
在这里,当用户按下取消时,我正在干杯。但是当用户成功导航到 Playstore 时,我没有得到 Toast。
您无法检查用户是否被重定向到 Play 商店。
当您使用 startActivityForResult
启动意图时,下一个 activity 应该在关闭前调用 setResult
。只有这样,您才能从 onActivityResult
.
在这种情况下,Play 商店不会设置结果,因此您不会在 onActivityResult
这是不可能的,但您可以采取一些解决方法。
// Logic to ask rating when user opened the app 5th time
val sp = this.getSharedPreferences("UserLoginCount", Context.MODE_PRIVATE)
userLoginCount = sp.getInt("count", 1)
userLoginCountPrevious = sp.getInt("count", 0)
var showRatingDialogCount = sp.getInt("nextCount", 5)
if (userLoginCount == showRatingDialogCount) {
openAskForRating()
} else {
sp.edit().putInt("count", ++userLoginCount).commit()
Toast.makeText(this,"$userLoginCount time user logged in",Toast.LENGTH_SHORT).show()
}
- 有两个变量
userLoginCount
和userLoginCountPrevious
- 从共享 pref 的
userLoginCount
中读取然后将它的值保存到userLoginCountPrevious
- 当用户在此示例中第 5 次登录时,会显示评分对话框。否则增加
userLoginCount
. 的值
- 现在您可以看到
userLoginCount
增加了,但userLoginCountPrevious
没有增加。
然后,在onActivityResult
if (userLoginCount == userLoginCountPrevious) {
// means he successfully navigated to playstore and came back
dialog.dismiss()
}else{
// means he closed the rating dialog without visiting playstore
}
希望对您有帮助!