今日はAndroidネタです。
Android3.0向けのファイラを作成しているのですが、ファイルをタップするとそれに対応するアプリケーションを起動する機能が欲しくなりました。この機能は、Androidが持っている「インテント」を使うと実現できるようです。
インテントについては下記のページなどを参照してください。
インテントを使うときには、MIMEタイプを指定する必要があるのですが、
ファイル名から自分で拡張子を切り出し、数千個もある拡張子からMIMEタイプを判定するコードは書きたくありません。
幸運な事に、AndroidにはMIMETypeMapという、MIMEのデータベースのようなものがあるので
これを利用して各ファイルのMIMEタイプを判定することができます。
getFileExtensionFromUrlを使って拡張子を取得し、getExtensionFromMimeType(String mimeType)に拡張子を渡すとMIMEタイプが返ってきます。判定できないときもあるので、その場合は別途処理が必要です。
手元では動いているのでたぶん大丈夫。。。
/**
* 渡されたファイル名から、MIMEタイプを返します。
*
*/
private String getMIMEType(String targetFile)
{
String url=URLEncoder.encode(targetFile);
String extention=MimeTypeMap.getFileExtensionFromUrl(url);
String mtype="";
//拡張子を小文字に変換
extention=extention.toLowerCase();
mtype=MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);
if (mtype==null)
{
//ソースコードなどは判定してくれないので自分で判定する
String PLANETEXT="text/plain";
if(
//テキストエディタで開けそうなソースファイルはテキストとして登録
(targetFile.endsWith(".c")) ||
(targetFile.endsWith(".cp")) ||
(targetFile.endsWith(".cpp")) ||
(targetFile.endsWith(".java")) ||
(targetFile.endsWith(".txt")) ||
(targetFile.endsWith(".c++")) ||
(targetFile.endsWith(".sh")) ||
(targetFile.endsWith(".cmake")) ||
(targetFile.endsWith(".ini")) ||
(targetFile.endsWith(".php")) ||
(targetFile.endsWith(".py"))
)
mtype=PLANETEXT;
}
if( mtype==null) mtype="";
return mtype;
}
ではまた。
0 件のコメント:
コメントを投稿