тело смс отсутствует в новых версиях андроида при использовании Linking.openURL (React native) - PullRequest
0 голосов
/ 04 июня 2019

Приведенный ниже код работает нормально в версии для Android Lollipop, но в более новых версиях 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);
    }
}

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Это, наверное, об этих ограничениях .Чтобы отправлять смс в новых версиях Android, используйте это намерение (я не знаю, как реагировать на него, но оно должно быть таким же)

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 Play, если не отправлено причины использования этого разрешения в Google.

0 голосов
/ 07 июня 2019

Мне удалось заставить его работать, используя приведенный ниже код

 @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());
    }
  }

Ссылка

Давидс подробно объяснил относительно разрешений, использования Action_sendto

Я получил этот фрагмент кода от реагировать-родной-смс

...