2015-01-16 4 views
0

В настоящее время я пытаюсь интегрировать возможность обмена фотографиями в Google и в приложении Glass. Я следовал инструкциям интеграции для интеграции Google Plus платформы Android здесь: https://developers.google.com/+/mobile/android/getting-startedОшибка при внедрении Google+ со стеклом GDK

Я прошел через реализацию функции акций: https://developers.google.com/+/mobile/android/share/

, а также совместное использование средств массовой информации (я просто хочу поделиться любой фотографией из устройство с надписью по умолчанию): https://developers.google.com/+/mobile/android/share/media

Я активировал приложение google под консолью разработчика Google, а также импортировал сервисы Google Play в студию android. Я постоянно получать ошибки, которые вовлекают не обладающие активностью для обработки намерения:

01-16 12:29:40.447 30140-30140/com.example.sarahwever.sharemedia2pt0 E/InputEventSender﹕ Exception dispatching finished signal. 
01-16 12:29:40.447 30140-30140/com.example.sarahwever.sharemedia2pt0E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback 
01-16 12:29:40.470 30140-30140/com.example.sarahwever.sharemedia2pt0 E/MessageQueue-JNI﹕ android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND typ=text/plain flg=0x1 (has clip) (has extras) } 

и

01-16 12:29:40.478 30140-30140/com.example.sarahwever.sharemedia2pt0 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.sarahwever.sharemedia2pt0, PID: 30140 
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND typ=text/plain flg=0x1 (has clip) (has extras) } 

Я позволил следующее в своем манифесте:

<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT"/> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 

И вот код в моей основной деятельности:

import com.google.android.glass.media.Sounds; 
import com.google.android.glass.widget.CardBuilder; 
import com.google.android.glass.widget.CardScrollAdapter; 
import com.google.android.glass.widget.CardScrollView; 

import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.media.AudioManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; 
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.plus.Plus; 
import com.google.android.gms.plus.PlusClient; 
import com.google.android.gms.plus.PlusShare; 

/** 
* An {@link Activity} showing a tuggable "Hello World!" card. 
* <p/> 
* The main content view is composed of a one-card {@link CardScrollView} that provides tugging 
* feedback to the user when swipe gestures are detected. 
* If your Glassware intends to intercept swipe gestures, you should set the content view directly 
* and use a {@link com.google.android.glass.touchpad.GestureDetector}. 
* 
* @see <a href="https://developers.google.com/glass/develop/gdk/touch">GDK Developer Guide</a> 
*/ 
public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

    public static String TAG = "MainActivity"; 

    /** 
    * {@link CardScrollView} to use as the main content view. 
    */ 
    private CardScrollView mCardScroller; 

    private View mView; 

    /* Request code used to invoke sign in user interactions. */ 
    private static final int RC_SIGN_IN = 0; 

    /* Client used to interact with Google APIs. */ 
    private GoogleApiClient mGoogleApiClient; 

    /* A flag indicating that a PendingIntent is in progress and prevents 
    * us from starting further intents. 
    */ 
    private boolean mIntentInProgress; 

    private static final int REQ_SELECT_PHOTO = 1; 
    private static final int REQ_START_SHARE = 2; 
    final private String mPicDir = Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM + "/Camera/*"; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this) 
       .addConnectionCallbacks(MainActivity.this) 
       .addOnConnectionFailedListener(MainActivity.this) 
       .addApi(Plus.API) 
       .addScope(Plus.SCOPE_PLUS_LOGIN) 
       .build(); 

     mView = buildView(); 

     mCardScroller = new CardScrollView(MainActivity.this); 
     mCardScroller.setAdapter(new CardScrollAdapter() { 
      @Override 
      public int getCount() { 
       return 1; 
      } 

      @Override 
      public Object getItem(int position) { 
       return mView; 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       return mView; 
      } 

      @Override 
      public int getPosition(Object item) { 
       if (mView.equals(item)) { 
        return 0; 
       } 
       return AdapterView.INVALID_POSITION; 
      } 
     }); 
     // Handle the TAP event. 
     mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       // Plays disallowed sound to indicate that TAP actions are not supported. 
       AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
       am.playSoundEffect(Sounds.SUCCESS); 

       Intent shareIntent = new PlusShare.Builder(MainActivity.this) 
         .setType("text/plain") 
         .setText("Welcome to the Google+ platform.") 
         .setContentUrl(Uri.parse("https://developers.google.com/+/")) 
         .getIntent(); 

       startActivityForResult(shareIntent, 0); 

       Intent photoPicker = new Intent(Intent.ACTION_PICK); 
       photoPicker.setType("video/*, image/*"); 
       startActivityForResult(photoPicker, REQ_SELECT_PHOTO); 
      } 
     }); 
     setContentView(mCardScroller); 
    } 

    protected void onStart() { 
     super.onStart(); 
     mGoogleApiClient.connect(); 
    } 

    protected void onStop() { 
     super.onStop(); 

     if (mGoogleApiClient.isConnected()) { 
      mGoogleApiClient.disconnect(); 
     } 
    } 

    public void onConnectionFailed(ConnectionResult result) { 
     if (!mIntentInProgress && result.hasResolution()) { 
      try { 
       mIntentInProgress = true; 
       startIntentSenderForResult(result.getResolution().getIntentSender(), 
         RC_SIGN_IN, null, 0, 0, 0); 
      } catch (IntentSender.SendIntentException e) { 
       // The intent was canceled before it was sent. Return to the default 
       // state and attempt to connect to get an updated ConnectionResult. 
       mIntentInProgress = false; 
       mGoogleApiClient.connect(); 
       Log.d(TAG, "did not connect"); 
      } 
     } 
    } 

    public void onConnected(Bundle connectionHint) { 
     // We've resolved any connection errors. mGoogleApiClient can be used to 
     // access Google APIs on behalf of the user. 
    } 

    protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
     if (requestCode == RC_SIGN_IN) { 
      mIntentInProgress = false; 

      if (!mGoogleApiClient.isConnecting()) { 
       mGoogleApiClient.connect(); 
      } 
     } 

     super.onActivityResult(requestCode, responseCode, intent); 

     if(requestCode == REQ_SELECT_PHOTO) { 
      if(responseCode == RESULT_OK) { 
       Uri selectedImage = intent.getData(); 
       ContentResolver cr = MainActivity.this.getContentResolver(); 
       String mime = cr.getType(selectedImage); 

       PlusShare.Builder share = new PlusShare.Builder(MainActivity.this); 
       share.setText("Sarah RULEZ!"); 
       share.addStream(selectedImage); 
       share.setType(mime); 
       startActivityForResult(share.getIntent(), REQ_START_SHARE); 
      } 
     } 
    } 

    public void onConnectionSuspended(int cause) { 
     mGoogleApiClient.connect(); 
    } 

     @Override 
    protected void onResume() { 
     super.onResume(); 
     mCardScroller.activate(); 
    } 

    @Override 
    protected void onPause() { 
     mCardScroller.deactivate(); 
     super.onPause(); 
    } 

    private View buildView() { 
     CardBuilder card = new CardBuilder(MainActivity.this, CardBuilder.Layout.TEXT); 

     card.setText(R.string.hello_world); 
     Log.d(TAG, "hello world"); 
     return card.getView(); 
    } 


} 

Я также тестирую весь свой код на самом стеклянном устройстве, на котором установлен и работает Google Plus. Мне интересно, возможно ли, что проблема связана с различиями между использованием Android и тем, что отсутствует в GDK? Я искал всюду и, похоже, не могу найти помощь в реализации этой роли в google plus. Единственный пример, который я могу найти в документации GDK, использует интерфейс Mirror API, который я не хочу использовать. Любая помощь будет принята с благодарностью !!!!

ответ

1

На данный момент GDK еще не поддерживает отправку и передачу действий.

Был отправлен запрос функции here и here.

Также услуги Google Play еще не доступны в Glass.

См. this issue и Why is Glass missing Google Play Services?.

Извините, я думаю, что ваша идея невозможна на момент написания этой статьи.

+1

Обратите внимание, что с движением Google Glass из «Программы проводника» ... мы можем или не можем получать обновления для GDK. – ErstwhileIII