1

プログラム プロバイダーは、当社の別のアプリのプロバイダーを記述します。プロバイダーには、データにアクセスするためのアクセス許可が必要です。

また、NFC を使用して json データを別のデバイスに送信する必要があるインターフェイスもあります。

CreateNdefMessageCallback.createNdefMessageのようにプロバイダーにアクセスすると

    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        Context context = this;

        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(Uri.parse("content://demo/data-lists"),
                null,
                null,
                null,
                null);
        // FIXME Strange: Will never goes here ...
        mMessage = getMessage(cursor);

        NdefMessage msg = new NdefMessage(
                new NdefRecord[] {
                        createMimeRecord(mMimeType, mMessage.getBytes())
                });
        return msg;
    }

非常に奇妙なことがあります。許可を削除するまで、カーソルを取得することはありません。

許可宣言

<permission
    android:name="com.client.permission.MY_PERMISSION"
    android:label="@string/provider_label"
    android:protectionLevel="signatureOrSystem" />

許可を求める

<uses-permission android:name="com.client.permission.MY_PERMISSION" />

プロバイダ許可宣言

    <provider
        android:name=".provider.DemoProvider"
        android:authorities="demo"
        android:multiprocess="true"
        android:permission="com.client.permission.MY_PERMISSION" />

現在、プロバイダーと同じアプリケーション内の NFC 送信アクティビティとプロバイダー データの読み取りは、NFC コールバックによって行われます。プロバイダーのアクセス許可を削除すると、これは正常に機能します。以下のような

勝手に提供者

    <provider
        android:name=".provider.DemoProvider"
        android:authorities="demo"
        android:multiprocess="true"/>

助けてください。ありがとう。


UPDATED 2013-03-14 とても奇妙です。この問題は、プロバイダと NFC アクティビティが同じアプリケーション内にある場合にのみ見つかりました。このような。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nfcdemo"
    android:versionCode="6"
    android:versionName="build-svn291" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />

    <permission
        android:name="com.client.permission.MY_PERMISSION"
        android:label="@string/provider_label"
        android:protectionLevel="signatureOrSystem" />

    <uses-permission android:name="com.client.permission.MY_PERMISSION" />

    <activity
        android:name=".ui.MainTabActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <provider
        android:name=".provider.DemoProvider"
        android:authorities="demo"
        android:multiprocess="true"
        android:permission="com.client.permission.MY_PERMISSION" />
</manifest>

しかし、私が2つの別々のアプリケーションを使用する場合、それはうまくいきます.

<!-- Application Provider -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nfcdemo.provider"
    android:versionCode="6"
    android:versionName="build-svn291" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />

    <permission
        android:name="com.client.permission.MY_PERMISSION"
        android:label="@string/provider_label"
        android:protectionLevel="signatureOrSystem" />

    <provider
        android:name=".provider.DemoProvider"
        android:authorities="demo"
        android:multiprocess="true"
        android:permission="com.client.permission.MY_PERMISSION" />
</manifest>

<!-- Application UI -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nfcdemo.ui"
    android:versionCode="6"
    android:versionName="build-svn291" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />

    <uses-permission android:name="com.client.permission.MY_PERMISSION" />

    <activity
        android:name=".ui.MainTabActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>    
</manifest>
4

0 に答える 0