2011-10-11 3 views

답변

18

내 응용 프로그램에서 zxing 스캐너 앱을 설치해야합니다. 내부 이 원하는 것이다 온 클릭 또는 ontouch : 밖으로 모든 코드를 정렬 한 후

public void createAlert(String title, String message, Boolean button) { 
    // http://androidideasblog.blogspot.com/2010/02/how-to-add-messagebox-in-android.html 
    AlertDialog alertDialog; 
    alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(title); 
    alertDialog.setMessage(message); 
    if ((button == true)) { 
     alertDialog.setButton("Download Now", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       Intent browserIntent = new Intent(
        Intent.ACTION_VIEW, 
        Uri.parse("market://search?q=pname:com.google.zxing.client.android")); 
       startActivity(browserIntent); 
      } 
     }); 
    } 
    alertDialog.show(); 
} 

그런 다음 호출

try{ 
    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.setPackage("com.google.zxing.client.android"); 
    startActivityForResult(intent, 0); 
} catch (Exception e) { 
    createAlert("Barcode Scanner not installed!", "This application uses " + 
    "the open source barcode scanner by ZXing Team, you need to install " + 
    "this before you can use this software!", true); 
} 

그것이 동시에 같은 설치 될 수 있도록 당신이 질문 실현 귀하의 앱. 이 코드를 게시해야할지 모르겠지만 도움이 될 수도 있습니다.

+3

저는 실제 예외 인스턴스를 잡는 것이 더 좋을 것이라고 "예외"를 잡아야한다고 생각하지 않습니다. – AGrunewald

+1

@AGrunewald 전적으로 동의합니다! :) 나는 때때로 예외적으로 게으르다. – TerryProbert

5

시작 :

Intent mediaIntent = new Intent("com.example.intent.action.NAME"); 
// add needed categories 
List<ResolveInfo> listResolveInfo = getPackageManager().queryIntentServices(mediaIntent, 0); 
if (listResolveInfo.size() != 0) { 
    //normal behavior 
} else { 
    //install what you need 
} 

난 당신에게 서비스를 쿼리의 예를 제공합니다. 활동을 확인하려면 queryIntentActivities()를 호출합니다.

8

짧은 대답 : 아니요, 다른 응용 프로그램을 종속성으로 자동 설치할 수 없습니다.

긴 대답 :

안드로이드 마켓 당신이 종속성으로 설치하는 다른 응용 프로그램을 선언하지 않습니다. 하나의 시스템으로서, 마켓은 리눅스 배포판 메가 의존성 그래프가 아닌 단일 애플리케이션 설치를 위해 설계된 것으로 보인다. 런타임에서

, 당신은 시장 그렇다면를 통해 사용자를 설치된 앱에 대한 테스트 및 펀트 수 있습니다. @QuickNick (앱이 설치되어 있는지 테스트)과 @TerryProbert (시장 진입)가 제안한 기술을 확인하십시오.

아마도 가장 좋은 방법은 종속성을 사용할 수없는 경우 앱을 정상적으로 성능 저하되도록 설계하는 것입니다. 개발자가 설치하기 위해 시장에 출시 할 것을 제안하거나 주장하십시오.

4

Android 개발자 블로그에서이 게시물에 설명 된 패턴을 따르면 도움이 될 것입니다. http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html Intent를 사용할 수 없다는 것을 알고있는 경우 TerryProbert가 지적한 것처럼 사용자에게 누락 된 앱을 설치하라는 메시지가 표시됩니다. 미션 기본 클래스에서 파생 된

   try { 
       Class<?> missionClass = Class.forName(mPackageName+".Mission"+mission); 
         Method missionDescription; 
         missionDescription = missionClass.getMethod("missionDescription"); 
         mMissionDescription = (String) missionDescription.invoke(null); 
         if (mMissionDescription.length() > 0) { 
          nextMission = mission; 
          break; 
         } 
        } catch (Exception e) { 
         //DEBUG*/Log.v(this.getClass().getName(), "onResume: Mission no "+mission+" not found: "+e.getMessage()); 
        } 

각각의 임무는 별도의 클래스에서 개최된다 :

2

는 여기에 내가 존재하는 첫 번째 선교 활동을 반환하는 데 사용하는 것입니다. 파생 클래스는 Mission1, Mission24 등입니다.

모든 임무가 정의되지는 않습니다.

기본 클래스에는 임무를 설명하는 문자열을 반환하는 추상 클래스 missionDescription이 있습니다.

이 코드는 루프 내부에 있으므로 missionDescription을 호출하려고 mission = 1에서 99까지 테스트합니다. 발견 된 첫 번째 작업에 대한 설명이 반환되면 반환됩니다.

관련 문제