

{"id":113633,"date":"2023-04-04T09:00:04","date_gmt":"2023-04-04T03:30:04","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=113633"},"modified":"2026-06-01T14:11:24","modified_gmt":"2026-06-01T08:41:24","slug":"advanced-android-crm","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/","title":{"rendered":"Make Better Business Decisions with Advanced Android CRM"},"content":{"rendered":"<p>Customer Relationship Management (CRM) is an essential aspect of business management that involves building and maintaining long-term relationships with customers. In this project, we will be creating an Advanced CRM Android app that has two modules, Employer and Employees.<\/p>\n<p>The Employer can create tasks, delete tasks, and register new users to the app. The Employees can view the tasks and update their status, whether they are complete or incomplete.<\/p>\n<p>This app will be designed to streamline communication between employers and employees, thereby enhancing productivity and efficiency.<\/p>\n<h3>About Android CRM App<\/h3>\n<p>The objective of this project is to guide you through the process of creating an Advanced CRM Android app that enables employers to create tasks, delete tasks, and register new users to the app. Employees can view the tasks assigned to them and update their status, whether they are complete or incomplete.<\/p>\n<p>By the end of this project, you should be able to create a basic Advanced CRM app that can be customized to fit your personal or professional needs.<\/p>\n<h3>Prerequisites for CRM App using Android<\/h3>\n<p>To follow along with this project, you will need the following:<\/p>\n<ul>\n<li>A computer running Android Studio.<\/li>\n<li>Basic knowledge of Java and Android app development using Android Studio.<\/li>\n<li>An Android device or emulator to test the app<\/li>\n<\/ul>\n<h3>Download Android CRM App Project<\/h3>\n<p>Please download the source code of Android CRM App Project from the following link: <a href=\"https:\/\/drive.google.com\/file\/d\/1JtiIngIDM1IDJTp--Ie39EFyqAdjcmLi\/view?usp=drive_link\"><strong>Android CRM App Project Code<\/strong><\/a><\/p>\n<h3>Steps to Create CRM App using Android<\/h3>\n<p>Following are the steps for developing the Android CRM App Project:<\/p>\n<p><strong>Step 1:<\/strong> Creating the android project using java as the language and adding the firebase library using the inbuilt firebase library assistant in the Android Studio.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113800 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/android-studio-output-scaled.webp\" alt=\"android studio output\" width=\"2560\" height=\"1557\" \/><\/p>\n<p><strong>Step 2:<\/strong> Creating Login form layout: It will be used to login both the employer and employee.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113801 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/employee-output-scaled.webp\" alt=\"employee output\" width=\"2560\" height=\"1557\" \/><\/p>\n<p><strong>Login.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\n\r\nimport androidx.annotation.NonNull;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\n\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.text.TextUtils;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport android.widget.ProgressBar;\r\nimport android.widget.Toast;\r\n\r\nimport com.google.android.gms.tasks.OnCompleteListener;\r\nimport com.google.android.gms.tasks.Task;\r\nimport com.google.firebase.auth.AuthResult;\r\nimport com.google.firebase.auth.FirebaseAuth;\r\n\r\npublic class Login extends AppCompatActivity {\r\n\r\n   EditText mEmail, mPassword;\r\n   Button mLoginBtn;\r\n   ProgressBar progressBar;\r\n   FirebaseAuth fAuth;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_login);\r\n\r\n       \/\/ if user is already logged in, redirect to main activity\r\n       if(FirebaseAuth.getInstance().getCurrentUser() != null){\r\n           if(FirebaseAuth.getInstance().getCurrentUser().getEmail().equals(\"techvidvan@gmail.com\")) {\r\n               startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n               finish();\r\n           }\r\n           else{\r\n               startActivity(new Intent(getApplicationContext(), LoggedEmployee.class));\r\n               finish();\r\n           }\r\n       }\r\n\r\n\r\n       mEmail      = findViewById(R.id.logEmail);\r\n       mPassword   = findViewById(R.id.logPassword);\r\n       mLoginBtn   = findViewById(R.id.loginButton);\r\n       progressBar = findViewById(R.id.progressBarLogin);\r\n       fAuth       = FirebaseAuth.getInstance();\r\n\r\n       mLoginBtn.setOnClickListener(new View.OnClickListener() {\r\n           @Override\r\n           public void onClick(View v) {\r\n               final String email = mEmail.getText().toString().trim();\r\n               String password = mPassword.getText().toString().trim();\r\n\r\n               \/\/email and password validation\r\n               if (TextUtils.isEmpty(email)){\r\n                   mEmail.setError(\"Email address required!\");\r\n                   return;\r\n               }\r\n\r\n               if(TextUtils.isEmpty(password)){\r\n                   mPassword.setError(\"Password required!\");\r\n                   return;\r\n               }\r\n\r\n               if(password.length()&lt;6){\r\n                   mPassword.setError(\"Password must be at least 6 characters long!\");\r\n                   return;\r\n               }\r\n               \/\/Authenticate user\r\n\r\n               fAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener&lt;AuthResult&gt;() {\r\n                   @Override\r\n                   public void onComplete(@NonNull Task&lt;AuthResult&gt; task) {\r\n\r\n                       if(task.isSuccessful()){\r\n                           String email= mEmail.getText().toString();\r\n                           if(email.equals(\"techvidvan@gmail.com\")) {\r\n\r\n                               Toast.makeText(Login.this, \"Admin Logged in Successfully\", Toast.LENGTH_SHORT).show();\r\n                               startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n                           }\r\n                           else{\r\n                               startActivity(new Intent(getApplicationContext(), LoggedEmployee.class));\r\n                           }\r\n\r\n                       }\r\n                       else{\r\n                           Toast.makeText(Login.this, \"Incorrect email or password!\" , Toast.LENGTH_SHORT).show();\r\n                       }\r\n                   }\r\n               });\r\n\r\n\r\n           }\r\n       });\r\n\r\n\r\n   }\r\n\r\n\r\n   @Override\r\n   protected void onStart() {\r\n       super.onStart();\r\n\r\n       if(fAuth.getCurrentUser() != null){\r\n           \/\/check if user is admin\r\n           String email= mEmail.getText().toString();\r\n           if(email.equals(\"techvidvan@gmail.com\")) {\r\n\r\n               Toast.makeText(Login.this, \"Admin Logged in Successfully\", Toast.LENGTH_SHORT).show();\r\n               startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n           }\r\n           else{\r\n               Toast.makeText(this, \"User Logged in Successfully\", Toast.LENGTH_SHORT).show();\r\n               startActivity(new Intent(getApplicationContext(), LoggedEmployee.class));\r\n           }\r\n       }\r\n   }\r\n}<\/pre>\n<p><strong>Step 3:<\/strong> Creating Employee Home Page and Employer Home Page : It will allow the employer to Create tasks, check task progress and Add new employees to the app. While Employee can Only view his\/her tasks.<\/p>\n<p><strong>Employee Home Page<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113802 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/employee-home-page-output-scaled.webp\" alt=\"employee home page output\" width=\"2560\" height=\"1557\" \/><\/p>\n<p><strong>LoggedEmployee.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\n\r\nimport androidx.appcompat.app.AppCompatActivity;\r\n\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\n\r\nimport com.google.firebase.auth.FirebaseAuth;\r\n\r\npublic class LoggedEmployee extends AppCompatActivity {\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_logged_employee);\r\n   }\r\n   public void logout(View view){\r\n       FirebaseAuth.getInstance().signOut();\r\n       startActivity(new Intent(getApplicationContext(), Login.class));\r\n       finish();\r\n\r\n   }\r\n   public void tasks(View view){\r\n\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskForEmployee.class));\r\n       finish();\r\n\r\n   }\r\n\r\n}<\/pre>\n<p><strong>LoggedBoss.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport com.google.firebase.auth.FirebaseAuth;\r\n\r\npublic class LoggedBoss extends AppCompatActivity {\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_logged_boss);\r\n   }\r\n   public void logout(View view){\r\n\r\n       FirebaseAuth.getInstance().signOut();\r\n       startActivity(new Intent(getApplicationContext(), Login.class));\r\n       finish();\r\n\r\n   }\r\n\r\n   public void AddTask(View view){\r\n       startActivity(new Intent(getApplicationContext(), SaveTask.class));\r\n       finish();\r\n   }\r\n\r\n   public void LoadTask(View view){\r\n       startActivity(new Intent(getApplicationContext(), LoadTask.class));\r\n       finish();\r\n   }\r\n   public void AddEmployee(View view){\r\n       startActivity(new Intent(getApplicationContext(), Register.class));\r\n       finish();\r\n   }\r\n\r\n\r\n}<\/pre>\n<p><strong>Employer Home page<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113803 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/employer-output-scaled.webp\" alt=\"employer output\" width=\"2560\" height=\"1552\" \/><\/p>\n<p><strong>LoggedBoss.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport com.google.firebase.auth.FirebaseAuth;\r\n\r\npublic class LoggedBoss extends AppCompatActivity {\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_logged_boss);\r\n   }\r\n   public void logout(View view){\r\n\r\n       FirebaseAuth.getInstance().signOut();\r\n       startActivity(new Intent(getApplicationContext(), Login.class));\r\n       finish();\r\n\r\n   }\r\n\r\n   public void AddTask(View view){\r\n       startActivity(new Intent(getApplicationContext(), SaveTask.class));\r\n       finish();\r\n   }\r\n\r\n   public void LoadTask(View view){\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskBoss.class));\r\n       finish();\r\n   }\r\n   public void AddEmployee(View view){\r\n       startActivity(new Intent(getApplicationContext(), Register.class));\r\n       finish();\r\n   }\r\n\r\n\r\n}<\/pre>\n<p><strong>Step 4:<\/strong> Creating Load Task Page for Employer and Employee: This will show the list of pending and completed tasks to the employer and employee. It will show the Employer and Employee, the task progress and task needs to be completed.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113804 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/load-task-output-scaled.webp\" alt=\"load task output\" width=\"2560\" height=\"1552\" \/><\/p>\n<p><strong>LoadTaskBoss.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\n\r\nimport androidx.annotation.Nullable;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\n\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.AdapterView;\r\nimport android.widget.ArrayAdapter;\r\nimport android.widget.ListView;\r\n\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.EventListener;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.FirebaseFirestoreException;\r\nimport com.google.firebase.firestore.QueryDocumentSnapshot;\r\nimport com.google.firebase.firestore.QuerySnapshot;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\n\r\npublic class LoadTaskBoss extends AppCompatActivity {\r\n\r\n   private ListView mListView;\r\n\r\n   private FirebaseFirestore db = FirebaseFirestore.getInstance();\r\n   private CollectionReference taskRef = db.collection(\"Tasks\");\r\n\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_load_task);\r\n\r\n   }\r\n\r\n   @Override\r\n   protected void onStart() {\r\n       super.onStart();\r\n       mListView = findViewById(R.id.listView);\r\n\r\n\r\n       \/\/ Initializing a new String Array\r\n       String[] tasks = new String[]{\r\n\r\n       };\r\n\r\n       \/\/List of task\r\n       final List&lt;String&gt; task_list = new ArrayList&lt;String&gt;(Arrays.asList(tasks));\r\n\r\n       \/\/ Create an ArrayAdapter\r\n       final ArrayAdapter&lt;String&gt; arrayAdapter = new ArrayAdapter&lt;String&gt;\r\n               (this, android.R.layout.simple_list_item_1, task_list);\r\n\r\n\r\n       mListView.setAdapter(arrayAdapter);\r\n\r\n       taskRef.addSnapshotListener(new EventListener&lt;QuerySnapshot&gt;() {\r\n           @Override\r\n           public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {\r\n               if (e != null) {\r\n                   return;\r\n               }\r\n               int i = 0;\r\n\r\n               \/\/Array initialized for 300 elements;\r\n               final String[] tasksIdArray = new String[300];\r\n               for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {\r\n                   Task task = documentSnapshot.toObject(Task.class);\r\n                   task.setDocumentID(documentSnapshot.getId());\r\n\r\n                   String documentID = task.getDocumentID();\r\n                   String description = task.getDescription();\r\n                   \/\/limiting the description to 20 characters\r\n                   description = description.substring(0, Math.min(description.length(), 70))+ \"...\";\r\n                   String date = task.getDate();\r\n                   String status = task.getStatus();\r\n                   String company = task.getCompany();\r\n\r\n\r\n                   tasksIdArray[i] = documentID;\r\n                   i++;\r\n\r\n                   task_list.add(\"Company: \" + company + \"\\n\" + \"Description: \" + description + \"\\n\" + \"Date: \" + date + \"\\n\" + \"Status: \" + status);\r\n                   arrayAdapter.notifyDataSetChanged();\r\n\r\n               }\r\n\r\n               mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r\n                   @Override\r\n                   public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {\r\n\r\n\r\n                       final Intent intent = new Intent(LoadTaskBoss.this, TaskDetails.class);\r\n                       int pos = parent.getPositionForView(view);\r\n\r\n                       String taskID = tasksIdArray[pos];\r\n                       intent.putExtra(\"taskID\", \"\" + taskID);\r\n                       startActivity(intent);\r\n                   }\r\n               });\r\n\r\n           }\r\n       });\r\n   }\r\n\r\n   public void back(View v) {\r\n       startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n       finish();\r\n   }\r\n\r\n\r\n}<\/pre>\n<p><strong>LoadTaskForEmployee.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport androidx.annotation.Nullable;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.AdapterView;\r\nimport android.widget.ArrayAdapter;\r\nimport android.widget.ListView;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.EventListener;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.FirebaseFirestoreException;\r\nimport com.google.firebase.firestore.QueryDocumentSnapshot;\r\nimport com.google.firebase.firestore.QuerySnapshot;\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\n\r\npublic class LoadTaskForEmployee extends AppCompatActivity {\r\n\r\n   private ListView mListView;\r\n\r\n   private FirebaseFirestore db = FirebaseFirestore.getInstance();\r\n   private CollectionReference zadaniaRef = db.collection(\"Tasks\");\r\n\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_load_task_for_employee);\r\n\r\n   }\r\n\r\n   @Override\r\n   protected void onStart() {\r\n       super.onStart();\r\n       mListView = findViewById(R.id.listViewForEmployee);\r\n\r\n\r\n       \/\/ Initializing a new String Array\r\n       String[] tasks = new String[] {\r\n       };\r\n\r\n       \/\/List of task\r\n       final List&lt;String&gt; task_list = new ArrayList&lt;String&gt;(Arrays.asList(tasks));\r\n\r\n       \/\/ Create an ArrayAdapter\r\n       final ArrayAdapter&lt;String&gt; arrayAdapter = new ArrayAdapter&lt;String&gt;\r\n               (this, android.R.layout.simple_list_item_1, task_list);\r\n\r\n       mListView.setAdapter(arrayAdapter);\r\n\r\n\r\n       zadaniaRef.addSnapshotListener(new EventListener&lt;QuerySnapshot&gt;() {\r\n           @Override\r\n           public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {\r\n               if (e != null) {\r\n                   return;\r\n               }\r\n               int i=0;\r\n\r\n               \/\/Array initialized for 300 elements;\r\n               final String[] tasksIdArray = new String[300];\r\n               for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {\r\n                   Task task = documentSnapshot.toObject(Task.class);\r\n                   task.setDocumentID(documentSnapshot.getId());\r\n\r\n                   String documentID = task.getDocumentID();\r\n                   String description = task.getDescription();\r\n                   description = description.substring(0, Math.min(description.length(), 70))+ \"...\";\r\n                   String company = task.getCompany();\r\n                   String date = task.getDate();\r\n                   String status = task.getStatus();\r\n\r\n                   tasksIdArray[i]=documentID;\r\n                   i++;\r\n\r\n                   task_list.add(\"Company: \" + company + \"\\n\" + \"Description: \" + description + \"\\n\" + \"Date: \" + date + \"\\n\" + \"Status: \" + status);\r\n                   arrayAdapter.notifyDataSetChanged();\r\n\r\n               }\r\n\r\n               mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r\n                   @Override\r\n                   public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {\r\n\r\n\r\n                       final Intent intent = new Intent(LoadTaskForEmployee.this, TaskDetailsForEmployee.class);\r\n                       int pos = parent.getPositionForView(view);\r\n\r\n                       String taskID = tasksIdArray[pos];\r\n                       intent.putExtra(\"taskID\", \"\"+taskID);\r\n                       startActivity(intent);\r\n                   }\r\n               });\r\n\r\n           }\r\n       });\r\n   }\r\n   public void back(View v){\r\n       startActivity(new Intent(getApplicationContext(), LoggedEmployee.class));\r\n       finish();\r\n   }\r\n\r\n}<\/pre>\n<p><strong>Step 5:<\/strong> Creating Register Page: It will only be visible to the employer. It will be used to register new employees to the app. Only employer can register the employees to the system.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113805 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/register-page-output-scaled.webp\" alt=\"register page output\" width=\"2560\" height=\"1552\" \/><\/p>\n<p><strong>Register.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\n\r\nimport androidx.annotation.NonNull;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\n\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.text.TextUtils;\r\nimport android.util.Log;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport android.widget.ProgressBar;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\nimport com.google.android.gms.tasks.OnCompleteListener;\r\nimport com.google.android.gms.tasks.OnSuccessListener;\r\nimport com.google.android.gms.tasks.Task;\r\nimport com.google.firebase.auth.AuthResult;\r\nimport com.google.firebase.auth.FirebaseAuth;\r\nimport com.google.firebase.firestore.DocumentReference;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\n\r\npublic class Register extends AppCompatActivity {\r\n\r\n   EditText mName, mSurname, mEmail,mPassword,mPhone;\r\n   Button mRegisterBtn;\r\n   TextView mLoginBtn;\r\n   FirebaseAuth fAuth;\r\n   ProgressBar progressBar;\r\n   FirebaseFirestore fStore;\r\n   String userID;\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_register);\r\n\r\n      mName    = findViewById(R.id.regName);\r\n      mSurname = findViewById(R.id.regSurname);\r\n      mPhone   = findViewById(R.id.regPhone);\r\n      mEmail   = findViewById(R.id.regEmail);\r\n      mPassword= findViewById(R.id.regPassword);\r\n      mRegisterBtn = findViewById(R.id.btnRegister);\r\n\r\n      fAuth        = FirebaseAuth.getInstance();\r\n      fStore   =FirebaseFirestore.getInstance();\r\n      progressBar  = findViewById(R.id.progressBar);\r\n\r\n      \/\/Check that user is logged\r\n       if(fAuth.getCurrentUser() == null){\r\n           startActivity(new Intent(getApplicationContext(), Login.class));\r\n       }\r\n\r\n      mRegisterBtn.setOnClickListener(new View.OnClickListener() {\r\n          @Override\r\n          public void onClick(View v) {\r\n              final String email = mEmail.getText().toString().trim();\r\n              String password = mPassword.getText().toString().trim();\r\n              final String name = mName.getText().toString();\r\n              final String phone = mPhone.getText().toString();\r\n              final String surname = mSurname.getText().toString();\r\n\r\n              \/\/register validation\r\n              if (TextUtils.isEmpty(email)){\r\n                   mEmail.setError(\"Email address required!\");\r\n                   return;\r\n              }\r\n\r\n              if(TextUtils.isEmpty(password)){\r\n                  mPassword.setError(\"Password required!\");\r\n                  return;\r\n              }\r\n\r\n              if(password.length()&lt;6){\r\n                  mPassword.setError(\"Password must be at least 6 characters long!\");\r\n                  return;\r\n              }\r\n\r\n              \/\/Set progressbar visible\r\n              progressBar.setVisibility(View.VISIBLE);\r\n\r\n               \/\/Register the user\r\n               fAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener&lt;AuthResult&gt;() {\r\n                   @Override\r\n                   public void onComplete(@NonNull Task&lt;AuthResult&gt; task) {\r\n                       if(task.isSuccessful()){\r\n                           Toast.makeText(Register.this, \"Employee Added\", Toast.LENGTH_SHORT).show();\r\n\r\n\r\n                               \/\/Save user data in collection \"users\"\r\n                               userID = fAuth.getCurrentUser().getUid();\r\n                               DocumentReference documentReference =fStore.collection(\"users\").document(userID);\r\n                               Map&lt;String, Object&gt; user = new HashMap&lt;&gt;();\r\n                               user.put(\"mName\", name);\r\n                               user.put(\"mSurname\",surname );\r\n                               user.put(\"email\", email);\r\n                               user.put(\"phone\", phone);\r\n\r\n                               documentReference.set(user).addOnSuccessListener(new OnSuccessListener&lt;Void&gt;() {\r\n                                   @Override\r\n                                   public void onSuccess(Void aVoid) {\r\n                                       Log.d(\"TAG\", \"Success! The profile was created for the user \"+userID);\r\n                                   }\r\n                               });\r\n\r\n\r\n\r\n                           startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n                       }\r\n                       else{\r\n                           Toast.makeText(Register.this, \"An error has occurred\" + task.getException().getMessage(), Toast.LENGTH_SHORT).show();\r\n                       }\r\n                   }\r\n               });\r\n\r\n          }\r\n          });\r\n   }\r\n   public void back(View v){\r\n       startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n       finish();\r\n   }\r\n}<\/pre>\n<p><strong>Step 6:<\/strong> Creating Task Page: It will allow the employer to create the new tasks for the employees. Employer will write the description of the task and client details.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113806 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/task-page-output-scaled.webp\" alt=\"task page output\" width=\"2560\" height=\"1552\" \/><\/p>\n<p><strong>SaveTask.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport java.text.SimpleDateFormat;\r\nimport androidx.annotation.NonNull;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.text.TextUtils;\r\nimport android.view.View;\r\nimport android.widget.EditText;\r\nimport android.widget.Toast;\r\nimport com.google.android.gms.tasks.OnFailureListener;\r\nimport com.google.android.gms.tasks.OnSuccessListener;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.DocumentReference;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport java.util.Date;\r\nimport java.util.Locale;\r\n\r\npublic class SaveTask extends AppCompatActivity {\r\n\r\n\r\n   private EditText editTextCompany;\r\n   private EditText editTextAddress;\r\n   private EditText editTextPhone;\r\n   private EditText editTextDescription;\r\n\r\n   private FirebaseFirestore db = FirebaseFirestore.getInstance();\r\n   private CollectionReference tasksRef = db.collection(\"Tasks\");\r\n\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_save_task);\r\n\r\n       editTextCompany =findViewById(R.id.edit_text_company);\r\n       editTextPhone =findViewById(R.id.edit_text_phone);\r\n       editTextAddress =findViewById(R.id.edit_text_adress);\r\n       editTextDescription =findViewById(R.id.edit_text_description);\r\n   }\r\n\r\n   public void saveJob(View v){\r\n       String company = editTextCompany.getText().toString();\r\n       String address = editTextAddress.getText().toString();\r\n       String phone = editTextPhone.getText().toString();\r\n       String description = editTextDescription.getText().toString();\r\n       String date = new SimpleDateFormat(\"dd-MM-yyyy HH:mm\", Locale.getDefault()).format(new Date());\r\n       String status=\"Incomplete\";\r\n\r\n       if (TextUtils.isEmpty(company)){\r\n           editTextCompany.setError(\"Company name required!\");\r\n           return;\r\n       }\r\n       if (TextUtils.isEmpty(address)){\r\n           editTextAddress.setError(\"Address required!\");\r\n           return;\r\n       }\r\n       if (TextUtils.isEmpty(phone)){\r\n           editTextPhone.setError(\"Phone number required!\");\r\n           return;\r\n       }\r\n       if (TextUtils.isEmpty(description)){\r\n           editTextDescription.setError(\"Job Description required!\");\r\n           return;\r\n       }\r\n\r\n       Task task =  new Task(company, address, phone, description, date,status);\r\n\r\n       tasksRef.add(task).addOnSuccessListener(new OnSuccessListener&lt;DocumentReference&gt;() {\r\n           @Override\r\n           public void onSuccess(DocumentReference documentReference) {\r\n               Toast.makeText(SaveTask.this, \"Task has been added\", Toast.LENGTH_SHORT).show();\r\n               startActivity(new Intent(getApplicationContext(), LoadTaskBoss.class));\r\n           }\r\n       })\r\n               .addOnFailureListener(new OnFailureListener() {\r\n                   @Override\r\n                   public void onFailure(@NonNull Exception e) {\r\n                       Toast.makeText(SaveTask.this, \"An error has occurred\", Toast.LENGTH_SHORT).show();\r\n                   }\r\n               });\r\n   }\r\n\r\n\r\n   public void back(View v){\r\n       startActivity(new Intent(getApplicationContext(), LoggedBoss.class));\r\n       finish();\r\n   }\r\n\r\n}<\/pre>\n<p><strong>Step 7:<\/strong> Creating Employer\u2019s Task Detail Page: It will show the Entire Detail of the Project to the Employer. Employer can delete the task from this page.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113807 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/task-detail-output-scaled.webp\" alt=\"task detail output\" width=\"2560\" height=\"1547\" \/><\/p>\n<p><strong>TaskDetail.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport androidx.annotation.Nullable;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.text.method.ScrollingMovementMethod;\r\nimport android.view.View;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\nimport com.fasterxml.jackson.databind.ObjectMapper;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.DocumentSnapshot;\r\nimport com.google.firebase.firestore.EventListener;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.FirebaseFirestoreException;\r\n\r\n\r\npublic class TaskDetails extends AppCompatActivity {\r\n   TextView mTextView;\r\n\r\n   private FirebaseFirestore db = FirebaseFirestore.getInstance();\r\n   private CollectionReference tasksRef = db.collection(\"Tasks\");\r\n\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_task_details);\r\n       mTextView = findViewById(R.id.taskDetails);\r\n\r\n       mTextView.setMovementMethod(new ScrollingMovementMethod());\r\n\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n\r\n\r\n       tasksRef.document(id).addSnapshotListener(new EventListener&lt;DocumentSnapshot&gt;() {\r\n           @Override\r\n           public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {\r\n\r\n               if(documentSnapshot.exists()) {\r\n                   Object object = documentSnapshot.getData();\r\n\r\n                   final ObjectMapper mapper = new ObjectMapper();\r\n                   final Task task = mapper.convertValue(object, Task.class);\r\n\r\n                   String company = task.getCompany();\r\n                   String address = task.getAddress();\r\n                   String phone = task.getPhone();\r\n                   String description = task.getDescription();\r\n                   String date = task.getDate();\r\n                   String status = task.getStatus();\r\n\r\n\r\n                   String data = \"Description: \" + description +\"\\n\\nCompany name: \" + company + \"\\nAddress: \" + address + \"\\nContact No.: \" + phone + \"\\nDate Added: \" + date+ \"\\nStatus: \"+status;\r\n                   mTextView.setText(data);\r\n               }\r\n               else{\r\n\r\n               }\r\n\r\n           }\r\n       });\r\n\r\n   }\r\n\r\n   public void delete(View v){\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n       tasksRef.document(id).delete();\r\n\r\n       Toast.makeText(this, \"Task removed!\", Toast.LENGTH_SHORT).show();\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskBoss.class));\r\n       finish();\r\n   }\r\n\r\n   public void back(View v){\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskBoss.class));\r\n       finish();\r\n   }\r\n\r\n}<\/pre>\n<p><strong>Step 8:<\/strong> Creating Employee\u2019s Task Detail Page: It will show the Entire Detail of the Project to the Employees. Employees can update the status of the task from this page.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113808 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/employee-detail-task-output-scaled.webp\" alt=\"employee detail task output\" width=\"2560\" height=\"1563\" \/><\/p>\n<p><strong>TaskDetailsForEmployee.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">package com.dataflair.advancedcrm;\r\nimport androidx.annotation.Nullable;\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport android.content.Intent;\r\nimport android.os.Bundle;\r\nimport android.text.method.ScrollingMovementMethod;\r\nimport android.view.View;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\nimport com.fasterxml.jackson.databind.ObjectMapper;\r\nimport com.google.firebase.firestore.CollectionReference;\r\nimport com.google.firebase.firestore.DocumentSnapshot;\r\nimport com.google.firebase.firestore.EventListener;\r\nimport com.google.firebase.firestore.FirebaseFirestore;\r\nimport com.google.firebase.firestore.FirebaseFirestoreException;\r\n\r\n\r\npublic class TaskDetailsForEmployee extends AppCompatActivity {\r\n   TextView mTextView;\r\n\r\n   private FirebaseFirestore db = FirebaseFirestore.getInstance();\r\n   private CollectionReference tasksRef = db.collection(\"Tasks\");\r\n\r\n\r\n   @Override\r\n   protected void onCreate(Bundle savedInstanceState) {\r\n\r\n       super.onCreate(savedInstanceState);\r\n       setContentView(R.layout.activity_task_details_for_employee);\r\n       mTextView = findViewById(R.id.taskDetailsForEmp);\r\n       mTextView.setMovementMethod(new ScrollingMovementMethod());\r\n\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n       if(id!= null) {\r\n           tasksRef.document(id).addSnapshotListener(new EventListener&lt;DocumentSnapshot&gt;() {\r\n               @Override\r\n               public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {\r\n                   if (e == null) {\r\n                       if (documentSnapshot.exists()) {\r\n                           Object object = documentSnapshot.getData();\r\n\r\n                           final ObjectMapper mapper = new ObjectMapper();\r\n                           final Task task = mapper.convertValue(object, Task.class);\r\n\r\n                           String company = task.getCompany();\r\n                           String address = task.getAddress();\r\n                           String phone = task.getPhone();\r\n                           String description = task.getDescription();\r\n                           String date = task.getDate();\r\n                           String status = task.getStatus();\r\n\r\n\r\n                           String data = \"Description: \" + description + \"\\n\\nCompany name: \" + company + \"\\nAddress: \" + address + \"\\nContact No.: \" + phone + \"\\nData Added: \" + date + \"\\nStatus: \" + status;\r\n                           mTextView.setText(data);\r\n                       }\r\n                   }\r\n\r\n               }\r\n           });\r\n       }\r\n   }\r\n\r\n   public void delete(View v){\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n       tasksRef.document(id).delete();\r\n\r\n       Toast.makeText(this, \"Task removed!\", Toast.LENGTH_SHORT).show();\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskBoss.class));\r\n       finish();\r\n   }\r\n\r\n\r\n   public void done(View v){\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n       tasksRef.document(id).update(\"status\",\"Completed\");\r\n       Toast.makeText(this, \"Status changed to: Completed\", Toast.LENGTH_SHORT).show();\r\n\r\n   }\r\n\r\n   public void undone(View v){\r\n       final String id = getIntent().getStringExtra(\"taskID\");\r\n       tasksRef.document(id).update(\"status\",\"Incomplete\");\r\n       Toast.makeText(this, \"Status changed to: Incomplete\", Toast.LENGTH_SHORT).show();\r\n\r\n   }\r\n\r\n   public void back(View v){\r\n       startActivity(new Intent(getApplicationContext(), LoadTaskForEmployee.class));\r\n       finish();\r\n   }\r\n\r\n}<\/pre>\n<h3>Android CRM App Output<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-113809 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/android-project-advanced-crm-output.webp\" alt=\"android project advanced crm output\" width=\"800\" height=\"758\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113811 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/project-advanced-crm-output.webp\" alt=\"project advanced crm output\" width=\"800\" height=\"756\" \/><\/p>\n<h3><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113812 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/advanced-crm-output.webp\" alt=\"advanced crm output\" width=\"800\" height=\"762\" \/><\/h3>\n<h3><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113813 aligncenter\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/04\/android-advanced-crm-output.webp\" alt=\"android advanced crm output\" width=\"800\" height=\"763\" \/><\/h3>\n<h3>Summary<\/h3>\n<p>Congratulations, you have successfully created an Advanced CRM Android app that enables employers to create tasks, delete tasks, and register new users to the app. Employees can view the tasks assigned to them and update their status, whether they are complete or incomplete.<\/p>\n<p>Throughout this project, you learned how to set up a new Android project, design the user interface, implement the functionality to create tasks, delete tasks, and register new users, and enable employees to view and update the status of their tasks.<\/p>\n<p>With the knowledge you&#8217;ve gained from this project, you can customize the app to fit your personal or professional needs or use the concepts you&#8217;ve learned to create new Android apps. You are now equipped with the skills to develop advanced Android apps that streamline communication between various stakeholders in a business or organization.<span hidden class=\"__iawmlf-post-loop-links\" data-iawmlf-links=\"[{&quot;id&quot;:2592,&quot;href&quot;:&quot;https:\\\/\\\/drive.google.com\\\/file\\\/d\\\/1JtiIngIDM1IDJTp--Ie39EFyqAdjcmLi\\\/view?usp=drive_link&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260601083932\\\/https:\\\/\\\/drive.google.com\\\/file\\\/d\\\/1JtiIngIDM1IDJTp--Ie39EFyqAdjcmLi\\\/view?usp=drive_link&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-06-02 07:20:07&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-13 20:20:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-22 00:51:12&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-06-22 00:51:12&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]\"><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Customer Relationship Management (CRM) is an essential aspect of business management that involves building and maintaining long-term relationships with customers. In this project, we will be creating an Advanced CRM Android app that has&#46;&#46;&#46;<\/p>\n","protected":false},"author":581,"featured_media":113796,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18722],"tags":[27438,27437,22373,27452,22513,27440,27439],"class_list":["post-113633","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","tag-android-crm-app","tag-android-crm-app-project","tag-android-project","tag-android-project-for-practice","tag-android-project-ideas","tag-crm-app","tag-crm-app-project"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Make Better Business Decisions with Advanced Android CRM - DataFlair<\/title>\n<meta name=\"description\" content=\"Boost your business productivity with our Android CRM app. Access customer data on-the-go &amp; close more deals.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Make Better Business Decisions with Advanced Android CRM - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Boost your business productivity with our Android CRM app. Access customer data on-the-go &amp; close more deals.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-04T03:30:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-01T08:41:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.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=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Make Better Business Decisions with Advanced Android CRM - DataFlair","description":"Boost your business productivity with our Android CRM app. Access customer data on-the-go & close more deals.","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:\/\/data-flair.training\/blogs\/advanced-android-crm\/","og_locale":"en_US","og_type":"article","og_title":"Make Better Business Decisions with Advanced Android CRM - DataFlair","og_description":"Boost your business productivity with our Android CRM app. Access customer data on-the-go & close more deals.","og_url":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2023-04-04T03:30:04+00:00","article_modified_time":"2026-06-01T08:41:24+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.webp","type":"image\/webp"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/c187795dc82ab948373cca526df7c445"},"headline":"Make Better Business Decisions with Advanced Android CRM","datePublished":"2023-04-04T03:30:04+00:00","dateModified":"2026-06-01T08:41:24+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/"},"wordCount":666,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.webp","keywords":["android crm app","android crm app project","android project","android project for practice","android project ideas","crm app","crm app project"],"articleSection":["Android Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/","url":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/","name":"Make Better Business Decisions with Advanced Android CRM - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.webp","datePublished":"2023-04-04T03:30:04+00:00","dateModified":"2026-06-01T08:41:24+00:00","description":"Boost your business productivity with our Android CRM app. Access customer data on-the-go & close more deals.","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/advanced-android-crm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.webp","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2023\/03\/android-project-advanced-crm.webp","width":1200,"height":628,"caption":"android project advanced crm"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/advanced-android-crm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Android Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/android\/"},{"@type":"ListItem","position":3,"name":"Make Better Business Decisions with Advanced Android CRM"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/c187795dc82ab948373cca526df7c445","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2302ebc438084d2f1f993edc1996a0aae01332e81f3227cba8df0c48ec010ca4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2302ebc438084d2f1f993edc1996a0aae01332e81f3227cba8df0c48ec010ca4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2302ebc438084d2f1f993edc1996a0aae01332e81f3227cba8df0c48ec010ca4?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team provides high-impact content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. We make complex concepts easy to grasp, helping learners of all levels succeed in their tech careers.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam6\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/113633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/581"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=113633"}],"version-history":[{"count":8,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/113633\/revisions"}],"predecessor-version":[{"id":148676,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/113633\/revisions\/148676"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/113796"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=113633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=113633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=113633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}