即使活动已关闭,我希望我的应用程序能够工作并监听传入的Intent。最好的方法是什么?
我在清单上注册了一个接收器:
<receiver
android:name="com.farawayapp.background.Receiver"
android:exported="false" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
BroadcastReceiver
类是:
public class Receiver extends BroadcastReceiver implements Variables {
CheckConexion cc;
@Override
public void onReceive(Context contxt, Intent intent) {
// Cuando hay un evento, lo diferenciamos y hacemos una acción.
if (intent.getAction().equals(SMS_RECEIVED)) {
Sms sms = new Sms(null, contxt);
sms.uploadNewSms(intent);
} else if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
/*
* try { new PhoneState(contxt).battery(intent.getIntExtra("level",
* 0)); } catch (JSONException e) { e.printStackTrace(); }
*/// Nothing at the moment
} else if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)
|| intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED)
|| intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
Database db = new Database(contxt);
if (db.open().Preferences(4)) {
Uri data = intent.getData();
new ListApps(contxt).import_app(intent, contxt, data,
intent.getAction());
}
db.close();
} else if (intent.getAction().equals(
ConnectivityManager.CONNECTIVITY_ACTION)) {
cc = new CheckConexion(contxt);
if (cc.isOnline()) {
Database db = new Database(contxt);
db.open();
if (db.move() == 1) {
new UploadOffline(contxt);
}
db.close();
}
}
}
}
...谢谢
答案 0 :(得分:0)
如果您注册BroadcastReceiver
来接收广播,那么即使用户当时没有使用您的应用程序(您的应用程序的任何活动都不在前台),它也会被调用。虽然,您可能想要考虑一些陷阱:
当设备处于睡眠状态时,大多数意图都不会被广播。只有几个事件会唤醒您的设备(例如来电短信,来电,来自Google Cloud Messaging服务器的推送通知等)。因此,如果您希望应用程序在设备处于睡眠状态时执行某些操作,则应考虑AlarmManager
设置将定期调用您的应用程序的警报。
如果您想在后台进行一些工作,可能需要使用WakeLock
来防止设备休眠(以及CPU关闭)。这是来自CommonWare的一个很好的示例,它展示了如何使用WakeLock
并为您提供了一个很好的库来缓解您的生活:https://github.com/commonsguy/cwac-wakeful。虽然,WakeLock
应该小心,因为它会耗尽电池。