-2

我正在尝试根据我自己的 URI 接收一个简单的自定义意图。

这是我的清单:

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.intenttest.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>

    <receiver
        android:name="com.example.intenttest.TestReceive"
        android:enabled="true"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="testo" />
        </intent-filter>
    </receiver>
</application>

我的接收器非常简单:

public class TestReceive extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {
    Log.d("", "YAY!!!!!");

        Toast.makeText(context, "TEST!!!", Toast.LENGTH_LONG).show();
    }

}

当我尝试浏览 testo://blahblah 或通过 URI Launer 发出此意图时,我的接收器没有被触发。

这是模拟从不同应用程序触发意图的代码:

        String url = "testo://test/test";
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        sendBroadcast( i );

但是当我将<intent-filer>块移动到<activity>清单中的标签时,该活动被触发。

我怎样才能让我的接收者收到意图?

4

2 回答 2

1

如果您尝试动态注册接收器,您应该以编程方式进行。Eric Nordvik这个例子将为您提供很好的服务!

现在,这样做的主要原因是因为它是直截了当的。paused不利的一面是,当您的应用程序的生命周期当前未处于活动状态时( , ) ,您将无法接收广播stopped

更新:如评论中所述,OP 需要接收独立于活动生命周期的广播。我会敦促任何人重新考虑他的设计,然后再决定是否真的需要它。

正如官方文档所指定的,android:name用于指定实现BroadcastReceiver. 在您的代码中省略它意味着它Activity本身将接收广播。我相信您的问题是您没有完全限定它,android:name而是将其称为name. 修复它也应该解决你的问题!

更新: OP 已经纠正了一个错字,这不是问题。在这一点上,我最好的猜测是广播生成错误或者对 的引用 BroadcastReceiver应该使用速记符号android:name=".NameOfReceiverClass"

于 2013-08-13T12:09:54.833 回答
0

好的 - 这整个问题可能是由于我采取了错误的方法造成的。发送意图的示例代码确实有效并且确实启动了我的接收器。

因此,市场上的大多数 QR 阅读器似乎不会像我的示例代码那样使用 QR 读取 URI 触发意图,而是寻找应该响应它的 Activity,然后直接调用它。

我不知道为什么会这样。

解决方案是创建一个静默 Activity,它处理 BroadcastReceiver 应该处理的内容。

OY合租。

于 2013-08-15T07:36:01.590 回答