本帖最后由 zerolxy 于 2010-05-28 21:32:43 编辑

解决方案 »

  1.   

    其实很简单,
    一般情况是Service的class和Main在一个Android project里,
    现在分别在两个Projects。
      

  2.   

    假设主程序的包为A,service所在的包为B。
    可以在B包的AndroidManifest.xml中,定义一个receiver的intent-filter,比如...
    <receiver
       <intent-filter
          <action android:name="android.intent.action.GET_CONTENT" />
       </intent-filter>
    ...如后在这个receiver的onreceiver中,启动service。那么在A包broadcast这个action即可。
      

  3.   

    用这个方法处理Service的接受问题应该没错,
    但是我发现带有Service的那个apk根本没有进入onCreate的生命周期。请问有办法从主程序激活他么?
      

  4.   

    那就在程序的入口的activity再加上这个intent-filter好了。
      

  5.   

    注册一个receiver,使其intent-filter为你想要的。写一个类A,使其实现BroadcastReceiver的接口,一般只需要处理onReceive就好,然后在函数中随便启动什么activity都可以。比如:
    在androidManifest.xml中:
    <receiver android:name="TestReceiver">
         <intent-filter>
              <action android:name="android.appwidget.action.GET_CONTENT" />
          </intent-filter>
    </receiver>在TestReceiver.java中:
    public class TestReceiver extends BroadcastReceiver {    public void onReceive(Context context, Intent intent) {
                 Intent intent = new Intent();
                 intent.setClassName(.....);
                 startActivity(intent);
            }
        }
    }
      

  6.   

    但是因为要启动的class在另外的apk里,我没有办法setClassName。
    这也是我们在B包里使用broadcast receiver的原因吧。还有我不明白的是,如果要启动别的activity,直接发送Intent就好,为什么要放在receiver里呢?
      

  7.   

    你在XML里面注册Service的时候添加Filter的Action就可以了
    然后在其他APK里面New一个Intent为这个Action 就能直接抓取到这个Service了
      

  8.   

    太感谢了!!!!成功了,谢谢vclongking,也感谢yyy025025025的细心回复。我结贴了