我有多个 ActivityAliases所有这些都开始一个单一的 TargetActivity .
在我的里面 TargetActivity我尝试区分开始的别名
TargetActivity .
别名在 Manifest 中定义作为可启动项( Intent 过滤器),将显示为
主屏幕上的快捷方式。用户将点击快捷方式和android
将启动我在“android:targetActivity=..”标签中定义的 Activity 。
为此,我目前提取了 componentName来自 Intent , 这是
给我的 TargetActivity 并使用 className() .
喜欢:
String aliasName = targetActivity.getComponentName().getClassName();
这适用于很多设备。但目前我看到一些失败 OnePlus。在那个设备上,我的技术只返回类名 我的 TargetActivity 因此我无法根据 用户启动的别名。
是否有任何其他可靠方法来获取ActivityAlias那是用来
启动 TargetActivity ?它不需要是名称本身,只要
因为我可以区分它们。 我不想为每个 Alias 创建专用的 TargetActivities!
谢谢!
Ps.: 我看到了另一种方法,它使用 PackageManager 来检索 activityInfo 并使用 Activity.name。但我怀疑这会 返回与我的第一种方法不同的东西。
ActivityInfo aInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
String aliasName = aInfo.name;
我也试过元数据:
编辑:
遗憾的是,此方法不适用于所有设备。
如果解析 alias-className从 activity.component 返回
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使用调试器的类,它包含一个 mActivityInfo与 ActivityInfo 不同的字段由 getPackageManager().getActivityInfo() 返回因此您可以使用反射提取它并检查它的名称。
注意:似乎ActivityInfo由 getPackageManager().getActivityInfo() 返回是 mActivityInfo 的浅拷贝来自 Activity .所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);
最佳答案
<强>1。元数据
遗憾的是,此方法不适用于所有设备。
如果解析 alias-className从 activity.component 返回
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使用调试器的类,它包含一个 mActivityInfo与 ActivityInfo 不同的字段由 getPackageManager().getActivityInfo() 返回因此您可以使用反射提取它并检查它的名称。
注意:似乎ActivityInfo由 getPackageManager().getActivityInfo() 返回是 mActivityInfo 的浅拷贝来自 Activity .所以,也许这个方法不能解决问题:
Field field = Activity.class.getDeclaredField("mActivityInfo");
field.setAccessible(true);
ActivityInfo value = (ActivityInfo) field.get(this);
Log.e("APPINFO2", "NAME: " + value.name);
强>强>关于android - 从 TargetActivity 中提取/区分 ActivityAlias 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35745816/
如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve
已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
如thisquestion,当在其自己的赋值中使用未定义的局部变量时,它的计算结果为nil。x=x#=>nil但是当局部变量的名称与现有的方法名称冲突时,就比较棘手了。为什么下面的最后一个示例返回nil?{}.instance_eval{a=keys}#=>[]{}.instance_eval{keys=self.keys}#=>[]{}.instance_eval{keys=keys}#=>nil 最佳答案 在Ruby中,因为可以在没有显式接收器和括号的情况下调用方法,所以在局部变量引用和无接收器无参数方法调用之间存在语法歧义:f
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking
我正在尝试提取方括号内的内容。到目前为止,我一直在使用它,它有效,但我想知道我是否可以直接在正则表达式中使用某些东西,而不是使用这个删除功能。a="Thisissuchagreatday[coolawesome]"a[/\[.*?\]/].delete('[]')#=>"coolawesome" 最佳答案 差不多。a="Thisissuchagreatday[coolawesome]"a[/\[(.*?)\]/,1]#=>"coolawesome"a[/(?"coolawesome"第一个依赖于提取组而不是完全匹配;第二个利用前瞻和