FileProvider (設定されたルートを見つけるのに失敗しました)
I 問題の背景
最近、プロジェクトのアプリは、新しいバージョンをリリースし、バグの背景には、呼び出しシステムのフォトアルバム機能で"xxx&quotが含まれている設定ルートを見つけるために失敗クラッシュされることがわかった、テストに電話を見つけるために急いで、何の問題もああ、より見つけるエラーを報告したシステムのバージョンです。
第二の問題分析
ログ情報から、パスの設定に問題があるはずで、その後、パスの設定も問題ないことがわかった、インターネット検索に行く、インターネットは確かに同じ問題に遭遇した学生の波を検索することができます、より多くの問題は、ルートパスのタグを増やすことですが、慎重に検討した後、このタグは、外部SDカードのストレージデバイスに適用され、我々は、外部ストレージにアクセスするexteranl -パスを使用すると、再び袋小路ですべきである。
良いことに、同僚が自分の携帯電話でこのクラッシュを起こすことができたので、試行錯誤を重ね、デバッグを重ねた結果、ようやく問題の鍵を見つけることができました、次の図をご覧ください。
Fileprovider.getUriForFileの呼び出しは、最終的に上図のこのメソッドに行き着きます。図の丸で囲んだ部分をご覧ください。プロバイダは内部にキャッシュ処理を持っており、キャッシュが見つかれば探すことはなく、キャッシュのキーは権限なので、その権限はプロバイダを一意に識別するキー情報であることがわかります。ということを最終的に検証しています。
3つのまとめ
重要なのは、どうやって原因を突き止めるかです。全体のプロセスを振り返ってみると、私たちはまず、パスの書き込み設定面を追って原因を探りましたが、これは実は問題のある方向で、エラーメッセージは本当に単なるヒントでしかないのです。この方向は非常に簡単で、携帯電話のこの問題の再発がなければ、基本はパスを修正することによって観察されます。重要なのは、デバッグとソースコード解析によって問題の所在を明らかにすることです。インスピレーションです。
1. まず基本的なことを理解すること。たとえば、この問題のファイルプロバイダは、通常、非常に少ない使用すると、基本的にのみ、どのように設定するには、呼び出しコードを記述する方法を参照してくださいにインターネットを検索するために使用して、それを使用することができますOKです。問題が発生した場合、それは問題のポイントを調査するために焦点を当てます。これは、一度間違った方向につながる、それはエネルギーの大きな無駄であり、完全に問題を制御することはできません。たとえば、プロバイダの使用は、実際にはより多くのパスを指定することにより、androidmanifesの部分で構成され、権限を定義し、クラス名を指定して、特定のプロバイダをマークするには、権限が非常に重要であり、次にソースコードを通じて確認する。
1. 変更内容が有効であることを確認するために、問題を再現することが最善である
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例