2010-10-28 42 views
32

Tôi muốn có thể gửi một tin nhắn SMS thực tế từ một trình bao chỉ bằng cách sử dụng dòng lệnh và không dựa vào bất kỳ gói ứng dụng nào để thực hiện điều đó. Tôi quan tâm đến việc gửi tin nhắn này giữa các điện thoại, không phải từ trình giả lập đến điện thoại. Ví dụ: bằng cách chạy lệnh:Làm cách nào để gửi SMS từ trình bao?

service call phone 2 s16 "1234567890" 

Tôi có thể thực hiện cuộc gọi từ điện thoại đến điện thoại bằng dòng lệnh. Lệnh 'danh sách dịch vụ' cho thấy một dịch vụ isms, mà tôi dường như không thể cung cấp các đối số chính xác cho. Tôi cho rằng một trong những args nên là một chuỗi PDU nhưng không có bất kỳ may mắn cho đến nay.

Trả lời

2

Bạn có thể gửi bất kỳ ý định nào bạn muốn từ dòng lệnh, vì vậy nó chỉ là vấn đề tìm ra mục đích có thể được sử dụng để gửi tin nhắn, hoặc nếu không tồn tại, sau đó viết một gói ứng dụng. -to-sms khả năng và gửi ý định để kích hoạt rằng từ dòng lệnh.

Nếu bạn kết thúc viết một apk để thực hiện điều đó, hãy suy nghĩ một chút về các quyền. Người dùng nào sẽ chạy dòng lệnh - người dùng adb shell? bất kỳ người dùng ứng dụng thông thường cũ nào? Apk của bạn có lẽ sẽ có quyền sms, nhưng bạn có muốn mở rộng phạm vi đó cho tất cả mọi thứ trên điện thoại, hoặc thực hiện một số cơ chế bảo mật trong ý định của bạn?

+1

Cảm ơn Chris, tôi nghĩ tôi đang đi đúng hướng với dòng suy nghĩ đó. Cho đến nay tôi đã quản lý để có được khá gần với lệnh "am bắt đầu -a android.intent.action.SENDTO -d sms: 1234567890 --es sms_body ohai --ez exit_on_sent true" nhưng tôi vẫn cần phải tìm ra cách kích hoạt onClick/onEditorAction của khung nhìn tự động. Nhìn qua mã nguồn MMS tôi tìm thấy khung nhìn mSendButton mà tôi nghĩ rằng tôi cần phải kích hoạt một performClick() trên. Nếu tôi nhận được một lệnh làm việc hoặc cặp lệnh tôi sẽ def cập nhật thêm này. – reproba

+0

Có thể tương tác của người dùng là bắt buộc để đi tuyến đường đó - nếu không có giai đoạn cần có quyền sms, triết lý thiết kế nền tảng sẽ yêu cầu sự chấp thuận của người dùng thay cho quyền. Vì vậy, bạn có thể muốn đi một nửa khác của ý tưởng và thực hiện của riêng bạn định hướng sms gửi sms apk, không tương tác, với sự cho phép sms. Và hy vọng với một số loại cơ chế bảo mật để nó chỉ hoạt động cho mục đích của bạn. –

11

Bạn có thể telnet đến trình giả lập thực hiện tương tự như "telnet localhost 5554", trong đó 5554 là cổng giả lập đang nghe. Sau đó, bạn có thể gửi tin nhắn sms bằng cách thực hiện như sau:

sms send 1234 "Hello" 

1234 có thể là bất kỳ chuỗi chữ số nào. Đính kèm thông điệp trong dấu ngoặc kép nếu bạn đang bao gồm dấu cách.

chỉnh sửa: một sms lệnh không tồn tại trong Android trên các thiết bị thực tế, nó là một tính năng giả lập chỉ để giả mạo một tin nhắn SMS nhận không gửi. Nó chỉ là sự tiện lợi cho các thiết bị mô phỏng không có quyền truy cập vào bất kỳ mạng di động thực tế nào.

cf. http://developer.android.com/guide/developing/devices/emulator.html#sms

38

Trong thực tế, điều này có thể được thực hiện nhưng đòi hỏi phải được cài đặt adb (Một phần của SDK Android)

adb shell am start -a android.intent.action.SENDTO -d sms:CCXXXXXXXXXX --es sms_body "SMS BODY GOES HERE" --ez exit_on_sent true 
adb shell input keyevent 22 
adb shell input keyevent 66 

đâu CCXXXXXXXXXX là mã quốc gia tiếp theo số điện thoại. Điều này có thể không hoạt động chính xác trên các cài đặt Android không chuẩn, bạn sẽ cần phải tìm các giá trị khóa chính xác để vượt qua.

+0

Bạn có biết làm thế nào tôi có thể thoát khỏi dấu ngoặc kép cho cơ thể sms? –

+1

@ EdgarVillegasAlvarado, dễ dàng: '" Ông nói \ "Ok \" "' – kolypto

+0

Tôi đã xem xét và điều này dường như làm việc ... cảm ơn bạn – thevoipman

8

Làm thế nào về điều này?

service call isms 5 s16 "+??????????" i32 0 i32 0 s16 "SMS TEXT HERE" 
6

tôi không có đủ uy tín chỉ lên phiếu bầu tán thành câu trả lời được đưa ra bởi Dmitry, nhưng điều đó câu trả lời làm việc với một thay đổi nhỏ: Ít nhất đối với một số Mỹ, thay vì đặt một plus- dấu (+) nó làm việc cho tôi với một "1" ví dụ 17079876543 ...

service call isms 5 s16 "17079876543" i32 0 i32 0 s16 "SMS TEXT HERE"

Oh boy oh boy oh boy ... bây giờ nếu tôi có thể tìm ra cách để nhận SMS qua dòng lệnh và kết hợp điều đó với emacs (trong một emacs shell nói - ông bắt đầu để chà xát hai bàn tay của mình lại với nhau và phá vỡ một nụ cười nghiêng ... và nghĩ về tất cả các đòn bẩy dòng lệnh khác mà chúng ta có thể kéo!)

+0

Làm việc hoàn toàn tốt. Nhưng làm thế nào tôi có thể thêm không gian? Không gian sẽ không hoạt động với điều này. Ví dụ: nếu tôi gửi "SMS TEXT HERE", nó chỉ gửi phần SMS –

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