Intents and Intent
startActivity()
. If that happens, the call will fail and your app will crash. To verify that an activity will receive the intent, call
resolveActivity()
on your
Intent
object. If the result is non-null, then there is at least one app that can handle the intent and it's safe to call
startActivity()
. If the result is null, you should not use the intent and, if possible, you should disable the feature that issues the intent.
Forcing an app chooser
When there is more than one app that responds to your implicit intent, the user can select which app to use and make that app the default choice for the action. This is nice when performing an action for which the user probably wants to use the same app from now on, such as when opening a web page (users often prefer just one web browser) .
However, if multiple apps can respond to the intent and the user might want to use a different app each time, you should explicitly show a chooser dialog. The chooser dialog asks the user to select which app to use for the action every time (the user cannot select a default app for the action). For example, when your app performs "share" with theACTION_SEND
action, users may want to share using a different app depending on their current situation, so you should always use the chooser dialog, as shown in figure 2.
To show the chooser, create an Intent
usingcreateChooser()
and pass it to startActivity()
. For example:
Intent intent = new Intent(Intent.ACTION_SEND); ... // Always use string resources for UI text. // This says something like "Share this photo with" String title = getResources().getString(R.string.chooser_title); // Create intent to show chooser Intent chooser = Intent.createChooser(intent, title); // Verify the intent will resolve to at least one activity if (chooser
.resolveActivity(getPackageManager()) != null) { startActivity(chooser
);}
Note: For all activities, you must declare your intent filters in the manifest file. However, filters for broadcast receivers can be registered dynamically by calling registerReceiver()
. You can then unregister the receiver withunregisterReceiver()
. Doing so allows your app to listen for specific broadcasts during only a specified period of time while your app is running.
原来主页面的也是通过配置
android.intent.category.LAUNCHER
才在那里显示的,如果不设置哪两个filter,连图标都不会显示.哈啊哈哈哈哈哈哈哈哈哈!!!老是想着做一些隐蔽的动作
可以在一个filter下配置多个属性,也可以分开配置多个filter
<activity android:name="MainActivity"> <!-- This activity is the main entry, should appear in app launcher --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="ShareActivity"> <!-- This activity handles "SEND" actions with text data --> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter> <!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data --> <intent-filter>可以在一个filter下配置多个属性,也可以分开配置多个filter <action android:name="android.intent.action.SEND"/> <action android:name="android.intent.action.SEND_MULTIPLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="application/vnd.google.panorama360+jpg"/> <data android:mimeType="image/*"/> <data android:mimeType="video/*"/> </intent-filter> </activity>