android - development - মোবাইল সফটওয়্যার তৈরি




কিভাবে অ্যান্ড্রয়েডের জন্য StartActivityForResult পরিচালনা করবেন? (6)

আমার কার্যকলাপে, আমি startActivityForResult দ্বারা প্রধান ক্রিয়াকলাপ থেকে দ্বিতীয় ক্রিয়াকলাপ কল করছি। আমার দ্বিতীয় ক্রিয়াকলাপে এমন কিছু পদ্ধতি রয়েছে যা এই কার্যকলাপটি শেষ করে (সম্ভবত ফলাফল ছাড়াই), তবে, তাদের মধ্যে মাত্র একটি ফলাফল প্রদান করে।

উদাহরণস্বরূপ, প্রধান কার্যকলাপ থেকে আমি একটি দ্বিতীয় কল। এই কার্যকলাপে আমি হ্যান্ডসেটের কিছু বৈশিষ্ট্য যেমন চেক করছি ক্যামেরা আছে। যদি এটি না থাকে তবে আমি এই কার্যকলাপ বন্ধ করব। এছাড়াও, কোন সমস্যা হলে MediaRecorder বা MediaPlayer প্রস্তুতির সময় আমি এই কার্যকলাপটি বন্ধ করব।

যদি তার যন্ত্রটিতে ক্যামেরা থাকে এবং রেকর্ডিং সম্পূর্ণভাবে সম্পন্ন হয়, তবে কোনও ভিডিও রেকর্ড করার পরে কোনও ব্যবহারকারী যদি সম্পন্ন বোতামে ক্লিক করে তবে আমি ফলাফল (রেকর্ডকৃত ভিডিওর ঠিকানা) মুখ্য কার্যকলাপে পাঠাব।

কিভাবে আমি প্রধান কার্যকলাপ থেকে ফলাফল পরীক্ষা করবেন?


কিভাবে প্রধান কার্যকলাপ থেকে ফলাফল চেক করবেন?

আপনাকে Activity.onActivityResult() ওভাররাইড করতে হবে তারপরে তার প্যারামিটারগুলি চেক করুন:

  • requestCode সনাক্ত করে কোন অ্যাপ্লিকেশন এই ফলাফল ফিরে। যখন আপনি startActivityForResult() কল করেন তখন এটি আপনার দ্বারা সংজ্ঞায়িত করা হয়।
  • resultCode এই অ্যাপ্লিকেশন সফল, ব্যর্থ হয়েছে, অথবা কিছু ভিন্ন আপনাকে জানাচ্ছে
  • data এই অ্যাপ্লিকেশন দ্বারা ফিরে কোন data ঝুলিতে। এই null হতে পারে।

@ নিশান্তের উত্তরটি পরিপূরক করে, কার্যকলাপের ফলাফল ফেরত দেওয়ার সেরা উপায় হল:

Intent returnIntent = getIntent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();

আমি সমস্যা ছিল

new Intent();

তারপর আমি খুঁজে পেয়েছি যে সঠিক উপায় ব্যবহার করা হয়

getIntent();

বর্তমান অভিপ্রায় পেতে


আপনার প্রথম FirstActivity থেকে startActivityForResult() পদ্ধতি ব্যবহার করে SecondActivity FirstActivity কল করুন

উদাহরণ স্বরূপ:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

আপনার SecondActivity আপনি যে FirstActivity ফিরে যেতে চান সেট করুন। যদি আপনি ফিরে না আসতে চান, কোন সেট করবেন না।

উদাহরণস্বরূপ: দ্বিতীয় SecondActivity আপনি যদি ডেটা পাঠাতে চান:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

আপনি তথ্য ফেরত দিতে না চান তাহলে:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

এখন আপনার প্রথম FirstActivity ক্লাসে onActivityResult() পদ্ধতির জন্য নিম্নলিখিত কোডটি লিখুন।

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult

প্রথমত আপনি প্রথম Activity মধ্যে পরামিতিগুলির সাথে startActivityForResult() ব্যবহার করুন এবং যদি আপনি দ্বিতীয় Activity থেকে প্রথম Activity ডেটা পাঠাতে চান তবে setResult() পদ্ধতির সাথে Intent ব্যবহার করে মানটি পাস করুন এবং প্রথম Activity মধ্যে onActivityResult() পদ্ধতির ভিতরে সেই তথ্যটি পান।


অন ​​অ্যাক্টিভিটি রিসাল্টে ভুল অনুরোধ কোডে সমস্যা আছে যারা জন্য

আপনি যদি আপনার Fragment থেকে startActivityForResult() কল করছেন তবে অনুরোধ কোডটি ফ্র্যাগমেন্টের মালিকানাধীন কার্যকলাপ দ্বারা পরিবর্তিত হয়।

আপনি যদি আপনার ক্রিয়াকলাপে সঠিক ফলাফল কোড পেতে চান তবে এটি চেষ্টা করুন:

পরিবর্তন:

startActivityForResult(intent, 1); প্রতি:

getActivity().startActivityForResult(intent, 1);


উদাহরণ

প্রসঙ্গে পুরো প্রক্রিয়া দেখতে এখানে একটি সম্পূরক উত্তর। আরো ব্যাখ্যা জন্য আমার পূর্ণাঙ্গ উত্তর দেখুন।

MainActivity.java

public class MainActivity extends AppCompatActivity {

    // Add a different request code for every activity you are starting from here
    private static final int SECOND_ACTIVITY_REQUEST_CODE = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // "Go to Second Activity" button click
    public void onButtonClick(View view) {

        // Start the SecondActivity
        Intent intent = new Intent(this, SecondActivity.class);
        startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);
    }

    // This method is called when the second activity finishes
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // check that it is the SecondActivity with an OK result
        if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) { // Activity.RESULT_OK

                // get String data from Intent
                String returnString = data.getStringExtra("keyName");

                // set text view with string
                TextView textView = (TextView) findViewById(R.id.textView);
                textView.setText(returnString);
            }
        }
    }
}

SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    // "Send text back" button click
    public void onButtonClick(View view) {

        // get the text from the EditText
        EditText editText = (EditText) findViewById(R.id.editText);
        String stringToPassBack = editText.getText().toString();

        // put the String to pass back into an Intent and close this activity
        Intent intent = new Intent();
        intent.putExtra("keyName", stringToPassBack);
        setResult(RESULT_OK, intent);
        finish();
    }
}






startactivityforresult