android-BroadcastReciever以检测屏幕开关和服务不起作用

android-BroadcastReciever以检测屏幕开关和服务不起作用,第1张

概述我非常需要我的问题的帮助.我有一个简单的BroadcastReciever,可以用来检测屏幕的打开和关闭时间.我正在使用服务而不是活动.我尝试在Android4.4.2API19和Android6.0API23上运行服务.有人可以告诉我我在做什么错吗?另外,根据StackOverflow和ThinkAndroid的许多答案,您不应该

我非常需要我的问题的帮助.

我有一个简单的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以检测屏幕开/关和服务不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1120861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存