2017-10-07 18 views
0

ImageViewを持つフラグメントがあります。 ユーザーがこのイメージをクリックすると、ローカライゼーションのアクセス許可を要求したいが、 "requestPermission()"が実行されても要求ダイアログは表示されません。フラグメント内のrequestPermissionダイアログが表示されない

マイフラグメントonCreateView方法

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

    View center = inflater.inflate(R.layout.board, container, false); 
    position = (ImageView) center.findViewById(R.id.position); 

    position.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

       if (ContextCompat.checkSelfPermission(getActivity(), 
         Manifest.permission.ACCESS_FINE_LOCATION) 
         != PackageManager.PERMISSION_GRANTED) { 

        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), 
          Manifest.permission.ACCESS_FINE_LOCATION)) { 

         Toast.makeText(getContext(), 
           "I need the permission pls", 
           Toast.LENGTH_LONG).show(); 
        } 

        requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, LOCALIZATION_PERMISSION); 

       } 
      } 
     } 
    }); 
    return center; 
} 

NOTE :: shouldShowRequestPermissionRationaleが真なることはありません。私はデバッガでそれを確認します。

私は

<?xml version="1.0" encoding="utf-8"?> 

    <manifest 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     package="it.peoople"> 

    <uses-permissions android:name="android.permissions.INTERNET" /> 
    <uses-permissions android:name="android.permissions.READ_EXTERNAL_STORAGE"/> 
    <uses-permissions android:name="android.permissions.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permissions android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permissions android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name="it.peoople.main.MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" 
      android:windowSoftInputMode="stateHidden|adjustPan" > 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity android:name="it.peoople.floating.Messaging" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity android:name="it.peoople.floating.Registration" 
      android:screenOrientation="portrait"> 
     </activity> 
    </application> 

</manifest> 

もマニフェストにNOTE ::許可]ダイアログボックスを許可を管理するには、出演したことがないので、私は「もう聞かない」にチェックすることはありません。

たびに要求権限が実行され、自動的にこのライン

10-09 18:22:50.019 2223-2359/it.peoople D/AppTracker: App Event: stop 
10-09 18:22:50.020 2223-2254/it.peoople V/FA: Recording user engagement, ms: 5411 
10-09 18:22:50.020 2223-2254/it.peoople V/FA: Using measurement service 
10-09 18:22:50.020 2223-2254/it.peoople V/FA: Connecting to remote service 
10-09 18:22:50.025 2223-2254/it.peoople V/FA: Activity paused, time: 57774748 
10-09 18:22:50.030 2223-2254/it.peoople D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=5411, firebase_screen_class(_sc)=Registration, firebase_screen_id(_si)=-1569558894460098554}] 
10-09 18:22:50.043 2223-2254/it.peoople V/FA: Using measurement service 
10-09 18:22:50.043 2223-2254/it.peoople V/FA: Connection attempt already in progress 
10-09 18:22:50.050 2223-2254/it.peoople D/FA: Connected to remote service 
10-09 18:22:50.050 2223-2254/it.peoople V/FA: Processing queued up service tasks: 2 
10-09 18:22:50.082 2223-2254/it.peoople V/FA: Activity resumed, time: 57774811 
10-09 18:22:50.082 2223-2518/it.peoople D/AppTracker: App Event: start 

を否定し、アンドロイドlogcat印刷された私を助けてください。

本当にありがとうございます。

+0

対象となるSDKのバージョンは何ですか? – nomag

+0

ターゲットSDK 25、minSDK 21 –

+0

およびテストデバイスのビルドバージョン?その私のためにうまく動作します – nomag

答えて

0

私はこれをアクティビティに移して、新しいリスナーを実装してフラグメントからそれと対話する必要があると思います。

あなたの問題は、あなたがビルドしたトーストを決して実行するのではなく、その上にnevet call .show()を実行することです。

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(R.string.permission_prompt_location); 
     builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       ActivityCompat.requestPermissions(
         SwipeActivity.this, 
         new String[]{Manifest.permission.ACCESS_FINE_LOCATION, 
           Manifest.permission.ACCESS_COARSE_LOCATION}, 
         REQUEST_LOCATION); 
      } 
     }); 
     builder.create().show(); 
+0

私はtoshをトーストするのを忘れましたが、shouldShowRequestPermissionRationaleがデバッガで決して真ではないことを確認します。 –

+0

これは実際のデバイスですか、またはエミュレートされていますか? –

+0

は実際のデバイスです –

関連する問題