BroadcastReceiver是否有针对它们的intent-filter?

时间:2012-05-03 22:01:53

标签: android android-intent broadcastreceiver

她正是我想要完成的事情:

  1. 当用户尝试从任何应用程序共享某些文本时(如共享推文或链接),我的应用程序将显示在共享列表中。
  2. 如果他选择我的应用程序,将运行一些简单的代码(如显示Toast)然后就是这样。无需界面或UI。
  3. 我是这样做的:

    的AndroidManifest.xml

    <receiver 
    android:name=".MyBroadcastReceiver" >
        <intent-filter
            android:label="select my app">
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>                
    </receiver>
    

    MyBroadcastReceiver.java

    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        //Some simple code
        Toast.makeText(arg0, "My Receiver is cool", Toast.LENGTH_LONG).show();
    }
    

    这不起作用,我的应用程序没有显示在共享列表中。

    为什么我使用BroadcatReceivers而不使用Activities因为我不想要任何用户界面,我认为这就是为什么我们有接收器(纠正我的PLZ)

    我做得对吗?

1 个答案:

答案 0 :(得分:8)

  

这不起作用,我的应用程序没有显示在共享列表中。

ACTION_SEND用于活动。您正在尝试使用BroadcastReceiver。由于BroadcastReceiver不是活动,因此无效。

  

我做得对吗?

没有

  

如果他选择我的应用程序,将运行一些简单的代码(如显示Toast)然后就是这样。无需界面或UI。

您仍然需要一项活动。但是,如果您提供活动Theme.NoDisplay,并且未拨打setContentView(),则该活动将没有用户界面。通常,您只需在执行任何操作后从finish()调用onCreate()(在这种情况下,显示Toast)。

例如,this sample application显示的活动(FauxSender)设置为您想要的内容:使用ACTION_SEND回复Toast。它还有另一项活动,可以发出ACTION_SEND,以便您查看结果。