从 TargetActivity 中提取/区分 ActivityAlias 名称
Extract / distinguish ActivityAlias name from TargetActivity
我有多个 ActivityAliases
,它们都是从一首单曲 TargetActivity
开始的。
在我的 TargetActivity
中,我尝试 区分启动的别名
TargetActivity
.
别名在Manifest
中定义为launchables(intent-filter),将显示为
主屏幕上的快捷方式。用户将单击快捷方式和 android
将启动我在“android:targetActivity=..
”标签中定义的 activity。
为此,我目前从 Intent
中提取 componentName
,即
给我的 TargetActivity 并使用 className()
.
喜欢:
String aliasName = targetActivity.getComponentName().getClassName();
这适用于很多设备。但目前我看到一些失败
一加。在那个设备上,我的技术只是 return 的 class名称
我的 TargetActivity 因此我无法根据
用户启动的别名。
有没有其他可靠的方法来获得ActivityAlias
开始 TargetActivity
?它不需要是名称本身,只要
因为我可以区分它们。 我不想为每个 Alias 创建专用的 TargetActivities!
谢谢!
Ps.: 我看到了另一种方法,它使用 PackageManager 来检索
activity信息和使用Activity.name。但我怀疑这会
return 与我的第一种方法有所不同。
ActivityInfo aInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
String aliasName = aInfo.name;
我也试过元数据:
编辑:
遗憾的是,此方法不适用于所有设备。
如果从 activity.component return 中解析出 alias-className
target-activity
,那么元数据方法也失败了。
我继续寻找答案并找到了一个很好的解决方法
区分我在 TargetActivty 中的别名。
您可以像这样在 ActivityAlias 标签中提供元数据:
<activity-alias
android:name=".aliasName"
android:enabled="false"
android:exported="true"
android:icon="@drawable/someIconRes"
android:label="@string/someLabelRes" android:targetActivity=".yourTargetActivity">
<meta-data android:name="alias" android:value="valueToDistinguish"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
这里重要的部分是:
<meta-data android:name="alias" android:value="valueToDistinguish"/>
在 <activity-alias>
此处 </activity-alias>
标签内。
要提取元数据,您可以从 PackageManager 获取 ActivityInfo
与 TargetActivity:
ActivityInfo appInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
并通过以下方式提取元数据:
private static String getAliasNameByMetaData(ActivityInfo app) {
String aliasName = "";
if (app.metaData != null && app.metaData.containsKey(ALIAS_META_DATA_KEY)) {
aliasName = app.metaData.getString(ALIAS_META_DATA_KEY, "");
} else {
LOG.i("AliasName by META-DATA didn't work!");
}
LOG.v("AliasName by META-DATA: " + aliasName);
return aliasName;
}
编辑:
使用调试器检查 Activity
class,它包含一个 mActivityInfo
字段,该字段不同于 ActivityInfo
return 编辑的 [=35] =] 所以你可以使用反射提取它并检查它的名称。
注意:getPackageManager().getActivityInfo()
编辑的 ActivityInfo
return 似乎是 Activity
中 mActivityInfo
的浅拷贝。所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);
1.元数据
遗憾的是,此方法不适用于所有设备。
如果从 activity.component returns 中解析出 alias-className
target-activity
,那么元数据方法也失败了。
我继续寻找答案并找到了一个很好的解决方法
区分我在 TargetActivty 中的别名。
您可以像这样在 ActivityAlias 标记中提供元数据:
<activity-alias
android:name=".aliasName"
android:enabled="false"
android:exported="true"
android:icon="@drawable/someIconRes"
android:label="@string/someLabelRes" android:targetActivity=".yourTargetActivity">
<meta-data android:name="alias" android:value="valueToDistinguish"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
这里的重要部分是:
<meta-data android:name="alias" android:value="valueToDistinguish"/>
在 <activity-alias>
此处 </activity-alias>
标签内。
要提取元数据,您可以从 PackageManager 获取 ActivityInfo
与 TargetActivity:
ActivityInfo appInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
并通过以下方式提取元数据:
private static String getAliasNameByMetaData(ActivityInfo app) {
String aliasName = "";
if (app.metaData != null && app.metaData.containsKey(ALIAS_META_DATA_KEY)) {
aliasName = app.metaData.getString(ALIAS_META_DATA_KEY, "");
} else {
LOG.i("AliasName by META-DATA didn't work!");
}
LOG.v("AliasName by META-DATA: " + aliasName);
return aliasName;
}
2。 mActivityInfo
使用调试器检查 Activity
class,它包含一个与 getPackageManager().getActivityInfo()
返回的 ActivityInfo
不同的 mActivityInfo
字段,因此您可以使用反射提取它并检查它的名称。
注意:getPackageManager().getActivityInfo()
返回的 ActivityInfo
似乎是 Activity
返回的 mActivityInfo
的浅拷贝。所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);
我有多个 ActivityAliases
,它们都是从一首单曲 TargetActivity
开始的。
在我的 TargetActivity
中,我尝试 区分启动的别名
TargetActivity
.
别名在Manifest
中定义为launchables(intent-filter),将显示为
主屏幕上的快捷方式。用户将单击快捷方式和 android
将启动我在“android:targetActivity=..
”标签中定义的 activity。
为此,我目前从 Intent
中提取 componentName
,即
给我的 TargetActivity 并使用 className()
.
喜欢:
String aliasName = targetActivity.getComponentName().getClassName();
这适用于很多设备。但目前我看到一些失败 一加。在那个设备上,我的技术只是 return 的 class名称 我的 TargetActivity 因此我无法根据 用户启动的别名。
有没有其他可靠的方法来获得ActivityAlias
开始 TargetActivity
?它不需要是名称本身,只要
因为我可以区分它们。 我不想为每个 Alias 创建专用的 TargetActivities!
谢谢!
Ps.: 我看到了另一种方法,它使用 PackageManager 来检索 activity信息和使用Activity.name。但我怀疑这会 return 与我的第一种方法有所不同。
ActivityInfo aInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
String aliasName = aInfo.name;
我也试过元数据:
编辑:
遗憾的是,此方法不适用于所有设备。
如果从 activity.component return 中解析出 alias-className
target-activity
,那么元数据方法也失败了。
我继续寻找答案并找到了一个很好的解决方法 区分我在 TargetActivty 中的别名。
您可以像这样在 ActivityAlias 标签中提供元数据:
<activity-alias
android:name=".aliasName"
android:enabled="false"
android:exported="true"
android:icon="@drawable/someIconRes"
android:label="@string/someLabelRes" android:targetActivity=".yourTargetActivity">
<meta-data android:name="alias" android:value="valueToDistinguish"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
这里重要的部分是:
<meta-data android:name="alias" android:value="valueToDistinguish"/>
在 <activity-alias>
此处 </activity-alias>
标签内。
要提取元数据,您可以从 PackageManager 获取 ActivityInfo 与 TargetActivity:
ActivityInfo appInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
并通过以下方式提取元数据:
private static String getAliasNameByMetaData(ActivityInfo app) {
String aliasName = "";
if (app.metaData != null && app.metaData.containsKey(ALIAS_META_DATA_KEY)) {
aliasName = app.metaData.getString(ALIAS_META_DATA_KEY, "");
} else {
LOG.i("AliasName by META-DATA didn't work!");
}
LOG.v("AliasName by META-DATA: " + aliasName);
return aliasName;
}
编辑:
使用调试器检查 Activity
class,它包含一个 mActivityInfo
字段,该字段不同于 ActivityInfo
return 编辑的 [=35] =] 所以你可以使用反射提取它并检查它的名称。
注意:getPackageManager().getActivityInfo()
编辑的 ActivityInfo
return 似乎是 Activity
中 mActivityInfo
的浅拷贝。所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);
1.元数据
遗憾的是,此方法不适用于所有设备。
如果从 activity.component returns 中解析出 alias-className
target-activity
,那么元数据方法也失败了。
我继续寻找答案并找到了一个很好的解决方法 区分我在 TargetActivty 中的别名。
您可以像这样在 ActivityAlias 标记中提供元数据:
<activity-alias
android:name=".aliasName"
android:enabled="false"
android:exported="true"
android:icon="@drawable/someIconRes"
android:label="@string/someLabelRes" android:targetActivity=".yourTargetActivity">
<meta-data android:name="alias" android:value="valueToDistinguish"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
这里的重要部分是:
<meta-data android:name="alias" android:value="valueToDistinguish"/>
在 <activity-alias>
此处 </activity-alias>
标签内。
要提取元数据,您可以从 PackageManager 获取 ActivityInfo 与 TargetActivity:
ActivityInfo appInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
并通过以下方式提取元数据:
private static String getAliasNameByMetaData(ActivityInfo app) {
String aliasName = "";
if (app.metaData != null && app.metaData.containsKey(ALIAS_META_DATA_KEY)) {
aliasName = app.metaData.getString(ALIAS_META_DATA_KEY, "");
} else {
LOG.i("AliasName by META-DATA didn't work!");
}
LOG.v("AliasName by META-DATA: " + aliasName);
return aliasName;
}
2。 mActivityInfo
使用调试器检查 Activity
class,它包含一个与 getPackageManager().getActivityInfo()
返回的 ActivityInfo
不同的 mActivityInfo
字段,因此您可以使用反射提取它并检查它的名称。
注意:getPackageManager().getActivityInfo()
返回的 ActivityInfo
似乎是 Activity
返回的 mActivityInfo
的浅拷贝。所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);