1

写真のURI、タイムスタンプ、地理的位置スタンプを含むテキストファイルにエントリを作成して、撮影したすべての写真を記録するAndroidアプリを作成したいと考えています。これは、写真がクリックされたときに発生するはずです。
このために、デフォルトの写真ディレクトリで FileObserver を使用するサービスを実行しています。(これはばかげた証拠ではないことはわかっています)。

ユーザーは最初に GUI で迎えられ、ファイル名と開始ボタンを選択して記録を開始できます。ユーザーが録画の開始を押すと、バックグラウンド サービスが開始され、ユーザーは写真を撮るために戻ってきます。1 戻ると、バックグラウンド サービスを終了する録画を停止するオプションが必要です。

今、私の問題はこれです
.1.アクティビティは、サービスが実行されているときと実行されていないときをどのように認識しますか?
2. アクティビティの以前の状態を復活させ、特定のサービスに再接続するにはどうすればよいですか? アクティビティを復活させると、アクティビティとサービスの関連付けはどのように行われますか? (アクティビティがサービスを停止する必要がある場合は、何らかの関連付けが必要であると考えてください)

参照用のコードは次のとおりです。 [ExperienceLoggerService は MainActivity の内部クラスです]

public class ExperienceLoggerService extends Service
/* This is an inner class of our main activity, as an inner class makes good use of resources of outer class */
{


    private final IBinder mBinder = new LocalBinder();      
    File file;
    FileOutputStream fOut;
    OutputStreamWriter fWrite;
    /** Called when the activity is first created. */
    private void startLoggerService() 
    {
        try
        {
            //initialise the file in which to log
            this.file = new File(Environment.getExternalStorageDirectory(), "MyAPPNostalgia");
            System.out.println("1:"+Environment.getExternalStorageDirectory()+ "MyAPPNostalgia");
            file.createNewFile();
            fOut = new FileOutputStream(file);
            fWrite = new OutputStreamWriter(fOut);
        }
        catch(Exception e)
        {
            System.out.println("Error in logging data, blame navjot");
        }
        FileObserver observer = new MyFileObserver(android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/100MEDIA");
        observer.startWatching(); // start the observer
    }

    @Override
    public void onCreate() 
    {
        super.onCreate();
        //mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        startLoggerService();

        // Display a notification about us starting. We put an icon in the
        // status bar.
        //showNotification();
    }

    public void onDestroy() 
    {
        try
        {
            //close the file, file o/p stream and out writer.
            fWrite.close(); 
            fOut.close();
        }

        catch(Exception e)
        {
        }

        super.onDestroy();

    }

    class MyFileObserver extends FileObserver
    {
        public MyFileObserver(String path) 
        {
            super(path);
        }

        public void onEvent(int event, String file) 
        {
            if(event == FileObserver.CREATE && !file.equals(".probe"))
            { // check if its a "create" and not equal to .probe because thats created every time camera is launched
                String fileSaved = "New photo Saved: " + file +"\n";
                try
                {
                    ExperienceLoggerService.this.fWrite.append(fileSaved);
                }
                catch(Exception e)
                {
                    System.out.println("Problem in writing to file");
                }
            }
        }
    }


    @Override
    public IBinder onBind(Intent intent) 
    {
        return mBinder;
    }

    public class LocalBinder extends Binder 
    {
        ExperienceLoggerService getService() 
        {
            return ExperienceLoggerService.this;
        }
    }

}
4

1 に答える 1