小编Dav*_*rra的帖子

Android - 从计时器线程更新位图

我有一个由一个带有ImageView的布局组成的Android项目.

public class MainActivity extends AppCompatActivity {

    /* original and stretched sized bitmaps */
    private Bitmap bitmapOriginal;
    private Bitmap bitmapStretched;

    /* the only view */
    private ImageView iv;

    ....
}
Run Code Online (Sandbox Code Playgroud)

此ImageView由此runnable函数更新

    runnable = new Runnable() {
        @Override
        public void run() {
            iv.setImageBitmap(bitmapStretched);
        }
    };
Run Code Online (Sandbox Code Playgroud)

runnable由一个临时JNI函数运行,在后台线程上运行,每秒调用60次.

public void jniTemporizedCallback(int buf[]) {

    /* set data to original sized bitmap */
    bitmapOriginal.setPixels(buf, 0, origWidth, 0, 0, origWidth, origHeight);

    /* calculate the stretched one */
    bitmapStretched = Bitmap.createScaledBitmap(bitmapOriginal, width, height, false);

    /* tell the …
Run Code Online (Sandbox Code Playgroud)

multithreading android opengl-es bitmap imageview

14
推荐指数
3
解决办法
1003
查看次数

奇怪的触摸行为

我偶然发现了一个仅在Galaxy S5 mini上出现的奇怪行为.

假设我的应用程序有两个图像视图(ivA和ivB),它们之间有一个小的空白区域

+------------+---+--------------+
|            |   |              |
| ivA        |   |  ivB         |
|            |   |              |
+------------+---+--------------+
Run Code Online (Sandbox Code Playgroud)

我已经为这两个设置了onTouchListener

    ivA.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {

            int action = event.getAction();
            int idx = event.getPointerId(event.getActionIndex());

            Log.i(TAG, "PRESSED ivA: " + action + " - IDX " + idx);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我做这些动作:

  • 用左手拇指我按下ivA(然后按住它)
  • 用右手拇指按ivB

我期待的是:

  • 在ivA(指针ID 0)上获取ACTION_DOWN事件,然后在ivB上获取ACTION_DOWN(指针ID 1)

我得到了什么:

  • 在ivA(指针ID 0)上获取ACTION_DOWN事件然后我在ivA上获得ACTION_MOVE事件(指针ID 0)

我想触摸屏驱动程序认为左手指向右移动而不是用第二根手指检测到第二次触摸.

在您看来,通过更新我的软件可以解决问题吗?

更新:我忘了说我试图扩大ivA和ivB之间的空白区域,它按预期工作.如果两次点击距离足够远,则驱动程序不会乱.

android touch

10
推荐指数
0
解决办法
248
查看次数

Android怪异的AudioTrack崩溃

我是一名Android App开发人员,我遇到了以下崩溃报告(我每天有5/6):

  native: pc 00000000000418e0  /system/lib/libc.so (tgkill+12)
  native: pc 0000000000040d59  /system/lib/libc.so (pthread_kill+32)
  native: pc 000000000001c7eb  /system/lib/libc.so (raise+10)
  native: pc 000000000001999d  /system/lib/libc.so (__libc_android_abort+34)
  native: pc 0000000000017550  /system/lib/libc.so (abort+4)
  native: pc 0000000000008d53  /system/lib/libcutils.so (__android_log_assert+86)
  native: pc 000000000006e2c3  /system/lib/libmedia.so (_ZN7android11ClientProxy13releaseBufferEPNS_5Proxy6BufferE+94)
  native: pc 000000000006c11d  /system/lib/libmedia.so (_ZN7android10AudioTrack13releaseBufferEPKNS0_6BufferE+112)
  native: pc 000000000006c987  /system/lib/libmedia.so (_ZN7android10AudioTrack18processAudioBufferEv+1350)
  native: pc 000000000006d7f3  /system/lib/libmedia.so (_ZN7android10AudioTrack16AudioTrackThread10threadLoopEv+194)
  native: pc 0000000000010079  /system/lib/libutils.so (_ZN7android6Thread11_threadLoopEPv+112)
  native: pc 000000000004065b  /system/lib/libc.so (_ZL15__pthread_startPv+30)
  native: pc 000000000001a021  /system/lib/libc.so (__start_thread+6)
Run Code Online (Sandbox Code Playgroud)

这些OpenSL函数在JNI世界中被调用.

这些都是存储在堆中的变量:

/* OpenSL ES audio stuff */
SLObjectItf …
Run Code Online (Sandbox Code Playgroud)

audio android opensl

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

Android:在黑暗模式下反转颜色

我在某些 Android 手机上使用某些图像视图时遇到问题。

似乎暗模式反转了某些资产的颜色(不是全部,似乎只有黑色/深灰色)

一个例子。

亮/正常模式下的图像(正确)

暗模式下的图像

我找不到避免这种情况的方法。是否有某种属性可以保护图像不被反转?

android android-darkmode

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

Qt QTextEdit添加虚假行

看看这一小块Qt代码

qDebug() << "CONTENT" << content;

QTextEdit *te = new QTextEdit(this);
te->setHtml(content);

qDebug() << "CONTENT AFTER " << te->toHtml();
Run Code Online (Sandbox Code Playgroud)

内容最初包含此HTML

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
    <head>
        <meta name=\"qrichtext\" content=\"1\" />
        <style type=\"text/css\"> p, li { white-space: pre-wrap; } </style>
    </head>
    <body style=\" font-family:'Calibri'; font-size:10pt; font-weight:400; font-style:normal;\">
        <p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">
            <span style=\" font-family:'Verdana'; color:#0b333c;\">MY TEXT</span>
        </p>
    </body>
</html>"
Run Code Online (Sandbox Code Playgroud)

......但输出te->toHtml()是......

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
    <head>
        <meta name=\"qrichtext\" content=\"1\" …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtextedit

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

eglCreateWindowSurface:native_window_api_connect失败

当清单文件中 android:hardwareAccelerated 设置为 false 时,我遇到的问题仅出现在最新的 Samsung Galaxy 系列中

据我所知(我自己尝试过),它会发生在 Galaxy S9、J6 和 Note 8 上,但不会发生在 Galaxy S8 上。其他手机似乎根本不受影响。

问题是我的 GLSurfaceView 不显示任何内容(黑屏),但如果我在活动之间切换,它会再次开始工作,我猜是因为它更新了视图而没有错误。

这是我发现的可疑日志行

01-13 14:39:47.813 25013 25080 E libEGL  : eglCreateWindowSurface: native_window_api_connect (win=0xc166b808) failed (0xffffffed) (already connected to another API?)
01-13 14:39:47.813 25013 25080 E libEGL  : eglCreateWindowSurface:679 error 3003 (EGL_BAD_ALLOC)
Run Code Online (Sandbox Code Playgroud)

这些是我的代码的关键部分:

GLSurf glsurf;

public void onPause() {
    super.onPause();

    // stop
    if (glsurf != null) {
        glsurf.onPause();
    }
}

@Override
public void onResume() {
    super.onResume();

    if (glsurf != null)
        glsurf.onResume(); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es egl

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

C反向shell问题

我需要设置一个反向shell,以便连接到通过GPRS调制解调器连接到互联网的设备.

当特殊情况发生时,我在具有固定IP的公共服务器上启动此命令

nc -l 65535
Run Code Online (Sandbox Code Playgroud)

那么我将使这个代码运行(现在我通过电缆直接连接到设备用于测试目的)(是的,在这种情况下,fork是无用的,但我将在最后的场景中需要它,所以我保持它)

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int reverse_shell()
{
    pid_t p = 0;

    /* fork */
    p = fork();

    if (p == 0)
    {
        char *shell[2];

        int i,fd;
        struct sockaddr_in sin;

        /* open socket */
        fd = socket(AF_INET, SOCK_STREAM, 0);
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = inet_addr("MY SERVER PUBLIC IP ADDRESS");
        sin.sin_port = htons(65535);

        /* connect! */
        connect(fd, (struct sockaddr *)&sin,sizeof(struct sockaddr_in));

        /* assign three first fd …
Run Code Online (Sandbox Code Playgroud)

c shell reverse scp

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