【问题标题】:how do I get value from BroadcastReceiver activity to main activity如何从 BroadcastReceiver 活动获取价值到主要活动
【发布时间】:2014-04-08 13:09:00
【问题描述】:

我想在我的MainActivity 中获取安装引荐来源网址值。为此我使用了两个类

1)MainActivity

2)ReferrerReceiver

我在ReferrerReceiver 类中成功收到了安装推荐人值,我使用 Toast 控件对此进行了测试。

但我无法将此值从ReferrerReceiver 传递给MainActivity

下面是我尝试过的代码。请任何人帮助我。

感谢您的提前。


1) MainActivity.java

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv1 = (TextView) findViewById(R.id.tv1);
        Intent in1= getIntent();
        String ldString = in1.getStringExtra("number");
        tv1.setText(ldString);

    }
}

2) ReferrerReceiver.java

public class ReferrerReceiver extends BroadcastReceiver {           
    @Override
    public void onReceive(Context context, Intent intent) {

        if (!intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) {
            return;
        }

          Bundle bundle = intent.getExtras();        
          String phoneNumber = bundle.getString("referrer");
          Intent i = new Intent(context, MainActivity.class);
          i.putExtra("number", phoneNumber);
          context.startActivity(i);
  }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myreferrer.in"
      android:versionCode="7"
    android:versionName="1.0.6" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"                
         >

        <receiver android:name="com.myreferrer.in.ReferrerReceiver"
            android:enabled="true">               
                <action android:name="com.android.vending.INSTALL_REFERRER" />
                </intent-filter>
        </receiver>

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" 
            android:launchMode="singleTask"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

【问题讨论】:

    标签: java android broadcastreceiver installation referrer


    【解决方案1】:

    这是我在我的项目中实现的。它对我有用。 使用此代码

    (1) MainActivity.java

    public class MainActivity extends Activity {
    
        TextView tv1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv1 = (TextView) findViewById(R.id.tv1);
        }
    
        public static void log(Context context, String string) {
            if(string!=null) {
                Toast.makeText(conte, "Referrer value is."+string, Toast.LENGTH_LONG).show();
           tv1.setText(string);
        }
    
    }
    

    (2) ReferrerReceiver.java

    public class ReferrerReceiver extends BroadcastReceiver {
        String referrer,rawReferrer;
        public static String getReferrer(Context context) {
            // Return any persisted referrer value or null if we don't have a referrer.
            return context.getSharedPreferences("referrer", Context.MODE_PRIVATE).getString("referrer", null);
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
            // Make sure this is the intent we expect - it always should be.
            if ((null != intent) && (intent.getAction().equals("com.android.vending.INSTALL_REFERRER"))) {
                // This intent should have a referrer string attached to it.
                rawReferrer = intent.getStringExtra("referrer");
                if (null != rawReferrer) {
                    // The string is usually URL Encoded, so we need to decode it.
                    referrer = URLDecoder.decode(rawReferrer, "UTF-8");                           
                    Toast.makeText(context, "ReferrerReceiver." + referrer, Toast.LENGTH_LONG).show();
                    MainActivity.log(context,"\nRaw referrer: " + rawReferrer +"\nReferrer: " + referrer);
                    MainActivity.log(context,referrer);
    
                    // Persist the referrer string.
                        context.getSharedPreferences("referrer", Context.MODE_PRIVATE).
                        edit().putString("referrer", referrer).commit();
                    } else {
                        Toast.makeText(context, "ReferrerReceiver." + referrer, Toast.LENGTH_LONG).show();
                        MainActivity.log(context,referrer);
                        context.getSharedPreferences("referrer", Context.MODE_PRIVATE).
                        edit().putString("referrer", referrer).commit();
                    }
                } else {
                    Toast.makeText(context, "ReferrerReceiver intent value is null.", Toast.LENGTH_LONG).show();
                    MainActivity.log(context,referrer);
                    MainActivity.log(context,"intent value is nulll");
                    context.getSharedPreferences("referrer", Context.MODE_PRIVATE).
                    edit().putString("referrer", "intent value is nulll").commit();
                }
            }
            catch (Exception e) {
                //Toast.makeText(context, "ReferrerReceiver catch"+e, Toast.LENGTH_LONG).show();
                MainActivity.log(context, e.toString());
            }
        }
    }
    

    (3) AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.myreferrer.in"
          android:versionCode="7"
        android:versionName="1.0.6" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme"                
             >
    
            <receiver android:name="com.myreferrer.ReferrerReceiver" android:exported="true">
                <intent-filter>
                    <action android:name="com.android.vending.INSTALL_REFERRER"></action>
                </intent-filter>
            </receiver> 
    
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" 
                android:launchMode="singleTask"
                >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    </manifest>
    

    (4) 示例链接:

    https://play.google.com/store/apps/details?id=your_package_name&referrer=Welcome

    【讨论】:

      【解决方案2】:

      你正在使用

      Intent in1 = new Intent();
      String ldString = in1.getStringExtra("KEY");
      

      你声明的新意图是错误的,而且你输入的键也是错误的,应该是number 替换为,

      Intent intent= getIntent();
      String ldString = intent.getStringExtra("number");
      

      【讨论】:

      • 我试过这个。这也不起作用。意图意图= getIntent(); String ldString = intent.getStringExtra("number");
      • 安装引荐来源网址只能在 Playstore 应用程序中工作,所以我在 Play 商店中上传,发布此应用程序后,我已经从 Play 商店安装和启动应用程序。 MainActivity 类意图收到的值为'null'
      【解决方案3】:

      您已在清单中将您的活动声明为“单个任务”;因此,如果您的实例

      活动已经启动,系统将创建 (NewIntent) 来重新午餐

      activity.try 将此代码放在 onCreate() 之前:

      @Override

       protected void onNewIntent(Intent intent) {
      
           super.onNewIntent(intent);
      
           // NOW getIntent() should always return the recent
      
           setIntent(intent);
       }
      

      始终通过新的附加功能获得最新的意图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        相关资源
        最近更新 更多