开机自启应用程序

4
我使用以下代码来在设备开机时启动我的应用程序。
public class BootReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("BootReceiver","intent received");

        Intent myIntent = new Intent(context, ACT_Home.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);
    }

}

在清单文件中(作为<Application>的子元素):
<receiver android:name="host.alarmmanager.BootReceiver">
   <intent-filter >
      <action android:name="android.intent.action.BOOT_COMPLETED"/>
   </intent-filter>
</receiver>

清单文件中的权限如下:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

这段代码在Android 3.2.2上可以正常运行,但是在Android 4.0.3上无法接收到广播。同时,在onReceive方法中的第一行代码也没有被执行。为什么会出现这种情况呢?


1
你手动启动过应用程序吗? - Selvin
3个回答

7
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

在 Android 清单文件中使用以下内容:


但是为什么我的解决方案在Android 3.2.2中可以工作,而不需要添加这个权限呢? - GVillani82
不确定,但如果我们看一下Android 3.x.x版本的百分比少于1%。所以你可以轻松地忘记它。 - Lebedevsd
2
https://dev59.com/RFPTa4cB1Zd3GeqPhTp3 - Selvin
好的,@Seliv,我马上要试一下。 - GVillani82

2
尝试这个,虽然你的代码看起来没问题!以下代码对我有效。
    <!-- Receivers -->
    <receiver android:enabled="true" android:name="host.alarmmanager.BootReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

https://dev59.com/RFPTa4cB1Zd3GeqPhTp3 - Selvin
@Joseph82,既然它在某些设备上可以工作,我假设你在你的清单中有权限。 - Lazy Ninja

1

请确保您不是通过从电源菜单中选择重新启动选项来重新启动手机。

安卓系统奇怪地有两个不同的权限。

1.重新启动

2.开机完成后

因此,请先关闭手机,然后过几秒钟再重新打开它!

希望对您有所帮助!(Y)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接