当前位置: 首页 > 知识库问答 >
问题:

片段兼容性onActivityResult()不工作

谭仰岳
2023-03-14

我一直在为android开发一个应用程序,它利用了android可比性库(android-support-v4)。在SDK 20之前,我能够在清单中使用以下< code>uses-sdk条目编译我的应用程序。

<uses-sdk android:minSdkVersion="7" />  

我的所有为结果启动活动的片段都正确地收到了结果。

有一天(在我更新到SDK 20之前),我在修复lint问题,并根据lint标志的请求将< code > Android:targetSdkVersion 添加到清单中,我很快意识到我的片段都没有接收到它们的onActivityResilt()调用。

现在,自从我更新到SDK 20.0.1以来,我被迫在我的清单中使用botuse-sdk条目中的android:targetSdkVersion;否则,永远不会生成 R.java。

这是我当前的< code>uses-sdk清单条目

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />

目前由于这个奇怪的错误,我的应用程序仍然是坏的。我已经尝试将我的兼容库升级到最新版本r9。

我还仔细检查了片段中的所有start ActivityForResult()调用。他们都通过片段的方法使用正确的调用。

 this.startActivityForResult(intent, requestCode);

不是的

 this.getActivity().startActivityForResult(intent, requestCode);

我当前的开发环境:

Android SDK 20.0.1
Android SDK Platform Tools 13
ADT 20.0.2

任何帮助都将不胜感激,因为这个错误目前是阻止我最终beta测试的砖墙。

编辑

这是我的蚂蚁调试输出

$ ant调试构建文件:/home/Ricky/Development/workspace/location _ ringer/location ringer/build . XML

-设置-模式-检查:

-设置-调试-文件:

AndroidSDK工具修订版20.0.1[check env]安装在 /app/android-sdk-linux_86

-set:[echo]项目名称:Listactive[gettype]项目类型:应用程序

-set-debug-模式:

-调试-混淆-检查:

-构建设置:[echo]正在解析ListActivity的构建目标…[gettarget]项目目标:Google API[gettarget]供应商:Google Inc[gettarget]平台版本:4.1[getTargets]API级别:
16[echo]------[echo]在需要时创建输出目录…[echo]------[回声]正在解析List Activity的依赖项…[dependency]库依赖项:[依赖项][依赖项]------------------[依赖性]有序库:[依赖性][依赖性]-------[dependency]API

节点:

-设置-模式-检查:

-设置-调试-文件:

AndroidSDK工具修订版20.0.1[check env]安装在 /app/android-sdk-linux_86

-设置:[echo]项目名称:LocationLib[gettype]项目类型:Android库

-set-debug-模式:

-调试-混淆-检查:

项目目标:Google API[getTarget]供应商:Google Inc.[getTarget]平台版本:4.1[getTarget]API级别:
16[回显] ---------- [回显]如果需要,创建输出目录...[回显] ---------- [回显]解决LocationLib的依赖项...[依赖项]库依赖项:[依赖项]没有库[依赖项][依赖项] ------------------ [依赖项]API

-预构建:

-code-gen:[merge manifest]Android manifest文件中没有更改。[echo]处理aidl文件...[aidl]没有要编译的aidl文件。[echo] - [echo]处理渲染脚本文件...[renderscript]没有要编译的renderscript文件。[回声]-[回声]处理资源...[aapt]没有已更改的资源。R.java和Manifest.java未受影响。[echo] - [echo]处理BuildConfig类...[buildconfig]不需要生成新的buildconfig。

-预编译:

-编译:[echo]正在创建库输出jar文件。。。

-后期编译:

-混淆:

-dex:[回显]库项目:不转换字节码...

-crunch:[crunch]压缩源目录:/home/ricky/Development/workspace/location_library/LocationLib/res中的PNG文件
[crunsh]压缩到目标目录:/hom/ricky/developement/workspack/location/library/location/bin/res[crunh]压缩0个PNG文件以更新缓存

-package-resources: [echo] Library project: don package resources...

-package: [echo]库项目:不要打包apk...

-包装后:

-do-debug: [echo] 库项目: 不要创建 apk...[属性文件]更新属性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop [propertyfile] 更新属性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop [propertyfile] 更新属性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop [propertyfile] 更新属性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop

-构建后:

调试:

节点:

-设置-模式-检查:

-设置-调试-文件:

AndroidSDK工具修订版20.0.1[check env]安装在 /app/android-sdk-linux_86

-setup: [echo]项目名称:ExceptionHandlerLib [gettype]项目类型:Android库

-set-debug-模式:

-调试-混淆-检查:

-构建-设置:[echo]解决ExceptionHandlerLib的构建目标...[getTarget]项目目标:Android 4.1[getTarget]API级别:
16[echo] ---------- [echo]如果需要,创建输出目录...[echo] ---------- [echo]解决ExceptionHandlerLib的依赖项...[依赖项]库依赖项:[依赖项]没有库[依赖项][依赖项] ------------------ [依赖项]API

-预构建:

-code-gen:[merge manifest]Android manifest文件中没有更改。[echo]处理aidl文件...[aidl]没有要编译的aidl文件。[echo] - [echo]处理渲染脚本文件...[renderscript]没有要编译的renderscript文件。[回声]-[回声]处理资源...[aapt]没有已更改的资源。R.java和Manifest.java未受影响。[echo] - [echo]处理BuildConfig类...[buildconfig]不需要生成新的buildconfig。

-预编译:

-编译:[echo]正在创建库输出jar文件。。。

-后期编译:

-混淆:

-dex:[回显]库项目:不转换字节码...

-crunch: [crunch]压缩源目录中的PNG文件:/home/Ricky/Development/workspace/exception _ handler _ library/exception handler lib/RES[crunch]到目标目录:/home/Ricky/Development/workspace/exception _ handler _ library/exception handler lib/bin/RES[crunch]压缩0个PNG文件以更新缓存

-package-resources: [echo] Library project: don package resources...

-package: [echo]库项目:不要打包apk...

-包装后:

-do-debug:[回显]库项目:不创建apk...[属性文件]更新属性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop[属性文件]更新属性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop[属性文件]更新属性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop[属性文件]更新属性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop

-构建后:

调试:

-预构建:

-code-gen: [mergemanifest]将AndroidManifest文件合并为一个文件。[mergemanifest]合并项目和2个库中的清单。[mergemanifest]警告:[AndroidManifest.xml:3,AndroidManifest.xml:3]主清单具有,但库使用targetSdkVersion = ' 16 '[merge manifest]注意:主清单缺少声明,该声明的默认值为minSdkVersion或1。[mergemanifest]警告:[AndroidManifest.xml:3,AndroidManifest.xml:13]主清单具有,但库使用targetSdkVersion = ' 16 '[merge manifest]注意:主清单缺少声明,该声明的默认值为minSdkVersion或1。

构建失败的 /app/android-sdk-linux_86/tools/ant/build.xml:616:null

总时间:2 秒

编辑

我查看了< code >/app/Android-SDK-Linux _ 86/tools/ant/build . XML:616 ,发现下面一行抛出了null < code > enabled = " $ { manifest merger . enabled } "

这是整个街区

我会试着禁用合并清单看看会发生什么

编辑

似乎从project.properties中删除manifestmerger.enabled = true已经解决了我的问题。该项目现在可以完美地编译和运行了。我想我应该向android团队报告这个bug。我的清单有以下条目

<uses-sdk android:minSdkVersion="7"  />

然而,如果我将targetSdkVersion提高到7以上,仍然不会调用onActivityResult(),所以这并没有真正解决根本问题,但是我的项目现在工作正常

共有3个答案

莫逸仙
2023-03-14

兼容包中存在错误(请参阅此内容和此内容)

司寇凯
2023-03-14

这里有一些建议:

>

  • 如果您只想在清单中没有android: Target etSdkVersion,您应该能够在Eclipse的Project Explorer中右键单击您的项目并选择Android Tools

    检查以确保所有<code>Fragment-派生类都扩展了兼容库中的正确类(<code>android.support.v4.app.Fragment和<code<android.support.v4.app.FragmentActivity),并且没有意外扩展框架中的类(<<code>andro.app.Fragment或<code>android.app.Activity)。

    此外,我发现奇怪的是,如果您将<code>targetSdkVersion</code>设置为16以外的任何值,您的项目就不会编译。问题/控制台/Lint窗口中是否指示了任何特定问题?还请检查是否有其他目标可用和/或选择为项目构建目标(右键单击项目,属性

  • 支劲
    2023-03-14

    在片段中(错误的开始活动结果)

    getActivty().startActivityForResult(intent, requestCode); 
    // Cannot receive in fragment
    

    在片段中(正确的start ActivityForResult)

    startActivityForResult(intent, requestCode); 
    // use Fragment.startActivityForRusult()
    // not Activity.startActivityForRusult()
    

    在活动中

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
    

    在片段中

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Do Action
    }
    
     类似资料:
    • 嗨,我在主片段内使用带有碎片网的viewPager。我试图从画廊或相机中获取图像到位图,但在选择照片并启动ActivityForResult后,它不会在onActivityResult中捕获... 以下是我如何调用startActivityForResult: 这是我的onActivityResult: 有什么想法吗?

    • 我在google上搜索onactivityresult()是不推荐的。但我的问题没有解决。下面是片段的代码

    • 本章提供了有关 版本控制 章节中提供的破坏性和非破坏性修改列表的详细说明。 什么算是一个破坏性(不兼容)的变化并没有明确的定义。本指南应该被视为指示性的,而不是每一种可能变化的全面清单。 这里列出的规则只涉及客户端兼容性。预期API生产者明白在部署方面的要求,包括实现细节的变化。 一般目的是,服务端更新到一个新的minor版本或patch版本不该破坏客户端。可预期的破坏类型有: 源代码兼容性:针对

    • 语言补丁 Array.isArray Object.assign JSON.stringify console-polyfill Object.keys Object.is Array.prototype.forEach Function.prototype.bind 或者直接使用https://polyfill.io/ 提供的动态补丁方案 <script src="https://cdn.pol

    • 本文向大家介绍highcharts 兼容性,包括了highcharts 兼容性的使用技巧和注意事项,需要的朋友参考一下 示例 牌 支持的版本 IE浏览器 6.0 + 火狐浏览器 2.0以上 铬 1.0 + 苹果浏览器 4.0以上 歌剧 9.0 + iOS(Safari) 3.0 + Android浏览器 2.0以上 Highcharts支持旧版浏览器的jQuery 1.6+版本,以及现代浏览器的2

    • Java 兼容性 当我们写的Scala代码被Java调用时,我们要确保从Java来用仍然习惯。这常常不需要额外的努力——class和纯的trait等价于Java的中的对应类型 —— 但有时需要提供独立的Java API。一种感受你的库中的Java API好的方式是用Java写单元测试(只是为了兼容性);这也确保了你的库中的Java视图保持稳定,在这一点上不会随着时间因Scala编译器的波动而影响。