MAD Project
MAD Project
POLYTECHNIC
LISANA
PRACTICAL WORK
On
MOBILE APPLICATION DEVELOPMENT
Submitted By : DHEERAJ
Class : CSE 6th SEM.
Roll No. : 210300822006
Submitted To :
Mrs. Pooja Arora
PRACTICAL - 1
Aim : Write a program to demonstrate activity (Application Life Cycle)
There's a simple Android app demonstrating the activity lifecycle:
MainActivity.java :
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
</RelativeLayout>
PRACTICAL – 2
There's a simple Android app demonstrating different types of layouts using XML :
Activity_main.xml :
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2" />
</LinearLayout>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3"
android:layout_alignParentLeft="true"/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 4"
android:layout_alignParentRight="true"/>
</RelativeLayout>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
PRACTICAL – 3
MainActivity.java :
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayTextView = findViewById(R.id.display_text_view);
input = new StringBuilder();
isResultShown = false;
ExpressionEvaluator.java :
import java.util.Stack;
<TextView
android:id="@+id/display_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textAlignment="viewEnd"
android:layout_margin="16dp"
android:background="#f0f0f0"
android:padding="16dp"
android:layout_above="@id/button_clear"/>
<Button
android:id="@+id/button_clear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="C"
android:textSize="20sp"
android:layout_alignParentBottom="true"
android:background="#E57373"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@id/button_clear">
<Button
android:id="@+id/button_seven"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7"
android:textSize="20sp"/>
<Button
android:id="@+id/button_eight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8"
android:textSize="20sp"/>
<Button
android:id="@+id/button_nine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9"
android:textSize="20sp"/>
<Button
android:id="@+id/button_divide"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="/"
android:textSize="20sp"/>
</LinearLayout>
PRACTICAL – 4
MainActivity.java :
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Sample data
String[] countries = {"USA", "Canada", "Australia", "UK", "Germany", "France", "Japan",
"China", "India"};
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
PRACTICAL - 5
MainActivity.java :
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
GridView gridView;
int[] images = {
R.drawable.image1, R.drawable.image2, R.drawable.image3,
R.drawable.image4, R.drawable.image5, R.drawable.image6,
R.drawable.image7, R.drawable.image8, R.drawable.image9
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = findViewById(R.id.gridView);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, android.view.View view, int position,
long id) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(images[position]);
Toast toast = new Toast(MainActivity.this);
toast.setView(imageView);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
}
});
}
}
ImageAdaptor.java :
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
@Override
public int getCount() {
return mImages.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(350, 350));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mImages[position]);
return imageView;
}
}
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"
android:verticalSpacing="8dp"
android:horizontalSpacing="8dp"
android:padding="8dp" />
</LinearLayout>
PRACTICAL – 6
MainActivity.java :
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
selectedDateTextView = findViewById(R.id.selected_date_textview);
selectedTimeTextView = findViewById(R.id.selected_time_textview);
datePicker = findViewById(R.id.date_picker);
timePicker = findViewById(R.id.time_picker);
showDateTimeButton = findViewById(R.id.show_date_time_button);
showDateTimeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int year = datePicker.getYear();
int month = datePicker.getMonth();
int dayOfMonth = datePicker.getDayOfMonth();
String selectedDate = dayOfMonth + "/" + (month + 1) + "/" + year;
selectedDateTextView.setText("Selected Date: " + selectedDate);
<TextView
android:id="@+id/selected_date_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Selected Date: " />
<DatePicker
android:id="@+id/date_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:calendarViewShown="false"
android:datePickerMode="spinner" />
<TextView
android:id="@+id/selected_time_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Selected Time: " />
<TimePicker
android:id="@+id/time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/show_date_time_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Selected Date & Time" />
</LinearLayout>
PRACTICAL – 7
Here’s the Android application that allows users to view and edit contacts:
This app displays a TextView to show the selected contact and a Button to pick a contact. When
the user clicks the "Pick Contact" button, it requests permission to read contacts. After granting
permission, the user can pick a contact from their contacts list, and the selected contact's name
will be displayed in the TextView.
MainActivity.java :
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactTextView = findViewById(R.id.contact_text_view);
pickContactButton = findViewById(R.id.pick_contact_button);
pickContactButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new
String[]{Manifest.permission.READ_CONTACTS}, PERMISSION_REQUEST_READ_CONTACTS);
} else {
pickContact();
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_READ_CONTACTS) {
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
pickContact();
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
Uri contactUri = data.getData();
Cursor cursor = getContentResolver().query(contactUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String contactName =
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactTextView.setText("Contact Name: " + contactName);
cursor.close();
}
}
}
}
}
<TextView
android:id="@+id/contact_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Selected Contact"
android:layout_marginBottom="16dp"/>
<Button
android:id="@+id/pick_contact_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pick Contact"
android:layout_below="@id/contact_text_view"/>
</RelativeLayout>
PRACTICAL – 8
Below is a simple Android application that allows users to send SMS messages :
This app contains two EditText fields to enter the phone number and message, and a Button to
send the SMS. When the user clicks the "Send" button, it requests permission to send SMS
messages. After granting permission, the app sends the SMS message containing the entered
phone number and message.
MainActivity.java :
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phoneNumberEditText = findViewById(R.id.phone_number_edit_text);
messageEditText = findViewById(R.id.message_edit_text);
sendButton = findViewById(R.id.send_button);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new
String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST_SEND_SMS);
} else {
sendMessage();
}
}
});
}
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
Toast.makeText(this, "SMS sent successfully", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, "Failed to send SMS", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[]
grantResults) {
if (requestCode == PERMISSION_REQUEST_SEND_SMS) {
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
sendMessage();
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
}
<EditText
android:id="@+id/phone_number_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Phone Number"
android:inputType="phone" />
<EditText
android:id="@+id/message_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/phone_number_edit_text"
android:layout_marginTop="16dp"
android:hint="Message" />
<Button
android:id="@+id/send_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/message_edit_text"
android:layout_marginTop="16dp"
android:text="Send" />
</RelativeLayout>
PRACTICAL – 9
Here's a simple Android application that creates a text file in external memory:
This app contains a Button to create a text file. When the user clicks the button, it requests
permission to write to external storage. After granting permission, the app creates a text file
named "example.txt" in the directory "MyFiles" in external storage with the content "This is the
content of the text file.". A toast message is displayed to indicate whether the file creation was
successful or not.
MainActivity.java :
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createFileButton = findViewById(R.id.create_file_button);
createFileButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainActivity.this, new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
createFile();
}
}
});
}
try {
File directory = new File(Environment.getExternalStorageDirectory(), "MyFiles");
if (!directory.exists()) {
directory.mkdirs();
}
<Button
android:id="@+id/create_file_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Create Text File"
android:layout_centerInParent="true"/>
</RelativeLayout>
PRACTICAL – 10
Aim : Write a program to store and fetch data from SQL Lite Database.
MainActivity.java :
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayTextView = findViewById(R.id.display_text_view);
database.close();
String[] projection = {
DatabaseContract.UserEntry._ID,
DatabaseContract.UserEntry.COLUMN_NAME,
DatabaseContract.UserEntry.COLUMN_AGE
};
displayTextView.setText(data.toString());
}
}
DatabaseHelper.java:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
}
DatabaseContract.java:
import android.provider.BaseColumns;
private DatabaseContract() {
}
<TextView
android:id="@+id/display_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Data will be displayed here"
android:textColor="@android:color/black" />
</RelativeLayout>