我想在其设置中创建一个具有自动启动选项的应用程序。我在我的应用程序中创建了一个从PreferenceActivity派生的Settings活动,并为自动启动选项提供CheckBoxPreference。如果启用了自动启动选项,我的应用程序应在启动手机时启动。如果禁用了自动启动选项,则它不应在启动完成时启动。
为实现这一点,我实现了BroadcastReceiver的派生类,它接收BOOT_COMPLETED意图,在AndroidManifest.xml中声明接收者,并在AndroidManifest.xml中授予权限。
在应用程序中还有一个派生类的Application和启动服务也来自应用程序派生类的onCreate方法。如果我在AndroidManifest.xml中声明接收器,那么在启动后我的应用程序的onCreate被调用然后调用BroadcastReceiver的onReceive方法。
现在的问题是,无论是启用还是禁用自动启动,我的应用程序每次启动都会启动。禁用自动启动时是否可以不启动应用程序?
答案 0 :(得分:10)
您可以使用共享首选项来存储isAutoStartEnabled
的布尔值,并在BroadcastReciver中检查此值,仅当它是真的时才触发它。
在您的情况下,问题不在于您是否收到广播,而是接收广播的人。祝你好运..
我希望它有所帮助..
答案 1 :(得分:6)
我认为从 Android 3.1开始你的BroadcastReceiver接收BOOT_COMPLETED
意图它无法正常工作。用户必须通过与之交互来唤醒应用程序。
因此,在启动设备后,所有第三方应用程序都在停止。
目前您的应用程序可以使用SharedPreferences
自动启动您的应用程序..
更新(仅适用于Android版本低于3.1的更高版本,但是您必须在设备启动完成后与用户进行交互)
您需要使用BroadcastReceiver
android.intent.action.BOOT_COMPLETED
意图。
将以下内容添加到您的清单文件中:
<receiver android:name="App_Receiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
实施BoradcastReciever的App_Receiver类。实施onReceive()
方法并从您的应用中开始您喜欢的活动。
public void onReceive(Context context, Intent intent) {
// make sure you receive "BOOT_COMPLETED"
// Here isAutoStartEnabled check sharedPreferences for Auto Start flag
if ( isAutoStartEnabled ) {
if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")))
{
// Start the service or activity
}
}
答案 2 :(得分:6)
您必须在Manifest中添加uses-permission android.permission.RECEIVE_BOOT_COMPLETED
。
答案 3 :(得分:1)
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);
if ( isAutoStartEnabled ) {
startActivity(new Intent());
}
我希望这有助于你
答案 4 :(得分:1)
以下代码适用于我:
public class BootCompleteReceiver extends BroadcastReceiver {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Log.d("boot completed", "boot completed caught");
Boolean autoRestart = false;
SharedPreferences sp = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
autoRestart = sp.getBoolean("autoRestart", false);
if (autoRestart){
Log.d("boot completed", "auto restart true");
Intent i = new Intent(context, WelcomeScreen.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
}