14

次のクラッシュが発生しますが、これは一部の Samsung デバイスでのみ発生します (すべてではありません。Samsung デバイスで開発/テストしています)。

クラッシュログ:

java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10025 nor current process has android.permission.BLUETOOTH.
   at android.os.Parcel.readException(Parcel.java:1540)
   at android.os.Parcel.readException(Parcel.java:1493)
   at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:1156)
   at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:697)
   at org.altbeacon.beacon.service.scanner.CycledLeScanner.finishScanCycle(CycledLeScanner.java:245)
   at org.altbeacon.beacon.service.scanner.CycledLeScanner.scheduleScanCycleStop(CycledLeScanner.java:234)
   at org.altbeacon.beacon.service.scanner.CycledLeScanner$1.run(CycledLeScanner.java:230)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:5972)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

ここに私の AndroidManifest があります:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.app.myapp" >


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!--
     The following two permissions are not required to use Google Maps Android API v2,
     but are recommended. We also require them for location updates.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<permission
    android:name=".permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name=".permission.C2D_MESSAGE" />

<application
    android:name=".myapp"
    android:allowBackup="true"
    android:icon="@drawable/appicon"
    android:label="@string/app_name"
    android:logo="@drawable/action_bar_pinwheel_back"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".activities.VerifyPinActivity"
        android:label="@string/title_activity_verify_pin"
        android:screenOrientation="portrait"
        android:theme="@style/NoActionBarDark"
        android:windowSoftInputMode="stateVisible|adjustPan" >
    </activity>
    ...(more activities here removed)
</application>
</manifest>

一部のデバイスでのみ発生する理由がまったくわかりません。私の最初の推測では、それは Samsung KNOX と関係があり、クラッシュしている (少数の) ユーザーは、Bluetooth を無効にする電話ポリシーを持つ KNOX ユーザーです。

他の誰かがこれに遭遇しましたか?または、これが何であるかを知っている人はいますか?

4

5 に答える 5

4

ユーザーが Samsung KNOX でのみこの問題に遭遇したことが確実な場合は、次の回答が役立つ可能性があります。

段階を追って考えることが、問題を解決する方法です。

1.This only occurs on some Samsung devices.

だから、それはあなたのコードとは何の関係もありません.Samsungデバイスには何か問題があります.

2.Check the crash log:  
java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10025 nor current process has android.permission.BLUETOOTH.

経験上、「Neither user ****も current process has *** permission.」のようなログに遭遇した場合、これはあなたのアプリがシステム内で何かを行う権限を持っていないことを意味します。多くの場合、何かを行うにはシステムレベルの許可が必要です。

If you are installed as system level app together with customized Android ROM,or you signed your app with the platform.x509.pem and platform.pk8 file of the customized Android ROM,and then you can have the permission.

次に、Samsung KNOX とは何かを確認します。

Samsung Knox (様式化された Samsung KNOX) は、エンタープライズ モバイル セキュリティ ソリューションです。

Bluetooth は、相手のデバイスへのデータ送信方法の一種です。これは、セキュリティ上の問題を引き起こします。

公式ウェブサイトを確認してください:
https://www.samsungknox.com

「Bluetooth」というキーワードを検索すると、 https ://www.samsungknox.com/en/faq/are-bluetooth-bluetooth-low-energy-and-nfc-available-inside-knox-container が見つかりました。

KNOX 2.4+ — Bluetooth、Bluetooth Low Energy (GATT)、および NFC は、KNOX コンテナ内でサポートされています。

KNOX 2.3 以下— Bluetooth、Bluetooth GATT、および NFC は、KNOX コンテナー内ではサポートされていません。デバイスがパーソナル スペースの周辺機器 (ヘッドホンなど) に接続されている場合、ユーザーが KNOX コンテナーに入っても、Bluetooth は接続されたままになります。KNOX コンテナー内のアプリは、Bluetooth 接続を開始できません。

1. ユーザーがKNOX 2.3 以下を使用していて、デバイスの OS をKNOX 2.4+に更新できる場合は、Samsung KNOX を使用しているユーザーにデバイスの OS を更新するよう伝えます。

2. ユーザーがKNOX 2.3 以下を使用していて、デバイスの OS をKNOX 2.4+に更新できない場合、アプリはこの状況では動作しません。問題は問題ではありません。はそれを使用します: お使いのデバイスの OS は Bluetooth をサポートしていないため、動作していません。

3.上記の方法で問題が解決しない場合は、 Samsung KNOX 公式に連絡してください。

もう 1 つのヒント:
アプリのユーザー エクスペリエンスを向上させるには、アプリがクラッシュしないようにする必要があります。
クラッシュは最悪のユーザー エクスペリエンスです。
問題を解決できない場合は、次のようにすることができます。

 try{
     You code related with Bluetooth.
    }catch (Exception e)
    {
    }

覚えておいてください:公式は常に問題をより良く解決するのに役立ちます!


于 2015-11-01T15:04:27.307 に答える
1

ここで見ることができます。これはあなたの問題だと思います。

Bluetooth、Bluetooth Low Energy、NFC は KNOX コンテナ内で利用できますか?

KNOX 2.4+ — Bluetooth、Bluetooth Low Energy (GATT)、および NFC は、KNOX コンテナ内でサポートされています。

KNOX 2.3 以下— Bluetooth、Bluetooth GATT、および NFC は、KNOX コンテナー内ではサポートされていません。デバイスがパーソナル スペースの周辺機器 (ヘッドホンなど) に接続されている場合、ユーザーが KNOX コンテナーに入っても、Bluetooth は接続されたままになります。 KNOX コンテナー内のアプリは、Bluetooth 接続を開始できません。

私はこれについて実践的な経験はありませんでしたが、これが役立つことを願っています.

于 2015-11-02T13:22:46.463 に答える
0

SDK 23 以降では、必要に応じて Bluetooth の許可を確認する必要があります。

   if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         if (mContext.checkSelfPermission(Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED) {
//TODO - Do the work
    }
  }
于 2015-11-02T06:43:55.353 に答える
0

From KNOX Premium v1.1 onwards, Samsung no longer needs to sign third-party app (APK) files so that they can run inside KNOX containers. Instead, the appropriate permissions are granted at runtime, after an app activates its ELM and KLM licenses successfully. for more info see this

于 2015-11-02T14:44:47.867 に答える