2012-02-16 1 views
1

나는 블루투스 비디오 장치에 연결하는 우리 회사의 안드로이드 응용 프로그램을 만들고 있습니다. 우리가 작업하고있는 제 3의 회사는 블루투스 카메라를 만들고 우리가 카메라와 상호 작용하는 데 사용하는 앱과 안드로이드 서비스를 만들었습니다. 이 회사는 소스 코드에 액세스 할 필요가 없기 때문에 카메라와의 상호 작용을 위해 전화에 설치해야하는 서비스 형태의 SDK를 만들었습니다. 서비스 (APK 만)가 설치되어 있지 않으면 앱이 작동하지 않습니다.안드로이드 마켓에 의존성 게시하기

그러나 서비스가 존재하지 않는다는 것을 감지하고 apk를 계속 진행할 수 있으며 이제는이를 수행하는 가장 좋은 방법을 찾으려고합니다. 우리가 다른 회사에서 안드로이드 마켓에이 서비스를 게시하게 할 수 있습니까? 당신은 안드로이드 마켓에 뭔가를 넣을 수 있고 일반 필터 아래에 나타나지 않을 수 있습니까? (페이지로 직접가는 것이 유일한 방법입니다). 나는 그들이 제 3의 회사가 카메라를 팔아서 (사람들이 우리를 위해 만든 카메라와 거의 같다) 판매하고 있기 때문에 사람들이 카메라를 설치하고 싶어한다고 생각하지 않는다.

다른 가능성은 사용자가 처음으로 응용 프로그램을 설치할 때 파일을 직접 호스팅하고 다운로드하는 것입니다.하지만 문제는 업그레이드를위한 자체 방법론을 찾아야한다는 것입니다.

누구나이 경험이 있거나 우리 상황을 처리하는 데 가장 좋은 방법이 무엇입니까?

+0

apk를 압축하여 데이터로 사용하지 않는 이유는 무엇입니까? – slezica

+0

어떻게 할 수 있습니까? ? –

+0

좋아요. d는 아마도 이렇게 할 것입니다. 당신은 당신의 코멘트를 대답으로 바꾸고이를 수행하는 방법에 대한 코드 스 니펫을 제공해야합니다. 그렇지 않으면 일단 코드가 작동하면 스스로 대답 할 것입니다. –

답변

0

내 응용 프로그램의/assets 폴더 아래에 서비스 apk를 묶어서 문제를 해결했습니다. 그 데이터를 입력 스트림으로 읽어서 sdcard에 쓸 수 있습니다. 그러면 apk가 설치되도록 인 텐트를 시작할 수 있습니다. 응용 프로그램이 처음 I를 시작할 때 모든 사용자가 같은 그들이 제 3 자 애플리케이션들이 우리의 응용 프로그램 중 하나를 시장에없는 것이기 때문에, 이는 허용 가지고 (설치를 클릭하면된다한다.

public static final String SERVICE_APK_FILENAME = "SomeService.apk"; 

protected void installService() { 

    File apk = getServiceFileOnDisk(); 
    if (!apk.exists()) { 
     try { 
      writeServiceToFile(); 
     } catch (Exception ex) { 
      Log.e(TAG, "", ex);     
      return; 
     } 
    } 

    Intent promptInstall = new Intent(Intent.ACTION_VIEW); 
    promptInstall.setDataAndType(Uri.fromFile(getServiceFileOnDisk()), 
      "application/vnd.android.package-archive"); 
    startActivityForResult(promptInstall, REQUEST_INSTALL_APK); 
} 

protected File getServiceFileOnDisk() { 
    return new File(Util.getAppStorageDirectory(this), SERVICE_APK_FILENAME); 
} 

protected void writeServiceToFile() throws IOException { 
    File apk = getServiceFileOnDisk(); 
    InputStream assetIs = mAssetMgr.open(SERVICE_APK_FILENAME); 
    OutputStream out = new FileOutputStream(apk); 
    // Transfer bytes from in to out 
    byte[] buf = new byte[4 * 1024]; 
    int len; 
    while ((len = assetIs.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    assetIs.close(); 
    out.close();  
} 

그래서 무슨이다 서비스를 설치 (또는 업그레이드)해야하는지 확인하십시오.이 코드는 좀 더 복잡하고 여기에서 내가하는 일의 범위를 벗어나므로 게시하지 않았습니다.하지만 서비스를 설치해야한다고 결정하면 사용자에게 대화 상자가 표시되면 ok를 클릭하면 위의 installService 메서드가 호출됩니다.

0

그런 상황에 있다면 회사 서버에서 apk를 호스팅하는 것이 좋습니다.