小编ant*_*nyt的帖子

ViewPager作为循环队列/包装

我使用的是ViewPagerFragmentStatePagerAdapter让一些片段之间的导航.

比方说,我有三个片段:A,BC.ViewPager最初显示片段A,并允许您通过从右向左滑动,然后再次滑动到片段C来导航到片段B. 这允许以下导航路径:A <--> B <--> C.

我想要的是能够在片段A上从左向右滑动并让ViewPager显示片段C,即它表现为循环队列并允许 ... --> C <--> A <--> B <--> C <--> A <-- ...

我不希望片段在其他位置重复(即最终有三个以上的实例).

使用ViewPager可以实现这种包装功能吗?

android android-fragments android-viewpager

64
推荐指数
6
解决办法
5万
查看次数

从Android应用安装程序和主屏幕启动应用程序时的活动堆栈排序问题

仅出于测试目的,我允许通过URL下载和安装我的应用APK.下载到手机上后,可以使用Android应用安装程序启动它,用户可以选择将其安装到自己的设备上然后再运行.

考虑我们是否以上述方式下载并运行应用程序.我的应用中的主/启动器活动是登录页面(Activity A).一旦用户被认证,他们就被带到应用程序的主要区域,例如Activity B.所以现在这个任务的当前活动堆栈是A > B.

然后我按下手机上的主页按钮,然后进入Android主屏幕.我通过菜单中的图标重新启动我的应用程序,我被带到了Activity A,而不是Activity B.活动堆栈现在是A > B > A,或者现在有两个单独的任务与活动堆栈A > B,A分别.我想要的是Activity B在我重新启动应用程序时被收回.在这种状态下按回来将带我回去Activity B.

如果我首先通过安装程序打开应用程序,而不是通过主屏幕/菜单打开应用程序,则只会发生这种不良行为.

我研究了各机制如何开展活动.当我们使用app安装程序时,我们会看到以下日志:

INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)

通过发射器/主屏幕:

INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)

当使用安装程序启动时,我们看到它正在使用标志0x10000000,但是当启动器启动时,我们看到它正在使用0x10200000.它也使用意图类别.

从 …

flags android task android-intent android-activity

50
推荐指数
2
解决办法
1万
查看次数

使用Gradle的外部Android库项目

我正在尝试使用Gradle和Android Gradle插件构建一个Android项目.我想依赖于在外部(maven)存储库中找到的库项目,例如ActionBarSherlock.

根据官方网站,这似乎是可能的:

使用库可以通过以下方式之一完成:

多项目设置.请阅读此处:http://www.gradle.org/docs/current/userguide/multi_project_builds.html

通过诸如maven或常春藤等仓库的依赖关系.

build.gradle的当前内容:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.2'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.actionbarsherlock:library:4.2.0'
}

android {
    target = 'android-16'
    sourceSets {
        main {
            manifest {
                srcFile 'AndroidManifest.xml'
            }
            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
            }
            assets {
                srcDir 'assets'
            }
            resources {
                srcDir 'src'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Gradle 1.2.当我尝试使用时gradle assemble,我收到以下错误: …

android build gradle maven

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

将Espresso与Proguard和Gradle集成

我正在使用的应用程序正在使用Gradle构建.我正在尝试添加Espresso作为仪器测试的依赖项.应用程序本身有一些依赖项,其中一个是Guava 15.0.为了使这个工作,我使用具有显式依赖关系的Espresso版本,并排除捆绑的Guava(使用我自己的).

dependencies {
   ...
   instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar')
   compile 'com.google.guava:guava:15.0' 
   ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建时gradle connectedInstrumentTest,我得到与缺少方法和类相关的错误.

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35)
Run Code Online (Sandbox Code Playgroud)

添加-keep class com.google.common.** { *; }到我的Proguard配置使一切正常.似乎正在发生的事情是,Proguard只分析主应用程序使用的类,而不是寻找仪器测试依赖项的使用.我的主应用程序未使用但仪器测试所需的方法/类似乎已经过优化.

如何让Proguard保留Espresso及其依赖项所需的Guava类/方法?手动指定它们(有很多用法)似乎不切实际,并且保持所有这些都违背了Proguard的目的.

dependencies android gradle guava android-espresso

13
推荐指数
2
解决办法
2652
查看次数

在Google Play应用内结算中消费已取消购买

我正在开发一个应用程序,该应用程序使用Google Play应用程序内结算V3来销售有效期为一段时间的项目.用户进行购买后,我会将购买数据发送到我们的服务器并立即使用,如果成功的话.然后,服务器授予对该特定用户的额外服务的访问权限,直到该期间结束.注意:我没有使用应用内订阅.

我正在测试沙盘模式下测试用户的购买情况,不会付款.他们中的大多数是成功的,这种流程很好.但是,有时,我的购买会立即被Google取消.在我的Google Checkout帐户的订单历史记录中,我看到以下行:

"为了您的保护,Google取消了此订单.该交易被视为欺诈."

即使发生这种情况,我也会看到我收到了"purchaseState": 0购买数据,表明成功.此外,尝试使用此产品也会导致成功(调用IInAppBillingService.consumePurchase(version, package, token)返回0).稍后查询我的库存表明我没有购买(因此没有退款/取消),我可以再次自由购买相同的商品.这与正常的,未解除状态的行为相同.

  1. Google是否经常在测试沙箱之外以相同的方式取消订单?
  2. 由于开发商无法控制的原因,成功购买和消费的商品是否仍可取消(即退款)?
  3. 是否可以了解已经消费的产品的取消?

android in-app-billing google-play google-play-services

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