尝试在 Android Studio 中添加分享按钮
Trying to add share button in Android Studio
我曾尝试在 android 应用程序中使用 v7.support 库而不是使用它们来实现共享按钮。我正在尝试使用此代码,但它会在 getActionProvider:
上抛出 NPE
WebView webs = (WebView)findViewById(R.id.welcomeWebview);
ShareCompat.IntentBuilder b = ShareCompat.IntentBuilder.from(this).setType("text/html").setHtmlText(webs.getUrl());
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = (MenuItem) findViewById(R.id.menu_item_share);
Intent intent = b.getIntent();
MenuItemCompat.getActionProvider(item);
ShareActionProvider mShareActionProvider = (ShareActionProvider)item.getActionProvider();
mShareActionProvider.setShareIntent(intent);
这是我的相关 XML。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tgwf.www.tgwf" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
LogCat 堆栈在这里 :
11-02 06:17:50.005 11198-11198/org.tgwf.www.tgwf E/SysUtils: ApplicationContext is null in ApplicationStatus
11-02 06:17:50.063 11198-11198/org.tgwf.www.tgwf E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
11-02 06:17:50.063 11198-11198/org.tgwf.www.tgwf E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
11-02 06:17:50.132 11198-11198/org.tgwf.www.tgwf E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008d57
11-02 06:17:50.199 11198-11198/org.tgwf.www.tgwf E/DataReductionProxySettingListener: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp
item
此处为空。
而不是这个:
MenuItem item = (MenuItem) findViewById(R.id.menu_item_share);
使用这个:
MenuItem item = (MenuItem) menu.findItem(R.id.menu_item_share);
此外,它是 app:actionProviderClass
而不是 android:actionProviderClass
。
我建议使用支持库中的 class:
<item
android:id="@+id/menu_item_share"
android:title="Share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="ifRoom"/>
非常重要你的 Activity
必须扩展 ActionBarActivity
:
MyActivity extends ActionBarActivity
正确的导入:
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.ShareActionProvider;
import android.support.v4.app.ShareCompat;
import android.support.v4.view.MenuItemCompat;
在共享提供程序布局时使用它..
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_share"
android:title="Share"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
然后在您的 activity 或片段中覆盖此方法..
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.member_fragment,menu);
MenuItem menuItem = menu.findItem(R.id.action_share);
ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
if(mShareActionProvider!=null){
if(memberBean!=null){
mShareActionProvider.setShareIntent(createShare());
}
}
}
private Intent createShare() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,getDataToShare());
return shareIntent;
}
这里的 memberBean 是 java bean,我从中获取要共享的数据。您可以根据您的要求更改它。
我曾尝试在 android 应用程序中使用 v7.support 库而不是使用它们来实现共享按钮。我正在尝试使用此代码,但它会在 getActionProvider:
上抛出 NPEWebView webs = (WebView)findViewById(R.id.welcomeWebview);
ShareCompat.IntentBuilder b = ShareCompat.IntentBuilder.from(this).setType("text/html").setHtmlText(webs.getUrl());
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = (MenuItem) findViewById(R.id.menu_item_share);
Intent intent = b.getIntent();
MenuItemCompat.getActionProvider(item);
ShareActionProvider mShareActionProvider = (ShareActionProvider)item.getActionProvider();
mShareActionProvider.setShareIntent(intent);
这是我的相关 XML。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tgwf.www.tgwf" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
LogCat 堆栈在这里 :
11-02 06:17:50.005 11198-11198/org.tgwf.www.tgwf E/SysUtils: ApplicationContext is null in ApplicationStatus
11-02 06:17:50.063 11198-11198/org.tgwf.www.tgwf E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
11-02 06:17:50.063 11198-11198/org.tgwf.www.tgwf E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
11-02 06:17:50.132 11198-11198/org.tgwf.www.tgwf E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008d57
11-02 06:17:50.199 11198-11198/org.tgwf.www.tgwf E/DataReductionProxySettingListener: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp
item
此处为空。
而不是这个:
MenuItem item = (MenuItem) findViewById(R.id.menu_item_share);
使用这个:
MenuItem item = (MenuItem) menu.findItem(R.id.menu_item_share);
此外,它是 app:actionProviderClass
而不是 android:actionProviderClass
。
我建议使用支持库中的 class:
<item
android:id="@+id/menu_item_share"
android:title="Share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="ifRoom"/>
非常重要你的 Activity
必须扩展 ActionBarActivity
:
MyActivity extends ActionBarActivity
正确的导入:
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.ShareActionProvider;
import android.support.v4.app.ShareCompat;
import android.support.v4.view.MenuItemCompat;
在共享提供程序布局时使用它..
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_share"
android:title="Share"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
然后在您的 activity 或片段中覆盖此方法..
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.member_fragment,menu);
MenuItem menuItem = menu.findItem(R.id.action_share);
ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
if(mShareActionProvider!=null){
if(memberBean!=null){
mShareActionProvider.setShareIntent(createShare());
}
}
}
private Intent createShare() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,getDataToShare());
return shareIntent;
}
这里的 memberBean 是 java bean,我从中获取要共享的数据。您可以根据您的要求更改它。