上一篇我們已經(jīng)制作出了一個APP了,但是我們再深入一點點學(xué)一下,做一個APP能調(diào)用手機(jī)打電話的功能。
- 1、調(diào)查了一下打電話的接口是這樣的,然后在程序入口onCreate里調(diào)用。
public void call()
{
Intent intentCall = new Intent(Intent.ACTION_CALL, Uri.parse("tel:18172527829"));
startActivity(intentCall);
}
有語法報錯,Alt + Enter,引入這個Intent類和Uri。
import android.content.Intent;
import android.net.Uri;
知識點:
1)、import 關(guān)鍵字
為了能夠使用某一個包的成員,我們需要在 Java 程序中明確導(dǎo)入該包。使用 "import" 語句可完成此功能。
在 java 源文件中 import 語句應(yīng)位于 package 語句之后,所有類的定義之前,可以沒有,也可以有多條,
其語法格式為:import package1[.package2…].(classname|*);
與package對應(yīng)。比如C#里namespace與using對應(yīng)。
2)、Intent 啟動應(yīng)用程序內(nèi)部activity,還可以啟動其他應(yīng)用程序activity,以及發(fā)送廣播動作。eg:
撥打電話、打開Android系統(tǒng)通話記錄頁面、撥號界面、發(fā)送email、選擇相同類型的應(yīng)用、自定義action等。這里就用到了打電話功能。
-
2、雖然知道安卓開發(fā)要干類似打電話的事情肯定要獲取權(quán)限的。但我們可以試試,run安裝,發(fā)現(xiàn)報錯了,沒有打電話的權(quán)限。經(jīng)調(diào)查,需要在AndroidManifest.xml文件的Application前面添加
<uses-permission android:name="android.permission.CALL_PHONE" />
如圖所示:
image.png
但是安裝運行后還是看到logcat里報錯權(quán)限問題。再調(diào)查,安卓6.0以上,權(quán)限問題需要增加主動詢問的代碼了。
而我的手機(jī)是安卓系統(tǒng)是8.1的。 3、按照調(diào)查來的的答案,添加對應(yīng)的代碼。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
call("tel:"+"10086");
}
public static final int REQUEST_CALL_PERMISSION = 10111; //撥號請求碼
/**
* 判斷是否有某項權(quán)限
* @param string_permission 權(quán)限
* @param request_code 請求碼
* @return
*/
public boolean checkReadPermission(String string_permission,int request_code)
{
boolean flag = false;
if (ContextCompat.checkSelfPermission(this, string_permission) == PackageManager.PERMISSION_GRANTED)
{//已有權(quán)限
flag = true;
}
else
{//申請權(quán)限
ActivityCompat.requestPermissions(this, new String[]{string_permission}, request_code);
}
return flag;
}
/**
* 檢查權(quán)限后的回調(diào)
* @param requestCode 請求碼
* @param permissions 權(quán)限
* @param grantResults 結(jié)果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
switch (requestCode)
{
case REQUEST_CALL_PERMISSION: //撥打電話
if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED)
{//失敗
Toast.makeText(this,"請允許撥號權(quán)限后再試",Toast.LENGTH_SHORT).show();
}
else
{//成功
call("tel:"+"10086");
}
break;
}
}
/**
* 撥打電話(直接撥打)
* @param telPhone 電話
*/
public void call(String telPhone)
{
if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION))
{
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse(telPhone));
startActivity(intent);
}
}
}
-
4、運行結(jié)果:
image.png

