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

Background Service after share button called in a random app

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

现在我有一个 activity 可以启动,但我只想在特定页面上打开浏览器。无需打开 activity 0.5 秒,这样我就可以从意图中获取 url,然后打开浏览器。

我看到你需要使用服务,但我怎么能从意图中获取资源,因为你不能调用 getIntent();

这是我的代码。

public class 共享扩展 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));
        }
    }
}

}

我的activity就是这个。

public class 共享扩展 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);

上得到一个空指针异常

我的活动的正确版本(错误所在)

public class Share extends AppCompatActivity {

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

I want to create an app that can do something in the background (i have already programed that) when you press the sharebutton in for examplein: chrome, facebook, youtube

ACTION_SEND 只去活动。您将需要一个 activity,例如您正在工作的那个。如果 activity 愿意,欢迎通过 startService() 启动服务。

how can I get the resources out of the intent because you can't call getIntent()

您的 activity 可以通过与 startService() 一起使用的 Intent 将任何它想要的详细信息传递给服务。该服务将在 onStartCommand().

中获得 Intent 的副本