アプリ作って海外移住

コピペプログラマーのメモ

PDF表示

フルパスが必要

// Intent
を生成
Intent intent = new Intent(Intent.ACTION_VIEW);
//パスを設定。
String data = "file://"+path;///mnt/sdcard/document.pdf";
intent.setDataAndType(Uri.parse(data), "application/pdf");
// 別タスクとして実行
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// Start
startActivity(intent);

file path から content のuri 取得するには、

Cursor c =
callingActivity.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//uri,
null, // 項目(null 全項目)
MediaStore.Images.ImageColumns.DATA + " = ?",// フィルタ条件(null フィルタなし)
new String[]{path},// フィルタ用パラメータ
null);
c.moveToFirst();
String id = c.getString(c.getColumnIndex("_id"))+"";
uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + id);
c.close();

PDF googledrive から読み込み ダウンロード

 

 

public void setList3Ko(Intent data, ArrayList<Dclass_ko> list3Ko, MainActivity s_callingActivity) {

callingActivity = s_callingActivity;
Resources r = callingActivity.getResources();
dummyPdf = BitmapFactory.decodeResource(r, R.drawable.pdf);

Uri uri = data.getData();//contentの場合content://media/external/images/media/8872
//fileの場合 file:///storage/sdcard1/DCIM/Camera/IMG_20151201_123714.jpg
//googledrive content://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D132
String struri = uri+"";
// Uri uri2 = Uri.parse(struri);

String scheme =uri.getScheme();//contentの場合content
if(scheme.equals("content")){
selected_pdf_content(uri,list3Ko);

}else {
//sorry dialog
}

}

private void selected_pdf_content(Uri uri, ArrayList<Dclass_ko> list3Ko) {
//tanmatu path
//drive daunnro-do save
//---------------------------------------------------
// uri.getAuthority(); = content の場合
//
// path; displayName; mimeType; get
///-------------------------------------------------
Cursor c2 =
callingActivity.getContentResolver().query(uri, null, null, null, null);
c2.moveToFirst();


String s =c2.getColumnNames ();
int j = s.length;
String s0 = s[0];
String s1 = s[1];
String s2 = s[2];
String s3 = s[3];
String s4 = s[4];
String s5 = s[5];
String s6 = s[6];
String s7 = s[7];
// String s8 = s[8];

String ss0 = c2.getString(0)+"";
String ss1 = c2.getString(1)+"";
String ss2 = c2.getString(2)+"";
String ss3 = c2.getString(3)+"";
String ss4 = c2.getString(4)+"";
String ss5 = c2.getString(5)+"";
String ss6 = c2.getString(6)+"";
String ss7 = c2.getString(7)+"";

 

String path;
String displayName;
String mimeType;
Bitmap bmp = null;
String storageKbn = "";


if(c2.getColumnIndex("_data")==-1){
path ="";

}else{
path = c2.getString(c2.getColumnIndex("_data"))+"";
}
if(c2.getColumnIndex("_display_name")==-1){
displayName ="";

}else{
displayName = c2.getString(c2.getColumnIndex("_display_name"))+"";
}
if(c2.getColumnIndex("mime_type")==-1){
mimeType ="";

}else{
mimeType = c2.getString(c2.getColumnIndex("mime_type"))+"";
}

c2.close();


if (path.length() ==0) {//googledrive uriからpdfをダウンロード


InputStream is = null;
//ここで取り出し
try {
is = callingActivity.getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
File outFile=new File(MainActivity.E1N_STORAGE+"/"+displayName);
OutputStream os = null;
try {
os = new FileOutputStream(outFile);

final int buffer_size = 1024;
try {
byte bytes = new byte[buffer_size];
for (;;) {
int count = is.read(bytes, 0, buffer_size);
if (count == -1)
break;
os.write(bytes, 0, count);
}

storageKbn =MainActivity.STORAGE_KBN_GOOGLEDRIVE;
bmp =dummyPdf;
} catch (Exception ex) {
}

 

} catch (FileNotFoundException e) {
e.printStackTrace();
}

 

}else{//tanmatu
storageKbn =MainActivity.STORAGE_KBN_TANMATSU;
bmp =dummyPdf;
}

/////////////////msgtb list3list 更新
String Item2=MainActivity.MSGTB_KBN_PDF;//kbn1 0text 1 gazou 2 pdf 3text 4video 5audio
String Item3=mt.getyyyymmddhhmm();//yyyymmddhhmm
String Item4="0000000000";//flag10
String Item5=displayName;//"";//struri;//msg
String Item6=path;//path
Uri Item7=uri;//uri
Bitmap Item8 = bmp;//bitmap
String Item9= storageKbn;//path

int index = dbioMsgTb2.addNewMsg(callingActivity,Item2,Item3,Item4,Item5,Item6,Item7+"",Item9);//save msg
int Item1=index;
list3Ko.add(new Dclass_ko(
Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8, Item9));

 

 

 

 

 

}

クリックイベントにはダブルクリック防止処理が必要

 

 

view.tv_undo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!CommonUtils.isClickEvent()) return;
list3Oya.get(position).set10FlgUndo("0");
adapter.notifyDataSetChanged();

}
});

 

 

 

 

public class CommonUtils {

/** クリック連打制御時間(ミリ秒) */
private static final long CLICK_DELAY = 2000;
/** 前回のクリックイベント実行時間 */
private static long mOldClickTime;

 

public static boolean isClickEvent() {

/**
* クリックイベントが実行可能か判断する。
* @return クリックイベントの実行可否 (true:可, false:否)
*/

// 現在時間を取得する
long time = System.currentTimeMillis();

// 一定時間経過していなければクリックイベント実行不可
if (time - mOldClickTime < CLICK_DELAY) {
return false;
}

// 一定時間経過したらクリックイベント実行可能
mOldClickTime = time;
return true;
}

 

}

画像をダウンロードしても、ContentResolverが認識しない。 galleryに表示されない。

 

端末を再起動しないと更新されない。

強制的に更新。

 

 

 

ContentValues values = new ContentValues();
ContentResolver contentResolver = cx.getContentResolver();
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data", path); // 画像の保存されたフルパス
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

 

"_data"だけ更新したら、ほかの項目も付加された。