0

数値をファイルに書き込んでおり、そのファイルを電子メールで送信したいと考えています。ファイルは電子メールで受信されますが、空です。

しかし、「data/data/com.example.write_file/files/samplefile.txt」を見ると、ファイルは問題なく、レコードが書き込まれています。

私が間違っていることを誰か知っていますか?

package com.example.write_file;

+import java.io.FileOutputStream;

public class MainActivity extends Activity {  
private EditText getInput;     
    int D;
    String W;
    char chr;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);         

    setContentView(R.layout.activity_main);
    getInput = (EditText) findViewById(R.id.getInput);       
     D=0; 
   TextView textView1 = (TextView) findViewById(R.id.textView1);
   textView1.setText("Write a number you want to send in the txt file") ; 

}

public void onClick(View view) {        

    write_file();    

    D=D+1;
    W=getInput.getText().toString();  //will get a string 
     if (getInput.getText().length() > 0){       
      chr=W.charAt(0);}  //W convert to char 
        switch (view.getId())    {
        case R.id.button1:
          if (((chr==(char)45)&&(getInput.getText().length() < 2))||(getInput.getText().length() == 0)){             
            Toast.makeText(this, "Please enter a text",
                Toast.LENGTH_LONG).show();               
            return;
          }   

            TextView getInput1 = (TextView) findViewById(R.id.textView1);
            getInput1.setText("Write a number you want to send in the txt file") ;
          break;                 }                        

}   

public void onClick2(View view) {       
 sendfile();
 finish();  
}      

public void write_file() {  //writes into local not to a sdcard

    try { // catches IOException below            
        FileOutputStream fOut = openFileOutput("samplefile.txt",MODE_APPEND); 
        OutputStreamWriter osw = new OutputStreamWriter(fOut);              
        osw.append(W + "\n");  // Write the string to the file  - "\n" similar to writeln in pascal (use wordpad not notepad)  

        osw.flush();
        osw.close();

        if (D>=55) {    finish();}

        Toast.makeText(this, "I am writing to the file",
        Toast.LENGTH_SHORT).show();
       // the file you can find in DDMS-File Explorer-"/data/data/your_project_package_structure/files/samplefile.txt"
       // there is an icon mobile phone for pulling file from device or putting file onto device    
}
    catch (IOException ioe) 
    {Toast.makeText(this, "Exception-file not exists?",
            Toast.LENGTH_SHORT).show();}
 }
/*    
public void sendfile(){
    String nfile;
    nfile="samplefile.txt";
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.ACTION_SENDTO, new String[] 
            {"xxxx@yyyy.com"}); 
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT,
    "File attached.");
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("data/data/com.example.write_file/files"+ nfile));
       startActivity(Intent.createChooser(emailIntent,
    "Send email using.."));

    Toast.makeText(this, "The file was sent",
            Toast.LENGTH_SHORT).show();

}   */
public void sendfile(){
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.ACTION_SENDTO, new String[] 
            {"xxxx@yyyy.com"}); 
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT,
    "File attached.");
    File file = getFileStreamPath("samplefile.txt");
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+file.getAbsolutePath()));
       startActivity(Intent.createChooser(emailIntent,
    "Send email using.."));

    Toast.makeText(this, "The file was sent",
            Toast.LENGTH_SHORT).show();

 }
}    

**in the manifest I put:**
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.write_file"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/my_path" />
</provider>
    <activity
        android:name="com.example.write_file.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

**and in the  my_path.xml :**
<paths>
<files-path name="files" path="files/"/>    
</paths>
4

2 に答える 2

3

まず、サードパーティのアプリは内部ストレージにアクセスできません。ファイルを外部ストレージに書き込むか、内部ストレージへの選択的なアクセスを提供してみてください。FileProvider

次に、パスをハードコードしないでください。あなたのコードは、多くの Android デバイスで失敗します。ハードコーディングの代わりにgetFilesDir()orを使用します。getFileStreamPath()data/data/com.example.write_file/files

于 2013-10-05T15:51:53.443 に答える
0

電子メールを送信するには、外部ストレージを使用する必要があります。現在行っているアプリケーション データ ファイル パスを使用すると、アクセス許可拒否の例外が発生します。

その代わりに、ファイルを外部ストレージに保存してから、Intent を使用して送信します。

于 2013-10-05T15:53:43.610 に答える