2014-01-24 3 views
6

현재 설치된 모든 응용 프로그램의 바로 가기를 만들 수있는 앱을 개발 중입니다. 바로 가기를 만들려면 사용자는 관리자로 로그인해야하며 해당 활동에서 설치된 모든 앱이 들어있는 ListView가 있습니다. 사용자는 바로 가기를 만들 수 있도록 app/s를 선택해야합니다.안드로이드에서 커스텀 발사기 내부에 앱 바로 가기를 만드는 방법은 무엇입니까?

private boolean Generate_Shortcut(Context context, String appName, boolean isTrue) { 
    boolean flag =false ; 
    int app_id=-1; 
    PackageManager pm = context.getPackageManager(); 
    Intent i = new Intent(Intent.ACTION_MAIN); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    List<ResolveInfo> res = pm.queryIntentActivities(i,0); 


for(int k=0; k<res.size(); k++) { 
    if(res.get(k).activityInfo.loadLabel(pm).toString().equals(appName)){ 
     flag = true; 
     app_id = k; 

     break; 
    } 
} 

if(flag) { 
    ActivityInfo ai = res.get(app_id).activityInfo; 

    Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); 
    shortcutIntent.setClassName(ai.packageName, ai.name); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    Intent intent = new Intent(); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName); 
    intent.putExtra("duplicate", false); 

    if(isTrue) {  
     // CREATE SHORTCUT 
     intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher)); 
     intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");  
    } else { 
     // REMOVE SHORTCUT 
     intent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT"); 
    } 

    context.sendBroadcast(intent); 

} else 
    System.out.println("applicaton not found"); 
return true; 
} 

앱을 선택하면 GridView가있는 주 활동에 바로 가기가 생성됩니다. 여기서 문제는 작성된 바로 가기가 홈 화면에 생성된다는 것입니다. 이제 내 질문은, 어떻게 내 응용 프로그램 (MainActivity.java) 홈 화면 대신 바로 가기를 만들 수 있습니까?

+0

"현재 개발중인 응용 프로그램 내에서 바로 가기 만들기"에 대해 자세히 설명해 주시겠습니까? 종류의 런처를 만들려고하십니까? –

+0

@AndrewT. 예, 그게 내가하려는 일입니다. 내 응용 프로그램 내에서 실행기를 만들고 싶습니다. – androidBoomer

+0

바로 가기가 자신의 앱 안에 있기 때문에 원하는대로 할 수 있습니다. 이미 사용자에게 보여주고있는 정보를 저장하고 사용하십시오. –

답변

3

다른 애플리케이션을 실행하는 아이콘을 애플리케이션에 표시 할 수 있습니다. PackageManager을 사용하여 설치된 응용 프로그램을 검색하고 표시해야하는 실행 프로그램 아이콘을 얻을 수 있습니다.

  1. 응용 프로그램의 컨텍스트에서 PackageManager을 가져 오십시오.

    PackageManager pm = context.getPackageManager(); 
    
  2. 이 존재 설치된 응용 프로그램에 대한 쿼리하는 데 사용되며, 런처에 표시되는 의도를 만듭니다.

    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
    
  3. 쿼리 누구로 IntentFilter는 우리의 mainIntent 일치하는 모든 응용 프로그램에 대한.

    List<ResolveInfo> apps = pm.queryIntentActivities(mainIntent, 0); 
    
  4. 으로 반복 응용 프로그램과 실행 아이콘으로 표시 할 자원을 시작하기위한 의도의 작성에 필요한 정보를 얻기 위해 반환 ResolveInfo의 목록.

    for (ResolveInfo app : apps) { 
        // Create an Intent that can be use to launch the application 
        Intent intent = new Intent(Intent.ACTION_MAIN); 
        intent.addCategory(Intent.CATEGORY_LAUNCHER); 
        intent.setComponent(new ComponentName(app.activityInfo.applicationInfo.packageName, app.activityInfo.name)); 
    
        // Get the icon to display in your UI 
        Drawable icon = app.activityInfo.loadIcon(pm); 
    } 
    

UPDATE : http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

+0

이것은 내 전체 코드입니다. 위의 편집을 참조하십시오. – androidBoomer

+0

BTW, 답변의 마지막 부분에서 "드로어 블 아이콘"을 사용해야합니까? – androidBoomer

+0

아이콘 드로어 블을 사용해야하지만 앱에 바로 가기를 표시 할 계획입니다. UI를 구현해야합니다. 커스텀 발사기에서는 과거에 [GridView] (http://developer.android.com/guide/topics/ui/layout/gridview.html)를 사용했습니다. – csmurphy84

4

당신이 시도해 봤어 : 현재 사용자 정의 발사기를 작성하는 walkthru을 찾을 수 있습니까?

<activity android:name=".YourActivity" android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.intent.action.CREATE_SHORTCUT" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

그런 다음 의도를 수신하는 활동에서 바로 가기에 대한 의도를 작성하고 활동 결과로 리턴하십시오.

// create shortcut if requested 
ShortcutIconResource icon = 
    Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); 

Intent intent = new Intent(); 

Intent launchIntent = new Intent(this,ActivityToLaunch.class); 

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent); 
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname()); 
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 

setResult(RESULT_OK, intent); 
+1

작동하지 않습니다 ... – androidBoomer

관련 문제