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()
        }
  • 有两个变量userLoginCountuserLoginCountPrevious
  • 从共享 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
}

希望对您有帮助!