我正在使用我的android手机中的IP网络摄像头应用程序,以将其用作IP摄像头,我正在使用另一款android手机来运行我的应用程序,该应用程序使用Kairos API来识别人脸。我正在使用IP网络摄像头应用程序,图像以类似于"http://xxx.xxx.x.xxx:8080/photo.jpg“的URL进行流式传输,我可以在所有设备上通过此url查看图像,但是我正在使用的API有一个识别功能,该功能将图像url作为其参数之一,但是当我使用流式图像url时,它不起作用。我试着通过日志找出发生了什么,但我所能看到的是它抛出了一个SocketTimeoutException(读取超时),并尝试了它的解决方案,但都没有奏效,有什么建议吗?
代码:
public void getUrlText(){
try{
url = new URL("http://xxx.xxx.x.xxx:8080/photo.jpg");
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
Handler handler = new Handler();
Runnable timedTask = new Runnable(){
@Override
public void run() {
getUrlText();
handler.postDelayed(timedTask, 1000);
}};这是在onCreate方法中:
getUrlText();
handler.post(timedTask);
recognizePhotoKairos(Uri.parse(url.toString()), userPhoneNumber);发布于 2018-07-05 15:28:10
当您使用ip网络摄像头时,请确保您的所有设备都连接到同一服务器。第二件事是,你必须一次又一次地刷新url,才能获得最新的图像。我认为这是您刷新url的主要问题。我建议你为此使用处理程序,它会等待一段特定的时间,然后再次刷新url或api。Read more about handler我正在添加一个项目的源代码,在这个项目中我一次又一次地启动处理程序
公共类CounterActivity扩展了AppCompatActivity {
TextView textView;
private boolean started = false;
private PowerManager.WakeLock wl;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_counter);
textView=findViewById(R.id.points);
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My:Tag");//本段屏幕保持打开状态
start();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
final String URL="http://172.16.16.108:8080/wallgame/api/game_points";
StringRequest request=
new StringRequest(Request.Method.GET, URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject object=new JSONObject(response);
JSONObject data=object.getJSONObject("data");
int points=Integer.parseInt(data.getString("game_points"));
textView.setText(points+"");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
);
RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
queue.add(request);
}
},1000);
}
Runnable runnable = new Runnable() {
@Override
public void run() {
final String URL="http://172.16.16.108:8080/wallgame/api/game_points";
StringRequest request=
new StringRequest(Request.Method.GET, URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject object=new JSONObject(response);
JSONObject data=object.getJSONObject("data");
int points=Integer.parseInt(data.getString("game_points"));
textView.setText(points+"");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
);
RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
queue.add(request);
start();
}
};
public void onDestroy() {
super.onDestroy();
started = false;
handler.removeCallbacks(runnable);
if (wl.isHeld())
wl.release();
}
public void start(){
started = true;
handler.postDelayed(runnable, 1500);
}}
https://stackoverflow.com/questions/51184594
复制相似问题