Sincronização com 3G

Bom dia, colegas

Como posso testar se o serviço 3G do smartphone esta ativo, mas NÃO esta funcionando ? no meu caso aparece o ícone 3G mas não navega. E por esse motivo, meu programa antes de mandar o pedido de venda para o webservice, testa se tem conexão. Como a resposta é positivo para o 3G não consegue mandar o pedido mas marcar como se tivesse mandado. Então como faço para testar se tem 3G e se o pacote esta funcionado ?? Lembrando que com o wifi tudo funciona perfeitamente. Segue codigo que uso para testar a conexão

 public static boolean isTemConexao(Context ctx) {
        // recuperar contexto de conexao do servico
        ConnectivityManager connectivityManager=(ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        NetworkInfo networkInfo=null;
        
        if (connectivityManager != null) {
            networkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (!networkInfo.isAvailable()) {
              networkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            }
        }
        return networkInfo  == null ? false : networkInfo.isConnected();                
    }   
agora, codigo do meu programa

    if (Sincronizar.isTemConexao(ctx)) {    // 18/10/2014 Sincronizar.isConectado(ctx)
                    Ped ped = new Ped();
                    ped = dao.getById(idItem);
                    ped.setTransmitido(1);
                
                    List<Peditem> listaPeditem = daoItem.getAll(idItem);
                
                    try {
                        SyncPed taskPed = new SyncPed(ctx, ped, listaPeditem);
                        taskPed.execute();
                
                        if (dao.update(ped)==false) {
                            MensagemUtil.addMsg(PedLista.this, "Erro");
                        }
                    
                    } catch (Exception e) {
                    }