相关疑难解决方法(0)

Android:我可以通过编程方式启用/禁用活动的意图过滤器吗?

我需要根据一些运行时信息在启动器中隐藏或显示我的应用程序图标.我仍然希望能够以明确的意图运行活动,因此禁用活动不是一个好的选择(我甚至不知道它是否会起作用,我还没有尝试过,但是我猜它会).那么,我可以禁用意图过滤器吗?

android intentfilter

13
推荐指数
1
解决办法
1万
查看次数

USB权限没有提示

我的应用程序中有2个活动.说FirstActivitySecondActivity. FirstActivity是MAIN和LAUNCHER活动.SecondActivity使用USB设备.我希望USB权限提示在应用程序的生命周期内只出现一次.

如果只有一个Activity,则清单中的以下行解决了我的目的:

<activity android:name=".FirstActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>

    <meta-data
        android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
        android:resource="@xml/usb_device_filter" />
</activity>
Run Code Online (Sandbox Code Playgroud)

这是在做以下事情:

  1. 每当usb设备(在xml中提到)连接时启动FirstActivity是app尚未打开.
  2. 提示usb设备权限仅出现一次.

如何修改此项以实现以下目标:

  1. 如果SecondActivity已经运行并且连接了新的USB设备,我必须能够在不重新启动应用程序的情况下使用该设备.所以我写了一个广播接收器,如下所示:

    public class TriggerReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
            read connected usb devices and register serial port call listener back.
        }
    }    
    
    Run Code Online (Sandbox Code Playgroud)

但是FirstActivity当usb设备在SecondActivity运行时连接时,问题再次重新启动.我该如何避免这种情况?

如果需要,将添加更多信息.感谢任何帮助.

android android-usb

7
推荐指数
1
解决办法
3807
查看次数

Android:如何使用&lt;activity-alias&gt;在代码中创建componentName

我有一个功能,我只希望仅在满足某些条件时才可用,因此我具有以下活动别名:

<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:我可以以编程方式启用/禁用活动的意图过滤器吗?

android components android-activity

2
推荐指数
2
解决办法
3698
查看次数