安卓应用需要在手机开机后自动重启

4
我需要我的应用程序在手机重启和开机后自动启动。我使用了此处提供的代码,现在我的安卓应用程序可以在手机重启后自动启动。
但是,如果我使用关闭手机(Phone power off)选项而不是重启手机,那么在手机重新开机后,我的应用程序并没有如期望一样被自动启动。请问我错过了什么?
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:enabled="true" android:name=".BootUpReceiver" 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>



public class BootUpReceiver extends BroadcastReceiver
{
    private static SharedPreferences aSharedSettings;

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        aSharedSettings = context.getSharedPreferences("MYPreferences", Context.MODE_PRIVATE);
        boolean isUserLoggedIn = aSharedSettings.getBoolean(kEY.AUTHENTICATED, false); 
        if(isUserLoggedIn) 
        {
Intent aServiceIntent = new Intent(context, HomeView.class);
                aServiceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(aServiceIntent); 
}

    }
}

谢谢。

5个回答

3

2

有几件事情可以尝试。

首先检查你的应用程序在 AndroidManifest.xml 中的 installLocation 是否设置为 android:installLocation="internalOnly" ,这可以确保应用程序位于本地存储中。安装到SD卡的应用程序将无法接收到 BOOT_COMPLETE 意图。

另外,我建议删除 <category android:name="android.intent.category.DEFAULT" /> ,因为它不是必需的。

最后,你可以尝试使用完整的包名:

    <receiver android:enabled="true" 
              android:name="com.myapp.receivers.BootUpReceiver" 
              android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

嗨,谢谢回复。我已经做了所有三个更改。但是它不起作用。我正在使用HTC One V。对我来说,在HTC ONE V中,我的Android应用程序在手机重新启动(重新启动)后会自动启动。然而,当我使用“关闭电话电源(关闭电话)”时,此广播接收器未被调用,并且重新启动未起作用。因此,我觉得BroadcastReceiver没有问题。我使用其他Android型号进行了检查,并发现自动重启在“关闭电话电源”中正常工作。只有HTC One V的问题。请有什么建议。 - user915303
简单来说,它在重新启动时可以工作,但在从“已关闭”状态下启动时无法工作? - Chris.Jenkins
是的,克里斯..重启后可以工作,但从“关机”状态下无法工作。 - user915303
我只能看到这是设备的一个bug,没有“特殊”的方法在清单中指定您是从重新启动/引导过来的。 :/ - Chris.Jenkins

2
尝试添加。
<category android:name="android.intent.category.LAUNCHER" />

而不是

<category android:name="android.intent.category.DEFAULT" />. 

同时检查isUserLoggedIn的值。


谢谢Kumar。我试过了,但在HTC One V手机关机后仍无法工作。然而,在其他型号的手机上可以工作。请给些建议。 - user915303

1

您启动应用程序的Activity名称,请将此行添加到您的标签中... 然后告诉我它是否有效

  <category android:name="android.intent.category.HomeView" />

感谢您的回复,samintechvalens。我尝试了这个方法,但仍然无法正常工作。 - user915303

1

嗨,感谢快速回复。是的,我正在使用HTC One V。对我来说,在HTC ONE V中,我的Android应用程序在手机重新启动后会自动启动。但是,当我使用“关闭手机电源(关闭手机)”时,此广播接收器未被调用,重启不起作用。我检查了其他Android型号(三星和索尼),发现自动重启在“关闭手机电源”中正常工作。唯一的问题在于HTC One V。我尝试了ACTION_SCREEN_ON和ACTION_USER_PRESENT,但它们不起作用。请帮帮我。 - user915303

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