Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从意图过滤器获取活动类_Android_Android Intent_Intentfilter - Fatal编程技术网

Android 如何从意图过滤器获取活动类

Android 如何从意图过滤器获取活动类,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,假设有一个应用程序包名为com.example 该应用程序有一个活动,其中包含一个intent过滤器android.intent.action.SEND 现在我想通过编程找到支持上述意图过滤器的组件类 这段代码过滤与ACTION_SEND匹配的所有类 Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is

假设有一个应用程序包名为
com.example

该应用程序有一个活动,其中包含一个intent过滤器
android.intent.action.SEND

现在我想通过编程找到支持上述意图过滤器的组件类

这段代码过滤与ACTION_SEND匹配的所有类

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

但是,我只想从与
com匹配的包中选择活动。例如

可以检索PackageManager,您考虑的目的将返回可执行该目的的活动的ResolveInfo

将为您提供ActivityInfo,其中包含您希望筛选的内容


一旦选择了所需的目标,您就可以使用包名和类并根据所需的意图为该活动创建目标,以明确确定所需的活动。

我就是这样实现的。获取支持该意图的所有包的列表

List<ResolveInfo> rInfo =  getActivity().getPackageManager().queryIntentActivities(createShareIntent(),0);
for(ResolveInfo r:rInfo){
    if(r.activityInfo.packageName.equals("com.example")){

        chosenName = new ComponentName( r.activityInfo.packageName,
                r.activityInfo.name);
        break;
    }
}

Intent choiceIntent = new Intent(createShareIntent());
choiceIntent.setComponent(chosenName);
startActivity(choiceIntent);

我得到了一份清单。如何获取类的名称??我尝试了
resolveinfo.activityInfo.targetActivity
resolveinfo.activityInfo.parentActivityName
,但都返回了
null
。明白了
resolveinfo.activityInfo.name
是要使用的类名。
private Intent createShareIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_TEXT,"Message");
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject...");
    return shareIntent;
}