ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

【挫折】Android 5.0でSDカードのタイムスタンプの変更が出来ない

ファイルマネージャで写真を移動すると、ファイルのタイムスタンプが移動した日になってしまうのに、常々不満を持っていました。

良いアプリを探しましたがありません。

ならば自分で作ってしまえ、と作り始めましたが、ダメです。出来ません。

Android 5.0以降の機種で、SDカードにアクセスする時に、ファイルのタイムスタンプを変更するAPIが用意されていないのです。

インターネットで色々なサイトを見ましたが、載っていません。STACK OVER FLOWにも何人か質問を載せていましたが、オープンのままです。

どないもならんのかいな?

 

 

DatePickerDialogのonDateSetが2回よばれる。

機種依存かもしれないですが、DatePickerDialogのonDateSetが2回よばれる現象が発生しました。

その場合の対処法:

 

DatePickerDialog.OnDateSetListener DateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(android.widget.DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
if (!datePicker.isShown()) {
return;
}
displayCalendarView(year, monthOfYear);

mCallBack.monthChangedCallBack(prevYear, prevMonth, year, monthOfYear);

}
};

 

 下記の部分で、2回目のonDateSetの対処しています。

 

if (!datePicker.isShown()) {
return;
}
 

 こんな対応で良いのか?

 

setTextの文字が途中で切れてしまうとき

textView.setText()で設定した文字が途中で切れてしまうことがありました。

そんな時、

textView.setInputType(InputType.TYPE_CLASS_TEXT); 

 というように、textViewですが、InputTypeをTEXTにしてやったら解決することがあります。

理由は不明ですが・・・。

 

BACKボタンのイベントを取得する

BACKボタンのイベントを取得するには、Activity#onKeyDownを使用します。

 

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
moveTaskToBack(true);
return super.onKeyDown(keyCode, event);
}else{
return super.onKeyDown(keyCode, event);
}
}

 

ナビゲーションバーに戻るボタンを付ける

ActionBarに戻るボタンを設置する。

 

ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

戻るボタンを押したときのイベントはActivity#onOptionsItemSelected()で行う。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}