2011-10-01 38 views
5

Tôi muốn nhận số cuộc gọi nhỡ và tin nhắn chưa đọc trong ứng dụng của mình. và tôi muốn mở ứng dụng có liên quan khi người dùng nhấp vào số lượng.Cách nhận số cuộc gọi và số SMS bị nhỡ

Bây giờ vấn đề lớn nhất là làm cách nào để đếm được?

Tôi đã tìm kiếm trực tuyến nhưng không thể tìm thấy giải pháp nào.

Xin cảm ơn trước.

Trả lời

22

http://developer.android.com/reference/android/provider/CallLog.Calls.html

Hãy nhìn vào lớp CallLog này. Tất cả những gì bạn cần là truy vấn điện thoại cho bất kỳ cuộc gọi nào sau đó trích xuất một cuộc gọi nhỡ (оr thực hiện điều này khi bạn đang truy vấn điện thoại, trong các đối số lựa chọn). Điều tương tự cũng áp dụng cho các tin nhắn. SMS được lưu trữ trong nhà cung cấp Nội dung theo số "content://sms/"

Sau đó, chỉ nhận số lượng hàng trong Con trỏ trả về truy vấn. :)

Tôi hy vọng điều này sẽ hữu ích.

Edit: Đối với các cuộc gọi nhỡ:

String[] projection = { CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.TYPE }; 
     String where = CallLog.Calls.TYPE+"="+CallLog.Calls.MISSED_TYPE;   
     Cursor c = this.getContentResolver().query(CallLog.Calls.CONTENT_URI, selection,where, null, null); 
     c.moveToFirst();  
     Log.d("CALL", ""+c.getCount()); //do some other operation 
     if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc 

Trong mệnh đề mà bạn thiết lập điều kiện để lựa chọn dữ liệu. Trong trường hợp của chúng ta, chúng ta cần mọi thứ có giá trị bằng CallLog.Calls.MISSED_TYPE. Chúng tôi chọn dự án Tên của người gọi và số của mình, ofcourse bạn có thể chỉ định thêm thông tin để được truy vấn như loại số như điện thoại di động, nhà, nơi làm việc. Khái niệm tương đương với truy vấn SQL, một cái gì đó như: SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE

Điều này đòi hỏi quyền truy cập để được thêm vào Manifest

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

Đối với truy vấn SMS ContentProvider:

Uri sms_content = Uri.parse("content://sms"); 
Cursor c = this.getContentResolver().query(sms_content, null,null, null, null); 
c.moveToFirst(); 
Log.d("SMS COUNT", ""+c.getCount()); //do some other operation 
//Here proceed with the what you wanted 
if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc 

Bạn có thể đi sâu hơn trong cây nội dung như chỉ định loại sms, như: content://sms/sent hoặc content://sms/inbox và thêm phép chiếu và lựa chọn cho đối số thứ hai của query() phương thức như, tên, người, trạng thái của tin nhắn (như ví dụ Cuộc gọi).

Điều này đòi hỏi sự cho phép:

<uses-permission android:name="android.permission.READ_SMS"></uses-permission> 
+0

Cảm ơn bạn đã trả lời. Bạn có thể chỉ cho tôi một số hướng dẫn. Tôi khó có thể hiểu được tài liệu vì tôi là một NooB thực sự: ( –

+2

@MayuMayooresan Tôi đã cung cấp cho bạn ví dụ tôi đã viết cho bạn. Tôi hy vọng lời giải thích ngắn gọn của tôi là đủ rõ ràng. Chúc may mắn. –

+1

cảm ơn rất nhiều :) u rock :) –

0

Như tôi đã không có đủ uy tín để trả lời câu hỏi @Prasad bình luận về

LỖI -> getContentResolver() là undefined cho các loại hình mới Runnable() {}

getContentResolver() là một phần của ngữ cảnh ứng dụng, vì vậy nếu bạn đang sử dụng ngữ cảnh sử dụng BroadcastReceiver trong hàm onReceive() như thế này

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

    context.getContentResolver() 
} 

nếu bạn đang sử dụng đoạn mã trên bên trong một hoạt động, sau đó bạn có thể sử dụng

getApplicationContext().getContentResolver() 

cũng đảm bảo để sử dụng [Ctrl + Shift + O (O không zero)] để tổ chức nhập khẩu

Key Shortcut for Eclipse Imports

Tôi hy vọng điều này sẽ giúp bạn và giúp đỡ người khác và tôi hy vọng điều này không trái với quy tắc cộng đồng của chúng tôi.

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