2010-03-19 34 views
8

Tôi có một ứng dụng đã được tạo và tôi muốn thêm một tính năng phải được bắt đầu khi cuộc gọi kết thúc. Làm cách nào để đạt được điều đó? Tôi nghĩ rằng tuyên bố trong manifest một cái gì đó của tôi như thế nàyMục đích sẽ được kích hoạt khi cuộc gọi kết thúc?

<activity android:name="Filter"> 
    <intent-filter> 
      <category android:name="android.intent.SOMETHING" /> 
    </intent-filter> 
</activity> 

có thể là đủ, nhưng những loại Intent tôi phải đưa vào bộ lọc?

Tìm tài liệu tôi chỉ tìm thấy mục đích phát hiện thời điểm cuộc gọi được bắt đầu.

Là những gì tôi đang tìm kiếm?

Trả lời

16

Bạn có thể sử dụng PhoneStateLisenter để nghe các thay đổi trong trạng thái cuộc gọi.

Vì vậy, bạn lắng nghe sự thay đổi LISTEN_CALL_STATE.

Với phương pháp onCallStateChanged.

Vì vậy, khi trạng thái thay đổi từ OFFHOOK thành IDLE, hãy bắt đầu ứng dụng của bạn

+1

Mmm ... Tôi muốn rằng Mục đích này có thể bị bắt ngay cả khi ứng dụng của tôi không được bắt đầu, như mục đích phát sóng. Có thể không? – lbedogni

+0

Không có ý định hệ thống cho điều này mà tôi tin rằng bạn có thể tạo một dịch vụ nhỏ chạy ngầm nền để nghe thay đổi trạng thái cuộc gọi và khi thay đổi từ OFFHOOK sang IDLE gửi Intent tùy chỉnh để khởi động ứng dụng của bạn –

+0

ý tưởng cảm ơn. – lbedogni

20

Tôi đã thực hiện việc này bằng cách sử dụng bộ thu sóng. Công trinh! mã trông như thế này -

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.gopi" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

     <receiver android:name=".IncomingCallTracker"> 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

Đoạn mã IncomingCallTracker trông giống như -

public class IncomingCallTracker extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle bundle = intent.getExtras(); 

      Set<String> keys = bundle.keySet(); 
     for (String key : keys) { 
       Log.i("MYAPP##", key + "="+ bundle.getString(key)); 
     }  
    } 

} 

Bạn có thể tìm kiếm chìa khóa 'nhà nước' trong gói. Khi giá trị của nó là 'IDLE' có nghĩa là cuộc gọi đã kết thúc và bạn có thể thực hiện bất kỳ hành động nào bạn muốn dựa trên điều này.

Các vấn đề liên quan