小编t0m*_*t0m的帖子

绑定应用程序提供者时Android ANR

我很难调试 Android ANR 问题。

这是我从 Google Play Console - Android Vitals(Google Play 发布的版本)获得的信息:

安卓10:

  at libcore.io.Linux.access (Native method)
  at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
  at libcore.io.BlockGuardOs.access (BlockGuardOs.java:71)
  at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
  at android.app.ActivityThread$AndroidOs.access (ActivityThread.java:7308)
  at java.io.UnixFileSystem.checkAccess (UnixFileSystem.java:281)
  at java.io.File.exists (File.java:815)
  at android.app.ContextImpl.ensureExternalDirsExistOrFilter (ContextImpl.java:2670)
  at android.app.ContextImpl.getExternalFilesDirs (ContextImpl.java:709)
  at android.content.ContextWrapper.getExternalFilesDirs (ContextWrapper.java:258)
  at androidx.core.content.ContextCompat.getExternalFilesDirs (ContextCompat.java:381)
  at androidx.core.content.FileProvider.parsePathStrategy (FileProvider.java:691)
  at androidx.core.content.FileProvider.getPathStrategy (FileProvider.java:635)
  at androidx.core.content.FileProvider.attachInfo (FileProvider.java:416)
  at android.app.ActivityThread.installProvider (ActivityThread.java:7045)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:6590)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6485)
  at android.app.ActivityThread.access$1300 (ActivityThread.java:225)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1865)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:359)
  at android.app.ActivityThread.main …
Run Code Online (Sandbox Code Playgroud)

android android-anr-dialog

8
推荐指数
0
解决办法
639
查看次数

Android,如何将元数据设置为MP4文件?

我想将元数据设置为MP4文件.

我通过以下方式创建MP4文件:

new MediaMuxer(mPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)
Run Code Online (Sandbox Code Playgroud)

和文件有元:

Title:   unknown
Artist:  unknown
Album:   unknown
Comment:
...
Run Code Online (Sandbox Code Playgroud)

类似于:这里

我发现对于API21 +我可以通过以下方式制作元数据:MediaMetadata.Builder但是如何将元数据保存到创建的MP4文件?

请不要extern图书馆.

谢谢.

media mp4 android metadata

6
推荐指数
1
解决办法
2230
查看次数

Android检测实际录制,MediaRecorder延迟

我想将手机中的数据与录制视频所花费的时间进行同步。我想获取有关录制视频所用时间的信息(以毫秒为单位)。我尝试通过以下方法解决该问题:
1.运行计时。
伪:

mMediaRecorder.start(); //start recording
startTime = System.currentTimeMillis(); //save start recording time
timerHandler.postDelayed(timerRunnable, 0); //for save elapsed time and timerHandler.postDelayed(this, 20); for next 20ms
Run Code Online (Sandbox Code Playgroud)

但是MediaRecorder存在问题,因为真实记录不会在MediaRecorder.start()之后立即开始,但是真实视频记录具有不同的延迟(取决于设备,...)。当MediaRecorder真正开始录制时,我需要“一些”回调或catch事件。

在此处输入图片说明 不需要有关停止录制的信息,因为我可以通过以下方式检查实际视频时长:

FileInputStream stream = new FileInputStream(storage.getVideoFile());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(stream.getFD());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Run Code Online (Sandbox Code Playgroud)

我尝试在录制时通过MediaMetadataRetriever获取实际持续时间,但它仅适用于关闭的视频文件。

我试图通过FileObserver和onEvent进行检测,但这是准确的。

如果可能的话,我想通过Android SDK解决。但是如何?
[最小SDK:API21]

谢谢。

android video-recording android-mediarecorder

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

Android:java.io.IOException:Android Geocoder.getFromLocation() 时服务不可用

我有通话问题:

Geocoder geocoder = new Geocoder(ctx, Locale.getDefault());
List<Address> data = geocoder.getFromLocation(latitude, longitude, 1);
Run Code Online (Sandbox Code Playgroud)

抛出异常:

java.io.IOException: Service not Available
W/System.err:     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
W/System.err:     at <path to my class>.getGeolocationName(GPSTracker.java:325)
Run Code Online (Sandbox Code Playgroud)

Nexus 5
Android 7.1.1 来自xda
Google 应用程序(Gapps),从“Aroma”变体从这里安装。Google Play、Google 服务会自动安装。我添加了谷歌地图,谷歌软件包安装程序。

重新启动设备不能解决问题,因为问题是关于缺少包 i 的事情。

更新
如果 Geocoder 不可用,我使用 e Geocoding API:示例
来自此处:“ Geocoder 是 Google API 附加组件的一部分,不属于 AOSP。 ”我可以安装它吗?

android google-maps

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

Android使用渐变放大中心颜色

我无法使用渐变来放大中心颜色的宽度。
目标是:
在此处输入图片说明
中心较大,带有一些颜色,侧面透明。

用法:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:src="@drawable/gradient_normal"/>
Run Code Online (Sandbox Code Playgroud)

我尝试了多种组合layer-list,但效果并不理想。一种解决方案是将Layout划分为50%-50%,然后将第一个渐变从左到右(从透明到彩色)设置为第二个从右到左(从彩色到透明),但是这种解决方案对我来说似乎非常复杂。

例如,此生成器无法放大中间的黄色。(有Android XML代码生成器。)

还有更简单的解决方案吗?谢谢。

API21 +

android android-layout android-drawable

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

我是否需要android.permission.SYSTEM_ALERT_WINDOW作为WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY?

我已经看到:WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY始终与<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />in 结合使用AndroidManifest.xml。例如这里

考虑以下代码:

    windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
    surfaceView = new SurfaceView(this);
    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            100, 100,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT
    );
    layoutParams.gravity = Gravity.START | Gravity.TOP;
    windowManager.addView(surfaceView, layoutParams);
Run Code Online (Sandbox Code Playgroud)

我需要此代码SYSTEM_ALERT_WINDOW权限吗?

来自doc的有关SYSTEM_ALERT_WINDOW

允许应用使用TYPE_SYSTEM_ALERT类型创建窗口,该窗口显示在所有其他应用的顶部。很少有应用程序应使用此权限;这些窗口用于与用户进行系统级交互。

大约TYPE_SYSTEM_ALERT不是TYPE_SYSTEM_OVERLAY。嗯?

更新:
行:windowManager.addView(surfaceView, layoutParams);

java.lang.RuntimeException: Unable to create service: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@10dca8ac -- permission denied for this window type
Run Code Online (Sandbox Code Playgroud)

因此可能<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />是必要的。

permissions android android-permissions

4
推荐指数
1
解决办法
4320
查看次数

Ubuntu 16.04无法识别的OpenGL版本

Genymotion冻结:"启动虚拟设备".

Ubuntu 16.04.2 LTS

Genymotion 2.8.1
- 清除缓存,
- 完全删除,然后重新安装,
- 删除所有虚拟设备并下载并安装新设备
- genymotion.log.Genymobile文件夹中没有错误,
- genymotion-player.log.Genymobile/Genymotion/deployed/Custom Phone - 7.0.0 - API 24 - 768x1280文件夹中:

b?e 6 18:57:08 [Genymotion Player] [warning] Unrecognized OpenGL version
b?e 6 18:57:08 [Genymotion Player] [warning] Unrecognized OpenGL version
Run Code Online (Sandbox Code Playgroud)

VirtualBox 5.1.14
- 完全删除,再次安装,
- 其他虚拟设备正确运行(即:其他Linux操作系统),

OpenGL的版本字符串:3.0梅萨12.0.6(命令:glxinfo | grep "OpenGL version")

Genymotion球员被困在这里 但是在虚拟框中运行

类似:就像这里一样

我感谢您的帮助.谢谢.

ubuntu android virtualbox opengl-es genymotion

4
推荐指数
1
解决办法
2044
查看次数

EditText 多行带有“下一个视图按钮”而不是“新行按钮”

EditText目标是将多行与“下一个视图按钮”一起使用android:inputType="textMultiLine",例如android:inputType="text"(见图 2)。

<EditText
    android:id="@+id/addAffirmationContent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:maxLength="255"
    android:imeOptions="flagNoExtractUi" />
Run Code Online (Sandbox Code Playgroud)

我尝试了许多与: 的组合 android:inputType, singleLine, nextFocusDown, nextFocusUp, nextFocusLeft, nextFocusRight, nextFocusForward, imeOptions, lines,但android:inputType="textMultiLine"总是强制换行按钮。

在 Nexus 5 Android 7 上测试。

图一:换行按钮:
新行按钮

图2.:下一个视图按钮:
下一个视图按钮

android android-edittext android-view

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