2015-03-16 21 views
7

Tôi muốn để có được số điện thoại di động của người dùng, mà sẽ được defaultly lấy như tên người dùng, khi tôi sử dụng đoạn mã sau để có được số điện thoại di động, nó sẽ trả về một chuỗi rỗnggetLine1Number android() trả về chuỗi rỗng

TelephonyManager tMgr = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
      mPhoneNumber = tMgr.getLine1Number(); 
      String mobNo = mPhoneNumber.replace("+", ""); 

Một lý do tôi tìm thấy là Số điện thoại của tôikhông rõ dưới Cài đặt-> Giới thiệu về điện thoại-> Trạng thái-> Trạng thái SIM. Làm thế nào để khắc phục vấn đề này mà không đưa ra bất kỳ gánh nặng nào cho người dùng.

enter image description here

+0

xem xét sử dụng số IMEI để nhận dạng. – Droidman

Trả lời

1

Có ít nhất một số thẻ SIM/nhà khai thác ra có những người không cung cấp số - Tôi đã thấy nó và bạn đã nhìn thấy nó. Có lẽ không có gì bạn có thể làm về nó.

+0

chắc chắn, giải pháp sẽ ở đó, vì đây là nhu cầu rất cơ bản của các nhà phát triển ứng dụng – ABI

+0

Nếu về mặt kỹ thuật không có khả năng, nó không quan trọng nếu đó là "nhu cầu rất cơ bản của các nhà phát triển ứng dụng". Chức năng này cũng không có trên iOS, ít nhất là không dành cho các ứng dụng của bên thứ ba. Các nhà phát triển cũng phải sống với nó. – sstn

+1

Ngay cả (rất phổ biến) các ứng dụng như WhatsApp yêu cầu người dùng nhập/xác nhận số điện thoại. – sstn

1

Xem tài liệu getLine1Number(). Nó nói nếu nó không có, nó trả về null. Vì vậy, @sstn là một phần đúng. Bạn không thể làm nhiều về điều đó. Theo như tôi có thể nhớ phương pháp này được số được lưu trữ trong SIM. Một số nhà cung cấp hạn chế quyền truy cập và một số khác không cung cấp.

Tuy nhiên, nếu bạn thực sự thực sự đẩy số điện thoại tự động từ mạng, bạn có thể thử thêm một điều nữa. Hầu hết các nhà cung cấp mạng đều cung cấp API của riêng họ. API có thể yêu cầu người dùng kết nối với internet thông qua dữ liệu mạng và không phải wi-fi hoặc bất kỳ phương pháp nào khác. Mặc dù các nhà cung cấp khác nhau ở các quốc gia khác nhau có thể khác nhau về điều đó. Bạn có khả năng nhận ra nhà cung cấp mạng bằng cách sử dụng , sau đó sử dụng API dành riêng cho nhà cung cấp để lấy số. Tuy nhiên không chắc chắn nếu nó miễn phí. Ví dụ: Tại Canada, Telus có API nhưng nó đòi hỏi bạn phải hợp tác với họ. Tương tự với Rogers v.v.

Nếu bạn không muốn trải qua cơn đau đó, tùy chọn cuối cùng là yêu cầu người dùng nhập vào. Nếu bạn lo lắng về tính hợp lệ của nó thì bạn luôn có thể thực hiện xác minh qua SMS một lần.

Hy vọng điều đó sẽ hữu ích.

+1

nó trả về một chuỗi rỗng, không phải là rỗng – ABI

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