什么是启动我的应用程序的替代方法?

我可以启动我的应用程序:

  1. 点击发射器上的图标
  2. 注册“可见”意图filter(我的意思是 – 用户点击例如“发送..”,然后select我的应用程序)
  3. 在拨号器中input数字代码和“呼叫” – “不可见”意图,用户不能select应用程序,他只是input代码

有没有其他方法来启动我的应用程序? (我最感兴趣的是像第3段中的“无形”意图)。

  • 假设我们只有默认的系统应用程序(大多数Google应用程序也被视为默认)和我的应用程序
  • 通常用户的方式是首选,但更困难的方法也将是有用的
  • 可以在一个设备上使用的变体(不需要其他设备需要接近)是优选的,但“多于一个设备变体”也是有用的。

Related of "什么是启动我的应用程序的替代方法?"

您也可以从Web浏览器运行您的应用程序:

<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> 

您可以在NFC交易中启动您的应用:

进入mainfest <uses-feature android:name="android.hardware.nfc" />

阅读更多关于这里: 链接


你也可以注册一个接收器,并启动应用程序,当你收到密码在其中的密码:

  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 &lt; 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 } } 

必需的权限: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>


您也可以在收到来自选定电话号码的电话时注册接收器并启动应用程序:

 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; } } } 

你需要这个READ_PHONE_STATE权限


你也可以使用shell来做到这一点(电话必须根植):

例如 :

 Runtime.getRuntime().exec("su"); Runtime.getRuntime ().exec ("am start -n com.android.calculator2/.Calculator"); 

同事"Arpan"写道:

倾斜你的手机和波手(基本上使用接近传感器启动应用程序的意图)

我给你代码示例:

 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"还写道:

插入任何USB设备,并在清单中放置一个意图filter(如果USB主机模式可用)

 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; } 

您可以将其粘贴到Timer


我编辑了Arpan的post,我添加了关于Android®中的手势search的链接。


你可以启动应用程序使用小部件(当用户点击这个,应用程序将启动),我给你的部件类代码snipet,你可以在这里find更多:

 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); } } 

检查耳机是否插入

每当耳机插入意图( ACTION_HEADSET_PLUG )将被触发。 通过BroadcastReceiver检查并启动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 } }; 

在清单中:

 <receiver android:name="activity.to.receive.headplug.event"> <intent-filter> <action android:name="android.intent.action.HEADSET_PLUG" /> </intent-filter> </receiver> 

  1. 倾斜你的手机和波手(基本上使用接近传感器启动应用程序的意图)
  2. 屏幕点击和/或手势发起一个意图(你可以阅读这里这里 )
  3. 插入任何USB设备,并在清单中放置一个意图filter(如果USB主机模式可用)