3

Google에서 APK 확장 프로그램을 사용하여 내가 호스팅 한 확장 파일을 다운로드하려고합니다. 또한 SampleDownloadActivity의 코드를 사용하여 내 응용 프로그램에 맞게 약간 수정 했음에도 불구하고이 작업을 수행합니다.Android : bindService 항상 false (확장 APK api)

내 문제는 다운로드가 시작되지 않는다는 것입니다. IDownloadClient를 구현하는 클래스에서 onStart()가 호출되었지만 onServiceConnected()는 호출되지 않습니다.

내가 DownloaderClientMarshaller에서이 라인까지이 문제를 추적 한 :

if(c.bindService(bindIntent, mConnection, Context.BIND_DEBUG_UNBIND)) { 

이 항상 false를 반환하기 때문에 서비스가 결합되지 않습니다.

타인에게 문제를 일으킨 TabHost 내에서 전화 활동을 사용하고 있습니다. 그들은 당신이 TabHost 컨텍스트를 넘겨서는 안되며 Application 컨텍스트를 connect 함수에 넘겨서는 안된다는 말을하고있었습니다.

mDownloaderClientStub.connect(getApplicationContext()); 

대신 : 나는 수행하여이 변경되었습니다

mDownloaderClientStub.connect(this); 

하지만 난 여전히 거짓 얻을 도움이되지 않습니다. 나는 에뮬레이터에 대한 모든 테스트를하고있다.

나는 이걸 가지고 내 머리카락을 꺼내고있다. 누구든지 아이디어가 있다면, 나는 매우 감사 할 것입니다!

+0

다음을 확인하십시오. http://stackoverflow.com/a/2916829/1777090 –

+0

문제가 해결 되었습니까? – Bolein95

답변

1

대부분의 경우 bindService() 메서드는 서비스가 응용 프로그램의 Manifest 파일에 선언되지 않은 경우 false을 반환합니다.

제 경우에는 문제가 DownloaderClientMarshaller.CreateStub() 메서드에 잘못된 클래스 개체를 지정했습니다. 실수로 MyDownloaderService.class 대신 DownloaderService.class을 사용했습니다.

다운로더 API를 사용할 때는 DownloaderService을 확장하는 올바른 클래스 개체를 전달해야합니다.

Better APK Expansion 패키지에 포함 된 업데이트 된 Downloader 라이브러리를 사용하는 것이 좋습니다. 이 문제와 기타 문제가 수정되었으며 단순화 된 API를 제공하여 발을 쏠 기회를 최소화합니다.

다운로드 진행률을 받으려면 BroadcastDownloaderClient을 확장하기 만하면됩니다.

public class SampleDownloaderActivity extends AppCompatActivity { 
    private final DownloaderClient mClient = new DownloaderClient(this); 

    // ... 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mClient.register(this); 
    } 

    @Override 
    protected void onStop() { 
     mClient.unregister(this); 
     super.onStop(); 
    } 

    // ... 

    class DownloaderClient extends BroadcastDownloaderClient { 

     @Override 
     public void onDownloadStateChanged(int newState) { 
      if (newState == STATE_COMPLETED) { 
       // downloaded successfully... 
      } else if (newState >= 15) { 
       // failed 
       int message = Helpers.getDownloaderStringResourceIDFromState(newState); 
       Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onDownloadProgress(DownloadProgressInfo progress) { 
      if (progress.mOverallTotal > 0) { 
       // receive the download progress 
       // you can then display the progress in your activity 
       String progress = Helpers.getDownloadProgressPercent(
         progress.mOverallProgress, progress.mOverallTotal); 
       Log.i("SampleDownloaderActivity", "downloading progress: " + progress); 
      } 
     } 
    } 

} 

라이브러리의 page에 대한 전체 설명서를 확인하십시오.