intent-在 android 中分享照片时如何过滤应用程序

问题描述

在 android 中分享照片时如何过滤应用程序

我使用下面的代码通过其它的程序来来分享照片,然后打印它们的包名:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("image/jpeg");
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(FilePath));
PackageManager packageManager = this.getPackageManager();
List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(sharingIntent, PackageManager.MATCH_DEFAULT_ONLY);
int i = 0;
while(i < resolveInfo.size()) {
    System.out.println(i + "  " + resolveInfo.get(i).activityInfo.packageName);
    i++;
}
startActivity(Intent.createChooser(sharingIntent, "Share");

获取了下面的9个包名,可以分享照片:

06-29 16:55:22.460: I/System.out(13020): 0  com.amazon.kindle
06-29 16:55:22.460: I/System.out(13020): 1  com.android.bluetooth
06-29 16:55:22.460: I/System.out(13020): 2  com.google.android.apps.uploader
06-29 16:55:22.460: I/System.out(13020): 3  com.ecareme.asuswebstorage
06-29 16:55:22.460: I/System.out(13020): 4  com.google.android.talk
06-29 16:55:22.460: I/System.out(13020): 5  com.google.android.gm
06-29 16:55:22.460: I/System.out(13020): 6  com.aripollak.picturemap
06-29 16:55:22.460: I/System.out(13020): 7  com.instagram.android
06-29 16:55:22.460: I/System.out(13020): 8  com.facebook.katana

如果当我选择应用程序时想过滤一些其它的程序,例如,我想从app列表中过滤 facebook 程序,如何实现?

解决方案

    Intent it = new Intent(Intent.ACTION_SEND);
    it.setType("image/jpeg");
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(it, 0);
    if (!resInfo.isEmpty()) {
        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        for (ResolveInfo info : resInfo) {
            Intent targeted = new Intent(Intent.ACTION_SEND);
            targeted.setType("image/jpeg";
            ActivityInfo activityInfo = info.activityInfo;

            // judgments : activityInfo.packageName, activityInfo.name, etc.
            if (activityInfo.packageName.contains("facebook") ||activityInfo.name.contains("facebook")) {
                continue;
            }
            targeted.setPackage(activityInfo.packageName);
            targetedShareIntents.add(targeted);
        }

        Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
        if (chooserIntent == null) {
            return;
        }
        try {
chooserIntent .putExtra(Intent.EXTRA_STREAM, Uri.parse(FilePath));
            startActivity(chooserIntent);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(this, "Can't find share component to share", Toast.LENGTH_SHORT).show();
        }
    }
时间: 2024-12-23 09:55:35

intent-在 android 中分享照片时如何过滤应用程序的相关文章

Android 中Crash时如何获取异常信息详解及实例

Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络状况.当crash发生时,系统会kill掉你的程序,表现就是闪退或者程序已停止运行,这对用户来说是很不友好的,也是开发者所不愿意看到的,更糟糕的是,当用户发生了crash,开发者却无法得知程序为何crash,即便你想去解决这个crash,

在android中如何开启第二个activity

问题描述 在android中如何开启第二个activity 程序中有两个java文件.在第一个文件中当应用程序开始时,activity也开始运行.想让第二个文件调用AuswahlActivity.java和xml文件auswahl.xml.在AuswahlActivity.java里面用这段代码: public class AuswahlActivity extends Activity { @Override public void onCreate(Bundle savedInstanceS

android中listpreference取值的问题

问题描述 android中listpreference取值的问题 程序中有一个listpreference.无论我如何运行代码,都有错误.现在我把方法贴上: string-array name="listArray" items: Mercedes, Audi, Porsche string-array name="listValues" items: car1, car2, car3 在listpreference部分的preferences.xml中有以下的代码

android-Android中调用一个小的计时程序?

问题描述 Android中调用一个小的计时程序? 这个程序有对应的Timer_layout.xml,这个布局文件以include的方式放在另外一个xml文件中, 现在想在MainActivity中调用Timer.java中的按钮计时方法,请问怎么调用呀? public class Timer extends Activity implements View.OnClickListener{ <声明部分> protected void onCreate(Bundle savedInstanceS

详解Android中Intent对象与Intent Filter过滤匹配过程_Android

如果对Intent不是特别了解,可以参见博文<详解Android中Intent的使用方法>,该文对本文要使用的action.category以及data都进行了详细介绍.如果想了解在开发中常见Intent的使用,可以参见<Android中Intent习惯用法>. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 一.概述 我们知道,Intent是分两种的:显式Intent和隐式

Android中的Intent Filter简介

Intent是Android应用程序核心组件之间通信和传递信息的核心机制.与之相关的IntentFilter也具有相关的安全机制(测试)来进行约束.本文将对其进行详细介绍. 一.Intent和IntentFilter简介 一个应用程序的三个核心组件(活动,服务和广播接收器)都是通过消息即意图(Intents)来激活的.Intent消息传送是相同或不同应用中组件运行时晚绑定的一种机制.意图本身(一个意图对象)是一个包含被执行操作抽象描述的被动的数据结构.或,对于广播而言,是某件已经发生并被声明的事

详解Android中Intent的使用方法_Android

一.Intent的用途 Intent主要有以下几种重要用途: 1. 启动Activity:可以将Intent对象传递给startActivity()方法或startActivityForResult()方法以启动一个Activity,该Intent对象包含了要启动的Activity的信息及其他必要的数据. 2. 启动Service:可以将Intent对象传递给startService()方法或bindService()方法以启动一个Service,该Intent对象包含了要启动的Service的

Android中Intent习惯用法_Android

Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见<详解Android中Intent的使用方法>.如果对Intent Filter不是特别了解,可以参见<详解Android中Intent对象与Intent Filter过滤匹配过程>. 本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信.发送邮件.启动摄像机拍照录视频.设置闹铃.打开WIFI设置界面等等. 限于篇幅,本文分为上下两篇,这是上篇. 发

Android中原生的动作意图(native activity intent)简介

原生动作(Native Activity), 都是Intent类中的静态字符串常量(static final String). 在创建隐式的Intent来启动应用程序内的Activity或者SubActivity时, 可以应用这些动作. Android APIs: http://developer.android.com/reference/android/content/Intent.html 主要包括: ACTION_ALL_APPS: 列出所有已安装程序; ACTION_ANSWER: 处