2010-12-14 85 views
0

嗨再次 已经让我的头在让这个工作3天了。 当我在共享菜单中选择图片时,serviceBinder始终为NULL。 我用LogCat进行调试,步进代码..并且看不到明显的错误。此外,bindService返回false。我有一个服务课,但认为这个hickup就在这里。 请指点我正确的方向!Newbe需要指向正确的方向

package com.example.ptpp; 

public class ServicesDemo extends Activity { 

private MyService serviceBinder = null; 
private static final String TAG = "ServicesDemo"; 
boolean mIsBound; 
ServiceConnection mConnection = null; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    startService(new Intent(this, MyService.class)); 

    Intent intent = getIntent(); 
    Bundle extras = intent.getExtras(); 
    final String mimeType = intent.getType(); 
    String action = intent.getAction(); 

    mConnection = new ServiceConnection() { 

    public void onServiceConnected(ComponentName className, IBinder service) { 
    serviceBinder = ((MyService.MyBinder) service).getService(); 
    } 
    public void onServiceDisconnected(ComponentName className) { 
    serviceBinder = null; 
    } 
    }; 

    Intent bindIntent = new Intent(ServicesDemo.this, MyService.class); 
    bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); 
    mIsBound = true; 

    if (Intent.ACTION_SEND.equals(action)) { 
    if (extras.containsKey(Intent.EXTRA_STREAM)) { 
    Uri uri = (Uri)extras.getParcelable(Intent.EXTRA_STREAM); 
    try { 
    if(serviceBinder != null) 
    // here i call my service to do stuff with the 
             //picture i got from "share" menu 
    serviceBinder.addAttachment(mimeType, uri, false); 
    } catch (UnknownHostException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return; 
    } else if (extras.containsKey(Intent.EXTRA_TEXT)) { 

    return; 
    } 
    } 
} 
void doUnbindService() { 
    if (mIsBound) { 
    // Detach our existing connection. 
    unbindService(mConnection); 
    mIsBound = false; 
    } 
} 

protected void onDestroy() { 
    super.onDestroy(); 
    doUnbindService(); 
} 
} 

package com.example.ptpp;

公共类的MyService延伸服务{

private static final String TAG = "MyService"; 

private final IBinder binder = new MyBinder(); 
private ServicesDemo callingActivity = null; 

public void setActivity(ServicesDemo i) { 
    callingActivity = i; 
} 
public IBinder onBind(Intent intent) { 
    return binder; 
} 

public class MyBinder extends Binder { 
    MyService getService() { 
     return MyService.this; 
    } 
} 

public void onCreate() { 

} 

public void onDestroy() { 


} 

public void onStart(Intent intent, int startid) { 

} 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    return START_STICKY; 
} 

public void addAttachment(String mimeType, Uri uri, boolean b) throws UnknownHostException, IOException { 

} 

}

+0

对不起格式错误,但它很好,当我把它。 而我真的很喜欢android,但Java对我来说并不陌生 – Erik 2010-12-14 21:04:13

回答

0

的问题就在这里:

bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); 
    mIsBound = true; 

绑定到一个服务是异步的。在调用bindService()返回后,不保证被绑定。

+0

服务内部发生了什么,我认为服务是同步的。 – Erik 2010-12-14 21:36:19

+0

服务内部运行的代码在主线程上运行,但服务的创建是异步的。这就是为什么有onBind()回调。 – Falmarri 2010-12-14 21:40:17

+0

我的计划是当我开始手机拍照时。图片是 默默发送到我的电脑回家。像备份思考..! 此外,图片保存在手机上正常。我认为这是一个不错的小项目。如果服务或其他更好使用 – Erik 2010-12-14 21:42:59