最近在研究android 四大组件的源码
在两个程序使用aidl IPC 调试断点的时候发现,bindService 永远是false,一开始以为是 intent 设置的不对,趴了半天!
解决办法
public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
// Retrieve all services that can match the given intent
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
// Make sure only one match was found
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
// Get component info and create ComponentName
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName = serviceInfo.serviceInfo.packageName;
String className = serviceInfo.serviceInfo.name;
ComponentName component = new ComponentName(packageName, className);
// Create a new intent. Use the old one for extras and such reuse
Intent explicitIntent = new Intent(implicitIntent);
// Set the component to be explicit
explicitIntent.setComponent(component);
return explicitIntent;
}
原文链接:https://www.cnblogs.com/HDK2016/p/8965213.html
更简单的方法
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.zpengyong.aidl", "com.zpengyong.aidl.AIDLService"));
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
还有个问题,androidstudio 断点源码的时候,断点进去的文件 是api 24 == 手机sdk 24,发现断点位置跟 source 文件的位置 不一样,有没有知道为什么的?google 试了下没找到有用的答案。