2016-09-05 20 views
5

を使用しているとき、私はカスタムの自動ダウンロードを持っており、それがこの私のアプリではFileProvider

// auto register for the complete download 
    activity.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 



// Download the file through DownloadManager 
String destination = Environment.getExternalStorageDirectory() + "/"; 
    String fileName = "myfile.apk"; 
    destination += fileName; 
    final Uri uri = Uri.parse("file://" + destination); 
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apkUrl)); 
    request.setDescription("description"); 
    request.setTitle("title"); 
    request.setDestinationUri(uri); 
    final DownloadManager manager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE); 
    final long downloadId = manager.enqueue(request); 

onComplete = new BroadcastReceiver() { 
     public void onReceive(Context ctxt, Intent intent) { 

      Intent install = new Intent(Intent.ACTION_VIEW); 
      // BEFORE working doing this 
      //install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      //install.setDataAndType(uri, 
      // manager.getMimeTypeForDownloadedFile(downloadId)); 

      // Using file provider it doesnt work 
      Uri apkUri = FileProvider.getUriForFile(AutoUpdate.this, 
       "com.myapp", file); 
       install.setDataAndType(apkUri,manager.getMimeTypeForDownloadedFile(downloadId)); 
      activity.startActivity(install); 
      activity.unregisterReceiver(this); 

     } 
    }; 

Androidのマニフェストと同じように動作APKをインストールする意向を処理するためには見つかりませんでし活動:

<provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="com.myapp" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/provider_paths"/> 
     </provider> 

Provider_path(いくつかのために申し訳ありませんがその理由は、そう外部パス名= "myfolderなど" パス=

)パスタグを切断する "" />

ファイルがonCompleteのが呼ばれるダウンロードするには終了していないが、activiyが起動しない:いいえ活動を

はテント{行為= android.intent.action.VIEW DAT =コンテンツを処理することが判明しました:通常のファイルを使用して//com.myapp/myfolder/myfile.apk TYP =アプリケーション/ vnd.android.package-アーカイブFLG = 0x4000000}

://それは

があります動作しません私は何かファイルプロバイダを使用しているときに不足している?ファイルが見つからないためにアクティビティが開始されませんか? 私は余分な許可が必要ですか? (現時点では、私はインターネットで外部ストレージにREAD、WRITEを持っています)

+0

'ファイルが見つからないためにアクティビティが開始しないのですか? 'アクティビティが見つからないというメッセージが表示されます。 – greenapps

+0

"if"私はmimeの型を "*/*"で置き換えるとアプリケーション選択を開きますが、 "ファイルマネージャ"を選択したときにはそれが開き、ルートにとどまります。だから、私はファイルが実際に見つからないFileProviderを使用して疑問に思っているのですか? – Johny19

+0

"file"変数をどこで宣言しましたか? – emaillenin

答えて

12

パッケージインストーラは、Android 7.0から始まるcontentスキームしかサポートしていません。その前に—と反対のドキュメントがあるにもかかわらず—パッケージインストーラはfileスキームのみをサポートしています。

IntentUriを設定する必要があります。Build.VERSION.SDK_INTで分岐するなど、Android 7.0以降で実行しているかどうかによって異なります。

android:enabled="true" 

があなたのマニフェストに欠落しているため、

+1

あなたはgoogle!それを指摘してくれてありがとう! – Johny19

+0

@ Johny19あなたは働くソリューションを投稿できますか? – emaillenin

0

あなたのプロバイダが見つかりません。

しかし、CWのもう一つの答えを読んでもうまくいきません。

+0

私はこれを試しました。私はまだ同じエラーが発生します – Johny19