2017-03-15 1 views
3

이것은 간단한 질문이며, 아마도 간단한 대답이지만 엄청난 양의 문맥이 있습니다.RingtoneManager.setActualDefaultRingtoneUri()가 API 23에서 작동합니까?

질문 :setActualDefaultRingtoneUri()이 여전히 API 23에서 작동합니까? 나는 그것이 문맥

기능을 얻을 수 없기 때문에 : 내가

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

AndroidManifest.xml을 설정 한 앱 자체는이 코드

public void desirePermissionCode() 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.System.canWrite(this)) { 
     new AlertDialog.Builder(this) 
       .setMessage("Please Assign Meep Meep Write Permissions") 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
         intent.setData(Uri.parse("package:" + getPackageName())); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

         try { 
          startActivity(intent); 
         } catch (Exception e) { 
          Log.e("MainActivity", "error starting permission intent", e); 
         } 
        } 
       }) 
       .show(); 
     return; 
    } 
} 

I과 권한을 할당 간단한 2 버튼 데모가 있습니다 (작동하지 않는 경우)

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/raw/meepmeep"); 
grantUriPermission("com.android.systemui", uri, 
        Intent.FLAG_GRANT_READ_URI_PERMISSION); 
RingtoneManager.setActualDefaultRingtoneUri(
      MainActivity.this, 
      RingtoneManager.TYPE_RINGTONE, 
      uri 
); 

이 하나 (하지 작업)

MediaPlayer mpintro; 
mpintro = MediaPlayer.create(me, Uri.parse("android.resource://"+getPackageName()+"/raw/meepmeep")); 
mpintro.start(); 

2 권한을 추가하고, meepmeep.mp3는 고해상도 폴더에, 왜 이벤트 화재가 재생 않을 때 왜 누군가가 나에게 설명 할 수 응용 프로그램에서 소리 만 RingtoneManager.setActualDefaultRingtoneUri

답변

0

이 링크를 참조하시기 바랍니다에 벨소리를 할당하지 :

https://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS

응용 프로그램 대상으로 API의 레프는 경우, el 23 이상을 사용하는 경우 앱 사용자는 권한 관리 화면을 통해 앱에이 권한을 명시 적으로 부여해야합니다. 앱은 ACTION_MANAGE_WRITE_SETTINGS 작업으로 인 텐트를 전송하여 사용자의 승인을 요청합니다. 앱은 Settings.System.canWrite()를 호출하여 권한 부여 여부를 확인할 수 있습니다.

startActivity (intent)를 사용하지 말고 startActivityForResult를 사용하여 MANAGE_WRITE_SETTINGS 활동의 의견을 들어보십시오. onActivityResult 메서드에서 요청 코드를 확인하고 Settings.System.canWrite를 다시 확인할 수 있습니다. 이제 쓰기 권한이 있으면 벨소리를 다시 설정해야합니다. 자동이 아닙니다.

+0

예 '명확하게'예제 코드가 작동하는 것을 보여 주지만 고맙습니다. 작동하지 않습니다. –

+0

@MrHeelis startActivity (의도)를 사용하지 말고 startActivityForResult를 사용하여 MANAGE_WRITE_SETTINGS 활동의 의견을 들어주세요. onActivityResult 메서드에서 요청 코드를 확인하고 Settings.System.canWrite를 다시 확인할 수 있습니다. 이제 쓰기 권한이 있으면 벨소리를 다시 설정해야합니다. 자동이 아닙니다. – Hexise

+0

@ MrHeelis btw, 원시 리소스 대신 휴대 전화 외장 저장 장치에서 벨소리를 설정할 수 있습니까? 이것이 문제인지 확실하지 않습니다. – Hexise

관련 문제