qq_33096909 2016-06-30 06:31
浏览 1182

android RingtoneManger 问题讨论

RingtoneManger 在部分机型上设置了通知铃声无效, 例如lenovo 4.2.2 ,但是在三星的4.2.2上面设置就成功,个人有点感觉跟uri有关,但是uri都有值,想问问有大神懂这问题吗?
测试代码如下
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private File[] files ;
private int i = 0 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File sdDir = null ;
if( Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
sdDir = new File(Environment.getExternalStorageDirectory().getPath()+"/Audio/Soundrecorder");
files = sdDir.listFiles();
}
findViewById(R.id.alterRing).setOnClickListener(this);
}

//设置为短信铃声
static void setMyMessage(Context context, String path) {
    Log.d("tag","absoultpath:"+path);
    File sdfile = new File(path);
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
    values.put(MediaStore.MediaColumns.SIZE, sdfile.length());
    values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
    values.put(MediaStore.Audio.Media.IS_ALARM, false);
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);

    Uri uri = MediaStore.Audio.Media.getContentUriForPath(path);
    ContentResolver cr =context.getContentResolver();
    Cursor cursor = cr.query(uri,new String[]{MediaStore.MediaColumns._ID},"_data = ? ",new String[]{path},null,null);
    cursor.moveToFirst();
    int ringtoneID = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
    Uri newUri = ContentUris.withAppendedId(uri, Long.valueOf(ringtoneID));
    RingtoneManager.setActualDefaultRingtoneUri(context,RingtoneManager.TYPE_NOTIFICATION,newUri);
    Intent i = new Intent("com.android.mms.change.ring");
    i.putExtra("newUri", uri.toString());
    context.sendBroadcast(i);//发一个广播到短信模块,让短信模块自己修改自己的SharedPreferences

    Toast.makeText(context, "setMessage-----"+sdfile.getName()+"---------------->",
            Toast.LENGTH_SHORT).show();
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.alterRing :
            setMyMessage(MainActivity.this,files[i].getAbsolutePath()) ;
            i++;
            break;
    }
}

}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?