autoLink手机仅适用于已保存的号码

时间:2016-06-28 06:56:33

标签: android

我正在实施手机通话演示,在我的演示中我使用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" />

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

  

问题2。

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

  

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

2 个答案:

答案 0 :(得分:1)

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

一个例子

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

另一个例子

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

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

问题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>

希望这会有所帮助。

答案 1 :(得分:0)

尝试使用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);
        }
    };