{"id":447922,"date":"2026-03-05T14:40:34","date_gmt":"2026-03-05T09:10:34","guid":{"rendered":"https:\/\/techvidvan.com\/tutorials\/?p=447922"},"modified":"2026-03-05T15:36:10","modified_gmt":"2026-03-05T10:06:10","slug":"women-safety-application-android-project","status":"publish","type":"post","link":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/","title":{"rendered":"Android Project &#8211; Smart Women Safety Application"},"content":{"rendered":"<p>We will try to make a Smart Women Safety Application using Android. This project will explain how to integrate basic security features into a user-friendly Android application to help ensure the safety of women.<\/p>\n<h3>About Android Smart Women Safety Application<\/h3>\n<p>The Smart Women Safety Application will be used to provide women with quick tools to enhance their safety and provide access to emergency services. It helps users by offering features like emergency contact alerts and location tracking. It also includes an SOS Button, which can help them in immediate help situations.<\/p>\n<h4>Features<\/h4>\n<ul>\n<li>Emergency Alerts: Users can send quick emergency alerts to emergency contacts.<\/li>\n<li>Location Tracking: Users can share their live location with trusted contacts.<\/li>\n<li>Emergency Call: Users can also start a phone call to their emergency contact with just a click<\/li>\n<li>SOS Button: An easily accessible SOS button for immediate help.<\/li>\n<\/ul>\n<h3>Prerequisites for Android Smart Women Safety Application<\/h3>\n<p>Let&#8217;s discuss the prerequisites required for this project. This project was made using Java and XML in Android Studio. You should know the basics of these:<\/p>\n<p>1. Android Studio<br \/>\n2. XML Designing and Resource Files<br \/>\n3. Java<br \/>\n4. Location Services and GPS<br \/>\n5. Object-Oriented Concepts<br \/>\n6. Firebase<\/p>\n<h3>Download Android Smart Women Safety Application<\/h3>\n<p>Please download the source code of the Android Smart Women Safety Application: <a href=\"https:\/\/drive.google.com\/file\/d\/1BE1cWm_zcxSlmwXkKhIvSztg9cU5DWpt\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\"><strong>Android Smart Women Safety Application<\/strong><\/a><\/p>\n<h3>Steps to implement the Project<\/h3>\n<p>To run the application on your device, you need to follow these steps :<\/p>\n<p>1. Download the source code of the Smart Women Safety Application. Now, locate the file on your system and unzip it.<br \/>\n2. Open Android Studio and click on Open an Existing Project.<br \/>\n3. The Project will be opened in Android Studio, and you will be able to see the files mentioned above.<br \/>\n4. Make sure to check the versions mentioned in the build.gradle file and those which are present in your System.<br \/>\n5. Run the App now. It will install the application on your emulator or device.<\/p>\n<h3>Step-by-Step Code Explanation of Android Smart Women Safety Application<\/h3>\n<h4>1. MainActivity.java<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.example.smartwomensafetyapplication;\r\n\r\nimport android.Manifest;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.location.Location;\r\nimport android.media.AudioManager;\r\nimport android.media.MediaPlayer;\r\nimport android.net.Uri;\r\nimport android.os.Bundle;\r\nimport android.telephony.SmsManager;\r\nimport android.view.Menu;\r\nimport android.view.MenuInflater;\r\nimport android.view.View;\r\nimport android.widget.Toast;\r\n\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport androidx.appcompat.widget.Toolbar;\r\nimport androidx.cardview.widget.CardView;\r\nimport androidx.core.app.ActivityCompat;\r\nimport androidx.core.content.ContextCompat;\r\n\r\nimport com.google.android.gms.location.FusedLocationProviderClient;\r\nimport com.google.android.gms.location.LocationServices;\r\nimport com.google.android.gms.tasks.OnCompleteListener;\r\nimport com.google.android.gms.tasks.Task;\r\nimport com.google.firebase.FirebaseApp;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.QueryDocumentSnapshot;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n   private static final int SMS_PERMISSION_CODE = 101;\r\n   private static final int CALL_PERMISSION_CODE = 102;\r\n   private static final int LOCATION_PERMISSION_CODE = 103;\r\n   private FirebaseFirestore db;\r\n   private FusedLocationProviderClient fusedLocationClient;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       FirebaseApp.initializeApp(this); \/\/ Initialize Firebase\r\n       setContentView(R.layout.activity_main);\r\n\r\n       if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {\r\n           ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, SMS_PERMISSION_CODE);\r\n       }\r\n\r\n       if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {\r\n           ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PERMISSION_CODE);\r\n       }\r\n\r\n       if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\r\n           ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_CODE);\r\n       }\r\n\r\n       Toolbar toolbar = findViewById(R.id.toolbar);\r\n       setSupportActionBar(toolbar);\r\n       getSupportActionBar().setTitle(\"TechVidvan Woman Safety App\");\r\n\r\n       db = FirebaseFirestore.getInstance();\r\n       fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);\r\n\r\n       CardView contactsCard = findViewById(R.id.contacts_card);\r\n       contactsCard.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               Intent intent = new Intent(MainActivity.this, ContactsActivity.class);\r\n               startActivity(intent);\r\n           }\r\n       });\r\n\r\n       CardView notificationCard = findViewById(R.id.notification_card);\r\n       notificationCard.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               sendEmergencyMessage();\r\n           }\r\n       });\r\n\r\n       CardView emergencyCallCard = findViewById(R.id.emergency_call_card);\r\n       emergencyCallCard.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               makeEmergencyCall();\r\n           }\r\n       });\r\n\r\n       CardView emergencyAlarmCard = findViewById(R.id.emergency_alarm_card);\r\n       emergencyAlarmCard.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               playBuzzerSound();\r\n           }\r\n       });\r\n\r\n       CardView currentLocationCard = findViewById(R.id.current_location_card);\r\n       currentLocationCard.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               sendCurrentLocation();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void sendEmergencyMessage() {\r\n       CollectionReference contactsRef = db.collection(\"contacts\");\r\n       contactsRef.get().addOnCompleteListener(task -&gt; {\r\n           if (task.isSuccessful() &amp;&amp; !task.getResult().isEmpty()) {\r\n               for (QueryDocumentSnapshot document : task.getResult()) {\r\n                   String phoneNumber = document.getString(\"phoneNumber\");\r\n                   sendSms(phoneNumber, \"I am in danger! Please help me.\");\r\n               }\r\n               Toast.makeText(MainActivity.this, \"Emergency message sent.\", Toast.LENGTH_SHORT).show();\r\n           } else {\r\n               Toast.makeText(MainActivity.this, \"No emergency contacts found.\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void sendSms(String phoneNumber, String message) {\r\n       try {\r\n           SmsManager smsManager = SmsManager.getDefault();\r\n           smsManager.sendTextMessage(phoneNumber, null, message, null, null);\r\n           Toast.makeText(MainActivity.this, \"SMS sent to \" + phoneNumber, Toast.LENGTH_LONG).show();\r\n       } catch (Exception e) {\r\n           Toast.makeText(MainActivity.this, \"SMS failed, please try again later.\", Toast.LENGTH_LONG).show();\r\n           e.printStackTrace();\r\n       }\r\n   }\r\n\r\n   private void makeEmergencyCall() {\r\n       CollectionReference contactsRef = db.collection(\"contacts\");\r\n       contactsRef.get().addOnCompleteListener(task -&gt; {\r\n           if (task.isSuccessful() &amp;&amp; !task.getResult().isEmpty()) {\r\n               QueryDocumentSnapshot topContact = (QueryDocumentSnapshot) task.getResult().getDocuments().get(0);\r\n               String phoneNumber = topContact.getString(\"phoneNumber\");\r\n               if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {\r\n                   initiateCall(phoneNumber);\r\n               } else {\r\n                   ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PERMISSION_CODE);\r\n               }\r\n           } else {\r\n               Toast.makeText(MainActivity.this, \"No emergency contacts found.\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void initiateCall(String phoneNumber) {\r\n       Intent callIntent = new Intent(Intent.ACTION_CALL);\r\n       callIntent.setData(Uri.parse(\"tel:\" + phoneNumber));\r\n       try {\r\n           startActivity(callIntent);\r\n       } catch (Exception e) {\r\n           Toast.makeText(MainActivity.this, \"Call failed, please try again later.\", Toast.LENGTH_LONG).show();\r\n           e.printStackTrace();\r\n       }\r\n   }\r\n\r\n   private void playBuzzerSound() {\r\n       AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);\r\n       audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);\r\n       MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.alarm_sound);\r\n       mediaPlayer.start();\r\n       mediaPlayer.setOnCompletionListener(mp -&gt; mp.release());\r\n   }\r\n\r\n   private void sendCurrentLocation() {\r\n       if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\r\n           fusedLocationClient.getLastLocation().addOnCompleteListener(new OnCompleteListener&lt;Location&gt;() {\r\n               @Override\r\n               public void onComplete(Task&lt;Location&gt; task) {\r\n                   if (task.isSuccessful() &amp;&amp; task.getResult() != null) {\r\n                       Location location = task.getResult();\r\n                       String message = \"I am in danger! My current location is: https:\/\/www.google.com\/maps?q=\" + location.getLatitude() + \",\" + location.getLongitude();\r\n                       sendLocationSms(message);\r\n                   } else {\r\n                       Toast.makeText(MainActivity.this, \"Failed to get location.\", Toast.LENGTH_SHORT).show();\r\n                   }\r\n               }\r\n           });\r\n       } else {\r\n           ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_CODE);\r\n       }\r\n   }\r\n\r\n   private void sendLocationSms(String message) {\r\n       CollectionReference contactsRef = db.collection(\"contacts\");\r\n       contactsRef.get().addOnCompleteListener(task -&gt; {\r\n           if (task.isSuccessful() &amp;&amp; !task.getResult().isEmpty()) {\r\n               for (QueryDocumentSnapshot document : task.getResult()) {\r\n                   String phoneNumber = document.getString(\"phoneNumber\");\r\n                   sendSms(phoneNumber, message);\r\n               }\r\n               Toast.makeText(MainActivity.this, \"Location sent to emergency contacts.\", Toast.LENGTH_SHORT).show();\r\n           } else {\r\n               Toast.makeText(MainActivity.this, \"No emergency contacts found.\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       });\r\n   }\r\n\r\n   @Override\r\n   public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\r\n       super.onRequestPermissionsResult(requestCode, permissions, grantResults);\r\n       if (requestCode == SMS_PERMISSION_CODE) {\r\n           if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n               Toast.makeText(this, \"SMS permission granted\", Toast.LENGTH_SHORT).show();\r\n           } else {\r\n               Toast.makeText(this, \"SMS permission denied\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       } else if (requestCode == CALL_PERMISSION_CODE) {\r\n           if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n               Toast.makeText(this, \"Call permission granted\", Toast.LENGTH_SHORT).show();\r\n           } else {\r\n               Toast.makeText(this, \"Call permission denied\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       } else if (requestCode == LOCATION_PERMISSION_CODE) {\r\n           if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n               Toast.makeText(this, \"Location permission granted\", Toast.LENGTH_SHORT).show();\r\n           } else {\r\n               Toast.makeText(this, \"Location permission denied\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       }\r\n   }\r\n}\r\n\r\n<\/pre>\n<p><strong>Explanation:<\/strong><\/p>\n<ul>\n<li>Import the necessary <strong>Android<\/strong> libraries and <strong>Firebase<\/strong> libraries. Define <strong>MainActivity<\/strong> and declare the constants to request permissions for sending SMS, making calls, and accessing location.<\/li>\n<li>We declare two variables, which are used to reference <strong>Firebase Firestore<\/strong> and the <strong>FusedLocationProviderClient<\/strong> for location services. <strong>OnCreate()<\/strong> initializes the activity, sets the layout, and initializes Firebase.<\/li>\n<li>After that, we check for necessary permissions and request them if not already granted.\u00a0<strong>The toolbar<\/strong>\u00a0is used to set the app\u00a0<strong>Action Bar,<\/strong> and then we initialise the variables.<\/li>\n<li>We declare <strong>CardView<\/strong> for contacts, notifications, emergency calls, emergency alarms, and currentLocation, set them with <strong>setOnClickListener()<\/strong>,\u00a0and navigate to their respective <strong>Activities<\/strong> on Click.<\/li>\n<li><strong>sendEmergencyMessage()<\/strong> retrieves emergency contacts using\u00a0<strong>contactsRef<\/strong> from Firebase and sends an SMS to each contact with an emergency message.<\/li>\n<li><strong>sendSms()<\/strong> sends an SMS to the given phone number with the provided message. <strong>makeEmergencyCall()<\/strong> fetches the top emergency contact from Firebase and initiates a call to that contact.<\/li>\n<li>We use <strong>initiateCall()<\/strong> to start a call to the emergency phone number. <strong>playBuzzerSound()<\/strong> plays a buzzer sound at maximum volume.<\/li>\n<li><strong>sendCurrentLocation()<\/strong> is used to fetch the user&#8217;s current location and send it to emergency contacts via SMS. <strong>sendLocationSms<\/strong> method sends the location SMS to emergency contacts fetched from Firebase.<\/li>\n<li><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><strong>onRequestPermissionsResult()<\/strong> handles the result of permission requests, whether permissions were granted or denied, and displays the messages.<\/span><\/li>\n<\/ul>\n<h4>2. ContactsActivity.java<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.example.smartwomensafetyapplication;\r\n\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.Toast;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport androidx.recyclerview.widget.LinearLayoutManager;\r\nimport androidx.recyclerview.widget.RecyclerView;\r\nimport com.google.android.material.button.MaterialButton;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.QueryDocumentSnapshot;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class ContactsActivity extends AppCompatActivity {\r\n   private RecyclerView recyclerViewContacts;\r\n   private ContactAdapter contactAdapter;\r\n   private List&lt;Contact&gt; contactList;\r\n   private FirebaseFirestore db;\r\n   private CollectionReference contactsRef;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_contacts);\r\n\r\n       db = FirebaseFirestore.getInstance();\r\n       contactsRef = db.collection(\"contacts\");\r\n\r\n       recyclerViewContacts = findViewById(R.id.recycler_view_contacts);\r\n       recyclerViewContacts.setLayoutManager(new LinearLayoutManager(this));\r\n\r\n       contactList = new ArrayList&lt;&gt;();\r\n       contactAdapter = new ContactAdapter(this, contactList);\r\n       recyclerViewContacts.setAdapter(contactAdapter);\r\n\r\n       loadContacts();\r\n\r\n       MaterialButton addContactButton = findViewById(R.id.button_add_contact);\r\n       MaterialButton deleteContactButton = findViewById(R.id.button_delete_contact);\r\n\r\n       addContactButton.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               Intent intent = new Intent(ContactsActivity.this, AddContactActivity.class);\r\n               startActivity(intent);\r\n           }\r\n       });\r\n\r\n       deleteContactButton.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               deleteContact();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void loadContacts() {\r\n       contactsRef.get().addOnCompleteListener(task -&gt; {\r\n           if (task.isSuccessful()) {\r\n               contactList.clear();\r\n               for (QueryDocumentSnapshot document : task.getResult()) {\r\n                   Contact contact = document.toObject(Contact.class);\r\n                   contactList.add(contact);\r\n               }\r\n               contactAdapter.notifyDataSetChanged();\r\n           } else {\r\n               Toast.makeText(ContactsActivity.this, \"Error getting contacts.\", Toast.LENGTH_SHORT).show();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void deleteContact() {\r\n       \/\/ Logic for selecting and deleting a contact\r\n       if (!contactList.isEmpty()) {\r\n           \/\/ For simplicity, we delete the first contact in the list\r\n           Contact contactToDelete = contactList.get(0);\r\n           contactsRef.whereEqualTo(\"name\", contactToDelete.getName())\r\n                   .whereEqualTo(\"phoneNumber\", contactToDelete.getPhoneNumber())\r\n                   .get()\r\n                   .addOnCompleteListener(task -&gt; {\r\n                       if (task.isSuccessful() &amp;&amp; !task.getResult().isEmpty()) {\r\n                           task.getResult().getDocuments().get(0).getReference().delete().addOnSuccessListener(aVoid -&gt; {\r\n                               contactList.remove(contactToDelete);\r\n                               contactAdapter.notifyDataSetChanged();\r\n                               Toast.makeText(ContactsActivity.this, \"Contact deleted.\", Toast.LENGTH_SHORT).show();\r\n                           }).addOnFailureListener(e -&gt; {\r\n                               Toast.makeText(ContactsActivity.this, \"Error deleting contact.\", Toast.LENGTH_SHORT).show();\r\n                           });\r\n                       }\r\n                   });\r\n       }\r\n   }\r\n\r\n   @Override\r\n   protected void onResume() {\r\n       super.onResume();\r\n       loadContacts();\r\n   }\r\n}\r\n\r\n<\/pre>\n<p><strong>Explanation:<\/strong><\/p>\n<ul>\n<li>Import the required\u00a0<strong>Android<\/strong>\u00a0libraries and declare\u00a0<strong>the ContactsActivity<\/strong>\u00a0class, which extends\u00a0<strong>AppCompatActivity<\/strong>.\u00a0We declare the variables that we are going to use.<\/li>\n<li><strong>onCreate()<\/strong>\u00a0initialises the activity, and then we initialise\u00a0<strong>Firebase<\/strong>\u00a0<strong>Firestore<\/strong> and reference the database.\u00a0We set up the <strong>RecyclerView<\/strong> with a linear layout manager.<\/li>\n<li>We initialise the contact list and the adapter, then create two\u00a0<strong>Material Buttons: Add Contact<\/strong>\u00a0and\u00a0<strong>Delete Contact,<\/strong> along with\u00a0their click listeners.\u00a0The <strong>addContactButton<\/strong> opens <strong>AddContactActivity,<\/strong> and the <strong>deleteContactButton<\/strong> calls the <strong>deleteContact()<\/strong>.<\/li>\n<li><strong>loadContacts()<\/strong> fetches contacts from Firestore, clears the current contact list, adds fetched contacts to the list and notifies the adapter to update the UI.<\/li>\n<li><strong>deleteContact()<\/strong> is used to delete a contact from the database and UI. It removes the contact from the list and updates the adapter.<\/li>\n<\/ul>\n<h4>3. AddContactActivity.java<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.example.smartwomensafetyapplication;\r\n\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.EditText;\r\nimport android.widget.Toast;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport com.google.android.material.button.MaterialButton;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\n\r\npublic class AddContactActivity extends AppCompatActivity {\r\n   private EditText editTextName, editTextPhone;\r\n   private FirebaseFirestore db;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_add_contact);\r\n\r\n       db = FirebaseFirestore.getInstance();\r\n\r\n       editTextName = findViewById(R.id.edit_text_name);\r\n       editTextPhone = findViewById(R.id.edit_text_phone);\r\n       MaterialButton buttonSave = findViewById(R.id.button_save_contact);\r\n\r\n       buttonSave.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               saveContact();\r\n           }\r\n       });\r\n   }\r\n\r\n   private void saveContact() {\r\n       String name = editTextName.getText().toString().trim();\r\n       String phone = editTextPhone.getText().toString().trim();\r\n\r\n       if (name.isEmpty() || phone.isEmpty()) {\r\n           Toast.makeText(AddContactActivity.this, \"Please enter both name and phone number.\", Toast.LENGTH_SHORT).show();\r\n           return;\r\n       }\r\n\r\n       Contact newContact = new Contact(name, phone);\r\n       db.collection(\"contacts\").add(newContact)\r\n               .addOnSuccessListener(documentReference -&gt; {\r\n                   Toast.makeText(AddContactActivity.this, \"Contact added successfully.\", Toast.LENGTH_SHORT).show();\r\n                   finish();\r\n               })\r\n               .addOnFailureListener(e -&gt; Toast.makeText(AddContactActivity.this, \"Error adding contact.\", Toast.LENGTH_SHORT).show());\r\n   }\r\n}\r\n<\/pre>\n<p><strong>Explanation:<\/strong><\/p>\n<ul>\n<li>We import the necessary <strong>Android<\/strong> and <strong>Firebase<\/strong> libraries and declare the <strong>AddContactActivity<\/strong> class, which extends <strong>AppCompatActivity<\/strong>.<\/li>\n<li>We declare variables for <strong>EditText<\/strong> fields and the <strong>Firebase Firestore<\/strong> database.\u00a0<strong>The OnCreate<\/strong> method initialises the activity and Firebase Firestore.<\/li>\n<li>It also initializes the <strong>EditText<\/strong> fields and the <strong>MaterialButton<\/strong> by finding them in the layout and setting <strong>setOnClickListener()<\/strong> on the Save button.<\/li>\n<li><strong>saveContact<\/strong> method is used to save a new contact to Firestore. It reads the name and phone number from the EditText fields, creates a new Contact object, and saves it to the contacts collection in Firestore.<\/li>\n<\/ul>\n<h4>4. ContactAdapter.java<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.example.smartwomensafetyapplication;\r\n\r\nimport android.content.Context;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.TextView;\r\nimport androidx.annotation.NonNull;\r\nimport androidx.recyclerview.widget.RecyclerView;\r\nimport java.util.List;\r\n\r\npublic class ContactAdapter extends RecyclerView.Adapter&lt;ContactAdapter.ContactViewHolder&gt; {\r\n   private Context context;\r\n   private List&lt;Contact&gt; contactList;\r\n\r\n   public ContactAdapter(Context context, List&lt;Contact&gt; contactList) {\r\n       this.context = context;\r\n       this.contactList = contactList;\r\n   }\r\n\r\n   @NonNull\r\n   @Override\r\n   public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\r\n       View view = LayoutInflater.from(context).inflate(R.layout.contact_item, parent, false);\r\n       return new ContactViewHolder(view);\r\n   }\r\n\r\n   @Override\r\n   public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {\r\n       Contact contact = contactList.get(position);\r\n       holder.textViewName.setText(contact.getName());\r\n       holder.textViewPhoneNumber.setText(contact.getPhoneNumber());\r\n   }\r\n\r\n   @Override\r\n   public int getItemCount() {\r\n       return contactList.size();\r\n   }\r\n\r\n   public static class ContactViewHolder extends RecyclerView.ViewHolder {\r\n       TextView textViewName;\r\n       TextView textViewPhoneNumber;\r\n\r\n       public ContactViewHolder(@NonNull View itemView) {\r\n           super(itemView);\r\n           textViewName = itemView.findViewById(R.id.text_view_name);\r\n           textViewPhoneNumber = itemView.findViewById(R.id.text_view_phone_number);\r\n       }\r\n   }\r\n}\r\n\r\n<\/pre>\n<p><strong>Explanation:<\/strong><\/p>\n<ul>\n<li>Import the required <strong>Android<\/strong> libraries and define the <strong>ContactAdapter<\/strong> class, which is a custom adapter for displaying a list of Contact objects in a <strong>RecyclerView<\/strong>. <strong>Adapter<\/strong> binds the contact data to the RecyclerView items.<\/li>\n<li><strong>We define a context and a list, and then initialise them with the help of a constructor.onCreateViewHolder()<\/strong> is called when the RecyclerView needs a new ContactViewHolder to represent an item.<\/li>\n<li><strong>onBindViewHolder()<\/strong> is used to display the data at the specified position. It creates the <strong>Contact<\/strong> object at a given position and then sets the name and phone number.<\/li>\n<li><strong>getItemCount()<\/strong> counts the total number of items in the contactList, and <strong>ContactViewHolder()<\/strong> holds the views for each item in the RecyclerView.<\/li>\n<\/ul>\n<h3>Android Smart Women&#8217;s Safety Application Output<\/h3>\n<p><a href=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-women-safety-app-landing-screen.webp\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-447926 size-full\" src=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-women-safety-app-landing-screen.webp\" alt=\"android women safety app landing screen\" width=\"413\" height=\"881\" \/><\/a><\/p>\n<h3><a href=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/emergency-contacts.webp\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-447927 size-full\" src=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/emergency-contacts.webp\" alt=\"emergency contacts\" width=\"927\" height=\"845\" \/><\/a><\/h3>\n<h3>Conclusion<\/h3>\n<p>We have successfully implemented our TechVidvan Smart Women Safety Application using Java and XML. We have discussed the project details, prerequisites, and code implementation. We have used Firebase Database for its simple features for backend services. You can also implement the feature to locate nearby Police Stations in the Application.<\/p>\n<p>I hope you liked this project. Thank You.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We will try to make a Smart Women Safety Application using Android. This project will explain how to integrate basic security features into a user-friendly Android application to help ensure the safety of women.&#46;&#46;&#46;<\/p>\n","protected":false},"author":710,"featured_media":447924,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2791],"tags":[3873,3874,4910,3007,5750,5752,5753,5751,5754],"class_list":["post-447922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","tag-android-project","tag-android-project-for-beginners","tag-android-project-for-practice","tag-android-project-ideas","tag-android-women-safety-application","tag-android-women-safety-application-project","tag-smart-women-safety-app","tag-women-safety-application-using-android","tag-women-safety-application-with-android"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Android Project - Smart Women Safety Application - TechVidvan<\/title>\n<meta name=\"description\" content=\"Android Women Safety App will be used to provide women with quick tools to enhance their safety and provide access to emergency services.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android Project - Smart Women Safety Application - TechVidvan\" \/>\n<meta property=\"og:description\" content=\"Android Women Safety App will be used to provide women with quick tools to enhance their safety and provide access to emergency services.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/\" \/>\n<meta property=\"og:site_name\" content=\"TechVidvan\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TechVidvan\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-05T09:10:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-05T10:06:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"TechVidvan Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vidvantech\" \/>\n<meta name=\"twitter:site\" content=\"@vidvantech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TechVidvan Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android Project - Smart Women Safety Application - TechVidvan","description":"Android Women Safety App will be used to provide women with quick tools to enhance their safety and provide access to emergency services.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/","og_locale":"en_US","og_type":"article","og_title":"Android Project - Smart Women Safety Application - TechVidvan","og_description":"Android Women Safety App will be used to provide women with quick tools to enhance their safety and provide access to emergency services.","og_url":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/","og_site_name":"TechVidvan","article_publisher":"https:\/\/www.facebook.com\/TechVidvan\/","article_published_time":"2026-03-05T09:10:34+00:00","article_modified_time":"2026-03-05T10:06:10+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp","type":"image\/webp"}],"author":"TechVidvan Team","twitter_card":"summary_large_image","twitter_creator":"@vidvantech","twitter_site":"@vidvantech","twitter_misc":{"Written by":"TechVidvan Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#article","isPartOf":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/"},"author":{"name":"TechVidvan Team","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/person\/829765a79c50bfc57ec4a1049442c1d5"},"headline":"Android Project &#8211; Smart Women Safety Application","datePublished":"2026-03-05T09:10:34+00:00","dateModified":"2026-03-05T10:06:10+00:00","mainEntityOfPage":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/"},"wordCount":963,"commentCount":0,"publisher":{"@id":"https:\/\/techvidvan.com\/tutorials\/#organization"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#primaryimage"},"thumbnailUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp","keywords":["android project","android project for beginners","android project for practice","android project ideas","android women safety application","android women safety application project","smart women safety app","women safety application using android","women safety application with android"],"articleSection":["Android Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/","url":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/","name":"Android Project - Smart Women Safety Application - TechVidvan","isPartOf":{"@id":"https:\/\/techvidvan.com\/tutorials\/#website"},"primaryImageOfPage":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#primaryimage"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#primaryimage"},"thumbnailUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp","datePublished":"2026-03-05T09:10:34+00:00","dateModified":"2026-03-05T10:06:10+00:00","description":"Android Women Safety App will be used to provide women with quick tools to enhance their safety and provide access to emergency services.","breadcrumb":{"@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#primaryimage","url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp","contentUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2025\/10\/android-smart-women-safety-application.webp","width":1200,"height":628,"caption":"android smart women safety application"},{"@type":"BreadcrumbList","@id":"https:\/\/techvidvan.com\/tutorials\/women-safety-application-android-project\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/techvidvan.com\/tutorials\/"},{"@type":"ListItem","position":2,"name":"Android Project &#8211; Smart Women Safety Application"}]},{"@type":"WebSite","@id":"https:\/\/techvidvan.com\/tutorials\/#website","url":"https:\/\/techvidvan.com\/tutorials\/","name":"TechVidvan Blogs","description":"","publisher":{"@id":"https:\/\/techvidvan.com\/tutorials\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/techvidvan.com\/tutorials\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/techvidvan.com\/tutorials\/#organization","name":"TechVidvan","url":"https:\/\/techvidvan.com\/tutorials\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/logo\/image\/","url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2024\/03\/techvidvan-logo-200x50-1.webp","contentUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2024\/03\/techvidvan-logo-200x50-1.webp","width":200,"height":50,"caption":"TechVidvan"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/TechVidvan\/","https:\/\/x.com\/vidvantech"]},{"@type":"Person","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/person\/829765a79c50bfc57ec4a1049442c1d5","name":"TechVidvan Team"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/447922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/users\/710"}],"replies":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/comments?post=447922"}],"version-history":[{"count":4,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/447922\/revisions"}],"predecessor-version":[{"id":447937,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/447922\/revisions\/447937"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/media\/447924"}],"wp:attachment":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/media?parent=447922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/categories?post=447922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/tags?post=447922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}