Using Mixpanel I am able to send out notifications directly from their control panel, however currently it uses a weirdly cropped version of the launcher icon as the notification icon.
I have seen some answers for customising the icon using a customised BroadcastReceiver, but I can't seem to get it to working in this case. Has anyone successfully managed to change the notification icon when sending directly from Mixpanel?
Thanks.
Actually, there is a way to set a custom icon for android push notifications without writing your own custom broadcast receiver. Recent versions of the Mixpanel android library understand a "mp_icnm" parameter that can refer to the name of a resource in your application. The library itself is also packaged with a set of predefined icons you can use. The quick way is to put the following snippet into the "custom data" field
{"mp_icnm":"com_mixpanel_android_ic_megaphone"}
I've attached a screenshot of the Mixpanel app with a picture of the text field. You'll want to be sure that this data is entered in "Android" preview mode when you enter your data, as shown in the illustration.
You can use any drawable resource in your app for an icon- the whole list of prepackaged notification icons can be found here in the Mixpanel library, and their resource names are listed below.
com_mixpanel_android_ic_bell
com_mixpanel_android_ic_clipboard_checkmark
com_mixpanel_android_ic_coin
com_mixpanel_android_ic_flag
com_mixpanel_android_ic_gear
com_mixpanel_android_ic_inbox
com_mixpanel_android_ic_megaphone
com_mixpanel_android_ic_phone
com_mixpanel_android_ic_rocket
com_mixpanel_android_ic_sale_tag
com_mixpanel_android_ic_sync
com_mixpanel_android_ic_trophy
com_mixpanel_android_ic_vip
com_mixpanel_android_ic_warning
Be aware that the Mixpanel resources might be removed by your proguard configuration, so you'll want to be sure that you haven't stripped them if you want to use them.
To answer one aspect of #user1544797's question and in addition to #user128536's answer, you may want to let your app be responsible of configuring your notification icon and not rely on the Mixpanel preview mode. To do so, you must intercept Mixpanel broadcast by creating your own BroadcastReceiver that extends Mixpanel's GCMReceiver :
public class MixpanelGCMReceiver extends GCMReceiver {
#Override
public void onReceive(Context context, Intent intent) {
intent.putExtra("mp_icnm", "<your_icon_name>");
super.onReceive(context, intent);
}
}
Then declare your BroadcastReceiver in your AndroidManifest.xml file :
<receiver
android:name="<your_package_name>.MixpanelGCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
Finally, #user128536 is right about warning you that Proguard is messing up with your notification icon if not managed properly (and unfortunately Mixpanel does not document how your app should handle this case). However, in addition to Proguard, there is another issue that you may need to tackle when you are using an applicationId that differs from your packageName (usually while using product flavors). In the ResourceReader class from Mixpanel SDK, you can see this comment :
MPLog.w(LOGTAG, "Can't load names for Android view ids from '" + localClassName + "', ids by name will not be available in the events editor.");
MPLog.i(LOGTAG, "You may be missing a Resources class for your package due to your proguard configuration, " +
"or you may be using an applicationId in your build that isn't the same as the package declared in your AndroidManifest.xml file.\n" +
"If you're using proguard, you can fix this issue by adding the following to your proguard configuration:\n\n" +
"-keep class **.R$* {\n" +
" <fields>;\n" +
"}\n\n" +
"If you're not using proguard, or if your proguard configuration already contains the directive above, " +
"you can add the following to your AndroidManifest.xml file to explicitly point the Mixpanel library to " +
"the appropriate library for your resources class:\n\n" +
"<meta-data android:name=\"com.mixpanel.android.MPConfig.ResourcePackageName\" android:value=\"YOUR_PACKAGE_NAME\" />\n\n" +
"where YOUR_PACKAGE_NAME is the same string you use for the \"package\" attribute in your <manifest> tag."
);
As indicated in the above comment, if you find yourself in this situation, just add in your AndroidManifest.xml file the following block :
<meta-data
android:name="com.mixpanel.android.MPConfig.ResourcePackageName"
android:value="<your_package_name>" />
That's it, you should be done by now ;)
Additionally you can add small icon witch will be shown in status bar.
"mp_icnm_w": "your_small_icon_id"
It should be white with transparent bg.
I'm putting this answer for all the people who are unable to figure out the perfect solution even after reading all the previous answers. I'll sum down all the key points which are required to show your app's icon when you receive the Mixpanel push.
If you're using ProGuard (in my case which I was), you need to put below settings in your Proguard Rule file.
keepclassmembers class **.R$* {
public static <fields>;
}
Add below code in your Manifest.xml file.
<meta-data
android:name="com.mixpanel.android.MPConfig.ResourcePackageName"
android:value="YOUR_PACKAGE_NAME" />
This is the package name (package="YOUR_PACKAGE_NAME") declared in your Application's manifest file (YOUR_PACKAGE_NAME is for example. Replace it with your actual Package name value). Don't mix it up with Application Id. It will not work if you put your Application Id here.
Point 1 & 2 is also mentioned inside the ResourceReader class as mentioned in one of the above answer.
MPLog.w(LOGTAG, "Can't load names for Android view ids from '" + localClassName + "', ids by name will not be available in the events editor.");
MPLog.i(LOGTAG, "You may be missing a Resources class for your package due to your proguard configuration, " +
"or you may be using an applicationId in your build that isn't the same as the package declared in your AndroidManifest.xml file.\n" +
"If you're using proguard, you can fix this issue by adding the following to your proguard configuration:\n\n" +
"-keep class **.R$* {\n" +
" <fields>;\n" +
"}\n\n" +
"If you're not using proguard, or if your proguard configuration already contains the directive above, " +
"you can add the following to your AndroidManifest.xml file to explicitly point the Mixpanel library to " +
"the appropriate library for your resources class:\n\n" +
"<meta-data android:name=\"com.mixpanel.android.MPConfig.ResourcePackageName\" android:value=\"YOUR_PACKAGE_NAME\" />\n\n" +
"where YOUR_PACKAGE_NAME is the same string you use for the \"package\" attribute in your <manifest> tag."
);
If you're already using a FCMPushReceiver and you want to integrate Mixpanel notification support, please follow the guidelines mentioned here.
Irrespective of whether you're using a MixpanelFCMMessagingService or FirebaseMessagingService, you need to put below code inside onMessageReceived() section.
/* drawable_name is just the Drawable Name like if you app logo is app_icon,
use "app_icon" instead of "R.drawable.app_icon" */
if (TextUtils.isEmpty(intent.getStringExtra("mp_icnm"))) {
intent.putExtra("mp_icnm", "drawable_name"); // mp_icnm is used for the app icon
}
if (TextUtils.isEmpty(intent.getStringExtra("mp_icnm_l"))) {
intent.putExtra("mp_icnm_l", "drawable_name"); // mp_icnm_l is used for the large icon
}
if (TextUtils.isEmpty(intent.getStringExtra("mp_icnm_w"))) {
intent.putExtra("mp_icnm_w", "drawable_name"); // mp_icnm_w is used for the White icon
}
For more info on the parameters used by Mixpanel, you can check the parseIntent method of MixpanelPushNotification class.
In case of MixpanelFCMMessagingService, you can get the intent in the method parameter. For FirebaseMessagingService, you can get the intent by doing like below -
final Intent intent = remoteMessage.toIntent();
Related
I was trying to export contacts from my application to the native android contacts.
I found the following solution here on this site: Titanium: How to add Contact in Phone book in Android?.
And it kinda works. The intent gets started. Only problem is, that android does not recognize most of the Extras i put in. So almost every field is blank. It does not matter if I replace contactModel with a simple String, the result is the same.
So i was wondering if the keys are simply wrong, but there seems no proper documentation on appcelerator. Probably something has changed over the past years or I am just missing something. Does anybody know how to do it the right way.
Code Snippet:
if (OS_ANDROID) {
var intent = Ti.Android.createIntent({
action : 'com.android.contacts.action.SHOW_OR_CREATE_CONTACT',
data : 'mailto:' + contactModel.get('contact_first_name') + ' ' + contactModel.get('contact_last_name')
});
intent.putExtra('email', contactModel.get('contact_email'));
intent.putExtra('email_type', 'Work');
intent.putExtra('phone', contactModel.get('contact_mobile_number'));
intent.putExtra('phone_type', 'mobile');
intent.putExtra('name', contactModel.get('contact_first_name') + ' ' + contactModel.get('contact_last_name') );
intent.putExtra('address', addressModel.get('address_street') + ", " + addressModel.get('address_city'));
intent.putExtra('address_type', 'Work');
Ti.Android.currentActivity.startActivity(intent);
}
Thx in advance. :)
The first parameter of putExtra() also accepts one of the constants Ti.Android.... So instead of email you would probably have to use Ti.Android.EXTRA_EMAIL.
I think you can find quite a lot in the docs, e.g. here:
EXTRA constant properties in Ti docs
EXTRA constants in Android docs
Android Intents in Ti docs
Jake Wharton mentioned this library in a recent talk and it looks like a great way to avoid a load of boilerplate so I gave it a go. But without any success.
https://github.com/SimonVT/schematic
Below is the definition of the content provider with the annotation attached and the manifest provider element. The issue is that Android Studio does not like the provider definition because the content provider class does not extend ContentProvider.
Caused by: java.lang.ClassCastException: com.myapp.SchematicContentProvider
cannot be cast to android.content.ContentProvider
What am I missing? It could be related to android-apt which I am not using (Schematic recommends it but does not seem to require it) - when I try using android-apt I get a VerifyError so had to remove it from the build.
AndroidManifest.xml
<provider
android:name="com.myapp.SchematicContentProvider"
android:authorities="com.myapp.provider"
android:exported="false" />
And the class definition:
import net.simonvt.schematic.annotation.ContentProvider;
import net.simonvt.schematic.annotation.ContentUri;
import net.simonvt.schematic.annotation.TableEndpoint;
#ContentProvider(authority = SchematicContentProvider.AUTHORITY, database = SchematicDatabase.class)
public class SchematicContentProvider {
public static final String AUTHORITY = "com.myapp.provider";
interface Path {
String ROUTES = "routes";
}
#TableEndpoint(table = SchematicDatabase.ROUTES) public static class Routes {
#ContentUri(path = Path.ROUTES, type = "vnd.android.cursor.dir/list", defaultSort = SchematicRouteColumns.TITLE + " ASC")
public static final Uri ROUTES = Uri.parse("content://" + AUTHORITY + "/" + Path.ROUTES );
}
}
I've looked through the Schematic sample app (the code snippets in the readme are partial) but I can't see what I've missed. I'm not sure how to confirm that the code generation is working, how do I check? I looked under build but I only see BuildConfig under the Schematic package name.
It's a shame it's not working for me, it has great potential.
You aren't declaring the right ContentProvider.
You have to declare the generated one in the Manifest.
I should like this :
<provider
android:name=".yourOptionalPackage.generated.SchematicContentProvider"
android:authorities="com.myapp.provider"
android:exported="false" />
If your IDE (Android Studio/IntelliJ) shows red warning, just click on the Make Project button to generate the code.
If it's still not working, include apt-libs in your project (worth it), and to save even more time, use this awesome library also based on apt-libs ;)
Let me know in the comments if I solved your problem or not, and if you need help configuring your gradle file.
You receive this error because com.myapp.SchematicContentProvider is your class with annotations and isn't a generated ContentProvider (which will have the same name).
Louis Cognault provided a correct answer, but it worth to mention that Schematic has a special parameter packageName for #ContentProvider and #Database annotations. packageName defines where generated classes will be placed. It let's you to clarify creation of AndroidManifest.xml.
Provider definition class:
#ContentProvider(
authority = SchematicContentProvider.AUTHORITY,
database = SchematicDatabase.class,
packageName = "com.myapp.providerpackage")
public class SchematicContentProvider {
...
}
Database definition class:
#Database(
version = SchematicDatabase.VERSION,
packageName = "com.myapp.providerpackage"
)
public class SchematicDatabase{
public static final int VERSION = 1;
...
}
AndroidManifest.xml:
<provider
android:name="com.myapp.providerpackage.SchematicContentProvider"
android:authorities="com.myapp.provider"
android:exported="false" />
I am trying to configure ACRA for the first time. I have followed the Basic Setup guide :
1.Integrated the acra jar file to my app
2.Created a new class extending application class and have added the below code to it :
#ReportsCrashes(formKey = "", // will not be used
mailTo = "mymailId#gmail.com")
public class MyApplication extends Application
{
#Override
public void onCreate()
{
super.onCreate();
ACRA.init(this);
}
}
3.Made all necessary changes to manifest file
It seems that all is done correctly,I am able to get the below in logcat :
12-21 14:59:10.994: D/ACRA(28728): ACRA is enabled for com.android.demo.notepad1, intializing...
12-21 14:59:11.064: D/ACRA(28728): Using default Mail Report Fields
12-21 14:59:11.064: D/ACRA(28728): Looking for error files in /data/data/com.android.demo.notepad1/files
12-21 14:59:11.074: W/ACRA(28728): **com.android.demo.notepad1 reports will be sent by email (if accepted by user).**
But I am not able to get any mail :( !
As far i know, the mailTo option needs the user in order to send the email.
When an error occurs another mail client (such as Gmail.apk) has to be open to process the crash report and send e-mail. So the error will open a mail client and we need the user to click on send button.
Although a bit late, someone might find it useful anyways...
I did have at least a similar problem with ACRA 4.5.0 which I was able to resolve once all the other configuration options were actually set. This means – although partially labeled as optional – I had to give a value to the following options (in the #ReportsCrashes annotation)
resDialogText = R.string.crash_dialog_text, // Text to display upon crash
resDialogIcon = android.R.drawable.ic_dialog_info, //optional (apparently not). default is a warning sign
resDialogTitle = R.string.crash_dialog_title, // optional (apparently not). default is your application name
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt, // optional (apparently not). when defined, adds a user text field input with this text resource as a label
resDialogOkToast = R.string.crash_dialog_ok_toast // optional (apparently not). displays a Toast message when the user accepts to send a report.
Though I had mode = ReportingInteractionMode.DIALOG, set which might be the source of my problems at least.
have not used "mailTo" field ,had only used #ReportsCrashes(formKey = "formkey")
Make sure you get the form key from google drive correctly
And on crash you will be getting the report on Google drive excel file
And also make sure you have added Internet permission and Added "MyApplication" in mainfeast
<manifest ...>
<application ... android:name="MyApplication">
...
</application>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
</manifest>
Detail explanation is provided here http://acra.ch/
I am working through the Facebook Wishlist app for Android. When I attempt to add my custom object to the Facebook graph the API returns the following error:
{
"error: {
"type": "OAuthExeption",
"message":"(#100)
Application does not own
230752723668296 action type"
}
}
I haven't been able to find any specific documentation on this particular error. Are there any Facebook developers out there who may be able to help me interpret this.
I should also mention that I already have a working example of this app running without errors (I am trying to duplicate it so I can tweak it with out fear of losing work). I have tried changing the name of the Action but this makes no difference. Below is the snippet of the Android code where it adds the item to the Facebook time line. This is however a small piece of the over all puzzle as there are three sides to this project (Facebook, My Server, and Android)
public void addToTimeline() {
dialog = ProgressDialog.show(Wishlist.this, "",getString(R.string.adding_to_timeline), true, true);
/*
* Create Product URL
*/
String productURL = HOST_SERVER_URL + HOST_PRODUCT_URI;
Bundle productParams = new Bundle();
productParams.putString("name", mProductName);
productParams.putString("image", mProductImageName);
productURL = productURL + "?" + Util.encodeUrl(productParams);
Bundle wishlistParams = new Bundle();
if(mPlacesAvailable) {
try {
wishlistParams.putString("place", mPlacesJSONArray.getJSONObject(mPlacesListSpinner.getSelectedItemPosition()).getString("id"));
} catch (JSONException e) {}
}
wishlistParams.putString("wishlist", WISHLIST_OBJECTS_URL[mWishlistSpinner.getSelectedItemPosition()]);
wishlistParams.putString("product", productURL);
wishlistParams.putString("image", mProductImageURL);
//TODO
//put the app's namespace and 'add_to' action here
Utility.mAsyncRunner.request("me/wishlisteight:adding_to", wishlistParams, "POST", new addToTimelineListener(), null);
}
"I should also mention that I already have a working example of this app running without errors (I am trying to duplicate it so I can tweak it with out fear of losing work)"
That action is specific to an app id. When you made the duplicate of your code, did you use the same app id or create a new one? If you created a new app id, you will need to register actions for the new app just like you did with the first app.
I encountererd this error (#100 Application does not own action type) when using the Graph API Explorer tool to post an action to my app's timeline. Here is a brief summary of the values I had entered when encountering this error and how I resolved the issue. Fyi, my app is called 'recipestogo'. The action I defined for my app is called 'cook', and the associated object is called 'recipe'.
Values I entered into Open Graph API:
Chose 'Post' from the drop-down
https://graph.facebook.com/me/recipestogo:cook?recipe=https://www.mywebsite.com/index.html
Error encountered:
100 Application does not own action type
Resolution:
At the top, right of the API Graph Explorer tool, there is a drop-down next to Application. It had been set by default to Graph API Explorer. Changing this from Graph API Explorer to RecipesToGo resolved the issue and I was able to successfully post to my app's timeline.
I have search Android docs and for some insane reason I am not able to find the list of all available intent filters.
I am finding an intent filter, which would do something like notifying me through Broadcast Receiver that a particular Activity (example browser, or email) has been started or in the foreground.
Can anyone help me with that?
PackageExplorer lists all intent-filters defined in apps in your device
To answer your question: You create the intent-filter(s) you want to be used to cause your activity to be selected when a program is looking for a service or activity. So each Activity in a Package defines it own list of intent-filters.
I found it useful to have a list of all intent-filters defined by all the applications on a device -- so would know what apps the system would invoke when an intent was processed. I put a free app on Android Market, search for 'Package Explorer' that searches all apps it can find on your device, decodes the AndroidManifest.xml file and displays a list of all intent-filters defined by all apps. The table of all intent-filters can be sorted by Action, Category, Data fields(ie scheme or mimetype), package name or intent-filter type so you can find all Activites on your device that respond to various Actions or Categories.
Package Explorer also collects all uses-permissions fields in the manifest and displays a list of which apps require which permissions. So you can find all packages that use 'SEND_SMS' or something like that. Clicking on the name of a package displays the decoded (uncompressed binary) AndroidManifest.xml for the package.
If you are off device you can just run the following:
adb shell dumpsys package r
This will give you a list of all the statically registered intent filters.
Expanding on Tom Fraser's answer, the best way is by using dumpsys with a grep and sort.
dumpsys activity broadcasts |grep -iE ".+\.[0-9A-Z_\-]+:$" |sort
The grep expression makes sure to only catch lines ending in the intent like format of ...blahblah.SOME_INTENT:. It may not catch all, but it's a good start.
You're not going to find that. Intent filters are defined by the application. You'd have to look at the documentation for the paritcular application you're interested in.
this post is old but for anyone looking for manifest info from apps installed on a particular android dwld this GOD app:
https://play.google.com/store/apps/details?id=jp.susatthi.ManifestViewer
There is GET_INTENTS_FILTER - declared to be be used in the future to query the intents filters, see also http://code.google.com/p/android/issues/detail?id=3217
However, priority at the Android team is small. Anybody up to submit a patch?
(partial answer) IntentFilters are defined in the AndroidManifest.xml file contained in the application's .apk file. (in the -> -> -> XML element, like this:
I haven't found an API for searching all Intents defined in all .apk files stored on a device. The system searches the list of all intents in: android.content.Context.startActivity(Intent intent)
Which calls a native method in android.app.ActivityManagerNative.startActivity() which uses an interprocess communication (IPC) mechanism (using a serialization of the informtation in a 'Parcel' object) to search the intents and start the Activity. So I could find how it is really done.
It appears that you can get read access to .apk files (many are stored in /system/app/*.apk). The .apk file is a .jar file and the AndroidManifest.xml file is available in that, so a program should be able to read and parse the manifest and find the IntentFilters -- but there should be API to make this easy.
There is a "database" at http://www.openintents.org/intentsregistry/ that tries to collect known intent filters. Also the doumentation for Intent lists some.
You can check the list of standard actions and categories in the sdk/platforms/android-x/data/broadcast_actions.txt
As on date this is list according to official documentation
android#intent#action#AIRPLANE_MODE
android#intent#action#ALL_APPS
android#intent#action#ANSWER
android#intent#action#APPLICATION_PREFERENCES
android#intent#action#APP_ERROR
android#intent#action#ASSIST
android#intent#action#ATTACH_DATA
android#intent#action#BATTERY_CHANGED
android#intent#action#BATTERY_LOW
android#intent#action#BATTERY_OKAY
android#intent#action#BOOT_COMPLETED
android#intent#action#BUG_REPORT
android#intent#action#CALL
android#intent#action#CALL_BUTTON
android#intent#action#CARRIER_SETUP
android#intent#action#CLOSE_SYSTEM_DIALOGS
android#intent#action#CONFIGURATION_CHANGED
android#intent#action#CREATE_DOCUMENT
android#intent#action#DATE_CHANGED
android#intent#action#VIEW
android#intent#action#DEFINE
android#intent#action#DELETE
android#intent#action#DEVICE_STORAGE_LOW
android#intent#action#DEVICE_STORAGE_OK
android#intent#action#DIAL
android#intent#action#DOCK_EVENT
android#intent#action#DREAMING_STARTED
android#intent#action#EDIT
android#intent#action#EXTERNAL_APPLICATIONS_AVAILABLE
android#intent#action#EXTERNAL_APPLICATIONS_UNAVAILABLE
android#intent#action#FACTORY_TEST
android#intent#action#GET_CONTENT
android#intent#action#GET_RESTRICTION_ENTRIES
android#intent#action#GTALK_CONNECTED
android#intent#action#GTALK_DISCONNECTED
android#intent#action#HEADSET_PLUG
android#intent#action#INPUT_METHOD_CHANGED
android#intent#action#INSERT
android#intent#action#INSERT_OR_EDIT
android#intent#action#INSTALL_FAILURE
android#intent#action#INSTALL_PACKAGE
android#intent#action#LOCALE_CHANGED
android#intent#action#LOCKED_BOOT_COMPLETED
android#intent#action#MAIN
android#intent#action#MANAGED_PROFILE_ADDED
android#intent#action#MANAGED_PROFILE_AVAILABLE
android#intent#action#MANAGED_PROFILE_REMOVED
android#intent#action#MANAGED_PROFILE_UNAVAILABLE
android#intent#action#MANAGED_PROFILE_UNLOCKED
android#intent#action#MANAGE_NETWORK_USAGE
android#intent#action#MANAGE_PACKAGE_STORAGE
android#intent#action#MEDIA_BAD_REMOVAL
android#intent#action#MEDIA_BUTTON
android#intent#action#MEDIA_CHECKING
android#intent#action#MEDIA_EJECT
android#intent#action#MEDIA_MOUNTED
android#intent#action#MEDIA_NOFS
android#intent#action#MEDIA_REMOVED
android#intent#action#MEDIA_SCANNER_FINISHED
android#intent#action#MEDIA_SCANNER_SCAN_FILE
android#intent#action#MEDIA_SCANNER_STARTED
android#intent#action#MEDIA_SHARED
android#intent#action#MEDIA_UNMOUNTABLE
android#intent#action#MEDIA_UNMOUNTED
android#intent#action#MY_PACKAGE_REPLACED
android#intent#action#MY_PACKAGE_SUSPENDED
android#intent#action#MY_PACKAGE_UNSUSPENDED
android#intent#action#NEW_OUTGOING_CALL
android#intent#action#OPEN_DOCUMENT
android#intent#action#OPEN_DOCUMENT_TREE
android#intent#action#PACKAGES_SUSPENDED
android#intent#action#PACKAGES_UNSUSPENDED
android#intent#action#PACKAGE_ADDED
android#intent#action#PACKAGE_CHANGED
android#intent#action#PACKAGE_DATA_CLEARED
android#intent#action#PACKAGE_FIRST_LAUNCH
android#intent#action#PACKAGE_FULLY_REMOVED
android#intent#action#PACKAGE_INSTALL
android#intent#action#PACKAGE_NEEDS_VERIFICATION
android#intent#action#PACKAGE_REMOVED
android#intent#action#PACKAGE_REPLACED
android#intent#action#PACKAGE_RESTARTED
android#intent#action#PACKAGE_VERIFIED
android#intent#action#PASTE
android#intent#action#PICK
android#intent#action#PICK_ACTIVITY
android#intent#action#ACTION_POWER_CONNECTED
android#intent#action#ACTION_POWER_DISCONNECTED
android#intent#action#POWER_USAGE_SUMMARY
android#intent#action#PROCESS_TEXT
android#intent#action#PROVIDER_CHANGED
android#intent#action#QUICK_CLOCK
android#intent#action#QUICK_VIEW
android#intent#action#REBOOT
android#intent#action#RUN
android#intent#action#SCREEN_OFF
android#intent#action#SCREEN_ON
android#intent#action#SEARCH
android#intent#action#SEARCH_LONG_PRESS
android#intent#action#SEND
android#intent#action#SENDTO
android#intent#action#SEND_MULTIPLE
android#intent#action#SET_WALLPAPER
android#intent#action#SHOW_APP_INFO
android#intent#action#ACTION_SHUTDOWN
android#intent#action#SYNC
android#intent#action#SYSTEM_TUTORIAL
android#intent#action#TIMEZONE_CHANGED
android#intent#action#TIME_SET
android#intent#action#TIME_TICK
android#intent#action#TRANSLATE
android#intent#action#UID_REMOVED
android#intent#action#UMS_CONNECTED
android#intent#action#UMS_DISCONNECTED
android#intent#action#UNINSTALL_PACKAGE
android#intent#action#USER_BACKGROUND
android#intent#action#USER_FOREGROUND
android#intent#action#USER_INITIALIZE
android#intent#action#USER_PRESENT
android#intent#action#USER_UNLOCKED
android#intent#action#VIEW
android#intent#action#VIEW_LOCUS
android#intent#action#VIEW_PERMISSION_USAGE
android#intent#action#VOICE_COMMAND
android#intent#action#WALLPAPER_CHANGED
android#intent#action#WEB_SEARCH
android#intent#category#ALTERNATIVE
android#intent#category#APP_BROWSER
android#intent#category#APP_CALCULATOR
android#intent#category#APP_CALENDAR
android#intent#category#APP_CONTACTS
android#intent#category#APP_EMAIL
android#intent#category#APP_FILES
android#intent#category#APP_GALLERY
android#intent#category#APP_MAPS
android#intent#category#APP_MESSAGING
android#intent#category#APP_MUSIC
android#intent#category#BROWSABLE
android#intent#category#CAR_DOCK
android#intent#category#CAR_MODE
android#intent#category#DEFAULT
android#intent#category#DESK_DOCK
android#intent#category#DEVELOPMENT_PREFERENCE
android#intent#category#EMBED
android#intent#category#FRAMEWORK_INSTRUMENTATION_TEST
android#intent#category#HE_DESK_DOCK
android#intent#category#HOME
android#intent#category#INFO
android#intent#category#LAUNCHER
android#intent#category#LEANBACK_LAUNCHER
android#intent#category#LE_DESK_DOCK
android#intent#category#MONKEY
android#intent#category#OPENABLE
android#intent#category#PREFERENCE
android#intent#category#SAMPLE_CODE
android#intent#category#SECONDARY_HOME
android#intent#category#SELECTED_ALTERNATIVE
android#intent#category#TAB
android#intent#category#TEST
android#intent#category#TYPED_OPENABLE
android#intent#category#UNIT_TEST
android#intent#category#VOICE
android#intent#category#VR_HOME
android#intent#extra#ALARM_COUNT
android#intent#extra#ALLOW_MULTIPLE
android#intent#extra#ALLOW_REPLACE
android#intent#extra#ALTERNATE_INTENTS
android#intent#extra#ASSIST_CONTEXT
android#intent#extra#ASSIST_INPUT_DEVICE_ID
android#intent#extra#ASSIST_INPUT_HINT_KEYBOARD
android#intent#extra#ASSIST_PACKAGE
android#intent#extra#ASSIST_UID
android#intent#extra#AUTO_LAUNCH_SINGLE_CHOICE
android#intent#extra#BCC
android#intent#extra#BUG_REPORT
android#intent#extra#changed_component_name
android#intent#extra#changed_component_name_list
android#intent#extra#changed_package_list
android#intent#extra#changed_uid_list
android#intent#extra#CHOOSER_REFINEMENT_INTENT_SENDER
android#intent#extra#CHOOSER_TARGETS
android#intent#extra#CHOSEN_COMPONENT
android#intent#extra#CHOSEN_COMPONENT_INTENT_SENDER
android#intent#extra#COMPONENT_NAME
android#intent#extra#CONTENT_ANNOTATIONS
android#intent#extra#CONTENT_QUERY
android#intent#extra#DATA_REMOVED
android#intent#extra#DOCK_STATE
android#intent#extra#DONT_KILL_APP
android#intent#extra#DURATION_MILLIS
android#intent#extra#EMAIL
android#intent#extra#EXCLUDE_COMPONENTS
android#intent#extra#FROM_STORAGE
android#intent#extra#HTML_TEXT
android#intent#extra#INDEX
android#intent#extra#INITIAL_INTENTS
android#intent#extra#INSTALLER_PACKAGE_NAME
android#intent#extra#INTENT
android#intent#extra#KEY_EVENT
android#intent#extra#LOCAL_ONLY
android#intent#extra#LOCUS_ID
android#intent#extra#MIME_TYPES
android#intent#extra#NOT_UNKNOWN_SOURCE
android#intent#extra#ORIGINATING_URI
android#intent#extra#PACKAGE_NAME
android#intent#extra#PHONE_NUMBER
android#intent#extra#PROCESS_TEXT
android#intent#extra#PROCESS_TEXT_READONLY
android#intent#extra#QUICK_VIEW_FEATURES
android#intent#extra#QUIET_MODE
android#intent#extra#REFERRER
android#intent#extra#REFERRER_NAME
android#intent#extra#remote_intent_token
android#intent#extra#REPLACEMENT_EXTRAS
android#intent#extra#REPLACING
android#intent#extra#restrictions_bundle
android#intent#extra#restrictions_intent
android#intent#extra#restrictions_list
android#intent#extra#RESULT_RECEIVER
android#intent#extra#RETURN_RESULT
android#intent#extra#shortcut#ICON
android#intent#extra#shortcut#ICON_RESOURCE
android#intent#extra#shortcut#ID
android#intent#extra#shortcut#INTENT
android#intent#extra#shortcut#NAME
android#intent#extra#SHUTDOWN_USERSPACE_ONLY
android#intent#extra#SPLIT_NAME
android#intent#extra#STREAM
android#intent#extra#SUBJECT
android#intent#extra#SUSPENDED_PACKAGE_EXTRAS
android#intent#extra#TEMPLATE
android#intent#extra#TEXT
android#intent#extra#TITLE
android#intent#extra#UID
android#intent#extra#USER