یکی از امکاناتی که بر روی تمام گوشی ها وجود دارد، برقراری تماس می باشد که به راحتی با نرم افزار موجود بر روی گوشی می توان این کار را کرد. اما گاهی، برنامه نویس ها خواهان برقراری تماس از طریق نرم افزار خودشان می باشند. سیستم عامل اندروید به شما این امکان را می دهد که بتوانید از طریق نرم افزار خودتان، نرم افزار دیگری را اجرا کنید. نرم افزار تماس تلفنی موجود در خود اندروید امکاناتی را نیز در اختیار برنامه نویسها قرار می دهد که شما می توانید نه تنها نرم افزار تماس را فراخوانی نمایید بلکه می توانید شماره مورد نظر خود را نیز وارد نمایید تا کاربر مجبور به وارد کردن شماره تلفن نباشد.
در این آموزش شما نحوه فراخوانی نرم افزار خود اندروید از طریق برنامه نویسی را خواهید دید. برای این کار دو روش وجود دارد:
- در روش اول که نیاز به حق دسترسی هم وجود ندارد، نرم افزار تماس فراخوانی می شود و شماره برای کاربر نمایش داده می شود و کاربر تصمیم می گیرد که تماس بگیرد یا نه.
- در روش دوم که نیاز به حق دسترسی می باشد، نرم افزار تماس فراخوانی می شود و همزمان هم تماس برقرار می شود و نیازی به زدن دکمه تماس از طرف کاربر نمی باشد.
یک پروژه جدید ایجاد نمایید
برای شروع اول از همه در AndroidManifest.xml حق دسترسی زیر را تعریف می کنیم
<uses-permission android:name="android.permission.CALL_PHONE"/>
سپس در فایل xml طراحی activity، موارد زیر را اضافه نمایید
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:padding="@dimen/fab_margin"> <Button android:id="@+id/btnCallWithoutPermission" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Make call without permission"/> <Button android:id="@+id/btnCallWithPermission" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Make call with permission"/> </LinearLayout>
در این قسمت دو دکمه تعریف کردیم که یکی برای روش اول و یکی برای روش دوم. حال نوبت کد جاوا می باشد
موارد زیر را در بالا و بعد از تعریف activity قرار می دهیم
private AppCompatActivity context; private int REQUEST_CALL_PERMISSION=1; private String number="0123456789";
سپس در onCreate کدهای زیر را قرار می دهیم
context=this; findViewById(R.id.btnCallWithoutPermission) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //In this method there is no need permission in androidmanifest.xml Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + number)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); findViewById(R.id.btnCallWithPermission) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //to use this method, add //<uses-permission android:name="android.permission.CALL_PHONE"/> // permission in androidmanifest.xml if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL_PERMISSION); } } else { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } } });
در اندروید نسخه 6 به بالا باید runtime permission را بررسی نماییم به خاطر همین کد زیر را هم بیرون onCreate و در داخل کلاس activity تعریف می کنیم
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (requestCode == REQUEST_CALL_PERMISSION) { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);//we checked permission befor, // then don't worry about the red line } } }
این تابع زمانی فراخوانی می شود که نسخه سیستم عامل اندروید کاربر بالاتر از 6 باشد و حق دسترسی به نرم افزار برای برقراری تماس داده شود.
نکته: از کاربر توسط سیستم عامل اندروید در مورد حق دسترسی سوال خواهد شد که اگر کاربر حق دسترسی را اعمال کند، در استفاده های بعدی از کاربر سوال نخواهد شد.