android 拨号启动秘密app 无界面 receiver

至少在API=8,android还是支持无界面app的,比如一个app只有一个receiver,实现特定的功能;但到至多android 4.0已经默认不支持这样只有一个 receiver的app了,即app必须具有activity,至于系统内置的无activity的app如何配置的,我还不清楚,但大部分情况下,android应该不允许无activity视图的app的receiver运行的,像接下来要介绍的秘密app(通常用于工厂指令调试),在android 4.0及以上平台是无法工作的;这类外部app用户通常看不到入口图标,就 有可能成为病毒app之类的,为了安全,还是需要一个activity让用户看看的。

刚发现在<receiver>中添加<category android:name="android.intent.category.HOME" />可以在高版本API,实现无界面(activity)启动receiver
如:
<receiver
            android:name=".AlarmReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.alarm.action.send" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.TIME_SET" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>
言归正传,仅以下代码生成的app在android 4.0无法工作,app需要至少一个activity,或者如上添加   <category  >,而在android2.2可以工作。

1.声明在menifest.xml里面声明receiver:
<receiver android:name=".startSettings">
  <intent-filter>
     <action android:name="android.provider.Telephony.SECRET_CODE" />
    <data android:host="0556" android:scheme="android_secret_code" /> 
    <data android:host="0557" android:scheme="android_secret_code" /> //可以有多个data
 </intent-filter>
</receiver>

2.java 代码
public class startSettings extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String host;
if (intent.getData() != null) {
host = intent.getData().getHost();
} else  return;
if (host.equals("0556")) {
//TODO,启动一个程序,如下启动RootExplorer
Intent it = new Intent("android.intent.action.MAIN");
it.setClassName("com.speedsoftware.rootexplorer","com.speedsoftware.rootexplorer.RootExplorer");
context.startActivity(it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));//必须要 FLAG_ACTIVITY_NEW_TASK
} else {
//TODO
}
}
}

3.键盘拨号启动:*#*#0557#*#*  , 0556就是menifest.xml里面的 android:host="0556"
Android中,当设备启动时自动启动应用程序是可能的。要实现这一点,需要在应用程序的清单文件(AndroidManifest.xml)中添加一个接收BOOT_COMPLETED广播的接收器。 首先,在清单文件中添加以下权限: ```xml <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> ``` 接下来,添加一个接收器,以接收BOOT_COMPLETED广播并在设备启动完成后启动应用程序: ```xml <receiver android:name=".BootCompletedReceiver" android:enabled="true" android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> ``` 然后,在应用程序中创建一个BootCompletedReceiver类,继承自BroadcastReceiver: ```java public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { // 在这里启动你的应用程序 Intent appIntent = new Intent(context, YourMainActivity.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } } } ``` 这个接收器将接收到设备启动完成的广播,并在onReceive()方法中启动你的应用程序的主活动(YourMainActivity.class)。 最后,重新编译和部署你的应用程序。现在,每次设备启动完成后,你的应用程序都会自动启动。 以上是通过在Android清单文件中添加一个接收BOOT_COMPLETED广播的接收器来实现Android自动启动应用程序的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值