[メモ]ApkファイルのIntentの投げ方変わったぽい(Nです)
いつも通りとりあえずなメモ。実機はないのでプレビュー版。とりあえずAndroid 7.0 Nougatからファイルの扱いも変わってますよ。んで普通にUri.fromFileで作られたUriはSecurityExceptionされますよ。ここら辺は結構既知な情報ぽいって思ってよい?なのでここはFileProviderで対応しとけばいいよ。もう少し言うとFileProvider.getUriForFileとか使いんさいと割愛。https://developer.android.com/reference/android/support/v4/content/FileProvider.htmlんでタイトルの内容。*コードはIntent先があるかのエラー処理はしてません。今まではこんなんでいけた。File file = new File(path);Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");startActivity(intent);Nougatの場合はsetDataAndTypeのUri部分だけをFileProviderから作ったUriでいけるかなーと思ったらパッケージマネージャー側で落ちる。普通のファイル共有とかだといけるのに。。。んで、パッケージマネージャー側のエラーを見る的にパーミッションさんがないようなのでaddFlagsで一時的に権限をつけないとだめっぽい。*多分普通の共有は共有先が権限もってるから落ちないのかもしれないかも?具体的にはFile file = new File(path);Uri fileURI = FileProvider.getUriForFile(context,"example.my.pkg",file);intent.setDataAndType(fileURI,"application/vnd.android.package-archive");intent.addFlags(//こいつらをつける。Intent.FLAG_GRANT_WRITE_URI_PERMISSION |Intent.FLAG_GRANT_READ_URI_PERMISSION);startActivity(intent);これでインストーラー起動ちゃん。*Intent.FLAG_GRANT_WRITE_URI_PERMISSIONとIntent.FLAG_GRANT_READ_URI_PERMISSIONは上のFileProviderのサイトに記載してあります。これでプレビュー版だと直りましたお(・ω・;)もっといい方法ある?Android6もきついけど7からはもっと権限地獄でございますよ。とりあえずサウンドモードの切替すら権限必要(古いApiでビルドすれば不要)。。音量と音色の変更には権限いらないのにね~。