应用程序自动启动延迟
delay of application auto-boot
我想在设备打开时延迟应用程序的自动启动。我试图通过使用 Handler、Timer 和 AlarmManager 来做到这一点,但是 happend.Default 在 ACTION_BOOT_COMPLETED 启动应用程序时没有任何效果正常,但是当我尝试使用延迟时,我的应用程序没有自动启动根本。我认为这取决于 BroadcastReciever 的生命周期,但我找不到详细的响应。如果您有任何建议,请留下 it.There 是我的代码:
BroacastReciever.java:
package com.example.micka.iportapp;
public class ActivityRunOnStartup extends BroadcastReceiver {
public SharedPreferences sPref;
private final int DEFAULT_APP_BOOT_DELAY = 100000;
private final boolean AUTO_BOOT_APP_FLAG = false;
public static SharedPreferences.Editor editor;
private int ACTUAL_BOOT_DELAY;
@Override
public void onReceive(final Context context, Intent intent) {
sPref = context.getSharedPreferences("appPref",Context.MODE_PRIVATE);
ACTUAL_BOOT_DELAY = sPref.getInt("sPref_delay",DEFAULT_APP_BOOT_DELAY);
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
final Intent i = new Intent(context, BroadcastActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME,System.currentTimeMillis()+10000,pendingIntent);
// context.startActivity(i);
// Actions to do after 10 seconds
/*}
}, 5000);*/
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.micka.iportapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:enabled="true"
android:exported="true"
android:name=".ActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name=".BroadcastActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我也试过这个版本:
public class ActivityRunOnStartup extends BroadcastReceiver {
public SharedPreferences sPref;
private final int DEFAULT_APP_BOOT_DELAY = 100000;
private final boolean AUTO_BOOT_APP_FLAG = false;
public static SharedPreferences.Editor editor;
private int ACTUAL_BOOT_DELAY;
@Override
public void onReceive(final Context context, Intent intent) {
sPref = context.getSharedPreferences("appPref",Context.MODE_PRIVATE);
ACTUAL_BOOT_DELAY = sPref.getInt("sPref_delay",DEFAULT_APP_BOOT_DELAY);
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
final Intent i = new Intent(context, BroadcastActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
context.startActivity(i);
}
},10000);
}
}
您正在以错误的方式创建 PendingIntent
,要启动 activity,您需要调用 PendingIntent.getActivity
而不是 PendingIntent.getBroadcast
:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
应替换为:
PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
如果您想开始另一个 BroadcastReceiver
。
另外一个问题是闹钟时间的设置,我记得不需要加上当前时间:
alarmManager.set(AlarmManager.ELAPSED_REALTIME, 10000, pendingIntent);
我想在设备打开时延迟应用程序的自动启动。我试图通过使用 Handler、Timer 和 AlarmManager 来做到这一点,但是 happend.Default 在 ACTION_BOOT_COMPLETED 启动应用程序时没有任何效果正常,但是当我尝试使用延迟时,我的应用程序没有自动启动根本。我认为这取决于 BroadcastReciever 的生命周期,但我找不到详细的响应。如果您有任何建议,请留下 it.There 是我的代码:
BroacastReciever.java:
package com.example.micka.iportapp;
public class ActivityRunOnStartup extends BroadcastReceiver {
public SharedPreferences sPref;
private final int DEFAULT_APP_BOOT_DELAY = 100000;
private final boolean AUTO_BOOT_APP_FLAG = false;
public static SharedPreferences.Editor editor;
private int ACTUAL_BOOT_DELAY;
@Override
public void onReceive(final Context context, Intent intent) {
sPref = context.getSharedPreferences("appPref",Context.MODE_PRIVATE);
ACTUAL_BOOT_DELAY = sPref.getInt("sPref_delay",DEFAULT_APP_BOOT_DELAY);
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
final Intent i = new Intent(context, BroadcastActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME,System.currentTimeMillis()+10000,pendingIntent);
// context.startActivity(i);
// Actions to do after 10 seconds
/*}
}, 5000);*/
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.micka.iportapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:enabled="true"
android:exported="true"
android:name=".ActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name=".BroadcastActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我也试过这个版本:
public class ActivityRunOnStartup extends BroadcastReceiver {
public SharedPreferences sPref;
private final int DEFAULT_APP_BOOT_DELAY = 100000;
private final boolean AUTO_BOOT_APP_FLAG = false;
public static SharedPreferences.Editor editor;
private int ACTUAL_BOOT_DELAY;
@Override
public void onReceive(final Context context, Intent intent) {
sPref = context.getSharedPreferences("appPref",Context.MODE_PRIVATE);
ACTUAL_BOOT_DELAY = sPref.getInt("sPref_delay",DEFAULT_APP_BOOT_DELAY);
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
final Intent i = new Intent(context, BroadcastActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
context.startActivity(i);
}
},10000);
}
}
您正在以错误的方式创建 PendingIntent
,要启动 activity,您需要调用 PendingIntent.getActivity
而不是 PendingIntent.getBroadcast
:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
应替换为:
PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(),PendingIntent.FLAG_ONE_SHOT,i,0);
如果您想开始另一个 BroadcastReceiver
。
另外一个问题是闹钟时间的设置,我记得不需要加上当前时间:
alarmManager.set(AlarmManager.ELAPSED_REALTIME, 10000, pendingIntent);