実現したいこと
①FTPサーバーからパッケージファイルをダウンロードする
②それを起動させて自アプリ自身をバージョンアップする
前提
Javaで業務用アプリを作っています。
対象環境は Android 10.0 (API 29) のみです。
現時点ではエミュレータでのみテストしています。
FTPサーバーからパッケージファイルをダウンロードして外部ストレージに保存するところまではできています。
(Device File Explorer で該当ファイルが作成されていることを確認済みです。)
発生している問題・エラーメッセージ
ダウンロードされたファイルの情報を Intent に渡して開きたいのですが、エラーも出ずインストーラも立ち上がらず、という状況です。
Android 6.0 (API 23) 向けに作成していた以前のバージョンでは、もう少し簡易的な方法でうまく動いていました。
現在 Android 10.0 (API 29) 向けに改修中です。
問題の箇所ではエラーメッセージは出ないのですが、アプリ起動時に下記のメッセージが出力されます。関係あるでしょうか。
Unknown bits set in runtime_flags: 0x8000
原因や対処法などご教授いただければと思っております。
該当のソースコード
●AndroidManifest.xml(一部抜粋)
XML
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="my.application"> 4 5 <uses-permission android:name="android.permission.INTERNET" /> 6 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 7 8 <application 9 android:requestLegacyExternalStorage="true"> 10 11 <!--中略--> 12 13 <provider 14 android:name="androidx.core.content.FileProvider" 15 android:authorities="${applicationId}.fileprovider" 16 android:grantUriPermissions="true" 17 android:exported="false"> 18 <meta-data 19 android:name="android.support.FILE_PROVIDER_PATHS" 20 android:resource="@xml/provider_paths" /> 21 </provider> 22 </application> 23 24</manifest>
●xml/provider_paths.xml
XML
1<?xml version="1.0" encoding="utf-8"?> 2<paths> 3 <external-files-path 4 name="externalFilesRoot" 5 path="./" /> 6</paths>
●ActivityMain.java(一部抜粋)
Java
1 // FTPサーバーからパッケージファイルを外部ストレージにダウンロード 2 // ftpClient:接続済みのFTPClient 3 File localApkFile = new File(getExternalFilesDir(""), "my_application.apk"); 4 FileOutputStream fos = new FileOutputStream(localApkFile, false); 5 ftpClient.retrieveFile(serverApkFileName, fos); 6 7 // 中略 8 9 // パッケージファイルを開く 10 Intent intent = new Intent(Intent.ACTION_VIEW); 11 Uri uri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".fileprovider", localApkFile); 12 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 13 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 14 intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 15 intent.setDataAndType(uri, "application/vnd.android.package-archive"); 16 startActivity(intent);
試したこと
FTPサーバーからのダウンロード先(localApkFile.getPath())をログ出力したところ、下記のようになっていました。
/storage/emulated/0/Android/data/[パッケージ名]/files/my_application.apk
これは想定通りの動きで、実際に動かす度に上記と下記にパッケージファイルが作成されます。
/sdcard/Android/data/[パッケージ名]/files/my_application.apk
Intent に渡している Uri の内容をログ出力したところ、下記のようになっていました。
content://[パッケージ名].fileprovider/externalFilesRoot/my_application.apk

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。