2013-09-08 42 views
8

Tôi đang cố gắng tải một URL twitter trong trình duyệt.Làm cách nào để loại trừ một ứng dụng cụ thể khỏi ACTION_VIEW Ý định?

Trong điện thoại của tôi, tôi cũng đã cài đặt ứng dụng twitter. Tôi đang cố mở URL bằng cách sử dụng mục đích ACTION_VIEW. Nhưng những gì xảy ra là, khi tôi gọi ý định, android sẽ hiển thị hộp thoại chooser mặc định, trong đó có chứa ứng dụng twitter cũng (nếu nó được cài đặt trên thiết bị). Tôi chỉ muốn mở URL bằng cách sử dụng trình duyệt. Tôi muốn loại trừ ứng dụng Twitter khỏi hộp thoại. Tôi muốn tất cả các trình duyệt có sẵn trong thiết bị hiển thị trong hộp thoại, không phải các ứng dụng gốc như twitter, facebook, v.v.

Có thể không? Nếu có thể, bất cứ ai có thể giúp tôi đạt được nó. Tôi cũng gắn mã của tôi và một ảnh chụp màn hình cùng với câu hỏi này cho rõ ràng.

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
startActivity(i); 

enter image description here

Trả lời

3

Bạn chỉ cần thiết lập các gói mục tiêu đến mục đích:

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
ComponentName comp = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"); 
i.setComponent(comp); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Tuy nhiên, người dùng của tôi bị quấy rầy nếu họ có cài đặt một số trình duyệt tùy chỉnh và muốn sử dụng điều này như mặc định.

Bạn có thể thử để phát hiện các trình duyệt mặc định với:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com")); 
List<ResolveInfo> list = context.getPackageManager() 
    .queryIntentActivities(i, 0); 
// walk through list and select your most favorite browser 
+0

không có sự khác biệt, vẫn hiển thị cùng một chế độ xem. Tôi đã thực hiện một thay đổi nhỏ đối với mã của bạn. tôi không biết liệu nó có cần thiết hay không. Điều này cho thấy hầu như tất cả apllication trong thiết bị của tôi. –

+0

đây là mã được sửa đổi. Tôi đã nhận xét dữ liệu và loại thiết lập. Chuỗi url = "https://twitter.com"; MimeTypeMap map = MimeTypeMap.getSingleton(); Loại chuỗi = map.getMimeTypeFromExtension (url); \t \t Intent i = new Intent (Intent.ACTION_VIEW); \t \t //i.setType(type); \t \t //i.setData(Uri.parse(url)); \t \t // ComponentName comp = new ComponentName ("com.android.browser", "com.android.browser.BrowserActivity"); \t \t ComponentName comp = new Intent (loại, Uri.parse (url)). ResolveActivity (this. GetPackageManager()); \t \t i.setComponent (comp); \t \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); \t \t startActivity (i); –

+0

tốt, mã của bạn sẽ không hoạt động. thử trước đây. – flx

9

tôi cần phải làm một điều tương tự và thấy this trả lời hữu ích. Tôi đã sửa đổi nó để nó là một giải pháp hoàn chỉnh:

public static void openFileWithInstalledAppExceptCurrentApp(File file, final Activity activity) { 
    Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String ext = file.getName().substring(file.getName().indexOf(".")+1); 
    String type = mime.getMimeTypeFromExtension(ext); 
    intent.setDataAndType(Uri.fromFile(file),type); 
    PackageManager packageManager = activity.getPackageManager(); 
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
    String packageNameToHide = "com.test.app"; 
    ArrayList<Intent> targetIntents = new ArrayList<Intent>(); 
    for (ResolveInfo currentInfo : activities) { 
      String packageName = currentInfo.activityInfo.packageName; 
     if (!packageNameToHide.equals(packageName)) { 
      Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW); 
      targetIntent.setDataAndType(Uri.fromFile(file),type); 
      targetIntent.setPackage(packageName); 
      targetIntents.add(targetIntent); 
     } 
    } 
    if(targetIntents.size() > 0) { 
     Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "Open file with"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[] {})); 
     activity.startActivity(chooserIntent); 
    } 
    else { 
     Toast.makeText(this, "No app found", Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

Bạn đã quên '!' Trước 'packageNameToHide.equals (tên gói)'. Bây giờ nó mở ra với packageNameOfAppToHide. – Roel

+0

@DalvikVM cảm ơn đề xuất. Cả hai đều viết. Tôi đã sửa lỗi. :) – Sufian

+0

@ lf215 xin lỗi vì chỉnh sửa của bạn đã bị từ chối trước khi tôi có thể phê duyệt. Tôi đã chỉnh sửa. Cảm ơn. :) – Sufian