I'm trying to get started with creating Android plugins for the Tasker app. I've started by downloading the 'toast' example and read the documentation. I'm still playing wit the example, but when I comment out the toast action and replace it with code to create an Alert Dialog (which I've done in numerous other apps), the tasker plugin always crashes when I try it in Tasker. I'm using Android Studio.
Does anyone know why? My code is below:
public class FireReceiver extends BroadcastReceiver
{
/**
* @param context {@inheritDoc}.
* @param intent the incoming {@link com.twofortyfouram.locale.Intent#ACTION_FIRE_SETTING} Intent. This
* should contain the {@link com.twofortyfouram.locale.Intent#EXTRA_BUNDLE} that was saved by
* {@link EditActivity} and later broadcast by Locale.
*/
@Override
public void onReceive(final Context context, final Intent intent)
{
/*
* Always be strict on input parameters! A malicious third-party app could send a malformed Intent.
*/
if (!com.twofortyfouram.locale.Intent.ACTION_FIRE_SETTING.equals(intent.getAction()))
{
if (Constants.IS_LOGGABLE)
{
Log.e(Constants.LOG_TAG,
String.format(Locale.US, "Received unexpected Intent action %s", intent.getAction())); //$NON-NLS-1$
}
return;
}
BundleScrubber.scrub(intent);
final Bundle bundle = intent.getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE);
BundleScrubber.scrub(bundle);
if (PluginBundleManager.isBundleValid(bundle))
{
final String message = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE);
//Toast.makeText(context, message, Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Yes, this worked!")
.setIcon(R.drawable.ic_launcher)
.setTitle(R.string.dialog_title);
builder.setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked OK button
//Toast.makeText(context, "You clicked yes", Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton(R.string.dialog_no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
//Toast.makeText(getApplicationContext(), "You clicked no", Toast.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
For anyone who might come across this, I solved the issue in the end. Basically FireReceiver isn't capable of displaying things like Alerts etc. and so you have to use FireReceiver to essentially open up another activity instead that then handles the alert or whatever else you want to display.
This works for me (I've changed the package name but you get the gist). NewActiviy is whatever the activity is called that you want FireReciever to open. It then shows you my code for passing variables along with it, which is pretty standard:
Intent openNext = new Intent();
openNext.setClassName("com.yourcompany.yoursetting", "com.yourcompany.blahblah.receiver.NewActivity");
openNext.putExtra("AlertTitle", message);
openNext.putExtra("AlertContentsString", AlertContents);
openNext.putExtra("BackColour", BackgroundC);
openNext.putExtra("TextColour", TitleC);
openNext.putStringArrayListExtra("ShowArray", arr);
openNext.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(openNext);