如何将Flutter应用设置为默认短信应用?

问题描述

我要制作自定义SMS应用程序,因此它应该是默认的SMS应用程序。在android中,我们使用此代码将应用程序设置为默认的短信应用程序。

 Intent intent =   new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                    intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,myPackageName);
                    startActivity(intent);
        

有人可以帮助如何在Flutter中实现这一目标。 谢谢

解决方法

只需创建一个方法通道

class MainActivity : FlutterActivity() {
    private val CHANNEL = "com.example.chat/chat"

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger,CHANNEL).setMethodCallHandler { call,result ->
            if (call.method == "setDefaultSms") {
                try {
                    var intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                    intent.putExtra(
                            Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,<the app package name>
                    );
                    startActivity(intent);
                    result.success("Success")
                } catch (ex: Exception) {
                    result.error("UNAVAILABLE","Setting default sms.",null)
                }
            } else {
                result.notImplemented()
            }
        }
    }

}

然后在你的飞镖代码中调用方法通道

static const platform = const MethodChannel("com.example.chat/chat");
  try {
      final result = await platform.invokeMethod('setDefaultSms');
      print("Result: $result");
    } on PlatformException catch (e) {
      print("Error: $e");
    }
  }

请注意,上述解决方案不会使您的应用符合默认短信应用的条件 您可能需要在清单文件中添加一些内容以获取更多信息,请查看此帖子 Check this out

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...