2017-05-16 11 views
0

私はアンドロイドNDKでいくつかのコマンドラインツールをビルドし、/ data/local/tmpで実行します。今度は "android.permission.RECORD_AUDIOが必要です"というメッセージが表示されます。通常、Androidアプリケーションの場合はAndroidManifest.xmlにありますが、アンドロイドシェルユーザにそれを与える方法はありますか?アンドロイドシェルユーザーにandroid.permission.RECORD_AUDIO権限を与える方法はありますか?

ソースコードのような:

sp<AudioRecord> rec = new AudioRecord(AUDIO_SOURCE_MIC, 44100, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_MONO); 

Logcat:

I/AudioFlinger(3772): AudioFlinger's thread 0xf0e838c0 ready to run 
W/ServiceManager(3772): Permission failure:android.permission.RECORD_AUDIO from uid=2000 pid=-1 
E/  (3772): Request requires android.permission.RECORD_AUDIO 
E/AudioFlinger(3772): openRecord() permission denied: recording not allowed 
E/AudioRecord(14132): AudioFlinger could not create record track, status: -1 
--------- beginning of crash 
... 

答えて

0
private void requestRecordAudioPermission() { 

     String requiredPermission = Manifest.permission.RECORD_AUDIO; 

     // If the user previously denied this permission then show a message explaining why 
     // this permission is needed 
     if (getActivity().checkCallingOrSelfPermission(requiredPermission) == PackageManager.PERMISSION_GRANTED) { 

     } else { 

      Toast.makeText(getActivity(), "This app needs to record audio through the microphone....", Toast.LENGTH_SHORT).show(); 
      requestPermissions(new String[]{requiredPermission}, 101); 
     } 


    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     if (requestCode == 101 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // This method is called when the permissions are given 
     } 

    } 

あなたはロリポップ後マシュマロまたは上位OS

1

でデバイスを持っている場合は、このコードを実行するAndroidプラットフォームを使用していますリアルタイムパーミッション。アプリがMarshmallowとそれ以降のバージョンで動作している場合は、アクティビティで権限を付与する必要があります。要求権限の前に

:この後

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == 
       PackageManager.PERMISSION_GRANTED) { 
      // put your code for Version>=Marshmallow 
     } else { 
      if (shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) { 
       Toast.makeText(this, 
         "App required access to audio", Toast.LENGTH_SHORT).show(); 
      } 
      requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO 
      }, REQUEST_CAMERA_PERMISSION_RESULT); 
     } 

    } else { 
     // put your code for Version < Marshmallow 
    } 

、この方法overraideとあなたのコード入れ:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == REQUEST_AUDIO_PERMISSION_RESULT) { 
     if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(getApplicationContext(), 
        "Application will not have audio on record", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+0

をターゲットSDKが23以下である場合は、あなたのターゲットSDKが何であるかに依存します実行時のアクセス許可を与える必要はありません。 – ClassA

関連する問題