1


私はコンテンツプロバイダアプリを開発していました。 そのアプリケーションのマニフェストには、アプリケーションタグにprovider要素が置かれていました。 次のコードアンドロイドで私のカスタムコンテンツプロバイダの許可を与えることができませんか?

<provider 
      android:name=".PlatesContentProvider" 
      android:authorities="com.tag.custom_contentproviderdemo.Plates" 
      android:enabled="true" 
      android:readPermission="PlatesContentProvider._READ_PERMISSION" 
      android:writePermission="PlatesContentProvider._WRITE_PERMISSION" 
      android:exported="true" > 



いる私はまた別のアプリすなわちCPClientを開発しました。上記のコンテンツプロバイダにデータを読み書きします。 マニフェストファイルで要素が宣言されました。次

それは私が許可を要求します手段は付与されません.IF私はこの権限を確認したCPClientのランチャー活動でコード

<uses-permission android:name="PlatesContentProvider._READ_PERMISSION"/> 
    <uses-permission android:name="PlatesContentProvider._WRITE_PERMISSION"/> 


です。 しかし、要求しているアクセス権では、表示されていないアクセス権ダイアログが要求され、常にアクセス許可が与えられません。

次のコード

private final String permissionsRequired="PlatesContentProvider._READ_PERMISSION"; 
    private final String permissionsRequired2= "PlatesContentProvider._WRITE_PERMISSION"; 
    private String[] permissions=new String[]{permissionsRequired,permissionsRequired2};  
public void process() 
     { 
      checkPermission(); 

      if(!permission_granted) 
      { 
       Toast.makeText(this,"Permission not granted.Requesing permission....",Toast.LENGTH_SHORT).show(); 
       requestPermission1();return; 
      } 
      else 
      { 
       bindWidgetEvents(); //After permission granted I will perform some process 
       Log.d(TAG,"Permission granted");return; 
      } 
     } 

     public void checkPermission() 
     { 
      int permit=this.checkSelfPermission(permissionsRequired); 

      if(permit== PackageManager.PERMISSION_GRANTED) { 
       Log.d(TAG, "permission granted"); 
       permission_granted=true;return; 
      } 
      else 
       Log.d(TAG,"permission not granted"); 
      permission_granted=false; 
     } 

     public void requestPermission1() 
     { 
      //boolean show=this.shouldShowRequestPermissionRationale(permissionsRequired); 
      //Log.d(TAG,"need to show = "+show); 


      Thread thread=new Thread() 
      { 
       public void run() 
       { 
        Log.d(TAG,"B4 call request permission"); 
        requestPermissions(permissions,CONTENT_PROVIDER_PERMISSION_REQUEST_CODE); 

        Log.d(TAG,"after call request permission"); 
       } 
      }; 

      thread.start(); 
     } 
    public void onRequestPermissionsResult(int requestCode,String permissions1[], int[] grantResults) 
     { 
      Log.d(TAG,"onRequestPermissionsResult. req code="+requestCode); 
      if(requestCode==CONTENT_PROVIDER_PERMISSION_REQUEST_CODE) 
      { 
       Log.d(TAG,"Content provider permsion request code"); 
       if(grantResults==null) 
       { 
        Log.d(TAG,"grant results is null"); 
        Toast.makeText(this,"UnKnown error happened",Toast.LENGTH_LONG).show(); 
        return; 
       } 

       int grant_results_size=grantResults.length; 
       Log.d(TAG,"Grant result size="+grant_results_size); 
       if(grant_results_size<1) 
       { 
        Log.d(TAG,"grant results size is <1"); 
        Toast.makeText(this,"UnKnown error happened",Toast.LENGTH_LONG).show(); 
        return; 
       } 

       if(grantResults[0]!=PackageManager.PERMISSION_GRANTED) 
       { 
        Log.d(TAG,"Permission not granted"); 
        Toast.makeText(this,"Read Permission not granted",Toast.LENGTH_LONG).show(); 
       } 

       if(grantResults[1]!=PackageManager.PERMISSION_GRANTED) 
       { 
        Log.d(TAG,"Permission not granted"); 
        Toast.makeText(this,"Write Permission not granted",Toast.LENGTH_LONG).show();return; 
       } 

       Log.d(TAG,"Permission granted"); 

       Toast.makeText(this,"Permission granted",Toast.LENGTH_SHORT).show(); 
       bindWidgetEvents(); 

       return; 
      } 
      else 
      { 
       Log.d(TAG,"not a Content provider permsion request code"); 
      } 
     } 


以下であるには、Android SDKの詳細は私の目標と分SDKのバージョンは、コンテンツ・プロバイダ・アプリケーションと私のCPClient両方で23である あります。
どこが間違っているのか分かりませんか?
皆さんのアイデアを歓迎します。

+1

プロバイダーのアプリのマニフェストでカスタムアクセス許可に「」要素を宣言しましたか? http://stackoverflow.com/q/30097365 –

+0

im not added.plzそのサンプルコードを更新 –

+0

申し訳ありませんが、私はあなたのコメントを理解していません。 –

答えて

3

「マニフェスト」ブロックとプロバイダでアクセス許可を宣言する必要があります。

+0

そのために働いていません。クライアントアプリケーションでrequestPermissionsを呼び出すと、ダイアログは表示されず、常にアクセス許可が返されません。 –

+0

このアクセス権を「通常の」レベルの保護として宣言すると、自動的に付与されます。また、 'signature'または 'signatureOrSystem'保護レベルを使用することもできます。 https://developer.android.com/guide/topics/manifest/permission-element.htmlを参照してください。 –

関連する問題