NotificationCompat Builder setGroup() 在 android studio 中未定义

NotificationCompat Builder setGroup() undefined in android studio

我检查了问题: setGroup() is undefined for the type NotificationCompat.Builder?

但这并没有帮助。

我有一个从 eclipse 导入的项目。在 运行 我得到错误:

错误:找不到符号 .setGroup("group") ^ 符号:方法 setGroup(String)

在 google 上我发现有人建议更新 android-支持 library.While 导入项目 我使用选项保留项目中的 jar 文件而不将它们转换为 [=69 中的依赖项=] studio.Hence 我假设正在使用项目的 libs 文件夹中的相同支持 jar 文件。相同的代码在 eclipse 上运行良好。在检查时,我发现两个项目的支持 jar 文件完全相同。那么为什么一种方法在项目中未定义但在另一个方法中可见。有没有可能 Android Studio 正在用它自己的 jar 文件替换支持的 jar 文件?

代码:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle(text)
                .setContentText(text)
                .setStyle(inboxStyle)
                .setNumber(stack.size())
                .setSmallIcon(R.drawable.launcher)
                .setGroup("group")
                .setGroupSummary(true);

编辑:

我按照下面的建议更改了依赖项以使用动态支持库而不是 jar。但是仍然看到同样的错误,我的 build.gradle 现在看起来像这样。

 compile project(':facebookSDK')
    compile project(':googleplayservices_lib')
    compile 'com.android.support:support-v13:25.1.0'
    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
  //  compile files('libs/android-support-v13.jar')
    compile files('libs/eat.jar')
    compile files('libs/gcm-server-1.0.2.jar')
    compile files('libs/google-api-client-1.10.3-beta.jar')
    compile files('libs/google-api-client-android2-1.10.3-beta.jar')
    compile files('libs/google-http-client-1.10.3-beta.jar')
    compile files('libs/google-http-client-android2-1.10.3-beta.jar')
    compile files('libs/google-oauth-client-1.10.1-beta.jar')
    compile files('libs/gson-2.1.jar')
    compile files('libs/jackson-core-asl-1.9.4.jar')
    compile files('libs/json-simple-1.1.1.jar')
    compile files('libs/jsr305-1.3.9.jar')
    compile files('libs/mail.jar')

编辑 2:

根据下面的回答,我在 v13 旁边添加了 v4 库,但错误仍然存​​在。还有更多线索吗?我当前的依赖项看起来像

dependencies {
    compile project(':facebookSDK')
    compile project(':googleplayservices_lib')
    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
    compile files('libs/android-support-v13.jar')
    compile 'com.android.support:support-v4:25.1.0'
    compile files('libs/eat.jar')
    compile files('libs/gcm-server-1.0.2.jar')
    compile files('libs/google-api-client-1.10.3-beta.jar')
    compile files('libs/google-api-client-android2-1.10.3-beta.jar')
    compile files('libs/google-http-client-1.10.3-beta.jar')
    compile files('libs/google-http-client-android2-1.10.3-beta.jar')
    compile files('libs/google-oauth-client-1.10.1-beta.jar')
    compile files('libs/gson-2.1.jar')
    compile files('libs/jackson-core-asl-1.9.4.jar')
    compile files('libs/json-simple-1.1.1.jar')
    compile files('libs/jsr305-1.3.9.jar')
    compile files('libs/mail.jar')
}

edit4:

我也试过这个组合,好像没什么用:(

 // compile files('libs/android-support-v13.jar')
    compile 'com.android.support:support-v13:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'

我还注意到一件事,即使我从依赖项中删除 v4,导入 NotificationCompat 时也不会出现编译错误 类。这怎么可能?会不会是它正在从其他模块中获取库的其他副本?

编辑:5

根据我在这里与 Martin 的讨论,我想分享一些对我们所有人都有帮助的见解。根据 Android Studio,它会选择第一个库(或任何库,我不确定) 从任何模块并开始在您的模块中使用它。这在很多层面上都是错误的!我会向你解释如何,请在任何地方纠正我,因为这对我们所有人都有帮助。

  1. 导致许可问题:如此处所示,我在项目中使用供应商库模块(在本例中为 Facebbok SDK),它出于自己的目的使用了一些库(在本例中为 v4 库) ). 现在作为开发人员,我不知道我的供应商库使用第三方库的许可条款是什么。但是我仍然能够在我的模块中使用相同的库,即使我没有在我自己的依赖项中定义它,这违反了许可协议。

  2. 造成混乱:想象一下,我什至不知道我正在使用第三方库中的函数。如我所见,我还没有定义这个库我的 build.gradle。但在内部我可能使用了一个来自随机库的函数。编辑器当然会为该方法静默导入 类,开发人员不会知道它调用了哪个库。 这正是这里发生的事情,因为我不知道这个方法来自 v4 库,因为我没有将它导入我的 build.gradle 文件!

  3. 无法更新到最新版本:这是我在这里遇到的另一个问题。经过下面的讨论,我知道 AS 使用过 facebooks 库,但现在我无法更新库以供我使用。为什么?因为facebook使用了旧库
    在开发的时候。我无法更新 facebook 的库(技术上我可以,但我不应该),并且由于其他一些限制,我不想更新 faceboook sdk。此外,没有理由更新 facbook sdk,因为我当前的所有需求都从这个 sdk 得到满足。

这一切只是因为 AS 认为它比我更清楚我应该在我自己的项目中使用哪个库。

好吧,根据您的编辑,您没有遵循我的完整建议,因此错误现在更加明显:NotificationCompat.Builder 未在支持 v13.app 中实现。*

您需要使用现代支持 v4 版本,或者您可以使用从 v4 扩展的支持 v7,这取决于您当前或未来的需求以及其他库依赖项。但是使用其中之一必须使 setGroup() 对您可用,因为这两个库都提供 NotificationCompat.Bulder 帮助器 class.

https://developer.android.com/reference/android/support/v7/app/NotificationCompat.html

关于精确的版本号,允许您跟进版本(及其各自的更改)的官方文档位于:

https://developer.android.com/topic/libraries/support-library/revisions.html

但根据我的经验,最好定期检查您的 build.gradle 依赖项,因为每次您从 Google 下载和升级 SDK 包时,Android Studio 都会突出显示您的提供要升级的新版本号的旧 Google 依赖项。