val*_*lll 2 android components android-activity
我有一个功能,我只希望仅在满足某些条件时才可用,因此我具有以下活动别名:
<activity-alias android:name="share-files-text"
android:targetActivity=".MyActivity"
android:exported="true"
android:enabled="false">
<intent-filter android:label="@string/open_with">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="application/pdf" />
<data android:mimeType="image/*" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)
活动后,我将使用以下代码启用该组件
String packageName = getPackageName();
ComponentName componentWithTextFiles = new ComponentName(packageName, "share-files-text");
ComponentName componentWithoutTextFiles = new ComponentName(packageName, "share-files");
if(DebugAndTestSettings.ENABLE_TEXT_SLIDE){
getPackageManager().setComponentEnabledSetting(componentWithTextFiles, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
getPackageManager().setComponentEnabledSetting(componentWithoutTextFiles, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
} else {
getPackageManager().setComponentEnabledSetting(componentWithTextFiles, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
getPackageManager().setComponentEnabledSetting(componentWithoutTextFiles, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
}
Run Code Online (Sandbox Code Playgroud)
问题是崩溃说软件包blabla不包含名为share-files-text的活动,如何使用别名来禁用/启用此元素?谢谢
编辑:我从这篇文章中得到了这个主意: Android:我可以以编程方式启用/禁用活动的意图过滤器吗?
我已经找到使用此代码的解决方案
String packageName = getPackageName();
try {
PackageInfo p = getApplicationContext().getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
for (ActivityInfo activityInfo : p.activities) {
if(log.d()) log.d("ACT " + activityInfo.name+" "+activityInfo.packageName);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
如果您的别名是“别名”
ComponentName componentWithoutTextFiles = new ComponentName(packageName, packageName".alias");
Run Code Online (Sandbox Code Playgroud)
小智 5
@vallllll给出的解决方案工作正常,我尝试进行投票或发表评论,但由于仍需要声望点而无法执行操作。
我在其他问题上尝试了许多其他解决方案,但没有用。这里给出的解决方案是唯一对我有用的解决方案
我遇到的问题是,在将代码从sdk 18迁移到sdk 26之后,我遇到此错误组件类x在Y中不存在,当从Activity切换到Alias-Activity Old代码时调用setComponentEnabledSetting
getPackageManager().setComponentEnabledSetting(
new ComponentName(pkg name, alias name),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
新密码
getPackageManager().setComponentEnabledSetting(
new ComponentName(this, pkg name + alias name,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
进行了两项更改,1更改了ComponentName构造函数以使用接受上下文和类名的版本,而不是使用pkg name的构造函数版本,类名2使用完全限定的别名+要获取完全限定的别名,我使用了以下代码
String packageName = getPackageName();
try {
PackageInfo p = getApplicationContext().getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
for (ActivityInfo activityInfo : p.activities) {
Log.d(LOG_TAG, "ACT " + activityInfo.name+" "+activityInfo.packageName );
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |