相关疑难解决方法(0)

如何通过可编程方式创建/禁用intent-filter?

我在Android Manifest中有三个活动和三个Intent过滤器.

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>                 
    </activity>
    <activity 
        android:name=".firstActivity"
        android:theme="@style/AppTheme" 
        android:label="@string/first">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>  
   </activity>
    <activity 
        android:name=".secondActivity"
        android:theme="@style/AppTheme" 
        android:label="@string/second">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>  
   </activity>
   <activity 
        android:name=".thirdActivity"
        android:theme="@style/AppTheme" 
        android:label="@string/third">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>  
   </activity ></application>
Run Code Online (Sandbox Code Playgroud)

如何根据选项禁用可编程的意图过滤器?或者我可以通过代码创建新的intent过滤器吗?

谢谢.

android intentfilter

11
推荐指数
3
解决办法
2万
查看次数

以编程方式设置Intents类别

我有一个AndroidManifest中包含以下行的应用程序:

<category android:name="android.intent.category.HOME" /> 
<category android:name="android.intent.category.DEFAULT" />                            
<category android:name="android.intent.category.MONKEY"/>
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否可以通过编程方式设置这些选项?我的意思是,一些用户将能够启用或禁用上述选项.

这样做是为了让我的应用程序成为一个启动器.

那么,是否有可能对此设置条件,所以我可以根据用户进行设置?

EDITION:我编辑了这个问题,添加了Rawr的建议.

这是我在调用主要活动之前正在做的事情:

        Intent myIntent = new Intent(v.getContext(), MainActivity.class);

        myIntent.addCategory(Intent.CATEGORY_HOME);
        myIntent.addCategory(Intent.CATEGORY_DEFAULT);              
        myIntent.addCategory(Intent.CATEGORY_MONKEY);
        startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

如果我在清单中使用这些命令,它们就可以工作.按主页按钮不能离开我的应用程序.像上面手动添加类别不起作用.

有什么建议?

先感谢您!

android android-intent

10
推荐指数
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清单中禁用intent过滤器

在我的活动中,我有一个Web视图,在manifest.xml中,我已经声明了这样的intent过滤器

 <activity
        android:name=".ui.socialNetwork.MySocialNetworkActivity"
        android:configChanges="orientation|screenSize"
        android:process=":fb"
        android:screenOrientation="portrait" >

    </activity>

    <activity-alias
        android:targetActivity=".ui.socialNetwork.MySocialNetworkActivity"
        android:name=".AliasMySocialNetworkActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.PROCESS_TEXT" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity-alias>
Run Code Online (Sandbox Code Playgroud)

这不是发射器活动.这里使用的intent过滤器用于Web视图上的复制粘贴工具栏长按.这很好用.除此之外,我想使用Webview.setOnLongClickListener()获取其他选项,我实现了这样.

  webView = (WebView) findViewById(R.id.webview);

PackageManager pm = getApplicationContext().getPackageManager();
    ComponentName compName =
            new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
    pm.setComponentEnabledSetting(
            compName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);

    webView.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            WebView.HitTestResult hitResult = null;
            hitResult = webView.getHitTestResult();
            if (hitResult != null && hitResult.getExtra() != null) {
                final String hitRes = hitResult.getExtra();
                if (hitResult.getType() == WebView.HitTestResult.IMAGE_TYPE || hitResult.getType() …
Run Code Online (Sandbox Code Playgroud)

android copy-paste webview android-intent long-press

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

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
查看次数