React Nativeアプリから直接電話発信を実行する

# 概要
react-nativeパッケージのLinking.openURLでは電話発信画面が表示されるだけなので
アプリから直接電話を発信する機能を作成する
[参考にしたサイト](https://www.npmjs.com/package/react-native-immediate-phone-call)

# 目次
[1. react-native-immediate-phone-callのインストール](#1-react-native-immediate-phone-callのインストール)
[2. AndroidManifest.xmlの修正](#2-androidmanifestxmlの修正)
[3. settings.gradleの修正](#3-settingsgradleの修正)
[4. build.gradleの修正](#4-buildgradleの修正)
[5. MainApplication.javaの修正](#5-mainapplicationjavaの修正)
[6. MainActivity.javaの修正](#6-mainactivityjavaの修正)
[7. アプリ(App.js)への記述](#7-アプリappjsへの記述)

# 1. react-native-immediate-phone-callのインストール
react-native-immediate-phone-callパッケージをインストールする
```
$ npm install react-native-immediate-phone-call --save
```

react-nativeへのlink処理も実行する
※オートリンクを使用せずに作成する場合はlinkコマンドを実行せずに以下設定ファイルを手動で修正する
[settings.gradle](#3-settingsgradleの修正)
[build.gradle](#4-buildgradleの修正)
[MainApplication.java](#5-mainapplicationjavaの修正)
[MainActivity.java](#6-mainactivityjavaの修正)
```
$ react-native link react-native-immediate-phone-call
```
react-nativeコマンドが見つかりません等のエラーメッセージが出る場合はreact-native-cliをインストールする
```
$ npm install -g react-native-cli
```

# 2. AndroidManifest.xmlの修正
[プロジェクトフォルダ]/android/app/src/main/AndroidManifest.xml
アンドロイドアプリの電話発信の許可設定を追記する
※linkコマンドを実行した場合も修正する
``` xml:AndroidManifest.xml
<uses-permission android:name="android.permission.CALL_PHONE" />
```

![imm01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749195/b1f27126-b98f-1c1d-6ce9-0d2340b74326.jpeg)


# 3. settings.gradleの修正
[プロジェクトフォルダ]/android/settings.gradle
下記記述を追記する
※linkコマンド実行時は不要
```settings.gradle
include ':react-native-immediate-phone-call', ':app'
project(':react-native-immediate-phone-call').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immediate-phone-call/android')
```

![imm02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749195/b7451684-88d4-5073-faa3-ae4c5858c43e.jpeg)


# 4. build.gradleの修正
[プロジェクトフォルダ]/android/build.gradle
buildscript>dependenciesの下に下記記述を追加する
※linkコマンド実行時は不要
```build.gradle
implementation project(':react-native-immediate-phone-call')
```

![imm03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749195/089b141c-b508-b02b-2018-cfe4bd1c6c43.jpeg)


# 5. MainApplication.javaの修正
[プロジェクトフォルダ]/android/app/src/main/java/com/MainApplication.java
下記記述を追記する
※linkコマンド実行時は不要
``` java:MainApplication.java
  import com.github.wumke.RNImmediatePhoneCall.RNImmediatePhoneCallPackage;
  ...
  @Override
  protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
      ...
      new RNImmediatePhoneCallPackage(),
      ...
    );
  }
  ...
```

![imm04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749195/69629170-d310-1682-7752-98a3a0d1e9a5.jpeg)


# 6. MainActivity.javaの修正
[プロジェクトフォルダ]/android/app/src/main/java/com/MainActivity.java
下記記述を追記する
※linkコマンド実行時は不要
``` java:MainActivity.java
  import com.github.wumke.RNImmediatePhoneCall.RNImmediatePhoneCallPackage;  // <--- import
  ...
  public class MainActivity extends ReactActivity {      
    ...
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        RNImmediatePhoneCallPackage.onRequestPermissionsResult(requestCode, permissions, grantResults); // very important event callback
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }    
    ...
  }
```

![imm05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749195/4d55a621-5166-60f7-d4da-d7a70506b3b8.jpeg)


# 7. アプリ(App.js)への記述
RNImmediatePhoneCall.immediatePhoneCallで電話発信する
``` javascript:App.js
import RNImmediatePhoneCall from 'react-native-immediate-phone-call';
...
RNImmediatePhoneCall.immediatePhoneCall('0123456789');
...
```