1つのアプリしかありません。コンテンツプロバイダがにエクスポートされていません(私は他のアプリケーションにコンテンツにアクセスさせたくありません)これまでコンテンツプロバイダを使用していました。同じアプリ内から呼び出されたときのコンテンツプロバイダの許可拒否
TextViewを更新するためにコンテンツオブザーバを作成しました。 onChange
メソッドは、コンテンツが変更されたときに呼び出され、そのコンテンツを再クエリしようとします。
java.lang.SecurityException:許可拒否:読書org.sil.lcroffline.data.DataProvider URIコンテンツ:それはこのようになりますセキュリティ例外を取得するときです//org.sil.lcroffline/users/ PID = 0、UID = 1000は、プロバイダをエクスポートする必要があり、またはgrantUriPermission()
からby_account_name/5555544444ここではそれを生成するコードです:
@Override
public void onChange(boolean selfChange, Uri uri) {
Cursor c = null;
try {
c = mContentResolver.query(UserEntry.buildUserPhoneUri(mAccount.name), null, null, null, null);
// do stuff with the data in the cursor
} finally {
if (c != null) c.close();
}
}
それが適切に形成されているようにURIが見えますが、と私はmに問題があるとは思わないコンテンツプロバイダでそれを嫌う。
上記のコードは、アプリケーション内からプログラムによって呼び出されたときに正常に機能します。例外が発生した観測データが変更された場合にのみ発生します。
同じアプリ内でどのように権限拒否を得ることができますか?これをどのように修正できますか?
見よマニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.sil.lcroffline">
<!-- To communicate with LCR -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Required because we're manually creating a new account. -->
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".authentication.LoginActivity"
android:label="@string/app_name"
android:exported="true">
</activity>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ReportActivity"
android:parentActivityName=".MainActivity"></activity>
<service android:name=".authentication.AuthenticatorService">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
<provider
android:authorities="@string/data_authority"
android:name=".data.DataProvider"
android:exported="false" />
<service
android:name=".data.SyncService"
android:exported="true"
android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
</application>
</manifest>
によってでcluedた
は、あなたのアンドロイドOSです6.0ですか? –
コンテンツプロバイダURIをエクスポートできますか? – Apurva
はい、6.0.1です。コンテンツプロバイダの一部をエクスポートしないようにする必要はありません。すべてのコンテンツに他のアプリからアクセスできないようにする必要があります。 –