Table of Contents
- 1. Description
- 2. Realization of effect
- 3. Implementation process
-
- 3.1 Manifest configuration
- 3.2 Interface settings
- 3.3 String resources
- 3.4 Implementation
- 4. Code download
- 5. Reference materials
1. Description
The function of making a phone call is realized through Xamarin.Android. VS2019 Community Edition
2. Effect realization
3. Implementation process
3.1 Manifest Configuration
There must be permission settings for making calls.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.1" package="com.companyname.dialdemo" android:installLocation= "auto"> <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme= "@style/AppTheme"></application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <!--Permission application for making calls--> \t <queries> <intent> <action android:name="android.intent.action.DIAL" /> <!--Refer to Android's dial-up function--> <data android:scheme="tel" /> </intent> </queries> </manifest>
3.2 Interface Settings
layout_main.xml
file
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="158.0dp" android:layout_height="wrap_content" android:id="@ + id/editText1" android:inputType="text" /> <Button android:text="@string/dial_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="25px" android:minHeight="25px" android:id="@ + id/button1" android:layout_below="@id/editText1" /> <androidx.coordinatorlayout.widget.CoordinatorLayout android:minWidth="25px" android:minHeight="25px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/button1" android:id="@ + id/coordinatorLayout1" android:layout_centerVertical="true" android:layout_alignParentBottom="true"/> </RelativeLayout>
3.3 String resources
The content of String.xml is as follows:
<resources> <string name="app_name">DialDemo</string> <string name="action_settings">Settings</string> <string name="permission_call_phone">Do you agree to grant the permission to make calls</string> <string name="ok">Consent Granted</string> <string name="permission_available_call">I have agreed to the authorization</string> <string name="permissions_not_granted">Failed to authorize</string> <string name="dial_btn">Call the phone</string> </resources>
3.4 Specific implementation
using Android; using Android. App; using Android. Content; using Android.Content.PM; using Android. OS; using Android. Views; using Android. Widget; using AndroidX.AppCompat.App; using AndroidX. CoordinatorLayout. Widget; using AndroidX. Core. App; using Google.Android.Material.Snackbar; using System; namespace DialDemo {<!-- --> [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] public class MainActivity : AppCompatActivity {<!-- --> private Button dialBtn; private EditText phoneNo; private int REQUEST_LOCATION = 1; private CoordinatorLayout coordinatorLayout; protected override void OnCreate(Bundle savedInstanceState) {<!-- --> base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource. Layout. activity_main); dialBtn = FindViewById<Button>(Resource.Id.button1); phoneNo = FindViewById<EditText>(Resource.Id.editText1); coordinatorLayout = FindViewById<CoordinatorLayout>(Resource.Id.coordinatorLayout1); dialBtn.Click += DialBtn_Click; } //Determine permissions and authorize public void checkAndGetPermission() {<!-- --> if (ActivityCompat. ShouldShowRequestPermissionRationale(this, Manifest. Permission. CallPhone)) {<!-- --> var requiredPermissions = new String[] {<!-- --> Manifest. Permission. CallPhone }; Snackbar. Make(coordinatorLayout, Resource.String.permission_call_phone, Snackbar. Length Indefinite) .SetAction(Resource.String.ok, new Action<View>(delegate (View obj) {<!-- --> ActivityCompat. RequestPermissions(this, requiredPermissions, REQUEST_LOCATION); } ) ).Show(); } else {<!-- --> ActivityCompat.RequestPermissions(this, new String[] {<!-- --> Manifest.Permission.CallPhone }, REQUEST_LOCATION); } } //Permission judgment here public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) {<!-- --> if (requestCode == REQUEST_LOCATION) {<!-- --> if ((grantResults.Length == 1) & amp; & amp; (grantResults[0] == Permission.Granted)) //If you agree to the authorization {<!-- --> Snackbar.Make(coordinatorLayout, Resource.String.permission_available_call, Snackbar.LengthShort).Show(); call(); } else //If you do not agree to the authorization {<!-- --> Snackbar.Make(coordinatorLayout, Resource.String.permissions_not_granted, Snackbar.LengthShort).Show(); } } else {<!-- --> base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } } private void DialBtn_Click(object sender, System.EventArgs e) {<!-- --> checkAndGetPermission(); } //Specific call method private void call() {<!-- --> try {<!-- --> var intent = new Intent(Intent. ActionCall); intent.SetData(Android.Net.Uri.Parse("tel:" + phoneNo.Text)); StartActivity(intent); } catch (Exception e1) {<!-- --> Toast.MakeText(this, e1.Message, ToastLength.Long).Show(); } } } }
4. Code download
code download
5. Reference
1. Use of Snackbar
2. Contents of permissions in Xamarin official website