CreateNdefMessageCallback与ContentProvider权限冲突

时间:2013-03-11 08:11:21

标签: android nfc

我为我们公司的其他应用程序编写程序提供程序提供程序。提供者需要访问数据的权限。

我们还有一个接口需要使用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" />

提供者权限declear

    <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"/>

请帮忙。 感谢。


更新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>

但是,如果我使用两个独立的应用程序,它的工作方式就是。

<!-- 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>

0 个答案:

没有答案