2012-10-12 4 views
0

파일을 클릭하면 "연결 프로그램"대화 상자에 여러 옵션이 나타납니다. 이것은 Action_VIEW로 인 텐트를 전송하고이를 수신 할 여러 Apps가 있기 때문입니다.Android에서 사용자 정의 된 "열기"대화 상자 만들기

intent.setAction(android.content.Intent.ACTION_VIEW); 
     Uri fileUri = Uri.parse("file://" + location); 

보안상의 이유로 예를 들어, 내 응용 프로그램에서 파일을 여는 데 사용되는 프린터 응용 프로그램과 같은 일부 기능을 비활성화하려고합니다.

옵션을 필터링하거나 표시 할 옵션을 선택할 수있는 메커니즘이 있습니까?

답변

0

응용 프로그램 이름을 알고있는 경우 SetPackage를 시도 할 수 있습니다. 예를 들어, 코드에서 setPackage를 사용하여 패키지 이름을 지정할 수 있습니다.

intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setPackage("com.test.print"); 
Uri fileUri = Uri.parse("file://" + location); 
0

비슷한 것을 찾는 사람에게 도움이 될 수 있으므로 내 질문에 대답하고 있습니다. 그러면 다음과 같이 직접 열기 대화 상자를 사용자 정의하고 만들 수 있습니다.

1 단계 : 표시하려는 Apps 목록을 가져옵니다. 이를 위해서는 앱을 의도에서 제외해야합니다.

final Intent intent = new Intent(Intent.ACTION_VIEW); 

intent.setDataAndType(fileUri, mimeType); 


List<ResolveInfo> getAllAppswhichcanViewtheFile = (List<ResolveInfo>)getApplicationContext().getPackageManager().queryIntentActivities(intent, 0); 

    Iterator<ResolveInfo> i = getAllAppswhichcanViewtheFile .iterator(); 
    while (i.hasNext()) { 
     ResolveInfo file = i.next(); 

    // Use condition to filter the List 
     if (file.activityInfo.packageName.contains(XXXX)) { 
      i.next(); 
     } else {   
      i.remove(); 
     } 

     List<ResolveInfo> resolvedPrintList = getAllAppswhichcanViewtheFile ; 

2 단계 : 경고 다이얼로그 필터링 된 애플리케이션을 표시 :

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(DataUtils.getString(R.string.xyz)); 
     final OpenWithArrayList adapter = new OpenWithArrayList(this,   R.layout.basiclistview, R.id.text1, resolvedPrintList); 
     builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       ResolveInfo info = (ResolveInfo)adapter.getItem(which);    

intent1.setClassName (info.activityInfo.packageName, info.activityInfo.name); startActivity (intent1);
} });

 builder.create(); 
     builder.show(); 

3 단계 : 어댑터를 만들기 : 공용 클래스 OpenWithArrayList는 {

Context context; 
    Object[] items; 
    boolean[] arrows; 
    int layoutId; 





public OpenWithArrayList(Context context, int resource, 
     int textViewResourceId, List<ResolveInfo> objects) { 


    super(context, resource, textViewResourceId, objects); 
    this.context = context; 
    this.items = objects.toArray(); 
     this.layoutId = resource; 

    // TODO Auto-generated constructor stub 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 

    if(row==null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row=inflater.inflate(R.layout.basiclistview,parent, false); 
     TextView label=(TextView)row.findViewById(R.id.text1); 
    label.setText(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); 
    ImageView image = (ImageView) row.findViewById(R.id.logo); 
    image.setImageDrawable(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadIcon(context.getPackageManager())); 

    } 


    return(row); 

} 

}

ArrayAdapter와 확장
관련 문제