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

请帮忙。谢谢。


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

0 回答 0