2016-12-15 31 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() : ""; 
    } 
}