我有一个警报应用程序,我注意到当我更新/重新安装应用程序时,待处理的警报意图被删除。 因此,我需要一种方法来检测应用程序是否已更新,而无需用户启动应用程序。
我使用广播检测手机重新启动以重新注册我的闹钟,但不确定如何检测应用更新的时间。
例如,有没有办法在安装应用程序的情况下尽快运行服务,而无需用户打开应用程序?
我检查了这些,但似乎不可能。但想知道是否有更新的Android版本的更新:
Start a service automatically when app installed to device
How to start a Service when .apk is Installed for the first time
谢谢。
答案 0 :(得分:3)
不是设置闹钟,而是专门为此目的注册了一个Manifest注册的BroadcastReceiver。它可以监听android.intent.action.PACKAGE_REPLACED(注意:此常量中缺少单词action)或android.intent.action.MY_PACKAGE_REPLACED
<receiver android:name="...">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"></action>
<data android:scheme="package" android:path="com.your.package" />
</intent-filter>
</receiver>
重新安装后,您的接收器将收到此消息,您将能够启动活动
答案 1 :(得分:1)
试试这个:
首先,让我们定义将由警报执行的BroadcastReceiver并启动我们的IntentService:
public class MyAlarmReceiver extends BroadcastReceiver {
public static final int REQUEST_CODE = 12345;
public static final String ACTION = "com.codepath.example.servicesdemo.alarm";
// Triggered by the Alarm periodically (starts the service to run task)
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyTestService.class);
i.putExtra("foo", "bar");
context.startService(i);
}
}
接下来,让我们在AndroidManifest.xml中注册我们的IntentService和MyAlarmReceiver。
<receiver
android:name=".MyAlarmReceiver"
android:process=":remote" >
</receiver>
<service
android:name=".MyTestService"
android:exported="false" />
java活动
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scheduleAlarm();
}
// Setup a recurring alarm every half hour
public void scheduleAlarm() {
// Construct an intent that will execute the AlarmReceiver
Intent intent = new Intent(getApplicationContext(), MyAlarmReceiver.class);
// Create a PendingIntent to be triggered when the alarm goes off
final PendingIntent pIntent = PendingIntent.getBroadcast(this,
MyAlarmReceiver.REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Setup periodic alarm every every half hour from this point onwards
long firstMillis = System.currentTimeMillis(); // alarm is set right away
AlarmManager alarm = (AlarmManager)
this.getSystemService(Context.ALARM_SERVICE);
// First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP,
RTC_WAKEUP
// Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR,
INTERVAL_HOUR, INTERVAL_DAY
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis,
AlarmManager.INTERVAL_HALF_HOUR, pIntent);
}
}
设置闹钟后,如果我们想取消这样的闹钟:
public void cancelAlarm() {
Intent intent = new Intent(getApplicationContext(), MyAlarmReceiver.class);
final PendingIntent pIntent = PendingIntent.getBroadcast(this, MyAlarmReceiver.REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pIntent);
}
并检查您的清单权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我不确定,但请检查我的帮助