Practical # 1
Introduction to android, android studio ide application fundamentals
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello students!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</[Link]>
______________________________________________________________________
__________________________
[Link]
package [Link].practical11
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
val c=[Link](CONNECTIVITY_SERVICE) as
ConnectivityManager
val networkInfo = [Link]
if(networkInfo!=null && [Link])
{
if ([Link]==ConnectivityManager.TYPE_MOBILE)
{
[Link](applicationContext,"Connected to
Mobile",Toast.LENGTH_LONG).show()
}
if ([Link]==ConnectivityManager.TYPE_WIFI)
{
[Link](applicationContext,"Connected to
Wifi",Toast.LENGTH_LONG).show()
}
}
else
{
[Link](applicationContext,"You are
offline",Toast.LENGTH_LONG).show()
}
}
}
______________________________________________________________________
__________________________
[Link]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
package="[Link].practical11"
xmlns:tools="[Link]
<uses-permission
android:name="[Link].ACCESS_NETWORK_STATE"></uses-permission>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Practical11"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
Practical # 2
Programing resources: color,theme, string, drawable, dimension,image
[Link]
<resources>
<string name="app_name">Android Resources</string>
<string name="my_text">TYIT</string>
</resources>
___________________________________________________________________
[Link]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#FFEB3B</color>
<color name="colorPrimaryDark">#18463F</color>
<color name="colorAccent">#D81B60</color>
</resources>
______________________________________________________________________
[Link]
<resources xmlns:tools="[Link]
<!-- Base application theme. -->
<style name="[Link].Practical21"
parent="[Link]">
<!-- Customize your light theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="Theme.Practical21" parent="[Link].Practical21" />
</resources>
_______________________________________________________________
[Link]
package [Link].practical21
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
}
}
Practical 3
Programing activities and fragments, activity life cycle, method, multiple activities
life cycle of fragments and multiple fragments
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello TYIT"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> -->
<Button
android:id="@+id/about_us"
android:layout_width="130dp"
android:layout_height="102dp"
android:text="AboutUs"
tools:layout_editor_absoluteX="154dp"
tools:layout_editor_absoluteY="323dp"
tools:ignore="MissingConstraints" />
</[Link]>
___________________________________________________________________
[Link]
package [Link].myapplication111
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
val TAG="Main Activity"
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
Log.d("ActivityLifecycle", "onCreate called")
val about_us = findViewById<Button>([Link].about_us)
about_us.setOnClickListener{
val i = Intent(this,AboutUs::[Link])
startActivity(i)
}
override fun onStart() {
[Link]()
Log.d("ActivityLifecycle", "onStart called")
}
override fun onResume() {
[Link]()
Log.d("ActivityLifecycle", "onResume called")
}
override fun onPause() {
[Link]()
Log.d("ActivityLifecycle", "onPause called")
}
override fun onStop() {
[Link]()
Log.d("ActivityLifecycle", "onStop called")
}
override fun onDestroy() {
[Link]()
Log.d("ActivityLifecycle", "onDestroy called")
}
}
______________________________________________________________________
__________
[Link]
package [Link].myapplication111
import [Link]
import [Link]
import [Link]
import [Link]
class AboutUs : AppCompatActivity() {
val TAG = "About Us"
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
// setContentView([Link].activity_main)
Log.d(TAG, "Inside onCreate")
[Link](this, "You are under about us", Toast.LENGTH_LONG).show()
}
}
______________________________________________________________________
_________________________
[Link]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
xmlns:tools="[Link]
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication111"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
<activity android:name=".AboutUs"></activity>
</application>
</manifest>
Practical 4
Programing related to different layouts: linear, relative, table
Linear Layout
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity"
android:orientation="vertical"
android:background="@color/material_dynamic_primary70"
>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<EditText
android:id="@+id/editTextText2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:hint="@string/search"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/search" />
</LinearLayout>
<EditText
android:id="@+id/editTextText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="text"
android:text="Name" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="164dp"
android:layout_gravity="bottom"
app:srcCompat="@drawable/ic_launcher_background" />
</LinearLayout>
____________________________________________________________________
Relative Layout
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity"
android:orientation="vertical"
android:background="@color/material_dynamic_primary70"
>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<EditText
android:id="@+id/editTextText2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:hint="@string/search"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/search" />
</LinearLayout>
<EditText
android:id="@+id/editTextText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="text"
android:text="Name" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="164dp"
android:layout_gravity="bottom"
app:srcCompat="@drawable/ic_launcher_background" />
</RelativeLayout>
______________________________________________________________________
_______
Table Layout(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="150dp"
android:layout_marginLeft="50dp">
<EditText
android:id="@+id/mytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="username"
android:inputType="text" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:layout_marginLeft="50dp">
<EditText
android:id="@+id/editTextText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:hint="passward" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:layout_marginLeft="50dp">
<Button
android:text="Login"
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
</TableLayout>
_______________________________________________________
Table Layout([Link])
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
var text=findViewById<EditText>([Link])
var btn=findViewById<Button>([Link])
[Link]{
var strMessage:String
strMessage=[Link]().toString()
[Link](this,"hello $strMessage",Toast.LENGTH_LONG).show()
}
}
}
______________________________________________________________________
_____________
PRACTICAL NO 5
Programing ui elements
ACTIVITY_MAIN.XML
No changes
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
enableEdgeToEdge()
setContentView([Link].activity_main)
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
[Link]([Link],menu)
return [Link](menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id=[Link]
if (id==[Link])
{
[Link](this,"search",Toast.LENGTH_LONG).show()
}
if (id==[Link])
{
[Link](this,"AboutUs",Toast.LENGTH_LONG).show()
}
if (id==[Link])
{
[Link](this,"Contact Us",Toast.LENGTH_LONG).show()
}
return [Link](item)
}
}
[Link]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="[Link]
xmlns:app="[Link]
<item
android:id="@+id/search"
android:title="@string/search"
app:showAsAction="always" />
<item
android:id="@+id/aboutus"
android:title="@string/about_us" />
<item
android:id="@+id/contactus"
android:title="@string/contact_us" />
</menu>
[Link]
<resources>
<string name="search">Search</string>
<string name="about_us">About Us</string>
<string name="contact_us">Contact Us</string>
</resources>
Design part
PRACTICAL 6 : FRAGMENT
ACTIVITY_MAIN.XML
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="432dp"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:layout_editor_absoluteX="-19dp"
tools:layout_editor_absoluteY="54dp">
<[Link]
android:id="@+id/fragmentContainerView"
android:name="[Link]"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<[Link]
android:id="@+id/fragmentContainerView2"
android:name="[Link]"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</[Link]>
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
enableEdgeToEdge()
setContentView([Link].activity_main)
[Link](findViewById([Link])) { v, insets
->
val systemBars = [Link]([Link]())
[Link]([Link], [Link], [Link],
[Link])
insets
}
}
}
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
/**
* A simple [Fragment] subclass.
* Use the [[Link]] factory method to
* create an instance of this fragment.
*/
class Fragmentone : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return [Link]([Link].fragment_fragmentone, container, false)
}
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
/**
* A simple [Fragment] subclass.
* Use the [[Link]] factory method to
* create an instance of this fragment.
*/
class Fragmenttwo : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return [Link]([Link].fragment_fragmenttwo, container, false)
}
[Link]
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF5722"
tools:context=".Fragmentone">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="fragment 1"
android:textSize="34sp" />
</FrameLayout>
[Link]
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E91E63"
tools:context=".Fragmenttwo">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="fragment 2"
android:textSize="34sp" />
</FrameLayout>
OUTPUT
Practical 7 :- Programs on Intents, Events, Listeners and Adapters
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="[Link]
xmlns:tools="[Link]
xmlns:app="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/black">
<TableLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="150dp">
<TableRow>
<Button
android:id="@+id/btn1"
android:text="1"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn2"
android:text="2"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn3"
android:text="3"
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn4"
android:text="4"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn5"
android:text="5"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn6"
android:text="6"
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn7"
android:text="7"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn8"
android:text="8"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btn9"
android:text="9"
android:layout_gravity="center"
/>
</TableRow>
</TableLayout>
</LinearLayout>
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
enableEdgeToEdge() // Make sure this is available for
your Android version
setContentView([Link].activity_main)
// Initialize buttons
val btn1 = findViewById<Button>([Link].btn1)
val btn2 = findViewById<Button>([Link].btn2)
val btn3 = findViewById<Button>([Link].btn3)
val btn4 = findViewById<Button>([Link].btn4)
val btn5 = findViewById<Button>([Link].btn5)
val btn6 = findViewById<Button>([Link].btn6)
val btn7 = findViewById<Button>([Link].btn7)
val btn8 = findViewById<Button>([Link].btn8)
val btn9 = findViewById<Button>([Link].btn9)
// Set click listeners
[Link] { toast("1") }
[Link] { toast("2") }
[Link] { toast("3") }
[Link] { toast("4") }
[Link] { toast("5") }
[Link] { toast("6") }
[Link] { toast("7") }
[Link] { toast("8") }
[Link] { toast("9") }
}
private fun toast(s: String) {
[Link](this, s, Toast.LENGTH_SHORT).show()
}
}
Output
Practical 8
Notification:
A) clickable and non- clickable notification
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp"
android:gravity="center_vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnGetNonClickableNotification"
android:layout_width="match_parent"
android:text="Get Non-Clickable Notification"
android:textSize="20sp"
android:padding="15dp"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnGetClickableNotification"
android:layout_width="match_parent"
android:text="Get Clickable Notification"
android:textSize="20sp"
android:padding="15dp"
android:layout_height="wrap_content"/>
</LinearLayout>
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
lateinit var getClickableNotificationButton: Button
lateinit var getNonClickableNotificationButton:Button
private val CHANNEL_ID = "my_channel"
private val NOTIFICATION_ID_NON_CLICKABLE = 1
private val NOTIFICATION_ID_CLICKABLE = 2
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
createNotificationChannel()
getClickableNotificationButton =
findViewById([Link])
getNonClickableNotificationButton =
findViewById([Link])
[Link] {
showClickableNotification()
[Link] {
showNonClickableNotification()
}
}
private fun createNotificationChannel() {
val name = "Practical"
val descriptionText = "Home Page"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
description = descriptionText
val notificationManager: NotificationManager =
getSystemService(NOTIFICATION_SERVICE) as NotificationManager
[Link](channel)
private fun showClickableNotification() {
val intent = Intent(this, MainActivity::[Link])
val pendingIntent = [Link](this, 0, intent,
PendingIntent.FLAG_IMMUTABLE)
val builder = [Link](this, CHANNEL_ID)
.setSmallIcon([Link].ic_launcher_background)
.setContentTitle("WELCOME TO SN COLLEGE")
.setContentText("Click to reload the app")
.setContentIntent(pendingIntent)
.setAutoCancel(true)
val notificationManager: NotificationManager =
getSystemService(NOTIFICATION_SERVICE) as NotificationManager
[Link](NOTIFICATION_ID_CLICKABLE, [Link]())
}
private fun showNonClickableNotification() {
val builder = [Link](this, CHANNEL_ID)
.setSmallIcon([Link].ic_launcher_background)
.setContentTitle("HELLO TYIT")
.setContentText("This notification cannot be clicked.")
.setAutoCancel(true)
val notificationManager: NotificationManager =
getSystemService(NOTIFICATION_SERVICE) as NotificationManager
[Link](NOTIFICATION_ID_NON_CLICKABLE, [Link]())
[Link]
<uses-permission android:name="[Link].POST_NOTIFICATIONS" />
Output
Practical 8 :
Notification
B)automatic broadcast receiver
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="20dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/infoText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textStyle="bold"
android:textSize="30sp"
android:text="Hello World!" />
</LinearLayout>
[Link]
<uses-permission android:name="[Link].ACCESS_NETWORK_STATE" />
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
lateinit var infoText: TextView
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
infoText = findViewById([Link])
val manager: ConnectivityManager =
getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = [Link]
val networkCapabilities = [Link](network)
if (networkCapabilities != null &&
[Link](NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
when {
[Link](NetworkCapabilities.TRANSPORT_CELLULAR) -> {
[Link] = "Connected to Cellular"
[Link](NetworkCapabilities.TRANSPORT_WIFI) -> {
[Link] = "Connected to WiFi"
else -> {
[Link] = "Connected to other network"
} else {
[Link] = "You are Offline"
output:
Practical 10: Programming Security and permissions
[Link]
<uses-feature
android:name="[Link]"
android:required="false" />
<uses-permission android:name="[Link]" />
<uses-permission android:name="[Link]"/>
<uses-permission
android:name="[Link].READ_CONTACTS"/>
<uses-permission
android:name="[Link].READ_CALENDAR"/>
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="30dp"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:id="@+id/cameraButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Give Camera Permission" />
<Button
android:id="@+id/contactsButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Give Contacts Permission" />
<Button
android:id="@+id/calendarButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Give Calendar Permission" />
</LinearLayout>
[Link]
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class MainActivity : AppCompatActivity() {
lateinit var cameraBtn: Button
lateinit var calendarBtn: Button
lateinit var contactsBtn: Button
private val MY_CAMERA_REQUEST_CODE = 100;
private val MY_CALENDAR_REQUEST_CODE = 101;
private val MY_CONTACTS_REQUEST_CODE = 102;
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
cameraBtn = findViewById([Link])
calendarBtn = findViewById([Link])
contactsBtn = findViewById([Link])
[Link] {
checkAndRequestPermission("Camera",
[Link],MY_CAMERA_REQUEST_CODE)
}
[Link] {
checkAndRequestPermission("Calendar",
[Link].READ_CALENDAR,MY_CALENDAR_REQUEST_CODE)
}
[Link] {
checkAndRequestPermission("Contacts",
[Link].READ_CONTACTS,
MY_CONTACTS_REQUEST_CODE)
}
}
private fun checkAndRequestPermission(whichButton: String,
whichPermission:
String, requestCode: Int) {
if (checkSelfPermission(whichPermission) !=
PackageManager.PERMISSION_GRANTED) {
[Link](this, "$whichButton Button Clicked",
Toast.LENGTH_SHORT).show()
requestPermissions(arrayOf(whichPermission),
requestCode);
} else {
[Link](this, "Already has $whichButton
Access",
Toast.LENGTH_SHORT).show()
}
}
}
Output