2014-03-27 2 views
2

나는 앱을 사용하여 설치된 모든 앱 목록을 스크롤 할 수 있으며 앱을 선택하여 시작할 수 있습니다. packageName_selectedapp 목록에서 선택한 응용 프로그램의 문자열입니다설치된 앱 중 어느 하나 시작하기

startActivity(getPackageManager().getLaunchIntentForPackage(packageName_selectedapp)); 

:

대부분의 애플 리케이션을위한이 함께 잘 작동합니다.

그러나 일부 응용 프로그램의 경우 getLaunchIntentForPackage (packageName_selectedapp) 함수는 "null"을 반환합니다 (예 : 전화 걸기 또는 연락처 작업 인 경우).

전화 걸기 및 연락처의 launchIntent는 어떻게 얻을 수 있습니까?

미리!

답변

4

어떻게 내가 전화 걸기 및 연락처에 대한 launchIntent를 얻을 수 있습니다 여기를 참조 것인가?

이들은 앱이 아닙니다. 그것들은 다른 앱의 다른 실행 가능한 활동입니다.

따라서, 작성중인 내용을 결정해야합니다.

당신은 "설치된 모든 앱의 목록을 갖고 있으며 어떤 앱을 선택해서 시작할 수있다"고하셨습니다. 이 경우 앱이 아닌 '다이얼러 및 연락처'는 특히 원하지 않습니다.

대신 사용자가 선택할 수있는 실행 가능한 모든 활동의 목록을 표시하려면 getLaunchIntentForPackage()을 사용하지 않아야합니다. 대신, 실행 가능한 활동을 찾으려면 queryIntentActivities()을 사용하십시오. 나는 실행기의 형태로 a sample app that demonstrates this을 가지고있다.

+0

매우 아름다운 설명! 우아하게 말로 나타내며 간단합니다! 엄지 손가락! – La5t5tarfighter

+0

안녕하세요 CommonsWare, 늦은 답장을 드려 죄송합니다. 빠른 답변을 기대하지 않고 코딩에 지쳤습니다.) ...... 귀하의 설명과 코드 예제는 더 좋을 수 없습니다. 그 정확히 내가 뭘 필요 (애플 리케이션의 활동). SOOOOOO 정말 고마워! :) – treesoft

0

월페이퍼와 같은 일부 응용 프로그램은 기본 활동이 없으며 시작 의도를 통해 시작할 수 없지만 컨텍스트가 맞으면 일반 의도를 사용할 수 있어야합니다. 그러나이 문제가 특정 응용 프로그램에 적용되는지 확실하지 않은 경우 ...

나는 당신이 다른 홈 화면이나 롬을 만드는 것으로 가정 할 것입니다.

연락처 도움이 될 것입니다/사람들 앱은 사용자가 연락처를 선택하고 모든 연락처 정보를 앱에 대한 액세스를 제공의 ACTION_PICK 액션을 사용하여 MIME 유형을 지정하도록하려면 연락처

을 선택 Contacts.CONTENT_TYPE.

결과 onActivityResult() 콜백에 전달 된 결과에는 선택한 연락처를 가리키는 content : URI가 포함됩니다. 이 응답은 앱에 READ_CONTACTS 권한이없는 경우에도 주소록 제공자 API를 사용하여 해당 연락처를 읽을 수있는 임시 권한을 앱에 부여합니다.

팁 : 전화 번호 나 이메일 주소와 같은 특정 연락처 정보에만 액세스해야하는 경우 특정 연락처 데이터를 선택하는 방법에 대한 다음 섹션을 참조하십시오.

액션 ACTION_PICK 데이터 URI 계획 없음 MIME 타입 Contacts.CONTENT_TYPE 예 의도 :

대화 상대 URI를 일단 연락처 세부 정보를 검색하는 방법에 대한 자세한 내용은
static final int REQUEST_SELECT_CONTACT = 1; 

public void selectContact() { 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(intent, REQUEST_SELECT_CONTACT); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { 
     Uri contactUri = data.getData(); 
     // Do something with the selected contact at contactUri 
     ... 
    } 
} 

가에 대한 세부 정보를 가져 오는 읽기 연락처. 위의 의도로 연락처 URI를 검색 할 때 해당 연락처의 세부 정보를 읽는 데 READ_CONTACTS 권한이 필요하지 않습니다.

선택 특정 연락처 데이터

사용자가 같은 전화 번호, 이메일 주소, 또는 다른 데이터 형식으로 연락처, 정보의 특정 부분을 선택 ACTION_PICK 액션을 사용하는 MIME 타입을 지정하게하려면 연락처의 전화 번호를 가져 오려면 CommonDataKinds.Phone.CONTENT_TYPE과 같이 아래 나열된 콘텐츠 유형 중 하나를 선택하십시오.

연락처에서 한 가지 유형의 데이터 만 검색해야하는 경우 ContactsContract.CommonDataKinds 클래스의 CONTENT_TYPE을 사용하는이 기술이 연락처를 사용하는 것보다 효율적입니다.CONTENT_TYPE (이전 섹션에 표시된대로) 결과를 통해 연락처 공급자에 대한보다 복잡한 쿼리를 수행 할 필요없이 원하는 데이터에 직접 액세스 할 수 있기 때문입니다.

결과 onActivityResult() 콜백에 전달 된 결과에는 선택한 연락처 데이터를 가리키는 content : URI가 포함됩니다. 이 응답은 앱에 READ_CONTACTS 권한이없는 경우에도 해당 연락처 데이터를 읽을 수 있도록 앱에 임시 사용 권한을 부여합니다.

액션 ACTION_PICK 데이터 URI 계획 없음 MIME 타입 CommonDataKinds.Phone.CONTENT_TYPE 전화 번호와 연락처에서 선택하십시오. CommonDataKinds.Email.CONTENT_TYPE 이메일 주소가있는 연락처에서 선택하십시오. CommonDataKinds.StructuredPostal.CONTENT_TYPE 우편 주소가있는 연락처에서 선택하십시오. 또는 ContactsContract 아래에있는 다른 많은 CONTENT_TYPE 값 중 하나입니다.

예 의도 :

static final int REQUEST_SELECT_PHONE_NUMBER = 1; 

public void selectContact() { 
    // Start an activity for the user to pick a phone number from contacts 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { 
     // Get the URI and query the content provider for the phone number 
     Uri contactUri = data.getData(); 
     String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; 
     Cursor cursor = getContentResolver().query(contactUri, projection, 
       null, null, null); 
     // If the cursor returned is valid, get the phone number 
     if (cursor != null && cursor.moveToFirst()) { 
      int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); 
      String number = cursor.getString(numberIndex); 
      // Do something with the phone number 
      ... 
     } 
    } 
} 

내가

http://developer.android.com/guide/components/intents-common.html

+0

안녕하세요 La5t5tarfighter, 감사합니다. 연락처를 고르는 등등 내가 실제로 필요로하는 것입니다;)하지만 코드를 정리하고 다른 것들을 먼저 연구해야합니다. 나는 돌아올거야! ;) – treesoft