【问题标题】:sms body missing in newer versions of android while using Linking.openURL(React native)使用 Linking.openURL(React 本机)时,较新版本的 android 中缺少短信正文
【发布时间】:2019-06-04 13:43:29
【问题描述】:

以下代码在 android 版本的棒棒糖中运行良好,但在较新版本的 android 短信正文中没有自动填充。即使在给予所需的权限后,它也会打开相应的数字,但没有预填充文本。请提出解决方案

smsPermission = async() => {
    try {
        const isGranted = await PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.SEND_SMS )
        if(!isGranted) {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.SEND_SMS,
                {
                title: 'Send SMS Permission',
                message: 'jose2007kj need permission to send invite through sms',
                buttonNegative: 'Cancel',
                buttonPositive: 'OK',
                },
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                var sparator = Platform.OS == 'ios' ? '&' : '?';
                var message =  `Check ${this.props.user.username}'s profile on jose2007kj now ${API.BASE_URL}/pages/@${this.props.user.username}`;
                Linking.openURL('sms:'+`${this.state.invite_number}`+sparator+'body=' + message)

            }      
        }else{
            var sparator = Platform.OS == 'ios' ? '&' : '?';
            var message =  `Check ${this.props.user.username}'s profile on jose2007kj now ${API.BASE_URL}/pages/@${this.props.user.username}`;
            Linking.openURL('sms:' + `${this.state.invite_number}` + sparator + 'body=' + message)

        }
    } catch (err) {
        console.warn(err);
    }
}

【问题讨论】:

    标签: android react-native android-6.0-marshmallow


    【解决方案1】:

    大概就是这个restrictions。要在新的 android 版本中发送短信,请使用此 Intent(我不知道 react-native 中的方式,但它可能相同)

    val intent = Intent().apply {
            action = Intent.ACTION_SENDTO
            data = Uri.parse("smsto:0123456789")
            putExtra("sms_body", "text message")
        }
        if (intent.resolveActivity(packageManager) != null) {
            startActivity(intent)
        }
    

    并删除权限,因为如果没有将使用此权限的原因发送给 google,则具有短信组权限的应用将从 google play 中删除。

    【讨论】:

      【解决方案2】:

      我可以使用下面的代码让它工作

       @ReactMethod
        public void sendSms(String mobileNo,String message){
          try{
            Intent sendIntent;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(reactContext);
              sendIntent = new Intent(Intent.ACTION_SEND);
              if (defaultSmsPackageName != null){
                  sendIntent.setPackage(defaultSmsPackageName);
              }
              sendIntent.setType("text/plain");
            }else {
              sendIntent = new Intent(Intent.ACTION_VIEW);
              sendIntent.setType("vnd.android-dir/mms-sms");
            }
            sendIntent.putExtra("sms_body", message);
            sendIntent.putExtra("exit_on_sent", true);
            sendIntent.putExtra("address", mobileNo);
            reactContext.startActivity(sendIntent);
      
          }catch(Exception e){
            Log.d("sms ", "sms error: "+e.toString());
          }
        }
      

      参考

      Davids关于permissions,usage of Action_sendto的详解

      我从react-native-sms得到这段代码

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 2015-08-31
        相关资源
        最近更新 更多