一个关于android开机自启的问题(送分了)
android开机事件会发送一个叫做Android.intent.action.BOOT_COMPLETED的广播信息,我的程序会在接收到这个监听的时候开启我的应用.
代码如下:
开启自启的类
- Java code
public class Hello extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}
接收Android.intent.action.BOOT_COMPLETED的广播信息的类
- Java code
public class StartupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Intent i = new Intent(context,Hello.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //将intent以startActivity传送给操作系统 context.startActivity(i); }}
AndroidManifest.xml
- XML code
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.practice.autostart" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android:name=".AutoStartActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".AutoStartBroadcast" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application></manifest>
问题:
我桌子上有4台机器
1.三星5660 android版本2.2.1 没有效果
2.山寨三星xxx android版本2.3.3 有效果
3.山寨HTC xx android版本 2.3.4 有效果
4.htcXXX android版本2.3.3 没有效果
....
请问这开机自启的代码 和android版本有关系没?或者跟机器设置有关系没?
有没有其他开机自启的方法?360肯定不是用的此方法吧...任何机器都能自动启动
[解决办法]
<receiver android:name=".AutoStartBroadcast" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
看看这样成吗?
[解决办法]
你在广播里输出一下log,未必是接收不到广播,或者只是启动不了Activity,
另外,一些安全软件,360卫士什么的可能会阻止你的自启动
[解决办法]
sdcard的装载有可能在系统广播发出后才完成,如果你的程序装在sdcard里面,就有可能来不及收到广播。
有个偏方:可以设置一些经常会触发的广播接收器,在里面完成启动。
例如:如果需要网络的程序,就可以接收网络状态改变的广播