Android
Google 드라이브 API
수색…
소개
Google 드라이브는 Google에서 만든 파일 호스팅 서비스입니다. 파일 저장 서비스를 제공하며 사용자가 클라우드에서 파일을 업로드하고 다른 사람들과 공유 할 수도 있습니다. Google 드라이브 API를 사용하여 컴퓨터 또는 휴대 기기와 Google 드라이브 클라우드간에 파일을 동기화 할 수 있습니다.
비고
적법한
애플리케이션에서 Google 드라이브 Android API를 사용하는 경우 애플리케이션의 '법적 고지'섹션의 일부로 Google Play 서비스 기여 텍스트를 포함해야합니다.
법적인 공지 사항을 독립적 인 메뉴 항목으로 포함 시키거나 "정보"메뉴 항목의 일부로 포함시키는 것이 좋습니다.
런타임에 GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo()
를 호출하여 속성 텍스트를 가져올 수 있습니다.
Android에 Google 드라이브 통합
Google 개발자 콘솔에서 새 프로젝트 만들기
Android 애플리케이션을 Google 드라이브와 통합하려면 Google Developers Console에서 프로젝트의 자격 증명을 만듭니다. Google 개발자 콘솔에서 프로젝트를 만들어야합니다.
Google 개발자 콘솔에서 프로젝트를 만들려면 다음 단계를 따르십시오.
Android 용 Google 개발자 콘솔 로 이동합니다. 입력란에 프로젝트 이름 을 입력하고 생성 버튼을 클릭하여 Google 개발자 콘솔에서 새 프로젝트를 만듭니다.
API에 액세스하려면 자격 증명을 만들어야합니다. 그러므로 Create credentials 버튼을 클릭하십시오.
Android 용 Google API를 호출하려면 API 키가 필요합니다. Android 키 를 클릭하여 Android 프로젝트를 식별하십시오.
다음으로 API 키를 생성하기 위해 입력 필드에 안드로이드 프로젝트의 패키지 이름과 SHA-1 지문 을 추가해야합니다.
SHA-1 지문 을 생성해야합니다. 따라서 터미널을 열고 Keytool 유틸리티 를 실행하여 SHA1 지문을 얻으십시오. Keytool 유틸리티를 실행하는 동안 키 저장소 비밀번호 를 제공해야 합니다 . 기본 개발 keytool 암호는 "android" 입니다.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
이제 인증 정보 페이지의 입력 필드에 패키지 이름 과 SHA-1 지문 을 추가하십시오. 마지막으로 생성 버튼을 클릭하여 API 키를 생성합니다.
Android 용 API 키가 생성됩니다. 이 API 키를 사용하여 Android 애플리케이션을 Google 드라이브와 통합합니다.
Google 드라이브 API 사용
Google 드라이브 API를 사용하여 Android 애플리케이션에서 Google 드라이브에 저장된 파일에 액세스 할 수 있어야합니다. Google 드라이브 API를 사용하도록 설정하려면 다음 단계를 따르세요.
Google 개발자 콘솔 대시 보드로 이동하여 API 사용 키 를 클릭하면 인기있는 Google API가 표시됩니다.
사용 버튼을 클릭하여 Google 드라이브 API를 사용하도록 설정합니다. 고객이 Google 드라이브에 액세스 할 수 있습니다.
인터넷 사용 권한 추가
앱에 인터넷 액세스 Google 드라이브 파일이 필요합니다. AndroidManifest.xml 파일에서 인터넷 사용 권한을 설정하려면 다음 코드를 사용하십시오.
<uses-permission android:name="android.permission.INTERNET" />
Google Play 서비스 추가
Google 드라이브 Android API 가 포함 된 Google Play 서비스 API 를 사용 합니다 . Android 애플리케이션에 Google Play 서비스 SDK를 설치해야합니다. build.gradle
(앱 모듈) 파일을 열고 Google Play 서비스 SDK를 종속 파일로 추가하십시오.
dependencies {
....
compile 'com.google.android.gms:play-services:<latest_version>'
....
}
매니페스트 파일에 API 키 추가
Android 애플리케이션에서 Google API를 사용하려면 AndroidManifest.xml 파일에 API 키와 Google Play 서비스 버전을 추가해야합니다. AndroidManifest.xml 파일의 태그 안에 정확한 메타 데이터 태그를 추가하십시오.
Google 드라이브 Android API 연결 및 인증
Google 드라이브 Android API 를 인증하고 Android 애플리케이션과 연결해야합니다. Google 드라이브 승인 Android API 는 GoogleApiClient에서 처리합니다. onResume () 메소드 내에서 GoogleApiClient 를 사용합니다.
/**
* Called when the activity will start interacting with the user.
* At this point your activity is at the top of the activity stack,
* with user input going to it.
*/
@Override
protected void onResume() {
super.onResume();
if (mGoogleApiClient == null) {
/**
* Create the API client and bind it to an instance variable.
* We use this instance as the callback for connection and connection failures.
* Since no account name is passed, the user is prompted to choose.
*/
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
mGoogleApiClient.connect();
}
Google Deive Android API 연결 끊기
활동이 중지되면 활동의 onStop () 메소드 내부에서 disconnect () 메소드를 호출하여 Android 애플리케이션과 Google 드라이브 Android API 연결을 끊습니다 .
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient != null) {
// disconnect Google Android Drive API connection.
mGoogleApiClient.disconnect();
}
super.onPause();
}
연결 콜백 및 연결 실패 리스너 구현
MainActivity.java 파일에 Google API 클라이언트의 연결 콜백 및 연결 실패 수신기를 구현하여 Google API 클라이언트의 연결 상태를 알 수 있습니다. 이 리스너는 onConnected (), onConnectionFailed (), onConnectionSuspended () 메소드를 제공하여 app과 Drive 사이의 연결 문제를 처리합니다.
사용자가 애플리케이션을 승인하면 onConnected () 메소드가 호출됩니다. 사용자가 애플리케이션을 승인하지 않으면 onConnectionFailed () 메소드가 호출되고 앱에 Google 드라이브에 액세스하도록 승인되지 않은 대화 상자가 표시됩니다. 연결이 일시 중단 된 경우 onConnectionSuspended () 메서드가 호출됩니다.
액티비티에 ConnectionCallbacks 및 OnConnectionFailedListener 를 구현해야합니다. Java 파일에서 다음 코드를 사용하십시오.
@Override
public void onConnectionFailed(ConnectionResult result) {
// Called whenever the API client fails to connect.
Log.i(TAG, "GoogleApiClient connection failed:" + result.toString());
if (!result.hasResolution()) {
// show the localized error dialog.
GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
return;
}
/**
* The failure has a resolution. Resolve it.
* Called typically when the app is not yet authorized, and an authorization
* dialog is displayed to the user.
*/
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
} catch (SendIntentException e) {
Log.e(TAG, "Exception while starting resolution activity", e);
}
}
/**
* It invoked when Google API client connected
* @param connectionHint
*/
@Override
public void onConnected(Bundle connectionHint) {
Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
}
/**
* It invoked when connection suspended
* @param cause
*/
@Override
public void onConnectionSuspended(int cause) {
Log.i(TAG, "GoogleApiClient connection suspended");
}
Google 드라이브에 파일 만들기
Google 드라이브에 파일을 추가합니다. Drive
객체의 createFile()
메소드를 사용하여 Google 드라이브에서 프로그래밍 방식으로 파일을 만듭니다. 이 예에서는 사용자의 루트 폴더에 새 텍스트 파일을 추가합니다. 파일이 추가되면 메타 데이터, 파일 내용 및 상위 폴더의 초기 세트를 지정해야합니다.
CreateMyFile()
콜백 메서드를 CreateMyFile()
메서드 내에서 Drive
개체를 사용하여 DriveContents
리소스를 검색해야합니다. 그런 다음 API 클라이언트를 Drive
객체에 전달하고 driveContentsCallback
콜백 메소드를 호출하여 DriveContents
결과를 처리합니다.
DriveContents
리소스에는 응용 프로그램에서만 사용할 수있는 파일의 이진 스트림 임시 복사본이 들어 있습니다.
public void CreateMyFile(){
fileOperation = true;
// Create new contents resource.
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(driveContentsCallback);
}
DriveContents의 결과 핸들러
응답을 처리하려면 호출이 성공했는지 여부를 확인해야합니다. 호출이 성공하면 DriveContents
자원을 검색 할 수 있습니다.
우리는 DriveContents
의 결과 핸들러를 생성 할 것입니다. 이 메서드 내에서 CreateFileOnGoogleDrive()
메서드를 호출하고 DriveContentsResult
의 결과를 전달합니다.
/**
* This is the Result result handler of Drive contents.
* This callback method calls the CreateFileOnGoogleDrive() method.
*/
final ResultCallback<DriveContentsResult> driveContentsCallback =
new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult result) {
if (result.getStatus().isSuccess()) {
if (fileOperation == true){
CreateFileOnGoogleDrive(result);
}
}
}
};
프로그래밍 방식으로 파일 만들기
파일을 만들려면 MetadataChangeSet
객체를 사용해야합니다. 이 개체를 사용하여 제목 (파일 이름)과 파일 형식을 설정합니다. 또한 DriveFolder
클래스의 createFile()
메소드를 사용하고 Google 클라이언트 API, MetaDataChangeSet
객체 및 driveContents
를 전달하여 파일을 만들어야합니다. 결과 핸들러 콜백을 호출하여 생성 된 파일의 결과를 처리합니다.
다음 코드를 사용하여 사용자의 루트 폴더에 새 텍스트 파일을 만듭니다.
/**
* Create a file in the root folder using a MetadataChangeSet object.
* @param result
*/
public void CreateFileOnGoogleDrive(DriveContentsResult result){
final DriveContents driveContents = result.getDriveContents();
// Perform I/O off the UI thread.
new Thread() {
@Override
public void run() {
// Write content to DriveContents.
OutputStream outputStream = driveContents.getOutputStream();
Writer writer = new OutputStreamWriter(outputStream);
try {
writer.write("Hello Christlin!");
writer.close();
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("My First Drive File")
.setMimeType("text/plain")
.setStarred(true).build();
// Create a file in the root folder.
Drive.DriveApi.getRootFolder(mGoogleApiClient)
.createFile(mGoogleApiClient, changeSet, driveContents)
setResultCallback(fileCallback);
}
}.start();
}
생성 된 파일의 결과 처리
다음 코드는 생성 된 파일의 결과를 처리 할 콜백 메서드를 만듭니다.
/**
* Handle result of Created file
*/
final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
ResultCallback<DriveFolder.DriveFileResult>() {
@Override
public void onResult(DriveFolder.DriveFileResult result) {
if (result.getStatus().isSuccess()) {
Toast.makeText(getApplicationContext(), "file created: "+
result.getDriveFile().getDriveId(), Toast.LENGTH_LONG).show();
}
return;
}
};