Google Play应用的深层链接会显示Google Play首页

时间:2018-05-13 07:12:03

标签: android google-play

我复制了这个热门问题的源代码,了解如何制作“Rate This App”-link in Google Play store app on the phone

在带有模拟器的Android Studio(版本3.1.2)上,这非常有效。但是,在我的三星Galaxy A5(2017)(Android 8.0)设备上,该链接始终会打开Goog​​le Play应用,但会向我显示开始页面而不是应用页面。

我想知道为什么他们的行为不同,我能做些什么才能让它在我的设备上运行。我想知道我的设备上是否有某些设置阻止了深层链接?

我的代码:

Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);       
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
  startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
  startActivity(new Intent(Intent.ACTION_VIEW,
      Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
}

3 个答案:

答案 0 :(得分:2)

我100%确定问题出在手机中,而不是代码中。

我的手机没有这个问题,我可以通过更改Google Play服务附带的一个SQLite数据库来重现它。下面我将介绍手机上的操作方式,以及手机中如何修复问题。

如何使用没有它的手机重现该错误

首先,我确保在我手机的开发者设置中将您的根访问设置设置为“仅限ADB”或“ADB和应用”。然后我运行adb rootadb shell以使用命令行

访问设备

进入内部后,我运行su成为root用户。

然后我去了目录/data/data/com.google.android.gsf/databases,那里有数据库gservices.db,我想改变它。

为了读取和写入数据库,我运行了sqlite3 gservices.db,这个数据库有一个名为overrides的表。为了查看该表的内容,我运行了命令SELECT * FROM overrides;,注意不要忘记最后的分号。

在我的情况下,桌子是完全空的,但我敢打赌,在你的手机中有一些东西,因为为了重现手机上的错误我运行了这个命令(再次记住分号):

INSERT INTO overrides VALUES ("finsky.launch_urls_enabled", "false");

要退出sqlite3,我输入了.exit,然后重新启动了手机。

<强>结果

重新启动后,我尝试了您的代码,瞧,它是Google Play的主页,而不是应用页面。我甚至去了Amaze File Manager的用户设置,您可以从中设置应用程序的评分,结果是相同的,它会转到主页。

如何删除您的错误(投机)

您可以尝试按照上述步骤操作,将INSERT SQLite语句替换为以下步骤:

UPDATE overrides SET value="false" WHERE name="finsky.launch_urls_enabled"

答案 1 :(得分:0)

显然,getPackageName()没有返回您需要的值。您从中得到什么上下文取决于您的代码在哪里运行。

如果不知道上下文是什么,我建议改用:

getApplicationContext().getPackageName()

答案 2 :(得分:-1)

试试这个

  Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    // To count with Play market backstack, After pressing back button, 
    // to taken back to our application, we need to add following flags to intent. 
    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    try {
        startActivity(goToMarket);
    } catch (ActivityNotFoundException e) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName())));
    }