2016-08-10 3 views
-2

私はアンドロイド開発には初めてです。私は連絡先のバックアップアプリを作成しています。どのように連絡先のバックアップアンドロイドでこれは何の作業プロセスは、いくつかを説明してください。この中で、この中で使用されているどのような方法やプロセス は、バックアップのために私にアンドロイドで連絡先を.csvまたは.vcfとしてバックアップする方法

答えて

0

を説明も復元:

  1. 連絡先は、ユーザからの許可を読んで下さい。
  2. 連絡先を1つずつ読み取り、VCFファイルを作成します。復元のために

  1. は、連絡先は、ユーザからの書き込み権限を確認して下さい。
  2. VCFファイルを読み取り、解析します。
  3. VCFファイルの内容に基づいて連絡先を作成します。
+0

ok ...いくつかのprogramticallyしてください – sanjay

1
package com.example.dekrinssoft.contactsbackup; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.res.AssetFileDescriptor; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Environment; 
import android.provider.ContactsContract; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.MimeTypeMap; 
import android.widget.Button; 
import android.widget.Toast; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
Button backup, restore; 
String vfile; 
FileOutputStream mFileOutputStream = null; 
Cursor cursor; 
ArrayList<String> vCard; 
File f; 
String storage_path; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    backup = (Button) findViewById(R.id.btnbkp); 
    restore = (Button) findViewById(R.id.btnres); 

    vfile = "contacts.vcf"; 
    storage_path = Environment.getExternalStorageDirectory().toString() + "/" + vfile; 
    f = new File(storage_path); 


    backup.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      new LongOperation().execute(""); 

     } 
    }); 
    restore.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Intent intent = new Intent(); 

      final MimeTypeMap mime = MimeTypeMap.getSingleton(); 
      String tmptype = mime.getMimeTypeFromExtension("vcf"); 
      final File file = new File(Environment.getExternalStorageDirectory().toString() + "/contacts.vcf"); 

      intent.setDataAndType(Uri.fromFile(file), tmptype); 
      startActivity(intent); 
     } 
    }); 

} 

private class LongOperation extends AsyncTask<String, Void, String> { 

    ProgressDialog progress; 

    @Override 
    protected void onPreExecute() { 
     progress = new ProgressDialog(MainActivity.this); 
     progress.setMessage("Loading.... "); 
     progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progress.setIndeterminate(true); 
     progress.setProgress(0); 
     progress.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      if (!f.exists()) 
       f.createNewFile(); 
      mFileOutputStream = new FileOutputStream(storage_path, false); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     getVcardString(); 
     return "Executed"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(MainActivity.this, " Succesfully backed up", Toast.LENGTH_LONG).show(); 
     progress.dismiss(); 
    } 

} 

private void getVcardString() { 
    vCard = new ArrayList<String>(); 
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    if (cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     for (int i = 0; i < cursor.getCount(); i++) { 

      get(cursor); 
      Log.d("TAG", "Contact " + (i + 1) + "VcF String is" + vCard.get(i)); 
      cursor.moveToNext(); 
     } 

    } else { 
     Log.d("TAG", "No Contacts in Your Phone"); 
    } 
    try { 
     mFileOutputStream.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

public void get(Cursor cursor) { 
    //cursor.moveToFirst(); 
    String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); 
    AssetFileDescriptor fd; 
    try { 
     fd = this.getContentResolver().openAssetFileDescriptor(uri, "r"); 
     FileInputStream fis = fd.createInputStream(); 
     byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
     fis.read(buf); 
     String vcardstring = new String(buf); 
     vCard.add(vcardstring); 

     mFileOutputStream.write(vcardstring.toString().getBytes()); 

    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
} 


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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

これはAndroidの開発にバックアップを連絡するためのコード ある任意の便利な感じ発生したエラーは私に言わせればちょうどダニボタン、 をクリックして、私はあなたたいかどうかをチェックし、それが正常に を実行して走りました。これは私のアプリのリンクです click to see my app

関連する問題