▼Androidメモ▼

Data Backup APIの利用



Data Backup APIを利用するプログラムを作成する。



Backup APIキー
Backup APIキーをGoogleのサイトから取得し、AndroidManifest.xmlに記述。

バックアップのテスト手順 bmgr
操作 コマンド
バックアップ要求の反映 adb shell bmgr run

バックアップ要求の実行の有効・無効

adb shell bmgr enabled true
バックアップ要求 adb shell bmgr backup net.npaka.backupex
リストア実行 adb shell bmgr restore net.npaka.backupex
バックアップデータの削除 adb shell bmgr wipe net.npaka.backupex

ソースコード
BackupEx.java
package net.npaka.backupex;
import android.app.Activity;
import android.app.backup.BackupManager;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

//Data Backup APIの利用
public class BackupEx extends Activity 
    implements View.OnClickListener {
    private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
    private final static int FP=LinearLayout.LayoutParams.FILL_PARENT;
    private EditText editText;
    private BackupManager backupManager;
    
    //アクティビティ起動時に呼ばれる
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //バックアップマネージャの生成
        backupManager=new BackupManager(this);

        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setBackgroundColor(Color.rgb(255,255,255));
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);            
        
        //エディットテキストの生成
        editText=new EditText(this);
        editText.setText("",EditText.BufferType.NORMAL);
        editText.setLayoutParams(new LinearLayout.LayoutParams(FP,WC));
        layout.addView(editText);

        //ボタンの生成
        layout.addView(makeButton("書き込み","write"));
        layout.addView(makeButton("読み込み","read"));
    }
    
    //ボタンの生成
    private Button makeButton(String text,String tag) {
        Button button=new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        return button;
    }

    //ボタンクリック時に呼ばれる
    public void onClick(View v) {
        String tag=(String)v.getTag();
        //プリファレンスへの書き込み
        if (tag.equals("write")) {
            SharedPreferences pref=getSharedPreferences(
                "myData",MODE_PRIVATE);
            SharedPreferences.Editor editor=pref.edit();
            editor.putString("text",editText.getText().toString());
            editor.commit();
            
            //バックアップの要求
            backupManager.dataChanged();
        } 
        //プリファレンスからの読み込み
        else if (tag.equals("read")) {
            SharedPreferences pref=getSharedPreferences(
                "myData",MODE_PRIVATE);
            editText.setText(pref.getString("text",""));
        }
    }
}

MyPrefsBackupAgent.java
package net.npaka.backupex;
import android.app.backup.BackupAgentHelper;
import android.app.backup.SharedPreferencesBackupHelper;

//バックアップエージェント
public class MyPrefsBackupAgent extends BackupAgentHelper {  
    //バックアップエージェント生成時に呼ばれる
     public void onCreate() {  
         SharedPreferencesBackupHelper helper=
             new SharedPreferencesBackupHelper(this,"myData");  
         addHelper("prefs",helper);  
     }  
}  

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.npaka.backupex"
    android:versionCode="1"
    android:versionName="1.0">

    <application 
        android:label="BackupEx"
        android:backupAgent="MyPrefsBackupAgent" 
        android:allowBackup="true">
        <meta-data android:name="com.google.android.backup.api_key"
            android:value="[Backup APIキーをここに入力]" />
        <activity 
            android:name="BackupEx">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8"/>
</manifest>


−戻る−