问题标签 [android-7.0-nougat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
777 浏览

android - Android N 预览版中的 Java 8

Android N Preview的官方 Java 8公告如下:

借助 Android 的 Jack 编译器,您现在可以在Gingerbread等 Android 版本上使用许多流行的 Java 8 语言功能,包括 lambda 等。(...) 一些 Java 8 语言特性——比如默认和静态方法、流和函数式接口——现在也可以在 N 及更高版本上使用。

我正在使用以下 gradle 配置minSdkVersion 15在一个小项目中尝试一些 Java 8:

但部署目标选择器显示minSdk(API23, N preview). 这是预期的行为吗?

在此处输入图像描述

早在 Gingerbread 就有可用的 Java 8 功能/包列表吗?您知道在 API<23 上使用 Java 8 功能需要哪些 gradle 设置或支持库吗?

0 投票
4 回答
7397 浏览

android - 检测Android N版本代码

是否可以检测用户是否正在运行 Android N?

我有一个带有 Android N 开发者预览版的 Nexus 6。如果我尝试使用 获取构建版本Build.VERSION.SDK_INT,它会返回 23,它等于 Android Marshmallow。

0 投票
0 回答
514 浏览

android - 在 Android N 上无法访问 DownloadManager 的下载文件

我有一个具有所有必要权限的系统应用程序。以前,我会使用 DownloadManager 下载 apk,然后通过 PackageManager 的 installPackage() 使用反射来安装所说的 apk。

不幸的是,跟随 N 的行为改变 http://developer.android.com/preview/behavior-changes.html

DownloadManager 不能再按文件名共享私人存储的文件。旧版应用程序在访问 COLUMN_LOCAL_FILENAME 时可能会出现无法访问的路径。尝试访问 COLUMN_LOCAL_FILENAME 时,面向 Android N 或更高版本的应用会触发 SecurityException。使用 setDestinationInExternalFilesDir(Context, String, String) 或 setDestinationInExternalPublicDir(String, String) 将下载位置设置为公共位置的旧版应用程序仍然可以访问 COLUMN_LOCAL_FILENAME 中的路径,但是强烈建议不要使用此方法。访问由 DownloadManager 公开的文件的首选方法是使用 openFileDescriptor(Uri, String)。

我现在在尝试旧方法时遇到权限被拒绝错误。

我需要一个 Uri 来传递给 PM 的 installPackage(),所以我目前只是使用(已弃用)WORLD_READABLE 模式将该文件复制到我的应用程序的私有文件夹中,以便 PM 以后可以访问它并安装。这感觉很 hacky,我想知道是否有人知道更好的方法(androiddev 建议的另一个选项是将文件下载到公共目录,但这需要我添加 WRITE_EXTERNAL_STORAGE 权限,这不是一个选项。)

0 投票
1 回答
402 浏览

android - Unable to start activity ComponentInfo, error only from android N

this code, file explore. It works perfectly on Android 5, 6. but android N receive three receive error. How can I solve? Thank you.

code:

logcat:

and the problem code:

that big changes will be between earlier versions and N, or is currently not stable?

edit:

i am intent this:

is work from androi N , but not show the files .mp4 .m3u8 .avi etc.

0 投票
1 回答
3034 浏览

android - 我们在 Android N 网络安全配置中使用什么来获得自签名证书?

我正在尝试测试 N Developer Preview 的网络安全配置能力的各个方面。我有大部分工作,但我被自签名证书场景难住了。

根据文档,Android N 应该对 PEM 或 DER 文件感到满意,因为它适用于其他证书验证方案。但是,我不经常使用自签名证书,并且我尝试使其正常工作的尝试不断遇到证书路径验证异常。

对于测试,我thin用作服务器,在我的开发机器上运行,可以通过 N 模拟器访问。自签名证书适用于我的开发机器上的浏览器,如果我切换到运行thinsans SSL,应用程序可以正常访问服务器。因此,这不是连接问题。

我使用此站点上的说明创建了自签名证书:

根据这个 Stack Overflow answer,该example.crt文件是一个 PEM 文件。在其他地方,我看到了创建“组合 PEM”文件的说明。但是,我尝试了这两种方法,但都没有运气。

在网络安全配置方面,我已经尝试过<domain-config><debug-overrides>. 后者看起来像:

但是,无论哪种情况,我都会收到验证错误。

作为 PEM 或 DER 文件,作为原始资源,我们究竟应该放入什么来使这项工作有效?

0 投票
3 回答
4572 浏览

android - 在 Android N 中以编程方式进入多窗口模式

Android N 有一个新功能——多窗口模式。它使两个应用程序能够并排处于活动状态(实际上一个处于活动状态,另一个处于暂停状态,但我们可以同时看到两者)。

我正在寻找一个 API,我可以调用它来让我的应用程序进入多窗口模式。我在 Android N SDK 文档中找不到太多帮助。我试图让我的应用程序的两个活动并排运行,但无需用户执行手动步骤。

手动进入多窗口模式 用户可以通过以下方式切换到多窗口模式:

如果用户打开概览屏幕并长按活动标题,他们可以将该活动拖到屏幕的突出显示部分,以将活动置于多窗口模式。如果用户长按 Overview 按钮,设备会将当前 Activity 置于多窗口模式,并打开 Overview 屏幕让用户选择另一个 Activity 共享屏幕。

0 投票
3 回答
8212 浏览

android - Android:为电信注册新的PhoneAccount

我正在尝试创建一个新的PhoneAccount来使用我的ConnectionService实现。在文档中它说我需要向 TelecomManager 注册一个新的 PhoneAccount,然后在我的电话应用程序的设置中选择它。

这是我的代码:

如您所见,它创建了一个指向我的 ConnectionService 实现的新 ComponentName,然后创建了一个新的 PhoneAccountHandle,我在其中提供 ComponentName 和唯一的帐户名。然后,我在 PhoneAccount 构建中提供 PhoneAccountHandle 以及标签(名称?),以创建新的 PhoneAccount。最后,我在 telemanager 中注册了该帐户。

当我打开手机应用程序时,什么都没有改变。我看不到哪里可以更改PhoneAccount ...有什么想法吗?

谢谢!

0 投票
3 回答
3298 浏览

android - Android N之后如何获取实际屏幕尺寸?

由于 Android N 引入了分屏,因此您的应用程序的窗口大小可以是原来的一半。我发现getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);不再总是返回实际的设备屏幕尺寸,因为在分屏模式下,显示器的高度将是您应用程序的窗口高度。我可以使用任何其他 API 来获取实际的屏幕尺寸吗?

0 投票
3 回答
7748 浏览

android - SecureRandom 提供程序“Crypto”在 Android N 中无法用于确定性地生成密钥

用户可以购买我的应用程序的“专业”版本。当他们这样做时,我按如下方式存储并验证他们的购买。

  • 结合用户的 UUID 和另一个唯一字符串。
  • 然后使用静态种子对生成的字符串进行加密。我这样做是使用SecureRandom.getInstance("SHA1PRNG", "Crypto")- 这就是问题所在!
  • 生成的加密字符串就是“解锁码”。
  • 因此,我始终知道用户预期的唯一解锁码值。
  • 当用户购买“Pro”时,我将“解锁码”存储在数据库中。
  • 我通过查看数据库中存储的“解锁代码”是否与基于其唯一信息的预期代码匹配来检查用户是否拥有“Pro”。

所以,不是最好的系统,但对于我不起眼的应用程序来说,一切都已经足够模糊了。

问题是SecureRandom.getInstance("SHA1PRNG", "Crypto")在 N 上失败,因为不支持“加密”。我了解到,依赖特定的提供者是不好的做法,并且 Crypto 不受 N 支持。哎呀。

所以我有一个问题:我依靠价值种子对的加密来始终具有相同的输出。Android N 不支持我使用的加密提供程序,所以我不知道如何确保 N 上的加密输出与其他设备上的相同。

我的问题:

  1. 是否可以在我的 APK 中包含“加密”以便它始终可用?
  2. 在 Android N 上加密值-种子对时,我能否以其他方式确保相同的输出?

我的代码:

0 投票
0 回答
3916 浏览

android - Android:实现使用内置电话堆栈的自定义 ConnectionService

我正在尝试在我的自定义电话应用程序中实现自定义 ConnectionService。根据文档,我需要在电话设置菜单中选择我注册的电话帐户作为默认值。但是,当我注册 PhoneAccount 以使用本机电话堆栈时,PhoneAccount 似乎没有出现供使用。

让我向您展示我到目前为止所做的工作。此代码注册了一个 PhoneAccount,它“......不允许从内置电话堆栈管理或拨打电话”

这使得可选择的 PhoneAccount 显示在设置 > 通话 > 通话帐户下。使用此帐户拨打电话确实绑定到我的 ConnectionService 实现,但无法在任何地方实际拨打电话。

我真正想要设置的功能是PhoneAccount.CAPABILITY_CONNECTION_MANAGER,它确实使用了内置堆栈。但是这样做确实会从菜单中完全删除该帐户,并使其无法选择为默认帐户。

关于我在这里可能做错的任何想法?

PS:我上一个问题的延续(为电信注册新的PhoneAccount)

更新:这是我的 AndroidManifest.xml 中的声明,以防万一:

更新: 使用 PhoneAccount.CAPABILITY_CONNECTION_MANAGER 解决的电话帐户确实会自动绑定,尽管文档说它不会。这意味着您根本不必担心选择电话帐户。请记住,这可能会改变,因为文档另有说明。