hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

読書尚友のAndroid 7.0対応について

Google Developer Consoleで読書尚友のAndroid OS別のシェアを見ると、7.0 nougatのシェアがいつのまにか15%まで増えていた。
現在使用しているASUS Zenfone 3 laserは、海外では4月から7.0の配信が始まっているが、国内ではいつ配信が始まるのか全くわからない。もちろんAndroid Studioエミュレータで7.0を試すことはできるのだが、どうしても実機で確認しないと一抹の不安が残る。
無駄な買い物だとは思ったが、一足先にAndroid 7.0 アップデートが始まったhuawei P9 liteを買ってしまった。
実機で検証したところ、やはり修正が必要な箇所が見つかった。(Android 7.0のリリースノートにも書いてあるが)7.0からは file:// をつかったIntentによるファイル共有が禁止されており、FileProvider経由でURIを取得しないといけない(この場合、content://で始まるuriがIntentで渡される)。

Andorid 7.0での正しいファイル共有:

	//インテントを生成
	Intent intent = new Intent(Intent.ACTION_VIEW);
	Uri uri;
	if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.N ) {
		uri = Uri.fromFile(new File(strFilePath));
	}
	else {
		uri = FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".provider", new File(strFilePath));
	}
	//拡張子
	String extention = MimeTypeMap.getFileExtensionFromUrl(strFilePath);
	// mimetypeを取得
	String mimetype =MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);
	if ( mimetype != null ) {
		intent.setDataAndType(uri, mimetype);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
				| Intent.FLAG_GRANT_READ_URI_PERMISSION);
		startActivity(intent);
	}

AndroidManifests.xml

	
		
	

provider_paths.xml

	
	
		
	

さて、首尾よく実機検証ができたのはいいけれど、手元には性能の似通ったASUS Zenfone 3 laserと P9 liteが残ってしまった。
ここはAndroid 7.0のP9 liteを残してZenfone 3 laserを売却しようと思っていたが、どうもメモリが4GBのZenfone 3 laserのほうが動作が軽く感じる。また、個体差かもしれないが、Zenfone 3 lazerのほうが発色がいい。
考えた末、海外でAndroid 7.0 が出ている以上、日本でもいずれ配信されることを信じて、Zenfone 3 lazerのほうを残してP9 liteを売却することにした。
P.S.
2017/6/23にZenfone 3 laser のAndroid 7.0 Nougatアップデートが始まりました。 待っていた甲斐があった。非常に快適で特にトラブルなし。