拨号启动android应用的实现
拨号启动android应用的实现##
android中通常有需求将应用隐藏起来,通过拨号调用相应的应用
之前一直以为这些是内核实现的操作,全然不知是在应用中实现相应的操作!!!我这条善于忘事的鱼儿做个记录吧,不然下次汉宝又该说我 "这个问题我说了至少有三遍了!"汗~~~
在manifest文件中声明一个广播接收器的步骤:
-
指定 广播接收者在应用程序的manifest文件中:
<receiver android:name=".broadcast.DialBroadcastReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SECRET_CODE"/> <data android:host="123" android:scheme="android_secret_code"/> </intent-filter> </receiver>
-
自定义广播和继承onReceive方法:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import com.supoin.hardtest.MainActivity; import static com.supoin.hardtest.broadcast.SystemBroadCast.SECRET_CODE_ACTION; public class DialBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SECRET_CODE_ACTION)) { Intent intentMain = new Intent(Intent.ACTION_MAIN); intentMain.setClass(context, MainActivity.class); //FLAG_ACTIVITY_NEW_TASK : This flag is used to create a new task and launch an activity into it. intentMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intentMain); //启动mainActivity } } }
这里需要在广播中判断当前应用是否启动的操作。
-
安装应用之后便可以在拨号中输入 (##123##)启动你的应用了!
-
如果还想将你的应用隐藏图标,不在桌面上显示,仅通过拨号来启动的话,需要在manifest文件中,将启动activity的launch注释掉:
<activity android:name="com.supoin.test_hard.MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"> <!--<category android:name="android.intent.category.LAUNCHER"/>--> </intent-filter> </activity>
-
补充:如果应用没有启动过,就无法用这种方式启动;所以通过拨号启动时,必须先手动启动应用一次才可以;
上次只提到了需要启动一次才可以进行拨号调用,但是没有具体说明怎么手动启动。在这里详细说明一下。
在第三方程序中启动该应用:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.test.app",
"com.test.app.MainActivity"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
其中,com.test.app为应用程序包名,而com.test.app.MainActivity为所要启动的Activity。
第一次用另外一个应用启动,之后可以通过拨号进行调用该隐藏的apk,这么做的原因是首次启动时需要权限,在5.1系统以后都需要权限,以前是apk放在在system下有特权,5.1系统之后都是需要权限的。