- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试开发一个应用程序,用于在点击切换按钮时打开手电筒。我尝试了我在网上找到的所有方法,但在我的 nexus 5 中没有成功。唯一可用的应用程序是 cyanogenmod torch,但即使我采用该代码并将其写入我的应用程序,它也会创建一个通知,如果单击它会打开cyanogenmod torch 应用程序,而不是我的!这是个问题!!有没有可能有一个简单的代码也适用于 nexus 5?
public void turnOffFlashLight() {
try {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
cam.stopPreview();
cam.release();
cam = null;
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception throws in turning off flashlight.", Toast.LENGTH_SHORT).show();
}
}
public void turnOnFlashLight() {
try {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
cam = Camera.open();
cam.setPreviewTexture(new SurfaceTexture(0));
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception throws in turning on flashlight.", Toast.LENGTH_SHORT).show();
}
}
编辑:logcat
04-09 21:52:21.967: E/AndroidRuntime(5346): FATAL EXCEPTION: main
04-09 21:52:21.967: E/AndroidRuntime(5346): Process: com.lob.twixlight, PID: 5346
04-09 21:52:21.967: E/AndroidRuntime(5346): android.util.SuperNotCalledException: Activity {com.lob.twixlight/com.lob.twixlight.MainActivityTwixLight} did not call through to super.onStart()
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.Activity.performStart(Activity.java:5243)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.ActivityThread.access$800(ActivityThread.java:145)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.os.Handler.dispatchMessage(Handler.java:102)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.os.Looper.loop(Looper.java:136)
04-09 21:52:21.967: E/AndroidRuntime(5346): at android.app.ActivityThread.main(ActivityThread.java:5081)
04-09 21:52:21.967: E/AndroidRuntime(5346): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 21:52:21.967: E/AndroidRuntime(5346): at java.lang.reflect.Method.invoke(Method.java:515)
04-09 21:52:21.967: E/AndroidRuntime(5346): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
04-09 21:52:21.967: E/AndroidRuntime(5346): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
04-09 21:52:21.967: E/AndroidRuntime(5346): at dalvik.system.NativeStart.main(Native Method)
整个主要 Activity
public class MainActivity extends Activity implements Callback {
private ImageView imageView3;
private ImageButton mButtonOn;
private Camera cam;
private SurfaceHolder mHolder ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
new AlertDialog.Builder(this);
setContentView(R.layout.activity_main);
mButtonOn = (ImageButton) findViewById(R.id.my_button);
imageView3 = (ImageView) findViewById(R.id.imageView3);
SurfaceView preview = (SurfaceView)findViewById(R.id.PREVIEW);
mHolder = preview.getHolder();
mHolder.addCallback(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void info(View v) {
Intent intent = new Intent(this, FullscreenActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.in, R.anim.out);
}
protected void onStart() {
super.onStart ();
SurfaceView preview = (SurfaceView)findViewById(R.id.PREVIEW);
mHolder = preview.getHolder();
mHolder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mHolder = holder;
try {
Log.i("SurfaceHolder", "setting preview");
cam.setPreviewDisplay(mHolder);
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
cam.stopPreview();
mHolder = null;
}
}
最佳答案
好的,首先,确保您已经将表面 View 添加到您的 xml 布局中,在您的按钮之上:
<SurfaceView
android:id="@+id/PREVIEW"
android:layout_width="1dp"
android:layout_height="1dp"/>
//image button comes below
<ImageButton
android:id="@+id/my_button" />
现在,在您的 java 类中,实现 SurfaceHolder.Callback 接口(interface),例如:
public class MyFlashlight extends Activity implements Callback
这将自动生成三个回调方法:
surfaceChanged();
surfaceCreated();
surfaceDestroyed();
暂时保持原样。在你的 onStart();方法,添加以下内容:
SurfaceView preview = (SurfaceView)findViewById(R.id.PREVIEW);
SurfaceHolder mHolder = preview.getHolder();
mHolder.addCallback(this);
不要将它添加到 onCreate();因为它(onCreate();)只被调用一次,如果要重新启动 Activity ,它将导致问题。
在你的 turnOnFlash();方法,照常做:
//get parameters
//set parameters
//set flashmode
//start preview
在你的 surfaceCreated();方法,添加这个:
mHolder = holder;
try {
Log.i("SurfaceHolder", "setting preview");
camera.setPreviewDisplay(mHolder);
} catch (IOException e){
e.printStackTrace();
}
在你的 surfaceDestroyed();方法,停止预览:
camera.stopPreview();
mHolder = null;
离开surfaceChanged();空
就是这样!!!!试试吧!
这是一个完整的工作示例:
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MyFlashLight extends Activity implements Callback{
//flag to detect flash is on or off
private boolean isLighOn = false;
private Camera camera;
private Button button;
@Override
protected void onStart() {
super.onStart();
SurfaceView preview = (SurfaceView)findViewById(R.id.PREVIEW);
SurfaceHolder mHolder = preview.getHolder();
mHolder.addCallback(this);
}
}
@Override
protected void onStop() {
super.onStop();
if (camera != null) {
camera.release();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.buttonFlashlight);
Context context = this;
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
return;
}
camera = Camera.open();
final Parameters p = camera.getParameters();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (isLighOn) {
turnOffFlash();
} else {
turnOnFlash();
}
}
});
private void turnOnFlash(){
Log.i("info", "torch is turn on!");
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
isLighOn = true;
}
private void turnOffFlash(){
Log.i("info", "torch is turn off!");
p.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
isLighOn = false;
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){
}
@Override
public void surfaceCreated(SurfaceHolder holder){
mHolder = holder;
try {
Log.i("SurfaceHolder", "setting preview");
camera.setPreviewDisplay(mHolder);
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
Log.i("SurfaceHolder", "stopping preview");
camera.stopPreview();
mHolder = null;
}
}
关于java - Nexus 5 上的 Android 手电筒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22855494/
我想为这 4 台设备提供 2 种不同的布局。我希望 Nexus4 (1280x720) 和 Nexus7(1024x600) 使用 layoutA,而 NexusOne/NexusS(均为 800x4
我遇到了无法解决的问题。 我买了一个便宜的vps,用ubuntu 12.10然后安装了tomcat7、maven和nexus。所有这些都是最新的。这是一个全新的安装。我启动并部署了nexus,cata
我可以使用HTTP header 中的HTTP基本身份验证凭据从Sonatype Nexus下载文件。 但是我无法通过将凭据作为url的一部分来实现这一点-像这样: http://admin:admi
当我将 Nexus war 安装到我的 tomcat 服务器 Nexus 时,在 Win 主目录中创建其文件夹等。我想将此重定向到我的不同目录。 含义..我希望nexus将其存储库存储在用户定义的文件
在我的内部 Sonatype Nexus 中,存储库(例如 Codehaus 快照)的路由选项卡上写着 --- Publishing --- | Status: Not published |
我安装了 Sonatype Nexus,我有默认用户 admin/admin123。现在我将 Authenticating Realm 更改为 LDAP 并删除了 XML Authenticating
我使用的是 Sonatype Nexus OSS 3.2 版。谁能指导我如何自定义 Nexus 运行的端口? 我找不到任何配置文件来自定义端口和自定义上下文路径? 目前 Nexus 正在运行 http
我正在尝试通过 nexus 3 api 删除存储库中的一些组件 我已按照以下问题中的说明进行操作 Using the Nexus3 API how do I get a list of artifac
我使用 Nexus 3,我想删除我的旧版本。在 Nexus 2 中有一个名为 Remove Releases From Repository 的计划任务。 . Nexus 3 中似乎缺少此任务。 我们
如何在 Nexus 3 中获取特定存储库的大小? 例如,Artifactory 通过 UI 显示存储库“磁盘上的大小”。 Nexus有类似的东西吗?如果不是 - 我如何通过脚本获取此信息? 最佳答案
我有一个生成版本化构建工件的非 Java 项目,我想将其上传到 Nexus 存储库。由于该项目不是 Java,因此它不使用 Maven 进行构建。而且我不想引入 Maven/POM 文件只是为了将文件
我最近将我们的存储库服务器升级到 nexus-3.0.0-M5,我注意到它存在两个问题。 我创建的任何存储库(托管)都会陷入远程连接挂起状态,并且无论我做什么它都不会改变。 我已经有一个巨大的存储/索
我想将一组工件从一个 Nexus 移动到另一个(下载并稍后上传)。我只能一个一个下载神器, ¿有没有办法下载整个文件夹? ¿是否有任何其他类型的操作,如导出/导入? 谢谢! 编辑: 我可以访问用户文件
我正在从 Nexus2 迁移到 Nexus3,并尝试在此过程中进行一些清理。 我真的很想重命名我正在迁移的一些存储库,因为 repositoryID 不如存储库名称那么清晰。在 Nexus 3 中,r
我操作一些 Docker 服务。其中一些是使用 Dockerfiles 自制的。我现在想将它们存储到 Sonatype Nexus 私有(private)存储库中,以将它们发布到我网络中的另一台服务器
首先,我是 Nexus 的新手。因此,如果这是一个太菜鸟的问题,请多多包涵。让我首先解释一下我们当前的构建/部署过程是如何工作的。 我们目前的做法: 我们有一个基于 Maven 的项目。有一个父 PO
我下载了一个解压的 Sonatype Nexus OSS。但不知道如何安装它。有一个自述文件。所有教程都会过时。 nexus.exe没有消息就立即完成。没有日志出现。与 nexus.exe insta
在研究 CI 工具时,我发现许多 CI 安装也集成到 Artifactory 存储库,如 SonaType Nexus 和 JFrog Artifactory。 这些工具听起来与 Maven 高度集成
我们在一些磁盘空间有限的旧硬件上运行 nexus,并希望删除超过某个阈值的工件。 除了 find 和 curl 的组合之外,还有什么办法可以做到这一点吗? ? 最佳答案 有一个计划任务可以自动删除旧的
在 Nexus Repository Manager 2 中,您可以将服务器上已删除的 Assets /组件从 .trash-folder 移动到存储库,以恢复您可能已删除的任何内容。这是因为 Nex
我是一名优秀的程序员,十分优秀!