2013-02-27 40 views
11
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.plus.GooglePlusUtil; 
    import com.google.android.gms.plus.PlusClient; 
    import android.os.Bundle; 
    import android.app.Activity; 
    import android.app.ProgressDialog; 
    import android.content.Intent; 
    import android.content.IntentSender.SendIntentException; 
    import android.util.Log; 
    import android.view.Menu; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.Toast; 

    public class MainActivity extends Activity implements ConnectionCallbacks, 
      OnConnectionFailedListener { 

     private static final int REQUEST_CODE_RESOLVE_ERR = 7; 
     private ProgressDialog mConnectionProgressDialog; 
     private PlusClient mPlusClient; 
     private ConnectionResult mConnectionResult; 
     private String TAG = "GmailLogin"; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      int errorCode = GooglePlusUtil.checkGooglePlusApp(this); 
      if (errorCode != GooglePlusUtil.SUCCESS) { 
       GooglePlusUtil.getErrorDialog(errorCode, this, 0).show(); 
      } else { 

       mPlusClient = new PlusClient.Builder(this, this, this) 
       .setVisibleActivities("http://schemas.google.com/AddActivity", 
       "http://schemas.google.com/BuyActivity").build(); 


       mConnectionProgressDialog = new ProgressDialog(this); 
       mConnectionProgressDialog.setMessage("Signing in..."); 

       Button signInButton = (Button) findViewById(R.id.sign_in_button); 
       signInButton.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 

         if (mConnectionResult == null) { 
          mConnectionProgressDialog.show(); 
         } else { 
          try { 
           mConnectionResult 
             .startResolutionForResult(
               MainActivity.this, 
               REQUEST_CODE_RESOLVE_ERR); 
          } catch (SendIntentException e) { 
           // Try connecting again. 
           mConnectionResult = null; 
           mPlusClient.connect(); 
          } 
         } 
        } 
       }); 
      } 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public void onConnectionFailed(ConnectionResult result) { 
      if (result.hasResolution()) { 
       try { 
        result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); 
       } catch (SendIntentException e) { 
        mPlusClient.connect(); 
       } 
      } 
      // Save the result and resolve the connection failure upon a user click. 
      mConnectionResult = result; 
     } 

     @Override 
     protected void onActivityResult(int requestCode, int responseCode, 
       Intent intent) { 
      if (requestCode == REQUEST_CODE_RESOLVE_ERR 
        && responseCode == RESULT_OK) { 
       mConnectionResult = null; 
       mPlusClient.connect(); 
      } 
     } 

     @Override 
     public void onConnected() { 
      String accountName = mPlusClient.getAccountName(); 
      Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG) 
        .show(); 
     } 

     @Override 
     public void onDisconnected() { 
      Log.d(TAG, "disconnected"); 
     } 

     @Override 
     protected void onStart() { 
      super.onStart(); 
      mPlusClient.connect(); 
     } 

     @Override 
     protected void onStop() { 
      super.onStop(); 
      mPlusClient.disconnect(); 
     } 

     } 

tôi không thể biên dịch mã này vì nó nói:Không thể xây dựng PlusClient

PlusClient.Builder không thể giải quyết cho một loại

tại

mPlusClient = new PlusClient.Builder(this, this, this) 
     .setVisibleActivities("http://schemas.google.com/AddActivity", 
     "http://schemas.google.com/BuyActivity").build(); 

cũng trong onConnected()

tôi nhận được null cho accountName

String accountName = mPlusClient.getAccountName(); 
+0

'Google+ SDK' ?? Tôi hiện đang sử dụng 'google-play-services.jar'. – user1537779

+0

Tôi không thể tìm thấy 'Google+ SDK' trong' Trình quản lý SDK Android '. Bạn có thể cung cấp cho tôi một liên kết và hướng dẫn sẽ tuyệt vời không. – user1537779

+1

Có, xin lỗi tôi đã không rõ ràng về Google+ SDK nằm trong Dịch vụ của Google Play. Bạn đã cập nhật Dịch vụ của Google Play lên phiên bản mới nhất (bản rev 5 hiện tại) chưa? – BrettJ

Trả lời

1

Tôi đã có cùng một vấn đề, vấn đề là tôi đã sử dụng phiên bản cũ của Google Dịch vụ Play. Vì vậy, hãy cập nhật nó lên phiên bản mới nhất. Hãy nhớ rằng phiên bản mới được tải xuống trong thư mục sdk. Nếu trước đó bạn đã nhập google-play-services vào không gian làm việc của mình, bạn phải xóa nó và thêm phiên bản mới

+4

Tôi đã làm điều này nhưng sự cố vẫn tiếp diễn .. –

0

Không thể sử dụng bình. Toàn bộ dự án dịch vụ google play lib cần phải được nhập tức là sao chép từ SDK.

Xem bước 5 của Google+ Quickstart:

5. Import the Google Play Services library project. 

Select File > Import > Android > Existing Android Code Into Workspace and click Next. 
Select Browse.... Enter <android-sdk-folder>/extras/google/google_play_services/. 
Select google-play-services_lib. Click Finish to import. 
+1

Bạn chỉ có thể thực hiện việc này sau khi biên dịch: biên dịch 'com.google.api-client: google-api-client-android: 1.17. +' –

+0

Từ http://developer.android .com/google/play-services/setup.html, Bạn nên tham khảo một bản sao của thư viện mà bạn đã sao chép vào không gian làm việc phát triển của mình — bạn không nên tham khảo thư viện trực tiếp từ thư mục Android SDK. – Robert

10

Nếu ai vẫn còn có vấn đề này: các PlayClient bị phản đối ngay bây giờ. Các "mới" con đường để đi được mô tả ở đây: http://android-developers.blogspot.com/2014/02/new-client-api-model-in-google-play.html

mClient = new GoogleApiClient.Builder(this) 
     .addApi(Drive.API) 
     .addScope(Drive.SCOPE_FILE) 
     .addApi(Plus.API, plusOptions) 
     .addScope(Plus.SCOPE_PLUS_LOGIN) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build(); 
7

Lỗi này là vì PlayClient bị phản đối bây giờ, khi các quốc gia Luigi04.

Là một công trình xung quanh, tôi đã làm việc này bằng cách hạ thấp các phiên bản dịch vụ chơi trong sự phụ thuộc gradle để 'com.google.android.gms:play-services:6.1.71', như đã nói ở đây: https://stackoverflow.com/a/27637059/2161698

Các vấn đề liên quan