问题
Her is what I'm trying to accomplish:
- When user tries to share some text from any app (Like sharing a tweet or a link), my app will appear in the sharing list.
- If he select my app, some simple code will be run (like showing a Toast) then that's it. No interface or UI is needed.
Here is how I did it:
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();
}
This didn't work, my app doesn't show in the sharing list.
Why I work with BroadcatReceivers
and not with Activities
? Because I don't want any UI and I think that is why we have receivers (correct my plz)
Am I doing it right?
回答1:
This didn't work, my app doesn't show in the sharing list.
ACTION_SEND
is used with activities. You are attempting to use a BroadcastReceiver
. Since a BroadcastReceiver
is not an activity, this will not work.
Am I doing it right?
No.
If he select my app, some simple code will be run (like showing a Toast) then that's it. No interface or UI is needed.
You still need an activity. However, if you give the activity Theme.NoDisplay
, and you do not call setContentView()
, there will be no UI for the activity. Usually, you just call finish()
from onCreate()
after doing whatever it is you wanted to do (in this case, display a Toast
).
For example, this sample application shows an activity (FauxSender
) set up to do precisely what you want: respond to ACTION_SEND
with a Toast
. It has another activity that issues an ACTION_SEND
so you can see the results.
来源:https://stackoverflow.com/questions/10439927/broadcastreceiver-with-intent-filter-for-them