在随机应用程序中调用共享按钮后的后台服务

时间:2015-12-21 14:33:58

标签: android android-activity browser service share

我想创建一个可以在后台执行某些操作的应用程序(我已经编程了),当你按下例如:chrome,facebook,youtube,...时分享按钮...

现在我有一项活动开始,但我只想在特定页面上打开浏览器。没有打开活动0.5秒所以我可以从意图中获取网址,然后打开浏览器。

我已经看到您需要使用服务,但我怎样才能从意图中获取资源,因为您无法调用getIntent();

这是我的代码。

public class Share扩展AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_share);
    Intent intent = getIntent();
    if (savedInstanceState == null && intent != null) {
        Log.d("INTENT", "intent != null");

        if (intent.getAction().equals(Intent.ACTION_SEND)) {
            Log.d("INTENT", "intent.getAction().equals(Intent.ACTION_SEND)");
            String url = intent.getStringExtra(Intent.EXTRA_TEXT);
            System.out.println("url = " + url);
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", url);
            clipboard.setPrimaryClip(clip);
            Uri uri = Uri.parse("www.google.be");
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        }
    }
}

}

编辑1;

public class ShareService extends IntentService {
    public ShareService(String name) {
        super(name);
    }
@Override
protected void onHandleIntent(Intent intent) {
    if (intent != null) {
        Log.d("INTENT", "intent != null");
        if (intent.getAction().equals(Intent.ACTION_SEND)) {
            Log.d("INTENT", "intent.getAction().equals(Intent.ACTION_SEND)");
            String url = intent.getStringExtra(Intent.EXTRA_TEXT);
            System.out.println("url = " + url);
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", url);
            clipboard.setPrimaryClip(clip);
            Uri uri = Uri.parse("http://www.youtube-mp3.org/nl");
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        }
    }
}

}

我的活动就是这个。

public class Share扩展AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    ShareService shareService = new ShareService("Share Service");
    shareService.startService(intent);
    finish();
}

}

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.vanlooverenkoen.youtubtomp3">

    <uses-permission android:name="android.permission.INTERNET" />


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

        <activity android:name="Share">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
                <data android:mimeType="image/*" />
                <data android:mimeType="video/*" />
            </intent-filter>
        </activity>
    </application>
    <service
        android:name=".ShareService"
        android:enabled="true"
        android:exported="true"></service>
</manifest>

我在sharService.startService(intent);

上得到一个nullpointer异常

我的活动的正确性(故障在哪里)

public class Share extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startService(new Intent(this, ShareService.class));
        finish();
    }
}

1 个答案:

答案 0 :(得分:1)

  

我想创建一个可以在后台执行某些操作的应用程序(我已经编程了),当您按下例如:chrome,facebook,youtube

中的共享按钮时

ACTION_SEND仅用于活动。您需要有一项活动,例如您工作的活动。欢迎该活动通过startService()开始提供服务,如果它选择的话。

  

如何从意图中获取资源,因为您无法调用getIntent()

您的活动可以通过与Intent一起使用的startService()将所需的任何详细信息传递给服务。该服务将获得IntentonStartCommand()的副本。