4

私は最近、デバイス管理 API を調べていましたが、私のコードも Android 開発 Web サイトのサンプル コードもデバイス管理を有効にできないことがわかりました。

起動時に発生するエラーは次のとおりです。

12-28 17:24:49.596: WARN/PackageManager(60): Not granting permission android.permission.BIND_DEVICE_ADMIN to package com.example (protectionLevel=2 flags=0x8446)

そして、これは管理者を有効にしようとすると:

12-28 17:27:22.426: WARN/DeviceAdminAdd(396): Unable to retrieve device policy ComponentInfo{com.example/com.example.Receiver}
org.xmlpull.v1.XmlPullParserException: No android.app.device_admin meta-data

マニフェストの要件に従って、すべてのアクセス許可をまったく同じに設定します。

    <activity android:name=".MyActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".Receiver"
              android:label="device_admin"
              android:permission="android.permission.BIND_DEVICE_ADMIN"/>
              <meta-data android:name="android.app.device_admin"
                         android:resource="@xml/device_admin"  />
              <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
              </intent-filter>

デバイス ポリシーも、API で規定されている要件に従って正確に設定されます。

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
    </uses-policies>

パーミッションの取得を間違えたのでしょうか、それとも追加のコード署名なしではデバイス管理を利用できないのでしょうか?

4

2 に答える 2

1

<receiver />メタデータ要素を指定する前にタグを閉じたため、XML の形式が正しくありません。それがどうあるべきかは次のとおりです。

<receiver android:name=".Receiver"
          android:label="device_admin"
          android:permission="android.permission.BIND_DEVICE_ADMIN">
      <meta-data android:name="android.app.device_admin"
                 android:resource="@xml/device_admin"  />
      <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
      </intent-filter>
</receiver>

頭に浮かんだ他の考え:

  • 私のプロジェクトでは、device_admin.xml ファイルは \res\xml ディレクトリにあります。XMLファイルがそこにあることを確認してください。

  • レシーバーの android:label に @string が必要ですか? 例えば

android:label="@string/device_admin"
  • これについてはよくわかりませんが、Manifest.xml にもuses-permission XML 要素を追加する必要がありますか?

于 2011-05-10T20:18:35.917 に答える
0

http://developer.android.com/guide/publishing/app-signing.htmlによると 、デバッガーはコンパイルと実行の目的のためだけに署名します。まだデバッガで実行できないのでしょうか?

于 2010-12-29T00:08:39.543 に答える