0

我正在开发一个应用程序,通过将号码输入编辑文本框中来拨打号码。我使用了隐式 intetns 并通过 setData 传递了编辑文本编号。

我能够成功运行它。但拨 9 位数效果很好。如果我给 10 位数字拨号,则会引发错误。请在下面找到我的代码。

Activity:
public class InvokeImplicitIntent extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    ViewContacts();
        }




private void ViewContacts() {
    try {
        Button viewContacts = (Button)findViewById(R.id.ViewContacts);

        viewContacts.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {


                Intent call=new Intent();
                EditText num=(EditText) findViewById(R.id.Number);
            int numberIn=Integer.parseInt(num.getText().toString());
                call.setAction(android.content.Intent.ACTION_CALL);
                call.setData(Uri.parse("tel:"+numberIn));
                startActivity(call);

            }
        });
        }catch (ActivityNotFoundException anfe) {
            Log.e("ViewContacts","Viewing of Contacts failed", anfe);
        }       
  } 
  }



  Manifest:
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.collabera.labs.sai"
  android:versionCode="1"
  android:versionName="1.0">
<!-- <uses-permission android:name="android.permission.READ_CONTACTS"
    />
-->    
<uses-permission 
 android:name="android.permission.CALL_PHONE"
 />
     <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".InvokeImplicitIntent"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest> 

XML:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
android:id="@+id/LinearLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

<EditText android:id="@+id/Number"
    android:hint="Enter number"
    android:inputType="number"
    android:maxLength="10"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    />
<Button 
    android:text="@string/InvokeImplicit" 
    android:id="@+id/ViewContacts" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    >
</Button>

</LinearLayout>
4

2 回答 2

3

很清楚这里出了什么问题。看这段代码:

Intent call=new Intent();
EditText num=(EditText) findViewById(R.id.Number);
int numberIn=Integer.parseInt(num.getText().toString());
call.setAction(android.content.Intent.ACTION_CALL);
call.setData(Uri.parse("tel:"+numberIn));
startActivity(call);

您正在尝试通过调用 . 解析 10 位数字Integer.parseInt()。结果应存储在声明为的变量中int。Nowint是一个带符号的 32 位量,您可以存储在带符号的 32 位量中的值的范围是 -2,147,483,648 到 2,147,483,647。这意味着只要您的 10 位电话号码小于 2,147,483,647,您的代码就可以使用。否则,您将得到一个负数,或者在尝试解析该数字时会出现异常(因为它太大而无法放入int)。

你正在以错误的方式解决这个问题。如果您只是要从中创建一个 URL,则无需解析该数字。试试这个:

Intent call=new Intent();
EditText num=(EditText) findViewById(R.id.Number);
call.setAction(android.content.Intent.ACTION_CALL);
call.setData(Uri.parse("tel:"+num.getText().toString()));
startActivity(call);
于 2012-09-18T20:54:45.103 回答
-1

输入“tel:”+1234567890等数字后试试这个,在ie上加一个l,“tel:”+1234567890l或者我们也可以使用L

 Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:"+1234567890l));

                startActivity(intent);

于 2019-02-23T16:53:58.830 回答