【问题标题】:autoLink phone only work for saved numberautoLink 电话仅适用于已保存的号码
【发布时间】:2016-06-28 17:36:11
【问题描述】:

我正在实现电话演示,在我的演示中,我使用 autoLink = phone 生成了到 textview 的链接,但只有当我将此号码保存在我的联系人列表中时它才有效,我无法生成随机号码上的链接..

我也试过 clickable=true。并且还应用 Linkify 类,但这也不起作用。 并且还应用了 autoLink="all" 它也不起作用,我不知道出了什么问题。我还在清单中设置了权限。

这是我的代码:

            txtfromnumber = (TextView) findViewById(R.id.txtfromnumber);
            int mask = Linkify.ALL;
            Linkify.addLinks(txtfromnumber, mask);
            txtfromname = (TextView) findViewById(R.id.txtfromname);
            txtreceivernumber = (TextView) findViewById(R.id.txtreceivernumber);
            int mask2 = Linkify.ALL;

    txtreceivernumber.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent dialIntent = new Intent(Intent.ACTION_CALL,
                        Uri.parse("Tel:"+txtreceivernumber.getText().toString().trim()));
                if (dialIntent.resolveActivity(context.getPackageManager()) != null) {
                    dialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        dialIntent.setPackage("com.android.phone");
                    }else {
                        dialIntent.setPackage("com.android.server.telecom");
                    }
                    startActivity(dialIntent);
                }
            }
        });

        txtfromnumber.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                final Intent dialIntent = new Intent(Intent.ACTION_DIAL,
                        Uri.parse("+"+txtfromnumber.getText().toString().trim()));
                if (dialIntent.resolveActivity(context.getPackageManager()) != null) {
                    dialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        dialIntent.setPackage("com.android.phone");
                    }else {
                        dialIntent.setPackage("com.android.server.telecom");
                    }
                    startActivity(dialIntent);
                }
            }
        });

这是我的 xml 文件代码:

               <TextView
                android:clickable="true"
                android:autoLink="all"
                android:id="@+id/txtreceivernumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:textSize="17sp" />

              <TextView
                android:clickable="true"
                android:autoLink="all"
                android:id="@+id/txtreceivernumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:textSize="17sp" />

这里我的接收者号码 txtview 工作正常 bcz 这个号码保存在我的联系人列表中,但 FromNumber txtview 没有设置任何链接或任何东西。 bcz 它的随机数。

问题 2。

如何直接呼叫而不是打开拨号窗口。?任何帮助都会得到帮助.. 非常感谢。

注意。这个问题解决了。这是工作代码。

【问题讨论】:

    标签: android


    【解决方案1】:

    您不能只是输入任何号码,然后认为无论它是否在您的联系人中都会被检测为电话号码。

    一个例子

    如果我在我的联系人中添加 1234567890 并在我的 textview 中添加文本并启用自动链接,它不会将其检测为电话号码,因为即使您将其存储在联系人中,android 也不会将其视为电话号码。

    另一个例子

    我在文本中传递了 9854856589,然后即使它不在我的联系人中,它也会将其检测为电话号码。

    因此,如果可能,请添加正确的电话号码或最近的号码,以便 android 将其检测为有效的电话号码,并且不一定在您的联系人中。

    问题 2:

     String uri = "tel:" + yourNumber ;
     Intent intent = new Intent(Intent.ACTION_CALL);
     intent.setData(Uri.parse(uri));
     startActivity(intent);
    

    添加权限

    <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
    

    希望这会有所帮助。

    【讨论】:

    • 但我正在添加正确的号码,bcz 号码来自拨出电话。
    • 但问题是号码是 12 位代码.. bcz 每个拨出电话默认情况下将 91 放在原始号码前面
    • 这里是号码.. 9188662xxxxx
    • 尝试添加 10 位数字。或添加 +91
    • 您必须创建一种方法,以便从电话号码中检查国家/地区代码。并创建有效的电话号码。我会给出一些提示,例如您可以添加 + 或 00 ,检查国家代码的前三位。快乐编码。
    【解决方案2】:

    尝试使用 SpannableString 和 ClickableSpan!

        String tel = textview.getText().toString();
        SpannableString sSpan = new SpannableString(tel);
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
               //intent dial or call
            }
            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setUnderlineText(false);
            }
        };
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多