小编abh*_*ank的帖子

如何从Google Play获取用户下载的应用列表(付费/免费)?

我最近遇到了这个应用程序购买应用程序,它以某种方式能够检索我在使用我的谷歌帐户登录后在谷歌播放中支付的应用程序.

我正试图找出它是如何完成的,因为我想构建一个类似的应用程序,但对于下载的免费应用程序.

但是,即使经过整个API列表,我也无法找到用于检索该信息的OAuth API Scope .

谷歌登录要求访问androidmarket


编辑:我正在对这个问题提出新的赏金,正如我在这里提出的一个类似的问题所提出的那样,因为在这里和那里我没有看到关于如何做到的真正答案,以及可以做些什么用它.

我想将问题细化为多个部分:

  1. 什么是可用于获取已购买应用程序信息的API?我在哪里可以阅读它?请展示如何操作的完整实用示例.

  2. 可以做得更多吗?也许执行搜索?也许显示已安装的免费应用程序?也许是他们安装和卸载的时间?那些应用程序的类别?

  3. 使用此API有什么特殊要求吗?


编辑:我正在为此付出最大的赏金,因为无论我阅读和尝试了多少,我仍然无法制作可以从用户下载的Play商店查询应用程序的POC(名称,包装)名称,安装和/或删除日期,图标URL,价格...),包括付费和免费应用程序.

如果有人找到了工作样本,请展示它是如何完成的,并展示您是如何找到它的(文档或任何导致您获得解决方案的内容).我无法在任何地方找到它,而这里目前的解决方案对我来说太模糊了.

android google-play google-oauth google-signin

118
推荐指数
2
解决办法
3791
查看次数

既然 kotlin-android-extensions 已被弃用,如何使用 @Parcelize?

如何使用不是来自 kotlin-android-extensions 插件的 Parcelize替换annotation class Parcelizefrom package kotlinx.android.parcel

android annotations parcelable kotlin

61
推荐指数
4
解决办法
3万
查看次数

如何使用Dagger 2.0覆盖单元测试中的模块/依赖项?

我有一个简单的Android活动,只有一个依赖项.我将依赖注入到活动中,onCreate如下所示:

Dagger_HelloComponent.builder()
    .helloModule(new HelloModule(this))
    .build()
    .initialize(this);
Run Code Online (Sandbox Code Playgroud)

在我的ActivityUnitTestCase我要重写一个模拟的Mockito的依赖.我假设我需要使用提供模拟的特定于测试的模块,但我无法弄清楚如何将此模块添加到对象图中.

在Dagger 1.x中,这显然是用这样的东西完成的:

@Before
public void setUp() {
  ObjectGraph.create(new TestModule()).inject(this);
}
Run Code Online (Sandbox Code Playgroud)

什么是Dagger 2.0相当于以上?

您可以在GitHub上看到我的项目及其单元测试.

android dagger dagger-2

56
推荐指数
3
解决办法
2万
查看次数

如何在Android中用XML创建"矩形内部透明圆"形状?

我正在尝试在我的应用中创建以下设计.

设计样机
(https://photos.google.com/share/AF1QipPhCGTgf9zi7MetWJYm0NQ14c3wqzjqnEwxsajCFHEjqzt5R29qYvIjZ2C71q7EnQ?key=WUZKSXA1WVVwSlI2LVdTQy1IRjdUdzVuQlpCY0Rn)

它是主UI上面的叠加层.尝试使用主UI顶部的布局创建它,其背景为以XML创建的半透明形状.然而,即使阅读了多篇文章,我也无法弄明白.

我尝试了以下方法,但它没有用.创建一个200dp笔划的环形,并将其设置为imageview的源,然后将scaletype设置为centerCrop,但形状不像位图那样缩放.

形状XML:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="2"
    android:useLevel="false" >

    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="200dp"
        android:color="#80000000" />
</shape>
Run Code Online (Sandbox Code Playgroud)

叠加布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/onboarding_background"
        android:scaleType="centerCrop"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

有关如何执行此操作或代码的任何指示都非常有用.

android porter-duff

11
推荐指数
1
解决办法
8212
查看次数

如何查明应用内购买的促销代码是否已兑换?

我已经从 Google Play 管理中心的促销部分生成了 100 个用于应用内购买的代码,并开始与一些新用户共享。

然而,Play 管理中心仅提到 100 个促销代码中有 10 个已被兑换,但没有透露这 10 个促销代码是哪 10 个。我想知道,以便我可以跟进那些尚未兑换的用户。

当我通过计费库获取活动购买的商品时,我什至查看了应用程序内收到的购买数据。这是它包含的以下数据 -

{"packageName":"com.app","productId":"product_sku","purchaseTime":1579983348800,"purchaseState":0,"purchaseToken":"1234___abcd"}
Run Code Online (Sandbox Code Playgroud)

这里也没有促销代码。

那么,如何查明特定促销代码是否已兑换?

android promotions google-play google-play-console

7
推荐指数
1
解决办法
1191
查看次数

即使另一个活动在顶部,为什么带有 launchMode="singleTask" 的启动器活动总是被推到后台堆栈的顶部?

由于某些要求,我的启动器活动的 launchMode 属性设置为 singleTask。

<activity
    android:name=".map.MapsActivity"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@style/MapScreenTheme"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,如果我打开另一个活动 -> 按主页 -> 单击启动器应用程序中的应用程序图标 -> 它会打开 MapActivity 而不是之前打开的活动。

但是,如果我通过最近菜单导航到该应用程序,则不会发生这种情况。然后新打开的活动保持在顶部。

有人可以解释一下这里发生的关于 backstack 的事情,为什么 ActivityManagerService 没有考虑到应用程序进程已经存在,但决定启动启动器应用程序并清除 backstack 而不是简单地将应用程序向前推进?

可以在此处创建的一个小示例应用程序中观察到此问题 - https://github.com/abhiank/SingleTaskActivity

android launchmode android-launcher activity-manager

5
推荐指数
1
解决办法
1317
查看次数

如何确定应用程序是否已与 Google Drive 断开连接?

我正在构建一个应用程序,我将应用程序数据存储在 Google Drive 上的应用程序特定文件夹中。我已经能够设置与文件存储和检索相关的所有内容。我面临的问题是关于权限。用户可以选择从 Google Drive 设置面板断开应用程序。

我使用DriveScopes.DRIVE_APPDATA含义https://www.googleapis.com/auth/drive.appdata范围来保存数据。

在此处输入图片说明

我试图弄清楚如何找出这是否发生在应用程序端。如果我尝试继续使用与驱动器相关的 api,应用程序被断开连接,那么它会崩溃并显示UserRecoverableAuthException.

com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException
    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:297)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:476)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:409)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:526)
    at abhiank.maplocs.ui.drivesync.DriveSyncService.onHandleIntent(DriveSyncService.kt:68)
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:78)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.os.HandlerThread.run(HandlerThread.java:67)
 Caused by: com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission
    at com.google.android.gms.auth.zze.zzb(Unknown Source:13)
    at com.google.android.gms.auth.zzd.zza(Unknown Source:77)
    at com.google.android.gms.auth.zzd.zzb(Unknown Source:20)
    at com.google.android.gms.auth.zzd.getToken(Unknown Source:7)
    at com.google.android.gms.auth.zzd.getToken(Unknown Source:5)
    at com.google.android.gms.auth.zzd.getToken(Unknown Source:2)
    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source:55)
    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:267)
    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:292)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来确定应用程序是否没有权限或范围。

  1. 查看GoogleSignInAccountGoogleSignIn.getLastSignedInAccount(this). account.grantedScopes()在应用程序断开连接后,它具有以下可用范围。drive.appdata即使应用程序已断开连接也会显示。
[https://www.googleapis.com/auth/drive.appdata, https://www.googleapis.com/auth/userinfo.profile, https://www.googleapis.com/auth/userinfo.email, openid, …
Run Code Online (Sandbox Code Playgroud)

android scopes google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
158
查看次数

如何使用 adb 命令将 Profile GPU 渲染显示为条形图?

我正在尝试使用脚本自动执行我在定期开发时所做的一些任务。其中之一是打开和关闭 GPU 配置文件渲染。但是,我找不到显示/隐藏它的 adb 命令。

android adb dumpsys

1
推荐指数
1
解决办法
1948
查看次数

如何在 Kotlin 中的所有数字之间插入空格?

我想像这样转换一个字符串

Turn right on A2309
Run Code Online (Sandbox Code Playgroud)

Turn right on A2 3 0 9
Run Code Online (Sandbox Code Playgroud)

使用 kotlin 谓词执行此操作的最简单方法是什么?

string kotlin

1
推荐指数
1
解决办法
1954
查看次数