2014-05-28 2 views
2

Я хочу сделать приложение для Android, которое запускает видео в реальном времени, захваченное задней камерой в фоновом режиме. Я довольно новичок в Android-разработчике Android. Может кто-нибудь помочь.живая камера в фоновом режиме Android-приложения

+0

Я только начинаю изучать приложение, и это мой первый проект. Я не знал, с чего начать, поэтому я разместил вопрос. Я искал это, но это не помогло. просто дайте мне отправную точку или какой-либо справочный материал, пожалуйста, – Abhimanyu

+0

@Abhimanyu проверить мой ответ. вы можете использовать код как есть – mremremre1

ответ

2

То, что вы просите, довольно сложно, и его слишком много, чтобы начать андроид. Но вы можете использовать это и будете работать:

---- >>>> !!!! Я ПЕРЕСМОТРЕТЬ МОЙ ОТВЕТ. ТЕПЕРЬ ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТО КАК И БУДЕТ РАБОТАТЬ. < -----

package com.mreprogramming.test; 

import java.io.IOException; 

import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.content.Context; 
import android.hardware.Camera; 
import android.os.Bundle; 


public class CameraActivity extends Activity implements SurfaceHolder.Callback{ 

    protected static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 0; 
    private SurfaceView SurView; 
    private SurfaceHolder camHolder; 
    private boolean previewRunning; 
    final Context context = this; 
    public static Camera camera = null; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 


    SurView = (SurfaceView)findViewById(R.id.sview); 
    camHolder = SurView.getHolder(); 
    camHolder.addCallback(this); 
    camHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 


    } 


    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    if(previewRunning){ 
     camera.stopPreview(); 
    } 
    Camera.Parameters camParams = camera.getParameters(); 
    Camera.Size size = camParams.getSupportedPreviewSizes().get(0); 
    camParams.setPreviewSize(size.width, size.height); 
    camera.setParameters(camParams); 
    try{ 
     camera.setPreviewDisplay(holder); 
     camera.startPreview(); 
     previewRunning=true; 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
    try{ 
     camera=Camera.open(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    camera.stopPreview(); 
    camera.release(); 
    camera=null; 
    } 


} 

И для макета camera.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/lib/com.google.ads" 
android:id="@+id/camview"> 

<SurfaceView 
    android:id="@+id/sview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" /> 


</RelativeLayout> 

Удачи

включают Кроме того, это в манифесте

<uses-permission android:name="android.permission.CAMERA" /> 

Также в манифест добавить на вкладку активности CameraActivity следующее, чтобы убедиться, что ваша активность всегда будет i n, поскольку в противном случае телефон держит протрайт (вертикально), если вы не измените код, он изменит соотношение сторон изображения и сильно исказит его.

<activity 
    android:name="com.mreprogramming.test.CameraActivity" 
    android:label="@string/app_name" 
    android:screenOrientation="landscape" > <-------ADD THIS ---!!!!! 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Если вы хотите сделать макет полный экран это в вашем стилей XML

<resources> 

<!-- 
    Base application theme, dependent on API level. This theme is replaced 
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
--> 
<style name="AppBaseTheme" parent="android:Theme.NoTitleBar.Fullscreen"> 
    <!-- 
     Theme customizations available in newer API levels can go in 
     res/values-vXX/styles.xml, while customizations related to 
     backward-compatibility can go here. 
    --> 
</style> 

<!-- Application theme. --> 
<style name="AppTheme" parent="android:Theme.NoTitleBar.Fullscreen"> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

+0

Я понял, что мне нужно много изучать, прежде чем я смогу понять код, который вы дали. Большое спасибо в любом случае. Я посмотрю на это через некоторое время. – Abhimanyu

+0

Вместо того, чтобы CameraActivity реализовал SurfaceHolder.Callback, лучше обеспечить отдельную реализацию обратного вызова. См. Ответ ниже. Это связано с тем, что на моем устройстве Android вы получаете сообщение об ошибке, «приложение передало пустую поверхность». –

0

Вместо имея CameraActivity реализовать SurfaceHolder.Callback, то лучше, чтобы обеспечить отдельный Реализация обратного вызова вроде:

camHolder.addCallback(callback); 
    private SurfaceHolder.Callback callback = new Callback() { 
    public void surfaceCreated(SurfaceHolder holder) {} 

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 

    public void surfaceDestroyed(SurfaceHolder holder) {} 
} 

На моем Android-устройстве, Samsu ng S3, я получаю сообщение об ошибке «Приложение передало пустую поверхность» с тегом Camera, если обратный вызов не выполняется отдельно.

Смежные вопросы