Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Hoàng Nhã Uyên · Hoàng Nhã Uyên 07:43 09/02/2015

sử dụng PhoneStateListener để xem khi nào cuộc gọi kết thúc. rất có thể bạn sẽ cần kích hoạt các hành động của người nghe để chờ cuộc gọi bắt đầu (đợi cho đến khi thay đổi từ PHONE_STATE_OFFHOOK thành PHONE_STATE_IDLE một lần nữa) và sau đó viết một số mã để đưa ứng dụng của bạn trở lại trạng thái IDLE.

bạn có thể cần chạy trình nghe trong một dịch vụ để đảm bảo nó luôn hoạt động và ứng dụng của bạn được khởi động lại. một số mã ví dụ:

EndCallListener callListener = new EndCallListener(); TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);

Định nghĩa người nghe:

private class EndCallListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { if(TelephonyManager.CALL_STATE_RINGING == state) { Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); } if(TelephonyManager.CALL_STATE_OFFHOOK == state) { //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call. Log.i(LOG_TAG, "OFFHOOK"); } if(TelephonyManager.CALL_STATE_IDLE == state) { //when this state occurs, and your flag is set, restart your app Log.i(LOG_TAG, "IDLE"); } } }

Trong Manifest.xmltệp của bạn thêm quyền sau:

android:name="android.permission.READ_PHONE_STATE"/>

105 hữu ích 4 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Võ Nam Phi · Võ Nam Phi 11:11 13/06/2012

Điều này liên quan đến câu hỏi của Starter.

Vấn đề với mã của bạn là bạn không chuyển đúng số.

Mã phải là:

private OnClickListener next = new OnClickListener() { public void onClick(View v) { EditText num=(EditText)findViewById(R.id.EditText01); String number = "tel:" + num.getText().toString().trim(); Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(number)); startActivity(callIntent); } };

Đừng quên thêm quyền trong tệp kê khai.

android:name="android.permission.CALL_PHONE">

hoặc là

android:name="android.permission.CALL_PRIVILEGED">

cho số khẩn cấp trong trường hợp DIALđược sử dụng.

49 hữu ích 4 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Huỳnh Ngọc Sương · Huỳnh Ngọc Sương 07:45 09/02/2015

Chúng tôi có cùng một vấn đề và quản lý để giải quyết nó bằng cách sử dụng a PhoneStateListenerđể xác định khi cuộc gọi kết thúc, nhưng ngoài ra chúng tôi phải thực finish()hiện hoạt động ban đầu trước khi bắt đầu lại startActivity, nếu không thì nhật ký cuộc gọi sẽ ở phía trước nó.

24 hữu ích 5 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Tạ Vinh Gia · Tạ Vinh Gia 11:02 04/11/2011

Tôi đã tìm thấy EndCallListener là ví dụ chức năng nhất, để có được hành vi được mô tả (finish (), gọi, khởi động lại) Tôi đã thêm một vài SharedPreferences để Listener có một tham chiếu để quản lý hành vi này.

OnClick, khởi tạo và EndCallListener của tôi chỉ trả lời các cuộc gọi từ ứng dụng. Các cuộc gọi khác bị bỏ qua.

import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class EndCallListener extends PhoneStateListener { private String TAG ="EndCallListener"; private int LAUNCHED = -1; SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences( myActivity.mApp.getBaseContext()); SharedPreferences.Editor _ed = prefs.edit(); @Override public void onCallStateChanged(int state, String incomingNumber) { String _prefKey = myActivity.mApp .getResources().getString(R.string.last_phone_call_state_key), _bPartyNumber = myActivity.mApp .getResources().getString(R.string.last_phone_call_bparty_key); int mLastCallState = prefs.getInt(_prefKey, LAUNCHED); //Save current call sate for next call _ed.putInt(_prefKey,state); _ed.commit(); if(TelephonyManager.CALL_STATE_RINGING == state) { Log.i(TAG, " >> RINGING, number: " + incomingNumber); } if(TelephonyManager.CALL_STATE_IDLE == state && mLastCallState != LAUNCHED ) { //when this state occurs, and your flag is set, restart your app if (incomingNumber.equals(_bPartyNumber) == true) { //Call relates to last app initiated call Intent _startMyActivity = myActivity.mApp .getPackageManager() .getLaunchIntentForPackage( myActivity.mApp.getResources() .getString(R.string.figjam_package_path)); _startMyActivity.setAction( myActivity.mApp.getResources() .getString(R.string.main_show_phone_call_list)); myActivity.mApp .startActivity(_startMyActivity); Log.i(TAG, "IDLE >> Starting MyActivity with intent"); } else Log.i(TAG, "IDLE after calling "+incomingNumber); } } }

thêm những thứ này vào chuỗi

name="main_show_phone_call_list">android.intent.action.SHOW_PHONE_CALL_LIST name="last_phone_call_state_key">activityLpcsKey name="last_phone_call_bparty_key">activityLpbpKey

và một cái gì đó như thế này trong Bản kê khai của bạn nếu bạn cần quay lại giao diện trước khi gọi

android:label="@string/app_name" android:name="com.myPackage.myActivity" android:windowSoftInputMode="stateHidden" android:configChanges="keyboardHidden" > android:name="android.intent.action.MAIN" /> android:name="android.intent.action.SHOW_PHONE_CALL_LIST" /> android:name="android.intent.category.LAUNCHER" />

và đặt những thứ này vào 'myActivity' của bạn

public static Activity mApp=null; //Before onCreate() ... onCreate( ... ) { ... if (mApp == null) mApp = this; //Links your resources to other classes ... //Test if we've been called to show phone call list Intent _outcome = getIntent(); String _phoneCallAction = mApp.getResources().getString(R.string.main_show_phone_call_list); String _reqAction = _outcome.getAction();//Can be null when no intent involved //Decide if we return to the Phone Call List view if (_reqAction != null &&_reqAction.equals(_phoneCallAction) == true) { //DO something to return to look and feel } ... myListView.setOnItemClickListener(new OnItemClickListener() { //Act on item when selected @Override public void onItemClick(AdapterView a, View v, int position, long id) { myListView.moveToPosition(position); String _bPartyNumber = "tel:"+myListView.getString(myListView.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //Provide an initial state for the listener to access. initialiseCallStatePreferences(_bPartyNumber); //Setup the listener so we can restart myActivity EndCallListener _callListener = new EndCallListener(); TelephonyManager _TM = (TelephonyManager)mApp.getSystemService(Context.TELEPHONY_SERVICE); _TM.listen(_callListener, PhoneStateListener.LISTEN_CALL_STATE); Intent _makeCall = new Intent(Intent.ACTION_CALL, Uri.parse(_bPartyNumber)); _makeCall.setComponent(new ComponentName("com.android.phone","com.android.phone.OutgoingCallBroadcaster")); startActivity(_makeCall); finish(); //Wait for call to enter the IDLE state and then we will be recalled by _callListener } }); }//end of onCreate()

sử dụng điều này để khởi tạo hành vi cho onClick của bạn trong myActivity, ví dụ như sau onCreate ()

private void initialiseCallStatePreferences(String _BParty) { final int LAUNCHED = -1; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( mApp.getBaseContext()); SharedPreferences.Editor _ed = prefs.edit(); String _prefKey = mApp.getString(R.string.last_phone_call_state_key), _bPartyKey = mApp.getString(R.string.last_phone_call_bparty_key); //Save default call state before next call _ed.putInt(_prefKey,LAUNCHED); _ed.putString(_bPartyKey,_BParty); _ed.commit(); }

Bạn sẽ thấy rằng việc nhấp vào danh sách các số điện thoại của bạn sẽ kết thúc hoạt động của bạn, thực hiện cuộc gọi đến số đó và trở về hoạt động của bạn khi cuộc gọi kết thúc.

Thực hiện cuộc gọi từ bên ngoài ứng dụng của bạn trong khi nó vẫn không khởi động lại hoạt động của bạn (trừ khi nó giống như số BParty cuối cùng được gọi).

:)

13 hữu ích 1 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Vũ Ngọc Danh · Vũ Ngọc Danh 11:23 10/05/2011

bạn có thể sử dụng startActivityForResult ()

7 hữu ích 2 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Đỗ Ðức Kiên · Đỗ Ðức Kiên 12:57 05/11/2009

Đây là giải pháp theo quan điểm của tôi:

ok.setOnClickListener(this); @Override public void onClick(View view) { if(view == ok){ Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + num)); activity.startActivity(intent); }

Tất nhiên trong định nghĩa Activity (class), bạn phải triển khai View.OnClickListener.

6 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Huỳnh Quang Khánh · Huỳnh Quang Khánh 14:24 14/04/2015

Dưới đây là ví dụ của tôi, đầu tiên người dùng sẽ ghi vào số mà anh ấy / cô ấy muốn quay số và sau đó nhấn nút gọi và được chuyển hướng đến điện thoại. Sau khi hủy cuộc gọi, người dùng sẽ được gửi trở lại ứng dụng. Để làm được điều này, nút cần phải có phương thức onClick ('makePhoneCall' trong ví dụ này) trong xml. Bạn cũng cần phải đăng ký sự cho phép trong bảng kê khai.

Biểu hiện

android:name="android.permission.CALL_PHONE"> android:name="android.permission.READ_PHONE_STATE" />

Hoạt động

import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class PhoneCall extends Activity { EditText phoneTo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone_call); phoneTo = (EditText) findViewById(R.id.phoneNumber); } public void makePhoneCall(View view) { try { String number = phoneTo.getText().toString(); Intent phoneIntent = new Intent(Intent.ACTION_CALL); phoneIntent.setData(Uri.parse("tel:"+ number)); startActivity(phoneIntent); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(PhoneCall.this, "Call failed, please try again later!", Toast.LENGTH_SHORT).show(); } } }

XML

android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="phone" android:ems="10" android:id="@+id/phoneNumber" android:layout_marginTop="67dp" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" /> android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Call" android:id="@+id/makePhoneCall" android:onClick="makePhoneCall" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" />

6 hữu ích 1 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Đặng Thúy Hằng · Đặng Thúy Hằng 14:48 02/04/2016

@Override public void onClick(View view) { Intent phoneIntent = new Intent(Intent.ACTION_CALL); phoneIntent.setData(Uri.parse("tel:91-000-000-0000")); if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { return; } startActivity(phoneIntent); }

6 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Nguyễn Ân Lai · Nguyễn Ân Lai 14:42 07/06/2011

Nếu bạn sẽ sử dụng một trình lắng nghe, bạn cũng sẽ cần phải thêm quyền này vào bảng kê khai.

android:name="android.permission.READ_PHONE_STATE" />

5 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Đỗ Xuân Nam · Đỗ Xuân Nam 14:30 28/06/2012

Bên trong PhoneStateListener sau khi thấy cuộc gọi kết thúc, sử dụng tốt hơn:

Intent intent = new Intent(CallDispatcherActivity.this, CallDispatcherActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);

Trong đó CallDispatcherActivity là hoạt động mà người dùng đã thực hiện cuộc gọi (đối với người điều phối dịch vụ taxi, trong trường hợp của tôi). Điều này chỉ cần loại bỏ ứng dụng điện thoại Android từ đầu, người dùng sẽ quay lại thay vì mã xấu mà tôi thấy ở đây.

3 hữu ích 3 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Dương Lương Quyền · Dương Lương Quyền 08:19 24/07/2012

Để trở về với bạn Activity, bạn sẽ cần lắng nghe TelephonyStates. Trên đó listenerbạn có thể gửi một Intentđể mở lại Activitymột khi điện thoại không hoạt động.

Ít nhất đó là cách tôi sẽ làm điều đó.

3 hữu ích 1 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Hoàng Tố Quyên · Hoàng Tố Quyên 14:28 21/02/2013

Hướng dẫn hoàn hảo ở đây ! Luôn luôn kiểm tra blog này bởi vì nó có nhiều hướng dẫn tuyệt vời!

3 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Lê Bảo An · Lê Bảo An 09:53 26/02/2014

Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:"+number)); startActivity(callIntent); **Add permission :** <uses-permission android:name="android.permission.CALL_PHONE" />

3 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Phan Lan Nhi · Phan Lan Nhi 17:58 15/12/2011

Hãy thử sử dụng:

finish();

vào cuối hoạt động. Nó sẽ chuyển hướng bạn đến hoạt động trước đó của bạn.

2 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Trịnh Duy Hiếu · Trịnh Duy Hiếu 00:28 22/10/2012

Khi PhoneStateListenerđược sử dụng, người ta cần đảm bảo PHONE_STATE_IDLEtheo sau a PHONE_STATE_OFFHOOKđược sử dụng để kích hoạt hành động được thực hiện sau cuộc gọi. Nếu kích hoạt xảy ra khi nhìn thấy PHONE_STATE_IDLE, bạn sẽ kết thúc việc đó trước cuộc gọi. Bởi vì bạn sẽ thấy sự thay đổi trạng tháiPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.

2 hữu ích 2 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Lê Thanh Thư · Lê Thanh Thư 10:10 23/04/2013

// trong setonclicklistener đặt mã này:

EditText et_number=(EditText)findViewById(R.id.id_of_edittext); String my_number = et_number.getText().toString().trim(); Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(my_number)); startActivity(callIntent);

// cấp phép cho cuộc gọi trong tệp kê khai:

android:name="android.permission.CALL_PHONE">

2 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Trần Duy Ngôn · Trần Duy Ngôn 06:10 21/10/2012

@Dmitri Novikov, FLAG_ACTIVITY_CLEAR_TOPxóa bất kỳ trường hợp hoạt động nào trên đầu trang mới. Vì vậy, nó có thể kết thúc trường hợp cũ trước khi hoàn thành quá trình.

1 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Hồ Tân Thành · Hồ Tân Thành 09:31 29/10/2012

Thêm đây là xml của bạn: android:autoLink="phone"

1 hữu ích 1 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Đỗ Việt Quyết · Đỗ Việt Quyết 06:43 08/10/2015

Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent .setData(Uri.parse("tel:+91-XXXXXXXXX")); startActivity(callIntent );

để tham khảo thêm bấm vào đây http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html

1 hữu ích 0 bình luận chia sẻ

answer

Để thực hiện cuộc gọi với ứng dụng Android cần sử dụng perrmission

Dương Cẩm Hân · Dương Cẩm Hân 06:45 29/06/2014

Khi bắt đầu cuộc gọi của bạn, nó có vẻ tốt.

Có một sự khác biệt giữa Android 11+ trở xuống trong việc đưa ứng dụng của bạn lên phía trước.

Android 10 trở xuống bạn cần bắt đầu một ý định mới, Android 11+ bạn chỉ cần sử dụng BringTaskToFront

Trong trạng thái cuộc gọi IDLE:

if (Build.VERSION.SDK_INT >= 11) { ActivityManager am = (ActivityManager) activity.getSystemService(Activity.ACTIVITY_SERVICE); am.moveTaskToFront(MyActivity.MyActivityTaskId, ActivityManager.MOVE_TASK_WITH_HOME); } else { Intent intent = new Intent(activity, MyActivity.class); activity.startActivity(intent); }

Tôi đặt lệnh MyActivity.MyActivityTaskIdkhi thực hiện cuộc gọi trên hoạt động của mình như vậy, nó không hoạt động, đặt biến này trên trang hoạt động chính của trang bạn muốn quay lại.

MyActivity.MyActivityTaskId = this.getTaskId();

MyActivityTaskId là một biến tĩnh trên lớp hoạt động của tôi

public static int MyActivityTaskId = 0;

Tôi hy vọng điều này sẽ làm việc cho bạn. Tôi sử dụng mã ở trên một chút khác nhau, tôi mở ứng dụng của mình ngay khi cuộc gọi được trả lời, người dùng có thể thấy chi tiết của người gọi.

Tôi cũng đã thiết lập một số thứ AndroidManifest.xml:

/*Dont really know if this makes a difference*/ <activity android:name="MyActivity" android:taskAffinity="" android:launchMode="singleTask" />

và quyền:

android:name="android.permission.GET_TASKS" /> android:name="android.permission.REORDER_TASKS" />

Vui lòng đặt câu hỏi nếu hoặc khi bạn gặp khó khăn.

0 hữu ích 0 bình luận chia sẻ