2017-03-15 15 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 
); 

、これと1(ない仕事)

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

2つの権限が追加され、meepmeep.mp3はRESフォルダ内にある、なぜイベント火災がプレイしない時に、なぜ、誰かが私に説明することができますアプリで音ではなくRingtoneManager.setActualDefaultRingtoneUri

答えて

0

に着信音を割り当て、このリンクを参照してください:

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

アプリがAPIのLEVをターゲットにしている場合アプリのユーザーは、権限管理画面を通じてこの権限をアプリに明示的に付与する必要があります。アプリは、アクションACTION_MANAGE_WRITE_SETTINGSでインテントを送信してユーザーの承認を要求します。アプリは、この承認を持っているかどうかをSettings.System.canWrite()を呼び出して確認できます。

startActivity(intent)を使用しないでください。代わりに、startActivityForResultを使用してMANAGE_WRITE_SETTINGSアクティビティのフィードバックを聞いてください。 onActivityResultメソッドでは、リクエストコードをチェックしてSettings.System.canWriteを再度チェックすることができます。書き込み権限があれば、着信音を再度設定する必要があります。これは自動ではありません。

+0

はいコード例は「はっきり」私がこれをやっていることを示していますが、うまくいきません。 –

+0

@MrHeelis startActivity(intent)は使用しないでください。代わりにstartActivityForResultを使用してMANAGE_WRITE_SETTINGSアクティビティのフィードバックを聞いてください。 onActivityResultメソッドでは、リクエストコードをチェックしてSettings.System.canWriteを再度チェックすることができます。書き込み権限があれば、着信音を再度設定する必要があります。これは自動ではありません。 – Hexise

+0

@MrHeelis btw、生のリソースの代わりに携帯電話の外部ストレージから着信音を設定できますか?これが問題なのかどうかはわかりません。 – Hexise

関連する問題