{"id":925,"date":"2019-05-03T09:43:23","date_gmt":"2019-05-03T09:43:23","guid":{"rendered":"https:\/\/abhiandroid.com\/programming\/?page_id=925"},"modified":"2019-05-03T09:43:58","modified_gmt":"2019-05-03T09:43:58","slug":"camera","status":"publish","type":"page","link":"https:\/\/abhiandroid.com\/programming\/camera","title":{"rendered":"Camera Tutorial With Example In Android Studio [Step by Step]"},"content":{"rendered":"<p>In Android, Camera is a hardware device that allows capturing pictures and videos in your applications. Follow this tutorial to easily understand how to use a camera in your own Android App.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-955\" src=\"https:\/\/abhiandroid.com\/programming\/wp-content\/uploads\/2019\/05\/Camera-Tutorial-Example-In-Android-Studio.gif\" alt=\"Camera Tutorial Example In Android Studio\" width=\"278\" height=\"540\" \/><\/p>\n<p><strong>The Android framework provides the facility of working with Camera in two ways:<\/strong><\/p>\n<p>1.By using existing camera application<br \/>\n2.By using Camera Api<\/p>\n<h4><strong>#1 Using Camera By Using Camera Application<\/strong><\/h4>\n<p>We can capture pictures without using the instance of Camera class. Here you will use an intent action type of MediaStore.ACTION_IMAGE_CAPTURE to launch an existing Camera application on your phone. In Android MediaStore is a type of DataBase which stores pictures and videos in android.<\/p>\n<pre>Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);<\/pre>\n<h4><strong>#2 Using Camera By using Camera Api<\/strong><\/h4>\n<p>This class is used for controlling device cameras. It can be used to take pictures when you are building a camera application.<br \/>\n<strong>Camera API works in following ways:<\/strong><\/p>\n<p>1.<strong>Camera Manager<\/strong>: This is used to get all the cameras available in the device like front camera back camera each having the camera id.<\/p>\n<p>2.<strong>CameraDevice<\/strong>: You can get it from Camera Manager class by its id.<\/p>\n<p>3.<strong>CaptureRequest<\/strong>: You can create a capture request from camera device to capture images.<\/p>\n<p>4.<strong>CameraCaptureSession<\/strong>: To get capture request\u2019s from Camera Device create a CameraCaptureSession.<\/p>\n<p>5.<strong>CameraCaptureSession.CaptureCallback<\/strong>: This is going to provide the Capture session results.<\/p>\n<h4><strong>Camera Permission Declarations In Manifest<\/strong><\/h4>\n<p>First,\u00a0you should declare the Camera requirement in your Manifest file if Camera is compulsory for your application and you don\u2019t want your application to be installed on a device that does not support Camera.<\/p>\n<p>Before you start development on your application you have to make sure that your Manifest has appropriate declarations in it that will allow you to use Camera feature in your Application.<\/p>\n<pre>&lt;uses-permission android:name=\"android.permission.CAMERA\"\/&gt;<\/pre>\n<h4><strong>Camera Example in Android Studio By Using Camera Intent and storing the camera Image in Local DataBase<\/strong><\/h4>\n<p>In this Camera in Android example, I will show you how to capture the image from device camera using Intent and store that camera image in the local database and display a toast when an image is stored successfully or when some error occurred while storing an image.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-955\" src=\"https:\/\/abhiandroid.com\/programming\/wp-content\/uploads\/2019\/05\/Camera-Tutorial-Example-In-Android-Studio.gif\" alt=\"Camera Tutorial Example In Android Studio\" width=\"278\" height=\"540\" \/><\/p>\n<p>Below you can download code, see final output and step by step explanation of example:<\/p>\n<p style=\"text-align: center;\"><a class=\"download\" href=\"https:\/\/github.com\/yasmeenagulzar\/CameraCode.git\" target=\"_blank\" rel=\"nofollow\">Download Camera Example in Android Code From Github<\/a><\/p>\n<p><strong>Step 1<\/strong>: Create a new project in Android Studio and name it CameraCodeExample<\/p>\n<p><strong>Step 2<\/strong>:Open res -&gt; layout -&gt; xml or (activity_main.xml) and add following code<br \/>\nHere I have used frame layout to load my fragments.<\/p>\n<pre>&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n   android:orientation=\"vertical\"\r\n   android:layout_width=\"fill_parent\"\r\n   android:layout_height=\"fill_parent\"&gt;\r\n&lt;FrameLayout\r\n       android:id=\"@+id\/frameLayout\"\r\n       android:layout_width=\"match_parent\"\r\n       android:layout_height=\"match_parent\"\/&gt;\r\n&lt;\/RelativeLayout&gt;\r\n<\/pre>\n<p><strong>Step 3<\/strong>: Open src -&gt; package -&gt; MainActivity.java<br \/>\nHere I am loading my default fragment into frame layout in MainActivity:<\/p>\n<pre>import android.Manifest;\r\nimport android.app.Activity;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.graphics.Bitmap;\r\nimport android.os.Build;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.annotation.RequiresApi;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v4.app.FragmentTransaction;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.FrameLayout;\r\nimport android.widget.ImageView;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\nimport com.example.cameracodeexample.Fragments.CameraFragment;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n   FrameLayout frameLayout;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_main);\r\n\r\n       loadFragment(new CameraFragment(), false);\r\n\r\n   }\r\n\r\n   public void loadFragment(Fragment fragment, Boolean bool) {\r\n       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r\n       transaction.replace(R.id.frameLayout, fragment);\r\n       if (bool)\r\n           transaction.addToBackStack(null);\r\n       transaction.commit();\r\n   }\r\n\r\n}\r\n<\/pre>\n<p><strong>Step 4<\/strong>:Open res -&gt; layout -&gt; xml or (camera_fragment.xml)<br \/>\nHere I have used two TextViews, on the one you can click an image and save it to DataBase and another is used to view that stored image.<\/p>\n<pre>&lt;TextView\r\n   android:id=\"@+id\/text\"\r\n   android:layout_width=\"match_parent\"\r\n   android:layout_height=\"wrap_content\"\r\n   android:text=\"Save Image\"\r\n   android:layout_gravity=\"center\"\r\n   android:layout_margin=\"@dimen\/_12sdp\"\r\n   android:textSize=\"@dimen\/_18sdp\"\r\n   android:textAlignment=\"center\"\r\n   android:background=\"#EBEBEB\"\/&gt;\r\nTextView\r\n   &lt;android:id=\"@+id\/text1\"\r\n   android:layout_width=\"match_parent\"\r\n   android:layout_height=\"wrap_content\"\r\n   android:text=\"View Image\"\r\n   android:layout_gravity=\"center\"\r\n   android:layout_margin=\"@dimen\/_12sdp\"\r\n   android:textSize=\"@dimen\/_18sdp\"\r\n   android:textAlignment=\"center\"\r\n   android:background=\"#EBEBEB\"\r\n   android:layout_below=\"@id\/text\"\/&gt;\r\n<\/pre>\n<p><strong>Step 5:<\/strong> Now I will explain the methods used In CameraFragment:<\/p>\n<p><strong>Checking Camera Permissions:<\/strong><\/p>\n<p>For the first we have used the Function requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);<br \/>\nWe will check whether the user has given permissions or not if not then first we will ask the user for permissions if a user is using Android version above Android Marshmallow(API 23) because From Android Marshmallow(API 23) and above by default all dangerous permission disabled. When the App opens for the first time after installation then you have to grant permissions. But if the android version is below Marshmallow then this function won\u2019t be called.<\/p>\n<pre>requestPermissions(newString[]{Manifest.permission.CAMERA},MY_CAMERA_PERMISSION_CODE)<\/pre>\n<p><strong>startActivityForResult(cameraIntent, CAMERA_REQUEST) Method:<\/strong><\/p>\n<p>Now we will call Function startActivityForResult(cameraIntent, CAMERA_REQUEST);<br \/>\nWhen you start an activity for the result, it request Camera to take a photo then return it to your calling activity, you pass it a unique integer value or anything you have not used already in that class. The requestCode helps you to identify from which Intent you came back.<br \/>\nSo, that CAMERA_REQUEST could be any value you define in your class like this:<\/p>\n<pre>private static final int CAMERA_REQUEST = 1888<\/pre>\n<pre> \r\n@Override\r\npublic void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {\r\n   if (requestCode == CAMERA_REQUEST &amp;&amp; resultCode == Activity.RESULT_OK)\r\n   {\r\n      theImage = (Bitmap) data.getExtras().get(\"data\");\r\n     photo=getEncodedString(theImage);\r\n           setDataToDataBase();\r\n   }\r\n}\r\n<\/pre>\n<p><strong>getEncodedString(Bitmap bitmap) Method:<\/strong><\/p>\n<p>Since now I am able to click an image from the camera but that image is in the form of Bitmap but I want to store it as a string in the database, so I am going to encode it using ByteArrayOutputStream Class. This Class holds a copy of data and forwards it to multiple streams.<\/p>\n<pre>private String getEncodedString(Bitmap bitmap){\r\n\r\n   ByteArrayOutputStream os = new ByteArrayOutputStream();\r\n\r\n          bitmap.compress(Bitmap.CompressFormat.JPEG,100, os);\r\n\r\n  \/* or use below if you want 32 bit images\r\n\r\n   bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);*\/\r\n\r\n   byte[] imageArr = os.toByteArray();\r\n\r\n   return Base64.encodeToString(imageArr, Base64.URL_SAFE);\r\n\r\n}\r\n<\/pre>\n<p><strong>setDataToDataBase() Method:<\/strong><\/p>\n<p>Now I am storing data(Image) to a database(here I have used SQLite). Here the ContentValue class helps to put information inside an object in the form of Key-Value pairs for columns. To Insert or Update your WritableDatabase The object can then be passed to an instance of the SQLiteDatabase class.<\/p>\n<pre>private void setDataToDataBase() {\r\n       db = databaseHandler.getWritableDatabase();\r\n       ContentValues cv = new ContentValues();\r\n       cv.put(databaseHandler.KEY_IMG_URL,photo);\r\n\r\n       long id = db.insert(databaseHandler.TABLE_NAME, null, cv);\r\n       if (id &lt; 0) {\r\n           Toast.makeText(getContext(), \"Something went wrong. Please try again later...\", Toast.LENGTH_LONG).show();\r\n       } else {\r\n           Toast.makeText(getContext(), \"Add successful\", Toast.LENGTH_LONG).show();\r\n       }\r\n   }\r\n<\/pre>\n<p><strong>Step 6<\/strong> :Open src -&gt; package -&gt; CameraFragment.java<\/p>\n<p>In this step we open CameraFragment and add the code to initiate the camera here we perform a set of operation to click a picture from camera and store that in database<\/p>\n<pre>import android.Manifest;\r\nimport android.app.Activity;\r\nimport android.content.ContentValues;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.graphics.Bitmap;\r\nimport android.os.Build;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.annotation.RequiresApi;\r\nimport android.support.v4.app.Fragment;\r\nimport android.util.Base64;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\nimport com.example.cameracodeexample.MainActivity;\r\nimport com.example.cameracodeexample.R;\r\nimport com.example.cameracodeexample.utils.DataBaseHandler;\r\nimport java.io.ByteArrayOutputStream;\r\n\r\npublic class CameraFragment extends Fragment {\r\n   private static final int CAMERA_REQUEST = 1888;\r\n   TextView text,text1;\r\n   private static final int MY_CAMERA_PERMISSION_CODE = 100;\r\n   \/\/Bitmap photo;\r\n   String photo;\r\n   DataBaseHandler databaseHandler;\r\n   private SQLiteDatabase db;\r\n   Bitmap theImage;\r\n   @Nullable\r\n   @Override\r\n   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n      View view = inflater.inflate(R.layout.camera_fragment,container,false);\r\n\r\n\r\n      \/\/ imageView =view. findViewById(R.id.imageView1);\r\n       text = view.findViewById(R.id.text);\r\n       text1 = view.findViewById(R.id.text1);\r\n       databaseHandler = new DataBaseHandler(getContext());\r\n       text.setOnClickListener(new View.OnClickListener() {\r\n           @RequiresApi(api = Build.VERSION_CODES.M)\r\n           @Override\r\n           public void onClick(View v) {\r\n               if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)\r\n               {\r\n                   requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);\r\n               }\r\n               else\r\n               {\r\n                   Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);\r\n                   startActivityForResult(cameraIntent, CAMERA_REQUEST);\r\n               }\r\n           }\r\n       });\r\n\r\n       text1.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               ((MainActivity) getActivity()).loadFragment(new LocalFragment(), true);\r\n           }\r\n       });\r\n      return view;\r\n   }\r\n\r\n   private void setDataToDataBase() {\r\n       db = databaseHandler.getWritableDatabase();\r\n       ContentValues cv = new ContentValues();\r\n       cv.put(databaseHandler.KEY_IMG_URL,photo);\r\n\r\n       long id = db.insert(databaseHandler.TABLE_NAME, null, cv);\r\n       if (id &lt; 0) {\r\n           Toast.makeText(getContext(), \"Something went wrong. Please try again later...\", Toast.LENGTH_LONG).show();\r\n       } else {\r\n           Toast.makeText(getContext(), \"Add successful\", Toast.LENGTH_LONG).show();\r\n       }\r\n   }\r\n\r\n   \/**\r\n    * Reuqesting for premissons\r\n    * @param requestCode\r\n    * @param permissions\r\n    * @param grantResults\r\n    *\/\r\n\r\n   @Override\r\n   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {\r\n       super.onRequestPermissionsResult(requestCode, permissions, grantResults);\r\n       if (requestCode == MY_CAMERA_PERMISSION_CODE)\r\n       {\r\n           if (grantResults[0] == PackageManager.PERMISSION_GRANTED)\r\n           {\r\n               Toast.makeText(getActivity(), \"camera permission granted\", Toast.LENGTH_LONG).show();\r\n               Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);\r\n               startActivityForResult(cameraIntent, CAMERA_REQUEST);\r\n           }\r\n           else\r\n           {\r\n               Toast.makeText(getActivity(), \"camera permission denied\", Toast.LENGTH_LONG).show();\r\n           }\r\n       }\r\n   }\r\n\r\n   \/**\r\n    * Start an activity for result\r\n    * @param requestCode\r\n    * @param resultCode\r\n    * @param data\r\n    *\/\r\n\r\n   @Override\r\n   public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {\r\n       if (requestCode == CAMERA_REQUEST &amp;&amp; resultCode == Activity.RESULT_OK)\r\n       {\r\n          theImage = (Bitmap) data.getExtras().get(\"data\");\r\n          photo=getEncodedString(theImage);\r\n          setDataToDataBase();\r\n       }\r\n   }\r\n\r\n\r\n   private String getEncodedString(Bitmap bitmap){\r\n\r\n              ByteArrayOutputStream os = new ByteArrayOutputStream();\r\n\r\n              bitmap.compress(Bitmap.CompressFormat.JPEG,100, os);\r\n\r\n      \/* or use below if you want 32 bit images\r\n\r\n       bitmap.compress(Bitmap.CompressFormat.PNG, (0\u2013100 compression), os);*\/\r\n       byte[] imageArr = os.toByteArray();\r\n       return Base64.encodeToString(imageArr, Base64.URL_SAFE);\r\n\r\n   }\r\n}\r\n<\/pre>\n<p><strong>Step 7<\/strong>: Open src -&gt; package -&gt; DataBaseHandler Class.java<\/p>\n<p>Here we define Schema i.e. DataBase name, version, table names, and column names. As this class extends SQLiteOpenHelper it says to implement two methods<br \/>\n1.onCreate() -this method is called by the framework, if the database has not been created yet but only accessed.<br \/>\n2.onUpgrade() &#8211; This method is called if you want to add something in database then you have to upgrade your database version. This method helps to update the current database schema or to drop the table or recreate it in via on Create method.<br \/>\nMethod public void deleteEntry(long row)-This Method is used to delete an entry in DataBase based on uid.<\/p>\n<pre>import android.content.Context;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.database.sqlite.SQLiteOpenHelper;\r\n\r\n\r\npublic class DataBaseHandler extends SQLiteOpenHelper {\r\n   public Context context;\r\n   public static final String DATABASE_NAME = \"dataManager\";\r\n\r\n   public static final int DATABASE_VERSION = 1;\r\n   public static final String TABLE_NAME = \"data\";\r\n   public static final String KEY_ID = \"id\";\r\n   public static final String KEY_IMG_URL = \"ImgFavourite\";\r\n\r\n   public DataBaseHandler(Context context) {\r\n       super(context, DATABASE_NAME, null, DATABASE_VERSION);\r\n       this.context = context;\r\n       \/\/Toast.makeText(context, \"Constructor called\", Toast.LENGTH_LONG).show();\r\n   }\r\n\r\n   public static final String CREATE_TABLE = \"CREATE TABLE \" + TABLE_NAME + \"(\" + KEY_ID +\r\n           \" INTEGER PRIMARY KEY AUTOINCREMENT,\" + KEY_IMG_URL + \" TEXT\" + \")\";\r\n   public static final String DROP_TABLE = \"DROP TABLE IF EXISTS \" + TABLE_NAME + \"\";\r\n\r\n   @Override\r\n   public void onCreate(SQLiteDatabase db) {\r\n       db.execSQL(CREATE_TABLE);\r\n   }\r\n\r\n   @Override\r\n   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r\n       db.execSQL(DROP_TABLE);\r\n       onCreate(db);\r\n   }\r\n\r\n   public void deleteEntry(long row) {\r\n       SQLiteDatabase sqLiteDatabase = getWritableDatabase();\r\n       sqLiteDatabase.delete(TABLE_NAME, KEY_ID + \"=\" + row, null);\r\n   }\r\n\r\n}\r\n<\/pre>\n<p><strong>Step 8<\/strong>:Open res -&gt; layout -&gt; xml or (local_fragment.xml)<br \/>\nIn this fragment, I have used Recycler view to show the data stored In the DataBase.<\/p>\n<p><strong>Local_fragment.xml<\/strong><\/p>\n<pre>&lt;LinearLayout\r\n   xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n   xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n   android:layout_width=\"match_parent\"\r\n   android:layout_height=\"match_parent\"\r\n   android:orientation=\"vertical\"\r\n   android:background=\"@color\/color_white\"\/&gt;\r\n&lt;android.support.v7.widget.RecyclerView\r\n       android:id=\"@+id\/recyclerview\"\r\n       android:layout_width=\"match_parent\"\r\n       android:layout_height=\"wrap_content\"\r\n       android:layout_marginTop=\"@dimen\/_5sdp\"\r\n       android:background=\"@color\/color_white\"\r\n       android:padding=\"3dp\"\r\n       android:scrollbars=\"none\"\/&gt;\r\n&lt;\/LinearLayout&gt;\r\n<\/pre>\n<p><strong>Step 8<\/strong>:Open src -&gt; package -&gt; LocalResponse.java<\/p>\n<p>This is the model class that populates the data in adapter here String represents the encoded String(image) that was saved in the database and int represents the respective data that we will be populating.<\/p>\n<pre>public class LocalResponse {\r\n   String image;\r\n   int uid;\r\n\r\n   public int getUid() {\r\n       return uid;\r\n   }\r\n\r\n   public void setUid(int uid) {\r\n       this.uid = uid;\r\n   }\r\n\r\n   public String getImage() {\r\n       return image;\r\n   }\r\n\r\n   public void setImage(String image) {\r\n       this.image = image;\r\n   }\r\n\r\n   public LocalResponse(String image, int uid) {\r\n       this.image = image;\r\n       this.uid = uid;\r\n   }\r\n}\r\n<\/pre>\n<p><strong>Step 9<\/strong>:Open src -&gt; package -&gt; LocalFragment.java<\/p>\n<p>In this fragment, I am getting the data out of the database using cursor. The cursor is an interface that contains the result set of Query made against DataBase in android. When we retrieve some data then the database will first create the Cursor object the pointer of this object id is pointing to 0th position. So with the help of Cursor, we are getting data out of database Since the cursor object points to the 0th index we will check it for till cursor is moving to next cursor.moveToNext() to get the next data out of DataBase after 0th position.<\/p>\n<pre>import android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v7.widget.LinearLayoutManager;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport com.example.cameracodeexample.utils.DataBaseHandler;\r\nimport com.example.cameracodeexample.utils.LocalDataBaseAdapter;\r\nimport com.example.cameracodeexample.utils.LocalResponse;\r\nimport java.util.ArrayList;\r\n\r\npublic class LocalFragment extends Fragment {\r\n   RecyclerView recyclerView;\r\n   private DataBaseHandler myDatabase;\r\n   private SQLiteDatabase db;\r\n   private ArrayList singleRowArrayList;\r\n   private LocalResponse singleRow;\r\n   String image;\r\n   int uid;\r\n   Cursor cursor;\r\n\r\n   @Nullable\r\n   @Override\r\n   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n       View view = inflater.inflate(R.layout.local_fragment,container,false);\r\n       recyclerView = view.findViewById(R.id.recyclerview);\r\n       myDatabase = new DataBaseHandler(getContext());\r\n       db = myDatabase.getWritableDatabase();\r\n       setData();\r\n       return view;\r\n   }\r\n\r\n   private void setData() {\r\n       db = myDatabase.getWritableDatabase();\r\n       RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());\r\n       recyclerView.setLayoutManager(layoutManager);\r\n       singleRowArrayList = new ArrayList&lt;&gt;();\r\n       String[] columns = {DataBaseHandler.KEY_ID, DataBaseHandler.KEY_IMG_URL};\r\n       cursor = db.query(DataBaseHandler.TABLE_NAME, columns, null, null, null, null, null);\r\n       while (cursor.moveToNext()) {\r\n\r\n           int index1 = cursor.getColumnIndex(DataBaseHandler.KEY_ID);\r\n           int index2 = cursor.getColumnIndex(DataBaseHandler.KEY_IMG_URL);\r\n\r\n           uid = cursor.getInt(index1);\r\n           image = cursor.getString(index2);\r\n\r\n           singleRow = new LocalResponse(image,uid);\r\n           singleRowArrayList.add(singleRow);\r\n       }\r\n       if (singleRowArrayList.size()==0){\r\n           \/\/empty.setVisibility(View.VISIBLE);\r\n           recyclerView.setVisibility(View.GONE);\r\n       }else {\r\n           LocalDataBaseAdapter localDataBaseResponse = new LocalDataBaseAdapter(getContext(), singleRowArrayList, db, myDatabase);\r\n           recyclerView.setAdapter(localDataBaseResponse);\r\n       }\r\n\r\n\r\n   }\r\n}\r\n<\/pre>\n<p><strong>Step 10<\/strong>: Open res -&gt; layout -&gt; xml or (<strong>Local_database_items.xml<\/strong>)<\/p>\n<p>This is how the Local DataBase RecyclerView Items is going to look like here i have used a CardView in which i have used ImageView to show an image and we have also Used one more ImageView on click of which your image will be deleted from DataBase.<\/p>\n<pre>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n   android:layout_width=\"match_parent\"\r\n   android:layout_height=\"match_parent\"\r\n   xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n   android:orientation=\"vertical\"&gt;\r\n&lt;android.support.v7.widget.CardView xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n       android:id=\"@+id\/cardView\"\r\n       android:layout_width=\"match_parent\"\r\n       android:layout_height=\"120dp\"\r\n       android:layout_margin=\"5dp\"\r\n       android:background=\"?attr\/selectableItemBackground\"\r\n       android:clickable=\"true\"\r\n       android:elevation=\"5dp\"\r\n       android:focusable=\"true\"\r\n       android:foreground=\"?android:attr\/selectableItemBackground\"\r\n       app:cardCornerRadius=\"5dp\"\r\n       android:visibility=\"visible\"&gt;\r\n&lt;RelativeLayout\r\n           android:layout_width=\"match_parent\"\r\n           android:layout_height=\"120dp\"\r\n           android:background=\"@color\/color_white\"&gt;\r\n&lt;ImageView\r\n               android:id=\"@+id\/newsImage\"\r\n               android:layout_width=\"match_parent\"\r\n               android:layout_height=\"match_parent\"\r\n               android:scaleType=\"centerCrop\"\/&gt;\r\n&lt;ImageView\r\n               android:id=\"@+id\/delete\"\r\n               android:layout_width=\"wrap_content\"\r\n               android:layout_height=\"@dimen\/_35sdp\"\r\n               android:layout_alignParentRight=\"true\"\r\n               android:padding=\"@dimen\/_4sdp\"\r\n               android:src=\"@drawable\/delete_icon\"\r\n               android:tint=\"#C7C7C7\"\/&gt;\r\n\r\n&lt;\/RelativeLayout&gt;\r\n&lt;\/android.support.v7.widget.CardView&gt;\r\n&lt;\/LinearLayout&gt;\r\n<\/pre>\n<p><strong>Step 11<\/strong>: Open src -&gt; package -&gt; LocalDataBaseAdapter.java<\/p>\n<p>Here I have used two methods one is getBitmapFromEncodedString(String encodedString) used to decode Base64 class into byte array and then we use this byte array to convert Bitmap decodedByte. Second is deletedata(final int position, final ArrayList singleRowArrayList) this method is used to delete data from a particular position in the DataBase. We can delete selected rows from the database by using the WHERE clause with DELETE query, otherwise, all the records would be deleted.<\/p>\n<pre>import android.content.Context;\r\nimport android.content.DialogInterface;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.v7.app.AlertDialog;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.util.Base64;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.ImageView;\r\nimport com.squareup.picasso.Picasso;\r\n\r\nimport java.util.ArrayList;\r\n\r\npublic class LocalDataBaseAdapter extends RecyclerView.Adapter {\r\n   Context context;\r\n   ArrayList singleRowArrayList;\r\n   SQLiteDatabase db;\r\n   DataBaseHandler myDatabase;\r\n   public LocalDataBaseAdapter(Context context, ArrayList singleRowArrayList, SQLiteDatabase db, DataBaseHandler myDatabase) {\r\n       this.context = context;\r\n       this.singleRowArrayList = singleRowArrayList;\r\n       this.db = db;\r\n       this.myDatabase = myDatabase;\r\n   }\r\n\r\n   @NonNull\r\n   @Override\r\n   public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {\r\n       View view = LayoutInflater.from(context).inflate(R.layout.local_database_items, null);\r\n       MyViewHolder myViewHolder = new MyViewHolder(view);\r\n       return myViewHolder;\r\n   }\r\n\r\n   @Override\r\n   public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {\r\n       myViewHolder.newsImage.setImageBitmap(getBitmapFromEncodedString(singleRowArrayList.get(i).image));\r\n       myViewHolder.delete.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               deletedata(i,singleRowArrayList);\r\n           }\r\n       });\r\n   }\r\n\r\n   @Override\r\n   public int getItemCount() {\r\n       return singleRowArrayList.size();\r\n   }\r\n\r\n   class MyViewHolder extends RecyclerView.ViewHolder {\r\n       ImageView newsImage,delete;\r\n\r\n       public MyViewHolder(@NonNull View itemView) {\r\n           super(itemView);\r\n           newsImage = (ImageView) itemView.findViewById(R.id.newsImage);\r\n           delete = (ImageView) itemView.findViewById(R.id.delete);\r\n       }\r\n   }\r\n\r\n   public void deletedata(final int position, final ArrayList singleRowArrayList){\r\n       new AlertDialog.Builder(context)\r\n               .setIcon(R.drawable.defaultimage)\r\n               .setTitle(\"Delete result\")\r\n               .setMessage(\"Are you sure you want delete this result?\")\r\n               .setPositiveButton(\"Yes\", new DialogInterface.OnClickListener() {\r\n                   @Override\r\n                   public void onClick(DialogInterface dialog, int which) {\r\n                       \/* This is where deletions should be handled *\/\r\n                       myDatabase.deleteEntry(singleRowArrayList.get(position).getUid());\r\n                       singleRowArrayList.remove(position);\r\n                       notifyItemRemoved(position);\r\n                       notifyDataSetChanged();\r\n                       myDatabase.close();\r\n                       \/\/((MainActivity) context).loadFragment(new LocalFragment(), true);\r\n\r\n                   }\r\n\r\n               })\r\n               .setNegativeButton(\"No\", null)\r\n               .show();\r\n   }\r\n\r\n   private Bitmap getBitmapFromEncodedString(String encodedString){\r\n\r\n       byte[] arr = Base64.decode(encodedString, Base64.URL_SAFE);\r\n\r\n       Bitmap img = BitmapFactory.decodeByteArray(arr, 0, arr.length);\r\n\r\n       return img;\r\n\r\n   }\r\n}\r\n<\/pre>\n<p><strong>Output<\/strong>:<\/p>\n<p>Now run the App and you will be able to click the image with your device by clicking on SaveImage and you will able to see them later by clicking on ViewImage another you can also delete the images that you don&#8217;t want to store.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-955\" src=\"https:\/\/abhiandroid.com\/programming\/wp-content\/uploads\/2019\/05\/Camera-Tutorial-Example-In-Android-Studio.gif\" alt=\"Camera Tutorial Example In Android Studio\" width=\"278\" height=\"540\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Android, Camera is a hardware device that allows capturing pictures and videos in your applications. Follow this tutorial to easily understand how to use a camera in your own Android App. The Android framework provides the facility of working with Camera in two ways: 1.By using existing camera application 2.By using Camera Api #1 &hellip; <a href=\"https:\/\/abhiandroid.com\/programming\/camera\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Camera Tutorial With Example In Android Studio [Step by Step]<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"home.php","meta":{"footnotes":""},"class_list":["post-925","page","type-page","status-publish","hentry"],"psp_head":"<title>Camera Tutorial With Example In Android Studio [Step by Step] \u2013 Abhi Android<\/title>\r\n<meta name=\"description\" content=\"In Android, Camera is a hardware device that allows capturing pictures and videos in your applications. Follow this tutorial to easily understand how to use a camera in your own Android App.\" \/>\r\n<meta name=\"robots\" content=\"index,follow\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/abhiandroid.com\/programming\/camera\" \/>\r\n","_links":{"self":[{"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/pages\/925","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/comments?post=925"}],"version-history":[{"count":51,"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/pages\/925\/revisions"}],"predecessor-version":[{"id":978,"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/pages\/925\/revisions\/978"}],"wp:attachment":[{"href":"https:\/\/abhiandroid.com\/programming\/wp-json\/wp\/v2\/media?parent=925"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}