android实现apk分享功能,图⽂详解Android⼼愿分享应⽤⼀.App的功能包括:
上传照⽚;
DIY专属祝福语;
⼀键分享到票圈~
⼆.准备⼯作
分析xml的样式布局,采⽤绝对布局RelativeLayout,我们可以容易处理各个组件之间的位置关系,包括两个ImageView存放图⽚,⼀个Button作为分享,还有⼀个EditText输⼊新年⼼愿
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
tools:context="demo.linhao.springcart.MainActivity">
android:id="@+id/photo"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_centerHorizontal="true"
android:background="#e10d0d"
android:class="lazyload" src="img-blog.csdnimg/2022010619010413899.png" data-
original="@drawable/ic_launcher"
android:padding="3dp"
android:layout_marginTop="80dp"/>
android:id="@+id/words"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/photo"
android:background="@drawable/send_btn_pressed"
android:layout_centerHorizontal="true"
android:hint="写下您的新年愿望"
android:gravity="center"
android:layout_marginTop="70dp"/>
android:id="@+id/share"
android:layout_width="90dp"
android:layout_height="50dp"
android:background="@drawable/share"
android:layout_marginTop="30dp"
android:layout_below="@id/words"
android:layout_centerHorizontal="true"
/>
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/logo"
android:layout_below="@id/photo"
android:layout_toRightOf="@id/words"
android:padding="3dp"
android:layout_marginTop="20dp"/>
三、直接在清单⽂件设置主题是⽆标题全屏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
四、第⼀个功能--上传本地图库相册
⾸先在MainActivity这个主activity⽂件先初始化ImageView控件,接着设置它的点击事件,这⾥直接⽤匿名类重写onClick⽅法,
紧接着创建Intent对象,通过隐式的启动⽅式获取系统图库的信息,action参数我们使⽤系统提供打开图像的常量ACTION_PICK,第⼆个是uri,直接传⼊null就⾏了
new Intent(Intent.ACTION_PICK,null);
这⾥我们使⽤startActivityForResult带有返回结果这个⽅法,然后覆盖onActivityResult去处理返回结果
startActivityForResult(intent,100);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == 100)
{
if (data != null)
{
mPhoto.Data());
}
}
setDataAndType()这个⽅法从字⾯我们就知道它接收date和type
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
MediaStore.Images.Media.EXTERNAL_CONTENT_URI 获取系统图库的信息 ,系统默认的MediaStore的uri地址, type使⽤标准的mime,下⾯是完整的代码
mPhoto = (ImageView) findViewById(R.id.photo);
mPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK,null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent,100);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == 100)
{
if (data != null)
{
mPhoto.Data());
}
}
}
五、修改系统默认字体:
创建⼀个assets⽬录,在fonts⽂件下存放我们⾃定义的字体⽂件,⽤createFromAsset的接⼝⽣成新的typeface
createFromAsset(AssetManager mgr, String path)
通过getAssets()获取getAssets获取AssetManager,第⼆个参数传⼊⾃定义的字体库⽂件
mWords = (EditText) findViewById(R.id.words);
mWords.ateFromAsset(getAssets(), "f"));
六、到了分享到朋友圈这⼀环节了~
⾸先,你得先在开放者平台注册⼀个账号,紧接着你就可以创建属于⾃⼰的应⽤了
等等,这⾥有⼀些注意事项哦:
系统会让你输⼊你的应⽤包名,这⾥必须填写你程序的包名,否则将⽆法调试
如何获得应⽤签名呢?⼤家可以在官⽹到下载链接,地址如下,然后把apk安装到⾃个的真机上,还有你的应⽤打包后的apk,这样就可以在Gen_Signature_Android221cbf这个应⽤上填写⾃⼰的应⽤包名,系统会识别的app⾃动帮你⽣成签名,然后把它复制到填写处就OK了~
上⾯的都解决了,我们就开始进⼊代码部分了~
⾸先创建⼀个package,必须命名为wxapi,否则将⽆法识别
在官⽹下载⼀个开发⼯具包,在libs⽬录下有⼀个jar包,复制到⾃⼰的项⽬中,项⽬右键->open module settings->dependencies->点击+号,选择file dependency把jar包添加进去,这样你就可以使⽤的接⼝了
接下来是代码部分
可以去官⽹下载完整的demo⽰例,把WXEntryActivity拷贝⼀份到wxapi中,代码如下
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
// IWXAPI 是第三⽅app和通信的openapi接⼝
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
api = ateWXAPI(this,"wxf4881f29e3cf9218",false);
api.handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
switch (Code) {
case BaseResp.ErrCode.ERR_OK:
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
安卓intent用法
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
}
}
我们先实例化share控件,然后为它实现点击事件,定义⼀个wecharShare()⽅法,然后把刚刚下载过来的demo直接拷贝进来,如下:
WXWebpageObject webpage = new WXWebpageObject();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "WebPage Title";
msg.description = "WebPage Description";
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.scene = SendMessageToWX.Req.WXSceneTimeline;
iwxapi.sendReq(req);
七、获取系统截图接⼝:
getWindow().getDecorView();
通过getDecorView获取到decorView,decorView获取到程序显⽰的区域,包括标题栏,但不包括状态栏。间接可以计算状态栏⾼度。接着通过cache机制保存为bitmap,调⽤setDrawingCacheEnabled(...)⽅法,最会返回⽤getDrawingCache⽅法获取ImageView中的图像
P.S buildDrawingCache⽅法可以不⽤调⽤,因为调⽤getDrawingCache⽅法时,若果 cache没有建⽴,系统会⾃动调⽤buildDrawingCache⽅法⽣成cache。
private Bitmap generateSpringCart()
{
share.setVisibility(View.INVISIBLE);
View view = getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
DrawingCache();
}
⼋、可视化
因为截图后我们不想看到分享按钮,我们可以先把它在generateSpringCart()⽅法⾥⾯设置隐藏,View.INVISIBLE,然后share点击事件⾥⾯再设置share.setVisibility(View.VISIBLE),就可以了~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论