7392


ContentProvider（コンテンツプロバイダ）からAndroid端末のPlayストアアプリにアクセスし、Google
Playの検索履歴を取得したいと思っています。Android4.*まではアクセス可能でしたが、Android5.0からは以下の例外が発生しアクセスできなくなってしまいました。  
Playストアへのアクセスを許可する方法はありますでしょうか？

例外：

[code]

    java.lang.SecurityException: Permission Denial: opening provider com.google.android.finsky.providers.RecentSuggestionsProvider from ProcessRecord
    
[/code]

Javaソースコード：

[code]

    try{
      Object obj = Uri.parse("content://com.google.android.finsky.RecentSuggestionsProvider/suggestions");
      ContentResolver contentresolver = l.getContentResolver();
      String as1[];
      (as1 = new String[1])[0] = "_id || ',' || date || ',' || display1 as _id";
      String as2[];
      (as2 = new String[1])[0] = "";
      if((obj1 = contentresolver.query(((Uri) (obj1)), as1, "''=?", as2, "date desc"))== null)
    }catch(Exception exception){
    }
    
[/code]


CC BY-SA 3.0
2015-03-01T01:25:23.377
7260
2015-03-03T15:23:29.023
2015-03-01T02:02:42.040
8558
8558
question
android java google-play
ContentProviderでAndroid5.0のGoogle Play•Playストアへのアクセスを許可したい


手持ちのandroid 4.4.4で試したところ同様の結果（エラーメッセージ含む）になり、取得できませんでした。  
コメントできないのでこちらにて報告します。

もし解決できたら回答を編集します。


CC BY-SA 3.0
2015-03-03T12:06:25.640
7383
2015-03-03T12:06:25.640
7256
7260
answer


例外は最後まで記入することをおすすめします。  
なぜ例外が出たのか重要な情報源となります。

`java.lang.SecurityException: Permission Denial`は、アクセスが許可されていないということです。  
記入された例外が途中で切れてるのですが、例外１行目の最後の方に、`is not exported`と出ているはずです。  
これは、アクセスしようとした`ContentProvider`が外部からのアクセスが許可されていないということです。

なぜAndroid5.0で例外が出るのかは分かりません。以下は想像です。

API Level17(Android4.2)から`ContentProvider`の`exported`のデフォルト値が変わりました。  
API Level16までは、`exported`が指定されていない場合のデフォルト値は`true`です。  
API Level17から、`exported`が指定されていない場合のデフォルト値は`false`です。

`exported`が`true`の場合、他のアプリなどから利用できます。  
`exported`が`false`の場合、他のアプリなどから利用できません。

想像ですが、Playストアアプリの`<provider>`で`exported`が未指定になったいるため、Android4.2から例外が出ているのではないかと思われます。

＃しかし、4.1まで簡単にPlayストアアプリの検索履歴を取得出来たんですね。おっそろしいです。


CC BY-SA 3.0
2015-03-03T15:16:22.010
7392
2015-03-03T15:23:29.023
2015-03-03T15:23:29.023
8216
8216
7260
answer