2016-12-15 46 views
0

我写一个意图服务来发送图像到服务器。我在onDestroy中的一项活动(onResume)中启动一项服务停止服务。这应该就像这样:我拍一张照片,我有一个带有照片路径的ArrayList。在服务中,我发送一张照片。我想发送一张照片,当我发送时,我等待并发送另一张照片。当我拍摄照片,确认(我有2个照片发),并返回意图(和启动服务),我看到一个黑色的screeen。Java的Android的意图服务

服务:

public class Sendrer extends Service { 

    public static boolean running = false; 
    private Timer timer = new Timer(); 
    private SendPhotoTask asyncSender; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.e("tworzenie serwisu ", "tworzenie"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("Dziełanie serwisu ", "Dziełanie"); 

     while (! ConfirmDetailsPGOActivity.myList.isEmpty()) { 
      if(!running) { 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
      } 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     if (running) { 
      timer.cancel(); 
      asyncSender.cancel(true); 
      running = false; 
     } 
//  asyncSender.cancel(true); 
     Log.e("service " , "nie działa"); 
     super.onDestroy(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    class SendPhotoTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      running = true; 
      InputStream responseInputStream = null; 
      try { 
       responseInputStream = HttpConnectionsUtil.sendPhotoRequest(getApplicationContext(), true, ConfirmDetailsPGOActivity.myList.get(0)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Log.e("Wysyłanie zdjęcia ", convertStreamToString(responseInputStream)); 
      return convertStreamToString(responseInputStream); 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      ConfirmDetailsPGOActivity.myList.remove(0); 
     } 
    } 

    static String convertStreamToString(java.io.InputStream is) { 
     java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); 
     return s.hasNext() ? s.next() : ""; 
    } 
} 

而且在活动我有这样的:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    stopService(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    startService(); 
} 

private void stopService(){ 
    stopService(myIntent); 
} 

private void startService(){ 
    myIntent = new Intent(RouteDetailsActivity.this, Sendrer.class); 
    startService(myIntent); 
} 
+0

添加日志输出或东西 – Maxouille

回答

0

好吧,我认为这一段时间是产生黑屏,因为所有的时间检查清单。我删除了一段时间,做了一个检查列表diffrence和它的工作原理我做到了这一点:

public class Sendrer extends Service { 

    public static boolean running = false; 
    private Timer timer = new Timer(); 
    private SendPhotoTask asyncSender; 
    private Context context; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
     Log.e("tworzenie serwisu ", "tworzenie"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("Dziełanie serwisu ", "Dziełanie"); 
     if (!MainActivity.photoListSend.isEmpty()) { 
      if(!running) { 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
      } 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     if (running) { 
      timer.cancel(); 
      asyncSender.cancel(true); 
      running = false; 
     } 
     Log.e("service " , "nie działa"); 
     super.onDestroy(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    class SendPhotoTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      running = true; 
      InputStream responseInputStream = null; 
      Log.e("start wysłania " , "start"); 
      try { 
       responseInputStream = HttpConnectionsUtil.sendPhotoRequest(getApplicationContext(), true, MainActivity.photoListSend.get(0).getName()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Log.e("Wysyłanie zdjęcia ", convertStreamToString(responseInputStream)); 
      return convertStreamToString(responseInputStream); 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      MainActivity.photoListSend.remove(0); 
      if(! MainActivity.photoListSend.isEmpty()){ 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
       Log.e("Wysyłanie kolejnego " , "zdjecia"); 
      } 
     } 
    } 

    static String convertStreamToString(java.io.InputStream is) { 
     java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); 
     return s.hasNext() ? s.next() : ""; 
    } 
}