Hatena::Grouphatenadeveloper

Android向けAPI-フォトライフAPI

ja/android/apis/fotolife

「はてなフォトライフ」Android アプリケーションは 2016年4月18日をもって提供を停止いたしました。それに伴い、本APIについてもサポートを終了しております。ご注意いただきますようお願い申し上げます。

Androidアプリ「はてなフォトライフ for Android」 の提供を終了しました - はてなフォトライフ日記 - 機能変更、お知らせなど

Android向けAPI-フォトライフAPI

本ドキュメントに関する注意事項

本ドキュメントははてなフォトライフ for Android アプリケーションにおけるAPI実装(インテント)を解説するものです。

なお、その他のはてなのAndroid向けAPIについては、以下から閲覧ください。

概要

はてなフォトライフ for Android は外部アプリケーションからはてなフォトライフへのアップロードを簡単にできるためのAPIを提供します。

なお、はてなフォトライフ for Android バージョン 1.1.0 から利用できる機能となります。

Android マーケットからは「はてなフォトライフ」と検索することでインストールできる他、以下の QR コードを読みとることでインストールが可能です。

  • market://search?q=pname:com.hatena.android.fotolife

共有によるアップロードインテント仕様

Intent.ACTION_SEND ("android.intent.action.SEND") によるもので、通常「共有」などから呼びだされるインテントです。アップロードの完了を待たず、サービスによりバックグラウンドでアップロードされます。

action
Intent.ACTION_SEND ("android.intent.action.SEND")
mimeType
image/jpeg
Intent.EXTRA_STREAM
アップロードするリソースのURI (Uri 型)、ローカルアクセスできる必要あり

また、デフォルトのタイトル・タグを指定することができます。

title
タイトル
tags
[tag] 形式のタグ

サンプルコード

Uri target = ...;
startActivity(
    new Intent(Intent.ACTION_SEND).setType("image/jpeg")
        .putExtra(Intent.EXTRA_STREAM, target)
        .putExtra("title", "Hello!")
        .putExtra("tags", "[foo][bar]")
        .putExtra("folder", "Sample Folder!"));

startActivityForResult 用アップロードインテント仕様

共有によるアップロードインテント仕様とほぼ同じですが、アクション名が違い、アップロードが終わるまで待つことができます。アップロード中はプログレスダイアログが表示されます。

action
"com.hatena.android.fotolife.ACTION_UPLOAD"
mimeType
image/jpeg
Intent.EXTRA_STREAM
アップロードするリソースのURI (Uri 型)、ローカルアクセスできる必要あり

また、デフォルトのタイトル・タグを指定することができます。

title
タイトル
tags
[tag] 形式のタグ

サンプルコード

以下は標準の「ギャラリー」から写真を選び、はてなフォトライフ for Android に写真をアップロードさせ、アップロードが完了し次第、フォトライフの URL を取得するサンプルです。

Intent.ACTION_SEND の変わりに "com.hatena.android.fotolife.ACTION_UPLOAD" を、startActivity の変わりに startActivityForResult を使うことで、アップロード完了まで待つことができます。

package com.example;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;

public class Test extends Activity {
    private static final int PICK_PHOTO = 1;
    private static final int UPLOAD_PHOTO = 2;

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

        startActivityForResult(
            new Intent(Intent.ACTION_PICK).setType("image/jpeg"),
            PICK_PHOTO
        );
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case PICK_PHOTO:
            if (resultCode == RESULT_OK) {
                Uri target = data.getData();
                startActivityForResult(
                    new Intent("com.hatena.android.fotolife.ACTION_UPLOAD").setType("image/jpeg")
                        .putExtra(Intent.EXTRA_STREAM, target)
                        .putExtra("title", "Hello!")
                        .putExtra("tags", "[test]")
                        .putExtra("folder", "Sample Folder!"),
                    UPLOAD_PHOTO
                );
            }
            break;
        case UPLOAD_PHOTO:
            if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                String hatenasyntax = data.getStringExtra("hatenasyntax");
                Toast.makeText(this, String.format("callback: %s, %s", hatenasyntax, uri.toString()), Toast.LENGTH_LONG).show();
            }
            break;
        }
    }
}

サンプルアプリケーション

ギャラリーから選択し、フォトライフからアップロードするサンプルアプリケーションです。

ご利用にあたっての注意事項

本APIを利用されるにあたっては、以下の点にご注意ください。

  • 本APIは実験的に公開されているものであり、API の仕様変更ならびに API の公開停止を予告なしに行う場合があります。

変更履歴

  • 2010年2月10日 アップロードAPIにフォルダを指定できる機能を追加
  • 2010年2月5日 アップロードAPIに startActivityForResult 用の機能を追加