一、06、Android做個小App嘗試2

上一篇我們已經(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容