Tôi muốn lấy kinh độ và vĩ độ trong trình giả lập Android để thử nghiệm.
Có ai có thể hướng dẫn tôi làm thế nào để đạt được điều này?
Làm cách nào để đặt vị trí của trình giả lập thành vị trí thử nghiệm?
Tôi muốn lấy kinh độ và vĩ độ trong trình giả lập Android để thử nghiệm.
Có ai có thể hướng dẫn tôi làm thế nào để đạt được điều này?
Làm cách nào để đặt vị trí của trình giả lập thành vị trí thử nghiệm?
Câu trả lời:
Bạn có thể kết nối với Trình mô phỏng qua Telnet. Sau đó, bạn có bảng điều khiển Trình mô phỏng cho phép bạn nhập một số dữ liệu nhất định như sửa lỗi địa lý, mạng, v.v.
Làm thế nào để sử dụng bàn điều khiển được giải thích rộng rãi ở đây . Để kết nối với bàn điều khiển, mở một dòng lệnh và gõ
telnet localhost 5554
Sau đó, bạn có thể sử dụng lệnh địa lý để đặt vĩ độ, kinh độ và nếu cần độ cao trên thiết bị được truyền cho tất cả các chương trình sử dụng nhà cung cấp vị trí gps. Xem liên kết ở trên để được hướng dẫn thêm.
Lệnh cụ thể để chạy trong giao diện điều khiển là
geo fix <longitude value> <latitude value>
Tôi thấy trang web này hữu ích để tìm một lat / lng thực tế: http://itouchmap.com/latlong.html
Nếu bạn cần nhiều hơn thì một tọa độ bạn có thể sử dụng tệp kml với một tuyến đường, đó là một chút mô tả trong bài viết này . Tôi không thể tìm thấy một nguồn tốt hơn vào lúc này.
geo fix
lệnh chỉ có sẵn nếu bạn auth
đầu tiên. Có thể đáng nói đến ...
Không ai ở đây đề cập đến giải pháp tích hợp sẵn của trình giả lập, vì vậy đối với khách truy cập trong tương lai, tôi muốn chia sẻ nó với hình ảnh.
Đầu tiên, chạy Trình giả lập Android của bạn và nhấp vào nút menu (3 chấm) hiển thị bên dưới:
Sau đó từ khung bên trái, chọn Vị trí và thay đổi tọa độ theo nhu cầu của bạn. Sau khi nhấn nút Gửi , các thay đổi sẽ ngay lập tức có hiệu lực (Tôi khuyên bạn nên mở Google Maps để hiểu rõ hơn).
Phiên bản Android Studio: 2.3.3
Ngoài ra, để làm cho các vị trí khác nhau của bạn đến ứng dụng của bạn trong thời gian thực, bạn có thể sử dụng tệp GPX. Thật dễ dàng để tạo tệp này từ liên kết hướng Google Map:
Sử dụng nút "Tải GPS / KML" để tải tệp đã tạo vào trình giả lập của bạn, chọn tốc độ và nhấn nút phát màu xanh lá cây ở phía dưới. Vị trí sẽ được gửi trong thời gian thực như thể hiện trong hình dưới đây.
Tôi đang tìm kiếm một cách tốt hơn để đặt tọa độ GPS của trình giả lập hơn là sử dụng geo fix
và xác định thủ công các tọa độ kinh độ và vĩ độ cụ thể.
Không thể tìm thấy bất cứ điều gì, tôi kết hợp một chương trình nhỏ sử dụng GWT và Google Maps API để khởi chạy một công cụ bản đồ dựa trên trình duyệt để đặt vị trí GPS trong trình giả lập:
Hy vọng nó có thể được sử dụng để giúp đỡ những người khác chắc chắn sẽ vấp phải khó khăn / câu hỏi này.
ConnectionRefused
thông báo đó nếu tôi khởi chạy trình giả lập GPS trước khi khởi động thiết bị ảo Android. Ở đầu trình duyệt của tôi, nó cũng có thông báo "Lỗi khi tạo kết nối trên cổng 5554 ..." Mọi thứ đều hoạt động tốt nếu tôi nhấp vào nút "Thay đổi cổng trình giả lập" để kết nối lại
geo fix 42,42 42,42 42
dấu phẩy thay vì dấu chấm.
Nếu bạn đang sử dụng Eclipse
, hãy đi tới Window->Open Perspective->DDMS
, sau đó nhập một Location Controls
và nhấn Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Bất cứ ý tưởng tại sao nó không hoạt động? Tôi đang sử dụng Nexus 4 AVD mặc định
Đối với người dùng Android Studio:
chạy trình giả lập,
Sau đó đi đến Tools -> Android ->Android device monitor
mở Emulator Control
Tab và sử dụng nhóm điều khiển vị trí.
Giả sử bạn đã thiết lập và chạy mapview:
MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();
myLocation.runOnFirstFix(new Runnable() {
public void run() {
GeoPoint pt = myLocation.getMyLocation();
}
});
Bạn sẽ cần sự cho phép sau trong bảng kê khai của bạn:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Và để gửi tọa độ giả đến trình giả lập từ Eclipse, hãy chuyển đến trình đơn "Cửa sổ", chọn "Hiển thị chế độ xem"> "Khác"> "Điều khiển trình giả lập" và bạn có thể gửi tọa độ từ ngăn điều khiển trình giả lập xuất hiện.
runOnFirstFix
? Bởi vì đó là sự kiện được nêu ra khi thiết bị lần đầu tiên nhận được vị trí GPS, do đó, nếu điều đó được nâng lên, getMyLocation
chắc chắn sẽ trả về một giá trị.
Đối với trình giả lập mới:
http://developer.android.com/tools/devices/emulator.html#extends
Về cơ bản, nhấp vào nút ba chấm trong điều khiển trình giả lập (ở bên phải trình giả lập) và nó sẽ mở ra một menu cho phép bạn điều khiển trình giả lập bao gồm cả vị trí
1. Người dùng Android Studio.
Sau khi chạy trình giả lập goto Tools-> Android-> Trình giám sát thiết bị Android
Nhấp vào thay đổi Tab Điều khiển Trình mô phỏng từ nhóm điều khiển vị trí.
2. Người dùng Eclipse.
Đầu tiên trong Eclipse Trong Menu Chọn "Cửa sổ", sau đó chọn "Mở phối cảnh" rồi chọn "DDMS". tức là Window-> Open Pres perspective-> DDMS.
Bạn sẽ thấy trên Bảng điều khiển thiết bị bên trái và bên phải bạn sẽ thấy các tab khác nhau. Chọn tab "Điều khiển trình mô phỏng".
Ở phía dưới, bạn sẽ thấy Bảng điều khiển vị trí. Chọn tab "Thủ công".
Nhập Kinh độ và Vĩ độ trong Hộp văn bản, sau đó nhấp vào nút Gửi. Nó sẽ gửi vị trí cho bạn giả lập và ứng dụng.
3. Sử dụng telnet.
Trong lệnh chạy kiểu này.
telnet localhost 5554
Nếu bạn không sử dụng windows, bạn có thể sử dụng bất kỳ máy khách telnet nào.
Sau khi kết nối với telnet, hãy sử dụng lệnh sau để gửi vị trí của bạn tới trình giả lập.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Sử dụng công cụ Google maps dựa trên trình duyệt
Có một chương trình sử dụng GWT và Google Maps API để khởi chạy một công cụ bản đồ dựa trên trình duyệt để đặt vị trí GPS trong trình giả lập:
Sử dụng lệnh "Geo" trong bảng điều khiển giả lập
Để gửi dữ liệu vị trí giả từ dòng lệnh:
Khởi chạy ứng dụng của bạn trong trình giả lập Android và mở terminal / console trong thư mục công cụ / SDK của SDK.
Kết nối với bảng điều khiển giả lập:
telnet localhost 5555
(Thay thế 5555 bằng bất kỳ cổng nào trình giả lập của bạn đang chạy)
Gửi dữ liệu vị trí: * sửa địa lý để gửi một vị trí địa lý cố định.
Lệnh này chấp nhận kinh độ và vĩ độ theo độ thập phân và độ cao tùy chọn tính bằng mét. Ví dụ:
geo fix -121.45356 46.51119 4392
Tôi đã viết một kịch bản python để đẩy các vị trí gps đến trình giả lập thông qua telnet. Nó xác định một nguồn và một vị trí đích. Ngoài ra còn có thời gian bù cho phép bạn kiểm soát thời gian tọa độ sẽ được đẩy đến thiết bị. Một địa điểm là ong đẩy một lần một giây.
Trong ví dụ dưới đây, kịch bản chuyển từ Berlin đến Hamburg trong 120 giây. Một bước / vị trí gps mỗi giây với khoảng cách ngẫu nhiên.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random
HOST = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120
LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
lat = LAT_SRC
lng = LNG_SRC
tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")
for i in range(SECONDS):
lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
#tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(lng, lat))
#tn.write("exit\n")
sleep(1)
tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")
print tn.read_all()
Tôi sử dụng chức năng DDMS cắm nhật thực để gửi GPS.
Trong Linux, nơi các cổng giao tiếp bị chặn. điều hướng thiết bị đầu cuối đến thư mục công cụ nền tảng bên trong android sdk
và thực hiện lệnh này:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
Trong Mac, Linux hoặc Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Điều đó sẽ đưa bạn đến Mexico City. Thay đổi kinh độ / vĩ độ / cao độ tương ứng. Điều đó là đủ nếu bạn không quan tâm đến bước sóng.
Giải pháp sau đây có hiệu quả với tôi - mở dòng lệnh và viết:
adb emu geo fix [longtitude] [latitude]
Cuối cùng với bản phát hành mới nhất của Android Studio 4 và bản cập nhật Trình giả lập mới 23/11/2019, nó trở nên dễ dàng hơn. Bắt đầu trình giả lập của bạn và đi đến các tham số giả lập ...> trong tab "Tuyến đường", bạn có thể chọn hai điểm trên bản đồ từ / đến và bắt đầu một tuyến đường mới với tốc độ phát lại có thể điều chỉnh có thể đi tới hơn 1000km / h!
Xem bên dưới Cung cấp dữ liệu vị trí giả . Bạn sẽ tìm thấy giải pháp cho nó.
Đầu tiên hãy vào phần DDMS trong nhật thực của bạn Hơn điều khiển trình giả lập mở .... Đi đến Phần thủ công đặt lat và dài rồi nhấn nút Gửi
Tôi đã cố gắng đặt sửa lỗi địa lý thông qua adb cho nhiều điểm và không thể khiến ứng dụng của tôi thấy bất kỳ dữ liệu GPS nào. Nhưng khi tôi thử mở DDMS, chọn quy trình của ứng dụng và gửi tọa độ thông qua tab điều khiển trình giả lập, nó hoạt động ngay lập tức.
Nếu bạn đang sử dụng Android Studio (1.3):
Chỉ cần làm cho câu trả lời của Alberto Gaona thành một dòng
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 là số cổng giả lập được hiển thị trong adb devices
.
Nó sẽ tốt hơn nếu adb emu
làm việc.
Nếu các giải pháp trên không hoạt động. Thử cái này:
Bên trong Manifest.xml trên Android của bạn, hãy thêm hai liên kết BÊN NGOÀI của thẻ ứng dụng, nhưng bên trong thẻ kê khai của bạn tất nhiên
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Tôi không thể sửa lỗi GPS trên trình giả lập khi trình giả lập đang chạy hình ảnh Android mà không có Google API. Ngay sau khi tôi thay đổi hình ảnh để chứa API Google, tất cả các cách được đề cập ở đây để sửa lỗi GPS hoạt động.
Đảm bảo bạn chọn một hình ảnh với Google API khi tạo AVD.
Câu trả lời đã được đề cập nhiều lần để sử dụng lệnh shell " sửa lỗi địa lý ... " là câu trả lời đúng. Nhưng trong trường hợp bạn sử dụng LocationClient.getLastLocation () để truy xuất dữ liệu của mình, điều đáng nói là nó sẽ không hoạt động lúc đầu. Lớp LocationClient sử dụng Dịch vụ Google Play để truy xuất tọa độ. Đối với tôi điều này bắt đầu hoạt động sau khi chạy ứng dụng bản đồ giả lập một lần. Trong lần bắt đầu đầu tiên, bạn được yêu cầu cho phép các ứng dụng google truy cập vào vị trí của bạn, điều mà tôi đoán là có mẹo.
Đối với một dự án của riêng tôi, tôi đã phát triển một dịch vụ trực tuyến có thể cung cấp vị trí mô phỏng cho trình giả lập Android.
Nó sử dụng bước sóng địa lý thay vì sửa lỗi địa lý cho phép nó thiết lập tốc độ, khóa học, thời gian chính xác, v.v. ngoài việc chỉ có lat / lon.
Dịch vụ này yêu cầu tiện ích dòng lệnh nc (netcat) và không có gì khác.
Bạn có thể sử dụng trình giả lập như genymotion cho phép bạn linh hoạt mô phỏng vị trí GPS hiện tại của mình, v.v.
Có một plugin cho Android Studio có tên là Plugin Mock Location Plugin. Bạn có thể mô phỏng nhiều điểm với plugin này. Bạn có thể tìm thấy một hướng dẫn sử dụng chi tiết trong liên kết này: Android Studio. Mô phỏng nhiều điểm GPS với Plugin Mock Location
Mở studio Android-> Menu công cụ-> Android-> Màn hình thiết bị Android-> Tab Trình mô phỏng-> Điều khiển vị trí-> Đặt vĩ độ và kinh độ cần thiết của bạn và kiểm tra dự án của bạn theo nhu cầu của bạn
Trong nhật thực:
Bạn có thể phải kéo cửa sổ DDMS xuống. 'Điều khiển vị trí' nằm trong 'Hành động điện thoại' và có thể bị ẩn bởi chế độ xem bảng điều khiển có kích thước thông thường (thanh có bảng điều khiển, LogCat, v.v. có thể che nó!)
~