2014-02-25 5 views
1

안드로이드 응용 프로그램을 만들고 있는데, 목록보기 항목을 클릭하면 클릭 한 항목의 ID를 찾고 자원을 얻고 설정합니다. 이 오류가 발생합니다. 유형의 setActualDefaultRingtoneUri(Context, int, Uri) 메서드는 인수에 적용 할 수 없습니다 (new AdapterView.OnItemClickListener)RingtoneManager 형식의 setActualDefaultRingtoneUri (Context, int, Uri) 메서드는 인수에 적용 할 수 없습니다. OnItemClickListener

어떻게 해결할 수 있습니까?

listv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     String selectedName = ((ListView) view.findViewById(R.id.listView1)).getContext() 
       .toString(); 

     AssetManager assetManager = getAssets(); 

     File file = new File(Environment.getExternalStorageDirectory(), 
       "/myRingtonFolder/Audio/"); 
     if (!file.exists()) { 
      file.mkdirs(); 
     } 

     String path = Environment.getExternalStorageDirectory() 
       .getAbsolutePath() + "/MyRingtones/Audio/"; 

     File out = new File(path + "/", selectedName); 
     if (!out.exists()) { 
      try { 
       copyFile(assetManager, "Ringtone.mp3", out); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     ContentValues values = new ContentValues(); 
     values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath()); 
     values.put(MediaStore.MediaColumns.TITLE, "airh"); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
     values.put(MediaStore.MediaColumns.SIZE, out.length()); 
     values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); 
     values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
     values.put(MediaStore.Audio.Media.IS_ALARM, true); 
     values.put(MediaStore.Audio.Media.IS_MUSIC, true); 

     Uri uri = MediaStore.Audio.Media.getContentUriForPath(out.getAbsolutePath()); 
     ContentResolver mCr = getContentResolver(); 
     Uri newUri = mCr.insert(uri, values); 

     try { 
      RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, 
        newUri); 
      Settings.System.putString(mCr, Settings.System.RINGTONE, 
        newUri.toString()); 
     } catch (Throwable t) { 
      //TODO Handle exception 
     } 
     switch (position) { 
      case 0: 
       if (mp != null) { 
        mp.release(); 
        mp = null; 
       } 

       mp = MediaPlayer.create(Context.this, 
         R.raw.aint); 
       mp.start(); 

       break; 
      case 1: 
       if (mp != null) { 
        mp.release(); 
        mp = null; 
       } 

       mp = MediaPlayer.create(Context.this, 
         R.raw.airh); 
       mp.start(); 
       break; 
     } 
    } 
}); 

답변

2

는 당신은 너무 this 그것에 referrence 것 OnItemClickListener 인터페이스에 있습니다.

RingtoneManager.setActualDefaultRingtoneUri(
    MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri); 

또는

RingtoneManager.setActualDefaultRingtoneUri(
    getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri); 

MediaPlayer.create(MainActivity.this, R.raw.aint);

에 대해 동일한 작업을 수행합니다

이 단지

처럼를이 전에 활동의 이름을 걸거나 컨텍스트 getApplicationContext()를 물어 피하려면

+0

감사합니다. 그것은 효과가있다! – user3231871