我试图通过Intent
启动绑定(最终是远程)Android服务。如果我创建Intent
并引用Service
类(请参阅下面的变量ii),则可以正常工作。如果我使用字符串为类名创建Intent
,则bindService
会失败。
最终,我的目标是让第二个应用程序访问我的服务,其中不包含Service
课程(这是远程服务工作的原理......?不是'是吗?) - 因此希望创建Intent
而不引用类对象。
//this Intent works
Intent ii = new Intent(this, MyService.class);
//this Intent doesn't
Intent i = new Intent();
i.setClassName("com.ghee", "MyService");
boolean b = bindService(ii,
mSvcConn,
Context.BIND_AUTO_CREATE);
if(!b) {
Log.d(TAG, "bindService returned false...");
}
如果有帮助,这里的大部分清单都是:
<application android:icon="@drawable/icon">
<activity android:name=".MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="com.ghee.MyService" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService"
android:exported="true"
android:process=":remote">
</service>
</application>
答案 0 :(得分:2)
您需要指定类的完整路径,而不仅仅是其名称。这似乎是违反直觉的,因为你已经在参数1中指定了包,但是......哦。
试试这个:
i.setClassName("com.ghee", "com.ghee.MyService");