Obtener cadena de paquete devuelve Android nulo

Quiero pasar una cadena de una actividad a otra, en una de ellas escribí

public void pdfView (File f) {

 // f is: /data/data/com.example.iktabClasses/files/fileName.pdf

 Intent intent = new Intent(getApplicationContext(),NewPdfActivity.class);

 intent.putExtra("filename", f);

    startActivity(intent);

}

y en la otra actividad escribí:

  Bundle b=getIntent().getExtras();

        if (b != null) {

        filename = getIntent().getStringExtra("filename");

       System.out.println("filename: "+filename);
    } 

pero el nombre de archivo siempre se devuelve como 'nulo'. ¿Cómo resolver esto? Gracias por adelantado. ////////////////////

Lo hice como

   Intent intent;
    Bundle b = new Bundle();

    b.putString("filename", f.toString());

    intent = new Intent(getApplicationContext(),NewPdfActivity.class);

    intent.putExtras(b);

    startActivity(intent);

y ahora funciona

Respuestas a la pregunta(2)

Su respuesta a la pregunta