Java Android开机启动服务,can';我没有收到广播
我的服务不会在系统启动时启动,只有当用户按下刷新按钮时才会启动。我尝试了在堆栈中搜索的所有内容,但没有任何内容。我已经将代码重写了4次,也没有任何内容。我希望我的服务在一个时间间隔内运行,当按下刷新按钮时,我无法理解为什么不能在启动时运行,我错过了什么吗 Manifest.xmlJava Android开机启动服务,can';我没有收到广播,java,android,android-service,android-broadcast,Java,Android,Android Service,Android Broadcast,我的服务不会在系统启动时启动,只有当用户按下刷新按钮时才会启动。我尝试了在堆栈中搜索的所有内容,但没有任何内容。我已经将代码重写了4次,也没有任何内容。我希望我的服务在一个时间间隔内运行,当按下刷新按钮时,我无法理解为什么不能在启动时运行,我错过了什么吗 Manifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.moody" android:i
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.moody"
android:installLocation="internalOnly"
android:versionCode="0"
android:versionName="0.6.7.2 alpha" >
<permission
android:name="com.android.moody.permission.GET_SERVER_DATA"
android:protectionLevel="normal" />
<uses-sdk
android:maxSdkVersion="18"
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="com.android.moody.permission.GET_SERVER_DATA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:allowClearUserData="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="activities.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="activities.Menu_esq"
android:label="@string/title_activity_menu_esq" >
</activity>
<activity
android:name="activities.BaseActivity"
android:label="@string/title_activity_base" >
</activity>
<activity
android:name="activities.MainView"
android:label="@string/title_activity_main_view" >
</activity>
<activity
android:name="activities.LoginActivity"
android:label="@string/app_name"
android:noHistory="true"
android:windowSoftInputMode="adjustResize|stateVisible" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.moody.LeftActivity"
android:label="@string/title_activity_left" >
</activity>
<activity
android:name="com.example.moody.RightActivity"
android:label="@string/title_activity_right" >
</activity>
<activity
android:name="activities.UserDetailsActivity"
android:label="@string/title_activity_user_details" >
</activity>
<activity
android:name="fragments.FragTopicsPreview"
android:label="@string/title_activity_copy_of_topics_preview" >
</activity>
<activity android:name="activities.LoadingActivity" >
</activity>
<service
android:name="service.ServiceBackground"
android:enabled="true"
android:icon="@drawable/ic_launcher"
android:label="@string/moody_service" >
</service>
<receiver android:name="service.Alarm" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name="service.StartServiceReceiver"
android:permission="com.android.moody.permission.GET_SERVER_DATA" >
<intent-filter>
<action android:name="moody_get_data" />
</intent-filter>
</receiver>
</application>
警报
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, ServiceBackground.class));
}
public void setAlarm(Context context) {
String alarm = Context.ALARM_SERVICE;
AlarmManager am = (AlarmManager) context.getSystemService(alarm);
Intent intent = new Intent("moody_get_data");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
// long interval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
long interval = 1000 * 60 * 2;
long triggerTime = SystemClock.elapsedRealtime() + interval;
am.setRepeating(type, triggerTime, interval, pi);
}
public void CancelAlarm(Context context) {
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent
.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
启动服务接收器
public class StartServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("service", "Starting service from serviceReceiver");
Intent service = new Intent(context, ServiceBackground.class);
context.startService(service);
}
}
注释:
- 我已经尝试过不使用过滤器直接启动服务,但是 没有理由不启动,所以使用过滤器是唯一的方法 成功了
- 我也尝试过不使用StartServiceReceiver.java,目的是在警报中,但运气不好,如果有人认为这是问题所在,我可以再次更改代码
- 我在线程中运行while(isRunning)只是为了将来的目的,但我认为问题不在于此
- 使用权限(似乎与您的相同)
- 接受者
<receiver android:name="com.<!your activity!>" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
Yoiu看到有一个关于权限的附加条目。与我的一个实现相比,清单中有一些小差异:
- 使用权限(似乎与您的相同)
- 接受者
<receiver android:name="com.<!your activity!>" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
you看到有一个关于权限的附加条目。您使用的是Htc设备吗?如果是,请检查以下内容:否,我使用的是genyMotion emulator和nexus 4您使用的是Htc设备吗?如果是,请检查以下内容:否,我使用的是genyMotion emulator和nexus 4您救了我一天的命。谢谢!!巨大的帮助:D我自己永远看不到这个条目。您呢已经救了我一天。谢谢!!帮了大忙:D我自己永远也看不到那个条目了。