我非常需要我的问题的帮助.
我有一个简单的broadcastRecIEver,可以用来检测屏幕的打开和关闭时间.我正在使用服务而不是活动.我尝试在Android 4.4.2 API 19和AndroID 6.0 API 23上运行服务.
有人可以告诉我我在做什么错吗?
另外,根据StackOverflow和ThinkAndroid的许多答案,您不应该在AndroIDManifest中添加服务.
public class BackgroundService extends Service {@OverrIDepublic voID onCreate() { super.onCreate(); // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); broadcastReceiver mReceiver = new ScreenReceiver(); registerReceiver(mReceiver, filter);}@OverrIDepublic int onStartCommand(Intent intent, int flags, int startID) { boolean screenOn = intent.getBooleanExtra("screen_state", false); if (!screenOn) { System.out.println("SCREEN OFF"); } else { System.out.println("SCREEN ON"); } return START_NOT_STICKY;}}@Nullable@OverrIDepublic IBinder onBind(Intent intent) { // Todo auto-generated method stub return null;}
我的broadCastRecIEver
public class ScreenReceiver extends broadcastReceiver {private boolean screenOff;@OverrIDepublic voID onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { screenOff = true; } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { screenOff = false; } Intent i = new Intent(context, BackgroundService.class); i.putExtra("screen_state", screenOff); context.startService(i); }}
我的AndroIDManifest
<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID" package="com.dahlstore.sosbackground2"> <uses-permission androID:name="androID.permission.READ_PHONE_STATE" /> <application androID:allowBackup="true" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name" androID:supportsRtl="true" androID:theme="@style/Apptheme"> <service androID:name=".BackgroundService" androID:enabled="true" androID:exported="false" /> <receiver androID:name=".ScreenReceiver" androID:enabled="true" androID:exported="true"></receiver> </application></manifest>
Logcat
10-24 15:01:00.122 762-762/com.androID.systemUI E/KeyguardUpdateMonitor: Object trIEd to add another callbackjava.lang.Exception: Called by at com.androID.keyguard.KeyguardUpdateMonitor.registerCallback(KeyguardUpdateMonitor.java:1104) at com.androID.keyguard.KeyguardSelectorVIEw.onResume(KeyguardSelectorVIEw.java:347) at com.androID.keyguard.KeyguardHostVIEw.onScreenTurnedOn(KeyguardHostVIEw.java:1458) at com.androID.keyguard.KeyguardVIEwManager.onScreenTurnedOn(KeyguardVIEwManager.java:500) at com.androID.keyguard.KeyguardVIEwMediator.handleNotifyScreenOn(KeyguardVIEwMediator.java:1960) at com.androID.keyguard.KeyguardVIEwMediator.access00(KeyguardVIEwMediator.java:126) at com.androID.keyguard.KeyguardVIEwMediator.handleMessage(KeyguardVIEwMediator.java:1601) at androID.os.Handler.dispatchMessage(Handler.java:110) at androID.os.Looper.loop(Looper.java:193) at androID.app.ActivityThread.main(ActivityThread.java:5368) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:644) at dalvik.system.NativeStart.main(Native Method)
根据VolACON_SECRET更改后的更新LOGCAT
10-24 17:00:32.441 12822-12822/? E/cutils-trace: Error opening trace file: No such file or directory (2)10-24 17:00:32.663 12822-12822/? E/memtrack: Couldn't load memtrack module (No such file or directory)10-24 17:00:32.663 12822-12822/? E/androID.os.DeBUG: Failed to load memtrack module: -210-24 17:00:36.773 138-744/? E/AudioMTKHarDWare: setCommonParameters() still have param.size() = 1, remain param = "screen_state=on"10-24 17:00:37.802 1002-12848/com.microsoft.launcher E/Item: java.sql.sqlException: Unable to run insert stmt on object ms.loop.lib.profile.Application@42a65780: INSERT INTO `application` (`applicationInstalledAt` ,`applicationLastUsedAt` ,`applicationname` ,`applicationUninstalledAt` ,`applicationUpdatedAt` ,`deviceid` ,`locationLabel` ,`packagename` ,`annotations` ,`updatedAt` ,`changedAt` ,`createdAt` ,`entityID` ,`score` ,`persist` ,`createSignalSent` ,`annotationsChanged` ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)10-24 17:00:40.124 1053-1053/com.Google.process.gapps E/NetworkScheduler.SR: InvalID parameter app10-24 17:00:40.124 1053-1053/com.Google.process.gapps E/NetworkScheduler.SR: InvalID package name : Perhaps you dIDn't include a PendingIntent in the extras?10-24 17:00:41.684 1067-3062/com.Google.androID.gms E/Drive.UninstallOperation: Package still installed com.dahlstore.sosbackground210-24 17:00:41.923 138-18033/? E/AudioMTKHarDWare: setCommonParameters() still have param.size() = 1, remain param = "screen_state=off"10-24 17:00:42.026 1067-12852/com.Google.androID.gms E/IntentoperationSvc: Failed to instantiate Chimera operation impl, dropPing operation10-24 17:00:42.027 6694-6694/com.androID.vending E/Finsky: [1] com.Google.androID.finsky.wear.bo.a(836): onConnectionFailed: ConnectionResult{statusCode=API_UNAVAILABLE, resolution=null, message=null}10-24 17:00:42.278 1053-1053/com.Google.process.gapps E/NetworkScheduler.SR: InvalID parameter app10-24 17:00:42.278 1053-1053/com.Google.process.gapps E/NetworkScheduler.SR: InvalID package name : Perhaps you dIDn't include a PendingIntent in the extras?10-24 17:00:43.576 12905-12905/com.whatsapp E/dalvikvm: Could not find class 'androID.support.v4.app.g', referenced from method androID.support.v4.app.ab.a
我的build.gradle(Module:app)
apply plugin: 'com.androID.application'androID { compileSdkVersion 24 buildToolsversion "25.0.0"defaultConfig { applicationID "com.dahlstore.sosbackground2" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionname "1.0"}buildTypes { release { MinifyEnabled false proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro' }}}dependencIEs { compile filetree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.androID.support:appcompat-v7:24.2.1'}
解决方法:
如上面的回答所述,您应该在清单中包括Service和broadcastReceiver.但是,您可以在Service中动态注册broadCastReceiver,并且永远不要取消注册.
如果您想一直接收通知,则应在清单中注册接收者并带有相应的内部过滤器.
或者,在Service的onTerminate()方法中注销接收器.
以上是内存溢出为你收集整理的android-BroadcastReciever以检测屏幕开/关和服务不起作用全部内容,希望文章能够帮你解决android-BroadcastReciever以检测屏幕开/关和服务不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)