2016-11-24 2 views
0

私は長い間これを見てきましたが、ヌルオブジェクトのResolveInfo.serviceInfoにアクセスしようとするとNull Pointer Exceptionがスローされる問題を修正できません。ここで bindServiceできませんAndroid()

package com.example.playerclient; 

interface AIDLinterface { 
    void Play_Clip(int id); 
    void Pause_Playback(); 
    void Resume_Playback(); 
    void Stop_Player(); 
} 

は、関連するクライアントコードである( onResume()があるNPEがスローされます)

:ここ

が.aidlインタフェースである(API 20のように、サービスを開始するときに、明示的な意図を確認する必要があります)
public class PlayerClientMain extends AppCompatActivity 
{ 

    Button button; 
    private AIDLinterface mAIDLinterface; 
    private boolean mIsBound = false; 

    private ServiceConnection mServiceConn = new ServiceConnection() 
    { 

     @Override 
     public void onServiceConnected(ComponentName componentName, IBinder iservice) 
     { 
      Log.v("SERVICE CONNECTED", "SERVICE CONNECTED"); 
      mAIDLinterface = AIDLinterface.Stub.asInterface(iservice); 

      Toast.makeText(getApplicationContext(), "service connected", Toast.LENGTH_SHORT).show(); 

      mIsBound = true; 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName componentName) 
     { 
      Log.v("SERVICE DISCONNECTED", "SERVICE DISCONNECTED"); 
      mAIDLinterface = null; 
      Toast.makeText(getApplicationContext(), "service disconnected", Toast.LENGTH_SHORT).show(); 
      mIsBound = false; 

     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_player_client_main); 
     button = (Button) findViewById(R.id.button); 
    } 


    @Override 
    protected void onResume() 
    { 
     super.onResume(); 

     if (!mIsBound) 
     { 
      boolean b = false; 
      Intent i = new Intent(AIDLinterface.class.getName()); 

      ResolveInfo info = getPackageManager().resolveService(i, Context.BIND_AUTO_CREATE); //this is always null 
      i.setComponent(new ComponentName(info.serviceInfo.packageName, info.serviceInfo.name)); //NPE because info is null 

      b = bindService(i, this.mServiceConn, Context.BIND_AUTO_CREATE); 

      if (b) 
       Log.i("SUCCESS:", "bindService() success!"); 
      else 
       Log.i("FAILURE:", "bindService() failed!"); 
     } 
    } 
} 

とにかく私がbindService()行に到達できないため、サービスコードは関係ありません。何か案は?

答えて

0

私は問題がインテント自体を作成していると思います。

AIDLinterface.classは、サービスクラスであると仮定し、次のような趣旨作成する必要があります。https://developer.android.com/guide/components/services.html

乾杯をご参照ください

Intent i = new Intent(this, AIDLinterface.class); 

を〜

+0

AIDLinterfaceは、サービスクラスではありません。これは、リモートサービスがローカルクライアント(PlayerClient)と通信できるようにするインターフェイスです。 – user3487243

+0

答えをありがとうございますが、これは役に立たなかった。私はもはやNPEを取得しませんが、bindService()はfalseを返します – user3487243

関連する問題