2016-12-04 18 views
0

이 문제를 해결하기 위해 어디에서나 조사한 결과 내 매니페스트 파일과 관련이 있음을 확신합니다. contextService = IContextInterface.Stub.asInterface(service)에 아래의 코드와 연결을 시도 할 때, 로그에 코드 인쇄는 것을에게 그것의 널 (null)이이하려고한다면, 그래서AIDL을 사용하여 서비스에 응용 프로그램 바인딩 문제.

contextServiceConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      contextService = IContextInterface.Stub.asInterface(service); 
      Toast.makeText(getApplicationContext(), 
        "Context Service Connected", Toast.LENGTH_SHORT) 
        .show(); 
      Log.d("IApp", "Binding is done - Context Service connected"); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 
      contextService = null; 
      Toast.makeText(getApplicationContext(), "Service Disconnected", 
        Toast.LENGTH_SHORT).show(); 
      Log.d("IRemote", "Binding - Location Service disconnected"); 
     } 
    }; 
    if (contextService == null) { 
     Intent contextIntent = new Intent(); 
     contextIntent.setPackage("com.example.the_f.myapplication"); 
     contextIntent.setAction("service.contextFinder"); 
     bindService(contextIntent, contextServiceConnection, Context.BIND_AUTO_CREATE); 
     mContextIsBound = true; 
     if(contextService==null) 
      Log.d("locService","NULL"); 
    } 

나는 심지어 그것을 두 번째 시간을 확인 서비스 객체가 여전히 null 인 것을 나타내는 수동으로 바인딩합니다. 그러나 로그가 "locService : NULL"을 인쇄하기 때문에 마지막 if 문이 계속됩니다. 여기

내 클라이언트 응용 프로그램 매니페스트입니다 :

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

여기 내 원격 서비스 매니페스트입니다 :

<?xml version="1.0" encoding="utf-8"?> 

내가 그것을 잘못 구축 된 생각을 유지 또는 어딘가에 묻혀있는 일부 파일에 문제가 있었기 때문에
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service 
     android:name=".MyMiddleware" 
     android:enabled="true" 
     android:exported="true"></service> 
</application> 

필자는이 프로그램을 3 회 다시 시작됩니다. 나는 정말로 안드로이드 프로가 아니므로 많은 것들에 대해 잘 모릅니다. 어떤 도움이나지도라도 감사 할 것입니다. 미리 감사드립니다.

+0

당신은 onServiceConnected를 기다려야합니다. – natario

+0

괜찮습니다. print 서술문을 onServiceConnected에 놓았고 호출되지 않았다. 나는 무엇을하고 있는지 모르겠다. 필자는 온라인에서 볼 수있는 다양한 예제를 거의 복사했습니다. 심지어 안드로이드 개발 사이트에서, 그들은 그것을 이런 식으로 설정했습니다. 그래서 분명히 내 애플 리케이션은 서비스에 연결되지 않습니다 –

답변

0

내가 올린 소식 중에서 누락 된 것이 하나 있습니다. 당신은 그러나

contextIntent.setAction("service.contextFinder"); 

의도

에 작업을 설정하고, 해당 서비스 매니페스트 항목에 어떤 필터를 정의하지 않았습니다.

은 다음과 시도 -

<service 
    android:name=".MyMiddleware" 
    android:enabled="true" 
    android:exported="true"> 
     <intent-filter> 
      <action android:name="service.contextFinder" /> 
     </intent-filter> 
</service> 

은 또한 당신은 반드시 필요하지 않습니다하지만 당신은 당신의 서비스에 대한 의도를 제한하려는 경우 패키지가 서비스 응용 프로그램의이 있는지 확인합니다. natario

contextIntent.setPackage("com.example.the_f.myapplication"); 

경우에만,() 콜백하지 전에 거의 확실히 직후 bindService() 호출을 onServiceConnected에서 스텁 인스턴스를 얻을 것이다 고 말했다.

희망이 도움이됩니다.