[英]How to DeepLink in my application - Android
I want load this post content (title, summery, image and more ...) into my activity
. 我希望将此帖子内容(标题,夏季,图片等等)加载到我的
activity
。 post link : Link . 发布链接: 链接 。
I can load this data into activity
, for this job i use Retrofit
for connection way and load data with adapter
into Recyclerview
and when click on RecyclerView
items, send post content with Bundle
into other activity
! 我可以将这些数据加载到
activity
,对于这项工作,我使用Retrofit
进行连接,并使用adapter
将数据加载到Recyclerview
,当点击RecyclerView
项目时,将发布内容与Bundle
一起发送到其他activity
!
Activity codes: (with this codes, i give data from recyclerview
items.) 活动代码:(使用此代码,我从
recyclerview
项目中提供数据。)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.post_show_page);
bindActivity();
// Initialize
context = PostShow_page.this;
favDB = new FavHelper(context);
postShow_favPost = (ShineButton) mToolbar.findViewById(R.id.post_FavImage);
post_cover = (ImageView) findViewById(R.id.postShow_cover_image);
postShow_title = (TextView) findViewById(R.id.postShow_title);
postShow_title2 = (TextView) findViewById(R.id.postShow_titleBig);
//postShow_content = (TextView) findViewById(R.id.postShow_content_text);
postShow_dateTime = (TextView) findViewById(R.id.postShow_man_date_text);
postShow_author = (TextView) findViewById(R.id.postShow_man_author_text);
postShow_category = (TextView) findViewById(R.id.postShow_man_category_text);
title_sliding = (TextView) findViewById(R.id.post_sliding_title);
comment_Recyclerview = (RecyclerView) findViewById(R.id.comment_recyclerView);
post_content_web = (WebView) findViewById(R.id.postShow_content_web);
mLayoutManager = new LinearLayoutManager(this);
mAdaper = new CommentAdapter2(context, models);
//Give Data
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
postID = bundle.getInt("postID");
title = bundle.getString("title");
image = bundle.getString("image");
content = bundle.getString("content");
dateTime = bundle.getString("dateTime");
author = bundle.getString("author");
category = bundle.getString("category");
categoryID = bundle.getString("categoryID");
}
// Deep Linking
Intent intent = getIntent();
for (String key : intent.getExtras().keySet()) {
Log.e("Deep", key);
}
mAppBarLayout.addOnOffsetChangedListener(this);
// Setup comment RecyclerView
comment_Recyclerview.setLayoutManager(mLayoutManager);
comment_Recyclerview.setHasFixedSize(true);
postShow_favPost.init(this);
postShow_favPost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (postFavState == 0) {
/// Add to Database
favDB.insertFAV(context, title, image, content, dateTime, author, category);
postFavState++;
} else {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorON));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorON));
}
}
});
if (favDB.checkFavPost(title)) {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorON));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorOFF));
} else {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorOFF));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorON));
}
//mToolbar.inflateMenu(R.menu.post_menu);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
break;
}
return true;
}
});
startAlphaAnimation(mTitle, 0, View.INVISIBLE);
// Set Data into views
if (title != null) {
postShow_title.setText(title);
postShow_title2.setText(title);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
}
loadPostProgressDialog.createAndShow(this);
if (image != null) {
Glide.with(this)
.load(image)
.placeholder(R.drawable.post_image)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target,
boolean isFromMemoryCache, boolean isFirstResource) {
loadPostProgressDialog.dissmis();
return false;
}
})
.into(post_cover);
}
if (content != null) {
//postShow_content.setText(Html.fromHtml(content));
post_content_web.getSettings().setJavaScriptEnabled(true);
WebSettings settings = post_content_web.getSettings();
settings.setDefaultTextEncodingName("utf-8");
post_content_web.loadData(content, "text/html; charset=utf-8", "utf-8");
}
if (dateTime != null) {
postShow_dateTime.setText(dateTime);
}
if (author != null) {
postShow_author.setText(author);
}
if (category != null) {
postShow_category.setText(category);
}
post_cover.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BlurBehind.getInstance().execute(PostShow_page.this, new OnBlurCompleteListener() {
@Override
public void onBlurComplete() {
startActivity(new Intent(PostShow_page.this, DialogImage_page.class)
.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
.putExtra("imageCover", image));
}
});
}
});
postShow_category.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (categoryID != null) {
startActivity(new Intent(PostShow_page.this, Category_page.class)
.putExtra("categoryID", categoryID)
.putExtra("categoryTitle", category));
}
}
});
//Sliding Up
slideHandleButton = (ImageView) findViewById(R.id.image_sliding);
slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer);
slidingDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
@Override
public void onDrawerOpened() {
slideHandleButton.setImageResource(R.drawable.ic_down_arrow_sliding);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
// Load Comment data
bindData();
}
});
slidingDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
slideHandleButton.setImageResource(R.drawable.ic_up_arrow_sliding);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
}
});
}
private void bindActivity() {
mToolbar = (Toolbar) findViewById(R.id.postShow_toolbar);
mTitle = (TextView) findViewById(R.id.postShow_title);
mTitleContainer = (LinearLayout) findViewById(R.id.postShow_linearlayout_title);
mAppBarLayout = (AppBarLayout) findViewById(R.id.postShow_appBar);
}
private void bindData() {
// Setup Connect
Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class);
Call<R_CatModelResponse> call = apiInterface.getCatResponse(postID);
Log.d("PostID", "Post : " + postID);
call.enqueue(new Callback<R_CatModelResponse>() {
@Override
public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) {
if (response != null) {
models.addAll(response.body().getCat_posts().get(0).getComments());
mAdaper.notifyDataSetChanged();
Toast.makeText(PostShow_page.this, "GoTo Adapter", Toast.LENGTH_SHORT).show();
comment_Recyclerview.setAdapter(mAdaper);
}
}
@Override
public void onFailure(Call<R_CatModelResponse> call, Throwable t) {
Toast.makeText(PostShow_page.this, "Failed", Toast.LENGTH_SHORT).show();
}
});
}
If you open above link, you see in this post has another link , (another link into above post link LINK ), i want when click on other links into posts. 如果你打开上面的链接,你会在这篇帖子中看到另一个链接 ,(上面链接到LINK的另一个链接),我想点击其他链接进入帖子。 open this links into my application , not web browser .
打开此链接到我的应用程序 , 而不是Web浏览器 。
For this job i know i should use Deep Link , and i added this codes into my manifest
and activity
. 对于这项工作,我知道我应该使用Deep Link ,并将此代码添加到我的
manifest
和activity
。
<activity
android:name=".Activities.PostShow_page"
android:screenOrientation="portrait"
android:theme="@style/AppThemeWithStatus">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.kolony.ir"
android:scheme="http" />
<data
android:host="kolony.ir"
android:scheme="http" />
</intent-filter>
</activity>
I want show post content into PostShow_page activity, and when click on links again open this post into this activity
! 我希望将帖子内容显示在PostShow_page活动中,当再次点击链接时,请将此帖子打开到此
activity
!
My POJO class (with setter and getter) : 我的POJO课程 (带有setter和getter):
public class R_CatModel {
@SerializedName("id")
public Integer id;
@SerializedName("type")
public String type;
@SerializedName("slug")
public String slug;
@SerializedName("url")
public String url;
@SerializedName("status")
public String status;
@SerializedName("title")
public String title;
@SerializedName("title_plain")
public String title_plain;
@SerializedName("content")
public String content;
@SerializedName("excerpt")
public String excerpt;
@SerializedName("date")
public String date;
@SerializedName("modified")
public String modified;
@SerializedName("comment_count")
public int comment_count;
@SerializedName("comment_status")
public String comment_status;
@SerializedName("thumbnail")
public String thumbnail;
@SerializedName("thumbnail_images")
public R_CatThumbnailImages thumbnail_images;
@SerializedName("categories")
public List<R_CatCategory> categories;
@SerializedName("author")
public R_CatAuthor catAuthor;
@SerializedName("comments")
public List<R_PostComment> comments;
How can i it? 我怎么样? How can open links, into my application not web browser ?
如何打开链接,进入我的应用程序而不是Web浏览器?
Please help me my dear brothers, i really need this. 请帮助我亲爱的兄弟们,我真的需要这个。 Thanks all <3
谢谢所有<3
To make perfect DeepLink with your app to Website, you have to follow some steps. 要使用您的应用程序到网站制作完美的DeepLink,您必须遵循一些步骤。 Which I did and got successfully.
我做了哪些并且成功了。 You need to add few lines inside respective (Which activity you want to open)block in manifest.xml file.
您需要在manifest.xml文件中分别添加几行(您要打开哪个活动)块。
1 Step:- 1步: -
<activity android:name="com.recipe_app.client.RecipeActivity"
android:label="@string/app_name" >
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="recipe-app.com"
android:pathPrefix="/recipe" />
</intent-filter>
</activity>
2 Step :- 2步骤: -
Add few lines in .java file. 在.java文件中添加几行。 Which loads that view.
哪个加载了该视图。 Add below code inside onCreate()
在onCreate()中添加以下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipe);
onNewIntent(getIntent());
try {
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
if (Intent.ACTION_VIEW.equals(action) && data != null) {
String articleId = data.getLastPathSegment();
data.getPathSegments();
String value = data.getPath();
/* Here you will receive that complete URL from which currently opend URL you come.*/
}
}catch (Exception e){e.printStackTrace();}
}
For more clear details you can visit this http://search-codelabs.appspot.com/codelabs/android-deep-linking#1 . 有关更详细的信息,请访问 http://search-codelabs.appspot.com/codelabs/android-deep-linking#1 。 This helped me a lot.
这对我帮助很大。 Really nice article and nicely explained for beginners.
非常好的文章,并为初学者很好地解释。
If this answer helps you then please up-vote my answer. 如果这个答案对你有帮助,请向我投票。 Thank You.
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.