show code block

2016年6月16日 星期四

Android元件─ Intent大全(一)─撥打電話篇

Intent大全()─撥打電話篇

Intent我覺得是Android功能最多,最簡單又最雜亂的地方。
簡單的地方是他的程式通常都不多,短短幾行就能搞定。
雜亂的地方是他的功能實在是太多啦!
今天就來介紹一下很強大的Intent


今日實作影片範例:
撥打電話的功能─







重要程式碼:
Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity(it);


Layout佈局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.nikeru8.phonecall.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="call"
        android:text="我要打電話" />
</RelativeLayout>
















MainActivity.Java佈局
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    public void call(View view) {

        Uri uri = Uri.parse("tel:xxxxxx");
        Intent it = new Intent(Intent.ACTION_DIAL, uri);
        startActivity(it);


    }


}

完成囉!
短短幾行就搞定!
只是幫妳把畫面帶到撥打畫面,最速度的實作!





接下來講講進階版

按了按鈕自動幫妳撥出電話!示範影片:






這就稍微麻煩一點點了


兩個步驟:
1、  AndroidManifest.xml中額外作設定。
2、  修改程式碼


STEP1:








加入以下兩行。
<uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />





之後記得按下這個按鈕,匯入妳的設定!








STEP2:


Layout佈局我們不去改動她!



只改動按鈕onClick內的東西。
……其他程式碼省略………
public void call(View view) {

        Intent it = new Intent(Intent.ACTION_CALL);
        Uri uri = Uri.parse("tel:123456");
        it.setData(uri);


//撥打電話
        try {
            startActivity(phoneIntent);
            finish();


        }
//撥打失敗的話,彈跳出失敗土司視窗
catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(MainActivity.this,
                    "Call faild, please try again later.", Toast.LENGTH_SHORT).show();
        }

    }
……其他程式碼省略………


完成囉!



過程中可能會遇到的錯誤
1
在下述程式碼中
Uri uri = Uri.parse("tel:123456");

tel:是務必加在前面的,不然會跳出土司視窗錯誤。(就是以下這段)
//撥打失敗的話,彈跳出失敗土司視窗
catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(MainActivity.this,
                    "Call faild, please try again later.", Toast.LENGTH_SHORT).show();
        }
    }

2
在進階版中,要使用到try-catch這個方法
如果不使用到try-catch 就會變成下面這種情況:




參考資料:

有問題都可以提出一起討論唷!
Intent
Intent大全() 撥打電話http://nikeru8.blogspot.tw/2016/06/intent.html
Intent大全()- googlemap應用、網頁連結、地圖作標、路徑規劃、簡訊http://nikeru8.blogspot.tw/2016/06/intentgooglemap_21.html
Intent換頁應用、Activity的換頁使用http://nikeru8.blogspot.tw/2016/06/android-intentmerge.html

沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...