我想在AsyncTask
中打开相机,但是在doInBackground
挂钩方法之后。
实际上我正在从网络(servlet)中检索数据,如果检索到的数据符合条件,我设置了一个变量说int x=1 ; if (x==1) { camera.open() ;}
请建议我,该怎么办?
我写了一些代码
广播接收器
public class StartAtBootServiceReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// Start periodic service.
Calendar cal = Calendar.getInstance();
Intent srvIntent = new Intent(context, StartAtBootService.class); // NoLopper
PendingIntent pIntent = PendingIntent.getService(context, 0, srvIntent, 0);
// Use context argument to access service
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// Repeat every 5 seconds
alarm.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(),
10000,
pIntent
);
}
}
这是服务
public class StartAtBootService extends Service {
public static final String url = "http://10.0.2.2:1010/junction/AsynLocInsertionServ";
String imei = "1234";
String returnString = null;
Integer returnedValue = 0;
private static final int CAMERA_REQUEST = 1888;
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.d("StartServiceAtBoot1", "StartAtBootService Created1");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("StartServiceAtBoot2", "StartAtBootService -- onStartCommand()");
new GetXMLTask().execute(url); // calls the AsyncTask
return START_STICKY;
// return START_REDELIVER_INTENT ;
}
private class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String output = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
// ResponseHandler<String> res = new BasicResponseHandler();
HttpPost httpPost = new HttpPost(url);
try {
String Imei = "10101";
String Latitude = "333.33";
String Longitude = "44.44";
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1imei",
Imei));
nameValuePairs.add(new BasicNameValuePair("param2lati",
Latitude));
nameValuePairs.add(new BasicNameValuePair("param3longi",
Longitude));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
// String response = httpClient.execute(httpPost, res);
HttpEntity httpEntity = httpResponse.getEntity();
output = EntityUtils.toString(httpEntity);
}// end of inner try block
catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} // end of outer try block
catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
return output;
} // end of getOutputFromUrl method
@Override
protected void onPostExecute(String output) {
super.onPostExecute(output);
Log.d("done LAtlong stored in mysql_onPost method",
" " + output.toString());
if (output == 1) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
getApplicationContext().startActivityForResult(intent, 0);
}
} // onpost
} // end of GetXMLTask
}
答案 0 :(得分:0)
将结果数据类型设置为int 并在doInBackground()
结束时返回1(如果匹配)在onPostexecute(int result)中,1将被传递,并且可以安全启动摄像头。
答案 1 :(得分:0)
假设您从服务器获取价值,它位于x
然后执行
onPostExecute(void result) {
if(x==1) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
}
并在清单文件中添加使用权限。
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
了解更多信息,read here
答案 2 :(得分:0)
我们可以在onPostexecute()
// global declaration
private static final int CAMERA_REQUEST = 1888;
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);