我复制了这个热门问题的源代码,了解如何制作“Rate This App”-link in Google Play store app on the phone 。
在带有模拟器的Android Studio(版本3.1.2)上,这非常有效。但是,在我的三星Galaxy A5(2017)(Android 8.0)设备上,该链接始终会打开Google 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())));
}
答案 0 :(得分:2)
我100%确定问题出在手机中,而不是代码中。
我的手机没有这个问题,我可以通过更改Google Play服务附带的一个SQLite数据库来重现它。下面我将介绍手机上的操作方式,以及手机中如何修复问题。
如何使用没有它的手机重现该错误
首先,我确保在我手机的开发者设置中将您的根访问设置设置为“仅限ADB”或“ADB和应用”。然后我运行adb root
和adb 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())));
}