2013-09-03 4 views
0

15 분마다 API 게시물을 통해 세부 정보를 업데이트하는 방법을 알고 싶습니다. 지금 당장은 API에 액세스하는 동안 스레드를 가져 와서 스레드를 사용하여 로더를 만드는 방법을 알고 있습니다. 여기15 분마다 API에 게시

내가 그것을 할 방법은 다음과 같습니다

private int authenticateLogin() 
    { 
     EditText user = ((EditText)findViewById(R.id.username)); 
     EditText pass = ((EditText)findViewById(R.id.password)); 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 

     String username = user.getText().toString(), password = pass.getText().toString(); 

     String URL = "MyUrl"; 
     String authData = "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64.NO_WRAP); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(URL); 
     httpget.setHeader("Authorization", authData); 
     HttpResponse response = null; 
     try { 
      response = httpclient.execute(httpget); 
      StatusLine sl = response.getStatusLine(); 
      int statCode = sl.getStatusCode(); 
      if (statCode == 200) { 
       String entityStringDrivers = EntityUtils.toString(response.getEntity()); 
       Intent i = new Intent(Login.this,DriverLogin.class); 
       i.putExtra("stringDrivers", entityStringDrivers); 
       startActivity(i); 
       return 100; 
      } 
      else 
      { 
       user.setText(""); 
       pass.setText(""); 
       Toast.makeText(getBaseContext(), "Unauthorized Login", Toast.LENGTH_SHORT).show(); 
       return 100; 
      } 
     } catch (Exception e) { 
      // Auto-generated catch block 
      e.printStackTrace(); 
      return 100; 
     } 
     finally { 
     } 

    } 

내가 게시 할 때 내가 할 방법을 알고 싶어하고 백그라운드에서 수행. POST가 15 분마다 어디서 시작해야할지 모르겠습니다. 어떤 아이디어? 감사!

+0

배터리를 먹을 것입니다. 더 흥미로운 방법은 흥미로운 일이 발생하여 스스로 업데이트해야 할 때 GCM을 사용하여 애플리케이션을 알려주는 것입니다. https://developer.android.com/google/gcm/index.html – alex

답변

0

이 것을 확인하고 인 텐트 서비스를 사용하여 배경에서 실행할 수 있습니다.
을 니펫 호출 startTimeReqTask()에 타이머를 시작합니다 :

android timer

는 의도를 들어 다음과 같이 Intent Services

0

타이머에 대한 처리기를 사용하여 체크 아웃 할 servicse.

private Handler m_handler = new Handler(); 
.... 

    Runnable m_handlerTask = new Runnable() { 

     @Override 
     public void run() { 
      m_handler.postDelayed(m_handlerTask, 900000); // 15 minutes 
      new authenticateLoginTask().execute(); // POST (your asynctask) 
     } 
    }; 


    private void startTimeReqTask() // start timer 
    { 
     m_handlerTask.run(); 
    } 

    private void stopTimeReqTask() // stop time 
    { 
     m_handler.removeCallbacks(m_handlerTask); 
    } 

그리고 배경을 수행하기 위해 AsyncTask authenticateLoginTask를 사용하십시오.

+0

애플리케이션이 현재 기기 상단에 없어도 작동하나요? 아니면 일부 활동이 기기에서 수행되고 있습니까? – ljpv14

+0

예! 내 다운로드 서비스 에서이 코드를 사용하고 있습니다. 내 애플 리케이션은 10 분마다 새로운 콘텐츠를 사용할 수 있는지 확인하기 위해 서버를 확인하십시오. 이것은 당신을 위해 작동해야한다고 생각합니다. –

+0

화면이 잠겨있는 경우 어때? 왜냐하면 화면이 잠겨있을 때 처리가 중지되기 때문입니다. 나는 매 1 분마다 알림 음을 포함시켰다. 화면이 잠기면 소리가 나지 않습니다. – ljpv14

0

당신은 이러한 배경을 서비스를 작성하고 주요 활동의에서 onCreate에서 시작 또는 당신은 시도 - 캐치 또는 보호 코드의 다른 종류)

를 추가 할 필요가

예 : :(일부 브로드 캐스트 리시버하려면

public class MyService extends Service { 

    @Override 
    public void onStartCommand(Intent intent, int flags, int startId) { 
     //Use intent to pass your username and password here 
     //start a PostThread here.  
    } 

    private class PostThread extends Thread { 
     private static final int INTERVAL = 15 * 60 * 1000L; 
     private boolean canceled = false; 
     @Override 
     public void run() { 
      while (!canceled) { 
       Post(); 
       Thread.sleep(INTERVAL); // or you can use a Timer to trigger this 
      }    
     } 
     public void interrupt() { canceled = true; super.interrupt();} 
    } 
} 
0
Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        // call your api method here 
       } 
      }); 
     } 
    }, 0, /*here define your internal*/); 

// when you no longer required this api call just call "cancel" method of timer 
+0

앱이 숨겨져 있어도이 기능이 작동합니까? 또는 다른 앱이 열렸습니까? 또는 화면이 잠겨 있어도? 왜냐하면, 이와 비슷한 코드를 시도했기 때문에 화면이 잠겨있을 때 멈추는 것처럼 보입니다. 화면이 잠긴 경우가 아니지만 어느 시점에서 멈 춥니 다. – ljpv14

관련 문제