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。現在intは符号付き 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 に答える