2010-05-06 19 views
9

Tôi đang cố triển khai giao diện người dùng xử lý cuộc gọi điện thoại của riêng mình.Cách chấp nhận cuộc gọi đến bằng cách nhấp vào nút?

Điều tôi muốn làm là, nếu có cuộc gọi đến, số điện thoại đến và hình ảnh sẽ hiển thị, và nếu tôi nhấn một nút, cuộc gọi đến sẽ được chấp nhận/trả lời.

Mã liên quan là:

@Override 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    answerButton = (Button) findViewById(R.id.pickup); 
    answerButton.setOnClickListener(new OnClickListener() { 
     public void onClick(final View v) { 
      Intent intent = new Intent("android.intent.action.ANSWER"); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent);   
     } 
    }); 

Đáng buồn thay, các mã không hoạt động. Lúc đầu, một ngoại lệ được ném nếu tôi bấm nút trả lời của tôi:

ActivityNotFoundException: Không Hoạt động phát hiện để xử lý Ý định {
hành động = android.intent.action.ANSWER

Sau đó, tôi đã thêm một mục nhập trong AndroidManifest.xml:

<uses-permission android:name="android.permission.CALL_PHONE" /> 

Tôi chạy lại ứng dụng, không còn ngoại lệ nữa. Tuy nhiên, tôi nghi ngờ cuộc gọi đến không thực sự được chấp nhận. Bởi vì nếu nhấn nút trả lời màn hình của Android (nút màu xanh lá cây), cuộc gọi đến được chấp nhận và biểu tượng cuộc gọi màu xanh lá cây cũng được hiển thị ở góc trên bên trái của màn hình trình mô phỏng, trong khi ứng dụng của tôi thì không.

Tôi cũng đọc mã nguồn của ứng dụng Điện thoại trong nguồn Android. Có phương thức như acceptCall() trong lớp Phone. Nhưng những mã có vẻ khó khăn cho tôi để sử dụng, bởi vì có rất nhiều tuyên bố nhập khẩu trong các mã, chẳng hạn như:

import com.android.internal.telephony.Call; 
import com.android.internal.telephony.CallStateException; 
import com.android.internal.telephony.CallerInfo; 
import com.android.internal.telephony.CallerInfoAsyncQuery; 
import com.android.internal.telephony.Connection; 
import com.android.internal.telephony.MmiCode; 
import com.android.internal.telephony.Phone; 

Và, nếu tôi thêm các hàng nhập khẩu trong mã của tôi, sẽ có quá nhiều lỗi, chẳng hạn như :
The import com.android.internal.telephony cannot be resolved.

Cách nào đúng và đơn giản cho vấn đề của tôi?

+0

thấy liên kết: [http://mylifewithandroid.blogspot.com/2008/01/phonecalls.html](http://mylifewithandroid.blogspot. com/2008/01/phonecalls.html) –

Trả lời

1

Thêm thể loại "android.intent.category.DEFAULT" (Intent.CATEGORY_DEFAULT)

+0

Cảm ơn bạn, MasterGaurav! Nhưng tôi đã thêm danh mục "android.intent.category.DEFAULT" vào tệp kê khai. Đây là mã: \t \t \t Vì vậy, tôi tự hỏi có những lý do khác . – Armstrong

+0

Tôi muốn thêm danh mục mặc định vào Intent trong mã. –

1

Mục đích android.intent.action.ANSWER được bằng cách nào đó không làm việc như mong đợi. Có một cách giải quyết bằng cách mô phỏng nút bluetooth để trả lời cuộc gọi đến. Bạn có thể xem ví dụ từ dự án auto-answer.

0

Bạn cần tạo bộ thu phát sóng trong đó bạn sẽ nhận được sự kiện khi điện thoại đổ chuông và sau đó bạn có thể khởi chạy hoạt động mong muốn của mình.Bạn không thể thay thế màn hình cuộc gọi đến mặc định cho đến khi sử dụng ROM CUSTOM. Và đừng quên đặt ưu tiên trong bộ thu phát sóng trong tệp kê khai. Khi bạn nhận được sự kiện, bạn có thể sử dụng đối tượng của ITelephony bằng cách sử dụng reflection.And có thể cung cấp cho bạn các phương thức để trả lời hoặc từ chối cuộc gọi.

0

Điều này có thể sử dụng gói com.android.internal.telephony, nhưng bạn phải tìm cách nào đó để sử dụng phương pháp này trong nhật thực và ứng dụng của bạn phải được biên dịch dưới dạng ứng dụng hệ thống bằng mã nguồn Android.

0

Thay đổi phương pháp gọi chấp nhận của bạn bằng cách này:

public static void acceptCall(Context context) 
{ 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, 
     new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
} 
Các vấn đề liên quan