Service之BindService
来源:互联网 发布:ai下载mac版 编辑:程序博客网 时间:2024/06/06 16:34
5.0以上隐式开启service会出现Service Intent must be explicit异常
解决办法不仅要设置action,还要设置package
隐式创建:
1.首先创建一个继承service的类
public class PayService extends Service { @Override public void onCreate() { super.onCreate(); System.out.println("onCreate启动"); } @Nullable @Override public IBinder onBind(Intent intent) { System.out.println("onBind启动"); return new MyBind(); } public class MyBind extends Binder{ public void payMethod(){ methodInService(); } } public void methodInService(){ System.out.println("支付开始"); } @Override public boolean onUnbind(Intent intent) { System.out.println("onUnbind启动"); return super.onUnbind(intent); } @Override public void onDestroy() { super.onDestroy(); System.out.println("onDestroy启动"); }}
在清单文件中注册
<service android:name=".PayService"> <intent-filter> <action android:name="com.demo.alipay"/> </intent-filter> </service>
在mainActivity中启动
public class MainActivity extends AppCompatActivity { private Intent intent; private PayService.MyBind myBind; private MyConn myConn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(); intent.setAction("com.demo.alipay"); intent.setPackage("com.demo.bindservice"); } @Override protected void onResume() { super.onResume(); if(myConn==null) myConn=new MyConn(); bindService(intent,myConn,BIND_AUTO_CREATE); } private class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("myconn启动"); myBind = (PayService.MyBind) service; } @Override public void onServiceDisconnected(ComponentName name) { } } @Override protected void onDestroy() { super.onDestroy(); unbindService(myConn); }
执行结果
触发支付在点击事件里
public void clicks(View view){ myBind.payMethod(); }
以上就是隐式启动service以及调用service里方法
BindService另一个作用就是进程间通讯
在android studio 创建 aidl文件
首先在android studio中创建一个aidl可以直接new一个aidl
然后会在app同级目录下创建aidl文件夹
如果手动创建aidl文件 也请移动aidl文件夹以及包名为项目package名下。然后rebuild一下 就可以看到
然后之前的PayService中MyBind继承IService.Stub
public class MyBind extends IService.Stub{ @Override public void callMethodInService() throws RemoteException { methodInService(); } }
0 0
- Service之bindService
- Service之BindService
- Android Service之bindService
- android 之 Service(Context BindService())
- Service之startservice与bindservice
- Service之BindService(三)
- Android组件之Service之startService、bindService
- Android Service之 startService与bindService
- Service学习(二)之bindService 的实现
- service与activity通信 之 bindService
- Android4.4——service之bindService
- Android四大组件Service之bindService启动
- Service(1)之Context.startService()与Context.bindService()区别 .
- Android启动Service的两种方式之bindService()
- Activity四大组件之Service 方式二BindService
- Service之startService,bindService交叉使用时的生命周期
- Service启动流程源码分析之bindService(二)
- android之service的startService和bindService的区别
- hdoj 1559 最大子矩阵 [dp]
- SID的组成
- php实现汉诺塔问题
- Allowing Other Apps to Start Your Activity
- Java中的XML解析
- Service之BindService
- ZZULI OJ-1894 985的方格难题 【DP or 组合数取余】
- 图的深度优先遍历和广度优先遍历
- 点到平面的距离
- http请求的几种方法
- C#入门7.12——本章小结及任务实施
- leetcode Convert SortedList to BST
- 2016.8.9
- C++string字符串1.1