2016-08-29 6 views
2

내 애플리케이션에서 다음을 수행하고 싶습니다. 먼저 로그인해야합니다. 그런 다음 로그인 한 후 내 신청서를 종료합니다. 그러나 그것은 백그라운드에서 실행 중입니다. 로그인 기록이 아직 유지됩니다. 그런 다음 파일 브라우저에서 파일을 선택해야합니다. 파일을 선택한 후 공유 옵션을 누릅니다. 그런 다음 파일에 대한 일부 작업을 수행 할 응용 프로그램을 선택합니다. 파일에 작업을 수행 한 후이를 캐시에 기록합니다. 그런 다음이 파일을 다른 적절한 응용 프로그램에서 열려고합니다. 나는 그들 모두를 할 수 있지만 getUriForFile 메소드를 호출하는 동안 문제가있다.Android resolveContentProvider가 null을 반환합니다.

Manifest에 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를 호출하면 null 포인터 예외가 발생합니다. 따라서 context.getPackageManager은 null을 반환합니다. 그 당시에는 동시에 두 개의 응용 프로그램이 실행된다는 것을 기억하십시오. 자연스러운 흐름 (즉, 로그인 및 기본 활동)을 따른다. 다른 하나는 MainActivity에서 열립니다. context.getPackageManager은 두 번째 실행중인 응용 프로그램에서 호출됩니다. 제발 도와주세요

+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을 반환할까요? 나는 그 정보 매개 변수가 그 라인 이후에 null이된다는 것을 알고 있습니다. – gunescelil

답변

0

나는이 문제를 해결하는 방법을 알고, 나는 당신을 도울 수 있다고 생각해.

어쩌면 프로젝트 사용자 정의 클래스가 FileProvider를 확장 할 수

<provider>, lib에 하나, 하나를 가지고 있고, 사용자 정의 FileProvider<provide> 이름 태그를 변경합니다

<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> 

그리고 문제는 해결 될 것이다.

감사합니다.

관련 문제