Thursday, August 4, 2016

Scheduling Task Using AlarmManager in Android


Hi .... Dear All ....  Today I am uploading a superb example of Scheduling of Task using AlarmManager.


AlarmManager
•"Alarms (based on the AlarmManager class) give you a way to perform time-based operations outside the lifetime of your application". 
•An example can be thought of as downloading the weather report once in a day or twice in a day and notifying the user.
Characteristics of Alarms:
•Alarms can let one to fire Intents at set times or in certain time intervals.
•Alarms can be used together with the broadcast receiver to notifies user.

•Alarms can triggers even if device falls asleep because they run outside the application.

To implement scheduling using AlarmManager we have to do following
•Create MainActivity -   In this class we will schedule the alarm to be triggered at particular time.
•Create Alarm Receiver – When the alarm triggers at particular time , this class will receive the alarm and take the action defined.
üThis class extends BroadcastReceiver and overrides onReceive() method.
üYou can start in this method any service as well as any action like ringing,SMS sending ,Vibrate phone.
üYou should add permission in manifest file like
<uses-permission  android:name="com.android.alarm.permission.SET_ALARM"/> 
üAlso register to Alarm Receiver
In this example you can set alarm after a specified time interval in secs. After your specified time interval your device will vibrate.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box
@@@@ please add read write permission in manifest file like
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

A. Layout will be like  

     

B. Layout xml file

activity_main.xml file is as 

<?xml version="1.0" encoding="utf-8"?>

<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="com.exam.ravi.alarmmanager.MainActivity">
    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="start alarm"

        android:id="@+id/stbutton"

        android:onClick="startAlert"

        android:layout_below="@+id/editText"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="35dp" />

    <EditText

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:inputType="phone"

        android:hint="EnterTime In Seconds Only"

        android:id="@+id/editText"

        android:gravity="center"

        android:layout_marginTop="50dp"

        android:layout_below="@+id/textView"

        android:layout_alignParentRight="true"

        android:layout_alignParentEnd="true" />

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Enter Time To Set an Alarm"

        android:id="@+id/textView"

        android:textSize="20sp"

        android:layout_alignParentTop="true"

        android:layout_alignParentLeft="true"

        android:layout_alignParentStart="true" />

</RelativeLayout>

C. Java Code

MainActivity.java is as 

package com.exam.ravi.alarmmanager;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity
 {
     EditText text;
    PendingIntent pendingIntent;
    AlarmManager alarmManager;
    Intent intent;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (EditText) findViewById(R.id.editText);


    }

    public void startAlert(View view) {
        if (!text.getText().toString().equals("")) {
            int i = Integer.parseInt(text.getText().toString());
            intent = new Intent(this, AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(
                    this.getApplicationContext(), 1, intent, 
                             PendingIntent.FLAG_UPDATE_CURRENT);
            alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP,
              Calendar.getInstance().getTimeInMillis() + (i * 1000), pendingIntent);
            Toast.makeText(this, "Alarming after  " + i + " seconds",
                    Toast.LENGTH_LONG).show();
        }else {
            Toast.makeText(this,"Please enter  time ",Toast.LENGTH_SHORT).show();
        }

    }

 }

AlarmReceiver is as 

package com.exam.ravi.alarmmanager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {
    @Override    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Time Up... Now Vibrating !!!",
                Toast.LENGTH_LONG).show();
        Vibrator vibrator = (Vibrator) context
                .getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(5000);
    }
}

Tuesday, June 7, 2016

Capture Image Store Image in Folder and image Path in Database (SQLite)

 Jai Saraswati Maa"
Hi .... Dear All ....  Today I am uploading a superb example of Image with SQLite Database
In this example you can capture image from Camera and store image in your specified folder and path in  database as well as you can retrieve path from database and  image from folder.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box
Special Thanks Dilip Singh 
@@@@ please add read write permission in manifest file like
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

A. Output will be like this  
      

B. XML file activity_main.xml is as

<?xml version="1.0" encoding="utf-8"?>

<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="com.example.student.imagepathsqlite.MainActivity">

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Capture Image"

        android:id="@+id/btnSelect"

        android:onClick="clickImage"

        android:layout_alignTop="@+id/btnUpload"

        android:layout_alignParentStart="true"/>

    <ImageView        android:layout_width="wrap_content"

        android:layout_height="150dp"

        android:id="@+id/imageView"

        android:src="@mipmap/ic_launcher"

        android:layout_below="@+id/btnUpload"

        android:layout_centerHorizontal="true" />
    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Save Image"

        android:id="@+id/btnUpload"

        android:onClick="sand"

        android:layout_marginTop="0dp"

        android:layout_alignParentTop="true"

        android:layout_alignParentEnd="true" />
    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Show Image"

        android:id="@+id/button"

        android:onClick="show"

        android:layout_below="@+id/imageView"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="67dp" />
    <ImageView        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/imageView1"

        android:src="@mipmap/ic_launcher"

        android:layout_alignParentBottom="true"

        android:layout_alignStart="@+id/imageView"

        android:layout_marginTop="300dp" />

</RelativeLayout>

C. Java Files are 

1. MainActivity.java

package com.example.student.imagepathsqlite;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    ImageView imgv1,imgv2;
    Bitmap bm =null;
    int REQUEST_CHECK = 0;
    String imgs;
    String s;
    File imgpath;
    private Cursor c=null;
    private  MyDataBase mdb=null;
    private SQLiteDatabase db=null;
    private static final String DB_NAME = "ImgDb.db";
    public static final int DB_VERSION = 3;


    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgv1 = (ImageView) findViewById(R.id.imageView);
        imgv2 = (ImageView) findViewById(R.id.imageView1);
        mdb=new MyDataBase(getApplicationContext(), DB_NAME,null,

                DB_VERSION);
    }
    public void clickImage(View view)
    {

        //fire intent

        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File fp = getFile();
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(fp));
        startActivityForResult(intent, REQUEST_CHECK);

    }

    private File getFile() {
        File folder = new File("sdcard/attendence");
        if (!folder.exists()) {
            folder.mkdir();
        }
        imgpath = new File(folder, File.separator + 
                               Calendar.getInstance().getTime() + ".jpg");


        return imgpath;
    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {


        try{
            s = imgpath.toString();
            Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
        }
        catch (Exception e){
            e.printStackTrace();

        }
        imgv1.setImageDrawable(Drawable.createFromPath(s));


    }
    public void sand(View view)
    {
        db=mdb.getWritableDatabase();
        ContentValues cv =new ContentValues();
        cv.put("path" ,s);
        db.insert("tableimage", null, cv);
        Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();
    }
    public void show (View view) {
     String col[] = {"path"};
     db = mdb.getReadableDatabase();
     c = db.query("tableimage", col, null, null, null, null, null);

        c.moveToLast();

         imgs = c.getString(c.getColumnIndex("path"));


     imgv2.setImageDrawable(Drawable.createFromPath(imgs));
 }
}

2.  for Handling Database MyDataBase.java is as 
package com.example.student.imagepathsqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDataBase extends SQLiteOpenHelper {

    public MyDataBase(Context context, String dbname, 
                       SQLiteDatabase.CursorFactory factory, int dbversion) {
        super(context, dbname, factory, dbversion);
    }

    @Override    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table tableimage (path varchar(255))");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Monday, June 6, 2016

Capture Image from Camera and Store/Retrieve to/from SQLite Database

 Jai Saraswati Maa"
Hi .... Dear All ....  Today I am uploading a superb example of Image with SQLite Database
In this example you can capture image from Camera and store in database as well as you can retrieve image from database,
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box
Special Thanks Dilip Singh 
@@@@ please add read write permission in manifest file like
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

A. Output will be like this 

B. XML file activity_main.xml is as

<?xml version="1.0" encoding="utf-8"?>

<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="com.example.student.imagesqlite.MainActivity">


    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Click Image"

        android:id="@+id/btnSelect"

        android:onClick="clickImage"

        android:layout_alignTop="@+id/btnUpload"

        android:layout_alignParentStart="true"/>

    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="150dp"

        android:id="@+id/imageView"

        android:src="@mipmap/ic_launcher"

        android:layout_below="@+id/btnUpload"

        android:layout_centerHorizontal="true" />
    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Image Upload "

        android:id="@+id/btnUpload"

        android:onClick="sand"

        android:layout_marginTop="0dp"

        android:layout_alignParentTop="true"

        android:layout_alignParentEnd="true" />
    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Show Image"

        android:id="@+id/button"

        android:onClick="show"

        android:layout_below="@+id/imageView"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="67dp" />
    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/imageView1"

        android:src="@mipmap/ic_launcher"

        android:layout_alignParentBottom="true"

        android:layout_alignStart="@+id/imageView"

        android:layout_marginTop="300dp" />

</RelativeLayout>

C. Java Files are 

1. MainActivity.java is as 

package com.example.student.imagesqlite;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {
    ImageView imgv1,imgv2;
    Bitmap bm = null;
    int REQUEST_CHECK = 0;
    byte img[];
    private MyDataBase mdb=null;
    private SQLiteDatabase db=null;
    private Cursor c=null;
    private static final String DB_NAME = "ImgDb.db";
    public static final int DB_VERSION = 2;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgv1 = (ImageView) findViewById(R.id.imageView);
        imgv2 = (ImageView) findViewById(R.id.imageView1);

        mdb=new MyDataBase(getApplicationContext(), DB_NAME,null,

                DB_VERSION);

    }
    public void clickImage(View view)
    {

        //fire intent

        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(intent, REQUEST_CHECK);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CHECK)
            onCaptureImageResult(data);


    }

    private void onCaptureImageResult(Intent data) {

        bm = (Bitmap) data.getExtras().get("data");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, bos);
        img = bos.toByteArray();
        imgv1.setImageBitmap(bm);

    }



    public void sand(View view)
    {
        db=mdb.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("image", img);
        db.insert("tableimage", null, cv);

        Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();

    }
    public void show(View view)
    {
        String[] col={"image"};
        db=mdb.getReadableDatabase();
        c=db.query("tableimage", col, null, null, null, null, null);
        if(c!=null){
            c.moveToFirst();
            do{
                img=c.getBlob(c.getColumnIndex("image"));
            }while(c.moveToNext());
        }
        Bitmap b1= BitmapFactory.decodeByteArray(img, 0, img.length);

        imgv2.setImageBitmap(b1);
        Toast.makeText(this, "yes", Toast.LENGTH_SHORT).show();
    }
}
2. MyDataBase.java is as 

package com.example.student.imagesqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class MyDataBase extends SQLiteOpenHelper {

    public MyDataBase(Context context, String dbname,

                      SQLiteDatabase.CursorFactory factory, int dbversion) {
        super(context, dbname, factory, dbversion);
    }

    @Override    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table tableimage(image blob);");
    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}