[TIMOB-27070] Android: Add canStartActivity() method to "Ti.Android.Activity"
GitHub Issue | n/a |
---|---|
Type | New Feature |
Priority | Medium |
Status | Open |
Resolution | Unresolved |
Affected Version/s | n/a |
Fix Version/s | n/a |
Components | Android |
Labels | activity, android, intent |
Reporter | Joshua Quick |
Assignee | Joshua Quick |
Created | 2019-05-08T18:34:38.000+0000 |
Updated | 2019-05-09T04:20:16.000+0000 |
Description
*The Issue:*
Currently, Titanium does not have an API to detect if there are any registered activities that can be started for a given intent. An app developer's only option is to call Titanium's [startActivity()](https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Android.Activity-method-startActivity) method and see if it throws an exception or not. This is an issue for apps that need to detect this in advance without launching an activity.
*Solution:*
Add a new
canStartActivity(Intent)
method to Ti.Android.Activity
which will return true
if at least 1 activity was found for the given intent.
Internally, this should call Google's [PackageManager.resolveActivity()](https://developer.android.com/reference/android/content/pm/PackageManager.html#resolveActivity(android.content.Intent,%20int)) method, where if it returns a non-null reference, then we know an activity exists for the given intent. Alternatively, we could call Google's [PackageManager.queryIntentActivities()](https://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities(android.content.Intent,%20int)) method which returns a list of activities matching the given intent, where we could check if at least 1 activity was returned.
*Use-Case:*
Can be used to detect if there is a 3rd party app installed for viewing a file, such as PDF. If canStartActivity()
returns false
, then you can alert the end-user that viewer app needs to be installed.
*Note:*
While it would be more powerful to provide a queryIntentActivities()
method in Titanium, the vast majority of app developers simply want to know if at least 1 activity exists. So, it's better to keep it simple for now. The only good use-case I've heard where you want to scrutinize the activity list is when you want to exclude an activity from a particular app that has known issues.
No comments