What are alternative ways to launch my app?
You can also run your app from Web browser :
<intent-filter><data android:scheme="my.special.scheme" /><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/></intent-filter>
You can launch your app on NFC transaction :
Into mainfest <uses-feature android:name="android.hardware.nfc" />
Read more about this here : LINK
You can also register a receiver and launch app when you receive sms with secret code in it :
public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object messages[] = (Object[]) bundle.get("pdus"); SmsMessage smsMessage[] = new SmsMessage[messages.length]; for (int n = 0; n < messages.length; n++) { smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } String text = smsMessage[0].getMessageBody();if(text = "yoursecretcode") {//launch the app abortBroadcast(); //if you want to hide this messeage } }
Required permission : <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
You can also register a receiver and launch app when you receive call from selected phone number :
public class ServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { MyPhoneStateListener phoneListener=new MyPhoneStateListener(); TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); }}public class MyPhoneStateListener extends PhoneStateListener { public void onCallStateChanged(int state,String incomingNumber){ switch(state){ case TelephonyManager.CALL_STATE_RINGING: String numer = TelephonyManager.EXTRA_INCOMING_NUMBER; // launch your app if 'numer' is ... break; } } }
You need to this READ_PHONE_STATE
permission
You can also use shell to do this (phone must be rooted):
For example :
Runtime.getRuntime().exec("su");Runtime.getRuntime ().exec ("am start -n com.android.calculator2/.Calculator");
Colleague "Arpan"
wrote :
Tilt Your Phone and Wave your Hand (Basically using a Proximity Sensor to launch App's Intent)
I give you code sample :
public class SensorActivity extends Service implements SensorEventListener { private SensorManager mSensorManager; private Sensor mProximity; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. } @Override public final void onSensorChanged(SensorEvent event) { float distance = event.values[0]; if(!ss()) // LAUNCH YOUR APP IF ISN't RUNNNING } @Override protected void onResume() { // Register a listener for the sensor. super.onResume(); mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause(); mSensorManager.unregisterListener(this); }}private boolean ss() { ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if ("com.packagename.something.ActivityName".equals(service.service.getClassName())) { return true; } } return false;}
"Arpan"
wrote also :
Plug any usb devices and put an intent filter in the manifest (If usb host mode available)
public static boolean isConnected(Context context) { Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB; }
You can paste this to Timer
I have edited Arpan's post, i added link about Gesture Search in Android® .
You can launch application using widget (when user click this, app will launch), I give you widget class code snipet, more you can find here :
package com.helloandroid.countdownexample;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;public class CountdownWidget extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { //called when widgets are deleted //see that you get an array of widgetIds which are deleted //so handle the delete of multiple widgets in an iteration super.onDeleted(context, appWidgetIds); } @Override public void onDisabled(Context context) { super.onDisabled(context); //runs when all of the instances of the widget are deleted from //the home screen //here you can do some setup } @Override public void onEnabled(Context context) { super.onEnabled(context); //runs when all of the first instance of the widget are placed //on the home screen }@Override public void onClick() { //your code to launch application... } @Override public void onReceive(Context context, Intent intent) { //all the intents get handled by this method //mainly used to handle self created intents, which are not //handled by any other method //the super call delegates the action to the other methods //for example the APPWIDGET_UPDATE intent arrives here first //and the super call executes the onUpdate in this case //so it is even possible to handle the functionality of the //other methods here //or if you don't call super you can overwrite the standard //flow of intent handling super.onReceive(context, intent); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //runs on APPWIDGET_UPDATE //here is the widget content set, and updated //it is called once when the widget created //and periodically as set in the metadata xml //the layout modifications can be done using the AppWidgetManager //passed in the parameter, we will discuss it later //the appWidgetIds contains the Ids of all the widget instances //so here you want likely update all of them in an iteration //we will use only the first creation run super.onUpdate(context, appWidgetManager, appWidgetIds); }}
check if Headphones are plugged in
Whenever Headphones are plugged in an intent (ACTION_HEADSET_PLUG
) will be fired. Check for this via BroadcastReceiver
and start Acitivity
IntentFilter f = new IntentFilter();f.addAction(Intent.ACTION_HEADSET_PLUG);registerReceiver(headsetPlugReceiver, f);public BroadcastReceiver headsetPlugReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // start new Activity or do something else }};
And in Manifest:
<receiver android:name="activity.to.receive.headplug.event"> <intent-filter> <action android:name="android.intent.action.HEADSET_PLUG" /> </intent-filter></receiver>
- Tilt Your Phone and Wave your Hand (Basically using a Proximity Sensor to launch App's Intent)
- Screen Tap And/Or Gesture to launch an intent (you can read about this HERE)
- Plug any usb devices and put an intent filter in the manifest (If usb host mode available)