2016/03/18
m2ts ファイルを無劣化で mov に変換する方法
AVCHD で保存した動画を一気に変換する必要があったのでメモ。
プログラム全般、無節操に手を出しまくってみる
このブログに [marked.js](https://github.com/chjj/marked) を適用して [Markdown でブログを書ける](https://kokufu.blogspot.jp/2016/03/blogger-markdown-blockquote.html)ようにしました。
marked.js は Code Highlighter に任意のライブラリを使用できるよう設計されている素晴らしい!ので、これまで通り[SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/) を使えるようにしました。
[marked.js](https://github.com/chjj/marked)
を使用すれば Blogger でも Markdown で記事が書けそうなので、ちょっとやってみました。
> 参考
> [BloggerでMarkdown書けるようにした。 - Qiita](http://qiita.com/her0m31/items/1804bdc251a647e0e9a8)
ただ、そのままだと Blockquote が上手く処理できず、ちょっと工夫してやる必要があったので書いておきますこの記事も Markdown で書いているので、「参考」の部分がきちんとレンダリングされていればうまくいっている証拠。
AdView まわりが参照を握っている様子。AdView しかないアプリを作って動作を確認してみることにしました。
android.permission.WRITE_EXTERNAL_STORAGE と android.permission.READ_EXTERNAL_STORAGE は許可を動的に取得してもすぐに反映されないので注意が必要です。sdcard_rw というグループへのアクセス許可があるかどうかを Linux Kernel が判断しています。そして、実行中のプロセスに関しては設定が反映されませんAndroid OS の動作が今後変わる可能性はありますが。onResume など使用する直前にパーミッションを確認します。
@Override
protected void onResume() {
super.onResume();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS_WRITE_EXTERNAL_STORAGE);
}
}
WRITE_EXTERNAL_STORAGE への許可がない場合、以下のようにユーザへ許可を求めるダイアログが表示されます。onRequestPermissionsResult で返ってくるので、対応を決めます。一般的なパーミッションだとそのまま処理を続行することになりますが、Storage 系のパーミッションの場合、以下のように アプリの再起動をして設定を反映させますActivity ではなくアプリプロセスの再起動が必要です。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_PERMISSIONS_WRITE_EXTERNAL_STORAGE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 許可された場合
// 設定を反映させるためにアプリを再起動
Intent activityIntent = new Intent(this, ThisActivity.class); // 自Activity を指定
int pendingIntentId = 1;
PendingIntent pendingIntent = PendingIntent.getActivity(this, pendingIntentId, activityIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)getSystemService(ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
System.exit(0);
} else {
// 許可されなかった場合
// TODO エラーメッセージを表示して Activity を終了させる等
}
break;
default:
// Do nothing
break;
}
}
アプリケーション開発から組み込みまで手を出しているフリーランスのエンジニア
何故か C,C++ の仕事をすることが多いけど、本当は Java や C# が好き
最近は Android がらみ多し