2016-08-29 9 views
2

私のアプリケーションでは次のようにしたいと思います。まずログインする必要があります。その後、ログイン後、私は自分のアプリケーションを終了します。しかし、それはバックグラウンドで実行されています。ログイン・レコードはまだ保持されています。次に、ファイルブラウザからファイルを選択する必要があります。ファイルを選択した後、共有オプションを押します。次に、私はファイルに対していくつかの操作を行うために自分のアプリケーションを選択します。ファイルを操作した後、それをキャッシュに記録します。次に、このファイルを他の適切なアプリケーションで開く必要があります。私はそれらのすべてを行うことができますが、getUriForFileメソッドを呼び出す際に問題があります。Android resolveContentProviderがnullを返す

私はfileProviderを追加しました。私は次のコードしているfile_paths.xmlで

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name"> 

    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="${applicationId}.share" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths" /> 
    </provider> 

    <!--Normal way opener --> 
    <intent-filter android:label="appName"> 
     <action android:name="android.intent.action.MAIN" /> 
    </intent-filter> 

    <!--From share options opener --> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <action android:name="android.intent.action.SEND_MULTIPLE" /> 

     <category android:name="android.intent.category.DEFAULT" /> 

     <data android:mimeType="*/*" /> 
    </intent-filter> 
</activity> 

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <cache-path name="cache_docs" path="data/data/com.app.firm.app/cache" /> 

</paths> 

を私はFileProvider.javaファイルを開きました。私はエラーが発生します:

final ProviderInfo info = context.getPackageManager() 
       .resolveContentProvider(authority, PackageManager.GET_META_DATA); 
     final XmlResourceParser in = info.loadXmlMetaData(
       context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS); 
     if (in == null) { 
      throw new IllegalArgumentException(
        "Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data"); 
     } 

infoパラメータがnullです。したがって、プログラムがinfo.loadXmlMetaDataを呼び出すと、ヌルポインタ例外が発生します。したがってcontext.getPackageManagerはnullを返します。その時私は同時に2つのアプリケーションを実行していることを忘れないでください。自然流れ(すなわち、ログインとメインアクティビティ)に従います。もう一つはMainActivityからちょうど開きます。 context.getPackageManagerは、2番目に実行中のアプリケーションから呼び出されます。助けてください

+0

いいえ、 'context.getPackageManager'は' null'ではありません。もしそうであれば、次のコードは 'NullPointerException'を投げます。メソッド 'resolveContentProvider'は' null'を返します。 –

+0

文字列PACKAGE_NAME = getApplicationContext()。getPackageName(); – YUVRAJ

+0

'PackageManager.GET_META_DATA'は128であり、権限は「com.app.firm.app」です。それはなぜresolveContentProviderはnullを返しますか?私は、その行の後にinfoパラメータがnullになることを知っています。 – gunescelil

答えて

0

私はこの問題を解決する方法を知っています、私はあなたを助けることができると思います。

たぶん、あなたはあなたがカスタムクラスがFileProviderを拡張し、カスタムFileProvider<provide>名前タグを変更することができる2つの<provider>、libにの1、プロジェクト

のいずれかを持っている:

<provider 
    android:name="XXXX.YourCustomFileProvider" 
    android:authorities="${applicationId}.share" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/file_paths" /> 
</provider> 

そして、問題は解決されます。

ありがとうございます!

関連する問題