我正在尝试根据我的wn 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();
}
}
当我尝试通过URI Launer浏览testo:// blahblah或fir这个意图时,我的接收器没有被解雇。
以下是模拟从其他应用程序触发意图的代码:
String url = "testo://test/test";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
sendBroadcast( i );
但是,当我将<intent-filer>
块移动到清单中的<activity>
标记时,活动就会被触发。
如何让我的接收者接收意图?
答案 0 :(得分:1)
如果您尝试动态注册接收器,则应以编程方式执行此操作。 This example Eric Nordvik将为您提供良好的服务!
现在,这样做的主要原因是因为它很直接。缺点是当您的应用程序的生命周期当前不活动时(paused
,stopped
),您将无法接收广播。
更新:正如评论中所述,OP需要接收与活动生命周期无关的广播。我会敦促任何人重新考虑他的设计,然后才决定是否真的需要它。
根据official documentation的指定,android:name
用于指定实现BroadcastReceiver
的类的名称。在代码中省略它意味着Activity
本身将接收广播。我相信您的问题是您没有通过android:name
对其进行完全限定,而是将其称为name
。修复它也应该解决你的问题!
更新:OP已经纠正了错字,这不是问题。此时,我最好的猜测是广播生成错误,或者BroadcastReceiver
的引用应使用简写符号android:name=".NameOfReceiverClass"
。
答案 1 :(得分:0)
好的 - 整个问题可能是由于我采取了错误的方法。 用于发送意图DOES的示例代码工作并启动我的接收器。
因此,市场上的大多数QR读者似乎都没有像我的示例代码那样使用QR读取URI激发意图,而是寻找应该响应它然后直接调用它的活动。
我不知道为什么会这样。
解决方案是创建一个静态Activity,它处理BroadcastReceiver应该处理的内容。
Oy vey。