小编Pit*_*tel的帖子

MediaRecorder启动错误代码

我想录制没有声音的原始h.264视频,并且可能加速HW(并稍后流式传输).所以我决定使用MediaRecorder(和套接字hack进行流式传输).

我有以下代码:

final MediaRecorder recorder = new MediaRecorder();
final Camera camera = Camera.open();
camera.unlock();
recorder.setCamera(camera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
final CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
recorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
recorder.setVideoFrameRate(profile.videoFrameRate);
recorder.setVideoEncodingBitRate(profile.videoBitRate);
recorder.prepare();
recorder.start();
Run Code Online (Sandbox Code Playgroud)

和bam!这在logcat中:

E/MediaRecorder? start failed: -38
Run Code Online (Sandbox Code Playgroud)

我开始谷歌搜索,发现了很多问题和答案,但没有关于我的错误代码-38.

所以我试着看看Android 源代码,并注意到它的native方法,我不知道在哪里寻找它.

所以我的一个大问题是:是否有一些错误代码列表,所以我可以找到错误的-38含义?`

也知道tjat我的目标是API 10(Gingerbread)并使用最新的SDK 21构建.

android android-mediarecorder

7
推荐指数
1
解决办法
3120
查看次数

此消息无法回收,因为它仍在使用中

我正在尝试使用这篇文章来创建异步UDP套接字.

所以我有这个代码:

import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;

import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpThread
    extends HandlerThread {

    private static final String TAG = "UDP";
    private final Handler uiHandler, workerHandler;
    private final DatagramSocket socket = new DatagramSocket();

    public UdpThread(final Handler uiHandler, final String hostname, final int port) throws SocketException {
        super(TAG);
        this.uiHandler = uiHandler;
        start();
        workerHandler = new Handler(getLooper(), new Handler.Callback() {
            @Override
            public boolean handleMessage(final Message msg) {
                /*
                if (msg.what == port && msg.obj == hostname) …
Run Code Online (Sandbox Code Playgroud)

android android-handler

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

预览分辨率与编解码器分辨率不匹配

我正在尝试在设备之间流式传输视频。我想尽可能支持旧设备。所以我从MediaRecorderGingerbread (API 10) 的课程开始,但它有问题。所以现在,我要转向 Jelly Bean (API 16) 和MediaCodec.

我正在向 Camera 中的编解码器提供数据PreviewCallback。我必须使用相同的分辨率进行预览和编解码器。但是在我们的一些测试设备上,预览分辨率和编解码器及其分辨率之间没有交集。

那么,如何在这些设备上捕捉视频呢?我知道有 createInputSurfacein MediaCodec,但它需要 API 18,我将不得不削减超过 35%的设备,这是不可接受的。

那么如何解决呢?

寻找最佳分辨率的代码:

CamcorderProfile bestProfile() {
    final int[] profiles;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_2160P, CamcorderProfile.QUALITY_1080P, CamcorderProfile.QUALITY_720P, CamcorderProfile.QUALITY_480P, CamcorderProfile.QUALITY_CIF, CamcorderProfile.QUALITY_QCIF, CamcorderProfile.QUALITY_LOW};
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_1080P, CamcorderProfile.QUALITY_720P, CamcorderProfile.QUALITY_480P, CamcorderProfile.QUALITY_CIF, CamcorderProfile.QUALITY_QCIF, CamcorderProfile.QUALITY_LOW};
    } else {
        profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_LOW};
    }
    for (final …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-mediacodec

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

检测服务崩溃

我有一项服务,与onStartCommand()此类似:

private User user;

@Override
public int onStartCommand(@Nullable final Intent intent, final int flags, final int startId) {
    if (user == null) {
        user = UserList.getInstance().getSpecialUser();
    }
    Assert.assertNotNull(user);

    //
    // Build notification here, seomehow based on user object
    //
    startForeground(42, notification);

    return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)

显然,我希望我的服务在前台运行,并尽可能长时间运行.

这很有效,直到我的应用程序崩溃到其网络类的深处.当发生时,是否显示应用程序崩溃对话框,用户确认它,重新创建整个应用程序,还重新创建服务,但UserList现在是空的,所以再次getSpecialUser()返回nullAssert重新启动应用程序.Android在主屏幕中放弃和用户结束.

有没有办法检测崩溃,这将使我能够更优雅地处理这种情况?

android android-service

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

如何更改appcompat自动完成弹出文本颜色?

我知道有很多问题和答案,但它们都不适合我.

我的风格和主题:

<style name="AnnaTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--
    Colors,
    and stuff
    -->
    <item name="android:dropDownItemStyle">@style/DropDownItemStyle</item>
    <item name="android:spinnerDropDownItemStyle">@style/DropDownItemStyle</item>
    <item name="spinnerDropDownItemStyle">@style/DropDownItemStyle</item>
</style>

<style name="DropDownItemStyle" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
    <item name="android:textColor">@android:color/black</item>
</style>
Run Code Online (Sandbox Code Playgroud)

但结果仍然如此:

白色下拉列表

布局是这样的:

<android.support.design.widget.TextInputLayout
    android:id="@+id/til_email"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

        <AutoCompleteTextView
            android:id="@+id/et_email"
            android:layout_width="@dimen/join_field_width"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            android:inputType="textEmailAddress"/>

</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

和适配器:

emailView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, Utils.getUniqueEmailsFromAccount(this)));
Run Code Online (Sandbox Code Playgroud)

你们能帮助我如何让文字变黑吗?

android android-theme android-styles

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

采集表中的源值是什么意思?

我在Android应用仪表板上的“获取”表中看到以下值:

  1. 谷歌播放
  2. (直接)
  3. 谷歌
  4. (没有设置)

有人可以告诉我他们之间有什么区别吗?例子是最好的!谢谢。

firebase-analytics

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

如何检测"最后"背压?

我有一个ActivityFragment,并有大量的交易,所以后退按钮最经常只是回滚Fragment transaction.但我需要检测最后一次背压.

我不能使用onPause方法,因为当用户按下home或开始另一个活动时我不想做任何事情.

android

3
推荐指数
1
解决办法
121
查看次数

如何检查docker pull是否真的拉了一些东西

I've the following script to update my Nextcloud:

#!/bin/bash

set -ex

docker pull nextcloud
docker rm -f nextcloud
docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud
docker image prune -f
Run Code Online (Sandbox Code Playgroud)

The problem is, that it creates new container even when there was noting new to pull.

How can I check, if the docker pull actually pulled something, or if my image is already up-to-date? The exit code of docker pull is 0 in both situations.

bash docker

3
推荐指数
1
解决办法
3940
查看次数

不区分大小写的时候

是否有可能在when String默认情况下使比较大小写不敏感?

when (subtype.toLowerCase()) {
    MessagingClient.RTC_SUBTYPE.sdp.toString().toLowerCase() -> onSDPMessageReceived(topic, sender, data!!)
    MessagingClient.RTC_SUBTYPE.bye.toString().toLowerCase() -> onRTCBYEMessageReceived(topic, sender)
    MessagingClient.RTC_SUBTYPE.negotiationOffer.toString().toLowerCase() -> onNegotiationOfferMessageReceived(sender, data!!)
}
Run Code Online (Sandbox Code Playgroud)

这有太多的重复代码!另外请注意,MessagingClient.RTC_SUBTYPEenum classsubtype在第一行是从一些客户端收到的,所以我们必须相应地对待它.

kotlin

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

如何删除所有指向给定值的键

让我们有以下(可变)映射:

1   -> A
45  -> A
88  -> R
98  -> X
105 -> A
Run Code Online (Sandbox Code Playgroud)

现在,我要删除所有指向的项目A。我想出了以下代码:

// Version 1
myMap.forEach { key, value -> if (value == "A") myMap.remove(key) }

// Version 2
with (myMap) {
    val filtered = filterValues { it != "A" }
    clear()
    putAll(filtered)
}
Run Code Online (Sandbox Code Playgroud)

但是不知何故似乎都不对。那么正确,最优雅的方法是什么?

kotlin

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

如何使吞噬异常的功能

inline fun <T> rest(request: () -> T): T = try {
    request()
} catch (e: HttpException) {
    val requestId = e.response().raw().request().header(REQUEST_ID_HEADER) 
    if (requestId != null) {
        Dialog(requestId, R.string.oops).show(fragmentManager, null)
    } else {
        throw e
    }
}
Run Code Online (Sandbox Code Playgroud)

它应该执行一些REST请求(在request参数中),如果失败,并且包含指定的HTTP标头,则显示带有该标头的对话框。

但是编译器抱怨Dialog,它不返回T,而是Unit。但这基本上就是我想要的!我怎样才能做到这一点?

我想到的一个解决方案是将函数的返回类型设置为T?return null,但是在Kotlin中这样做很脏

kotlin

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

如何重写私有方法

我正在扩展现有的 Java 类,它有一些私有方法。为了实现我想要的,我必须重写这个私有方法。

所以我读了一些关于 Java 反射的文章,并得出以下结论:

class CustomSlider : Slider() {
    init {
        Slider::class.java.getDeclaredMethod("drawTrack", Canvas::class.java, Int::class.java, Int::class.java).isAccessible = true
    }

    override fun drawTrack(canvas: Canvas, width: Int, top: Int) {
    }
}
Run Code Online (Sandbox Code Playgroud)

但在线上override,我收到一条错误消息,表明这是不可能的。

那么我该怎么做呢?

reflection kotlin

0
推荐指数
1
解决办法
3543
查看次数