2017-04-12 88 views
1

我得到的幫助android: how to register my app as "camera app"但仍然是無法正常工作註冊我的應用程序的相機應用中的Android

我與我的聯繫應用試圖照片添加到現有保存的聯繫人,其中URI會等產生下面

content://com.google.android.contacts.files/my_cache/ContactPhoto-IMG_20170412_123034.jpg 

,但我不能訪問到該聯繫人的應用程序目錄,所以我不能保存的照片上那個URI,如果我這樣做,我會得到FIleNotFoundException

Uri saveUri = (Uri) getIntent().getExtras().getParcelable(MediaStore.EXTRA_OUTPUT); 

if (saveUri != null) 
{ 
    // Save the bitmap to the specified URI (use a try/catch block) 
    outputStream = getContentResolver().openOutputStream(saveUri); <-----File Not Found Exception 

Menifest是

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<activity 
      android:name=".CameraSelfieActivity" 
      android:clearTaskOnLaunch="true" 
      android:icon="@drawable/icon_chooser_selfie" 
      android:label="My Camera" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.media.action.IMAGE_CAPTURE" /> 

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

logcat的是

java.io.FileNotFoundException: /my_cache/ContactPhoto-IMG_20170417_205819.jpg: open failed: ENOENT (No such file or directory) 
    at libcore.io.IoBridge.open(IoBridge.java:452) 
    at java.io.FileInputStream.<init>(FileInputStream.java:76) 
    at com.example.CameraSelfieBaseHelper.copyFileToUri(CameraSelfieBaseHelper.java:391) 
    at com.example.CameraSelfieBaseHelper.processImageReady(CameraSelfieBaseHelper.java:364) 
    at com.example.CameraSelfieBaseHelper.onImageReady(CameraSelfieBaseHelper.java:266) 
    at com.example.captureImage(CmGLSV.java:50) 
    at com.example.surface.CmGLSV.onDrawFrame(CmGLSV.java:135) 
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1535) 
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
    at libcore.io.Posix.open(Native Method) 
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
    at libcore.io.IoBridge.open(IoBridge.java:438) 

但相同功能默認相機應用實現

會有人有建議如何解決此問題

謝謝,

+0

Uri值是從哪裏來的? – CommonsWare

+0

堆棧跟蹤將很好閱讀。 – tynn

+0

我已經打開了我的聯繫人應用程序,因爲我想添加新照片到我的一個聯繫人,所以我已經打開了我的相機,我得到了上面的Uri –

回答

2

問題是您的應用程序沒有所需的安全權限來直接覆蓋由聯繫人應用程序進行外部管理的文件(聯繫人照片)。

你能做些什麼來達到期望的結果是:

一個。添加必要的權限通過ContentResolver的API

<uses-spermission 
       android:name="android.permission.WRITE_CONTACTS" /> 

<uses-permission 
      android:name="android.permission.READ_CONTACTS" /> 

讀/寫數據的聯繫人,您可以找到more information on interacting with Contacts data via the Android Developer

灣使用新照片標識要更新的聯繫人的ID

c。更新聯繫人的照片通過它的ContentResolver的API

There's this example open-source project on github that does just that

+0

謝謝你的答案,但它不是像我想訪問使用我的相機應用程序的聯繫人應用程序只爲每個應用程序,它必須工作,因爲默認相機工作正常,我已經測試了這兩個權限但沒有結果,並且Default Camera也沒有使用這兩個權限 –

+0

「Default Camera」是什麼意思?應用程序預裝在手機上? –

+0

是預裝的應用程序,事件不僅僅是預裝,我已經嘗試使用Google Play商店中的相機應用程序,它也正常工作 –

1

不要使用File,使用getContentResolver().openOutputStream(uri)獲得簡單地得到OutputStream

相關問題