标签: android-7.0-nougat

PackageManager#installPackage 不适用于 Android N

当使用构建工具版本 24 和带有 N 图像 (npd56n) 的 Android 设备时,我无法使用 PackageManager#installPackage 安装包。

当带有file:方案的URI传递给方法时,返回 -3,我假设它是INSTALL_FAILED_INVALID_URI

当使用 FileProvider( content:scheme)创建的 URI传递给方法时,抛出异常:

Caused by: java.lang.UnsupportedOperationException: Only file:// URIs are supported                                                                    
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

android android-package-managers android-fileprovider android-7.0-nougat

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

使用InCallService替换Android 6和7上的默认Phone应用

添加InCallService了Android API级别23,以提供用于管理电话的用户界面。该文档提供了清单注册示例,但我无法使它正常工作。该应用可以正常编译,但设置中的默认应用不会显示我的应用。

我发现有关该主题的任何信息的唯一地方是年前关闭的StackOverflow问题。对提出增加android.intent.action.DIAL活动的那个问题发表评论,但这也无济于事。我在活动中也尝试了其他其他意图的组合(android.intent.action.CALL_DIALandroid.intent.action.ANSWER)。

是否有替换手机应用程序所需的代码示例?这些类是否需要提供一些工作方法供应用程序显示?

android android-intent android-6.0-marshmallow android-7.0-nougat android-7.1-nougat

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

使用权限 android:name="android.permission.WAKE_LOCK 权限问题

我正在我的应用程序中使用此权限,并且在所有设备和Marhshmallow 6.0设备中都可以正常工作。

不需要WAKE_LOCK许可运行时,因为它的正常许可但在Nougat 7.0设备中出现问题。

应用程序崩溃并"java.lang.SecurityException: Neither user 10799 nor current process has android.permission.WAKE_LOCK"在线发生错误wakelock.acquire();

如何解决?

android android-permissions android-7.0-nougat

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

偶尔出现 java.io.IOException:仅在 Android 7.0 上不允许通过 DatagramSocket.send() 进行操作

以下代码在所有 Android 设备 Android 7.0 上几乎 100% 运行良好:

DatagramSocket clientSocket = new DatagramSocket();
clientSocket.setSoTimeout(4000);
clientSocket.setReuseAddress(true);        
clientSocket.setBroadcast(true);
...
DatagramPacket dpSend = new DatagramPacket(baSendData, baSendData.length, InetAddress.getByName("239.255.255.250"), 3702);
clientSocket.send(dpSend);
Run Code Online (Sandbox Code Playgroud)

在 Android 7.0 上,仅在 Android 7.0 上,clientSocket.send(dpSend) 偶尔会生成以下错误。我想强调“偶尔”。大多数时候它工作得很好。

我想知道是否有人可以提供对 Android 7.0 的任何见解,以阐明为什么异常仅发生在 Android 7.0 上。

sockets multicast datagram multicastsocket android-7.0-nougat

5
推荐指数
0
解决办法
858
查看次数

java.lang.NullPointerException:在 android.widget.Editor.updateFloatingToolbarVisibility

java.lang.NullPointerException: 
  at android.widget.Editor.updateFloatingToolbarVisibility(Editor.java:1541)
  at android.widget.Editor.onTouchEvent(Editor.java:1491)
  at android.widget.TextView.onTouchEvent(TextView.java:10025)
  at android.view.View.dispatchTouchEvent(View.java:10723)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
  at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:559)
  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1870)
  at android.app.Activity.dispatchTouchEvent(Activity.java:3236)
  at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:521)
  at android.view.View.dispatchPointerEvent(View.java:10952)
  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5117)
  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4969)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4500)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4553)
  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4519)
  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4652)
  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4527)
  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4709)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4500)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4553)
  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4519)
  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4527)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4500)
  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7007)
  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6936)
  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6897)
  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7117)
  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
  at …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-7.0-nougat

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

不同 Android 版本的不同布局

虽然这似乎是一个愚蠢的问题,但我想知道是否有另一种优雅的方式来处理我的设计问题,而不仅仅是创建两个单独的布局我的应用程序应该具有不同的自定义布局,用于棉花糖和牛轧糖版本的持续通知。正如我所说,最直接的方法是创建两个不同的 XML 文件并基于运行时平台加载它们。还有其他方法吗?

android android-layout android-6.0-marshmallow android-7.0-nougat

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

Android camera2 在牛轧糖上废弃了表面,但在棉花糖上工作

编辑 05/05/2018
我仍然不知道发生这种情况的原因,但显然它不会影响 Lolipop 和 Marshmallow 设备。据我测试,此错误仅出现在 Nougat 7.0 上。


我正在制作一个应用程序,可让您录制视频,然后用于进一步处理。但是,我目前在录制部分遇到了问题。

设置/开始录制的代码:

private void startRecord()
{
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setOutputFile(videoFile.getAbsolutePath());
    mediaRecorder.setVideoEncodingBitRate(1000000);
    mediaRecorder.setVideoFrameRate(30);
    mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mediaRecorder.setOrientationHint(totalRotation);

    try
    {
        mediaRecorder.prepare();

        SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
        surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
        Surface previewSurface = new Surface(surfaceTexture);
        Surface recordSurface = mediaRecorder.getSurface();
        captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
        captureRequestBuilder.addTarget(previewSurface);
        captureRequestBuilder.addTarget(recordSurface);

        cameraDevice.createCaptureSession(Arrays.asList(previewSurface, recordSurface),
                new CameraCaptureSession.StateCallback()
                {
                    @Override
                    public void onConfigured(CameraCaptureSession session)
                    {
                        recordCaptureSession = session;
                        try
                        {
                            recordCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null);
                        }
                        catch (CameraAccessException e) {}
                    }

                    @Override
                    public void onConfigureFailed(CameraCaptureSession session) …
Run Code Online (Sandbox Code Playgroud)

java android android-camera2 android-7.0-nougat

5
推荐指数
0
解决办法
817
查看次数

android O 在手机处于睡眠模式时未收到 FCM 推送消息

我正在使用 FCM 进行推送消息。如果应用程序在 android Noughat OS 中被用户关闭,我没有收到 FCM 通知。

如果用户不关闭应用程序,推送通知工作正常。

此外,如果用户在受保护的应用程序中设置中添加应用程序 - > 受保护的应用程序应用程序即使在睡眠模式下也能工作。

android background firebase-cloud-messaging android-7.0-nougat

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

获取 SD 卡的路径

请在拒绝投票和/或将其标记为重复之前阅读整篇文章!

我正在开发一个应用程序,它从用户手机上的特定文件夹中读取文件 - 从 SD 卡(如果有的话)或从内置存储。是的,清单中提到了“READ_EXTERNAL_STORAGE”,我也在处理 API>23 的权限弹出窗口。

我曾经简单地使用

File folder = new File(Environment.getExternalStorageDirectory(), "myfolder");
Run Code Online (Sandbox Code Playgroud)

获取存储在内置存储(S7 为 32gb)中的文件夹的路径,但现在我想获取 SD 卡的路径。根据谷歌给我的几乎每一个结果,“Environment.getExternalStorageDirectory()”应该给你SD卡的路径,但对我来说它没有(而且从来没有)。

我已经用两个不同的三星 Galaxy S7 测试了以下内容,两者都使用 Android 7.0,一个带有 SD 卡(+ 文件夹),另一个没有(+ 文件夹):

Log.d(tag, System.getenv("EXTERNAL_STORAGE"));
Log.d(tag, System.getenv("SECONDARY_STORAGE"));
Log.d(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+"myfolder").isDirectory());
Log.e(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+ordner).getAbsolutePath());
Log.d(tag, Environment.isExternalStorageRemovable());
Log.d(tag, Environment.getExternalStorageDirectory());
Log.d(tag, Environment.getExternalStorageDirectory().getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,两部手机都输出相同的信息:

/sdcard
null
true
/sdcard/myfolder
false
/storage/emulated/0
/storage/emulated/0
Run Code Online (Sandbox Code Playgroud)

根据文件管理器应用程序(“我的文件”),内置存储称为“内部存储”,这更没有意义(我知道Android中内部存储和外部存储之间的区别)。

如何获取实际 SD 卡的路径(无需对其进行硬编码)?

android sd-card android-sdcard android-external-storage android-7.0-nougat

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

如何在牛轧糖中为 ACTION_VIEW 使用内容 URI?

我有一个生成视频文件的应用程序,它可以放在内部存储或 SD 卡中,需要通过 Intent.ACTION_VIEW 由用户首选的视频播放器应用程序打开。该应用程序在面向 API 22 时按预期工作,但是当我尝试将其升级到 27 时遇到了问题。

该应用程序根据存储位置生成不同类型的 URI。对于内部存储,它使用文件 URI,如下所示:

file:///storage/emulated/0/VideoRecorder/2018_06_22_12_25_50.mp4
Run Code Online (Sandbox Code Playgroud)

对于放置在 SD 卡中的视频,它使用内容 URI:

content://com.android.externalstorage.documents/tree/72D1-C625%3Avideostest%2Ftest2/document/72D1-C625%3Avideostest%2Ftest2%2F2018_06_22_12_41_27.mp4
Run Code Online (Sandbox Code Playgroud)

Nougat 不喜欢 file:// URI,所以我使用 FileProvider(下面的代码)来解决这个问题,将文件 URI 转换为其他应用程序可以使用 ACTION_VIEW 打开的内容 URI。我认为 SD 卡 URI 不需要任何更改,因为它已经是内容 URI,但似乎只有默认照片应用程序可以使用 ACTION_VIEW 意图打开该 URI,而用户安装的应用程序(如 VLC Player)则不能,失败,但出现以下异常:

java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/tree/72D1-C625:videostest/test2/document/72D1-C625:videostest/test2/2018_06_22_12_27_45.mp4 from pid=7809, uid=10022 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)

检查了 FileProvider 生成的 URI 后,我想我明白了这个问题。它生成的内容 URI 的格式与我用于 SD 卡视频的内容 URI 的格式完全不同:

content://io.github.androidtests.videorecorder.videosfileprovider/external_files/VideoRecorder/2018_06_22_12_25_50.mp4
Run Code Online (Sandbox Code Playgroud)

我的问题是,SD 卡视频是否也需要通过 FileProvider 共享?我该怎么做,因为我只有内容 URI,没有文件,而且 FileProvider 似乎专门设计用于将文件转换为 URI?

编辑:在测试了更多视频播放器应用程序之后,其中一些似乎能够使用内容 URI,就像照片应用程序一样。这只是一些应用程序不支持内容 URI 的情况吗?

代码:

Uri uri …
Run Code Online (Sandbox Code Playgroud)

android uri android-fileprovider android-7.0-nougat

5
推荐指数
0
解决办法
450
查看次数