拨号启动android应用的实现

拨号启动android应用的实现##

android中通常有需求将应用隐藏起来,通过拨号调用相应的应用

之前一直以为这些是内核实现的操作,全然不知是在应用中实现相应的操作!!!我这条善于忘事的鱼儿做个记录吧,不然下次汉宝又该说我 "这个问题我说了至少有三遍了!"汗~~~

在manifest文件中声明一个广播接收器的步骤:

  1. 指定 广播接收者在应用程序的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>
    
  2. 自定义广播和继承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
                }
           }
     }
    

这里需要在广播中判断当前应用是否启动的操作。

  1. 安装应用之后便可以在拨号中输入 (##123##)启动你的应用了!

  2. 如果还想将你的应用隐藏图标,不在桌面上显示,仅通过拨号来启动的话,需要在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>
    
  3. 补充:如果应用没有启动过,就无法用这种方式启动;所以通过拨号启动时,必须先手动启动应用一次才可以;


上次只提到了需要启动一次才可以进行拨号调用,但是没有具体说明怎么手动启动。在这里详细说明一下。

在第三方程序中启动该应用:

    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系统之后都是需要权限的。

posted @ 2017-10-10 14:25  #Skye  阅读(1396)  评论(1编辑  收藏  举报