我讨厌警告.我们的Android项目现在有151个,而且我确信在列表的某个地方有一个实际上警告我们免受潜在的麻烦.
这些警告中的一种是关于不推荐使用的字段和方法.这可能很有用,除了Manifest包含<uses-sdk android:minSdkVersion="10" />,并且这些警告只考虑了targetSDK android-17.
可以轻松地将这些警告静音 - @SuppressWarnings("deprecation")在违规行或整个方法之前添加注释.但这忽略了它的全部要点 - 如果/当我们决定改变时minSdkVersion="11",在10级弃用的API仍然不会出现,并且有人将不得不在我们所有的项目中查看所有注释,以找到必须的代码被重写.
是否有一些解决方案可以根据我的minSdkVersion管理这些警告?
似乎Mark在下面发布了一个有趣的答案,甚至提出了一个受我的问题启发的功能请求,但我不同意minSdkVersion的重要性.他希望看到@TargetApi(NN)基于目标API级别的弃用警告(很可能来自Lint,类似于注释).但我不同意这种方法.
考虑一个打开相机的简单应用程序.它可能想要检查预览帧速率.但是这种方法在API 9中已弃用,现在我们必须检查预览FPS范围.如果我们使用platforms/android-8/android.jar,Java编译器将不会显示弃用警告.
但即使应用程序在支持此类查询的设备上运行,它也不允许我们找到首选的视频分辨率.我们可能会在@TargetApi(11)那里添加注释,以确保应用程序是使用platforms/android-11/android.jar或更高版本构建的.
现在我们已经定位了Honeycomb及更高版本,将为getPreviewFrameRate()显示弃用警告,这正是困扰我的.有一段时间,我想象的应用程序必须支持一些Froyo设备,因此我别无选择,只能设置minSdkVersion=8并使用已弃用的方法.当然,我将在条件块中使用任何高级API,并且已经@TargetApi(NN)到位.幸运的是,对于Donut和更高版本,当检测到对不存在的方法或成员的调用时,类加载器不会崩溃,并且仅仅在if()中包装可疑调用就足够了.
那我该怎么办?添加getPreviewFrameRate()@SuppressWarnings("deprecation")调用来静音警告?改为添加?@SuppressDeprecation(8)
但在某些时候,我将决定与Froyo的向后兼容性不再重要.我设置<uses-sdk android:minSdkVersion="9" />了我的Manifest,但getPreviewFrameRate()的弃用警告仍被抑制......好吧,新方法肯定比现有的注释更好,因为grep -R "@SuppressDeprecation(8)"在Manifest中进行更改后,整个项目更容易.
但我更喜欢这里更紧密的集成:让Lint为我解析Manifest文件. …
我用以下代码录制mp4.但是在我录音的时候
1-是否可以以阵列数据或其他格式实时获取视频帧?
2-是否可以修改帧?例如,反转颜色并使其看起来是负面的.
public class MainActivity extends Activity implements OnClickListener, SurfaceHolder.Callback {
MediaRecorder recorder;
SurfaceHolder holder;
boolean recording = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
recorder = new MediaRecorder();
initRecorder();
setContentView(R.layout.activity_main);
SurfaceView cameraView = (SurfaceView) findViewById(R.id.surfaceView1);
holder = cameraView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
cameraView.setClickable(true);
cameraView.setOnClickListener(this);
}
private void initRecorder() {
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile cpHigh = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(cpHigh);
recorder.setOutputFile(Environment.getExternalStorageDirectory().getPath() + "/video.mp4");
recorder.setMaxDuration(50 * 1000); // 50 seconds
recorder.setMaxFileSize(5 * 1000000); // Approximately 5 megabytes
}
private …Run Code Online (Sandbox Code Playgroud) 我是Android开发的新手.我的问题是,我是否使用AsyncTask来发出HTTP GET请求(JSON响应)?它是否正确?如果确实如此,有谁知道我在哪里可以看到这样的例子?如果没有,你能纠正我吗?谢谢!
我想创建一个应用程序,它必须记录视频(使用媒体记录器)和录制的视频需要格式化(使用相机).
我创建了下面显示的示例代码,但是当从菜单按下startrecording按钮时显示错误.它显示强制关闭错误.但previewcallback没有错误.我的代码如下所示
package buffer.video;
import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
public class VofoVideoToBufferActivity extends Activity implements SurfaceHolder.Callback,
Camera.AutoFocusCallback {
private SurfaceView preview;
private SurfaceHolder previewHolder;
private MediaRecorder mRecorder;
private Camera mCamera;
private boolean mPreviewRunning = false;
private boolean mCaptureFrame = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("", "Begin onCreate");
setContentView(R.layout.main);
preview = (SurfaceView) findViewById(R.id.surfaceView1);
previewHolder …Run Code Online (Sandbox Code Playgroud) android-NDK是否支持直接摄像头访问?我的NDK文件夹中没有Camera.h.
我一直遇到app(使用java和C++以及OpenCV)的问题,这似乎与执行各种任务所花费的时间非常不一致.为了帮助诊断这个,我在java(被调用one_off_speed_test())中创建了一个函数,它只需要一个循环中的一系列整数数学问题,大约需要半秒钟,然后打印到日志所需的时间.如果我从内部重复调用此函数,onCreate()则每次调用所用的时间非常一致(+ = 3%),但如果我从内部调用它onCameraFrame(),则OpenCV在从相机准备好图像时调用的函数,则每个框架中进行数学测试所花费的时间因任何因素而异.我决定在eclipse/DDMS中尝试执行采样器,看看我是否可以解决发生的事情.我看到当我点击one_off_speed_test()它时,它列出了该功能的父母和孩子,以及一行说" (上下文切换) ".然后在该行上,在标有" Incl Real Time " 的列下,它显示"66%".现在我对使用DDMS并不是很专业,而且我对上下文切换只有一个朦胧的想法,但是到目前为止的描述中,看起来我的上下文切换问题需要花费很多时间吗?或者我误解了DDMS输出.

这是一个良好实践和智能解决方案的问题,我需要一个建议.
我有一个应用程序(据我在Stackoverflow和Google搜索中可以阅读):
第一个问题是,如果我在阅读Stackoverflow和Googled文章的观察中是对的吗?
第二个问题,解决问题的任何好建议?我需要一个建议
尝试从Android ICS中的本机代码开始使用相机:大多数手册都是指startPreview()方法.但是浏览AOSP代码我发现了' startRecording() '方法<Camera.h>.这里说它来自接口ICameraRecordingProxy" 允许录音机在录音期间接收视频帧 "
所以问题是 - 在性能方面,'startRecording'方法比'startPreview'更有效吗?
进入本机代码的唯一目标是性能,Java'Camera'太慢,OpenCV也不提供所需的FPS级别.
编辑:目标平台是:API级别= 17,设备Allwinner A31开发板,1280x720x30FPS.任务是从相机捕获帧,修改它们,编码(H264)并存储到SD卡.纯java MediaRecorder用1280x720x30写入mp4文件.不需要在屏幕上显示实时预览.
本机模式下的OpenCV-demo1提供1920x1080x2(在java模式下相同).具有空PreviewCallback最大FPS的简单Java方法是15.
先感谢您..
我得到的错误:
错误:对'__android_log_print'的未定义引用
我已将此行添加到我的.cpp文件中:
#include <android/log.h>
Run Code Online (Sandbox Code Playgroud)
我尝试过两种方法:__ android_log_print和__android_log_write
我还在我的Android.mk文件(我手动编译)中链接了日志库.
LOCAL_LDLIBS:= --llog
我也尝试了几种我认为的替代品:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
Run Code Online (Sandbox Code Playgroud)
这是我的Android.mk:
LOCAL_PATH := $(call my-dir)
#used to skip re-compiling libraw
#include $(CLEAR_VARS)
#LOCAL_MODULE := libraw_r
#LOCAL_SRC_FILES := ../obj/local/armeabi/libraw_r.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
#include $(PREBUILT_SHARED_LIBRARY)
#used for compiling libraw
include $(CLEAR_VARS)
LOCAL_CFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_CXXFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
LOCAL_MODULE := libraw_r # name of your module
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lstdc++ # libraries to link against, lstdc++ is auto-linked
LOCAL_SRC_FILES := internal/dcraw_common.cpp …Run Code Online (Sandbox Code Playgroud) java-native-interface android-ndk android-studio android-gradle-plugin
在这种情况下我需要某种显式同步吗?
class A {
let val: Int;
init(_ newVal: Int) {
val = newVal
}
}
public class B {
var a: A? = nil
public func setA() { a = A(0) }
public func hasA() -> Bool { return a != nil }
}
Run Code Online (Sandbox Code Playgroud)
B类中还有另一种方法:
public func resetA() {
guard hasA() else { return }
a = A(1)
}
Run Code Online (Sandbox Code Playgroud)
setA()并且resetA()可以从任何线程以任何顺序调用。
我知道可能存在竞争条件,如果同时一个线程调用setA()和另一个线程调用resetA(),则结果无法确定:val要么是0,要么是1,但我不在乎:无论如何,hasA()将返回 true,won'它吗?
如果 …