关闭

使用暗码启动内置APK

139人阅读 评论(0) 收藏 举报
分类:
   

场景设想:如果你需要隐藏你的apk icon,并通过android的拨号盘启动你的apk应用


以下是定义了*#*#(……)#*#*格式以及*#(……)*#格式;类似的输入格式都会广播SECRET_CODE_ACTION,

  1. <span xmlns="http://www.w3.org/1999/xhtml">/**
  2.      * Handles secret codes to launch arbitrary activities in the form of *#*#<code>#*#*.
  3.      * If a secret code is encountered an Intent is started with the android_secret_code://<code>
  4.      * URI.
  5.      *
  6.      * @param context the context to use
  7.      * @param input the text to check for a secret code in
  8.      * @return true if a secret code was encountered
  9.      */ 
  10.     static boolean handleSecretCode(Context context, String input) { 
  11.         // Secret codes are in the form *#*#<code>#*#* 
  12.         int len = input.length(); 
  13.         Log.i("secrectcode", "len= "+len); 
  14.         if (len > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) 
  15.          { 
  16.             Intent intent = new Intent(Intents.SECRET_CODE_ACTION, 
  17.                     Uri.parse("android_secret_code://" + input.substring(4, len - 4))); 
  18.             context.sendBroadcast(intent); 
  19.             return true
  20.         } 
  21.          else if (len ==6 && input.startsWith("*#") && input.endsWith("*#")){ 
  22.              Intent intent = new Intent(Intents.SECRET_CODE_ACTION, 
  23.                      Uri.parse("android_secret_code://" + input.substring(2, len - 2))); 
  24.              context.sendBroadcast(intent); 
  25.              return true
  26.          }  
  27.         return false
  28.     }</span> 


指定你的data,与你的receiver对应;data和action共同限定了过滤条件;


<receiver android:name=".SecretCode" >            <intent-filter>                <action android:name="android.provider.Telephony.SECRET_CODE" />                <data                    android:host="1234"                    android:scheme="android_secret_code" />            </intent-filter>        </receiver>
 
 
定义一个广播接收器
public class SecretCode extends BroadcastReceiver { private static final String MY_SECRET_CODE = "1234"; @Override public void onReceive(Context context, Intent intent) {  // TODO Auto-generated method stub  String action = intent.getAction();  String host = (intent.getData()== null)? null :intent.getData().getHost();  if (MY_SECRET_CODE.equals(host)) {   Intent mIntent = new Intent(context,BatteryActivity.class );   mIntent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);   context.startActivity(mIntent);  } }}
 
备注:这样做的APK需要设置android:sharedUserId="android.uid.system",并且需要系统签名或者在源码下编译,如果签名的APK安装以后首次输入命令会无法启动,需要运行一次APK才可以启动,为了解决这个问题我们需要将APK  Push到手机的system/app目录下就不会有该问题。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:986次
    • 积分:50
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档