flutter_dialer 2.0.0+101 copy "flutter_dialer: ^2.0.0+101" to clipboard
flutter_dialer: ^2.0.0+101 copied to clipboard

PlatformAndroid

Flutter plugin for replacing the default dialer app on Android

flutter_dialer #

Flutter plugin for replacing the default dialer app on Android.

Support #

  • Currently support for Android only.

Features #

  • Check if the app is the default dialer
  • Set the app as the default dialer
  • Handle incoming calls through InCallService
  • Handle tel: scheme intents

Installation #

Android #

Add the following permissions to your android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />

Add the following intent filters to your main activity:

<activity
  android:name=".MainActivity"
  android:exported="true">
  
  <!-- ReplaceDialer Intent Filters -->
  <intent-filter>
    <!-- Handle links from other applications -->
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.DIAL" />
    <!-- Populate the system chooser -->
    <category android:name="android.intent.category.DEFAULT" />
    <!-- Handle links in browsers -->
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- SCHEME TEL -->
    <data android:scheme="tel"/>
  </intent-filter>
  
  <intent-filter>
    <action android:name="android.intent.action.DIAL"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
</activity>

Add the InCallService for handling calls:

<service
  android:name=".TeleService"
  android:permission="android.permission.BIND_INCALL_SERVICE"
  android:exported="true">
  <meta-data
    android:name="android.telecom.IN_CALL_SERVICE_UI"
    android:value="true" />
  <intent-filter>
    <action android:name="android.telecom.InCallService" />
  </intent-filter>
</service>

Usage #

import 'package:flutter_dialer/flutter_dialer.dart';

// Check if this app is the default dialer
bool isDefault = await FlutterDialer.isDefaultDialer();
print('Is default dialer: $isDefault');

// Set this app as the default dialer
bool success = await FlutterDialer.setDefaultDialer();
if (success) {
  print('Default dialer set successfully');
} else {
  print('Failed to set default dialer');
}

// Check if this app can be set as default dialer
bool canSet = await FlutterDialer.canSetDefaultDialer();
print('Can set as default dialer: $canSet');

Example #

import 'package:flutter/material.dart';
import 'package:flutter_dialer/flutter_dialer.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Dialer Example',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isDefault = false;
  bool canSet = false;

  @override
  void initState() {
    super.initState();
    _checkDialerStatus();
  }

  Future<void> _checkDialerStatus() async {
    final defaultStatus = await FlutterDialer.isDefaultDialer();
    final canSetStatus = await FlutterDialer.canSetDefaultDialer();
    
    setState(() {
      isDefault = defaultStatus;
      canSet = canSetStatus;
    });
  }

  Future<void> _setDefaultDialer() async {
    final success = await FlutterDialer.setDefaultDialer();
    if (success) {
      await _checkDialerStatus();
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Default dialer set successfully')),
      );
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Failed to set default dialer')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Dialer Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Is Default Dialer: $isDefault',
              style: Theme.of(context).textTheme.headline6,
            ),
            SizedBox(height: 20),
            Text(
              'Can Set as Default: $canSet',
              style: Theme.of(context).textTheme.headline6,
            ),
            SizedBox(height: 40),
            if (canSet)
              ElevatedButton(
                onPressed: _setDefaultDialer,
                child: Text('Set as Default Dialer'),
              ),
          ],
        ),
      ),
    );
  }
}

Requirements #

  • Android API level 23+ (Android 6.0+)
  • Flutter 3.3.0+

License #

This project is licensed under the NativeMindNONC License.

1
likes
150
points
0
downloads

Publisher

verified publishergost.nativemind.ru

Weekly Downloads

Flutter plugin for replacing the default dialer app on Android

Homepage

Documentation

API reference

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on flutter_dialer

Packages that implement flutter_dialer