2013-09-12 2 views
1

Я пытаюсь открыть камеру, как только я нажму кнопку, а затем отобразим захваченное изображение на экране, но ничего не происходит, когда я нажимаю кнопку . Камера не открывается. Ниже приведен код моя java-программа и соответствующий XML-файл.Цель камеры не работает

Мой класс:

package com.example.splashscreen; 

import java.io.IOException; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class CameraappActivity extends Activity implements View.OnClickListener{ 
    ImageButton imb1; 
    ImageView imv1; 
    Button b1; 
    final static int cameradata=1; 
    Bitmap bmp; 
    Intent i1; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.cameraapp); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.cameraapp, menu); 
     initialise(); 
     imb1.setOnClickListener(this); 
     b1.setOnClickListener(this); 
     return true; 
    } 

    private void initialise() { 
     // TODO Auto-generated method stub 
     imv1=(ImageView)findViewById(R.id.imview1); 
     imb1=(ImageButton)findViewById(R.id.imb2); 
     System.out.println("Hello"); 
     b1=(Button)findViewById(R.id.setw); 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()) 
     { 
     case R.id.imb2:i1=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     System.out.println("entered"); 
     startActivityForResult(i1, cameradata); 
      break; 
     case R.id.setw: 
      try{ 
      getApplicationContext().setWallpaper(bmp);} 
      catch(IOException e){ 
       e.printStackTrace(); 
      } 
      break; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     System.out.println("Hi1"); 
     if(resultCode==RESULT_OK) 
     { 
      System.out.println("Hi2"); 
      Bundle b1=data.getExtras(); 
      bmp=(Bitmap)b1.get("data"); 
      imv1.setImageBitmap(bmp); 
     } 

    } 


    } 

Мой XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".CameraappActivity" > 

    <ImageButton 
     android:id="@+id/imb2" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_above="@+id/setw" 
     android:layout_alignLeft="@+id/setw" 
     android:layout_marginBottom="24dp" 
     android:src="@drawable/sunset1" 
     android:contentDescription="Take picture"/> 

    <ImageView 
     android:id="@+id/imview1" 
     android:layout_width="200dp" 
     android:layout_height="300dp" 
     android:layout_above="@+id/imb2" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="96dp" 
     android:src="@drawable/ic_launcher" /> 

    <Button 
     android:id="@+id/setw" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="40dp" 
     android:text="@string/sew" /> 

</RelativeLayout> 
+0

Я надеюсь, что вы дали разрешение на использование камеры в манифесте! – Prachi

+0

Почему вы инициализировали свои кнопки в 'onCreateOptionsMenu'? –

+0

этот код работает отлично, я проверил, что только проблема просит андроида.permission.SET_WALLPAPER, чтобы установить изображение как wallpaper.even я не дал никакого разрешения камеры в манифесте, он работает нормально – Developer

ответ

0

Попробуйте это работает как шарм со мной

private String selectedImagePath = ""; 
    final private int PICK_IMAGE = 1; 
    final private int CAPTURE_IMAGE = 2; 

public Uri setImageUri() { 
     // Store image in dcim 
     File file = new File(Environment.getExternalStorageDirectory() + "/DCIM/", "image" + new Date().getTime() + ".png"); 
     Uri imgUri = Uri.fromFile(file); 
     this.imgPath = file.getAbsolutePath(); 
     return imgUri; 
    } 


    public String getImagePath() { 
     return imgPath; 
    } 

btnGallery.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setType("image/*"); 
       intent.setAction(Intent.ACTION_GET_CONTENT); 
       startActivityForResult(Intent.createChooser(intent, ""), PICK_IMAGE); 

      } 
     }); 

     btnCapture.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, setImageUri()); 
       startActivityForResult(intent, CAPTURE_IMAGE); 
      } 
     }); 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != Activity.RESULT_CANCELED) { 
      if (requestCode == PICK_IMAGE) { 
       selectedImagePath = getAbsolutePath(data.getData()); 
       imgUser.setImageBitmap(decodeFile(selectedImagePath)); 
      } else if (requestCode == CAPTURE_IMAGE) { 
       selectedImagePath = getImagePath(); 
       imgUser.setImageBitmap(decodeFile(selectedImagePath)); 
      } else { 
       super.onActivityResult(requestCode, resultCode, data); 
      } 
     } 

    } 


public Bitmap decodeFile(String path) { 
     try { 
      // Decode image size 
      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeFile(path, o); 
      // The new size we want to scale to 
      final int REQUIRED_SIZE = 70; 

      // Find the correct scale value. It should be the power of 2. 
      int scale = 1; 
      while (o.outWidth/scale/2 >= REQUIRED_SIZE && o.outHeight/scale/2 >= REQUIRED_SIZE) 
       scale *= 2; 

      // Decode with inSampleSize 
      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize = scale; 
      return BitmapFactory.decodeFile(path, o2); 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 
     return null; 

    } 

public String getAbsolutePath(Uri uri) { 
     String[] projection = { MediaColumns.DATA }; 
     @SuppressWarnings("deprecation") 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     if (cursor != null) { 
      int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else 
      return null; 
    } 
0

Вызов ваш метод инициализации в методе OnCreate, а не OncreateOptionsMenu, потому что прослушиватели кликов применяются только для них.

+0

Только что узнал мою ошибку --- Вызвали onclicklistener из метода createoptionsmenu ... Исправлено это .. отлично работающее – user2756707

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