我正在尝试从Android相机读取焦距(照片中的主体距离).即使正确自动对焦,我的HTC Desire上的所有焦距仍然保持为0.这是整个应用程序,仅适用于v2.3.3及更高版本.
ImageCapture.java
package test.test;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
//THIS CLASS READS THE FOCUS DISTANCES
class ImageFocusCallback implements AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
//READ FOCUS DISTANCES HERE
Camera.Parameters parameters = camera.getParameters();
float[] distances = new float[3];
if (success) {
// Only available with Android 9 …Run Code Online (Sandbox Code Playgroud) 有人知道最近推出的谷歌浏览器和Android的原生浏览器之间是否有任何区别(在开发视角)?
我想知道是否有办法区分JavaScript脚本函数(function(){})和JavaScript本机函数(如Math.cos).
我已经知道了这个func.toString().indexOf('[native code]') != -1技巧,但我想知道是否有另一种方法来检测它.
context:
我需要创建一个No-op转发ES6代理,它可以处理对象上的本机函数但它失败了TypeError: Illegal invocation(参见使用ES6 Proxy和node.js的非法调用错误).
为了解决这个问题,我.bind()在getProxy 的处理程序中运行了所有函数,但如果我能有效地检测本机函数,我只需要.bind()这些本机函数.
更多详情:https://github.com/FranckFreiburger/module-invalidate/blob/master/index.js#L106
注意:
(function() {}).toString() -> "function () {}"
(function() {}).prototype -> {}
(require('os').cpus).toString() -> "function getCPUs() { [native code] }"
(require('os').cpus).prototype -> getCPUs {}
(Math.cos).toString() -> "function cos() { [native code] }"
(Math.cos).prototype -> undefined
(Promise.resolve().then).toString() -> "function then() { [native code] }"
(Promise.resolve().then).prototype -> undefined
Run Code Online (Sandbox Code Playgroud)
编辑:
目前,最好的解决方案是测试,!('prototype' …
我们没有使用任何本机代码,我们的应用程序也没有任何本机传递依赖.
在最近发布之后(我们更新了几个依赖项并添加新内容),我们开始在Google Play中看到这样的崩溃:
native: pc 000000000006a548 /system/lib64/libc.so (tgkill+8)
native: pc 0000000000067cd8 /system/lib64/libc.so (pthread_kill+68)
native: pc 0000000000024b78 /system/lib64/libc.so (raise+28)
native: pc 000000000001f318 /system/lib64/libc.so (abort+60)
native: pc 000000000043471c /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+324)
native: pc 0000000000137224 /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
native: pc 000000000030d988 /system/lib64/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+2080)
native: pc 000000000030df24 /system/lib64/libart.so (_ZN3art9JavaVMExt9JniAbortFEPKcS2_z+224)
native: pc 000000000034ec64 /system/lib64/libart.so (_ZN3art3JNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list+616)
native: pc 0000000000099094 /system/lib64/libandroid_runtime.so
native: pc 0000000002a71ac4 /system/framework/arm64/boot.oat
Run Code Online (Sandbox Code Playgroud)
我认为这只是Android本身,但可能是什么原因?任何帮助表示赞赏.
这个电话有什么意义吗?它是虚拟机的一些调用吗?
_ZN3art3JNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list
Run Code Online (Sandbox Code Playgroud) 例如,在旧的.NET Framework 2.0源代码(Windows窗体,Visual Studio 2005 - Whidbey)中,使用HandleRef定义了GetClientRect函数:
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern bool GetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect);
Run Code Online (Sandbox Code Playgroud)
在新的Windows API代码包(来自Microsoft,2009/2010)中,使用IntPtr定义了相同的函数:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetClientRect(IntPtr hwnd, ref CoreNativeMethods.RECT rect);
Run Code Online (Sandbox Code Playgroud)
实际上,HandleRef不用于任何Windows API Code Pack源文件,而是在旧.NET Framework源文件中的本机方法签名中大量使用.
我有一个简单的任务:
有没有可能写一个Delphi DLL并放一个.Net程序集(只有一个接口有4个方法和一个实现接口的类)除了它并从Delphi DLL调用它?
我的意思是,如果我为tlb创建一个tlb和一个delphi单元,而不注册Assembly/tlb,我可以直接从.Net程序集导入.Net类型(相对文件名)吗?
最好的,thalm
编辑(我找到了):
大多数解决方案必须为COM注册至少一个dll/tlb.但我发现最有希望的事情是:来自Robert Giesecke的Unmanaged Exports,它是一个Visual Studio项目模板,它允许你编写静态C#(或任何.Net语言)方法,并从任何非托管语言调用它们,真棒:
class Test
{
[DllExport("add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:它确实有效!你甚至可以控制编组类型,不可信!
我正在为我的程序编写一个UI,使用opengl和SDL结合使用Lua和C++
我现在需要的是一些库,它允许我调用一个函数,向用户显示用于打开/保存文件的文件选择对话框.但是如果操作系统为这样的对话提供了本机功能,那么我想使用该对话框(例如Window的GetOpenFileName).
我需要支持的唯一平台是Windows和Linux,但我希望能够仍然使用我已编写的大部分SDL和openGL代码.
有哪些选择?
我对Android平台上本机代码的限制有疑问.
基本上我已经开发了一个本机C代码库,它使用UDP套接字进行SIP/RTP,并使用OpenAL进行音频录制/回放 - 基本上是整个应用程序.我们的想法是尽可能使用本机C代码而不是Java代码.我想这样做是因为我将在其他平台上使用它.
我的问题很简单 - 是否可以只使用Java进行GUI,然后使用本机代码进行所有处理?当我的本机代码尝试创建套接字,绑定它,录制音频,播放它等时会发生什么 - 因为它是本机代码,我是否需要为它设置权限(例如应用程序访问麦克风和诸如此类)或将它只是绕过这个东西,因为它的本机代码?原生代码可以像在PC上那样在Android上做任何想做的事吗?
对不起,如果不清楚; 告诉我,我会尽力改进它
谢谢
我正在尝试从命令行运行单元测试.我尝试使用以下命令使用mstest.exe程序:
E:\VS Projects\...\>"C:\Program Files (x86)\Microsoft Visual Studio 11.0\
Common7\IDE\MSTest.exe" /testcontainer:mytest.dll
/testsettings:"E:\VS Projects\...\Local.testsettings"
Run Code Online (Sandbox Code Playgroud)
mstest程序响应是:
Microsoft (R) Test Execution Command Line Tool Version 11.0.50727.1
Copyright (c) Microsoft Corporation. All rights reserved.
Loading E:\VS Projects\...\Local.testsettings...
Loading mytest.dll...
mytest.dll
Unable to load the test container 'mytest.dll' or one of its
dependencies. If you build your test project assembly as a 64 bit assembly,
it cannot be loaded. When you build your test project assembly, select "Any
CPU" for the platform. To run your tests …Run Code Online (Sandbox Code Playgroud) 我已经安装了很多带有pip的库/模块/包,现在我无法区分python标准库本身的哪个,哪些不是.当我的代码在我的机器上运行时,这会导致问题,但在其他任何地方都不起作用.
如何检查我在代码中导入的模块/库/包是否来自python stdlib?
假设检查是在具有所有外部库/模块/包的机器上完成的,否则我可以简单地在没有它们的其他机器上进行try-except导入.
例如,我确信这些导入可以在我的机器上运行,但是当它在只有普通Python安装的机器上时,它会中断:
from bs4 import BeautifulSoup
import nltk
import PIL
import gensim
Run Code Online (Sandbox Code Playgroud)