はてなアンドロイド-フォトライフAPI

はてな

はてなアンドロイド-フォトライフAPI

はてなあんどろいどふぉとらいふえ

このページは古い情報を掲載しています

このページの情報は更新されていません。新しい情報は「アンドロイド向けAPI-フォトライフAPI - Hatena Developer Center」に移転しました。


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

本ドキュメントははてなフォトライフ for Android アプリケーションにおけるAPI実装(インテント)を解説するものです。主にはてなスタッフがその作成と更新を行っています。

なお、その他のはてなアンドロイドAPIについては、以下から閲覧ください。

概要

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

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

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

変更履歴

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

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 の公開停止を予告なしに行う場合があります。