安卓實現電話撥號與資訊的直接傳送
Android實現電話跳轉介面撥號與直接傳送簡訊
一、電話撥號
下面的是我們的最終的效果圖:
首先我們先來貼一下layout
的佈局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_marginTop="100dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="請輸入要撥打的電話號碼"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_num"
android:inputType="number"
android:textSize="32sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="撥打"
android:textSize="32sp"
android:id="@+id/dial"/>
</LinearLayout>
上面的佈局中我們用了三個簡單的控制元件,用TextView
書寫說明文字,使用EditText
來輸入要撥打的號碼,其中我們使用了inputType
來說明輸入的內容型別,此處我們只規定為數字型別,用Button
來承載點選事件。
接著我們需要在與layout對應的Activity中編寫實現的最終程式碼MainActivity
:
public class Main1Activity extends AppCompatActivity {
private EditText ed_num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed_num = (EditText) findViewById(R.id.ed_num);
Button dial = (Button) findViewById(R.id.dial);
dial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String num = ed_num.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel://"+num));
startActivity(intent);
}
});
}
上面便是完整的Activity程式碼,控制元件的對應就不用說了,我們看一下button的點選事件,使用字串型別num
獲得使用者輸入的電話號碼,然後定義了一個Intent,設定它的活動為Intent.ACTION_DIAL
,資料為解析過得字串"tel://"+num
(java中可以用“+”來連線字串),解析成URI的型別,最後傳送活動即可。到此,撥好功能便實現了。
這裡我們並沒有去申請許可權,因為我們沒有跳過使用者的懇求直接去撥打號碼,而是在撥打之前是需要使用者在點選一次撥打按鈕的,所以不需要申請許可權。
目前,我們經常會看到一種自動跳轉介面撥號功能,例如QQ裡的識別電話號碼的一串數字,然後你點選後會詢問你的接下來的操作,如果點解撥打,這時便會跳轉到撥號介面,並且複製了所需的電話號碼,這一功能便可以如上實現。
二、傳送簡訊
上面的圖片中展示了從虛擬機器5554向5556傳送簡訊的過程。這裡我們是直接向指定號碼傳送簡訊,沒有去跳轉介面,所有需要向用戶申請傳送簡訊的許可權,在使用者同意之後才傳送簡訊。 首先,還是提出layout的原始碼:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main3Activity"
android:orientation="vertical">
<TextView
android:layout_marginTop="100dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="請輸入要傳送的電話號碼"
android:textSize="32sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_num"
android:inputType="number"
android:textSize="32sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="請輸入要傳送的簡訊資訊"
android:textSize="32sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ed_content"
android:inputType="textMultiLine"
android:textSize="32sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="傳送"
android:textSize="32sp"
android:id="@+id/sent"/>
</LinearLayout>
這裡依然簡略講解一下上述程式碼。有兩個EditText
,第一個id為ed_content
,用來輸入對方的手機號碼,型別規定為數字,第二個id為ed_content
,用來輸入內容。接下來有一個button,用來實現點選事件。
接下來是java原始碼
public class MainActivity extends AppCompatActivity {
private EditText et_content;
private EditText et_num;
private Button sent;
static int RequestCode = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_content = (EditText) findViewById(R.id.et_content);
et_num = (EditText) findViewById(R.id.et_num);
sent = (Button) findViewById(R.id.sent);
sent.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
sent(v);
}
});
}
//這裡需要判斷App是否有許可權傳送簡訊,如果沒有,則需要使用者同意權限。
//因為Android7或之後都需要向如下一樣申請許可權,你會發現在Android7之前直接呼叫`send()方法都行`
@RequiresApi(api = Build.VERSION_CODES.M)
public void sent(View view){
if(!(ActivityCompat.checkSelfPermission(this,Manifest.permission.SEND_SMS)== PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.SEND_SMS},RequestCode);
}else {
send();
}
}
//回撥函式,用來判斷在使用者同意權限之後需要條用的方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == RequestCode){
send();
}
}
//抽取方法,提高程式碼利用率
private void send() {
String contenter = et_content.getText().toString();
String num = et_num.getText().toString().trim();
if (num.equals("")){
Toast.makeText(Main3Activity.this,"請輸入手機號碼!",Toast.LENGTH_SHORT).show();
}else {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(num,null,contenter,null,null);
}
}
}
傳送簡訊需要在manifest資料夾下的AndroidManifest.xml
中設定許可權,在manifest標籤下加入如下語句:
<uses-permission android:name="android.permission.SEND_SMS" />
這裡就不詳細講解程式碼的內容了,原始碼中都有註釋來簡要說明。 至此,傳送簡訊的功能便實現了。