2017-01-24 9 views
0

私はキューをチェックするために10秒ごとに実行されるサービスを作成しようとしています。キューにデータがある場合は、指定したURI(アプリケーションから取得した画像のURI)特定のURLに。実行可能なアンドロイドの許可の問題

私はこれらの線に沿って何か

public QueueProcessor(final Context context){ 
    this.mContext = context.getApplicationContext(); 
} 

/** 
* Starts processing the items on a separate thread. 
*/ 
public void process() { 
    Runnable running = new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       Log.i(RUN_QP_TAG, "Processing queue"); 
       // more here 
       isRunning = true; 
       Queue theQ = Queue.getInstance(); 
       if(theQ.getSize() > 0){ 
        WorkQItem itm = theQ.pop(); 
        if(itm.hasImage()){ 
         pushImageUploadToProcess(itm); 
        } 
       } 
      } catch (Exception e) { 
       // TODO: handle exception 
      } 
      finally{ 
       //also call the same runnable to call it at regular interval 
       handler.postDelayed(this, 10000); 
      } 

     } 
    }; 

    new Thread(running).start(); 
} 

pushImageUploadToProcessがWorkQItemを取り、URIを開き、バイトを書き込むことによって(文字列picUriとして保存されます)のアイテムから画像をアップロードしようとするを作成しました。しかし、picUriの場所を開こうとすると、アクセス許可拒否例外が発生します。

MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A531 from pid=795, uid=10327 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission() 

このスレッド/ランナブルにURIへのアクセスを許可するにはどうすればよいですか? 注ボタンイベントから直接アップロードを試しても機能します。

私はマニフェストで次の権限を持っている:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 
+0

アクセス許可を追加してください。どこに置いてもいいですか?

答えて

0

実際の権限エラーは実際の問題ではないようです。本当の問題は、私がイメージを選んで選んだ方法でした。 私はhttps://gist.github.com/Mariovc/f06e70ebe8ca52fbbbe2このピッカーを使用して終了し、問題なく動作するように見えました。 カメラから取り出された画像が保存される必要があるので、私のニーズに合うようにこのコードを少し微調整しました。複数の画像があり、後で使用するためにそれぞれが必要ならば、最初に相対URIが上書きされるため、固定されたもの(例えば、保存されるもの)。

2

コード

PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this, new PermissionsResultAction() { 
     @Override 
     public void onGranted() { 
      // Proceed with initialization 

     } 

     @Override 
     public void onDenied(String permission) { 
      // Notify the user that you need all of the permissions 
     } 
    }); 

以下の使用はアプリのGradleに依存下回っ

compile 'com.anthonycr.grant:permissions:1.0' 
を追加するためにあなたは、ランタイム許可を実装する必要があります
+0

キュープロセッサでは?そして、正確に何がonGrantedとonDeniedに入るべきですか? – MadaManu

+0

あなたはあなたのアプリケーションの最初にそれを置くべきです –

+0

私は確かにやりました。画像Uriを開くと、次のエラーが表示されます。java.lang.SecurityException:Permission Denial:read com.android.providers.media .MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A531 from pid = 462、uid = 10328にはandroid.permission.MANAGE_DOCUMENTSが必要です。またはgrantUriPermission() – MadaManu

関連する問題