在Android上选择默认操作

时间:2012-02-01 09:23:32

标签: android android-intent nfc android-activity

我正在尝试构建一个替代Android上默认操作的应用程序。问题是,当应该执行操作时,我得到“选择操作”对话框,没有复选框,将其选为默认值。我想我应该得到“使用完整行动”对话框(反过来又有复选框)。我不明白如何让Android为我提供“完整......”对话框。我的清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="si.cetrtapot.mobiris"
          android:versionName="1.0"
          android:versionCode="1" >

    <uses-sdk android:minSdkVersion="10" />

    <uses-permission android:name="android.permission.NFC" />

    <uses-feature android:name="android.hardware.nfc" 
                  android:required="true" />

    <application android:icon="@drawable/ic_launcher"
                 android:label="@string/app_name"
                 android:debuggable="true" >

        <activity android:name=".ReadTagActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

            <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                       android:resource="@xml/nfc" />
        </activity>

    </application>
</manifest>

有人可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

intent-filters的工作方式是PackageManager通过每个应用程序找到的Manifest将所有这些应用程序注册到它。特别是当一个应用程序不属于某个Intent-Filter时,它将被添加到具有在其Manifest中声明的那种Intent-Filters的应用程序列表中。

比如说我的应用程序,处理:Intent.ACTION_SEND这意味着我的应用程序将显示在应用特定操作的应用程序列表中。其中包括默认的MMS / SMS应用程序以及用户拥有此应用程序的任何其他应用程序,包括 MY 应用程序(如果用户已安装)。

您应该首先了解“默认操作”的含义。了解这一点将有助于您解决问题。

供您参考:

Intent

Intent.CATEGORY_DEFAULT

答案 1 :(得分:0)

我不相信有什么不对。除非你对Ndef格式化卡片进行非常具体的意图过滤,否则我认为NFC意图不具备默认应用程序。我为我的工作做了这个,因为我们只想让我们的应用程序弹出我们的标签。否则它将一直在列表中(这很烦人)。