我正在尝试使用broadcastReceiver中的Android服务.该服务与broadcastReceiver驻留在不同的应用程序中.我的理解是,正确的方法是先调用Context#startService,然后调用broadcastReceiver#peekService.调用startService似乎可以正常工作,因为它返回了预期的Componentname.但是,当我调用peekService时,将返回null.对我在做什么错有任何想法吗?
谢谢!这是带有相关部分的代码清单.
// The Service in question is com.tingley.myapp.MyService// Note that this Receiver is in a different applicationpackage com.tingley.myotherapp;public class MyReceiver extends broadcastReceiver { @OverrIDe public voID onReceive(Context context, Intent intent) { // Start the Service Intent serviceIntent = new Intent(); serviceIntent.setClassname("com.tingley.myapp", "com.tingley.myapp.MyService"); Componentname componentnameOfStartedService = context.startService(serviceIntent); Log.d("", "Started service name: " + componentnameOfStartedService); // Get an IBinder to the Service IBinder serviceBinder = peekService(context, serviceIntent); Log.d("", "Got binder from peeking service: " + serviceBinder); }}
Log语句显示以下内容:
Started service name: ComponentInfo{com.tingley.myapp/com.tingley.myapp.MyService}Got binder from peeking service: null
解决方法:
peekService()的文档没有完全描述获取IBinder所需的条件.正如Dianne @R_301_6836@born(Google AndroID工程师)在this post中所述:“仅调用startService()-您需要为相同的意图调用bindService(),因此系统已为此检索了IBinder”.
总结以上是内存溢出为你收集整理的android-peekService返回null,即使startService不全部内容,希望文章能够帮你解决android-peekService返回null,即使startService不所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)