0% found this document useful (0 votes)
13 views24 pages

MAD Guide

The document outlines a series of experiments for developing Android applications using Java, covering topics such as creating a simple arithmetic app, using fragments, different layouts, and intents for activity switching. Each experiment includes step-by-step instructions for setting up the project, designing the layout, and writing the necessary Java code. Additionally, it addresses permissions required for telephony and SMS functionalities.

Uploaded by

Sanika Sonandkar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views24 pages

MAD Guide

The document outlines a series of experiments for developing Android applications using Java, covering topics such as creating a simple arithmetic app, using fragments, different layouts, and intents for activity switching. Each experiment includes step-by-step instructions for setting up the project, designing the layout, and writing the necessary Java code. Additionally, it addresses permissions required for telephony and SMS functionalities.

Uploaded by

Sanika Sonandkar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

EXPERIMENT NO.

Experiment: Simple Arithmetic App

Step-by-Step Setup

1. Create a New Android Project

• Language: Java

• Minimum SDK: API 21 (Lollipop) or higher

• Empty Activity

Design Tab Tutorial for activity_main.xml

Step 1: Open activity_main.xml

1. Open your Android project.

2. In the left Project panel, go to:

app > res > layout > activity_main.xml

3. At the top, select the Design tab (beside Code).

Step 2: Set Layout to LinearLayout (Vertical)

1. On the Component Tree, click ConstraintLayout.

2. Right-click it → Convert to LinearLayout.

3. In the Attributes panel on the right:

a. Set orientation to vertical

b. Set padding to 16dp

Step 3: Add Views One by One

A. Add Two EditText Inputs

1. Drag Plain Text from Palette > Text → Drop it into the layout.

2. Click the field in Component Tree.

3. In Attributes:

a. id: @+id/num1

b. hint: Enter first number

c. inputType: numberDecimal

4. Repeat the above steps to add second input:

a. id: @+id/num2

b. hint: Enter second number

c. inputType: numberDecimal
B. Add Two Rows of Buttons

Group 1: Add and Subtract

1. Drag a Horizontal LinearLayout from Layouts.

2. Set its layout_width = match_parent, layout_height = wrap_content

3. Inside it, drag two Buttons:

a. Button 1:

i. id: @+id/btnAdd

ii. text: Add

iii. layout_weight: 1

b. Button 2:

i. id: @+id/btnSub

ii. text: Subtract

iii. layout_weight: 1

Group 2: Multiply and Divide

Repeat the steps above for:

• @+id/btnMul → Text: Multiply

• @+id/btnDiv → Text: Divide

C. Add a TextView to Show Result

1. Drag a TextView below the buttons.

2. Set:

a. id: @+id/result

b. text: Result will be shown here

c. textSize: 18sp

d. layout_marginTop: 20dp

Final Structure in Component Tree

LinearLayout (vertical)
├── EditText (num1)
├── EditText (num2)
├── LinearLayout (horizontal)
│ ├── Button (btnAdd)
│ └── Button (btnSub)
├── LinearLayout (horizontal)
│ ├── Button (btnMul)
│ └── Button (btnDiv)
└── TextView (result)
3. Java Code (MainActivity.java)

package com.example.arithmeticapp;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText num1, num2;
Button btnAdd, btnSub, btnMul, btnDiv;
TextView result;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

num1 = findViewById(R.id.num1);
num2 = findViewById(R.id.num2);
btnAdd = findViewById(R.id.btnAdd);
btnSub = findViewById(R.id.btnSub);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
result = findViewById(R.id.result);

btnAdd.setOnClickListener(view -> calculate('+'));


btnSub.setOnClickListener(view -> calculate('-'));
btnMul.setOnClickListener(view -> calculate('*'));
btnDiv.setOnClickListener(view -> calculate('/'));
}

void calculate(char operator) {


String s1 = num1.getText().toString();
String s2 = num2.getText().toString();

if (s1.isEmpty() || s2.isEmpty()) {
result.setText("Please enter both numbers");
return;
}

double n1 = Double.parseDouble(s1);
double n2 = Double.parseDouble(s2);
double res = 0;

switch (operator) {
case '+': res = n1 + n2; break;
case '-': res = n1 - n2; break;
case '*': res = n1 * n2; break;
case '/':
if (n2 == 0) {
result.setText("Cannot divide by zero");
return;
}
res = n1 / n2;
break;
}

result.setText("Result: " + res);


}

}
EXPERIMENT NO. 2

Experiment: Use of Fragments in App

Step-by-Step Guide

Step 1: Create New Project

• Language: Java

• Template: Empty Activity

Step 2: Modify activity_main.xml (Design Tab Approach)

1. Open activity_main.xml and switch to Design tab

2. Replace ConstraintLayout with LinearLayout (vertical):

a. Right-click in Component Tree > Convert to LinearLayout

b. Set orientation: vertical

3. Add:

a. Two Buttons at the top:

i. Button 1:

1. id: @+id/btnA

2. text: Fragment A

ii. Button 2:

1. id: @+id/btnB

2. text: Fragment B

b. One FragmentContainerView (or FrameLayout) below:

i. id: @+id/fragment_container

ii. layout_height: 0dp

iii. layout_weight: 1

Sample View Tree (in Design Tab)

LinearLayout (vertical)
├── Button (btnA)
├── Button (btnB)
└── FrameLayout (id = fragment_container)

Step 3: Create Two Fragments

1. Right-click java > your.package.name

• New > Fragment > Fragment (Blank)

• Name: FragmentA

• Repeat and create: FragmentB


Step 4: Add Code to MainActivity.java

package com.example.fragmentsample;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

public class MainActivity extends AppCompatActivity {

Button btnA, btnB;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnA = findViewById(R.id.btnA);
btnB = findViewById(R.id.btnB);

// Load FragmentA by default


getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new FragmentA())
.commit();

btnA.setOnClickListener(view -> loadFragment(new FragmentA()));


btnB.setOnClickListener(view -> loadFragment(new FragmentB()));
}

private void loadFragment(Fragment fragment) {


getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
}

Step 5: Modify Fragment Layouts

fragment_a.xml

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is Fragment A"
android:gravity="center"
android:textSize="24sp"/>

fragment_b.xml

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is Fragment B"
android:gravity="center"
android:textSize="24sp"/>
EXPERIMENT NO. 3

Experiment: Use of Different Layouts in Android

Step-by-Step Guide

Step 1: Create Main Layout (Design Tab Style)

activity_main.xml (Use Design tab)

• Use LinearLayout (vertical)

• Add 4 Buttons:

o btnLinear, btnRelative, btnFrame, btnConstraint

MainActivity.java

package com.example.layoutdemo;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

Button btnLinear, btnRelative, btnFrame, btnConstraint;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnLinear = findViewById(R.id.btnLinear);
btnRelative = findViewById(R.id.btnRelative);
btnFrame = findViewById(R.id.btnFrame);
btnConstraint = findViewById(R.id.btnConstraint);

btnLinear.setOnClickListener(v ->
startActivity(new Intent(this, LinearLayoutActivity.class)));

btnRelative.setOnClickListener(v ->
startActivity(new Intent(this, RelativeLayoutActivity.class)));

btnFrame.setOnClickListener(v ->
startActivity(new Intent(this, FrameLayoutActivity.class)));

btnConstraint.setOnClickListener(v ->
startActivity(new Intent(this, ConstraintLayoutActivity.class)));
}
}

Step 2: Create 4 New Activities

Right-click java > your package → New → Activity → Empty Activity

Create:

• LinearLayoutActivity

• RelativeLayoutActivity
• FrameLayoutActivity

• ConstraintLayoutActivity

Step 3: Add Layouts for Each Activity

activity_linear_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<TextView
android:text="This is LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"/>

<Button
android:text="Button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<Button
android:text="Button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

activity_relative_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/txtRel"
android:text="RelativeLayout Example"
android:textSize="20sp"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<Button
android:layout_below="@id/txtRel"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
activity_frame_layout.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@android:drawable/ic_menu_gallery"
android:scaleType="centerCrop"/>

<TextView
android:text="Overlay Text"
android:textSize="24sp"
android:textColor="#FFFFFF"
android:layout_gravity="center"/>
</FrameLayout>

activity_constraint_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/title"
android:text="ConstraintLayout Example"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="30dp"/>

<Button
android:text="Click Here"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
EXPERIMENT NO.4

Experiment: Use Intents to Switch Between Activities

Step-by-Step Setup

Step 1: Create New Project (Java)

Template: Empty Activity

Step 2: Design activity_main.xml using Design Tab

• Use a LinearLayout (vertical)

• Add 2 Buttons:

o btnSecond → “Go to Second Activity”

o btnThird → “Go to Third Activity”

Component Tree:

LinearLayout (vertical)
├── Button (btnSecond)
└── Button (btnThird)

Set IDs in Attributes panel:

• First button: @+id/btnSecond

• Second button: @+id/btnThird

Step 3: Create New Activities

Right-click your package > New > Activity > Empty Activity:

1. SecondActivity

2. ThirdActivity

Step 4: Write Code in MainActivity.java

package com.example.intentdemo;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

Button btnSecond, btnThird;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnSecond = findViewById(R.id.btnSecond);
btnThird = findViewById(R.id.btnThird);

btnSecond.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
});

btnThird.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, ThirdActivity.class);
startActivity(i);
});
}
}

Step 5: Layout for Other Activities

activity_second.xml

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="You are in Second Activity"
android:textSize="24sp"
android:gravity="center"/>

activity_third.xml

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="You are in Third Activity"
android:textSize="24sp"
android:gravity="center"/>
EXPERIMENT NO. 5

Experiment: Use of Intents for SMS and Telephony

Required Permissions

You'll need these in AndroidManifest.xml:

<uses-feature android:name="android.hardware.telephony"
android:required="false"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
Step-by-Step Guide

Step 1: Layout (activity_main.xml using Design Tab)

• Use LinearLayout (vertical)

• Add:

o One EditText (id: editPhone)

o One EditText (id: editMessage)

o Button 1: Call (id: btnCall)

o Button 2: Send SMS (id: btnSMS)

Sample Design Structure

LinearLayout (vertical)
├── EditText (Phone Number)
├── EditText (Message for SMS)
├── Button (btnCall)
└── Button (btnSMS)

Step 2: MainActivity.java

package com.example.intentsmscall;
import android.content.Intent; import android.net.Uri; import
android.os.Bundle; import android.widget.Button; import
android.widget.EditText; import android.widget.Toast; import
androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText editPhone, editMessage;
Button btnCall, btnSMS;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editPhone = findViewById(R.id.editPhone);
editMessage = findViewById(R.id.editMessage);
btnCall = findViewById(R.id.btnCall);
btnSMS = findViewById(R.id.btnSMS);

btnCall.setOnClickListener(v -> {
String number = editPhone.getText().toString();
if (!number.isEmpty()) {
Intent callIntent = new Intent(Intent.ACTION_DIAL); // safer than
ACTION_CALL
callIntent.setData(Uri.parse("tel:" + number));
startActivity(callIntent);
} else {
Toast.makeText(this, "Enter phone number",
Toast.LENGTH_SHORT).show();
}
});

btnSMS.setOnClickListener(v -> {
String number = editPhone.getText().toString();
String message = editMessage.getText().toString();

if (!number.isEmpty() && !message.isEmpty()) {


Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:" + number));
smsIntent.putExtra("sms_body", message);
startActivity(smsIntent);
} else {
Toast.makeText(this, "Enter both number and message",
Toast.LENGTH_SHORT).show();
}
});
}

}
}
EXPERIMENT NO. 6

Experiment: Demonstrate Spinners, Touch Mode, Alerts, Popups, Menus, and Toasts

🛠 Step-by-Step Implementation

Step 1: Layout – activity_main.xml (Use Design Tab)

Use LinearLayout (vertical)

Add:

• Spinner → id: spinnerColors

• Button → id: btnAlert → “Show Alert”

• Button → id: btnPopup → “Show Popup Menu”

• TextView → id: txtContext → “Long press me for context menu”

Component Tree

LinearLayout
├── Spinner (spinnerColors)
├── Button (btnAlert)
├── Button (btnPopup)
└── TextView (txtContext)

Step 2: Code – MainActivity.java

package com.example.exp6;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

SpinnerColors;
Button btnAlert, btnPopup;
TextView txtContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

spinnerColors = findViewById(R.id.spinnerColors);
btnAlert = findViewById(R.id.btnAlert);
btnPopup = findViewById(R.id.btnPopUp);
txtContext = findViewById(R.id.txtContext);

String[] colors = {"Red", "Green", "Blue", "Yellow"};


ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, colors);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown
_item);
spinnerColors.setAdapter(adapter);

spinnerColors.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String selected =
parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, "Selected: " + selected,
Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {}
});

findViewById(R.id.spinnerColors).setOnTouchListener((v, event) -> {


if (event.getAction() == MotionEvent.ACTION_DOWN) {
Toast.makeText(this, "Touched Spinner",
Toast.LENGTH_SHORT).show();
}
return false;
});

btnAlert.setOnClickListener(v -> {
new AlertDialog.Builder(MainActivity.this)
.setTitle("Alert!")
.setMessage("This is an alert dialog example.")
.setPositiveButton("OK", (dialog, which) ->
Toast.makeText(this, "OK Pressed",
Toast.LENGTH_SHORT).show())
.setNegativeButton("Cancel", null)
.show();
});

btnPopup.setOnClickListener(v -> {
PopupMenu popup = new PopupMenu(MainActivity.this, btnPopup);
popup.getMenuInflater().inflate(R.menu.popup_menu,
popup.getMenu());
popup.setOnMenuItemClickListener(item -> {
Toast.makeText(this, "Selected: " + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
});
popup.show();
});

registerForContextMenu(txtContext);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu, menu);
menu.setHeaderTitle("Choose an option");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
Toast.makeText(this, "Context Item: " + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
}
}

Step 3: Add Menus

res/menu/popup_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1" android:title="Popup Item 1"/>
<item android:id="@+id/item2" android:title="Popup Item 2"/>
</menu>

res/menu/context_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/ctx1" android:title="Context Item A"/>
<item android:id="@+id/ctx2" android:title="Context Item B"/>
</menu>
EXPERIMENT No. 7

Experiment: Demonstrate Notification with Action

Step-by-Step Guide

Step 1: Layout (Design Tab)

In activity_main.xml:

• Use LinearLayout

• Add one Button:

o id: btnNotify

o text: Send Notification

Step 2: Create a Second Activity

1. Right-click your package > New > Activity > Empty Activity

2. Name it SecondActivity

In activity_second.xml, add a TextView:

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Opened from Notification!"
android:textSize="24sp"
android:gravity="center"/>

Step 3: Code in MainActivity.java

package com.example.notificationdemo;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;

public class MainActivity extends AppCompatActivity {

Button btnNotify;
final String CHANNEL_ID = "my_channel_id";
final int NOTIFICATION_ID = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnNotify = findViewById(R.id.btnNotify);
createNotificationChannel();
btnNotify.setOnClickListener(v -> showNotification());
}

private void showNotification() {


// Intent to open SecondActivity
Intent intent = new Intent(this, SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_IMMUTABLE);

NotificationCompat.Builder builder = new


NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("Hello from Notification")
.setContentText("Tap to open Second Activity")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
.setAutoCancel(true); // Notification disappears on click

NotificationManagerCompat notificationManager =
NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());
}

// Notification Channel for Android 8+


private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Demo Channel";
String description = "Used for testing notifications";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
name, importance);
channel.setDescription(description);

NotificationManager manager =
getSystemService(NotificationManager.class);
if (manager != null) {
manager.createNotificationChannel(channel);
}
}
}
}

Test the App

1. Run the app.

2. Tap Send Notification.

3. A notification appears in the status bar.

4. Tap it → SecondActivity opens.


EXPERIMENT No. 8

Experiment: Write Data to SD Card (External Storage)

Step-by-Step Guide

Step 1: Layout (activity_main.xml) – Design Tab

Add to a LinearLayout:

• EditText → id: editTextData

• Button → id: btnSave → text: "Save to SD Card"

Step 2: MainActivity.java

package com.example.sdcardwriter;

import android.os.Bundle;
import android.os.Environment;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

EditText editTextData;
Button btnSave;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editTextData = findViewById(R.id.editTextData);
btnSave = findViewById(R.id.btnSave);

btnSave.setOnClickListener(v -> {
String data = editTextData.getText().toString();
if (!data.isEmpty()) {
saveToSDCard(data);
} else {
Toast.makeText(this, "Enter some text",
Toast.LENGTH_SHORT).show();
}
});
}

private void saveToSDCard(String data) {


try {
File folder = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
if (folder != null && !folder.exists()) {
folder.mkdirs();
}

File file = new File(folder, "myfile.txt");


FileOutputStream fos = new FileOutputStream(file);
fos.write(data.getBytes());
fos.close();

Toast.makeText(this, "Saved to: " + file.getAbsolutePath(),


Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(this, "Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}

AndroidManifest.xml (No permissions needed if using getExternalFilesDir())

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"/>

Where Is the File Stored?

This saves to:

/storage/emulated/0/Android/data/your.package.name/files/Documents/myfile.txt

Use Device File Explorer in Android Studio to check.


EXPERIMENT No. 9

Experiment: Create an Alarm Clock App

Step-by-Step Implementation

Step 1: Layout (activity_main.xml) – Design Tab

Use a LinearLayout with:

• TextView → id: textTime → to show selected time

• Button → id: btnPickTime → "Pick Time"

• Button → id: btnSetAlarm → "Set Alarm"

Step 2: MainActivity.java

package com.example.alarmapp;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.app.TimePickerDialog;
import android.widget.TimePicker;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

TextView textTime;
Button btnPickTime, btnSetAlarm;
int hour, minute;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textTime = findViewById(R.id.textTime);
btnPickTime = findViewById(R.id.btnPickTime);
btnSetAlarm = findViewById(R.id.btnSetAlarm);

btnPickTime.setOnClickListener(v -> {
TimePickerDialog timePickerDialog = new TimePickerDialog(this,
(TimePicker view, int selectedHour, int selectedMinute) ->
{
hour = selectedHour;
minute = selectedMinute;
textTime.setText(String.format("%02d:%02d", hour,
minute));
}, 12, 0, true);
timePickerDialog.show();
});

btnSetAlarm.setOnClickListener(v -> {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);

Intent intent = new Intent(this, AlarmReceiver.class);


PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_IMMUTABLE);

AlarmManager alarmManager = (AlarmManager)


getSystemService(ALARM_SERVICE);
if (alarmManager != null) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(this, "Alarm set for " + textTime.getText(),
Toast.LENGTH_SHORT).show();
}
});
}
}

Step 3: AlarmReceiver.java

This class will run when the alarm goes off.

package com.example.alarmapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, " Alarm Triggered!",
Toast.LENGTH_LONG).show();
}
}

Step 4: Register Receiver in AndroidManifest.xml

<receiver android:name=".AlarmReceiver" />

Test Instructions

1. Run app.

2. Tap Pick Time and choose a future time.

3. Tap Set Alarm.

4. Wait for that time → a Toast shows: “ Alarm Triggered!”


EXPERIMENT No. 10

Experiment: Simple App using SQLite Database

Step-by-Step Guide

Step 1: Layout – activity_main.xml (Design Tab)

Use LinearLayout and add:

• EditText → id: editName, hint: "Enter Name"

• EditText → id: editEmail, hint: "Enter Email"

• Button → id: btnSave, text: "Save"

• Button → id: btnShow, text: "Show Data"

Step 2: Create SQLite Helper Class → DBHelper.java

package com.example.sqlitedemo;

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

public class DBHelper extends SQLiteOpenHelper {

public static final String DB_NAME = "UserData.db";


public static final String TABLE_NAME = "user_info";

public DBHelper(Context context) {


super(context, DB_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY
AUTOINCREMENT, name TEXT, email TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}

public boolean insertData(String name, String email) {


SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("email", email);
long result = db.insert(TABLE_NAME, null, cv);
return result != -1;
}

public String getData() {


SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
StringBuilder sb = new StringBuilder();
while (cursor.moveToNext()) {
sb.append("ID: ").append(cursor.getInt(0))
.append(", Name: ").append(cursor.getString(1))
.append(", Email: ").append(cursor.getString(2)).append("\n");
}
cursor.close();
return sb.toString();
}
}

Step 3: MainActivity.java

package com.example.sqlitedemo;

import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

EditText editName, editEmail;


Button btnSave, btnShow;
DBHelper dbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editName = findViewById(R.id.editName);
editEmail = findViewById(R.id.editEmail);
btnSave = findViewById(R.id.btnSave);
btnShow = findViewById(R.id.btnShow);

dbHelper = new DBHelper(this);

btnSave.setOnClickListener(v -> {
String name = editName.getText().toString();
String email = editEmail.getText().toString();
boolean inserted = dbHelper.insertData(name, email);
if (inserted) {
Toast.makeText(this, "Data Inserted",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Insert Failed",
Toast.LENGTH_SHORT).show();
}
});

btnShow.setOnClickListener(v -> {
String data = dbHelper.getData();
Toast.makeText(this, data.isEmpty() ? "No Data" : data,
Toast.LENGTH_LONG).show();
});
}
}
Test the App

1. Enter name and email → Tap Save

2. Tap Show Data → See saved records in a Toast

You might also like